summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeonah Moon <seonah1.moon@samsung.com>2017-04-14 09:25:24 +0900
committerSeonah Moon <seonah1.moon@samsung.com>2017-04-14 09:25:47 +0900
commitc09bd15bff1787c96cd20242f40ffc5fdb5199a8 (patch)
treeb75efd655c0f2db7ea56f4d9ce1218bb536be4c2
parent76138f8de1ccd42c6d268e9b3de037365a42fad8 (diff)
downloadbind-c09bd15bff1787c96cd20242f40ffc5fdb5199a8.tar.gz
bind-c09bd15bff1787c96cd20242f40ffc5fdb5199a8.tar.bz2
bind-c09bd15bff1787c96cd20242f40ffc5fdb5199a8.zip
Change-Id: I910893d3a9750f889f5612bab012b834db1e6e16 Signed-off-by: Seonah Moon <seonah1.moon@samsung.com>
-rw-r--r--config.h.win32411
-rw-r--r--configure.in18
-rw-r--r--contrib/README65
-rwxr-xr-xcontrib/dane/mkdane.sh137
-rw-r--r--contrib/dane/tlsa6698.pem26
-rw-r--r--contrib/dlz/bin/dlzbdb/Makefile.in62
-rw-r--r--contrib/dlz/bin/dlzbdb/dlzbdb.c1264
-rw-r--r--contrib/dlz/config.dlz.in500
-rw-r--r--contrib/dlz/drivers/dlz_bdb_driver.c800
-rw-r--r--contrib/dlz/drivers/dlz_bdbhpt_driver.c865
-rw-r--r--contrib/dlz/drivers/dlz_dlopen_driver.c0
-rw-r--r--contrib/dlz/drivers/dlz_drivers.c157
-rw-r--r--contrib/dlz/drivers/dlz_filesystem_driver.c1067
-rw-r--r--contrib/dlz/drivers/dlz_ldap_driver.c1341
-rw-r--r--contrib/dlz/drivers/dlz_mysql_driver.c1079
-rw-r--r--contrib/dlz/drivers/dlz_odbc_driver.c1572
-rw-r--r--contrib/dlz/drivers/dlz_postgres_driver.c1381
-rw-r--r--contrib/dlz/drivers/dlz_stub_driver.c336
-rw-r--r--contrib/dlz/drivers/include/dlz/dlz_bdb_driver.h45
-rw-r--r--contrib/dlz/drivers/include/dlz/dlz_bdbhpt_driver.h45
-rw-r--r--contrib/dlz/drivers/include/dlz/dlz_dlopen_driver.h0
-rw-r--r--contrib/dlz/drivers/include/dlz/dlz_drivers.h30
-rw-r--r--contrib/dlz/drivers/include/dlz/dlz_filesystem_driver.h45
-rw-r--r--contrib/dlz/drivers/include/dlz/dlz_ldap_driver.h45
-rw-r--r--contrib/dlz/drivers/include/dlz/dlz_mysql_driver.h45
-rw-r--r--contrib/dlz/drivers/include/dlz/dlz_odbc_driver.h45
-rw-r--r--contrib/dlz/drivers/include/dlz/dlz_postgres_driver.h45
-rw-r--r--contrib/dlz/drivers/include/dlz/dlz_stub_driver.h45
-rw-r--r--contrib/dlz/drivers/include/dlz/sdlz_helper.h117
-rw-r--r--contrib/dlz/drivers/rules.in50
-rw-r--r--contrib/dlz/drivers/sdlz_helper.c514
-rw-r--r--contrib/dlz/example/Makefile16
-rw-r--r--contrib/dlz/example/README243
-rw-r--r--contrib/dlz/example/dlz_example.c760
-rw-r--r--contrib/dlz/example/named.conf63
-rw-r--r--contrib/dlz/example/win32/DLLMain.c48
-rw-r--r--contrib/dlz/example/win32/dxdriver.def20
-rw-r--r--contrib/dlz/example/win32/dxdriver.dsp121
-rw-r--r--contrib/dlz/example/win32/dxdriver.dsw29
-rw-r--r--contrib/dlz/example/win32/dxdriver.mak298
-rw-r--r--contrib/dlz/modules/bdbhpt/Makefile18
-rw-r--r--contrib/dlz/modules/bdbhpt/README.md86
-rw-r--r--contrib/dlz/modules/bdbhpt/dlz_bdbhpt_dynamic.c827
-rw-r--r--contrib/dlz/modules/bdbhpt/testing/README11
-rwxr-xr-xcontrib/dlz/modules/bdbhpt/testing/bdbhpt-populate.pl232
-rw-r--r--contrib/dlz/modules/bdbhpt/testing/dns-data.txt19
-rw-r--r--contrib/dlz/modules/bdbhpt/testing/named.conf40
-rw-r--r--contrib/dlz/modules/common/dlz_dbi.c482
-rw-r--r--contrib/dlz/modules/filesystem/Makefile20
-rw-r--r--contrib/dlz/modules/filesystem/dir.c116
-rw-r--r--contrib/dlz/modules/filesystem/dir.h47
-rw-r--r--contrib/dlz/modules/filesystem/dlz_filesystem_dynamic.c976
-rw-r--r--contrib/dlz/modules/include/dlz_dbi.h118
-rw-r--r--contrib/dlz/modules/include/dlz_list.h40
-rw-r--r--contrib/dlz/modules/include/dlz_minimal.h299
-rw-r--r--contrib/dlz/modules/include/dlz_pthread.h41
-rw-r--r--contrib/dlz/modules/ldap/Makefile21
-rw-r--r--contrib/dlz/modules/ldap/dlz_ldap_dynamic.c1219
-rw-r--r--contrib/dlz/modules/ldap/testing/README10
-rw-r--r--contrib/dlz/modules/ldap/testing/dlz.schema187
-rw-r--r--contrib/dlz/modules/ldap/testing/example.ldif168
-rw-r--r--contrib/dlz/modules/ldap/testing/named.conf46
-rw-r--r--contrib/dlz/modules/ldap/testing/slapd.conf44
-rw-r--r--contrib/dlz/modules/mysql/Makefile21
-rw-r--r--contrib/dlz/modules/mysql/dlz_mysql_dynamic.c1105
-rw-r--r--contrib/dlz/modules/mysql/testing/README7
-rw-r--r--contrib/dlz/modules/mysql/testing/dlz.data11
-rw-r--r--contrib/dlz/modules/mysql/testing/dlz.schema30
-rw-r--r--contrib/dlz/modules/mysql/testing/named.conf49
-rw-r--r--contrib/dlz/modules/mysqldyn/Makefile21
-rw-r--r--contrib/dlz/modules/mysqldyn/README60
-rw-r--r--contrib/dlz/modules/mysqldyn/dlz_mysqldyn_mod.c1706
-rw-r--r--contrib/dlz/modules/mysqldyn/testing/README11
-rw-r--r--contrib/dlz/modules/mysqldyn/testing/dlz.data18
-rw-r--r--contrib/dlz/modules/mysqldyn/testing/dlz.schema31
-rw-r--r--contrib/dlz/modules/mysqldyn/testing/named.conf42
-rw-r--r--contrib/dlz/modules/perl/Makefile33
-rw-r--r--contrib/dlz/modules/perl/README9
-rw-r--r--contrib/dlz/modules/perl/dlz_perl_callback.xs75
-rw-r--r--contrib/dlz/modules/perl/dlz_perl_callback_clientinfo.xs81
-rw-r--r--contrib/dlz/modules/perl/dlz_perl_driver.c738
-rw-r--r--contrib/dlz/modules/perl/dlz_perl_driver.h24
-rw-r--r--contrib/dlz/modules/perl/testing/dlz_perl_example.pm177
-rw-r--r--contrib/dlz/modules/perl/testing/named.conf31
-rw-r--r--contrib/dlz/modules/sqlite3/Makefile21
-rw-r--r--contrib/dlz/modules/sqlite3/dlz_sqlite3_dynamic.c1106
-rw-r--r--contrib/dlz/modules/sqlite3/testing/README10
-rw-r--r--contrib/dlz/modules/sqlite3/testing/dlz.data18
-rw-r--r--contrib/dlz/modules/sqlite3/testing/dlz.schema28
-rw-r--r--contrib/dlz/modules/sqlite3/testing/named.conf48
-rw-r--r--contrib/dlz/modules/wildcard/Makefile20
-rw-r--r--contrib/dlz/modules/wildcard/README31
-rw-r--r--contrib/dlz/modules/wildcard/dlz_wildcard_dynamic.c729
-rw-r--r--contrib/dlz/modules/wildcard/testing/named.conf58
-rw-r--r--contrib/dnsperf-2.1.0.0-1/Makefile.in55
-rw-r--r--contrib/dnsperf-2.1.0.0-1/README21
-rw-r--r--contrib/dnsperf-2.1.0.0-1/RELEASE_NOTES183
-rw-r--r--contrib/dnsperf-2.1.0.0-1/aclocal.m42
-rw-r--r--contrib/dnsperf-2.1.0.0-1/acx_pthread.m4242
-rw-r--r--contrib/dnsperf-2.1.0.0-1/config.guess1447
-rw-r--r--contrib/dnsperf-2.1.0.0-1/config.sub1555
-rwxr-xr-xcontrib/dnsperf-2.1.0.0-1/configure4940
-rw-r--r--contrib/dnsperf-2.1.0.0-1/configure.in73
-rw-r--r--contrib/dnsperf-2.1.0.0-1/contrib/queryparse/INSTALL48
-rw-r--r--contrib/dnsperf-2.1.0.0-1/contrib/queryparse/USAGE52
-rwxr-xr-xcontrib/dnsperf-2.1.0.0-1/contrib/queryparse/queryparse118
-rw-r--r--contrib/dnsperf-2.1.0.0-1/contrib/queryparse/queryparse.150
-rw-r--r--contrib/dnsperf-2.1.0.0-1/datafile.c275
-rw-r--r--contrib/dnsperf-2.1.0.0-1/datafile.h44
-rw-r--r--contrib/dnsperf-2.1.0.0-1/dns.c848
-rw-r--r--contrib/dnsperf-2.1.0.0-1/dns.h66
-rw-r--r--contrib/dnsperf-2.1.0.0-1/dnsperf.1313
-rw-r--r--contrib/dnsperf-2.1.0.0-1/dnsperf.c1167
-rw-r--r--contrib/dnsperf-2.1.0.0-1/doc/caching-dns-performance.pdfbin70898 -> 0 bytes
-rw-r--r--contrib/dnsperf-2.1.0.0-1/doc/dnsperf.pdfbin204284 -> 0 bytes
-rw-r--r--contrib/dnsperf-2.1.0.0-1/doc/resperf.pdfbin254854 -> 0 bytes
-rwxr-xr-xcontrib/dnsperf-2.1.0.0-1/install-sh250
-rw-r--r--contrib/dnsperf-2.1.0.0-1/log.c63
-rw-r--r--contrib/dnsperf-2.1.0.0-1/log.h32
-rw-r--r--contrib/dnsperf-2.1.0.0-1/net.c187
-rw-r--r--contrib/dnsperf-2.1.0.0-1/net.h53
-rw-r--r--contrib/dnsperf-2.1.0.0-1/opt.c240
-rw-r--r--contrib/dnsperf-2.1.0.0-1/opt.h40
-rw-r--r--contrib/dnsperf-2.1.0.0-1/os.c132
-rw-r--r--contrib/dnsperf-2.1.0.0-1/os.h34
-rwxr-xr-xcontrib/dnsperf-2.1.0.0-1/resperf-report96
-rw-r--r--contrib/dnsperf-2.1.0.0-1/resperf.1598
-rw-r--r--contrib/dnsperf-2.1.0.0-1/resperf.c745
-rw-r--r--contrib/dnsperf-2.1.0.0-1/util.h122
-rw-r--r--contrib/dnsperf-2.1.0.0-1/version.h5
-rw-r--r--contrib/idn/README.idnkit96
-rw-r--r--contrib/idn/idnkit-1.0-src/ChangeLog856
-rw-r--r--contrib/idn/idnkit-1.0-src/DISTFILES191
-rw-r--r--contrib/idn/idnkit-1.0-src/INSTALL309
-rw-r--r--contrib/idn/idnkit-1.0-src/INSTALL.ja310
-rw-r--r--contrib/idn/idnkit-1.0-src/LICENSE.txt39
-rw-r--r--contrib/idn/idnkit-1.0-src/Makefile.in79
-rw-r--r--contrib/idn/idnkit-1.0-src/NEWS186
-rw-r--r--contrib/idn/idnkit-1.0-src/README159
-rw-r--r--contrib/idn/idnkit-1.0-src/README.ja151
-rw-r--r--contrib/idn/idnkit-1.0-src/acconfig.h53
-rw-r--r--contrib/idn/idnkit-1.0-src/aclocal.m4472
-rwxr-xr-xcontrib/idn/idnkit-1.0-src/config.guess1317
-rwxr-xr-xcontrib/idn/idnkit-1.0-src/config.sub1411
-rwxr-xr-xcontrib/idn/idnkit-1.0-src/configure3517
-rw-r--r--contrib/idn/idnkit-1.0-src/configure.in711
-rw-r--r--contrib/idn/idnkit-1.0-src/include/Makefile.in65
-rw-r--r--contrib/idn/idnkit-1.0-src/include/config.h.in181
-rw-r--r--contrib/idn/idnkit-1.0-src/include/config.h.win45
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/Makefile.in103
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/aliaslist.h114
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/api.h298
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/assert.h61
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/checker.h171
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/converter.h258
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/debug.h69
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/delimitermap.h123
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/export.h58
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/filechecker.h136
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/filemapper.h137
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/localencoding.h79
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/log.h107
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/logmacro.h72
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/mapper.h159
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/mapselector.h165
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/nameprep.h185
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/normalizer.h155
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/punycode.h70
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/race.h72
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/res.h309
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/resconf.h323
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/result.h86
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/strhash.h123
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/ucs4.h103
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/ucsmap.h131
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/ucsset.h145
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/unicode.h164
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/unormalize.h86
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/utf8.h137
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/util.h98
-rw-r--r--contrib/idn/idnkit-1.0-src/include/idn/version.h70
-rw-r--r--contrib/idn/idnkit-1.0-src/include/mdn/Makefile.in83
-rw-r--r--contrib/idn/idnkit-1.0-src/include/mdn/api.h91
-rw-r--r--contrib/idn/idnkit-1.0-src/include/mdn/localencoding.h49
-rw-r--r--contrib/idn/idnkit-1.0-src/include/mdn/log.h92
-rw-r--r--contrib/idn/idnkit-1.0-src/include/mdn/res.h121
-rw-r--r--contrib/idn/idnkit-1.0-src/include/mdn/resconf.h150
-rw-r--r--contrib/idn/idnkit-1.0-src/include/mdn/result.h97
-rw-r--r--contrib/idn/idnkit-1.0-src/include/mdn/utf8.h70
-rw-r--r--contrib/idn/idnkit-1.0-src/include/mdn/version.h66
-rwxr-xr-xcontrib/idn/idnkit-1.0-src/install-sh250
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/Makefile.in309
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/aliaslist.c355
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/aliaslist.sh35
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/api.c257
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/checker.c446
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/converter.c1244
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/debug.c267
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/delimitermap.c268
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/filechecker.c261
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/filemapper.c347
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/idn.conf.sample.in61
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/localencoding.c123
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/log.c215
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/make.wnt279
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/mapper.c482
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/mapselector.c375
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/nameprep.c357
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/nameprep_template.c137
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/nameprepdata.c2546
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/normalizer.c439
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/punycode.c434
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/race.c427
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/res.c1726
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/resconf.c1477
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/result.c76
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/strhash.c283
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/Makefile.in304
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/api-init1.tsy113
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/api-init2.tsy113
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/api-init3.tsy117
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/api-init4-1.tsy96
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/api-init4-2.tsy96
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/api-init4-3.tsy102
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/api-init5-1.tsy102
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/api-init5-2.tsy102
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/api-init5-3.tsy109
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/api.tsy1009
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/checker.tsy610
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/codeset.h71
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/converter.tsy822
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/delimitermap.tsy257
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/iconvchk.c132
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/mapper.tsy497
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/mapselector.tsy592
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/nameprep.tsy340
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/normalizer.tsy346
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/res.tsy1026
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/resconf.tsy1026
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/setenv.c134
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/setenv.h61
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/testsuite.c578
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/testsuite.h276
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/testutil.c83
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/testutil.h71
-rwxr-xr-xcontrib/idn/idnkit-1.0-src/lib/tests/testygen557
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/tests/ucs4.tsy257
-rwxr-xr-xcontrib/idn/idnkit-1.0-src/lib/tests/utffilter82
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/ucs4.c461
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/ucsmap.c380
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/ucsset.c368
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/unicode.c309
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/unicode_template.c101
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/unicodedata_320.c7916
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/unormalize.c413
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/utf8.c276
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/util.c162
-rw-r--r--contrib/idn/idnkit-1.0-src/lib/version.c54
-rwxr-xr-xcontrib/idn/idnkit-1.0-src/ltconfig3114
-rw-r--r--contrib/idn/idnkit-1.0-src/ltmain.sh4024
-rw-r--r--contrib/idn/idnkit-1.0-src/make.wnt76
-rw-r--r--contrib/idn/idnkit-1.0-src/man/Makefile.in116
-rw-r--r--contrib/idn/idnkit-1.0-src/man/idn.conf.5.in312
-rw-r--r--contrib/idn/idnkit-1.0-src/man/libidnkit.3.in480
-rw-r--r--contrib/idn/idnkit-1.0-src/map/Makefile.in75
-rw-r--r--contrib/idn/idnkit-1.0-src/map/jp.map50
-rwxr-xr-xcontrib/idn/idnkit-1.0-src/mkinstalldirs40
-rw-r--r--contrib/idn/idnkit-1.0-src/patch/bind9/bind-9.2.1-patch5900
-rw-r--r--contrib/idn/idnkit-1.0-src/patch/bind9/bind-9.2.2-patch1169
-rw-r--r--contrib/idn/idnkit-1.0-src/tools/Makefile.in65
-rw-r--r--contrib/idn/idnkit-1.0-src/tools/idnconv/Makefile.in116
-rw-r--r--contrib/idn/idnkit-1.0-src/tools/idnconv/idnconv.1373
-rw-r--r--contrib/idn/idnkit-1.0-src/tools/idnconv/idnconv.c803
-rw-r--r--contrib/idn/idnkit-1.0-src/tools/idnconv/idnslookup.in116
-rw-r--r--contrib/idn/idnkit-1.0-src/tools/idnconv/make.wnt72
-rw-r--r--contrib/idn/idnkit-1.0-src/tools/idnconv/selectiveencode.c127
-rw-r--r--contrib/idn/idnkit-1.0-src/tools/idnconv/selectiveencode.h70
-rw-r--r--contrib/idn/idnkit-1.0-src/tools/idnconv/util.c554
-rw-r--r--contrib/idn/idnkit-1.0-src/tools/idnconv/util.h96
-rw-r--r--contrib/idn/idnkit-1.0-src/tools/make.wnt57
-rw-r--r--contrib/idn/idnkit-1.0-src/tools/rpm/idnkit.spec142
-rw-r--r--contrib/idn/idnkit-1.0-src/tools/runidn/Makefile.in167
-rw-r--r--contrib/idn/idnkit-1.0-src/tools/runidn/resolver.c1056
-rw-r--r--contrib/idn/idnkit-1.0-src/tools/runidn/resolver.h70
-rw-r--r--contrib/idn/idnkit-1.0-src/tools/runidn/runidn.1151
-rw-r--r--contrib/idn/idnkit-1.0-src/tools/runidn/runidn.in109
-rw-r--r--contrib/idn/idnkit-1.0-src/tools/runidn/stub.c387
-rw-r--r--contrib/idn/idnkit-1.0-src/tools/runidn/stub.h94
-rw-r--r--contrib/idn/idnkit-1.0-src/util/Makefile43
-rw-r--r--contrib/idn/idnkit-1.0-src/util/SparseMap.pm575
-rw-r--r--contrib/idn/idnkit-1.0-src/util/UCD.pm194
-rwxr-xr-xcontrib/idn/idnkit-1.0-src/util/generate_nameprep_data.pl405
-rwxr-xr-xcontrib/idn/idnkit-1.0-src/util/generate_normalize_data.pl586
-rw-r--r--contrib/idn/idnkit-1.0-src/win/README.WIN17
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/README.txt665
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/README_j.txt717
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/common/checkdll.c242
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/common/convert.c180
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/common/dump.c118
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/common/encoding.c271
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/common/hook.c224
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/common/make.wnt102
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/common/printf.c138
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/common/wrapcommon.h109
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/config/idnconf.tcl1123
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/config/make.wnt58
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/make.wnt97
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/wsock11/dlldef.h86
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/wsock11/dllfunc.c212
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/wsock11/dllload.c63
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/wsock11/dllmain.c96
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/wsock11/dllstub.c1541
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/wsock11/make.wnt98
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/wsock11/wsock32.def87
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/wsock20/dlldef.h123
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/wsock20/dllfunc.c592
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/wsock20/dllload.c62
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/wsock20/dllmain.c94
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/wsock20/dllstub.c2168
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/wsock20/make.wnt97
-rw-r--r--contrib/idn/idnkit-1.0-src/wsock/wsock20/ws2_32.def120
-rw-r--r--contrib/kasp/README11
-rw-r--r--contrib/kasp/kasp.xml134
-rw-r--r--contrib/kasp/kasp2policy.py209
-rw-r--r--contrib/kasp/policy.good24
-rw-r--r--contrib/nslint-3.0a2/CHANGES208
-rw-r--r--contrib/nslint-3.0a2/FILES20
-rw-r--r--contrib/nslint-3.0a2/INSTALL42
-rw-r--r--contrib/nslint-3.0a2/Makefile.in135
-rw-r--r--contrib/nslint-3.0a2/README14
-rw-r--r--contrib/nslint-3.0a2/VERSION1
-rw-r--r--contrib/nslint-3.0a2/aclocal.m4978
-rwxr-xr-xcontrib/nslint-3.0a2/config.guess1407
-rwxr-xr-xcontrib/nslint-3.0a2/config.sub1504
-rwxr-xr-xcontrib/nslint-3.0a2/configure6885
-rw-r--r--contrib/nslint-3.0a2/configure.in51
-rwxr-xr-xcontrib/nslint-3.0a2/install-sh519
-rw-r--r--contrib/nslint-3.0a2/lbl/gnuc.h49
-rwxr-xr-xcontrib/nslint-3.0a2/mkdep109
-rw-r--r--contrib/nslint-3.0a2/nslint.8497
-rw-r--r--contrib/nslint-3.0a2/nslint.c2971
-rw-r--r--contrib/nslint-3.0a2/savestr.c64
-rw-r--r--contrib/nslint-3.0a2/savestr.h24
-rw-r--r--contrib/nslint-3.0a2/strerror.c71
-rw-r--r--contrib/nslint-3.0a2/version.h3
-rw-r--r--contrib/perftcpdns/Makefile.in25
-rwxr-xr-xcontrib/perftcpdns/configure4342
-rw-r--r--contrib/perftcpdns/configure.in62
-rw-r--r--contrib/perftcpdns/perftcpdns.c2469
-rw-r--r--contrib/query-loc-0.4.0/ADDRESSES16
-rw-r--r--contrib/query-loc-0.4.0/ALGO48
-rw-r--r--contrib/query-loc-0.4.0/INSTALL9
-rw-r--r--contrib/query-loc-0.4.0/Makefile.in42
-rw-r--r--contrib/query-loc-0.4.0/README21
-rw-r--r--contrib/query-loc-0.4.0/USAGE7
-rw-r--r--contrib/query-loc-0.4.0/config.h.in73
-rwxr-xr-xcontrib/query-loc-0.4.0/configure5165
-rw-r--r--contrib/query-loc-0.4.0/configure.in66
-rwxr-xr-xcontrib/query-loc-0.4.0/install-sh323
-rw-r--r--contrib/query-loc-0.4.0/loc.c602
-rw-r--r--contrib/query-loc-0.4.0/loc.h81
-rw-r--r--contrib/query-loc-0.4.0/loc_ntoa.c235
-rw-r--r--contrib/query-loc-0.4.0/query-loc.155
-rw-r--r--contrib/query-loc-0.4.0/query-loc.c98
-rwxr-xr-xcontrib/query-loc-0.4.0/reconf8
-rw-r--r--contrib/queryperf/Makefile.in28
-rw-r--r--contrib/queryperf/README82
-rw-r--r--contrib/queryperf/config.h.in37
-rwxr-xr-xcontrib/queryperf/configure4273
-rw-r--r--contrib/queryperf/configure.in71
-rw-r--r--contrib/queryperf/input/sample.06
-rw-r--r--contrib/queryperf/input/sample.113
-rw-r--r--contrib/queryperf/missing/addrinfo.h100
-rw-r--r--contrib/queryperf/missing/getaddrinfo.c632
-rw-r--r--contrib/queryperf/missing/getnameinfo.c226
-rw-r--r--contrib/queryperf/queryperf.c2237
-rw-r--r--contrib/queryperf/utils/gen-data-queryperf.py113
-rw-r--r--contrib/scripts/check-secure-delegation.pl.in113
-rw-r--r--contrib/scripts/check5011.pl199
-rw-r--r--contrib/scripts/dnssec-keyset.sh210
-rw-r--r--contrib/scripts/named-bootconf.sh298
-rw-r--r--contrib/scripts/nanny.pl46
-rw-r--r--contrib/scripts/zone-edit.sh.in150
-rw-r--r--contrib/sdb/bdb/README37
-rw-r--r--contrib/sdb/bdb/bdb.c246
-rw-r--r--contrib/sdb/bdb/bdb.h31
-rw-r--r--contrib/sdb/bdb/zone2bdb.c187
-rw-r--r--contrib/sdb/dir/dirdb.c198
-rw-r--r--contrib/sdb/dir/dirdb.h16
-rw-r--r--contrib/sdb/ldap/INSTALL.ldap83
-rw-r--r--contrib/sdb/ldap/README.ldap48
-rw-r--r--contrib/sdb/ldap/README.zone2ldap17
-rw-r--r--contrib/sdb/ldap/ldapdb.c690
-rw-r--r--contrib/sdb/ldap/ldapdb.h6
-rw-r--r--contrib/sdb/ldap/zone2ldap.164
-rw-r--r--contrib/sdb/ldap/zone2ldap.c774
-rw-r--r--contrib/sdb/pgsql/pgsqldb.c351
-rw-r--r--contrib/sdb/pgsql/pgsqldb.h16
-rw-r--r--contrib/sdb/pgsql/zonetodb.c283
-rw-r--r--contrib/sdb/sqlite/README.sdb_sqlite67
-rw-r--r--contrib/sdb/sqlite/sqlitedb.c326
-rw-r--r--contrib/sdb/sqlite/sqlitedb.h16
-rw-r--r--contrib/sdb/sqlite/zone2sqlite.c298
-rw-r--r--contrib/sdb/tcl/lookup.tcl42
-rw-r--r--contrib/sdb/tcl/tcldb.c236
-rw-r--r--contrib/sdb/tcl/tcldb.h16
-rw-r--r--contrib/sdb/time/timedb.c146
-rw-r--r--contrib/sdb/time/timedb.h16
-rw-r--r--contrib/zkt-1.1.3/CHANGELOG741
-rw-r--r--contrib/zkt-1.1.3/LICENSE30
-rw-r--r--contrib/zkt-1.1.3/Makefile.in203
-rw-r--r--contrib/zkt-1.1.3/README64
-rw-r--r--contrib/zkt-1.1.3/README.logging103
-rw-r--r--contrib/zkt-1.1.3/TODO32
-rw-r--r--contrib/zkt-1.1.3/config.h.in234
-rw-r--r--contrib/zkt-1.1.3/config_zkt.h120
-rwxr-xr-xcontrib/zkt-1.1.3/configure6078
-rw-r--r--contrib/zkt-1.1.3/configure.ac183
-rw-r--r--contrib/zkt-1.1.3/debug.h66
-rwxr-xr-xcontrib/zkt-1.1.3/distribute.sh82
-rw-r--r--contrib/zkt-1.1.3/dki.c1256
-rw-r--r--contrib/zkt-1.1.3/dki.h196
-rw-r--r--contrib/zkt-1.1.3/doc/KeyRollover.ms95
-rw-r--r--contrib/zkt-1.1.3/doc/KeyRollover.ps304
-rw-r--r--contrib/zkt-1.1.3/doc/draft-gudmundsson-life-of-dnskey-00.txt616
-rw-r--r--contrib/zkt-1.1.3/doc/draft-ietf-dnsop-rfc4641bis-01.txt2128
-rw-r--r--contrib/zkt-1.1.3/doc/rfc4641.txt1963
-rw-r--r--contrib/zkt-1.1.3/doc/rfc5011.txt787
-rw-r--r--contrib/zkt-1.1.3/domaincmp.c332
-rw-r--r--contrib/zkt-1.1.3/domaincmp.h43
-rw-r--r--contrib/zkt-1.1.3/examples/clean.sh13
-rwxr-xr-xcontrib/zkt-1.1.3/examples/flat/dist.sh82
-rw-r--r--contrib/zkt-1.1.3/examples/flat/dnssec.conf45
-rw-r--r--contrib/zkt-1.1.3/examples/flat/dyn.example.net/dnssec.conf3
-rw-r--r--contrib/zkt-1.1.3/examples/flat/dyn.example.net/zktlog-dyn.example.net.161
-rw-r--r--contrib/zkt-1.1.3/examples/flat/dyn.example.net/zone.db135
-rw-r--r--contrib/zkt-1.1.3/examples/flat/dyn.example.net/zone.db.dsigned135
-rw-r--r--contrib/zkt-1.1.3/examples/flat/dyn.example.net/zone.org30
-rw-r--r--contrib/zkt-1.1.3/examples/flat/example.net/dnskey.db33
-rw-r--r--contrib/zkt-1.1.3/examples/flat/example.net/dnssec.conf5
-rw-r--r--contrib/zkt-1.1.3/examples/flat/example.net/zktlog-example.net.687
-rw-r--r--contrib/zkt-1.1.3/examples/flat/example.net/zone.db39
-rw-r--r--contrib/zkt-1.1.3/examples/flat/example.net/zone.db.signed236
-rw-r--r--contrib/zkt-1.1.3/examples/flat/example.net/zone.hosts5
-rw-r--r--contrib/zkt-1.1.3/examples/flat/example.net/zone.localhost2
-rw-r--r--contrib/zkt-1.1.3/examples/flat/keysets/dlvset-sub.example.net.4
-rw-r--r--contrib/zkt-1.1.3/examples/flat/keysets/dsset-example.net.2
-rw-r--r--contrib/zkt-1.1.3/examples/flat/keysets/dsset-sub.example.net.4
-rw-r--r--contrib/zkt-1.1.3/examples/flat/keysets/keyset-example.net.10
-rw-r--r--contrib/zkt-1.1.3/examples/flat/keysets/keyset-sub.example.net.15
-rw-r--r--contrib/zkt-1.1.3/examples/flat/named.conf111
-rw-r--r--contrib/zkt-1.1.3/examples/flat/sub.example.net/dlvset-sub.example.net.2
-rw-r--r--contrib/zkt-1.1.3/examples/flat/sub.example.net/dnskey.db47
-rw-r--r--contrib/zkt-1.1.3/examples/flat/sub.example.net/dnssec.conf7
-rw-r--r--contrib/zkt-1.1.3/examples/flat/sub.example.net/maxhexsalt1
-rw-r--r--contrib/zkt-1.1.3/examples/flat/sub.example.net/maxhexsalt+11
-rw-r--r--contrib/zkt-1.1.3/examples/flat/sub.example.net/zktlog-sub.example.net.218
-rw-r--r--contrib/zkt-1.1.3/examples/flat/sub.example.net/zone.db25
-rw-r--r--contrib/zkt-1.1.3/examples/flat/sub.example.net/zone.db.signed233
l---------contrib/zkt-1.1.3/examples/flat/zkt-ls1
l---------contrib/zkt-1.1.3/examples/flat/zkt-signer1
-rw-r--r--contrib/zkt-1.1.3/examples/flat/zone.conf10
-rw-r--r--contrib/zkt-1.1.3/examples/hierarchical/de/example.de/sub.example.de/dlvset-sub.example.de.12
-rw-r--r--contrib/zkt-1.1.3/examples/hierarchical/de/example.de/sub.example.de/dnssec.conf16
-rw-r--r--contrib/zkt-1.1.3/examples/hierarchical/de/example.de/sub.example.de/parent-sub.example.de.7
-rw-r--r--contrib/zkt-1.1.3/examples/hierarchical/de/example.de/sub.example.de/zone.db25
-rw-r--r--contrib/zkt-1.1.3/examples/hierarchical/de/example.de/sub.example.de/zone.db.signed0
-rw-r--r--contrib/zkt-1.1.3/examples/hierarchical/de/example.de/zone.db38
-rw-r--r--contrib/zkt-1.1.3/examples/hierarchical/de/example.de/zone.db.signed0
-rw-r--r--contrib/zkt-1.1.3/examples/hierarchical/de/example.de/zone.soa10
-rw-r--r--contrib/zkt-1.1.3/examples/hierarchical/dnssec.conf44
-rw-r--r--contrib/zkt-1.1.3/examples/hierarchical/named.conf102
l---------contrib/zkt-1.1.3/examples/hierarchical/zkt-ls1
l---------contrib/zkt-1.1.3/examples/hierarchical/zkt-signer1
-rw-r--r--contrib/zkt-1.1.3/examples/hierarchical/zone.conf10
-rw-r--r--contrib/zkt-1.1.3/examples/views/dnssec-extern.conf39
-rw-r--r--contrib/zkt-1.1.3/examples/views/dnssec-intern.conf39
-rw-r--r--contrib/zkt-1.1.3/examples/views/dnssec-signer-extern7
-rw-r--r--contrib/zkt-1.1.3/examples/views/dnssec-signer-intern7
-rw-r--r--contrib/zkt-1.1.3/examples/views/dnssec-zkt-extern7
-rw-r--r--contrib/zkt-1.1.3/examples/views/dnssec-zkt-intern7
-rw-r--r--contrib/zkt-1.1.3/examples/views/extern/example.net/zone.db33
-rw-r--r--contrib/zkt-1.1.3/examples/views/extern/example.net/zone.db.signed0
-rw-r--r--contrib/zkt-1.1.3/examples/views/extern/zkt-ext.log51
-rw-r--r--contrib/zkt-1.1.3/examples/views/intern/example.net/zone.db33
-rw-r--r--contrib/zkt-1.1.3/examples/views/intern/example.net/zone.db.signed0
-rw-r--r--contrib/zkt-1.1.3/examples/views/intern/zkt-int.log192
-rw-r--r--contrib/zkt-1.1.3/examples/views/named.conf97
-rw-r--r--contrib/zkt-1.1.3/examples/views/named.log17
-rw-r--r--contrib/zkt-1.1.3/examples/views/root.hint45
-rw-r--r--contrib/zkt-1.1.3/examples/views/viewtest.sh20
-rwxr-xr-xcontrib/zkt-1.1.3/examples/zkt-ls.sh12
-rwxr-xr-xcontrib/zkt-1.1.3/examples/zkt-signer.sh12
-rw-r--r--contrib/zkt-1.1.3/log.c485
-rw-r--r--contrib/zkt-1.1.3/log.h77
-rw-r--r--contrib/zkt-1.1.3/man/dnssec-zkt.8485
-rw-r--r--contrib/zkt-1.1.3/man/zkt-conf.8247
-rw-r--r--contrib/zkt-1.1.3/man/zkt-conf.8.html312
-rw-r--r--contrib/zkt-1.1.3/man/zkt-conf.8.org227
-rw-r--r--contrib/zkt-1.1.3/man/zkt-conf.8.pdfbin7672 -> 0 bytes
-rw-r--r--contrib/zkt-1.1.3/man/zkt-keyman.8316
-rw-r--r--contrib/zkt-1.1.3/man/zkt-keyman.8.html383
-rw-r--r--contrib/zkt-1.1.3/man/zkt-keyman.8.pdfbin9642 -> 0 bytes
-rw-r--r--contrib/zkt-1.1.3/man/zkt-ls.8292
-rw-r--r--contrib/zkt-1.1.3/man/zkt-ls.8.html395
-rw-r--r--contrib/zkt-1.1.3/man/zkt-ls.8.pdfbin8176 -> 0 bytes
-rw-r--r--contrib/zkt-1.1.3/man/zkt-signer.8466
-rw-r--r--contrib/zkt-1.1.3/man/zkt-signer.8.html306
-rw-r--r--contrib/zkt-1.1.3/man/zkt-signer.8.pdfbin12556 -> 0 bytes
-rw-r--r--contrib/zkt-1.1.3/misc.c1072
-rw-r--r--contrib/zkt-1.1.3/misc.h87
-rw-r--r--contrib/zkt-1.1.3/ncparse.c325
-rw-r--r--contrib/zkt-1.1.3/ncparse.h41
-rw-r--r--contrib/zkt-1.1.3/nscomm.c228
-rw-r--r--contrib/zkt-1.1.3/nscomm.h52
-rw-r--r--contrib/zkt-1.1.3/rollover.c731
-rw-r--r--contrib/zkt-1.1.3/rollover.h55
-rw-r--r--contrib/zkt-1.1.3/soaserial.c331
-rw-r--r--contrib/zkt-1.1.3/soaserial.h41
-rw-r--r--contrib/zkt-1.1.3/strlist.c166
-rw-r--r--contrib/zkt-1.1.3/strlist.h46
-rw-r--r--contrib/zkt-1.1.3/tags444
-rw-r--r--contrib/zkt-1.1.3/tcap.c343
-rw-r--r--contrib/zkt-1.1.3/tcap.h29
-rw-r--r--contrib/zkt-1.1.3/zconf.c1043
-rw-r--r--contrib/zkt-1.1.3/zconf.h210
-rw-r--r--contrib/zkt-1.1.3/zfparse.c299
-rw-r--r--contrib/zkt-1.1.3/zfparse.h42
-rw-r--r--contrib/zkt-1.1.3/zkt-conf.c360
-rw-r--r--contrib/zkt-1.1.3/zkt-keyman.c722
-rw-r--r--contrib/zkt-1.1.3/zkt-ls.c439
-rw-r--r--contrib/zkt-1.1.3/zkt-signer.c990
-rw-r--r--contrib/zkt-1.1.3/zkt-soaserial.c222
-rw-r--r--contrib/zkt-1.1.3/zkt.c469
-rw-r--r--contrib/zkt-1.1.3/zkt.h47
-rw-r--r--contrib/zkt-1.1.3/zone.c339
-rw-r--r--contrib/zkt-1.1.3/zone.h66
-rw-r--r--doc/Makefile.in18
-rw-r--r--doc/arm/Bv9ARM-book.xml18437
-rw-r--r--doc/arm/Bv9ARM.ch01.html552
-rw-r--r--doc/arm/Bv9ARM.ch02.html150
-rw-r--r--doc/arm/Bv9ARM.ch03.html666
-rw-r--r--doc/arm/Bv9ARM.ch04.html2679
-rw-r--r--doc/arm/Bv9ARM.ch05.html141
-rw-r--r--doc/arm/Bv9ARM.ch06.html13555
-rw-r--r--doc/arm/Bv9ARM.ch07.html375
-rw-r--r--doc/arm/Bv9ARM.ch08.html131
-rw-r--r--doc/arm/Bv9ARM.ch09.html201
-rw-r--r--doc/arm/Bv9ARM.ch10.html152
-rw-r--r--doc/arm/Bv9ARM.ch11.html494
-rw-r--r--doc/arm/Bv9ARM.ch12.html540
-rw-r--r--doc/arm/Bv9ARM.ch13.html180
-rw-r--r--doc/arm/Bv9ARM.conf3
-rw-r--r--doc/arm/Bv9ARM.html421
-rw-r--r--doc/arm/Bv9ARM.pdfbin1280498 -> 0 bytes
-rw-r--r--doc/arm/Makefile.in56
-rw-r--r--doc/arm/README-SGML57
-rw-r--r--doc/arm/catz.xml274
-rw-r--r--doc/arm/dlz.xml145
-rw-r--r--doc/arm/dnssec.xml286
-rw-r--r--doc/arm/dyndb.xml96
-rw-r--r--doc/arm/isc-logo.eps5022
-rw-r--r--doc/arm/isc-logo.pdf1193
-rw-r--r--doc/arm/libdns.xml523
-rw-r--r--doc/arm/logging-categories.xml378
-rw-r--r--doc/arm/man.arpaname.html78
-rw-r--r--doc/arm/man.ddns-confgen.html182
-rw-r--r--doc/arm/man.delv.html506
-rw-r--r--doc/arm/man.dig.html853
-rw-r--r--doc/arm/man.dnssec-checkds.html109
-rw-r--r--doc/arm/man.dnssec-coverage.html226
-rw-r--r--doc/arm/man.dnssec-dsfromkey.html210
-rw-r--r--doc/arm/man.dnssec-importkey.html184
-rw-r--r--doc/arm/man.dnssec-keyfromlabel.html388
-rw-r--r--doc/arm/man.dnssec-keygen.html462
-rw-r--r--doc/arm/man.dnssec-keymgr.html314
-rw-r--r--doc/arm/man.dnssec-revoke.html131
-rw-r--r--doc/arm/man.dnssec-settime.html274
-rw-r--r--doc/arm/man.dnssec-signzone.html564
-rw-r--r--doc/arm/man.dnssec-verify.html161
-rw-r--r--doc/arm/man.dnstap-read.html104
-rw-r--r--doc/arm/man.genrandom.html99
-rw-r--r--doc/arm/man.host.html289
-rw-r--r--doc/arm/man.isc-hmac-fixup.html109
-rw-r--r--doc/arm/man.lwresd.html250
-rw-r--r--doc/arm/man.mdig.html464
-rw-r--r--doc/arm/man.named-checkconf.html148
-rw-r--r--doc/arm/man.named-checkzone.html335
-rw-r--r--doc/arm/man.named-journalprint.html99
-rw-r--r--doc/arm/man.named-nzd2nzf.html100
-rw-r--r--doc/arm/man.named-rrchecker.html101
-rw-r--r--doc/arm/man.named.conf.html711
-rw-r--r--doc/arm/man.named.html381
-rw-r--r--doc/arm/man.nsec3hash.html104
-rw-r--r--doc/arm/man.nslookup.html351
-rw-r--r--doc/arm/man.nsupdate.html673
-rw-r--r--doc/arm/man.pkcs11-destroy.html121
-rw-r--r--doc/arm/man.pkcs11-keygen.html145
-rw-r--r--doc/arm/man.pkcs11-list.html119
-rw-r--r--doc/arm/man.pkcs11-tokens.html92
-rw-r--r--doc/arm/man.rndc-confgen.html221
-rw-r--r--doc/arm/man.rndc.conf.html243
-rw-r--r--doc/arm/man.rndc.html792
-rw-r--r--doc/arm/managed-keys.xml90
-rw-r--r--doc/arm/notes-wrapper.xml15
-rw-r--r--doc/arm/notes.conf3
-rw-r--r--doc/arm/notes.html141
-rw-r--r--doc/arm/notes.pdfbin54130 -> 0 bytes
-rw-r--r--doc/arm/notes.xml156
-rw-r--r--doc/arm/noteversion.xml.in9
-rw-r--r--doc/arm/pkcs11.xml628
-rw-r--r--doc/arm/pkgversion.xml.in9
-rw-r--r--doc/arm/releaseinfo.xml.in9
-rw-r--r--doc/doxygen/Doxyfile.in1269
-rw-r--r--doc/doxygen/Makefile.in30
-rw-r--r--doc/doxygen/doxygen-input-filter.in52
-rw-r--r--doc/doxygen/isc-footer.html20
-rw-r--r--doc/doxygen/isc-header.html18
-rw-r--r--doc/doxygen/mainpage85
-rw-r--r--doc/misc/Makefile.in41
-rw-r--r--doc/misc/dnssec86
-rw-r--r--doc/misc/format-options.pl40
-rw-r--r--doc/misc/ipv6115
-rw-r--r--doc/misc/migration269
-rw-r--r--doc/misc/migration-4to959
-rw-r--r--doc/misc/options830
-rw-r--r--doc/misc/rfc-compliance162
-rw-r--r--doc/misc/roadmap49
-rw-r--r--doc/misc/sdb171
-rw-r--r--doc/misc/sort-options.pl42
-rw-r--r--doc/misc/tcp-fast-open30
-rw-r--r--doc/tex/Makefile.in17
-rw-r--r--doc/tex/armstyle.sty.in107
-rw-r--r--doc/tex/notestyle.sty17
-rw-r--r--doc/xsl/Makefile.in18
-rw-r--r--doc/xsl/arm-param.xsl119
-rw-r--r--doc/xsl/copyright.xsl62
-rw-r--r--doc/xsl/graphics/caution.eps1348
-rw-r--r--doc/xsl/graphics/caution.pdfbin2924 -> 0 bytes
-rw-r--r--doc/xsl/graphics/important.eps1348
-rw-r--r--doc/xsl/graphics/important.pdfbin2924 -> 0 bytes
-rw-r--r--doc/xsl/graphics/note.eps1387
-rw-r--r--doc/xsl/graphics/note.pdfbin1814 -> 0 bytes
-rw-r--r--doc/xsl/graphics/tip.eps1503
-rw-r--r--doc/xsl/graphics/tip.pdfbin3699 -> 0 bytes
-rw-r--r--doc/xsl/graphics/warning.eps1348
-rw-r--r--doc/xsl/graphics/warning.pdfbin2924 -> 0 bytes
-rw-r--r--doc/xsl/isc-docbook-chunk.xsl.in69
-rw-r--r--doc/xsl/isc-docbook-html.xsl.in62
-rw-r--r--doc/xsl/isc-docbook-text.xsl42
-rw-r--r--doc/xsl/isc-manpage.xsl.in138
-rw-r--r--doc/xsl/isc-notes-html.xsl.in61
-rw-r--r--doc/xsl/notes-param.xsl20
-rw-r--r--doc/xsl/pre-latex.xsl49
-rw-r--r--docutil/HTML_COPYRIGHT7
-rw-r--r--docutil/MAN_COPYRIGHT7
-rw-r--r--docutil/patch-db2latex-duplicate-template-bug77
-rw-r--r--docutil/patch-db2latex-nested-param-bug18
-rw-r--r--docutil/patch-db2latex-xsltproc-title-bug29
-rw-r--r--packaging/bind.spec2
660 files changed, 1 insertions, 264371 deletions
diff --git a/config.h.win32 b/config.h.win32
deleted file mode 100644
index 6f3f7248..00000000
--- a/config.h.win32
+++ /dev/null
@@ -1,411 +0,0 @@
-/*
- * Copyright (C) 1999-2001, 2004, 2006-2009, 2011-2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-/*
- * win32 configuration file
- * All definitions, declarations, macros and includes are
- * specific to the requirements of the Windows NT and Windows 2000
- * platforms
- */
-
-/* Define to empty if the keyword does not work. */
-/* #undef const */
-
-/* Define as __inline if that's what the C compiler calls it. */
-#define inline __inline
-
-/* Define to `unsigned int/__int64' if <sys/types.h> doesn't define. */
-/* #undef size_t */
-
-/*
- * ANSI C compliance enabled
- */
-#define __STDC__ 1
-
-/*
- * Silence compiler warnings about using strcpy and friends.
- */
-#define _CRT_SECURE_NO_DEPRECATE 1
-
-/*
- * Use 32 bit time.
- */
-#ifndef _WIN64
-#define _USE_32BIT_TIME_T 1
-#endif
-
-/*
- * Minimum version is Windows XP
- */
-#ifndef _WIN32_WINNT
-#define _WIN32_WINNT 0x0501
-#endif
-#if _WIN32_WINNT < 0x0501
-#error Minimum Target environment is Windows XP and Windows Server 2003
-#endif
-#ifndef NTDDI_VERSION
-#define NTDDI_VERSION 0x05010100
-#endif
-#if NTDDI_VERSION < 0x05010100
-#error Minimum Target environment is Windows XP SP1 and Windows Server 2003
-#endif
-
-/* Define if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Define if you can safely include both <sys/time.h> and <time.h>. */
-#define TIME_WITH_SYS_TIME 1
-
-/* define on DEC OSF to enable 4.4BSD style sa_len support */
-/* #undef _SOCKADDR_LEN */
-
-/* define if your system needs pthread_init() before using pthreads */
-/* #undef NEED_PTHREAD_INIT */
-
-/* define if your system has sigwait() */
-/* #undef HAVE_SIGWAIT */
-
-/* define on Solaris to get sigwait() to work using pthreads semantics */
-/* #undef _POSIX_PTHREAD_SEMANTICS */
-
-/* define if LinuxThreads is in use */
-/* #undef HAVE_LINUXTHREADS */
-
-/* define if catgets() is available */
-/* #undef HAVE_CATGETS */
-
-/* define if you have the NET_RT_IFLIST sysctl variable. */
-#define HAVE_IFLIST_SYSCTL 1
-
-/* define if you need to #define _XPG4_2 before including sys/socket.h */
-/* #undef NEED_XPG4_2_BEFORE_SOCKET_H */
-
-/* define if you need to #define _XOPEN_SOURCE_ENTENDED before including
- * sys/socket.h
- */
-/* #undef NEED_XSE_BEFORE_SOCKET_H */
-
-/* Define if you have the <fcntl.h> header file. */
-#define HAVE_FCNTL_H 1
-
-/* Define if you have the <sys/sockio.h> header file. */
-#define HAVE_SYS_SOCKIO_H 1
-
-/* Define if you have the <sys/time.h> header file. */
-#define HAVE_SYS_TIME_H 1
-
-/* Define if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1
-
-/* Define if you have the c_r library (-lc_r). */
-/* #undef HAVE_LIBC_R */
-
-/* Define if you have the nsl library (-lnsl). */
-/* #undef HAVE_LIBNSL */
-
-/* Define if you have the pthread library (-lpthread). */
-/* #undef HAVE_LIBPTHREAD */
-
-/* Define if you have the socket library (-lsocket). */
-/* #undef HAVE_LIBSOCKET */
-
-/* Define if you have h_errno */
-#define HAVE_H_ERRNO
-
-/* Define if you have RSA_generate_key(). */
-#define HAVE_RSA_GENERATE_KEY
-
-/* Define if you have DSA_generate_parameters(). */
-#define HAVE_DSA_GENERATE_PARAMETERS
-
-/* Define if you have DH_generate_parameters(). */
-#define HAVE_DH_GENERATE_PARAMETERS
-
-/* Define if you have getpassphrase in the C library. */
-#define HAVE_GETPASSPHRASE
-
-char *getpassphrase(const char *);
-
-/*
- * Define to 1 if you want to use the DLZ "dlopen" driver
- * (which has the same name on windows even though it uses
- * LoadLibrary() instead of dlopen()).
- */
-#define ISC_DLZ_DLOPEN 1
-
-#define WANT_IPV6
-
-#define S_IFMT _S_IFMT /* file type mask */
-#define S_IFDIR _S_IFDIR /* directory */
-#define S_IFCHR _S_IFCHR /* character special */
-#define S_IFIFO _S_IFIFO /* pipe */
-#define S_IFREG _S_IFREG /* regular */
-#define S_IREAD _S_IREAD /* read permission, owner */
-#define S_IWRITE _S_IWRITE /* write permission, owner */
-#define S_IEXEC _S_IEXEC /* execute/search permission, owner */
-
-#define O_RDONLY _O_RDONLY
-#define O_WRONLY _O_WRONLY
-#define O_RDWR _O_RDWR
-#define O_APPEND _O_APPEND
-#define O_CREAT _O_CREAT
-#define O_TRUNC _O_TRUNC
-#define O_EXCL _O_EXCL
-
-/* open() under unix allows setting of read/write permissions
- * at the owner, group and other levels. These don't exist in NT
- * We'll just map them all to the NT equivalent
- */
-
-#define S_IRUSR _S_IREAD /* Owner read permission */
-#define S_IWUSR _S_IWRITE /* Owner write permission */
-#define S_IRGRP _S_IREAD /* Group read permission */
-#define S_IWGRP _S_IWRITE /* Group write permission */
-#define S_IROTH _S_IREAD /* Other read permission */
-#define S_IWOTH _S_IWRITE /* Other write permission */
-
-
-/*
- * WIN32 specials until some other way of dealing with these is decided.
- */
-
-#if _MSC_VER < 1900
-#define snprintf _snprintf
-#endif
-#if _MSC_VER <= 1400
-#define vsnprintf _vsnprintf
-#endif
-#define strcasecmp _stricmp
-#define strncasecmp _strnicmp
-#define strdup _strdup
-#define sopen _sopen
-#define isascii __isascii
-#ifndef _WIN64
-#define stat _stat
-#define fstat _fstat
-#else
-#define stat _stat64
-#define fstat _fstat64
-#endif
-#define fileno _fileno
-#define unlink _unlink
-#define chdir _chdir
-#define mkdir _mkdir
-#define rmdir _rmdir
-#define getcwd _getcwd
-#define utime _utime
-#define utimbuf _utimbuf
-#ifndef _WIN64
-#define lseek _lseek
-#else
-#define lseek _lseeki64
-#endif
-
-/* #define EAFNOSUPPORT EINVAL */
-#define chmod _chmod
-#define getpid _getpid
-#define getppid _getpid /* WARNING!!! For now this gets the same pid */
-#define random rand /* Random number generator */
-#define srandom srand /* Random number generator seeding */
-/* for the config file */
-typedef unsigned int uid_t; /* user id */
-typedef unsigned int gid_t; /* group id */
-typedef long pid_t; /* PID */
-#ifndef _WIN64
-typedef int ssize_t;
-typedef long off_t;
-#else
-typedef __int64 ssize_t;
-#ifndef _AFX
-/* BINDInstall defines it with another type but doesn't use it */
-typedef __int64 off_t;
-#endif
-#endif
-
-/*
- * Set up the Version Information
- */
-#include <versions.h>
-
-/* We actually are using the CryptAPI and not a device */
-#define PATH_RANDOMDEV "CryptAPI"
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdarg.h>
-
-/*
- * Applications may need to get the configuration path
- */
-#ifndef _USRDLL
-#include <isc/ntpaths.h>
-#endif
-
-#define fdopen _fdopen
-#define read _read
-#define open _open
-#define close _close
-#define write _write
-#include <io.h>
-#define isatty _isatty
-
-#ifndef _WINSOCKAPI_
-#define _WINSOCKAPI_ /* Prevent inclusion of winsock.h in windows.h */
-#endif
-
-/*
- * Make the number of available sockets large
- * The number of sockets needed can get large and memory's cheap
- * This must be defined before winsock2.h gets included as the
- * macro is used there.
- */
-
-#ifndef FD_SETSIZE
-#define FD_SETSIZE 16384
-#endif
-#include <windows.h>
-
-/*
- * main() is hooked
- */
-#define ISC_MAIN_HOOK 1
-
-/*
- * Configure sensible arguments
- */
-@CONFIGARGS@
-
-/*
- * Define if libxml2 is present
- */
-@HAVE_LIBXML2@
-
-/** define if struct addrinfo exists */
-#define HAVE_ADDRINFO
-
-/** define if getaddrinfo() exists */
-#define HAVE_GETADDRINFO
-
-/** define if gai_strerror() exists */
-#define HAVE_GAISTRERROR
-
-/* return type of gai_strerror */
-#define IRS_GAISTRERROR_RETURN_T char *
-
-/* Define to the buffer length type used by getnameinfo(3). */
-#define IRS_GETNAMEINFO_BUFLEN_T DWORD
-
-/* Define to the flags type used by getnameinfo(3). */
-#define IRS_GETNAMEINFO_FLAGS_T int
-
-/* Define to the sockaddr length type used by getnameinfo(3). */
-#define IRS_GETNAMEINFO_SOCKLEN_T socklen_t
-
-/* Define to enable the "filter-aaaa-on-v4" and "filter-aaaa-on-v6" options.
- */
-@ALLOW_FILTER_AAAA@
-
-/* Define to enable "rrset-order fixed" syntax. */
-@DNS_RDATASET_FIXED@
-
-/* Define to 1 if you have the `EVP_sha256' function. */
-@HAVE_EVP_SHA256@
-
-/* Define to 1 if you have the `EVP_sha384' function. */
-@HAVE_EVP_SHA384@
-
-/* Define to 1 if you have the `EVP_sha512' function. */
-@HAVE_EVP_SHA512@
-
-/* Define if OpenSSL includes DSA support */
-@HAVE_OPENSSL_DSA@
-
-/* Define if OpenSSL includes ECDSA support */
-@HAVE_OPENSSL_ECDSA@
-
-/* Define if your OpenSSL version supports GOST. */
-@HAVE_OPENSSL_GOST@
-
-/* Define if your PKCS11 provider supports ECDSA. */
-@HAVE_PKCS11_ECDSA@
-
-/* Define if your PKCS11 provider supports GOST. */
-@HAVE_PKCS11_GOST@
-
-/* Define if GOST private keys are encoded in ASN.1. */
-@PREFER_GOSTASN1@
-
-/* Define if your OpenSSL version supports EVP AES */
-@HAVE_OPENSSL_EVP_AES@
-
-/* Define if your OpenSSL version supports AES */
-@HAVE_OPENSSL_AES@
-
-/* HMAC_*() return ints */
-@HMAC_RETURN_INT@
-
-/* Use AES for Client Cookie generation */
-@AES_CC@
-
-/* Use HMAC-SHA1 for Client Cookie generation */
-@HMAC_SHA1_CC@
-
-/* Use HMAC-SHA256 for Client Cookie generation */
-@HMAC_SHA256_CC@
-
-/* Define to 1 if you have the `readline' function. */
-@HAVE_READLINE@
-
-/* Build with GeoIP support */
-@HAVE_GEOIP@
-
-/* define if idnkit support is to be included. */
-@WITH_IDN@
-
-/* Build with GeoIP City IPv6 support */
-@HAVE_GEOIP_CITY_V6@
-
-/* Build with GeoIP Country IPv6 support */
-@HAVE_GEOIP_V6@
-
-/* Define if zlib was found */
-@HAVE_ZLIB@
-
-/* Define to enable rpz-nsdname rules. */
-@ENABLE_RPZ_NSDNAME@
-
-/* Define to enable rpz-nsip rules. */
-@ENABLE_RPZ_NSIP@
-
-/* From enable developer */
-@ISC_LIST_CHECKINIT@
-
-/* Large system tuning */
-@TUNE_LARGE@
-
-/* Verbose query trace logging */
-@WANT_QUERYTRACE@
-
-/*
- * Define to nothing if C supports flexible array members, and to 1 if it does
- * not. That way, with a declaration like `struct s { int n; double
- * d[FLEXIBLE_ARRAY_MEMBER]; };', the struct hack can be used with pre-C99
- * compilers. When computing the size of such an object, don't use 'sizeof
- * (struct s)' as it overestimates the size. Use 'offsetof (struct s, d)'
- * instead. Don't use 'offsetof (struct s, d[0])', as this doesn't work with
- * MSVC and with C++ compilers.
- */
-#define FLEXIBLE_ARRAY_MEMBER /**/
-
-/* Avoid warnings with strlen() */
-#ifdef _WIN64
-#define strlen(x) (unsigned int) strlen(x)
-#endif
-
-/* Get SRCID */
-#include "srcid.h"
diff --git a/configure.in b/configure.in
index 2054d3fb..f9a8d1b1 100644
--- a/configure.in
+++ b/configure.in
@@ -5135,24 +5135,6 @@ AC_CONFIG_FILES([
bin/tests/virtual-time/Makefile
bin/tests/virtual-time/conf.sh
bin/tools/Makefile
- contrib/scripts/check-secure-delegation.pl
- contrib/scripts/zone-edit.sh
- doc/Makefile
- doc/arm/Makefile
- doc/arm/noteversion.xml
- doc/arm/pkgversion.xml
- doc/arm/releaseinfo.xml
- doc/doxygen/Doxyfile
- doc/doxygen/Makefile
- doc/doxygen/doxygen-input-filter
- doc/misc/Makefile
- doc/tex/Makefile
- doc/tex/armstyle.sty
- doc/xsl/Makefile
- doc/xsl/isc-docbook-chunk.xsl
- doc/xsl/isc-docbook-html.xsl
- doc/xsl/isc-manpage.xsl
- doc/xsl/isc-notes-html.xsl
isc-config.sh
lib/Makefile
lib/bind9/Makefile
diff --git a/contrib/README b/contrib/README
deleted file mode 100644
index 598e9142..00000000
--- a/contrib/README
+++ /dev/null
@@ -1,65 +0,0 @@
-This directory contains contributed scripts, tools, libraries, and other
-useful accessories to BIND 9. Contrib software is not supported by ISC,
-but reported bugs will be fixed as time permits.
-
- - scripts/
-
- Assorted useful scripts, including 'nanny' which monitors
- named and restarts it in the event of a crash, 'zone-edit'
- which enables editing of a dynamic zone, and others
-
- - queryperf/
-
- A DNS query performance testing tool
-
- - perftcpdns/
-
- A performance testing tool for DNS over TCP
-
- - dane/
-
- mkdane.sh generates TLSA records for use with DNS-based
- Authentication of Named Entities (DANE)
-
- - dlz/modules
-
- Dynamically linkable DLZ modules that can be configured into
- named at runtime, enabling access to external data sources including
- LDAP, MySQL, Berkeley DB, perl scripts, etc
-
- - dlz/drivers
-
- Old-style DLZ drivers that can be linked into named at compile
- time. (These are no longer actively maintained and are expected
- to be deprecated eventually.)
-
- - sdb/
-
- SDB drivers: another mechanism for accessing external data
- sources. (These are no longer actively maintained and are
- expected to be deprecated eventually.)
-
- - idn/
-
- Contains source for 'idnkit', which provides support for
- Internationalized Domain Name processing.
-
- - dnsperf-2.1.0.0-1/
-
- DNS server performance testing tools, like 'queryperf' but more
- advanced: 'dnsperf' focuses on authoritative server performance
- and 'resperf' on recursive server performance.
-
- - nslint-3.0a2
-
- A lint-like tool for checking DNS files
-
- - query-loc-0.4.0
-
- A tool for retrieving location information stored in the DNS
-
- - zkt-1.1.2
-
- DNSSEC Zone Key Tools, an alternate method for managing keys
- and signatures
-
diff --git a/contrib/dane/mkdane.sh b/contrib/dane/mkdane.sh
deleted file mode 100755
index fbae4aad..00000000
--- a/contrib/dane/mkdane.sh
+++ /dev/null
@@ -1,137 +0,0 @@
-#!/bin/sh
-# Copyright (C) 2010, 2012 Internet Systems Consortium, Inc. ("ISC")
-#
-# Permission to use, copy, modify, and/or distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Generate a DNS RR from an x.509 certificate
-# Currently only supports TLSA, but can be extended to support
-# other DANE types such as SMIMEA in the future.
-#
-# Requires: openssl
-
-USAGE="$BASENAME [options] <filename>
-Options:
- -f <input format>: PEM | DLR
- -n <name>: record name (default: _443._tcp)
- -o <origin>: zone origin (default: none; name will be relative)
- -m <matching type>: NONE (0) | SHA256 (1) | SHA512 (2)
- -r <RR type>: TLSA
- -s <selector>: FULL (0) | PK (1)
- -t <ttl>: TTL of the TLSA record (default: none)
- -u <certificate usage>: CA (0) | SERVICE (1) | TA (2) | DOMAIN (3)"
-
-NM="_443._tcp"
-CU=2
-SELECTOR=0
-MTYPE=1
-IN=
-FORM=PEM
-TTL=
-RRTYPE=TLSA
-BASENAME=`basename $0`;
-
-while getopts "xn:o:u:s:t:m:i:f:r:" c; do
- case $c in
- x) set -x; DEBUG=-x;;
- m) MTYPE="$OPTARG";;
- n) NM="$OPTARG";;
- o) ORIGIN="$OPTARG";;
- r) RRTYPE="$OPTARG";;
- s) SELECTOR="$OPTARG";;
- t) TTL="$OPTARG";;
- u) CU="$OPTARG";;
- *) echo "$USAGE" 1>&2; exit 1;;
- esac
-done
-shift `expr $OPTIND - 1 || true`
-
-if test "$#" -eq 1; then
- IN=$1
-else
- echo "$USAGE" 1>&2; exit 1
-fi
-
-ORIGIN=`echo $ORIGIN | sed 's/\([^.]$\)/\1./'`
-if [ -n "$ORIGIN" ]; then
- NM=`echo $NM | sed 's/\.$//'`
- NM="$NM.$ORIGIN"
-fi
-
-case "$CU" in
- [Cc][Aa]) CU=0;;
- [Ss][Ee][Rr][Vv]*) CU=1;;
- [Tt][Aa]) CU=2;;
- [Dd][Oo][Mm]*) CU=3;;
- [0123]) ;;
- *) echo "bad certificate usage -u \"$CU\"" 1>&2; exit 1;;
-esac
-
-case "$SELECTOR" in
- [Ff][Uu][Ll][Ll]) SELECTOR=0;;
- [Pp][Kk]) SELECTOR=1;;
- [01]) ;;
- *) echo "bad selector -s \"$SELECTOR\"" 1>&2; exit 1;;
-esac
-
-case "$MTYPE" in
- 0|[Nn][Oo][Nn][Ee]) HASH='od -A n -v -t xC';;
- 1|[Ss][Hh][Aa]256) HASH='openssl dgst -sha256';;
- 2|[Ss][Hh][Aa]512) HASH='openssl dgst -sha512';;
- *) echo "bad matching type -m \"$MTYPE\"" 1>&2; exit 1;;
-esac
-
-case "$FORM" in
- [Pp][Ee][Mm]) FORM=PEM;;
- [Dd][Ll][Rr]) FORM=DLR;;
- *) echo "bad input file format -f \"$FORM\"" 1>&2; exit 1
-esac
-
-case "$RRTYPE" in
- [Tt][Ll][Ss][Aa]) RRTYPE=TLSA;;
- *) echo "invalid RR type" 1>&2; exit 1
-esac
-
-if test -z "$IN" -o ! -s "$IN"; then
- echo "bad input file -i \"$IN\"" 1>&2; exit 1
-fi
-
-echo "; $BASENAME -o$NM -u$CU -s$SELECTOR -m$MTYPE -f$FORM $IN"
-
-(if test "$SELECTOR" = 0; then
- openssl x509 -in "$IN" -inform "$FORM" -outform DER
-else
- openssl x509 -in "$IN" -inform "$FORM" -noout -pubkey \
- | sed -e '/PUBLIC KEY/d' \
- | openssl base64 -d
-fi) \
- | $HASH \
- | awk '
- # format Association Data as in Appendix C of the DANE RFC
- BEGIN {
- print "'"$NM\t\t$TTL\tIN TLSA\t$CU $SELECTOR $MTYPE"' (";
- leader = "\t\t\t\t\t";
- }
- /.+/ {
- gsub(/ +/, "", $0);
- buf = buf $0;
- while (length(buf) >= 36) {
- print leader substr(buf, 1, 36);
- buf = substr(buf, 37);
- }
- }
- END {
- if (length(buf) > 34)
- print leader buf "\n" leader ")";
- else
- print leader buf " )";
- }'
diff --git a/contrib/dane/tlsa6698.pem b/contrib/dane/tlsa6698.pem
deleted file mode 100644
index 9b9c1eeb..00000000
--- a/contrib/dane/tlsa6698.pem
+++ /dev/null
@@ -1,26 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEVDCCArwCCQCrWNJOd60q9jANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQGEwJO
-TDEWMBQGA1UECBMNTm9vcmQtSG9sbGFuZDESMBAGA1UEBxMJQW1zdGVyZGFtMQww
-CgYDVQQKEwNPUzMxIzAhBgNVBAMTGmRhbmUua2lldi5wcmFjdGljdW0ub3MzLm5s
-MB4XDTEyMDExNjE2NTcwM1oXDTIyMDExMzE2NTcwM1owbDELMAkGA1UEBhMCTkwx
-FjAUBgNVBAgTDU5vb3JkLUhvbGxhbmQxEjAQBgNVBAcTCUFtc3RlcmRhbTEMMAoG
-A1UEChMDT1MzMSMwIQYDVQQDExpkYW5lLmtpZXYucHJhY3RpY3VtLm9zMy5ubDCC
-AaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAOYshKWv5Z8KKmslDe5oesjF
-xgT1fSbOshGRQP+sOMS5y76JIwguf4Fia2rV3qDIdxx048qn9hMFSu+jZz5I/+R7
-P3r5h94oGmgjCyS52hqY3L5RGVtg5C/XUXwyjZg+JqgnyHerkU7kwb/erUi9Jb5f
-LEc7qcHLvd2gw3TQ1Yw4nMPW2MIGYuGc92jzJEG399FK6olmznwyoXIqs4Yj0AgC
-mp5HAog/i5d6Gh5Skr+K1yI51AOTN7hqOsYPoAEpBFIXe/F5hgmgWhMPAzRXpSEm
-KfvduOcOKp5lVoc8T3ykauSosXjwX7MZAF4cHH1L1336NANVY8EmqiwzKLkA55kK
-yXh/AdqC90w9S2Z0zOzh/Uxu+eZkT0Y17e2jnYsOL3yOBtrndWITvT1ggxF1vikE
-QrSvxa5vRrdphVoGfBCX5heWJSnhZvIq7hDduYG4zW/xfT1wcjFpA42/vBpEnI0N
-MbxoPF884mFI5C7Ju9TZ8mFWmyW1PB1/wt3/a0ysBQIDAQABMA0GCSqGSIb3DQEB
-BQUAA4IBgQArKr4GPpyGrEofeDU3IJEHnIJ2qcLF0exXZN5SP92r3qs/005v5sug
-VFgKZ4WmY1ldkBMrk9Rzkp6B+giH0v/3ioHH0BS5d3irasnl5pD29anpK7X7q3G4
-V65ptuGL3MsLpvzZ1LCEo082NRSMSV1I/mNZA7iI7B3rJhBUjt1I1j+GUTpFYkaY
-MUjA1duC1zpMNQpCu2YddjQw/GyOX50T6ht2qlKkw1jl6gQAD3lGGDA6ts7qTpqO
-nHTXPBsLe68W3t52lrXi8gb3dxAPVyfhaE1BMvXmkvR69nVuqLQhAAvgMbXY8CIO
-Q2tR+xVP6VlTM8E6JAP53gjl3cWiL9YYLjOVk+JjdEUCILwU8+QP8z8IRSawnDQl
-BwLoo1KzMszLD53izysziCO5KvxhwLa4q9ta9xjtjdqXwpjka4KgGxSBSGjPpPLD
-Ymi//0pZH0Jli/dZGJAtPkJt/h1f8PxqISBx9tqL2DP+LlYNh3dejukzPAW2+461
-ZYnZENteqQM=
------END CERTIFICATE-----
diff --git a/contrib/dlz/bin/dlzbdb/Makefile.in b/contrib/dlz/bin/dlzbdb/Makefile.in
deleted file mode 100644
index ac1d68fb..00000000
--- a/contrib/dlz/bin/dlzbdb/Makefile.in
+++ /dev/null
@@ -1,62 +0,0 @@
-# Copyright (C) 1998-2001, 2016 Internet Systems Consortium, Inc. ("ISC")
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-top_srcdir = @top_srcdir@
-
-VERSION=@BIND9_VERSION@
-
-@BIND9_MAKE_INCLUDES@
-
-DLZINCLUDES = @DLZ_DRIVER_INCLUDES@
-
-CINCLUDES = -I${srcdir}/include -I${srcdir}/unix/include \
- ${ISC_INCLUDES} ${DLZINCLUDES}
-
-CDEFINES = @CONTRIB_DLZ@
-CWARNINGS =
-
-DLZLIBS = @DLZ_DRIVER_LIBS@
-ISCLIBS = ../../../../lib/isc/libisc.@A@
-
-DEPLIBS = ${ISCDEPLIBS}
-
-LIBS = ${ISCLIBS} ${DLZLIBS} @LIBS@
-
-TARGETS = dlzbdb
-
-SRCS = dlzbdb.c
-
-#MANPAGES =
-
-#HTMLPAGES =
-
-#MANOBJS = ${MANPAGES} ${HTMLPAGES}
-
-@BIND9_MAKE_RULES@
-
-dlzbdb.@O@: dlzbdb.c
- ${LIBTOOL_MODE_COMPILE} ${CC} ${ALL_CFLAGS} -DVERSION=\"${VERSION}\" \
- -c ${srcdir}/dlzbdb.c
-
-dlzbdb: dlzbdb.@O@ ${DEPLIBS}
- ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} -o $@ dlzbdb.@O@ ${LIBS}
-
-doc man:: ${MANOBJS}
-
-#docclean manclean maintainer-clean::
-# rm -f ${MANOBJS}
-
-clean distclean maintainer-clean::
- rm -f ${TARGETS}
-
-installdirs:
- $(SHELL) ${top_srcdir}/mkinstalldirs ${DESTDIR}${sbindir}
-# $(SHELL) ${top_srcdir}/mkinstalldirs ${DESTDIR}${mandir}/man8
-
-install:: dlzbdb installdirs
- ${LIBTOOL_MODE_INSTALL} ${INSTALL_PROGRAM} dlzbdb ${DESTDIR}${sbindir}
diff --git a/contrib/dlz/bin/dlzbdb/dlzbdb.c b/contrib/dlz/bin/dlzbdb/dlzbdb.c
deleted file mode 100644
index f4aba743..00000000
--- a/contrib/dlz/bin/dlzbdb/dlzbdb.c
+++ /dev/null
@@ -1,1264 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 1999-2001, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifdef DLZ_BDB
-
-/*
- * exit codes
- * 0 everything ok
- * 1 error parsing command line
- * 2 Missing, too many or invalid combination of command line parameters
- * 3 Unable to open BDB database.
- * 4 Unable to allocate memory for, or create lexer.
- * 5 unable to perform BDB cursor operation
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <isc/buffer.h>
-#include <isc/commandline.h>
-#include <isc/formatcheck.h>
-#include <isc/lex.h>
-#include <isc/mem.h>
-#include <isc/result.h>
-#include <isc/string.h>
-#include <isc/util.h>
-
-#include <db.h>
-
-/* shut up compiler warnings about no previous prototype */
-
-static void
-show_usage(void);
-
-int
-getzone(DB *dbp, const DBT *pkey, const DBT *pdata, DBT *skey);
-
-int
-gethost(DB *dbp, const DBT *pkey, const DBT *pdata, DBT *skey);
-
-void
-bdb_cleanup(void);
-
-isc_result_t
-bdb_opendb(DBTYPE db_type, DB **db_out, const char *db_name, int flags);
-
-void
-put_data(isc_boolean_t dns_data, char *input_key, char *input_data);
-
-void
-insert_data(void);
-
-isc_result_t
-openBDB(void);
-
-isc_result_t
-open_lexer(void);
-
-void
-close_lexer(void);
-
-isc_result_t
-bulk_write(char type, DB *database, DBC *dbcursor, DBT *bdbkey, DBT *bdbdata);
-
-void
-operation_add(void);
-
-void
-operation_bulk(void);
-
-void
-operation_listOrDelete(isc_boolean_t dlt);
-
-
-/*%
- * Maximum length of a single data line that
- * may be inserted into database by this program.
- * If you need to insert a line of data that is more
- * than 10,000 characters change this definition.
- */
-
-#define max_data_len 10000
-
-/*%
- * BDB database names. If you want to use different
- * database names change them here.
- */
-
-#define dlz_data "dns_data"
-#define dlz_zone "dns_zone"
-#define dlz_host "dns_host"
-#define dlz_client "dns_client"
-
-
-/*%
- * Error code returned by BDB secondary index callback functions.
- * This error is returned if the callback function could not create
- * the secondary index for any reason.
- */
-
-#define BDBparseErr 1
-
-/* A struct to hold all the relevant info about the database */
-
-typedef struct bdb_instance {
- DB_ENV *dbenv; /* BDB environment */
- DB *data; /* dns_data database handle */
- DBC *cursor; /* database cursor */
- DBC *cursor2; /* second cursor used during list operation. */
- DBC *cursor3; /* third cursor used during list operation */
- DBC *cursor4; /* fourth cursor used during list operation */
- DB *zone; /* zone database handle */
- DB *host; /* host database handle */
- DB *client; /* client database handle */
-} bdb_instance_t;
-
-/* Possible operations */
-
-#define list 1 /* list data */
-#define dele 2 /* delete data */
-#define add 3 /* add a single piece of data */
-#define bulk 4 /* bulk load data */
-
-
-/*%
- * quit macro is used instead of exit. quit always trys to close the lexer
- * and the BDB database before exiting.
- */
-
-#define quit(i) close_lexer(); bdb_cleanup(); exit(i);
-
-/*%
- * checkOp is used to verify that only one operation (list, del, add,
- * bulk from file, bulk from stdin) is specified on the command line.
- * This prevents a user from specifying two operations on the command
- * line, which would make no sense anyway.
- */
-
-#define checkOp(x) if (x != 0) {fprintf(stderr, "\nonly one operation "\
- "(l e d a f s) may be specified\n"); quit(2);}
-
-/*%
- * checkParam is used to only allow a parameter to be specified once.
- * I.E. the parameter key can only be used on the command line once.
- * any attempt to use it twice causes an error.
- */
-
-#define checkParam(x, y) if (x != NULL) {fprintf(stderr, "\n%s may only "\
- "be specified once\n", y); quit(2);}
-
-/*%
- * checkInvalidParam is used to only allow paramters which make sense for
- * the operation selected. I.E. passing the key parameter makes no sense
- * for the add operation, and thus it isn't allowed.
- */
-
-#define checkInvalidParam(x, y, z) if (x != NULL) {fprintf(stderr, "\n%s "\
- "may not be specified %s\n", y, z); quit(2);}
-
-/*%
- * checkInvalidOption is used to only allow paramters which make sense for
- * the operation selected - but checks boolean options.
- * I.E. passing the "b" bare_list parameter makes no sense for the add
- * operation, and thus it isn't allowed.
- * if w == x then output error message "flag", "message"
- */
-
-#define checkInvalidOption(w, x, y, z) if (w == x) {fprintf(stderr, "\n%s "\
- "may not be specified %s\n", y, z); quit(2);}
-
-/* Global Variables */
-
-int operation = 0; /*%< operation to perform. */
-/*% allow new lock files or DB to be created. */
-isc_boolean_t create_allowed = isc_boolean_false;
-char *key = NULL; /*%< key to use in list & del operations */
-
-/*% dump DB in DLZBDB bulk format */
-isc_boolean_t list_everything = isc_boolean_false;
-unsigned int key_val; /*%< key as unsigned int used in list & del operations */
-char *zone = NULL; /*%< zone to use in list operations */
-char *host = NULL; /*%< host to use in list operations */
-char *c_zone = NULL; /*%< client zone to use in list operations */
-char *c_ip = NULL; /*%< client IP to use in list operations */
-char *a_data = NULL; /*%< data in add operation */
-char *bulk_file = NULL; /*%< bulk data file to load */
-char *db_envdir = NULL; /*%< BDB environment location */
-char *db_file = NULL; /*%< BDB database file location. */
-bdb_instance_t db; /* BDB instance we are operating on */
-isc_lex_t *lexer = NULL; /*%< lexer for use to use in parsing input */
-isc_mem_t *lex_mctx = NULL; /*%< memory context for lexer */
-char lex_data_buf[max_data_len]; /*%< data array to use for lex_buffer below */
-isc_buffer_t lex_buffer; /*%< buffer for lexer during add operation */
-
-
-/*%
- * Displays usage message
- */
-
-static void
-show_usage(void) {
- fprintf(stderr, "\n\n\
----Usage:---------------------------------------------------------------------\
-\n\n\
- List data:\n\
- dlzbdb -l [-k key] [-z zone] [-h host] [-c client_zone] [-i client_ip]\n\
- BDB_environment BDB_database\n\n\
- Delete data:\n\
- dlzbdb -d [-k key] [-c client_zone] [-i client_ip]\n\
- BDB_environment BDB_database\n\n\
- Bulk load data from file:\n\
- dlzbdb -f file_to_load BDB_environment BDB_database\n\n\
- Bulk load data from stdin\n\
- dlzbdb -s BDB_environment BDB_database\n\n\
- Add data:\n\
- dlzbdb -a \"dns data to be added\" BDB_environment BDB_database\n\n\
- Export data:\n\
- dlzbdb -e BDB_environment BDB_database\n\n\
- Normally operations can only be performed on an existing database files.\n\
- Use the -n flag with any operation to allow files to be created.\n\
- Existing files will NOT be truncated by using the -n flag.\n\
- The -n flag will allow a new database to be created, or allow new\n\
- environment files to be created for an existing database.\n\n\
----Format for -f & -a options:------------------------------------------------\
-\n\n\
-db_type zone host dns_type ttl ip\n\
-db_type zone host dns_type ttl mx_priority mail_host\n\
-db_type zone host dns_type ttl nm_svr resp_psn serial refresh retry expire min\
-\n\
-db_type zone client_ip\n\n\
----Examples:------------------------------------------------------------------\
-\n\n\
-d mynm.com www A 10 127.0.0.1\n\
-d mynm.com @ MX 10 5 mail\n\
-d mynm.com @ SOA 10 ns1.mynm.com. root.mynm.com. 2 28800 7200 604800 86400\n\
-c mynm.com 127.0.0.1\n\
-c mynm.com 192.168.0.10\n\
-");
-quit(1);
-}
-
-
-/*% BDB callback to create zone secondary index */
-
-int
-getzone(DB *dbp, const DBT *pkey, const DBT *pdata, DBT *skey) {
- char *tmp;
- char *left;
- char *right;
- int result=0;
-
- UNUSED(dbp);
- UNUSED(pkey);
-
- /* Allocate memory to use in parsing the string */
- tmp = right = malloc(pdata->size + 1);
-
- /* verify memory was allocated */
- if (right == NULL) {
- result = BDBparseErr;
- goto getzone_cleanup;
- }
-
- /* copy data string into newly allocated memory */
- strncpy(right, pdata->data, pdata->size);
- right[pdata->size] = '\0';
-
- /* split string at the first space */
- left = isc_string_separate(&right, " ");
-
- /* copy string for "zone" secondary index */
- skey->data = strdup(left);
- if (skey->data == NULL) {
- result = BDBparseErr;
- goto getzone_cleanup;
- }
- /* set required values for BDB */
- skey->size = strlen(skey->data);
- skey->flags = DB_DBT_APPMALLOC;
-
- getzone_cleanup:
-
- /* cleanup memory */
- if (tmp != NULL)
- free(tmp);
-
- return result;
-}
-
-/*%
- * BDB callback to create host secondary index
- */
-
-int
-gethost(DB *dbp, const DBT *pkey, const DBT *pdata, DBT *skey) {
- char *tmp;
- char *left;
- char *right;
- int result=0;
-
- UNUSED(dbp);
- UNUSED(pkey);
-
- /* allocate memory to use in parsing the string */
- tmp = right = malloc(pdata->size + 1);
-
- /* verify memory was allocated */
- if (tmp == NULL) {
- result = BDBparseErr;
- goto gethost_cleanup;
- }
-
- /* copy data string into newly allocated memory */
- strncpy(right, pdata->data, pdata->size);
- right[pdata->size] = '\0';
-
- /* we don't care about left string. */
- /* memory of left string will be freed when tmp is freed. */
- isc_string_separate(&right, " ");
-
- /* verify right still has some characters left */
- if (right == NULL) {
- result = BDBparseErr;
- goto gethost_cleanup;
- }
-
- /* get "host" from data string */
- left = isc_string_separate(&right, " ");
- /* copy string for "host" secondary index */
- skey->data = strdup(left);
- if (skey->data == NULL) {
- result = BDBparseErr;
- goto gethost_cleanup;
- }
- /* set required values for BDB */
- skey->size = strlen(skey->data);
- skey->flags = DB_DBT_APPMALLOC;
-
- gethost_cleanup:
-
- /* cleanup memory */
- if (tmp != NULL)
- free(tmp);
-
- return result;
-}
-
-/*%
- * Performs BDB cleanup. Close each database that we opened.
- * Close environment. Set each var to NULL so we know they
- * were closed and don't accidentally try to close them twice.
- */
-
-void
-bdb_cleanup(void) {
-
- /* close cursors */
- if (db.cursor4 != NULL) {
- db.cursor4->c_close(db.cursor4);
- db.cursor4 = NULL;
- }
-
- if (db.cursor3 != NULL) {
- db.cursor3->c_close(db.cursor3);
- db.cursor3 = NULL;
- }
-
- if (db.cursor2 != NULL) {
- db.cursor2->c_close(db.cursor2);
- db.cursor2 = NULL;
- }
-
- if (db.cursor != NULL) {
- db.cursor->c_close(db.cursor);
- db.cursor = NULL;
- }
-
- /* close databases */
- if (db.data != NULL) {
- db.data->close(db.data, 0);
- db.data = NULL;
- }
- if (db.host != NULL) {
- db.host->close(db.host, 0);
- db.host = NULL;
- }
- if (db.zone != NULL) {
- db.zone->close(db.zone, 0);
- db.zone = NULL;
- }
- if (db.client != NULL) {
- db.client->close(db.client, 0);
- db.client = NULL;
- }
-
- /* close environment */
- if (db.dbenv != NULL) {
- db.dbenv->close(db.dbenv, 0);
- db.dbenv = NULL;
- }
-}
-
-/*% Initializes, sets flags and then opens Berkeley databases. */
-
-isc_result_t
-bdb_opendb(DBTYPE db_type, DB **db_out, const char *db_name, int flags) {
-
- int result;
- int createFlag = 0;
-
- /* Initialize the database. */
- if ((result = db_create(db_out, db.dbenv, 0)) != 0) {
- fprintf(stderr, "BDB could not initialize %s database. BDB error: %s",
- db_name, db_strerror(result));
- return ISC_R_FAILURE;
- }
-
- /* set database flags. */
- if ((result = (*db_out)->set_flags(*db_out, flags)) != 0) {
- fprintf(stderr, "BDB could not set flags for %s database. BDB error: %s",
- db_name, db_strerror(result));
- return ISC_R_FAILURE;
- }
-
- if (create_allowed == isc_boolean_true) {
- createFlag = DB_CREATE;
- }
- /* open the database. */
- if ((result = (*db_out)->open(*db_out, NULL, db_file, db_name, db_type,
- createFlag, 0)) != 0) {
- fprintf(stderr, "BDB could not open %s database in %s. BDB error: %s",
- db_name, db_file, db_strerror(result));
- return ISC_R_FAILURE;
- }
-
- return ISC_R_SUCCESS;
-}
-
-/*%
- * parses input and adds it to the BDB database
- * Lexer should be instantiated, and either a file or buffer opened for it.
- * The insert_data function is used by both the add, and bulk insert
- * operations
- */
-
-void
-put_data(isc_boolean_t dns_data, char *input_key, char *input_data) {
-
- int bdbres;
- DBT key, data;
-
- /* make sure key & data are completely empty */
- memset(&key, 0, sizeof(key));
- memset(&data, 0, sizeof(data));
-
- /* if client data, setup key for insertion */
- if (!dns_data && input_key != NULL) {
- key.data = input_key;
- key.size = strlen(input_key);
- key.flags = 0;
- }
- /* always setup data for insertion */
- data.data = input_data;
- data.size = strlen(input_data);
- data.flags = 0;
-
- /* execute insert against appropriate database. */
- if (dns_data) {
- bdbres = db.data->put(db.data, NULL, &key, &data, DB_APPEND);
- } else {
- bdbres = db.client->put(db.client, NULL, &key, &data, 0);
- }
-
- /* if something went wrong, log error and quit */
- if (bdbres != 0) {
- fprintf(stderr, "BDB could not insert data. Error: %s",
- db_strerror(bdbres));
- quit(5);
- }
-}
-
-void
-insert_data(void) {
- unsigned int opt =
- ISC_LEXOPT_EOL | /* Want end-of-line token. */
- ISC_LEXOPT_EOF | /* Want end-of-file token. */
- ISC_LEXOPT_QSTRING | /* Recognize qstrings. */
- ISC_LEXOPT_QSTRINGMULTILINE; /* Allow multiline "" strings */
-
- isc_result_t result;
- isc_token_t token; /* token from lexer */
- isc_boolean_t loop = isc_boolean_true;
- isc_boolean_t have_czone = isc_boolean_false;
- char data_arr[max_data_len];
- isc_buffer_t buf;
- char data_arr2[max_data_len];
- isc_buffer_t buf2;
- char data_type = 'u'; /* u =unknown, b =bad token, d/D =DNS, c/C =client IP */
-
- /* Initialize buffers */
- isc_buffer_init(&buf, &data_arr, max_data_len);
- isc_buffer_init(&buf2, &data_arr2, max_data_len);
-
- while (loop) {
- result = isc_lex_gettoken(lexer, opt, &token);
- if (result != ISC_R_SUCCESS)
- goto data_cleanup;
-
- switch(token.type) {
- case isc_tokentype_string:
- if (data_type == 'u') {
- /* store data_type */
- strncpy(&data_type, token.value.as_pointer, 1);
- /* verify data_type was specified correctly on input */
- if (strlen(token.value.as_pointer) > 1 || (
- data_type != 'd' && data_type != 'D' &&
- data_type != 'c' && data_type != 'C') ) {
- /* if not, set to 'b' so this line is ignored. */
- data_type = 'b';
- }
- } else if (data_type == 'c' || data_type == 'C') {
- if (have_czone == isc_boolean_true) {
- isc_buffer_putstr(&buf2, token.value.as_pointer);
- /* add string terminator to buffer */
- isc_buffer_putmem(&buf2, "\0", 1);
- } else {
- isc_buffer_putstr(&buf, token.value.as_pointer);
- /* add string terminator to buffer */
- isc_buffer_putmem(&buf, "\0", 1);
- have_czone = isc_boolean_true;
- }
- } else {
- isc_buffer_putstr(&buf, token.value.as_pointer);
- isc_buffer_putstr(&buf, " ");
- }
- break;
- case isc_tokentype_qstring:
- isc_buffer_putstr(&buf, "\"");
- isc_buffer_putstr(&buf, token.value.as_pointer);
- isc_buffer_putstr(&buf, "\" ");
- break;
- case isc_tokentype_eol:
- case isc_tokentype_eof:
-
- if ((data_type != 'u' && isc_buffer_usedlength(&buf) > 0) || data_type == 'b') {
- /* perform insert operation */
- if (data_type == 'd' || data_type == 'D') {
- /* add string terminator to buffer */
- isc_buffer_putmem(&buf, "\0", 1);
- put_data(isc_boolean_true, NULL, (char *) &data_arr);
- } else if (data_type == 'c' || data_type == 'C') {
- put_data(isc_boolean_false, (char *) &data_arr,
- (char *) &data_arr2);
- } else if (data_type == 'b') {
- fprintf(stderr, "Bad / unknown token encountered on line %lu."\
- " Skipping line.", isc_lex_getsourceline(lexer) - 1);
- } else {
- fprintf(stderr, "Bad / unknown db data type encountered on " \
- "line %lu. Skipping line\n", isc_lex_getsourceline(lexer) - 1);
- }
- }
-
- if (token.type == isc_tokentype_eof) {
- loop = isc_boolean_false;
- }
-
- /* reset buffer for next insert */
- isc_buffer_clear(&buf);
- isc_buffer_clear(&buf2);
- have_czone = isc_boolean_false;
- data_type ='u';
- break;
- default:
- data_type = 'b';
- break;
- }
- }
-
- return;
-
- data_cleanup:
- /* let user know we had problems */
- fprintf(stderr, "Unknown error processing tokens during \"add\" or " \
- "\"bulk\" operation.\nStoped processing on line %lu.",
- isc_lex_getsourceline(lexer));
-}
-
-
-isc_result_t
-openBDB(void) {
-
- int bdbres;
- isc_result_t result;
-
- /* create BDB environment */
- /* Basically BDB allocates and assigns memory to db->dbenv */
- bdbres = db_env_create(&db.dbenv, 0);
- if (bdbres != 0) {
- fprintf(stderr, "BDB environment could not be created. BDB error: %s",
- db_strerror(bdbres));
- result = ISC_R_FAILURE;
- goto openBDB_cleanup;
- }
-
- /* open BDB environment */
- if (create_allowed == isc_boolean_true) {
- /* allowed to create new files */
- bdbres = db.dbenv->open(db.dbenv, db_envdir,
- DB_INIT_CDB | DB_INIT_MPOOL | DB_CREATE, 0);
- } else { /* not allowed to create new files. */
- bdbres = db.dbenv->open(db.dbenv, db_envdir,
- DB_INIT_CDB | DB_INIT_MPOOL, 0);
- }
- if (bdbres != 0) {
- fprintf(stderr, "BDB environment at '%s' could not be opened. BDB " \
- "error: %s", db_envdir, db_strerror(bdbres));
- result = ISC_R_FAILURE;
- goto openBDB_cleanup;
- }
-
- /* open dlz_data database. */
-
- result = bdb_opendb(DB_RECNO, &db.data, dlz_data, 0);
- if (result != ISC_R_SUCCESS)
- goto openBDB_cleanup;
-
- /* open dlz_host database */
- result = bdb_opendb(DB_BTREE, &db.host, dlz_host, DB_DUP | DB_DUPSORT);
- if (result != ISC_R_SUCCESS)
- goto openBDB_cleanup;
-
- /* open dlz_zone database. */
- result = bdb_opendb(DB_BTREE, &db.zone, dlz_zone, DB_DUP | DB_DUPSORT);
- if (result != ISC_R_SUCCESS)
- goto openBDB_cleanup;
-
- /* open dlz_client database. */
- result = bdb_opendb(DB_BTREE, &db.client, dlz_client, DB_DUP | DB_DUPSORT);
- if (result != ISC_R_SUCCESS)
- goto openBDB_cleanup;
-
- /* associate the host secondary database with the primary database */
- bdbres = db.data->associate(db.data, NULL, db.host, gethost, 0);
- if (bdbres != 0) {
- fprintf(stderr, "BDB could not associate %s database with %s. BDB "\
- "error: %s", dlz_host, dlz_data, db_strerror(bdbres));
- result = ISC_R_FAILURE;
- goto openBDB_cleanup;
- }
-
- /* associate the zone secondary database with the primary database */
- bdbres = db.data->associate(db.data, NULL, db.zone, getzone, 0);
- if (bdbres != 0) {
- fprintf(stderr, "BDB could not associate %s database with %s. BDB "\
- "error: %s", dlz_zone, dlz_data, db_strerror(bdbres));
- result = ISC_R_FAILURE;
- goto openBDB_cleanup;
- }
-
- return result;
-
- openBDB_cleanup:
-
- bdb_cleanup();
- return result;
-}
-
-/*% Create & open lexer to parse input data */
-
-isc_result_t
-open_lexer(void) {
- isc_result_t result;
-
- /* check if we already opened the lexer, if we did, return success */
- if (lexer != NULL)
- return ISC_R_SUCCESS;
-
- /* allocate memory for lexer, and verify it was allocated */
- result = isc_mem_create(0, 0, &lex_mctx);
- if (result != ISC_R_SUCCESS) {
- fprintf(stderr, "unexpected error creating lexer\n");
- return result;
- }
-
- /* create lexer */
- result = isc_lex_create(lex_mctx, 1500, &lexer);
- if (result != ISC_R_SUCCESS)
- fprintf(stderr, "unexpected error creating lexer\n");
-
- /* set allowed commenting style */
- isc_lex_setcomments(lexer, ISC_LEXCOMMENT_C | /* Allow C comments */
- ISC_LEXCOMMENT_CPLUSPLUS | /* Allow C++ comments */
- ISC_LEXCOMMENT_SHELL); /* Allow shellcomments */
-
- isc_buffer_init(&lex_buffer, &lex_data_buf, max_data_len);
-
- return result;
-}
-
-/*% Close the lexer, and cleanup memory */
-
-void
-close_lexer(void) {
-
- /* If lexer is still open, close it & destroy it. */
- if (lexer != NULL) {
- isc_lex_close(lexer);
- isc_lex_destroy(&lexer);
- }
-
- /* if lexer memory is still allocated, destroy it. */
- if (lex_mctx != NULL)
- isc_mem_destroy(&lex_mctx);
-}
-
-/*% Perform add operation */
-
-void
-operation_add(void) {
- /* check for any parameters that are not allowed during add */
- checkInvalidParam(key, "k", "for add operation");
- checkInvalidParam(zone, "z", "for add operation");
- checkInvalidParam(host, "h", "for add operation");
- checkInvalidParam(c_zone, "c", "for add operation");
- checkInvalidParam(c_ip, "i", "for add operation");
- checkInvalidOption(list_everything, isc_boolean_true, "e",
- "for add operation");
-
- /* if open lexer fails it alread prints error messages. */
- if (open_lexer() != ISC_R_SUCCESS) {
- quit(4);
- }
-
- /* copy input data to buffer */
- isc_buffer_putstr(&lex_buffer, a_data);
-
- /* tell lexer to use buffer as input */
- if (isc_lex_openbuffer(lexer, &lex_buffer) != ISC_R_SUCCESS) {
- fprintf(stderr, "unexpected error opening lexer buffer");
- quit(4);
- }
-
- /*common logic for "add" & "bulk" operations are handled by insert_data */
- insert_data();
-}
-
-/*% Perform bulk insert operation */
-
-void
-operation_bulk(void) {
- /* check for any parameters that are not allowed during bulk */
- checkInvalidParam(key, "k", "for bulk load operation");
- checkInvalidParam(zone, "z", "for bulk load operation");
- checkInvalidParam(host, "h", "for bulk load operation");
- checkInvalidParam(c_zone, "c", "for bulk load operation");
- checkInvalidParam(c_ip, "i", "for bulk load operation");
- checkInvalidOption(list_everything, isc_boolean_true, "e",
- "for bulk load operation");
-
- /* if open lexer fails it already prints error messages. */
- if (open_lexer() != ISC_R_SUCCESS) {
- quit(4);
- }
-
- if (bulk_file == NULL) {
- if (isc_lex_openstream(lexer, stdin) != ISC_R_SUCCESS) {
- fprintf(stderr, "unexpected error opening stdin by lexer.");
- quit(4);
- }
- } else if (isc_lex_openfile(lexer, bulk_file) != ISC_R_SUCCESS) {
- fprintf(stderr, "unexpected error opening %s by lexer.", bulk_file);
- quit(4);
- }
-
- /* common logic for "add" & "bulk" operations are handled by insert_data */
- insert_data();
-}
-
-isc_result_t
-bulk_write(char type, DB *database, DBC *dbcursor, DBT *bdbkey, DBT *bdbdata) {
-
- int bdbres;
- db_recno_t recNum;
- char *retkey = NULL, *retdata;
- size_t retklen = 0, retdlen;
- void *p;
-
- /* use a 5MB buffer for the bulk dump */
- int buffer_size = 5 * 1024 * 1024;
-
- /* try to allocate a 5 MB buffer, if we fail write err msg, die. */
- bdbdata->data = malloc(buffer_size);
- if (bdbdata->data == NULL) {
- fprintf(stderr,
- "Unable to allocate 5 MB buffer for bulk database dump\n");
- return ISC_R_FAILURE;
- }
- bdbdata->ulen = buffer_size;
- bdbdata->flags = DB_DBT_USERMEM;
-
- /* get a cursor, make sure it worked. */
- bdbres = database->cursor(database, NULL, &dbcursor, 0);
- if (bdbres != 0) {
- fprintf(stderr, "Unexpected error. BDB Error: %s\n",db_strerror(bdbres));
- free(bdbdata->data);
- return ISC_R_FAILURE;
- }
-
- /* loop and dump all data */
- for (;;) {
-
- /* loop through data until DB_NOTFOUND is returned */
- bdbres = dbcursor->c_get(dbcursor, bdbkey, bdbdata,
- DB_MULTIPLE_KEY | DB_NEXT);
- /* if not successful did we encounter DB_NOTFOUND, or */
- /* have a different problem. */
- if (bdbres != 0) {
- if (bdbres != DB_NOTFOUND) {
- fprintf(stderr, "Unexpected error. BDB Error: %s\n",
- db_strerror(bdbres));
- free(bdbdata->data);
- return ISC_R_FAILURE;
- }
- /* Hit DB_NOTFOUND which means end of data. */
- break;
- } /* end of if (bdbres !=0) */
-
- for (DB_MULTIPLE_INIT(p, bdbdata);;) {
- if (type == 'c')
- DB_MULTIPLE_KEY_NEXT(p, bdbdata, retkey, retklen, retdata, retdlen);
- else
- DB_MULTIPLE_RECNO_NEXT(p, bdbdata, recNum, retdata, retdlen);
-
- if (p == NULL)
- break;
- if (type == 'c')
- printf("c %.*s %.*s\n",(int)retklen, retkey,(int)retdlen, retdata);
- else
- printf("d %.*s\n", (int)retdlen, retdata);
- } /* end of for (DB_MULTIPLE_INIT....) */
-
- } /* end of for (;;) */
-
- /* free the buffer we created earlier */
- free(bdbdata->data);
-
- return ISC_R_SUCCESS;
-}
-
-/*%
- * Perform listOrDelete operation
- * if dlt == true, delete data
- * else list data
- */
-
-void
-operation_listOrDelete(isc_boolean_t dlt) {
-
- int bdbres = 0;
- DBC *curList[3];
- DBT bdbkey, bdbdata;
- db_recno_t recno;
- int curIndex = 0;
-
-
- /* verify that only allowed parameters were passed. */
- if (dlt == isc_boolean_true) {
- checkInvalidParam(zone, "z", "for delete operation");
- checkInvalidParam(host, "h", "for delete operation");
- checkInvalidOption(list_everything, isc_boolean_true, "e",
- "for delete operation");
- checkInvalidOption(create_allowed, isc_boolean_true, "n",
- "for delete operation");
- } else if (key != NULL || zone != NULL || host != NULL) {
- checkInvalidParam(c_zone, "c", "for list when k, z or h are specified");
- checkInvalidParam(c_ip, "i", "for list when k, z, or h are specified");
- checkInvalidOption(list_everything, isc_boolean_true, "e",
- "for list when k, z, or h are specified");
- checkInvalidOption(create_allowed, isc_boolean_true, "n",
- "for list operation");
- } else if (c_ip != NULL || c_zone != NULL) {
- checkInvalidOption(list_everything, isc_boolean_true, "e",
- "for list when c or i are specified");
- checkInvalidOption(create_allowed, isc_boolean_true, "n",
- "for list operation");
- }
-
- memset(&bdbkey, 0, sizeof(bdbkey));
- memset(&bdbdata, 0, sizeof(bdbdata));
-
- /* Dump database in "dlzbdb" bulk format */
- if (list_everything == isc_boolean_true) {
- if (bulk_write('c', db.client, db.cursor, &bdbkey, &bdbdata)
- != ISC_R_SUCCESS)
- return;
- memset(&bdbkey, 0, sizeof(bdbkey));
- memset(&bdbdata, 0, sizeof(bdbdata));
- bulk_write('d', db.data, db.cursor2, &bdbkey, &bdbdata);
- return;
- } /* end if (list_everything) */
-
- /* set NULL the 2nd and 3rd positions in curList. */
- /* that way later when add cursors to the join list */
- /* it is already null terminated. */
- curList[1] = curList[2] = NULL;
-
- if (key != NULL) {
- /* make sure other parameters weren't */
- checkInvalidParam(zone, "z", "when k is specified");
- checkInvalidParam(host, "h", "when k is specified");
-
- recno = key_val;
- bdbkey.data = &recno;
- bdbkey.size = sizeof(recno);
-
- if (dlt == isc_boolean_true) {
- bdbres = db.data->del(db.data, NULL, &bdbkey, 0);
- } else {
- bdbdata.flags = DB_DBT_REALLOC;
- bdbres = db.data->get(db.data, NULL, &bdbkey, &bdbdata, 0);
-
- if (bdbres == 0) {
- printf("KEY | DATA\n");
- printf("%lu | %.*s\n", *(u_long *) bdbkey.data,
- (int)bdbdata.size, (char *)bdbdata.data);
- }
- } /* closes else of if (dlt == isc_boolean_true) */
- if (bdbres == DB_NOTFOUND) {
- printf("Key not found in database");
- }
- } /* closes if (key != NULL) */
-
- /* if zone is passed */
- if (zone != NULL) {
- /* create a cursor and make sure it worked */
- bdbres = db.zone->cursor(db.zone, NULL, &db.cursor2, 0);
- if (bdbres != 0) {
- fprintf(stderr, "Unexpected error. BDB Error: %s\n",
- db_strerror(bdbres));
- return;
- }
-
- bdbkey.data = zone;
- bdbkey.size = strlen(zone);
- bdbres = db.cursor2->c_get(db.cursor2, &bdbkey, &bdbdata, DB_SET);
- if (bdbres != 0) {
- if (bdbres != DB_NOTFOUND) {
- fprintf(stderr, "Unexpected error. BDB Error: %s\n",
- db_strerror(bdbres));
- } else {
- printf("Zone not found in database");
- }
- return;
- }
-
- /* add cursor to cursor list for later use in join */
- curList[curIndex++] = db.cursor2;
- }
-
- /* if host is passed */
- if (host != NULL) {
-
- /* create a cursor and make sure it worked. */
- bdbres = db.host->cursor(db.host, NULL, &db.cursor3, 0);
- if (bdbres != 0) {
- fprintf(stderr, "Unexpected error. BDB Error: %s\n",
- db_strerror(bdbres));
- return;
- }
- bdbkey.data = host;
- bdbkey.size = strlen(host);
- bdbres = db.cursor3->c_get(db.cursor3, &bdbkey, &bdbdata, DB_SET);
- if (bdbres != 0) {
- if (bdbres != DB_NOTFOUND) {
- fprintf(stderr, "Unexpected error. BDB Error: %s\n",
- db_strerror(bdbres));
- } else {
- printf("Host not found in database");
- }
- return;
- }
-
- /* add cursor to cursor list for later use in join */
- curList[curIndex++] = db.cursor3;
- }
-
-
- if (zone != NULL || host != NULL) {
-
- /* join any cursors */
- bdbres = db.data->join(db.data, curList, &db.cursor4, 0);
- if (bdbres != 0) {
- fprintf(stderr, "Unexpected error. BDB Error: %s\n",
- db_strerror(bdbres));
- return;
- }
-
- memset(&bdbkey, 0, sizeof(bdbkey));
- bdbkey.flags = DB_DBT_REALLOC;
- memset(&bdbdata, 0, sizeof(bdbdata));
- bdbdata.flags = DB_DBT_REALLOC;
-
- /* print a header to explain the output */
- printf("KEY | DATA\n");
- /* loop and list all results. */
- while (bdbres == 0) {
- /* get data */
- bdbres = db.cursor4->c_get(db.cursor4, &bdbkey, &bdbdata, 0);
- /* verify call had no errors */
- if (bdbres != 0) {
- break;
- }
- printf("%lu | %.*s\n", *(u_long *) bdbkey.data,
- (int)bdbdata.size, (char *)bdbdata.data);
- } /* closes while loop */
- }
-
- if (c_ip != NULL && c_zone == NULL) {
- fprintf(stderr, "i may only be specified when c is also specified\n");
- quit(2);
- }
- /* if client_zone was passed */
- if (c_zone != NULL) {
-
- /* create a cursor and make sure it worked. */
- if (dlt == isc_boolean_true) {
- /* open read-write cursor */
- bdbres = db.client->cursor(db.client, NULL, &db.cursor,
- DB_WRITECURSOR);
- } else {
- /* open read only cursor */
- bdbres = db.client->cursor(db.client, NULL, &db.cursor, 0);
- /* print a header to explain the output */
- printf("CLIENT_ZONE | CLIENT_IP\n");
- }
-
- bdbkey.data = c_zone;
- bdbkey.size = strlen(c_zone);
-
- if (c_ip != NULL) {
- bdbdata.data = c_ip;
- bdbdata.size = strlen(c_ip);
- bdbres = db.cursor->c_get(db.cursor, &bdbkey, &bdbdata, DB_GET_BOTH);
- if (bdbres == DB_NOTFOUND) {
- printf("Client zone & IP not found in database");
- }
- } else {
- bdbdata.flags = DB_DBT_REALLOC;
- bdbres = db.cursor->c_get(db.cursor, &bdbkey, &bdbdata, DB_SET);
- if (bdbres == DB_NOTFOUND) {
- printf("Client zone not found in database");
- }
- }
-
- while (bdbres == 0) {
- if (dlt == isc_boolean_false) {
- printf("%.*s | %.*s\n", (int)bdbkey.size, (char *) bdbkey.data,
- (int)bdbdata.size, (char *) bdbdata.data);
- } else {
- /* delete record. */
- bdbres = db.cursor->c_del(db.cursor, 0);
- if (bdbres != 0) {
- fprintf(stderr, "Unexpected error. BDB Error: %s\n",
- db_strerror(bdbres));
- break;
- }
- }
- if (c_ip != NULL) {
- break;
- }
- bdbres = db.cursor->c_get(db.cursor, &bdbkey, &bdbdata, DB_NEXT_DUP);
- if (bdbres != 0) {
- break;
- }
- } /* end while loop */
- }
-
-
- if (bdbres != 0 && bdbres != DB_NOTFOUND) {
- fprintf(stderr, "Unexpected error during list operation " \
- "BDB error: %s", db_strerror(bdbres));
- }
-
- if (bdbkey.flags == DB_DBT_REALLOC && bdbkey.data != NULL) {
- free(bdbkey.data);
- }
- if (bdbdata.flags == DB_DBT_REALLOC && bdbdata.data != NULL) {
- free(bdbdata.data);
- }
-}
-
-
-int
-main(int argc, char **argv) {
-
- int ch;
- char *endp;
-
- /* there has to be at least 2 args, some operations require more */
- if (argc < 2)
- show_usage();
-
- /* use the ISC commandline parser to get all the program arguments */
- while ((ch= isc_commandline_parse(argc, argv, "ldesna:f:k:z:h:c:i:")) != -1) {
- switch (ch) {
- case 'n':
- create_allowed = isc_boolean_true;
- break;
- case 'l':
- checkOp(operation);
- operation = list;
- break;
- case 'd':
- checkOp(operation);
- operation = dele;
- break;
- case 'a':
- checkOp(operation);
- operation = add;
- a_data = isc_commandline_argument;
- break;
- case 'f':
- checkOp(operation);
- operation = bulk;
- bulk_file = isc_commandline_argument;
- break;
- case 's':
- checkOp(operation);
- operation = bulk;
- break;
- case 'k':
- checkParam(key, "k");
- key = isc_commandline_argument;
- key_val = strtoul(key, &endp, 10);
- if (*endp != '\0' || key_val < 1) {
- fprintf(stderr, "Error converting key to integer");
- }
- break;
- case 'z':
- checkParam(zone, "z");
- zone = isc_commandline_argument;
- break;
- case 'h':
- checkParam(host, "h");
- host = isc_commandline_argument;
- break;
- case 'c':
- checkParam(c_zone, "c");
- c_zone = isc_commandline_argument;
- break;
- case 'i':
- checkParam(c_ip, "i");
- c_ip = isc_commandline_argument;
- break;
- case 'e':
- checkOp(operation);
- operation = list;
- list_everything = isc_boolean_true;
- break;
- case '?':
- show_usage();
- break;
- default:
- /* should never reach this point */
- fprintf(stderr, "unexpected error parsing command arguments\n");
- quit(1);
- break;
- }
- }
-
- argc -= isc_commandline_index;
- argv += isc_commandline_index;
-
- /* argc & argv have been modified, so now only "extra" parameters are */
- /* left in argc & argv. "Extra" parameters are any parameters that were */
- /* not passed using a command line flag. Exactly 2 args should be left. */
- /* The first should be the BDB environment path, the second should be the */
- /* BDB database. The BDB database path can be either relative to the */
- /* BDB environment path, or absolute. */
- if (argc < 2) {
- fprintf(stderr, "Both a Berkeley DB environment and file "\
- "must be specified");
- quit(2);
- } else if (argc > 2) {
- fprintf(stderr, "Too many parameters. Check command line for errors.");
- quit(2);
- }
-
- /* get db_file to operate on */
- db_envdir = argv[0];
- db_file = argv[1];
-
- if (openBDB() != ISC_R_SUCCESS) {
- /* openBDB already prints error messages, don't do it here. */
- bdb_cleanup();
- quit(3);
- }
-
- switch(operation) {
- case list:
- operation_listOrDelete(isc_boolean_false);
- break;
- case dele:
- operation_listOrDelete(isc_boolean_true);
- break;
- case add:
- operation_add();
- break;
- case bulk:
- operation_bulk();
- break;
- default:
- fprintf(stderr, "\nNo operation was selected. "\
- "Select an operation (l d a f)");
- quit(2);
- break;
- }
-
- quit(0);
-}
-#endif
-
diff --git a/contrib/dlz/config.dlz.in b/contrib/dlz/config.dlz.in
deleted file mode 100644
index 01f7788c..00000000
--- a/contrib/dlz/config.dlz.in
+++ /dev/null
@@ -1,500 +0,0 @@
-# Copyright (C) 2005 Internet Systems Consortium, Inc. ("ISC")
-#
-# Permission to use, copy, modify, and distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-#
-# Shorthand. Note quoting: DLZ_DRIVER_DIR expanded in Makefile, not here.
-#
-dlzdir='${DLZ_DRIVER_DIR}'
-
-#
-# Private autoconf macro to simplify configuring drivers:
-#
-# DLZ_ADD_DRIVER(DEFINE, DRIVER, INCLUDES, LIBS)
-#
-# where:
-# DEFINE is FOO (to define -DDLZ_FOO)
-# DRIVER is dlz_foo_driver (sources without the .c)
-# INCLUDES is any necessary include definitions
-# LIBS is any necessary library definitions
-#
-AC_DEFUN(DLZ_ADD_DRIVER, [
- CONTRIB_DLZ="$CONTRIB_DLZ -DDLZ_$1"
- for i in $2
- do
- DLZ_DRIVER_SRCS="$DLZ_DRIVER_SRCS $dlzdir/$i.c"
- DLZ_DRIVER_OBJS="$DLZ_DRIVER_OBJS $i.$O"
- done
- if test -n "$3"
- then
- DLZ_DRIVER_INCLUDES="$DLZ_DRIVER_INCLUDES $3"
- fi
- if test -n "$4"
- then
- DLZ_DRIVER_LIBS="$DLZ_DRIVER_LIBS $4"
- fi
-])
-
-#
-# Check for the various DLZ drivers
-#
-
-#
-# Was --with-dlz-postgres specified?
-#
-
-AC_MSG_CHECKING(for Postgres DLZ driver)
-AC_ARG_WITH(dlz_postgres,
-[ --with-dlz-postgres[=PATH] Build with Postgres DLZ driver [yes|no|path].
- (Required to use Postgres with DLZ)],
- use_dlz_postgres="$withval", use_dlz_postgres="no")
-
-if test "$use_dlz_postgres" != "no"
-then
- if test "$use_dlz_postgres" != "yes"
- then
- AC_PATH_PROGS(PG_CONFIG, pg_config, [not found], $use_dlz_postgres/bin)
- else
- AC_PATH_PROGS(PG_CONFIG, pg_config, [not found])
- fi
-
- if test "$PG_CONFIG" != "not found"
- then
- use_dlz_postgres=`$PG_CONFIG --includedir`
- use_dlz_postgres_lib=`$PG_CONFIG --libdir`
- else
- pgprefix="$use_dlz_postgres"
- use_dlz_postgres="$pgprefix/include"
- use_dlz_postgres_lib="$pgprefix/lib"
- fi
-fi
-
-if test "$use_dlz_postgres" = "yes/include"
-then
- # User did not specify path and Postgres didn't say - guess it
- pgdirs="/usr /usr/local /usr/local/pgsql /usr/pkg"
- for d in $pgdirs
- do
- if test -f $d/include/libpq-fe.h
- then
- use_dlz_postgres=$d/include
- use_dlz_postgres_lib=$d/lib
- break
- fi
- done
-fi
-
-if test "$use_dlz_postgres" = "yes/include"
-then
- # Still no joy, give up
-
- AC_MSG_RESULT(not found)
- AC_MSG_ERROR(
-[No pg_config and PostgreSQL was not found in any of $pgdirs; use --with-dlz-postgres=/path or put pg_config in your path])
-fi
-
-case "$use_dlz_postgres" in
- no)
- AC_MSG_RESULT(no)
- ;;
- *)
- DLZ_ADD_DRIVER(POSTGRES, dlz_postgres_driver,
- [-I$use_dlz_postgres],
- [-L$use_dlz_postgres_lib -lpq])
-
- AC_MSG_RESULT(
-[using PostgreSQL from $use_dlz_postgres_lib and $use_dlz_postgres])
- ;;
-esac
-
-
-#
-# Was --with-dlz-mysql specified?
-#
-
-AC_MSG_CHECKING(for MySQL DLZ driver)
-AC_ARG_WITH(dlz_mysql,
-[ --with-dlz-mysql[=PATH] Build with MySQL DLZ driver [yes|no|path].
- (Required to use MySQL with DLZ)],
- use_dlz_mysql="$withval", use_dlz_mysql="no")
-
-mysql_include=""
-mysql_lib=""
-if test "$use_dlz_mysql" = "yes"
-then
- # User did not specify a path - guess it
- mysqldirs="/usr /usr/local /usr/local/mysql /usr/pkg"
- for d in $mysqldirs
- do
- if test -f $d/include/mysql/mysql.h
- then
- use_dlz_mysql=$d
- mysql_include=$d/include/mysql
- if test -d $d/lib/mysql
- then
- mysql_lib=$d/lib/mysql
- else
- mysql_lib=$d/lib
- fi
- break
- elif test -f $d/include/mysql.h
- then
- use_dlz_mysql=$d
- mysql_include=$d/include
- if test -d $d/lib/mysql
- then
- mysql_lib=$d/lib/mysql
- else
- mysql_lib=$d/lib
- fi
- break
- fi
- done
-elif test "$use_dlz_mysql" != "no"
-then
- d=$use_dlz_mysql
- if test -f $d/include/mysql/mysql.h
- then
- mysql_include=$d/include/mysql
- if test -d $d/lib/mysql
- then
- mysql_lib=$d/lib/mysql
- else
- mysql_lib=$d/lib
- fi
- elif test -f $d/include/mysql.h
- then
- mysql_include=$d/include
- if test -d $d/lib/mysql
- then
- mysql_lib=$d/lib/mysql
- else
- mysql_lib=$d/lib
- fi
- fi
-fi
-
-if test "$use_dlz_mysql" = "yes"
-then
- AC_MSG_RESULT(not found)
- AC_MSG_ERROR(
-[MySQL was not found in any of $mysqldirs; use --with-dlz-mysql=/path])
-fi
-
-case "$use_dlz_mysql" in
- no)
- AC_MSG_RESULT(no)
- ;;
- *)
- DLZ_ADD_DRIVER(MYSQL, dlz_mysql_driver,
- [-I${mysql_include}],
- [-L${mysql_lib} -lmysqlclient -lz -lcrypt -lm])
-
- AC_MSG_RESULT(
-[using mysql from ${mysql_lib} and ${mysql_include}])
- ;;
-esac
-
-
-#
-# Was --with-dlz-bdb specified?
-#
-
-AC_MSG_CHECKING(for Berkeley DB DLZ driver...)
-AC_ARG_WITH(dlz_bdb,
-[ --with-dlz-bdb[=PATH] Build with Berkeley DB DLZ driver [yes|no|path].
- (Required to use Berkeley DB with DLZ)],
- use_dlz_bdb="$withval", use_dlz_bdb="no")
-
-case "$use_dlz_bdb" in
- no)
- AC_MSG_RESULT(no)
- ;;
- *)
- if test "$use_dlz_bdb" = "yes"
- then
- # User did not specify a path - guess directories
- bdbdirs="/usr/local /usr/pkg /usr"
- elif test -d "$use_dlz_bdb"
- then
- # User specified directory and it exists
- bdbdirs="$use_dlz_bdb"
- else
- AC_MSG_RESULT(not found)
- AC_MSG_ERROR([path $use_dlz_bdb does not exist])
- bdbdirs=""
- fi
-
- # Use path we were given or guessed. This is insanely
- # complicated because we have to search for a bunch of
- # platform-specific variations and have to check
- # separately for include and library directories.
-
- # Set both to yes, so we can check them later
- dlz_bdb_inc="yes"
- dlz_bdb_libs="yes"
-
- AC_MSG_RESULT( )
- for dd in $bdbdirs
- do
- # Skip nonexistant directories
- if test ! -d "$dd"
- then
- continue
- fi
-
- # Check other locations for includes.
- # Order is important (sigh).
-
- bdb_incdirs="/db53 /db51 /db48 /db47 /db46 /db45 /db44 /db43 /db42 /db41 /db4 /db"
- # include a blank element first
- for d in "" $bdb_incdirs
- do
- if test -f "$dd/include${d}/db.h"
- then
- dlz_bdb_inc="-I$dd/include${d}"
- break
- fi
- done
-
- # Give up on this directory if we couldn't
- # find the include subdir
-
- if test "$dlz_bdb_inc" = "yes"
- then
- continue
- fi
-
- # Look for libname other than libdb.so.
- # Order is important (sigh).
-
- bdb_libnames="db53 db-5.3 db51 db-5.1 db48 db-4.8 db47 db-4.7 db46 db-4.6 db45 db-4.5 db44 db-4.4 db43 db-4.3 db42 db-4.2 db41 db-4.1 db"
- for d in $bdb_libnames
- do
- if test "$dd" = "/usr"
- then
- AC_CHECK_LIB($d, db_create, dlz_bdb_libs="-l${d}")
- if test $dlz_bdb_libs != "yes"
- then
- break
- fi
- elif test -f "$dd/lib/lib${d}.so"
- then
- dlz_bdb_libs="-L${dd}/lib -l${d}"
- break
- fi
- done
-
- # If we found both incdir and lib, we're done
- if test "$dlz_bdb_libs" != "yes"
- then
- break
- fi
-
- # Otherwise, we're starting over
-
- dlz_bdb_inc="yes"
- dlz_bdb_libs="yes"
- done
-
- # Done searching, now make sure we got everything.
-
- if test "$dlz_bdb_inc" = "yes"
- then
- AC_MSG_ERROR([could not find Berkeley DB include directory])
- fi
-
- if test "$dlz_bdb_libs" = "yes"
- then
- AC_MSG_RESULT(not found)
- AC_MSG_ERROR([could not find Berkeley DB library])
- fi
-
- DLZ_ADD_DRIVER(BDB, dlz_bdb_driver dlz_bdbhpt_driver,
- [$dlz_bdb_inc], [$dlz_bdb_libs])
-
- AC_MSG_RESULT([using Berkeley DB: $dlz_bdb_inc $dlz_bdb_libs])
-
- AC_CONFIG_FILES([contrib/dlz/bin/dlzbdb/Makefile])
- ;;
-esac
-
-
-#
-# Was --with-dlz-filesystem specified?
-#
-
-AC_MSG_CHECKING(for file system DLZ driver)
-AC_ARG_WITH(dlz_filesystem,
-[ --with-dlz-filesystem[=ARG] Build with filesystem DLZ driver [yes|no].
- (Required to use file system driver with DLZ)],
- use_dlz_filesystem="$withval", use_dlz_filesystem="no")
-
-case "$use_dlz_filesystem" in
- no)
- AC_MSG_RESULT(no)
- ;;
- *)
- DLZ_ADD_DRIVER(FILESYSTEM, dlz_filesystem_driver)
- DLZ_SYSTEM_TEST=filesystem
- AC_MSG_RESULT(yes)
- ;;
-esac
-
-
-#
-# Was --with-dlz-ldap specified?
-#
-
-AC_MSG_CHECKING(for LDAP DLZ driver)
-AC_ARG_WITH(dlz_ldap,
-[ --with-dlz-ldap[=PATH] Build with LDAP DLZ driver [yes|no|path].
- (Required to use LDAP with DLZ)],
- use_dlz_ldap="$withval", use_dlz_ldap="no")
-
-if test "$use_dlz_ldap" = "yes"
-then
- # User did not specify a path - guess it
- ldapdirs="/usr /usr/local /usr/pkg"
- for d in $ldapdirs
- do
- if test -f $d/include/ldap.h
- then
- use_dlz_ldap=$d
- break
- fi
- done
-fi
-
-if test "$use_dlz_ldap" = "yes"
-then
- AC_MSG_RESULT(not found)
- AC_MSG_ERROR(
-[LDAP headers were not found in any of $ldapdirs; use --with-dlz-ldap=/path])
-fi
-
-case "$use_dlz_ldap" in
- no)
- AC_MSG_RESULT(no)
- ;;
- *)
- DLZ_ADD_DRIVER(LDAP, dlz_ldap_driver,
- [-I$use_dlz_ldap/include],
- [-L$use_dlz_ldap/lib -lldap -llber])
-
- AC_MSG_RESULT(
-[using LDAP from $use_dlz_ldap/lib and $use_dlz_ldap/include])
- ;;
-esac
-
-
-#
-# Was --with-dlz-odbc specified?
-#
-
-AC_MSG_CHECKING(for ODBC DLZ driver)
-AC_ARG_WITH(dlz_odbc,
-[ --with-dlz-odbc[=PATH] Build with ODBC DLZ driver [yes|no|path].
- (Required to use ODBC with DLZ)],
- use_dlz_odbc="$withval", use_dlz_odbc="no")
-
-if test "$use_dlz_odbc" = "yes"
-then
- # User did not specify a path - guess it
- libodbc_found=no
- sql_h_found=no
- AC_CHECK_HEADER(sql.h, sql_h_found=yes)
- AC_CHECK_LIB(odbc, SQLConnect, libodbc_found=yes)
-
- if test $libodbc_found = "yes" -o $sql_h_found = "yes"
- then
- use_dlz_odbc=system
- dlz_odbc_include=""
- dlz_odbc_libs="-lodbc"
- else
- odbcdirs="/usr /usr/local /usr/pkg"
- for d in $odbcdirs
- do
- if test -f $d/include/sql.h -a -f $d/lib/libodbc.a
- then
- use_dlz_odbc=$d
- dlz_odbc_include="-I$use_dlz_odbc/include"
- dlz_odbc_libs="-L$use_dlz_odbc/lib -lodbc"
- break
- fi
- done
- fi
-fi
-
-case "$use_dlz_odbc" in
- no)
- AC_MSG_RESULT(no)
- ;;
- yes)
- AC_MSG_RESULT(not found)
- AC_MSG_ERROR(
-[ODBC headers were not found in any of $odbcdirs; use --with-dlz-odbc=/path])
- ;;
- *)
- DLZ_ADD_DRIVER(ODBC, dlz_odbc_driver,
- [$dlz_odbc_include],
- [$dlz_odbc_libs])
-
- AC_MSG_RESULT([using ODBC from $use_dlz_odbc])
- ;;
-esac
-
-
-#
-# Was --with-dlz-stub specified?
-#
-
-AC_MSG_CHECKING(for stub DLZ driver)
-AC_ARG_WITH(dlz_stub,
-[ --with-dlz-stub[=ARG] Build with stub DLZ driver [yes|no].
- (Required to use stub driver with DLZ)],
- use_dlz_stub="$withval", use_dlz_stub="no")
-
-case "$use_dlz_stub" in
- no)
- AC_MSG_RESULT(no)
- ;;
- *)
-
- DLZ_ADD_DRIVER(STUB, dlz_stub_driver)
-
- AC_MSG_RESULT(yes)
- ;;
-esac
-
-# Add any additional DLZ drivers here.
-
-#
-# Finally, some generic stuff that applies to all drivers, assuming
-# we're compiling contrib DLZ drivers at all.
-#
-if test -n "$CONTRIB_DLZ"
-then
- CONTRIB_DLZ="-DCONTRIB_DLZ $CONTRIB_DLZ"
-
- #
- # Where to find DLZ driver header files.
- #
- DLZ_DRIVER_INCLUDES="-I$dlzdir/include $DLZ_DRIVER_INCLUDES"
-
- #
- # Initialization and shutdown wrappers, helper functions.
- #
- DLZ_DRIVER_SRCS="$dlzdir/dlz_drivers.c $dlzdir/sdlz_helper.c $DLZ_DRIVER_SRCS"
- DLZ_DRIVER_OBJS="dlz_drivers.$O sdlz_helper.$O $DLZ_DRIVER_OBJS"
-fi
diff --git a/contrib/dlz/drivers/dlz_bdb_driver.c b/contrib/dlz/drivers/dlz_bdb_driver.c
deleted file mode 100644
index f68bd9e0..00000000
--- a/contrib/dlz/drivers/dlz_bdb_driver.c
+++ /dev/null
@@ -1,800 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 1999-2001, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifdef DLZ_BDB
-
-#include <config.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <dns/log.h>
-#include <dns/sdlz.h>
-#include <dns/result.h>
-
-#include <isc/mem.h>
-#include <isc/print.h>
-#include <isc/result.h>
-#include <isc/util.h>
-
-#include <named/globals.h>
-
-#include <dlz/dlz_bdb_driver.h>
-
-#include <db.h>
-
-static dns_sdlzimplementation_t *dlz_bdb = NULL;
-
-/* should the bdb driver use threads. */
-#ifdef ISC_PLATFORM_USETHREADS
-#define bdb_threads DB_THREAD
-#else
-#define bdb_threads 0
-#endif
-
-/* BDB database names */
-#define dlz_data "dns_data"
-#define dlz_zone "dns_zone"
-#define dlz_host "dns_host"
-#define dlz_client "dns_client"
-
-/*%
- * This structure contains all the Berkeley DB handles
- * for this instance of the BDB driver.
- */
-
-typedef struct bdb_instance {
- DB_ENV *dbenv; /*%< BDB environment */
- DB *data; /*%< dns_data database handle */
- DB *zone; /*%< zone database handle */
- DB *host; /*%< host database handle */
- DB *client; /*%< client database handle */
- isc_mem_t *mctx; /*%< memory context */
-
-} bdb_instance_t;
-
-typedef struct parsed_data {
- char *zone;
- char *host;
- char *type;
- int ttl;
- char *data;
-} parsed_data_t;
-
-
-/* forward reference */
-
-static isc_result_t
-bdb_findzone(void *driverarg, void *dbdata, const char *name,
- dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo);
-
-/*%
- * Parses the DBT from the Berkeley DB into a parsed_data record
- * The parsed_data record should be allocated before and passed into the
- * bdb_parse_data function. The char (type & data) fields should not
- * be "free"d as that memory is part of the DBT data field. It will be
- * "free"d when the DBT is freed.
- */
-
-static isc_result_t
-bdb_parse_data(char *in, parsed_data_t *pd) {
-
- char *endp, *ttlStr;
- char *tmp = in;
- char *lastchar = (char *) &tmp[strlen(tmp) + 1];
-
- /*%
- * String should be formated as:
- * zone(a space)host(a space)ttl(a space)type(a space)remaining data
- * examples:
- * example.com www 10 A 127.0.0.1
- * example.com mail 10 A 127.0.0.2
- * example.com @ 10 MX 20 mail.example.com
- */
-
- /* save pointer to zone */
- pd->zone = tmp;
-
- /* find space after zone and change it to a '\0' */
- tmp = strchr(tmp, ' ');
- /* verify we found a space */
- if (tmp == NULL)
- return ISC_R_FAILURE;
- /* change the space to a null (string terminator) */
- tmp[0] = '\0';
- /* make sure it is safe to increment pointer */
- if (++tmp > lastchar)
- return ISC_R_FAILURE;
-
- /* save pointer to host */
- pd->host = tmp;
-
- /* find space after type and change it to a '\0' */
- tmp = strchr(tmp, ' ');
- /* verify we found a space */
- if (tmp == NULL)
- return ISC_R_FAILURE;
- /* change the space to a null (string terminator) */
- tmp[0] = '\0';
- /* make sure it is safe to increment pointer */
- if (++tmp > lastchar)
- return ISC_R_FAILURE;
-
- /* save pointer to dns type */
- pd->type = tmp;
-
- /* find space after type and change it to a '\0' */
- tmp = strchr(tmp, ' ');
- /* verify we found a space */
- if (tmp == NULL)
- return ISC_R_FAILURE;
- /* change the space to a null (string terminator) */
- tmp[0] = '\0';
- /* make sure it is safe to increment pointer */
- if (++tmp > lastchar)
- return ISC_R_FAILURE;
-
- /* save pointer to dns ttl */
- ttlStr = tmp;
-
- /* find space after ttl and change it to a '\0' */
- tmp = strchr(tmp, ' ');
- /* verify we found a space */
- if (tmp == NULL)
- return ISC_R_FAILURE;
- /* change the space to a null (string terminator) */
- tmp[0] = '\0';
- /* make sure it is safe to increment pointer */
- if (++tmp > lastchar)
- return ISC_R_FAILURE;
-
- /* save pointer to remainder of DNS data */
- pd->data = tmp;
-
- /* convert ttl string to integer */
- pd->ttl = strtol(ttlStr, &endp, 10);
- if (*endp != '\0' || pd->ttl < 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "BDB driver ttl must be a postive number");
- return ISC_R_FAILURE;
- }
-
- /* if we get this far everything should have worked. */
- return ISC_R_SUCCESS;
-}
-
-/*
- * DLZ methods
- */
-
-static isc_result_t
-bdb_allowzonexfr(void *driverarg, void *dbdata, const char *name,
- const char *client)
-{
- isc_result_t result;
- bdb_instance_t *db = (bdb_instance_t *) dbdata;
- DBC *client_cursor = NULL;
- DBT key, data;
-
- /* check to see if we are authoritative for the zone first. */
- result = bdb_findzone(driverarg, dbdata, name, NULL, NULL);
- if (result != ISC_R_SUCCESS)
- return (ISC_R_NOTFOUND);
-
- memset(&key, 0, sizeof(DBT));
- key.flags = DB_DBT_MALLOC;
- key.data = strdup(name);
- if (key.data == NULL) {
- result = ISC_R_NOMEMORY;
- goto xfr_cleanup;
- }
- key.size = strlen(key.data);
-
- memset(&data, 0, sizeof(DBT));
- data.flags = DB_DBT_MALLOC;
- data.data = strdup(client);
- if (data.data == NULL) {
- result = ISC_R_NOMEMORY;
- goto xfr_cleanup;
- }
- data.size = strlen(data.data);
-
- /* get a cursor to loop through zone data */
- if (db->client->cursor(db->client, NULL, &client_cursor, 0) != 0) {
- result = ISC_R_FAILURE;
- goto xfr_cleanup;
- }
-
- switch(client_cursor->c_get(client_cursor, &key, &data, DB_GET_BOTH)) {
- case DB_NOTFOUND:
- case DB_SECONDARY_BAD:
- result = ISC_R_NOTFOUND;
- break;
- case 0:
- result = ISC_R_SUCCESS;
- break;
- default:
- result = ISC_R_FAILURE;
- }
-
- xfr_cleanup:
-
- /* free any memory duplicate string in the key field */
- if (key.data != NULL)
- free(key.data);
-
- /* free any memory allocated to the data field. */
- if (data.data != NULL)
- free(data.data);
-
- /* get rid of zone_cursor */
- if (client_cursor != NULL)
- client_cursor->c_close(client_cursor);
-
- return result;
-
-}
-
-static isc_result_t
-bdb_allnodes(const char *zone, void *driverarg, void *dbdata,
- dns_sdlzallnodes_t *allnodes)
-{
-
- isc_result_t result = ISC_R_NOTFOUND;
- bdb_instance_t *db = (bdb_instance_t *) dbdata;
- DBC *zone_cursor = NULL;
- DBT key, data;
- int flags;
- int bdbres;
- parsed_data_t pd;
- char *tmp = NULL, *tmp_zone;
-
- UNUSED(driverarg);
-
- memset(&key, 0, sizeof(DBT));
- memset(&data, 0, sizeof(DBT));
-
- key.data = tmp_zone = strdup(zone);
-
- if (key.data == NULL)
- return (ISC_R_NOMEMORY);
-
- key.size = strlen(key.data);
-
- /* get a cursor to loop through zone data */
- if (db->zone->cursor(db->zone, NULL, &zone_cursor, 0) != 0) {
- result = ISC_R_FAILURE;
- goto allnodes_cleanup;
- }
-
- flags = DB_SET;
-
- while ((bdbres = zone_cursor->c_get(zone_cursor, &key, &data,
- flags)) == 0) {
-
- flags = DB_NEXT_DUP;
-
- tmp = realloc(tmp, data.size + 1);
- if (tmp == NULL)
- goto allnodes_cleanup;
-
- strncpy(tmp, data.data, data.size);
- tmp[data.size] = '\0';
-
- if (bdb_parse_data(tmp, &pd) != ISC_R_SUCCESS)
- goto allnodes_cleanup;
-
- result = dns_sdlz_putnamedrr(allnodes, pd.host, pd.type,
- pd.ttl, pd.data);
- if (result != ISC_R_SUCCESS)
- goto allnodes_cleanup;
-
- } /* end while loop */
-
- allnodes_cleanup:
-
- if (tmp != NULL)
- free(tmp);
-
- /* free any memory duplicate string in the key field */
- if (tmp_zone != NULL)
- free(tmp_zone);
-
- /* get rid of zone_cursor */
- if (zone_cursor != NULL)
- zone_cursor->c_close(zone_cursor);
-
- return result;
-
-}
-
-/*%
- * Performs BDB cleanup.
- * Used by bdb_create if there is an error starting up.
- * Used by bdb_destroy when the driver is shutting down.
- */
-
-static void
-bdb_cleanup(bdb_instance_t *db) {
-
- isc_mem_t *mctx;
-
- /* close databases */
- if (db->data != NULL)
- db->data->close(db->data, 0);
- if (db->host != NULL)
- db->host->close(db->host, 0);
- if (db->zone != NULL)
- db->zone->close(db->zone, 0);
- if (db->client != NULL)
- db->client->close(db->client, 0);
-
- /* close environment */
- if (db->dbenv != NULL)
- db->dbenv->close(db->dbenv, 0);
-
- /* cleanup memory */
- if (db->mctx != NULL) {
- /* save mctx for later */
- mctx = db->mctx;
- /* return, and detach the memory */
- isc_mem_put(mctx, db, sizeof(bdb_instance_t));
- isc_mem_detach(&mctx);
- }
-}
-
-static isc_result_t
-bdb_findzone(void *driverarg, void *dbdata, const char *name,
- dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo)
-{
-
- isc_result_t result;
- bdb_instance_t *db = (bdb_instance_t *) dbdata;
- DBC *zone_cursor = NULL;
- DBT key, data;
-
- UNUSED(driverarg);
- UNUSED(methods);
- UNUSED(clientinfo);
-
- memset(&key, 0, sizeof(DBT));
- memset(&data, 0, sizeof(DBT));
- data.flags = DB_DBT_MALLOC;
-
- key.data = strdup(name);
-
- if (key.data == NULL)
- return (ISC_R_NOMEMORY);
-
- key.size = strlen(key.data);
-
- /* get a cursor to loop through zone data */
- if (db->zone->cursor(db->zone, NULL, &zone_cursor, 0) != 0) {
- result = ISC_R_NOTFOUND;
- goto findzone_cleanup;
- }
-
- switch(zone_cursor->c_get(zone_cursor, &key, &data, DB_SET)) {
- case DB_NOTFOUND:
- case DB_SECONDARY_BAD:
- result = ISC_R_NOTFOUND;
- break;
- case 0:
- result = ISC_R_SUCCESS;
- break;
- default:
- result = ISC_R_FAILURE;
- }
-
- findzone_cleanup:
-
- /* free any memory duplicate string in the key field */
- if (key.data != NULL)
- free(key.data);
-
- /* free any memory allocated to the data field. */
- if (data.data != NULL)
- free(data.data);
-
- /* get rid of zone_cursor */
- if (zone_cursor != NULL)
- zone_cursor->c_close(zone_cursor);
-
- return result;
-}
-
-static isc_result_t
-bdb_lookup(const char *zone, const char *name, void *driverarg,
- void *dbdata, dns_sdlzlookup_t *lookup,
- dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo)
-{
-
- isc_result_t result = ISC_R_NOTFOUND;
- bdb_instance_t *db = (bdb_instance_t *) dbdata;
- DBC *zone_cursor = NULL;
- DBC *host_cursor = NULL;
- DBC *join_cursor = NULL;
- DBT key, data;
- DBC *cur_arr[3];
- int bdbres;
- parsed_data_t pd;
- char *tmp_zone, *tmp_host = NULL;
- char *tmp = NULL;
-
- UNUSED(driverarg);
- UNUSED(methods);
- UNUSED(clientinfo);
-
- memset(&key, 0, sizeof(DBT));
- memset(&data, 0, sizeof(DBT));
-
- /* set zone key */
- key.data = tmp_zone = strdup(zone);
- if (key.data == NULL) {
- result = ISC_R_NOMEMORY;
- goto lookup_cleanup;
- }
- key.size = strlen(key.data);
-
- /* get a cursor to loop through zone data */
- if (db->zone->cursor(db->zone, NULL, &zone_cursor, 0) != 0) {
- result = ISC_R_FAILURE;
- goto lookup_cleanup;
- }
-
- /* initialize zone_cursor with zone_key */
- if (zone_cursor->c_get(zone_cursor, &key, &data, DB_SET) != 0) {
- result = ISC_R_NOTFOUND;
- goto lookup_cleanup;
- }
-
- /* set host key */
- key.data = tmp_host = strdup(name);
- if (key.data == NULL) {
- result = ISC_R_NOMEMORY;
- goto lookup_cleanup;
- }
- key.size = strlen(key.data);
-
- /* get a cursor to loop through host data */
- if (db->host->cursor(db->host, NULL, &host_cursor, 0) != 0) {
- result = ISC_R_FAILURE;
- goto lookup_cleanup;
- }
-
- /* initialize host_cursor with host_key */
- if (host_cursor->c_get(host_cursor, &key, &data, DB_SET) != 0) {
- result = ISC_R_NOTFOUND;
- goto lookup_cleanup;
- }
-
- cur_arr[0] = zone_cursor;
- cur_arr[1] = host_cursor;
- cur_arr[2] = NULL;
-
- db->data->join(db->data, cur_arr, &join_cursor, 0);
-
- while ((bdbres = join_cursor->c_get(join_cursor, &key,
- &data, 0)) == 0) {
-
- tmp = realloc(tmp, data.size + 1);
- if (tmp == NULL)
- goto lookup_cleanup;
-
- strncpy(tmp, data.data, data.size);
- tmp[data.size] = '\0';
-
- if (bdb_parse_data(tmp, &pd) != ISC_R_SUCCESS)
- goto lookup_cleanup;
-
- result = dns_sdlz_putrr(lookup, pd.type, pd.ttl, pd.data);
-
- if (result != ISC_R_SUCCESS)
- goto lookup_cleanup;
- } /* end while loop */
-
- lookup_cleanup:
-
- if (tmp != NULL)
- free(tmp);
- if (tmp_zone != NULL)
- free(tmp_zone);
- if (tmp_host != NULL)
- free(tmp_host);
-
- /* get rid of the joined cusor */
- if (join_cursor != NULL)
- join_cursor->c_close(join_cursor);
-
- /* get rid of zone_cursor */
- if (zone_cursor != NULL)
- zone_cursor->c_close(zone_cursor);
-
- /* get rid of host_cursor */
- if (host_cursor != NULL)
- host_cursor->c_close(host_cursor);
-
- return result;
-}
-
-
-/*% Initializes, sets flags and then opens Berkeley databases. */
-
-static isc_result_t
-bdb_opendb(DB_ENV *db_env, DBTYPE db_type, DB **db, const char *db_name,
- char *db_file, int flags) {
-
- int result;
-
- /* Initialize the database. */
- if ((result = db_create(db, db_env, 0)) != 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "BDB could not initialize %s database. "
- "BDB error: %s",
- db_name, db_strerror(result));
- return ISC_R_FAILURE;
- }
-
- /* set database flags. */
- if ((result = (*db)->set_flags(*db, flags)) != 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "BDB could not set flags for %s database. "
- "BDB error: %s",
- db_name, db_strerror(result));
- return ISC_R_FAILURE;
- }
-
- /* open the database. */
- if ((result = (*db)->open(*db, NULL, db_file, db_name, db_type,
- DB_RDONLY | bdb_threads, 0)) != 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "BDB could not open %s database in %s. "
- "BDB error: %s",
- db_name, db_file, db_strerror(result));
- return ISC_R_FAILURE;
- }
-
- return ISC_R_SUCCESS;
-}
-
-static isc_result_t
-bdb_create(const char *dlzname, unsigned int argc, char *argv[],
- void *driverarg, void **dbdata)
-{
- isc_result_t result;
- int bdbres;
- bdb_instance_t *db = NULL;
-
- UNUSED(dlzname);
- UNUSED(driverarg);
-
- /* verify we have 3 arg's passed to the driver */
- if (argc != 3) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Berkeley DB driver requires at least "
- "2 command line args.");
- return (ISC_R_FAILURE);
- }
-
- /* allocate and zero memory for driver structure */
- db = isc_mem_get(ns_g_mctx, sizeof(bdb_instance_t));
- if (db == NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Could not allocate memory for "
- "database instance object.");
- return (ISC_R_NOMEMORY);
- }
- memset(db, 0, sizeof(bdb_instance_t));
-
- /* attach to the memory context */
- isc_mem_attach(ns_g_mctx, &db->mctx);
-
- /* create BDB environment
- * Basically BDB allocates and assigns memory to db->dbenv
- */
- bdbres = db_env_create(&db->dbenv, 0);
- if (bdbres != 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "BDB environment could not be created. "
- "BDB error: %s",
- db_strerror(bdbres));
- result = ISC_R_FAILURE;
- goto init_cleanup;
- }
-
- /* open BDB environment */
- bdbres = db->dbenv->open(db->dbenv, argv[1],
- DB_INIT_CDB | DB_INIT_MPOOL |
- bdb_threads | DB_CREATE,
- 0);
- if (bdbres != 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "BDB environment at '%s' could not be opened. "
- "BDB error: %s",
- argv[1], db_strerror(bdbres));
- result = ISC_R_FAILURE;
- goto init_cleanup;
- }
-
- /* open dlz_data database. */
- result = bdb_opendb(db->dbenv, DB_UNKNOWN, &db->data,
- dlz_data, argv[2], 0);
- if (result != ISC_R_SUCCESS)
- goto init_cleanup;
-
- /* open dlz_host database. */
- result = bdb_opendb(db->dbenv, DB_UNKNOWN, &db->host,
- dlz_host, argv[2],
- DB_DUP | DB_DUPSORT);
- if (result != ISC_R_SUCCESS)
- goto init_cleanup;
-
- /* open dlz_zone database. */
- result = bdb_opendb(db->dbenv, DB_UNKNOWN, &db->zone,
- dlz_zone, argv[2],
- DB_DUP | DB_DUPSORT);
- if (result != ISC_R_SUCCESS)
- goto init_cleanup;
-
- /* open dlz_client database. */
- result = bdb_opendb(db->dbenv, DB_UNKNOWN, &db->client,
- dlz_client, argv[2], DB_DUP | DB_DUPSORT);
- if (result != ISC_R_SUCCESS)
- goto init_cleanup;
-
- /* associate the host secondary database with the primary database */
- bdbres = db->data->associate(db->data, NULL, db->host, NULL, 0);
- if (bdbres != 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "BDB could not associate %s database with %s. "
- "BDB error: %s",
- dlz_host, dlz_data, db_strerror(bdbres));
- result = ISC_R_FAILURE;
- goto init_cleanup;
- }
-
- /* associate the zone secondary database with the primary database */
- bdbres = db->data->associate(db->data, NULL, db->zone, NULL, 0);
- if (bdbres != 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "BDB could not associate %s database with %s. "
- "BDB error: %s",
- dlz_zone, dlz_data, db_strerror(bdbres));
- result = ISC_R_FAILURE;
- goto init_cleanup;
- }
-
- *dbdata = db;
-
- return(ISC_R_SUCCESS);
-
- init_cleanup:
-
- bdb_cleanup(db);
- return result;
-}
-
-static void
-bdb_destroy(void *driverarg, void *dbdata)
-{
- UNUSED(driverarg);
-
- bdb_cleanup((bdb_instance_t *) dbdata);
-}
-
-/* bdb_authority not needed as authority data is returned by lookup */
-static dns_sdlzmethods_t dlz_bdb_methods = {
- bdb_create,
- bdb_destroy,
- bdb_findzone,
- bdb_lookup,
- NULL,
- bdb_allnodes,
- bdb_allowzonexfr,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
-};
-
-/*%
- * Wrapper around dns_sdlzregister().
- */
-isc_result_t
-dlz_bdb_init(void) {
- isc_result_t result;
-
- /*
- * Write debugging message to log
- */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "Registering DLZ bdb driver.");
-
- result = dns_sdlzregister("bdb", &dlz_bdb_methods, NULL,
- DNS_SDLZFLAG_RELATIVEOWNER |
- DNS_SDLZFLAG_RELATIVERDATA |
- DNS_SDLZFLAG_THREADSAFE,
- ns_g_mctx, &dlz_bdb);
- if (result != ISC_R_SUCCESS) {
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "dns_sdlzregister() failed: %s",
- isc_result_totext(result));
- result = ISC_R_UNEXPECTED;
- }
-
-
- return result;
-}
-
-/*%
- * Wrapper around dns_sdlzunregister().
- */
-void
-dlz_bdb_clear(void) {
-
- /*
- * Write debugging message to log
- */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "Unregistering DLZ bdb driver.");
-
- if (dlz_bdb != NULL)
- dns_sdlzunregister(&dlz_bdb);
-}
-
-#endif
diff --git a/contrib/dlz/drivers/dlz_bdbhpt_driver.c b/contrib/dlz/drivers/dlz_bdbhpt_driver.c
deleted file mode 100644
index 8fbdf7fe..00000000
--- a/contrib/dlz/drivers/dlz_bdbhpt_driver.c
+++ /dev/null
@@ -1,865 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 1999-2001, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifdef DLZ_BDB
-
-#include <config.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <dns/log.h>
-#include <dns/sdlz.h>
-#include <dns/result.h>
-
-#include <isc/mem.h>
-#include <isc/print.h>
-#include <isc/result.h>
-#include <isc/util.h>
-
-#include <named/globals.h>
-
-#include <dlz/dlz_bdbhpt_driver.h>
-
-#include <db.h>
-
-static dns_sdlzimplementation_t *dlz_bdbhpt = NULL;
-
-/* should the bdb driver use threads. */
-#ifdef ISC_PLATFORM_USETHREADS
-#define bdbhpt_threads DB_THREAD
-#else
-#define bdbhpt_threads 0
-#endif
-
-/* bdbhpt database names */
-#define dlz_data "dns_data"
-#define dlz_zone "dns_zone"
-#define dlz_xfr "dns_xfr"
-#define dlz_client "dns_client"
-
- /* This structure contains all the Berkeley DB handles
- * for this instance of the bdbhpt driver.
- */
-
-typedef struct bdbhpt_instance {
- DB_ENV *dbenv; /*%< bdbhpt environment */
- DB *data; /*%< dns_data database handle */
- DB *zone; /*%< zone database handle */
- DB *xfr; /*%< zone xfr database handle */
- DB *client; /*%< client database handle */
- isc_mem_t *mctx; /*%< memory context */
-
-} bdbhpt_instance_t;
-
-typedef struct bdbhpt_parsed_data {
- char *host;
- char *type;
- int ttl;
- char *data;
-} bdbhpt_parsed_data_t;
-
-
-/* forward reference */
-
-static isc_result_t
-bdbhpt_findzone(void *driverarg, void *dbdata, const char *name,
- dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo);
-
-/*%
- * Reverses a string in place.
- */
-
-static char *bdbhpt_strrev(char *str)
-{
- char *p1, *p2;
-
- if (! str || ! *str)
- return str;
- for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2)
- {
- *p1 ^= *p2;
- *p2 ^= *p1;
- *p1 ^= *p2;
- }
- return str;
-}
-
-/*%
- * Parses the DBT from the Berkeley DB into a parsed_data record
- * The parsed_data record should be allocated before and passed into the
- * bdbhpt_parse_data function. The char (type & data) fields should not
- * be "free"d as that memory is part of the DBT data field. It will be
- * "free"d when the DBT is freed.
- */
-
-static isc_result_t
-bdbhpt_parse_data(char *in, bdbhpt_parsed_data_t *pd) {
-
- char *endp, *ttlStr;
- char *tmp = in;
- char *lastchar = (char *) &tmp[strlen(tmp)];
-
- /*%
- * String should be formated as:
- * replication_id
- * (a space)
- * host_name
- * (a space)
- * ttl
- * (a space)
- * type
- * (a space)
- * remaining data
- *
- * examples:
- *
- * 9191 host 10 A 127.0.0.1
- * server1_212 host 10 A 127.0.0.2
- * {xxxx-xxxx-xxxx-xxxx-xxxx} host 10 MX 20 mail.example.com
- */
-
- /*
- * we don't need the replication id, so don't
- * bother saving a pointer to it.
- */
-
- /* find space after replication id */
- tmp = strchr(tmp, ' ');
- /* verify we found a space */
- if (tmp == NULL)
- return ISC_R_FAILURE;
- /* make sure it is safe to increment pointer */
- if (++tmp > lastchar)
- return ISC_R_FAILURE;
-
- /* save pointer to host */
- pd->host = tmp;
-
- /* find space after host and change it to a '\0' */
- tmp = strchr(tmp, ' ');
- /* verify we found a space */
- if (tmp == NULL)
- return ISC_R_FAILURE;
- /* change the space to a null (string terminator) */
- tmp[0] = '\0';
- /* make sure it is safe to increment pointer */
- if (++tmp > lastchar)
- return ISC_R_FAILURE;
-
- /* save pointer to ttl string */
- ttlStr = tmp;
-
- /* find space after ttl and change it to a '\0' */
- tmp = strchr(tmp, ' ');
- /* verify we found a space */
- if (tmp == NULL)
- return ISC_R_FAILURE;
- /* change the space to a null (string terminator) */
- tmp[0] = '\0';
- /* make sure it is safe to increment pointer */
- if (++tmp > lastchar)
- return ISC_R_FAILURE;
-
- /* save pointer to dns type */
- pd->type = tmp;
-
- /* find space after type and change it to a '\0' */
- tmp = strchr(tmp, ' ');
- /* verify we found a space */
- if (tmp == NULL)
- return ISC_R_FAILURE;
- /* change the space to a null (string terminator) */
- tmp[0] = '\0';
- /* make sure it is safe to increment pointer */
- if (++tmp > lastchar)
- return ISC_R_FAILURE;
-
- /* save pointer to remainder of DNS data */
- pd->data = tmp;
-
- /* convert ttl string to integer */
- pd->ttl = strtol(ttlStr, &endp, 10);
- if (*endp != '\0' || pd->ttl < 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "bdbhpt driver ttl must be a postive number");
- return ISC_R_FAILURE;
- }
-
- /* if we get this far everything should have worked. */
- return ISC_R_SUCCESS;
-}
-
-/*
- * DLZ methods
- */
-
-static isc_result_t
-bdbhpt_allowzonexfr(void *driverarg, void *dbdata, const char *name,
- const char *client)
-{
- isc_result_t result;
- bdbhpt_instance_t *db = (bdbhpt_instance_t *) dbdata;
- DBT key, data;
-
- /* check to see if we are authoritative for the zone first. */
- result = bdbhpt_findzone(driverarg, dbdata, name, NULL, NULL);
- if (result != ISC_R_SUCCESS)
- return (ISC_R_NOTFOUND);
-
- memset(&key, 0, sizeof(DBT));
- key.flags = DB_DBT_MALLOC;
- key.data = strdup(name);
- if (key.data == NULL) {
- result = ISC_R_NOMEMORY;
- goto xfr_cleanup;
- }
- key.size = strlen(key.data);
-
- memset(&data, 0, sizeof(DBT));
- data.flags = DB_DBT_MALLOC;
- data.data = strdup(client);
- if (data.data == NULL) {
- result = ISC_R_NOMEMORY;
- goto xfr_cleanup;
- }
- data.size = strlen(data.data);
-
- switch(db->client->get(db->client, NULL, &key, &data, DB_GET_BOTH)) {
- case DB_NOTFOUND:
- result = ISC_R_NOTFOUND;
- break;
- case 0:
- result = ISC_R_SUCCESS;
- break;
- default:
- result = ISC_R_FAILURE;
- }
-
- xfr_cleanup:
-
- /* free any memory duplicate string in the key field */
- if (key.data != NULL)
- free(key.data);
-
- /* free any memory allocated to the data field. */
- if (data.data != NULL)
- free(data.data);
-
- return result;
-
-}
-
-/*%
- * BDB does not allow a secondary index on a database that allows
- * duplicates. We have a few options:
- *
- * 1) kill speed by having lookup method use a secondary db which
- * is associated to the primary DB with the DNS data. Then have
- * another secondary db for zone transfer which also points to
- * the dns_data primary. NO - The point of this driver is
- * lookup performance.
- *
- * 2) Blow up database size by storing DNS data twice. Once for
- * the lookup (dns_data) database, and a second time for the zone
- * transfer (dns_xfr) database. NO - That would probably require
- * a larger cache to provide good performance. Also, that would
- * make the DB larger on disk potentially slowing it as well.
- *
- * 3) Loop through the dns_xfr database with a cursor to get
- * all the different hosts in a zone. Then use the zone & host
- * together to lookup the data in the dns_data database. YES -
- * This may slow down zone xfr's a little, but that's ok they
- * don't happen as often and don't need to be as fast. We can
- * also use this table when deleting a zone (The BDB driver
- * is read only - the delete would be used during replication
- * updates by a separate process).
- */
-
-static isc_result_t
-bdbhpt_allnodes(const char *zone, void *driverarg, void *dbdata,
- dns_sdlzallnodes_t *allnodes)
-{
-
- isc_result_t result = ISC_R_NOTFOUND;
- bdbhpt_instance_t *db = (bdbhpt_instance_t *) dbdata;
- DBC *xfr_cursor = NULL;
- DBC *dns_cursor = NULL;
- DBT xfr_key, xfr_data, dns_key, dns_data;
- int xfr_flags;
- int dns_flags;
- int bdbhptres;
- bdbhpt_parsed_data_t pd;
- char *tmp = NULL, *tmp_zone, *tmp_zone_host = NULL;
-
- UNUSED(driverarg);
-
- memset(&xfr_key, 0, sizeof(DBT));
- memset(&xfr_data, 0, sizeof(DBT));
- memset(&dns_key, 0, sizeof(DBT));
- memset(&dns_data, 0, sizeof(DBT));
-
- xfr_key.data = tmp_zone = strdup(zone);
- if (xfr_key.data == NULL)
- return (ISC_R_NOMEMORY);
-
- xfr_key.size = strlen(xfr_key.data);
-
- /* get a cursor to loop through dns_xfr table */
- if (db->xfr->cursor(db->xfr, NULL, &xfr_cursor, 0) != 0) {
- result = ISC_R_FAILURE;
- goto allnodes_cleanup;
- }
-
- /* get a cursor to loop through dns_data table */
- if (db->data->cursor(db->data, NULL, &dns_cursor, 0) != 0) {
- result = ISC_R_FAILURE;
- goto allnodes_cleanup;
- }
-
- xfr_flags = DB_SET;
-
- /* loop through xfr table for specified zone. */
- while ((bdbhptres = xfr_cursor->c_get(xfr_cursor, &xfr_key, &xfr_data,
- xfr_flags)) == 0) {
-
- xfr_flags = DB_NEXT_DUP;
-
- /* +1 to allow for space between zone and host names */
- dns_key.size = xfr_data.size + xfr_key.size + 1;
-
- /* +1 to allow for null term at end of string. */
- dns_key.data = tmp_zone_host = malloc(dns_key.size + 1);
- if (dns_key.data == NULL)
- goto allnodes_cleanup;
-
- /*
- * construct search key for dns_data.
- * zone_name(a space)host_name
- */
- strcpy(dns_key.data, zone);
- strcat(dns_key.data, " ");
- strncat(dns_key.data, xfr_data.data, xfr_data.size);
-
- dns_flags = DB_SET;
-
- while ((bdbhptres = dns_cursor->c_get(dns_cursor, &dns_key,
- &dns_data,
- dns_flags)) == 0) {
-
- dns_flags = DB_NEXT_DUP;
-
- /* +1 to allow for null term at end of string. */
- tmp = realloc(tmp, dns_data.size + 1);
- if (tmp == NULL)
- goto allnodes_cleanup;
-
- /* copy data to tmp string, and append null term. */
- strncpy(tmp, dns_data.data, dns_data.size);
- tmp[dns_data.size] = '\0';
-
- /* split string into dns data parts. */
- if (bdbhpt_parse_data(tmp, &pd) != ISC_R_SUCCESS)
- goto allnodes_cleanup;
-
- result = dns_sdlz_putnamedrr(allnodes, pd.host,
- pd.type, pd.ttl, pd.data);
- if (result != ISC_R_SUCCESS)
- goto allnodes_cleanup;
-
- } /* end inner while loop */
-
- /* clean up memory */
- if (tmp_zone_host != NULL) {
- free(tmp_zone_host);
- tmp_zone_host = NULL;
- }
- } /* end outer while loop */
-
- allnodes_cleanup:
-
- /* free any memory */
- if (tmp != NULL)
- free(tmp);
-
- if (tmp_zone_host != NULL)
- free(tmp_zone_host);
-
- if (tmp_zone != NULL)
- free(tmp_zone);
-
- /* get rid of cursors */
- if (xfr_cursor != NULL)
- xfr_cursor->c_close(xfr_cursor);
-
- if (dns_cursor != NULL)
- dns_cursor->c_close(dns_cursor);
-
- return result;
-}
-
-/*%
- * Performs bdbhpt cleanup.
- * Used by bdbhpt_create if there is an error starting up.
- * Used by bdbhpt_destroy when the driver is shutting down.
- */
-
-static void
-bdbhpt_cleanup(bdbhpt_instance_t *db) {
-
- isc_mem_t *mctx;
-
- /* close databases */
- if (db->data != NULL)
- db->data->close(db->data, 0);
- if (db->xfr != NULL)
- db->xfr->close(db->xfr, 0);
- if (db->zone != NULL)
- db->zone->close(db->zone, 0);
- if (db->client != NULL)
- db->client->close(db->client, 0);
-
- /* close environment */
- if (db->dbenv != NULL)
- db->dbenv->close(db->dbenv, 0);
-
- /* cleanup memory */
- if (db->mctx != NULL) {
- /* save mctx for later */
- mctx = db->mctx;
- /* return, and detach the memory */
- isc_mem_put(mctx, db, sizeof(bdbhpt_instance_t));
- isc_mem_detach(&mctx);
- }
-}
-
-static isc_result_t
-bdbhpt_findzone(void *driverarg, void *dbdata, const char *name,
- dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo)
-{
-
- isc_result_t result;
- bdbhpt_instance_t *db = (bdbhpt_instance_t *) dbdata;
- DBT key, data;
-
- UNUSED(driverarg);
- UNUSED(methods);
- UNUSED(clientinfo);
-
- memset(&key, 0, sizeof(DBT));
- memset(&data, 0, sizeof(DBT));
- data.flags = DB_DBT_MALLOC;
-
- key.data = strdup(name);
-
- if (key.data == NULL)
- return (ISC_R_NOMEMORY);
-
- /*
- * reverse string to take advantage of BDB locality of reference
- * if we need futher lookups because the zone doesn't match the
- * first time.
- */
- key.data = bdbhpt_strrev(key.data);
- key.size = strlen(key.data);
-
- switch(db->zone->get(db->zone, NULL, &key, &data, 0)) {
- case DB_NOTFOUND:
- result = ISC_R_NOTFOUND;
- break;
- case 0:
- result = ISC_R_SUCCESS;
- break;
- default:
- result = ISC_R_FAILURE;
- }
-
- /* free any memory duplicate string in the key field */
- if (key.data != NULL)
- free(key.data);
-
- /* free any memory allocated to the data field. */
- if (data.data != NULL)
- free(data.data);
-
- return result;
-}
-
-static isc_result_t
-bdbhpt_lookup(const char *zone, const char *name, void *driverarg,
- void *dbdata, dns_sdlzlookup_t *lookup,
- dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo)
-{
-
- isc_result_t result = ISC_R_NOTFOUND;
- bdbhpt_instance_t *db = (bdbhpt_instance_t *) dbdata;
- DBC *data_cursor = NULL;
- DBT key, data;
- int bdbhptres;
- int flags;
-
- bdbhpt_parsed_data_t pd;
- char *tmp = NULL;
- char *keyStr = NULL;
-
- UNUSED(driverarg);
- UNUSED(methods);
- UNUSED(clientinfo);
-
- memset(&key, 0, sizeof(DBT));
- memset(&data, 0, sizeof(DBT));
-
- key.size = strlen(zone) + strlen(name) + 1;
-
- /* allocate mem for key */
- key.data = keyStr = malloc((key.size + 1) * sizeof(char));
-
- if (keyStr == NULL)
- return ISC_R_NOMEMORY;
-
- strcpy(keyStr, zone);
- strcat(keyStr, " ");
- strcat(keyStr, name);
-
- /* get a cursor to loop through data */
- if (db->data->cursor(db->data, NULL, &data_cursor, 0) != 0) {
- result = ISC_R_FAILURE;
- goto lookup_cleanup;
- }
-
- result = ISC_R_NOTFOUND;
-
- flags = DB_SET;
- while ((bdbhptres = data_cursor->c_get(data_cursor, &key, &data,
- flags)) == 0) {
-
- flags = DB_NEXT_DUP;
- tmp = realloc(tmp, data.size + 1);
- if (tmp == NULL)
- goto lookup_cleanup;
-
- strncpy(tmp, data.data, data.size);
- tmp[data.size] = '\0';
-
- if (bdbhpt_parse_data(tmp, &pd) != ISC_R_SUCCESS)
- goto lookup_cleanup;
-
- result = dns_sdlz_putrr(lookup, pd.type, pd.ttl, pd.data);
-
- if (result != ISC_R_SUCCESS)
- goto lookup_cleanup;
- } /* end while loop */
-
- lookup_cleanup:
-
- /* get rid of cursor */
- if (data_cursor != NULL)
- data_cursor->c_close(data_cursor);
-
- if (keyStr != NULL)
- free(keyStr);
- if (tmp != NULL)
- free(tmp);
-
- return result;
-}
-
-/*% Initializes, sets flags and then opens Berkeley databases. */
-
-static isc_result_t
-bdbhpt_opendb(DB_ENV *db_env, DBTYPE db_type, DB **db, const char *db_name,
- char *db_file, int flags) {
-
- int result;
-
- /* Initialize the database. */
- if ((result = db_create(db, db_env, 0)) != 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "bdbhpt could not initialize %s database. "
- "bdbhpt error: %s",
- db_name, db_strerror(result));
- return ISC_R_FAILURE;
- }
-
- /* set database flags. */
- if ((result = (*db)->set_flags(*db, flags)) != 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "bdbhpt could not set flags for %s database. "
- "bdbhpt error: %s",
- db_name, db_strerror(result));
- return ISC_R_FAILURE;
- }
-
- /* open the database. */
- if ((result = (*db)->open(*db, NULL, db_file, db_name, db_type,
- DB_RDONLY | bdbhpt_threads, 0)) != 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "bdbhpt could not open %s database in %s. "
- "bdbhpt error: %s",
- db_name, db_file, db_strerror(result));
- return ISC_R_FAILURE;
- }
-
- return ISC_R_SUCCESS;
-}
-
-static isc_result_t
-bdbhpt_create(const char *dlzname, unsigned int argc, char *argv[],
- void *driverarg, void **dbdata)
-{
- isc_result_t result;
- int bdbhptres;
- int bdbFlags = 0;
- bdbhpt_instance_t *db = NULL;
-
- UNUSED(dlzname);
- UNUSED(driverarg);
-
- /* verify we have 4 arg's passed to the driver */
- if (argc != 4) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "bdbhpt driver requires at least "
- "3 command line args.");
- return (ISC_R_FAILURE);
- }
-
- switch((char) *argv[1]) {
- /*
- * Transactional mode. Highest safety - lowest speed.
- */
- case 'T':
- case 't':
- bdbFlags = DB_INIT_MPOOL | DB_INIT_LOCK |
- DB_INIT_LOG | DB_INIT_TXN;
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(1),
- "bdbhpt driver using transactional mode.");
- break;
- /*
- * Concurrent mode. Lower safety (no rollback) -
- * higher speed.
- */
- case 'C':
- case 'c':
- bdbFlags = DB_INIT_CDB | DB_INIT_MPOOL;
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(1),
- "bdbhpt driver using concurrent mode.");
- break;
- /*
- * Private mode. No inter-process communication & no locking.
- * Lowest saftey - highest speed.
- */
- case 'P':
- case 'p':
- bdbFlags = DB_PRIVATE | DB_INIT_MPOOL;
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(1),
- "bdbhpt driver using private mode.");
- break;
- default:
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "bdbhpt driver requires the operating mode "
- "be set to P or C or T. You specified '%s'",
- argv[1]);
- return (ISC_R_FAILURE);
- }
-
- /* allocate and zero memory for driver structure */
- db = isc_mem_get(ns_g_mctx, sizeof(bdbhpt_instance_t));
- if (db == NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Could not allocate memory for "
- "database instance object.");
- return (ISC_R_NOMEMORY);
- }
- memset(db, 0, sizeof(bdbhpt_instance_t));
-
- /* attach to the memory context */
- isc_mem_attach(ns_g_mctx, &db->mctx);
-
- /*
- * create bdbhpt environment
- * Basically bdbhpt allocates and assigns memory to db->dbenv
- */
- bdbhptres = db_env_create(&db->dbenv, 0);
- if (bdbhptres != 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "bdbhpt environment could not be created. "
- "bdbhpt error: %s",
- db_strerror(bdbhptres));
- result = ISC_R_FAILURE;
- goto init_cleanup;
- }
-
- /* open bdbhpt environment */
- bdbhptres = db->dbenv->open(db->dbenv, argv[2],
- bdbFlags | bdbhpt_threads | DB_CREATE, 0);
- if (bdbhptres != 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "bdbhpt environment at '%s' could not be opened."
- " bdbhpt error: %s",
- argv[2], db_strerror(bdbhptres));
- result = ISC_R_FAILURE;
- goto init_cleanup;
- }
-
- /* open dlz_data database. */
- result = bdbhpt_opendb(db->dbenv, DB_UNKNOWN, &db->data,
- dlz_data, argv[3], DB_DUP | DB_DUPSORT);
- if (result != ISC_R_SUCCESS)
- goto init_cleanup;
-
- /* open dlz_xfr database. */
- result = bdbhpt_opendb(db->dbenv, DB_UNKNOWN, &db->xfr,
- dlz_xfr, argv[3], DB_DUP | DB_DUPSORT);
- if (result != ISC_R_SUCCESS)
- goto init_cleanup;
-
- /* open dlz_zone database. */
- result = bdbhpt_opendb(db->dbenv, DB_UNKNOWN, &db->zone,
- dlz_zone, argv[3], 0);
- if (result != ISC_R_SUCCESS)
- goto init_cleanup;
-
- /* open dlz_client database. */
- result = bdbhpt_opendb(db->dbenv, DB_UNKNOWN, &db->client,
- dlz_client, argv[3], DB_DUP | DB_DUPSORT);
- if (result != ISC_R_SUCCESS)
- goto init_cleanup;
-
- *dbdata = db;
-
- return(ISC_R_SUCCESS);
-
- init_cleanup:
-
- bdbhpt_cleanup(db);
- return result;
-}
-
-static void
-bdbhpt_destroy(void *driverarg, void *dbdata)
-{
- UNUSED(driverarg);
-
- bdbhpt_cleanup((bdbhpt_instance_t *) dbdata);
-}
-
-/*
- * bdbhpt_authority not needed as authority data is returned by lookup
- */
-static dns_sdlzmethods_t dlz_bdbhpt_methods = {
- bdbhpt_create,
- bdbhpt_destroy,
- bdbhpt_findzone,
- bdbhpt_lookup,
- NULL,
- bdbhpt_allnodes,
- bdbhpt_allowzonexfr,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
-};
-
-/*%
- * Wrapper around dns_sdlzregister().
- */
-isc_result_t
-dlz_bdbhpt_init(void) {
- isc_result_t result;
-
- /*
- * Write debugging message to log
- */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "Registering DLZ bdbhpt driver.");
-
- result = dns_sdlzregister("bdbhpt", &dlz_bdbhpt_methods, NULL,
- DNS_SDLZFLAG_RELATIVEOWNER |
- DNS_SDLZFLAG_RELATIVERDATA |
- DNS_SDLZFLAG_THREADSAFE,
- ns_g_mctx, &dlz_bdbhpt);
- if (result != ISC_R_SUCCESS) {
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "dns_sdlzregister() failed: %s",
- isc_result_totext(result));
- result = ISC_R_UNEXPECTED;
- }
-
-
- return result;
-}
-
-/*%
- * Wrapper around dns_sdlzunregister().
- */
-void
-dlz_bdbhpt_clear(void) {
-
- /*
- * Write debugging message to log
- */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "Unregistering DLZ bdbhpt driver.");
-
- if (dlz_bdbhpt != NULL)
- dns_sdlzunregister(&dlz_bdbhpt);
-}
-
-#endif
diff --git a/contrib/dlz/drivers/dlz_dlopen_driver.c b/contrib/dlz/drivers/dlz_dlopen_driver.c
deleted file mode 100644
index e69de29b..00000000
--- a/contrib/dlz/drivers/dlz_dlopen_driver.c
+++ /dev/null
diff --git a/contrib/dlz/drivers/dlz_drivers.c b/contrib/dlz/drivers/dlz_drivers.c
deleted file mode 100644
index 7ad166c7..00000000
--- a/contrib/dlz/drivers/dlz_drivers.c
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (C) 2005 Internet Systems Consortium, Inc. ("ISC")
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/* $Id: dlz_drivers.c,v 1.4 2011/03/10 04:36:16 each Exp $ */
-
-/*! \file */
-
-#include <config.h>
-
-#include <isc/result.h>
-
-/*
- * Pull in declarations for this module's functions.
- */
-
-#include <dlz/dlz_drivers.h>
-
-/*
- * Pull in driver-specific stuff.
- */
-
-#ifdef DLZ_STUB
-#include <dlz/dlz_stub_driver.h>
-#endif
-
-#ifdef DLZ_POSTGRES
-#include <dlz/dlz_postgres_driver.h>
-#endif
-
-#ifdef DLZ_MYSQL
-#include <dlz/dlz_mysql_driver.h>
-#endif
-
-#ifdef DLZ_FILESYSTEM
-#include <dlz/dlz_filesystem_driver.h>
-#endif
-
-#ifdef DLZ_BDB
-#include <dlz/dlz_bdb_driver.h>
-#include <dlz/dlz_bdbhpt_driver.h>
-#endif
-
-#ifdef DLZ_LDAP
-#include <dlz/dlz_ldap_driver.h>
-#endif
-
-#ifdef DLZ_ODBC
-#include <dlz/dlz_odbc_driver.h>
-#endif
-
-/*%
- * Call init functions for all relevant DLZ drivers.
- */
-
-isc_result_t
-dlz_drivers_init(void) {
-
- isc_result_t result = ISC_R_SUCCESS;
-
-#ifdef DLZ_STUB
- result = dlz_stub_init();
- if (result != ISC_R_SUCCESS)
- return (result);
-#endif
-
-#ifdef DLZ_POSTGRES
- result = dlz_postgres_init();
- if (result != ISC_R_SUCCESS)
- return (result);
-#endif
-
-#ifdef DLZ_MYSQL
- result = dlz_mysql_init();
- if (result != ISC_R_SUCCESS)
- return (result);
-#endif
-
-#ifdef DLZ_FILESYSTEM
- result = dlz_fs_init();
- if (result != ISC_R_SUCCESS)
- return (result);
-#endif
-
-#ifdef DLZ_BDB
- result = dlz_bdb_init();
- if (result != ISC_R_SUCCESS)
- return (result);
- result = dlz_bdbhpt_init();
- if (result != ISC_R_SUCCESS)
- return (result);
-#endif
-
-#ifdef DLZ_LDAP
- result = dlz_ldap_init();
- if (result != ISC_R_SUCCESS)
- return (result);
-#endif
-
-#ifdef DLZ_ODBC
- result = dlz_odbc_init();
- if (result != ISC_R_SUCCESS)
- return (result);
-#endif
-
- return (result);
-}
-
-/*%
- * Call shutdown functions for all relevant DLZ drivers.
- */
-
-void
-dlz_drivers_clear(void) {
-
-#ifdef DLZ_STUB
- dlz_stub_clear();
-#endif
-
-#ifdef DLZ_POSTGRES
- dlz_postgres_clear();
-#endif
-
-#ifdef DLZ_MYSQL
- dlz_mysql_clear();
-#endif
-
-#ifdef DLZ_FILESYSTEM
- dlz_fs_clear();
-#endif
-
-#ifdef DLZ_BDB
- dlz_bdb_clear();
- dlz_bdbhpt_clear();
-#endif
-
-#ifdef DLZ_LDAP
- dlz_ldap_clear();
-#endif
-
-#ifdef DLZ_ODBC
- dlz_odbc_clear();
-#endif
-
-}
diff --git a/contrib/dlz/drivers/dlz_filesystem_driver.c b/contrib/dlz/drivers/dlz_filesystem_driver.c
deleted file mode 100644
index e8fbe5b8..00000000
--- a/contrib/dlz/drivers/dlz_filesystem_driver.c
+++ /dev/null
@@ -1,1067 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 1999-2001, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifdef DLZ_FILESYSTEM
-
-#include <config.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <sys/stat.h>
-
-#include <dns/log.h>
-#include <dns/sdlz.h>
-#include <dns/result.h>
-
-#include <isc/dir.h>
-#include <isc/mem.h>
-#include <isc/platform.h>
-#include <isc/print.h>
-#include <isc/result.h>
-#include <isc/util.h>
-
-#include <named/globals.h>
-
-#include <dlz/dlz_filesystem_driver.h>
-
-static dns_sdlzimplementation_t *dlz_fs = NULL;
-
-typedef struct config_data {
- char *basedir;
- int basedirsize;
- char *datadir;
- int datadirsize;
- char *xfrdir;
- int xfrdirsize;
- int splitcnt;
- char separator;
- char pathsep;
- isc_mem_t *mctx;
-} config_data_t;
-
-typedef struct dir_entry dir_entry_t;
-
-struct dir_entry {
- char dirpath[ISC_DIR_PATHMAX];
- ISC_LINK(dir_entry_t) link;
-};
-
-typedef ISC_LIST(dir_entry_t) dlist_t;
-
-/* forward reference */
-
-static void
-fs_destroy(void *driverarg, void *dbdata);
-
-/*
- * Private methods
- */
-
-static isc_boolean_t
-is_safe(const char *input) {
- unsigned int i;
- unsigned int len = strlen(input);
-
- /* check that only allowed characters are in the domain name */
- for (i=0; i < len; i++) {
- /* '.' is allowed, but has special requirements */
- if (input[i] == '.') {
- /* '.' is not allowed as first char */
- if (i == 0)
- return (ISC_FALSE);
- /* '..', two dots together is not allowed. */
- else if (input[i-1] == '.')
- return (ISC_FALSE);
- /* '.' is not allowed as last char */
- if (i == len)
- return (ISC_FALSE);
- /* only 1 dot in ok location, continue at next char */
- continue;
- }
- /* '-' is allowed, continue at next char */
- if (input[i] == '-')
- continue;
- /* 0-9 is allowed, continue at next char */
- if (input[i] >= '0' && input[i] <= '9')
- continue;
- /* A-Z uppercase is allowed, continue at next char */
- if (input[i] >= 'A' && input[i] <= 'Z')
- continue;
- /* a-z lowercase is allowed, continue at next char */
- if (input[i] >= 'a' && input[i] <= 'z')
- continue;
-
- /*
- * colon needs to be allowed for IPV6 client
- * addresses. Not dangerous in domain names, as not a
- * special char.
- */
- if (input[i] == ':')
- continue;
-
- /*
- * '@' needs to be allowed for in zone data. Not
- * dangerous in domain names, as not a special char.
- */
- if (input[i] == '@')
- continue;
-
- /*
- * if we reach this point we have encountered a
- * disallowed char!
- */
- return (ISC_FALSE);
- }
- /* everything ok. */
- return (ISC_TRUE);
-}
-
-static isc_result_t
-create_path_helper(char *out, const char *in, config_data_t *cd) {
- char *tmpString;
- char *tmpPtr;
- int i;
-
- tmpString = isc_mem_strdup(ns_g_mctx, in);
- if (tmpString == NULL)
- return (ISC_R_NOMEMORY);
-
- /*
- * don't forget is_safe guarantees '.' will NOT be the
- * first/last char
- */
- while ((tmpPtr = strrchr(tmpString, '.')) != NULL) {
- i = 0;
- while (tmpPtr[i+1] != '\0') {
- if (cd->splitcnt < 1)
- strcat(out, (char *) &tmpPtr[i+1]);
- else
- strncat(out, (char *) &tmpPtr[i+1],
- cd->splitcnt);
- strncat(out, (char *) &cd->pathsep, 1);
- if (cd->splitcnt == 0)
- break;
- if (strlen((char *) &tmpPtr[i+1]) <=
- (unsigned int) cd->splitcnt)
- break;
- i += cd->splitcnt;
- }
- tmpPtr[0] = '\0';
- }
-
- /* handle the "first" label properly */
- i=0;
- tmpPtr = tmpString;
- while (tmpPtr[i] != '\0') {
- if (cd->splitcnt < 1)
- strcat(out, (char *) &tmpPtr[i]);
- else
- strncat(out, (char *) &tmpPtr[i], cd->splitcnt);
- strncat(out, (char *) &cd->pathsep, 1);
- if (cd->splitcnt == 0)
- break;
- if (strlen((char *) &tmpPtr[i]) <=
- (unsigned int) cd->splitcnt)
- break;
- i += cd->splitcnt;
- }
-
- isc_mem_free(ns_g_mctx, tmpString);
- return (ISC_R_SUCCESS);
-}
-
-/*%
- * Checks to make sure zone and host are safe. If safe, then
- * hashes zone and host strings to build a path. If zone / host
- * are not safe an error is returned.
- */
-
-static isc_result_t
-create_path(const char *zone, const char *host, const char *client,
- config_data_t *cd, char **path)
-{
-
- char *tmpPath;
- int pathsize;
- int len;
- isc_result_t result;
- isc_boolean_t isroot = ISC_FALSE;
-
- /* we require a zone & cd parameter */
- REQUIRE(zone != NULL);
- REQUIRE(cd != NULL);
- /* require path to be a pointer to NULL */
- REQUIRE(path != NULL && *path == NULL);
- /*
- * client and host may both be NULL, but they can't both be
- * NON-NULL
- */
- REQUIRE( (host == NULL && client == NULL) ||
- (host != NULL && client == NULL) ||
- (host == NULL && client != NULL) );
-
- /* special case for root zone */
- if (strcmp(zone, ".") == 0)
- isroot = ISC_TRUE;
-
- /* if the requested zone is "unsafe", return error */
- if (!isroot && !is_safe(zone))
- return (ISC_R_FAILURE);
-
- /* if host was passed, verify that it is safe */
- if (host != NULL && !is_safe(host))
- return (ISC_R_FAILURE);
-
- /* if client was passed, verify that it is safe */
- if (client != NULL && !is_safe(client))
- return (ISC_R_FAILURE);
-
- /* Determine how much memory the split up string will require */
- if (host != NULL)
- len = strlen(zone) + strlen(host);
- else if (client != NULL)
- len = strlen(zone) + strlen(client);
- else
- len = strlen(zone);
-
- /*
- * even though datadir and xfrdir will never be in the same
- * string we only waste a few bytes by allocating for both,
- * and then we are safe from buffer overruns.
- */
- pathsize = len + cd->basedirsize +
- cd->datadirsize + cd->xfrdirsize + 4;
-
- /* if we are splitting names, we will need extra space. */
- if (cd->splitcnt > 0)
- pathsize += len/cd->splitcnt;
-
- tmpPath = isc_mem_allocate(ns_g_mctx , pathsize * sizeof(char));
- if (tmpPath == NULL) {
- /* write error message */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Filesystem driver unable to "
- "allocate memory in create_path().");
- result = ISC_R_NOMEMORY;
- goto cleanup_mem;
- }
-
- /*
- * build path string.
- * start out with base directory.
- */
- strcpy(tmpPath, cd->basedir);
-
- /* add zone name - parsed properly */
- if (!isroot) {
- result = create_path_helper(tmpPath, zone, cd);
- if (result != ISC_R_SUCCESS)
- goto cleanup_mem;
- }
-
- /*
- * When neither client or host is passed we are building a
- * path to see if a zone is supported. We require that a zone
- * path have the "data dir" directory contained within it so
- * that we know this zone is really supported. Otherwise,
- * this zone may not really be supported because we are
- * supporting a delagated sub zone.
- *
- * Example:
- *
- * We are supporting long.domain.com and using a splitcnt of
- * 0. the base dir is "/base-dir/" and the data dir is
- * "/.datadir" We want to see if we are authoritative for
- * domain.com. Path /base-dir/com/domain/.datadir since
- * /base-dir/com/domain/.datadir does not exist, we are not
- * authoritative for the domain "domain.com". However we are
- * authoritative for the domain "long.domain.com" because the
- * path /base-dir/com/domain/long/.datadir does exist!
- */
-
- /* if client is passed append xfr dir, otherwise append data dir */
- if (client != NULL) {
- strcat(tmpPath, cd->xfrdir);
- strncat(tmpPath, (char *) &cd->pathsep, 1);
- strcat(tmpPath, client);
- } else {
- strcat(tmpPath, cd->datadir);
- }
-
- /* if host not null, add it. */
- if (host != NULL) {
- strncat(tmpPath, (char *) &cd->pathsep, 1);
- if ((result = create_path_helper(tmpPath, host,
- cd)) != ISC_R_SUCCESS)
- goto cleanup_mem;
- }
-
- /* return the path we built. */
- *path = tmpPath;
-
- /* return success */
- result = ISC_R_SUCCESS;
-
- cleanup_mem:
- /* cleanup memory */
-
- /* free tmpPath memory */
- if (tmpPath != NULL && result != ISC_R_SUCCESS)
- isc_mem_free(ns_g_mctx, tmpPath);
-
- /* free tmpPath memory */
- return (result);
-}
-
-static isc_result_t
-process_dir(isc_dir_t *dir, void *passback, config_data_t *cd,
- dlist_t *dir_list, unsigned int basedirlen)
-{
-
- char tmp[ISC_DIR_PATHMAX + ISC_DIR_NAMEMAX];
- int astPos;
- struct stat sb;
- isc_result_t result = ISC_R_FAILURE;
- char *endp;
- char *type;
- char *ttlStr;
- char *data;
- char host[ISC_DIR_NAMEMAX];
- char *tmpString;
- char *tmpPtr;
- int ttl;
- int i;
- int len;
- dir_entry_t *direntry;
- isc_boolean_t foundHost;
-
- tmp[0] = '\0'; /* set 1st byte to '\0' so strcpy works right. */
- host[0] = '\0';
- foundHost = ISC_FALSE;
-
- /* copy base directory name to tmp. */
- strcpy(tmp, dir->dirname);
-
- /* dir->dirname will always have '*' as the last char. */
- astPos = strlen(dir->dirname) - 1;
-
- /* if dir_list != NULL, were are performing a zone xfr */
- if (dir_list != NULL) {
- /* if splitcnt == 0, determine host from path. */
- if (cd->splitcnt == 0) {
- if (strlen(tmp) - 3 > basedirlen) {
- tmp[astPos-1] = '\0';
- tmpString = (char *) &tmp[basedirlen+1];
- /* handle filesystem's special wildcard "-" */
- if (strcmp(tmpString, "-") == 0) {
- strcpy(host, "*");
- } else {
- /*
- * not special wildcard -- normal name
- */
- while ((tmpPtr = strrchr(tmpString,
- cd->pathsep))
- != NULL)
- {
- if ((strlen(host) +
- strlen(tmpPtr + 1) + 2)
- > ISC_DIR_NAMEMAX)
- continue;
- strcat(host, tmpPtr + 1);
- strcat(host, ".");
- tmpPtr[0] = '\0';
- }
- if ((strlen(host) +
- strlen(tmpString) + 1)
- <= ISC_DIR_NAMEMAX)
- strcat(host, tmpString);
- }
-
- foundHost = ISC_TRUE;
- /* set tmp again for use later */
- strcpy(tmp, dir->dirname);
- }
- } else {
- /*
- * if splitcnt != 0 determine host from
- * ".host" directory entry
- */
- while (isc_dir_read(dir) == ISC_R_SUCCESS) {
- if (strncasecmp(".host",
- dir->entry.name, 5) == 0) {
- /*
- * handle filesystem's special
- * wildcard "-"
- */
- if (strcmp((char *) &dir->entry.name[6],
- "-") == 0)
- strcpy(host, "*");
- else {
- strncpy(host,
- (char *) &dir->entry.name[6],
- sizeof(host) - 1);
- host[255] = '\0';
- }
- foundHost = ISC_TRUE;
- break;
- }
- }
- /* reset dir list for use later */
- isc_dir_reset(dir);
- } /* end of else */
- }
-
- while (isc_dir_read(dir) == ISC_R_SUCCESS) {
-
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(1),
- "Filesystem driver Dir name:"
- " '%s' Dir entry: '%s'\n",
- dir->dirname, dir->entry.name);
-
- /* skip any entries starting with "." */
- if (dir->entry.name[0] == '.')
- continue;
-
- /*
- * get rid of '*', set to NULL. Effectively trims
- * string from previous loop to base directory only
- * while still leaving memory for concat to be
- * performed next.
- */
-
- tmp[astPos] = '\0';
-
- /* add name to base directory name. */
- strcat(tmp, dir->entry.name);
-
- /* make sure we can stat entry */
- if (stat(tmp, &sb) == 0 ) {
- /* if entry is a directory */
- if ((sb.st_mode & S_IFDIR) != 0) {
- /*
- * if dir list is NOT NULL, add dir to
- * dir list
- */
- if (dir_list != NULL) {
- direntry =
- isc_mem_get(ns_g_mctx,
- sizeof(dir_entry_t));
- if (direntry == NULL)
- return (ISC_R_NOMEMORY);
- strcpy(direntry->dirpath, tmp);
- ISC_LINK_INIT(direntry, link);
- ISC_LIST_APPEND(*dir_list, direntry,
- link);
- result = ISC_R_SUCCESS;
- }
- continue;
-
- /*
- * if entry is a file be sure we do
- * not add entry to DNS results if we
- * are performing a zone xfr and we
- * could not find a host entry.
- */
-
- } else if (dir_list != NULL &&
- foundHost == ISC_FALSE) {
- continue;
- }
- } else /* if we cannot stat entry, skip it. */
- continue;
-
- type = dir->entry.name;
- ttlStr = strchr(type, cd->separator);
- if (ttlStr == NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Filesystem driver: "
- "%s could not be parsed properly",
- tmp);
- return (ISC_R_FAILURE);
- }
-
- /* replace separator char with NULL to split string */
- ttlStr[0] = '\0';
- /* start string after NULL of previous string */
- ttlStr = (char *) &ttlStr[1];
-
- data = strchr(ttlStr, cd->separator);
- if (data == NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Filesystem driver: "
- "%s could not be parsed properly",
- tmp);
- return (ISC_R_FAILURE);
- }
-
- /* replace separator char with NULL to split string */
- data[0] = '\0';
-
- /* start string after NULL of previous string */
- data = (char *) &data[1];
-
- /* replace all cd->separator chars with a space. */
- len = strlen(data);
-
- for (i=0; i < len; i++) {
- if (data[i] == cd->separator)
- data[i] = ' ';
- }
-
- /* convert text to int, make sure it worked right */
- ttl = strtol(ttlStr, &endp, 10);
- if (*endp != '\0' || ttl < 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Filesystem driver "
- "ttl must be a postive number");
- }
-
- /* pass data back to Bind */
- if (dir_list == NULL)
- result = dns_sdlz_putrr((dns_sdlzlookup_t *) passback,
- type, ttl, data);
- else
- result = dns_sdlz_putnamedrr((dns_sdlzallnodes_t *)
- passback,
- (char *) host,
- type, ttl, data);
-
- /* if error, return error right away */
- if (result != ISC_R_SUCCESS)
- return (result);
- } /* end of while loop */
-
- return (result);
-}
-
-/*
- * SDLZ interface methods
- */
-
-static isc_result_t
-fs_allowzonexfr(void *driverarg, void *dbdata, const char *name,
- const char *client)
-{
-
- isc_result_t result;
- char *path;
- struct stat sb;
- config_data_t *cd;
- path = NULL;
-
- UNUSED(driverarg);
-
- cd = (config_data_t *) dbdata;
-
- if (create_path(name, NULL, client, cd, &path) != ISC_R_SUCCESS) {
- return (ISC_R_NOTFOUND);
- }
-
- if (stat(path, &sb) != 0) {
- result = ISC_R_NOTFOUND;
- goto complete_AXFR;
- }
-
- if ((sb.st_mode & S_IFREG) != 0) {
- result = ISC_R_SUCCESS;
- goto complete_AXFR;
- }
-
- result = ISC_R_NOTFOUND;
-
- complete_AXFR:
- isc_mem_free(ns_g_mctx, path);
- return (result);
-}
-
-static isc_result_t
-fs_allnodes(const char *zone, void *driverarg, void *dbdata,
- dns_sdlzallnodes_t *allnodes)
-{
-
- isc_result_t result;
- dlist_t *dir_list;
- config_data_t *cd;
- char *basepath;
- unsigned int basepathlen;
- struct stat sb;
- isc_dir_t dir;
- dir_entry_t *dir_entry;
- dir_entry_t *next_de;
-
- basepath = NULL;
- dir_list = NULL;
-
- UNUSED(driverarg);
- UNUSED(allnodes);
-
- cd = (config_data_t *) dbdata;
-
- /* allocate memory for list */
- dir_list = isc_mem_get(ns_g_mctx, sizeof(dlist_t));
- if (dir_list == NULL) {
- result = ISC_R_NOTFOUND;
- goto complete_allnds;
- }
-
- /* initialize list */
- ISC_LIST_INIT(*dir_list);
-
- if (create_path(zone, NULL, NULL, cd, &basepath) != ISC_R_SUCCESS) {
- return (ISC_R_NOTFOUND);
- }
-
- /* remove path separator at end of path so stat works properly */
- basepathlen = strlen(basepath);
-
- if (stat(basepath, &sb) != 0) {
- result = ISC_R_NOTFOUND;
- goto complete_allnds;
- }
-
- if ((sb.st_mode & S_IFDIR) == 0) {
- result = ISC_R_NOTFOUND;
- goto complete_allnds;
- }
-
- /* initialize and open directory */
- isc_dir_init(&dir);
- result = isc_dir_open(&dir, basepath);
-
- /* if directory open failed, return error. */
- if (result != ISC_R_SUCCESS) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Unable to open %s directory to read entries.",
- basepath);
- result = ISC_R_FAILURE;
- goto complete_allnds;
- }
-
- /* process the directory */
- result = process_dir(&dir, allnodes, cd, dir_list, basepathlen);
-
- /* close the directory */
- isc_dir_close(&dir);
-
- if (result != ISC_R_SUCCESS)
- goto complete_allnds;
-
- /* get first dir entry from list. */
- dir_entry = ISC_LIST_HEAD(*dir_list);
- while (dir_entry != NULL) {
-
- result = isc_dir_open(&dir, dir_entry->dirpath);
- /* if directory open failed, return error. */
- if (result != ISC_R_SUCCESS) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Unable to open %s "
- "directory to read entries.",
- basepath);
- result = ISC_R_FAILURE;
- goto complete_allnds;
- }
-
- /* process the directory */
- result = process_dir(&dir, allnodes, cd, dir_list, basepathlen);
-
- /* close the directory */
- isc_dir_close(&dir);
-
- if (result != ISC_R_SUCCESS)
- goto complete_allnds;
-
- dir_entry = ISC_LIST_NEXT(dir_entry, link);
- } /* end while */
-
- complete_allnds:
- if (dir_list != NULL) {
- /* clean up entries from list. */
- dir_entry = ISC_LIST_HEAD(*dir_list);
- while (dir_entry != NULL) {
- next_de = ISC_LIST_NEXT(dir_entry, link);
- isc_mem_put(ns_g_mctx, dir_entry, sizeof(dir_entry_t));
- dir_entry = next_de;
- } /* end while */
- isc_mem_put(ns_g_mctx, dir_list, sizeof(dlist_t));
- }
-
- if (basepath != NULL)
- isc_mem_free(ns_g_mctx, basepath);
-
- return (result);
-}
-
-static isc_result_t
-fs_findzone(void *driverarg, void *dbdata, const char *name,
- dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo)
-{
-
- isc_result_t result;
- char *path;
- struct stat sb;
- path = NULL;
-
- UNUSED(driverarg);
- UNUSED(methods);
- UNUSED(clientinfo);
-
- if (create_path(name, NULL, NULL, (config_data_t *) dbdata,
- &path) != ISC_R_SUCCESS) {
- return (ISC_R_NOTFOUND);
- }
-
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(1),
- "Filesystem driver Findzone() Checking for path: '%s'\n",
- path);
-
- if (stat(path, &sb) != 0) {
- result = ISC_R_NOTFOUND;
- goto complete_FZ;
- }
-
- if ((sb.st_mode & S_IFDIR) != 0) {
- result = ISC_R_SUCCESS;
- goto complete_FZ;
- }
-
- result = ISC_R_NOTFOUND;
-
- complete_FZ:
-
- isc_mem_free(ns_g_mctx, path);
- return (result);
-}
-
-static isc_result_t
-fs_lookup(const char *zone, const char *name, void *driverarg,
- void *dbdata, dns_sdlzlookup_t *lookup,
- dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo)
-{
- isc_result_t result;
- char *path;
- struct stat sb;
- isc_dir_t dir;
- path = NULL;
-
- UNUSED(driverarg);
- UNUSED(lookup);
- UNUSED(methods);
- UNUSED(clientinfo);
-
- if (strcmp(name, "*") == 0)
- /*
- * handle filesystem's special wildcard "-"
- */
- result = create_path(zone, "-", NULL,
- (config_data_t *) dbdata, &path);
- else
- result = create_path(zone, name, NULL,
- (config_data_t *) dbdata, &path);
-
- if ( result != ISC_R_SUCCESS) {
- return (ISC_R_NOTFOUND);
- }
-
- /* remove path separator at end of path so stat works properly */
- path[strlen(path)-1] = '\0';
-
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(1),
- "Filesystem driver lookup() Checking for path: '%s'\n",
- path);
-
-
- if (stat(path, &sb) != 0) {
- result = ISC_R_NOTFOUND;
- goto complete_lkup;
- }
-
- if ((sb.st_mode & S_IFDIR) == 0) {
- result = ISC_R_NOTFOUND;
- goto complete_lkup;
- }
-
- /* initialize and open directory */
- isc_dir_init(&dir);
- result = isc_dir_open(&dir, path);
-
- /* if directory open failed, return error. */
- if (result != ISC_R_SUCCESS) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Unable to open %s directory to read entries.",
- path);
- result = ISC_R_FAILURE;
- goto complete_lkup;
- }
-
- /* process any records in the directory */
- result = process_dir(&dir, lookup, (config_data_t *) dbdata, NULL, 0);
-
- /* close the directory */
- isc_dir_close(&dir);
-
- complete_lkup:
-
- isc_mem_free(ns_g_mctx, path);
- return (result);
-}
-
-static isc_result_t
-fs_create(const char *dlzname, unsigned int argc, char *argv[],
- void *driverarg, void **dbdata)
-{
- config_data_t *cd;
- char *endp;
- int len;
- char pathsep;
-
- UNUSED(driverarg);
- UNUSED(dlzname);
-
- /* we require 5 command line args. */
- if (argc != 6) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Filesystem driver requires "
- "6 command line args.");
- return (ISC_R_FAILURE);
- }
-
- if (strlen(argv[5]) > 1) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Filesystem driver can only "
- "accept a single character for separator.");
- return (ISC_R_FAILURE);
- }
-
- /* verify base dir ends with '/' or '\' */
- len = strlen(argv[1]);
- if (argv[1][len-1] != '\\' && argv[1][len-1] != '/') {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Base dir parameter for filesystem driver "
- "should end with %s",
- "either '/' or '\\' ");
- return (ISC_R_FAILURE);
- }
-
- /* determine and save path separator for later */
- if (argv[1][len-1] == '\\')
- pathsep = '\\';
- else
- pathsep = '/';
-
- /* allocate memory for our config data */
- cd = isc_mem_get(ns_g_mctx, sizeof(config_data_t));
- if (cd == NULL)
- goto no_mem;
-
- /* zero the memory */
- memset(cd, 0, sizeof(config_data_t));
-
- cd->pathsep = pathsep;
-
- /* get and store our base directory */
- cd->basedir = isc_mem_strdup(ns_g_mctx, argv[1]);
- if (cd->basedir == NULL)
- goto no_mem;
- cd->basedirsize = strlen(cd->basedir);
-
- /* get and store our data sub-dir */
- cd->datadir = isc_mem_strdup(ns_g_mctx, argv[2]);
- if (cd->datadir == NULL)
- goto no_mem;
- cd->datadirsize = strlen(cd->datadir);
-
- /* get and store our zone xfr sub-dir */
- cd->xfrdir = isc_mem_strdup(ns_g_mctx, argv[3]);
- if (cd->xfrdir == NULL)
- goto no_mem;
- cd->xfrdirsize = strlen(cd->xfrdir);
-
- /* get and store our directory split count */
- cd->splitcnt = strtol(argv[4], &endp, 10);
- if (*endp != '\0' || cd->splitcnt < 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Directory split count must be zero (0) "
- "or a postive number");
- }
-
- /* get and store our separator character */
- cd->separator = *argv[5];
-
- /* attach config data to memory context */
- isc_mem_attach(ns_g_mctx, &cd->mctx);
-
- /* pass back config data */
- *dbdata = cd;
-
- /* return success */
- return (ISC_R_SUCCESS);
-
- /* handle no memory error */
- no_mem:
-
- /* if we allocated a config data object clean it up */
- if (cd != NULL)
- fs_destroy(NULL, cd);
-
- /* write error message */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Filesystem driver unable to "
- "allocate memory for config data.");
-
- /* return error */
- return (ISC_R_NOMEMORY);
-}
-
-static void
-fs_destroy(void *driverarg, void *dbdata)
-{
- isc_mem_t *mctx;
- config_data_t *cd;
-
- UNUSED(driverarg);
-
- cd = (config_data_t *) dbdata;
-
- /*
- * free memory for each section of config data that was
- * allocated
- */
- if (cd->basedir != NULL)
- isc_mem_free(ns_g_mctx, cd->basedir);
-
- if (cd->datadir != NULL)
- isc_mem_free(ns_g_mctx, cd->datadir);
-
- if (cd->xfrdir != NULL)
- isc_mem_free(ns_g_mctx, cd->xfrdir);
-
- /* hold memory context to use later */
- mctx = cd->mctx;
-
- /* free config data memory */
- isc_mem_put(mctx, cd, sizeof(config_data_t));
-
- /* detach memory from context */
- isc_mem_detach(&mctx);
-}
-
-static dns_sdlzmethods_t dlz_fs_methods = {
- fs_create,
- fs_destroy,
- fs_findzone,
- fs_lookup,
- NULL,
- fs_allnodes,
- fs_allowzonexfr,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
-};
-
-/*%
- * Wrapper around dns_sdlzregister().
- */
-isc_result_t
-dlz_fs_init(void)
-{
- isc_result_t result;
-
- /*
- * Write debugging message to log
- */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "Registering DLZ filesystem driver.");
-
- result = dns_sdlzregister("filesystem", &dlz_fs_methods, NULL,
- DNS_SDLZFLAG_RELATIVEOWNER |
- DNS_SDLZFLAG_RELATIVERDATA,
- ns_g_mctx, &dlz_fs);
- if (result != ISC_R_SUCCESS) {
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "dns_sdlzregister() failed: %s",
- isc_result_totext(result));
- result = ISC_R_UNEXPECTED;
- }
-
- return (result);
-}
-
-/*%
- * Wrapper around dns_sdlzunregister().
- */
-void
-dlz_fs_clear(void) {
-
- /*
- * Write debugging message to log
- */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "Unregistering DLZ filesystem driver.");
-
- if (dlz_fs != NULL)
- dns_sdlzunregister(&dlz_fs);
-}
-
-#endif
diff --git a/contrib/dlz/drivers/dlz_ldap_driver.c b/contrib/dlz/drivers/dlz_ldap_driver.c
deleted file mode 100644
index 2b2dcf85..00000000
--- a/contrib/dlz/drivers/dlz_ldap_driver.c
+++ /dev/null
@@ -1,1341 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for BIND 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 1999-2001, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifdef DLZ_LDAP
-
-#include <config.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <dns/log.h>
-#include <dns/sdlz.h>
-#include <dns/result.h>
-
-#include <isc/mem.h>
-#include <isc/platform.h>
-#include <isc/print.h>
-#include <isc/result.h>
-#include <isc/string.h>
-#include <isc/util.h>
-
-#include <named/globals.h>
-
-#include <dlz/sdlz_helper.h>
-#include <dlz/dlz_ldap_driver.h>
-
-/*
- * Need older API functions from ldap.h.
- */
-#define LDAP_DEPRECATED 1
-
-#include <ldap.h>
-
-#define SIMPLE "simple"
-#define KRB41 "krb41"
-#define KRB42 "krb42"
-#define V2 "v2"
-#define V3 "v3"
-
-static dns_sdlzimplementation_t *dlz_ldap = NULL;
-
-#define dbc_search_limit 30
-#define ALLNODES 1
-#define ALLOWXFR 2
-#define AUTHORITY 3
-#define FINDZONE 4
-#define LOOKUP 5
-
-/*%
- * Structure to hold everthing needed by this "instance" of the LDAP
- * driver remember, the driver code is only loaded once, but may have
- * many separate instances.
- */
-
-typedef struct {
-#ifdef ISC_PLATFORM_USETHREADS
- db_list_t *db; /*%< handle to a list of DB */
-#else
- dbinstance_t *db; /*%< handle to db */
-#endif
- int method; /*%< security authentication method */
- char *user; /*%< who is authenticating */
- char *cred; /*%< password for simple authentication method */
- int protocol; /*%< LDAP communication protocol version */
- char *hosts; /*%< LDAP server hosts */
-} ldap_instance_t;
-
-/* forward references */
-
-static isc_result_t
-dlz_ldap_findzone(void *driverarg, void *dbdata, const char *name,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo);
-
-static void
-dlz_ldap_destroy(void *driverarg, void *dbdata);
-
-/*
- * Private methods
- */
-
-/*% checks that the LDAP URL parameters make sense */
-static isc_result_t
-dlz_ldap_checkURL(char *URL, int attrCnt, const char *msg) {
- isc_result_t result = ISC_R_SUCCESS;
- int ldap_result;
- LDAPURLDesc *ldap_url = NULL;
-
- if (!ldap_is_ldap_url(URL)) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "%s query is not a valid LDAP URL", msg);
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- ldap_result = ldap_url_parse(URL, &ldap_url);
- if (ldap_result != LDAP_SUCCESS || ldap_url == NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "parsing %s query failed", msg);
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- if (ldap_count_values(ldap_url->lud_attrs) < attrCnt) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "%s query must specify at least "
- "%d attributes to return",
- msg, attrCnt);
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- if (ldap_url->lud_host != NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "%s query must not specify a host", msg);
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- if (ldap_url->lud_port != 389) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "%s query must not specify a port", msg);
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- if (ldap_url->lud_dn == NULL || strlen (ldap_url->lud_dn) < 1) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "%s query must specify a search base", msg);
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- if (ldap_url->lud_exts != NULL || ldap_url->lud_crit_exts != 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "%s uses extensions. "
- "The driver does not support LDAP extensions.",
- msg);
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- cleanup:
- if (ldap_url != NULL)
- ldap_free_urldesc(ldap_url);
-
- return (result);
-}
-
-/*% Connects / reconnects to LDAP server */
-static isc_result_t
-dlz_ldap_connect(ldap_instance_t *dbi, dbinstance_t *dbc) {
- isc_result_t result;
- int ldap_result;
-
- /* if we have a connection, get ride of it. */
- if (dbc->dbconn != NULL) {
- ldap_unbind_s((LDAP *) dbc->dbconn);
- dbc->dbconn = NULL;
- }
-
- /* now connect / reconnect. */
-
- /* initialize. */
- dbc->dbconn = ldap_init(dbi->hosts, LDAP_PORT);
- if (dbc->dbconn == NULL)
- return (ISC_R_NOMEMORY);
-
- /* set protocol version. */
- ldap_result = ldap_set_option((LDAP *) dbc->dbconn,
- LDAP_OPT_PROTOCOL_VERSION,
- &(dbi->protocol));
- if (ldap_result != LDAP_SUCCESS) {
- result = ISC_R_NOPERM;
- goto cleanup;
- }
-
- /* "bind" to server. i.e. send username / pass */
- ldap_result = ldap_bind_s((LDAP *) dbc->dbconn, dbi->user,
- dbi->cred, dbi->method);
- if (ldap_result != LDAP_SUCCESS) {
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- return (ISC_R_SUCCESS);
-
- cleanup:
-
- /* cleanup if failure. */
- if (dbc->dbconn != NULL) {
- ldap_unbind_s((LDAP *) dbc->dbconn);
- dbc->dbconn = NULL;
- }
-
- return (result);
-}
-
-#ifdef ISC_PLATFORM_USETHREADS
-
-
-/*%
- * Properly cleans up a list of database instances.
- * This function is only used when the driver is compiled for
- * multithreaded operation.
- */
-static void
-ldap_destroy_dblist(db_list_t *dblist) {
- dbinstance_t *ndbi = NULL;
- dbinstance_t *dbi = NULL;
-
- /* get the first DBI in the list */
- ndbi = ISC_LIST_HEAD(*dblist);
-
- /* loop through the list */
- while (ndbi != NULL) {
- dbi = ndbi;
- /* get the next DBI in the list */
- ndbi = ISC_LIST_NEXT(dbi, link);
- /* release DB connection */
- if (dbi->dbconn != NULL)
- ldap_unbind_s((LDAP *) dbi->dbconn);
- /* release all memory that comprised a DBI */
- destroy_sqldbinstance(dbi);
- }
- /* release memory for the list structure */
- isc_mem_put(ns_g_mctx, dblist, sizeof(db_list_t));
-}
-
-/*%
- * Loops through the list of DB instances, attempting to lock
- * on the mutex. If successful, the DBI is reserved for use
- * and the thread can perform queries against the database.
- * If the lock fails, the next one in the list is tried.
- * looping continues until a lock is obtained, or until
- * the list has been searched dbc_search_limit times.
- * This function is only used when the driver is compiled for
- * multithreaded operation.
- */
-static dbinstance_t *
-ldap_find_avail_conn(db_list_t *dblist) {
- dbinstance_t *dbi = NULL;
- dbinstance_t *head;
- int count = 0;
-
- /* get top of list */
- head = dbi = ISC_LIST_HEAD(*dblist);
-
- /* loop through list */
- while (count < dbc_search_limit) {
- /* try to lock on the mutex */
- if (isc_mutex_trylock(&dbi->instance_lock) == ISC_R_SUCCESS)
- return (dbi); /* success, return the DBI for use. */
-
- /* not successful, keep trying */
- dbi = ISC_LIST_NEXT(dbi, link);
-
- /* check to see if we have gone to the top of the list. */
- if (dbi == NULL) {
- count++;
- dbi = head;
- }
- }
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_INFO,
- "LDAP driver unable to find available connection "
- "after searching %d times",
- count);
- return (NULL);
-}
-#endif /* ISC_PLATFORM_USETHREADS */
-
-static isc_result_t
-ldap_process_results(LDAP *dbc, LDAPMessage *msg, char ** attrs,
- void *ptr, isc_boolean_t allnodes)
-{
- isc_result_t result = ISC_R_SUCCESS;
- int i = 0;
- int j;
- int len;
- char *attribute = NULL;
- LDAPMessage *entry;
- char *endp = NULL;
- char *host = NULL;
- char *type = NULL;
- char *data = NULL;
- char **vals = NULL;
- int ttl;
-
- /* make sure there are at least some attributes to process. */
- REQUIRE(attrs != NULL || attrs[0] != NULL);
-
- /* get the first entry to process */
- entry = ldap_first_entry(dbc, msg);
- if (entry == NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_INFO,
- "LDAP no entries to process.");
- return (ISC_R_FAILURE);
- }
-
- /* loop through all entries returned */
- while (entry != NULL) {
- /* reset for this loop */
- ttl = 0;
- len = 0;
- i = 0;
- attribute = attrs[i];
-
- /* determine how much space we need for data string */
- for (j = 0; attrs[j] != NULL; j++) {
- /* get the list of values for this attribute. */
- vals = ldap_get_values(dbc, entry, attrs[j]);
- /* skip empty attributes. */
- if (vals == NULL || ldap_count_values(vals) < 1)
- continue;
- /*
- * we only use the first value. this driver
- * does not support multi-valued attributes.
- */
- len = len + strlen(vals[0]) + 1;
- /* free vals for next loop */
- ldap_value_free(vals);
- } /* end for (j = 0; attrs[j] != NULL, j++) loop */
-
- /* allocate memory for data string */
- data = isc_mem_allocate(ns_g_mctx, len + 1);
- if (data == NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "LDAP driver unable to allocate memory "
- "while processing results");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- /*
- * Make sure data is null termed at the beginning so
- * we can check if any data was stored to it later.
- */
- data[0] = '\0';
-
- /* reset j to re-use below */
- j = 0;
-
- /* loop through the attributes in the order specified. */
- while (attribute != NULL) {
- /* get the list of values for this attribute. */
- vals = ldap_get_values(dbc, entry, attribute);
-
- /* skip empty attributes. */
- if (vals == NULL || vals[0] == NULL) {
- /* increment attibute pointer */
- attribute = attrs[++i];
- /* start loop over */
- continue;
- }
-
- /*
- * j initially = 0. Increment j each time we
- * set a field that way next loop will set
- * next field.
- */
- switch(j) {
- case 0:
- j++;
- /*
- * convert text to int, make sure it
- * worked right
- */
- ttl = strtol(vals[0], &endp, 10);
- if (*endp != '\0' || ttl < 0) {
- isc_log_write(dns_lctx,
- DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ,
- ISC_LOG_ERROR,
- "LDAP driver ttl must "
- "be a postive number");
- goto cleanup;
- }
- break;
- case 1:
- j++;
- type = isc_mem_strdup(ns_g_mctx, vals[0]);
- break;
- case 2:
- j++;
- if (allnodes)
- host = isc_mem_strdup(ns_g_mctx,
- vals[0]);
- else
- strcpy(data, vals[0]);
- break;
- case 3:
- j++;
- if (allnodes)
- strcpy(data, vals[0]);
- else {
- strcat(data, " ");
- strcat(data, vals[0]);
- }
- break;
- default:
- strcat(data, " ");
- strcat(data, vals[0]);
- break;
- } /* end switch(j) */
-
- /* free values */
- ldap_value_free(vals);
- vals = NULL;
-
- /* increment attibute pointer */
- attribute = attrs[++i];
- } /* end while (attribute != NULL) */
-
- if (type == NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "LDAP driver unable "
- "to retrieve DNS type");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- if (strlen(data) < 1) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "LDAP driver unable "
- "to retrieve DNS data");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- if (allnodes && host != NULL) {
- if (strcasecmp(host, "~") == 0)
- result = dns_sdlz_putnamedrr(
- (dns_sdlzallnodes_t *) ptr,
- "*", type, ttl, data);
- else
- result = dns_sdlz_putnamedrr(
- (dns_sdlzallnodes_t *) ptr,
- host, type, ttl, data);
- if (result != ISC_R_SUCCESS)
- isc_log_write(dns_lctx,
- DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "dlz-ldap: putnamedrr failed "
- "for \"%s %s %u %s\", %s",
- host, type, ttl, data,
- isc_result_totext(result));
- } else {
- result = dns_sdlz_putrr((dns_sdlzlookup_t *) ptr,
- type, ttl, data);
- if (result != ISC_R_SUCCESS)
- isc_log_write(dns_lctx,
- DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "dlz-ldap: putrr failed "
- "for \"%s %u %s\", %s",
- type, ttl, data,
- isc_result_totext(result));
- }
-
- if (result != ISC_R_SUCCESS) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "LDAP driver failed "
- "while sending data to BIND.");
- goto cleanup;
- }
-
- /* free memory for type, data and host for next loop */
- isc_mem_free(ns_g_mctx, type);
- isc_mem_free(ns_g_mctx, data);
- if (host != NULL)
- isc_mem_free(ns_g_mctx, host);
-
- /* get the next entry to process */
- entry = ldap_next_entry(dbc, entry);
- } /* end while (entry != NULL) */
-
- cleanup:
- /* de-allocate memory */
- if (vals != NULL)
- ldap_value_free(vals);
- if (host != NULL)
- isc_mem_free(ns_g_mctx, host);
- if (type != NULL)
- isc_mem_free(ns_g_mctx, type);
- if (data != NULL)
- isc_mem_free(ns_g_mctx, data);
-
- return (result);
-}
-
-/*%
- * This function is the real core of the driver. Zone, record
- * and client strings are passed in (or NULL is passed if the
- * string is not available). The type of query we want to run
- * is indicated by the query flag, and the dbdata object is passed
- * passed in to. dbdata really holds either:
- * 1) a list of database instances (in multithreaded mode) OR
- * 2) a single database instance (in single threaded mode)
- * The function will construct the query and obtain an available
- * database instance (DBI). It will then run the query and hopefully
- * obtain a result set.
- */
-static isc_result_t
-ldap_get_results(const char *zone, const char *record,
- const char *client, unsigned int query,
- void *dbdata, void *ptr)
-{
- isc_result_t result;
- dbinstance_t *dbi = NULL;
- char *querystring = NULL;
- LDAPURLDesc *ldap_url = NULL;
- int ldap_result = 0;
- LDAPMessage *ldap_msg = NULL;
- int i;
- int entries;
-
- /* get db instance / connection */
-#ifdef ISC_PLATFORM_USETHREADS
-
- /* find an available DBI from the list */
- dbi = ldap_find_avail_conn((db_list_t *)
- ((ldap_instance_t *)dbdata)->db);
-
-#else /* ISC_PLATFORM_USETHREADS */
-
- /*
- * only 1 DBI - no need to lock instance lock either
- * only 1 thread in the whole process, no possible contention.
- */
- dbi = (dbinstance_t *) ((ldap_instance_t *)dbdata)->db;
-
-#endif /* ISC_PLATFORM_USETHREADS */
-
- /* if DBI is null, can't do anything else */
- if (dbi == NULL)
- return (ISC_R_FAILURE);
-
- /* set fields */
- if (zone != NULL) {
- dbi->zone = isc_mem_strdup(ns_g_mctx, zone);
- if (dbi->zone == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- } else {
- dbi->zone = NULL;
- }
- if (record != NULL) {
- dbi->record = isc_mem_strdup(ns_g_mctx, record);
- if (dbi->record == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- } else {
- dbi->record = NULL;
- }
- if (client != NULL) {
- dbi->client = isc_mem_strdup(ns_g_mctx, client);
- if (dbi->client == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- } else {
- dbi->client = NULL;
- }
-
- /* what type of query are we going to run? */
- switch(query) {
- case ALLNODES:
- /*
- * if the query was not passed in from the config file
- * then we can't run it. return not_implemented, so
- * it's like the code for that operation was never
- * built into the driver.... AHHH flexibility!!!
- */
- if (dbi->allnodes_q == NULL) {
- result = ISC_R_NOTIMPLEMENTED;
- goto cleanup;
- } else {
- querystring = build_querystring(ns_g_mctx,
- dbi->allnodes_q);
- }
- break;
- case ALLOWXFR:
- /* same as comments as ALLNODES */
- if (dbi->allowxfr_q == NULL) {
- result = ISC_R_NOTIMPLEMENTED;
- goto cleanup;
- } else {
- querystring = build_querystring(ns_g_mctx,
- dbi->allowxfr_q);
- }
- break;
- case AUTHORITY:
- /* same as comments as ALLNODES */
- if (dbi->authority_q == NULL) {
- result = ISC_R_NOTIMPLEMENTED;
- goto cleanup;
- } else {
- querystring = build_querystring(ns_g_mctx,
- dbi->authority_q);
- }
- break;
- case FINDZONE:
- /* this is required. It's the whole point of DLZ! */
- if (dbi->findzone_q == NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "No query specified for findzone. "
- "Findzone requires a query");
- result = ISC_R_FAILURE;
- goto cleanup;
- } else {
- querystring = build_querystring(ns_g_mctx,
- dbi->findzone_q);
- }
- break;
- case LOOKUP:
- /* this is required. It's also a major point of DLZ! */
- if (dbi->lookup_q == NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "No query specified for lookup. "
- "Lookup requires a query");
- result = ISC_R_FAILURE;
- goto cleanup;
- } else {
- querystring = build_querystring(ns_g_mctx,
- dbi->lookup_q);
- }
- break;
- default:
- /*
- * this should never happen. If it does, the code is
- * screwed up!
- */
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "Incorrect query flag passed to "
- "ldap_get_results");
- result = ISC_R_UNEXPECTED;
- goto cleanup;
- }
-
- /* if the querystring is null, Bummer, outta RAM. UPGRADE TIME!!! */
- if (querystring == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
-
- /*
- * output the full query string during debug so we can see
- * what lame error the query has.
- */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(1),
- "\nQuery String: %s\n", querystring);
-
- /* break URL down into it's component parts, if error cleanup */
- ldap_result = ldap_url_parse(querystring, &ldap_url);
- if (ldap_result != LDAP_SUCCESS || ldap_url == NULL) {
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- for (i = 0; i < 3; i++) {
-
- /*
- * dbi->dbconn may be null if trying to reconnect on a
- * previous query failed.
- */
- if (dbi->dbconn == NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_INFO,
- "LDAP driver attempting to re-connect");
-
- result = dlz_ldap_connect((ldap_instance_t *) dbdata,
- dbi);
- if (result != ISC_R_SUCCESS) {
- result = ISC_R_FAILURE;
- continue;
- }
- }
-
- /* perform ldap search syncronously */
- ldap_result = ldap_search_s((LDAP *) dbi->dbconn,
- ldap_url->lud_dn,
- ldap_url->lud_scope,
- ldap_url->lud_filter,
- ldap_url->lud_attrs, 0, &ldap_msg);
-
- /*
- * check return code. No such object is ok, just
- * didn't find what we wanted
- */
- switch(ldap_result) {
- case LDAP_NO_SUCH_OBJECT:
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(1),
- "No object found matching "
- "query requirements");
- result = ISC_R_NOTFOUND;
- goto cleanup;
- break;
- case LDAP_SUCCESS: /* on success do nothing */
- result = ISC_R_SUCCESS;
- i = 3;
- break;
- case LDAP_SERVER_DOWN:
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_INFO,
- "LDAP driver attempting to re-connect");
- result = dlz_ldap_connect((ldap_instance_t *) dbdata,
- dbi);
- if (result != ISC_R_SUCCESS)
- result = ISC_R_FAILURE;
- break;
- default:
- /*
- * other errors not ok. Log error message and
- * get out
- */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "LDAP error: %s",
- ldap_err2string(ldap_result));
- result = ISC_R_FAILURE;
- goto cleanup;
- break;
- } /* close switch(ldap_result) */
- } /* end for (int i = 0 i < 3; i++) */
-
- if (result != ISC_R_SUCCESS)
- goto cleanup;
-
- switch(query) {
- case ALLNODES:
- result = ldap_process_results((LDAP *) dbi->dbconn, ldap_msg,
- ldap_url->lud_attrs,
- ptr, isc_boolean_true);
- break;
- case AUTHORITY:
- case LOOKUP:
- result = ldap_process_results((LDAP *) dbi->dbconn, ldap_msg,
- ldap_url->lud_attrs,
- ptr, isc_boolean_false);
- break;
- case ALLOWXFR:
- entries = ldap_count_entries((LDAP *) dbi->dbconn, ldap_msg);
- if (entries == 0)
- result = ISC_R_NOPERM;
- else if (entries > 0)
- result = ISC_R_SUCCESS;
- else
- result = ISC_R_FAILURE;
- break;
- case FINDZONE:
- entries = ldap_count_entries((LDAP *) dbi->dbconn, ldap_msg);
- if (entries == 0)
- result = ISC_R_NOTFOUND;
- else if (entries > 0)
- result = ISC_R_SUCCESS;
- else
- result = ISC_R_FAILURE;
- break;
- default:
- /*
- * this should never happen. If it does, the code is
- * screwed up!
- */
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "Incorrect query flag passed to "
- "ldap_get_results");
- result = ISC_R_UNEXPECTED;
- }
-
- cleanup:
- /* it's always good to cleanup after yourself */
-
- /* if we retrieved results, free them */
- if (ldap_msg != NULL)
- ldap_msgfree(ldap_msg);
-
- if (ldap_url != NULL)
- ldap_free_urldesc(ldap_url);
-
- /* cleanup */
- if (dbi->zone != NULL)
- isc_mem_free(ns_g_mctx, dbi->zone);
- if (dbi->record != NULL)
- isc_mem_free(ns_g_mctx, dbi->record);
- if (dbi->client != NULL)
- isc_mem_free(ns_g_mctx, dbi->client);
-
-#ifdef ISC_PLATFORM_USETHREADS
-
- /* release the lock so another thread can use this dbi */
- isc_mutex_unlock(&dbi->instance_lock);
-
-#endif /* ISC_PLATFORM_USETHREADS */
-
- /* release query string */
- if (querystring != NULL)
- isc_mem_free(ns_g_mctx, querystring );
-
- /* return result */
- return (result);
-}
-
-/*
- * DLZ methods
- */
-static isc_result_t
-dlz_ldap_allowzonexfr(void *driverarg, void *dbdata, const char *name,
- const char *client)
-{
- isc_result_t result;
-
- UNUSED(driverarg);
-
- /* check to see if we are authoritative for the zone first */
- result = dlz_ldap_findzone(driverarg, dbdata, name, NULL, NULL);
- if (result != ISC_R_SUCCESS) {
- return (result);
- }
-
- /* get all the zone data */
- result = ldap_get_results(name, NULL, client, ALLOWXFR, dbdata, NULL);
- return (result);
-}
-
-static isc_result_t
-dlz_ldap_allnodes(const char *zone, void *driverarg, void *dbdata,
- dns_sdlzallnodes_t *allnodes)
-{
- UNUSED(driverarg);
- return (ldap_get_results(zone, NULL, NULL, ALLNODES, dbdata, allnodes));
-}
-
-static isc_result_t
-dlz_ldap_authority(const char *zone, void *driverarg, void *dbdata,
- dns_sdlzlookup_t *lookup)
-{
- UNUSED(driverarg);
- return (ldap_get_results(zone, NULL, NULL, AUTHORITY, dbdata, lookup));
-}
-
-static isc_result_t
-dlz_ldap_findzone(void *driverarg, void *dbdata, const char *name,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-{
- UNUSED(driverarg);
- UNUSED(methods);
- UNUSED(clientinfo);
- return (ldap_get_results(name, NULL, NULL, FINDZONE, dbdata, NULL));
-}
-
-static isc_result_t
-dlz_ldap_lookup(const char *zone, const char *name, void *driverarg,
- void *dbdata, dns_sdlzlookup_t *lookup,
- dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo)
-{
- isc_result_t result;
-
- UNUSED(driverarg);
- UNUSED(methods);
- UNUSED(clientinfo);
-
- if (strcmp(name, "*") == 0)
- result = ldap_get_results(zone, "~", NULL, LOOKUP,
- dbdata, lookup);
- else
- result = ldap_get_results(zone, name, NULL, LOOKUP,
- dbdata, lookup);
- return (result);
-}
-
-
-static isc_result_t
-dlz_ldap_create(const char *dlzname, unsigned int argc, char *argv[],
- void *driverarg, void **dbdata)
-{
- isc_result_t result;
- ldap_instance_t *ldap_inst = NULL;
- dbinstance_t *dbi = NULL;
- int protocol;
- int method;
-
-#ifdef ISC_PLATFORM_USETHREADS
- /* if multi-threaded, we need a few extra variables. */
- int dbcount;
- char *endp;
-/* db_list_t *dblist = NULL; */
- int i;
-
-#endif /* ISC_PLATFORM_USETHREADS */
-
- UNUSED(dlzname);
- UNUSED(driverarg);
-
-#ifdef ISC_PLATFORM_USETHREADS
- /* if debugging, let user know we are multithreaded. */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(1),
- "LDAP driver running multithreaded");
-#else /* ISC_PLATFORM_USETHREADS */
- /* if debugging, let user know we are single threaded. */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(1),
- "LDAP driver running single threaded");
-#endif /* ISC_PLATFORM_USETHREADS */
-
- if (argc < 9) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "LDAP driver requires at least "
- "8 command line args.");
- return (ISC_R_FAILURE);
- }
-
- /* no more than 13 arg's should be passed to the driver */
- if (argc > 12) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "LDAP driver cannot accept more than "
- "11 command line args.");
- return (ISC_R_FAILURE);
- }
-
- /* determine protocol version. */
- if (strncasecmp(argv[2], V2, strlen(V2)) == 0) {
- protocol = 2;
- } else if (strncasecmp(argv[2], V3, strlen(V3)) == 0) {
- protocol = 3;
- } else {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "LDAP driver protocol must be either %s or %s",
- V2, V3);
- return (ISC_R_FAILURE);
- }
-
- /* determine connection method. */
- if (strncasecmp(argv[3], SIMPLE, strlen(SIMPLE)) == 0) {
- method = LDAP_AUTH_SIMPLE;
- } else if (strncasecmp(argv[3], KRB41, strlen(KRB41)) == 0) {
- method = LDAP_AUTH_KRBV41;
- } else if (strncasecmp(argv[3], KRB42, strlen(KRB42)) == 0) {
- method = LDAP_AUTH_KRBV42;
- } else {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "LDAP driver authentication method must be "
- "one of %s, %s or %s",
- SIMPLE, KRB41, KRB42);
- return (ISC_R_FAILURE);
- }
-
- /* multithreaded build can have multiple DB connections */
-#ifdef ISC_PLATFORM_USETHREADS
-
- /* check how many db connections we should create */
- dbcount = strtol(argv[1], &endp, 10);
- if (*endp != '\0' || dbcount < 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "LDAP driver database connection count "
- "must be positive.");
- return (ISC_R_FAILURE);
- }
-#endif
-
- /* check that LDAP URL parameters make sense */
- switch(argc) {
- case 12:
- result = dlz_ldap_checkURL(argv[11], 0, "allow zone transfer");
- if (result != ISC_R_SUCCESS)
- return (result);
- case 11:
- result = dlz_ldap_checkURL(argv[10], 3, "all nodes");
- if (result != ISC_R_SUCCESS)
- return (result);
- case 10:
- if (strlen(argv[9]) > 0) {
- result = dlz_ldap_checkURL(argv[9], 3, "authority");
- if (result != ISC_R_SUCCESS)
- return (result);
- }
- case 9:
- result = dlz_ldap_checkURL(argv[8], 3, "lookup");
- if (result != ISC_R_SUCCESS)
- return (result);
- result = dlz_ldap_checkURL(argv[7], 0, "find zone");
- if (result != ISC_R_SUCCESS)
- return (result);
- break;
- default:
- /* not really needed, should shut up compiler. */
- result = ISC_R_FAILURE;
- }
-
- /* allocate memory for LDAP instance */
- ldap_inst = isc_mem_get(ns_g_mctx, sizeof(ldap_instance_t));
- if (ldap_inst == NULL)
- return (ISC_R_NOMEMORY);
- memset(ldap_inst, 0, sizeof(ldap_instance_t));
-
- /* store info needed to automatically re-connect. */
- ldap_inst->protocol = protocol;
- ldap_inst->method = method;
- ldap_inst->hosts = isc_mem_strdup(ns_g_mctx, argv[6]);
- if (ldap_inst->hosts == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- ldap_inst->user = isc_mem_strdup(ns_g_mctx, argv[4]);
- if (ldap_inst->user == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- ldap_inst->cred = isc_mem_strdup(ns_g_mctx, argv[5]);
- if (ldap_inst->cred == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
-
-#ifdef ISC_PLATFORM_USETHREADS
- /* allocate memory for database connection list */
- ldap_inst->db = isc_mem_get(ns_g_mctx, sizeof(db_list_t));
- if (ldap_inst->db == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
-
- /* initialize DB connection list */
- ISC_LIST_INIT(*(ldap_inst->db));
-
- /*
- * create the appropriate number of database instances (DBI)
- * append each new DBI to the end of the list
- */
- for (i = 0; i < dbcount; i++) {
-
-#endif /* ISC_PLATFORM_USETHREADS */
-
- /* how many queries were passed in from config file? */
- switch(argc) {
- case 9:
- result = build_sqldbinstance(ns_g_mctx, NULL, NULL,
- NULL, argv[7], argv[8],
- NULL, &dbi);
- break;
- case 10:
- result = build_sqldbinstance(ns_g_mctx, NULL, NULL,
- argv[9], argv[7], argv[8],
- NULL, &dbi);
- break;
- case 11:
- result = build_sqldbinstance(ns_g_mctx, argv[10], NULL,
- argv[9], argv[7], argv[8],
- NULL, &dbi);
- break;
- case 12:
- result = build_sqldbinstance(ns_g_mctx, argv[10],
- argv[11], argv[9],
- argv[7], argv[8],
- NULL, &dbi);
- break;
- default:
- /* not really needed, should shut up compiler. */
- result = ISC_R_FAILURE;
- }
-
- if (result == ISC_R_SUCCESS) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "LDAP driver created "
- "database instance object.");
- } else { /* unsuccessful?, log err msg and cleanup. */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "LDAP driver could not create "
- "database instance object.");
- goto cleanup;
- }
-
-#ifdef ISC_PLATFORM_USETHREADS
- /* when multithreaded, build a list of DBI's */
- ISC_LINK_INIT(dbi, link);
- ISC_LIST_APPEND(*(ldap_inst->db), dbi, link);
-#else
- /*
- * when single threaded, hold onto the one connection
- * instance.
- */
- ldap_inst->db = dbi;
-
-#endif
- /* attempt to connect */
- result = dlz_ldap_connect(ldap_inst, dbi);
-
- /*
- * if db connection cannot be created, log err msg and
- * cleanup.
- */
- switch(result) {
- /* success, do nothing */
- case ISC_R_SUCCESS:
- break;
- /*
- * no memory means ldap_init could not
- * allocate memory
- */
- case ISC_R_NOMEMORY:
-#ifdef ISC_PLATFORM_USETHREADS
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "LDAP driver could not allocate memory "
- "for connection number %u",
- i+1);
-#else
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "LDAP driver could not allocate memory "
- "for connection");
-#endif
- goto cleanup;
- break;
- /*
- * no perm means ldap_set_option could not set
- * protocol version
- */
- case ISC_R_NOPERM:
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "LDAP driver could not "
- "set protocol version.");
- result = ISC_R_FAILURE;
- goto cleanup;
- break;
- /* failure means couldn't connect to ldap server */
- case ISC_R_FAILURE:
-#ifdef ISC_PLATFORM_USETHREADS
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "LDAP driver could not "
- "bind connection number %u to server.",
- i+1);
-#else
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "LDAP driver could not "
- "bind connection to server.");
-#endif
- goto cleanup;
- break;
- /*
- * default should never happen. If it does,
- * major errors.
- */
- default:
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "dlz_ldap_create() failed: %s",
- isc_result_totext(result));
- result = ISC_R_UNEXPECTED;
- goto cleanup;
- break;
- } /* end switch(result) */
-
-
-#ifdef ISC_PLATFORM_USETHREADS
-
- /* set DBI = null for next loop through. */
- dbi = NULL;
- } /* end for loop */
-
-#endif /* ISC_PLATFORM_USETHREADS */
-
-
- /* set dbdata to the ldap_instance we created. */
- *dbdata = ldap_inst;
-
- /* hey, we got through all of that ok, return success. */
- return(ISC_R_SUCCESS);
-
- cleanup:
- dlz_ldap_destroy(NULL, ldap_inst);
-
- return(ISC_R_FAILURE);
-}
-
-void
-dlz_ldap_destroy(void *driverarg, void *dbdata) {
- UNUSED(driverarg);
-
- if (dbdata != NULL) {
-#ifdef ISC_PLATFORM_USETHREADS
- /* cleanup the list of DBI's */
- ldap_destroy_dblist((db_list_t *)
- ((ldap_instance_t *)dbdata)->db);
-
-#else /* ISC_PLATFORM_USETHREADS */
- if (((ldap_instance_t *)dbdata)->db->dbconn != NULL)
- ldap_unbind_s((LDAP *)
- ((ldap_instance_t *)dbdata)->db->dbconn);
-
- /* destroy single DB instance */
- destroy_sqldbinstance(((ldap_instance_t *)dbdata)->db);
-#endif /* ISC_PLATFORM_USETHREADS */
-
- if (((ldap_instance_t *)dbdata)->hosts != NULL)
- isc_mem_free(ns_g_mctx,
- ((ldap_instance_t *)dbdata)->hosts);
-
- if (((ldap_instance_t *)dbdata)->user != NULL)
- isc_mem_free(ns_g_mctx,
- ((ldap_instance_t *)dbdata)->user);
-
- if (((ldap_instance_t *)dbdata)->cred != NULL)
- isc_mem_free(ns_g_mctx,
- ((ldap_instance_t *)dbdata)->cred);
-
- isc_mem_put(ns_g_mctx, dbdata, sizeof(ldap_instance_t));
- }
-}
-
-static dns_sdlzmethods_t dlz_ldap_methods = {
- dlz_ldap_create,
- dlz_ldap_destroy,
- dlz_ldap_findzone,
- dlz_ldap_lookup,
- dlz_ldap_authority,
- dlz_ldap_allnodes,
- dlz_ldap_allowzonexfr,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
-};
-
-/*%
- * Wrapper around dns_sdlzregister().
- */
-isc_result_t
-dlz_ldap_init(void) {
- isc_result_t result;
-
- /*
- * Write debugging message to log
- */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "Registering DLZ ldap driver.");
-
- result = dns_sdlzregister("ldap", &dlz_ldap_methods, NULL,
- DNS_SDLZFLAG_RELATIVEOWNER |
- DNS_SDLZFLAG_RELATIVERDATA,
- ns_g_mctx, &dlz_ldap);
- if (result != ISC_R_SUCCESS) {
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "dns_sdlzregister() failed: %s",
- isc_result_totext(result));
- result = ISC_R_UNEXPECTED;
- }
-
- return (result);
-}
-
-/*%
- * Wrapper around dns_sdlzunregister().
- */
-void
-dlz_ldap_clear(void) {
- /*
- * Write debugging message to log
- */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "Unregistering DLZ ldap driver.");
-
- if (dlz_ldap != NULL)
- dns_sdlzunregister(&dlz_ldap);
-}
-
-#endif
diff --git a/contrib/dlz/drivers/dlz_mysql_driver.c b/contrib/dlz/drivers/dlz_mysql_driver.c
deleted file mode 100644
index e7ac52b2..00000000
--- a/contrib/dlz/drivers/dlz_mysql_driver.c
+++ /dev/null
@@ -1,1079 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 1999-2001, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifdef DLZ_MYSQL
-
-#include <config.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <dns/log.h>
-#include <dns/sdlz.h>
-#include <dns/result.h>
-
-#include <isc/mem.h>
-#include <isc/platform.h>
-#include <isc/print.h>
-#include <isc/result.h>
-#include <isc/string.h>
-#include <isc/util.h>
-
-#include <named/globals.h>
-
-#include <dlz/sdlz_helper.h>
-#include <dlz/dlz_mysql_driver.h>
-
-#include <mysql.h>
-
-static dns_sdlzimplementation_t *dlz_mysql = NULL;
-
-#define dbc_search_limit 30
-#define ALLNODES 1
-#define ALLOWXFR 2
-#define AUTHORITY 3
-#define FINDZONE 4
-#define COUNTZONE 5
-#define LOOKUP 6
-
-#define safeGet(in) in == NULL ? "" : in
-
-/*
- * Private methods
- */
-
-/*%
- * Allocates memory for a new string, and then constructs the new
- * string by "escaping" the input string. The new string is
- * safe to be used in queries. This is necessary because we cannot
- * be sure of what types of strings are passed to us, and we don't
- * want special characters in the string causing problems.
- */
-
-static char *
-mysqldrv_escape_string(MYSQL *mysql, const char *instr) {
-
- char *outstr;
- unsigned int len;
-
- if (instr == NULL)
- return NULL;
-
- len = strlen(instr);
-
- outstr = isc_mem_allocate(ns_g_mctx ,(2 * len * sizeof(char)) + 1);
- if (outstr == NULL)
- return NULL;
-
- mysql_real_escape_string(mysql, outstr, instr, len);
-
- return outstr;
-}
-
-/*%
- * This function is the real core of the driver. Zone, record
- * and client strings are passed in (or NULL is passed if the
- * string is not available). The type of query we want to run
- * is indicated by the query flag, and the dbdata object is passed
- * passed in to. dbdata really holds a single database instance.
- * The function will construct and run the query, hopefully getting
- * a result set.
- */
-
-static isc_result_t
-mysql_get_resultset(const char *zone, const char *record,
- const char *client, unsigned int query,
- void *dbdata, MYSQL_RES **rs)
-{
- isc_result_t result;
- dbinstance_t *dbi = NULL;
- char *querystring = NULL;
- unsigned int i = 0;
- unsigned int j = 0;
- int qres = 0;
-
- if (query != COUNTZONE)
- REQUIRE(*rs == NULL);
- else
- REQUIRE(rs == NULL);
-
- /* get db instance / connection */
- dbi = (dbinstance_t *) dbdata;
-
- /* if DBI is null, can't do anything else */
- if (dbi == NULL) {
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- /* what type of query are we going to run? */
- switch(query) {
- case ALLNODES:
- /*
- * if the query was not passed in from the config file
- * then we can't run it. return not_implemented, so
- * it's like the code for that operation was never
- * built into the driver.... AHHH flexibility!!!
- */
- if (dbi->allnodes_q == NULL) {
- result = ISC_R_NOTIMPLEMENTED;
- goto cleanup;
- }
- break;
- case ALLOWXFR:
- /* same as comments as ALLNODES */
- if (dbi->allowxfr_q == NULL) {
- result = ISC_R_NOTIMPLEMENTED;
- goto cleanup;
- }
- break;
- case AUTHORITY:
- /* same as comments as ALLNODES */
- if (dbi->authority_q == NULL) {
- result = ISC_R_NOTIMPLEMENTED;
- goto cleanup;
- }
- break;
- case FINDZONE:
- /* this is required. It's the whole point of DLZ! */
- if (dbi->findzone_q == NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "No query specified for findzone. "
- "Findzone requires a query");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
- break;
- case COUNTZONE:
- /* same as comments as ALLNODES */
- if (dbi->countzone_q == NULL) {
- result = ISC_R_NOTIMPLEMENTED;
- goto cleanup;
- }
- break;
- case LOOKUP:
- /* this is required. It's also a major point of DLZ! */
- if (dbi->lookup_q == NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "No query specified for lookup. "
- "Lookup requires a query");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
- break;
- default:
- /*
- * this should never happen. If it does, the code is
- * screwed up!
- */
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "Incorrect query flag passed to "
- "mysql_get_resultset");
- result = ISC_R_UNEXPECTED;
- goto cleanup;
- }
-
-
- /*
- * was a zone string passed? If so, make it safe for use in
- * queries.
- */
- if (zone != NULL) {
- dbi->zone = mysqldrv_escape_string((MYSQL *) dbi->dbconn,
- zone);
- if (dbi->zone == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- } else { /* no string passed, set the string pointer to NULL */
- dbi->zone = NULL;
- }
-
- /*
- * was a record string passed? If so, make it safe for use in
- * queries.
- */
- if (record != NULL) {
- dbi->record = mysqldrv_escape_string((MYSQL *) dbi->dbconn,
- record);
- if (dbi->record == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- } else { /* no string passed, set the string pointer to NULL */
- dbi->record = NULL;
- }
-
- /*
- * was a client string passed? If so, make it safe for use in
- * queries.
- */
- if (client != NULL) {
- dbi->client = mysqldrv_escape_string((MYSQL *) dbi->dbconn,
- client);
- if (dbi->client == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- } else { /* no string passed, set the string pointer to NULL */
- dbi->client = NULL;
- }
-
- /*
- * what type of query are we going to run? this time we build
- * the actual query to run.
- */
- switch(query) {
- case ALLNODES:
- querystring = build_querystring(ns_g_mctx, dbi->allnodes_q);
- break;
- case ALLOWXFR:
- querystring = build_querystring(ns_g_mctx, dbi->allowxfr_q);
- break;
- case AUTHORITY:
- querystring = build_querystring(ns_g_mctx, dbi->authority_q);
- break;
- case FINDZONE:
- querystring = build_querystring(ns_g_mctx, dbi->findzone_q);
- break;
- case COUNTZONE:
- querystring = build_querystring(ns_g_mctx, dbi->countzone_q);
- break;
- case LOOKUP:
- querystring = build_querystring(ns_g_mctx, dbi->lookup_q);
- break;
- default:
- /*
- * this should never happen. If it does, the code is
- * screwed up!
- */
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "Incorrect query flag passed to "
- "mysql_get_resultset");
- result = ISC_R_UNEXPECTED;
- goto cleanup;
- }
-
- /* if the querystring is null, Bummer, outta RAM. UPGRADE TIME!!! */
- if (querystring == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
-
- /*
- * output the full query string during debug so we can see
- * what lame error the query has.
- */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(1),
- "\nQuery String: %s\n", querystring);
-
- /* attempt query up to 3 times. */
- for (i=0; i < 3; i++) {
- qres = mysql_query((MYSQL *) dbi->dbconn, querystring);
- if (qres == 0)
- break;
- for (j=0; mysql_ping((MYSQL *) dbi->dbconn) != 0 && j < 4; j++)
- ;
- }
-
- if (qres == 0) {
- result = ISC_R_SUCCESS;
- if (query != COUNTZONE) {
- *rs = mysql_store_result((MYSQL *) dbi->dbconn);
- if (*rs == NULL)
- result = ISC_R_FAILURE;
- }
- } else {
- result = ISC_R_FAILURE;
- }
-
-
- cleanup:
- /* it's always good to cleanup after yourself */
-
- /* if we couldn't even get DBI, just return NULL */
- if (dbi == NULL)
- return ISC_R_FAILURE;
-
- /* free dbi->zone string */
- if (dbi->zone != NULL)
- isc_mem_free(ns_g_mctx, dbi->zone);
-
- /* free dbi->record string */
- if (dbi->record != NULL)
- isc_mem_free(ns_g_mctx, dbi->record);
-
- /* free dbi->client string */
- if (dbi->client != NULL)
- isc_mem_free(ns_g_mctx, dbi->client);
-
- /* release query string */
- if (querystring != NULL)
- isc_mem_free(ns_g_mctx, querystring);
-
- /* return result */
- return result;
-}
-
-/*%
- * The processing of result sets for lookup and authority are
- * exactly the same. So that functionality has been moved
- * into this function to minimize code.
- */
-
-static isc_result_t
-mysql_process_rs(dns_sdlzlookup_t *lookup, MYSQL_RES *rs)
-{
- isc_result_t result = ISC_R_NOTFOUND;
- MYSQL_ROW row;
- unsigned int fields;
- unsigned int j;
- unsigned int len;
- char *tmpString;
- char *endp;
- int ttl;
-
- row = mysql_fetch_row(rs); /* get a row from the result set */
- fields = mysql_num_fields(rs); /* how many columns in result set */
- while (row != NULL) {
- switch(fields) {
- case 1:
- /*
- * one column in rs, it's the data field. use
- * default type of A record, and default TTL
- * of 86400
- */
- result = dns_sdlz_putrr(lookup, "a", 86400,
- safeGet(row[0]));
- break;
- case 2:
- /*
- * two columns, data field, and data type.
- * use default TTL of 86400.
- */
- result = dns_sdlz_putrr(lookup, safeGet(row[0]), 86400,
- safeGet(row[1]));
- break;
- case 3:
- /*
- * three columns, all data no defaults.
- * convert text to int, make sure it worked
- * right.
- */
- ttl = strtol(safeGet(row[0]), &endp, 10);
- if (*endp != '\0' || ttl < 0) {
- isc_log_write(dns_lctx,
- DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "mysql driver ttl must be "
- "a postive number");
- }
- result = dns_sdlz_putrr(lookup, safeGet(row[1]), ttl,
- safeGet(row[2]));
- break;
- default:
- /*
- * more than 3 fields, concatenate the last
- * ones together. figure out how long to make
- * string.
- */
- for (j=2, len=0; j < fields; j++) {
- len += strlen(safeGet(row[j])) + 1;
- }
- /*
- * allocate string memory, allow for NULL to
- * term string
- */
- tmpString = isc_mem_allocate(ns_g_mctx, len + 1);
- if (tmpString == NULL) {
- /* major bummer, need more ram */
- isc_log_write(dns_lctx,
- DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "mysql driver unable "
- "to allocate memory for "
- "temporary string");
- mysql_free_result(rs);
- return (ISC_R_FAILURE); /* Yeah, I'd say! */
- }
- /* copy field to tmpString */
- strcpy(tmpString, safeGet(row[2]));
-
-
- /*
- * concat the rest of fields together, space
- * between each one.
- */
- for (j=3; j < fields; j++) {
- strcat(tmpString, " ");
- strcat(tmpString, safeGet(row[j]));
- }
- /* convert text to int, make sure it worked right */
- ttl = strtol(safeGet(row[0]), &endp, 10);
- if (*endp != '\0' || ttl < 0) {
- isc_log_write(dns_lctx,
- DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "mysql driver ttl must be "
- "a postive number");
- }
- /* ok, now tell Bind about it. */
- result = dns_sdlz_putrr(lookup, safeGet(row[1]),
- ttl, tmpString);
- /* done, get rid of this thing. */
- isc_mem_free(ns_g_mctx, tmpString);
- }
- /* I sure hope we were successful */
- if (result != ISC_R_SUCCESS) {
- /* nope, get rid of the Result set, and log a msg */
- mysql_free_result(rs);
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "dns_sdlz_putrr returned error. "
- "Error code was: %s",
- isc_result_totext(result));
- return (ISC_R_FAILURE);
- }
- row = mysql_fetch_row(rs); /* get next row */
- }
-
- /* free result set memory */
- mysql_free_result(rs);
-
- /* return result code */
- return result;
-}
-
-/*
- * SDLZ interface methods
- */
-
-/*% determine if the zone is supported by (in) the database */
-
-static isc_result_t
-mysql_findzone(void *driverarg, void *dbdata, const char *name,
- dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo)
-{
- isc_result_t result;
- MYSQL_RES *rs = NULL;
- my_ulonglong rows;
-
- UNUSED(driverarg);
- UNUSED(methods);
- UNUSED(clientinfo);
-
- /* run the query and get the result set from the database. */
- result = mysql_get_resultset(name, NULL, NULL, FINDZONE, dbdata, &rs);
- /* if we didn't get a result set, log an err msg. */
- if (result != ISC_R_SUCCESS || rs == NULL) {
- if (rs != NULL)
- mysql_free_result(rs);
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "mysql driver unable to return "
- "result set for findzone query");
- return (ISC_R_FAILURE);
- }
- /* count how many rows in result set */
- rows = mysql_num_rows(rs);
- /* get rid of result set, we are done with it. */
- mysql_free_result(rs);
-
- /* if we returned any rows, zone is supported. */
- if (rows > 0) {
- mysql_get_resultset(name, NULL, NULL, COUNTZONE, dbdata, NULL);
- return (ISC_R_SUCCESS);
- }
-
- /* no rows returned, zone is not supported. */
- return (ISC_R_NOTFOUND);
-}
-
-/*% Determine if the client is allowed to perform a zone transfer */
-static isc_result_t
-mysql_allowzonexfr(void *driverarg, void *dbdata, const char *name,
- const char *client)
-{
- isc_result_t result;
- MYSQL_RES *rs = NULL;
- my_ulonglong rows;
-
- UNUSED(driverarg);
-
- /* first check if the zone is supported by the database. */
- result = mysql_findzone(driverarg, dbdata, name, NULL, NULL);
- if (result != ISC_R_SUCCESS)
- return (ISC_R_NOTFOUND);
-
- /*
- * if we get to this point we know the zone is supported by
- * the database the only questions now are is the zone
- * transfer is allowed for this client and did the config file
- * have an allow zone xfr query.
- *
- * Run our query, and get a result set from the database.
- */
- result = mysql_get_resultset(name, NULL, client, ALLOWXFR,
- dbdata, &rs);
- /* if we get "not implemented", send it along. */
- if (result == ISC_R_NOTIMPLEMENTED)
- return result;
- /* if we didn't get a result set, log an err msg. */
- if (result != ISC_R_SUCCESS || rs == NULL) {
- if (rs != NULL)
- mysql_free_result(rs);
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "mysql driver unable to return "
- "result set for allow xfr query");
- return (ISC_R_FAILURE);
- }
- /* count how many rows in result set */
- rows = mysql_num_rows(rs);
- /* get rid of result set, we are done with it. */
- mysql_free_result(rs);
-
- /* if we returned any rows, zone xfr is allowed. */
- if (rows > 0)
- return (ISC_R_SUCCESS);
-
- /* no rows returned, zone xfr not allowed */
- return (ISC_R_NOPERM);
-}
-
-/*%
- * If the client is allowed to perform a zone transfer, the next order of
- * business is to get all the nodes in the zone, so bind can respond to the
- * query.
- */
-static isc_result_t
-mysql_allnodes(const char *zone, void *driverarg, void *dbdata,
- dns_sdlzallnodes_t *allnodes)
-{
- isc_result_t result;
- MYSQL_RES *rs = NULL;
- MYSQL_ROW row;
- unsigned int fields;
- unsigned int j;
- unsigned int len;
- char *tmpString;
- char *endp;
- int ttl;
-
- UNUSED(driverarg);
-
- /* run the query and get the result set from the database. */
- result = mysql_get_resultset(zone, NULL, NULL, ALLNODES, dbdata, &rs);
- /* if we get "not implemented", send it along */
- if (result == ISC_R_NOTIMPLEMENTED)
- return result;
- /* if we didn't get a result set, log an err msg. */
- if (result != ISC_R_SUCCESS) {
- if (rs != NULL)
- mysql_free_result(rs);
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "mysql driver unable to return "
- "result set for all nodes query");
- return (ISC_R_FAILURE);
- }
-
- result = ISC_R_NOTFOUND;
-
- row = mysql_fetch_row(rs); /* get a row from the result set */
- fields = mysql_num_fields(rs); /* how many columns in result set */
- while (row != NULL) {
- if (fields < 4) { /* gotta have at least 4 columns */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "mysql driver too few fields returned "
- "by all nodes query");
- }
- /* convert text to int, make sure it worked right */
- ttl = strtol(safeGet(row[0]), &endp, 10);
- if (*endp != '\0' || ttl < 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "mysql driver ttl must be "
- "a postive number");
- }
- if (fields == 4) {
- /* tell Bind about it. */
- result = dns_sdlz_putnamedrr(allnodes, safeGet(row[2]),
- safeGet(row[1]), ttl,
- safeGet(row[3]));
- } else {
- /*
- * more than 4 fields, concatenate the last
- * ones together. figure out how long to make
- * string.
- */
- for (j=3, len=0; j < fields; j++) {
- len += strlen(safeGet(row[j])) + 1;
- }
- /* allocate memory, allow for NULL to term string */
- tmpString = isc_mem_allocate(ns_g_mctx, len + 1);
- if (tmpString == NULL) { /* we need more ram. */
- isc_log_write(dns_lctx,
- DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "mysql driver unable "
- "to allocate memory for "
- "temporary string");
- mysql_free_result(rs);
- return (ISC_R_FAILURE);
- }
- /* copy this field to tmpString */
- strcpy(tmpString, safeGet(row[3]));
- /* concatonate the rest, with spaces between */
- for (j=4; j < fields; j++) {
- strcat(tmpString, " ");
- strcat(tmpString, safeGet(row[j]));
- }
- /* tell Bind about it. */
- result = dns_sdlz_putnamedrr(allnodes, safeGet(row[2]),
- safeGet(row[1]),
- ttl, tmpString);
- isc_mem_free(ns_g_mctx, tmpString);
- }
- /* if we weren't successful, log err msg */
- if (result != ISC_R_SUCCESS) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "dns_sdlz_putnamedrr returned error. "
- "Error code was: %s",
- isc_result_totext(result));
- result = ISC_R_FAILURE;
- break;
- }
- /* get next row from the result set */
- row = mysql_fetch_row(rs);
- }
-
- /* free result set memory */
- mysql_free_result(rs);
-
- return result;
-}
-
-/*% if the lookup function does not return SOA or NS records for the zone,
- * use this function to get that information for Bind.
- */
-
-static isc_result_t
-mysql_authority(const char *zone, void *driverarg, void *dbdata,
- dns_sdlzlookup_t *lookup)
-{
- isc_result_t result;
- MYSQL_RES *rs = NULL;
-
- UNUSED(driverarg);
-
- /* run the query and get the result set from the database. */
- result = mysql_get_resultset(zone, NULL, NULL, AUTHORITY, dbdata, &rs);
- /* if we get "not implemented", send it along */
- if (result == ISC_R_NOTIMPLEMENTED)
- return result;
- /* if we didn't get a result set, log an err msg. */
- if (result != ISC_R_SUCCESS) {
- if (rs != NULL)
- mysql_free_result(rs);
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "mysql driver unable to return "
- "result set for authority query");
- return (ISC_R_FAILURE);
- }
- /*
- * lookup and authority result sets are processed in the same
- * manner mysql_process_rs does the job for both functions.
- */
- return mysql_process_rs(lookup, rs);
-}
-
-/*% if zone is supported, lookup up a (or multiple) record(s) in it */
-static isc_result_t
-mysql_lookup(const char *zone, const char *name, void *driverarg,
- void *dbdata, dns_sdlzlookup_t *lookup,
- dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo)
-{
- isc_result_t result;
- MYSQL_RES *rs = NULL;
-
- UNUSED(driverarg);
- UNUSED(methods);
- UNUSED(clientinfo);
-
- /* run the query and get the result set from the database. */
- result = mysql_get_resultset(zone, name, NULL, LOOKUP, dbdata, &rs);
- /* if we didn't get a result set, log an err msg. */
- if (result != ISC_R_SUCCESS) {
- if (rs != NULL)
- mysql_free_result(rs);
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "mysql driver unable to return "
- "result set for lookup query");
- return (ISC_R_FAILURE);
- }
- /*
- * lookup and authority result sets are processed in the same manner
- * mysql_process_rs does the job for both functions.
- */
- return mysql_process_rs(lookup, rs);
-}
-
-/*%
- * create an instance of the driver. Remember, only 1 copy of the driver's
- * code is ever loaded, the driver has to remember which context it's
- * operating in. This is done via use of the dbdata argument which is
- * passed into all query functions.
- */
-static isc_result_t
-mysql_create(const char *dlzname, unsigned int argc, char *argv[],
- void *driverarg, void **dbdata)
-{
- isc_result_t result;
- dbinstance_t *dbi = NULL;
- char *tmp = NULL;
- char *dbname = NULL;
- char *host = NULL;
- char *user = NULL;
- char *pass = NULL;
- char *socket = NULL;
- int port;
- MYSQL *dbc;
- char *endp;
- int j;
- unsigned int flags = 0;
-#if MYSQL_VERSION_ID >= 50000
- my_bool auto_reconnect = 1;
-#endif
-
- UNUSED(driverarg);
- UNUSED(dlzname);
-
- /* verify we have at least 4 arg's passed to the driver */
- if (argc < 4) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "mysql driver requires "
- "at least 4 command line args.");
- return (ISC_R_FAILURE);
- }
-
- /* no more than 8 arg's should be passed to the driver */
- if (argc > 8) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "mysql driver cannot accept "
- "more than 7 command line args.");
- return (ISC_R_FAILURE);
- }
-
- /* parse connection string and get paramters. */
-
- /* get db name - required */
- dbname = getParameterValue(argv[1], "dbname=");
- if (dbname == NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "mysql driver requires a dbname parameter.");
- result = ISC_R_FAILURE;
- goto full_cleanup;
- }
-
- /* get db port. Not required, but must be > 0 if specified */
- tmp = getParameterValue(argv[1], "port=");
- if (tmp == NULL) {
- port = 0;
- } else {
- port = strtol(tmp, &endp, 10);
- if (*endp != '\0' || port < 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Mysql driver port "
- "must be a positive number.");
- isc_mem_free(ns_g_mctx, tmp);
- result = ISC_R_FAILURE;
- goto full_cleanup;
- }
- isc_mem_free(ns_g_mctx, tmp);
- }
-
- /* how many queries were passed in from config file? */
- switch(argc) {
- case 4:
- result = build_sqldbinstance(ns_g_mctx, NULL, NULL, NULL,
- argv[2], argv[3], NULL, &dbi);
- break;
- case 5:
- result = build_sqldbinstance(ns_g_mctx, NULL, NULL, argv[4],
- argv[2], argv[3], NULL, &dbi);
- break;
- case 6:
- result = build_sqldbinstance(ns_g_mctx, argv[5], NULL, argv[4],
- argv[2], argv[3], NULL, &dbi);
- break;
- case 7:
- result = build_sqldbinstance(ns_g_mctx, argv[5],
- argv[6], argv[4],
- argv[2], argv[3], NULL, &dbi);
- break;
- case 8:
- result = build_sqldbinstance(ns_g_mctx, argv[5],
- argv[6], argv[4],
- argv[2], argv[3], argv[7], &dbi);
- break;
- default:
- /* not really needed, should shut up compiler. */
- result = ISC_R_FAILURE;
- }
-
- /* unsuccessful?, log err msg and cleanup. */
- if (result != ISC_R_SUCCESS) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "mysql driver could not create "
- "database instance object.");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- /* create and set db connection */
- dbi->dbconn = mysql_init(NULL);
-
- /* if db connection cannot be created, log err msg and cleanup. */
- if (dbi->dbconn == NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "mysql driver could not allocate "
- "memory for database connection");
- result = ISC_R_FAILURE;
- goto full_cleanup;
- }
-
- tmp = getParameterValue(argv[1], "compress=");
- if (tmp != NULL) {
- if (strcasecmp(tmp, "true") == 0)
- flags = CLIENT_COMPRESS;
- isc_mem_free(ns_g_mctx, tmp);
- }
-
- tmp = getParameterValue(argv[1], "ssl=");
- if (tmp != NULL) {
- if (strcasecmp(tmp, "true") == 0)
- flags = flags | CLIENT_SSL;
- isc_mem_free(ns_g_mctx, tmp);
- }
-
- tmp = getParameterValue(argv[1], "space=");
- if (tmp != NULL) {
- if (strcasecmp(tmp, "ignore") == 0)
- flags = flags | CLIENT_IGNORE_SPACE;
- isc_mem_free(ns_g_mctx, tmp);
- }
-
- dbc = NULL;
- host = getParameterValue(argv[1], "host=");
- user = getParameterValue(argv[1], "user=");
- pass = getParameterValue(argv[1], "pass=");
- socket = getParameterValue(argv[1], "socket=");
-
-#if MYSQL_VERSION_ID >= 50000
- /* enable automatic reconnection. */
- if (mysql_options((MYSQL *) dbi->dbconn, MYSQL_OPT_RECONNECT,
- &auto_reconnect) != 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_WARNING,
- "mysql driver failed to set "
- "MYSQL_OPT_RECONNECT option, continuing");
- }
-#endif
-
- for (j=0; dbc == NULL && j < 4; j++)
- dbc = mysql_real_connect((MYSQL *) dbi->dbconn, host,
- user, pass, dbname, port, socket,
- flags);
-
- /* let user know if we couldn't connect. */
- if (dbc == NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "mysql driver failed to create "
- "database connection after 4 attempts");
- result = ISC_R_FAILURE;
- goto full_cleanup;
- }
-
- /* return db connection via dbdata */
- *dbdata = dbi;
-
- result = ISC_R_SUCCESS;
- goto cleanup;
-
- full_cleanup:
-
- if (dbi != NULL)
- destroy_sqldbinstance(dbi);
-
- cleanup:
-
- if (dbname != NULL)
- isc_mem_free(ns_g_mctx, dbname);
- if (host != NULL)
- isc_mem_free(ns_g_mctx, host);
- if (user != NULL)
- isc_mem_free(ns_g_mctx, user);
- if (pass != NULL)
- isc_mem_free(ns_g_mctx, pass);
- if (socket != NULL)
- isc_mem_free(ns_g_mctx, socket);
-
-
- return result;
-}
-
-/*%
- * destroy the driver. Remember, only 1 copy of the driver's
- * code is ever loaded, the driver has to remember which context it's
- * operating in. This is done via use of the dbdata argument.
- * so we really only need to clean it up since we are not using driverarg.
- */
-
-static void
-mysql_destroy(void *driverarg, void *dbdata)
-{
- dbinstance_t *dbi;
-
- UNUSED(driverarg);
-
- dbi = (dbinstance_t *) dbdata;
-
- /* release DB connection */
- if (dbi->dbconn != NULL)
- mysql_close((MYSQL *) dbi->dbconn);
-
- /* destroy DB instance */
- destroy_sqldbinstance(dbi);
-}
-
-/* pointers to all our runtime methods. */
-/* this is used during driver registration */
-/* i.e. in dlz_mysql_init below. */
-static dns_sdlzmethods_t dlz_mysql_methods = {
- mysql_create,
- mysql_destroy,
- mysql_findzone,
- mysql_lookup,
- mysql_authority,
- mysql_allnodes,
- mysql_allowzonexfr,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
-};
-
-/*%
- * Wrapper around dns_sdlzregister().
- */
-isc_result_t
-dlz_mysql_init(void) {
- isc_result_t result;
-
- /*
- * Write debugging message to log
- */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "Registering DLZ mysql driver.");
-
- /* Driver is always threadsafe. Because of the way MySQL handles
- * threads the MySQL driver can only be used when bind is run single
- * threaded. Using MySQL with Bind running multi-threaded is not
- * allowed. When using the MySQL driver "-n1" should always be
- * passed to Bind to guarantee single threaded operation.
- */
- result = dns_sdlzregister("mysql", &dlz_mysql_methods, NULL,
- DNS_SDLZFLAG_RELATIVEOWNER |
- DNS_SDLZFLAG_RELATIVERDATA |
- DNS_SDLZFLAG_THREADSAFE,
- ns_g_mctx, &dlz_mysql);
- /* if we can't register the driver, there are big problems. */
- if (result != ISC_R_SUCCESS) {
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "dns_sdlzregister() failed: %s",
- isc_result_totext(result));
- result = ISC_R_UNEXPECTED;
- }
-
-
- return result;
-}
-
-/*%
- * Wrapper around dns_sdlzunregister().
- */
-void
-dlz_mysql_clear(void) {
-
- /*
- * Write debugging message to log
- */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "Unregistering DLZ mysql driver.");
-
- /* unregister the driver. */
- if (dlz_mysql != NULL)
- dns_sdlzunregister(&dlz_mysql);
-}
-
-#endif
diff --git a/contrib/dlz/drivers/dlz_odbc_driver.c b/contrib/dlz/drivers/dlz_odbc_driver.c
deleted file mode 100644
index 27a85261..00000000
--- a/contrib/dlz/drivers/dlz_odbc_driver.c
+++ /dev/null
@@ -1,1572 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 1999-2001, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifdef DLZ_ODBC
-
-#include <config.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <dns/log.h>
-#include <dns/sdlz.h>
-#include <dns/result.h>
-
-#include <isc/mem.h>
-#include <isc/platform.h>
-#include <isc/print.h>
-#include <isc/result.h>
-#include <isc/string.h>
-#include <isc/util.h>
-
-#include <named/globals.h>
-
-#include <dlz/sdlz_helper.h>
-#include <dlz/dlz_odbc_driver.h>
-
-#include <sql.h>
-#include <sqlext.h>
-#include <sqltypes.h>
-
-static dns_sdlzimplementation_t *dlz_odbc = NULL;
-
-#define dbc_search_limit 30
-#define ALLNODES 1
-#define ALLOWXFR 2
-#define AUTHORITY 3
-#define FINDZONE 4
-#define LOOKUP 5
-
-#define sqlOK(a) ((a == SQL_SUCCESS || a == SQL_SUCCESS_WITH_INFO) ? -1 : 0)
-
-/*
- * Private Structures
- */
-
-/*
- * structure to hold ODBC connection & statement
- */
-
-typedef struct{
- SQLHDBC dbc;
- SQLHSTMT stmnt;
-} odbc_db_t;
-
-/*
- * Structure to hold everthing needed by this "instance" of the odbc driver
- * remember, the driver code is only loaded once, but may have many separate
- * instances
- */
-
-typedef struct {
-
-#ifdef ISC_PLATFORM_USETHREADS
-
- db_list_t *db; /* handle to a list of DB */
-
-#else
-
- dbinstance_t *db; /* handle to db */
-
-#endif
-
- SQLHENV sql_env; /* handle to SQL environment */
- SQLCHAR *dsn;
- SQLCHAR *user;
- SQLCHAR *pass;
-} odbc_instance_t;
-
-/* forward reference */
-
-static size_t
-odbc_makesafe(char *to, const char *from, size_t length);
-
-/*
- * Private methods
- */
-
-static SQLSMALLINT
-safeLen(void *a) {
- if (a == NULL)
- return 0;
- return strlen((char *) a);
-}
-
-/*% propertly cleans up an odbc_instance_t */
-
-static void
-destroy_odbc_instance(odbc_instance_t *odbc_inst) {
-
-#ifdef ISC_PLATFORM_USETHREADS
-
- dbinstance_t *ndbi = NULL;
- dbinstance_t *dbi = NULL;
-
- /* get the first DBI in the list */
- ndbi = ISC_LIST_HEAD(*odbc_inst->db);
-
- /* loop through the list */
- while (ndbi != NULL) {
- dbi = ndbi;
- /* get the next DBI in the list */
- ndbi = ISC_LIST_NEXT(dbi, link);
-
- /* if we have a connection / statement object in memory */
- if (dbi->dbconn != NULL) {
- /* free statement handle */
- if (((odbc_db_t *) (dbi->dbconn))->stmnt != NULL) {
- SQLFreeHandle(SQL_HANDLE_STMT,
- ((odbc_db_t *)
- (dbi->dbconn))->stmnt);
- ((odbc_db_t *) (dbi->dbconn))->stmnt = NULL;
- }
-
- /* disconnect from database & free connection handle */
- if (((odbc_db_t *) (dbi->dbconn))->dbc != NULL) {
- SQLDisconnect(((odbc_db_t *)
- dbi->dbconn)->dbc);
- SQLFreeHandle(SQL_HANDLE_DBC,
- ((odbc_db_t *)
- (dbi->dbconn))->dbc);
- ((odbc_db_t *) (dbi->dbconn))->dbc = NULL;
- }
-
- /* free memory that held connection & statement. */
- isc_mem_free(ns_g_mctx, dbi->dbconn);
- }
- /* release all memory that comprised a DBI */
- destroy_sqldbinstance(dbi);
- }
- /* release memory for the list structure */
- isc_mem_put(ns_g_mctx, odbc_inst->db, sizeof(db_list_t));
-
-#else /* ISC_PLATFORM_USETHREADS */
-
- /* free statement handle */
- if (((odbc_db_t *) (odbc_inst->db->dbconn))->stmnt != NULL) {
- SQLFreeHandle(SQL_HANDLE_STMT,
- ((odbc_db_t *) (odbc_inst->db->dbconn))->stmnt);
- ((odbc_db_t *) (odbc_inst->db->dbconn))->stmnt = NULL;
- }
-
- /* disconnect from database, free connection handle */
- if (((odbc_db_t *) (odbc_inst->db->dbconn))->dbc != NULL) {
- SQLDisconnect(((odbc_db_t *) (odbc_inst->db->dbconn))->dbc);
- SQLFreeHandle(SQL_HANDLE_DBC,
- ((odbc_db_t *) (odbc_inst->db->dbconn))->dbc);
- ((odbc_db_t *) (odbc_inst->db->dbconn))->dbc = NULL;
- }
- /* free mem for the odbc_db_t structure held in db */
- if (((odbc_db_t *) odbc_inst->db->dbconn) != NULL) {
- isc_mem_free(ns_g_mctx, odbc_inst->db->dbconn);
- odbc_inst->db->dbconn = NULL;
- }
-
- if (odbc_inst->db != NULL)
- destroy_sqldbinstance(odbc_inst->db);
-
-#endif /* ISC_PLATFORM_USETHREADS */
-
-
- /* free sql environment */
- if (odbc_inst->sql_env != NULL)
- SQLFreeHandle(SQL_HANDLE_ENV, odbc_inst->sql_env);
-
- /* free ODBC instance strings */
- if (odbc_inst->dsn != NULL)
- isc_mem_free(ns_g_mctx, odbc_inst->dsn);
- if (odbc_inst->pass != NULL)
- isc_mem_free(ns_g_mctx, odbc_inst->pass);
- if (odbc_inst->user != NULL)
- isc_mem_free(ns_g_mctx, odbc_inst->user);
-
- /* free memory for odbc_inst */
- if (odbc_inst != NULL)
- isc_mem_put(ns_g_mctx, odbc_inst, sizeof(odbc_instance_t));
-
-}
-
-/*% Connects to database, and creates ODBC statements */
-
-static isc_result_t
-odbc_connect(odbc_instance_t *dbi, odbc_db_t **dbc) {
-
- odbc_db_t *ndb = *dbc;
- SQLRETURN sqlRes;
- isc_result_t result = ISC_R_SUCCESS;
-
- if (ndb != NULL) {
- /*
- * if db != null, we have to do some cleanup
- * if statement handle != null free it
- */
- if (ndb->stmnt != NULL) {
- SQLFreeHandle(SQL_HANDLE_STMT, ndb->stmnt);
- ndb->stmnt = NULL;
- }
-
- /* if connection handle != null free it */
- if (ndb->dbc != NULL) {
- SQLFreeHandle(SQL_HANDLE_DBC, ndb->dbc);
- ndb->dbc = NULL;
- }
- } else {
- ndb = isc_mem_allocate(ns_g_mctx, sizeof(odbc_db_t));
- if (ndb == NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Odbc driver unable to allocate memory");
- return ISC_R_NOMEMORY;
- }
- memset(ndb, 0, sizeof(odbc_db_t));
- }
-
- sqlRes = SQLAllocHandle(SQL_HANDLE_DBC, dbi->sql_env, &(ndb->dbc));
- if (!sqlOK(sqlRes)) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Odbc driver unable to allocate memory");
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
-
- sqlRes = SQLConnect(ndb->dbc, dbi->dsn, safeLen(dbi->dsn), dbi->user,
- safeLen(dbi->user), dbi->pass, safeLen(dbi->pass));
- if (!sqlOK(sqlRes)) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Odbc driver unable to connect");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- sqlRes = SQLAllocHandle(SQL_HANDLE_STMT, ndb->dbc, &(ndb->stmnt));
- if (!sqlOK(sqlRes)) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Odbc driver unable to allocate memory");
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
-
- *dbc = ndb;
-
- return ISC_R_SUCCESS;
-
- cleanup:
-
- if (ndb != NULL) {
-
- /* if statement handle != null free it */
- if (ndb->stmnt != NULL) {
- SQLFreeHandle(SQL_HANDLE_STMT, ndb->stmnt);
- ndb->stmnt = NULL;
- }
-
- /* if connection handle != null free it */
- if (ndb->dbc != NULL) {
- SQLDisconnect(ndb->dbc);
- SQLFreeHandle(SQL_HANDLE_DBC, ndb->dbc);
- ndb->dbc = NULL;
- }
- /* free memory holding ndb */
- isc_mem_free(ns_g_mctx, ndb);
- }
-
- return result;
-}
-
-/*%
- * Loops through the list of DB instances, attempting to lock
- * on the mutex. If successful, the DBI is reserved for use
- * and the thread can perform queries against the database.
- * If the lock fails, the next one in the list is tried.
- * looping continues until a lock is obtained, or until
- * the list has been searched dbc_search_limit times.
- * This function is only used when the driver is compiled for
- * multithreaded operation.
- */
-
-#ifdef ISC_PLATFORM_USETHREADS
-
-static dbinstance_t *
-odbc_find_avail_conn(db_list_t *dblist)
-{
- dbinstance_t *dbi = NULL;
- dbinstance_t *head;
- int count = 0;
-
- /* get top of list */
- head = dbi = ISC_LIST_HEAD(*dblist);
-
- /* loop through list */
- while (count < dbc_search_limit) {
- /* try to lock on the mutex */
- if (isc_mutex_trylock(&dbi->instance_lock) == ISC_R_SUCCESS)
- return dbi; /* success, return the DBI for use. */
-
- /* not successful, keep trying */
- dbi = ISC_LIST_NEXT(dbi, link);
-
- /* check to see if we have gone to the top of the list. */
- if (dbi == NULL) {
- count++;
- dbi = head;
- }
- }
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_INFO,
- "Odbc driver unable to find available "
- "connection after searching %d times",
- count);
- return NULL;
-}
-
-#endif /* ISC_PLATFORM_USETHREADS */
-
-/*% Allocates memory for a new string, and then constructs the new
- * string by "escaping" the input string. The new string is
- * safe to be used in queries. This is necessary because we cannot
- * be sure of what types of strings are passed to us, and we don't
- * want special characters in the string causing problems.
- */
-
-static char *
-odbc_escape_string(const char *instr) {
-
- char *outstr;
- unsigned int len;
-
- if (instr == NULL)
- return NULL;
-
- len = strlen(instr);
-
- outstr = isc_mem_allocate(ns_g_mctx ,(2 * len * sizeof(char)) + 1);
- if (outstr == NULL)
- return NULL;
-
- odbc_makesafe(outstr, instr, len);
-
- return outstr;
-}
-
-/* ---------------
- * Escaping arbitrary strings to get valid SQL strings/identifiers.
- *
- * Replaces "\\" with "\\\\" and "'" with "''".
- * length is the length of the buffer pointed to by
- * from. The buffer at to must be at least 2*length + 1 characters
- * long. A terminating NUL character is written.
- *
- * NOTICE!!!
- * This function was borrowed directly from PostgreSQL's libpq.
- *
- * The copyright statements from the original file containing this
- * function are included below:
- * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- * ---------------
- */
-
-static size_t
-odbc_makesafe(char *to, const char *from, size_t length)
-{
- const char *source = from;
- char *target = to;
- unsigned int remaining = length;
-
- while (remaining > 0)
- {
- switch (*source)
- {
- case '\\':
- *target = '\\';
- target++;
- *target = '\\';
- /* target and remaining are updated below. */
- break;
-
- case '\'':
- *target = '\'';
- target++;
- *target = '\'';
- /* target and remaining are updated below. */
- break;
-
- default:
- *target = *source;
- /* target and remaining are updated below. */
- }
- source++;
- target++;
- remaining--;
- }
-
- /* Write the terminating NUL character. */
- *target = '\0';
-
- return target - to;
-}
-
-/*%
- * This function is the real core of the driver. Zone, record
- * and client strings are passed in (or NULL is passed if the
- * string is not available). The type of query we want to run
- * is indicated by the query flag, and the dbdata object is passed
- * passed in to. dbdata really holds either:
- * 1) a list of database instances (in multithreaded mode) OR
- * 2) a single database instance (in single threaded mode)
- * The function will construct the query and obtain an available
- * database instance (DBI). It will then run the query and hopefully
- * obtain a result set. The data base instance that is used is returned
- * to the caller so they can get the data from the result set from it.
- * If successfull, it will be the responsibility of the caller to close
- * the cursor, and unlock the mutex of the DBI when they are done with it.
- * If not successfull, this function will perform all the cleanup.
- */
-
-
-static isc_result_t
-odbc_get_resultset(const char *zone, const char *record,
- const char *client, unsigned int query,
- void *dbdata, dbinstance_t **r_dbi)
-{
-
- isc_result_t result;
- dbinstance_t *dbi = NULL;
- char *querystring = NULL;
- unsigned int j = 0;
- SQLRETURN sqlRes;
-
- REQUIRE(*r_dbi == NULL);
-
- /* get db instance / connection */
-#ifdef ISC_PLATFORM_USETHREADS
-
- /* find an available DBI from the list */
- dbi = odbc_find_avail_conn(((odbc_instance_t *) dbdata)->db);
-
-#else /* ISC_PLATFORM_USETHREADS */
-
- /*
- * only 1 DBI - no need to lock instance lock either
- * only 1 thread in the whole process, no possible contention.
- */
- dbi = (dbinstance_t *) ((odbc_instance_t *) dbdata)->db;
-
-#endif /* ISC_PLATFORM_USETHREADS */
-
- /* if DBI is null, can't do anything else */
- if (dbi == NULL) {
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- /* what type of query are we going to run? */
- switch(query) {
- case ALLNODES:
- /*
- * if the query was not passed in from the config file
- * then we can't run it. return not_implemented, so
- * it's like the code for that operation was never
- * built into the driver.... AHHH flexibility!!!
- */
- if (dbi->allnodes_q == NULL) {
- result = ISC_R_NOTIMPLEMENTED;
- goto cleanup;
- }
- break;
- case ALLOWXFR:
- /* same as comments as ALLNODES */
- if (dbi->allowxfr_q == NULL) {
- result = ISC_R_NOTIMPLEMENTED;
- goto cleanup;
- }
- break;
- case AUTHORITY:
- /* same as comments as ALLNODES */
- if (dbi->authority_q == NULL) {
- result = ISC_R_NOTIMPLEMENTED;
- goto cleanup;
- }
- break;
- case FINDZONE:
- /* this is required. It's the whole point of DLZ! */
- if (dbi->findzone_q == NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "No query specified for findzone. "
- "Findzone requires a query");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
- break;
- case LOOKUP:
- /* this is required. It's also a major point of DLZ! */
- if (dbi->lookup_q == NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "No query specified for lookup. "
- "Lookup requires a query");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
- break;
- default:
- /*
- * this should never happen. If it does, the code is
- * screwed up!
- */
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "Incorrect query flag passed to "
- "odbc_get_resultset");
- result = ISC_R_UNEXPECTED;
- goto cleanup;
- }
-
-
- /*
- * was a zone string passed? If so, make it safe for use in
- * queries.
- */
- if (zone != NULL) {
- dbi->zone = odbc_escape_string(zone);
- if (dbi->zone == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- } else { /* no string passed, set the string pointer to NULL */
- dbi->zone = NULL;
- }
-
- /*
- * was a record string passed? If so, make it safe for use in
- * queries.
- */
- if (record != NULL) {
- dbi->record = odbc_escape_string(record);
- if (dbi->record == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- } else { /* no string passed, set the string pointer to NULL */
- dbi->record = NULL;
- }
-
- /*
- * was a client string passed? If so, make it safe for use in
- * queries.
- */
- if (client != NULL) {
- dbi->client = odbc_escape_string(client);
- if (dbi->client == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- } else { /* no string passed, set the string pointer to NULL */
- dbi->client = NULL;
- }
-
- /*
- * what type of query are we going to run?
- * this time we build the actual query to run.
- */
- switch(query) {
- case ALLNODES:
- querystring = build_querystring(ns_g_mctx, dbi->allnodes_q);
- break;
- case ALLOWXFR:
- querystring = build_querystring(ns_g_mctx, dbi->allowxfr_q);
- break;
- case AUTHORITY:
- querystring = build_querystring(ns_g_mctx, dbi->authority_q);
- break;
- case FINDZONE:
- querystring = build_querystring(ns_g_mctx, dbi->findzone_q);
- break;
- case LOOKUP:
- querystring = build_querystring(ns_g_mctx, dbi->lookup_q);
- break;
- default:
- /*
- * this should never happen. If it does, the code is
- * screwed up!
- */
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "Incorrect query flag passed to "
- "odbc_get_resultset");
- result = ISC_R_UNEXPECTED;
- goto cleanup;
- }
-
- /* if the querystring is null, Bummer, outta RAM. UPGRADE TIME!!! */
- if (querystring == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
-
- /* output the full query string during debug so we can see */
- /* what lame error the query has. */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(1),
- "\nQuery String: %s\n", querystring);
-
- /* attempt query up to 3 times. */
- for (j=0; j < 3; j++) {
- /* try to get result set */
- sqlRes = SQLExecDirect(((odbc_db_t *) dbi->dbconn)->stmnt,
- (SQLCHAR *) querystring,
- (SQLINTEGER) strlen(querystring));
-
- /* if error, reset DB connection */
- if (!sqlOK(sqlRes)) {
- /* close cursor */
- SQLCloseCursor(((odbc_db_t *) dbi->dbconn)->stmnt);
- /* attempt to reconnect */
- result = odbc_connect((odbc_instance_t *) dbdata,
- (odbc_db_t **) &(dbi->dbconn));
- /* check if we reconnected */
- if (result != ISC_R_SUCCESS)
- break;
- /* incase this is the last time through the loop */
- result = ISC_R_FAILURE;
- } else {
- result = ISC_R_SUCCESS;
- /* return dbi */
- *r_dbi = dbi;
- /* result set ok, break loop */
- break;
- }
- } /* end for loop */
-
- cleanup: /* it's always good to cleanup after yourself */
-
- /* if we couldn't even allocate DBI, just return NULL */
- if (dbi == NULL)
- return ISC_R_FAILURE;
-
- /* free dbi->zone string */
- if (dbi->zone != NULL)
- isc_mem_free(ns_g_mctx, dbi->zone);
-
- /* free dbi->record string */
- if (dbi->record != NULL)
- isc_mem_free(ns_g_mctx, dbi->record);
-
- /* free dbi->client string */
- if (dbi->client != NULL)
- isc_mem_free(ns_g_mctx, dbi->client);
-
-#ifdef ISC_PLATFORM_USETHREADS
-
- /* if we are done using this dbi, release the lock */
- if (result != ISC_R_SUCCESS)
- isc_mutex_unlock(&dbi->instance_lock);
-
-#endif /* ISC_PLATFORM_USETHREADS */
-
- /* release query string */
- if (querystring != NULL)
- isc_mem_free(ns_g_mctx, querystring );
-
- /* return result */
- return result;
-
-}
-
-/*%
- * Gets a single field from the ODBC statement. The memory for the
- * returned data is dynamically allocated. If this method is successful
- * it is the reponsibility of the caller to free the memory using
- * isc_mem_free(ns_g_mctx, *ptr);
- */
-
-static isc_result_t
-odbc_getField(SQLHSTMT *stmnt, SQLSMALLINT field, char **data) {
-
- SQLLEN size;
-
- REQUIRE(data != NULL && *data == NULL);
-
- if (sqlOK(SQLColAttribute(stmnt, field, SQL_DESC_DISPLAY_SIZE,
- NULL, 0, NULL, &size)) && size > 0) {
- *data = isc_mem_allocate(ns_g_mctx, size + 1);
- if (data != NULL) {
- if (sqlOK(SQLGetData(stmnt, field, SQL_C_CHAR,
- *data, size + 1,&size)))
- return ISC_R_SUCCESS;
- isc_mem_free(ns_g_mctx, *data);
- }
- }
- return ISC_R_FAILURE;
-}
-
-/*%
- * Gets multiple fields from the ODBC statement. The memory for the
- * returned data is dynamically allocated. If this method is successful
- * it is the reponsibility of the caller to free the memory using
- * isc_mem_free(ns_g_mctx, *ptr);
- */
-
-static isc_result_t
-odbc_getManyFields(SQLHSTMT *stmnt, SQLSMALLINT startField,
- SQLSMALLINT endField, char **retData) {
-
- isc_result_t result;
- SQLLEN size;
- int totSize = 0;
- SQLSMALLINT i;
- int j = 0;
- char *data;
-
- REQUIRE(retData != NULL && *retData == NULL);
- REQUIRE(startField > 0 && startField <= endField);
-
- /* determine how large the data is */
- for (i=startField; i <= endField; i++)
- if (sqlOK(SQLColAttribute(stmnt, i, SQL_DESC_DISPLAY_SIZE,
- NULL, 0, NULL, &size)) && size > 0) {
- /* always allow for a " " (space) character */
- totSize += (size + 1);
- /* after the data item */
- }
-
- if (totSize < 1)
- return ISC_R_FAILURE;
-
- /* allow for a "\n" at the end of the string/ */
- data = isc_mem_allocate(ns_g_mctx, ++totSize);
- if (data == NULL)
- return ISC_R_NOMEMORY;
-
- result = ISC_R_FAILURE;
-
- /* get the data and concat all fields into a large string */
- for (i=startField; i <= endField; i++) {
- if (sqlOK(SQLGetData(stmnt, i, SQL_C_CHAR, &(data[j]),
- totSize - j, &size))) {
- if (size > 0) {
- j += size;
- data[j++] = ' ';
- data[j] = '\0';
- result = ISC_R_SUCCESS;
- }
- } else {
- isc_mem_free(ns_g_mctx, data);
- return ISC_R_FAILURE;
- }
- }
-
- if (result != ISC_R_SUCCESS) {
- isc_mem_free(ns_g_mctx, data);
- return result;
- }
-
- *retData = data;
- return ISC_R_SUCCESS;
-
-}
-
-/*%
- * The processing of result sets for lookup and authority are
- * exactly the same. So that functionality has been moved
- * into this function to minimize code.
- */
-
-static isc_result_t
-odbc_process_rs(dns_sdlzlookup_t *lookup, dbinstance_t *dbi)
-{
-
-
- isc_result_t result;
- SQLSMALLINT fields;
- SQLHSTMT *stmnt;
- char *ttl_s;
- char *type;
- char *data;
- char *endp;
- int ttl;
-
- REQUIRE(dbi != NULL);
-
- stmnt = ((odbc_db_t *) (dbi->dbconn))->stmnt;
-
- /* get number of columns */
- if (!sqlOK(SQLNumResultCols(stmnt, &fields))) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Odbc driver unable to process result set");
- result = ISC_R_FAILURE;
- goto process_rs_cleanup;
- }
-
- /* get things ready for processing */
- result = ISC_R_FAILURE;
-
- while (sqlOK(SQLFetch(stmnt))) {
-
- /* set to null for next pass through */
- data = type = ttl_s = NULL;
-
- switch(fields) {
- case 1:
- /*
- * one column in rs, it's the data field. use
- * default type of A record, and default TTL
- * of 86400. attempt to get data, & tell bind
- * about it.
- */
- if ((result = odbc_getField(stmnt, 1,
- &data)) == ISC_R_SUCCESS) {
- result = dns_sdlz_putrr(lookup, "a",
- 86400, data);
- }
- break;
- case 2:
- /*
- * two columns, data field, and data type.
- * use default TTL of 86400. attempt to get
- * DNS type & data, then tell bind about it.
- */
- if ((result = odbc_getField(stmnt, 1,
- &type)) == ISC_R_SUCCESS &&
- (result = odbc_getField(stmnt, 2,
- &data)) == ISC_R_SUCCESS) {
- result = dns_sdlz_putrr(lookup, type,
- 86400, data);
- }
- break;
- default:
- /*
- * 3 fields or more, concatenate the last ones
- * together. attempt to get DNS ttl, type,
- * data then tell Bind about them.
- */
- if ((result = odbc_getField(stmnt, 1, &ttl_s))
- == ISC_R_SUCCESS &&
- (result = odbc_getField(stmnt, 2, &type))
- == ISC_R_SUCCESS &&
- (result = odbc_getManyFields(stmnt, 3,
- fields, &data))
- == ISC_R_SUCCESS) {
- /* try to convert ttl string to int */
- ttl = strtol(ttl_s, &endp, 10);
- /* failure converting ttl. */
- if (*endp != '\0' || ttl < 0) {
- isc_log_write(dns_lctx,
- DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ,
- ISC_LOG_ERROR,
- "Odbc driver ttl must "
- "be a postive number");
- result = ISC_R_FAILURE;
- } else {
- /*
- * successful converting TTL,
- * tell Bind everything
- */
- result = dns_sdlz_putrr(lookup, type,
- ttl, data);
- }
- } /* closes bid if () */
- } /* closes switch(fields) */
-
- /* clean up mem */
- if (ttl_s != NULL)
- isc_mem_free(ns_g_mctx, ttl_s);
- if (type != NULL)
- isc_mem_free(ns_g_mctx, type);
- if (data != NULL)
- isc_mem_free(ns_g_mctx, data);
-
- /* I sure hope we were successful */
- if (result != ISC_R_SUCCESS) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "dns_sdlz_putrr returned error. "
- "Error code was: %s",
- isc_result_totext(result));
- result = ISC_R_FAILURE;
- goto process_rs_cleanup;
- }
- } /* closes while loop */
-
- process_rs_cleanup:
-
- /* close cursor */
- SQLCloseCursor(((odbc_db_t *) (dbi->dbconn))->stmnt);
-
-#ifdef ISC_PLATFORM_USETHREADS
-
- /* free lock on dbi so someone else can use it. */
- isc_mutex_unlock(&dbi->instance_lock);
-
-#endif
-
- return result;
-}
-
-/*
- * SDLZ interface methods
- */
-
-/*% determine if the zone is supported by (in) the database */
-
-static isc_result_t
-odbc_findzone(void *driverarg, void *dbdata, const char *name,
- dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo)
-{
-
- isc_result_t result;
- dbinstance_t *dbi = NULL;
-
- UNUSED(driverarg);
- UNUSED(methods);
- UNUSED(clientinfo);
-
- /* run the query and get the result set from the database. */
- /* if result != ISC_R_SUCCESS cursor and mutex already cleaned up. */
- /* so we don't have to do it here. */
- result = odbc_get_resultset(name, NULL, NULL, FINDZONE, dbdata, &dbi);
-
- /* Check that we got a result set with data */
- if (result == ISC_R_SUCCESS &&
- !sqlOK(SQLFetch(((odbc_db_t *) (dbi->dbconn))->stmnt))) {
- result = ISC_R_NOTFOUND;
- }
-
- if (dbi != NULL) {
- /* get rid of result set, we are done with it. */
- SQLCloseCursor(((odbc_db_t *) (dbi->dbconn))->stmnt);
-
-#ifdef ISC_PLATFORM_USETHREADS
-
- /* free lock on dbi so someone else can use it. */
- isc_mutex_unlock(&dbi->instance_lock);
-#endif
- }
-
- return result;
-}
-
-/*% Determine if the client is allowed to perform a zone transfer */
-static isc_result_t
-odbc_allowzonexfr(void *driverarg, void *dbdata, const char *name,
- const char *client)
-{
- isc_result_t result;
- dbinstance_t *dbi = NULL;
-
- UNUSED(driverarg);
-
- /* first check if the zone is supported by the database. */
- result = odbc_findzone(driverarg, dbdata, name, NULL, NULL);
- if (result != ISC_R_SUCCESS)
- return (ISC_R_NOTFOUND);
-
- /*
- * if we get to this point we know the zone is supported by
- * the database. the only questions now are is the zone
- * transfer is allowed for this client and did the config file
- * have an allow zone xfr query
- *
- * Run our query, and get a result set from the database. if
- * result != ISC_R_SUCCESS cursor and mutex already cleaned
- * up, so we don't have to do it here.
- */
- result = odbc_get_resultset(name, NULL, client, ALLOWXFR,
- dbdata, &dbi);
-
- /* if we get "not implemented", send it along. */
- if (result == ISC_R_NOTIMPLEMENTED)
- return result;
-
- /* Check that we got a result set with data */
- if (result == ISC_R_SUCCESS &&
- !sqlOK(SQLFetch(((odbc_db_t *) (dbi->dbconn))->stmnt))) {
- result = ISC_R_NOPERM;
- }
-
- if (dbi != NULL) {
- /* get rid of result set, we are done with it. */
- SQLCloseCursor(((odbc_db_t *) (dbi->dbconn))->stmnt);
-
-#ifdef ISC_PLATFORM_USETHREADS
-
- /* free lock on dbi so someone else can use it. */
- isc_mutex_unlock(&dbi->instance_lock);
-#endif
-
- }
-
- return result;
-}
-
-/*%
- * If the client is allowed to perform a zone transfer, the next order of
- * business is to get all the nodes in the zone, so bind can respond to the
- * query.
- */
-
-static isc_result_t
-odbc_allnodes(const char *zone, void *driverarg, void *dbdata,
- dns_sdlzallnodes_t *allnodes)
-{
-
- isc_result_t result;
- dbinstance_t *dbi = NULL;
- SQLHSTMT *stmnt;
- SQLSMALLINT fields;
- char *data;
- char *type;
- char *ttl_s;
- int ttl;
- char *host;
- char *endp;
-
- UNUSED(driverarg);
-
- /* run the query and get the result set from the database. */
- result = odbc_get_resultset(zone, NULL, NULL, ALLNODES, dbdata, &dbi);
-
- /* if we get "not implemented", send it along */
- if (result == ISC_R_NOTIMPLEMENTED)
- return result;
-
- /* if we didn't get a result set, log an err msg. */
- if (result != ISC_R_SUCCESS) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Odbc driver unable to return "
- "result set for all nodes query");
- return (ISC_R_FAILURE);
- }
-
- stmnt = ((odbc_db_t *) (dbi->dbconn))->stmnt;
-
- /* get number of columns */
- if (!sqlOK(SQLNumResultCols(stmnt, &fields))) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Odbc driver unable to process result set");
- result = ISC_R_FAILURE;
- goto allnodes_cleanup;
- }
-
- if (fields < 4) { /* gotta have at least 4 columns */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Odbc driver too few fields returned by "
- "all nodes query");
- result = ISC_R_FAILURE;
- goto allnodes_cleanup;
- }
-
- /* get things ready for processing */
- result = ISC_R_FAILURE;
-
- while (sqlOK(SQLFetch(stmnt))) {
-
- /* set to null for next pass through */
- data = host = type = ttl_s = NULL;
-
- /*
- * attempt to get DNS ttl, type, host, data then tell
- * Bind about them
- */
- if ((result = odbc_getField(stmnt, 1,
- &ttl_s)) == ISC_R_SUCCESS &&
- (result = odbc_getField(stmnt, 2,
- &type)) == ISC_R_SUCCESS &&
- (result = odbc_getField(stmnt, 3,
- &host)) == ISC_R_SUCCESS &&
- (result = odbc_getManyFields(stmnt, 4, fields,
- &data)) == ISC_R_SUCCESS) {
- /* convert ttl string to int */
- ttl = strtol(ttl_s, &endp, 10);
- /* failure converting ttl. */
- if (*endp != '\0' || ttl < 0) {
- isc_log_write(dns_lctx,
- DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Odbc driver ttl must be "
- "a postive number");
- result = ISC_R_FAILURE;
- } else {
- /* successful converting TTL, tell Bind */
- result = dns_sdlz_putnamedrr(allnodes, host,
- type, ttl, data);
- }
- } /* closes big if () */
-
- /* clean up mem */
- if (ttl_s != NULL)
- isc_mem_free(ns_g_mctx, ttl_s);
- if (type != NULL)
- isc_mem_free(ns_g_mctx, type);
- if (host != NULL)
- isc_mem_free(ns_g_mctx, host);
- if (data != NULL)
- isc_mem_free(ns_g_mctx, data);
-
- /* if we weren't successful, log err msg */
- if (result != ISC_R_SUCCESS) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "dns_sdlz_putnamedrr returned error. "
- "Error code was: %s",
- isc_result_totext(result));
- result = ISC_R_FAILURE;
- goto allnodes_cleanup;
- }
- } /* closes while loop */
-
- allnodes_cleanup:
-
- /* close cursor */
- SQLCloseCursor(((odbc_db_t *) (dbi->dbconn))->stmnt);
-
-#ifdef ISC_PLATFORM_USETHREADS
-
- /* free lock on dbi so someone else can use it. */
- isc_mutex_unlock(&dbi->instance_lock);
-
-#endif
-
- return result;
-}
-
-/*%
- * if the lookup function does not return SOA or NS records for the zone,
- * use this function to get that information for Bind.
- */
-
-static isc_result_t
-odbc_authority(const char *zone, void *driverarg, void *dbdata,
- dns_sdlzlookup_t *lookup)
-{
- isc_result_t result;
- dbinstance_t *dbi = NULL;
-
- UNUSED(driverarg);
-
- /* run the query and get the result set from the database. */
- result = odbc_get_resultset(zone, NULL, NULL, AUTHORITY, dbdata, &dbi);
- /* if we get "not implemented", send it along */
- if (result == ISC_R_NOTIMPLEMENTED)
- return result;
- /* if we didn't get a result set, log an err msg. */
- if (result != ISC_R_SUCCESS) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Odbc driver unable to return "
- "result set for authority query");
- return (ISC_R_FAILURE);
- }
- /* lookup and authority result sets are processed in the same manner */
- /* odbc_process_rs does the job for both functions. */
- return odbc_process_rs(lookup, dbi);
-}
-
-/*% if zone is supported, lookup up a (or multiple) record(s) in it */
-
-static isc_result_t
-odbc_lookup(const char *zone, const char *name, void *driverarg,
- void *dbdata, dns_sdlzlookup_t *lookup,
- dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo)
-{
- isc_result_t result;
- dbinstance_t *dbi = NULL;
-
- UNUSED(driverarg);
- UNUSED(methods);
- UNUSED(clientinfo);
-
- /* run the query and get the result set from the database. */
- result = odbc_get_resultset(zone, name, NULL, LOOKUP, dbdata, &dbi);
- /* if we didn't get a result set, log an err msg. */
- if (result != ISC_R_SUCCESS) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Odbc driver unable to return "
- "result set for lookup query");
- return (ISC_R_FAILURE);
- }
- /* lookup and authority result sets are processed in the same manner */
- /* odbc_process_rs does the job for both functions. */
- return odbc_process_rs(lookup, dbi);
-}
-
-/*%
- * create an instance of the driver. Remember, only 1 copy of the driver's
- * code is ever loaded, the driver has to remember which context it's
- * operating in. This is done via use of the dbdata argument which is
- * passed into all query functions.
- */
-static isc_result_t
-odbc_create(const char *dlzname, unsigned int argc, char *argv[],
- void *driverarg, void **dbdata)
-{
- isc_result_t result;
- odbc_instance_t *odbc_inst = NULL;
- dbinstance_t *db = NULL;
- SQLRETURN sqlRes;
-
-#ifdef ISC_PLATFORM_USETHREADS
- /* if multi-threaded, we need a few extra variables. */
- int dbcount;
- int i;
- char *endp;
-
-#endif /* ISC_PLATFORM_USETHREADS */
-
- UNUSED(dlzname);
- UNUSED(driverarg);
-
-#ifdef ISC_PLATFORM_USETHREADS
- /* if debugging, let user know we are multithreaded. */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(1),
- "Odbc driver running multithreaded");
-#else /* ISC_PLATFORM_USETHREADS */
- /* if debugging, let user know we are single threaded. */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(1),
- "Odbc driver running single threaded");
-#endif /* ISC_PLATFORM_USETHREADS */
-
- /* verify we have at least 5 arg's passed to the driver */
- if (argc < 5) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Odbc driver requires at least "
- "4 command line args.");
- return (ISC_R_FAILURE);
- }
-
- /* no more than 8 arg's should be passed to the driver */
- if (argc > 8) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Odbc driver cannot accept more than "
- "7 command line args.");
- return (ISC_R_FAILURE);
- }
-
- /* multithreaded build can have multiple DB connections */
-#ifdef ISC_PLATFORM_USETHREADS
-
- /* check how many db connections we should create */
- dbcount = strtol(argv[1], &endp, 10);
- if (*endp != '\0' || dbcount < 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Odbc driver database connection count "
- "must be positive.");
- return (ISC_R_FAILURE);
- }
-
-#endif /* ISC_PLATFORM_USETHREADS */
-
- /* allocate memory for odbc instance */
- odbc_inst = isc_mem_get(ns_g_mctx, sizeof(odbc_instance_t));
- if (odbc_inst == NULL)
- return (ISC_R_NOMEMORY);
- memset(odbc_inst, 0, sizeof(odbc_instance_t));
-
- /* parse connection string and get paramters. */
-
- /* get odbc database dsn - required */
- odbc_inst->dsn = (SQLCHAR *) getParameterValue(argv[2],
- "dsn=");
- if (odbc_inst->dsn == NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "odbc driver requires a dns parameter.");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
- /* get odbc database username */
- /* if no username was passed, set odbc_inst.user = NULL; */
- odbc_inst->user = (SQLCHAR *) getParameterValue(argv[2],
- "user=");
-
- /* get odbc database password */
- /* if no password was passed, set odbc_inst.pass = NULL; */
- odbc_inst->pass = (SQLCHAR *) getParameterValue(argv[2], "pass=");
-
- /* create odbc environment & set environment to ODBC V3 */
- if (odbc_inst->sql_env == NULL) {
- /* create environment handle */
- sqlRes = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,
- &(odbc_inst->sql_env));
- if (!sqlOK(sqlRes)) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_INFO,
- "Odbc driver unable to allocate memory");
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- /*set ODBC version = 3 */
- sqlRes = SQLSetEnvAttr(odbc_inst->sql_env,
- SQL_ATTR_ODBC_VERSION,
- (void *) SQL_OV_ODBC3, 0);
- if (!sqlOK(sqlRes)) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_INFO,
- "Unable to configure ODBC environment");
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- }
-
-#ifdef ISC_PLATFORM_USETHREADS
-
- /* allocate memory for database connection list */
- odbc_inst->db = isc_mem_get(ns_g_mctx, sizeof(db_list_t));
- if (odbc_inst->db == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
-
-
- /* initialize DB connection list */
- ISC_LIST_INIT(*odbc_inst->db);
-
- /* create the appropriate number of database instances (DBI) */
- /* append each new DBI to the end of the list */
- for (i=0; i < dbcount; i++) {
-
-#endif /* ISC_PLATFORM_USETHREADS */
-
- /* how many queries were passed in from config file? */
- switch(argc) {
- case 5:
- result = build_sqldbinstance(ns_g_mctx, NULL, NULL,
- NULL, argv[3], argv[4],
- NULL, &db);
- break;
- case 6:
- result = build_sqldbinstance(ns_g_mctx, NULL, NULL,
- argv[5], argv[3], argv[4],
- NULL, &db);
- break;
- case 7:
- result = build_sqldbinstance(ns_g_mctx, argv[6], NULL,
- argv[5], argv[3], argv[4],
- NULL, &db);
- break;
- case 8:
- result = build_sqldbinstance(ns_g_mctx, argv[6],
- argv[7], argv[5], argv[3],
- argv[4], NULL, &db);
- break;
- default:
- /* not really needed, should shut up compiler. */
- result = ISC_R_FAILURE;
- }
-
- /* unsuccessful?, log err msg and cleanup. */
- if (result != ISC_R_SUCCESS) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Odbc driver could not create "
- "database instance object.");
- goto cleanup;
- }
-
-#ifdef ISC_PLATFORM_USETHREADS
-
- /* when multithreaded, build a list of DBI's */
- ISC_LINK_INIT(db, link);
- ISC_LIST_APPEND(*odbc_inst->db, db, link);
-
-#endif
-
- result = odbc_connect(odbc_inst, (odbc_db_t **) &(db->dbconn));
-
- if (result != ISC_R_SUCCESS) {
-
-#ifdef ISC_PLATFORM_USETHREADS
-
- /*
- * if multi threaded, let user know which
- * connection failed. user could be
- * attempting to create 10 db connections and
- * for some reason the db backend only allows
- * 9.
- */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Odbc driver failed to create database "
- "connection number %u after 3 attempts",
- i+1);
-#else
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Odbc driver failed to create database "
- "connection after 3 attempts");
-#endif
- goto cleanup;
- }
-
-#ifdef ISC_PLATFORM_USETHREADS
-
- /* set DB = null for next loop through. */
- db = NULL;
-
- } /* end for loop */
-
-#else
- /* tell odbc_inst about the db connection we just created. */
- odbc_inst->db = db;
-
-#endif
-
- /* set dbdata to the odbc_instance we created. */
- *dbdata = odbc_inst;
-
- /* hey, we got through all of that ok, return success. */
- return(ISC_R_SUCCESS);
-
- cleanup:
-
- destroy_odbc_instance(odbc_inst);
-
- return result;
-}
-
-/*%
- * destroy an instance of the driver. Remember, only 1 copy of the driver's
- * code is ever loaded, the driver has to remember which context it's
- * operating in. This is done via use of the dbdata argument.
- * so we really only need to clean it up since we are not using driverarg.
- */
-
-static void
-odbc_destroy(void *driverarg, void *dbdata)
-{
- UNUSED(driverarg);
-
- destroy_odbc_instance((odbc_instance_t *) dbdata);
-}
-
-
-/* pointers to all our runtime methods. */
-/* this is used during driver registration */
-/* i.e. in dlz_odbc_init below. */
-static dns_sdlzmethods_t dlz_odbc_methods = {
- odbc_create,
- odbc_destroy,
- odbc_findzone,
- odbc_lookup,
- odbc_authority,
- odbc_allnodes,
- odbc_allowzonexfr,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
-};
-
-/*%
- * Wrapper around dns_sdlzregister().
- */
-isc_result_t
-dlz_odbc_init(void) {
- isc_result_t result;
-
- /*
- * Write debugging message to log
- */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "Registering DLZ odbc driver.");
-
- /*
- * Driver is always threadsafe. When multithreaded all
- * functions use multithreaded code. When not multithreaded,
- * all functions can only be entered once, but only 1 thread
- * of operation is available in Bind. So everything is still
- * threadsafe.
- */
- result = dns_sdlzregister("odbc", &dlz_odbc_methods, NULL,
- DNS_SDLZFLAG_RELATIVEOWNER |
- DNS_SDLZFLAG_RELATIVERDATA |
- DNS_SDLZFLAG_THREADSAFE,
- ns_g_mctx, &dlz_odbc);
- /* if we can't register the driver, there are big problems. */
- if (result != ISC_R_SUCCESS) {
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "dns_sdlzregister() failed: %s",
- isc_result_totext(result));
- result = ISC_R_UNEXPECTED;
- }
-
-
- return result;
-}
-
-/*%
- * Wrapper around dns_sdlzunregister().
- */
-void
-dlz_odbc_clear(void) {
-
- /*
- * Write debugging message to log
- */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "Unregistering DLZ odbc driver.");
-
- /* unregister the driver. */
- if (dlz_odbc != NULL)
- dns_sdlzunregister(&dlz_odbc);
-}
-
-#endif
diff --git a/contrib/dlz/drivers/dlz_postgres_driver.c b/contrib/dlz/drivers/dlz_postgres_driver.c
deleted file mode 100644
index 7fc9ee37..00000000
--- a/contrib/dlz/drivers/dlz_postgres_driver.c
+++ /dev/null
@@ -1,1381 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 1999-2001, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifdef DLZ_POSTGRES
-
-#include <config.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <dns/log.h>
-#include <dns/sdlz.h>
-#include <dns/result.h>
-
-#include <isc/mem.h>
-#include <isc/platform.h>
-#include <isc/print.h>
-#include <isc/result.h>
-#include <isc/string.h>
-#include <isc/util.h>
-
-#include <named/globals.h>
-
-#include <dlz/sdlz_helper.h>
-#include <dlz/dlz_postgres_driver.h>
-
-/* temporarily include time. */
-#include <time.h>
-
-#include <libpq-fe.h>
-
-static dns_sdlzimplementation_t *dlz_postgres = NULL;
-
-#define dbc_search_limit 30
-#define ALLNODES 1
-#define ALLOWXFR 2
-#define AUTHORITY 3
-#define FINDZONE 4
-#define LOOKUP 5
-
-/*
- * Private methods
- */
-
-/* ---------------
- * Escaping arbitrary strings to get valid SQL strings/identifiers.
- *
- * Replaces "\\" with "\\\\" and "'" with "''".
- * length is the length of the buffer pointed to by
- * from. The buffer at to must be at least 2*length + 1 characters
- * long. A terminating NUL character is written.
- *
- * NOTICE!!!
- * This function was borrowed directly from PostgreSQL's libpq.
- * The function was originally called PQescapeString and renamed
- * to postgres_makesafe to avoid a naming collision.
- * PQescapeString is a new function made available in Postgres 7.2.
- * For some reason the function is not properly exported on Win32
- * builds making the function unavailable on Windows. Also, since
- * this function is new it would require building this driver with
- * the libpq 7.2. By borrowing this function the Windows problem
- * is solved, and the dependence on libpq 7.2 is removed. Libpq is
- * still required of course, but an older version should work now too.
- *
- * The copyright statements from the original file containing this
- * function are included below:
- * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- * ---------------
- */
-
-static size_t
-postgres_makesafe(char *to, const char *from, size_t length)
-{
- const char *source = from;
- char *target = to;
- unsigned int remaining = length;
-
- while (remaining > 0)
- {
- switch (*source)
- {
- case '\\':
- *target = '\\';
- target++;
- *target = '\\';
- /* target and remaining are updated below. */
- break;
-
- case '\'':
- *target = '\'';
- target++;
- *target = '\'';
- /* target and remaining are updated below. */
- break;
-
- default:
- *target = *source;
- /* target and remaining are updated below. */
- }
- source++;
- target++;
- remaining--;
- }
-
- /* Write the terminating NUL character. */
- *target = '\0';
-
- return target - to;
-}
-
-#ifdef ISC_PLATFORM_USETHREADS
-
-/*%
- * Properly cleans up a list of database instances.
- * This function is only used when the driver is compiled for
- * multithreaded operation.
- */
-static void
-postgres_destroy_dblist(db_list_t *dblist)
-{
-
- dbinstance_t *ndbi = NULL;
- dbinstance_t *dbi = NULL;
-
- /* get the first DBI in the list */
- ndbi = ISC_LIST_HEAD(*dblist);
-
- /* loop through the list */
- while (ndbi != NULL) {
- dbi = ndbi;
- /* get the next DBI in the list */
- ndbi = ISC_LIST_NEXT(dbi, link);
- /* release DB connection */
- if (dbi->dbconn != NULL)
- PQfinish((PGconn *) dbi->dbconn);
- /* release all memory that comprised a DBI */
- destroy_sqldbinstance(dbi);
- }
- /* release memory for the list structure */
- isc_mem_put(ns_g_mctx, dblist, sizeof(db_list_t));
-}
-
-/*%
- * Loops through the list of DB instances, attempting to lock
- * on the mutex. If successful, the DBI is reserved for use
- * and the thread can perform queries against the database.
- * If the lock fails, the next one in the list is tried.
- * looping continues until a lock is obtained, or until
- * the list has been searched dbc_search_limit times.
- * This function is only used when the driver is compiled for
- * multithreaded operation.
- */
-
-static dbinstance_t *
-postgres_find_avail_conn(db_list_t *dblist)
-{
- dbinstance_t *dbi = NULL;
- dbinstance_t *head;
- int count = 0;
-
- /* get top of list */
- head = dbi = ISC_LIST_HEAD(*dblist);
-
- /* loop through list */
- while (count < dbc_search_limit) {
- /* try to lock on the mutex */
- if (isc_mutex_trylock(&dbi->instance_lock) == ISC_R_SUCCESS)
- return dbi; /* success, return the DBI for use. */
-
- /* not successful, keep trying */
- dbi = ISC_LIST_NEXT(dbi, link);
-
- /* check to see if we have gone to the top of the list. */
- if (dbi == NULL) {
- count++;
- dbi = head;
- }
- }
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_INFO,
- "Postgres driver unable to find available connection "
- "after searching %d times",
- count);
- return NULL;
-}
-
-#endif /* ISC_PLATFORM_USETHREADS */
-
-/*%
- * Allocates memory for a new string, and then constructs the new
- * string by "escaping" the input string. The new string is
- * safe to be used in queries. This is necessary because we cannot
- * be sure of what types of strings are passed to us, and we don't
- * want special characters in the string causing problems.
- */
-
-static char *
-postgres_escape_string(const char *instr) {
-
- char *outstr;
- unsigned int len;
-
- if (instr == NULL)
- return NULL;
-
- len = strlen(instr);
-
- outstr = isc_mem_allocate(ns_g_mctx ,(2 * len * sizeof(char)) + 1);
- if (outstr == NULL)
- return NULL;
-
- postgres_makesafe(outstr, instr, len);
- /* PQescapeString(outstr, instr, len); */
-
- return outstr;
-}
-
-/*%
- * This function is the real core of the driver. Zone, record
- * and client strings are passed in (or NULL is passed if the
- * string is not available). The type of query we want to run
- * is indicated by the query flag, and the dbdata object is passed
- * passed in to. dbdata really holds either:
- * 1) a list of database instances (in multithreaded mode) OR
- * 2) a single database instance (in single threaded mode)
- * The function will construct the query and obtain an available
- * database instance (DBI). It will then run the query and hopefully
- * obtain a result set. Postgres is nice, in that once the result
- * set is returned, we can make the db connection available for another
- * thread to use, while this thread continues on. So, the DBI is made
- * available ASAP by unlocking the instance_lock after we have cleaned
- * it up properly.
- */
-static isc_result_t
-postgres_get_resultset(const char *zone, const char *record,
- const char *client, unsigned int query,
- void *dbdata, PGresult **rs)
-{
- isc_result_t result;
- dbinstance_t *dbi = NULL;
- char *querystring = NULL;
- unsigned int i = 0;
- unsigned int j = 0;
-
-#if 0
- /* temporarily get a unique thread # */
- unsigned int dlz_thread_num = 1+(int) (1000.0*rand()/(RAND_MAX+1.0));
-#endif
-
- REQUIRE(*rs == NULL);
-
-#if 0
- /* temporary logging message */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "%d Getting DBI", dlz_thread_num);
-#endif
-
- /* get db instance / connection */
-#ifdef ISC_PLATFORM_USETHREADS
-
- /* find an available DBI from the list */
- dbi = postgres_find_avail_conn((db_list_t *) dbdata);
-
-#else /* ISC_PLATFORM_USETHREADS */
-
- /*
- * only 1 DBI - no need to lock instance lock either
- * only 1 thread in the whole process, no possible contention.
- */
- dbi = (dbinstance_t *) dbdata;
-
-#endif /* ISC_PLATFORM_USETHREADS */
-
-#if 0
- /* temporary logging message */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "%d Got DBI - checking query", dlz_thread_num);
-#endif
-
- /* if DBI is null, can't do anything else */
- if (dbi == NULL) {
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- /* what type of query are we going to run? */
- switch(query) {
- case ALLNODES:
- /*
- * if the query was not passed in from the config file
- * then we can't run it. return not_implemented, so
- * it's like the code for that operation was never
- * built into the driver.... AHHH flexibility!!!
- */
- if (dbi->allnodes_q == NULL) {
- result = ISC_R_NOTIMPLEMENTED;
- goto cleanup;
- }
- break;
- case ALLOWXFR:
- /* same as comments as ALLNODES */
- if (dbi->allowxfr_q == NULL) {
- result = ISC_R_NOTIMPLEMENTED;
- goto cleanup;
- }
- break;
- case AUTHORITY:
- /* same as comments as ALLNODES */
- if (dbi->authority_q == NULL) {
- result = ISC_R_NOTIMPLEMENTED;
- goto cleanup;
- }
- break;
- case FINDZONE:
- /* this is required. It's the whole point of DLZ! */
- if (dbi->findzone_q == NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "No query specified for findzone. "
- "Findzone requires a query");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
- break;
- case LOOKUP:
- /* this is required. It's also a major point of DLZ! */
- if (dbi->lookup_q == NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "No query specified for lookup. "
- "Lookup requires a query");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
- break;
- default:
- /*
- * this should never happen. If it does, the code is
- * screwed up!
- */
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "Incorrect query flag passed to "
- "postgres_get_resultset");
- result = ISC_R_UNEXPECTED;
- goto cleanup;
- }
-
-#if 0
- /* temporary logging message */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "%d checked query", dlz_thread_num);
-#endif
-
- /*
- * was a zone string passed? If so, make it safe for use in
- * queries.
- */
- if (zone != NULL) {
- dbi->zone = postgres_escape_string(zone);
- if (dbi->zone == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- } else { /* no string passed, set the string pointer to NULL */
- dbi->zone = NULL;
- }
-
-#if 0
- /* temporary logging message */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "%d did zone", dlz_thread_num);
-#endif
-
- /*
- * was a record string passed? If so, make it safe for use in
- * queries.
- */
- if (record != NULL) {
- dbi->record = postgres_escape_string(record);
- if (dbi->record == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- } else { /* no string passed, set the string pointer to NULL */
- dbi->record = NULL;
- }
-
-
-#if 0
- /* temporary logging message */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "%d did record", dlz_thread_num);
-#endif
-
- /*
- * was a client string passed? If so, make it safe for use in
- * queries.
- */
- if (client != NULL) {
- dbi->client = postgres_escape_string(client);
- if (dbi->client == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- } else { /* no string passed, set the string pointer to NULL */
- dbi->client = NULL;
- }
-
-#if 0
- /* temporary logging message */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "%d did client", dlz_thread_num);
-#endif
-
- /*
- * what type of query are we going to run?
- * this time we build the actual query to run.
- */
- switch(query) {
- case ALLNODES:
- querystring = build_querystring(ns_g_mctx, dbi->allnodes_q);
- break;
- case ALLOWXFR:
- querystring = build_querystring(ns_g_mctx, dbi->allowxfr_q);
- break;
- case AUTHORITY:
- querystring = build_querystring(ns_g_mctx, dbi->authority_q);
- break;
- case FINDZONE:
- querystring = build_querystring(ns_g_mctx, dbi->findzone_q);
- break;
- case LOOKUP:
- querystring = build_querystring(ns_g_mctx, dbi->lookup_q);
- break;
- default:
- /*
- * this should never happen. If it does, the code is
- * screwed up!
- */
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "Incorrect query flag passed to "
- "postgres_get_resultset");
- result = ISC_R_UNEXPECTED;
- goto cleanup;
- }
-
-#if 0
- /* temporary logging message */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "%d built query", dlz_thread_num);
-#endif
-
- /* if the querystring is null, Bummer, outta RAM. UPGRADE TIME!!! */
- if (querystring == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
-
-#if 0
- /* temporary logging message */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "%d query is '%s'", dlz_thread_num, querystring);
-#endif
-
- /*
- * output the full query string during debug so we can see
- * what lame error the query has.
- */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(1),
- "\nQuery String: %s\n", querystring);
-
- /* attempt query up to 3 times. */
- for (j=0; j < 3; j++) {
-#if 0
- /* temporary logging message */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "%d executing query for %d time",
- dlz_thread_num, j);
-#endif
- /* try to get result set */
- *rs = PQexec((PGconn *)dbi->dbconn, querystring );
- result = ISC_R_SUCCESS;
- /*
- * if result set is null, reset DB connection, max 3
- * attempts.
- */
- for (i=0; *rs == NULL && i < 3; i++) {
-#if 0
- /* temporary logging message */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "%d resetting connection",
- dlz_thread_num);
-#endif
- result = ISC_R_FAILURE;
- PQreset((PGconn *) dbi->dbconn);
- /* connection ok, break inner loop */
- if (PQstatus((PGconn *) dbi->dbconn) == CONNECTION_OK)
- break;
- }
- /* result set ok, break outter loop */
- if (PQresultStatus(*rs) == PGRES_TUPLES_OK) {
-#if 0
- /* temporary logging message */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "%d rs ok", dlz_thread_num);
-#endif
- break;
- } else {
- /* we got a result set object, but it's not right. */
-#if 0
- /* temporary logging message */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "%d clearing rs", dlz_thread_num);
-#endif
- PQclear(*rs); /* get rid of it */
- /* in case this was the last attempt */
- *rs = NULL;
- result = ISC_R_FAILURE;
- }
- }
-
- cleanup:
- /* it's always good to cleanup after yourself */
-
-#if 0
- /* temporary logging message */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "%d cleaning up", dlz_thread_num);
-#endif
-
- /* if we couldn't even allocate DBI, just return NULL */
- if (dbi == NULL)
- return ISC_R_FAILURE;
-
- /* free dbi->zone string */
- if (dbi->zone != NULL)
- isc_mem_free(ns_g_mctx, dbi->zone);
-
- /* free dbi->record string */
- if (dbi->record != NULL)
- isc_mem_free(ns_g_mctx, dbi->record);
-
- /* free dbi->client string */
- if (dbi->client != NULL)
- isc_mem_free(ns_g_mctx, dbi->client);
-
-#ifdef ISC_PLATFORM_USETHREADS
-
-#if 0
- /* temporary logging message */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "%d unlocking mutex", dlz_thread_num);
-#endif
-
- /* release the lock so another thread can use this dbi */
- isc_mutex_unlock(&dbi->instance_lock);
-
-#endif /* ISC_PLATFORM_USETHREADS */
-
- /* release query string */
- if (querystring != NULL)
- isc_mem_free(ns_g_mctx, querystring );
-
-#if 0
- /* temporary logging message */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "%d returning", dlz_thread_num);
-#endif
-
- /* return result */
- return result;
-}
-
-/*%
- * The processing of result sets for lookup and authority are
- * exactly the same. So that functionality has been moved
- * into this function to minimize code.
- */
-
-static isc_result_t
-postgres_process_rs(dns_sdlzlookup_t *lookup, PGresult *rs)
-{
- isc_result_t result;
- unsigned int i;
- unsigned int rows;
- unsigned int fields;
- unsigned int j;
- unsigned int len;
- char *tmpString;
- char *endp;
- int ttl;
-
- rows = PQntuples(rs); /* how many rows in result set */
- fields = PQnfields(rs); /* how many columns in result set */
- for (i=0; i < rows; i++) {
- switch(fields) {
- case 1:
- /*
- * one column in rs, it's the data field. use
- * default type of A record, and default TTL
- * of 86400
- */
- result = dns_sdlz_putrr(lookup, "a", 86400,
- PQgetvalue(rs, i, 0));
- break;
- case 2:
- /* two columns, data field, and data type.
- * use default TTL of 86400.
- */
- result = dns_sdlz_putrr(lookup, PQgetvalue(rs, i, 0),
- 86400, PQgetvalue(rs, i, 1));
- break;
- case 3:
- /* three columns, all data no defaults.
- * convert text to int, make sure it worked
- * right.
- */
- ttl = strtol(PQgetvalue(rs, i, 0), &endp, 10);
- if (*endp != '\0' || ttl < 0) {
- isc_log_write(dns_lctx,
- DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Postgres driver ttl must be "
- "a positive number");
- }
- result = dns_sdlz_putrr(lookup, PQgetvalue(rs, i, 1),
- ttl, PQgetvalue(rs, i, 2));
- break;
- default:
- /*
- * more than 3 fields, concatenate the last
- * ones together. figure out how long to make
- * string
- */
- for (j=2, len=0; j < fields; j++) {
- len += strlen(PQgetvalue(rs, i, j)) + 1;
- }
- /*
- * allocate string memory, allow for NULL to
- * term string
- */
- tmpString = isc_mem_allocate(ns_g_mctx, len + 1);
- if (tmpString == NULL) {
- /* major bummer, need more ram */
- isc_log_write(dns_lctx,
- DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Postgres driver unable to "
- "allocate memory for "
- "temporary string");
- PQclear(rs);
- return (ISC_R_FAILURE); /* Yeah, I'd say! */
- }
- /* copy field to tmpString */
- strcpy(tmpString, PQgetvalue(rs, i, 2));
- /*
- * concat the rest of fields together, space
- * between each one.
- */
- for (j=3; j < fields; j++) {
- strcat(tmpString, " ");
- strcat(tmpString, PQgetvalue(rs, i, j));
- }
- /* convert text to int, make sure it worked right */
- ttl = strtol(PQgetvalue(rs, i, 0), &endp, 10);
- if (*endp != '\0' || ttl < 0) {
- isc_log_write(dns_lctx,
- DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Postgres driver ttl must be "
- "a postive number");
- }
- /* ok, now tell Bind about it. */
- result = dns_sdlz_putrr(lookup, PQgetvalue(rs, i, 1),
- ttl, tmpString);
- /* done, get rid of this thing. */
- isc_mem_free(ns_g_mctx, tmpString);
- }
- /* I sure hope we were successful */
- if (result != ISC_R_SUCCESS) {
- /* nope, get rid of the Result set, and log a msg */
- PQclear(rs);
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "dns_sdlz_putrr returned error. "
- "Error code was: %s",
- isc_result_totext(result));
- return (ISC_R_FAILURE);
- }
- }
-
- /* free result set memory */
- PQclear(rs);
-
- /* if we did return results, we are successful */
- if (rows > 0)
- return (ISC_R_SUCCESS);
-
- /* empty result set, no data found */
- return (ISC_R_NOTFOUND);
-}
-
-/*
- * SDLZ interface methods
- */
-
-/*% determine if the zone is supported by (in) the database */
-
-static isc_result_t
-postgres_findzone(void *driverarg, void *dbdata, const char *name,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-{
- isc_result_t result;
- PGresult *rs = NULL;
- unsigned int rows;
-
- UNUSED(driverarg);
- UNUSED(methods);
- UNUSED(clientinfo);
-
- /* run the query and get the result set from the database. */
- result = postgres_get_resultset(name, NULL, NULL,
- FINDZONE, dbdata, &rs);
- /* if we didn't get a result set, log an err msg. */
- if (result != ISC_R_SUCCESS) {
- if (rs != NULL)
- PQclear(rs);
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Postgres driver unable to return "
- "result set for findzone query");
- return (ISC_R_FAILURE);
- }
- /* count how many rows in result set */
- rows = PQntuples(rs);
- /* get rid of result set, we are done with it. */
- PQclear(rs);
-
- /* if we returned any rows, zone is supported. */
- if (rows > 0)
- return (ISC_R_SUCCESS);
-
- /* no rows returned, zone is not supported. */
- return (ISC_R_NOTFOUND);
-}
-
-/*% Determine if the client is allowed to perform a zone transfer */
-static isc_result_t
-postgres_allowzonexfr(void *driverarg, void *dbdata, const char *name,
- const char *client)
-{
- isc_result_t result;
- PGresult *rs = NULL;
- unsigned int rows;
- UNUSED(driverarg);
-
- /* first check if the zone is supported by the database. */
- result = postgres_findzone(driverarg, dbdata, name, NULL, NULL);
- if (result != ISC_R_SUCCESS)
- return (ISC_R_NOTFOUND);
-
- /*
- * if we get to this point we know the zone is supported by
- * the database the only questions now are is the zone
- * transfer is allowed for this client and did the config file
- * have an allow zone xfr query.
- *
- * Run our query, and get a result set from the database.
- */
- result = postgres_get_resultset(name, NULL, client,
- ALLOWXFR, dbdata, &rs);
- /* if we get "not implemented", send it along. */
- if (result == ISC_R_NOTIMPLEMENTED)
- return result;
- /* if we didn't get a result set, log an err msg. */
- if (result != ISC_R_SUCCESS) {
- if (rs != NULL)
- PQclear(rs);
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Postgres driver unable to return "
- "result set for allow xfr query");
- return (ISC_R_FAILURE);
- }
- /* count how many rows in result set */
- rows = PQntuples(rs);
- /* get rid of result set, we are done with it. */
- PQclear(rs);
-
- /* if we returned any rows, zone xfr is allowed. */
- if (rows > 0)
- return (ISC_R_SUCCESS);
-
- /* no rows returned, zone xfr not allowed */
- return (ISC_R_NOPERM);
-}
-
-/*%
- * If the client is allowed to perform a zone transfer, the next order of
- * business is to get all the nodes in the zone, so bind can respond to the
- * query.
- */
-static isc_result_t
-postgres_allnodes(const char *zone, void *driverarg, void *dbdata,
- dns_sdlzallnodes_t *allnodes)
-{
- isc_result_t result;
- PGresult *rs = NULL;
- unsigned int i;
- unsigned int rows;
- unsigned int fields;
- unsigned int j;
- unsigned int len;
- char *tmpString;
- char *endp;
- int ttl;
-
- UNUSED(driverarg);
-
- /* run the query and get the result set from the database. */
- result = postgres_get_resultset(zone, NULL, NULL,
- ALLNODES, dbdata, &rs);
- /* if we get "not implemented", send it along */
- if (result == ISC_R_NOTIMPLEMENTED)
- return result;
- /* if we didn't get a result set, log an err msg. */
- if (result != ISC_R_SUCCESS) {
- if (rs != NULL)
- PQclear(rs);
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Postgres driver unable to return "
- "result set for all nodes query");
- return (ISC_R_FAILURE);
- }
-
- rows = PQntuples(rs); /* how many rows in result set */
- fields = PQnfields(rs); /* how many columns in result set */
- for (i=0; i < rows; i++) {
- if (fields < 4) { /* gotta have at least 4 columns */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Postgres driver too few fields "
- "returned by all nodes query");
- }
- /* convert text to int, make sure it worked right */
- ttl = strtol(PQgetvalue(rs, i, 0), &endp, 10);
- if (*endp != '\0' || ttl < 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Postgres driver ttl must be "
- "a postive number");
- }
- if (fields == 4) {
- /* tell Bind about it. */
- result = dns_sdlz_putnamedrr(allnodes,
- PQgetvalue(rs, i, 2),
- PQgetvalue(rs, i, 1),
- ttl,
- PQgetvalue(rs, i, 3));
- } else {
- /*
- * more than 4 fields, concatonat the last
- * ones together. figure out how long to make
- * string
- */
- for (j=3, len=0; j < fields; j++) {
- len += strlen(PQgetvalue(rs, i, j)) + 1;
- }
- /* allocate memory, allow for NULL to term string */
- tmpString = isc_mem_allocate(ns_g_mctx, len + 1);
- if (tmpString == NULL) { /* we need more ram. */
- isc_log_write(dns_lctx,
- DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Postgres driver unable to "
- "allocate memory for "
- "temporary string");
- PQclear(rs);
- return (ISC_R_FAILURE);
- }
- /* copy this field to tmpString */
- strcpy(tmpString, PQgetvalue(rs, i, 3));
- /* concatonate the rest, with spaces between */
- for (j=4; j < fields; j++) {
- strcat(tmpString, " ");
- strcat(tmpString, PQgetvalue(rs, i, j));
- }
- /* tell Bind about it. */
- result = dns_sdlz_putnamedrr(allnodes,
- PQgetvalue(rs, i, 2),
- PQgetvalue(rs, i, 1),
- ttl, tmpString);
- isc_mem_free(ns_g_mctx, tmpString);
- }
- /* if we weren't successful, log err msg */
- if (result != ISC_R_SUCCESS) {
- PQclear(rs);
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "dns_sdlz_putnamedrr returned error. "
- "Error code was: %s",
- isc_result_totext(result));
- return (ISC_R_FAILURE);
- }
- }
-
- /* free result set memory */
- PQclear(rs);
-
- /* if we did return results, we are successful */
- if (rows > 0)
- return (ISC_R_SUCCESS);
-
- /* empty result set, no data found */
- return (ISC_R_NOTFOUND);
-}
-
-/*%
- * if the lookup function does not return SOA or NS records for the zone,
- * use this function to get that information for Bind.
- */
-
-static isc_result_t
-postgres_authority(const char *zone, void *driverarg, void *dbdata,
- dns_sdlzlookup_t *lookup)
-{
- isc_result_t result;
- PGresult *rs = NULL;
-
- UNUSED(driverarg);
-
- /* run the query and get the result set from the database. */
- result = postgres_get_resultset(zone, NULL, NULL,
- AUTHORITY, dbdata, &rs);
- /* if we get "not implemented", send it along */
- if (result == ISC_R_NOTIMPLEMENTED)
- return result;
- /* if we didn't get a result set, log an err msg. */
- if (result != ISC_R_SUCCESS) {
- if (rs != NULL)
- PQclear(rs);
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Postgres driver unable to return "
- "result set for authority query");
- return (ISC_R_FAILURE);
- }
- /*
- * lookup and authority result sets are processed in the same
- * manner postgres_process_rs does the job for both
- * functions.
- */
- return postgres_process_rs(lookup, rs);
-}
-
-/*% if zone is supported, lookup up a (or multiple) record(s) in it */
-static isc_result_t
-postgres_lookup(const char *zone, const char *name, void *driverarg,
- void *dbdata, dns_sdlzlookup_t *lookup,
- dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo)
-{
- isc_result_t result;
- PGresult *rs = NULL;
-
- UNUSED(driverarg);
- UNUSED(methods);
- UNUSED(clientinfo);
-
- /* run the query and get the result set from the database. */
- result = postgres_get_resultset(zone, name, NULL, LOOKUP, dbdata, &rs);
- /* if we didn't get a result set, log an err msg. */
- if (result != ISC_R_SUCCESS) {
- if (rs != NULL)
- PQclear(rs);
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Postgres driver unable to "
- "return result set for lookup query");
- return (ISC_R_FAILURE);
- }
- /*
- * lookup and authority result sets are processed in the same
- * manner postgres_process_rs does the job for both functions.
- */
- return postgres_process_rs(lookup, rs);
-}
-
-/*%
- * create an instance of the driver. Remember, only 1 copy of the driver's
- * code is ever loaded, the driver has to remember which context it's
- * operating in. This is done via use of the dbdata argument which is
- * passed into all query functions.
- */
-static isc_result_t
-postgres_create(const char *dlzname, unsigned int argc, char *argv[],
- void *driverarg, void **dbdata)
-{
- isc_result_t result;
- dbinstance_t *dbi = NULL;
- unsigned int j;
-
-#ifdef ISC_PLATFORM_USETHREADS
- /* if multi-threaded, we need a few extra variables. */
- int dbcount;
- db_list_t *dblist = NULL;
- int i;
- char *endp;
-
-#endif /* ISC_PLATFORM_USETHREADS */
-
- UNUSED(driverarg);
- UNUSED(dlzname);
-
-/* seed random # generator */
- srand( (unsigned)time( NULL ) );
-
-
-#ifdef ISC_PLATFORM_USETHREADS
- /* if debugging, let user know we are multithreaded. */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(1),
- "Postgres driver running multithreaded");
-#else /* ISC_PLATFORM_USETHREADS */
- /* if debugging, let user know we are single threaded. */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(1),
- "Postgres driver running single threaded");
-#endif /* ISC_PLATFORM_USETHREADS */
-
- /* verify we have at least 5 arg's passed to the driver */
- if (argc < 5) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Postgres driver requires at least "
- "4 command line args.");
- return (ISC_R_FAILURE);
- }
-
- /* no more than 8 arg's should be passed to the driver */
- if (argc > 8) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Postgres driver cannot accept more than "
- "7 command line args.");
- return (ISC_R_FAILURE);
- }
-
- /* multithreaded build can have multiple DB connections */
-#ifdef ISC_PLATFORM_USETHREADS
-
- /* check how many db connections we should create */
- dbcount = strtol(argv[1], &endp, 10);
- if (*endp != '\0' || dbcount < 0) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Postgres driver database connection count "
- "must be positive.");
- return (ISC_R_FAILURE);
- }
-
- /* allocate memory for database connection list */
- dblist = isc_mem_get(ns_g_mctx, sizeof(db_list_t));
- if (dblist == NULL)
- return (ISC_R_NOMEMORY);
-
- /* initialize DB connection list */
- ISC_LIST_INIT(*dblist);
-
- /*
- * create the appropriate number of database instances (DBI)
- * append each new DBI to the end of the list
- */
- for (i=0; i < dbcount; i++) {
-
-#endif /* ISC_PLATFORM_USETHREADS */
-
- /* how many queries were passed in from config file? */
- switch(argc) {
- case 5:
- result = build_sqldbinstance(ns_g_mctx, NULL, NULL,
- NULL, argv[3], argv[4],
- NULL, &dbi);
- break;
- case 6:
- result = build_sqldbinstance(ns_g_mctx, NULL, NULL,
- argv[5], argv[3], argv[4],
- NULL, &dbi);
- break;
- case 7:
- result = build_sqldbinstance(ns_g_mctx, argv[6], NULL,
- argv[5], argv[3], argv[4],
- NULL, &dbi);
- break;
- case 8:
- result = build_sqldbinstance(ns_g_mctx, argv[6],
- argv[7], argv[5], argv[3],
- argv[4], NULL, &dbi);
- break;
- default:
- /* not really needed, should shut up compiler. */
- result = ISC_R_FAILURE;
- }
-
-
- if (result == ISC_R_SUCCESS) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "Postgres driver created database "
- "instance object.");
- } else { /* unsuccessful?, log err msg and cleanup. */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Postgres driver could not create "
- "database instance object.");
- goto cleanup;
- }
-
-#ifdef ISC_PLATFORM_USETHREADS
-
- /* when multithreaded, build a list of DBI's */
- ISC_LINK_INIT(dbi, link);
- ISC_LIST_APPEND(*dblist, dbi, link);
-
-#endif
-
- /* create and set db connection */
- dbi->dbconn = PQconnectdb(argv[2]);
- /*
- * if db connection cannot be created, log err msg and
- * cleanup.
- */
- if (dbi->dbconn == NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Postgres driver could not allocate "
- "memory for database connection");
- goto cleanup;
- }
-
- /* if we cannot connect the first time, try 3 more times. */
- for (j = 0;
- PQstatus((PGconn *) dbi->dbconn) != CONNECTION_OK &&
- j < 3;
- j++)
- PQreset((PGconn *) dbi->dbconn);
-
-
-#ifdef ISC_PLATFORM_USETHREADS
-
- /*
- * if multi threaded, let user know which connection
- * failed. user could be attempting to create 10 db
- * connections and for some reason the db backend only
- * allows 9
- */
- if (PQstatus((PGconn *) dbi->dbconn) != CONNECTION_OK) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Postgres driver failed to create "
- "database connection number %u "
- "after 4 attempts",
- i + 1);
- goto cleanup;
- }
-
- /* set DBI = null for next loop through. */
- dbi = NULL;
- } /* end for loop */
-
- /* set dbdata to the list we created. */
- *dbdata = dblist;
-
-#else /* ISC_PLATFORM_USETHREADS */
- /* if single threaded, just let user know we couldn't connect. */
- if (PQstatus((PGconn *) dbi->dbconn) != CONNECTION_OK) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Postgres driver failed to create database "
- "connection after 4 attempts");
- goto cleanup;
- }
-
- /*
- * single threaded build can only use 1 db connection, return
- * it via dbdata
- */
- *dbdata = dbi;
-
-#endif /* ISC_PLATFORM_USETHREADS */
-
- /* hey, we got through all of that ok, return success. */
- return(ISC_R_SUCCESS);
-
- cleanup:
-
-#ifdef ISC_PLATFORM_USETHREADS
- /*
- * if multithreaded, we could fail because only 1 connection
- * couldn't be made. We should cleanup the other successful
- * connections properly.
- */
- postgres_destroy_dblist(dblist);
-
-#else /* ISC_PLATFORM_USETHREADS */
- if (dbi != NULL)
- destroy_sqldbinstance(dbi);
-
-#endif /* ISC_PLATFORM_USETHREADS */
- return(ISC_R_FAILURE);
-}
-
-/*%
- * destroy an instance of the driver. Remember, only 1 copy of the driver's
- * code is ever loaded, the driver has to remember which context it's
- * operating in. This is done via use of the dbdata argument.
- * so we really only need to clean it up since we are not using driverarg.
- */
-static void
-postgres_destroy(void *driverarg, void *dbdata)
-{
-
-#ifdef ISC_PLATFORM_USETHREADS
-
- UNUSED(driverarg);
- /* cleanup the list of DBI's */
- postgres_destroy_dblist((db_list_t *) dbdata);
-
-#else /* ISC_PLATFORM_USETHREADS */
-
- dbinstance_t *dbi;
-
- UNUSED(driverarg);
-
- dbi = (dbinstance_t *) dbdata;
-
- /* release DB connection */
- if (dbi->dbconn != NULL)
- PQfinish((PGconn *) dbi->dbconn);
-
- /* destroy single DB instance */
- destroy_sqldbinstance(dbi);
-
-#endif /* ISC_PLATFORM_USETHREADS */
-}
-
-/* pointers to all our runtime methods. */
-/* this is used during driver registration */
-/* i.e. in dlz_postgres_init below. */
-static dns_sdlzmethods_t dlz_postgres_methods = {
- postgres_create,
- postgres_destroy,
- postgres_findzone,
- postgres_lookup,
- postgres_authority,
- postgres_allnodes,
- postgres_allowzonexfr,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
-};
-
-/*%
- * Wrapper around dns_sdlzregister().
- */
-isc_result_t
-dlz_postgres_init(void) {
- isc_result_t result;
-
- /*
- * Write debugging message to log
- */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "Registering DLZ postgres driver.");
-
- /*
- * Driver is always threadsafe. When multithreaded all
- * functions use multithreaded code. When not multithreaded,
- * all functions can only be entered once, but only 1 thread
- * of operation is available in Bind. So everything is still
- * threadsafe.
- */
- result = dns_sdlzregister("postgres", &dlz_postgres_methods, NULL,
- DNS_SDLZFLAG_RELATIVEOWNER |
- DNS_SDLZFLAG_RELATIVERDATA |
- DNS_SDLZFLAG_THREADSAFE,
- ns_g_mctx, &dlz_postgres);
- /* if we can't register the driver, there are big problems. */
- if (result != ISC_R_SUCCESS) {
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "dns_sdlzregister() failed: %s",
- isc_result_totext(result));
- result = ISC_R_UNEXPECTED;
- }
-
-
- return result;
-}
-
-/*%
- * Wrapper around dns_sdlzunregister().
- */
-void
-dlz_postgres_clear(void) {
-
- /*
- * Write debugging message to log
- */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "Unregistering DLZ postgres driver.");
-
- /* unregister the driver. */
- if (dlz_postgres != NULL)
- dns_sdlzunregister(&dlz_postgres);
-}
-
-#endif
diff --git a/contrib/dlz/drivers/dlz_stub_driver.c b/contrib/dlz/drivers/dlz_stub_driver.c
deleted file mode 100644
index f873c1ea..00000000
--- a/contrib/dlz/drivers/dlz_stub_driver.c
+++ /dev/null
@@ -1,336 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 1999-2001, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifdef DLZ_STUB
-
-#include <config.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <dns/log.h>
-#include <dns/sdlz.h>
-#include <dns/result.h>
-
-#include <isc/mem.h>
-#include <isc/print.h>
-#include <isc/result.h>
-#include <isc/util.h>
-
-#include <named/globals.h>
-
-#include <dlz/dlz_stub_driver.h>
-
-static dns_sdlzimplementation_t *dlz_stub = NULL;
-
-typedef struct config_data {
- char *myzone;
- char *myname;
- char *myip;
- isc_mem_t *mctx;
-} config_data_t;
-
-/*
- * SDLZ methods
- */
-
-static isc_result_t
-stub_dlz_allnodes(const char *zone, void *driverarg, void *dbdata,
- dns_sdlzallnodes_t *allnodes)
-{
- config_data_t *cd;
- isc_result_t result;
-
- UNUSED(zone);
- UNUSED(driverarg);
-
- cd = (config_data_t *) dbdata;
-
- result = dns_sdlz_putnamedrr(allnodes, cd->myname, "soa", 86400,
- "web root.localhost. "
- "0 28800 7200 604800 86400");
- if (result != ISC_R_SUCCESS)
- return (ISC_R_FAILURE);
- result = dns_sdlz_putnamedrr(allnodes, "ns", "ns", 86400, cd->myname);
- if (result != ISC_R_SUCCESS)
- return (ISC_R_FAILURE);
- result = dns_sdlz_putnamedrr(allnodes, cd->myname, "a", 1, cd->myip);
- if (result != ISC_R_SUCCESS)
- return (ISC_R_FAILURE);
- return (ISC_R_SUCCESS);
-}
-
-static isc_result_t
-stub_dlz_allowzonexfr(void *driverarg, void *dbdata, const char *name,
- const char *client)
-{
- UNUSED(driverarg);
- UNUSED(dbdata);
- UNUSED(name);
- UNUSED(client);
- return ISC_R_SUCCESS;
-}
-
-static isc_result_t
-stub_dlz_authority(const char *zone, void *driverarg, void *dbdata,
- dns_sdlzlookup_t *lookup)
-{
- isc_result_t result;
- config_data_t *cd;
-
- UNUSED(driverarg);
-
- cd = (config_data_t *) dbdata;
-
- if (strcmp(zone, cd->myzone) == 0) {
- result = dns_sdlz_putsoa(lookup, cd->myname,
- "root.localhost.", 0);
- if (result != ISC_R_SUCCESS)
- return (ISC_R_FAILURE);
-
- result = dns_sdlz_putrr(lookup, "ns", 86400, cd->myname);
- if (result != ISC_R_SUCCESS)
- return (ISC_R_FAILURE);
-
- return (ISC_R_SUCCESS);
- }
- return (ISC_R_NOTFOUND);
-}
-
-static isc_result_t
-stub_dlz_findzonedb(void *driverarg, void *dbdata, const char *name,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-{
-
- config_data_t *cd;
-
- UNUSED(driverarg);
- UNUSED(methods);
- UNUSED(clientinfo);
-
- cd = (config_data_t *) dbdata;
-
- /* Write info message to log */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "dlz_stub findzone looking for '%s'", name);
-
- if (strcmp(cd->myzone, name) == 0)
- return (ISC_R_SUCCESS);
- else
- return (ISC_R_NOTFOUND);
-}
-
-
-static isc_result_t
-stub_dlz_lookup(const char *zone, const char *name, void *driverarg,
- void *dbdata, dns_sdlzlookup_t *lookup,
- dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo)
-{
- isc_result_t result;
- config_data_t *cd;
-
- UNUSED(zone);
- UNUSED(driverarg);
- UNUSED(methods);
- UNUSED(clientinfo);
-
- cd = (config_data_t *) dbdata;
-
- if (strcmp(name, cd->myname) == 0) {
- result = dns_sdlz_putrr(lookup, "a", 1, cd->myip);
- if (result != ISC_R_SUCCESS)
- return (ISC_R_FAILURE);
-
- return (ISC_R_SUCCESS);
- }
- return (ISC_R_FAILURE);
-
-}
-
-
-static isc_result_t
-stub_dlz_create(const char *dlzname, unsigned int argc, char *argv[],
- void *driverarg, void **dbdata)
-{
-
- config_data_t *cd;
-
- UNUSED(driverarg);
-
- if (argc < 4)
- return (ISC_R_FAILURE);
- /*
- * Write info message to log
- */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_INFO,
- "Loading '%s' using DLZ_stub driver. "
- "Zone: %s, Name: %s IP: %s",
- dlzname, argv[1], argv[2], argv[3]);
-
- cd = isc_mem_get(ns_g_mctx, sizeof(config_data_t));
- if ((cd) == NULL) {
- return (ISC_R_NOMEMORY);
- }
-
- memset(cd, 0, sizeof(config_data_t));
-
- cd->myzone = isc_mem_strdup(ns_g_mctx, argv[1]);
- if (cd->myzone == NULL) {
- isc_mem_put(ns_g_mctx, cd, sizeof(config_data_t));
- return (ISC_R_NOMEMORY);
- }
-
- cd->myname = isc_mem_strdup(ns_g_mctx, argv[2]);
- if (cd->myname == NULL) {
- isc_mem_put(ns_g_mctx, cd, sizeof(config_data_t));
- isc_mem_free(ns_g_mctx, cd->myzone);
- return (ISC_R_NOMEMORY);
- }
-
- cd->myip = isc_mem_strdup(ns_g_mctx, argv[3]);
- if (cd->myip == NULL) {
- isc_mem_put(ns_g_mctx, cd, sizeof(config_data_t));
- isc_mem_free(ns_g_mctx, cd->myname);
- isc_mem_free(ns_g_mctx, cd->myzone);
- return (ISC_R_NOMEMORY);
- }
-
- isc_mem_attach(ns_g_mctx, &cd->mctx);
-
- *dbdata = cd;
-
- return(ISC_R_SUCCESS);
-}
-
-static void
-stub_dlz_destroy(void *driverarg, void *dbdata)
-{
- config_data_t *cd;
- isc_mem_t *mctx;
-
- UNUSED(driverarg);
-
- cd = (config_data_t *) dbdata;
-
- /*
- * Write debugging message to log
- */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "Unloading DLZ_stub driver.");
-
- isc_mem_free(ns_g_mctx, cd->myzone);
- isc_mem_free(ns_g_mctx, cd->myname);
- isc_mem_free(ns_g_mctx, cd->myip);
- mctx = cd->mctx;
- isc_mem_put(mctx, cd, sizeof(config_data_t));
- isc_mem_detach(&mctx);
-}
-
-static dns_sdlzmethods_t dlz_stub_methods = {
- stub_dlz_create,
- stub_dlz_destroy,
- stub_dlz_findzonedb,
- stub_dlz_lookup,
- stub_dlz_authority,
- stub_dlz_allnodes,
- stub_dlz_allowzonexfr,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
-};
-
-/*%
- * Wrapper around dns_sdlzregister().
- */
-isc_result_t
-dlz_stub_init(void) {
- isc_result_t result;
-
- /*
- * Write debugging message to log
- */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "Registering DLZ_stub driver.");
-
- result = dns_sdlzregister("dlz_stub", &dlz_stub_methods, NULL,
- DNS_SDLZFLAG_RELATIVEOWNER |
- DNS_SDLZFLAG_RELATIVERDATA,
- ns_g_mctx, &dlz_stub);
- if (result != ISC_R_SUCCESS) {
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "dns_sdlzregister() failed: %s",
- isc_result_totext(result));
- result = ISC_R_UNEXPECTED;
- }
-
-
- return result;
-}
-
-/*
- * Wrapper around dns_sdlzunregister().
- */
-void
-dlz_stub_clear(void) {
-
- /*
- * Write debugging message to log
- */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
- "Unregistering DLZ_stub driver.");
-
- if (dlz_stub != NULL)
- dns_sdlzunregister(&dlz_stub);
-}
-
-#endif
diff --git a/contrib/dlz/drivers/include/dlz/dlz_bdb_driver.h b/contrib/dlz/drivers/include/dlz/dlz_bdb_driver.h
deleted file mode 100644
index 1d706fc8..00000000
--- a/contrib/dlz/drivers/include/dlz/dlz_bdb_driver.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef DLZ_BDB_DRIVER_H
-#define DLZ_BDB_DRIVER_H
-
-isc_result_t
-dlz_bdb_init(void);
-
-void
-dlz_bdb_clear(void);
-
-#endif
diff --git a/contrib/dlz/drivers/include/dlz/dlz_bdbhpt_driver.h b/contrib/dlz/drivers/include/dlz/dlz_bdbhpt_driver.h
deleted file mode 100644
index 0ccbc8da..00000000
--- a/contrib/dlz/drivers/include/dlz/dlz_bdbhpt_driver.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef DLZ_BDBHPT_DRIVER_H
-#define DLZ_BDBHPT_DRIVER_H
-
-isc_result_t
-dlz_bdbhpt_init(void);
-
-void
-dlz_bdbhpt_clear(void);
-
-#endif
diff --git a/contrib/dlz/drivers/include/dlz/dlz_dlopen_driver.h b/contrib/dlz/drivers/include/dlz/dlz_dlopen_driver.h
deleted file mode 100644
index e69de29b..00000000
--- a/contrib/dlz/drivers/include/dlz/dlz_dlopen_driver.h
+++ /dev/null
diff --git a/contrib/dlz/drivers/include/dlz/dlz_drivers.h b/contrib/dlz/drivers/include/dlz/dlz_drivers.h
deleted file mode 100644
index dce7cd20..00000000
--- a/contrib/dlz/drivers/include/dlz/dlz_drivers.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2005 Internet Systems Consortium, Inc. ("ISC")
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/* $Id: dlz_drivers.h,v 1.2 2005/09/05 00:10:58 marka Exp $ */
-
-#ifndef DLZ_DRIVERS_H
-#define DLZ_DRIVERS_H 1
-
-/*! \file */
-
-isc_result_t
-dlz_drivers_init(void);
-
-void
-dlz_drivers_clear(void);
-
-#endif /* DLZ_DRIVERS_H */
diff --git a/contrib/dlz/drivers/include/dlz/dlz_filesystem_driver.h b/contrib/dlz/drivers/include/dlz/dlz_filesystem_driver.h
deleted file mode 100644
index 627427d9..00000000
--- a/contrib/dlz/drivers/include/dlz/dlz_filesystem_driver.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef DLZ_FILESYSTEM_DRIVER_H
-#define DLZ_FILESYSTEM_DRIVER_H
-
-isc_result_t
-dlz_fs_init(void);
-
-void
-dlz_fs_clear(void);
-
-#endif
diff --git a/contrib/dlz/drivers/include/dlz/dlz_ldap_driver.h b/contrib/dlz/drivers/include/dlz/dlz_ldap_driver.h
deleted file mode 100644
index 51efbf49..00000000
--- a/contrib/dlz/drivers/include/dlz/dlz_ldap_driver.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef DLZ_LDAP_DRIVER_H
-#define DLZ_LDAP_DRIVER_H
-
-isc_result_t
-dlz_ldap_init(void);
-
-void
-dlz_ldap_clear(void);
-
-#endif
diff --git a/contrib/dlz/drivers/include/dlz/dlz_mysql_driver.h b/contrib/dlz/drivers/include/dlz/dlz_mysql_driver.h
deleted file mode 100644
index b742838b..00000000
--- a/contrib/dlz/drivers/include/dlz/dlz_mysql_driver.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef DLZ_MYSQL_DRIVER_H
-#define DLZ_MYSQL_DRIVER_H
-
-isc_result_t
-dlz_mysql_init(void);
-
-void
-dlz_mysql_clear(void);
-
-#endif
diff --git a/contrib/dlz/drivers/include/dlz/dlz_odbc_driver.h b/contrib/dlz/drivers/include/dlz/dlz_odbc_driver.h
deleted file mode 100644
index 5a072d8c..00000000
--- a/contrib/dlz/drivers/include/dlz/dlz_odbc_driver.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef DLZ_ODBC_DRIVER_H
-#define DLZ_ODBC_DRIVER_H
-
-isc_result_t
-dlz_odbc_init(void);
-
-void
-dlz_odbc_clear(void);
-
-#endif
diff --git a/contrib/dlz/drivers/include/dlz/dlz_postgres_driver.h b/contrib/dlz/drivers/include/dlz/dlz_postgres_driver.h
deleted file mode 100644
index 3416dcea..00000000
--- a/contrib/dlz/drivers/include/dlz/dlz_postgres_driver.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef DLZ_POSTGRES_DRIVER_H
-#define DLZ_POSTGRES_DRIVER_H
-
-isc_result_t
-dlz_postgres_init(void);
-
-void
-dlz_postgres_clear(void);
-
-#endif
diff --git a/contrib/dlz/drivers/include/dlz/dlz_stub_driver.h b/contrib/dlz/drivers/include/dlz/dlz_stub_driver.h
deleted file mode 100644
index a517c69a..00000000
--- a/contrib/dlz/drivers/include/dlz/dlz_stub_driver.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef DLZ_STUB_DRIVER_H
-#define DLZ_STUB_DRIVER_H
-
-isc_result_t
-dlz_stub_init(void);
-
-void
-dlz_stub_clear(void);
-
-#endif
diff --git a/contrib/dlz/drivers/include/dlz/sdlz_helper.h b/contrib/dlz/drivers/include/dlz/sdlz_helper.h
deleted file mode 100644
index 764a05af..00000000
--- a/contrib/dlz/drivers/include/dlz/sdlz_helper.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef SDLZHELPER_H
-#define SDLZHELPER_H
-
-/*
- * Types
- */
-#define SDLZH_REQUIRE_CLIENT 0x01
-#define SDLZH_REQUIRE_QUERY 0x02
-#define SDLZH_REQUIRE_RECORD 0x04
-#define SDLZH_REQUIRE_ZONE 0x08
-
-typedef struct query_segment query_segment_t;
-typedef ISC_LIST(query_segment_t) query_list_t;
-typedef struct dbinstance dbinstance_t;
-typedef ISC_LIST(dbinstance_t) db_list_t;
-typedef struct driverinstance driverinstance_t;
-
-/*%
- * a query segment is all the text between our special tokens
- * special tokens are %zone%, %record%, %client%
- */
-struct query_segment {
- void *sql;
- unsigned int strlen;
- isc_boolean_t direct;
- ISC_LINK(query_segment_t) link;
-};
-
-/*%
- * a database instance contains everything we need for running
- * a query against the database. Using it each separate thread
- * can dynamically construct a query and execute it against the
- * database. The "instance_lock" and locking code in the driver's
- * make sure no two threads try to use the same DBI at a time.
- */
-struct dbinstance {
- void *dbconn;
- query_list_t *allnodes_q;
- query_list_t *allowxfr_q;
- query_list_t *authority_q;
- query_list_t *findzone_q;
- query_list_t *lookup_q;
- query_list_t *countzone_q;
- char *query_buf;
- char *zone;
- char *record;
- char *client;
- isc_mem_t *mctx;
- isc_mutex_t instance_lock;
- ISC_LINK(dbinstance_t) link;
-};
-
-/*
- * Method declarations
- */
-
-/* see the code in sdlz_helper.c for more information on these methods */
-
-char *
-sdlzh_build_querystring(isc_mem_t *mctx, query_list_t *querylist);
-
-isc_result_t
-sdlzh_build_sqldbinstance(isc_mem_t *mctx, const char *allnodes_str,
- const char *allowxfr_str, const char *authority_str,
- const char *findzone_str, const char *lookup_str,
- const char *countzone_str, dbinstance_t **dbi);
-
-void
-sdlzh_destroy_sqldbinstance(dbinstance_t *dbi);
-
-char *
-sdlzh_get_parameter_value(isc_mem_t *mctx, const char *input, const char* key);
-
-/* Compatability with existing DLZ drivers */
-
-#define build_querystring sdlzh_build_querystring
-#define build_sqldbinstance sdlzh_build_sqldbinstance
-#define destroy_sqldbinstance sdlzh_destroy_sqldbinstance
-
-#define getParameterValue(x,y) sdlzh_get_parameter_value(ns_g_mctx, (x), (y))
-
-#endif /* SDLZHELPER_H */
diff --git a/contrib/dlz/drivers/rules.in b/contrib/dlz/drivers/rules.in
deleted file mode 100644
index e3b64b3f..00000000
--- a/contrib/dlz/drivers/rules.in
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright (C) 2005 Internet Systems Consortium, Inc. ("ISC")
-#
-# Permission to use, copy, modify, and distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-# $Id: rules.in,v 1.3 2010/12/18 01:56:21 each Exp $
-
-dlz_drivers.@O@: ${DLZ_DRIVER_DIR}/dlz_drivers.c ${DLZ_DRIVER_DIR}/include/dlz/dlz_drivers.h
- ${LIBTOOL_MODE_COMPILE} ${CC} ${ALL_CFLAGS} -c ${DLZ_DRIVER_DIR}/dlz_drivers.c
-
-sdlz_helper.@O@: ${DLZ_DRIVER_DIR}/sdlz_helper.c ${DLZ_DRIVER_DIR}/include/dlz/sdlz_helper.h
- ${LIBTOOL_MODE_COMPILE} ${CC} ${ALL_CFLAGS} -c ${DLZ_DRIVER_DIR}/sdlz_helper.c
-
-
-dlz_bdb_driver.@O@: ${DLZ_DRIVER_DIR}/dlz_bdb_driver.c ${DLZ_DRIVER_DIR}/include/dlz/dlz_bdb_driver.h
- ${LIBTOOL_MODE_COMPILE} ${CC} ${ALL_CFLAGS} -c ${DLZ_DRIVER_DIR}/dlz_bdb_driver.c
-
-dlz_bdbhpt_driver.@O@: ${DLZ_DRIVER_DIR}/dlz_bdbhpt_driver.c ${DLZ_DRIVER_DIR}/include/dlz/dlz_bdbhpt_driver.h
- ${LIBTOOL_MODE_COMPILE} ${CC} ${ALL_CFLAGS} -c ${DLZ_DRIVER_DIR}/dlz_bdbhpt_driver.c
-
-dlz_filesystem_driver.@O@: ${DLZ_DRIVER_DIR}/dlz_filesystem_driver.c ${DLZ_DRIVER_DIR}/include/dlz/dlz_filesystem_driver.h
- ${LIBTOOL_MODE_COMPILE} ${CC} ${ALL_CFLAGS} -c ${DLZ_DRIVER_DIR}/dlz_filesystem_driver.c
-
-dlz_ldap_driver.@O@: ${DLZ_DRIVER_DIR}/dlz_ldap_driver.c ${DLZ_DRIVER_DIR}/include/dlz/dlz_ldap_driver.h
- ${LIBTOOL_MODE_COMPILE} ${CC} ${ALL_CFLAGS} -c ${DLZ_DRIVER_DIR}/dlz_ldap_driver.c
-
-dlz_mysql_driver.@O@: ${DLZ_DRIVER_DIR}/dlz_mysql_driver.c ${DLZ_DRIVER_DIR}/include/dlz/dlz_mysql_driver.h
- ${LIBTOOL_MODE_COMPILE} ${CC} ${ALL_CFLAGS} -c ${DLZ_DRIVER_DIR}/dlz_mysql_driver.c
-
-dlz_odbc_driver.@O@: ${DLZ_DRIVER_DIR}/dlz_odbc_driver.c ${DLZ_DRIVER_DIR}/include/dlz/dlz_odbc_driver.h
- ${LIBTOOL_MODE_COMPILE} ${CC} ${ALL_CFLAGS} -c ${DLZ_DRIVER_DIR}/dlz_odbc_driver.c
-
-dlz_postgres_driver.@O@: ${DLZ_DRIVER_DIR}/dlz_postgres_driver.c ${DLZ_DRIVER_DIR}/include/dlz/dlz_postgres_driver.h
- ${LIBTOOL_MODE_COMPILE} ${CC} ${ALL_CFLAGS} -c ${DLZ_DRIVER_DIR}/dlz_postgres_driver.c
-
-dlz_dlopen_driver.@O@: ${DLZ_DRIVER_DIR}/dlz_dlopen_driver.c ${DLZ_DRIVER_DIR}/include/dlz/dlz_dlopen_driver.h
- ${LIBTOOL_MODE_COMPILE} ${CC} ${ALL_CFLAGS} -c ${DLZ_DRIVER_DIR}/dlz_dlopen_driver.c
-
-dlz_stub_driver.@O@: ${DLZ_DRIVER_DIR}/dlz_stub_driver.c ${DLZ_DRIVER_DIR}/include/dlz/dlz_stub_driver.h
- ${LIBTOOL_MODE_COMPILE} ${CC} ${ALL_CFLAGS} -c ${DLZ_DRIVER_DIR}/dlz_stub_driver.c
-
diff --git a/contrib/dlz/drivers/sdlz_helper.c b/contrib/dlz/drivers/sdlz_helper.c
deleted file mode 100644
index 67f364e9..00000000
--- a/contrib/dlz/drivers/sdlz_helper.c
+++ /dev/null
@@ -1,514 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 1999-2001, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include <config.h>
-
-#include <dns/log.h>
-#include <dns/result.h>
-
-#include <isc/mem.h>
-#include <isc/result.h>
-#include <isc/string.h>
-#include <isc/util.h>
-
-#include <dlz/sdlz_helper.h>
-
-/*
- * sdlz helper methods
- */
-
-/*%
- * properly destroys a querylist by de-allocating the
- * memory for each query segment, and then the list itself
- */
-
-static void
-destroy_querylist(isc_mem_t *mctx, query_list_t **querylist)
-{
- query_segment_t *tseg = NULL;
- query_segment_t *nseg = NULL;
-
- REQUIRE(mctx != NULL);
-
- /* if query list is null, nothing to do */
- if (*querylist == NULL)
- return;
-
- /* start at the top of the list */
- nseg = ISC_LIST_HEAD(**querylist);
- while (nseg != NULL) { /* loop, until end of list */
- tseg = nseg;
- /*
- * free the query segment's text string but only if it
- * was really a query segment, and not a pointer to
- * %zone%, or %record%, or %client%
- */
- if (tseg->sql != NULL && tseg->direct == isc_boolean_true)
- isc_mem_free(mctx, tseg->sql);
- /* get the next query segment, before we destroy this one. */
- nseg = ISC_LIST_NEXT(nseg, link);
- /* deallocate this query segment. */
- isc_mem_put(mctx, tseg, sizeof(query_segment_t));
- }
- /* deallocate the query segment list */
- isc_mem_put(mctx, *querylist, sizeof(query_list_t));
-}
-
-/*% constructs a query list by parsing a string into query segments */
-static isc_result_t
-build_querylist(isc_mem_t *mctx, const char *query_str, char **zone,
- char **record, char **client, query_list_t **querylist,
- unsigned int flags)
-{
- isc_result_t result;
- isc_boolean_t foundzone = isc_boolean_false;
- isc_boolean_t foundrecord = isc_boolean_false;
- isc_boolean_t foundclient = isc_boolean_false;
- char *temp_str = NULL;
- char *right_str = NULL;
- query_list_t *tql;
- query_segment_t *tseg = NULL;
-
- REQUIRE(querylist != NULL && *querylist == NULL);
- REQUIRE(mctx != NULL);
-
- /* if query string is null, or zero length */
- if (query_str == NULL || strlen(query_str) < 1) {
- if ((flags & SDLZH_REQUIRE_QUERY) == 0)
- /* we don't need it were ok. */
- return (ISC_R_SUCCESS);
- else
- /* we did need it, PROBLEM!!! */
- return (ISC_R_FAILURE);
- }
-
- /* allocate memory for query list */
- tql = isc_mem_get(mctx, sizeof(query_list_t));
- /* couldn't allocate memory. Problem!! */
- if (tql == NULL)
- return (ISC_R_NOMEMORY);
-
- /* initialize the query segment list */
- ISC_LIST_INIT(*tql);
-
- /* make a copy of query_str so we can chop it up */
- temp_str = right_str = isc_mem_strdup(mctx, query_str);
- /* couldn't make a copy, problem!! */
- if (right_str == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
-
- /* loop through the string and chop it up */
- while (right_str != NULL) {
- /* allocate memory for tseg */
- tseg = isc_mem_get(mctx, sizeof(query_segment_t));
- if (tseg == NULL) { /* no memory, clean everything up. */
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- tseg->sql = NULL;
- tseg->direct = isc_boolean_false;
- /* initialize the query segment link */
- ISC_LINK_INIT(tseg, link);
- /* append the query segment to the list */
- ISC_LIST_APPEND(*tql, tseg, link);
-
- /*
- * split string at the first "$". set query segment to
- * left portion
- */
- tseg->sql = isc_mem_strdup(mctx,
- isc_string_separate(&right_str,
- "$"));
- if (tseg->sql == NULL) {
- /* no memory, clean everything up. */
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- /* tseg->sql points directly to a string. */
- tseg->direct = isc_boolean_true;
- tseg->strlen = strlen(tseg->sql);
-
- /* check if we encountered "$zone$" token */
- if (strcasecmp(tseg->sql, "zone") == 0) {
- /*
- * we don't really need, or want the "zone"
- * text, so get rid of it.
- */
- isc_mem_free(mctx, tseg->sql);
- /* set tseg->sql to in-direct zone string */
- tseg->sql = (char**) zone;
- tseg->strlen = 0;
- /* tseg->sql points in-directly to a string */
- tseg->direct = isc_boolean_false;
- foundzone = isc_boolean_true;
- /* check if we encountered "$record$" token */
- } else if (strcasecmp(tseg->sql, "record") == 0) {
- /*
- * we don't really need, or want the "record"
- * text, so get rid of it.
- */
- isc_mem_free(mctx, tseg->sql);
- /* set tseg->sql to in-direct record string */
- tseg->sql = (char**) record;
- tseg->strlen = 0;
- /* tseg->sql points in-directly poinsts to a string */
- tseg->direct = isc_boolean_false;
- foundrecord = isc_boolean_true;
- /* check if we encountered "$client$" token */
- } else if (strcasecmp(tseg->sql, "client") == 0) {
- /*
- * we don't really need, or want the "client"
- * text, so get rid of it.
- */
- isc_mem_free(mctx, tseg->sql);
- /* set tseg->sql to in-direct record string */
- tseg->sql = (char**) client;
- tseg->strlen = 0;
- /* tseg->sql points in-directly poinsts to a string */
- tseg->direct = isc_boolean_false;
- foundclient = isc_boolean_true;
- }
- }
-
- /* we don't need temp_str any more */
- isc_mem_free(mctx, temp_str);
- /*
- * add checks later to verify zone and record are found if
- * necessary.
- */
-
- /* if this query requires %client%, make sure we found it */
- if (((flags & SDLZH_REQUIRE_CLIENT) != 0) && (!foundclient) ) {
- /* Write error message to log */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Required token $client$ not found.");
- result = ISC_R_FAILURE;
- goto flag_fail;
- }
-
- /* if this query requires %record%, make sure we found it */
- if (((flags & SDLZH_REQUIRE_RECORD) != 0) && (!foundrecord) ) {
- /* Write error message to log */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Required token $record$ not found.");
- result = ISC_R_FAILURE;
- goto flag_fail;
- }
-
- /* if this query requires %zone%, make sure we found it */
- if (((flags & SDLZH_REQUIRE_ZONE) != 0) && (!foundzone) ) {
- /* Write error message to log */
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Required token $zone$ not found.");
- result = ISC_R_FAILURE;
- goto flag_fail;
- }
-
- /* pass back the query list */
- *querylist = (query_list_t *) tql;
-
- /* return success */
- return (ISC_R_SUCCESS);
-
- cleanup:
- /* get rid of temp_str */
- if (temp_str != NULL)
- isc_mem_free(mctx, temp_str);
-
- flag_fail:
- /* get rid of what was build of the query list */
- if (tql != NULL)
- destroy_querylist(mctx, &tql);
- return result;
-}
-
-/*%
- * build a query string from query segments, and dynamic segments
- * dynamic segments replace where the tokens %zone%, %record%, %client%
- * used to be in our queries from named.conf
- */
-char *
-sdlzh_build_querystring(isc_mem_t *mctx, query_list_t *querylist)
-{
- query_segment_t *tseg = NULL;
- unsigned int length = 0;
- char *qs = NULL;
-
- REQUIRE(mctx != NULL);
- REQUIRE(querylist != NULL);
-
- /* start at the top of the list */
- tseg = ISC_LIST_HEAD(*querylist);
- while (tseg != NULL) {
- /*
- * if this is a query segment, use the
- * precalculated string length
- */
- if (tseg->direct == isc_boolean_true)
- length += tseg->strlen;
- else /* calculate string length for dynamic segments. */
- length += strlen(* (char**) tseg->sql);
- /* get the next segment */
- tseg = ISC_LIST_NEXT(tseg, link);
- }
-
- /* allocate memory for the string */
- qs = isc_mem_allocate(mctx, length + 1);
- /* couldn't allocate memory, We need more ram! */
- if (qs == NULL)
- return NULL;
-
- *qs = 0;
- /* start at the top of the list again */
- tseg = ISC_LIST_HEAD(*querylist);
- while (tseg != NULL) {
- if (tseg->direct == isc_boolean_true)
- /* query segments */
- strcat(qs, tseg->sql);
- else
- /* dynamic segments */
- strcat(qs, * (char**) tseg->sql);
- /* get the next segment */
- tseg = ISC_LIST_NEXT(tseg, link);
- }
-
- return qs;
-}
-
-/*% constructs a sql dbinstance (DBI) */
-isc_result_t
-sdlzh_build_sqldbinstance(isc_mem_t *mctx, const char *allnodes_str,
- const char *allowxfr_str, const char *authority_str,
- const char *findzone_str, const char *lookup_str,
- const char *countzone_str, dbinstance_t **dbi)
-{
-
- isc_result_t result;
- dbinstance_t *db = NULL;
-
- REQUIRE(dbi != NULL && *dbi == NULL);
- REQUIRE(mctx != NULL);
-
- /* allocate and zero memory for driver structure */
- db = isc_mem_get(mctx, sizeof(dbinstance_t));
- if (db == NULL) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Could not allocate memory for "
- "database instance object.");
- return (ISC_R_NOMEMORY);
- }
- memset(db, 0, sizeof(dbinstance_t));
- db->dbconn = NULL;
- db->client = NULL;
- db->record = NULL;
- db->zone = NULL;
- db->mctx = NULL;
- db->query_buf = NULL;
- db->allnodes_q = NULL;
- db->allowxfr_q = NULL;
- db->authority_q = NULL;
- db->findzone_q = NULL;
- db->countzone_q = NULL;
- db->lookup_q = NULL;
-
- /* attach to the memory context */
- isc_mem_attach(mctx, &db->mctx);
-
- /* initialize the reference count mutex */
- result = isc_mutex_init(&db->instance_lock);
- if (result != ISC_R_SUCCESS) {
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "isc_mutex_init() failed: %s",
- isc_result_totext(result));
- goto cleanup;
- }
-
- /* build the all nodes query list */
- result = build_querylist(mctx, allnodes_str, &db->zone,
- &db->record, &db->client,
- &db->allnodes_q, SDLZH_REQUIRE_ZONE);
- /* if unsuccessful, log err msg and cleanup */
- if (result != ISC_R_SUCCESS) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Could not build all nodes query list");
- goto cleanup;
- }
-
- /* build the allow zone transfer query list */
- result = build_querylist(mctx, allowxfr_str, &db->zone,
- &db->record, &db->client,
- &db->allowxfr_q,
- SDLZH_REQUIRE_ZONE | SDLZH_REQUIRE_CLIENT);
- /* if unsuccessful, log err msg and cleanup */
- if (result != ISC_R_SUCCESS) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Could not build allow xfr query list");
- goto cleanup;
- }
-
- /* build the authority query, query list */
- result = build_querylist(mctx, authority_str, &db->zone,
- &db->record, &db->client,
- &db->authority_q, SDLZH_REQUIRE_ZONE);
- /* if unsuccessful, log err msg and cleanup */
- if (result != ISC_R_SUCCESS) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Could not build authority query list");
- goto cleanup;
- }
-
- /* build findzone query, query list */
- result = build_querylist(mctx, findzone_str, &db->zone,
- &db->record, &db->client,
- &db->findzone_q, SDLZH_REQUIRE_ZONE);
- /* if unsuccessful, log err msg and cleanup */
- if (result != ISC_R_SUCCESS) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Could not build find zone query list");
- goto cleanup;
- }
-
- /* build countzone query, query list */
- result = build_querylist(mctx, countzone_str, &db->zone,
- &db->record, &db->client,
- &db->countzone_q, SDLZH_REQUIRE_ZONE);
- /* if unsuccessful, log err msg and cleanup */
- if (result != ISC_R_SUCCESS) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Could not build count zone query list");
- goto cleanup;
- }
-
- /* build lookup query, query list */
- result = build_querylist(mctx, lookup_str, &db->zone,
- &db->record, &db->client,
- &db->lookup_q, SDLZH_REQUIRE_RECORD);
- /* if unsuccessful, log err msg and cleanup */
- if (result != ISC_R_SUCCESS) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_DLZ, ISC_LOG_ERROR,
- "Could not build lookup query list");
- goto cleanup;
- }
-
- /* pass back the db instance */
- *dbi = (dbinstance_t *) db;
-
- /* return success */
- return (ISC_R_SUCCESS);
-
- cleanup:
- /* destroy whatever was build of the db instance */
- destroy_sqldbinstance(db);
- /* return failure */
- return (ISC_R_FAILURE);
-}
-
-void
-sdlzh_destroy_sqldbinstance(dbinstance_t *dbi)
-{
- isc_mem_t *mctx;
-
- /* save mctx for later */
- mctx = dbi->mctx;
-
- /* destroy any query lists we created */
- destroy_querylist(mctx, &dbi->allnodes_q);
- destroy_querylist(mctx, &dbi->allowxfr_q);
- destroy_querylist(mctx, &dbi->authority_q);
- destroy_querylist(mctx, &dbi->findzone_q);
- destroy_querylist(mctx, &dbi->countzone_q);
- destroy_querylist(mctx, &dbi->lookup_q);
-
- /* get rid of the mutex */
- (void) isc_mutex_destroy(&dbi->instance_lock);
-
- /* return, and detach the memory */
- isc_mem_put(mctx, dbi, sizeof(dbinstance_t));
- isc_mem_detach(&mctx);
-}
-
-char *
-sdlzh_get_parameter_value(isc_mem_t *mctx, const char *input, const char* key)
-{
- int keylen;
- char *keystart;
- char value[255];
- int i;
-
- if (key == NULL || input == NULL || strlen(input) < 1)
- return NULL;
-
- keylen = strlen(key);
-
- if (keylen < 1)
- return NULL;
-
- keystart = strstr(input, key);
-
- if (keystart == NULL)
- return NULL;
-
- REQUIRE(mctx != NULL);
-
- for (i = 0; i < 255; i++) {
- value[i] = keystart[keylen + i];
- if (value[i] == ' ' || value[i] == '\0') {
- value[i] = '\0';
- break;
- }
- }
-
- return isc_mem_strdup(mctx, value);
-}
diff --git a/contrib/dlz/example/Makefile b/contrib/dlz/example/Makefile
deleted file mode 100644
index 5e84043f..00000000
--- a/contrib/dlz/example/Makefile
+++ /dev/null
@@ -1,16 +0,0 @@
-# for building the dlz_example driver we don't use
-# the bind9 build structure as the aim is to provide an
-# example that is separable from the bind9 source tree
-
-# this means this Makefile is not portable, so the testsuite
-# skips this test on platforms where it doesn't build
-
-CFLAGS=-Wall -fPIC -g
-
-all: dlz_example.so
-
-dlz_example.so: dlz_example.o
- $(CC) $(CFLAGS) -shared -o dlz_example.so dlz_example.o
-
-clean:
- rm -f dlz_example.o dlz_example.so
diff --git a/contrib/dlz/example/README b/contrib/dlz/example/README
deleted file mode 100644
index d5d96a3e..00000000
--- a/contrib/dlz/example/README
+++ /dev/null
@@ -1,243 +0,0 @@
-OVERVIEW:
-
-DLZ (Dynamically Loadable Zones) is an extention to BIND 9 that
-allows zone data to be retrieved directly from an external database.
-There is no required format or schema. DLZ drivers exist for several
-different database backends including PostgreSQL, MySQL, and LDAP and
-can be written for any other.
-
-Historically, DLZ drivers had to be statically linked with the named
-binary and were turned on via a configure option at compile time (for
-example, "configure --with-dlz-ldap"). Currently, the drivers provided
-in the BIND 9 tarball in contrib/dlz/drivers are still linked this way.
-
-However, as of BIND 9.8, it is also possible to link some DLZ modules
-dynamically at runtime, via the DLZ "dlopen" driver, which acts as a
-generic wrapper around a shared object that implements the DLZ API. The
-"dlopen" driver is linked into named by default, so configure options are
-no longer necessary unless using older DLZ drivers.
-
-When the DLZ module provides data to named, it does so in text format.
-The response is converted to DNS wire format by named. This conversion,
-and the lack of any internal caching, places significant limits on the
-query performance of DLZ modules. Consequently, DLZ is not recommended
-for use on high-volume servers. However, it can be used in a hidden
-master configuration, with slaves retrieving zone updates via AXFR.
-(Note, however, that DLZ has no built-in support for DNS notify; slaves
-are not automatically informed of changes to the zones in the database.)
-
-CONFIGURING DLZ:
-
-A DLZ database is configured with a "dlz" statement in named.conf.
-
- dlz example {
- database "dlopen driver.so <args>";
- search yes;
- };
-
-This specifies a DLZ module to search when answering queries; the module
-is implemented in "driver.so" and is loaded at runtime by the dlopen DLZ
-driver. Multiple "dlz" statements can be specified; when answering a
-query, all DLZ modules with the "search" option set to "yes" will be
-checked for an answer, and the best available answer will be returned
-to the client.
-
-The "search" option in this example can be omitted, as "yes" is the
-default value. If it is set to "no", then this DLZ module is *not*
-searched for best-match when a query is received. Instead, zones in
-this DLZ must be separately specified in a zone statement. This can
-be useful when conventional zone semantics are desired but you wish
-to use a different back-end storage mechanism than the standard zone
-database. For example, to use a DLZ module for an NXDOMAIN redirection
-zone:
-
- dlz other {
- database "dlopen driver.so <args>";
- search no;
- };
-
- zone "." {
- type redirect;
- dlz other;
- };
-
-EXAMPLE DRIVER:
-
-This directory contains an example of an externally-lodable DLZ module,
-dlz_example.c, which demonstrates the features of the DLZ API. It sets up
-a single zone, whose name is configured in named.conf. The zone can answer
-queries and AXFR requests, and accept DDNS updates.
-
-By default, at runtime, the zone implemented by this driver will contain
-an SOA, NS, and a single A record at the apex. If configured in named.conf
-to use the name "example.nil", then, the zone will look like this:
-
- example.nil. 3600 IN SOA example.nil. hostmaster.example.nil. (
- 123 900 600 86400 3600
- )
- example.nil. 3600 IN NS example.nil.
- example.nil. 1800 IN A 10.53.0.1
-
-The driver is also capable of retrieving information about the querying
-client, and altering its response on the basis of this information. To
-demonstrate this feature, the example driver responds to queries for
-"source-addr.<zonename>/TXT" with the source address of the query.
-Note, however, that this record will *not* be included in AXFR or ANY
-responses. (Normally, this feature would be used to alter responses in
-some other fashion, e.g., by providing different address records for
-a particular name depending on the network from which the query arrived.)
-
-DYNAMIC UPDATES AND TRANSACTIONS:
-
-If a DLZ module wants to implement dynamic DNS updates (DDNS), the
-normal calling sequence is
- - dlz_newversion (start a 'transaction')
- - dlz_addrdataset (add records)
- - dlz_subrdataset (remove records)
- - dlz_closeversion (end a 'transaction')
-
-However, BIND may also query the database during the transaction
-(e.g., to check prerequisites), and your DLZ might need to know whether
-the lookup is against the pre-existing data, or the new data.
-dlz_lookup() doesn't give you access to the 'versionp' pointer
-directly, so it must be passed via 'clientinfo' structure if
-it is needed.
-
-The dlz_example.c code has sample code to show how to get the 'versionp'
-pointer from within dlz_lookup(). If it's set to NULL, we query
-the standard database; if non-NULL, we query against the in-flight
-data within the appropriate uncommitted transaction.
-
-IMPLEMENTATION NOTES:
-
-The minimal set of type definitions, prototypes, and macros needed
-for implementing a DLZ driver is in ../modules/dlz_minimal.h. Copy this
-header file into your source tree when creating an external DLZ module.
-
-The DLZ dlopen driver provides a set of callback functions:
-
- - void log(int level, const char *fmt, ...);
-
- Writes the specified string to the named log, at the specified
- log level. Uses printf() format semantics.
-
- - isc_result_t putrr(dns_sdlzlookup_t *lookup, const char *type,
- dns_ttl_t ttl, const char *data);
-
- Puts a DNS resource record into the query response, which
- referenced by the opaque structure 'lookup' provided by named.
-
- - isc_result_t putnamedrr(dns_sdlzallnotes_t *allnodes,
- const char *name, const char *type,
- dns_ttl_t ttl, const char *data);
-
- Puts a DNS resource record into an AXFR response, which is
- referenced by the opaque structure 'allnodes' provided by named.
-
- - isc_result_t writeable_zone(dns_view_t *view, const char *zone_name);
-
- Allows the DLZ module to inform named that a given zone can recieve
- DDNS updates. (Note: This is not currently supported for DLZ
- databases that are configured as 'search no;')
-
-The external DLZ module can define the following functions (some of these
-are mandatory, others optional).
-
- - int dlz_version(unsigned int *flags);
-
- Required for alL external DLZ modules, to indicate the version number
- of the DLZ dlopen driver that this module supports. It should return
- the value DLZ_DLOPEN_VERSION, which is defined in the file
- contrib/dlz/modules/dlz_minimal.h and is currently 3. 'flags' is
- updated to indicate capabilities of the module. In particular, if
- the module is thread-safe then it sets 'flags' to include
- DNS_SDLZFLAG_THREADSAFE. (Other capability flags may be added in
- the future.)
-
- - isc_result_t dlz_create(const char *dlzname,
- unsigned int argc, char *argv[],
- void **dbdata, ...);
-
- Required for all external DLZ modules; this call initializes the
- module.
-
- - void dlz_destroy(void *dbdata);
-
- Optional. If supplied, this will be called when the driver is
- unloaded.
-
- - isc_result_t dlz_findzonedb(void *dbdata, const char *name,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo);
-
- Required for all external DLZ modules. This indicates whether
- the DLZ module can answer for the given name. Returns ISC_R_SUCCESS
- if so, and ISC_R_NOTFOUND if not. As an optimization, it can
- also return ISC_R_NOMORE: this indicates that the DLZ module has
- no data for the given name or for any name above it in the DNS.
- This prevents named from searching for a zone cut.
-
- - isc_result_t dlz_lookup(const char *zone, const char *name, void *dbdata,
- dns_sdlzlookup_t *lookup,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo);
-
- Required for all external DLZ modules. This carries out the database
- lookup for a query.
-
- - isc_result_t dlz_allowzonexfr(void *dbdata, const char *name,
- const char *client);
-
- Optional. Supply this if you want the module to support AXFR
- for the specified zone and client. A return value of ISC_R_SUCCESS
- means AXFR is allowed, any other value means it isn't.
-
- - isc_result_t dlz_allnodes(const char *zone, void *dbdata,
- dns_sdlzallnodes_t *allnodes);
-
- Optional, but must be supplied dlz_allowzonexfr() is. This function
- returns all nodes in the zone in order to perform a zone transfer.
-
- - isc_result_t dlz_newversion(const char *zone, void *dbdata,
- void **versionp);
-
- Optional. Supply this if you want the module to support DDNS
- updates. This function starts a transaction in the database.
-
-
- - void dlz_closeversion(const char *zone, isc_boolean_t commit,
- void *dbdata, void **versionp);
-
- Optional, but must be supplied if dlz_newversion() is. This function
- closes a transaction. 'commit' indicates whether to commit the changes
- to the database, or ignore them.
-
- - isc_result_t dlz_configure(dns_view_t *view, void *dbdata);
-
- Optional, but must be supplied in order to support DDNS updates.
-
- - isc_boolean_t dlz_ssumatch(const char *signer, const char *name,
- const char *tcpaddr, const char *type,
- const char *key, uint32_t keydatalen,
- uint8_t *keydata, void *dbdata);
-
- Optional, but must be supplied in order to support DDNS updates.
-
- - isc_result_t dlz_addrdataset(const char *name, const char *rdatastr,
- void *dbdata, void *version);
-
- Optional, but must be supplied in order to support DDNS updates.
- Adds the data in 'rdatastr' to a database node.
-
- - isc_result_t dlz_subrdataset(const char *name, const char *rdatastr,
- void *dbdata, void *version);
-
- Optional, but must be supplied in order to support DDNS updates.
- Removes the data in 'rdatastr' from a database node.
-
- - isc_result_t dlz_delrdataset(const char *name, const char *rdatastr,
- void *dbdata, void *version);
-
- Optional, but must be supplied in order to support DDNS updates.
- Deletes all data matching the type specified in 'rdatastr' from
- the database.
diff --git a/contrib/dlz/example/dlz_example.c b/contrib/dlz/example/dlz_example.c
deleted file mode 100644
index 3a63dc4b..00000000
--- a/contrib/dlz/example/dlz_example.c
+++ /dev/null
@@ -1,760 +0,0 @@
-/*
- * Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This provides a very simple example of an external loadable DLZ
- * driver, with update support.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <stdint.h>
-
-#include "../modules/include/dlz_minimal.h"
-
-#ifdef WIN32
-#define STRTOK_R(a, b, c) strtok_s(a, b, c)
-#elif defined(_REENTRANT)
-#define STRTOK_R(a, b, c) strtok_r(a, b, c)
-#else
-#define STRTOK_R(a, b, c) strtok(a, b)
-#endif
-
-#define CHECK(x) \
- do { \
- result = (x); \
- if (result != ISC_R_SUCCESS) \
- goto failure; \
- } while (0)
-
-/* For this simple example, use fixed sized strings */
-struct record {
- char name[100];
- char type[10];
- char data[200];
- dns_ttl_t ttl;
-};
-
-#define MAX_RECORDS 100
-
-struct dlz_example_data {
- char *zone_name;
-
- /* An example driver doesn't need good memory management :-) */
- struct record current[MAX_RECORDS];
- struct record adds[MAX_RECORDS];
- struct record deletes[MAX_RECORDS];
-
- isc_boolean_t transaction_started;
-
- /* Helper functions from the dlz_dlopen driver */
- log_t *log;
- dns_sdlz_putrr_t *putrr;
- dns_sdlz_putnamedrr_t *putnamedrr;
- dns_dlz_writeablezone_t *writeable_zone;
-};
-
-static isc_boolean_t
-single_valued(const char *type) {
- const char *single[] = { "soa", "cname", NULL };
- int i;
-
- for (i = 0; single[i]; i++) {
- if (strcasecmp(single[i], type) == 0) {
- return (ISC_TRUE);
- }
- }
- return (ISC_FALSE);
-}
-
-/*
- * Add a record to a list
- */
-static isc_result_t
-add_name(struct dlz_example_data *state, struct record *list,
- const char *name, const char *type, dns_ttl_t ttl, const char *data)
-{
- int i;
- isc_boolean_t single = single_valued(type);
- int first_empty = -1;
-
- for (i = 0; i < MAX_RECORDS; i++) {
- if (first_empty == -1 && strlen(list[i].name) == 0U) {
- first_empty = i;
- }
- if (strcasecmp(list[i].name, name) != 0)
- continue;
- if (strcasecmp(list[i].type, type) != 0)
- continue;
- if (!single && strcasecmp(list[i].data, data) != 0)
- continue;
- break;
- }
- if (i == MAX_RECORDS && first_empty != -1) {
- i = first_empty;
- }
- if (i == MAX_RECORDS) {
- if (state->log != NULL)
- state->log(ISC_LOG_ERROR,
- "dlz_example: out of record space");
- return (ISC_R_FAILURE);
- }
-
- if (strlen(name) >= sizeof(list[i].name) ||
- strlen(type) >= sizeof(list[i].type) ||
- strlen(data) >= sizeof(list[i].data))
- return (ISC_R_NOSPACE);
-
- strncpy(list[i].name, name, sizeof(list[i].name));
- list[i].name[sizeof(list[i].name) - 1] = '\0';
-
- strncpy(list[i].type, type, sizeof(list[i].type));
- list[i].type[sizeof(list[i].type) - 1] = '\0';
-
- strncpy(list[i].data, data, sizeof(list[i].data));
- list[i].data[sizeof(list[i].data) - 1] = '\0';
-
- list[i].ttl = ttl;
-
- return (ISC_R_SUCCESS);
-}
-
-/*
- * Delete a record from a list
- */
-static isc_result_t
-del_name(struct dlz_example_data *state, struct record *list,
- const char *name, const char *type, dns_ttl_t ttl,
- const char *data)
-{
- int i;
-
- UNUSED(state);
-
- for (i = 0; i < MAX_RECORDS; i++) {
- if (strcasecmp(name, list[i].name) == 0 &&
- strcasecmp(type, list[i].type) == 0 &&
- strcasecmp(data, list[i].data) == 0 &&
- ttl == list[i].ttl) {
- break;
- }
- }
- if (i == MAX_RECORDS) {
- return (ISC_R_NOTFOUND);
- }
- memset(&list[i], 0, sizeof(struct record));
- return (ISC_R_SUCCESS);
-}
-
-static isc_result_t
-fmt_address(isc_sockaddr_t *addr, char *buffer, size_t size) {
- char addr_buf[100];
- const char *ret;
- uint16_t port = 0;
-
- switch (addr->type.sa.sa_family) {
- case AF_INET:
- port = ntohs(addr->type.sin.sin_port);
- ret = inet_ntop(AF_INET, &addr->type.sin.sin_addr, addr_buf,
- sizeof(addr_buf));
- break;
- case AF_INET6:
- port = ntohs(addr->type.sin6.sin6_port);
- ret = inet_ntop(AF_INET6, &addr->type.sin6.sin6_addr, addr_buf,
- sizeof(addr_buf));
- break;
- default:
- return (ISC_R_FAILURE);
- }
-
- if (ret == NULL)
- return (ISC_R_FAILURE);
-
- snprintf(buffer, size, "%s#%u", addr_buf, port);
- return (ISC_R_SUCCESS);
-}
-
-/*
- * Return the version of the API
- */
-int
-dlz_version(unsigned int *flags) {
- UNUSED(flags);
- return (DLZ_DLOPEN_VERSION);
-}
-
-/*
- * Remember a helper function from the bind9 dlz_dlopen driver
- */
-static void
-b9_add_helper(struct dlz_example_data *state,
- const char *helper_name, void *ptr)
-{
- if (strcmp(helper_name, "log") == 0)
- state->log = (log_t *)ptr;
- if (strcmp(helper_name, "putrr") == 0)
- state->putrr = (dns_sdlz_putrr_t *)ptr;
- if (strcmp(helper_name, "putnamedrr") == 0)
- state->putnamedrr = (dns_sdlz_putnamedrr_t *)ptr;
- if (strcmp(helper_name, "writeable_zone") == 0)
- state->writeable_zone = (dns_dlz_writeablezone_t *)ptr;
-}
-
-/*
- * Called to initialize the driver
- */
-isc_result_t
-dlz_create(const char *dlzname, unsigned int argc, char *argv[],
- void **dbdata, ...)
-{
- struct dlz_example_data *state;
- const char *helper_name;
- va_list ap;
- char soa_data[200];
- const char *extra;
- isc_result_t result;
- int n;
-
- UNUSED(dlzname);
-
- state = calloc(1, sizeof(struct dlz_example_data));
- if (state == NULL)
- return (ISC_R_NOMEMORY);
-
- /* Fill in the helper functions */
- va_start(ap, dbdata);
- while ((helper_name = va_arg(ap, const char *)) != NULL) {
- b9_add_helper(state, helper_name, va_arg(ap, void *));
- }
- va_end(ap);
-
- if (argc < 2 || argv[1][0] == '\0') {
- if (state->log != NULL)
- state->log(ISC_LOG_ERROR,
- "dlz_example: please specify a zone name");
- dlz_destroy(state);
- return (ISC_R_FAILURE);
- }
-
- /* Ensure zone name is absolute */
- state->zone_name = malloc(strlen(argv[1]) + 2);
- if (state->zone_name == NULL) {
- free(state);
- return (ISC_R_NOMEMORY);
- }
- if (argv[1][strlen(argv[1]) - 1] == '.')
- strcpy(state->zone_name, argv[1]);
- else
- sprintf(state->zone_name, "%s.", argv[1]);
-
- if (strcmp(state->zone_name, ".") == 0)
- extra = ".root";
- else
- extra = ".";
-
- n = sprintf(soa_data, "%s hostmaster%s%s 123 900 600 86400 3600",
- state->zone_name, extra, state->zone_name);
-
- if (n < 0)
- CHECK(ISC_R_FAILURE);
- if ((unsigned)n >= sizeof(soa_data))
- CHECK(ISC_R_NOSPACE);
-
- add_name(state, &state->current[0], state->zone_name,
- "soa", 3600, soa_data);
- add_name(state, &state->current[0], state->zone_name,
- "ns", 3600, state->zone_name);
- add_name(state, &state->current[0], state->zone_name,
- "a", 1800, "10.53.0.1");
-
- if (state->log != NULL)
- state->log(ISC_LOG_INFO, "dlz_example: started for zone %s",
- state->zone_name);
-
- *dbdata = state;
- return (ISC_R_SUCCESS);
-
- failure:
- free(state);
- return (result);
-
-}
-
-/*
- * Shut down the backend
- */
-void
-dlz_destroy(void *dbdata) {
- struct dlz_example_data *state = (struct dlz_example_data *)dbdata;
-
- if (state->log != NULL)
- state->log(ISC_LOG_INFO,
- "dlz_example: shutting down zone %s",
- state->zone_name);
- free(state->zone_name);
- free(state);
-}
-
-/*
- * See if we handle a given zone
- */
-isc_result_t
-dlz_findzonedb(void *dbdata, const char *name,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-{
- struct dlz_example_data *state = (struct dlz_example_data *)dbdata;
- isc_sockaddr_t *src;
- char addrbuf[100];
- char absolute[1024];
-
- strcpy(addrbuf, "unknown");
- if (methods != NULL &&
- methods->sourceip != NULL &&
- methods->version - methods->age <= DNS_CLIENTINFOMETHODS_VERSION &&
- DNS_CLIENTINFOMETHODS_VERSION <= methods->version)
- {
- methods->sourceip(clientinfo, &src);
- fmt_address(src, addrbuf, sizeof(addrbuf));
- }
- state->log(ISC_LOG_INFO,
- "dlz_example: findzonedb connection from: %s", addrbuf);
-
- state->log(ISC_LOG_INFO,
- "dlz_example: dlz_findzonedb called with name '%s' "
- "in zone DB '%s'", name, state->zone_name);
-
- /*
- * Returning ISC_R_NOTFOUND will cause the query logic to
- * check the database for parent names, looking for zone cuts.
- *
- * Returning ISC_R_NOMORE prevents the query logic from doing
- * this; it will move onto the next database after a single query.
- */
- if (strcasecmp(name, "test.example.com") == 0)
- return (ISC_R_NOMORE);
-
- /*
- * For example.net, only return ISC_R_NOMORE when queried
- * from 10.53.0.1.
- */
- if (strcasecmp(name, "test.example.net") == 0 &&
- strncmp(addrbuf, "10.53.0.1", 9) == 0)
- return (ISC_R_NOMORE);
-
- if (strcasecmp(state->zone_name, name) == 0)
- return (ISC_R_SUCCESS);
-
- snprintf(absolute, sizeof(absolute), "%s.", name);
- if (strcasecmp(state->zone_name, absolute) == 0)
- return (ISC_R_SUCCESS);
-
- return (ISC_R_NOTFOUND);
-}
-
-/*
- * Look up one record in the sample database.
- *
- * If the queryname is "source-addr", send back a TXT record containing
- * the address of the client; this demonstrates the use of 'methods'
- * and 'clientinfo'.
- *
- * If the queryname is "too-long", send back a TXT record that's too long
- * to process; this should result in a SERVFAIL when queried.
- */
-isc_result_t
-dlz_lookup(const char *zone, const char *name, void *dbdata,
- dns_sdlzlookup_t *lookup, dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-{
- isc_result_t result;
- struct dlz_example_data *state = (struct dlz_example_data *)dbdata;
- isc_boolean_t found = ISC_FALSE;
- void *dbversion = NULL;
- isc_sockaddr_t *src;
- char full_name[256];
- char buf[512];
- int i;
-
- UNUSED(zone);
-
- if (state->putrr == NULL)
- return (ISC_R_NOTIMPLEMENTED);
-
- if (strcmp(name, "@") == 0) {
- strncpy(full_name, state->zone_name, 255);
- full_name[255] = '\0';
- } else
- snprintf(full_name, 255, "%s.%s", name, state->zone_name);
-
- /*
- * If we need to know the database version (as set in
- * the 'newversion' dlz function) we can pick it up from the
- * clientinfo.
- *
- * This allows a lookup to query the correct version of the DNS
- * data, if the DLZ can differentiate between versions.
- *
- * For example, if a new database transaction is created by
- * 'newversion', the lookup should query within the same
- * transaction scope if it can.
- *
- * If the DLZ only operates on 'live' data, then version
- * wouldn't necessarily be needed.
- */
- if (clientinfo != NULL &&
- clientinfo->version >= DNS_CLIENTINFO_VERSION) {
- dbversion = clientinfo->dbversion;
- if (dbversion != NULL && *(isc_boolean_t *)dbversion)
- state->log(ISC_LOG_INFO,
- "dlz_example: lookup against live "
- "transaction\n");
- }
-
- if (strcmp(name, "source-addr") == 0) {
- strcpy(buf, "unknown");
- if (methods != NULL &&
- methods->sourceip != NULL &&
- (methods->version - methods->age <=
- DNS_CLIENTINFOMETHODS_VERSION) &&
- DNS_CLIENTINFOMETHODS_VERSION <= methods->version)
- {
- methods->sourceip(clientinfo, &src);
- fmt_address(src, buf, sizeof(buf));
- }
-
- state->log(ISC_LOG_INFO,
- "dlz_example: lookup connection from: %s", buf);
-
- found = ISC_TRUE;
- result = state->putrr(lookup, "TXT", 0, buf);
- if (result != ISC_R_SUCCESS)
- return (result);
- }
-
- if (strcmp(name, "too-long") == 0) {
- for (i = 0; i < 511; i++)
- buf[i] = 'x';
- buf[i] = '\0';
- found = ISC_TRUE;
- result = state->putrr(lookup, "TXT", 0, buf);
- if (result != ISC_R_SUCCESS)
- return (result);
- }
-
- for (i = 0; i < MAX_RECORDS; i++) {
- if (strcasecmp(state->current[i].name, full_name) == 0) {
- found = ISC_TRUE;
- result = state->putrr(lookup, state->current[i].type,
- state->current[i].ttl,
- state->current[i].data);
- if (result != ISC_R_SUCCESS)
- return (result);
- }
- }
-
- if (!found)
- return (ISC_R_NOTFOUND);
-
- return (ISC_R_SUCCESS);
-}
-
-
-/*
- * See if a zone transfer is allowed
- */
-isc_result_t
-dlz_allowzonexfr(void *dbdata, const char *name, const char *client) {
- UNUSED(client);
-
- /* Just say yes for all our zones */
- return (dlz_findzonedb(dbdata, name, NULL, NULL));
-}
-
-/*
- * Perform a zone transfer
- */
-isc_result_t
-dlz_allnodes(const char *zone, void *dbdata, dns_sdlzallnodes_t *allnodes) {
- struct dlz_example_data *state = (struct dlz_example_data *)dbdata;
- int i;
-
- UNUSED(zone);
-
- if (state->putnamedrr == NULL)
- return (ISC_R_NOTIMPLEMENTED);
-
- for (i = 0; i < MAX_RECORDS; i++) {
- isc_result_t result;
- if (strlen(state->current[i].name) == 0U) {
- continue;
- }
- result = state->putnamedrr(allnodes, state->current[i].name,
- state->current[i].type,
- state->current[i].ttl,
- state->current[i].data);
- if (result != ISC_R_SUCCESS)
- return (result);
- }
-
- return (ISC_R_SUCCESS);
-}
-
-
-/*
- * Start a transaction
- */
-isc_result_t
-dlz_newversion(const char *zone, void *dbdata, void **versionp) {
- struct dlz_example_data *state = (struct dlz_example_data *)dbdata;
-
- if (state->transaction_started) {
- if (state->log != NULL)
- state->log(ISC_LOG_INFO,
- "dlz_example: transaction already "
- "started for zone %s", zone);
- return (ISC_R_FAILURE);
- }
-
- state->transaction_started = ISC_TRUE;
- *versionp = (void *) &state->transaction_started;
-
- return (ISC_R_SUCCESS);
-}
-
-/*
- * End a transaction
- */
-void
-dlz_closeversion(const char *zone, isc_boolean_t commit,
- void *dbdata, void **versionp)
-{
- struct dlz_example_data *state = (struct dlz_example_data *)dbdata;
-
- if (!state->transaction_started) {
- if (state->log != NULL)
- state->log(ISC_LOG_INFO, "dlz_example: transaction not "
- "started for zone %s", zone);
- *versionp = NULL;
- return;
- }
-
- state->transaction_started = ISC_FALSE;
-
- *versionp = NULL;
-
- if (commit) {
- int i;
- if (state->log != NULL)
- state->log(ISC_LOG_INFO, "dlz_example: committing "
- "transaction on zone %s", zone);
- for (i = 0; i < MAX_RECORDS; i++) {
- if (strlen(state->deletes[i].name) > 0U) {
- (void)del_name(state, &state->current[0],
- state->deletes[i].name,
- state->deletes[i].type,
- state->deletes[i].ttl,
- state->deletes[i].data);
- }
- }
- for (i = 0; i < MAX_RECORDS; i++) {
- if (strlen(state->adds[i].name) > 0U) {
- (void)add_name(state, &state->current[0],
- state->adds[i].name,
- state->adds[i].type,
- state->adds[i].ttl,
- state->adds[i].data);
- }
- }
- } else {
- if (state->log != NULL)
- state->log(ISC_LOG_INFO, "dlz_example: cancelling "
- "transaction on zone %s", zone);
- }
- memset(state->adds, 0, sizeof(state->adds));
- memset(state->deletes, 0, sizeof(state->deletes));
-}
-
-
-/*
- * Configure a writeable zone
- */
-isc_result_t
-dlz_configure(dns_view_t *view, dns_dlzdb_t *dlzdb, void *dbdata) {
- struct dlz_example_data *state = (struct dlz_example_data *)dbdata;
- isc_result_t result;
-
- if (state->log != NULL)
- state->log(ISC_LOG_INFO, "dlz_example: starting configure");
-
- if (state->writeable_zone == NULL) {
- if (state->log != NULL)
- state->log(ISC_LOG_INFO, "dlz_example: no "
- "writeable_zone method available");
- return (ISC_R_FAILURE);
- }
-
- result = state->writeable_zone(view, dlzdb, state->zone_name);
- if (result != ISC_R_SUCCESS) {
- if (state->log != NULL)
- state->log(ISC_LOG_ERROR, "dlz_example: failed to "
- "configure zone %s", state->zone_name);
- return (result);
- }
-
- if (state->log != NULL)
- state->log(ISC_LOG_INFO, "dlz_example: configured writeable "
- "zone %s", state->zone_name);
- return (ISC_R_SUCCESS);
-}
-
-/*
- * Authorize a zone update
- */
-isc_boolean_t
-dlz_ssumatch(const char *signer, const char *name, const char *tcpaddr,
- const char *type, const char *key, uint32_t keydatalen,
- unsigned char *keydata, void *dbdata)
-{
- struct dlz_example_data *state = (struct dlz_example_data *)dbdata;
-
- UNUSED(tcpaddr);
- UNUSED(type);
- UNUSED(key);
- UNUSED(keydatalen);
- UNUSED(keydata);
-
- if (strncmp(name, "deny.", 5) == 0) {
- if (state->log != NULL)
- state->log(ISC_LOG_INFO, "dlz_example: denying update "
- "of name=%s by %s", name, signer);
- return (ISC_FALSE);
- }
- if (state->log != NULL)
- state->log(ISC_LOG_INFO, "dlz_example: allowing update of "
- "name=%s by %s", name, signer);
- return (ISC_TRUE);
-}
-
-
-static isc_result_t
-modrdataset(struct dlz_example_data *state, const char *name,
- const char *rdatastr, struct record *list)
-{
- char *full_name, *dclass, *type, *data, *ttlstr, *buf;
- char absolute[1024];
- isc_result_t result;
-#if defined(WIN32) || defined(_REENTRANT)
- char *saveptr = NULL;
-#endif
-
- buf = strdup(rdatastr);
- if (buf == NULL)
- return (ISC_R_FAILURE);
-
- /*
- * The format is:
- * FULLNAME\tTTL\tDCLASS\tTYPE\tDATA
- *
- * The DATA field is space separated, and is in the data format
- * for the type used by dig
- */
-
- full_name = STRTOK_R(buf, "\t", &saveptr);
- if (full_name == NULL)
- goto error;
-
- ttlstr = STRTOK_R(NULL, "\t", &saveptr);
- if (ttlstr == NULL)
- goto error;
-
- dclass = STRTOK_R(NULL, "\t", &saveptr);
- if (dclass == NULL)
- goto error;
-
- type = STRTOK_R(NULL, "\t", &saveptr);
- if (type == NULL)
- goto error;
-
- data = STRTOK_R(NULL, "\t", &saveptr);
- if (data == NULL)
- goto error;
-
- if (name[strlen(name) - 1] != '.') {
- snprintf(absolute, sizeof(absolute), "%s.", name);
- name = absolute;
- }
-
- result = add_name(state, list, name, type,
- strtoul(ttlstr, NULL, 10), data);
- free(buf);
- return (result);
-
- error:
- free(buf);
- return (ISC_R_FAILURE);
-}
-
-
-isc_result_t
-dlz_addrdataset(const char *name, const char *rdatastr,
- void *dbdata, void *version)
-{
- struct dlz_example_data *state = (struct dlz_example_data *)dbdata;
-
- if (version != (void *) &state->transaction_started)
- return (ISC_R_FAILURE);
-
- if (state->log != NULL)
- state->log(ISC_LOG_INFO, "dlz_example: adding rdataset %s '%s'",
- name, rdatastr);
-
- return (modrdataset(state, name, rdatastr, &state->adds[0]));
-}
-
-isc_result_t
-dlz_subrdataset(const char *name, const char *rdatastr,
- void *dbdata, void *version)
-{
- struct dlz_example_data *state = (struct dlz_example_data *)dbdata;
-
- if (version != (void *) &state->transaction_started)
- return (ISC_R_FAILURE);
-
- if (state->log != NULL)
- state->log(ISC_LOG_INFO, "dlz_example: subtracting rdataset "
- "%s '%s'", name, rdatastr);
-
- return (modrdataset(state, name, rdatastr, &state->deletes[0]));
-}
-
-isc_result_t
-dlz_delrdataset(const char *name, const char *type,
- void *dbdata, void *version)
-{
- struct dlz_example_data *state = (struct dlz_example_data *)dbdata;
-
- if (version != (void *) &state->transaction_started)
- return (ISC_R_FAILURE);
-
- if (state->log != NULL)
- state->log(ISC_LOG_INFO, "dlz_example: deleting rdataset %s "
- "of type %s", name, type);
-
- return (ISC_R_SUCCESS);
-}
diff --git a/contrib/dlz/example/named.conf b/contrib/dlz/example/named.conf
deleted file mode 100644
index bc68beeb..00000000
--- a/contrib/dlz/example/named.conf
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This is a sample named.conf file that uses the DLZ module defined in
- * dlz_example.c. It sets up a zone 'example.nil' which can accept DDNS
- * updates.
- *
- * By default, when run, the zone contains the following records:
- *
- * example.nil. 3600 IN SOA example.nil. hostmaster.example.nil. (
- * 123 900 600 86400 3600
- * )
- * example.nil. 3600 IN NS example.nil.
- * example.nil. 1800 IN A 10.53.0.1
- *
- * Additionally, a query for 'source-addr.example.nil/TXT' is always
- * answered with the source address of the query. This is used to
- * demonstrate the code that retreives client information from the
- * caller.
- *
- * To use this driver, "dlz_external.so" must be moved into the working
- * directory for named.
- */
-
-options {
- allow-transfer { any; };
- allow-query { any; };
- notify yes;
- recursion no;
-};
-
-/*
- * To test dynamic updates, create a DDNS key:
- *
- * ddns-confgen -q -z example.nil > ddns.key
- *
- * Then uncomment the following line:
- *
- * include "ddns.key";
- *
- * Use "nsupdate -k ddns.key" when sending updates. (NOTE: This driver does
- * not check the key that's used: as long as the update is signed by a key
- * known to named, the update will be accepted. Only updates to names
- * that begin with "deny." are rejected.)
- */
-
-dlz "example" {
- database "dlopen ./dlz_example.so example.nil";
-};
diff --git a/contrib/dlz/example/win32/DLLMain.c b/contrib/dlz/example/win32/DLLMain.c
deleted file mode 100644
index 3003cf0a..00000000
--- a/contrib/dlz/example/win32/DLLMain.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2001, 2004, 2007, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-/* $Id: DLLMain.c,v 1.2 2011/03/10 04:36:16 each Exp $ */
-
-#include <windows.h>
-#include <signal.h>
-
-/*
- * Called when we enter the DLL
- */
-__declspec(dllexport) BOOL WINAPI DllMain(HINSTANCE hinstDLL,
- DWORD fdwReason, LPVOID lpvReserved)
-{
- switch (fdwReason) {
- /*
- * The DLL is loading due to process
- * initialization or a call to LoadLibrary.
- */
- case DLL_PROCESS_ATTACH:
- break;
-
- /* The attached process creates a new thread. */
- case DLL_THREAD_ATTACH:
- break;
-
- /* The thread of the attached process terminates. */
- case DLL_THREAD_DETACH:
- break;
-
- /*
- * The DLL is unloading from a process due to
- * process termination or a call to FreeLibrary.
- */
- case DLL_PROCESS_DETACH:
- break;
-
- default:
- break;
- }
- return (TRUE);
-}
-
diff --git a/contrib/dlz/example/win32/dxdriver.def b/contrib/dlz/example/win32/dxdriver.def
deleted file mode 100644
index 6d97466d..00000000
--- a/contrib/dlz/example/win32/dxdriver.def
+++ /dev/null
@@ -1,20 +0,0 @@
-LIBRARY dxdriver
-
-; Exported Functions
-EXPORTS
-dlz_addrdataset
-dlz_allnodes
-dlz_allowzonexfr
-dlz_closeversion
-dlz_configure
-dlz_create
-dlz_delrdataset
-dlz_destroy
-dlz_findzonedb
-dlz_lookup
-dlz_newversion
-dlz_ssumatch
-dlz_subrdataset
-dlz_version
-
-
diff --git a/contrib/dlz/example/win32/dxdriver.dsp b/contrib/dlz/example/win32/dxdriver.dsp
deleted file mode 100644
index c096b081..00000000
--- a/contrib/dlz/example/win32/dxdriver.dsp
+++ /dev/null
@@ -1,121 +0,0 @@
-# Microsoft Developer Studio Project File - Name="dxdriver" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=dxdriver - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "dxdriver.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "dxdriver.mak" CFG="dxdriver - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "dxdriver - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "dxdriver - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "dxdriver - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "../" /I "../../../../../" /I "../../../../../lib/isc/win32" /I "../../../../../lib/isc/win32/include" /I "../../../../../lib/isc/include" /I "../../../../../lib/dns/include" /D "NDEBUG" /D "WIN32" /D "__STDC__" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c
-# SUBTRACT CPP /X
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 user32.lib advapi32.lib ws2_32.lib /nologo /dll /machine:I386 /out:"../../../../../Build/Release/dxdriver.dll"
-
-!ELSEIF "$(CFG)" == "dxdriver - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../" /I "../../../../../" /I "../../../../../lib/isc/win32" /I "../../../../../lib/isc/win32/include" /I "../../../../../lib/isc/include" /I "../../../../../lib/dns/include" /D "_DEBUG" /D "WIN32" /D "__STDC__" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /FR /YX /FD /GZ /c
-# SUBTRACT CPP /X
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 user32.lib advapi32.lib ws2_32.lib /nologo /dll /debug /machine:I386 /out:"../../../../../Build/Debug/dxdriver.dll" /pdbtype:sept
-
-!ENDIF
-
-# Begin Target
-
-# Name "dxdriver - Win32 Release"
-# Name "dxdriver - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\driver.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\DLLMain.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\driver.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# Begin Source File
-
-SOURCE=.\dxdriver.def
-# End Source File
-# End Target
-# End Project
diff --git a/contrib/dlz/example/win32/dxdriver.dsw b/contrib/dlz/example/win32/dxdriver.dsw
deleted file mode 100644
index b0212fe7..00000000
--- a/contrib/dlz/example/win32/dxdriver.dsw
+++ /dev/null
@@ -1,29 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "dxdriver"=.\dxdriver.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/contrib/dlz/example/win32/dxdriver.mak b/contrib/dlz/example/win32/dxdriver.mak
deleted file mode 100644
index 1d8506b1..00000000
--- a/contrib/dlz/example/win32/dxdriver.mak
+++ /dev/null
@@ -1,298 +0,0 @@
-# Microsoft Developer Studio Generated NMAKE File, Based on dxdriver.dsp
-!IF "$(CFG)" == ""
-CFG=dxdriver - Win32 Release
-!MESSAGE No configuration specified. Defaulting to dxdriver - Win32 Release.
-!ENDIF
-
-!IF "$(CFG)" != "dxdriver - Win32 Release" && "$(CFG)" != "dxdriver - Win32 Debug"
-!MESSAGE Invalid configuration "$(CFG)" specified.
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "dxdriver.mak" CFG="dxdriver - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "dxdriver - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "dxdriver - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-!ERROR An invalid configuration is specified.
-!ENDIF
-
-!IF "$(OS)" == "Windows_NT"
-NULL=
-!ELSE
-NULL=nul
-!ENDIF
-
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "dxdriver - Win32 Release"
-_VC_MANIFEST_INC=0
-_VC_MANIFEST_BASENAME=__VC80
-!ELSE
-_VC_MANIFEST_INC=1
-_VC_MANIFEST_BASENAME=__VC80.Debug
-!ENDIF
-
-####################################################
-# Specifying name of temporary resource file used only in incremental builds:
-
-!if "$(_VC_MANIFEST_INC)" == "1"
-_VC_MANIFEST_AUTO_RES=$(_VC_MANIFEST_BASENAME).auto.res
-!else
-_VC_MANIFEST_AUTO_RES=
-!endif
-
-####################################################
-# _VC_MANIFEST_EMBED_EXE - command to embed manifest in EXE:
-
-!if "$(_VC_MANIFEST_INC)" == "1"
-
-#MT_SPECIAL_RETURN=1090650113
-#MT_SPECIAL_SWITCH=-notify_resource_update
-MT_SPECIAL_RETURN=0
-MT_SPECIAL_SWITCH=
-_VC_MANIFEST_EMBED_EXE= \
-if exist $@.manifest mt.exe -manifest $@.manifest -out:$(_VC_MANIFEST_BASENAME).auto.manifest $(MT_SPECIAL_SWITCH) & \
-if "%ERRORLEVEL%" == "$(MT_SPECIAL_RETURN)" \
-rc /r $(_VC_MANIFEST_BASENAME).auto.rc & \
-link $** /out:$@ $(LFLAGS)
-
-!else
-
-_VC_MANIFEST_EMBED_EXE= \
-if exist $@.manifest mt.exe -manifest $@.manifest -outputresource:$@;1
-
-!endif
-
-####################################################
-# _VC_MANIFEST_EMBED_DLL - command to embed manifest in DLL:
-
-!if "$(_VC_MANIFEST_INC)" == "1"
-
-#MT_SPECIAL_RETURN=1090650113
-#MT_SPECIAL_SWITCH=-notify_resource_update
-MT_SPECIAL_RETURN=0
-MT_SPECIAL_SWITCH=
-_VC_MANIFEST_EMBED_EXE= \
-if exist $@.manifest mt.exe -manifest $@.manifest -out:$(_VC_MANIFEST_BASENAME).auto.manifest $(MT_SPECIAL_SWITCH) & \
-if "%ERRORLEVEL%" == "$(MT_SPECIAL_RETURN)" \
-rc /r $(_VC_MANIFEST_BASENAME).auto.rc & \
-link $** /out:$@ $(LFLAGS)
-
-!else
-
-_VC_MANIFEST_EMBED_EXE= \
-if exist $@.manifest mt.exe -manifest $@.manifest -outputresource:$@;2
-
-!endif
-####################################################
-# _VC_MANIFEST_CLEAN - command to clean resources files generated temporarily:
-
-!if "$(_VC_MANIFEST_INC)" == "1"
-
-_VC_MANIFEST_CLEAN=-del $(_VC_MANIFEST_BASENAME).auto.res \
- $(_VC_MANIFEST_BASENAME).auto.rc \
- $(_VC_MANIFEST_BASENAME).auto.manifest
-
-!else
-
-_VC_MANIFEST_CLEAN=
-
-!endif
-
-!IF "$(CFG)" == "dxdriver - Win32 Release"
-
-OUTDIR=.\Release
-INTDIR=.\Release
-
-ALL : "..\..\..\..\..\Build\Release\dxdriver.dll"
-
-CLEAN :
- -@erase "$(INTDIR)\DLLMain.obj"
- -@erase "$(INTDIR)\driver.obj"
- -@erase "$(INTDIR)\vc60.idb"
- -@erase "$(OUTDIR)\dxdriver.exp"
- -@erase "$(OUTDIR)\dxdriver.lib"
- -@erase "..\..\..\..\..\Build\Release\dxdriver.dll"
- -@$(_VC_MANIFEST_CLEAN)
-
-"$(OUTDIR)" :
- if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
-
-CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "../" /I "../../../../../" /I "../../../../../lib/isc/win32" /I "../../../../../lib/isc/win32/include" /I "../../../../../lib/isc/include" /I "../../../../../lib/dns/include" /D "NDEBUG" /D "WIN32" /D "__STDC__" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /Fp"$(INTDIR)\dxdriver.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
-MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
-BSC32=bscmake.exe
-BSC32_FLAGS=/nologo /o"$(OUTDIR)\dxdriver.bsc"
-BSC32_SBRS= \
-
-LINK32=link.exe
-LINK32_FLAGS=user32.lib advapi32.lib ws2_32.lib /nologo /dll /incremental:no /pdb:"$(OUTDIR)\dxdriver.pdb" /machine:I386 /def:".\dxdriver.def" /out:"../../../../../Build/Release/dxdriver.dll" /implib:"$(OUTDIR)\dxdriver.lib"
-DEF_FILE= \
- ".\dxdriver.def"
-LINK32_OBJS= \
- "$(INTDIR)\DLLMain.obj" \
- "$(INTDIR)\driver.obj"
-
-"..\..\..\..\..\Build\Release\dxdriver.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
- $(LINK32) @<<
- $(LINK32_FLAGS) $(LINK32_OBJS)
-<<
- $(_VC_MANIFEST_EMBED_DLL)
-
-!ELSEIF "$(CFG)" == "dxdriver - Win32 Debug"
-
-OUTDIR=.\Debug
-INTDIR=.\Debug
-# Begin Custom Macros
-OutDir=.\Debug
-# End Custom Macros
-
-ALL : "..\..\..\..\..\Build\Debug\dxdriver.dll" "$(OUTDIR)\dxdriver.bsc"
-
-CLEAN :
- -@erase "$(INTDIR)\DLLMain.obj"
- -@erase "$(INTDIR)\DLLMain.sbr"
- -@erase "$(INTDIR)\driver.obj"
- -@erase "$(INTDIR)\driver.sbr"
- -@erase "$(INTDIR)\vc60.idb"
- -@erase "$(INTDIR)\vc60.pdb"
- -@erase "$(OUTDIR)\dxdriver.bsc"
- -@erase "$(OUTDIR)\dxdriver.exp"
- -@erase "$(OUTDIR)\dxdriver.lib"
- -@erase "$(OUTDIR)\dxdriver.pdb"
- -@erase "..\..\..\..\..\Build\Debug\dxdriver.dll"
- -@erase "..\..\..\..\..\Build\Debug\dxdriver.ilk"
- -@$(_VC_MANIFEST_CLEAN)
-
-"$(OUTDIR)" :
- if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
-
-CPP_PROJ=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../" /I "../../../../../" /I "../../../../../lib/isc/win32" /I "../../../../../lib/isc/win32/include" /I "../../../../../lib/isc/include" /I "../../../../../lib/dns/include" /D "_DEBUG" /D "WIN32" /D "__STDC__" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\dxdriver.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
-MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
-BSC32=bscmake.exe
-BSC32_FLAGS=/nologo /o"$(OUTDIR)\dxdriver.bsc"
-BSC32_SBRS= \
- "$(INTDIR)\DLLMain.sbr" \
- "$(INTDIR)\driver.sbr"
-
-"$(OUTDIR)\dxdriver.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
- $(BSC32) @<<
- $(BSC32_FLAGS) $(BSC32_SBRS)
-<<
-
-LINK32=link.exe
-LINK32_FLAGS=user32.lib advapi32.lib ws2_32.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\dxdriver.pdb" /debug /machine:I386 /def:".\dxdriver.def" /out:"../../../../../Build/Debug/dxdriver.dll" /implib:"$(OUTDIR)\dxdriver.lib" /pdbtype:sept
-DEF_FILE= \
- ".\dxdriver.def"
-LINK32_OBJS= \
- "$(INTDIR)\DLLMain.obj" \
- "$(INTDIR)\driver.obj"
-
-"..\..\..\..\..\Build\Debug\dxdriver.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
- $(LINK32) @<<
- $(LINK32_FLAGS) $(LINK32_OBJS)
-<<
- $(_VC_MANIFEST_EMBED_DLL)
-
-!ENDIF
-
-.c{$(INTDIR)}.obj::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-.cpp{$(INTDIR)}.obj::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-.cxx{$(INTDIR)}.obj::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-.c{$(INTDIR)}.sbr::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-.cpp{$(INTDIR)}.sbr::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-.cxx{$(INTDIR)}.sbr::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-
-!IF "$(NO_EXTERNAL_DEPS)" != "1"
-!IF EXISTS("dxdriver.dep")
-!INCLUDE "dxdriver.dep"
-!ELSE
-!MESSAGE Warning: cannot find "dxdriver.dep"
-!ENDIF
-!ENDIF
-
-
-!IF "$(CFG)" == "dxdriver - Win32 Release" || "$(CFG)" == "dxdriver - Win32 Debug"
-SOURCE=.\DLLMain.c
-
-!IF "$(CFG)" == "dxdriver - Win32 Release"
-
-
-"$(INTDIR)\DLLMain.obj" : $(SOURCE) "$(INTDIR)"
-
-
-!ELSEIF "$(CFG)" == "dxdriver - Win32 Debug"
-
-
-"$(INTDIR)\DLLMain.obj" "$(INTDIR)\DLLMain.sbr" : $(SOURCE) "$(INTDIR)"
-
-
-!ENDIF
-
-SOURCE=..\driver.c
-
-!IF "$(CFG)" == "dxdriver - Win32 Release"
-
-
-"$(INTDIR)\driver.obj" : $(SOURCE) "$(INTDIR)"
- $(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-!ELSEIF "$(CFG)" == "dxdriver - Win32 Debug"
-
-
-"$(INTDIR)\driver.obj" "$(INTDIR)\driver.sbr" : $(SOURCE) "$(INTDIR)"
- $(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-!ENDIF
-
-
-!ENDIF
-
-####################################################
-# Commands to generate initial empty manifest file and the RC file
-# that references it, and for generating the .res file:
-
-$(_VC_MANIFEST_BASENAME).auto.res : $(_VC_MANIFEST_BASENAME).auto.rc
-
-$(_VC_MANIFEST_BASENAME).auto.rc : $(_VC_MANIFEST_BASENAME).auto.manifest
- type <<$@
-#include <winuser.h>
-1RT_MANIFEST"$(_VC_MANIFEST_BASENAME).auto.manifest"
-<< KEEP
-
-$(_VC_MANIFEST_BASENAME).auto.manifest :
- type <<$@
-<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
-<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
-</assembly>
-<< KEEP
diff --git a/contrib/dlz/modules/bdbhpt/Makefile b/contrib/dlz/modules/bdbhpt/Makefile
deleted file mode 100644
index 795a2e8b..00000000
--- a/contrib/dlz/modules/bdbhpt/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-prefix = /usr
-libdir = $(prefix)/lib/bind9
-
-CFLAGS=-fPIC -g -I../include
-BDB_LIBS=-ldb
-
-all: dlz_bdbhpt_dynamic.so
-
-dlz_bdbhpt_dynamic.so: dlz_bdbhpt_dynamic.c
- $(CC) $(CFLAGS) -shared -o dlz_bdbhpt_dynamic.so \
- dlz_bdbhpt_dynamic.c $(BDB_LIBS)
-
-clean:
- rm -f dlz_bdbhpt_dynamic.so
-
-install: dlz_bdbhpt_dynamic.so
- mkdir -p $(DESTDIR)$(libdir)
- install dlz_bdbhpt_dynamic.so $(DESTDIR)$(libdir)
diff --git a/contrib/dlz/modules/bdbhpt/README.md b/contrib/dlz/modules/bdbhpt/README.md
deleted file mode 100644
index 10f10a9b..00000000
--- a/contrib/dlz/modules/bdbhpt/README.md
+++ /dev/null
@@ -1,86 +0,0 @@
-dlz-bdbhpt-dynamic
-==================
-
-A Bind 9 Dynamically Loadable BerkeleyDB High Performance Text Driver
-
-Summary
--------
-
-This is an attempt to port the original Bind 9 DLZ bdbhpt_driver.c as
-found in the Bind 9 source tree into the new DLZ dlopen driver API.
-The goals of this project are as follows:
-
-* Provide DLZ facilities to OEM-supported Bind distributions
-* Support both v1 (Bind 9.8) and v2 (Bind 9.9) of the dlopen() DLZ API
-
-Requirements
-------------
-
-You will need the following:
- * Bind 9.8 or higher with the DLZ dlopen driver enabled
- * BerkeleyDB libraries and header files
- * A C compiler
-
-This distribution have been successfully installed and tested on
-Ubuntu 12.04.
-
-Installation
-------------
-
-With the above requirements satisfied perform the following steps:
-
-1. Ensure the symlink for dlz_minimal.h points at the correct header
- file matching your Bind version
-2. Run: make
-3. Run: sudo make install # this will install dlz_bdbhpt_dynamic.so
- into /usr/lib/bind9/
-4. Add a DLZ statement similar to the example below into your
- Bind configuration
-5. Ensure your BerkeleyDB home-directory exists and can be written to
- by the bind user
-6. Use the included testing/bdbhpt-populate.pl script to provide some
- data for initial testing
-
-Usage
------
-
-Example usage is as follows:
-
-```
-dlz "bdbhpt_dynamic" {
- database "dlopen /usr/lib/bind9/dlz_bdbhpt_dynamic.so T /var/cache/bind/dlz dnsdata.db";
-};
-```
-
-The arguments for the "database" line above are as follows:
-
-1. dlopen - Use the dlopen DLZ driver to dynamically load our compiled
- driver
-2. The full path to your built dlz_bdbhpt_dynamic.so
-3. Single character specifying the mode to open your BerkeleyDB
- environment:
- * T - Transactional Mode - Highest safety, lowest speed.
- * C - Concurrent Mode - Lower safety (no rollback), higher speed.
- * P - Private Mode - No interprocess communication & no locking.
- Lowest safety, highest speed.
-4. Directory containing your BerkeleyDB - this is where the BerkeleyDB
- environment will be created.
-5. Filename within this directory containing your BerkeleyDB tables.
-
-A copy of the above Bind configuration is included within
-example/dlz.conf.
-
-Author
-------
-
-The person responsible for this is:
-
- Mark Goldfinch <g@g.org.nz>
-
-The code is maintained at:
-
- https://github.com/goldie80/dlz-bdbhpt-dynamic
-
-There is very little in the way of original code in this work,
-however, original license conditions from both bdbhpt_driver.c and
-dlz_example.c are maintained in the dlz_bdbhpt_dynamic.c.
diff --git a/contrib/dlz/modules/bdbhpt/dlz_bdbhpt_dynamic.c b/contrib/dlz/modules/bdbhpt/dlz_bdbhpt_dynamic.c
deleted file mode 100644
index 5ac2c5da..00000000
--- a/contrib/dlz/modules/bdbhpt/dlz_bdbhpt_dynamic.c
+++ /dev/null
@@ -1,827 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This is simply a merge of Andrew Tridgell's dlz_example.c and the
- * original bdb_bdbhpt_driver.c
- *
- * This provides the externally loadable bdbhpt DLZ driver, without
- * update support
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <stdint.h>
-
-#include <db.h>
-
-#include "dlz_minimal.h"
-
-/* should the bdb driver use threads. */
-#ifdef ISC_PLATFORM_USETHREADS
-#define bdbhpt_threads DB_THREAD
-#else
-#define bdbhpt_threads 0
-#endif
-
-/* bdbhpt database names */
-#define dlz_data "dns_data"
-#define dlz_zone "dns_zone"
-#define dlz_xfr "dns_xfr"
-#define dlz_client "dns_client"
-
-#define dlz_bdbhpt_dynamic_version "0.1"
-
-/*
- * This structure contains all our DB handles and helper functions we
- * inherit from the dlz_dlopen driver
- *
- */
-typedef struct bdbhpt_instance {
- DB_ENV *dbenv; /* bdbhpt environment */
- DB *data; /* dns_data database handle */
- DB *zone; /* zone database handle */
- DB *xfr; /* zone xfr database handle */
- DB *client; /* client database handle */
-
- /* Helper functions from the dlz_dlopen driver */
- log_t *log;
- dns_sdlz_putrr_t *putrr;
- dns_sdlz_putnamedrr_t *putnamedrr;
- dns_dlz_writeablezone_t *writeable_zone;
-} bdbhpt_instance_t;
-
-typedef struct bdbhpt_parsed_data {
- char *host;
- char *type;
- int ttl;
- char *data;
-} bdbhpt_parsed_data_t;
-
-static void
-b9_add_helper(struct bdbhpt_instance *db, const char *helper_name, void *ptr);
-
-/*%
- * Reverses a string in place.
- */
-static char
-*bdbhpt_strrev(char *str) {
- char *p1, *p2;
-
- if (! str || ! *str)
- return str;
- for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2) {
- *p1 ^= *p2;
- *p2 ^= *p1;
- *p1 ^= *p2;
- }
- return str;
-}
-
-/*%
- * Parses the DBT from the Berkeley DB into a parsed_data record
- * The parsed_data record should be allocated before and passed into the
- * bdbhpt_parse_data function. The char (type & data) fields should not
- * be "free"d as that memory is part of the DBT data field. It will be
- * "free"d when the DBT is freed.
- */
-
-static isc_result_t
-bdbhpt_parse_data(log_t *log, char *in, bdbhpt_parsed_data_t *pd) {
-
- char *endp, *ttlStr;
- char *tmp = in;
- char *lastchar = (char *) &tmp[strlen(tmp)];
-
- /*%
- * String should be formatted as:
- * replication_id
- * (a space)
- * host_name
- * (a space)
- * ttl
- * (a space)
- * type
- * (a space)
- * remaining data
- *
- * examples:
- *
- * 9191 host 10 A 127.0.0.1
- * server1_212 host 10 A 127.0.0.2
- * {xxxx-xxxx-xxxx-xxxx-xxxx} host 10 MX 20 mail.example.com
- */
-
- /*
- * we don't need the replication id, so don't
- * bother saving a pointer to it.
- */
-
- /* find space after replication id */
- tmp = strchr(tmp, ' ');
- /* verify we found a space */
- if (tmp == NULL)
- return ISC_R_FAILURE;
- /* make sure it is safe to increment pointer */
- if (++tmp > lastchar)
- return ISC_R_FAILURE;
-
- /* save pointer to host */
- pd->host = tmp;
-
- /* find space after host and change it to a '\0' */
- tmp = strchr(tmp, ' ');
- /* verify we found a space */
- if (tmp == NULL)
- return ISC_R_FAILURE;
- /* change the space to a null (string terminator) */
- tmp[0] = '\0';
- /* make sure it is safe to increment pointer */
- if (++tmp > lastchar)
- return ISC_R_FAILURE;
-
- /* save pointer to ttl string */
- ttlStr = tmp;
-
- /* find space after ttl and change it to a '\0' */
- tmp = strchr(tmp, ' ');
- /* verify we found a space */
- if (tmp == NULL)
- return ISC_R_FAILURE;
- /* change the space to a null (string terminator) */
- tmp[0] = '\0';
- /* make sure it is safe to increment pointer */
- if (++tmp > lastchar)
- return ISC_R_FAILURE;
-
- /* save pointer to dns type */
- pd->type = tmp;
-
- /* find space after type and change it to a '\0' */
- tmp = strchr(tmp, ' ');
- /* verify we found a space */
- if (tmp == NULL)
- return ISC_R_FAILURE;
- /* change the space to a null (string terminator) */
- tmp[0] = '\0';
- /* make sure it is safe to increment pointer */
- if (++tmp > lastchar)
- return ISC_R_FAILURE;
-
- /* save pointer to remainder of DNS data */
- pd->data = tmp;
-
- /* convert ttl string to integer */
- pd->ttl = strtol(ttlStr, &endp, 10);
- if (*endp != '\0' || pd->ttl < 0) {
- log(ISC_LOG_ERROR,
- "bdbhpt_dynamic: "
- "ttl must be a positive number");
- return ISC_R_FAILURE;
- }
-
- /* if we get this far everything should have worked. */
- return ISC_R_SUCCESS;
-}
-
-/*
- * See if a zone transfer is allowed
- */
-isc_result_t
-dlz_allowzonexfr(void *dbdata, const char *name, const char *client) {
- isc_result_t result;
- bdbhpt_instance_t *db = (bdbhpt_instance_t *) dbdata;
- DBT key, data;
-
- /* check to see if we are authoritative for the zone first. */
-#if DLZ_DLOPEN_VERSION >= 3
- result = dlz_findzonedb(dbdata, name, NULL, NULL);
-#else
- result = dlz_findzonedb(dbdata, name);
-#endif
- if (result != ISC_R_SUCCESS)
- return (ISC_R_NOTFOUND);
-
- memset(&key, 0, sizeof(DBT));
- key.flags = DB_DBT_MALLOC;
- key.data = strdup(name);
- if (key.data == NULL) {
- result = ISC_R_NOMEMORY;
- goto xfr_cleanup;
- }
- key.size = strlen(key.data);
-
- memset(&data, 0, sizeof(DBT));
- data.flags = DB_DBT_MALLOC;
- data.data = strdup(client);
- if (data.data == NULL) {
- result = ISC_R_NOMEMORY;
- goto xfr_cleanup;
- }
- data.size = strlen(data.data);
-
- switch(db->client->get(db->client, NULL, &key, &data, DB_GET_BOTH)) {
- case DB_NOTFOUND:
- result = ISC_R_NOTFOUND;
- break;
- case 0:
- result = ISC_R_SUCCESS;
- break;
- default:
- result = ISC_R_FAILURE;
- }
-
- xfr_cleanup:
- /* free any memory duplicate string in the key field */
- if (key.data != NULL)
- free(key.data);
-
- /* free any memory allocated to the data field. */
- if (data.data != NULL)
- free(data.data);
-
- return result;
-}
-
-/*%
- * Perform a zone transfer
- *
- * BDB does not allow a secondary index on a database that allows
- * duplicates. We have a few options:
- *
- * 1) kill speed by having lookup method use a secondary db which
- * is associated to the primary DB with the DNS data. Then have
- * another secondary db for zone transfer which also points to
- * the dns_data primary. NO - The point of this driver is
- * lookup performance.
- *
- * 2) Blow up database size by storing DNS data twice. Once for
- * the lookup (dns_data) database, and a second time for the zone
- * transfer (dns_xfr) database. NO - That would probably require
- * a larger cache to provide good performance. Also, that would
- * make the DB larger on disk potentially slowing it as well.
- *
- * 3) Loop through the dns_xfr database with a cursor to get
- * all the different hosts in a zone. Then use the zone & host
- * together to lookup the data in the dns_data database. YES -
- * This may slow down zone xfr's a little, but that's ok they
- * don't happen as often and don't need to be as fast. We can
- * also use this table when deleting a zone (The BDB driver
- * is read only - the delete would be used during replication
- * updates by a separate process).
- */
-isc_result_t
-dlz_allnodes(const char *zone, void *dbdata, dns_sdlzallnodes_t *allnodes) {
- isc_result_t result = ISC_R_NOTFOUND;
- bdbhpt_instance_t *db = (bdbhpt_instance_t *) dbdata;
- DBC *xfr_cursor = NULL;
- DBC *dns_cursor = NULL;
- DBT xfr_key, xfr_data, dns_key, dns_data;
- int xfr_flags;
- int dns_flags;
- int bdbhptres;
- bdbhpt_parsed_data_t pd;
- char *tmp = NULL, *tmp_zone, *tmp_zone_host = NULL;
-
- memset(&xfr_key, 0, sizeof(DBT));
- memset(&xfr_data, 0, sizeof(DBT));
- memset(&dns_key, 0, sizeof(DBT));
- memset(&dns_data, 0, sizeof(DBT));
-
- xfr_key.data = tmp_zone = strdup(zone);
- if (xfr_key.data == NULL)
- return (ISC_R_NOMEMORY);
-
- xfr_key.size = strlen(xfr_key.data);
-
- /* get a cursor to loop through dns_xfr table */
- if (db->xfr->cursor(db->xfr, NULL, &xfr_cursor, 0) != 0) {
- result = ISC_R_FAILURE;
- goto allnodes_cleanup;
- }
-
- /* get a cursor to loop through dns_data table */
- if (db->data->cursor(db->data, NULL, &dns_cursor, 0) != 0) {
- result = ISC_R_FAILURE;
- goto allnodes_cleanup;
- }
-
- xfr_flags = DB_SET;
-
- /* loop through xfr table for specified zone. */
- while ((bdbhptres = xfr_cursor->c_get(xfr_cursor, &xfr_key,
- &xfr_data, xfr_flags)) == 0)
- {
- xfr_flags = DB_NEXT_DUP;
-
- /* +1 to allow for space between zone and host names */
- dns_key.size = xfr_data.size + xfr_key.size + 1;
-
- /* +1 to allow for null term at end of string. */
- dns_key.data = tmp_zone_host = malloc(dns_key.size + 1);
- if (dns_key.data == NULL)
- goto allnodes_cleanup;
-
- /*
- * construct search key for dns_data.
- * zone_name(a space)host_name
- */
- strcpy(dns_key.data, zone);
- strcat(dns_key.data, " ");
- strncat(dns_key.data, xfr_data.data, xfr_data.size);
-
- dns_flags = DB_SET;
-
- while ((bdbhptres = dns_cursor->c_get(dns_cursor,
- &dns_key,
- &dns_data,
- dns_flags)) == 0)
- {
- dns_flags = DB_NEXT_DUP;
-
- /* +1 to allow for null term at end of string. */
- tmp = realloc(tmp, dns_data.size + 1);
- if (tmp == NULL)
- goto allnodes_cleanup;
-
- /* copy data to tmp string, and append null term. */
- strncpy(tmp, dns_data.data, dns_data.size);
- tmp[dns_data.size] = '\0';
-
- /* split string into dns data parts. */
- if (bdbhpt_parse_data(db->log,
- tmp, &pd) != ISC_R_SUCCESS)
- goto allnodes_cleanup;
- result = db->putnamedrr(allnodes, pd.host,
- pd.type, pd.ttl, pd.data);
- if (result != ISC_R_SUCCESS)
- goto allnodes_cleanup;
-
- } /* end inner while loop */
-
- /* clean up memory */
- if (tmp_zone_host != NULL) {
- free(tmp_zone_host);
- tmp_zone_host = NULL;
- }
- } /* end outer while loop */
-
- allnodes_cleanup:
- /* free any memory */
- if (tmp != NULL)
- free(tmp);
-
- if (tmp_zone_host != NULL)
- free(tmp_zone_host);
-
- if (tmp_zone != NULL)
- free(tmp_zone);
-
- /* get rid of cursors */
- if (xfr_cursor != NULL)
- xfr_cursor->c_close(xfr_cursor);
-
- if (dns_cursor != NULL)
- dns_cursor->c_close(dns_cursor);
-
- return result;
-}
-
-/*%
- * Performs bdbhpt cleanup.
- * Used by bdbhpt_create if there is an error starting up.
- * Used by bdbhpt_destroy when the driver is shutting down.
- */
-static void
-bdbhpt_cleanup(bdbhpt_instance_t *db) {
- /* close databases */
- if (db->data != NULL)
- db->data->close(db->data, 0);
- if (db->xfr != NULL)
- db->xfr->close(db->xfr, 0);
- if (db->zone != NULL)
- db->zone->close(db->zone, 0);
- if (db->client != NULL)
- db->client->close(db->client, 0);
-
- /* close environment */
- if (db->dbenv != NULL)
- db->dbenv->close(db->dbenv, 0);
-}
-
-/*
- * See if we handle a given zone
- */
-#if DLZ_DLOPEN_VERSION < 3
-isc_result_t
-dlz_findzonedb(void *dbdata, const char *name)
-#else
-isc_result_t
-dlz_findzonedb(void *dbdata, const char *name,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-#endif
-{
- isc_result_t result;
- bdbhpt_instance_t *db = (bdbhpt_instance_t *) dbdata;
- DBT key, data;
-
- memset(&key, 0, sizeof(DBT));
- memset(&data, 0, sizeof(DBT));
- data.flags = DB_DBT_MALLOC;
-
-#if DLZ_DLOPEN_VERSION >= 3
- UNUSED(methods);
- UNUSED(clientinfo);
-#endif
-
- key.data = strdup(name);
-
- if (key.data == NULL)
- return (ISC_R_NOMEMORY);
-
- /*
- * reverse string to take advantage of BDB locality of reference
- * if we need futher lookups because the zone doesn't match the
- * first time.
- */
- key.data = bdbhpt_strrev(key.data);
- key.size = strlen(key.data);
-
- switch(db->zone->get(db->zone, NULL, &key, &data, 0)) {
- case DB_NOTFOUND:
- result = ISC_R_NOTFOUND;
- break;
- case 0:
- result = ISC_R_SUCCESS;
- break;
- default:
- result = ISC_R_FAILURE;
- }
-
- /* free any memory duplicate string in the key field */
- if (key.data != NULL)
- free(key.data);
-
- /* free any memory allocated to the data field. */
- if (data.data != NULL)
- free(data.data);
-
- return result;
-}
-
-/*
- * Look up one record in the database.
- *
- */
-#if DLZ_DLOPEN_VERSION == 1
-isc_result_t dlz_lookup(const char *zone, const char *name,
- void *dbdata, dns_sdlzlookup_t *lookup)
-#else
-isc_result_t dlz_lookup(const char *zone, const char *name, void *dbdata,
- dns_sdlzlookup_t *lookup,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-#endif
-{
- isc_result_t result = ISC_R_NOTFOUND;
- bdbhpt_instance_t *db = (bdbhpt_instance_t *) dbdata;
- DBC *data_cursor = NULL;
- DBT key, data;
- int bdbhptres;
- int flags;
-
- bdbhpt_parsed_data_t pd;
- char *tmp = NULL;
- char *keyStr = NULL;
-
-#if DLZ_DLOPEN_VERSION >= 2
- UNUSED(methods);
- UNUSED(clientinfo);
-#endif
-
- memset(&key, 0, sizeof(DBT));
- memset(&data, 0, sizeof(DBT));
-
- key.size = strlen(zone) + strlen(name) + 1;
-
- /* allocate mem for key */
- key.data = keyStr = malloc((key.size + 1) * sizeof(char));
-
- if (keyStr == NULL)
- return ISC_R_NOMEMORY;
-
- strcpy(keyStr, zone);
- strcat(keyStr, " ");
- strcat(keyStr, name);
-
- /* get a cursor to loop through data */
- if (db->data->cursor(db->data, NULL, &data_cursor, 0) != 0) {
- result = ISC_R_FAILURE;
- goto lookup_cleanup;
- }
-
- result = ISC_R_NOTFOUND;
-
- flags = DB_SET;
- while ((bdbhptres = data_cursor->c_get(data_cursor, &key, &data,
- flags)) == 0)
- {
- flags = DB_NEXT_DUP;
- tmp = realloc(tmp, data.size + 1);
- if (tmp == NULL)
- goto lookup_cleanup;
-
- strncpy(tmp, data.data, data.size);
- tmp[data.size] = '\0';
-
- if (bdbhpt_parse_data(db->log, tmp, &pd) != ISC_R_SUCCESS)
- goto lookup_cleanup;
-
- result = db->putrr(lookup, pd.type, pd.ttl, pd.data);
- if (result != ISC_R_SUCCESS)
- goto lookup_cleanup;
- } /* end while loop */
-
- lookup_cleanup:
- /* get rid of cursor */
- if (data_cursor != NULL)
- data_cursor->c_close(data_cursor);
-
- if (keyStr != NULL)
- free(keyStr);
- if (tmp != NULL)
- free(tmp);
-
- return result;
-}
-
-/*%
- * Initialises, sets flags and then opens Berkeley databases.
- */
-static isc_result_t
-bdbhpt_opendb(log_t *log, DB_ENV *db_env, DBTYPE db_type, DB **db,
- const char *db_name, char *db_file, int flags)
-{
- int result;
-
- /* Initialise the database. */
- if ((result = db_create(db, db_env, 0)) != 0) {
- log(ISC_LOG_ERROR,
- "bdbhpt_dynamic: could not initialize %s database. "
- "BerkeleyDB error: %s",
- db_name, db_strerror(result));
- return ISC_R_FAILURE;
- }
-
- /* set database flags. */
- if ((result = (*db)->set_flags(*db, flags)) != 0) {
- log(ISC_LOG_ERROR,
- "bdbhpt_dynamic: could not set flags for %s database. "
- "BerkeleyDB error: %s",
- db_name, db_strerror(result));
- return ISC_R_FAILURE;
- }
-
- /* open the database. */
- if ((result = (*db)->open(*db, NULL, db_file, db_name, db_type,
- DB_RDONLY | bdbhpt_threads, 0)) != 0) {
- log(ISC_LOG_ERROR,
- "bdbhpt_dynamic: could not open %s database in %s. "
- "BerkeleyDB error: %s",
- db_name, db_file, db_strerror(result));
- return ISC_R_FAILURE;
- }
-
- return ISC_R_SUCCESS;
-}
-
-
-/*
- * Called to initialize the driver
- */
-isc_result_t
-dlz_create(const char *dlzname, unsigned int argc, char *argv[],
- void **dbdata, ...)
-{
- isc_result_t result;
- int bdbhptres;
- int bdbFlags = 0;
- bdbhpt_instance_t *db = NULL;
-
- const char *helper_name;
- va_list ap;
-
- UNUSED(dlzname);
-
- /* Allocate memory for our db structures and helper functions */
- db = calloc(1, sizeof(struct bdbhpt_instance));
- if (db == NULL)
- return (ISC_R_NOMEMORY);
-
- /* Fill in the helper functions */
- va_start(ap, dbdata);
- while ((helper_name = va_arg(ap, const char *)) != NULL)
- b9_add_helper(db, helper_name, va_arg(ap, void*));
- va_end(ap);
-
- /* verify we have 4 arg's passed to the driver */
- if (argc != 4) {
- db->log(ISC_LOG_ERROR,
- "bdbhpt_dynamic: please supply 3 command line args. "
- "You supplied: %s", argc);
- return (ISC_R_FAILURE);
- }
-
- switch((char) *argv[1]) {
- /*
- * Transactional mode. Highest safety - lowest speed.
- */
- case 'T':
- case 't':
- bdbFlags = DB_INIT_MPOOL | DB_INIT_LOCK |
- DB_INIT_LOG | DB_INIT_TXN;
- db->log(ISC_LOG_INFO,
- "bdbhpt_dynamic: using transactional mode.");
- break;
-
- /*
- * Concurrent mode. Lower safety (no rollback) -
- * higher speed.
- */
- case 'C':
- case 'c':
- bdbFlags = DB_INIT_CDB | DB_INIT_MPOOL;
- db->log(ISC_LOG_INFO,
- "bdbhpt_dynamic: using concurrent mode.");
- break;
-
- /*
- * Private mode. No inter-process communication & no locking.
- * Lowest saftey - highest speed.
- */
- case 'P':
- case 'p':
- bdbFlags = DB_PRIVATE | DB_INIT_MPOOL;
- db->log(ISC_LOG_INFO,
- "bdbhpt_dynamic: using private mode.");
- break;
- default:
- db->log(ISC_LOG_ERROR,
- "bdbhpt_dynamic: "
- "operating mode must be set to P or C or T. "
- "You specified '%s'", argv[1]);
- return (ISC_R_FAILURE);
- }
-
- /*
- * create bdbhpt environment
- * Basically bdbhpt allocates and assigns memory to db->dbenv
- */
- bdbhptres = db_env_create(&db->dbenv, 0);
- if (bdbhptres != 0) {
- db->log(ISC_LOG_ERROR,
- "bdbhpt_dynamic: db environment could not be created. "
- "BerkeleyDB error: %s", db_strerror(bdbhptres));
- result = ISC_R_FAILURE;
- goto init_cleanup;
- }
-
- /* open bdbhpt environment */
- bdbhptres = db->dbenv->open(db->dbenv, argv[2],
- bdbFlags | bdbhpt_threads | DB_CREATE, 0);
- if (bdbhptres != 0) {
- db->log(ISC_LOG_ERROR,
- "bdbhpt_dynamic: "
- "db environment at '%s' could not be opened. "
- "BerkeleyDB error: %s",
- argv[2], db_strerror(bdbhptres));
- result = ISC_R_FAILURE;
- goto init_cleanup;
- }
-
- /* open dlz_data database. */
- result = bdbhpt_opendb(db->log, db->dbenv, DB_UNKNOWN, &db->data,
- dlz_data, argv[3], DB_DUP | DB_DUPSORT);
- if (result != ISC_R_SUCCESS)
- goto init_cleanup;
-
- /* open dlz_xfr database. */
- result = bdbhpt_opendb(db->log, db->dbenv, DB_UNKNOWN, &db->xfr,
- dlz_xfr, argv[3], DB_DUP | DB_DUPSORT);
- if (result != ISC_R_SUCCESS)
- goto init_cleanup;
-
- /* open dlz_zone database. */
- result = bdbhpt_opendb(db->log, db->dbenv, DB_UNKNOWN, &db->zone,
- dlz_zone, argv[3], 0);
- if (result != ISC_R_SUCCESS)
- goto init_cleanup;
-
- /* open dlz_client database. */
- result = bdbhpt_opendb(db->log, db->dbenv, DB_UNKNOWN, &db->client,
- dlz_client, argv[3], DB_DUP | DB_DUPSORT);
- if (result != ISC_R_SUCCESS)
- goto init_cleanup;
-
- *dbdata = db;
-
- db->log(ISC_LOG_INFO,
- "bdbhpt_dynamic: version %s, started",
- dlz_bdbhpt_dynamic_version);
- return(ISC_R_SUCCESS);
-
- init_cleanup:
- bdbhpt_cleanup(db);
- return result;
-}
-
-/*
- * Shut down the backend
- */
-void
-dlz_destroy(void *dbdata) {
- struct bdbhpt_instance *db = (struct bdbhpt_instance *)dbdata;
-
- db->log(ISC_LOG_INFO,
- "dlz_bdbhpt_dynamic (%s): shutting down",
- dlz_bdbhpt_dynamic_version);
- bdbhpt_cleanup((bdbhpt_instance_t *) dbdata);
- free(db);
-}
-
-/*
- * Return the version of the API
- */
-int
-dlz_version(unsigned int *flags) {
- UNUSED(flags);
- return (DLZ_DLOPEN_VERSION);
-}
-
-/*
- * Register a helper function from the bind9 dlz_dlopen driver
- */
-static void
-b9_add_helper(struct bdbhpt_instance *db, const char *helper_name, void *ptr) {
- if (strcmp(helper_name, "log") == 0)
- db->log = (log_t *)ptr;
- if (strcmp(helper_name, "putrr") == 0)
- db->putrr = (dns_sdlz_putrr_t *)ptr;
- if (strcmp(helper_name, "putnamedrr") == 0)
- db->putnamedrr = (dns_sdlz_putnamedrr_t *)ptr;
- if (strcmp(helper_name, "writeable_zone") == 0)
- db->writeable_zone = (dns_dlz_writeablezone_t *)ptr;
-}
-
diff --git a/contrib/dlz/modules/bdbhpt/testing/README b/contrib/dlz/modules/bdbhpt/testing/README
deleted file mode 100644
index aec0935e..00000000
--- a/contrib/dlz/modules/bdbhpt/testing/README
+++ /dev/null
@@ -1,11 +0,0 @@
-These files were used for testing on Ubuntu Linux using BDB 5.1 and
-BerkeleyDB 0.54 for perl.
-
-- Populate the database from dns-data.txt for zone example.com:
-
- perl bdbhpt-populate.pl \
- --bdb=test.db --input=dns-data.txt --zones=example.com
-
-- Run "named -g -c named.conf"
-
-BDB server is now loaded with example.com data from the file test.db
diff --git a/contrib/dlz/modules/bdbhpt/testing/bdbhpt-populate.pl b/contrib/dlz/modules/bdbhpt/testing/bdbhpt-populate.pl
deleted file mode 100755
index 909976a2..00000000
--- a/contrib/dlz/modules/bdbhpt/testing/bdbhpt-populate.pl
+++ /dev/null
@@ -1,232 +0,0 @@
-#!/usr/bin/perl -w
-use strict;
-use BerkeleyDB;
-use Getopt::Long;
-
-my $opt = {};
-if (!GetOptions($opt, qw/bdb|b:s input|i:s zones|z:s help|h/)) {
- usage('GetOptions processing failed.');
- exit 1;
-}
-
-if ($opt->{help}) {
- usage();
- exit 0;
-}
-
-my $db_file = $opt->{bdb};
-if (!defined $db_file || $db_file eq '') {
- usage('Please specify an output BerkeleyDB filename.');
- exit 1;
-}
-
-my $input_file = $opt->{input};
-if (!defined $input_file || $input_file eq '') {
- usage('Please specify an input records file.');
- exit 1;
-}
-
-my $zone_list = $opt->{zones};
-if (!defined $zone_list || $zone_list eq '') {
- usage('Please specify a space seperated list of zones');
- exit 1;
-}
-
-my $records = [];
-my $unique_names = [];
-populate_records(records=>$records, input_file=>$input_file, unique_names=>$unique_names);
-
-my $flags = DB_CREATE;
-
-my $dns_data = new BerkeleyDB::Hash
- -Filename => $db_file,
- -Flags => $flags,
- -Property => DB_DUP | DB_DUPSORT,
- -Subname => "dns_data"
- || die "Cannot create dns_data: $BerkeleyDB::Error";
-
-my $replId = 0;
-my @zones = split(/\s+/, $zone_list);
-foreach my $zone (@zones) {
- foreach my $r (@$records) {
- my $name = $r->{name};
- my $ttl = $r->{ttl};
- my $type = $r->{type};
- my $data = $r->{data};
-
- $data =~ s/\%zone\%/$zone/g;
- $data =~ s/\%driver\%/bdbhpt-dynamic/g;
-
- my $row_name = "$zone $name";
- my $row_value = "$replId $name $ttl $type $data";
- if ($dns_data->db_put($row_name, $row_value) != 0) {
- die "Cannot add record '$row_name' -> '$row_value' to dns_data: $BerkeleyDB::Error";
- }
- $replId++;
- }
-}
-
-$dns_data->db_close();
-
-my $dns_xfr = new BerkeleyDB::Hash
- -Filename => $db_file,
- -Flags => $flags,
- -Property => DB_DUP | DB_DUPSORT,
- -Subname => "dns_xfr"
- or die "Cannot create dns_xfr: $BerkeleyDB::Error";
-
-foreach my $zone (@zones) {
- foreach my $name (@$unique_names) {
- if ($dns_xfr->db_put($zone, $name) != 0) {
- die "Cannot add record '$zone' -> '$name' to dns_xfr: $BerkeleyDB::Error";
- }
- }
-}
-
-$dns_xfr->db_close();
-
-my $dns_client = new BerkeleyDB::Hash
- -Filename => $db_file,
- -Flags => $flags,
- -Property => DB_DUP | DB_DUPSORT,
- -Subname => "dns_client"
- or die "Cannot create dns_client: $BerkeleyDB::Error";
-
-foreach my $zone (@zones) {
- my $ip = '127.0.0.1';
- if ($dns_client->db_put($zone, $ip) != 0) {
- die "Cannot add record '$zone' -> '$ip' to dns_client: $BerkeleyDB::Error";
- }
-}
-
-$dns_client->db_close();
-
-my $dns_zone = new BerkeleyDB::Btree
- -Filename => $db_file,
- -Flags => $flags,
- -Property => 0,
- -Subname => "dns_zone"
- or die "Cannot create dns_zone: $BerkeleyDB::Error";
-
-foreach my $zone (@zones) {
- my $reversed_zone = reverse($zone);
- if ($dns_zone->db_put($reversed_zone, "1") != 0) {
- die "Cannot add record '$reversed_zone' -> '1' to dns_zone: $BerkeleyDB::Error";
- }
-};
-
-$dns_zone->db_close();
-
-exit 0;
-
-sub usage {
- my ($message) = @_;
- if (defined $message && $message ne '') {
- print STDERR $message . "\n\n";
- }
-
- print STDERR "usage: $0 --bdb=<bdb-file> --input=<input-file> --zones=<zone-list>\n\n";
- print STDERR "\tbdb-file: The output BerkeleyDB file you wish to create and use with bdbhpt-dynamic\n\n";
- print STDERR "\tinput-file: The input text-file containing records to populate within your zones\n\n";
- print STDERR "\tzone-list: The space-seperated list of zones you wish to create\n\n";
-}
-
-sub populate_records {
- my (%args) = @_;
- my $records = $args{records};
- my $input_file = $args{input_file};
- my $unique_names = $args{unique_names};
-
- my %unique;
-
- open(RECORDS, $input_file) || die "unable to open $input_file: $!";
- while (<RECORDS>) {
- chomp;
- s/\#.*$//;
- s/^\s+//;
- if ($_ eq '') {
- next;
- }
- my ($name, $ttl, $type, $data) = split(/\s+/, $_, 4);
- my $record = { name=>$name, ttl=>$ttl, type=>$type, data=>$data };
- if (validate_record($record)) {
- push @$records, $record;
- $unique{$name} = 1;
- }
- }
- close(RECORDS);
-
- foreach my $name (sort keys %unique) {
- push @$unique_names, $name;
- }
-}
-
-# This could probably do more in-depth tests, but these tests are better than nothing!
-sub validate_record {
- my ($r) = @_;
-
- # http://en.wikipedia.org/wiki/List_of_DNS_record_types
- my @TYPES = qw/A AAAA AFSDB APL CERT CNAME DHCID DLV DNAME DNSKEY DS HIP IPSECKEY KEY KX LOC MX NAPTR NS NSEC NSEC3 NSEC3PARAM PTR RRSIG RP SIG SOA SPF SRV SSHFP TA TKEY TLSA TSIG TXT/;
- my $VALID_TYPE = {};
- foreach my $t (@TYPES) {
- $VALID_TYPE->{$t} = 1;
- }
-
- if (!defined $r->{name} || $r->{name} eq '') {
- die "Record name must be set";
- }
-
- if (!defined $r->{ttl} || $r->{ttl} eq '') {
- die "Record TTL must be set";
- }
-
- if ($r->{ttl} =~ /\D/ || $r->{ttl} < 0) {
- die "Record TTL must be an integer 0 or greater";
- }
-
- if (!defined $r->{type} || $r->{type} eq '') {
- die "Record type must be set";
- }
-
- if (!$VALID_TYPE->{$r->{type}}) {
- die "Unsupported record type: $r->{type}";
- }
-
- # Lets do some data validation for the records which will cause bind to crash if they're wrong
- if ($r->{type} eq 'SOA') {
- my $soa_error = "SOA records must take the form: 'server email refresh retry expire negative_cache_ttl'";
- my ($server, $email, $version, $refresh, $retry, $expire, $negative_cache_ttl) = split(/\s+/, $r->{data});
- if (!defined $server || $server eq '') {
- die "$soa_error, missing server";
- }
- if (!defined $email || $email eq '') {
- die "$soa_error, missing email";
- }
- if (!defined $refresh || $refresh eq '') {
- die "$soa_error, missing refresh";
- }
- if ($refresh =~ /\D/ || $refresh <= 0) {
- die "$soa_error, refresh must be an integer greater than 0";
- }
- if (!defined $retry || $retry eq '') {
- die "$soa_error, missing retry";
- }
- if ($retry =~ /\D/ || $retry <= 0) {
- die "$soa_error, retry must be an integer greater than 0";
- }
- if (!defined $expire || $expire eq '') {
- die "$soa_error, missing expire";
- }
- if ($expire =~ /\D/ || $expire <= 0) {
- die "$soa_error, expire must be an integer greater than 0";
- }
- if (!defined $negative_cache_ttl || $negative_cache_ttl eq '') {
- die "$soa_error, missing negative cache ttl";
- }
- if ($negative_cache_ttl =~ /\D/ || $negative_cache_ttl <= 0) {
- die "$soa_error, negative cache ttl must be an integer greater than 0";
- }
- }
-
- return 1;
-}
diff --git a/contrib/dlz/modules/bdbhpt/testing/dns-data.txt b/contrib/dlz/modules/bdbhpt/testing/dns-data.txt
deleted file mode 100644
index 242cd3d1..00000000
--- a/contrib/dlz/modules/bdbhpt/testing/dns-data.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-# Name TTL Type Data
-@ 3600 SOA ns1.%zone%. root.%zone%. 2012071700 604800 86400 2419200 10800
-@ 3600 NS ns1.%zone%.
-@ 3600 MX 5 mx1.%zone%.
-@ 3600 MX 10 mx2.%zone%.
-@ 3600 TXT This zone brought to you by %driver%!
-jabber 3600 A 127.0.0.1
-mx1 3600 A 127.0.0.2
-mx2 3600 A 127.0.0.3
-jabber 3600 A 127.0.0.4
-ns1 3600 A 127.0.0.5
-ns1 3600 AAAA ::1
-voip 3600 A 127.0.0.6
-www 3600 CNAME www1.%zone%
-www1 3600 A 127.0.0.7
-_sip._udp 3600 SRV 5 0 5060 voip.%zone%.
-_jabber._tcp 3600 SRV 5 0 5269 jabber.%zone%.
-_xmpp-client._tcp 3600 SRV 5 0 5222 jabber.%zone%.
-_xmpp-server._tcp 3600 SRV 5 0 5269 jabber.%zone%.
diff --git a/contrib/dlz/modules/bdbhpt/testing/named.conf b/contrib/dlz/modules/bdbhpt/testing/named.conf
deleted file mode 100644
index 584a1cf6..00000000
--- a/contrib/dlz/modules/bdbhpt/testing/named.conf
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-controls { };
-
-options {
- directory ".";
- port 5300;
- pid-file "named.pid";
- session-keyfile "session.key";
- listen-on { any; };
- listen-on-v6 { none; };
- recursion no;
-};
-
-key rndc_key {
- secret "1234abcd8765";
- algorithm hmac-md5;
-};
-
-controls {
- inet 127.0.0.1 port 9953 allow { any; } keys { rndc_key; };
-};
-
-dlz "bdbhpt_dynamic" {
- database "dlopen ../dlz_bdbhpt_dynamic.so T . test.db";
-};
diff --git a/contrib/dlz/modules/common/dlz_dbi.c b/contrib/dlz/modules/common/dlz_dbi.c
deleted file mode 100644
index 01d98218..00000000
--- a/contrib/dlz/modules/common/dlz_dbi.c
+++ /dev/null
@@ -1,482 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 1999-2001, 2013, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdarg.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <ctype.h>
-
-#include <sys/errno.h>
-
-#include <dlz_minimal.h>
-#include <dlz_list.h>
-#include <dlz_dbi.h>
-#include <dlz_pthread.h>
-
-/*%
- * properly destroys a querylist by de-allocating the
- * memory for each query segment, and then the list itself
- */
-
-void
-destroy_querylist(query_list_t **querylist) {
- query_segment_t *tseg = NULL;
- query_segment_t *nseg = NULL;
-
- /* if query list is null, nothing to do */
- if (*querylist == NULL)
- return;
-
- /* start at the top of the list */
- nseg = DLZ_LIST_HEAD(**querylist);
- while (nseg != NULL) { /* loop, until end of list */
- tseg = nseg;
- /*
- * free the query segment's text string but only if it
- * was really a query segment, and not a pointer to
- * %zone%, or %record%, or %client%
- */
- if (tseg->cmd != NULL && tseg->direct == ISC_TRUE)
- free(tseg->cmd);
- /* get the next query segment, before we destroy this one. */
- nseg = DLZ_LIST_NEXT(nseg, link);
- /* deallocate this query segment. */
- free(tseg);
- }
- /* deallocate the query segment list */
- free(*querylist);
-}
-
-/*% constructs a query list by parsing a string into query segments */
-isc_result_t
-build_querylist(const char *query_str, char **zone, char **record,
- char **client, query_list_t **querylist, unsigned int flags,
- log_t log)
-{
- isc_result_t result;
- isc_boolean_t foundzone = ISC_FALSE;
- isc_boolean_t foundrecord = ISC_FALSE;
- isc_boolean_t foundclient = ISC_FALSE;
- char *temp_str = NULL;
- char *right_str = NULL;
- query_list_t *tql;
- query_segment_t *tseg = NULL;
-
- /* if query string is null, or zero length */
- if (query_str == NULL || strlen(query_str) < 1) {
- if ((flags & REQUIRE_QUERY) == 0)
- /* we don't need it were ok. */
- return (ISC_R_SUCCESS);
- else
- /* we did need it, PROBLEM!!! */
- return (ISC_R_FAILURE);
- }
-
- /* allocate memory for query list */
- tql = calloc(1, sizeof(query_list_t));
- /* couldn't allocate memory. Problem!! */
- if (tql == NULL)
- return (ISC_R_NOMEMORY);
-
- /* initialize the query segment list */
- DLZ_LIST_INIT(*tql);
-
- /* make a copy of query_str so we can chop it up */
- temp_str = right_str = strdup(query_str);
- /* couldn't make a copy, problem!! */
- if (right_str == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
-
- /* loop through the string and chop it up */
- while (right_str != NULL) {
- /* allocate memory for tseg */
- tseg = calloc(1, sizeof(query_segment_t));
- if (tseg == NULL) { /* no memory, clean everything up. */
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- tseg->cmd = NULL;
- tseg->direct = ISC_FALSE;
- /* initialize the query segment link */
- DLZ_LINK_INIT(tseg, link);
- /* append the query segment to the list */
- DLZ_LIST_APPEND(*tql, tseg, link);
-
- /*
- * split string at the first "$". set query segment to
- * left portion
- */
- tseg->cmd = strdup(strsep(&right_str, "$"));
- if (tseg->cmd == NULL) {
- /* no memory, clean everything up. */
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- /* tseg->cmd points directly to a string. */
- tseg->direct = ISC_TRUE;
- tseg->strlen = strlen(tseg->cmd);
-
- /* check if we encountered "$zone$" token */
- if (strcasecmp(tseg->cmd, "zone") == 0) {
- /*
- * we don't really need, or want the "zone"
- * text, so get rid of it.
- */
- free(tseg->cmd);
- /* set tseg->cmd to in-direct zone string */
- tseg->cmd = (char**) zone;
- tseg->strlen = 0;
- /* tseg->cmd points in-directly to a string */
- tseg->direct = ISC_FALSE;
- foundzone = ISC_TRUE;
- /* check if we encountered "$record$" token */
- } else if (strcasecmp(tseg->cmd, "record") == 0) {
- /*
- * we don't really need, or want the "record"
- * text, so get rid of it.
- */
- free(tseg->cmd);
- /* set tseg->cmd to in-direct record string */
- tseg->cmd = (char**) record;
- tseg->strlen = 0;
- /* tseg->cmd points in-directly poinsts to a string */
- tseg->direct = ISC_FALSE;
- foundrecord = ISC_TRUE;
- /* check if we encountered "$client$" token */
- } else if (strcasecmp(tseg->cmd, "client") == 0) {
- /*
- * we don't really need, or want the "client"
- * text, so get rid of it.
- */
- free(tseg->cmd);
- /* set tseg->cmd to in-direct record string */
- tseg->cmd = (char**) client;
- tseg->strlen = 0;
- /* tseg->cmd points in-directly poinsts to a string */
- tseg->direct = ISC_FALSE;
- foundclient = ISC_TRUE;
- }
- }
-
- /* we don't need temp_str any more */
- free(temp_str);
- /*
- * add checks later to verify zone and record are found if
- * necessary.
- */
-
- /* if this query requires %client%, make sure we found it */
- if (((flags & REQUIRE_CLIENT) != 0) && (!foundclient) ) {
- /* Write error message to log */
- if (log != NULL)
- log(ISC_LOG_ERROR,
- "Required token $client$ not found.");
- result = ISC_R_FAILURE;
- goto flag_fail;
- }
-
- /* if this query requires %record%, make sure we found it */
- if (((flags & REQUIRE_RECORD) != 0) && (!foundrecord) ) {
- /* Write error message to log */
- if (log != NULL)
- log(ISC_LOG_ERROR,
- "Required token $record$ not found.");
- result = ISC_R_FAILURE;
- goto flag_fail;
- }
-
- /* if this query requires %zone%, make sure we found it */
- if (((flags & REQUIRE_ZONE) != 0) && (!foundzone) ) {
- /* Write error message to log */
- if (log != NULL)
- log(ISC_LOG_ERROR, "Required token $zone$ not found.");
- result = ISC_R_FAILURE;
- goto flag_fail;
- }
-
- /* pass back the query list */
- *querylist = (query_list_t *) tql;
-
- /* return success */
- return (ISC_R_SUCCESS);
-
- cleanup:
- /* get rid of temp_str */
- if (temp_str != NULL)
- free(temp_str);
-
- flag_fail:
- /* get rid of what was build of the query list */
- if (tql != NULL)
- destroy_querylist(&tql);
- return (result);
-}
-
-/*%
- * build a query string from query segments, and dynamic segments
- * dynamic segments replace where the tokens %zone%, %record%, %client%
- * used to be in our queries from named.conf
- */
-char *
-build_querystring(query_list_t *querylist) {
- query_segment_t *tseg = NULL;
- unsigned int length = 0;
- char *qs = NULL;
-
- /* start at the top of the list */
- tseg = DLZ_LIST_HEAD(*querylist);
- while (tseg != NULL) {
- /*
- * if this is a query segment, use the
- * precalculated string length
- */
- if (tseg->direct == ISC_TRUE)
- length += tseg->strlen;
- else /* calculate string length for dynamic segments. */
- length += strlen(* (char**) tseg->cmd);
- /* get the next segment */
- tseg = DLZ_LIST_NEXT(tseg, link);
- }
-
- qs = malloc(length + 1);
- if (qs == NULL)
- return (NULL);
-
- *qs = '\0';
- /* start at the top of the list again */
- tseg = DLZ_LIST_HEAD(*querylist);
- while (tseg != NULL) {
- if (tseg->direct == ISC_TRUE)
- /* query segments */
- strcat(qs, tseg->cmd);
- else
- /* dynamic segments */
- strcat(qs, * (char**) tseg->cmd);
- /* get the next segment */
- tseg = DLZ_LIST_NEXT(tseg, link);
- }
-
- return (qs);
-}
-
-/*% constructs a dbinstance (DBI) */
-isc_result_t
-build_dbinstance(const char *allnodes_str, const char *allowxfr_str,
- const char *authority_str, const char *findzone_str,
- const char *lookup_str, const char *countzone_str,
- dbinstance_t **dbi, log_t log)
-{
-
- isc_result_t result;
- dbinstance_t *db = NULL;
- int err;
-
- /* allocate and zero memory for driver structure */
- db = calloc(1, sizeof(dbinstance_t));
- if (db == NULL) {
- if (log != NULL)
- log(ISC_LOG_ERROR,
- "Could not allocate memory for "
- "database instance object.");
- return (ISC_R_NOMEMORY);
- }
- memset(db, 0, sizeof(dbinstance_t));
- db->dbconn = NULL;
- db->client = NULL;
- db->record = NULL;
- db->zone = NULL;
- db->query_buf = NULL;
- db->allnodes_q = NULL;
- db->allowxfr_q = NULL;
- db->authority_q = NULL;
- db->findzone_q = NULL;
- db->countzone_q = NULL;
- db->lookup_q = NULL;
-
- /* initialize the reference count mutex */
- err = dlz_mutex_init(&db->lock, NULL);
- if (err == ENOMEM) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- } else if (err != 0) {
- result = ISC_R_UNEXPECTED;
- goto cleanup;
- }
-
- /* build the all nodes query list */
- result = build_querylist(allnodes_str, &db->zone, &db->record,
- &db->client, &db->allnodes_q,
- REQUIRE_ZONE, log);
- /* if unsuccessful, log err msg and cleanup */
- if (result != ISC_R_SUCCESS) {
- if (log != NULL)
- log(ISC_LOG_ERROR,
- "Could not build all nodes query list");
- goto cleanup;
- }
-
- /* build the allow zone transfer query list */
- result = build_querylist(allowxfr_str, &db->zone, &db->record,
- &db->client, &db->allowxfr_q,
- REQUIRE_ZONE | REQUIRE_CLIENT,
- log);
- /* if unsuccessful, log err msg and cleanup */
- if (result != ISC_R_SUCCESS) {
- if (log != NULL)
- log(ISC_LOG_ERROR,
- "Could not build allow xfr query list");
- goto cleanup;
- }
-
- /* build the authority query, query list */
- result = build_querylist(authority_str, &db->zone, &db->record,
- &db->client, &db->authority_q,
- REQUIRE_ZONE, log);
- /* if unsuccessful, log err msg and cleanup */
- if (result != ISC_R_SUCCESS) {
- if (log != NULL)
- log(ISC_LOG_ERROR,
- "Could not build authority query list");
- goto cleanup;
- }
-
- /* build findzone query, query list */
- result = build_querylist(findzone_str, &db->zone, &db->record,
- &db->client, &db->findzone_q,
- REQUIRE_ZONE, log);
- /* if unsuccessful, log err msg and cleanup */
- if (result != ISC_R_SUCCESS) {
- if (log != NULL)
- log(ISC_LOG_ERROR,
- "Could not build find zone query list");
- goto cleanup;
- }
-
- /* build countzone query, query list */
- result = build_querylist(countzone_str, &db->zone, &db->record,
- &db->client, &db->countzone_q,
- REQUIRE_ZONE, log);
- /* if unsuccessful, log err msg and cleanup */
- if (result != ISC_R_SUCCESS) {
- if (log != NULL)
- log(ISC_LOG_ERROR,
- "Could not build count zone query list");
- goto cleanup;
- }
-
- /* build lookup query, query list */
- result = build_querylist(lookup_str, &db->zone, &db->record,
- &db->client, &db->lookup_q,
- REQUIRE_RECORD, log);
- /* if unsuccessful, log err msg and cleanup */
- if (result != ISC_R_SUCCESS) {
- if (log != NULL)
- log(ISC_LOG_ERROR,
- "Could not build lookup query list");
- goto cleanup;
- }
-
- /* pass back the db instance */
- *dbi = (dbinstance_t *) db;
-
- /* return success */
- return (ISC_R_SUCCESS);
-
- cleanup:
- /* destroy whatever was build of the db instance */
- destroy_dbinstance(db);
- /* return failure */
- return (ISC_R_FAILURE);
-}
-
-void
-destroy_dbinstance(dbinstance_t *dbi) {
- /* destroy any query lists we created */
- destroy_querylist(&dbi->allnodes_q);
- destroy_querylist(&dbi->allowxfr_q);
- destroy_querylist(&dbi->authority_q);
- destroy_querylist(&dbi->findzone_q);
- destroy_querylist(&dbi->countzone_q);
- destroy_querylist(&dbi->lookup_q);
-
- /* get rid of the mutex */
- (void) dlz_mutex_destroy(&dbi->lock);
-
- /* return, and detach the memory */
- free(dbi);
-}
-
-char *
-get_parameter_value(const char *input, const char* key) {
- int keylen;
- char *keystart;
- char value[255];
- int i;
-
- if (key == NULL || input == NULL || *input == '\0')
- return (NULL);
-
- keylen = strlen(key);
-
- if (keylen < 1)
- return (NULL);
-
- keystart = strstr(input, key);
-
- if (keystart == NULL)
- return (NULL);
-
- for (i = 0; i < 255; i++) {
- value[i] = keystart[keylen + i];
- if (isspace(value[i]) || value[i] == '\0') {
- value[i] = '\0';
- break;
- }
- }
-
- return (strdup(value));
-}
diff --git a/contrib/dlz/modules/filesystem/Makefile b/contrib/dlz/modules/filesystem/Makefile
deleted file mode 100644
index fd87ee89..00000000
--- a/contrib/dlz/modules/filesystem/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-prefix = /usr
-libdir = $(prefix)/lib/bind9
-
-CFLAGS=-fPIC -g -I../include
-
-all: dlz_filesystem_dynamic.so
-
-dir.o: dir.c
- $(CC) $(CFLAGS) -c dir.c
-
-dlz_filesystem_dynamic.so: dlz_filesystem_dynamic.c dir.o
- $(CC) $(CFLAGS) -shared -o dlz_filesystem_dynamic.so \
- dlz_filesystem_dynamic.c dir.o
-
-clean:
- rm -f dlz_filesystem_dynamic.so *.o
-
-install: dlz_filesystem_dynamic.so
- mkdir -p $(DESTDIR)$(libdir)
- install dlz_filesystem_dynamic.so $(DESTDIR)$(libdir)
diff --git a/contrib/dlz/modules/filesystem/dir.c b/contrib/dlz/modules/filesystem/dir.c
deleted file mode 100644
index e5f1ac4f..00000000
--- a/contrib/dlz/modules/filesystem/dir.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <ctype.h>
-#include <errno.h>
-#include <unistd.h>
-#include <string.h>
-
-#include "dlz_minimal.h"
-#include "dir.h"
-
-void
-dir_init(dir_t *dir) {
- dir->entry.name[0] = '\0';
- dir->entry.length = 0;
-
- dir->handle = NULL;
-}
-
-isc_result_t
-dir_open(dir_t *dir, const char *dirname) {
- char *p;
- isc_result_t result = ISC_R_SUCCESS;
-
- if (strlen(dirname) + 3 > sizeof(dir->dirname))
- return (ISC_R_NOSPACE);
- strcpy(dir->dirname, dirname);
-
- p = dir->dirname + strlen(dir->dirname);
- if (dir->dirname < p && *(p - 1) != '/')
- *p++ = '/';
- *p++ = '*';
- *p = '\0';
-
- dir->handle = opendir(dirname);
- if (dir->handle == NULL) {
- switch (errno) {
- case ENOTDIR:
- case ELOOP:
- case EINVAL:
- case ENAMETOOLONG:
- case EBADF:
- result = ISC_R_INVALIDFILE;
- case ENOENT:
- result = ISC_R_FILENOTFOUND;
- case EACCES:
- case EPERM:
- result = ISC_R_NOPERM;
- case ENOMEM:
- result = ISC_R_NOMEMORY;
- default:
- result = ISC_R_UNEXPECTED;
- }
- }
-
- return (result);
-}
-
-/*!
- * \brief Return previously retrieved file or get next one.
-
- * Unix's dirent has
- * separate open and read functions, but the Win32 and DOS interfaces open
- * the dir stream and reads the first file in one operation.
- */
-isc_result_t
-dir_read(dir_t *dir) {
- struct dirent *entry;
-
- entry = readdir(dir->handle);
- if (entry == NULL)
- return (ISC_R_NOMORE);
-
- if (sizeof(dir->entry.name) <= strlen(entry->d_name))
- return (ISC_R_UNEXPECTED);
-
- strcpy(dir->entry.name, entry->d_name);
-
- dir->entry.length = strlen(entry->d_name);
- return (ISC_R_SUCCESS);
-}
-
-/*!
- * \brief Close directory stream.
- */
-void
-dir_close(dir_t *dir) {
- (void)closedir(dir->handle);
- dir->handle = NULL;
-}
-
-/*!
- * \brief Reposition directory stream at start.
- */
-isc_result_t
-dir_reset(dir_t *dir) {
- rewinddir(dir->handle);
-
- return (ISC_R_SUCCESS);
-}
diff --git a/contrib/dlz/modules/filesystem/dir.h b/contrib/dlz/modules/filesystem/dir.h
deleted file mode 100644
index 66041fac..00000000
--- a/contrib/dlz/modules/filesystem/dir.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <sys/types.h>
-#include <dirent.h>
-
-#define DIR_NAMEMAX 256
-#define DIR_PATHMAX 1024
-
-typedef struct direntry {
- char name[DIR_NAMEMAX];
- unsigned int length;
-} direntry_t;
-
-typedef struct dir {
- char dirname[DIR_PATHMAX];
- direntry_t entry;
- DIR * handle;
-} dir_t;
-
-void
-dir_init(dir_t *dir);
-
-isc_result_t
-dir_open(dir_t *dir, const char *dirname);
-
-isc_result_t
-dir_read(dir_t *dir);
-
-isc_result_t
-dir_reset(dir_t *dir);
-
-void
-dir_close(dir_t *dir);
diff --git a/contrib/dlz/modules/filesystem/dlz_filesystem_dynamic.c b/contrib/dlz/modules/filesystem/dlz_filesystem_dynamic.c
deleted file mode 100644
index df486768..00000000
--- a/contrib/dlz/modules/filesystem/dlz_filesystem_dynamic.c
+++ /dev/null
@@ -1,976 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 1999-2001, 2013, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-/*
- * This provides the externally loadable filesystem DLZ module, without
- * update support
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdarg.h>
-#include <stdint.h>
-#include <stdlib.h>
-
-#include <sys/stat.h>
-
-#include "dlz_minimal.h"
-#include "dlz_list.h"
-#include "dir.h"
-
-typedef struct config_data {
- char *basedir;
- int basedirsize;
- char *datadir;
- int datadirsize;
- char *xfrdir;
- int xfrdirsize;
- int splitcnt;
- char separator;
- char pathsep;
-
- /* Helper functions from the dlz_dlopen driver */
- log_t *log;
- dns_sdlz_putrr_t *putrr;
- dns_sdlz_putnamedrr_t *putnamedrr;
- dns_dlz_writeablezone_t *writeable_zone;
-} config_data_t;
-
-typedef struct dir_entry dir_entry_t;
-
-struct dir_entry {
- char dirpath[DIR_PATHMAX];
- DLZ_LINK(dir_entry_t) link;
-};
-
-typedef DLZ_LIST(dir_entry_t) dlist_t;
-
-/* forward reference */
-
-static void
-b9_add_helper(struct config_data *cd, const char *helper_name, void *ptr);
-
-/*
- * Private methods
- */
-static isc_boolean_t
-is_safe(const char *input) {
- unsigned int i;
- unsigned int len = strlen(input);
-
- /* check that only allowed characters are in the domain name */
- for (i = 0; i < len; i++) {
- /* '.' is allowed, but has special requirements */
- if (input[i] == '.') {
- /* '.' is not allowed as first char */
- if (i == 0)
- return (ISC_FALSE);
- /* '..', two dots together is not allowed. */
- else if (input[i-1] == '.')
- return (ISC_FALSE);
- /* '.' is not allowed as last char */
- if (i == len)
- return (ISC_FALSE);
- /* only 1 dot in ok location, continue at next char */
- continue;
- }
- /* '-' is allowed, continue at next char */
- if (input[i] == '-')
- continue;
- /* 0-9 is allowed, continue at next char */
- if (input[i] >= '0' && input[i] <= '9')
- continue;
- /* A-Z uppercase is allowed, continue at next char */
- if (input[i] >= 'A' && input[i] <= 'Z')
- continue;
- /* a-z lowercase is allowed, continue at next char */
- if (input[i] >= 'a' && input[i] <= 'z')
- continue;
-
- /*
- * colon needs to be allowed for IPV6 client
- * addresses. Not dangerous in domain names, as not a
- * special char.
- */
- if (input[i] == ':')
- continue;
-
- /*
- * '@' needs to be allowed for in zone data. Not
- * dangerous in domain names, as not a special char.
- */
- if (input[i] == '@')
- continue;
-
- /*
- * if we reach this point we have encountered a
- * disallowed char!
- */
- return (ISC_FALSE);
- }
- /* everything ok. */
- return (ISC_TRUE);
-}
-
-static isc_result_t
-create_path_helper(char *out, const char *in, config_data_t *cd) {
- char *tmpString;
- char *tmpPtr;
- int i;
-
- tmpString = strdup(in);
- if (tmpString == NULL)
- return (ISC_R_NOMEMORY);
-
- /*
- * don't forget is_safe guarantees '.' will NOT be the
- * first/last char
- */
- while ((tmpPtr = strrchr(tmpString, '.')) != NULL) {
- i = 0;
- while (tmpPtr[i+1] != '\0') {
- if (cd->splitcnt < 1)
- strcat(out, (char *) &tmpPtr[i+1]);
- else
- strncat(out, (char *) &tmpPtr[i+1],
- cd->splitcnt);
- strncat(out, (char *) &cd->pathsep, 1);
- if (cd->splitcnt == 0)
- break;
- if (strlen((char *) &tmpPtr[i+1]) <=
- (unsigned int) cd->splitcnt)
- break;
- i += cd->splitcnt;
- }
- tmpPtr[0] = '\0';
- }
-
- /* handle the "first" label properly */
- i=0;
- tmpPtr = tmpString;
- while (tmpPtr[i] != '\0') {
- if (cd->splitcnt < 1)
- strcat(out, (char *) &tmpPtr[i]);
- else
- strncat(out, (char *) &tmpPtr[i], cd->splitcnt);
- strncat(out, (char *) &cd->pathsep, 1);
- if (cd->splitcnt == 0)
- break;
- if (strlen((char *) &tmpPtr[i]) <=
- (unsigned int) cd->splitcnt)
- break;
- i += cd->splitcnt;
- }
-
- free(tmpString);
- return (ISC_R_SUCCESS);
-}
-
-/*%
- * Checks to make sure zone and host are safe. If safe, then
- * hashes zone and host strings to build a path. If zone / host
- * are not safe an error is returned.
- */
-
-static isc_result_t
-create_path(const char *zone, const char *host, const char *client,
- config_data_t *cd, char **path)
-{
-
- char *tmpPath;
- int pathsize;
- int len;
- isc_result_t result;
- isc_boolean_t isroot = ISC_FALSE;
-
- /* special case for root zone */
- if (strcmp(zone, ".") == 0)
- isroot = ISC_TRUE;
-
- /* if the requested zone is "unsafe", return error */
- if (!isroot && !is_safe(zone))
- return (ISC_R_FAILURE);
-
- /* if host was passed, verify that it is safe */
- if (host != NULL && !is_safe(host))
- return (ISC_R_FAILURE);
-
- /* if client was passed, verify that it is safe */
- if (client != NULL && !is_safe(client))
- return (ISC_R_FAILURE);
-
- /* Determine how much memory the split up string will require */
- if (host != NULL)
- len = strlen(zone) + strlen(host);
- else if (client != NULL)
- len = strlen(zone) + strlen(client);
- else
- len = strlen(zone);
-
- /*
- * even though datadir and xfrdir will never be in the same
- * string we only waste a few bytes by allocating for both,
- * and then we are safe from buffer overruns.
- */
- pathsize = len + cd->basedirsize +
- cd->datadirsize + cd->xfrdirsize + 4;
-
- /* if we are splitting names, we will need extra space. */
- if (cd->splitcnt > 0)
- pathsize += len/cd->splitcnt;
-
- tmpPath = malloc(pathsize * sizeof(char));
- if (tmpPath == NULL) {
- /* write error message */
- cd->log(ISC_LOG_ERROR,
- "Filesystem driver unable to "
- "allocate memory in create_path().");
- result = ISC_R_NOMEMORY;
- goto cleanup_mem;
- }
-
- /*
- * build path string.
- * start out with base directory.
- */
- strcpy(tmpPath, cd->basedir);
-
- /* add zone name - parsed properly */
- if (!isroot) {
- result = create_path_helper(tmpPath, zone, cd);
- if (result != ISC_R_SUCCESS)
- goto cleanup_mem;
- }
-
- /*
- * When neither client or host is passed we are building a
- * path to see if a zone is supported. We require that a zone
- * path have the "data dir" directory contained within it so
- * that we know this zone is really supported. Otherwise,
- * this zone may not really be supported because we are
- * supporting a delagated sub zone.
- *
- * Example:
- *
- * We are supporting long.domain.com and using a splitcnt of
- * 0. the base dir is "/base-dir/" and the data dir is
- * "/.datadir" We want to see if we are authoritative for
- * domain.com. Path /base-dir/com/domain/.datadir since
- * /base-dir/com/domain/.datadir does not exist, we are not
- * authoritative for the domain "domain.com". However we are
- * authoritative for the domain "long.domain.com" because the
- * path /base-dir/com/domain/long/.datadir does exist!
- */
-
- /* if client is passed append xfr dir, otherwise append data dir */
- if (client != NULL) {
- strcat(tmpPath, cd->xfrdir);
- strncat(tmpPath, (char *) &cd->pathsep, 1);
- strcat(tmpPath, client);
- } else
- strcat(tmpPath, cd->datadir);
-
- /* if host not null, add it. */
- if (host != NULL) {
- strncat(tmpPath, (char *) &cd->pathsep, 1);
- result = create_path_helper(tmpPath, host, cd);
- if (result != ISC_R_SUCCESS)
- goto cleanup_mem;
- }
-
- /* return the path we built. */
- *path = tmpPath;
-
- /* return success */
- result = ISC_R_SUCCESS;
-
- cleanup_mem:
- /* cleanup memory */
-
- /* free tmpPath memory */
- if (tmpPath != NULL && result != ISC_R_SUCCESS)
- free(tmpPath);
-
- return (result);
-}
-
-static isc_result_t
-process_dir(dir_t *dir, void *passback, config_data_t *cd,
- dlist_t *dir_list, unsigned int basedirlen)
-{
-
- char tmp[DIR_PATHMAX + DIR_NAMEMAX];
- int astPos;
- struct stat sb;
- isc_result_t result = ISC_R_FAILURE;
- char *endp;
- char *type;
- char *ttlStr;
- char *data;
- char host[DIR_NAMEMAX];
- char *tmpString;
- char *tmpPtr;
- int ttl;
- int i;
- int len;
- dir_entry_t *direntry;
- isc_boolean_t foundHost;
-
- tmp[0] = '\0'; /* set 1st byte to '\0' so strcpy works right. */
- host[0] = '\0';
- foundHost = ISC_FALSE;
-
- /* copy base directory name to tmp. */
- strcpy(tmp, dir->dirname);
-
- /* dir->dirname will always have '*' as the last char. */
- astPos = strlen(dir->dirname) - 1;
-
- /* if dir_list != NULL, were are performing a zone xfr */
- if (dir_list != NULL) {
- /* if splitcnt == 0, determine host from path. */
- if (cd->splitcnt == 0) {
- if (strlen(tmp) - 3 > basedirlen) {
- tmp[astPos-1] = '\0';
- tmpString = (char *) &tmp[basedirlen+1];
- /* handle filesystem's special wildcard "-" */
- if (strcmp(tmpString, "-") == 0) {
- strcpy(host, "*");
- } else {
- /*
- * not special wildcard -- normal name
- */
- while ((tmpPtr = strrchr(tmpString,
- cd->pathsep))
- != NULL)
- {
- if ((strlen(host) +
- strlen(tmpPtr + 1) + 2)
- > DIR_NAMEMAX)
- continue;
- strcat(host, tmpPtr + 1);
- strcat(host, ".");
- tmpPtr[0] = '\0';
- }
- if ((strlen(host) +
- strlen(tmpString) + 1)
- <= DIR_NAMEMAX)
- strcat(host, tmpString);
- }
-
- foundHost = ISC_TRUE;
- /* set tmp again for use later */
- strcpy(tmp, dir->dirname);
- }
- } else {
- /*
- * if splitcnt != 0 determine host from
- * ".host" directory entry
- */
- while (dir_read(dir) == ISC_R_SUCCESS) {
- if (strncasecmp(".host",
- dir->entry.name, 5) == 0) {
- /*
- * handle filesystem's special
- * wildcard "-"
- */
- if (strcmp((char *) &dir->entry.name[6],
- "-") == 0)
- strcpy(host, "*");
- else {
- strncpy(host,
- (char *) &dir->entry.name[6],
- sizeof(host) - 1);
- host[255] = '\0';
- }
- foundHost = ISC_TRUE;
- break;
- }
- }
- /* reset dir list for use later */
- dir_reset(dir);
- } /* end of else */
- }
-
- while (dir_read(dir) == ISC_R_SUCCESS) {
- cd->log(ISC_LOG_DEBUG(1),
- "Filesystem driver Dir name:"
- " '%s' Dir entry: '%s'\n",
- dir->dirname, dir->entry.name);
-
- /* skip any entries starting with "." */
- if (dir->entry.name[0] == '.')
- continue;
-
- /*
- * get rid of '*', set to NULL. Effectively trims
- * string from previous loop to base directory only
- * while still leaving memory for concat to be
- * performed next.
- */
-
- tmp[astPos] = '\0';
-
- /* add name to base directory name. */
- strcat(tmp, dir->entry.name);
-
- /* make sure we can stat entry */
- if (stat(tmp, &sb) == 0 ) {
- /* if entry is a directory */
- if ((sb.st_mode & S_IFDIR) != 0) {
- /*
- * if dir list is NOT NULL, add dir to
- * dir list
- */
- if (dir_list != NULL) {
- direntry = malloc(sizeof(dir_entry_t));
- if (direntry == NULL)
- return (ISC_R_NOMEMORY);
- strcpy(direntry->dirpath, tmp);
- DLZ_LINK_INIT(direntry, link);
- DLZ_LIST_APPEND(*dir_list, direntry,
- link);
- result = ISC_R_SUCCESS;
- }
- continue;
-
- /*
- * if entry is a file be sure we do
- * not add entry to DNS results if we
- * are performing a zone xfr and we
- * could not find a host entry.
- */
-
- } else if (dir_list != NULL &&
- foundHost == ISC_FALSE) {
- continue;
- }
- } else /* if we cannot stat entry, skip it. */
- continue;
-
- type = dir->entry.name;
- ttlStr = strchr(type, cd->separator);
- if (ttlStr == NULL) {
- cd->log(ISC_LOG_ERROR,
- "Filesystem driver: "
- "%s could not be parsed properly", tmp);
- return (ISC_R_FAILURE);
- }
-
- /* replace separator char with NULL to split string */
- ttlStr[0] = '\0';
- /* start string after NULL of previous string */
- ttlStr = (char *) &ttlStr[1];
-
- data = strchr(ttlStr, cd->separator);
- if (data == NULL) {
- cd->log(ISC_LOG_ERROR,
- "Filesystem driver: "
- "%s could not be parsed properly", tmp);
- return (ISC_R_FAILURE);
- }
-
- /* replace separator char with NULL to split string */
- data[0] = '\0';
-
- /* start string after NULL of previous string */
- data = (char *) &data[1];
-
- /* replace all cd->separator chars with a space. */
- len = strlen(data);
-
- for (i=0; i < len; i++) {
- if (data[i] == cd->separator)
- data[i] = ' ';
- }
-
- /* convert text to int, make sure it worked right */
- ttl = strtol(ttlStr, &endp, 10);
- if (*endp != '\0' || ttl < 0)
- cd->log(ISC_LOG_ERROR,
- "Filesystem driver "
- "ttl must be a postive number");
-
- /* pass data back to Bind */
- if (dir_list == NULL)
- result = cd->putrr((dns_sdlzlookup_t *) passback,
- type, ttl, data);
- else
- result = cd->putnamedrr((dns_sdlzallnodes_t *) passback,
- (char *) host,
- type, ttl, data);
-
- /* if error, return error right away */
- if (result != ISC_R_SUCCESS)
- return (result);
- } /* end of while loop */
-
- return (result);
-}
-
-/*
- * DLZ methods
- */
-isc_result_t
-dlz_allowzonexfr(void *dbdata, const char *name, const char *client) {
- isc_result_t result;
- char *path;
- struct stat sb;
- config_data_t *cd;
- path = NULL;
-
- cd = (config_data_t *) dbdata;
-
- if (create_path(name, NULL, client, cd, &path) != ISC_R_SUCCESS) {
- return (ISC_R_NOTFOUND);
- }
-
- if (stat(path, &sb) != 0) {
- result = ISC_R_NOTFOUND;
- goto complete_AXFR;
- }
-
- if ((sb.st_mode & S_IFREG) != 0) {
- result = ISC_R_SUCCESS;
- goto complete_AXFR;
- }
-
- result = ISC_R_NOTFOUND;
-
- complete_AXFR:
- free(path);
- return (result);
-}
-
-isc_result_t
-dlz_allnodes(const char *zone, void *dbdata, dns_sdlzallnodes_t *allnodes) {
- isc_result_t result;
- dlist_t *dir_list;
- config_data_t *cd = (config_data_t *) dbdata;
- char *basepath;
- unsigned int basepathlen;
- struct stat sb;
- dir_t dir;
- dir_entry_t *dir_entry;
- dir_entry_t *next_de;
-
- basepath = NULL;
- dir_list = NULL;
-
- /* allocate memory for list */
- dir_list = malloc(sizeof(dlist_t));
- if (dir_list == NULL) {
- result = ISC_R_NOTFOUND;
- goto complete_allnds;
- }
-
- /* initialize list */
- DLZ_LIST_INIT(*dir_list);
-
- if (create_path(zone, NULL, NULL, cd, &basepath) != ISC_R_SUCCESS) {
- result = ISC_R_NOTFOUND;
- goto complete_allnds;
- }
-
- /* remove path separator at end of path so stat works properly */
- basepathlen = strlen(basepath);
-
- if (stat(basepath, &sb) != 0) {
- result = ISC_R_NOTFOUND;
- goto complete_allnds;
- }
-
- if ((sb.st_mode & S_IFDIR) == 0) {
- result = ISC_R_NOTFOUND;
- goto complete_allnds;
- }
-
- /* initialize and open directory */
- dir_init(&dir);
- result = dir_open(&dir, basepath);
-
- /* if directory open failed, return error. */
- if (result != ISC_R_SUCCESS) {
- cd->log(ISC_LOG_ERROR,
- "Unable to open %s directory to read entries.",
- basepath);
- result = ISC_R_FAILURE;
- goto complete_allnds;
- }
-
- /* process the directory */
- result = process_dir(&dir, allnodes, cd, dir_list, basepathlen);
-
- /* close the directory */
- dir_close(&dir);
-
- if (result != ISC_R_SUCCESS)
- goto complete_allnds;
-
- /* get first dir entry from list. */
- dir_entry = DLZ_LIST_HEAD(*dir_list);
- while (dir_entry != NULL) {
- result = dir_open(&dir, dir_entry->dirpath);
- /* if directory open failed, return error. */
- if (result != ISC_R_SUCCESS) {
- cd->log(ISC_LOG_ERROR,
- "Unable to open %s "
- "directory to read entries.", basepath);
- result = ISC_R_FAILURE;
- goto complete_allnds;
- }
-
- /* process the directory */
- result = process_dir(&dir, allnodes, cd, dir_list, basepathlen);
-
- /* close the directory */
- dir_close(&dir);
-
- if (result != ISC_R_SUCCESS)
- goto complete_allnds;
-
- dir_entry = DLZ_LIST_NEXT(dir_entry, link);
- } /* end while */
-
- complete_allnds:
- if (dir_list != NULL) {
- /* clean up entries from list. */
- dir_entry = DLZ_LIST_HEAD(*dir_list);
- while (dir_entry != NULL) {
- next_de = DLZ_LIST_NEXT(dir_entry, link);
- free(dir_entry);
- dir_entry = next_de;
- } /* end while */
- free(dir_list);
- }
-
- if (basepath != NULL)
- free(basepath);
-
- return (result);
-}
-
-#if DLZ_DLOPEN_VERSION < 3
-isc_result_t
-dlz_findzonedb(void *dbdata, const char *name)
-#else
-isc_result_t
-dlz_findzonedb(void *dbdata, const char *name,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-#endif
-{
-
- isc_result_t result;
- config_data_t *cd = (config_data_t *) dbdata;
- char *path;
- struct stat sb;
- path = NULL;
-
-#if DLZ_DLOPEN_VERSION >= 3
- UNUSED(methods);
- UNUSED(clientinfo);
-#endif
-
- if (create_path(name, NULL, NULL, cd, &path) != ISC_R_SUCCESS)
- return (ISC_R_NOTFOUND);
-
- cd->log(ISC_LOG_DEBUG(1),
- "Filesystem driver Findzone() Checking for path: '%s'\n", path);
-
- if (stat(path, &sb) != 0) {
- result = ISC_R_NOTFOUND;
- goto complete_FZ;
- }
-
- if ((sb.st_mode & S_IFDIR) != 0) {
- result = ISC_R_SUCCESS;
- goto complete_FZ;
- }
-
- result = ISC_R_NOTFOUND;
-
- complete_FZ:
-
- free(path);
- return (result);
-}
-
-#if DLZ_DLOPEN_VERSION == 1
-isc_result_t
-dlz_lookup(const char *zone, const char *name,
- void *dbdata, dns_sdlzlookup_t *lookup)
-#else
-isc_result_t
-dlz_lookup(const char *zone, const char *name,
- void *dbdata, dns_sdlzlookup_t *lookup,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-#endif
-{
- isc_result_t result = ISC_R_NOTFOUND;
- config_data_t *cd = (config_data_t *) dbdata;
- char *path;
- struct stat sb;
- dir_t dir;
- path = NULL;
-
- UNUSED(lookup);
-#if DLZ_DLOPEN_VERSION >= 2
- UNUSED(methods);
- UNUSED(clientinfo);
-#endif
-
- if (strcmp(name, "*") == 0)
- /*
- * handle filesystem's special wildcard "-"
- */
- result = create_path(zone, "-", NULL, cd, &path);
- else
- result = create_path(zone, name, NULL, cd, &path);
-
- if (result != ISC_R_SUCCESS)
- return (ISC_R_NOTFOUND);
-
- /* remove path separator at end of path so stat works properly */
- path[strlen(path)-1] = '\0';
-
- cd->log(ISC_LOG_DEBUG(1),
- "Filesystem driver lookup() Checking for path: '%s'\n", path);
-
- if (stat(path, &sb) != 0) {
- result = ISC_R_NOTFOUND;
- goto complete_lkup;
- }
-
- if ((sb.st_mode & S_IFDIR) == 0) {
- result = ISC_R_NOTFOUND;
- goto complete_lkup;
- }
-
- /* initialize and open directory */
- dir_init(&dir);
- result = dir_open(&dir, path);
-
- /* if directory open failed, return error. */
- if (result != ISC_R_SUCCESS) {
- cd->log(ISC_LOG_ERROR,
- "Unable to open %s directory to read entries.", path);
- result = ISC_R_FAILURE;
- goto complete_lkup;
- }
-
- /* process any records in the directory */
- result = process_dir(&dir, lookup, cd, NULL, 0);
-
- /* close the directory */
- dir_close(&dir);
-
- complete_lkup:
-
- free(path);
- return (result);
-}
-
-isc_result_t
-dlz_create(const char *dlzname, unsigned int argc, char *argv[],
- void **dbdata, ...)
-{
- isc_result_t result = ISC_R_NOMEMORY;
- config_data_t *cd;
- char *endp;
- int len;
- char pathsep;
- const char *helper_name;
- va_list ap;
-
- UNUSED(dlzname);
-
- /* allocate memory for our config data and helper functions */
- cd = calloc(1, sizeof(config_data_t));
- if (cd == NULL)
- goto no_mem;
-
- /* zero the memory */
- memset(cd, 0, sizeof(config_data_t));
-
- /* Fill in the helper functions */
- va_start(ap, dbdata);
- while ((helper_name = va_arg(ap, const char*)) != NULL)
- b9_add_helper(cd, helper_name, va_arg(ap, void*));
- va_end(ap);
-
- /* we require 5 command line args. */
- if (argc != 6) {
- cd->log(ISC_LOG_ERROR,
- "Filesystem driver requires "
- "6 command line args.");
- result = ISC_R_FAILURE;
- goto free_cd;
- }
-
- if (strlen(argv[5]) > 1) {
- cd->log(ISC_LOG_ERROR,
- "Filesystem driver can only "
- "accept a single character for separator.");
- result = ISC_R_FAILURE;
- goto free_cd;
- }
-
- /* verify base dir ends with '/' or '\' */
- len = strlen(argv[1]);
- if (argv[1][len-1] != '\\' && argv[1][len-1] != '/') {
- cd->log(ISC_LOG_ERROR,
- "Base dir parameter for filesystem driver "
- "should end with %s",
- "either '/' or '\\' ");
- result = ISC_R_FAILURE;
- goto free_cd;
- }
-
- /* determine and save path separator for later */
- if (argv[1][len-1] == '\\')
- pathsep = '\\';
- else
- pathsep = '/';
-
- cd->pathsep = pathsep;
-
- /* get and store our base directory */
- cd->basedir = strdup(argv[1]);
- if (cd->basedir == NULL)
- goto no_mem;
- cd->basedirsize = strlen(cd->basedir);
-
- /* get and store our data sub-dir */
- cd->datadir = strdup(argv[2]);
- if (cd->datadir == NULL)
- goto no_mem;
- cd->datadirsize = strlen(cd->datadir);
-
- /* get and store our zone xfr sub-dir */
- cd->xfrdir = strdup(argv[3]);
- if (cd->xfrdir == NULL)
- goto no_mem;
- cd->xfrdirsize = strlen(cd->xfrdir);
-
- /* get and store our directory split count */
- cd->splitcnt = strtol(argv[4], &endp, 10);
- if (*endp != '\0' || cd->splitcnt < 0)
- cd->log(ISC_LOG_ERROR,
- "Directory split count must be zero (0) "
- "or a postive number");
-
- /* get and store our separator character */
- cd->separator = *argv[5];
-
- /* pass back config data */
- *dbdata = cd;
-
- /* return success */
- return (ISC_R_SUCCESS);
-
- /* handle no memory error */
- no_mem:
-
- /* write error message */
- if (cd != NULL && cd->log != NULL)
- cd->log(ISC_LOG_ERROR,
- "filesystem_dynamic: Filesystem driver unable to "
- "allocate memory for config data.");
-
- free_cd:
- /* if we allocated a config data object clean it up */
- if (cd != NULL)
- dlz_destroy(cd);
-
- /* return error */
- return (result);
-}
-
-void
-dlz_destroy(void *dbdata) {
- config_data_t *cd;
-
- cd = (config_data_t *) dbdata;
-
- /*
- * free memory for each section of config data that was
- * allocated
- */
- if (cd->basedir != NULL)
- free(cd->basedir);
-
- if (cd->datadir != NULL)
- free(cd->datadir);
-
- if (cd->xfrdir != NULL)
- free(cd->xfrdir);
-
- /* free config data memory */
- free(cd);
-}
-
-/*
- * Return the version of the API
- */
-int
-dlz_version(unsigned int *flags) {
- UNUSED(flags);
- return (DLZ_DLOPEN_VERSION);
-}
-
-/*
- * Register a helper function from the bind9 dlz_dlopen driver
- */
-static void
-b9_add_helper(struct config_data *cd, const char *helper_name, void *ptr) {
- if (strcmp(helper_name, "log") == 0)
- cd->log = (log_t *)ptr;
- if (strcmp(helper_name, "putrr") == 0)
- cd->putrr = (dns_sdlz_putrr_t *)ptr;
- if (strcmp(helper_name, "putnamedrr") == 0)
- cd->putnamedrr = (dns_sdlz_putnamedrr_t *)ptr;
- if (strcmp(helper_name, "writeable_zone") == 0)
- cd->writeable_zone = (dns_dlz_writeablezone_t *)ptr;
-}
diff --git a/contrib/dlz/modules/include/dlz_dbi.h b/contrib/dlz/modules/include/dlz_dbi.h
deleted file mode 100644
index 5123927c..00000000
--- a/contrib/dlz/modules/include/dlz_dbi.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <dlz_minimal.h>
-#include <dlz_list.h>
-#include <dlz_pthread.h>
-
-#ifndef DLZ_DBI_H
-#define DLZ_DBI_H 1
-
-/*
- * Types
- */
-#define REQUIRE_CLIENT 0x01
-#define REQUIRE_QUERY 0x02
-#define REQUIRE_RECORD 0x04
-#define REQUIRE_ZONE 0x08
-
-typedef struct query_segment query_segment_t;
-typedef DLZ_LIST(query_segment_t) query_list_t;
-typedef struct dbinstance dbinstance_t;
-typedef DLZ_LIST(dbinstance_t) db_list_t;
-typedef struct driverinstance driverinstance_t;
-
-/*%
- * a query segment is all the text between our special tokens
- * special tokens are %zone%, %record%, %client%
- */
-struct query_segment {
- void *cmd;
- unsigned int strlen;
- isc_boolean_t direct;
- DLZ_LINK(query_segment_t) link;
-};
-
-/*%
- * a database instance contains everything we need for running
- * a query against the database. Using it each separate thread
- * can dynamically construct a query and execute it against the
- * database. The "instance_lock" and locking code in the driver's
- * make sure no two threads try to use the same DBI at a time.
- */
-struct dbinstance {
- void *dbconn;
- query_list_t *allnodes_q;
- query_list_t *allowxfr_q;
- query_list_t *authority_q;
- query_list_t *findzone_q;
- query_list_t *lookup_q;
- query_list_t *countzone_q;
- char *query_buf;
- char *zone;
- char *record;
- char *client;
- dlz_mutex_t lock;
- DLZ_LINK(dbinstance_t) link;
-};
-
-/*
- * Method declarations
- */
-
-void
-destroy_querylist(query_list_t **querylist);
-
-isc_result_t
-build_querylist(const char *query_str, char **zone, char **record,
- char **client, query_list_t **querylist, unsigned int flags,
- log_t log);
-
-char *
-build_querystring(query_list_t *querylist);
-
-isc_result_t
-build_dbinstance(const char *allnodes_str, const char *allowxfr_str,
- const char *authority_str, const char *findzone_str,
- const char *lookup_str, const char *countzone_str,
- dbinstance_t **dbi, log_t log);
-
-void
-destroy_dbinstance(dbinstance_t *dbi);
-
-char *
-get_parameter_value(const char *input, const char* key);
-
-#endif /* DLZ_DBI_H */
diff --git a/contrib/dlz/modules/include/dlz_list.h b/contrib/dlz/modules/include/dlz_list.h
deleted file mode 100644
index d236105f..00000000
--- a/contrib/dlz/modules/include/dlz_list.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 1997-2002, 2004, 2006, 2007, 2011-2013, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifndef DLZ_LIST_H
-#define DLZ_LIST_H 1
-
-#define DLZ_LIST(type) struct { type *head, *tail; }
-#define DLZ_LIST_INIT(list) \
- do { (list).head = NULL; (list).tail = NULL; } while (0)
-
-#define DLZ_LINK(type) struct { type *prev, *next; }
-#define DLZ_LINK_INIT(elt, link) \
- do { \
- (elt)->link.prev = (void *)(-1); \
- (elt)->link.next = (void *)(-1); \
- } while (0)
-
-#define DLZ_LIST_HEAD(list) ((list).head)
-#define DLZ_LIST_TAIL(list) ((list).tail)
-
-#define DLZ_LIST_APPEND(list, elt, link) \
- do { \
- if ((list).tail != NULL) \
- (list).tail->link.next = (elt); \
- else \
- (list).head = (elt); \
- (elt)->link.prev = (list).tail; \
- (elt)->link.next = NULL; \
- (list).tail = (elt); \
- } while (0)
-
-#define DLZ_LIST_PREV(elt, link) ((elt)->link.prev)
-#define DLZ_LIST_NEXT(elt, link) ((elt)->link.next)
-
-#endif /* DLZ_LIST_H */
diff --git a/contrib/dlz/modules/include/dlz_minimal.h b/contrib/dlz/modules/include/dlz_minimal.h
deleted file mode 100644
index e3d61832..00000000
--- a/contrib/dlz/modules/include/dlz_minimal.h
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- * Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This header provides a minimal set of defines and typedefs needed
- * for building an external DLZ module for bind9. When creating a new
- * external DLZ driver, please copy this header into your own source
- * tree.
- */
-
-#ifndef DLZ_MINIMAL_H
-#define DLZ_MINIMAL_H 1
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#ifdef ISC_PLATFORM_HAVESYSUNH
-#include <sys/un.h>
-#endif
-#include <net/if.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-typedef unsigned int isc_result_t;
-typedef int isc_boolean_t;
-typedef uint32_t dns_ttl_t;
-
-/*
- * Define DLZ_DLOPEN_VERSION to different values to use older versions
- * of the interface
- */
-#ifndef DLZ_DLOPEN_VERSION
-#define DLZ_DLOPEN_VERSION 3
-#define DLZ_DLOPEN_AGE 0
-#endif
-
-/* return these in flags from dlz_version() */
-#define DNS_SDLZFLAG_THREADSAFE 0x00000001U
-#define DNS_SDLZFLAG_RELATIVEOWNER 0x00000002U
-#define DNS_SDLZFLAG_RELATIVERDATA 0x00000004U
-
-/* result codes */
-#define ISC_R_SUCCESS 0
-#define ISC_R_NOMEMORY 1
-#define ISC_R_NOPERM 6
-#define ISC_R_NOSPACE 19
-#define ISC_R_NOTFOUND 23
-#define ISC_R_FAILURE 25
-#define ISC_R_NOTIMPLEMENTED 27
-#define ISC_R_NOMORE 29
-#define ISC_R_INVALIDFILE 30
-#define ISC_R_UNEXPECTED 34
-#define ISC_R_FILENOTFOUND 38
-
-/* boolean values */
-#define ISC_TRUE 1
-#define ISC_FALSE 0
-
-/* log levels */
-#define ISC_LOG_INFO (-1)
-#define ISC_LOG_NOTICE (-2)
-#define ISC_LOG_WARNING (-3)
-#define ISC_LOG_ERROR (-4)
-#define ISC_LOG_CRITICAL (-5)
-#define ISC_LOG_DEBUG(level) (level)
-
-/* other useful definitions */
-#define UNUSED(x) (void)(x)
-#define DE_CONST(konst, var) \
- do { \
- union { const void *k; void *v; } _u; \
- _u.k = konst; \
- var = _u.v; \
- } while (0)
-
-/* opaque structures */
-typedef void *dns_sdlzlookup_t;
-typedef void *dns_sdlzallnodes_t;
-typedef void *dns_view_t;
-typedef void *dns_dlzdb_t;
-
-#if DLZ_DLOPEN_VERSION > 1
-/*
- * Method and type definitions needed for retrieval of client info
- * from the caller.
- */
-typedef struct isc_sockaddr {
- union {
- struct sockaddr sa;
- struct sockaddr_in sin;
- struct sockaddr_in6 sin6;
-#ifdef ISC_PLATFORM_HAVESYSUNH
- struct sockaddr_un sunix;
-#endif
- } type;
- unsigned int length;
- void * link;
-} isc_sockaddr_t;
-
-#define DNS_CLIENTINFO_VERSION 2
-typedef struct dns_clientinfo {
- uint16_t version;
- void *data;
- void *dbversion;
-} dns_clientinfo_t;
-
-typedef isc_result_t (*dns_clientinfo_sourceip_t)(dns_clientinfo_t *client,
- isc_sockaddr_t **addrp);
-
-typedef isc_result_t (*dns_clientinfo_version_t)(dns_clientinfo_t *client,
- void **addrp);
-
-#define DNS_CLIENTINFOMETHODS_VERSION 2
-#define DNS_CLIENTINFOMETHODS_AGE 1
-typedef struct dns_clientinfomethods {
- uint16_t version;
- uint16_t age;
- dns_clientinfo_sourceip_t sourceip;
- dns_clientinfo_version_t dbversion;
-} dns_clientinfomethods_t;
-#endif /* DLZ_DLOPEN_VERSION > 1 */
-
-/*
- * Method definitions for callbacks provided by the dlopen driver
- */
-typedef void log_t(int level, const char *fmt, ...);
-
-typedef isc_result_t dns_sdlz_putrr_t(dns_sdlzlookup_t *lookup,
- const char *type,
- dns_ttl_t ttl,
- const char *data);
-
-typedef isc_result_t dns_sdlz_putnamedrr_t(dns_sdlzallnodes_t *allnodes,
- const char *name,
- const char *type,
- dns_ttl_t ttl,
- const char *data);
-
-#if DLZ_DLOPEN_VERSION < 3
-typedef isc_result_t dns_dlz_writeablezone_t(dns_view_t *view,
- const char *zone_name);
-#else /* DLZ_DLOPEN_VERSION >= 3 */
-typedef isc_result_t dns_dlz_writeablezone_t(dns_view_t *view,
- dns_dlzdb_t *dlzdb,
- const char *zone_name);
-#endif /* DLZ_DLOPEN_VERSION */
-
-/*
- * prototypes for the functions you can include in your module
- */
-
-/*
- * dlz_version() is required for all DLZ external drivers. It should
- * return DLZ_DLOPEN_VERSION. 'flags' is updated to indicate capabilities
- * of the module. In particular, if the module is thread-safe then it
- * sets 'flags' to include DNS_SDLZFLAG_THREADSAFE. Other capability
- * flags may be added in the future.
- */
-int
-dlz_version(unsigned int *flags);
-
-/*
- * dlz_create() is required for all DLZ external drivers.
- */
-isc_result_t
-dlz_create(const char *dlzname, unsigned int argc, char *argv[],
- void **dbdata, ...);
-
-/*
- * dlz_destroy() is optional, and will be called when the driver is
- * unloaded if supplied
- */
-void
-dlz_destroy(void *dbdata);
-
-/*
- * dlz_findzonedb is required for all DLZ external drivers
- */
-#if DLZ_DLOPEN_VERSION < 3
-isc_result_t
-dlz_findzonedb(void *dbdata, const char *name);
-#else /* DLZ_DLOPEN_VERSION >= 3 */
-isc_result_t
-dlz_findzonedb(void *dbdata, const char *name,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo);
-#endif /* DLZ_DLOPEN_VERSION */
-
-/*
- * dlz_lookup is required for all DLZ external drivers
- */
-#if DLZ_DLOPEN_VERSION == 1
-isc_result_t
-dlz_lookup(const char *zone, const char *name, void *dbdata,
- dns_sdlzlookup_t *lookup);
-#else /* DLZ_DLOPEN_VERSION > 1 */
-isc_result_t
-dlz_lookup(const char *zone, const char *name, void *dbdata,
- dns_sdlzlookup_t *lookup,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo);
-#endif /* DLZ_DLOPEN_VERSION */
-
-/*
- * dlz_authority() is optional if dlz_lookup() supplies
- * authority information (i.e., SOA, NS) for the dns record
- */
-isc_result_t
-dlz_authority(const char *zone, void *dbdata, dns_sdlzlookup_t *lookup);
-
-/*
- * dlz_allowzonexfr() is optional, and should be supplied if you want to
- * support zone transfers
- */
-isc_result_t
-dlz_allowzonexfr(void *dbdata, const char *name, const char *client);
-
-/*
- * dlz_allnodes() is optional, but must be supplied if supply a
- * dlz_allowzonexfr() function
- */
-isc_result_t
-dlz_allnodes(const char *zone, void *dbdata, dns_sdlzallnodes_t *allnodes);
-
-/*
- * dlz_newversion() is optional. It should be supplied if you want to
- * support dynamic updates.
- */
-isc_result_t
-dlz_newversion(const char *zone, void *dbdata, void **versionp);
-
-/*
- * dlz_closeversion() is optional, but must be supplied if you supply a
- * dlz_newversion() function
- */
-void
-dlz_closeversion(const char *zone, isc_boolean_t commit, void *dbdata,
- void **versionp);
-
-/*
- * dlz_configure() is optional, but must be supplied if you want to support
- * dynamic updates
- */
-#if DLZ_DLOPEN_VERSION < 3
-isc_result_t
-dlz_configure(dns_view_t *view, void *dbdata);
-#else /* DLZ_DLOPEN_VERSION >= 3 */
-isc_result_t
-dlz_configure(dns_view_t *view, dns_dlzdb_t *dlzdb, void *dbdata);
-#endif /* DLZ_DLOPEN_VERSION */
-
-/*
- * dlz_ssumatch() is optional, but must be supplied if you want to support
- * dynamic updates
- */
-isc_boolean_t
-dlz_ssumatch(const char *signer, const char *name, const char *tcpaddr,
- const char *type, const char *key, uint32_t keydatalen,
- uint8_t *keydata, void *dbdata);
-
-/*
- * dlz_addrdataset() is optional, but must be supplied if you want to
- * support dynamic updates
- */
-isc_result_t
-dlz_addrdataset(const char *name, const char *rdatastr, void *dbdata,
- void *version);
-
-/*
- * dlz_subrdataset() is optional, but must be supplied if you want to
- * support dynamic updates
- */
-isc_result_t
-dlz_subrdataset(const char *name, const char *rdatastr, void *dbdata,
- void *version);
-
-/*
- * dlz_delrdataset() is optional, but must be supplied if you want to
- * support dynamic updates
- */
-isc_result_t
-dlz_delrdataset(const char *name, const char *type, void *dbdata,
- void *version);
-
-#endif /* DLZ_MINIMAL_H */
diff --git a/contrib/dlz/modules/include/dlz_pthread.h b/contrib/dlz/modules/include/dlz_pthread.h
deleted file mode 100644
index 90d143e5..00000000
--- a/contrib/dlz/modules/include/dlz_pthread.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef DLZ_PTHREAD_H
-#define DLZ_PTHREAD_H 1
-
-#ifndef PTHREADS
-#define PTHREADS 1
-#endif
-
-#ifdef PTHREADS
-#include <pthread.h>
-#define dlz_mutex_t pthread_mutex_t
-#define dlz_mutex_init pthread_mutex_init
-#define dlz_mutex_destroy pthread_mutex_destroy
-#define dlz_mutex_lock pthread_mutex_lock
-#define dlz_mutex_trylock pthread_mutex_trylock
-#define dlz_mutex_unlock pthread_mutex_unlock
-#else /* !PTHREADS */
-#define dlz_mutex_t void
-#define dlz_mutex_init(a, b) (0)
-#define dlz_mutex_destroy(a) (0)
-#define dlz_mutex_lock(a) (0)
-#define dlz_mutex_trylock(a) (0)
-#define dlz_mutex_unlock(a) (0)
-#endif
-
-#endif /* DLZ_PTHREAD_H */
diff --git a/contrib/dlz/modules/ldap/Makefile b/contrib/dlz/modules/ldap/Makefile
deleted file mode 100644
index 8926abf8..00000000
--- a/contrib/dlz/modules/ldap/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-prefix = /usr
-libdir = $(prefix)/lib/bind9
-
-CFLAGS=-fPIC -g -I../include
-LDAP_LIBS=-lldap
-
-all: dlz_ldap_dynamic.so
-
-dlz_dbi.o: ../common/dlz_dbi.c
- $(CC) $(CFLAGS) -c ../common/dlz_dbi.c
-
-dlz_ldap_dynamic.so: dlz_ldap_dynamic.c dlz_dbi.o
- $(CC) $(CFLAGS) -shared -o dlz_ldap_dynamic.so \
- dlz_ldap_dynamic.c dlz_dbi.o $(LDAP_LIBS)
-
-clean:
- rm -f dlz_ldap_dynamic.so *.o
-
-install: dlz_ldap_dynamic.so
- mkdir -p $(DESTDIR)$(libdir)
- install dlz_ldap_dynamic.so $(DESTDIR)$(libdir)
diff --git a/contrib/dlz/modules/ldap/dlz_ldap_dynamic.c b/contrib/dlz/modules/ldap/dlz_ldap_dynamic.c
deleted file mode 100644
index 24259513..00000000
--- a/contrib/dlz/modules/ldap/dlz_ldap_dynamic.c
+++ /dev/null
@@ -1,1219 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for BIND 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 1999-2001, 2013, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-/*
- * This provides the externally loadable ldap DLZ module, without
- * update support
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdarg.h>
-#include <stdint.h>
-#include <stdlib.h>
-
-#include <dlz_minimal.h>
-#include <dlz_list.h>
-#include <dlz_dbi.h>
-#include <dlz_pthread.h>
-
-/*
- * Need older API functions from ldap.h.
- */
-#define LDAP_DEPRECATED 1
-
-#include <ldap.h>
-
-#define SIMPLE "simple"
-#define KRB41 "krb41"
-#define KRB42 "krb42"
-#define V2 "v2"
-#define V3 "v3"
-
-#define dbc_search_limit 30
-#define ALLNODES 1
-#define ALLOWXFR 2
-#define AUTHORITY 3
-#define FINDZONE 4
-#define LOOKUP 5
-
-/*%
- * Structure to hold everthing needed by this "instance" of the LDAP
- * driver remember, the driver code is only loaded once, but may have
- * many separate instances.
- */
-typedef struct {
-#if PTHREADS
- db_list_t *db; /*%< handle to a list of DB */
-#else
- dbinstance_t *db; /*%< handle to db */
-#endif
- int method; /*%< security authentication method */
- char *user; /*%< who is authenticating */
- char *cred; /*%< password for simple authentication method */
- int protocol; /*%< LDAP communication protocol version */
- char *hosts; /*%< LDAP server hosts */
-
- /* Helper functions from the dlz_dlopen driver */
- log_t *log;
- dns_sdlz_putrr_t *putrr;
- dns_sdlz_putnamedrr_t *putnamedrr;
- dns_dlz_writeablezone_t *writeable_zone;
-} ldap_instance_t;
-
-/* forward references */
-
-#if DLZ_DLOPEN_VERSION < 3
-isc_result_t
-dlz_findzonedb(void *dbdata, const char *name);
-#else
-isc_result_t
-dlz_findzonedb(void *dbdata, const char *name,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo);
-#endif
-
-void
-dlz_destroy(void *dbdata);
-
-static void
-b9_add_helper(ldap_instance_t *db, const char *helper_name, void *ptr);
-
-/*
- * Private methods
- */
-
-/*% checks that the LDAP URL parameters make sense */
-static isc_result_t
-ldap_checkURL(ldap_instance_t *db, char *URL, int attrCnt, const char *msg) {
- isc_result_t result = ISC_R_SUCCESS;
- int ldap_result;
- LDAPURLDesc *ldap_url = NULL;
-
- if (!ldap_is_ldap_url(URL)) {
- db->log(ISC_LOG_ERROR,
- "%s query is not a valid LDAP URL", msg);
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- ldap_result = ldap_url_parse(URL, &ldap_url);
- if (ldap_result != LDAP_SUCCESS || ldap_url == NULL) {
- db->log(ISC_LOG_ERROR, "parsing %s query failed", msg);
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- if (ldap_count_values(ldap_url->lud_attrs) < attrCnt) {
- db->log(ISC_LOG_ERROR,
- "%s query must specify at least "
- "%d attributes to return", msg, attrCnt);
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- if (ldap_url->lud_host != NULL) {
- db->log(ISC_LOG_ERROR,
- "%s query must not specify a host", msg);
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- if (ldap_url->lud_port != 389) {
- db->log(ISC_LOG_ERROR,
- "%s query must not specify a port", msg);
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- if (ldap_url->lud_dn == NULL || strlen (ldap_url->lud_dn) < 1) {
- db->log(ISC_LOG_ERROR,
- "%s query must specify a search base", msg);
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- if (ldap_url->lud_exts != NULL || ldap_url->lud_crit_exts != 0) {
- db->log(ISC_LOG_ERROR,
- "%s uses extensions. "
- "The driver does not support LDAP extensions.", msg);
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- cleanup:
- if (ldap_url != NULL)
- ldap_free_urldesc(ldap_url);
-
- return (result);
-}
-
-/*% Connects / reconnects to LDAP server */
-static isc_result_t
-ldap_connect(ldap_instance_t *dbi, dbinstance_t *dbc) {
- isc_result_t result;
- int ldap_result;
-
- /* if we have a connection, get ride of it. */
- if (dbc->dbconn != NULL) {
- ldap_unbind_s((LDAP *) dbc->dbconn);
- dbc->dbconn = NULL;
- }
-
- /* now connect / reconnect. */
-
- /* initialize. */
- dbc->dbconn = ldap_init(dbi->hosts, LDAP_PORT);
- if (dbc->dbconn == NULL)
- return (ISC_R_NOMEMORY);
-
- /* set protocol version. */
- ldap_result = ldap_set_option((LDAP *) dbc->dbconn,
- LDAP_OPT_PROTOCOL_VERSION,
- &(dbi->protocol));
- if (ldap_result != LDAP_SUCCESS) {
- result = ISC_R_NOPERM;
- goto cleanup;
- }
-
- /* "bind" to server. i.e. send username / pass */
- ldap_result = ldap_bind_s((LDAP *) dbc->dbconn, dbi->user,
- dbi->cred, dbi->method);
- if (ldap_result != LDAP_SUCCESS) {
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- return (ISC_R_SUCCESS);
-
- cleanup:
-
- /* cleanup if failure. */
- if (dbc->dbconn != NULL) {
- ldap_unbind_s((LDAP *) dbc->dbconn);
- dbc->dbconn = NULL;
- }
-
- return (result);
-}
-
-#if PTHREADS
-/*%
- * Properly cleans up a list of database instances.
- * This function is only used when the driver is compiled for
- * multithreaded operation.
- */
-static void
-ldap_destroy_dblist(db_list_t *dblist) {
- dbinstance_t *ndbi = NULL;
- dbinstance_t *dbi = NULL;
-
- /* get the first DBI in the list */
- ndbi = DLZ_LIST_HEAD(*dblist);
-
- /* loop through the list */
- while (ndbi != NULL) {
- dbi = ndbi;
- /* get the next DBI in the list */
- ndbi = DLZ_LIST_NEXT(dbi, link);
- /* release DB connection */
- if (dbi->dbconn != NULL)
- ldap_unbind_s((LDAP *) dbi->dbconn);
- /* release all memory that comprised a DBI */
- destroy_dbinstance(dbi);
- }
- /* release memory for the list structure */
- free(dblist);
-}
-
-/*%
- * Loops through the list of DB instances, attempting to lock
- * on the mutex. If successful, the DBI is reserved for use
- * and the thread can perform queries against the database.
- * If the lock fails, the next one in the list is tried.
- * looping continues until a lock is obtained, or until
- * the list has been searched dbc_search_limit times.
- * This function is only used when the driver is compiled for
- * multithreaded operation.
- */
-static dbinstance_t *
-ldap_find_avail_conn(ldap_instance_t *ldap) {
- dbinstance_t *dbi = NULL;
- dbinstance_t *head;
- int count = 0;
-
- /* get top of list */
- head = dbi = DLZ_LIST_HEAD(*ldap->db);
-
- /* loop through list */
- while (count < dbc_search_limit) {
- /* try to lock on the mutex */
- if (dlz_mutex_trylock(&dbi->lock) == 0)
- return (dbi); /* success, return the DBI for use. */
-
- /* not successful, keep trying */
- dbi = DLZ_LIST_NEXT(dbi, link);
-
- /* check to see if we have gone to the top of the list. */
- if (dbi == NULL) {
- count++;
- dbi = head;
- }
- }
-
- ldap->log(ISC_LOG_INFO,
- "LDAP driver unable to find available connection "
- "after searching %d times", count);
- return (NULL);
-}
-#endif /* PTHREADS */
-
-static isc_result_t
-ldap_process_results(ldap_instance_t *db, LDAP *dbc, LDAPMessage *msg,
- char **attrs, void *ptr, isc_boolean_t allnodes)
-{
- isc_result_t result = ISC_R_SUCCESS;
- int i = 0;
- int j;
- int len;
- char *attribute = NULL;
- LDAPMessage *entry;
- char *endp = NULL;
- char *host = NULL;
- char *type = NULL;
- char *data = NULL;
- char **vals = NULL;
- int ttl;
-
- /* get the first entry to process */
- entry = ldap_first_entry(dbc, msg);
- if (entry == NULL) {
- db->log(ISC_LOG_INFO, "LDAP no entries to process.");
- return (ISC_R_FAILURE);
- }
-
- /* loop through all entries returned */
- while (entry != NULL) {
- /* reset for this loop */
- ttl = 0;
- len = 0;
- i = 0;
- attribute = attrs[i];
-
- /* determine how much space we need for data string */
- for (j = 0; attrs[j] != NULL; j++) {
- /* get the list of values for this attribute. */
- vals = ldap_get_values(dbc, entry, attrs[j]);
- /* skip empty attributes. */
- if (vals == NULL || ldap_count_values(vals) < 1)
- continue;
- /*
- * we only use the first value. this driver
- * does not support multi-valued attributes.
- */
- len = len + strlen(vals[0]) + 1;
- /* free vals for next loop */
- ldap_value_free(vals);
- }
-
- /* allocate memory for data string */
- data = malloc(len + 1);
- if (data == NULL) {
- db->log(ISC_LOG_ERROR,
- "LDAP driver unable to allocate memory "
- "while processing results");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- /*
- * Make sure data is null termed at the beginning so
- * we can check if any data was stored to it later.
- */
- data[0] = '\0';
-
- /* reset j to re-use below */
- j = 0;
-
- /* loop through the attributes in the order specified. */
- while (attribute != NULL) {
- /* get the list of values for this attribute. */
- vals = ldap_get_values(dbc, entry, attribute);
-
- /* skip empty attributes. */
- if (vals == NULL || vals[0] == NULL) {
- /* increment attibute pointer */
- attribute = attrs[++i];
- /* start loop over */
- continue;
- }
-
- /*
- * j initially = 0. Increment j each time we
- * set a field that way next loop will set
- * next field.
- */
- switch (j) {
- case 0:
- j++;
- /*
- * convert text to int, make sure it
- * worked right
- */
- ttl = strtol(vals[0], &endp, 10);
- if (*endp != '\0' || ttl < 0) {
- db->log(ISC_LOG_ERROR,
- "LDAP driver ttl must "
- "be a postive number");
- goto cleanup;
- }
- break;
- case 1:
- j++;
- type = strdup(vals[0]);
- break;
- case 2:
- j++;
- if (allnodes)
- host = strdup(vals[0]);
- else
- strcpy(data, vals[0]);
- break;
- case 3:
- j++;
- if (allnodes)
- strcpy(data, vals[0]);
- else {
- strcat(data, " ");
- strcat(data, vals[0]);
- }
- break;
- default:
- strcat(data, " ");
- strcat(data, vals[0]);
- break;
- }
-
- /* free values */
- ldap_value_free(vals);
- vals = NULL;
-
- /* increment attibute pointer */
- attribute = attrs[++i];
- }
-
- if (type == NULL) {
- db->log(ISC_LOG_ERROR,
- "LDAP driver unable to retrieve DNS type");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- if (strlen(data) < 1) {
- db->log(ISC_LOG_ERROR,
- "LDAP driver unable to retrieve DNS data");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- if (allnodes && host != NULL) {
- dns_sdlzallnodes_t *an = (dns_sdlzallnodes_t *) ptr;
- if (strcasecmp(host, "~") == 0)
- result = db->putnamedrr(an, "*", type,
- ttl, data);
- else
- result = db->putnamedrr(an, host, type,
- ttl, data);
- if (result != ISC_R_SUCCESS)
- db->log(ISC_LOG_ERROR,
- "ldap_dynamic: putnamedrr failed "
- "for \"%s %s %u %s\" (%d)",
- host, type, ttl, data, result);
- } else {
- dns_sdlzlookup_t *lookup = (dns_sdlzlookup_t *) ptr;
- result = db->putrr(lookup, type, ttl, data);
- if (result != ISC_R_SUCCESS)
- db->log(ISC_LOG_ERROR,
- "ldap_dynamic: putrr failed "
- "for \"%s %u %s\" (%s)",
- type, ttl, data, result);
- }
-
- if (result != ISC_R_SUCCESS) {
- db->log(ISC_LOG_ERROR,
- "LDAP driver failed "
- "while sending data to BIND.");
- goto cleanup;
- }
-
- /* free memory for type, data and host for next loop */
- free(type);
- type = NULL;
-
- free(data);
- data = NULL;
-
- if (host != NULL) {
- free(host);
- host = NULL;
- }
-
- /* get the next entry to process */
- entry = ldap_next_entry(dbc, entry);
- }
-
- cleanup:
- /* de-allocate memory */
- if (vals != NULL)
- ldap_value_free(vals);
- if (host != NULL)
- free(host);
- if (type != NULL)
- free(type);
- if (data != NULL)
- free(data);
-
- return (result);
-}
-
-/*%
- * This function is the real core of the driver. Zone, record
- * and client strings are passed in (or NULL is passed if the
- * string is not available). The type of query we want to run
- * is indicated by the query flag, and the dbdata object is passed
- * passed in to. dbdata really holds either:
- * 1) a list of database instances (in multithreaded mode) OR
- * 2) a single database instance (in single threaded mode)
- * The function will construct the query and obtain an available
- * database instance (DBI). It will then run the query and hopefully
- * obtain a result set.
- */
-static isc_result_t
-ldap_get_results(const char *zone, const char *record,
- const char *client, unsigned int query,
- void *dbdata, void *ptr)
-{
- isc_result_t result;
- ldap_instance_t *db = (ldap_instance_t *)dbdata;
- dbinstance_t *dbi = NULL;
- char *querystring = NULL;
- LDAPURLDesc *ldap_url = NULL;
- int ldap_result = 0;
- LDAPMessage *ldap_msg = NULL;
- int i;
- int entries;
-
- /* get db instance / connection */
-#if PTHREADS
- /* find an available DBI from the list */
- dbi = ldap_find_avail_conn(db);
-#else /* PTHREADS */
- /*
- * only 1 DBI - no need to lock instance lock either
- * only 1 thread in the whole process, no possible contention.
- */
- dbi = (dbinstance_t *)(db->db);
-#endif /* PTHREADS */
-
- /* if DBI is null, can't do anything else */
- if (dbi == NULL)
- return (ISC_R_FAILURE);
-
- /* set fields */
- if (zone != NULL) {
- dbi->zone = strdup(zone);
- if (dbi->zone == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- } else
- dbi->zone = NULL;
-
- if (record != NULL) {
- dbi->record = strdup(record);
- if (dbi->record == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- } else
- dbi->record = NULL;
-
- if (client != NULL) {
- dbi->client = strdup(client);
- if (dbi->client == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- } else
- dbi->client = NULL;
-
-
- /* what type of query are we going to run? */
- switch (query) {
- case ALLNODES:
- /*
- * if the query was not passed in from the config file
- * then we can't run it. return not_implemented, so
- * it's like the code for that operation was never
- * built into the driver.... AHHH flexibility!!!
- */
- if (dbi->allnodes_q == NULL) {
- result = ISC_R_NOTIMPLEMENTED;
- goto cleanup;
- } else
- querystring = build_querystring(dbi->allnodes_q);
- break;
- case ALLOWXFR:
- /* same as comments as ALLNODES */
- if (dbi->allowxfr_q == NULL) {
- result = ISC_R_NOTIMPLEMENTED;
- goto cleanup;
- } else
- querystring = build_querystring(dbi->allowxfr_q);
- break;
- case AUTHORITY:
- /* same as comments as ALLNODES */
- if (dbi->authority_q == NULL) {
- result = ISC_R_NOTIMPLEMENTED;
- goto cleanup;
- } else
- querystring = build_querystring(dbi->authority_q);
- break;
- case FINDZONE:
- /* this is required. It's the whole point of DLZ! */
- if (dbi->findzone_q == NULL) {
- db->log(ISC_LOG_DEBUG(2),
- "No query specified for findzone. "
- "Findzone requires a query");
- result = ISC_R_FAILURE;
- goto cleanup;
- } else
- querystring = build_querystring(dbi->findzone_q);
- break;
- case LOOKUP:
- /* this is required. It's also a major point of DLZ! */
- if (dbi->lookup_q == NULL) {
- db->log(ISC_LOG_DEBUG(2),
- "No query specified for lookup. "
- "Lookup requires a query");
- result = ISC_R_FAILURE;
- goto cleanup;
- } else
- querystring = build_querystring(dbi->lookup_q);
- break;
- default:
- /*
- * this should never happen. If it does, the code is
- * screwed up!
- */
- db->log(ISC_LOG_ERROR,
- "Incorrect query flag passed to ldap_get_results");
- result = ISC_R_UNEXPECTED;
- goto cleanup;
- }
-
- /* if the querystring is null, Bummer, outta RAM. UPGRADE TIME!!! */
- if (querystring == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
-
- /*
- * output the full query string during debug so we can see
- * what lame error the query has.
- */
- db->log(ISC_LOG_DEBUG(1), "Query String: %s", querystring);
-
- /* break URL down into it's component parts, if error cleanup */
- ldap_result = ldap_url_parse(querystring, &ldap_url);
- if (ldap_result != LDAP_SUCCESS || ldap_url == NULL) {
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- for (i = 0; i < 3; i++) {
- /*
- * dbi->dbconn may be null if trying to reconnect on a
- * previous query failed.
- */
- if (dbi->dbconn == NULL) {
- db->log(ISC_LOG_INFO,
- "LDAP driver attempting to re-connect");
-
- result = ldap_connect((ldap_instance_t *) dbdata, dbi);
- if (result != ISC_R_SUCCESS) {
- result = ISC_R_FAILURE;
- continue;
- }
- }
-
- /* perform ldap search syncronously */
- ldap_result = ldap_search_s((LDAP *) dbi->dbconn,
- ldap_url->lud_dn,
- ldap_url->lud_scope,
- ldap_url->lud_filter,
- ldap_url->lud_attrs, 0, &ldap_msg);
-
- /*
- * check return code. No such object is ok, just
- * didn't find what we wanted
- */
- switch (ldap_result) {
- case LDAP_NO_SUCH_OBJECT:
- db->log(ISC_LOG_DEBUG(1),
- "No object found matching query requirements");
- result = ISC_R_NOTFOUND;
- goto cleanup;
- break;
- case LDAP_SUCCESS: /* on success do nothing */
- result = ISC_R_SUCCESS;
- i = 3;
- break;
- case LDAP_SERVER_DOWN:
- db->log(ISC_LOG_INFO,
- "LDAP driver attempting to re-connect");
- result = ldap_connect((ldap_instance_t *) dbdata, dbi);
- if (result != ISC_R_SUCCESS)
- result = ISC_R_FAILURE;
- break;
- default:
- /*
- * other errors not ok. Log error message and
- * get out
- */
- db->log(ISC_LOG_ERROR, "LDAP error: %s",
- ldap_err2string(ldap_result));
- result = ISC_R_FAILURE;
- goto cleanup;
- break;
- }
- }
-
- if (result != ISC_R_SUCCESS)
- goto cleanup;
-
- switch (query) {
- case ALLNODES:
- result = ldap_process_results(db, (LDAP *) dbi->dbconn,
- ldap_msg, ldap_url->lud_attrs,
- ptr, ISC_TRUE);
- break;
- case AUTHORITY:
- case LOOKUP:
- result = ldap_process_results(db, (LDAP *) dbi->dbconn,
- ldap_msg, ldap_url->lud_attrs,
- ptr, ISC_FALSE);
- break;
- case ALLOWXFR:
- entries = ldap_count_entries((LDAP *) dbi->dbconn, ldap_msg);
- if (entries == 0)
- result = ISC_R_NOPERM;
- else if (entries > 0)
- result = ISC_R_SUCCESS;
- else
- result = ISC_R_FAILURE;
- break;
- case FINDZONE:
- entries = ldap_count_entries((LDAP *) dbi->dbconn, ldap_msg);
- if (entries == 0)
- result = ISC_R_NOTFOUND;
- else if (entries > 0)
- result = ISC_R_SUCCESS;
- else
- result = ISC_R_FAILURE;
- break;
- default:
- /*
- * this should never happen. If it does, the code is
- * screwed up!
- */
- db->log(ISC_LOG_ERROR,
- "Incorrect query flag passed to ldap_get_results");
- result = ISC_R_UNEXPECTED;
- }
-
- cleanup:
- /* it's always good to cleanup after yourself */
-
- /* if we retrieved results, free them */
- if (ldap_msg != NULL)
- ldap_msgfree(ldap_msg);
-
- if (ldap_url != NULL)
- ldap_free_urldesc(ldap_url);
-
- /* cleanup */
- if (dbi->zone != NULL)
- free(dbi->zone);
- if (dbi->record != NULL)
- free(dbi->record);
- if (dbi->client != NULL)
- free(dbi->client);
- dbi->zone = dbi->record = dbi->client = NULL;
-
- /* release the lock so another thread can use this dbi */
- (void) dlz_mutex_unlock(&dbi->lock);
-
- /* release query string */
- if (querystring != NULL)
- free(querystring);
-
- /* return result */
- return (result);
-}
-
-/*
- * DLZ methods
- */
-isc_result_t
-dlz_allowzonexfr(void *dbdata, const char *name, const char *client) {
- isc_result_t result;
-
- /* check to see if we are authoritative for the zone first */
-#if DLZ_DLOPEN_VERSION < 3
- result = dlz_findzonedb(dbdata, name);
-#else
- result = dlz_findzonedb(dbdata, name, NULL, NULL);
-#endif
- if (result != ISC_R_SUCCESS) {
- return (result);
- }
-
- /* get all the zone data */
- result = ldap_get_results(name, NULL, client, ALLOWXFR, dbdata, NULL);
- return (result);
-}
-
-isc_result_t
-dlz_allnodes(const char *zone, void *dbdata, dns_sdlzallnodes_t *allnodes)
-{
- return (ldap_get_results(zone, NULL, NULL, ALLNODES, dbdata, allnodes));
-}
-
-isc_result_t
-dlz_authority(const char *zone, void *dbdata, dns_sdlzlookup_t *lookup) {
- return (ldap_get_results(zone, NULL, NULL, AUTHORITY, dbdata, lookup));
-}
-
-#if DLZ_DLOPEN_VERSION < 3
-isc_result_t
-dlz_findzonedb(void *dbdata, const char *name)
-#else
-isc_result_t
-dlz_findzonedb(void *dbdata, const char *name,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-#endif
-{
-#if DLZ_DLOPEN_VERSION >= 3
- UNUSED(methods);
- UNUSED(clientinfo);
-#endif
- return (ldap_get_results(name, NULL, NULL, FINDZONE, dbdata, NULL));
-}
-
-#if DLZ_DLOPEN_VERSION == 1
-isc_result_t dlz_lookup(const char *zone, const char *name,
- void *dbdata, dns_sdlzlookup_t *lookup)
-#else
-isc_result_t dlz_lookup(const char *zone, const char *name,
- void *dbdata, dns_sdlzlookup_t *lookup,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-#endif
-{
- isc_result_t result;
-
-#if DLZ_DLOPEN_VERSION >= 2
- UNUSED(methods);
- UNUSED(clientinfo);
-#endif
-
- if (strcmp(name, "*") == 0)
- result = ldap_get_results(zone, "~", NULL, LOOKUP,
- dbdata, lookup);
- else
- result = ldap_get_results(zone, name, NULL, LOOKUP,
- dbdata, lookup);
- return (result);
-}
-
-
-isc_result_t
-dlz_create(const char *dlzname, unsigned int argc, char *argv[],
- void **dbdata, ...)
-{
- isc_result_t result = ISC_R_FAILURE;
- ldap_instance_t *ldap = NULL;
- dbinstance_t *dbi = NULL;
- const char *helper_name;
- int protocol;
- int method;
-#if PTHREADS
- int dbcount;
- char *endp;
- int i;
-#endif /* PTHREADS */
- va_list ap;
-
- UNUSED(dlzname);
-
- /* allocate memory for LDAP instance */
- ldap = calloc(1, sizeof(ldap_instance_t));
- if (ldap == NULL)
- return (ISC_R_NOMEMORY);
- memset(ldap, 0, sizeof(ldap_instance_t));
-
- /* Fill in the helper functions */
- va_start(ap, dbdata);
- while ((helper_name = va_arg(ap, const char*)) != NULL)
- b9_add_helper(ldap, helper_name, va_arg(ap, void*));
- va_end(ap);
-
-#if PTHREADS
- /* if debugging, let user know we are multithreaded. */
- ldap->log(ISC_LOG_DEBUG(1), "LDAP driver running multithreaded");
-#else /* PTHREADS */
- /* if debugging, let user know we are single threaded. */
- ldap->log(ISC_LOG_DEBUG(1), "LDAP driver running single threaded");
-#endif /* PTHREADS */
-
- if (argc < 9) {
- ldap->log(ISC_LOG_ERROR,
- "LDAP driver requires at least "
- "8 command line args.");
- goto cleanup;
- }
-
- /* no more than 13 arg's should be passed to the driver */
- if (argc > 12) {
- ldap->log(ISC_LOG_ERROR,
- "LDAP driver cannot accept more than "
- "11 command line args.");
- goto cleanup;
- }
-
- /* determine protocol version. */
- if (strncasecmp(argv[2], V2, strlen(V2)) == 0)
- protocol = 2;
- else if (strncasecmp(argv[2], V3, strlen(V3)) == 0)
- protocol = 3;
- else {
- ldap->log(ISC_LOG_ERROR,
- "LDAP driver protocol must be either %s or %s",
- V2, V3);
- goto cleanup;
- }
-
- /* determine connection method. */
- if (strncasecmp(argv[3], SIMPLE, strlen(SIMPLE)) == 0)
- method = LDAP_AUTH_SIMPLE;
- else if (strncasecmp(argv[3], KRB41, strlen(KRB41)) == 0)
- method = LDAP_AUTH_KRBV41;
- else if (strncasecmp(argv[3], KRB42, strlen(KRB42)) == 0)
- method = LDAP_AUTH_KRBV42;
- else {
- ldap->log(ISC_LOG_ERROR,
- "LDAP driver authentication method must be "
- "one of %s, %s or %s", SIMPLE, KRB41, KRB42);
- goto cleanup;
- }
-
- /* multithreaded build can have multiple DB connections */
-#if PTHREADS
- /* check how many db connections we should create */
- dbcount = strtol(argv[1], &endp, 10);
- if (*endp != '\0' || dbcount < 0) {
- ldap->log(ISC_LOG_ERROR,
- "LDAP driver database connection count "
- "must be positive.");
- goto cleanup;
- }
-#endif
-
- /* check that LDAP URL parameters make sense */
- switch (argc) {
- case 12:
- result = ldap_checkURL(ldap, argv[11], 0,
- "allow zone transfer");
- if (result != ISC_R_SUCCESS)
- goto cleanup;
- case 11:
- result = ldap_checkURL(ldap, argv[10], 3, "all nodes");
- if (result != ISC_R_SUCCESS)
- goto cleanup;
- case 10:
- if (strlen(argv[9]) > 0) {
- result = ldap_checkURL(ldap, argv[9], 3, "authority");
- if (result != ISC_R_SUCCESS)
- goto cleanup;
- }
- case 9:
- result = ldap_checkURL(ldap, argv[8], 3, "lookup");
- if (result != ISC_R_SUCCESS)
- goto cleanup;
- result = ldap_checkURL(ldap, argv[7], 0, "find zone");
- if (result != ISC_R_SUCCESS)
- goto cleanup;
- break;
- default:
- /* not really needed, should shut up compiler. */
- result = ISC_R_FAILURE;
- }
-
- /* store info needed to automatically re-connect. */
- ldap->protocol = protocol;
- ldap->method = method;
- ldap->hosts = strdup(argv[6]);
- if (ldap->hosts == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- ldap->user = strdup(argv[4]);
- if (ldap->user == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- ldap->cred = strdup(argv[5]);
- if (ldap->cred == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
-
-#if PTHREADS
- /* allocate memory for database connection list */
- ldap->db = calloc(1, sizeof(db_list_t));
- if (ldap->db == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
-
- /* initialize DB connection list */
- DLZ_LIST_INIT(*(ldap->db));
-
- /*
- * create the appropriate number of database instances (DBI)
- * append each new DBI to the end of the list
- */
- for (i = 0; i < dbcount; i++) {
-#endif /* PTHREADS */
- /* how many queries were passed in from config file? */
- switch (argc) {
- case 9:
- result = build_dbinstance(NULL, NULL, NULL, argv[7],
- argv[8], NULL, &dbi,
- ldap->log);
- break;
- case 10:
- result = build_dbinstance(NULL, NULL, argv[9],
- argv[7], argv[8],
- NULL, &dbi, ldap->log);
- break;
- case 11:
- result = build_dbinstance(argv[10], NULL, argv[9],
- argv[7], argv[8],
- NULL, &dbi, ldap->log);
- break;
- case 12:
- result = build_dbinstance(argv[10], argv[11],
- argv[9], argv[7],
- argv[8], NULL, &dbi,
- ldap->log);
- break;
- default:
- /* not really needed, should shut up compiler. */
- result = ISC_R_FAILURE;
- }
-
- if (result == ISC_R_SUCCESS) {
- ldap->log(ISC_LOG_DEBUG(2),
- "LDAP driver created "
- "database instance object.");
- } else { /* unsuccessful?, log err msg and cleanup. */
- ldap->log(ISC_LOG_ERROR,
- "LDAP driver could not create "
- "database instance object.");
- goto cleanup;
- }
-
-#if PTHREADS
- /* when multithreaded, build a list of DBI's */
- DLZ_LINK_INIT(dbi, link);
- DLZ_LIST_APPEND(*(ldap->db), dbi, link);
-#else
- /*
- * when single threaded, hold onto the one connection
- * instance.
- */
- ldap->db = dbi;
-#endif
- /* attempt to connect */
- result = ldap_connect(ldap, dbi);
-
- /*
- * if db connection cannot be created, log err msg and
- * cleanup.
- */
- switch (result) {
- /* success, do nothing */
- case ISC_R_SUCCESS:
- break;
- /*
- * no memory means ldap_init could not
- * allocate memory
- */
- case ISC_R_NOMEMORY:
-#if PTHREADS
- ldap->log(ISC_LOG_ERROR,
- "LDAP driver could not allocate memory "
- "for connection number %u", i + 1);
-#else
- ldap->log(ISC_LOG_ERROR,
- "LDAP driver could not allocate memory "
- "for connection");
-#endif
- goto cleanup;
- /*
- * no perm means ldap_set_option could not set
- * protocol version
- */
- case ISC_R_NOPERM:
- ldap->log(ISC_LOG_ERROR,
- "LDAP driver could not "
- "set protocol version.");
- result = ISC_R_FAILURE;
- goto cleanup;
- /* failure means couldn't connect to ldap server */
- case ISC_R_FAILURE:
-#if PTHREADS
- ldap->log(ISC_LOG_ERROR,
- "LDAP driver could not bind "
- "connection number %u to server.", i + 1);
-#else
- ldap->log(ISC_LOG_ERROR,
- "LDAP driver could not "
- "bind connection to server.");
-#endif
- goto cleanup;
- /*
- * default should never happen. If it does,
- * major errors.
- */
- default:
- ldap->log(ISC_LOG_ERROR,
- "dlz_create() failed (%d)", result);
- result = ISC_R_UNEXPECTED;
- goto cleanup;
- }
-
-#if PTHREADS
- /* set DBI = null for next loop through. */
- dbi = NULL;
- }
-#endif /* PTHREADS */
-
- /* set dbdata to the ldap_instance we created. */
- *dbdata = ldap;
-
- return (ISC_R_SUCCESS);
-
- cleanup:
- dlz_destroy(ldap);
-
- return (result);
-}
-
-void
-dlz_destroy(void *dbdata) {
- if (dbdata != NULL) {
- ldap_instance_t *db = (ldap_instance_t *)dbdata;
-#if PTHREADS
- /* cleanup the list of DBI's */
- if (db->db != NULL)
- ldap_destroy_dblist((db_list_t *)(db->db));
-#else /* PTHREADS */
- if (db->db->dbconn != NULL)
- ldap_unbind_s((LDAP *)(db->db->dbconn));
-
- /* destroy single DB instance */
- destroy_dbinstance(db->db);
-#endif /* PTHREADS */
-
- if (db->hosts != NULL)
- free(db->hosts);
- if (db->user != NULL)
- free(db->user);
- if (db->cred != NULL)
- free(db->cred);
- free(dbdata);
- }
-}
-
-/*
- * Return the version of the API
- */
-int
-dlz_version(unsigned int *flags) {
- *flags |= DNS_SDLZFLAG_RELATIVERDATA;
-#if PTHREADS
- *flags |= DNS_SDLZFLAG_THREADSAFE;
-#else
- *flags &= ~DNS_SDLZFLAG_THREADSAFE;
-#endif
- return (DLZ_DLOPEN_VERSION);
-}
-
-/*
- * Register a helper function from the bind9 dlz_dlopen driver
- */
-static void
-b9_add_helper(ldap_instance_t *db, const char *helper_name, void *ptr) {
- if (strcmp(helper_name, "log") == 0)
- db->log = (log_t *)ptr;
- if (strcmp(helper_name, "putrr") == 0)
- db->putrr = (dns_sdlz_putrr_t *)ptr;
- if (strcmp(helper_name, "putnamedrr") == 0)
- db->putnamedrr = (dns_sdlz_putnamedrr_t *)ptr;
- if (strcmp(helper_name, "writeable_zone") == 0)
- db->writeable_zone = (dns_dlz_writeablezone_t *)ptr;
-}
diff --git a/contrib/dlz/modules/ldap/testing/README b/contrib/dlz/modules/ldap/testing/README
deleted file mode 100644
index 69b13819..00000000
--- a/contrib/dlz/modules/ldap/testing/README
+++ /dev/null
@@ -1,10 +0,0 @@
-These files were used for testing on Ubuntu Linux using OpenLDAP.
-
-- Move aside /etc/ldap/slapd.d
-- Move slapd.conf to /etc/ldap
-- Move dlz.schema to /etc/ldap/schema/dlz.schema
-- Run "/etc/init.d/slapd restart"
-- Run "ldapadd -x -f example.ldif -D 'cn=Manager,o=bind-dlz' -w secret"
-
-LDAP server is now loaded with example.com data from the file example.ldif
-
diff --git a/contrib/dlz/modules/ldap/testing/dlz.schema b/contrib/dlz/modules/ldap/testing/dlz.schema
deleted file mode 100644
index 6c79ab23..00000000
--- a/contrib/dlz/modules/ldap/testing/dlz.schema
+++ /dev/null
@@ -1,187 +0,0 @@
-#
-#
-# 1.3.6.1.4.1.18420.1.1.X is reserved for attribute types declared by the DLZ project.
-# 1.3.6.1.4.1.18420.1.2.X is reserved for object classes declared by the DLZ project.
-# 1.3.6.1.4.1.18420.1.3.X is reserved for PRIVATE extensions to the DLZ attribute
-# types and object classes that may be needed by end users
-# to add security, etc. Attributes and object classes using
-# this OID MUST NOT be published outside of an organization
-# except to offer them for consideration to become part of the
-# standard attributes and object classes published by the DLZ project.
-
-attributetype ( 1.3.6.1.4.1.18420.1.1.10
- NAME 'dlzZoneName'
- DESC 'DNS zone name - domain name not including host name'
- SUP name
- SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.4.1.18420.1.1.20
- NAME 'dlzHostName'
- DESC 'Host portion of a domain name'
- SUP name
- SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.4.1.18420.1.1.30
- NAME 'dlzData'
- DESC 'Data for the resource record'
- SUP name
- SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.4.1.18420.1.1.40
- NAME 'dlzType'
- DESC 'DNS record type - A, SOA, NS, MX, etc...'
- SUP name
- SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.4.1.18420.1.1.50
- NAME 'dlzSerial'
- DESC 'SOA record serial number'
- EQUALITY integerMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
- SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.4.1.18420.1.1.60
- NAME 'dlzRefresh'
- DESC 'SOA record refresh time in seconds'
- EQUALITY integerMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
- SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.4.1.18420.1.1.70
- NAME 'dlzRetry'
- DESC 'SOA retry time in seconds'
- EQUALITY integerMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
- SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.4.1.18420.1.1.80
- NAME 'dlzExpire'
- DESC 'SOA expire time in seconds'
- EQUALITY integerMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
- SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.4.1.18420.1.1.90
- NAME 'dlzMinimum'
- DESC 'SOA minimum time in seconds'
- EQUALITY integerMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
- SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.4.1.18420.1.1.100
- NAME 'dlzAdminEmail'
- DESC 'E-mail address of person responsible for this zone - @ should be replaced with . (period)'
- SUP name
- SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.4.1.18420.1.1.110
- NAME 'dlzPrimaryNS'
- DESC 'Primary name server for this zone - should be host name not IP address'
- SUP name
- SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.4.1.18420.1.1.120
- NAME 'dlzIPAddr'
- DESC 'IP address - IPV4 should be in dot notation xxx.xxx.xxx.xxx IPV6 should be in colon notation xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx'
- EQUALITY caseExactIA5Match
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{40}
- SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.4.1.18420.1.1.130
- NAME 'dlzCName'
- DESC 'DNS cname'
- SUP name
- SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.4.1.18420.1.1.140
- NAME 'dlzPreference'
- DESC 'DNS MX record preference. Lower numbers have higher preference'
- EQUALITY integerMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
- SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.4.1.18420.1.1.150
- NAME 'dlzTTL'
- DESC 'DNS time to live - how long this record can be cached by caching DNS servers'
- EQUALITY integerMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
- SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.4.1.18420.1.1.160
- NAME 'dlzRecordID'
- DESC 'Unique ID for each DLZ resource record'
- SUP name
- SINGLE-VALUE )
-
-#------------------------------------------------------------------------------
-# Object class definitions
-#------------------------------------------------------------------------------
-
-objectclass ( 1.3.6.1.4.1.18420.1.2.10
- NAME 'dlzZone'
- DESC 'Zone name portion of a domain name'
- SUP top STRUCTURAL
- MUST ( objectclass $ dlzZoneName ) )
-
-objectclass ( 1.3.6.1.4.1.18420.1.2.20
- NAME 'dlzHost'
- DESC 'Host name portion of a domain name'
- SUP top STRUCTURAL
- MUST ( objectclass $ dlzHostName ) )
-
-objectclass ( 1.3.6.1.4.1.18420.1.2.30
- NAME 'dlzAbstractRecord'
- DESC 'Data common to all DNS record types'
- SUP top ABSTRACT
- MUST ( objectclass $ dlzRecordID $ dlzHostName $ dlzType $ dlzTTL ) )
-
-objectclass ( 1.3.6.1.4.1.18420.1.2.40
- NAME 'dlzGenericRecord'
- DESC 'Generic DNS record - useful when a specific object class has not been defined for a DNS record'
- SUP dlzAbstractRecord STRUCTURAL
- MUST ( dlzData ) )
-
-objectclass ( 1.3.6.1.4.1.18420.1.2.50
- NAME 'dlzARecord'
- DESC 'DNS A record'
- SUP dlzAbstractrecord STRUCTURAL
- MUST ( dlzIPAddr ) )
-
-objectclass ( 1.3.6.1.4.1.18420.1.2.60
- NAME 'dlzNSRecord'
- DESC 'DNS NS record'
- SUP dlzGenericRecord STRUCTURAL )
-
-objectclass ( 1.3.6.1.4.1.18420.1.2.70
- NAME 'dlzMXRecord'
- DESC 'DNS MX record'
- SUP dlzGenericRecord STRUCTURAL
- MUST ( dlzPreference ) )
-
-objectclass ( 1.3.6.1.4.1.18420.1.2.80
- NAME 'dlzSOARecord'
- DESC 'DNS SOA record'
- SUP dlzAbstractRecord STRUCTURAL
- MUST ( dlzSerial $ dlzRefresh $ dlzRetry
- $ dlzExpire $ dlzMinimum $ dlzAdminEmail $ dlzPrimaryNS ) )
-
-objectclass ( 1.3.6.1.4.1.18420.1.2.90
- NAME 'dlzTextRecord'
- DESC 'Text data with spaces should be wrapped in double quotes'
- SUP dlzGenericRecord STRUCTURAL )
-
-objectclass ( 1.3.6.1.4.1.18420.1.2.100
- NAME 'dlzPTRRecord'
- DESC 'DNS PTR record'
- SUP dlzGenericRecord STRUCTURAL )
-
-objectclass ( 1.3.6.1.4.1.18420.1.2.110
- NAME 'dlzCNameRecord'
- DESC 'DNS CName record'
- SUP dlzGenericRecord STRUCTURAL )
-
-objectclass ( 1.3.6.1.4.1.18420.1.2.120
- NAME 'dlzXFR'
- DESC 'Host allowed to perform zone transfer'
- SUP top STRUCTURAL
- MUST ( objectclass $ dlzRecordID $ dlzIPAddr ) )
diff --git a/contrib/dlz/modules/ldap/testing/example.ldif b/contrib/dlz/modules/ldap/testing/example.ldif
deleted file mode 100644
index 8362b1e4..00000000
--- a/contrib/dlz/modules/ldap/testing/example.ldif
+++ /dev/null
@@ -1,168 +0,0 @@
-# server suffix - o=bind-dlz
-
-dn: o=bind-dlz
-objectclass: organization
-o: bind-dlz
-
-dn: ou=dns,o=bind-dlz
-objectclass: organizationalUnit
-ou: dns
-
-dn: dlzZoneName=example.com,ou=dns,o=bind-dlz
-objectclass: dlzZone
-dlzZoneName: example.com
-
-dn: dlzHostName=@,dlzZoneName=example.com,ou=dns,o=bind-dlz
-objectclass: dlzHost
-dlzHostName: @
-
-dn: dlzHostName=www,dlzZoneName=example.com,ou=dns,o=bind-dlz
-objectclass: dlzHost
-dlzHostName: www
-
-dn: dlzHostName=mail,dlzZoneName=example.com,ou=dns,o=bind-dlz
-objectclass: dlzHost
-dlzHostName: mail
-
-dn: dlzHostName=backup,dlzZoneName=example.com,ou=dns,o=bind-dlz
-objectclass: dlzHost
-dlzHostName: backup
-
-dn: dlzHostName=ns1,dlzZoneName=example.com,ou=dns,o=bind-dlz
-objectclass: dlzHost
-dlzHostName: ns1
-
-dn: dlzHostName=ns2,dlzZoneName=example.com,ou=dns,o=bind-dlz
-objectclass: dlzHost
-dlzHostName: ns2
-
-dn: dlzHostName=~,dlzZoneName=example.com,ou=dns,o=bind-dlz
-objectclass: dlzHost
-dlzHostName: ~
-
-dn: dlzRecordID=1,dlzHostName=@,dlzZoneName=example.com,ou=dns,o=bind-dlz
-objectclass: dlzGenericRecord
-dlzRecordID: 1
-dlzHostName: @
-dlzType: txt
-dlzData: "this is a text record"
-dlzTTL: 10
-
-dn: dlzRecordID=2,dlzHostName=www,dlzZoneName=example.com,ou=dns,o=bind-dlz
-objectclass: dlzARecord
-dlzRecordID: 2
-dlzHostName: www
-dlzType: a
-dlzIPAddr: 192.168.0.1
-dlzTTL: 10
-
-dn: dlzRecordID=3,dlzHostName=mail,dlzZoneName=example.com,ou=dns,o=bind-dlz
-objectclass: dlzARecord
-dlzRecordID: 3
-dlzHostName: mail
-dlzType: a
-dlzIPAddr: 192.168.0.2
-dlzTTL: 10
-
-dn: dlzRecordID=4,dlzHostName=backup,dlzZoneName=example.com,ou=dns,o=bind-dlz
-objectclass: dlzARecord
-dlzRecordID: 4
-dlzHostName: backup
-dlzType: a
-dlzIPAddr: 192.168.0.3
-dlzTTL: 10
-
-dn: dlzRecordID=5,dlzHostName=@,dlzZoneName=example.com,ou=dns,o=bind-dlz
-objectclass: dlzMXRecord
-dlzRecordID: 5
-dlzHostName: @
-dlzType: mx
-dlzData: mail
-dlzPreference: 20
-dlzTTL: 10
-
-dn: dlzRecordID=6,dlzHostName=@,dlzZoneName=example.com,ou=dns,o=bind-dlz
-objectclass: dlzMXRecord
-dlzRecordID: 6
-dlzHostName: @
-dlzType: mx
-dlzData: backup
-dlzPreference: 40
-dlzTTL: 10
-
-dn: dlzRecordID=7,dlzHostName=www,dlzZoneName=example.com,ou=dns,o=bind-dlz
-objectclass: dlzMXRecord
-dlzRecordID: 7
-dlzHostName: www
-dlzType: mx
-dlzData: backup
-dlzPreference: 40
-dlzTTL: 10
-
-dn: dlzRecordID=8,dlzHostName=www,dlzZoneName=example.com,ou=dns,o=bind-dlz
-objectclass: dlzMXRecord
-dlzRecordID: 8
-dlzHostName: www
-dlzType: mx
-dlzData: mail
-dlzPreference: 20
-dlzTTL: 10
-
-dn: dlzRecordID=9,dlzHostName=ns1,dlzZoneName=example.com,ou=dns,o=bind-dlz
-objectclass: dlzARecord
-dlzRecordID: 9
-dlzHostName: ns1
-dlzType: a
-dlzIPAddr: 192.168.0.4
-dlzTTL: 10
-
-dn: dlzRecordID=10,dlzHostName=ns2,dlzZoneName=example.com,ou=dns,o=bind-dlz
-objectclass: dlzARecord
-dlzRecordID: 10
-dlzHostName: ns2
-dlzType: a
-dlzIPAddr: 192.168.0.5
-dlzTTL: 10
-
-dn: dlzRecordID=11,dlzHostName=@,dlzZoneName=example.com,ou=dns,o=bind-dlz
-objectclass: dlzSOARecord
-dlzRecordID: 11
-dlzHostName: @
-dlzType: soa
-dlzSerial: 2
-dlzRefresh: 2800
-dlzRetry: 7200
-dlzExpire: 604800
-dlzMinimum: 86400
-dlzAdminEmail: root.example.com.
-dlzPrimaryns: ns1.example.com.
-dlzTTL: 10
-
-dn: dlzRecordID=12,dlzHostName=@,dlzZoneName=example.com,ou=dns,o=bind-dlz
-objectclass: dlzNSRecord
-dlzRecordID: 12
-dlzHostName: @
-dlzType: ns
-dlzData: ns1.example.com.
-dlzTTL: 10
-
-dn: dlzRecordID=13,dlzHostName=@,dlzZoneName=example.com,ou=dns,o=bind-dlz
-objectclass: dlzNSRecord
-dlzRecordID: 13
-dlzHostName: @
-dlzType: ns
-dlzData: ns2
-dlzTTL: 10
-
-dn: dlzRecordID=14,dlzHostName=~,dlzZoneName=example.com,ou=dns,o=bind-dlz
-objectclass: dlzARecord
-dlzRecordID: 14
-dlzHostName: ~
-dlzType: a
-dlzIPAddr: 192.168.0.250
-dlzTTL: 10
-
-dn: dlzRecordID=15,dlzZoneName=example.com,ou=dns,o=bind-dlz
-objectclass: dlzXFR
-dlzRecordID: 15
-dlzIPAddr: 127.0.0.1
diff --git a/contrib/dlz/modules/ldap/testing/named.conf b/contrib/dlz/modules/ldap/testing/named.conf
deleted file mode 100644
index e79a02e4..00000000
--- a/contrib/dlz/modules/ldap/testing/named.conf
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-controls { };
-
-options {
- directory ".";
- port 5300;
- pid-file "named.pid";
- session-keyfile "session.key";
- listen-on { any; };
- listen-on-v6 { none; };
- recursion no;
-};
-
-key rndc_key {
- secret "1234abcd8765";
- algorithm hmac-md5;
-};
-
-controls {
- inet 127.0.0.1 port 9953 allow { any; } keys { rndc_key; };
-};
-
-dlz "test" {
- database "dlopen ../dlz_ldap_dynamic.so 2
- v3 simple {cn=Manager,o=bind-dlz} {secret} {127.0.0.1}
- ldap:///dlzZoneName=$zone$,ou=dns,o=bind-dlz???objectclass=dlzZone
- ldap:///dlzHostName=$record$,dlzZoneName=$zone$,ou=dns,o=bind-dlz?dlzTTL,dlzType,dlzPreference,dlzData,dlzIPAddr?sub?(&(objectclass=dlzAbstractRecord)(!(dlzType=soa)))
- ldap:///dlzHostName=@,dlzZoneName=$zone$,ou=dns,o=bind-dlz?dlzTTL,dlzType,dlzData,dlzPrimaryNS,dlzAdminEmail,dlzSerial,dlzRefresh,dlzRetry,dlzExpire,dlzMinimum?sub?(&(objectclass=dlzAbstractRecord)(dlzType=soa))
- ldap:///dlzZoneName=$zone$,ou=dns,o=bind-dlz?dlzTTL,dlzType,dlzHostName,dlzPreference,dlzData,dlzIPAddr,dlzPrimaryNS,dlzAdminEmail,dlzSerial,dlzRefresh,dlzRetry,dlzExpire,dlzMinimum?sub?(&(objectclass=dlzAbstractRecord)(!(dlzType=soa)))
- ldap:///dlzZoneName=$zone$,ou=dns,o=bind-dlz??sub?(&(objectclass=dlzXFR)(dlzIPAddr=$client$))";
-};
diff --git a/contrib/dlz/modules/ldap/testing/slapd.conf b/contrib/dlz/modules/ldap/testing/slapd.conf
deleted file mode 100644
index 14c8ffb0..00000000
--- a/contrib/dlz/modules/ldap/testing/slapd.conf
+++ /dev/null
@@ -1,44 +0,0 @@
-# this is the full path to the core.schema
-include /etc/ldap/schema/core.schema
-
-# this is the full path to the dlz.schema
-include /etc/ldap/schema/dlz.schema
-
-# these files hold the slapd process ID and program args when
-# slapd is started.
-pidfile /var/run/slapd/slapd.pid
-argsfile /var/run/slapd/slapd.args
-
-modulepath /usr/lib/ldap
-moduleload back_hdb
-
-# this allows ldap version 2 connections. You should comment
-# it out if you don't need ldap version 2.
-allow bind_v2
-
-# this sets up the Berkeley DB database backend for LDAP to use.
-database hdb
-
-# This is the root of the LDAP server. You still need to add
-# an entry to this location via a LDIF file, or you won't be
-# able to add anything else into the LDAP server.
-suffix "o=bind-dlz"
-
-# this is the "username" you have to use when connecting to the
-# ldap server to make updates. Type the whole thing exactly
-# as you see it as a parameter to ldapadd.
-rootdn "cn=Manager,o=bind-dlz"
-
-# this is the "password" you have to use when connecting to the
-# ldap server to make updates.
-rootpw secret
-
-# this is the directory that the LDAP server will create the
-# Berkeley DB backend in.
-directory /var/lib/ldap
-
-# this just adds some indexing to the LDAP server.
-# probably should have more to better optimize DLZ LDAP searches.
-index cn,sn,uid pres,eq
-index objectClass eq
-
diff --git a/contrib/dlz/modules/mysql/Makefile b/contrib/dlz/modules/mysql/Makefile
deleted file mode 100644
index ad3876c0..00000000
--- a/contrib/dlz/modules/mysql/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-prefix = /usr
-libdir = $(prefix)/lib/bind9
-
-CFLAGS=-fPIC -g -I../include
-MYSQL_LIBS=-lmysqlclient
-
-all: dlz_mysql_dynamic.so
-
-dlz_dbi.o: ../common/dlz_dbi.c
- $(CC) $(CFLAGS) -c ../common/dlz_dbi.c
-
-dlz_mysql_dynamic.so: dlz_mysql_dynamic.c dlz_dbi.o
- $(CC) $(CFLAGS) -shared -o dlz_mysql_dynamic.so \
- dlz_mysql_dynamic.c dlz_dbi.o $(MYSQL_LIBS)
-
-clean:
- rm -f dlz_mysql_dynamic.so *.o
-
-install: dlz_mysql_dynamic.so
- mkdir -p $(DESTDIR)$(libdir)
- install dlz_mysql_dynamic.so $(DESTDIR)$(libdir)
diff --git a/contrib/dlz/modules/mysql/dlz_mysql_dynamic.c b/contrib/dlz/modules/mysql/dlz_mysql_dynamic.c
deleted file mode 100644
index 974f94b1..00000000
--- a/contrib/dlz/modules/mysql/dlz_mysql_dynamic.c
+++ /dev/null
@@ -1,1105 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for BIND 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 1999-2001, 2013, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-/*
- * This provides the externally loadable MySQL DLZ module, without
- * update support
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdarg.h>
-#include <stdint.h>
-#include <stdlib.h>
-
-#include <dlz_minimal.h>
-#include <dlz_list.h>
-#include <dlz_dbi.h>
-#include <dlz_pthread.h>
-
-#include <mysql/mysql.h>
-
-#define dbc_search_limit 30
-#define ALLNODES 1
-#define ALLOWXFR 2
-#define AUTHORITY 3
-#define FINDZONE 4
-#define COUNTZONE 5
-#define LOOKUP 6
-
-#define safeGet(in) in == NULL ? "" : in
-
-/*%
- * Structure to hold everthing needed by this "instance" of the MySQL
- * module remember, the module code is only loaded once, but may have
- * many separate instances.
- */
-typedef struct {
-#if PTHREADS
- db_list_t *db; /*%< handle to a list of DB */
- int dbcount;
-#else
- dbinstance_t *db; /*%< handle to DB */
-#endif
-
- unsigned int flags;
- char *dbname;
- char *host;
- char *user;
- char *pass;
- char *socket;
- int port;
-
- /* Helper functions from the dlz_dlopen driver */
- log_t *log;
- dns_sdlz_putrr_t *putrr;
- dns_sdlz_putnamedrr_t *putnamedrr;
- dns_dlz_writeablezone_t *writeable_zone;
-} mysql_instance_t;
-
-/* forward references */
-isc_result_t
-dlz_findzonedb(void *dbdata, const char *name,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo);
-
-void
-dlz_destroy(void *dbdata);
-
-static void
-b9_add_helper(mysql_instance_t *db, const char *helper_name, void *ptr);
-
-/*
- * Private methods
- */
-
-void
-mysql_destroy(dbinstance_t *db) {
- /* release DB connection */
- if (db->dbconn != NULL)
- mysql_close((MYSQL *) db->dbconn);
-
- /* destroy DB instance */
- destroy_dbinstance(db);
-}
-
-#if PTHREADS
-/*%
- * Properly cleans up a list of database instances.
- * This function is only used when the module is compiled for
- * multithreaded operation.
- */
-static void
-mysql_destroy_dblist(db_list_t *dblist) {
- dbinstance_t *ndbi = NULL;
- dbinstance_t *dbi = NULL;
-
- ndbi = DLZ_LIST_HEAD(*dblist);
- while (ndbi != NULL) {
- dbi = ndbi;
- ndbi = DLZ_LIST_NEXT(dbi, link);
-
- mysql_destroy(dbi);
- }
-
- /* release memory for the list structure */
- free(dblist);
-}
-
-/*%
- * Loops through the list of DB instances, attempting to lock
- * on the mutex. If successful, the DBI is reserved for use
- * and the thread can perform queries against the database.
- * If the lock fails, the next one in the list is tried.
- * looping continues until a lock is obtained, or until
- * the list has been searched dbc_search_limit times.
- * This function is only used when the module is compiled for
- * multithreaded operation.
- */
-static dbinstance_t *
-mysql_find_avail_conn(mysql_instance_t *mysql) {
- dbinstance_t *dbi = NULL, *head;
- int count = 0;
-
- /* get top of list */
- head = dbi = DLZ_LIST_HEAD(*(mysql->db));
-
- /* loop through list */
- while (count < dbc_search_limit) {
- /* try to lock on the mutex */
- if (dlz_mutex_trylock(&dbi->lock) == 0)
- return (dbi); /* success, return the DBI for use. */
-
- /* not successful, keep trying */
- dbi = DLZ_LIST_NEXT(dbi, link);
-
- /* check to see if we have gone to the top of the list. */
- if (dbi == NULL) {
- count++;
- dbi = head;
- }
- }
-
- mysql->log(ISC_LOG_INFO,
- "MySQL module unable to find available connection "
- "after searching %d times", count);
- return (NULL);
-}
-#endif /* PTHREADS */
-
-/*%
- * Allocates memory for a new string, and then constructs the new
- * string by "escaping" the input string. The new string is
- * safe to be used in queries. This is necessary because we cannot
- * be sure of what types of strings are passed to us, and we don't
- * want special characters in the string causing problems.
- */
-static char *
-mysqldrv_escape_string(MYSQL *mysql, const char *instr) {
-
- char *outstr;
- unsigned int len;
-
- if (instr == NULL)
- return (NULL);
-
- len = strlen(instr);
- outstr = malloc((2 * len * sizeof(char)) + 1);
- if (outstr == NULL)
- return (NULL);
-
- mysql_real_escape_string(mysql, outstr, instr, len);
-
- return (outstr);
-}
-
-/*%
- * This function is the real core of the module. Zone, record
- * and client strings are passed in (or NULL is passed if the
- * string is not available). The type of query we want to run
- * is indicated by the query flag, and the dbdata object is passed
- * passed in to. dbdata really holds a single database instance.
- * The function will construct and run the query, hopefully getting
- * a result set.
- */
-static isc_result_t
-mysql_get_resultset(const char *zone, const char *record,
- const char *client, unsigned int query,
- void *dbdata, MYSQL_RES **rs)
-{
- isc_result_t result;
- dbinstance_t *dbi = NULL;
- mysql_instance_t *db = (mysql_instance_t *)dbdata;
- char *querystring = NULL;
- unsigned int i = 0;
- unsigned int j = 0;
- int qres = 0;
-
-#if PTHREADS
- /* find an available DBI from the list */
- dbi = mysql_find_avail_conn(db);
-#else /* PTHREADS */
- /*
- * only 1 DBI - no need to lock instance lock either
- * only 1 thread in the whole process, no possible contention.
- */
- dbi = (dbinstance_t *)(db->db);
-#endif /* PTHREADS */
-
- if (dbi == NULL) {
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- /* what type of query are we going to run? */
- switch(query) {
- case ALLNODES:
- if (dbi->allnodes_q == NULL) {
- result = ISC_R_NOTIMPLEMENTED;
- goto cleanup;
- }
- break;
- case ALLOWXFR:
- if (dbi->allowxfr_q == NULL) {
- result = ISC_R_NOTIMPLEMENTED;
- goto cleanup;
- }
- break;
- case AUTHORITY:
- if (dbi->authority_q == NULL) {
- result = ISC_R_NOTIMPLEMENTED;
- goto cleanup;
- }
- break;
- case FINDZONE:
- if (dbi->findzone_q == NULL) {
- db->log(ISC_LOG_DEBUG(2),
- "No query specified for findzone. "
- "Findzone requires a query");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
- break;
- case COUNTZONE:
- if (dbi->countzone_q == NULL) {
- result = ISC_R_NOTIMPLEMENTED;
- goto cleanup;
- }
- break;
- case LOOKUP:
- if (dbi->lookup_q == NULL) {
- db->log(ISC_LOG_DEBUG(2),
- "No query specified for lookup. "
- "Lookup requires a query");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
- break;
- default:
- db->log(ISC_LOG_ERROR,
- "Incorrect query flag passed to "
- "mysql_get_resultset");
- result = ISC_R_UNEXPECTED;
- goto cleanup;
- }
-
-
- if (zone != NULL) {
- if (dbi->zone != NULL)
- free(dbi->zone);
-
- dbi->zone = mysqldrv_escape_string((MYSQL *) dbi->dbconn,
- zone);
- if (dbi->zone == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- } else
- dbi->zone = NULL;
-
- if (record != NULL) {
- if (dbi->record != NULL)
- free(dbi->record);
-
- dbi->record = mysqldrv_escape_string((MYSQL *) dbi->dbconn,
- record);
- if (dbi->record == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- } else
- dbi->record = NULL;
-
- if (client != NULL) {
- if (dbi->client != NULL)
- free(dbi->client);
-
- dbi->client = mysqldrv_escape_string((MYSQL *) dbi->dbconn,
- client);
- if (dbi->client == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- } else
- dbi->client = NULL;
-
- /*
- * what type of query are we going to run? this time we build
- * the actual query to run.
- */
- switch(query) {
- case ALLNODES:
- querystring = build_querystring(dbi->allnodes_q);
- break;
- case ALLOWXFR:
- querystring = build_querystring(dbi->allowxfr_q);
- break;
- case AUTHORITY:
- querystring = build_querystring(dbi->authority_q);
- break;
- case FINDZONE:
- querystring = build_querystring(dbi->findzone_q);
- break;
- case COUNTZONE:
- querystring = build_querystring(dbi->countzone_q);
- break;
- case LOOKUP:
- querystring = build_querystring(dbi->lookup_q);
- break;
- default:
- db->log(ISC_LOG_ERROR,
- "Incorrect query flag passed to "
- "mysql_get_resultset");
- result = ISC_R_UNEXPECTED; goto cleanup;
- }
-
- if (querystring == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
-
- /* output the full query string when debugging */
- db->log(ISC_LOG_DEBUG(1), "\nQuery String: %s\n", querystring);
-
- /* attempt query up to 3 times. */
- for (i = 0; i < 3; i++) {
- qres = mysql_query((MYSQL *) dbi->dbconn, querystring);
- if (qres == 0)
- break;
- for (j = 0; j < 4; j++)
- if (mysql_ping((MYSQL *) dbi->dbconn) == 0)
- break;
- }
-
- if (qres == 0) {
- result = ISC_R_SUCCESS;
- if (query != COUNTZONE) {
- *rs = mysql_store_result((MYSQL *) dbi->dbconn);
- if (*rs == NULL)
- result = ISC_R_FAILURE;
- }
- } else
- result = ISC_R_FAILURE;
-
- cleanup:
- if (dbi == NULL)
- return (ISC_R_FAILURE);
-
- if (dbi->zone != NULL) {
- free(dbi->zone);
- dbi->zone = NULL;
- }
- if (dbi->record != NULL) {
- free(dbi->record);
- dbi->record = NULL;
- }
- if (dbi->client != NULL) {
- free(dbi->client);
- dbi->client = NULL;
- }
-
- /* release the lock so another thread can use this dbi */
- (void) dlz_mutex_unlock(&dbi->lock);
-
- if (querystring != NULL)
- free(querystring);
-
- return (result);
-}
-
-/*%
- * The processing of result sets for lookup and authority are
- * exactly the same. So that functionality has been moved
- * into this function to minimize code.
- */
-static isc_result_t
-mysql_process_rs(mysql_instance_t *db, dns_sdlzlookup_t *lookup,
- MYSQL_RES *rs)
-{
- isc_result_t result = ISC_R_NOTFOUND;
- MYSQL_ROW row;
- unsigned int fields;
- unsigned int j;
- char *tmpString;
- char *endp;
- int ttl;
-
- fields = mysql_num_fields(rs); /* how many columns in result set */
- row = mysql_fetch_row(rs); /* get a row from the result set */
- while (row != NULL) {
- unsigned int len = 0;
-
- switch(fields) {
- case 1:
- /*
- * one column in rs, it's the data field. use
- * default type of A record, and default TTL
- * of 86400
- */
- result = db->putrr(lookup, "a", 86400, safeGet(row[0]));
- break;
- case 2:
- /*
- * two columns, data field, and data type.
- * use default TTL of 86400.
- */
- result = db->putrr(lookup, safeGet(row[0]), 86400,
- safeGet(row[1]));
- break;
- case 3:
- /*
- * three columns, all data no defaults.
- * convert text to int, make sure it worked
- * right.
- */
- ttl = strtol(safeGet(row[0]), &endp, 10);
- if (*endp != '\0' || ttl < 0) {
- db->log(ISC_LOG_ERROR,
- "MySQL module ttl must be "
- "a postive number");
- return (ISC_R_FAILURE);
- }
-
- result = db->putrr(lookup, safeGet(row[1]), ttl,
- safeGet(row[2]));
- break;
- default:
- /*
- * more than 3 fields, concatenate the last
- * ones together. figure out how long to make
- * string.
- */
- for (j = 2; j < fields; j++)
- len += strlen(safeGet(row[j])) + 1;
-
- /*
- * allocate string memory, allow for NULL to
- * term string
- */
- tmpString = malloc(len + 1);
- if (tmpString == NULL) {
- db->log(ISC_LOG_ERROR,
- "MySQL module unable to allocate "
- "memory for temporary string");
- mysql_free_result(rs);
- return (ISC_R_FAILURE);
- }
-
- strcpy(tmpString, safeGet(row[2]));
- for (j = 3; j < fields; j++) {
- strcat(tmpString, " ");
- strcat(tmpString, safeGet(row[j]));
- }
-
- ttl = strtol(safeGet(row[0]), &endp, 10);
- if (*endp != '\0' || ttl < 0) {
- db->log(ISC_LOG_ERROR,
- "MySQL module ttl must be "
- "a postive number");
- free(tmpString);
- return (ISC_R_FAILURE);
- }
-
- result = db->putrr(lookup, safeGet(row[1]),
- ttl, tmpString);
- free(tmpString);
- }
-
- if (result != ISC_R_SUCCESS) {
- mysql_free_result(rs);
- db->log(ISC_LOG_ERROR,
- "putrr returned error: %d", result);
- return (ISC_R_FAILURE);
- }
-
- row = mysql_fetch_row(rs);
- }
-
- mysql_free_result(rs);
- return (result);
-}
-
-/*
- * DLZ methods
- */
-
-/*% determine if the zone is supported by (in) the database */
-isc_result_t
-dlz_findzonedb(void *dbdata, const char *name,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-{
- isc_result_t result;
- MYSQL_RES *rs = NULL;
- my_ulonglong rows;
- mysql_instance_t *db = (mysql_instance_t *)dbdata;
-
- UNUSED(methods);
- UNUSED(clientinfo);
-
- result = mysql_get_resultset(name, NULL, NULL, FINDZONE, dbdata, &rs);
- if (result != ISC_R_SUCCESS || rs == NULL) {
- if (rs != NULL)
- mysql_free_result(rs);
-
- db->log(ISC_LOG_ERROR,
- "MySQL module unable to return "
- "result set for findzone query");
-
- return (ISC_R_FAILURE);
- }
-
- /*
- * if we returned any rows, the zone is supported.
- */
- rows = mysql_num_rows(rs);
- mysql_free_result(rs);
- if (rows > 0) {
- mysql_get_resultset(name, NULL, NULL, COUNTZONE, dbdata, NULL);
- return (ISC_R_SUCCESS);
- }
-
- return (ISC_R_NOTFOUND);
-}
-
-/*% Determine if the client is allowed to perform a zone transfer */
-isc_result_t
-dlz_allowzonexfr(void *dbdata, const char *name, const char *client) {
- isc_result_t result;
- mysql_instance_t *db = (mysql_instance_t *)dbdata;
- MYSQL_RES *rs = NULL;
- my_ulonglong rows;
-
- /* first check if the zone is supported by the database. */
- result = dlz_findzonedb(dbdata, name, NULL, NULL);
- if (result != ISC_R_SUCCESS)
- return (ISC_R_NOTFOUND);
-
- /*
- * if we get to this point we know the zone is supported by
- * the database the only questions now are is the zone
- * transfer is allowed for this client and did the config file
- * have an allow zone xfr query.
- */
- result = mysql_get_resultset(name, NULL, client, ALLOWXFR,
- dbdata, &rs);
- if (result == ISC_R_NOTIMPLEMENTED)
- return (result);
-
- if (result != ISC_R_SUCCESS || rs == NULL) {
- if (rs != NULL)
- mysql_free_result(rs);
- db->log(ISC_LOG_ERROR,
- "MySQL module unable to return "
- "result set for allow xfr query");
- return (ISC_R_FAILURE);
- }
-
- /*
- * count how many rows in result set; if we returned any,
- * zone xfr is allowed.
- */
- rows = mysql_num_rows(rs);
- mysql_free_result(rs);
- if (rows > 0)
- return (ISC_R_SUCCESS);
-
- return (ISC_R_NOPERM);
-}
-
-/*%
- * If the client is allowed to perform a zone transfer, the next order of
- * business is to get all the nodes in the zone, so bind can respond to the
- * query.
- */
-isc_result_t
-dlz_allnodes(const char *zone, void *dbdata, dns_sdlzallnodes_t *allnodes) {
- isc_result_t result;
- mysql_instance_t *db = (mysql_instance_t *)dbdata;
- MYSQL_RES *rs = NULL;
- MYSQL_ROW row;
- unsigned int fields;
- unsigned int j;
- char *tmpString;
- char *endp;
- int ttl;
-
- result = mysql_get_resultset(zone, NULL, NULL, ALLNODES, dbdata, &rs);
- if (result == ISC_R_NOTIMPLEMENTED)
- return (result);
-
- /* if we didn't get a result set, log an err msg. */
- if (result != ISC_R_SUCCESS) {
- db->log(ISC_LOG_ERROR,
- "MySQL module unable to return "
- "result set for all nodes query");
- goto cleanup;
- }
-
- result = ISC_R_NOTFOUND;
-
- fields = mysql_num_fields(rs); /* how many columns in result set */
- row = mysql_fetch_row(rs); /* get a row from the result set */
- while (row != NULL) {
- if (fields < 4) {
- db->log(ISC_LOG_ERROR,
- "MySQL module too few fields returned "
- "by all nodes query");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- ttl = strtol(safeGet(row[0]), &endp, 10);
- if (*endp != '\0' || ttl < 0) {
- db->log(ISC_LOG_ERROR,
- "MySQL module ttl must be "
- "a postive number");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- if (fields == 4) {
- result = db->putnamedrr(allnodes, safeGet(row[2]),
- safeGet(row[1]), ttl,
- safeGet(row[3]));
- } else {
- unsigned int len = 0;
-
- /*
- * more than 4 fields, concatenate the last
- * ones together.
- */
- for (j = 3; j < fields; j++)
- len += strlen(safeGet(row[j])) + 1;
-
- tmpString = malloc(len + 1);
- if (tmpString == NULL) {
- db->log(ISC_LOG_ERROR,
- "MySQL module unable to allocate "
- "memory for temporary string");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- strcpy(tmpString, safeGet(row[3]));
- for (j = 4; j < fields; j++) {
- strcat(tmpString, " ");
- strcat(tmpString, safeGet(row[j]));
- }
-
- result = db->putnamedrr(allnodes, safeGet(row[2]),
- safeGet(row[1]),
- ttl, tmpString);
- free(tmpString);
- }
-
- if (result != ISC_R_SUCCESS) {
- db->log(ISC_LOG_ERROR,
- "putnamedrr returned error: %s", result);
- result = ISC_R_FAILURE;
- break;
- }
-
- row = mysql_fetch_row(rs);
- }
-
- cleanup:
- if (rs != NULL)
- mysql_free_result(rs);
-
- return (result);
-}
-
-/*%
- * If the lookup function does not return SOA or NS records for the zone,
- * use this function to get that information for named.
- */
-isc_result_t
-dlz_authority(const char *zone, void *dbdata, dns_sdlzlookup_t *lookup) {
- isc_result_t result;
- MYSQL_RES *rs = NULL;
- mysql_instance_t *db = (mysql_instance_t *)dbdata;
-
- result = mysql_get_resultset(zone, NULL, NULL, AUTHORITY, dbdata, &rs);
- if (result == ISC_R_NOTIMPLEMENTED)
- return (result);
-
- if (result != ISC_R_SUCCESS) {
- if (rs != NULL)
- mysql_free_result(rs);
- db->log(ISC_LOG_ERROR,
- "MySQL module unable to return "
- "result set for authority query");
- return (ISC_R_FAILURE);
- }
-
- /*
- * lookup and authority result sets are processed in the same
- * manner: mysql_process_rs does the job for both functions.
- */
- return (mysql_process_rs(db, lookup, rs));
-}
-
-/*% If zone is supported, lookup up a (or multiple) record(s) in it */
-isc_result_t
-dlz_lookup(const char *zone, const char *name,
- void *dbdata, dns_sdlzlookup_t *lookup,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-{
- isc_result_t result;
- MYSQL_RES *rs = NULL;
- mysql_instance_t *db = (mysql_instance_t *)dbdata;
-
- UNUSED(methods);
- UNUSED(clientinfo);
-
- result = mysql_get_resultset(zone, name, NULL, LOOKUP, dbdata, &rs);
-
- /* if we didn't get a result set, log an err msg. */
- if (result != ISC_R_SUCCESS) {
- if (rs != NULL)
- mysql_free_result(rs);
- db->log(ISC_LOG_ERROR,
- "MySQL module unable to return "
- "result set for lookup query");
- return (ISC_R_FAILURE);
- }
-
- /*
- * lookup and authority result sets are processed in the same
- * manner: mysql_process_rs does the job for both functions.
- */
- return (mysql_process_rs(db, lookup, rs));
-}
-
-/*%
- * Create an instance of the module.
- */
-isc_result_t
-dlz_create(const char *dlzname, unsigned int argc, char *argv[],
- void **dbdata, ...)
-{
- isc_result_t result = ISC_R_FAILURE;
- mysql_instance_t *mysql = NULL;
- dbinstance_t *dbi = NULL;
- MYSQL *dbc;
- char *tmp = NULL;
- char *endp;
- int j;
- const char *helper_name;
-#if MYSQL_VERSION_ID >= 50000
- my_bool auto_reconnect = 1;
-#endif
-#if PTHREADS
- int dbcount;
- int i;
-#endif /* PTHREADS */
- va_list ap;
-
- UNUSED(dlzname);
-
- /* allocate memory for MySQL instance */
- mysql = calloc(1, sizeof(mysql_instance_t));
- if (mysql == NULL)
- return (ISC_R_NOMEMORY);
- memset(mysql, 0, sizeof(mysql_instance_t));
-
- /* Fill in the helper functions */
- va_start(ap, dbdata);
- while ((helper_name = va_arg(ap, const char*)) != NULL)
- b9_add_helper(mysql, helper_name, va_arg(ap, void*));
- va_end(ap);
-
-#if PTHREADS
- /* if debugging, let user know we are multithreaded. */
- mysql->log(ISC_LOG_DEBUG(1), "MySQL module running multithreaded");
-#else /* PTHREADS */
- /* if debugging, let user know we are single threaded. */
- mysql->log(ISC_LOG_DEBUG(1), "MySQL module running single threaded");
-#endif /* PTHREADS */
-
- /* verify we have at least 4 arg's passed to the module */
- if (argc < 4) {
- mysql->log(ISC_LOG_ERROR,
- "MySQL module requires "
- "at least 4 command line args.");
- return (ISC_R_FAILURE);
- }
-
- /* no more than 8 arg's should be passed to the module */
- if (argc > 8) {
- mysql->log(ISC_LOG_ERROR,
- "MySQL module cannot accept "
- "more than 7 command line args.");
- return (ISC_R_FAILURE);
- }
-
- /* get db name - required */
- mysql->dbname = get_parameter_value(argv[1], "dbname=");
- if (mysql->dbname == NULL) {
- mysql->log(ISC_LOG_ERROR,
- "MySQL module requires a dbname parameter.");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- /* get db port. Not required, but must be > 0 if specified */
- tmp = get_parameter_value(argv[1], "port=");
- if (tmp == NULL)
- mysql->port = 0;
- else {
- mysql->port = strtol(tmp, &endp, 10);
- if (*endp != '\0' || mysql->port < 0) {
- mysql->log(ISC_LOG_ERROR,
- "Mysql module: port "
- "must be a positive number.");
- free(tmp);
- result = ISC_R_FAILURE;
- goto cleanup;
- }
- free(tmp);
- }
-
- mysql->host = get_parameter_value(argv[1], "host=");
- mysql->user = get_parameter_value(argv[1], "user=");
- mysql->pass = get_parameter_value(argv[1], "pass=");
- mysql->socket = get_parameter_value(argv[1], "socket=");
-
- mysql->flags = CLIENT_REMEMBER_OPTIONS;
-
- tmp = get_parameter_value(argv[1], "compress=");
- if (tmp != NULL) {
- if (strcasecmp(tmp, "true") == 0)
- mysql->flags |= CLIENT_COMPRESS;
- free(tmp);
- }
-
- tmp = get_parameter_value(argv[1], "ssl=");
- if (tmp != NULL) {
- if (strcasecmp(tmp, "true") == 0)
- mysql->flags |= CLIENT_SSL;
- free(tmp);
- }
-
- tmp = get_parameter_value(argv[1], "space=");
- if (tmp != NULL) {
- if (strcasecmp(tmp, "ignore") == 0)
- mysql->flags |= CLIENT_IGNORE_SPACE;
- free(tmp);
- }
-
-#if PTHREADS
- /* multithreaded build can have multiple DB connections */
- tmp = get_parameter_value(argv[1], "threads=");
- if (tmp == NULL)
- dbcount = 1;
- else {
- dbcount = strtol(tmp, &endp, 10);
- if (*endp != '\0' || dbcount < 1) {
- mysql->log(ISC_LOG_ERROR,
- "MySQL database connection count "
- "must be positive.");
- free(tmp);
- result = ISC_R_FAILURE;
- goto cleanup;
- }
- free(tmp);
- }
-
- /* allocate memory for database connection list */
- mysql->db = calloc(1, sizeof(db_list_t));
- if (mysql->db == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
-
- /* initialize DB connection list */
- DLZ_LIST_INIT(*(mysql->db));
-
- /*
- * create the appropriate number of database instances (DBI)
- * append each new DBI to the end of the list
- */
- for (i = 0; i < dbcount; i++) {
-#endif /* PTHREADS */
- switch(argc) {
- case 4:
- result = build_dbinstance(NULL, NULL, NULL,
- argv[2], argv[3], NULL,
- &dbi, mysql->log);
- break;
- case 5:
- result = build_dbinstance(NULL, NULL, argv[4],
- argv[2], argv[3], NULL,
- &dbi, mysql->log);
- break;
- case 6:
- result = build_dbinstance(argv[5], NULL, argv[4],
- argv[2], argv[3], NULL,
- &dbi, mysql->log);
- break;
- case 7:
- result = build_dbinstance(argv[5], argv[6], argv[4],
- argv[2], argv[3], NULL,
- &dbi, mysql->log);
- break;
- case 8:
- result = build_dbinstance(argv[5], argv[6], argv[4],
- argv[2], argv[3], argv[7],
- &dbi, mysql->log);
- break;
- default:
- result = ISC_R_FAILURE;
- }
-
-
- if (result != ISC_R_SUCCESS) {
- mysql->log(ISC_LOG_ERROR,
- "MySQL module could not create "
- "database instance object.");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
-#if PTHREADS
- /* when multithreaded, build a list of DBI's */
- DLZ_LINK_INIT(dbi, link);
- DLZ_LIST_APPEND(*(mysql->db), dbi, link);
-#else
- /*
- * when single threaded, hold onto the one connection
- * instance.
- */
- mysql->db = dbi;
-#endif
-
- /* create and set db connection */
- dbi->dbconn = mysql_init(NULL);
- if (dbi->dbconn == NULL) {
- mysql->log(ISC_LOG_ERROR,
- "MySQL module could not allocate "
- "memory for database connection");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- dbc = NULL;
-
-#if MYSQL_VERSION_ID >= 50000
- /* enable automatic reconnection. */
- if (mysql_options((MYSQL *) dbi->dbconn, MYSQL_OPT_RECONNECT,
- &auto_reconnect) != 0) {
- mysql->log(ISC_LOG_WARNING,
- "MySQL module failed to set "
- "MYSQL_OPT_RECONNECT option, continuing");
- }
-#endif
-
- for (j = 0; dbc == NULL && j < 4; j++) {
- dbc = mysql_real_connect((MYSQL *) dbi->dbconn,
- mysql->host, mysql->user,
- mysql->pass, mysql->dbname,
- mysql->port, mysql->socket,
- mysql->flags);
- if (dbc == NULL)
- mysql->log(ISC_LOG_ERROR,
- "MySQL connection failed: %s",
- mysql_error((MYSQL *) dbi->dbconn));
- }
-
- if (dbc == NULL) {
- mysql->log(ISC_LOG_ERROR,
- "MySQL module failed to create "
- "database connection after 4 attempts");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
-#if PTHREADS
- /* set DBI = null for next loop through. */
- dbi = NULL;
- }
-#endif /* PTHREADS */
-
- *dbdata = mysql;
-
- return (ISC_R_SUCCESS);
-
- cleanup:
- dlz_destroy(mysql);
-
- return (result);
-}
-
-/*%
- * Destroy the module.
- */
-void
-dlz_destroy(void *dbdata) {
- mysql_instance_t *db = (mysql_instance_t *)dbdata;
-#if PTHREADS
- /* cleanup the list of DBI's */
- if (db->db != NULL)
- mysql_destroy_dblist((db_list_t *)(db->db));
-#else /* PTHREADS */
- mysql_destroy(db);
-#endif /* PTHREADS */
-
- if (db->dbname != NULL)
- free(db->dbname);
- if (db->host != NULL)
- free(db->host);
- if (db->user != NULL)
- free(db->user);
- if (db->pass != NULL)
- free(db->pass);
- if (db->socket != NULL)
- free(db->socket);
-}
-
-/*
- * Return the version of the API
- */
-int
-dlz_version(unsigned int *flags) {
- *flags |= (DNS_SDLZFLAG_RELATIVEOWNER |
- DNS_SDLZFLAG_RELATIVERDATA |
- DNS_SDLZFLAG_THREADSAFE);
- return (DLZ_DLOPEN_VERSION);
-}
-
-/*
- * Register a helper function from the bind9 dlz_dlopen driver
- */
-static void
-b9_add_helper(mysql_instance_t *db, const char *helper_name, void *ptr) {
- if (strcmp(helper_name, "log") == 0)
- db->log = (log_t *)ptr;
- if (strcmp(helper_name, "putrr") == 0)
- db->putrr = (dns_sdlz_putrr_t *)ptr;
- if (strcmp(helper_name, "putnamedrr") == 0)
- db->putnamedrr = (dns_sdlz_putnamedrr_t *)ptr;
- if (strcmp(helper_name, "writeable_zone") == 0)
- db->writeable_zone = (dns_dlz_writeablezone_t *)ptr;
-}
diff --git a/contrib/dlz/modules/mysql/testing/README b/contrib/dlz/modules/mysql/testing/README
deleted file mode 100644
index a4b87bba..00000000
--- a/contrib/dlz/modules/mysql/testing/README
+++ /dev/null
@@ -1,7 +0,0 @@
-These files were used for testing on Ubuntu Linux using MySQL
-
-- Install MySQL: sudo apt-get install mysql-server
-- Run "mysql --user=USER --password=PASSWORD < dlz.schema" to set up database
-- Run "mysql --user=USER --password=PASSWORD < dlz.data" to populate it
-- update named.conf with correct USER and PASSWORD
-
diff --git a/contrib/dlz/modules/mysql/testing/dlz.data b/contrib/dlz/modules/mysql/testing/dlz.data
deleted file mode 100644
index e0b191c7..00000000
--- a/contrib/dlz/modules/mysql/testing/dlz.data
+++ /dev/null
@@ -1,11 +0,0 @@
-use BindDB;
-INSERT INTO `records` (`id`, `zone`, `ttl`, `type`, `host`, `mx_priority`, `data`, `primary_ns`, `resp_contact`, `serial`, `refresh`, `retry`, `expire`, `minimum`) VALUES
-('', 'example.com', 86400, 'SOA', '@', NULL, NULL, 'ns1.example.com.', 'info.example.com.', 2011043001, 10800, 7200, 604800, 86400),
-('', 'example.com', 86400, 'NS', '@', NULL, 'ns1.example.com.', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
-('', 'example.com', 86400, 'NS', '@', NULL, 'ns2.example.com.', NULL, NULL, NULL, NULL, NULL, NULL, NULL), ('', 'example.com', 86400, 'MX', '@',
-10, 'mail.example.com.', NULL, NULL, NULL, NULL, NULL, NULL, NULL), ('', 'example.com', 86400, 'A', '@', NULL, '192.168.0.2', NULL, NULL,
-NULL, NULL, NULL, NULL, NULL), ('', 'example.com', 86400, 'CNAME', 'www', NULL, '@', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
-('', 'example.com', 86400, 'A', 'ns1', NULL, '192.168.0.111', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
-('', 'example.com', 86400, 'A', 'ns2', NULL, '192.168.0.222', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
-('', 'example.com', 86400, 'A', 'mail', NULL, '192.168.0.3', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
-('', 'example.com', 86400, 'TXT', '@', NULL, 'v=spf1 ip:192.168.0.3 ~all', NULL, NULL, NULL, NULL, NULL, NULL, NULL)
diff --git a/contrib/dlz/modules/mysql/testing/dlz.schema b/contrib/dlz/modules/mysql/testing/dlz.schema
deleted file mode 100644
index f20b59e9..00000000
--- a/contrib/dlz/modules/mysql/testing/dlz.schema
+++ /dev/null
@@ -1,30 +0,0 @@
-CREATE DATABASE `BindDB` DEFAULT CHARACTER SET latin1;
-USE `BindDB`;
-
-CREATE TABLE IF NOT EXISTS `records` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `zone` varchar(255) NOT NULL,
- `ttl` int(11) NOT NULL DEFAULT '86400',
- `type` varchar(255) NOT NULL,
- `host` varchar(255) NOT NULL DEFAULT '@',
- `mx_priority` int(11) DEFAULT NULL,
- `data` text,
- `primary_ns` varchar(255) DEFAULT NULL,
- `resp_contact` varchar(255) DEFAULT NULL,
- `serial` bigint(20) DEFAULT NULL,
- `refresh` int(11) DEFAULT NULL,
- `retry` int(11) DEFAULT NULL,
- `expire` int(11) DEFAULT NULL,
- `minimum` int(11) DEFAULT NULL,
- PRIMARY KEY (`id`),
- KEY `type` (`type`),
- KEY `host` (`host`),
- KEY `zone` (`zone`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-
-CREATE TABLE IF NOT EXISTS `xfr` (
- `zone` varchar(255) NOT NULL,
- `client` varchar(255) NOT NULL,
- KEY `zone` (`zone`),
- KEY `client` (`client`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
diff --git a/contrib/dlz/modules/mysql/testing/named.conf b/contrib/dlz/modules/mysql/testing/named.conf
deleted file mode 100644
index f8afa238..00000000
--- a/contrib/dlz/modules/mysql/testing/named.conf
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-controls { };
-
-options {
- directory ".";
- port 5300;
- pid-file "named.pid";
- session-keyfile "session.key";
- listen-on { any; };
- listen-on-v6 { none; };
- recursion no;
-};
-
-key rndc_key {
- secret "1234abcd8765";
- algorithm hmac-md5;
-};
-
-controls {
- inet 127.0.0.1 port 9953 allow { any; } keys { rndc_key; };
-};
-
-dlz "test" {
- database "dlopen ../dlz_mysql_dynamic.so
- {
- host=127.0.0.1 port=3306 socket=/tmp/mysql.sock
- dbname=BindDB user=USER pass=PASSWORD threads=2
- }
- {SELECT zone FROM records WHERE zone = '$zone$'}
- {SELECT ttl, type, mx_priority, IF(type = 'TXT', CONCAT('\"',data,'\"'), data) AS data FROM records WHERE zone = '$zone$' AND host = '$record$' AND type <> 'SOA' AND type <> 'NS'}
- {SELECT ttl, type, data, primary_ns, resp_contact, serial, refresh, retry, expire, minimum FROM records WHERE zone = '$zone$' AND (type = 'SOA' OR type='NS')}
- {SELECT ttl, type, host, mx_priority, IF(type = 'TXT', CONCAT('\"',data,'\"'), data) AS data, resp_contact, serial, refresh, retry, expire, minimum FROM records WHERE zone = '$zone$' AND type <> 'SOA' AND type <> 'NS'}
- {SELECT zone FROM xfr where zone='$zone$' AND client = '$client$'}";
-};
diff --git a/contrib/dlz/modules/mysqldyn/Makefile b/contrib/dlz/modules/mysqldyn/Makefile
deleted file mode 100644
index bba91afc..00000000
--- a/contrib/dlz/modules/mysqldyn/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-prefix = /usr
-libdir = $(prefix)/lib/bind9
-
-CFLAGS=-fPIC -Wall -g -I../include
-MYSQL_LIBS=-lmysqlclient
-
-all: dlz_mysqldyn_mod.so
-
-dlz_dbi.o: ../common/dlz_dbi.c
- $(CC) $(CFLAGS) -c ../common/dlz_dbi.c
-
-dlz_mysqldyn_mod.so: dlz_mysqldyn_mod.c dlz_dbi.o
- $(CC) $(CFLAGS) -shared -o dlz_mysqldyn_mod.so \
- dlz_mysqldyn_mod.c dlz_dbi.o $(MYSQL_LIBS)
-
-clean:
- rm -f dlz_mysqldyn_mod.so *.o
-
-install: dlz_mysqldyn_mod.so
- mkdir -p $(DESTDIR)$(libdir)
- install dlz_mysqldyn_mod.so $(DESTDIR)$(libdir)
diff --git a/contrib/dlz/modules/mysqldyn/README b/contrib/dlz/modules/mysqldyn/README
deleted file mode 100644
index 468e37c1..00000000
--- a/contrib/dlz/modules/mysqldyn/README
+++ /dev/null
@@ -1,60 +0,0 @@
-BIND 9 DLZ MySQL module with support for dynamic DNS (DDNS)
-
-Adapted from code contributed by Marty Lee, Maui Systems Ltd.
-
-This is a dynamically loadable zone (DLZ) plugin that uses a fixed-
-schema MySQL database for back-end storage. It allows zone data
-to be updated via dynamic DNS updates, and sends DNS NOTIFY packets
-to other name servers when appropriate.
-
-The database for this module uses the following schema:
-
- CREATE TABLE `Zones` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `domain` varchar(128) NOT NULL DEFAULT '',
- `host` varchar(128) NOT NULL DEFAULT '',
- `admin` varchar(128) NOT NULL DEFAULT '',
- `serial` int(11) NOT NULL DEFAULT '1',
- `expire` int(11) NOT NULL DEFAULT '86400',
- `refresh` int(11) NOT NULL DEFAULT '86400',
- `retry` int(11) NOT NULL DEFAULT '86400',
- `minimum` int(11) NOT NULL DEFAULT '86400',
- `ttl` int(11) NOT NULL DEFAULT '86400',
- `writeable` tinyint(1) NOT NULL DEFAULT '0',
- PRIMARY KEY (`id`),
- KEY `domain_idx` (`domain`)
- );
-
- CREATE TABLE `ZoneData` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `zone_id` int(11) NOT NULL,
- `name` varchar(128) NOT NULL DEFAULT '',
- `type` varchar(16) NOT NULL DEFAULT '',
- `ttl` int(11) NOT NULL DEFAULT '86400',
- `data` varchar(128) NOT NULL DEFAULT '',
- PRIMARY KEY (`id`),
- KEY `zone_idx` (`zone_id`),
- KEY `name_idx` (`zone_id`, `name`),
- KEY `type_idx` (`type`)
- );
-
-'Zones' contains information about specific zones:
- - domain: the zone name
- - admin: the zone administrator
- - serial, expire, reresh, retry, minimum: values in the SOA record
- - ttl: default zone TTL
- - writeable: set to true if the zone can be updated via DDNS
-
-'ZoneData' contains the individual records within the zone:
- - zone_id: the 'id' from the corresponding record in Zones
- - name: domain name, relative to the zone apex. (Data at the zone
- apex itself may use a blank name or "@".)
- - type: the RR type, expressed as text
- - ttl: the record's TTL
- - data: the records rdata, expressed as text.
-
-To configure this module in named.conf:
-
-dlz "mysqldlz" {
- database "dlopen <path to>/dlz_mysqldyn_mod.so <dbname> [dbhost [dbuser [dbpass]]]";
-};
diff --git a/contrib/dlz/modules/mysqldyn/dlz_mysqldyn_mod.c b/contrib/dlz/modules/mysqldyn/dlz_mysqldyn_mod.c
deleted file mode 100644
index 1e8cdad2..00000000
--- a/contrib/dlz/modules/mysqldyn/dlz_mysqldyn_mod.c
+++ /dev/null
@@ -1,1706 +0,0 @@
-/*
- * Copyright (C) 2014 Maui Systems Ltd, Scotland, contact@maui-systems.co.uk.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND MAUI SYSTEMS LTD DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL MAUI SYSTEMS LTD BE
- * LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/*
- * Copyright (C) 2011,2014 Internet Systems Consortium, Inc. ("ISC")
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * BIND 9 DLZ MySQL module with support for dynamic DNS (DDNS)
- *
- * Adapted from code contributed by Marty Lee, Maui Systems Ltd.
- *
- * See README for database schema and usage details.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <inttypes.h>
-#include <pthread.h>
-#include <netdb.h>
-#include <ifaddrs.h>
-
-#include <mysql/mysql.h>
-#include <mysql/errmsg.h>
-
-#include <dlz_minimal.h>
-#include <dlz_list.h>
-#include <dlz_pthread.h>
-
-/*
- * The SQL queries that will be used for lookups and updates are defined
- * here. They will be processed into queries by the build_query()
- * function.
- *
- * NOTE: Despite appearances, these do NOT use printf-style formatting.
- * "%s", with no modifiers, is the only supported directive.
- */
-
-/*
- * Get the NS RRset for a zone
- * Arguments: zone-name
- */
-#define Q_GETNS \
- "SELECT d.data FROM ZoneData d, Zones z " \
- "WHERE UPPER(d.type) = 'NS' AND LOWER(z.domain) = LOWER('%s') " \
- "AND z.id = d.zone_id"
-
-/*
- * Get a list of zones (ignoring writable or not)
- * Arguments: (none)
- */
-#define Q_GETZONES "SELECT LOWER(domain), serial FROM Zones"
-
-/*
- * Find a specific zone
- * Arguments: zone-name
- */
-#define Q_FINDZONE \
- "SELECT id FROM Zones WHERE LOWER(domain) = LOWER('%s')"
-
-/*
- * Get SOA data from zone apex
- * Arguments: zone-name
- */
-#define Q_GETSOA \
- "SELECT host, admin, serial, refresh, retry, expire, minimum, ttl " \
- "FROM Zones WHERE LOWER(domain) = LOWER('%s')"
-
-/*
- * Get other data from zone apex
- * Arguments: zone-name, zone-name (repeated)
- */
-#define Q_GETAPEX \
- "SELECT d.type, d.data, d.ttl FROM ZoneData d, Zones z " \
- "WHERE LOWER(z.domain) = LOWER('%s') AND z.id = d.zone_id " \
- "AND LOWER(d.name) IN (LOWER('%s'), '', '@') "\
- "ORDER BY UPPER(d.type) ASC"
-
-/*
- * Get data from non-apex nodes
- * Arguments: zone-name, node-name (relative to zone name)
- */
-#define Q_GETNODE \
- "SELECT d.type, d.data, d.ttl FROM ZoneData d, Zones z " \
- "WHERE LOWER(z.domain) = LOWER('%s') AND z.id = d.zone_id " \
- "AND LOWER(d.name) = LOWER('%s') " \
- "ORDER BY UPPER(d.type) ASC"
-
-/*
- * Get all data from a zone, for AXFR
- * Arguments: zone-name
- */
-#define Q_GETALL \
- "SELECT d.name, d.type, d.data, d.ttl FROM ZoneData d, Zones z " \
- "WHERE LOWER(z.domain) = LOWER('%s') AND z.id = d.zone_id"
-
-/*
- * Get SOA serial number for a zone.
- * Arguments: zone-name
- */
-#define Q_GETSERIAL \
- "SELECT serial FROM Zones WHERE domain = '%s'"
-
-/*
- * Determine whether a zone is writeable, and if so, retrieve zone_id
- * Arguments: zone-name
- */
-#define Q_WRITEABLE \
- "SELECT id FROM Zones WHERE " \
- "LOWER(domain) = LOWER('%s') AND writeable = 1"
-
-/*
- * Insert data into zone (other than SOA)
- * Arguments: zone-id (from Q_WRITEABLE), node-name (relative to zone-name),
- * rrtype, rdata text, TTL (in text format)
- */
-#define I_DATA \
- "INSERT INTO ZoneData (zone_id, name, type, data, ttl) " \
- "VALUES (%s, LOWER('%s'), UPPER('%s'), '%s', %s)"
-
-/*
- * Update SOA serial number for a zone
- * Arguments: new serial number (in text format), zone-id (from Q_WRITEABLE)
- */
-#define U_SERIAL \
- "UPDATE Zones SET serial = %s WHERE id = %s"
-
-/*
- * Delete a specific record (non-SOA) from a zone
- *
- * Arguments: node-name (relative to zone-name), zone-id (from Q_WRITEABLE),
- * rrtype, rdata text, TTL (in text format).
- */
-#define D_RECORD \
- "DELETE FROM ZoneData WHERE zone_id = %s AND " \
- "LOWER(name) = LOWER('%s') AND UPPER(type) = UPPER('%s') AND " \
- "data = '%s' AND ttl = %s"
-
-/*
- * Delete an entire rrset from a zone
- * Arguments: node-name (relative to zone-name), zone-id (from Q_WRITEABLE),
- * rrtype.
- */
-#define D_RRSET \
- "DELETE FROM ZoneData WHERE zone_id = %s AND " \
- "LOWER(name) = LOWER('%s') AND UPPER(type) = UPPER('%s')"
-
-#ifdef WIN32
-#define STRTOK_R(a, b, c) strtok_s(a, b, c)
-#elif defined(_REENTRANT)
-#define STRTOK_R(a, b, c) strtok_r(a, b, c)
-#else
-#define STRTOK_R(a, b, c) strtok(a, b)
-#endif
-
-/*
- * Number of concurrent database connections we support
- * - equivalent to maxmium number of concurrent transactions
- * that can be 'in-flight' + 1
- */
-#define MAX_DBI 16
-
-typedef struct mysql_record {
- char zone[255];
- char name[100];
- char type[10];
- char data[200];
- char ttl[10];
-} mysql_record_t;
-
-typedef struct mysql_instance {
- int id;
- MYSQL *sock;
- int connected;
- dlz_mutex_t mutex;
-} mysql_instance_t;
-
-typedef struct mysql_transaction mysql_transaction_t;
-struct mysql_transaction {
- char *zone;
- char *zone_id;
- mysql_instance_t *dbi;
- mysql_transaction_t *next;
-};
-
-typedef struct mysql_data {
- int debug;
-
- /*
- * Database connection details
- */
- char *db_name;
- char *db_host;
- char *db_user;
- char *db_pass;
-
- /*
- * Database structures
- */
- mysql_instance_t db[MAX_DBI];
-
- /*
- * Transactions
- */
- mysql_transaction_t *transactions;
-
- /*
- * Mutex for transactions
- */
- dlz_mutex_t tx_mutex;
-
- /* Helper functions from the dlz_dlopen driver */
- log_t *log;
- dns_sdlz_putrr_t *putrr;
- dns_sdlz_putnamedrr_t *putnamedrr;
- dns_dlz_writeablezone_t *writeable_zone;
-} mysql_data_t;
-
-typedef struct mysql_arg mysql_arg_t;
-typedef DLZ_LIST(mysql_arg_t) mysql_arglist_t;
-struct mysql_arg {
- char *arg;
- DLZ_LINK(mysql_arg_t) link;
-};
-
-static const char *modname = "dlz_mysqldyn";
-
-/*
- * Local functions
- */
-static isc_boolean_t
-db_connect(mysql_data_t *state, mysql_instance_t *dbi) {
- MYSQL *conn;
- /*
- * Make sure this thread has been through 'init'
- */
- mysql_thread_init();
-
- if (dbi->connected)
- return (ISC_TRUE);
-
- if (state->log != NULL)
- state->log(ISC_LOG_INFO, "%s: init connection %d ",
- modname, dbi->id);
-
- conn = mysql_real_connect(dbi->sock, state->db_host,
- state->db_user, state->db_pass,
- state->db_name, 0, NULL,
- CLIENT_REMEMBER_OPTIONS);
- if (conn == NULL) {
- if (state->log != NULL)
- state->log(ISC_LOG_ERROR,
- "%s: database connection failed: %s",
- modname, mysql_error(dbi->sock));
-
- dlz_mutex_unlock(&dbi->mutex);
- return (ISC_FALSE);
- }
-
- dbi->connected = 1;
- return (ISC_TRUE);
-}
-
-static mysql_instance_t *
-get_dbi(mysql_data_t *state) {
- int i;
-
- /*
- * Find an available dbi
- */
- for (i = 0; i < MAX_DBI; i++) {
- if (dlz_mutex_trylock(&state->db[i].mutex) == 0)
- break;
- }
-
- if (i == MAX_DBI) {
- if (state->debug && state->log != NULL)
- state->log(ISC_LOG_ERROR,
- "%s: No available connections", modname);
- return (NULL);
- }
- return (&state->db[i]);
-}
-
-/*
- * Allocate memory and store an escaped, sanitized version
- * of string 'original'
- */
-static char *
-sanitize(mysql_instance_t *dbi, const char *original) {
- char *s;
-
- if (original == NULL)
- return (NULL);
-
- s = (char *) malloc((strlen(original) * 2) + 1);
- if (s != NULL) {
- memset(s, 0, (strlen(original) * 2) + 1);
-
- mysql_real_escape_string(dbi->sock, s, original,
- strlen(original));
- }
-
- return (s);
-}
-
-/*
- * Append the string pointed to by 's' to the argument list 'arglist',
- * and add the string length to the running total pointed to by 'len'.
- */
-static isc_result_t
-additem(mysql_arglist_t *arglist, char **s, size_t *len) {
- mysql_arg_t *item;
-
- item = malloc(sizeof(*item));
- if (item == NULL)
- return (ISC_R_NOMEMORY);
-
- DLZ_LINK_INIT(item, link);
- item->arg = *s;
- *len += strlen(*s);
- DLZ_LIST_APPEND(*arglist, item, link);
- *s = NULL;
-
- return (ISC_R_SUCCESS);
-}
-
-/*
- * Construct a query string using a variable number of arguments, and
- * save it into newly allocated memory.
- *
- * NOTE: 'command' resembles a printf-style format string, but ONLY
- * supports the "%s" directive with no modifiers of any kind.
- *
- * If 'dbi' is NULL, we attempt to get a temporary database connection;
- * otherwise we use the existing one.
- */
-static char *
-build_query(mysql_data_t *state, mysql_instance_t *dbi,
- const char *command, ...)
-{
- isc_result_t result;
- isc_boolean_t localdbi = ISC_FALSE;
- mysql_arglist_t arglist;
- mysql_arg_t *item;
- char *p, *q, *tmp = NULL, *querystr = NULL;
- char *query = NULL;
- size_t len = 0;
- va_list ap1;
-
- /* Get a DB instance if needed */
- if (dbi == NULL) {
- dbi = get_dbi(state);
- if (dbi == NULL)
- return (NULL);
- localdbi = ISC_TRUE;
- }
-
- /* Make sure this instance is connected */
- if (!db_connect(state, dbi))
- goto fail;
-
- va_start(ap1, command);
- DLZ_LIST_INIT(arglist);
- q = querystr = strdup(command);
- if (querystr == NULL)
- goto fail;
-
- for (;;) {
- if (*q == '\0')
- break;
-
- p = strstr(q, "%s");
- if (p != NULL) {
- *p = '\0';
- tmp = strdup(q);
- if (tmp == NULL)
- goto fail;
-
- result = additem(&arglist, &tmp, &len);
- if (result != ISC_R_SUCCESS)
- goto fail;
-
- tmp = sanitize(dbi, va_arg(ap1, const char *));
- if (tmp == NULL)
- goto fail;
-
- result = additem(&arglist, &tmp, &len);
- if (result != ISC_R_SUCCESS)
- goto fail;
-
- q = p + 2;
- } else {
- tmp = strdup(q);
- if (tmp == NULL)
- goto fail;
-
- result = additem(&arglist, &tmp, &len);
- if (result != ISC_R_SUCCESS)
- goto fail;
-
- break;
- }
- }
-
- if (len == 0)
- goto fail;
-
- query = malloc(len + 1);
- if (query == NULL)
- goto fail;
-
- *query = '\0';
- for (item = DLZ_LIST_HEAD(arglist);
- item != NULL;
- item = DLZ_LIST_NEXT(item, link))
- if (item->arg != NULL)
- strcat(query, item->arg);
-
- fail:
- va_end(ap1);
-
- for (item = DLZ_LIST_HEAD(arglist);
- item != NULL;
- item = DLZ_LIST_NEXT(item, link))
- {
- if (item->arg != NULL)
- free(item->arg);
- free(item);
- }
-
- if (tmp != NULL)
- free(tmp);
- if (querystr != NULL)
- free (querystr);
-
- if (dbi != NULL && localdbi)
- dlz_mutex_unlock(&dbi->mutex);
-
- return (query);
-}
-
-/* Does this name end in a dot? */
-static isc_boolean_t
-isrelative(const char *s) {
- if (s == NULL || s[strlen(s) - 1] == '.')
- return (ISC_FALSE);
- return (ISC_TRUE);
-}
-
-/* Return a dot if 's' doesn't already end with one */
-static inline const char *
-dot(const char *s) {
- return (isrelative(s) ? "." : "");
-}
-
-/*
- * Generate a full hostname from a (presumably relative) name 'name'
- * and a zone name 'zone'; store the result in 'dest' (which must have
- * enough space).
- */
-static void
-fqhn(const char *name, const char *zone, char *dest) {
- if (dest == NULL)
- return;
-
- if (strlen(name) == 0 || strcmp(name, "@") == 0)
- sprintf(dest, "%s%s", zone, dot(zone));
- else {
- if (isrelative(name))
- sprintf(dest, "%s.%s%s", name, zone, dot(zone));
- else
- strcpy(dest, name);
- }
-}
-
-/*
- * Names are stored in relative form in ZoneData; this function
- * removes labels matching 'zone' from the end of 'name'.
- */
-static char *
-relname(const char *name, const char *zone) {
- size_t nlen, zlen;
- const char *p;
- char *new;
-
- new = (char *) malloc(strlen(name) + 1);
- if (new == NULL)
- return (NULL);
-
- nlen = strlen(name);
- zlen = strlen(zone);
-
- if (nlen < zlen) {
- strcpy(new, name);
- return (new);
- } else if (nlen == zlen || strcasecmp(name, zone) == 0) {
- strcpy(new, "@");
- return (new);
- }
-
- p = name + nlen - zlen;
- if (strcasecmp(p, zone) != 0 &&
- (zone[zlen - 1] != '.' ||
- strncasecmp(p, zone, zlen - 1) != 0))
- {
- strcpy(new, name);
- return (new);
- }
-
- strncpy(new, name, nlen - zlen);
- new[nlen - zlen - 1] = '\0';
- return (new);
-}
-
-static isc_result_t
-validate_txn(mysql_data_t *state, mysql_transaction_t *txn) {
- isc_result_t result = ISC_R_FAILURE;
- mysql_transaction_t *txp;
-
- dlz_mutex_lock(&state->tx_mutex);
- for (txp = state->transactions; txp != NULL; txp = txp->next) {
- if (txn == txp) {
- result = ISC_R_SUCCESS;
- break;
- }
- }
- dlz_mutex_unlock(&state->tx_mutex);
-
- if (result != ISC_R_SUCCESS && state->log != NULL)
- state->log(ISC_LOG_ERROR, "%s: invalid txn %x", modname, txn);
-
- return (result);
-}
-
-static isc_result_t
-db_execute(mysql_data_t *state, mysql_instance_t *dbi, const char *query) {
- int ret;
-
- /* Make sure this instance is connected. */
- if (!db_connect(state, dbi))
- return (ISC_R_FAILURE);
-
- ret = mysql_real_query(dbi->sock, query, strlen(query));
- if (ret != 0) {
- if (state->debug && state->log != NULL)
- state->log(ISC_LOG_ERROR,
- "%s: query '%s' failed: %s",
- modname, query, mysql_error(dbi->sock));
- return (ISC_R_FAILURE);
- }
-
- if (state->debug && state->log != NULL)
- state->log(ISC_LOG_INFO, "%s: execute(%d) %s",
- modname, dbi->id, query);
-
- return (ISC_R_SUCCESS);
-}
-
-static MYSQL_RES *
-db_query(mysql_data_t *state, mysql_instance_t *dbi, const char *query) {
- isc_result_t result;
- isc_boolean_t localdbi = ISC_FALSE;
- MYSQL_RES *res = NULL;
-
- if (query == NULL)
- return (NULL);
-
- /* Get a DB instance if needed */
- if (dbi == NULL) {
- dbi = get_dbi(state);
- if (dbi == NULL)
- return (NULL);
- localdbi = ISC_TRUE;
- }
-
- /* Make sure this instance is connected */
- if (!db_connect(state, dbi))
- goto fail;
-
- result = db_execute(state, dbi, query);
- if (result != ISC_R_SUCCESS)
- goto fail;
-
- res = mysql_store_result(dbi->sock);
- if (res == NULL) {
- if (state->log != NULL)
- state->log(ISC_LOG_ERROR,
- "%s: unable to store result: %s",
- modname, mysql_error(dbi->sock));
- goto fail;
- }
-
- if (state->debug && state->log != NULL)
- state->log(ISC_LOG_INFO,
- "%s: query(%d) returned %d rows",
- modname, dbi->id, mysql_num_rows(res));
-
- fail:
- if (dbi != NULL && localdbi)
- dlz_mutex_unlock(&dbi->mutex);
- return (res);
-}
-
-/*
- * Generate a DNS NOTIFY packet:
- * 12 bytes header
- * Question (1)
- * strlen(zone) +2
- * 2 bytes qtype
- * 2 bytes qclass
- *
- * -> 18 bytes + strlen(zone)
- *
- * N.B. Need to be mindful of byte ordering; using htons to map 16bit
- * values to the 'on the wire' packet values.
- */
-static unsigned char *
-make_notify(const char *zone, int *packetlen) {
- int i, j;
- unsigned char *packet = (unsigned char *) malloc(strlen(zone) + 18);
-
- if (packet == NULL)
- return (NULL);
-
- *packetlen = strlen(zone) + 18;
- memset(packet, 0, *packetlen);
-
- /* Random query ID */
- i = rand();
- packet[0] = htons(i) & 0xff;
- packet[1] = htons(i) >> 8;
-
- /* Flags (OpCode '4' in bits 14-11), Auth Answer set in bit 10 */
- i = 0x2400;
- packet[2] = htons(i) & 0xff;
- packet[3] = htons(i) >> 8;
-
- /* QD Count */
- i = 0x1;
- packet[4] = htons(i) & 0xff;
- packet[5] = htons(i) >> 8;
-
- /* Question */
- packet[12] = '.';
- memcpy(&packet[13], zone, strlen(zone));
- packet[13 + strlen(zone)] = 0;
-
- /* Make the question into labels */
- j = 12;
- while (packet[j]) {
- for (i = j + 1; packet[i] != '\0' && packet[i] != '.'; i++);
- packet[j] = i - j - 1;
- j = i;
- }
-
- /* Question type */
- i = 6;
- packet[j + 1] = htons(i) & 0xff;
- packet[j + 2] = htons(i) >> 8;
-
- /* Queston class */
- i = 1;
- packet[j + 3] = htons(i) & 0xff;
- packet[j + 4] = htons(i) >> 8;
-
- return (packet);
-}
-
-static void
-send_notify(struct sockaddr_in *addr, const unsigned char *p, const int plen) {
- int s;
-
- addr->sin_family = AF_INET;
- addr->sin_port = htons(53);
-
- if ((s = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
- return;
-
- sendto(s, p, plen, 0, (struct sockaddr *)addr, sizeof(*addr));
- close(s);
- return;
-}
-
-/*
- * Generate and send a DNS NOTIFY packet
- */
-static void
-notify(mysql_data_t *state, const char *zone, int sn) {
- MYSQL_RES *res;
- MYSQL_ROW row;
- char *query;
- unsigned char *packet;
- int packetlen;
- struct ifaddrs *ifap, *ifa;
- char zaddr[INET_ADDRSTRLEN];
- void *addrp = NULL;
-
- /* Get the name servers from the NS rrset */
- query = build_query(state, NULL, Q_GETNS, zone);
- res = db_query(state, NULL, query);
- free (query);
- if (res == NULL)
- return;
-
- /* Create a DNS NOTIFY packet */
- packet = make_notify(zone, &packetlen);
- if (packet == NULL) {
- mysql_free_result(res);
- return;
- }
-
- /* Get a list of our own addresses */
- if (getifaddrs(&ifap) < 0)
- ifap = NULL;
-
- /* Tell each nameserver of the update */
- while ((row = mysql_fetch_row(res)) != NULL) {
- isc_boolean_t local = ISC_FALSE;
- struct hostent *h;
- struct sockaddr_in addr, *sin;
-
- /*
- * Put nameserver rdata through gethostbyname as it
- * might be an IP address or a hostname. (XXX: switch
- * this to inet_pton/getaddrinfo.)
- */
- h = gethostbyname(row[0]);
- if (h == NULL)
- continue;
-
- memcpy(&addr.sin_addr, h->h_addr, h->h_length);
- addrp = &addr.sin_addr;
-
- /* Get the address for the nameserver into a string */
- inet_ntop(AF_INET, addrp, zaddr, INET_ADDRSTRLEN);
- for (ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) {
- char ifaddr[INET_ADDRSTRLEN];
-
- if (ifa->ifa_addr->sa_family != AF_INET)
- continue;
-
- /* Get local address into a string */
- sin = (struct sockaddr_in *) ifa->ifa_addr;
- addrp = &sin->sin_addr;
- inet_ntop(AF_INET, addrp, ifaddr, INET_ADDRSTRLEN);
-
- /* See if nameserver address matches this one */
- if (strcmp(ifaddr, zaddr) == 0)
- local = ISC_TRUE;
- }
-
- if (!local) {
- if (state->log != NULL)
- state->log(ISC_LOG_INFO,
- "%s: notify %s zone %s serial %d",
- modname, row[0], zone, sn);
- send_notify(&addr, packet, packetlen);
- }
- }
-
- mysql_free_result(res);
- free(packet);
- if (ifap != NULL)
- freeifaddrs(ifap);
-}
-
-/*
- * Constructs a mysql_record_t structure from 'rdatastr', to be
- * used in the dlz_{add,sub,del}rdataset functions below.
- */
-static mysql_record_t *
-makerecord(mysql_data_t *state, const char *name, const char *rdatastr) {
- mysql_record_t *new_record;
- char *real_name, *dclass, *type, *data, *ttlstr, *buf;
- dns_ttl_t ttlvalue;
-
- new_record = (mysql_record_t *)
- malloc(sizeof(mysql_record_t));
-
- if (new_record == NULL) {
- if (state->log != NULL)
- state->log(ISC_LOG_ERROR,
- "%s: makerecord - unable to malloc",
- modname);
- return (NULL);
- }
-
- buf = strdup(rdatastr);
- if (buf == NULL) {
- if (state->log != NULL)
- state->log(ISC_LOG_ERROR,
- "%s: makerecord - unable to malloc",
- modname);
- free(new_record);
- return (NULL);
- }
-
- /*
- * The format is:
- * FULLNAME\tTTL\tDCLASS\tTYPE\tDATA
- *
- * The DATA field is space separated, and is in the data format
- * for the type used by dig
- */
- real_name = STRTOK_R(buf, "\t", &saveptr);
- if (real_name == NULL)
- goto error;
-
- ttlstr = STRTOK_R(NULL, "\t", &saveptr);
- if (ttlstr == NULL || sscanf(ttlstr, "%d", &ttlvalue) != 1)
- goto error;
-
- dclass = STRTOK_R(NULL, "\t", &saveptr);
- if (dclass == NULL)
- goto error;
-
- type = STRTOK_R(NULL, "\t", &saveptr);
- if (type == NULL)
- goto error;
-
- data = STRTOK_R(NULL, "\t", &saveptr);
- if (data == NULL)
- goto error;
-
- strcpy(new_record->name, name);
- strcpy(new_record->type, type);
- strcpy(new_record->data, data);
- sprintf(new_record->ttl, "%d", ttlvalue);
-
- free(buf);
- return (new_record);
-
- error:
- free(buf);
- free(new_record);
- return (NULL);
-}
-
-/*
- * Remember a helper function from the bind9 dlz_dlopen driver
- */
-static void
-b9_add_helper(mysql_data_t *state, const char *helper_name, void *ptr) {
- if (strcmp(helper_name, "log") == 0)
- state->log = (log_t *)ptr;
- if (strcmp(helper_name, "putrr") == 0)
- state->putrr = (dns_sdlz_putrr_t *)ptr;
- if (strcmp(helper_name, "putnamedrr") == 0)
- state->putnamedrr = (dns_sdlz_putnamedrr_t *)ptr;
- if (strcmp(helper_name, "writeable_zone") == 0)
- state->writeable_zone = (dns_dlz_writeablezone_t *)ptr;
-}
-
-/*
- * DLZ API functions
- */
-
-/*
- * Return the version of the API
- */
-int
-dlz_version(unsigned int *flags) {
- UNUSED(flags);
- *flags |= DNS_SDLZFLAG_THREADSAFE;
- return (DLZ_DLOPEN_VERSION);
-}
-
-/*
- * Called to initialize the driver
- */
-isc_result_t
-dlz_create(const char *dlzname, unsigned int argc, char *argv[],
- void **dbdata, ...)
-{
- mysql_data_t *state;
- const char *helper_name;
- va_list ap;
- int n;
-
- UNUSED(dlzname);
-
- state = calloc(1, sizeof(mysql_data_t));
- if (state == NULL)
- return (ISC_R_NOMEMORY);
-
- dlz_mutex_init(&state->tx_mutex, NULL);
- state->transactions = NULL;
-
- /* Fill in the helper functions */
- va_start(ap, dbdata);
- while ((helper_name = va_arg(ap, const char *)) != NULL)
- b9_add_helper(state, helper_name, va_arg(ap, void *));
- va_end(ap);
-
- if (state->log != NULL)
- state->log(ISC_LOG_INFO, "loading %s module", modname);
-
- if ((argc < 2) || (argc > 6)) {
- if (state->log != NULL)
- state->log(ISC_LOG_ERROR,
- "%s: missing args <dbname> "
- "[<dbhost> [<user> <pass>]]", modname);
- dlz_destroy(state);
- return (ISC_R_FAILURE);
- }
-
- state->db_name = strdup(argv[1]);
- if (argc > 2) {
- state->db_host = strdup(argv[2]);
- if (argc > 4) {
- state->db_user = strdup(argv[3]);
- state->db_pass = strdup(argv[4]);
- } else {
- state->db_user = strdup("bind");
- state->db_pass = strdup("");
- }
- } else {
- state->db_host = strdup("localhost");
- state->db_user = strdup("bind");
- state->db_pass = strdup("");
- }
-
- if (state->log != NULL)
- state->log(ISC_LOG_INFO,
- "%s: DB=%s, Host=%s, User=%s",
- modname, state->db_name,
- state->db_host, state->db_user);
-
- /*
- * Assign the 'state' to dbdata so we get it in our callbacks
- */
-
-
- dlz_mutex_lock(&state->tx_mutex);
-
- /*
- * Populate DB instances
- */
- if (mysql_thread_safe()) {
- for (n = 0; n < MAX_DBI; n++) {
- my_bool opt = 1;
- dlz_mutex_init(&state->db[n].mutex, NULL);
- dlz_mutex_lock(&state->db[n].mutex);
- state->db[n].id = n;
- state->db[n].connected = 0;
- state->db[n].sock = mysql_init(NULL);
- mysql_options(state->db[n].sock,
- MYSQL_READ_DEFAULT_GROUP,
- modname);
- mysql_options(state->db[n].sock,
- MYSQL_OPT_RECONNECT, &opt);
- dlz_mutex_unlock(&state->db[n].mutex);
- }
-
- *dbdata = state;
- dlz_mutex_unlock(&state->tx_mutex);
- return (ISC_R_SUCCESS);
- }
-
- free(state->db_name);
- free(state->db_host);
- free(state->db_user);
- free(state->db_pass);
- dlz_mutex_destroy(&state->tx_mutex);
- free(state);
- return (ISC_R_FAILURE);
-}
-
-/*
- * Shut down the backend
- */
-void
-dlz_destroy(void *dbdata) {
- mysql_data_t *state = (mysql_data_t *)dbdata;
- int i;
-
- if (state->debug && state->log != NULL)
- state->log(ISC_LOG_INFO, "%s: shutting down", modname);
-
- for (i = 0; i < MAX_DBI; i++) {
- if (state->db[i].sock) {
- mysql_close(state->db[i].sock);
- state->db[i].sock=NULL;
- }
- }
- free(state->db_name);
- free(state->db_host);
- free(state->db_user);
- free(state->db_pass);
- dlz_mutex_destroy(&state->tx_mutex);
- free(state);
-}
-
-/*
- * See if we handle a given zone
- */
-isc_result_t
-dlz_findzonedb(void *dbdata, const char *name,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-{
- isc_result_t result = ISC_R_SUCCESS;
- mysql_data_t *state = (mysql_data_t *)dbdata;
- MYSQL_RES *res;
- char *query;
-
- /* Query the Zones table to see if this zone is present */
- query = build_query(state, NULL, Q_FINDZONE, name);
-
- if (query == NULL)
- return (ISC_R_NOMEMORY);
-
- res = db_query(state, NULL, query);
- if (res == NULL)
- return (ISC_R_FAILURE);
-
- if (mysql_num_rows(res) == 0)
- result = ISC_R_NOTFOUND;
-
- mysql_free_result(res);
- return (result);
-}
-
-/*
- * Perform a database lookup
- */
-isc_result_t
-dlz_lookup(const char *zone, const char *name, void *dbdata,
- dns_sdlzlookup_t *lookup, dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-{
- isc_result_t result;
- mysql_data_t *state = (mysql_data_t *)dbdata;
- isc_boolean_t found = ISC_FALSE;
- char *real_name;
- MYSQL_RES *res;
- MYSQL_ROW row;
- char *query;
- mysql_transaction_t *txn = NULL;
- mysql_instance_t *dbi = NULL;
-
- if (state->putrr == NULL) {
- if (state->log != NULL)
- state->log(ISC_LOG_ERROR,
- "%s: dlz_lookup - no putrr", modname);
- return (ISC_R_NOTIMPLEMENTED);
- }
-
- /* Are we okay to try to find the txn version? */
- if (clientinfo != NULL &&
- clientinfo->version >= DNS_CLIENTINFO_VERSION) {
- txn = (mysql_transaction_t *) clientinfo->dbversion;
- if (txn != NULL && validate_txn(state, txn) == ISC_R_SUCCESS)
- dbi = txn->dbi;
- if (dbi != NULL) {
- state->log(ISC_LOG_DEBUG(1),
- "%s: lookup in live transaction %p, DBI %p",
- modname, txn, dbi);
- }
- }
-
- if (strcmp(name, "@") == 0) {
- real_name = (char *) malloc(strlen(zone) + 1);
- if (real_name == NULL)
- return (ISC_R_NOMEMORY);
- strcpy(real_name, zone);
- } else {
- real_name = (char *) malloc(strlen(name) + 1);
- if (real_name == NULL)
- return (ISC_R_NOMEMORY);
- strcpy(real_name, name);
- }
-
- if (strcmp(real_name, zone) == 0) {
- /*
- * Get the Zones table data for use in the SOA:
- * zone admin serial refresh retry expire min
- */
- query = build_query(state, dbi, Q_GETSOA, zone);
- if (query == NULL) {
- free(real_name);
- return (ISC_R_NOMEMORY);
- }
-
- res = db_query(state, dbi, query);
- free (query);
-
- if (res == NULL) {
- free(real_name);
- return (ISC_R_NOTFOUND);
- }
-
- while ((row = mysql_fetch_row(res)) != NULL) {
- char host[1024], admin[1024], data[1024];
- int ttl;
-
- sscanf(row[7], "%d", &ttl);
- fqhn(row[0], zone, host);
- fqhn(row[1], zone, admin);
-
- /* zone admin serial refresh retry expire min */
- sprintf(data, "%s%s %s%s %s %s %s %s %s",
- host, dot(host), admin, dot(admin),
- row[2], row[3], row[4], row[5], row[6]);
-
- result = state->putrr(lookup, "soa", ttl, data);
- if (result != ISC_R_SUCCESS) {
- free(real_name);
- mysql_free_result(res);
- return (result);
- }
- }
-
- mysql_free_result(res);
-
- /*
- * Now we'll get the rest of the apex data
- */
- query = build_query(state, dbi, Q_GETAPEX, zone, real_name);
- } else
- query = build_query(state, dbi, Q_GETNODE, zone, real_name);
-
- res = db_query(state, dbi, query);
- free(query);
-
- if (res == NULL) {
- free(real_name);
- return (ISC_R_NOTFOUND);
- }
-
- while ((row = mysql_fetch_row(res)) != NULL) {
- int ttl;
- sscanf(row[2], "%d", &ttl);
- result = state->putrr(lookup, row[0], ttl, row[1]);
- if (result != ISC_R_SUCCESS) {
- free(real_name);
- mysql_free_result(res);
- return (result);
- }
-
- found = ISC_TRUE;
- }
-
- if (state->debug && state->log != NULL)
- state->log(ISC_LOG_INFO,
- "%s: dlz_lookup %s/%s/%s - (%d rows)",
- modname, name, real_name, zone,
- mysql_num_rows(res));
-
- mysql_free_result(res);
- free(real_name);
-
- if (!found)
- return (ISC_R_NOTFOUND);
-
- return (ISC_R_SUCCESS);
-}
-
-/*
- * See if a zone transfer is allowed
- */
-isc_result_t
-dlz_allowzonexfr(void *dbdata, const char *name, const char *client) {
- mysql_data_t *state = (mysql_data_t *)dbdata;
-
- if (state->debug && state->log != NULL)
- state->log(ISC_LOG_INFO,
- "dlz_allowzonexfr: %s %s", name, client);
-
- /* Just say yes for all our zones */
- return (dlz_findzonedb(dbdata, name, NULL, NULL));
-}
-
-/*
- * Perform a zone transfer
- */
-isc_result_t
-dlz_allnodes(const char *zone, void *dbdata, dns_sdlzallnodes_t *allnodes) {
- isc_result_t result = ISC_R_SUCCESS;
- mysql_data_t *state = (mysql_data_t *)dbdata;
- MYSQL_RES *res;
- MYSQL_ROW row;
- char *query;
-
- UNUSED(zone);
-
- if (state->debug && (state->log != NULL))
- state->log(ISC_LOG_INFO, "dlz_allnodes: %s", zone);
-
- if (state->putnamedrr == NULL)
- return (ISC_R_NOTIMPLEMENTED);
-
- /*
- * Get all the ZoneData for this zone
- */
- query = build_query(state, NULL, Q_GETALL, zone);
- if (query == NULL)
- return (ISC_R_NOMEMORY);
-
- res = db_query(state, NULL, query);
- free(query);
- if (res == NULL)
- return (ISC_R_NOTFOUND);
-
- while ((row = mysql_fetch_row(res)) != NULL) {
- char hostname[1024];
- int ttl;
-
- sscanf(row[3], "%d", &ttl);
- fqhn(row[0], zone, hostname);
- result = state->putnamedrr(allnodes, hostname,
- row[1], ttl, row[2]);
- if (result != ISC_R_SUCCESS)
- break;
- }
-
- mysql_free_result(res);
- return (result);
-}
-
-/*
- * Start a transaction
- */
-isc_result_t
-dlz_newversion(const char *zone, void *dbdata, void **versionp) {
- isc_result_t result = ISC_R_FAILURE;
- mysql_data_t *state = (mysql_data_t *) dbdata;
- MYSQL_RES *res;
- MYSQL_ROW row;
- char *query;
- char zone_id[16];
- mysql_transaction_t *txn = NULL, *newtx = NULL;
-
- /*
- * Check Zone is writable
- */
- query = build_query(state, NULL, Q_WRITEABLE, zone);
- if (query == NULL)
- return (ISC_R_NOMEMORY);
-
- res = db_query(state, NULL, query);
- free(query);
- if (res == NULL)
- return (ISC_R_FAILURE);
-
- if ((row = mysql_fetch_row(res)) == NULL) {
- mysql_free_result(res);
- return (ISC_R_FAILURE);
- }
-
- strcpy(zone_id, row[0]);
- mysql_free_result(res);
-
- /*
- * See if we already have a transaction for this zone
- */
- dlz_mutex_lock(&state->tx_mutex);
- for (txn = state->transactions; txn != NULL; txn = txn->next) {
- if (strcmp(txn->zone, zone) == 0) {
- if (state->log != NULL)
- state->log(ISC_LOG_ERROR,
- "%s: transaction already "
- "started for zone %s", modname, zone);
- dlz_mutex_unlock(&state->tx_mutex);
- return (ISC_R_FAILURE);
- }
- }
-
- /*
- * Create new transaction
- */
- newtx = (mysql_transaction_t *)
- malloc(sizeof(mysql_transaction_t));
- newtx->zone = strdup(zone);
- newtx->zone_id = strdup(zone_id);
- newtx->dbi = get_dbi(state);
- newtx->next = NULL;
-
- if (newtx->dbi == NULL) {
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- result = db_execute(state, newtx->dbi, "START TRANSACTION");
- if (result != ISC_R_SUCCESS) {
- dlz_mutex_unlock(&newtx->dbi->mutex);
- goto cleanup;
- }
-
- /*
- * Add this tx to front of list
- */
- newtx->next = state->transactions;
- state->transactions = newtx;
-
- if (state->debug && (state->log != NULL))
- state->log(ISC_LOG_INFO, "%s: New tx %x", modname, newtx);
-
- cleanup:
- dlz_mutex_unlock(&state->tx_mutex);
- if (result == ISC_R_SUCCESS) {
- *versionp = (void *) newtx;
- } else {
- dlz_mutex_unlock(&state->tx_mutex);
- free(newtx->zone);
- free(newtx->zone_id);
- free(newtx);
- }
-
- return (result);
-}
-
-/*
- * End a transaction
- */
-void
-dlz_closeversion(const char *zone, isc_boolean_t commit,
- void *dbdata, void **versionp)
-{
- isc_result_t result;
- mysql_data_t *state = (mysql_data_t *)dbdata;
- mysql_transaction_t *txn = (mysql_transaction_t *)*versionp;
- mysql_transaction_t *txp;
- char *query;
- MYSQL_RES *res;
- MYSQL_ROW row;
-
- /*
- * Find the transaction
- */
- dlz_mutex_lock(&state->tx_mutex);
- if (state->transactions == txn) {
- /* Tx is first in list; remove it. */
- state->transactions = txn->next;
- } else {
- txp = state->transactions;
- while (txp != NULL) {
- if (txp->next != NULL) {
- if (txp->next == txn) {
- txp->next = txn->next;
- break;
- }
- }
- if (txp == txn) {
- txp = txn->next;
- break;
- }
- txp = txp->next;
- }
- }
-
- /*
- * Tidy up
- */
- dlz_mutex_unlock(&state->tx_mutex);
- *versionp = NULL;
-
- if (commit) {
- int oldsn = 0, newsn = 0;
-
- /*
- * Find out the serial number of the zone out with the
- * transaction so we can see if it has incremented or not
- */
- query = build_query(state, txn->dbi, Q_GETSERIAL, zone);
- if (query == NULL && state->log != NULL) {
- state->log(ISC_LOG_ERROR,
- "%s: unable to commit transaction %x "
- "on zone %s: no memory",
- modname, txn, zone);
- return;
- }
-
- res = db_query(state, txn->dbi, query);
- if (res != NULL) {
- while ((row = mysql_fetch_row(res)) != NULL)
- sscanf(row[0], "%d", &oldsn);
- mysql_free_result(res);
- }
-
- /*
- * Commit the transaction to the database
- */
- result = db_execute(state, txn->dbi, "COMMIT");
- if (result != ISC_R_SUCCESS && state->log != NULL) {
- state->log(ISC_LOG_INFO,
- "%s: (%x) commit transaction on zone %s",
- modname, txn, zone);
- return;
- }
-
- if (state->debug && state->log != NULL)
- state->log(ISC_LOG_INFO,
- "%s: (%x) committing transaction "
- "on zone %s",
- modname, txn, zone);
-
- /*
- * Now get the serial number again
- */
- query = build_query(state, txn->dbi, Q_GETSERIAL, zone);
- res = db_query(state, txn->dbi, query);
- free(query);
-
- if (res != NULL) {
- while ((row = mysql_fetch_row(res)) != NULL)
- sscanf(row[0], "%d", &newsn);
- mysql_free_result(res);
- }
-
- /*
- * Look to see if serial numbers have changed
- */
- if (newsn > oldsn)
- notify(state, zone, newsn);
- } else {
- result = db_execute(state, txn->dbi, "ROLLBACK");
- if (state->debug && (state->log != NULL))
- state->log(ISC_LOG_INFO,
- "%s: (%x) roll back transaction on zone %s",
- modname, txn, zone);
- }
-
- /*
- * Unlock the mutex for this txn
- */
- dlz_mutex_unlock(&txn->dbi->mutex);
-
- /*
- * Free up other structures
- */
- free(txn->zone);
- free(txn->zone_id);
- free(txn);
-}
-
-/*
- * Configure a writeable zone
- */
-#if DLZ_DLOPEN_VERSION < 3
-isc_result_t
-dlz_configure(dns_view_t *view, void *dbdata)
-#else /* DLZ_DLOPEN_VERSION >= 3 */
-isc_result_t
-dlz_configure(dns_view_t *view, dns_dlzdb_t *dlzdb, void *dbdata)
-#endif /* DLZ_DLOPEN_VERSION */
-{
- mysql_data_t *state = (mysql_data_t *)dbdata;
- isc_result_t result;
- MYSQL_RES *res;
- MYSQL_ROW row;
- int count;
-
- /*
- * Seed PRNG (used by Notify code)
- */
- srand(getpid());
-
- if (state->debug && state->log != NULL)
- state->log(ISC_LOG_INFO, "%s: dlz_confgure", modname);
-
- if (state->writeable_zone == NULL) {
- if (state->log != NULL)
- state->log(ISC_LOG_ERROR,
- "%s: no writeable_zone method available",
- modname);
- return (ISC_R_FAILURE);
- }
-
- /*
- * Get a list of Zones (ignore writeable column at this point)
- */
- res = db_query(state, NULL, Q_GETZONES);
- if (res == NULL)
- return (ISC_R_FAILURE);
-
- count = 0;
- while ((row = mysql_fetch_row(res)) != NULL) {
- int sn;
- sscanf(row[1], "%d", &sn);
- notify(state, row[0], sn);
- result = state->writeable_zone(view,
-#if DLZ_DLOPEN_VERSION >= 3
- dlzdb,
-#endif
- row[0]);
- if (result != ISC_R_SUCCESS) {
- if (state->log != NULL)
- state->log(ISC_LOG_ERROR,
- "%s: failed to configure zone %s",
- modname, row[0]);
- mysql_free_result(res);
- return (result);
- }
- count++;
- }
- mysql_free_result(res);
-
- if (state->debug && state->log != NULL)
- state->log(ISC_LOG_INFO,
- "%s: configured %d zones", modname, count);
- return (ISC_R_SUCCESS);
-}
-
-/*
- * Authorize a zone update
- */
-isc_boolean_t
-dlz_ssumatch(const char *signer, const char *name, const char *tcpaddr,
- const char *type, const char *key, uint32_t keydatalen,
- unsigned char *keydata, void *dbdata)
-{
- mysql_data_t *state = (mysql_data_t *)dbdata;
-
- UNUSED(tcpaddr);
- UNUSED(type);
- UNUSED(keydatalen);
- UNUSED(keydata);
- UNUSED(key);
-
- if (state->debug && state->log != NULL)
- state->log(ISC_LOG_INFO,
- "%s: allowing update of %s by key %s",
- modname, name, signer);
- return (ISC_TRUE);
-}
-
-isc_result_t
-dlz_addrdataset(const char *name, const char *rdatastr,
- void *dbdata, void *version)
-{
- mysql_data_t *state = (mysql_data_t *)dbdata;
- mysql_transaction_t *txn = (mysql_transaction_t *)version;
- char *new_name, *query;
- mysql_record_t *record;
- isc_result_t result;
-
- if (txn == NULL)
- return (ISC_R_FAILURE);
-
- new_name = relname(name, txn->zone);
- if (new_name == NULL)
- return (ISC_R_NOMEMORY);
-
- if (state->debug && (state->log != NULL))
- state->log(ISC_LOG_INFO, "%s: add (%x) %s (as %s) %s",
- modname, version, name, new_name, rdatastr);
-
- record = makerecord(state, new_name, rdatastr);
- free(new_name);
- if (record == NULL)
- return (ISC_R_FAILURE);
-
- /* Write out data to database */
- if (strcasecmp(record->type, "SOA") != 0) {
- query = build_query(state, txn->dbi, I_DATA,
- txn->zone_id, record->name,
- record->type, record->data,
- record->ttl);
- if (query == NULL) {
- result = ISC_R_FAILURE;
- goto cleanup;
- }
- result = db_execute(state, txn->dbi, query);
- free(query);
- } else {
- /*
- * This is an SOA record, so we update: it must exist,
- * or we wouldn't have gotten this far.
- * SOA: zone admin serial refresh retry expire min
- */
- char sn[32];
- sscanf(record->data, "%*s %*s %31s %*s %*s %*s %*s", sn);
- query = build_query(state, txn->dbi, U_SERIAL, sn,
- txn->zone_id);
- if (query == NULL) {
- result = ISC_R_FAILURE;
- goto cleanup;
- }
- result = db_execute(state, txn->dbi, query);
- free(query);
- }
-
- cleanup:
- free(record);
- return (result);
-}
-
-isc_result_t
-dlz_subrdataset(const char *name, const char *rdatastr,
- void *dbdata, void *version)
-{
- mysql_data_t *state = (mysql_data_t *)dbdata;
- mysql_transaction_t *txn = (mysql_transaction_t *)version;
- char *new_name, *query;
- mysql_record_t *record;
- isc_result_t result;
-
- if (txn == NULL)
- return (ISC_R_FAILURE);
-
- new_name = relname(name, txn->zone);
- if (new_name == NULL)
- return (ISC_R_NOMEMORY);
-
- if (state->debug && (state->log != NULL))
- state->log(ISC_LOG_INFO, "%s: sub (%x) %s %s",
- modname, version, name, rdatastr);
-
- record = makerecord(state, new_name, rdatastr);
- free(new_name);
- if (record == NULL)
- return (ISC_R_FAILURE);
- /*
- * If 'type' isn't 'SOA', delete the records
- */
- if (strcasecmp(record->type, "SOA") == 0)
- result = ISC_R_SUCCESS;
- else {
- query = build_query(state, txn->dbi, D_RECORD,
- txn->zone_id, record->name,
- record->type, record->data,
- record->ttl);
- if (query == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
-
- result = db_execute(state, txn->dbi, query);
- free(query);
- }
-
- cleanup:
- free(record);
- return (result);
-}
-
-isc_result_t
-dlz_delrdataset(const char *name, const char *type,
- void *dbdata, void *version)
-{
- mysql_data_t *state = (mysql_data_t *)dbdata;
- mysql_transaction_t *txn = (mysql_transaction_t *)version;
- char *new_name, *query;
- isc_result_t result;
-
- if (txn == NULL)
- return (ISC_R_FAILURE);
-
- new_name = relname(name, txn->zone);
- if (new_name == NULL)
- return (ISC_R_NOMEMORY);
-
- if (state->debug && (state->log != NULL))
- state->log(ISC_LOG_INFO, "%s: del (%x) %s %s",
- modname, version, name, type);
-
- query = build_query(state, txn->dbi, D_RRSET,
- txn->zone_id, new_name, type);
- if (query == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
-
- result = db_execute(state, txn->dbi, query);
- free(query);
-
- cleanup:
- free(new_name);
- return (result);
-}
diff --git a/contrib/dlz/modules/mysqldyn/testing/README b/contrib/dlz/modules/mysqldyn/testing/README
deleted file mode 100644
index 862ec6f3..00000000
--- a/contrib/dlz/modules/mysqldyn/testing/README
+++ /dev/null
@@ -1,11 +0,0 @@
-These files were used for testing on Ubuntu Linux using MySQL
-
-To set up a test server:
-- Install MySQL: sudo apt-get install mysql-server
-- Run "mysql --user=USER --password=PASSWORD < dlz.schema" to set up database
-- Run "mysql --user=USER --password=PASSWORD < dlz.data" to populate it
-- Update named.conf with correct USER and PASSWORD
-- Generate a TSIG key: "ddns-confgen -qz example.com"
-
-To query the database, use "dig -p 5300 @localhost"
-To send dynamic updates, use "nsupdate -p 5300 -k ddns.key"
diff --git a/contrib/dlz/modules/mysqldyn/testing/dlz.data b/contrib/dlz/modules/mysqldyn/testing/dlz.data
deleted file mode 100644
index 068ad7a3..00000000
--- a/contrib/dlz/modules/mysqldyn/testing/dlz.data
+++ /dev/null
@@ -1,18 +0,0 @@
-use BindDB;
-insert into `Zones`
- ( `id`, `domain`, `host`, `admin`, `serial`, `expire`,
- `refresh`, `retry`, `minimum`, `ttl`, `writeable`) VALUES
- (1, 'example.com', '@', 'info', 2014040100, 10800,
- 7200, 604800, 86400, 86400, 1);
-
-insert into `ZoneData`
- (`id`, `zone_id`, `name`, `type`, `data`) VALUES
- ('', 1, '@', 'NS', 'ns1.example.com.'),
- ('', 1, '@', 'NS', 'ns2.example.com.'),
- ('', 1, '@', 'MX', '10 mail.example.com.'),
- ('', 1, '@', 'A', '192.168.0.2'),
- ('', 1, '@', 'TXT', '"v=spf1 ip:192.168.0.3 ~all"'),
- ('', 1, 'www', 'CNAME', 'example.com.'),
- ('', 1, 'mail', 'A', '192.168.0.3'),
- ('', 1, 'ns1', 'A', '192.168.1.111'),
- ('', 1, 'ns2', 'A', '192.168.1.222');
diff --git a/contrib/dlz/modules/mysqldyn/testing/dlz.schema b/contrib/dlz/modules/mysqldyn/testing/dlz.schema
deleted file mode 100644
index a28f9121..00000000
--- a/contrib/dlz/modules/mysqldyn/testing/dlz.schema
+++ /dev/null
@@ -1,31 +0,0 @@
-CREATE DATABASE `BindDB` DEFAULT CHARACTER SET latin1;
-USE `BindDB`;
-
-CREATE TABLE `ZoneData` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `zone_id` int(11) NOT NULL,
- `name` varchar(128) NOT NULL DEFAULT '',
- `type` varchar(16) NOT NULL DEFAULT '',
- `data` varchar(128) NOT NULL DEFAULT '',
- `ttl` int(11) NOT NULL DEFAULT '86400',
- PRIMARY KEY (`id`),
- KEY `zone_idx` (`zone_id`),
- KEY `name_idx` (`zone_id`, `name`),
- KEY `type_idx` (`type`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-
-CREATE TABLE `Zones` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `domain` varchar(128) NOT NULL DEFAULT '',
- `host` varchar(128) NOT NULL DEFAULT '',
- `admin` varchar(128) NOT NULL DEFAULT '',
- `serial` int(11) NOT NULL DEFAULT '1',
- `expire` int(11) NOT NULL DEFAULT '86400',
- `refresh` int(11) NOT NULL DEFAULT '86400',
- `retry` int(11) NOT NULL DEFAULT '86400',
- `minimum` int(11) NOT NULL DEFAULT '86400',
- `ttl` int(11) NOT NULL DEFAULT '86400',
- `writeable` tinyint(1) NOT NULL DEFAULT '0',
- PRIMARY KEY (`id`),
- KEY `domain_idx` (`domain`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
diff --git a/contrib/dlz/modules/mysqldyn/testing/named.conf b/contrib/dlz/modules/mysqldyn/testing/named.conf
deleted file mode 100644
index 3b3a0dc6..00000000
--- a/contrib/dlz/modules/mysqldyn/testing/named.conf
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-controls { };
-
-options {
- directory ".";
- port 5300;
- pid-file "named.pid";
- session-keyfile "session.key";
- listen-on { any; };
- listen-on-v6 { none; };
- recursion no;
-};
-
-include "ddns.key";
-
-key rndc_key {
- secret "1234abcd8765";
- algorithm hmac-md5;
-};
-
-controls {
- inet 127.0.0.1 port 9953 allow { any; } keys { rndc_key; };
-};
-
-dlz "test" {
- database "dlopen ../dlz_mysqldyn_mod.so BindDB localhost root password";
-};
diff --git a/contrib/dlz/modules/perl/Makefile b/contrib/dlz/modules/perl/Makefile
deleted file mode 100644
index ff2da39f..00000000
--- a/contrib/dlz/modules/perl/Makefile
+++ /dev/null
@@ -1,33 +0,0 @@
-# For building the dlz_perl_driver driver we don't use
-# the bind9 build structure as the aim is to provide an
-# perl_driver that is separable from the bind9 source tree
-
-CFLAGS += -fPIC -O2 -I../include
-FLAGS_PERL ?= perl
-LIBNAME = dlz_perl_driver.so
-
-all: $(LIBNAME)
-
-dlz_perl_driver.o: dlz_perl_driver.c
- $(CC) $(CFLAGS) `${FLAGS_PERL} -MExtUtils::Embed -e ccopts` -c -o dlz_perl_driver.o dlz_perl_driver.c
-
-
-dlz_perl_callback_clientinfo.c: dlz_perl_callback_clientinfo.xs
- ${FLAGS_PERL} `${FLAGS_PERL} -MConfig -le 'print $$Config{privlibexp}'`/ExtUtils/xsubpp -prototypes -typemap `${FLAGS_PERL} -MConfig -le 'print $$Config{privlibexp}'`/ExtUtils/typemap dlz_perl_callback_clientinfo.xs > dlz_perl_callback_clientinfo.c
-
-dlz_perl_callback_clientinfo.o: dlz_perl_callback_clientinfo.c
- $(CC) $(CFLAGS) `${FLAGS_PERL} -MExtUtils::Embed -e ccopts` -c -o dlz_perl_callback_clientinfo.o dlz_perl_callback_clientinfo.c
-
-
-dlz_perl_callback.c: dlz_perl_callback.xs
- ${FLAGS_PERL} `${FLAGS_PERL} -MConfig -le 'print $$Config{privlibexp}'`/ExtUtils/xsubpp -prototypes -typemap `${FLAGS_PERL} -MConfig -le 'print $$Config{privlibexp}'`/ExtUtils/typemap dlz_perl_callback.xs > dlz_perl_callback.c
-
-dlz_perl_callback.o: dlz_perl_callback.c
- $(CC) $(CFLAGS) `${FLAGS_PERL} -MExtUtils::Embed -e ccopts` -c -o dlz_perl_callback.o dlz_perl_callback.c
-
-
-$(LIBNAME): dlz_perl_driver.o dlz_perl_callback_clientinfo.o dlz_perl_callback.o
- $(CC) $(LDFLAGS) -shared -o $(LIBNAME) dlz_perl_driver.o dlz_perl_callback_clientinfo.o dlz_perl_callback.o `${FLAGS_PERL} -MExtUtils::Embed -e ldopts`
-
-clean:
- rm -f dlz_perl_driver.o dlz_perl_driver.so dlz_perl_callback_clientinfo.c dlz_perl_callback_clientinfo.o dlz_perl_callback.c dlz_perl_callback.o
diff --git a/contrib/dlz/modules/perl/README b/contrib/dlz/modules/perl/README
deleted file mode 100644
index 6f79e3f0..00000000
--- a/contrib/dlz/modules/perl/README
+++ /dev/null
@@ -1,9 +0,0 @@
-BIND 9 DLZ Perl module (bind-dlz-tools)
-
-Written by John Eaglesham <dns@8192.net>
-
-A dynamically loadable zone (DLZ) plugin embedding a Perl
-interpreter in BIND, allowing Perl scripts to be written to
-integrate with BIND and serve DNS data.
-
-More information/updates at http://bind-dlz-tools.sourceforge.net/
diff --git a/contrib/dlz/modules/perl/dlz_perl_callback.xs b/contrib/dlz/modules/perl/dlz_perl_callback.xs
deleted file mode 100644
index ccecb249..00000000
--- a/contrib/dlz/modules/perl/dlz_perl_callback.xs
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2012 John Eaglesham
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND JOHN EAGLESHAM
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * JOHN EAGLESHAM BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-#include "dlz_perl_driver.h"
-
-#include <dlz_minimal.h>
-
-/* And some XS code. */
-MODULE = DLZ_Perl PACKAGE = DLZ_Perl
-
-int
-LOG_INFO()
- CODE:
- RETVAL = ISC_LOG_INFO;
- OUTPUT:
- RETVAL
-
-int
-LOG_NOTICE()
- CODE:
- RETVAL = ISC_LOG_NOTICE;
- OUTPUT:
- RETVAL
-
-int
-LOG_WARNING()
- CODE:
- RETVAL = ISC_LOG_WARNING;
- OUTPUT:
- RETVAL
-
-int
-LOG_ERROR()
- CODE:
- RETVAL = ISC_LOG_ERROR;
- OUTPUT:
- RETVAL
-
-int
-LOG_CRITICAL()
- CODE:
- RETVAL = ISC_LOG_CRITICAL;
- OUTPUT:
- RETVAL
-
-
-void
-log(opaque, level, msg)
- IV opaque
- int level
- char *msg
-
- PREINIT:
- log_t *log = (log_t *) opaque;
-
- CODE:
- log( level, msg );
-
diff --git a/contrib/dlz/modules/perl/dlz_perl_callback_clientinfo.xs b/contrib/dlz/modules/perl/dlz_perl_callback_clientinfo.xs
deleted file mode 100644
index fd341d93..00000000
--- a/contrib/dlz/modules/perl/dlz_perl_callback_clientinfo.xs
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (C) 2012 John Eaglesham
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND JOHN EAGLESHAM
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * JOHN EAGLESHAM BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#define ADDR_BUF_LEN INET6_ADDRSTRLEN
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-#include "dlz_perl_driver.h"
-
-#include <dlz_minimal.h>
-
-/* And some XS code. */
-MODULE = DLZ_Perl::clientinfo PACKAGE = DLZ_Perl::clientinfo
-
-PROTOTYPES: DISABLE
-
-void
-sourceip(opaque)
- SV *opaque
-
- PREINIT:
- const char *ret;
- char addr_buf[ADDR_BUF_LEN];
- int port;
- isc_sockaddr_t *src;
- dlz_perl_clientinfo_opaque *ci;
- I32 wantarray = GIMME_V;
-
- PPCODE:
- if (!SvTRUE(opaque) || !SvIOK(opaque)) XSRETURN_EMPTY;
-
- /*
- * Safe, because Perl guarantees that an IV (the type we
- * pass into DLZ functions who pass it here) is able to
- * hold a pointer.
- */
- ci = (dlz_perl_clientinfo_opaque *) SvIV(opaque);
- if (wantarray == G_VOID || ci->methods == NULL ||
- ci->methods->version - ci->methods->age <
- DNS_CLIENTINFOMETHODS_VERSION)
- XSRETURN_EMPTY;
-
- ci->methods->sourceip(ci->clientinfo, &src);
-
- switch (src->type.sa.sa_family) {
- case AF_INET:
- port = ntohs(src->type.sin.sin_port);
- ret = inet_ntop(AF_INET,
- &src->type.sin.sin_addr,
- addr_buf, ADDR_BUF_LEN);
- break;
- case AF_INET6:
- port = ntohs(src->type.sin6.sin6_port);
- ret = inet_ntop(AF_INET6,
- &src->type.sin6.sin6_addr,
- addr_buf, ADDR_BUF_LEN);
- break;
- default:
- ret = NULL;
- }
-
- if (ret == NULL) XSRETURN_EMPTY;
-
- XPUSHs(sv_2mortal(newSVpv(addr_buf, strlen(addr_buf))));
- if (wantarray == G_ARRAY) XPUSHs(sv_2mortal(newSViv(port)));
-
diff --git a/contrib/dlz/modules/perl/dlz_perl_driver.c b/contrib/dlz/modules/perl/dlz_perl_driver.c
deleted file mode 100644
index 2a9a44f5..00000000
--- a/contrib/dlz/modules/perl/dlz_perl_driver.c
+++ /dev/null
@@ -1,738 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 1999-2001, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-/*
- * Copyright (C) 2009-2012 John Eaglesham
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND JOHN EAGLESHAM
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * JOHN EAGLESHAM BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <EXTERN.h>
-#include <perl.h>
-
-#include <dlz_minimal.h>
-
-#include "dlz_perl_driver.h"
-
-/* Enable debug logging? */
-#if 0
-#define carp(...) cd->log(ISC_LOG_INFO, __VA_ARGS__);
-#else
-#define carp(...)
-#endif
-
-#ifndef MULTIPLICITY
-/* This is a pretty terrible work-around for handling HUP/rndc reconfig, but
- * the way BIND/DLZ handles reloads causes it to create a second back end
- * before removing the first. In the case of a single global interpreter,
- * serious problems arise. We can hack around this, but it's much better to do
- * it properly and link against a perl compiled with multiplicity. */
-static PerlInterpreter *global_perl = NULL;
-static int global_perl_dont_free = 0;
-#endif
-
-typedef struct config_data {
- PerlInterpreter *perl;
- char *perl_source;
- SV *perl_class;
-
- /* Functions given to us by bind9 */
- log_t *log;
- dns_sdlz_putrr_t *putrr;
- dns_sdlz_putnamedrr_t *putnamedrr;
- dns_dlz_writeablezone_t *writeable_zone;
-} config_data_t;
-
-/* Note, this code generates warnings due to lost type qualifiers. This code
- * is (almost) verbatim from perlembed, and is known to work correctly despite
- * the warnings.
- */
-EXTERN_C void xs_init (pTHX);
-EXTERN_C void boot_DynaLoader (pTHX_ CV* cv);
-EXTERN_C void boot_DLZ_Perl__clientinfo (pTHX_ CV* cv);
-EXTERN_C void boot_DLZ_Perl (pTHX_ CV* cv);
-EXTERN_C void
-xs_init(pTHX)
-{
- char *file = __FILE__;
- dXSUB_SYS;
-
- /* DynaLoader is a special case */
- newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);
- newXS("DLZ_Perl::clientinfo::bootstrap", boot_DLZ_Perl__clientinfo, file);
- newXS("DLZ_Perl::bootstrap", boot_DLZ_Perl, file);
-}
-
-/*
- * methods
- */
-
-/*
- * remember a helper function, from the bind9 dlz_dlopen driver
- */
-static void b9_add_helper(config_data_t *state,
- const char *helper_name, void *ptr)
-{
- if (strcmp(helper_name, "log") == 0)
- state->log = ptr;
- if (strcmp(helper_name, "putrr") == 0)
- state->putrr = ptr;
- if (strcmp(helper_name, "putnamedrr") == 0)
- state->putnamedrr = ptr;
- if (strcmp(helper_name, "writeable_zone") == 0)
- state->writeable_zone = ptr;
-}
-
-int dlz_version(unsigned int *flags) {
- return DLZ_DLOPEN_VERSION;
-}
-
-isc_result_t dlz_allnodes(const char *zone, void *dbdata,
- dns_sdlzallnodes_t *allnodes)
-{
- config_data_t *cd = (config_data_t *) dbdata;
- isc_result_t retval;
- int rrcount, r;
- SV *record_ref;
- SV **rr_name;
- SV **rr_type;
- SV **rr_ttl;
- SV **rr_data;
-#ifdef MULTIPLICITY
- PerlInterpreter *my_perl = cd->perl;
-#endif
- dSP;
-
- PERL_SET_CONTEXT(cd->perl);
- ENTER;
- SAVETMPS;
-
- PUSHMARK(SP);
- XPUSHs(cd->perl_class);
- XPUSHs(sv_2mortal(newSVpv(zone, 0)));
- PUTBACK;
-
- carp("DLZ Perl: Calling allnodes for zone %s", zone);
- rrcount = call_method("allnodes", G_ARRAY|G_EVAL);
- carp("DLZ Perl: Call to allnodes returned rrcount of %i", rrcount);
-
- SPAGAIN;
-
- if (SvTRUE(ERRSV)) {
- POPs;
- cd->log(ISC_LOG_ERROR, "DLZ Perl: allnodes for zone %s died in eval: %s", zone, SvPV_nolen(ERRSV));
- retval = ISC_R_FAILURE;
- goto CLEAN_UP_AND_RETURN;
- }
-
- if (!rrcount) {
- retval = ISC_R_NOTFOUND;
- goto CLEAN_UP_AND_RETURN;
- }
-
- retval = ISC_R_SUCCESS;
- r = 0;
- while (r++ < rrcount) {
- record_ref = POPs;
- if (
- (!SvROK(record_ref)) ||
- (SvTYPE(SvRV(record_ref)) != SVt_PVAV)
- ) {
- cd->log(ISC_LOG_ERROR,
- "DLZ Perl: allnodes for zone %s "
- "returned an invalid value "
- "(expected array of arrayrefs)",
- zone);
- retval = ISC_R_FAILURE;
- break;
- }
-
- record_ref = SvRV(record_ref);
-
- rr_name = av_fetch((AV *) record_ref, 0, 0);
- rr_type = av_fetch((AV *) record_ref, 1, 0);
- rr_ttl = av_fetch((AV *) record_ref, 2, 0);
- rr_data = av_fetch((AV *) record_ref, 3, 0);
-
- if (rr_name == NULL || rr_type == NULL ||
- rr_ttl == NULL || rr_data == NULL)
- {
- cd->log(ISC_LOG_ERROR,
- "DLZ Perl: allnodes for zone %s "
- "returned an array that was missing data",
- zone);
- retval = ISC_R_FAILURE;
- break;
- }
-
- carp("DLZ Perl: Got record %s/%s = %s",
- SvPV_nolen(*rr_name), SvPV_nolen(*rr_type),
- SvPV_nolen(*rr_data));
- retval = cd->putnamedrr(allnodes,
- SvPV_nolen(*rr_name),
- SvPV_nolen(*rr_type),
- SvIV(*rr_ttl), SvPV_nolen(*rr_data));
- if (retval != ISC_R_SUCCESS) {
- cd->log(ISC_LOG_ERROR,
- "DLZ Perl: putnamedrr in allnodes "
- "for zone %s failed with code %i "
- "(did lookup return invalid record data?)",
- zone, retval);
- break;
- }
- }
-
-CLEAN_UP_AND_RETURN:
- PUTBACK;
- FREETMPS;
- LEAVE;
-
- carp("DLZ Perl: Returning from allnodes, r = %i, retval = %i",
- r, retval);
-
- return (retval);
-}
-
-isc_result_t
-dlz_allowzonexfr(void *dbdata, const char *name, const char *client) {
- config_data_t *cd = (config_data_t *) dbdata;
- int r;
- isc_result_t retval;
-#ifdef MULTIPLICITY
- PerlInterpreter *my_perl = cd->perl;
-#endif
- dSP;
-
- PERL_SET_CONTEXT(cd->perl);
- ENTER;
- SAVETMPS;
-
- PUSHMARK(SP);
- XPUSHs(cd->perl_class);
- XPUSHs(sv_2mortal(newSVpv(name, 0)));
- XPUSHs(sv_2mortal(newSVpv(client, 0)));
- PUTBACK;
-
- r = call_method("allowzonexfr", G_SCALAR|G_EVAL);
- SPAGAIN;
-
- if (SvTRUE(ERRSV)) {
- /*
- * On error there's an undef at the top of the stack. Pop
- * it away so we don't leave junk on the stack for the next
- * caller.
- */
- POPs;
- cd->log(ISC_LOG_ERROR,
- "DLZ Perl: allowzonexfr died in eval: %s",
- SvPV_nolen(ERRSV));
- retval = ISC_R_FAILURE;
- } else if (r == 0) {
- /* Client returned nothing -- zone not found. */
- retval = ISC_R_NOTFOUND;
- } else if (r > 1) {
- /* Once again, clean out the stack when possible. */
- while (r--) POPi;
- cd->log(ISC_LOG_ERROR,
- "DLZ Perl: allowzonexfr returned too many parameters!");
- retval = ISC_R_FAILURE;
- } else {
- /*
- * Client returned true/false -- we're authoritative for
- * the zone.
- */
- r = POPi;
- if (r)
- retval = ISC_R_SUCCESS;
- else
- retval = ISC_R_NOPERM;
- }
-
- PUTBACK;
- FREETMPS;
- LEAVE;
- return (retval);
-}
-
-#if DLZ_DLOPEN_VERSION < 3
-isc_result_t
-dlz_findzonedb(void *dbdata, const char *name)
-#else
-isc_result_t
-dlz_findzonedb(void *dbdata, const char *name,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-#endif
-{
- config_data_t *cd = (config_data_t *) dbdata;
- int r;
- isc_result_t retval;
-#ifdef MULTIPLICITY
- PerlInterpreter *my_perl = cd->perl;
-#endif
-
-#if DLZ_DLOPEN_VERSION >= 3
- UNUSED(methods);
- UNUSED(clientinfo);
-#endif
-
- dSP;
- carp("DLZ Perl: findzone looking for '%s'", name);
-
- PERL_SET_CONTEXT(cd->perl);
- ENTER;
- SAVETMPS;
-
- PUSHMARK(SP);
- XPUSHs(cd->perl_class);
- XPUSHs(sv_2mortal(newSVpv(name, 0)));
- PUTBACK;
-
- r = call_method("findzone", G_SCALAR|G_EVAL);
- SPAGAIN;
-
- if (SvTRUE(ERRSV)) {
- /*
- * On error there's an undef at the top of the stack. Pop
- * it away so we don't leave junk on the stack for the next
- * caller.
- */
- POPs;
- cd->log(ISC_LOG_ERROR,
- "DLZ Perl: findzone died in eval: %s",
- SvPV_nolen(ERRSV));
- retval = ISC_R_FAILURE;
- } else if (r == 0) {
- retval = ISC_R_FAILURE;
- } else if (r > 1) {
- /* Once again, clean out the stack when possible. */
- while (r--) POPi;
- cd->log(ISC_LOG_ERROR,
- "DLZ Perl: findzone returned too many parameters!");
- retval = ISC_R_FAILURE;
- } else {
- r = POPi;
- if (r)
- retval = ISC_R_SUCCESS;
- else
- retval = ISC_R_NOTFOUND;
- }
-
- PUTBACK;
- FREETMPS;
- LEAVE;
- return (retval);
-}
-
-
-#if DLZ_DLOPEN_VERSION == 1
-isc_result_t
-dlz_lookup(const char *zone, const char *name,
- void *dbdata, dns_sdlzlookup_t *lookup)
-#else
-isc_result_t
-dlz_lookup(const char *zone, const char *name,
- void *dbdata, dns_sdlzlookup_t *lookup,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-#endif
-{
- isc_result_t retval;
- config_data_t *cd = (config_data_t *) dbdata;
- int rrcount, r;
- dlz_perl_clientinfo_opaque opaque;
- SV *record_ref;
- SV **rr_type;
- SV **rr_ttl;
- SV **rr_data;
-#ifdef MULTIPLICITY
- PerlInterpreter *my_perl = cd->perl;
-#endif
-
-#if DLZ_DLOPEN_VERSION >= 2
- UNUSED(methods);
- UNUSED(clientinfo);
-#endif
-
- dSP;
- PERL_SET_CONTEXT(cd->perl);
- ENTER;
- SAVETMPS;
-
- opaque.methods = methods;
- opaque.clientinfo = clientinfo;
-
- PUSHMARK(SP);
- XPUSHs(cd->perl_class);
- XPUSHs(sv_2mortal(newSVpv(name, 0)));
- XPUSHs(sv_2mortal(newSVpv(zone, 0)));
- XPUSHs(sv_2mortal(newSViv((IV)&opaque)));
- PUTBACK;
-
- carp("DLZ Perl: Searching for name %s in zone %s", name, zone);
- rrcount = call_method("lookup", G_ARRAY|G_EVAL);
- carp("DLZ Perl: Call to lookup returned %i", rrcount);
-
- SPAGAIN;
-
- if (SvTRUE(ERRSV)) {
- POPs;
- cd->log(ISC_LOG_ERROR, "DLZ Perl: lookup died in eval: %s",
- SvPV_nolen(ERRSV));
- retval = ISC_R_FAILURE;
- goto CLEAN_UP_AND_RETURN;
- }
-
- if (!rrcount) {
- retval = ISC_R_NOTFOUND;
- goto CLEAN_UP_AND_RETURN;
- }
-
- retval = ISC_R_SUCCESS;
- r = 0;
- while (r++ < rrcount) {
- record_ref = POPs;
- if ((!SvROK(record_ref)) ||
- (SvTYPE(SvRV(record_ref)) != SVt_PVAV))
- {
- cd->log(ISC_LOG_ERROR,
- "DLZ Perl: lookup returned an "
- "invalid value (expected array of arrayrefs)!");
- retval = ISC_R_FAILURE;
- break;
- }
-
- record_ref = SvRV(record_ref);
-
- rr_type = av_fetch((AV *) record_ref, 0, 0);
- rr_ttl = av_fetch((AV *) record_ref, 1, 0);
- rr_data = av_fetch((AV *) record_ref, 2, 0);
-
- if (rr_type == NULL || rr_ttl == NULL || rr_data == NULL) {
- cd->log(ISC_LOG_ERROR,
- "DLZ Perl: lookup for record %s in "
- "zone %s returned an array that was "
- "missing data", name, zone);
- retval = ISC_R_FAILURE;
- break;
- }
-
- carp("DLZ Perl: Got record %s = %s",
- SvPV_nolen(*rr_type), SvPV_nolen(*rr_data));
- retval = cd->putrr(lookup, SvPV_nolen(*rr_type),
- SvIV(*rr_ttl), SvPV_nolen(*rr_data));
-
- if (retval != ISC_R_SUCCESS) {
- cd->log(ISC_LOG_ERROR,
- "DLZ Perl: putrr for lookup of %s in "
- "zone %s failed with code %i "
- "(did lookup return invalid record data?)",
- name, zone, retval);
- break;
- }
- }
-
-CLEAN_UP_AND_RETURN:
- PUTBACK;
- FREETMPS;
- LEAVE;
-
- carp("DLZ Perl: Returning from lookup, r = %i, retval = %i", r, retval);
-
- return (retval);
-}
-
-const char *
-#ifdef MULTIPLICITY
-missing_perl_method(const char *perl_class_name, PerlInterpreter *my_perl)
-#else
-missing_perl_method(const char *perl_class_name)
-#endif
-{
- const int BUF_LEN = 64; /* Should be big enough, right? hah */
- char full_name[BUF_LEN];
- const char *methods[] = { "new", "findzone", "lookup", NULL };
- int i = 0;
-
- while( methods[i] != NULL ) {
- snprintf(full_name, BUF_LEN, "%s::%s",
- perl_class_name, methods[i]);
-
- if (get_cv(full_name, 0) == NULL) {
- return methods[i];
- }
- i++;
- }
-
- return (NULL);
-}
-
-isc_result_t
-dlz_create(const char *dlzname, unsigned int argc, char *argv[],
- void **dbdata, ...)
-{
- config_data_t *cd;
- char *init_args[] = { NULL, NULL };
- char *perlrun[] = { "", NULL, "dlz perl", NULL };
- char *perl_class_name;
- int r;
- va_list ap;
- const char *helper_name;
- const char *missing_method_name;
- char *call_argv_args = NULL;
-#ifdef MULTIPLICITY
- PerlInterpreter *my_perl;
-#endif
-
- cd = malloc(sizeof(config_data_t));
- if (cd == NULL)
- return (ISC_R_NOMEMORY);
-
- memset(cd, 0, sizeof(config_data_t));
-
- /* fill in the helper functions */
- va_start(ap, dbdata);
- while ((helper_name = va_arg(ap, const char *)) != NULL) {
- b9_add_helper(cd, helper_name, va_arg(ap, void*));
- }
- va_end(ap);
-
- if (argc < 2) {
- cd->log(ISC_LOG_ERROR,
- "DLZ Perl '%s': Missing script argument.",
- dlzname);
- free(cd);
- return (ISC_R_FAILURE);
- }
-
- if (argc < 3) {
- cd->log(ISC_LOG_ERROR,
- "DLZ Perl '%s': Missing class name argument.",
- dlzname);
- free(cd);
- return (ISC_R_FAILURE);
- }
- perl_class_name = argv[2];
-
- cd->log(ISC_LOG_INFO, "DLZ Perl '%s': Loading '%s' from location '%s'",
- dlzname, perl_class_name, argv[1], argc);
-
-#ifndef MULTIPLICITY
- if (global_perl) {
- /*
- * PERL_SET_CONTEXT not needed here as we're guaranteed to
- * have an implicit context thanks to an undefined
- * MULTIPLICITY.
- */
- PL_perl_destruct_level = 1;
- perl_destruct(global_perl);
- perl_free(global_perl);
- global_perl = NULL;
- global_perl_dont_free = 1;
- }
-#endif
-
- cd->perl = perl_alloc();
- if (cd->perl == NULL) {
- free(cd);
- return (ISC_R_FAILURE);
- }
-#ifdef MULTIPLICITY
- my_perl = cd->perl;
-#endif
- PERL_SET_CONTEXT(cd->perl);
-
- /*
- * We will re-create the interpreter during an rndc reconfig, so we
- * must set this variable per perlembed in order to insure we can
- * clean up Perl at a later time.
- */
- PL_perl_destruct_level = 1;
- perl_construct(cd->perl);
- PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
- /* Prevent crashes from clients writing to $0 */
- PL_origalen = 1;
-
- cd->perl_source = strdup(argv[1]);
- if (cd->perl_source == NULL) {
- free(cd);
- return (ISC_R_NOMEMORY);
- }
-
- perlrun[1] = cd->perl_source;
- if (perl_parse(cd->perl, xs_init, 3, perlrun, (char **)NULL)) {
- cd->log(ISC_LOG_ERROR,
- "DLZ Perl '%s': Failed to parse Perl script, aborting",
- dlzname);
- goto CLEAN_UP_PERL_AND_FAIL;
- }
-
- /* Let Perl know about our callbacks. */
- call_argv("DLZ_Perl::clientinfo::bootstrap",
- G_DISCARD|G_NOARGS, &call_argv_args);
- call_argv("DLZ_Perl::bootstrap",
- G_DISCARD|G_NOARGS, &call_argv_args);
-
- /*
- * Run the script. We don't really need to do this since we have
- * the init callback, but there's not really a downside either.
- */
- if (perl_run(cd->perl)) {
- cd->log(ISC_LOG_ERROR,
- "DLZ Perl '%s': Script exited with an error, aborting",
- dlzname);
- goto CLEAN_UP_PERL_AND_FAIL;
- }
-
-#ifdef MULTIPLICITY
- if (missing_method_name = missing_perl_method(perl_class_name, my_perl))
-#else
- if (missing_method_name = missing_perl_method(perl_class_name))
-#endif
- {
- cd->log(ISC_LOG_ERROR,
- "DLZ Perl '%s': Missing required function '%s', "
- "aborting", dlzname, missing_method_name);
- goto CLEAN_UP_PERL_AND_FAIL;
- }
-
- dSP;
- ENTER;
- SAVETMPS;
-
- PUSHMARK(SP);
- XPUSHs(sv_2mortal(newSVpv(perl_class_name, 0)));
-
- /* Build flattened hash of config info. */
- XPUSHs(sv_2mortal(newSVpv("log_context", 0)));
- XPUSHs(sv_2mortal(newSViv((IV)cd->log)));
-
- /* Argument to pass to new? */
- if (argc == 4) {
- XPUSHs(sv_2mortal(newSVpv("argv", 0)));
- XPUSHs(sv_2mortal(newSVpv(argv[3], 0)));
- }
-
- PUTBACK;
-
- r = call_method("new", G_EVAL|G_SCALAR);
-
- SPAGAIN;
-
- if (r) cd->perl_class = SvREFCNT_inc(POPs);
-
- PUTBACK;
- FREETMPS;
- LEAVE;
-
- if (SvTRUE(ERRSV)) {
- POPs;
- cd->log(ISC_LOG_ERROR,
- "DLZ Perl '%s': new died in eval: %s",
- dlzname, SvPV_nolen(ERRSV));
- goto CLEAN_UP_PERL_AND_FAIL;
- }
-
- if (!r || !sv_isobject(cd->perl_class)) {
- cd->log(ISC_LOG_ERROR,
- "DLZ Perl '%s': new failed to return a blessed object",
- dlzname);
- goto CLEAN_UP_PERL_AND_FAIL;
- }
-
- *dbdata = cd;
-
-#ifndef MULTIPLICITY
- global_perl = cd->perl;
-#endif
- return (ISC_R_SUCCESS);
-
-CLEAN_UP_PERL_AND_FAIL:
- PL_perl_destruct_level = 1;
- perl_destruct(cd->perl);
- perl_free(cd->perl);
- free(cd->perl_source);
- free(cd);
- return (ISC_R_FAILURE);
-}
-
-void dlz_destroy(void *dbdata) {
- config_data_t *cd = (config_data_t *) dbdata;
-#ifdef MULTIPLICITY
- PerlInterpreter *my_perl = cd->perl;
-#endif
-
- cd->log(ISC_LOG_INFO, "DLZ Perl: Unloading driver.");
-
-#ifndef MULTIPLICITY
- if (!global_perl_dont_free) {
-#endif
- PERL_SET_CONTEXT(cd->perl);
- PL_perl_destruct_level = 1;
- perl_destruct(cd->perl);
- perl_free(cd->perl);
-#ifndef MULTIPLICITY
- global_perl_dont_free = 0;
- global_perl = NULL;
- }
-#endif
-
- free(cd->perl_source);
- free(cd);
-}
diff --git a/contrib/dlz/modules/perl/dlz_perl_driver.h b/contrib/dlz/modules/perl/dlz_perl_driver.h
deleted file mode 100644
index 1db8e283..00000000
--- a/contrib/dlz/modules/perl/dlz_perl_driver.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2009-2012 John Eaglesham
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND JOHN EAGLESHAM
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * JOHN EAGLESHAM BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <dlz_minimal.h>
-
-/* This is the only part that differs from dlz_minimal.h. */
-typedef struct dlz_perl_clientinfo_opaque {
- dns_clientinfomethods_t *methods;
- dns_clientinfo_t *clientinfo;
-} dlz_perl_clientinfo_opaque;
diff --git a/contrib/dlz/modules/perl/testing/dlz_perl_example.pm b/contrib/dlz/modules/perl/testing/dlz_perl_example.pm
deleted file mode 100644
index 55bc388a..00000000
--- a/contrib/dlz/modules/perl/testing/dlz_perl_example.pm
+++ /dev/null
@@ -1,177 +0,0 @@
-#
-# Copyright (C) 2009-2012 John Eaglesham
-#
-# Permission to use, copy, modify, and distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND JOHN EAGLESHAM
-# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
-# JOHN EAGLESHAM BE LIABLE FOR ANY SPECIAL, DIRECT,
-# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
-# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-package dlz_perl_example;
-
-use warnings;
-use strict;
-
-use Data::Dumper;
-$Data::Dumper::Sortkeys = 1;
-
-# Constructor. Everything after the class name can be folded into a hash of
-# various options and settings. Right now only log_context and argv are
-# available.
-sub new {
- my ( $class, %config ) = @_;
- my $self = {};
- bless $self, $class;
-
- $self->{log} = sub {
- my ( $level, $msg ) = @_;
- DLZ_Perl::log( $config{log_context}, $level, $msg );
- };
-
- if ( $config{argv} ) { warn "Got argv: $config{argv}\n"; }
-
- $self->{zones} = {
- 'example.com' => {
- '@' => [
- {
- type => 'SOA',
- ttl => 86400,
- data =>
- 'ns1.example.com. hostmaster.example.com. 12345 172800 900 1209600 3600',
- }
- ],
- perlrr => [
- {
- type => 'A',
- ttl => 444,
- data => '1.1.1.1',
- },
- {
- type => 'A',
- ttl => 444,
- data => '1.1.1.2',
- }
- ],
- perltime => [
- {
- code => sub {
- return ['TXT', '1', time()];
- },
- },
- ],
- sourceip => [
- {
- code => sub {
- my ( $opaque ) = @_;
- # Passing anything other than the proper opaque value,
- # 0, or undef to this function will cause a crash (at
- # best!).
- my ( $addr, $port ) =
- DLZ_Perl::clientinfo::sourceip( $opaque );
- if ( !$addr ) { $addr = $port = 'unknown'; }
- return ['TXT', '1', $addr], ['TXT', '1', $port];
- },
- },
- ],
- },
- };
-
- $self->{log}->(
- DLZ_Perl::LOG_INFO(),
- 'DLZ Perl Script: Called init. Loaded zone data: '
- . Dumper( $self->{zones} )
- );
- return $self;
-}
-
-# Do we have data for this zone? Expects a simple true or false return value.
-sub findzone {
- my ( $self, $zone ) = @_;
- $self->{log}->(
- DLZ_Perl::LOG_INFO(),
- "DLZ Perl Script: Called findzone, looking for zone $zone"
- );
-
- return exists $self->{zones}->{$zone};
-}
-
-# Return the data for a given record in a given zone. The final parameter is
-# an opaque value that can be passed to DLZ_Perl::clientinfo::sourceip to
-# retrieve the client source IP and port. Expected return value is an array
-# of array refs, with each array ref representing one record and containing
-# the type, ttl, and data in that order. Data is as it appears in a zone file.
-sub lookup {
- my ( $self, $name, $zone, $client_info ) = @_;
- $self->{log}->(
- DLZ_Perl::LOG_INFO(),
- "DLZ Perl Script: Called lookup, looking for record $name in zone $zone"
- );
- return unless $self->{zones}->{$zone}->{$name};
-
- my @results;
- foreach my $rr ( @{ $self->{zones}->{$zone}->{$name} } ) {
- if ( $rr->{'code'} ) {
- my @r = $rr->{'code'}->( $client_info );
- if ( @r ) {
- push @results, @r;
- }
- } else {
- push @results, [$rr->{'type'}, $rr->{'ttl'}, $rr->{'data'}];
- }
- }
-
- return @results;
-}
-
-# Will we allow zone transfer for this client? Expects a simple true or false
-# return value.
-sub allowzonexfr {
- my ( $self, $zone, $client ) = @_;
- $self->{log}->(
- DLZ_Perl::LOG_INFO(),
- "DLZ Perl Script: Called allowzonexfr, looking for zone $zone for " .
- "client $client"
- );
- if ( $client eq '127.0.0.1' ) { return 1; }
- return 0;
-}
-
-# Note the return AoA for this method differs from lookup in that it must
-# return the name of the record as well as the other data.
-sub allnodes {
- my ( $self, $zone ) = @_;
- my @results;
- $self->{log}->(
- DLZ_Perl::LOG_INFO(),
- "DLZ Perl Script: Called allnodes, looking for zone $zone"
- );
-
- foreach my $name ( keys %{ $self->{zones}->{$zone} } ) {
- foreach my $rr ( @{ $self->{zones}->{$zone}->{$name} } ) {
- if ( $rr->{'code'} ) {
- my @r = $rr->{'code'}->();
- # The code returns an array of array refs without the name.
- # This makes things easy for lookup but hard here. We must
- # iterate over each array ref and inject the name into it.
- foreach my $a ( @r ) {
- unshift @{$a}, $name;
- }
- push @results, @r;
- } else {
- push @results,
- [$name, $rr->{'type'}, $rr->{'ttl'}, $rr->{'data'}];
- }
- }
- }
- return @results;
-}
-
-1;
diff --git a/contrib/dlz/modules/perl/testing/named.conf b/contrib/dlz/modules/perl/testing/named.conf
deleted file mode 100644
index 30427dd8..00000000
--- a/contrib/dlz/modules/perl/testing/named.conf
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/* $Id: named.conf.in,v 1.1.4.3 2011-03-10 23:47:29 tbox Exp $ */
-
-options {
- port 5300;
- pid-file "named.pid";
- session-keyfile "session.key";
- listen-on { 127.0.0.1; };
- listen-on-v6 { none; };
- recursion no;
- notify no;
-};
-
-dlz "perl zone" {
- database "dlopen ../dlz_perl_driver.so dlz_perl_example.pm dlz_perl_example";
-};
diff --git a/contrib/dlz/modules/sqlite3/Makefile b/contrib/dlz/modules/sqlite3/Makefile
deleted file mode 100644
index 94af96aa..00000000
--- a/contrib/dlz/modules/sqlite3/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-prefix = /usr
-libdir = $(prefix)/lib/bind9
-
-CFLAGS=-fPIC -g -I../include
-SQLITE3_LIBS=-lsqlite3
-
-all: dlz_sqlite3_dynamic.so
-
-dlz_dbi.o: ../common/dlz_dbi.c
- $(CC) $(CFLAGS) -c ../common/dlz_dbi.c
-
-dlz_sqlite3_dynamic.so: dlz_sqlite3_dynamic.c dlz_dbi.o
- $(CC) $(CFLAGS) -shared -o dlz_sqlite3_dynamic.so \
- dlz_sqlite3_dynamic.c dlz_dbi.o $(SQLITE3_LIBS)
-
-clean:
- rm -f dlz_sqlite3_dynamic.so *.o
-
-install: dlz_sqlite3_dynamic.so
- mkdir -p $(DESTDIR)$(libdir)
- install dlz_sqlite3_dynamic.so $(DESTDIR)$(libdir)
diff --git a/contrib/dlz/modules/sqlite3/dlz_sqlite3_dynamic.c b/contrib/dlz/modules/sqlite3/dlz_sqlite3_dynamic.c
deleted file mode 100644
index e65fa354..00000000
--- a/contrib/dlz/modules/sqlite3/dlz_sqlite3_dynamic.c
+++ /dev/null
@@ -1,1106 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for BIND 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 1999-2001, 2013-2014, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-/*
- * This provides the externally loadable SQLitee DLZ module, without
- * update support. Based in part on SQLite code contributed by Tim Tessier.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdarg.h>
-#include <stdint.h>
-#include <stdlib.h>
-
-#include <dlz_minimal.h>
-#include <dlz_list.h>
-#include <dlz_dbi.h>
-#include <dlz_pthread.h>
-
-#include <sqlite3.h>
-
-#define dbc_search_limit 30
-#define ALLNODES 1
-#define ALLOWXFR 2
-#define AUTHORITY 3
-#define FINDZONE 4
-#define COUNTZONE 5
-#define LOOKUP 6
-
-#define safeGet(in) in == NULL ? "" : in
-
-/*%
- * Structure to hold everthing needed by this "instance" of the SQLite3
- * module remember, the module code is only loaded once, but may have
- * many separate instances.
- */
-typedef struct {
-#if PTHREADS
- db_list_t *db; /*%< handle to a list of DB */
- int dbcount;
-#else
- dbinstance_t *db; /*%< handle to DB */
-#endif
-
- char *dbname;
-
- /* Helper functions from the dlz_dlopen driver */
- log_t *log;
- dns_sdlz_putrr_t *putrr;
- dns_sdlz_putnamedrr_t *putnamedrr;
- dns_dlz_writeablezone_t *writeable_zone;
-} sqlite3_instance_t;
-
-/*
- * SQLite3 result set
- */
-typedef struct {
- char **pazResult; /* Result of the query */
- unsigned int pnRow; /* Number of result rows */
- unsigned int pnColumn; /* Number of result columns */
- unsigned int curRow; /* Current row */
- char *pzErrmsg; /* Error message */
-} sqlite3_res_t;
-
-/* forward references */
-isc_result_t
-dlz_findzonedb(void *dbdata, const char *name,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo);
-
-void
-dlz_destroy(void *dbdata);
-
-static void
-b9_add_helper(sqlite3_instance_t *db, const char *helper_name, void *ptr);
-
-/*
- * Private methods
- */
-
-void
-sqlite3_destroy(dbinstance_t *db) {
- /* release DB connection */
- if (db->dbconn != NULL)
- sqlite3_close((sqlite3 *) db->dbconn);
- sqlite3_shutdown();
-
- /* destroy DB instance */
- destroy_dbinstance(db);
-}
-
-#if PTHREADS
-/*%
- * Properly cleans up a list of database instances.
- * This function is only used when the module is compiled for
- * multithreaded operation.
- */
-static void
-sqlite3_destroy_dblist(db_list_t *dblist) {
- dbinstance_t *ndbi = NULL;
- dbinstance_t *dbi = NULL;
-
- ndbi = DLZ_LIST_HEAD(*dblist);
- while (ndbi != NULL) {
- dbi = ndbi;
- ndbi = DLZ_LIST_NEXT(dbi, link);
-
- sqlite3_destroy(dbi);
- }
-
- /* release memory for the list structure */
- free(dblist);
-}
-
-/*%
- * Loops through the list of DB instances, attempting to lock
- * on the mutex. If successful, the DBI is reserved for use
- * and the thread can perform queries against the database.
- * If the lock fails, the next one in the list is tried.
- * looping continues until a lock is obtained, or until
- * the list has been searched dbc_search_limit times.
- * This function is only used when the module is compiled for
- * multithreaded operation.
- */
-static dbinstance_t *
-sqlite3_find_avail(sqlite3_instance_t *sqlite3) {
- dbinstance_t *dbi = NULL, *head;
- int count = 0;
-
- /* get top of list */
- head = dbi = DLZ_LIST_HEAD(*(sqlite3->db));
-
- /* loop through list */
- while (count < dbc_search_limit) {
- /* try to lock on the mutex */
- if (dlz_mutex_trylock(&dbi->lock) == 0)
- return (dbi); /* success, return the DBI for use. */
-
- /* not successful, keep trying */
- dbi = DLZ_LIST_NEXT(dbi, link);
-
- /* check to see if we have gone to the top of the list. */
- if (dbi == NULL) {
- count++;
- dbi = head;
- }
- }
-
- sqlite3->log(ISC_LOG_INFO,
- "SQLite3 module: unable to find available connection "
- "after searching %d times", count);
- return (NULL);
-}
-#endif /* PTHREADS */
-
-/*%
- * Allocates memory for a new string, and then constructs the new
- * string by "escaping" the input string. The new string is
- * safe to be used in queries. This is necessary because we cannot
- * be sure of what types of strings are passed to us, and we don't
- * want special characters in the string causing problems.
- */
-static char *
-escape_string(const char *instr) {
- char *outstr;
- char *ptr;
- unsigned int len;
- unsigned int tlen = 0;
- unsigned int atlen = 0;
- unsigned int i;
-
- if (instr == NULL)
- return (NULL);
- len = strlen(instr);
- atlen = (2 * len * sizeof(char)) + 1;
- outstr = malloc(atlen);
- if (outstr == NULL)
- return (NULL);
-
- ptr = outstr;
- for (i = 0; i < len; i++) {
- if (tlen > atlen || instr[i] == '\0')
- break;
-
- if (instr[i] == '\'') {
- *ptr++ = '\'';
- tlen++;
- }
-
- *ptr++ = instr[i];
- tlen++;
- }
- *ptr = '\0';
-
- return (outstr);
-}
-
-/*%
- * This function is the real core of the module. Zone, record
- * and client strings are passed in (or NULL is passed if the
- * string is not available). The type of query we want to run
- * is indicated by the query flag, and the dbdata object is passed
- * passed in too. dbdata really holds a single database instance.
- * The function will construct and run the query, hopefully getting
- * a result set.
- */
-static isc_result_t
-sqlite3_get_resultset(const char *zone, const char *record,
- const char *client, unsigned int query,
- void *dbdata, sqlite3_res_t **rsp)
-{
- isc_result_t result;
- dbinstance_t *dbi = NULL;
- sqlite3_instance_t *db = (sqlite3_instance_t *)dbdata;
- char *querystring = NULL;
- sqlite3_res_t *rs = NULL;
- unsigned int i = 0;
- unsigned int j = 0;
- int qres = 0;
-
- if ((query == COUNTZONE && rsp != NULL) ||
- (query != COUNTZONE && (rsp == NULL || *rsp != NULL)))
- {
- db->log(ISC_LOG_DEBUG(2), "Invalid result set pointer.");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
-#if PTHREADS
- /* find an available DBI from the list */
- dbi = sqlite3_find_avail(db);
-#else /* PTHREADS */
- /*
- * only 1 DBI - no need to lock instance lock either
- * only 1 thread in the whole process, no possible contention.
- */
- dbi = (dbinstance_t *)(db->db);
-#endif /* PTHREADS */
-
- if (dbi == NULL) {
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- /* what type of query are we going to run? */
- switch(query) {
- case ALLNODES:
- if (dbi->allnodes_q == NULL) {
- result = ISC_R_NOTIMPLEMENTED;
- goto cleanup;
- }
- break;
- case ALLOWXFR:
- if (dbi->allowxfr_q == NULL) {
- result = ISC_R_NOTIMPLEMENTED;
- goto cleanup;
- }
- break;
- case AUTHORITY:
- if (dbi->authority_q == NULL) {
- result = ISC_R_NOTIMPLEMENTED;
- goto cleanup;
- }
- break;
- case FINDZONE:
- if (dbi->findzone_q == NULL) {
- db->log(ISC_LOG_DEBUG(2),
- "No query specified for findzone. "
- "Findzone requires a query");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
- break;
- case COUNTZONE:
- if (dbi->countzone_q == NULL) {
- result = ISC_R_NOTIMPLEMENTED;
- goto cleanup;
- }
- break;
- case LOOKUP:
- if (dbi->lookup_q == NULL) {
- db->log(ISC_LOG_DEBUG(2),
- "No query specified for lookup. "
- "Lookup requires a query");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
- break;
- default:
- db->log(ISC_LOG_ERROR,
- "Incorrect query flag passed to "
- "sqlite3_get_resultset");
- result = ISC_R_UNEXPECTED;
- goto cleanup;
- }
-
-
- if (zone != NULL) {
- if (dbi->zone != NULL)
- free(dbi->zone);
-
- dbi->zone = escape_string(zone);
- if (dbi->zone == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- } else
- dbi->zone = NULL;
-
- if (record != NULL) {
- if (dbi->record != NULL)
- free(dbi->record);
-
- dbi->record = escape_string(record);
- if (dbi->record == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- } else
- dbi->record = NULL;
-
- if (client != NULL) {
- if (dbi->client != NULL)
- free(dbi->client);
-
- dbi->client = escape_string(client);
- if (dbi->client == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- } else
- dbi->client = NULL;
-
- /*
- * what type of query are we going to run? this time we build
- * the actual query to run.
- */
- switch(query) {
- case ALLNODES:
- querystring = build_querystring(dbi->allnodes_q);
- break;
- case ALLOWXFR:
- querystring = build_querystring(dbi->allowxfr_q);
- break;
- case AUTHORITY:
- querystring = build_querystring(dbi->authority_q);
- break;
- case FINDZONE:
- querystring = build_querystring(dbi->findzone_q);
- break;
- case COUNTZONE:
- querystring = build_querystring(dbi->countzone_q);
- break;
- case LOOKUP:
- querystring = build_querystring(dbi->lookup_q);
- break;
- default:
- db->log(ISC_LOG_ERROR,
- "Incorrect query flag passed to "
- "sqlite3_get_resultset");
- result = ISC_R_UNEXPECTED;
- goto cleanup;
- }
-
- if (querystring == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
-
- /* output the full query string when debugging */
- db->log(ISC_LOG_DEBUG(1), "\nQuery String: %s\n", querystring);
-
- rs = malloc(sizeof(sqlite3_res_t));
- if (rs == NULL) {
- db->log(ISC_LOG_ERROR, "Failed to allocate result set");
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
- memset(rs, 0, sizeof(sqlite3_res_t));
-
- qres = sqlite3_get_table(dbi->dbconn, querystring, &rs->pazResult,
- &rs->pnRow, &rs->pnColumn, &rs->pzErrmsg);
- if (qres != SQLITE_OK) {
- db->log(ISC_LOG_DEBUG(1), "SQLite3 query failed; %s",
- rs->pzErrmsg != NULL ? rs->pzErrmsg : "unknown error");
- sqlite3_free(rs->pzErrmsg);
- rs->pzErrmsg = NULL;
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- result = ISC_R_SUCCESS;
- if (query == COUNTZONE) {
- sqlite3_free_table(rs->pazResult);
- if (rs == NULL)
- result = ISC_R_FAILURE;
- }
-
- *rsp = rs;
-
- cleanup:
- if (dbi == NULL)
- return (ISC_R_FAILURE);
-
- if (dbi->zone != NULL) {
- free(dbi->zone);
- dbi->zone = NULL;
- }
- if (dbi->record != NULL) {
- free(dbi->record);
- dbi->record = NULL;
- }
- if (dbi->client != NULL) {
- free(dbi->client);
- dbi->client = NULL;
- }
-
- /* release the lock so another thread can use this dbi */
- (void) dlz_mutex_unlock(&dbi->lock);
-
- if (querystring != NULL)
- free(querystring);
-
- return (result);
-}
-
-/*%
- * The processing of result sets for lookup and authority are
- * exactly the same. So that functionality has been moved
- * into this function to minimize code.
- */
-
-char **
-sqlite3_fetch_row(sqlite3_res_t *rs) {
- char **retval = NULL;
- if (rs != NULL) {
- if (rs->pnRow > 0U && rs->curRow < rs->pnRow) {
- int index = (rs->curRow + 1) * rs->pnColumn;
- retval = &rs->pazResult[index];
- rs->curRow++;
- }
- }
- return (retval);
-}
-
-unsigned int
-sqlite3_num_fields(sqlite3_res_t *rs) {
- unsigned int retval = 0;
- if (rs != NULL)
- retval = rs->pnColumn;
- return (retval);
-}
-
-unsigned int
-sqlite3_num_rows(sqlite3_res_t *rs) {
- unsigned int retval = 0;
- if (rs != NULL)
- retval = rs->pnRow;
- return (retval);
-}
-
-void
-sqlite3_free_result(sqlite3_res_t *rs) {
- if (rs != NULL) {
- sqlite3_free_table(rs->pazResult);
- free(rs);
- }
-}
-
-static isc_result_t
-sqlite3_process_rs(sqlite3_instance_t *db, dns_sdlzlookup_t *lookup,
- sqlite3_res_t *rs)
-{
- isc_result_t result = ISC_R_NOTFOUND;
- char **row;
- unsigned int fields;
- unsigned int i, j;
- char *tmpString;
- char *endp;
- int ttl;
-
- row = sqlite3_fetch_row(rs); /* get a row from the result set */
- fields = sqlite3_num_fields(rs); /* how many columns in result set */
- while (row != NULL) {
- unsigned int len = 0;
-
- switch(fields) {
- case 1:
- /*
- * one column in rs, it's the data field. use
- * default type of A record, and default TTL
- * of 86400
- */
- result = db->putrr(lookup, "a", 86400, safeGet(row[0]));
- break;
- case 2:
- /*
- * two columns, data field, and data type.
- * use default TTL of 86400.
- */
- result = db->putrr(lookup, safeGet(row[0]), 86400,
- safeGet(row[1]));
- break;
- case 3:
- /*
- * three columns, all data no defaults.
- * convert text to int, make sure it worked
- * right.
- */
- ttl = strtol(safeGet(row[0]), &endp, 10);
- if (*endp != '\0' || ttl < 0) {
- db->log(ISC_LOG_ERROR,
- "SQLite3 module: TTL must be "
- "a postive number");
- return (ISC_R_FAILURE);
- }
-
- result = db->putrr(lookup, safeGet(row[1]), ttl,
- safeGet(row[2]));
- break;
- default:
- /*
- * more than 3 fields, concatenate the last
- * ones together. figure out how long to make
- * string.
- */
- for (j = 2; j < fields; j++)
- len += strlen(safeGet(row[j])) + 1;
-
- /*
- * allocate string memory, allow for NULL to
- * term string
- */
- tmpString = malloc(len + 1);
- if (tmpString == NULL) {
- db->log(ISC_LOG_ERROR,
- "SQLite3 module: unable to allocate "
- "memory for temporary string");
- sqlite3_free_result(rs);
- return (ISC_R_FAILURE);
- }
-
- strcpy(tmpString, safeGet(row[2]));
- for (j = 3; j < fields; j++) {
- strcat(tmpString, " ");
- strcat(tmpString, safeGet(row[j]));
- }
-
- ttl = strtol(safeGet(row[0]), &endp, 10);
- if (*endp != '\0' || ttl < 0) {
- db->log(ISC_LOG_ERROR,
- "SQLite3 module: TTL must be "
- "a postive number");
- free(tmpString);
- return (ISC_R_FAILURE);
- }
-
- result = db->putrr(lookup, safeGet(row[1]),
- ttl, tmpString);
- free(tmpString);
- }
-
- if (result != ISC_R_SUCCESS) {
- sqlite3_free_result(rs);
- db->log(ISC_LOG_ERROR,
- "putrr returned error: %d", result);
- return (ISC_R_FAILURE);
- }
-
- row = sqlite3_fetch_row(rs);
- }
-
- sqlite3_free_result(rs);
- return (result);
-}
-
-/*
- * DLZ methods
- */
-
-/*% determine if the zone is supported by (in) the database */
-isc_result_t
-dlz_findzonedb(void *dbdata, const char *name,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-{
- isc_result_t result;
- sqlite3_res_t *rs = NULL;
- sqlite3_uint64 rows;
- sqlite3_instance_t *db = (sqlite3_instance_t *)dbdata;
-
- UNUSED(methods);
- UNUSED(clientinfo);
-
- result = sqlite3_get_resultset(name, NULL, NULL, FINDZONE, dbdata, &rs);
- if (result != ISC_R_SUCCESS || rs == NULL) {
- if (rs != NULL)
- sqlite3_free_result(rs);
-
- db->log(ISC_LOG_ERROR,
- "SQLite3 module: unable to return "
- "result set for FINDZONE query");
-
- return (ISC_R_FAILURE);
- }
-
- /*
- * if we returned any rows, the zone is supported.
- */
- rows = sqlite3_num_rows(rs);
- sqlite3_free_result(rs);
- if (rows > 0) {
- sqlite3_get_resultset(name, NULL, NULL, COUNTZONE,
- dbdata, NULL);
- return (ISC_R_SUCCESS);
- }
-
- return (ISC_R_NOTFOUND);
-}
-
-/*% Determine if the client is allowed to perform a zone transfer */
-isc_result_t
-dlz_allowzonexfr(void *dbdata, const char *name, const char *client) {
- isc_result_t result;
- sqlite3_instance_t *db = (sqlite3_instance_t *)dbdata;
- sqlite3_res_t *rs = NULL;
- sqlite3_uint64 rows;
-
- /* first check if the zone is supported by the database. */
- result = dlz_findzonedb(dbdata, name, NULL, NULL);
- if (result != ISC_R_SUCCESS)
- return (ISC_R_NOTFOUND);
-
- /*
- * if we get to this point we know the zone is supported by
- * the database the only questions now are is the zone
- * transfer is allowed for this client and did the config file
- * have an allow zone xfr query.
- */
- result = sqlite3_get_resultset(name, NULL, client, ALLOWXFR,
- dbdata, &rs);
- if (result == ISC_R_NOTIMPLEMENTED)
- return (result);
-
- if (result != ISC_R_SUCCESS || rs == NULL) {
- if (rs != NULL)
- sqlite3_free_result(rs);
- db->log(ISC_LOG_ERROR,
- "SQLite3 module: unable to return "
- "result set for ALLOWXFR query");
- return (ISC_R_FAILURE);
- }
-
- /*
- * count how many rows in result set; if we returned any,
- * zone xfr is allowed.
- */
- rows = sqlite3_num_rows(rs);
- sqlite3_free_result(rs);
- if (rows > 0)
- return (ISC_R_SUCCESS);
-
- return (ISC_R_NOPERM);
-}
-
-/*%
- * If the client is allowed to perform a zone transfer, the next order of
- * business is to get all the nodes in the zone, so bind can respond to the
- * query.
- */
-isc_result_t
-dlz_allnodes(const char *zone, void *dbdata, dns_sdlzallnodes_t *allnodes) {
- isc_result_t result;
- sqlite3_instance_t *db = (sqlite3_instance_t *)dbdata;
- sqlite3_res_t *rs = NULL;
- char **row;
- unsigned int fields;
- unsigned int j;
- char *tmpString;
- char *endp;
- int ttl;
-
- result = sqlite3_get_resultset(zone, NULL, NULL, ALLNODES, dbdata, &rs);
- if (result == ISC_R_NOTIMPLEMENTED)
- return (result);
-
- /* if we didn't get a result set, log an err msg. */
- if (result != ISC_R_SUCCESS) {
- db->log(ISC_LOG_ERROR,
- "SQLite3 module: unable to return "
- "result set for all nodes query");
- goto cleanup;
- }
-
- result = ISC_R_NOTFOUND;
-
- fields = sqlite3_num_fields(rs);
- row = sqlite3_fetch_row(rs);
- while (row != NULL) {
- if (fields < 4) {
- db->log(ISC_LOG_ERROR,
- "SQLite3 module: too few fields returned "
- "by ALLNODES query");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- ttl = strtol(safeGet(row[0]), &endp, 10);
- if (*endp != '\0' || ttl < 0) {
- db->log(ISC_LOG_ERROR,
- "SQLite3 module: TTL must be "
- "a postive number");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- if (fields == 4) {
- result = db->putnamedrr(allnodes, safeGet(row[2]),
- safeGet(row[1]), ttl,
- safeGet(row[3]));
- } else {
- unsigned int len = 0;
-
- /*
- * more than 4 fields, concatenate the last
- * ones together.
- */
- for (j = 3; j < fields; j++)
- len += strlen(safeGet(row[j])) + 1;
-
- tmpString = malloc(len + 1);
- if (tmpString == NULL) {
- db->log(ISC_LOG_ERROR,
- "SQLite3 module: unable to allocate "
- "memory for temporary string");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- strcpy(tmpString, safeGet(row[3]));
- for (j = 4; j < fields; j++) {
- strcat(tmpString, " ");
- strcat(tmpString, safeGet(row[j]));
- }
-
- result = db->putnamedrr(allnodes, safeGet(row[2]),
- safeGet(row[1]),
- ttl, tmpString);
- free(tmpString);
- }
-
- if (result != ISC_R_SUCCESS) {
- db->log(ISC_LOG_ERROR,
- "putnamedrr returned error: %s", result);
- result = ISC_R_FAILURE;
- break;
- }
-
- row = sqlite3_fetch_row(rs);
- }
-
- cleanup:
- if (rs != NULL)
- sqlite3_free_result(rs);
-
- return (result);
-}
-
-/*%
- * If the lookup function does not return SOA or NS records for the zone,
- * use this function to get that information for named.
- */
-isc_result_t
-dlz_authority(const char *zone, void *dbdata, dns_sdlzlookup_t *lookup) {
- isc_result_t result;
- sqlite3_res_t *rs = NULL;
- sqlite3_instance_t *db = (sqlite3_instance_t *) dbdata;
-
- result = sqlite3_get_resultset(zone, NULL, NULL, AUTHORITY,
- dbdata, &rs);
- if (result == ISC_R_NOTIMPLEMENTED)
- return (result);
-
- if (result != ISC_R_SUCCESS) {
- if (rs != NULL)
- sqlite3_free_result(rs);
- db->log(ISC_LOG_ERROR,
- "SQLite3 module: unable to return "
- "result set for AUTHORITY query");
- return (ISC_R_FAILURE);
- }
-
- /*
- * lookup and authority result sets are processed in the same
- * manner: sqlite3_process_rs does the job for both functions.
- */
- return (sqlite3_process_rs(db, lookup, rs));
-}
-
-/*% If zone is supported, lookup up a (or multiple) record(s) in it */
-isc_result_t
-dlz_lookup(const char *zone, const char *name,
- void *dbdata, dns_sdlzlookup_t *lookup,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-{
- isc_result_t result;
- sqlite3_res_t *rs = NULL;
- sqlite3_instance_t *db = (sqlite3_instance_t *) dbdata;
-
- UNUSED(methods);
- UNUSED(clientinfo);
-
- result = sqlite3_get_resultset(zone, name, NULL, LOOKUP, dbdata, &rs);
-
- /* if we didn't get a result set, log an err msg. */
- if (result != ISC_R_SUCCESS) {
- if (rs != NULL)
- sqlite3_free_result(rs);
- db->log(ISC_LOG_ERROR,
- "SQLite3 module: unable to return "
- "result set for LOOKUP query");
- return (ISC_R_FAILURE);
- }
-
- /*
- * lookup and authority result sets are processed in the same
- * manner: sqlite3_process_rs does the job for both functions.
- */
- return (sqlite3_process_rs(db, lookup, rs));
-}
-
-/*%
- * Create an instance of the module.
- */
-isc_result_t
-dlz_create(const char *dlzname, unsigned int argc, char *argv[],
- void **dbdata, ...)
-{
- isc_result_t result = ISC_R_FAILURE;
- sqlite3_instance_t *s3 = NULL;
- dbinstance_t *dbi = NULL;
- sqlite3 *dbc = NULL;
- char *tmp = NULL;
- char *endp;
- const char *helper_name;
-#if SQLITE3_VERSION_ID >= 50000
- my_bool auto_reconnect = 1;
-#endif
-#if PTHREADS
- int dbcount;
- int i, ret;
-#endif /* PTHREADS */
- va_list ap;
-
- UNUSED(dlzname);
-
- /* allocate memory for SQLite3 instance */
- s3 = calloc(1, sizeof(sqlite3_instance_t));
- if (s3 == NULL)
- return (ISC_R_NOMEMORY);
- memset(s3, 0, sizeof(sqlite3_instance_t));
-
- /* Fill in the helper functions */
- va_start(ap, dbdata);
- while ((helper_name = va_arg(ap, const char*)) != NULL)
- b9_add_helper(s3, helper_name, va_arg(ap, void*));
- va_end(ap);
-
-#if PTHREADS
- /* if debugging, let user know we are multithreaded. */
- s3->log(ISC_LOG_DEBUG(1), "SQLite3 module: running multithreaded");
-#else /* PTHREADS */
- /* if debugging, let user know we are single threaded. */
- s3->log(ISC_LOG_DEBUG(1), "SQLite3 module: running single threaded");
-#endif /* PTHREADS */
-
- /* verify we have at least 4 arg's passed to the module */
- if (argc < 4) {
- s3->log(ISC_LOG_ERROR,
- "SQLite3 module requires "
- "at least 4 command line args.");
- return (ISC_R_FAILURE);
- }
-
- /* no more than 8 arg's should be passed to the module */
- if (argc > 8) {
- s3->log(ISC_LOG_ERROR,
- "SQLite3 module cannot accept "
- "more than 8 command line args.");
- return (ISC_R_FAILURE);
- }
-
- /* get db name - required */
- s3->dbname = get_parameter_value(argv[1], "dbname=");
- if (s3->dbname == NULL) {
- s3->log(ISC_LOG_ERROR,
- "SQLite3 module requires a dbname parameter.");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
-#if PTHREADS
- /* multithreaded build can have multiple DB connections */
- tmp = get_parameter_value(argv[1], "threads=");
- if (tmp == NULL)
- dbcount = 1;
- else {
- dbcount = strtol(tmp, &endp, 10);
- if (*endp != '\0' || dbcount < 1) {
- s3->log(ISC_LOG_ERROR,
- "SQLite3 module: database connection count "
- "must be positive.");
- free(tmp);
- result = ISC_R_FAILURE;
- goto cleanup;
- }
- free(tmp);
- }
-
- /* allocate memory for database connection list */
- s3->db = calloc(1, sizeof(db_list_t));
- if (s3->db == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
-
- /* initialize DB connection list */
- DLZ_LIST_INIT(*(s3->db));
-
- /*
- * create the appropriate number of database instances (DBI)
- * append each new DBI to the end of the list
- */
- for (i = 0; i < dbcount; i++) {
-#endif /* PTHREADS */
- switch(argc) {
- case 4:
- result = build_dbinstance(NULL, NULL, NULL,
- argv[2], argv[3], NULL,
- &dbi, s3->log);
- break;
- case 5:
- result = build_dbinstance(NULL, NULL, argv[4],
- argv[2], argv[3], NULL,
- &dbi, s3->log);
- break;
- case 6:
- result = build_dbinstance(argv[5], NULL, argv[4],
- argv[2], argv[3], NULL,
- &dbi, s3->log);
- break;
- case 7:
- result = build_dbinstance(argv[5], argv[6], argv[4],
- argv[2], argv[3], NULL,
- &dbi, s3->log);
- break;
- case 8:
- result = build_dbinstance(argv[5], argv[6], argv[4],
- argv[2], argv[3], argv[7],
- &dbi, s3->log);
- break;
- default:
- result = ISC_R_FAILURE;
- }
-
-
- if (result != ISC_R_SUCCESS) {
- s3->log(ISC_LOG_ERROR,
- "SQLite3 module: could not create "
- "database instance object.");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- /* create and set db connection */
- ret = sqlite3_initialize();
- if (ret != SQLITE_OK) {
- s3->log(ISC_LOG_ERROR,
- "SQLite3 module: could not "
- "initialize database object.");
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
- ret = sqlite3_open(s3->dbname, &dbc);
- if (ret != SQLITE_OK) {
- s3->log(ISC_LOG_ERROR,
- "SQLite3 module: could not "
- "open '%s'.", s3->dbname);
- result = ISC_R_FAILURE;
- goto cleanup;
- }
-
-#if PTHREADS
- /* when multithreaded, build a list of DBI's */
- DLZ_LINK_INIT(dbi, link);
- DLZ_LIST_APPEND(*(s3->db), dbi, link);
-#else
- /*
- * when single threaded, hold onto the one connection
- * instance.
- */
- s3->db = dbi;
-#endif
-
- dbi->dbconn = dbc;
- dbc = NULL;
-#if PTHREADS
- /* set DBI = null for next loop through. */
- dbi = NULL;
- }
-#endif /* PTHREADS */
-
- *dbdata = s3;
- return (ISC_R_SUCCESS);
-
- cleanup:
- dlz_destroy(s3);
-
- return (result);
-}
-
-/*%
- * Destroy the module.
- */
-void
-dlz_destroy(void *dbdata) {
- sqlite3_instance_t *db = (sqlite3_instance_t *)dbdata;
-#if PTHREADS
- /* cleanup the list of DBI's */
- if (db->db != NULL)
- sqlite3_destroy_dblist((db_list_t *)(db->db));
-#else /* PTHREADS */
- sqlite3_destroy(db);
-#endif /* PTHREADS */
-
- if (db->dbname != NULL)
- free(db->dbname);
-}
-
-/*
- * Return the version of the API
- */
-int
-dlz_version(unsigned int *flags) {
- *flags |= (DNS_SDLZFLAG_RELATIVEOWNER |
- DNS_SDLZFLAG_RELATIVERDATA |
- DNS_SDLZFLAG_THREADSAFE);
- return (DLZ_DLOPEN_VERSION);
-}
-
-/*
- * Register a helper function from the bind9 dlz_dlopen driver
- */
-static void
-b9_add_helper(sqlite3_instance_t *db, const char *helper_name, void *ptr) {
- if (strcmp(helper_name, "log") == 0)
- db->log = (log_t *)ptr;
- if (strcmp(helper_name, "putrr") == 0)
- db->putrr = (dns_sdlz_putrr_t *)ptr;
- if (strcmp(helper_name, "putnamedrr") == 0)
- db->putnamedrr = (dns_sdlz_putnamedrr_t *)ptr;
- if (strcmp(helper_name, "writeable_zone") == 0)
- db->writeable_zone = (dns_dlz_writeablezone_t *)ptr;
-}
diff --git a/contrib/dlz/modules/sqlite3/testing/README b/contrib/dlz/modules/sqlite3/testing/README
deleted file mode 100644
index c7af001c..00000000
--- a/contrib/dlz/modules/sqlite3/testing/README
+++ /dev/null
@@ -1,10 +0,0 @@
-These files were used for testing on Ubuntu Linux using SQLite3
-
-- Install SQLite3: sudo apt-get install sqlite3 libsqlite3-dev
-- Build sqlite3 DLZ module
-- Run "sqlite3 BindDB < dlz.schema" to set up database
-- Run "sqlite3 BindDB < dlz.data" to populate it
-- Run "named -gc named.conf"
-- Send test queries, e.g "dig @localhost -p 5300 example.com",
- "dig @localhost -p 5300 axfr example.com" (AXFR should be
- allowed from 127.0.0.1 only).
diff --git a/contrib/dlz/modules/sqlite3/testing/dlz.data b/contrib/dlz/modules/sqlite3/testing/dlz.data
deleted file mode 100644
index 015607f1..00000000
--- a/contrib/dlz/modules/sqlite3/testing/dlz.data
+++ /dev/null
@@ -1,18 +0,0 @@
-INSERT INTO `records`
-(`zone`, `ttl`, `type`, `host`, `mx_priority`, `data`, `primary_ns`, `resp_contact`, `serial`, `refresh`, `retry`, `expire`, `minimum`)
-VALUES
-('example.com', 86400, 'SOA', '@', NULL, NULL, 'ns1.example.com.', 'info.example.com.', 2011043001, 10800, 7200, 604800, 86400),
-('example.com', 86400, 'NS', '@', NULL, 'ns1.example.com.', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
-('example.com', 86400, 'NS', '@', NULL, 'ns2.example.com.', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
-('example.com', 86400, 'MX', '@', 10, 'mail.example.com.', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
-('example.com', 86400, 'A', '@', NULL, '192.168.0.2', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
-('example.com', 86400, 'CNAME', 'www', NULL, '@', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
-('example.com', 86400, 'A', 'ns1', NULL, '192.168.0.111', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
-('example.com', 86400, 'A', 'ns2', NULL, '192.168.0.222', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
-('example.com', 86400, 'A', 'mail', NULL, '192.168.0.3', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
-('example.com', 86400, 'TXT', '@', NULL, 'v=spf1 ip:192.168.0.3 ~all', NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-
-INSERT INTO `xfr`
-(`zone`, `client`)
-VALUES
-('example.com', '127.0.0.1');
diff --git a/contrib/dlz/modules/sqlite3/testing/dlz.schema b/contrib/dlz/modules/sqlite3/testing/dlz.schema
deleted file mode 100644
index 4cbcb348..00000000
--- a/contrib/dlz/modules/sqlite3/testing/dlz.schema
+++ /dev/null
@@ -1,28 +0,0 @@
-CREATE TABLE IF NOT EXISTS `records` (
- `id` INTEGER PRIMARY KEY AUTOINCREMENT,
- `zone` CHAR(255) NOT NULL,
- `ttl` INT NOT NULL DEFAULT '86400',
- `type` CHAR(255) NOT NULL,
- `host` CHAR(255) NOT NULL DEFAULT '@',
- `mx_priority` INT DEFAULT NULL,
- `data` text,
- `primary_ns` CHAR(255) DEFAULT NULL,
- `resp_contact` CHAR(255) DEFAULT NULL,
- `serial` bigint DEFAULT NULL,
- `refresh` INT DEFAULT NULL,
- `retry` INT DEFAULT NULL,
- `expire` INT DEFAULT NULL,
- `minimum` INT DEFAULT NULL
-);
-
-CREATE INDEX IF NOT EXISTS record_type on records (type);
-CREATE INDEX IF NOT EXISTS record_host on records (host);
-CREATE INDEX IF NOT EXISTS record_zone on records (zone);
-
-CREATE TABLE IF NOT EXISTS `xfr` (
- `zone` CHAR(255) NOT NULL,
- `client` CHAR(255) NOT NULL
-);
-
-CREATE INDEX IF NOT EXISTS xfr_zone on xfr (zone);
-CREATE INDEX IF NOT EXISTS xfr_client on xfr (client);
diff --git a/contrib/dlz/modules/sqlite3/testing/named.conf b/contrib/dlz/modules/sqlite3/testing/named.conf
deleted file mode 100644
index 9f310af3..00000000
--- a/contrib/dlz/modules/sqlite3/testing/named.conf
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-controls { };
-
-options {
- directory ".";
- port 5300;
- pid-file "named.pid";
- session-keyfile "session.key";
- listen-on { any; };
- listen-on-v6 { none; };
- recursion no;
-};
-
-key rndc_key {
- secret "1234abcd8765";
- algorithm hmac-md5;
-};
-
-controls {
- inet 127.0.0.1 port 9953 allow { any; } keys { rndc_key; };
-};
-
-dlz "test" {
- database "dlopen ../dlz_sqlite3_dynamic.so
- {
- dbname=BindDB threads=2
- }
- {SELECT zone FROM records WHERE zone = '$zone$'}
- {SELECT ttl, type, mx_priority, CASE WHEN type = 'TXT' THEN '\"' || data || '\"' ELSE data END AS data FROM records WHERE zone = '$zone$' AND host = '$record$' AND type <> 'SOA' AND type <> 'NS'}
- {SELECT ttl, type, data, primary_ns, resp_contact, serial, refresh, retry, expire, minimum FROM records WHERE zone = '$zone$' AND (type = 'SOA' OR type='NS')}
- {SELECT ttl, type, host, mx_priority, CASE WHEN type = 'TXT' THEN '\"' || data || '\"' ELSE data END AS data, resp_contact, serial, refresh, retry, expire, minimum FROM records WHERE zone = '$zone$' AND type <> 'SOA' AND type <> 'NS'}
- {SELECT zone FROM xfr where zone='$zone$' AND client = '$client$'}";
-};
diff --git a/contrib/dlz/modules/wildcard/Makefile b/contrib/dlz/modules/wildcard/Makefile
deleted file mode 100644
index 20a5d4ee..00000000
--- a/contrib/dlz/modules/wildcard/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-prefix = /usr
-libdir = $(prefix)/lib/bind9
-
-CFLAGS=-fPIC -g -I../include
-
-all: dlz_wildcard_dynamic.so
-
-dlz_dbi.o: ../common/dlz_dbi.c
- $(CC) $(CFLAGS) -c ../common/dlz_dbi.c
-
-dlz_wildcard_dynamic.so: dlz_wildcard_dynamic.c dlz_dbi.o
- $(CC) $(CFLAGS) -shared -o dlz_wildcard_dynamic.so \
- dlz_wildcard_dynamic.c dlz_dbi.o
-
-clean:
- rm -f dlz_wildcard_dynamic.so *.o
-
-install: dlz_wildcard_dynamic.so
- mkdir -p $(DESTDIR)$(libdir)
- install dlz_wildcard_dynamic.so $(DESTDIR)$(libdir)
diff --git a/contrib/dlz/modules/wildcard/README b/contrib/dlz/modules/wildcard/README
deleted file mode 100644
index b19009be..00000000
--- a/contrib/dlz/modules/wildcard/README
+++ /dev/null
@@ -1,31 +0,0 @@
-The "wildcard" DLZ module provides a "template" zone for domains matching
-a wildcard name. For example, the following DLZ configuration would match
-any zone name containing the string "example" and ending with .com, such
-as "thisexample.com", "exampleofthat.com", or "anexampleoftheotherthing.com".
-
- dlz "test" {
- database "dlopen ../dlz_wildcard_dynamic.so
- *example*.com 10.53.* 1800
- @ 3600 SOA {ns3.example.nil. support.example.nil. 42 14400 7200 2592000 600}
- @ 3600 NS ns3.example.nil.
- @ 3600 NS ns4.example.nil.
- @ 3600 NS ns8.example.nil.
- @ 3600 MX {5 mail.example.nil.}
- ftp 86400 A 192.0.0.1
- sql 86400 A 192.0.0.2
- tmp {} A 192.0.0.3
- www 86400 A 192.0.0.3
- www 86400 AAAA ::1
- txt 300 TXT {\"you requested $record$ in $zone$\"}
- * 86400 A 192.0.0.100";
- };
-
-For any zone name matchin the wildcard, it would return the data from
-the template. "$zone$" is replaced with zone name: i.e., the shortest
-possible string of labels in the query name that matches the wildcard.
-"$record$" is replaced with the remainder of the query name. In the
-example above, a query for "txt.thisexample.com/TXT" would return the
-string "you requested txt in thisexample.com".
-
-Any client whose source address matches the second wildcard ("10.53.*")
-is allowed to request a zone transfer.
diff --git a/contrib/dlz/modules/wildcard/dlz_wildcard_dynamic.c b/contrib/dlz/modules/wildcard/dlz_wildcard_dynamic.c
deleted file mode 100644
index 4e7373c4..00000000
--- a/contrib/dlz/modules/wildcard/dlz_wildcard_dynamic.c
+++ /dev/null
@@ -1,729 +0,0 @@
-/*
- * Copyright (C) 2002 Stichting NLnet, Netherlands, stichting@nlnet.nl.
- * Copyright (C) 2012 Vadim Goncharov, Russia, vadim_nuclight@mail.ru.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND STICHTING NLNET
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * STICHTING NLNET BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * The development of Dynamically Loadable Zones (DLZ) for Bind 9 was
- * conceived and contributed by Rob Butler.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ROB BUTLER
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * ROB BUTLER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 1999-2001, 2013, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-/*
- * This provides the externally loadable wildcard DLZ module.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdarg.h>
-#include <stdlib.h>
-
-#include <dlz_minimal.h>
-#include <dlz_list.h>
-#include <dlz_dbi.h>
-
-#include <ctype.h>
-
-#define DE_CONST(konst, var) \
- do { \
- union { const void *k; void *v; } _u; \
- _u.k = konst; \
- var = _u.v; \
- } while (0)
-
-/* fnmatch() return values. */
-#define FNM_NOMATCH 1 /* Match failed. */
-
-/* fnmatch() flags. */
-#define FNM_NOESCAPE 0x01 /* Disable backslash escaping. */
-#define FNM_PATHNAME 0x02 /* Slash must be matched by slash. */
-#define FNM_PERIOD 0x04 /* Period must be matched by period. */
-#define FNM_LEADING_DIR 0x08 /* Ignore /<tail> after Imatch. */
-#define FNM_CASEFOLD 0x10 /* Case insensitive search. */
-#define FNM_IGNORECASE FNM_CASEFOLD
-#define FNM_FILE_NAME FNM_PATHNAME
-
-/*
- * Our data structures.
- */
-
-typedef struct named_rr nrr_t;
-typedef DLZ_LIST(nrr_t) rr_list_t;
-
-typedef struct config_data {
- char *zone_pattern;
- char *axfr_pattern;
- rr_list_t rrs_list;
- char *zone;
- char *record;
- char *client;
-
- /* Helper functions from the dlz_dlopen driver */
- log_t *log;
- dns_sdlz_putrr_t *putrr;
- dns_sdlz_putnamedrr_t *putnamedrr;
- dns_dlz_writeablezone_t *writeable_zone;
-} config_data_t;
-
-struct named_rr {
- char *name;
- char *type;
- int ttl;
- query_list_t *data;
- DLZ_LINK(nrr_t) link;
-};
-
-/*
- * Forward references
- */
-static int
-rangematch(const char *, char, int, char **);
-
-static int
-fnmatch(const char *pattern, const char *string, int flags);
-
-static void
-b9_add_helper(struct config_data *cd, const char *helper_name, void *ptr);
-
-static const char *
-shortest_match(const char *pattern, const char *string);
-
-isc_result_t
-dlz_allnodes(const char *zone, void *dbdata, dns_sdlzallnodes_t *allnodes) {
- config_data_t *cd = (config_data_t *) dbdata;
- isc_result_t result;
- char *querystring = NULL;
- nrr_t *nrec;
- int i = 0;
-
- DE_CONST(zone, cd->zone);
-
- /* Write info message to log */
- cd->log(ISC_LOG_DEBUG(1),
- "dlz_wildcard allnodes called for zone '%s'", zone);
-
- result = ISC_R_FAILURE;
-
- nrec = DLZ_LIST_HEAD(cd->rrs_list);
- while (nrec != NULL) {
- cd->record = nrec->name;
-
- querystring = build_querystring(nrec->data);
-
- if (querystring == NULL) {
- result = ISC_R_NOMEMORY;
- goto done;
- }
-
- cd->log(ISC_LOG_DEBUG(2),
- "dlz_wildcard allnodes entry num %d: calling "
- "putnamedrr(name=%s type=%s ttl=%d qs=%s)",
- i++, nrec->name, nrec->type, nrec->ttl, querystring);
-
- result = cd->putnamedrr(allnodes, nrec->name, nrec->type,
- nrec->ttl, querystring);
- if (result != ISC_R_SUCCESS)
- goto done;
-
- nrec = DLZ_LIST_NEXT(nrec, link);
- }
-
-done:
- cd->zone = NULL;
-
- if (querystring != NULL)
- free(querystring);
-
- return (result);
-}
-
-isc_result_t
-dlz_allowzonexfr(void *dbdata, const char *name, const char *client) {
- config_data_t *cd = (config_data_t *) dbdata;
-
- UNUSED(name);
-
- /* Write info message to log */
- cd->log(ISC_LOG_DEBUG(1),
- "dlz_wildcard allowzonexfr called for client '%s'", client);
-
- if (fnmatch(cd->axfr_pattern, client, FNM_CASEFOLD) == 0)
- return (ISC_R_SUCCESS);
- else
- return (ISC_R_NOTFOUND);
-}
-
-#if DLZ_DLOPEN_VERSION < 3
-isc_result_t
-dlz_findzonedb(void *dbdata, const char *name)
-#else
-isc_result_t
-dlz_findzonedb(void *dbdata, const char *name,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-#endif
-{
- config_data_t *cd = (config_data_t *) dbdata;
- const char *p;
-
-#if DLZ_DLOPEN_VERSION >= 3
- UNUSED(methods);
- UNUSED(clientinfo);
-#endif
-
- p = shortest_match(cd->zone_pattern, name);
- if (p == NULL)
- return (ISC_R_NOTFOUND);
-
- /* Write info message to log */
- cd->log(ISC_LOG_DEBUG(1),
- "dlz_wildcard findzonedb matched '%s'", p);
-
- return (ISC_R_SUCCESS);
-}
-
-#if DLZ_DLOPEN_VERSION == 1
-isc_result_t
-dlz_lookup(const char *zone, const char *name,
- void *dbdata, dns_sdlzlookup_t *lookup)
-#else
-isc_result_t
-dlz_lookup(const char *zone, const char *name,
- void *dbdata, dns_sdlzlookup_t *lookup,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-#endif
-{
- isc_result_t result;
- config_data_t *cd = (config_data_t *) dbdata;
- char *querystring = NULL;
- const char *p;
- char *namebuf;
- nrr_t *nrec;
- isc_boolean_t origin = ISC_TRUE;
-
-#if DLZ_DLOPEN_VERSION >= 2
- UNUSED(methods);
- UNUSED(clientinfo);
-#endif
-
- p = shortest_match(cd->zone_pattern, zone);
- if (p == NULL)
- return (ISC_R_NOTFOUND);
-
- DE_CONST(name, cd->record);
- DE_CONST(p, cd->zone);
-
- if ((p != zone) && (strcmp(name, "@") == 0 || strcmp(name, zone) == 0))
- {
- size_t len = p - zone;
- namebuf = malloc(len);
- if (namebuf == NULL)
- return (ISC_R_NOMEMORY);
- strncpy(namebuf, zone, len - 1);
- namebuf[len - 1] = '\0';
- cd->record = namebuf;
- origin = ISC_FALSE;
- } else if (p == zone)
- cd->record = "@";
-
- /* Write info message to log */
- cd->log(ISC_LOG_DEBUG(1),
- "dlz_wildcard_dynamic: lookup for '%s' in '%s': "
- "trying '%s' in '%s'",
- name, zone, cd->record, cd->zone);
-
- result = ISC_R_NOTFOUND;
- nrec = DLZ_LIST_HEAD(cd->rrs_list);
- while (nrec != NULL) {
- nrr_t *next = DLZ_LIST_NEXT(nrec, link);
- if (strcmp(cd->record, nrec->name) == 0) {
- /* We handle authority data in dlz_authority() */
- if (strcmp(nrec->type, "SOA") == 0 ||
- strcmp(nrec->type, "NS") == 0)
- {
- nrec = next;
- continue;
- }
-
- querystring = build_querystring(nrec->data);
- if (querystring == NULL) {
- result = ISC_R_NOMEMORY;
- goto done;
- }
-
- result = cd->putrr(lookup, nrec->type,
- nrec->ttl, querystring);
- if (result != ISC_R_SUCCESS)
- goto done;
-
- result = ISC_R_SUCCESS;
-
- free(querystring);
- querystring = NULL;
- }
- nrec = next;
- }
-
-done:
- cd->zone = NULL;
- cd->record = NULL;
-
- if (querystring != NULL)
- free(querystring);
-
- return (result);
-}
-
-isc_result_t
-dlz_authority(const char *zone, void *dbdata, dns_sdlzlookup_t *lookup) {
- isc_result_t result;
- config_data_t *cd = (config_data_t *) dbdata;
- char *querystring = NULL;
- nrr_t *nrec;
- const char *p, *name = "@";
-
- p = shortest_match(cd->zone_pattern, zone);
- if (p == NULL)
- return (ISC_R_NOTFOUND);
-
- DE_CONST(p, cd->zone);
-
- /* Write info message to log */
- cd->log(ISC_LOG_DEBUG(1),
- "dlz_wildcard_dynamic: authority for '%s'", zone);
-
- result = ISC_R_NOTFOUND;
- nrec = DLZ_LIST_HEAD(cd->rrs_list);
- while (nrec != NULL) {
- isc_boolean_t origin;
- if (strcmp("@", nrec->name) == 0) {
- isc_result_t presult;
-
- querystring = build_querystring(nrec->data);
- if (querystring == NULL) {
- result = ISC_R_NOMEMORY;
- goto done;
- }
-
- presult = cd->putrr(lookup, nrec->type,
- nrec->ttl, querystring);
- if (presult != ISC_R_SUCCESS) {
- result = presult;
- goto done;
- }
-
- result = ISC_R_SUCCESS;
-
- free(querystring);
- querystring = NULL;
- }
- nrec = DLZ_LIST_NEXT(nrec, link);
- }
-
-done:
- cd->zone = NULL;
-
- if (querystring != NULL)
- free(querystring);
-
- return (result);
-}
-
-static void
-destroy_rrlist(config_data_t *cd) {
- nrr_t *trec, *nrec;
-
- nrec = DLZ_LIST_HEAD(cd->rrs_list);
-
- while (nrec != NULL) {
- trec = nrec;
-
- destroy_querylist(&trec->data);
-
- if (trec->name != NULL)
- free(trec->name);
- if (trec->type != NULL)
- free(trec->type);
- trec->name = trec->type = NULL;
-
- /* Get the next record, before we destroy this one. */
- nrec = DLZ_LIST_NEXT(nrec, link);
-
- free(trec);
- }
-}
-
-isc_result_t
-dlz_create(const char *dlzname, unsigned int argc, char *argv[],
- void **dbdata, ...)
-{
- config_data_t *cd;
- char *endp;
- int i, def_ttl;
- nrr_t *trec = NULL;
- isc_result_t result;
- const char *helper_name;
- va_list ap;
-
- if (argc < 8 || argc % 4 != 0)
- return (ISC_R_FAILURE);
-
- cd = calloc(1, sizeof(config_data_t));
- if (cd == NULL)
- return (ISC_R_NOMEMORY);
- memset(cd, 0, sizeof(config_data_t));
-
- /* Fill in the helper functions */
- va_start(ap, dbdata);
- while ((helper_name = va_arg(ap, const char*)) != NULL)
- b9_add_helper(cd, helper_name, va_arg(ap, void*));
- va_end(ap);
-
- /*
- * Write info message to log
- */
- cd->log(ISC_LOG_INFO,
- "Loading '%s' using DLZ_wildcard driver. "
- "Zone: %s, AXFR allowed for: %s, $TTL: %s",
- dlzname, argv[1], argv[2], argv[3]);
-
- /* initialize the records list here to simplify cleanup */
- DLZ_LIST_INIT(cd->rrs_list);
-
- cd->zone_pattern = strdup(argv[1]);
- cd->axfr_pattern = strdup(argv[2]);
- if (cd->zone_pattern == NULL || cd->axfr_pattern == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
- }
-
- def_ttl = strtol(argv[3], &endp, 10);
- if (*endp != '\0' || def_ttl < 0) {
- def_ttl = 3600;
- cd->log(ISC_LOG_ERROR, "default TTL invalid, using 3600");
- }
-
- for (i = 4; i < argc; i += 4) {
- result = ISC_R_NOMEMORY;
-
- trec = malloc(sizeof(nrr_t));
- if (trec == NULL)
- goto full_cleanup;
-
- memset(trec, 0, sizeof(nrr_t));
-
- /* Initialize the record link */
- DLZ_LINK_INIT(trec, link);
- /* Append the record to the list */
- DLZ_LIST_APPEND(cd->rrs_list, trec, link);
-
- trec->name = strdup(argv[i]);
- if (trec->name == NULL)
- goto full_cleanup;
-
- trec->type = strdup(argv[i + 2]);
- if (trec->type == NULL)
- goto full_cleanup;
-
- trec->ttl = strtol(argv[i + 1], &endp, 10);
- if (argv[i + 1][0] == '\0' || *endp != '\0' || trec->ttl < 0)
- trec->ttl = def_ttl;
-
- result = build_querylist(argv[i + 3], &cd->zone,
- &cd->record, &cd->client,
- &trec->data, 0, cd->log);
- /* If unsuccessful, log err msg and cleanup */
- if (result != ISC_R_SUCCESS) {
- cd->log(ISC_LOG_ERROR,
- "Could not build RR data list at argv[%d]",
- i + 3);
- goto full_cleanup;
- }
- }
-
- *dbdata = cd;
-
- return (ISC_R_SUCCESS);
-
-full_cleanup:
- destroy_rrlist(cd);
-
-cleanup:
- if (cd->zone_pattern != NULL)
- free(cd->zone_pattern);
- if (cd->axfr_pattern != NULL)
- free(cd->axfr_pattern);
- free(cd);
-
- return (result);
-}
-
-void
-dlz_destroy(void *dbdata) {
- config_data_t *cd = (config_data_t *) dbdata;
-
- /*
- * Write debugging message to log
- */
- cd->log(ISC_LOG_DEBUG(2), "Unloading DLZ_wildcard driver.");
-
- destroy_rrlist(cd);
-
- free(cd->zone_pattern);
- free(cd->axfr_pattern);
- free(cd);
-}
-
-
-/*
- * Return the version of the API
- */
-int
-dlz_version(unsigned int *flags) {
- UNUSED(flags);
- /* XXX: ok to set DNS_SDLZFLAG_THREADSAFE here? */
- return (DLZ_DLOPEN_VERSION);
-}
-
-/*
- * Register a helper function from the bind9 dlz_dlopen driver
- */
-static void
-b9_add_helper(struct config_data *cd, const char *helper_name, void *ptr) {
- if (strcmp(helper_name, "log") == 0)
- cd->log = (log_t *)ptr;
- if (strcmp(helper_name, "putrr") == 0)
- cd->putrr = (dns_sdlz_putrr_t *)ptr;
- if (strcmp(helper_name, "putnamedrr") == 0)
- cd->putnamedrr = (dns_sdlz_putnamedrr_t *)ptr;
- if (strcmp(helper_name, "writeable_zone") == 0)
- cd->writeable_zone = (dns_dlz_writeablezone_t *)ptr;
-}
-
-static const char *
-shortest_match(const char *pattern, const char *string) {
- const char *p = string;
- if (pattern == NULL || p == NULL || *p == '\0')
- return (NULL);
-
- p += strlen(p);
- while (p-- > string) {
- if (*p == '.') {
- if (fnmatch(pattern, p + 1, FNM_CASEFOLD) == 0)
- return (p + 1);
- }
- }
- if (fnmatch(pattern, string, FNM_CASEFOLD) == 0)
- return (string);
-
- return (NULL);
-}
-
-/*
- * The helper functions stolen from the FreeBSD kernel (sys/libkern/fnmatch.c).
- *
- * Why don't we use fnmatch(3) from libc? Because it is not thread-safe, and
- * it is not thread-safe because it supports multibyte characters. But here,
- * in BIND, we want to be thread-safe and don't need multibyte - DNS names are
- * always ASCII.
- */
-#define EOS '\0'
-
-#define RANGE_MATCH 1
-#define RANGE_NOMATCH 0
-#define RANGE_ERROR (-1)
-
-static int
-fnmatch(const char *pattern, const char *string, int flags) {
- const char *stringstart;
- char *newp;
- char c, test;
-
- for (stringstart = string;;)
- switch (c = *pattern++) {
- case EOS:
- if ((flags & FNM_LEADING_DIR) && *string == '/')
- return (0);
- return (*string == EOS ? 0 : FNM_NOMATCH);
- case '?':
- if (*string == EOS)
- return (FNM_NOMATCH);
- if (*string == '/' && (flags & FNM_PATHNAME))
- return (FNM_NOMATCH);
- if (*string == '.' && (flags & FNM_PERIOD) &&
- (string == stringstart ||
- ((flags & FNM_PATHNAME) && *(string - 1) == '/')))
- return (FNM_NOMATCH);
- ++string;
- break;
- case '*':
- c = *pattern;
- /* Collapse multiple stars. */
- while (c == '*')
- c = *++pattern;
-
- if (*string == '.' && (flags & FNM_PERIOD) &&
- (string == stringstart ||
- ((flags & FNM_PATHNAME) && *(string - 1) == '/')))
- return (FNM_NOMATCH);
-
- /* Optimize for pattern with * at end or before /. */
- if (c == EOS)
- if (flags & FNM_PATHNAME)
- return ((flags & FNM_LEADING_DIR) ||
- index(string, '/') == NULL ?
- 0 : FNM_NOMATCH);
- else
- return (0);
- else if (c == '/' && flags & FNM_PATHNAME) {
- if ((string = index(string, '/')) == NULL)
- return (FNM_NOMATCH);
- break;
- }
-
- /* General case, use recursion. */
- while ((test = *string) != EOS) {
- if (!fnmatch(pattern, string,
- flags & ~FNM_PERIOD))
- return (0);
- if (test == '/' && flags & FNM_PATHNAME)
- break;
- ++string;
- }
- return (FNM_NOMATCH);
- case '[':
- if (*string == EOS)
- return (FNM_NOMATCH);
- if (*string == '/' && (flags & FNM_PATHNAME))
- return (FNM_NOMATCH);
- if (*string == '.' && (flags & FNM_PERIOD) &&
- (string == stringstart ||
- ((flags & FNM_PATHNAME) && *(string - 1) == '/')))
- return (FNM_NOMATCH);
-
- switch (rangematch(pattern, *string, flags, &newp)) {
- case RANGE_ERROR:
- goto norm;
- case RANGE_MATCH:
- pattern = newp;
- break;
- case RANGE_NOMATCH:
- return (FNM_NOMATCH);
- }
- ++string;
- break;
- case '\\':
- if (!(flags & FNM_NOESCAPE)) {
- if ((c = *pattern++) == EOS) {
- c = '\\';
- --pattern;
- }
- }
- /* FALLTHROUGH */
- default:
- norm:
- if (c == *string)
- ;
- else if ((flags & FNM_CASEFOLD) &&
- (tolower((unsigned char)c) ==
- tolower((unsigned char)*string)))
- ;
- else
- return (FNM_NOMATCH);
- string++;
- break;
- }
- /* NOTREACHED */
-}
-
-static int
-rangematch(const char *pattern, char test, int flags, char **newp) {
- int negate, ok;
- char c, c2;
-
- /*
- * A bracket expression starting with an unquoted circumflex
- * character produces unspecified results (IEEE 1003.2-1992,
- * 3.13.2). This implementation treats it like '!', for
- * consistency with the regular expression syntax.
- * J.T. Conklin (conklin@ngai.kaleida.com)
- */
- if ( (negate = (*pattern == '!' || *pattern == '^')) )
- ++pattern;
-
- if (flags & FNM_CASEFOLD)
- test = tolower((unsigned char)test);
-
- /*
- * A right bracket shall lose its special meaning and represent
- * itself in a bracket expression if it occurs first in the list.
- * -- POSIX.2 2.8.3.2
- */
- ok = 0;
- c = *pattern++;
- do {
- if (c == '\\' && !(flags & FNM_NOESCAPE))
- c = *pattern++;
- if (c == EOS)
- return (RANGE_ERROR);
-
- if (c == '/' && (flags & FNM_PATHNAME))
- return (RANGE_NOMATCH);
-
- if (flags & FNM_CASEFOLD)
- c = tolower((unsigned char)c);
-
- if (*pattern == '-'
- && (c2 = *(pattern+1)) != EOS && c2 != ']') {
- pattern += 2;
- if (c2 == '\\' && !(flags & FNM_NOESCAPE))
- c2 = *pattern++;
- if (c2 == EOS)
- return (RANGE_ERROR);
-
- if (flags & FNM_CASEFOLD)
- c2 = tolower((unsigned char)c2);
-
- if (c <= test && test <= c2)
- ok = 1;
- } else if (c == test)
- ok = 1;
- } while ((c = *pattern++) != ']');
-
- *newp = (char *)(uintptr_t)pattern;
- return (ok == negate ? RANGE_NOMATCH : RANGE_MATCH);
-}
diff --git a/contrib/dlz/modules/wildcard/testing/named.conf b/contrib/dlz/modules/wildcard/testing/named.conf
deleted file mode 100644
index 0192e18c..00000000
--- a/contrib/dlz/modules/wildcard/testing/named.conf
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-controls { };
-
-options {
- directory ".";
- port 5300;
- pid-file "named.pid";
- session-keyfile "session.key";
- listen-on { any; };
- listen-on-v6 { none; };
- recursion no;
-};
-
-key rndc_key {
- secret "1234abcd8765";
- algorithm hmac-md5;
-};
-
-controls {
- inet 127.0.0.1 port 9953 allow { any; } keys { rndc_key; };
-};
-
-/*
- * This will match any zone name containing the string "example" and
- * ending with .com, such as "thisexample.com", "exampleofthat.com",
- * or "anexampleoftheotherthing.com".
- */
-dlz "test" {
- database "dlopen ../dlz_wildcard_dynamic.so
- *example*.com 10.53.* 1800
- @ 3600 SOA {ns3.example.nil. support.example.nil. 42 14400 7200 2592000 600}
- @ 3600 NS ns3.example.nil.
- @ 3600 NS ns4.example.nil.
- @ 3600 NS ns8.example.nil.
- @ 3600 MX {5 mail.example.nil.}
- ftp 86400 A 192.0.0.1
- sql 86400 A 192.0.0.2
- tmp {} A 192.0.0.3
- www 86400 A 192.0.0.3
- www 86400 AAAA ::1
- txt 300 TXT {\"you requested $record$ in $zone$\"}
- * 86400 A 192.0.0.100";
-};
diff --git a/contrib/dnsperf-2.1.0.0-1/Makefile.in b/contrib/dnsperf-2.1.0.0-1/Makefile.in
deleted file mode 100644
index edcd6688..00000000
--- a/contrib/dnsperf-2.1.0.0-1/Makefile.in
+++ /dev/null
@@ -1,55 +0,0 @@
-# Copyright 2000, 2001, 2003, 2006-2012 Nominum, Inc. All Rights Reserved.
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-bindir = @bindir@
-mandir = @mandir@
-datarootdir = @datarootdir@
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-RANLIB = @RANLIB@
-
-CC = @PTHREAD_CC@
-CFLAGS = @CFLAGS@ @DNSCFLAGS@ @DEFS@ @PTHREAD_CFLAGS@
-LIBS = libperf.a @LIBS@ @DNSLIBS@ @PTHREAD_LIBS@ -lm
-LIBOBJS = @LIBOBJS@
-LDFLAGS = @LDFLAGS@ @PTHREAD_CFLAGS@
-
-PERFOBJS = datafile.o dns.o log.o net.o opt.o os.o
-
-all: dnsperf resperf
-
-libperf.a: ${PERFOBJS}
- ${AR} ${ARFLAGS} $@ ${PERFOBJS}
- ${RANLIB} $@
-
-dnsperf: dnsperf.o libperf.a $(LIBOBJS)
- $(CC) $(LDFLAGS) dnsperf.o $(LIBOBJS) $(LIBS) -o dnsperf
-
-resperf: resperf.o libperf.a $(LIBOBJS)
- $(CC) $(LDFLAGS) resperf.o $(LIBOBJS) $(LIBS) -o resperf
-
-.c.o:
- $(CC) $(CFLAGS) -c $<
-
-installdirs:
- mkdir -p ${DESTDIR}${bindir}
- mkdir -p ${DESTDIR}${mandir}/man1
-
-install: all installdirs
- ${INSTALL_PROGRAM} dnsperf ${DESTDIR}${bindir}
- ${INSTALL_PROGRAM} resperf ${DESTDIR}${bindir}
- ${INSTALL_PROGRAM} resperf-report ${DESTDIR}${bindir}
- ${INSTALL_DATA} dnsperf.1 ${DESTDIR}${mandir}/man1
- ${INSTALL_DATA} resperf.1 ${DESTDIR}${mandir}/man1
-
-clean:
- rm -f *.o dnsperf resperf libperf.a
-
-distclean: clean
- rm -f config.log
- rm -f config.cache
- rm -f config.status
- rm -f Makefile
diff --git a/contrib/dnsperf-2.1.0.0-1/README b/contrib/dnsperf-2.1.0.0-1/README
deleted file mode 100644
index 638e2331..00000000
--- a/contrib/dnsperf-2.1.0.0-1/README
+++ /dev/null
@@ -1,21 +0,0 @@
-This is dnsperf, a collection of DNS server performance testing tools.
-For more information, see the dnsperf(1) and resperf(1) man pages.
-
-To configure, compile, and install these programs, follow these steps.
-
-1. Make sure that BIND 9 (9.4.0 or greater) is installed, including libraries
- and header files, and that the isc-config.sh program distributed with BIND
- is in your path.
-
- Note: many versions of bind do not correctly install the <isc/hmacsha.h>
- header file, so if the compilation fails, obtain this file from the BIND
- source distribution, and install it in the appropriate place.
-
-2. Run "sh configure" to configure the software. Most standard configure
- options are supported.
-
-3. Run "make" to build dnsperf and resperf
-
-4. Run "make install" to install dnsperf and resperf.
-
-Additional software is available in the contrib/ directory.
diff --git a/contrib/dnsperf-2.1.0.0-1/RELEASE_NOTES b/contrib/dnsperf-2.1.0.0-1/RELEASE_NOTES
deleted file mode 100644
index e8c67658..00000000
--- a/contrib/dnsperf-2.1.0.0-1/RELEASE_NOTES
+++ /dev/null
@@ -1,183 +0,0 @@
-Nominum dnsperf 2.1.0.0
-Release Notes
-************************
-
-December 15, 2015
-
-In addition to various bug fixes, the following new capabilities
-were added in this release:
-
- - The -C option was added to resperf. This option enables the local
- server to act as multiple clients. By default, the local server
- acts as a single client.
-
- - the -T option was added to dnsperf. This option separates the
- number of clients from the number of threads and allows more
- clients to be simulated effectively. Note that using this option
- impacts CPU and memory, so we recommend limiting the number of
- threads.
-
-
------------------------
-Nominum dnsperf 2.0.0.0
-March 1, 2012
-
-In the dnsperf command, the following changes occurred:
-
- - The socket buffer size is no longer set to 32 kilobytes by default.
-
- - A new -c clients option was added to enable the server to act as
- multiple clients. Each client uses the same source IP address with a
- unique source port. Use the "clients" argument to specify the number of
- clients represented by the server. We recommend limiting the number of
- clients represented by the server because the dnsperf process uses two
- threads for each client (one thread for sent packets and one for
- received packets), which impacts CPU and memory.
-
- - Example query files are no longer included with the dnsperf program.
- Nominum provides a sample query file that is available for download at:
- ftp://ftp.nominum.com/pub/nominum/dnsperf/data/
-
- - Latency reporting improved. When the -v (verbose mode) option is
- configured with the dnsperf command, the command output now includes
- latency measurements and the DNS RCODE of each response. This enables
- users to create their own latency graphs.
-
- - Performance was enhanced on modern operating systems so that faster
- name servers can be tested.
-
- - The dnsperf command output is enhanced to display more information in a
- compact format.
-
-The following options were removed from the dnsperf command:
-
- - The -A option for displaying command line arguments passed to the
- dnsperf tool in the final statistics output. Now, the dnsperf command
- output always displays command line arguments.
-
- - The -T option for printing a histogram showing response latency after
- completing a test run. Now, the -v option enables users to include
- latency measurements in the dnsperf command output.
-
- - The -H option for configuring the number of buckets for which response
- latency is displayed. Now, the -v option enables users to include
- latency measurements in the dnsperf command output.
-
- - The -1 option for configuring the dnsperf tool to run through the input
- file exactly one time. (Now, you use the -n 1 option to configure the
- dnsperf tool to run through the input file one time.)
-
- - The -c option for including the number of responses received (for
- each DNS RCODE) in the final statistics output. Now, DNS RCODE responses
- are always reported.
-
-In the resperf command, the following changes occurred:
-
- - The socket buffer size is no longer set to 32 kilobytes by default.
-
- - The -A option, which displayed command line arguments passed to the
- resperf tool in the final statistics output, was removed. Now, the
- resperf command output always displays command line arguments.
-
-
------------------------
-Nominum dnsperf 1.0.2.0
-December 22, 2011
-
-This release adds support for RHEL6-64 and for Solaris 10 x86-64.
-
-Some new configuration options have been added. You can now specify:
-
- - the local port from which to send requests
- - the local address from which to send requests
- - the maximum number of runs through the input file, up
- to the timeout limit.
- - when using TSIG, algorithms other than hmac-md5 can be used.
-
-One default has been changed:
-
- - The maximum number of outstanding requests now defaults
- to 100.
-
-A new example query file for IPv6, queryfile-example-ipv6, is now
-included with the distribution.
-
-
------------------------
-Nominum dnsperf 1.0.1.0
-January 10, 2008
-
-This release makes binary builds of dnsperf available in addition to
-the source code version previously released.
-
-This release of dnsperf includes a sample query file containing
-100,000 queries to help with performance testing. This query file is
-useful for checking latencies or a continuous dnsperf run. In the
-binary distribution, this file is found at:
-
- /usr/local/nom/examples/dnsperf/queryfile-example-100thousand
-
-In the source distribution, it is at:
-
- ./examples/queryfile-example-100thousand
-
-where "." is the directory made by extracting the source tarball.
-
-Nominum recommends using a query file with at least 3 million queries
-for a full resperf run as described in the man page; we make such a
-file available for download at:
-
-ftp://ftp.nominum.com/pub/nominum/dnsperf/data/queryfile-example-3million.gz
-
-The following fix is included in the source distribution:
-
- - 20996: makefile.in does not allow overriding mandir
-
- The --mandir argument to configure, which allows the user to
- specify the location man pages are installed, was incorrectly
- ignored.
-
-"queryparse" is a contributed program available in the source
-distribution of dnsperf. It can be found at contrib/queryparse/.
-The following changes were made to that program:
-
- - 19717: contrib/queryparse includes outgoing queries
-
- The queryparse script had no way of distinguishing between incoming
- queries and outgoing queries when applied to a traffic trace from a
- caching server. This was addressed by adding a new flag (-r) that,
- when included in the command line, will keep queries with
- RD=0. Otherwise, it will default to discarding them.
-
- - The ability to parse responses instead of queries was added.
-
- - A check was added to avoid short packets.
-
- - Logic was added to detect link type and correctly set the initial
- offset to handle both Ethernet and Cisco HDLC frames.
-
- - Queryparse now uses pcapy instead of the btk python libcap module.
-
-Note that announcements of new releases of dnsperf are sent to the
-mailing list: dnsperf-announce@nominum.com. To be added to the
-mailing list, send a message to dnsperf-announce-request@nominum.com
-with "subscribe" as the subject.
-
-Known Issues:
-
- - None.
-
------------------------
-Nominum dnsperf 1.0.0.1
-December 21, 2006
-
-This release addresses the following issue in the dnsperf program:
-
- - 18838/18782: dnsperf slow down issue
-
- Because of an error in how timeout checking was being done, queries
- were rarely timing out, so the number of valid queries in flight kept
- dropping. This error has been corrected.
-
-
-
diff --git a/contrib/dnsperf-2.1.0.0-1/aclocal.m4 b/contrib/dnsperf-2.1.0.0-1/aclocal.m4
deleted file mode 100644
index 14b8f4e1..00000000
--- a/contrib/dnsperf-2.1.0.0-1/aclocal.m4
+++ /dev/null
@@ -1,2 +0,0 @@
-sinclude(./acx_pthread.m4)dnl
-
diff --git a/contrib/dnsperf-2.1.0.0-1/acx_pthread.m4 b/contrib/dnsperf-2.1.0.0-1/acx_pthread.m4
deleted file mode 100644
index e4e91d3c..00000000
--- a/contrib/dnsperf-2.1.0.0-1/acx_pthread.m4
+++ /dev/null
@@ -1,242 +0,0 @@
-dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
-dnl
-dnl @summary figure out how to build C programs using POSIX threads
-dnl
-dnl This macro figures out how to build C programs using POSIX threads.
-dnl It sets the PTHREAD_LIBS output variable to the threads library and
-dnl linker flags, and the PTHREAD_CFLAGS output variable to any special
-dnl C compiler flags that are needed. (The user can also force certain
-dnl compiler flags/libs to be tested by setting these environment
-dnl variables.)
-dnl
-dnl Also sets PTHREAD_CC to any special C compiler that is needed for
-dnl multi-threaded programs (defaults to the value of CC otherwise).
-dnl (This is necessary on AIX to use the special cc_r compiler alias.)
-dnl
-dnl NOTE: You are assumed to not only compile your program with these
-dnl flags, but also link it with them as well. e.g. you should link
-dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS
-dnl $LIBS
-dnl
-dnl If you are only building threads programs, you may wish to use
-dnl these variables in your default LIBS, CFLAGS, and CC:
-dnl
-dnl LIBS="$PTHREAD_LIBS $LIBS"
-dnl CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-dnl CC="$PTHREAD_CC"
-dnl
-dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute
-dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to
-dnl that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
-dnl
-dnl ACTION-IF-FOUND is a list of shell commands to run if a threads
-dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to
-dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the
-dnl default action will define HAVE_PTHREAD.
-dnl
-dnl Please let the authors know if this macro fails on any platform, or
-dnl if you have any other suggestions or comments. This macro was based
-dnl on work by SGJ on autoconf scripts for FFTW (www.fftw.org) (with
-dnl help from M. Frigo), as well as ac_pthread and hb_pthread macros
-dnl posted by Alejandro Forero Cuervo to the autoconf macro repository.
-dnl We are also grateful for the helpful feedback of numerous users.
-dnl
-dnl @category InstalledPackages
-dnl @author Steven G. Johnson <stevenj@alum.mit.edu>
-dnl @version 2006-05-29
-dnl @license GPLWithACException
-
-AC_DEFUN([ACX_PTHREAD], [
-AC_REQUIRE([AC_CANONICAL_HOST])
-AC_LANG_SAVE
-AC_LANG_C
-acx_pthread_ok=no
-
-# We used to check for pthread.h first, but this fails if pthread.h
-# requires special compiler flags (e.g. on True64 or Sequent).
-# It gets checked for in the link test anyway.
-
-# First of all, check if the user has set any of the PTHREAD_LIBS,
-# etcetera environment variables, and if threads linking works using
-# them:
-if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
- save_LIBS="$LIBS"
- LIBS="$PTHREAD_LIBS $LIBS"
- AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
- AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
- AC_MSG_RESULT($acx_pthread_ok)
- if test x"$acx_pthread_ok" = xno; then
- PTHREAD_LIBS=""
- PTHREAD_CFLAGS=""
- fi
- LIBS="$save_LIBS"
- CFLAGS="$save_CFLAGS"
-fi
-
-# We must check for the threads library under a number of different
-# names; the ordering is very important because some systems
-# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
-# libraries is broken (non-POSIX).
-
-# Create a list of thread flags to try. Items starting with a "-" are
-# C compiler flags, and other items are library names, except for "none"
-# which indicates that we try without any flags at all, and "pthread-config"
-# which is a program returning the flags for the Pth emulation library.
-
-acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
-
-# The ordering *is* (sometimes) important. Some notes on the
-# individual items follow:
-
-# pthreads: AIX (must check this before -lpthread)
-# none: in case threads are in libc; should be tried before -Kthread and
-# other compiler flags to prevent continual compiler warnings
-# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
-# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
-# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
-# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
-# -pthreads: Solaris/gcc
-# -mthreads: Mingw32/gcc, Lynx/gcc
-# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
-# doesn't hurt to check since this sometimes defines pthreads too;
-# also defines -D_REENTRANT)
-# ... -mt is also the pthreads flag for HP/aCC
-# pthread: Linux, etcetera
-# --thread-safe: KAI C++
-# pthread-config: use pthread-config program (for GNU Pth library)
-
-case "${host_cpu}-${host_os}" in
- *solaris*)
-
- # On Solaris (at least, for some versions), libc contains stubbed
- # (non-functional) versions of the pthreads routines, so link-based
- # tests will erroneously succeed. (We need to link with -pthreads/-mt/
- # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
- # a function called by this macro, so we could check for that, but
- # who knows whether they'll stub that too in a future libc.) So,
- # we'll just look for -pthreads and -lpthread first:
-
- acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags"
- ;;
-esac
-
-if test x"$acx_pthread_ok" = xno; then
-for flag in $acx_pthread_flags; do
-
- case $flag in
- none)
- AC_MSG_CHECKING([whether pthreads work without any flags])
- ;;
-
- -*)
- AC_MSG_CHECKING([whether pthreads work with $flag])
- PTHREAD_CFLAGS="$flag"
- ;;
-
- pthread-config)
- AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no)
- if test x"$acx_pthread_config" = xno; then continue; fi
- PTHREAD_CFLAGS="`pthread-config --cflags`"
- PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
- ;;
-
- *)
- AC_MSG_CHECKING([for the pthreads library -l$flag])
- PTHREAD_LIBS="-l$flag"
- ;;
- esac
-
- save_LIBS="$LIBS"
- save_CFLAGS="$CFLAGS"
- LIBS="$PTHREAD_LIBS $LIBS"
- CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-
- # Check for various functions. We must include pthread.h,
- # since some functions may be macros. (On the Sequent, we
- # need a special flag -Kthread to make this header compile.)
- # We check for pthread_join because it is in -lpthread on IRIX
- # while pthread_create is in libc. We check for pthread_attr_init
- # due to DEC craziness with -lpthreads. We check for
- # pthread_cleanup_push because it is one of the few pthread
- # functions on Solaris that doesn't have a non-functional libc stub.
- # We try pthread_create on general principles.
- AC_TRY_LINK([#include <pthread.h>],
- [pthread_t th; pthread_join(th, 0);
- pthread_attr_init(0); pthread_cleanup_push(0, 0);
- pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
- [acx_pthread_ok=yes])
-
- LIBS="$save_LIBS"
- CFLAGS="$save_CFLAGS"
-
- AC_MSG_RESULT($acx_pthread_ok)
- if test "x$acx_pthread_ok" = xyes; then
- break;
- fi
-
- PTHREAD_LIBS=""
- PTHREAD_CFLAGS=""
-done
-fi
-
-# Various other checks:
-if test "x$acx_pthread_ok" = xyes; then
- save_LIBS="$LIBS"
- LIBS="$PTHREAD_LIBS $LIBS"
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-
- # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
- AC_MSG_CHECKING([for joinable pthread attribute])
- attr_name=unknown
- for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
- AC_TRY_LINK([#include <pthread.h>], [int attr=$attr; return attr;],
- [attr_name=$attr; break])
- done
- AC_MSG_RESULT($attr_name)
- if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
- AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
- [Define to necessary symbol if this constant
- uses a non-standard name on your system.])
- fi
-
- AC_MSG_CHECKING([if more special flags are required for pthreads])
- flag=no
- case "${host_cpu}-${host_os}" in
- *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
- *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
- esac
- AC_MSG_RESULT(${flag})
- if test "x$flag" != xno; then
- PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
- fi
-
- LIBS="$save_LIBS"
- CFLAGS="$save_CFLAGS"
-
- # More AIX lossage: must compile with xlc_r or cc_r
- if test x"$GCC" != xyes; then
- AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
- else
- PTHREAD_CC=$CC
- fi
-else
- PTHREAD_CC="$CC"
-fi
-
-AC_SUBST(PTHREAD_LIBS)
-AC_SUBST(PTHREAD_CFLAGS)
-AC_SUBST(PTHREAD_CC)
-
-# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
-if test x"$acx_pthread_ok" = xyes; then
- ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
- :
-else
- acx_pthread_ok=no
- $2
-fi
-AC_LANG_RESTORE
-])dnl ACX_PTHREAD
diff --git a/contrib/dnsperf-2.1.0.0-1/config.guess b/contrib/dnsperf-2.1.0.0-1/config.guess
deleted file mode 100644
index f8d6eac4..00000000
--- a/contrib/dnsperf-2.1.0.0-1/config.guess
+++ /dev/null
@@ -1,1447 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
-
-timestamp='2009-01-17'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Originally written by Per Bothner <per@bothner.com>.
-# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub. If it succeeds, it prints the system name on stdout, and
-# exits with 0. Otherwise, it exits with 1.
-#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit 0 ;;
- --version | -v )
- echo "$version" ; exit 0 ;;
- --help | --h* | -h )
- echo "$usage"; exit 0 ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help" >&2
- exit 1 ;;
- * )
- break ;;
- esac
-done
-
-if test $# != 0; then
- echo "$me: too many arguments$help" >&2
- exit 1
-fi
-
-trap 'exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,) echo "int x;" > $dummy.c ;
- for c in cc gcc c89 c99 ; do
- if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
- CC_FOR_BUILD="$c"; break ;
- fi ;
- done ;
- if test x"$CC_FOR_BUILD" = x ; then
- CC_FOR_BUILD=no_compiler_found ;
- fi
- ;;
- ,,*) CC_FOR_BUILD=$CC ;;
- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
-esac ;'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
- PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- *:NetBSD:*:*)
- # NetBSD (nbsd) targets should (where applicable) match one or
- # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
- # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
- # switched to ELF, *-*-netbsd* would select the old
- # object file format. This provides both forward
- # compatibility and a consistent mechanism for selecting the
- # object file format.
- #
- # Note: NetBSD doesn't particularly care about the vendor
- # portion of the name. We always set it to "unknown".
- sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
- case "${UNAME_MACHINE_ARCH}" in
- armeb) machine=armeb-unknown ;;
- arm*) machine=arm-unknown ;;
- sh3el) machine=shl-unknown ;;
- sh3eb) machine=sh-unknown ;;
- *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
- esac
- # The Operating System including object format, if it has switched
- # to ELF recently, or will in the future.
- case "${UNAME_MACHINE_ARCH}" in
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
- eval $set_cc_for_build
- if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep __ELF__ >/dev/null
- then
- # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- # Return netbsd for either. FIX?
- os=netbsd
- else
- os=netbsdelf
- fi
- ;;
- *)
- os=netbsd
- ;;
- esac
- # The OS release
- # Debian GNU/NetBSD machines have a different userland, and
- # thus, need a distinct triplet. However, they do not need
- # kernel version information, so it can be replaced with a
- # suitable tag, in the style of linux-gnu.
- case "${UNAME_VERSION}" in
- Debian*)
- release='-gnu'
- ;;
- *)
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- ;;
- esac
- # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
- # contains redundant information, the shorter form:
- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
- exit 0 ;;
- amd64:OpenBSD:*:*)
- echo x86_64-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- amiga:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- cats:OpenBSD:*:*)
- echo arm-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- hp300:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- luna88k:OpenBSD:*:*)
- echo m88k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mac68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- macppc:OpenBSD:*:*)
- echo powerpc-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvme68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvme88k:OpenBSD:*:*)
- echo m88k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvmeppc:OpenBSD:*:*)
- echo powerpc-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- sgi:OpenBSD:*:*)
- echo mips64-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- sun3:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- *:OpenBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- *:ekkoBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
- exit 0 ;;
- macppc:MirBSD:*:*)
- echo powerppc-unknown-mirbsd${UNAME_RELEASE}
- exit 0 ;;
- *:MirBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
- exit 0 ;;
- alpha:OSF1:*:*)
- case $UNAME_RELEASE in
- *4.0)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
- ;;
- *5.*)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
- ;;
- esac
- # According to Compaq, /usr/sbin/psrinfo has been available on
- # OSF/1 and Tru64 systems produced since 1995. I hope that
- # covers most systems running today. This code pipes the CPU
- # types through head -n 1, so we only detect the type of CPU 0.
- ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
- case "$ALPHA_CPU_TYPE" in
- "EV4 (21064)")
- UNAME_MACHINE="alpha" ;;
- "EV4.5 (21064)")
- UNAME_MACHINE="alpha" ;;
- "LCA4 (21066/21068)")
- UNAME_MACHINE="alpha" ;;
- "EV5 (21164)")
- UNAME_MACHINE="alphaev5" ;;
- "EV5.6 (21164A)")
- UNAME_MACHINE="alphaev56" ;;
- "EV5.6 (21164PC)")
- UNAME_MACHINE="alphapca56" ;;
- "EV5.7 (21164PC)")
- UNAME_MACHINE="alphapca57" ;;
- "EV6 (21264)")
- UNAME_MACHINE="alphaev6" ;;
- "EV6.7 (21264A)")
- UNAME_MACHINE="alphaev67" ;;
- "EV6.8CB (21264C)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.8AL (21264B)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.8CX (21264D)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.9A (21264/EV69A)")
- UNAME_MACHINE="alphaev69" ;;
- "EV7 (21364)")
- UNAME_MACHINE="alphaev7" ;;
- "EV7.9 (21364A)")
- UNAME_MACHINE="alphaev79" ;;
- esac
- # A Pn.n version is a patched version.
- # A Vn.n version is a released version.
- # A Tn.n version is a released field test version.
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- exit 0 ;;
- Alpha\ *:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # Should we change UNAME_MACHINE based on the output of uname instead
- # of the specific Alpha model?
- echo alpha-pc-interix
- exit 0 ;;
- 21064:Windows_NT:50:3)
- echo alpha-dec-winnt3.5
- exit 0 ;;
- Amiga*:UNIX_System_V:4.0:*)
- echo m68k-unknown-sysv4
- exit 0;;
- *:[Aa]miga[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-amigaos
- exit 0 ;;
- *:[Mm]orph[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-morphos
- exit 0 ;;
- *:OS/390:*:*)
- echo i370-ibm-openedition
- exit 0 ;;
- *:OS400:*:*)
- echo powerpc-ibm-os400
- exit 0 ;;
- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix${UNAME_RELEASE}
- exit 0;;
- SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
- exit 0;;
- Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
- # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "`(/bin/universe) 2>/dev/null`" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit 0 ;;
- NILE*:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit 0 ;;
- DRS?6000:unix:4.0:6*)
- echo sparc-icl-nx6
- exit 0 ;;
- DRS?6000:UNIX_SV:4.2*:7*)
- case `/usr/bin/uname -p` in
- sparc) echo sparc-icl-nx7 && exit 0 ;;
- esac ;;
- sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- i86pc:SunOS:5.*:*)
- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:6*:*)
- # According to config.sub, this is the proper way to canonicalize
- # SunOS6. Hard to guess exactly what SunOS6 will be like, but
- # it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:*:*)
- case "`/usr/bin/arch -k`" in
- Series*|S4*)
- UNAME_RELEASE=`uname -v`
- ;;
- esac
- # Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
- exit 0 ;;
- sun3*:SunOS:*:*)
- echo m68k-sun-sunos${UNAME_RELEASE}
- exit 0 ;;
- sun*:*:4.2BSD:*)
- UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
- test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
- case "`/bin/arch`" in
- sun3)
- echo m68k-sun-sunos${UNAME_RELEASE}
- ;;
- sun4)
- echo sparc-sun-sunos${UNAME_RELEASE}
- ;;
- esac
- exit 0 ;;
- aushp:SunOS:*:*)
- echo sparc-auspex-sunos${UNAME_RELEASE}
- exit 0 ;;
- # The situation for MiNT is a little confusing. The machine name
- # can be virtually everything (everything which is not
- # "atarist" or "atariste" at least should have a processor
- # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
- # to the lowercase version "mint" (or "freemint"). Finally
- # the system name "TOS" denotes a system which is actually not
- # MiNT. But MiNT is downward compatible to TOS, so this should
- # be no problem.
- atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
- atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
- *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
- milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint${UNAME_RELEASE}
- exit 0 ;;
- hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint${UNAME_RELEASE}
- exit 0 ;;
- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint${UNAME_RELEASE}
- exit 0 ;;
- m68k:machten:*:*)
- echo m68k-apple-machten${UNAME_RELEASE}
- exit 0 ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten${UNAME_RELEASE}
- exit 0 ;;
- RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
- exit 0 ;;
- RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix${UNAME_RELEASE}
- exit 0 ;;
- VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix${UNAME_RELEASE}
- exit 0 ;;
- 2020:CLIX:*:* | 2430:CLIX:*:*)
- echo clipper-intergraph-clix${UNAME_RELEASE}
- exit 0 ;;
- mips:*:*:UMIPS | mips:*:*:RISCos)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
- #if defined (host_mips) && defined (MIPSEB)
- #if defined (SYSTYPE_SYSV)
- printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_SVR4)
- printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
- printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
- #endif
- #endif
- exit (-1);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c \
- && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
- && exit 0
- echo mips-mips-riscos${UNAME_RELEASE}
- exit 0 ;;
- Motorola:PowerMAX_OS:*:*)
- echo powerpc-motorola-powermax
- exit 0 ;;
- Motorola:*:4.3:PL8-*)
- echo powerpc-harris-powermax
- exit 0 ;;
- Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
- echo powerpc-harris-powermax
- exit 0 ;;
- Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit 0 ;;
- m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit 0 ;;
- m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit 0 ;;
- m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit 0 ;;
- AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
- then
- if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
- [ ${TARGET_BINARY_INTERFACE}x = x ]
- then
- echo m88k-dg-dgux${UNAME_RELEASE}
- else
- echo m88k-dg-dguxbcs${UNAME_RELEASE}
- fi
- else
- echo i586-dg-dgux${UNAME_RELEASE}
- fi
- exit 0 ;;
- M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit 0 ;;
- M88*:*:R3*:*)
- # Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit 0 ;;
- XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit 0 ;;
- Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit 0 ;;
- *:IRIX*:*:*)
- echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit 0 ;;
- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
- i*86:AIX:*:*)
- echo i386-ibm-aix
- exit 0 ;;
- ia64:AIX:*:*)
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
- exit 0 ;;
- *:AIX:2:3)
- if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <sys/systemcfg.h>
-
- main()
- {
- if (!__power_pc())
- exit(1);
- puts("powerpc-ibm-aix3.2.5");
- exit(0);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
- echo rs6000-ibm-aix3.2.5
- elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
- else
- echo rs6000-ibm-aix3.2
- fi
- exit 0 ;;
- *:AIX:*:[45])
- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
- if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
- IBM_ARCH=rs6000
- else
- IBM_ARCH=powerpc
- fi
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${IBM_ARCH}-ibm-aix${IBM_REV}
- exit 0 ;;
- *:AIX:*:*)
- echo rs6000-ibm-aix
- exit 0 ;;
- ibmrt:4.4BSD:*|romp-ibm:BSD:*)
- echo romp-ibm-bsd4.4
- exit 0 ;;
- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
- echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
- exit 0 ;; # report: romp-ibm BSD 4.3
- *:BOSX:*:*)
- echo rs6000-bull-bosx
- exit 0 ;;
- DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit 0 ;;
- 9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit 0 ;;
- hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit 0 ;;
- 9000/[34678]??:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- case "${UNAME_MACHINE}" in
- 9000/31? ) HP_ARCH=m68000 ;;
- 9000/[34]?? ) HP_ARCH=m68k ;;
- 9000/[678][0-9][0-9])
- if [ -x /usr/bin/getconf ]; then
- sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
- case "${sc_cpu_version}" in
- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
- 532) # CPU_PA_RISC2_0
- case "${sc_kernel_bits}" in
- 32) HP_ARCH="hppa2.0n" ;;
- 64) HP_ARCH="hppa2.0w" ;;
- '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
- esac ;;
- esac
- fi
- if [ "${HP_ARCH}" = "" ]; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-
- #define _HPUX_SOURCE
- #include <stdlib.h>
- #include <unistd.h>
-
- int main ()
- {
- #if defined(_SC_KERNEL_BITS)
- long bits = sysconf(_SC_KERNEL_BITS);
- #endif
- long cpu = sysconf (_SC_CPU_VERSION);
-
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
- case CPU_PA_RISC2_0:
- #if defined(_SC_KERNEL_BITS)
- switch (bits)
- {
- case 64: puts ("hppa2.0w"); break;
- case 32: puts ("hppa2.0n"); break;
- default: puts ("hppa2.0"); break;
- } break;
- #else /* !defined(_SC_KERNEL_BITS) */
- puts ("hppa2.0"); break;
- #endif
- default: puts ("hppa1.0"); break;
- }
- exit (0);
- }
-EOF
- (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
- test -z "$HP_ARCH" && HP_ARCH=hppa
- fi ;;
- esac
- if [ ${HP_ARCH} = "hppa2.0w" ]
- then
- # avoid double evaluation of $set_cc_for_build
- test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
- if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
- then
- HP_ARCH="hppa2.0w"
- else
- HP_ARCH="hppa64"
- fi
- fi
- echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- exit 0 ;;
- ia64:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- echo ia64-hp-hpux${HPUX_REV}
- exit 0 ;;
- 3050*:HI-UX:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <unistd.h>
- int
- main ()
- {
- long cpu = sysconf (_SC_CPU_VERSION);
- /* The order matters, because CPU_IS_HP_MC68K erroneously returns
- true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
- results, however. */
- if (CPU_IS_PA_RISC (cpu))
- {
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
- default: puts ("hppa-hitachi-hiuxwe2"); break;
- }
- }
- else if (CPU_IS_HP_MC68K (cpu))
- puts ("m68k-hitachi-hiuxwe2");
- else puts ("unknown-hitachi-hiuxwe2");
- exit (0);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
- echo unknown-hitachi-hiuxwe2
- exit 0 ;;
- 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
- echo hppa1.1-hp-bsd
- exit 0 ;;
- 9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit 0 ;;
- *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- echo hppa1.0-hp-mpeix
- exit 0 ;;
- hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
- echo hppa1.1-hp-osf
- exit 0 ;;
- hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit 0 ;;
- i*86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
- echo ${UNAME_MACHINE}-unknown-osf1mk
- else
- echo ${UNAME_MACHINE}-unknown-osf1
- fi
- exit 0 ;;
- parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit 0 ;;
- C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit 0 ;;
- C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit 0 ;;
- C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit 0 ;;
- C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit 0 ;;
- C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit 0 ;;
- CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*[A-Z]90:*:*:*)
- echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
- | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
- -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*TS:*:*:*)
- echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*T3E:*:*:*)
- echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*SV1:*:*:*)
- echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- *:UNICOS/mp:*:*)
- echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit 0 ;;
- 5000:UNIX_System_V:4.*:*)
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit 0 ;;
- i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
- exit 0 ;;
- sparc*:BSD/OS:*:*)
- echo sparc-unknown-bsdi${UNAME_RELEASE}
- exit 0 ;;
- *:BSD/OS:*:*)
- echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- exit 0 ;;
- *:FreeBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit 0 ;;
- i*:CYGWIN*:*)
- echo ${UNAME_MACHINE}-pc-cygwin
- exit 0 ;;
- i*:MINGW*:*)
- echo ${UNAME_MACHINE}-pc-mingw32
- exit 0 ;;
- i*:PW*:*)
- echo ${UNAME_MACHINE}-pc-pw32
- exit 0 ;;
- x86:Interix*:[34]*)
- echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
- exit 0 ;;
- [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
- echo i${UNAME_MACHINE}-pc-mks
- exit 0 ;;
- i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
- # UNAME_MACHINE based on the output of uname instead of i386?
- echo i586-pc-interix
- exit 0 ;;
- i*:UWIN*:*)
- echo ${UNAME_MACHINE}-pc-uwin
- exit 0 ;;
- p*:CYGWIN*:*)
- echo powerpcle-unknown-cygwin
- exit 0 ;;
- prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- *:GNU:*:*)
- # the GNU system
- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit 0 ;;
- *:GNU/*:*:*)
- # other systems with GNU libc and userland
- echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
- exit 0 ;;
- i*86:Minix:*:*)
- echo ${UNAME_MACHINE}-pc-minix
- exit 0 ;;
- arm*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- cris:Linux:*:*)
- echo cris-axis-linux-gnu
- exit 0 ;;
- crisv32:Linux:*:*)
- echo crisv32-axis-linux-gnu
- exit 0 ;;
- frv:Linux:*:*)
- echo frv-unknown-linux-gnu
- exit 0 ;;
- ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- m32r*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- mips:Linux:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #undef CPU
- #undef mips
- #undef mipsel
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=mipsel
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=mips
- #else
- CPU=
- #endif
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
- test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
- ;;
- mips64:Linux:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #undef CPU
- #undef mips64
- #undef mips64el
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=mips64el
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=mips64
- #else
- CPU=
- #endif
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
- test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
- ;;
- ppc:Linux:*:*)
- echo powerpc-unknown-linux-gnu
- exit 0 ;;
- ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-gnu
- exit 0 ;;
- alpha:Linux:*:*)
- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
- EV5) UNAME_MACHINE=alphaev5 ;;
- EV56) UNAME_MACHINE=alphaev56 ;;
- PCA56) UNAME_MACHINE=alphapca56 ;;
- PCA57) UNAME_MACHINE=alphapca56 ;;
- EV6) UNAME_MACHINE=alphaev6 ;;
- EV67) UNAME_MACHINE=alphaev67 ;;
- EV68*) UNAME_MACHINE=alphaev68 ;;
- esac
- objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
- exit 0 ;;
- parisc:Linux:*:* | hppa:Linux:*:*)
- # Look for CPU level
- case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- PA7*) echo hppa1.1-unknown-linux-gnu ;;
- PA8*) echo hppa2.0-unknown-linux-gnu ;;
- *) echo hppa-unknown-linux-gnu ;;
- esac
- exit 0 ;;
- parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-gnu
- exit 0 ;;
- s390:Linux:*:* | s390x:Linux:*:*)
- echo ${UNAME_MACHINE}-ibm-linux
- exit 0 ;;
- sh64*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- sh*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- sparc:Linux:*:* | sparc64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- x86_64:Linux:*:*)
- echo x86_64-unknown-linux-gnu
- exit 0 ;;
- i*86:Linux:*:*)
- # The BFD linker knows what the default object file format is, so
- # first see if it will tell us. cd to the root directory to prevent
- # problems with other programs or directories called `ld' in the path.
- # Set LC_ALL=C to ensure ld outputs messages in English.
- ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
- | sed -ne '/supported targets:/!d
- s/[ ][ ]*/ /g
- s/.*supported targets: *//
- s/ .*//
- p'`
- case "$ld_supported_targets" in
- elf32-i386)
- TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
- ;;
- a.out-i386-linux)
- echo "${UNAME_MACHINE}-pc-linux-gnuaout"
- exit 0 ;;
- coff-i386)
- echo "${UNAME_MACHINE}-pc-linux-gnucoff"
- exit 0 ;;
- "")
- # Either a pre-BFD a.out linker (linux-gnuoldld) or
- # one that does not give us useful --help.
- echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
- exit 0 ;;
- esac
- # Determine whether the default compiler is a.out or elf
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <features.h>
- #ifdef __ELF__
- # ifdef __GLIBC__
- # if __GLIBC__ >= 2
- LIBC=gnu
- # else
- LIBC=gnulibc1
- # endif
- # else
- LIBC=gnulibc1
- # endif
- #else
- #ifdef __INTEL_COMPILER
- LIBC=gnu
- #else
- LIBC=gnuaout
- #endif
- #endif
- #ifdef __dietlibc__
- LIBC=dietlibc
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
- test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
- test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
- ;;
- i*86:DYNIX/ptx:4*:*)
- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
- # earlier versions are messed up and put the nodename in both
- # sysname and nodename.
- echo i386-sequent-sysv4
- exit 0 ;;
- i*86:UNIX_SV:4.2MP:2.*)
- # Unixware is an offshoot of SVR4, but it has its own version
- # number series starting with 2...
- # I am not positive that other SVR4 systems won't match this,
- # I just have to hope. -- rms.
- # Use sysv4.2uw... so that sysv4* matches it.
- echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
- exit 0 ;;
- i*86:OS/2:*:*)
- # If we were able to find `uname', then EMX Unix compatibility
- # is probably installed.
- echo ${UNAME_MACHINE}-pc-os2-emx
- exit 0 ;;
- i*86:XTS-300:*:STOP)
- echo ${UNAME_MACHINE}-unknown-stop
- exit 0 ;;
- i*86:atheos:*:*)
- echo ${UNAME_MACHINE}-unknown-atheos
- exit 0 ;;
- i*86:syllable:*:*)
- echo ${UNAME_MACHINE}-pc-syllable
- exit 0 ;;
- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
- echo i386-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- i*86:*DOS:*:*)
- echo ${UNAME_MACHINE}-pc-msdosdjgpp
- exit 0 ;;
- i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
- UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
- else
- echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
- fi
- exit 0 ;;
- i*86:*:5:[78]*)
- case `/bin/uname -X | grep "^Machine"` in
- *486*) UNAME_MACHINE=i486 ;;
- *Pentium) UNAME_MACHINE=i586 ;;
- *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
- esac
- echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
- exit 0 ;;
- i*86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
- echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
- elif /bin/uname -X 2>/dev/null >/dev/null ; then
- UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
- (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
- (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
- && UNAME_MACHINE=i586
- (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
- && UNAME_MACHINE=i686
- (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
- && UNAME_MACHINE=i686
- echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
- else
- echo ${UNAME_MACHINE}-pc-sysv32
- fi
- exit 0 ;;
- pc:*:*:*)
- # Left here for compatibility:
- # uname -m prints for DJGPP always 'pc', but it prints nothing about
- # the processor, so we play safe by assuming i386.
- echo i386-pc-msdosdjgpp
- exit 0 ;;
- Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit 0 ;;
- paragon:*:*:*)
- echo i860-intel-osf1
- exit 0 ;;
- i860:*:4.*:*) # i860-SVR4
- if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
- else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
- fi
- exit 0 ;;
- mini*:CTIX:SYS*5:*)
- # "miniframe"
- echo m68010-convergent-sysv
- exit 0 ;;
- mc68k:UNIX:SYSTEM5:3.51m)
- echo m68k-convergent-sysv
- exit 0 ;;
- M680?0:D-NIX:5.3:*)
- echo m68k-diab-dnix
- exit 0 ;;
- M68*:*:R3V[5678]*:*)
- test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
- 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
- OS_REL=''
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4.3${OS_REL} && exit 0
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4 && exit 0 ;;
- m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit 0 ;;
- TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
- echo powerpc-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv${UNAME_RELEASE}
- exit 0 ;;
- RM*:ReliantUNIX-*:*:*)
- echo mips-sni-sysv4
- exit 0 ;;
- RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit 0 ;;
- *:SINIX-*:*:*)
- if uname -p 2>/dev/null >/dev/null ; then
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- echo ${UNAME_MACHINE}-sni-sysv4
- else
- echo ns32k-sni-sysv
- fi
- exit 0 ;;
- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit 0 ;;
- *:UNIX_System_V:4*:FTX*)
- # From Gerald Hewes <hewes@openmarket.com>.
- # How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit 0 ;;
- *:*:*:FTX*)
- # From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
- exit 0 ;;
- *:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo hppa1.1-stratus-vos
- exit 0 ;;
- mc68*:A/UX:*:*)
- echo m68k-apple-aux${UNAME_RELEASE}
- exit 0 ;;
- news*:NEWS-OS:6*:*)
- echo mips-sony-newsos6
- exit 0 ;;
- R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if [ -d /usr/nec ]; then
- echo mips-nec-sysv${UNAME_RELEASE}
- else
- echo mips-unknown-sysv${UNAME_RELEASE}
- fi
- exit 0 ;;
- BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
- exit 0 ;;
- BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
- echo powerpc-apple-beos
- exit 0 ;;
- BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
- exit 0 ;;
- SX-4:SUPER-UX:*:*)
- echo sx4-nec-superux${UNAME_RELEASE}
- exit 0 ;;
- SX-5:SUPER-UX:*:*)
- echo sx5-nec-superux${UNAME_RELEASE}
- exit 0 ;;
- SX-6:SUPER-UX:*:*)
- echo sx6-nec-superux${UNAME_RELEASE}
- exit 0 ;;
- Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody${UNAME_RELEASE}
- exit 0 ;;
- *:Rhapsody:*:*)
- echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
- exit 0 ;;
- *:Darwin:*:*)
- UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
- case $UNAME_PROCESSOR in
- *86) UNAME_PROCESSOR=i686 ;;
- unknown) UNAME_PROCESSOR=powerpc ;;
- esac
- echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
- exit 0 ;;
- *:procnto*:*:* | *:QNX:[0123456789]*:*)
- UNAME_PROCESSOR=`uname -p`
- if test "$UNAME_PROCESSOR" = "x86"; then
- UNAME_PROCESSOR=i386
- UNAME_MACHINE=pc
- fi
- echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
- exit 0 ;;
- *:QNX:*:4*)
- echo i386-pc-qnx
- exit 0 ;;
- NSR-?:NONSTOP_KERNEL:*:*)
- echo nsr-tandem-nsk${UNAME_RELEASE}
- exit 0 ;;
- *:NonStop-UX:*:*)
- echo mips-compaq-nonstopux
- exit 0 ;;
- BS2000:POSIX*:*:*)
- echo bs2000-siemens-sysv
- exit 0 ;;
- DS/*:UNIX_System_V:*:*)
- echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
- exit 0 ;;
- *:Plan9:*:*)
- # "uname -m" is not consistent, so use $cputype instead. 386
- # is converted to i386 for consistency with other x86
- # operating systems.
- if test "$cputype" = "386"; then
- UNAME_MACHINE=i386
- else
- UNAME_MACHINE="$cputype"
- fi
- echo ${UNAME_MACHINE}-unknown-plan9
- exit 0 ;;
- *:TOPS-10:*:*)
- echo pdp10-unknown-tops10
- exit 0 ;;
- *:TENEX:*:*)
- echo pdp10-unknown-tenex
- exit 0 ;;
- KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- echo pdp10-dec-tops20
- exit 0 ;;
- XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- echo pdp10-xkl-tops20
- exit 0 ;;
- *:TOPS-20:*:*)
- echo pdp10-unknown-tops20
- exit 0 ;;
- *:ITS:*:*)
- echo pdp10-unknown-its
- exit 0 ;;
- SEI:*:*:SEIUX)
- echo mips-sei-seiux${UNAME_RELEASE}
- exit 0 ;;
- *:DragonFly:*:*)
- echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit 0 ;;
- *:*VMS:*:*)
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- case "${UNAME_MACHINE}" in
- A*) echo alpha-dec-vms && exit 0 ;;
- I*) echo ia64-dec-vms && exit 0 ;;
- V*) echo vax-dec-vms && exit 0 ;;
- esac
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
- printf ("arm-acorn-riscix"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
- printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
- if (version < 4)
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- else
- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
-
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-# include <sys/param.h>
-# if defined (BSD)
-# if BSD == 43
- printf ("vax-dec-bsd4.3\n"); exit (0);
-# else
-# if BSD == 199006
- printf ("vax-dec-bsd4.3reno\n"); exit (0);
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# endif
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# else
- printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
- exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
- case `getsysinfo -f cpu_type` in
- c1*)
- echo c1-convex-bsd
- exit 0 ;;
- c2*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit 0 ;;
- c34*)
- echo c34-convex-bsd
- exit 0 ;;
- c38*)
- echo c38-convex-bsd
- exit 0 ;;
- c4*)
- echo c4-convex-bsd
- exit 0 ;;
- esac
-fi
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
- ftp://ftp.gnu.org/pub/gnu/config/
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo = `(hostinfo) 2>/dev/null`
-/bin/universe = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/contrib/dnsperf-2.1.0.0-1/config.sub b/contrib/dnsperf-2.1.0.0-1/config.sub
deleted file mode 100644
index edb6b663..00000000
--- a/contrib/dnsperf-2.1.0.0-1/config.sub
+++ /dev/null
@@ -1,1555 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
-
-timestamp='2004-08-29'
-
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine. It does not imply ALL GNU software can.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support. The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
- $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit 0 ;;
- --version | -v )
- echo "$version" ; exit 0 ;;
- --help | --h* | -h )
- echo "$usage"; exit 0 ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help"
- exit 1 ;;
-
- *local*)
- # First pass through any local machine types.
- echo $1
- exit 0;;
-
- * )
- break ;;
- esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
- exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
- exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
- nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
- kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
- os=-$maybe_os
- basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
- *)
- basic_machine=`echo $1 | sed 's/-[^-]*$//'`
- if [ $basic_machine != $1 ]
- then os=`echo $1 | sed 's/.*-/-/'`
- else os=; fi
- ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work. We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
- -sun*os*)
- # Prevent following clause from handling this invalid input.
- ;;
- -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
- -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
- -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
- -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
- -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple | -axis | -knuth | -cray)
- os=
- basic_machine=$1
- ;;
- -sim | -cisco | -oki | -wec | -winbond)
- os=
- basic_machine=$1
- ;;
- -scout)
- ;;
- -wrs)
- os=-vxworks
- basic_machine=$1
- ;;
- -chorusos*)
- os=-chorusos
- basic_machine=$1
- ;;
- -chorusrdb)
- os=-chorusrdb
- basic_machine=$1
- ;;
- -hiux*)
- os=-hiuxwe2
- ;;
- -sco5)
- os=-sco3.2v5
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco4)
- os=-sco3.2v4
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2.[4-9]*)
- os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2v[4-9]*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco*)
- os=-sco3.2v2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -udk*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -isc)
- os=-isc2.2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -clix*)
- basic_machine=clipper-intergraph
- ;;
- -isc*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -lynx*)
- os=-lynxos
- ;;
- -ptx*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
- ;;
- -windowsnt*)
- os=`echo $os | sed -e 's/windowsnt/winnt/'`
- ;;
- -psos*)
- os=-psos
- ;;
- -mint | -mint[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
- # Recognize the basic CPU types without company name.
- # Some are omitted here because they have special meanings below.
- 1750a | 580 \
- | a29k \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
- | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
- | am33_2.0 \
- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
- | c4x | clipper \
- | d10v | d30v | dlx | dsp16xx \
- | fr30 | frv \
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | i370 | i860 | i960 | ia64 \
- | ip2k | iq2000 \
- | m32r | m32rle | m68000 | m68k | m88k | mcore \
- | mips | mipsbe | mipseb | mipsel | mipsle \
- | mips16 \
- | mips64 | mips64el \
- | mips64vr | mips64vrel \
- | mips64orion | mips64orionel \
- | mips64vr4100 | mips64vr4100el \
- | mips64vr4300 | mips64vr4300el \
- | mips64vr5000 | mips64vr5000el \
- | mipsisa32 | mipsisa32el \
- | mipsisa32r2 | mipsisa32r2el \
- | mipsisa64 | mipsisa64el \
- | mipsisa64r2 | mipsisa64r2el \
- | mipsisa64sb1 | mipsisa64sb1el \
- | mipsisa64sr71k | mipsisa64sr71kel \
- | mipstx39 | mipstx39el \
- | mn10200 | mn10300 \
- | msp430 \
- | ns16k | ns32k \
- | openrisc | or32 \
- | pdp10 | pdp11 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
- | pyramid \
- | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
- | sh64 | sh64le \
- | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
- | strongarm \
- | tahoe | thumb | tic4x | tic80 | tron \
- | v850 | v850e \
- | we32k \
- | x86 | xscale | xstormy16 | xtensa \
- | z8k)
- basic_machine=$basic_machine-unknown
- ;;
- m6811 | m68hc11 | m6812 | m68hc12)
- # Motorola 68HC11/12.
- basic_machine=$basic_machine-unknown
- os=-none
- ;;
- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
- ;;
-
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
- i*86 | x86_64)
- basic_machine=$basic_machine-pc
- ;;
- # Object if more than one company name word.
- *-*-*)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
- # Recognize the basic CPU types with company name.
- 580-* \
- | a29k-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
- | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
- | avr-* \
- | bs2000-* \
- | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
- | clipper-* | craynv-* | cydra-* \
- | d10v-* | d30v-* | dlx-* \
- | elxsi-* \
- | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
- | h8300-* | h8500-* \
- | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
- | i*86-* | i860-* | i960-* | ia64-* \
- | ip2k-* | iq2000-* \
- | m32r-* | m32rle-* \
- | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | mcore-* \
- | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
- | mips16-* \
- | mips64-* | mips64el-* \
- | mips64vr-* | mips64vrel-* \
- | mips64orion-* | mips64orionel-* \
- | mips64vr4100-* | mips64vr4100el-* \
- | mips64vr4300-* | mips64vr4300el-* \
- | mips64vr5000-* | mips64vr5000el-* \
- | mipsisa32-* | mipsisa32el-* \
- | mipsisa32r2-* | mipsisa32r2el-* \
- | mipsisa64-* | mipsisa64el-* \
- | mipsisa64r2-* | mipsisa64r2el-* \
- | mipsisa64sb1-* | mipsisa64sb1el-* \
- | mipsisa64sr71k-* | mipsisa64sr71kel-* \
- | mipstx39-* | mipstx39el-* \
- | mmix-* \
- | msp430-* \
- | none-* | np1-* | ns16k-* | ns32k-* \
- | orion-* \
- | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
- | pyramid-* \
- | romp-* | rs6000-* \
- | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
- | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
- | tahoe-* | thumb-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
- | tron-* \
- | v850-* | v850e-* | vax-* \
- | we32k-* \
- | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
- | xtensa-* \
- | ymp-* \
- | z8k-*)
- ;;
- # Recognize the various machine names and aliases which stand
- # for a CPU type and a company and sometimes even an OS.
- 386bsd)
- basic_machine=i386-unknown
- os=-bsd
- ;;
- 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- basic_machine=m68000-att
- ;;
- 3b*)
- basic_machine=we32k-att
- ;;
- a29khif)
- basic_machine=a29k-amd
- os=-udi
- ;;
- abacus)
- basic_machine=abacus-unknown
- ;;
- adobe68k)
- basic_machine=m68010-adobe
- os=-scout
- ;;
- alliant | fx80)
- basic_machine=fx80-alliant
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- ;;
- am29k)
- basic_machine=a29k-none
- os=-bsd
- ;;
- amd64)
- basic_machine=x86_64-pc
- ;;
- amd64-*)
- basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- amdahl)
- basic_machine=580-amdahl
- os=-sysv
- ;;
- amiga | amiga-*)
- basic_machine=m68k-unknown
- ;;
- amigaos | amigados)
- basic_machine=m68k-unknown
- os=-amigaos
- ;;
- amigaunix | amix)
- basic_machine=m68k-unknown
- os=-sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- os=-sysv
- ;;
- apollo68bsd)
- basic_machine=m68k-apollo
- os=-bsd
- ;;
- aux)
- basic_machine=m68k-apple
- os=-aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- os=-dynix
- ;;
- c90)
- basic_machine=c90-cray
- os=-unicos
- ;;
- convex-c1)
- basic_machine=c1-convex
- os=-bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- os=-bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- os=-bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- os=-bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- os=-bsd
- ;;
- cray | j90)
- basic_machine=j90-cray
- os=-unicos
- ;;
- craynv)
- basic_machine=craynv-cray
- os=-unicosmp
- ;;
- cr16c)
- basic_machine=cr16c-unknown
- os=-elf
- ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- crisv32 | crisv32-* | etraxfs*)
- basic_machine=crisv32-axis
- ;;
- cris | cris-* | etrax*)
- basic_machine=cris-axis
- ;;
- crx)
- basic_machine=crx-unknown
- os=-elf
- ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
- decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
- ;;
- decsystem10* | dec10*)
- basic_machine=pdp10-dec
- os=-tops10
- ;;
- decsystem20* | dec20*)
- basic_machine=pdp10-dec
- os=-tops20
- ;;
- delta | 3300 | motorola-3300 | motorola-delta \
- | 3300-motorola | delta-motorola)
- basic_machine=m68k-motorola
- ;;
- delta88)
- basic_machine=m88k-motorola
- os=-sysv3
- ;;
- dpx20 | dpx20-*)
- basic_machine=rs6000-bull
- os=-bosx
- ;;
- dpx2* | dpx2*-bull)
- basic_machine=m68k-bull
- os=-sysv3
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- os=-ebmon
- ;;
- elxsi)
- basic_machine=elxsi-elxsi
- os=-bsd
- ;;
- encore | umax | mmax)
- basic_machine=ns32k-encore
- ;;
- es1800 | OSE68k | ose68k | ose | OSE)
- basic_machine=m68k-ericsson
- os=-ose
- ;;
- fx2800)
- basic_machine=i860-alliant
- ;;
- genix)
- basic_machine=ns32k-ns
- ;;
- gmicro)
- basic_machine=tron-gmicro
- os=-sysv
- ;;
- go32)
- basic_machine=i386-pc
- os=-go32
- ;;
- h3050r* | hiux*)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- os=-hms
- ;;
- h8300xray)
- basic_machine=h8300-hitachi
- os=-xray
- ;;
- h8500hms)
- basic_machine=h8500-hitachi
- os=-hms
- ;;
- harris)
- basic_machine=m88k-harris
- os=-sysv3
- ;;
- hp300-*)
- basic_machine=m68k-hp
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- os=-bsd
- ;;
- hp300hpux)
- basic_machine=m68k-hp
- os=-hpux
- ;;
- hp3k9[0-9][0-9] | hp9[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k2[0-9][0-9] | hp9k31[0-9])
- basic_machine=m68000-hp
- ;;
- hp9k3[2-9][0-9])
- basic_machine=m68k-hp
- ;;
- hp9k6[0-9][0-9] | hp6[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k7[0-79][0-9] | hp7[0-79][0-9])
- basic_machine=hppa1.1-hp
- ;;
- hp9k78[0-9] | hp78[0-9])
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][13679] | hp8[0-9][13679])
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][0-9] | hp8[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hppa-next)
- os=-nextstep3
- ;;
- hppaosf)
- basic_machine=hppa1.1-hp
- os=-osf
- ;;
- hppro)
- basic_machine=hppa1.1-hp
- os=-proelf
- ;;
- i370-ibm* | ibm*)
- basic_machine=i370-ibm
- ;;
-# I'm not sure what "Sysv32" means. Should this be sysv3.2?
- i*86v32)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv32
- ;;
- i*86v4*)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv4
- ;;
- i*86v)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv
- ;;
- i*86sol2)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-solaris2
- ;;
- i386mach)
- basic_machine=i386-mach
- os=-mach
- ;;
- i386-vsta | vsta)
- basic_machine=i386-unknown
- os=-vsta
- ;;
- iris | iris4d)
- basic_machine=mips-sgi
- case $os in
- -irix*)
- ;;
- *)
- os=-irix4
- ;;
- esac
- ;;
- isi68 | isi)
- basic_machine=m68k-isi
- os=-sysv
- ;;
- m88k-omron*)
- basic_machine=m88k-omron
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- os=-sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- os=-sysv
- ;;
- mingw32)
- basic_machine=i386-pc
- os=-mingw32
- ;;
- miniframe)
- basic_machine=m68000-convergent
- ;;
- *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
- mips3*-*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
- ;;
- mips3*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
- ;;
- monitor)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- morphos)
- basic_machine=powerpc-unknown
- os=-morphos
- ;;
- msdos)
- basic_machine=i386-pc
- os=-msdos
- ;;
- mvs)
- basic_machine=i370-ibm
- os=-mvs
- ;;
- ncr3000)
- basic_machine=i486-ncr
- os=-sysv4
- ;;
- netbsd386)
- basic_machine=i386-unknown
- os=-netbsd
- ;;
- netwinder)
- basic_machine=armv4l-rebel
- os=-linux
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- os=-newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- os=-newsos
- ;;
- news-3600 | risc-news)
- basic_machine=mips-sony
- os=-newsos
- ;;
- necv70)
- basic_machine=v70-nec
- os=-sysv
- ;;
- next | m*-next )
- basic_machine=m68k-next
- case $os in
- -nextstep* )
- ;;
- -ns2*)
- os=-nextstep2
- ;;
- *)
- os=-nextstep3
- ;;
- esac
- ;;
- nh3000)
- basic_machine=m68k-harris
- os=-cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- os=-cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- os=-nindy
- ;;
- mon960)
- basic_machine=i960-intel
- os=-mon960
- ;;
- nonstopux)
- basic_machine=mips-compaq
- os=-nonstopux
- ;;
- np1)
- basic_machine=np1-gould
- ;;
- nsr-tandem)
- basic_machine=nsr-tandem
- ;;
- op50n-* | op60c-*)
- basic_machine=hppa1.1-oki
- os=-proelf
- ;;
- or32 | or32-*)
- basic_machine=or32-unknown
- os=-coff
- ;;
- os400)
- basic_machine=powerpc-ibm
- os=-os400
- ;;
- OSE68000 | ose68000)
- basic_machine=m68000-ericsson
- os=-ose
- ;;
- os68k)
- basic_machine=m68k-none
- os=-os68k
- ;;
- pa-hitachi)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- paragon)
- basic_machine=i860-intel
- os=-osf
- ;;
- pbd)
- basic_machine=sparc-tti
- ;;
- pbb)
- basic_machine=m68k-tti
- ;;
- pc532 | pc532-*)
- basic_machine=ns32k-pc532
- ;;
- pentium | p5 | k5 | k6 | nexgen | viac3)
- basic_machine=i586-pc
- ;;
- pentiumpro | p6 | 6x86 | athlon | athlon_*)
- basic_machine=i686-pc
- ;;
- pentiumii | pentium2 | pentiumiii | pentium3)
- basic_machine=i686-pc
- ;;
- pentium4)
- basic_machine=i786-pc
- ;;
- pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
- basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumpro-* | p6-* | 6x86-* | athlon-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentium4-*)
- basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pn)
- basic_machine=pn-gould
- ;;
- power) basic_machine=power-ibm
- ;;
- ppc) basic_machine=powerpc-unknown
- ;;
- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppcle | powerpclittle | ppc-le | powerpc-little)
- basic_machine=powerpcle-unknown
- ;;
- ppcle-* | powerpclittle-*)
- basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64) basic_machine=powerpc64-unknown
- ;;
- ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64le | powerpc64little | ppc64-le | powerpc64-little)
- basic_machine=powerpc64le-unknown
- ;;
- ppc64le-* | powerpc64little-*)
- basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ps2)
- basic_machine=i386-ibm
- ;;
- pw32)
- basic_machine=i586-unknown
- os=-pw32
- ;;
- rom68k)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- rm[46]00)
- basic_machine=mips-siemens
- ;;
- rtpc | rtpc-*)
- basic_machine=romp-ibm
- ;;
- s390 | s390-*)
- basic_machine=s390-ibm
- ;;
- s390x | s390x-*)
- basic_machine=s390x-ibm
- ;;
- sa29200)
- basic_machine=a29k-amd
- os=-udi
- ;;
- sb1)
- basic_machine=mipsisa64sb1-unknown
- ;;
- sb1el)
- basic_machine=mipsisa64sb1el-unknown
- ;;
- sei)
- basic_machine=mips-sei
- os=-seiux
- ;;
- sequent)
- basic_machine=i386-sequent
- ;;
- sh)
- basic_machine=sh-hitachi
- os=-hms
- ;;
- sh64)
- basic_machine=sh64-unknown
- ;;
- sparclite-wrs | simso-wrs)
- basic_machine=sparclite-wrs
- os=-vxworks
- ;;
- sps7)
- basic_machine=m68k-bull
- os=-sysv2
- ;;
- spur)
- basic_machine=spur-unknown
- ;;
- st2000)
- basic_machine=m68k-tandem
- ;;
- stratus)
- basic_machine=i860-stratus
- os=-sysv4
- ;;
- sun2)
- basic_machine=m68000-sun
- ;;
- sun2os3)
- basic_machine=m68000-sun
- os=-sunos3
- ;;
- sun2os4)
- basic_machine=m68000-sun
- os=-sunos4
- ;;
- sun3os3)
- basic_machine=m68k-sun
- os=-sunos3
- ;;
- sun3os4)
- basic_machine=m68k-sun
- os=-sunos4
- ;;
- sun4os3)
- basic_machine=sparc-sun
- os=-sunos3
- ;;
- sun4os4)
- basic_machine=sparc-sun
- os=-sunos4
- ;;
- sun4sol2)
- basic_machine=sparc-sun
- os=-solaris2
- ;;
- sun3 | sun3-*)
- basic_machine=m68k-sun
- ;;
- sun4)
- basic_machine=sparc-sun
- ;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
- ;;
- sv1)
- basic_machine=sv1-cray
- os=-unicos
- ;;
- symmetry)
- basic_machine=i386-sequent
- os=-dynix
- ;;
- t3e)
- basic_machine=alphaev5-cray
- os=-unicos
- ;;
- t90)
- basic_machine=t90-cray
- os=-unicos
- ;;
- tic54x | c54x*)
- basic_machine=tic54x-unknown
- os=-coff
- ;;
- tic55x | c55x*)
- basic_machine=tic55x-unknown
- os=-coff
- ;;
- tic6x | c6x*)
- basic_machine=tic6x-unknown
- os=-coff
- ;;
- tx39)
- basic_machine=mipstx39-unknown
- ;;
- tx39el)
- basic_machine=mipstx39el-unknown
- ;;
- toad1)
- basic_machine=pdp10-xkl
- os=-tops20
- ;;
- tower | tower-32)
- basic_machine=m68k-ncr
- ;;
- tpf)
- basic_machine=s390x-ibm
- os=-tpf
- ;;
- udi29k)
- basic_machine=a29k-amd
- os=-udi
- ;;
- ultra3)
- basic_machine=a29k-nyu
- os=-sym1
- ;;
- v810 | necv810)
- basic_machine=v810-nec
- os=-none
- ;;
- vaxv)
- basic_machine=vax-dec
- os=-sysv
- ;;
- vms)
- basic_machine=vax-dec
- os=-vms
- ;;
- vpp*|vx|vx-*)
- basic_machine=f301-fujitsu
- ;;
- vxworks960)
- basic_machine=i960-wrs
- os=-vxworks
- ;;
- vxworks68)
- basic_machine=m68k-wrs
- os=-vxworks
- ;;
- vxworks29k)
- basic_machine=a29k-wrs
- os=-vxworks
- ;;
- w65*)
- basic_machine=w65-wdc
- os=-none
- ;;
- w89k-*)
- basic_machine=hppa1.1-winbond
- os=-proelf
- ;;
- xps | xps100)
- basic_machine=xps100-honeywell
- ;;
- ymp)
- basic_machine=ymp-cray
- os=-unicos
- ;;
- z8k-*-coff)
- basic_machine=z8k-unknown
- os=-sim
- ;;
- none)
- basic_machine=none-none
- os=-none
- ;;
-
-# Here we handle the default manufacturer of certain CPU types. It is in
-# some cases the only manufacturer, in others, it is the most popular.
- w89k)
- basic_machine=hppa1.1-winbond
- ;;
- op50n)
- basic_machine=hppa1.1-oki
- ;;
- op60c)
- basic_machine=hppa1.1-oki
- ;;
- romp)
- basic_machine=romp-ibm
- ;;
- mmix)
- basic_machine=mmix-knuth
- ;;
- rs6000)
- basic_machine=rs6000-ibm
- ;;
- vax)
- basic_machine=vax-dec
- ;;
- pdp10)
- # there are many clones, so DEC is not a safe bet
- basic_machine=pdp10-unknown
- ;;
- pdp11)
- basic_machine=pdp11-dec
- ;;
- we32k)
- basic_machine=we32k-att
- ;;
- sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
- basic_machine=sh-unknown
- ;;
- sh64)
- basic_machine=sh64-unknown
- ;;
- sparc | sparcv8 | sparcv9 | sparcv9b)
- basic_machine=sparc-sun
- ;;
- cydra)
- basic_machine=cydra-cydrome
- ;;
- orion)
- basic_machine=orion-highlevel
- ;;
- orion105)
- basic_machine=clipper-highlevel
- ;;
- mac | mpw | mac-mpw)
- basic_machine=m68k-apple
- ;;
- pmac | pmac-mpw)
- basic_machine=powerpc-apple
- ;;
- *-unknown)
- # Make sure to match an already-canonicalized machine name.
- ;;
- *)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
- *-digital*)
- basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
- ;;
- *-commodore*)
- basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
- ;;
- *)
- ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
- # First match some system type aliases
- # that might get confused with valid system types.
- # -solaris* is a basic system type, with this one exception.
- -solaris1 | -solaris1.*)
- os=`echo $os | sed -e 's|solaris1|sunos4|'`
- ;;
- -solaris)
- os=-solaris2
- ;;
- -svr4*)
- os=-sysv4
- ;;
- -unixware*)
- os=-sysv4.2uw
- ;;
- -gnu/linux*)
- os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
- ;;
- # First accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST END IN A *, to match a version number.
- # -sysv* is not here because it comes later, after sysvr4.
- -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
- | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
- | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
- | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -chorusos* | -chorusrdb* \
- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
- | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
- | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
- | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
- | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
- | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
- | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- -qnx*)
- case $basic_machine in
- x86-* | i*86-*)
- ;;
- *)
- os=-nto$os
- ;;
- esac
- ;;
- -nto-qnx*)
- ;;
- -nto*)
- os=`echo $os | sed -e 's|nto|nto-qnx|'`
- ;;
- -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
- | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
- | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
- ;;
- -mac*)
- os=`echo $os | sed -e 's|mac|macos|'`
- ;;
- -linux-dietlibc)
- os=-linux-dietlibc
- ;;
- -linux*)
- os=`echo $os | sed -e 's|linux|linux-gnu|'`
- ;;
- -sunos5*)
- os=`echo $os | sed -e 's|sunos5|solaris2|'`
- ;;
- -sunos6*)
- os=`echo $os | sed -e 's|sunos6|solaris3|'`
- ;;
- -opened*)
- os=-openedition
- ;;
- -os400*)
- os=-os400
- ;;
- -wince*)
- os=-wince
- ;;
- -osfrose*)
- os=-osfrose
- ;;
- -osf*)
- os=-osf
- ;;
- -utek*)
- os=-bsd
- ;;
- -dynix*)
- os=-bsd
- ;;
- -acis*)
- os=-aos
- ;;
- -atheos*)
- os=-atheos
- ;;
- -syllable*)
- os=-syllable
- ;;
- -386bsd)
- os=-bsd
- ;;
- -ctix* | -uts*)
- os=-sysv
- ;;
- -nova*)
- os=-rtmk-nova
- ;;
- -ns2 )
- os=-nextstep2
- ;;
- -nsk*)
- os=-nsk
- ;;
- # Preserve the version number of sinix5.
- -sinix5.*)
- os=`echo $os | sed -e 's|sinix|sysv|'`
- ;;
- -sinix*)
- os=-sysv4
- ;;
- -tpf*)
- os=-tpf
- ;;
- -triton*)
- os=-sysv3
- ;;
- -oss*)
- os=-sysv3
- ;;
- -svr4)
- os=-sysv4
- ;;
- -svr3)
- os=-sysv3
- ;;
- -sysvr4)
- os=-sysv4
- ;;
- # This must come after -sysvr4.
- -sysv*)
- ;;
- -ose*)
- os=-ose
- ;;
- -es1800*)
- os=-ose
- ;;
- -xenix)
- os=-xenix
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- os=-mint
- ;;
- -aros*)
- os=-aros
- ;;
- -kaos*)
- os=-kaos
- ;;
- -none)
- ;;
- *)
- # Get rid of the `-' at the beginning of $os.
- os=`echo $os | sed 's/[^-]*-//'`
- echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
- exit 1
- ;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system. Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
- *-acorn)
- os=-riscix1.2
- ;;
- arm*-rebel)
- os=-linux
- ;;
- arm*-semi)
- os=-aout
- ;;
- c4x-* | tic4x-*)
- os=-coff
- ;;
- # This must come before the *-dec entry.
- pdp10-*)
- os=-tops20
- ;;
- pdp11-*)
- os=-none
- ;;
- *-dec | vax-*)
- os=-ultrix4.2
- ;;
- m68*-apollo)
- os=-domain
- ;;
- i386-sun)
- os=-sunos4.0.2
- ;;
- m68000-sun)
- os=-sunos3
- # This also exists in the configure program, but was not the
- # default.
- # os=-sunos4
- ;;
- m68*-cisco)
- os=-aout
- ;;
- mips*-cisco)
- os=-elf
- ;;
- mips*-*)
- os=-elf
- ;;
- or32-*)
- os=-coff
- ;;
- *-tti) # must be before sparc entry or we get the wrong os.
- os=-sysv3
- ;;
- sparc-* | *-sun)
- os=-sunos4.1.1
- ;;
- *-be)
- os=-beos
- ;;
- *-ibm)
- os=-aix
- ;;
- *-knuth)
- os=-mmixware
- ;;
- *-wec)
- os=-proelf
- ;;
- *-winbond)
- os=-proelf
- ;;
- *-oki)
- os=-proelf
- ;;
- *-hp)
- os=-hpux
- ;;
- *-hitachi)
- os=-hiux
- ;;
- i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=-sysv
- ;;
- *-cbm)
- os=-amigaos
- ;;
- *-dg)
- os=-dgux
- ;;
- *-dolphin)
- os=-sysv3
- ;;
- m68k-ccur)
- os=-rtu
- ;;
- m88k-omron*)
- os=-luna
- ;;
- *-next )
- os=-nextstep
- ;;
- *-sequent)
- os=-ptx
- ;;
- *-crds)
- os=-unos
- ;;
- *-ns)
- os=-genix
- ;;
- i370-*)
- os=-mvs
- ;;
- *-next)
- os=-nextstep3
- ;;
- *-gould)
- os=-sysv
- ;;
- *-highlevel)
- os=-bsd
- ;;
- *-encore)
- os=-bsd
- ;;
- *-sgi)
- os=-irix
- ;;
- *-siemens)
- os=-sysv4
- ;;
- *-masscomp)
- os=-rtu
- ;;
- f30[01]-fujitsu | f700-fujitsu)
- os=-uxpv
- ;;
- *-rom68k)
- os=-coff
- ;;
- *-*bug)
- os=-coff
- ;;
- *-apple)
- os=-macos
- ;;
- *-atari*)
- os=-mint
- ;;
- *)
- os=-none
- ;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer. We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
- *-unknown)
- case $os in
- -riscix*)
- vendor=acorn
- ;;
- -sunos*)
- vendor=sun
- ;;
- -aix*)
- vendor=ibm
- ;;
- -beos*)
- vendor=be
- ;;
- -hpux*)
- vendor=hp
- ;;
- -mpeix*)
- vendor=hp
- ;;
- -hiux*)
- vendor=hitachi
- ;;
- -unos*)
- vendor=crds
- ;;
- -dgux*)
- vendor=dg
- ;;
- -luna*)
- vendor=omron
- ;;
- -genix*)
- vendor=ns
- ;;
- -mvs* | -opened*)
- vendor=ibm
- ;;
- -os400*)
- vendor=ibm
- ;;
- -ptx*)
- vendor=sequent
- ;;
- -tpf*)
- vendor=ibm
- ;;
- -vxsim* | -vxworks* | -windiss*)
- vendor=wrs
- ;;
- -aux*)
- vendor=apple
- ;;
- -hms*)
- vendor=hitachi
- ;;
- -mpw* | -macos*)
- vendor=apple
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- vendor=atari
- ;;
- -vos*)
- vendor=stratus
- ;;
- esac
- basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
- ;;
-esac
-
-echo $basic_machine$os
-exit 0
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/contrib/dnsperf-2.1.0.0-1/configure b/contrib/dnsperf-2.1.0.0-1/configure
deleted file mode 100755
index 8cf3dbac..00000000
--- a/contrib/dnsperf-2.1.0.0-1/configure
+++ /dev/null
@@ -1,4940 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.63.
-#
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- { (exit 1); exit 1; }
-fi
-
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# CDPATH.
-$as_unset CDPATH
-
-
-if test "x$CONFIG_SHELL" = x; then
- if (eval ":") 2>/dev/null; then
- as_have_required=yes
-else
- as_have_required=no
-fi
-
- if test $as_have_required = yes && (eval ":
-(as_func_return () {
- (exit \$1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
- :
-else
- exitcode=1
- echo positional parameters were not saved.
-fi
-
-test \$exitcode = 0) || { (exit 1); exit 1; }
-
-(
- as_lineno_1=\$LINENO
- as_lineno_2=\$LINENO
- test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
- test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
-") 2> /dev/null; then
- :
-else
- as_candidate_shells=
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- case $as_dir in
- /*)
- for as_base in sh bash ksh sh5; do
- as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
- done;;
- esac
-done
-IFS=$as_save_IFS
-
-
- for as_shell in $as_candidate_shells $SHELL; do
- # Try only shells that exist, to save several forks.
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { ("$as_shell") 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-:
-_ASEOF
-}; then
- CONFIG_SHELL=$as_shell
- as_have_required=yes
- if { "$as_shell" 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-:
-(as_func_return () {
- (exit $1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = "$1" ); then
- :
-else
- exitcode=1
- echo positional parameters were not saved.
-fi
-
-test $exitcode = 0) || { (exit 1); exit 1; }
-
-(
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
-
-_ASEOF
-}; then
- break
-fi
-
-fi
-
- done
-
- if test "x$CONFIG_SHELL" != x; then
- for as_var in BASH_ENV ENV
- do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
- done
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
-fi
-
-
- if test $as_have_required = no; then
- echo This script requires a shell more modern than all the
- echo shells that I found on your system. Please install a
- echo modern shell, or manually run the script under such a
- echo shell if you do have one.
- { (exit 1); exit 1; }
-fi
-
-
-fi
-
-fi
-
-
-
-(eval "as_func_return () {
- (exit \$1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
- :
-else
- exitcode=1
- echo positional parameters were not saved.
-fi
-
-test \$exitcode = 0") || {
- echo No shell found that supports shell functions.
- echo Please tell bug-autoconf@gnu.org about your system,
- echo including any error possibly output before this message.
- echo This can help us improve future autoconf versions.
- echo Configuration will now proceed without shell functions.
-}
-
-
-
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
-
- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
- # uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line after each line using $LINENO; the second 'sed'
- # does the real work. The second script uses 'N' to pair each
- # line-number line with the line containing $LINENO, and appends
- # trailing '-' during substitution so that $LINENO is not a special
- # case at line end.
- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # scripts with optimization help from Paolo Bonzini. Blame Lee
- # E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
- { (exit 1); exit 1; }; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
--n*)
- case `echo 'x\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- *) ECHO_C='\c';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -p'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -p'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -p'
- fi
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
- as_test_x='test -x'
-else
- if ls -dL / >/dev/null 2>&1; then
- as_ls_L_option=L
- else
- as_ls_L_option=
- fi
- as_test_x='
- eval sh -c '\''
- if test -d "$1"; then
- test -d "$1/.";
- else
- case $1 in
- -*)set "./$1";;
- esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
- ???[sx]*):;;*)false;;esac;fi
- '\'' sh
- '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-
-exec 7<&0 </dev/null 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-
-ac_unique_file="dnsperf.c"
-ac_subst_vars='LTLIBOBJS
-LIBOBJS
-PTHREAD_CFLAGS
-PTHREAD_LIBS
-PTHREAD_CC
-acx_pthread_config
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
-DNSCFLAGS
-DNSLIBS
-ac_cv_isc_config
-RANLIB
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-'
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval $ac_prev=\$ac_option
- ac_prev=
- continue
- fi
-
- case $ac_option in
- *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *) ac_optarg=yes ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir=$ac_optarg ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build_alias ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build_alias=$ac_optarg ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file=$ac_optarg ;;
-
- --config-cache | -C)
- cache_file=config.cache ;;
-
- -datadir | --datadir | --datadi | --datad)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=*)
- datadir=$ac_optarg ;;
-
- -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
- | --dataroo | --dataro | --datar)
- ac_prev=datarootdir ;;
- -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
- | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
- datarootdir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
- { (exit 1); exit 1; }; }
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
- -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
- docdir=$ac_optarg ;;
-
- -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
- ac_prev=dvidir ;;
- -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
- dvidir=$ac_optarg ;;
-
- -enable-* | --enable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
- { (exit 1); exit 1; }; }
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=\$ac_optarg ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix=$ac_optarg ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he | -h)
- ac_init_help=long ;;
- -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
- ac_init_help=recursive ;;
- -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
- ac_init_help=short ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host_alias ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host_alias=$ac_optarg ;;
-
- -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
- ac_prev=htmldir ;;
- -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
- | --ht=*)
- htmldir=$ac_optarg ;;
-
- -includedir | --includedir | --includedi | --included | --include \
- | --includ | --inclu | --incl | --inc)
- ac_prev=includedir ;;
- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
- | --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir=$ac_optarg ;;
-
- -infodir | --infodir | --infodi | --infod | --info | --inf)
- ac_prev=infodir ;;
- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir=$ac_optarg ;;
-
- -libdir | --libdir | --libdi | --libd)
- ac_prev=libdir ;;
- -libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir=$ac_optarg ;;
-
- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
- | --libexe | --libex | --libe)
- ac_prev=libexecdir ;;
- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
- | --libexe=* | --libex=* | --libe=*)
- libexecdir=$ac_optarg ;;
-
- -localedir | --localedir | --localedi | --localed | --locale)
- ac_prev=localedir ;;
- -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
- localedir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst | --locals)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
- localstatedir=$ac_optarg ;;
-
- -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
- ac_prev=mandir ;;
- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir=$ac_optarg ;;
-
- -nfp | --nfp | --nf)
- # Obsolete; use --without-fp.
- with_fp=no ;;
-
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c | -n)
- no_create=yes ;;
-
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
- no_recursion=yes ;;
-
- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
- | --oldin | --oldi | --old | --ol | --o)
- ac_prev=oldincludedir ;;
- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir=$ac_optarg ;;
-
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix=$ac_optarg ;;
-
- -program-prefix | --program-prefix | --program-prefi | --program-pref \
- | --program-pre | --program-pr | --program-p)
- ac_prev=program_prefix ;;
- -program-prefix=* | --program-prefix=* | --program-prefi=* \
- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix=$ac_optarg ;;
-
- -program-suffix | --program-suffix | --program-suffi | --program-suff \
- | --program-suf | --program-su | --program-s)
- ac_prev=program_suffix ;;
- -program-suffix=* | --program-suffix=* | --program-suffi=* \
- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix=$ac_optarg ;;
-
- -program-transform-name | --program-transform-name \
- | --program-transform-nam | --program-transform-na \
- | --program-transform-n | --program-transform- \
- | --program-transform | --program-transfor \
- | --program-transfo | --program-transf \
- | --program-trans | --program-tran \
- | --progr-tra | --program-tr | --program-t)
- ac_prev=program_transform_name ;;
- -program-transform-name=* | --program-transform-name=* \
- | --program-transform-nam=* | --program-transform-na=* \
- | --program-transform-n=* | --program-transform-=* \
- | --program-transform=* | --program-transfor=* \
- | --program-transfo=* | --program-transf=* \
- | --program-trans=* | --program-tran=* \
- | --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name=$ac_optarg ;;
-
- -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
- ac_prev=pdfdir ;;
- -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
- pdfdir=$ac_optarg ;;
-
- -psdir | --psdir | --psdi | --psd | --ps)
- ac_prev=psdir ;;
- -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
- psdir=$ac_optarg ;;
-
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- silent=yes ;;
-
- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
- ac_prev=sbindir ;;
- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
- | --sbi=* | --sb=*)
- sbindir=$ac_optarg ;;
-
- -sharedstatedir | --sharedstatedir | --sharedstatedi \
- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
- | --sharedst | --shareds | --shared | --share | --shar \
- | --sha | --sh)
- ac_prev=sharedstatedir ;;
- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
- | --sha=* | --sh=*)
- sharedstatedir=$ac_optarg ;;
-
- -site | --site | --sit)
- ac_prev=site ;;
- -site=* | --site=* | --sit=*)
- site=$ac_optarg ;;
-
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir=$ac_optarg ;;
-
- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
- | --syscon | --sysco | --sysc | --sys | --sy)
- ac_prev=sysconfdir ;;
- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir=$ac_optarg ;;
-
- -target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target_alias ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target_alias=$ac_optarg ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers | -V)
- ac_init_version=: ;;
-
- -with-* | --with-*)
- ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
- { (exit 1); exit 1; }; }
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=\$ac_optarg ;;
-
- -without-* | --without-*)
- ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
- { (exit 1); exit 1; }; }
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=no ;;
-
- --x)
- # Obsolete; use --with-x.
- with_x=yes ;;
-
- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
- | --x-incl | --x-inc | --x-in | --x-i)
- ac_prev=x_includes ;;
- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes=$ac_optarg ;;
-
- -x-libraries | --x-libraries | --x-librarie | --x-librari \
- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
- ac_prev=x_libraries ;;
- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries=$ac_optarg ;;
-
- -*) { $as_echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; }
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2
- { (exit 1); exit 1; }; }
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
- : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- ac_option=--`echo $ac_prev | sed 's/_/-/g'`
- { $as_echo "$as_me: error: missing argument to $ac_option" >&2
- { (exit 1); exit 1; }; }
-fi
-
-if test -n "$ac_unrecognized_opts"; then
- case $enable_option_checking in
- no) ;;
- fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2
- { (exit 1); exit 1; }; } ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
- esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
-do
- eval ac_val=\$$ac_var
- # Remove trailing slashes.
- case $ac_val in
- */ )
- ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
- eval $ac_var=\$ac_val;;
- esac
- # Be sure to have absolute directory names.
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
- esac
- { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
- { (exit 1); exit 1; }; }
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
- if test "x$build_alias" = x; then
- cross_compiling=maybe
- $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
- If a cross compiler is detected then cross compile mode will be used." >&2
- elif test "x$build_alias" != "x$host_alias"; then
- cross_compiling=yes
- fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- { $as_echo "$as_me: error: working directory cannot be determined" >&2
- { (exit 1); exit 1; }; }
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- { $as_echo "$as_me: error: pwd does not report name of working directory" >&2
- { (exit 1); exit 1; }; }
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
- ac_srcdir_defaulted=yes
- # Try the directory containing this script, then the parent directory.
- ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_myself" : 'X\(//\)[^/]' \| \
- X"$as_myself" : 'X\(//\)$' \| \
- X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- srcdir=$ac_confdir
- if test ! -r "$srcdir/$ac_unique_file"; then
- srcdir=..
- fi
-else
- ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
- { (exit 1); exit 1; }; }
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2
- { (exit 1); exit 1; }; }
- pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
- srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
- eval ac_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_env_${ac_var}_value=\$${ac_var}
- eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat <<_ACEOF
-\`configure' configures this package to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE. See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
- -h, --help display this help and exit
- --help=short display options specific to this package
- --help=recursive display the short help of all the included packages
- -V, --version display version information and exit
- -q, --quiet, --silent do not print \`checking...' messages
- --cache-file=FILE cache test results in FILE [disabled]
- -C, --config-cache alias for \`--cache-file=config.cache'
- -n, --no-create do not create output files
- --srcdir=DIR find the sources in DIR [configure dir or \`..']
-
-Installation directories:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc [/usr/include]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_ACEOF
-
- cat <<\_ACEOF
-
-System types:
- --build=BUILD configure for building on BUILD [guessed]
- --host=HOST cross-compile to build programs to run on HOST [BUILD]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-
- cat <<\_ACEOF
-
-Some influential environment variables:
- CC C compiler command
- CFLAGS C compiler flags
- LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
- nonstandard directory <lib dir>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" ||
- { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
- continue
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
- cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
- if test -f "$ac_srcdir/configure.gnu"; then
- echo &&
- $SHELL "$ac_srcdir/configure.gnu" --help=recursive
- elif test -f "$ac_srcdir/configure"; then
- echo &&
- $SHELL "$ac_srcdir/configure" --help=recursive
- else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
- done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
- cat <<\_ACEOF
-configure
-generated by GNU Autoconf 2.63
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
- exit
-fi
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by $as_me, which was
-generated by GNU Autoconf 2.63. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
-
-/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
-/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
-/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
-done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
- for ac_arg
- do
- case $ac_arg in
- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- continue ;;
- *\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
- 2)
- ac_configure_args1="$ac_configure_args1 '$ac_arg'"
- if test $ac_must_keep_next = true; then
- ac_must_keep_next=false # Got value, back to normal.
- else
- case $ac_arg in
- *=* | --config-cache | -C | -disable-* | --disable-* \
- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
- | -with-* | --with-* | -without-* | --without-* | --x)
- case "$ac_configure_args0 " in
- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
- esac
- ;;
- -* ) ac_must_keep_next=true ;;
- esac
- fi
- ac_configure_args="$ac_configure_args '$ac_arg'"
- ;;
- esac
- done
-done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log. We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- cat <<\_ASBOX
-## ---------------- ##
-## Cache variables. ##
-## ---------------- ##
-_ASBOX
- echo
- # The following way of writing the cache mishandles newlines in values,
-(
- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) $as_unset $ac_var ;;
- esac ;;
- esac
- done
- (set) 2>&1 |
- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- sed -n \
- "s/'\''/'\''\\\\'\'''\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
- ;; #(
- *)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-)
- echo
-
- cat <<\_ASBOX
-## ----------------- ##
-## Output variables. ##
-## ----------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- cat <<\_ASBOX
-## ------------------- ##
-## File substitutions. ##
-## ------------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- cat <<\_ASBOX
-## ----------- ##
-## confdefs.h. ##
-## ----------- ##
-_ASBOX
- echo
- cat confdefs.h
- echo
- fi
- test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
- ac_site_file1=$CONFIG_SITE
-elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
-else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
- test "x$ac_site_file" = xNONE && continue
- if test -r "$ac_site_file"; then
- { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file"
- fi
-done
-
-if test -r "$cache_file"; then
- # Some versions of bash will fail to source /dev/null (special
- # files actually), so we avoid doing that.
- if test -f "$cache_file"; then
- { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
- esac
- fi
-else
- { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
- >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
- eval ac_old_set=\$ac_cv_env_${ac_var}_set
- eval ac_new_set=\$ac_env_${ac_var}_set
- eval ac_old_val=\$ac_cv_env_${ac_var}_value
- eval ac_new_val=\$ac_env_${ac_var}_value
- case $ac_old_set,$ac_new_set in
- set,)
- { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,);;
- *)
- if test "x$ac_old_val" != "x$ac_new_val"; then
- # differences in whitespace do not lead to failure.
- ac_old_val_w=`echo x $ac_old_val`
- ac_new_val_w=`echo x $ac_new_val`
- if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- ac_cache_corrupted=:
- else
- { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
- eval $ac_var=\$ac_old_val
- fi
- { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
- *) ac_arg=$ac_var=$ac_new_val ;;
- esac
- case " $ac_configure_args " in
- *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
- *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-else
- CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- fi
-fi
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# != 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:$LINENO: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-{ (ac_try="$ac_compiler --version >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler --version >&5") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (ac_try="$ac_compiler -v >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler -v >&5") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (ac_try="$ac_compiler -V >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler -V >&5") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { (ac_try="$ac_link_default"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
- break;;
- * )
- break;;
- esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
- ac_file=''
-fi
-
-{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-if test -z "$ac_file"; then
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }; }
-fi
-
-ac_exeext=$ac_cv_exeext
-
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
- if { ac_try='./$ac_file'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }; }
- fi
- fi
-fi
-{ $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
-done
-else
- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }; }
-fi
-
-rm -f conftest$ac_cv_exeext
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }; }
-fi
-
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_compiler_gnu=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_compiler_gnu=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_g=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- CFLAGS=""
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- :
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_g=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_c89=$ac_arg
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:$LINENO: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:$LINENO: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_aux_dir=
-for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
-$as_echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-
-
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in
- ./ | .// | /cC/* | \
- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
- ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
- /usr/ucb/* ) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
- if test $ac_prog = install &&
- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- elif test $ac_prog = install &&
- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # program-specific install script used by HP pwplus--don't use.
- :
- else
- rm -rf conftest.one conftest.two conftest.dir
- echo one > conftest.one
- echo two > conftest.two
- mkdir conftest.dir
- if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
- test -s conftest.one && test -s conftest.two &&
- test -s conftest.dir/conftest.one &&
- test -s conftest.dir/conftest.two
- then
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
- break 3
- fi
- fi
- fi
- done
- done
- ;;
-esac
-
-done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL=$ac_cv_path_install
- else
- # As a last resort, use the slow shell script. Don't cache a
- # value for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the value is a relative name.
- INSTALL=$ac_install_sh
- fi
-fi
-{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
- { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
- ac_ct_RANLIB=$RANLIB
- # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_RANLIB"; then
- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_RANLIB="ranlib"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_RANLIB" = x; then
- RANLIB=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- RANLIB=$ac_ct_RANLIB
- fi
-else
- RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-
-
-{ $as_echo "$as_me:$LINENO: checking for inline" >&5
-$as_echo_n "checking for inline... " >&6; }
-if test "${ac_cv_c_inline+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_cv_c_inline=no
-for ac_kw in inline __inline__ __inline; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifndef __cplusplus
-typedef int foo_t;
-static $ac_kw foo_t static_foo () {return 0; }
-$ac_kw foo_t foo () {return 0; }
-#endif
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_c_inline=$ac_kw
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- test "$ac_cv_c_inline" != no && break
-done
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
-$as_echo "$ac_cv_c_inline" >&6; }
-
-
-case $ac_cv_c_inline in
- inline | yes) ;;
- *)
- case $ac_cv_c_inline in
- no) ac_val=;;
- *) ac_val=$ac_cv_c_inline;;
- esac
- cat >>confdefs.h <<_ACEOF
-#ifndef __cplusplus
-#define inline $ac_val
-#endif
-_ACEOF
- ;;
-esac
-
-
-
-
-
-
-
-{ $as_echo "$as_me:$LINENO: checking for socket in -lsocket" >&5
-$as_echo_n "checking for socket in -lsocket... " >&6; }
-if test "${ac_cv_lib_socket_socket+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsocket $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char socket ();
-int
-main ()
-{
-return socket ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_lib_socket_socket=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_socket_socket=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_socket_socket" >&5
-$as_echo "$ac_cv_lib_socket_socket" >&6; }
-if test "x$ac_cv_lib_socket_socket" = x""yes; then
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBSOCKET 1
-_ACEOF
-
- LIBS="-lsocket $LIBS"
-
-fi
-
-
-{ $as_echo "$as_me:$LINENO: checking for inet_ntoa in -lnsl" >&5
-$as_echo_n "checking for inet_ntoa in -lnsl... " >&6; }
-if test "${ac_cv_lib_nsl_inet_ntoa+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lnsl $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char inet_ntoa ();
-int
-main ()
-{
-return inet_ntoa ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_lib_nsl_inet_ntoa=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_nsl_inet_ntoa=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_inet_ntoa" >&5
-$as_echo "$ac_cv_lib_nsl_inet_ntoa" >&6; }
-if test "x$ac_cv_lib_nsl_inet_ntoa" = x""yes; then
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBNSL 1
-_ACEOF
-
- LIBS="-lnsl $LIBS"
-
-fi
-
-
-# Extract the first word of "isc-config.sh", so it can be a program name with args.
-set dummy isc-config.sh; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_ac_cv_isc_config+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- case $ac_cv_isc_config in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_ac_cv_isc_config="$ac_cv_isc_config" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_path_ac_cv_isc_config="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_path_ac_cv_isc_config" && ac_cv_path_ac_cv_isc_config=""no""
- ;;
-esac
-fi
-ac_cv_isc_config=$ac_cv_path_ac_cv_isc_config
-if test -n "$ac_cv_isc_config"; then
- { $as_echo "$as_me:$LINENO: result: $ac_cv_isc_config" >&5
-$as_echo "$ac_cv_isc_config" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-if test "$ac_cv_isc_config" = "no"; then
- { { $as_echo "$as_me:$LINENO: error: BIND 9 libraries must be installed" >&5
-$as_echo "$as_me: error: BIND 9 libraries must be installed" >&2;}
- { (exit 1); exit 1; }; }
-fi
-DNSLIBS="`$ac_cv_isc_config --libs dns bind9`"
-
-DNSCFLAGS="`$ac_cv_isc_config --cflags dns bind9`"
-
-
-{ $as_echo "$as_me:$LINENO: checking for socklen_t" >&5
-$as_echo_n "checking for socklen_t... " >&6; }
-if test "${ac_cv_type_socklen_t+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
- #include <sys/socket.h>
-int
-main ()
-{
-socklen_t len = 42; return len;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_type_socklen_t=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_type_socklen_t=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_socklen_t" >&5
-$as_echo "$ac_cv_type_socklen_t" >&6; }
- if test $ac_cv_type_socklen_t != yes; then
- cat >>confdefs.h <<\_ACEOF
-#define socklen_t int
-_ACEOF
-
- fi
-
-{ $as_echo "$as_me:$LINENO: checking for sa_len" >&5
-$as_echo_n "checking for sa_len... " >&6; }
-if test "${ac_cv_sa_len+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
- #include <sys/socket.h>
-int
-main ()
-{
-struct sockaddr sa; sa.sa_len = 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_sa_len=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_sa_len=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_sa_len" >&5
-$as_echo "$ac_cv_sa_len" >&6; }
- if test $ac_cv_sa_len = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_SA_LEN 1
-_ACEOF
-
- fi
-
-
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
-$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
- { (exit 1); exit 1; }; }
-
-{ $as_echo "$as_me:$LINENO: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if test "${ac_cv_build+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
- { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
-$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
- { (exit 1); exit 1; }; }
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
-$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
- { (exit 1); exit 1; }; }
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
-$as_echo "$as_me: error: invalid value of canonical build" >&2;}
- { (exit 1); exit 1; }; };;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:$LINENO: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if test "${ac_cv_host+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test "x$host_alias" = x; then
- ac_cv_host=$ac_cv_build
-else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
-$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
-$as_echo "$as_me: error: invalid value of canonical host" >&2;}
- { (exit 1); exit 1; }; };;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-acx_pthread_ok=no
-
-# We used to check for pthread.h first, but this fails if pthread.h
-# requires special compiler flags (e.g. on True64 or Sequent).
-# It gets checked for in the link test anyway.
-
-# First of all, check if the user has set any of the PTHREAD_LIBS,
-# etcetera environment variables, and if threads linking works using
-# them:
-if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
- save_LIBS="$LIBS"
- LIBS="$PTHREAD_LIBS $LIBS"
- { $as_echo "$as_me:$LINENO: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5
-$as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; }
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pthread_join ();
-int
-main ()
-{
-return pthread_join ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- acx_pthread_ok=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- { $as_echo "$as_me:$LINENO: result: $acx_pthread_ok" >&5
-$as_echo "$acx_pthread_ok" >&6; }
- if test x"$acx_pthread_ok" = xno; then
- PTHREAD_LIBS=""
- PTHREAD_CFLAGS=""
- fi
- LIBS="$save_LIBS"
- CFLAGS="$save_CFLAGS"
-fi
-
-# We must check for the threads library under a number of different
-# names; the ordering is very important because some systems
-# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
-# libraries is broken (non-POSIX).
-
-# Create a list of thread flags to try. Items starting with a "-" are
-# C compiler flags, and other items are library names, except for "none"
-# which indicates that we try without any flags at all, and "pthread-config"
-# which is a program returning the flags for the Pth emulation library.
-
-acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
-
-# The ordering *is* (sometimes) important. Some notes on the
-# individual items follow:
-
-# pthreads: AIX (must check this before -lpthread)
-# none: in case threads are in libc; should be tried before -Kthread and
-# other compiler flags to prevent continual compiler warnings
-# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
-# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
-# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
-# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
-# -pthreads: Solaris/gcc
-# -mthreads: Mingw32/gcc, Lynx/gcc
-# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
-# doesn't hurt to check since this sometimes defines pthreads too;
-# also defines -D_REENTRANT)
-# ... -mt is also the pthreads flag for HP/aCC
-# pthread: Linux, etcetera
-# --thread-safe: KAI C++
-# pthread-config: use pthread-config program (for GNU Pth library)
-
-case "${host_cpu}-${host_os}" in
- *solaris*)
-
- # On Solaris (at least, for some versions), libc contains stubbed
- # (non-functional) versions of the pthreads routines, so link-based
- # tests will erroneously succeed. (We need to link with -pthreads/-mt/
- # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
- # a function called by this macro, so we could check for that, but
- # who knows whether they'll stub that too in a future libc.) So,
- # we'll just look for -pthreads and -lpthread first:
-
- acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags"
- ;;
-esac
-
-if test x"$acx_pthread_ok" = xno; then
-for flag in $acx_pthread_flags; do
-
- case $flag in
- none)
- { $as_echo "$as_me:$LINENO: checking whether pthreads work without any flags" >&5
-$as_echo_n "checking whether pthreads work without any flags... " >&6; }
- ;;
-
- -*)
- { $as_echo "$as_me:$LINENO: checking whether pthreads work with $flag" >&5
-$as_echo_n "checking whether pthreads work with $flag... " >&6; }
- PTHREAD_CFLAGS="$flag"
- ;;
-
- pthread-config)
- # Extract the first word of "pthread-config", so it can be a program name with args.
-set dummy pthread-config; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_acx_pthread_config+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$acx_pthread_config"; then
- ac_cv_prog_acx_pthread_config="$acx_pthread_config" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_acx_pthread_config="yes"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_prog_acx_pthread_config" && ac_cv_prog_acx_pthread_config="no"
-fi
-fi
-acx_pthread_config=$ac_cv_prog_acx_pthread_config
-if test -n "$acx_pthread_config"; then
- { $as_echo "$as_me:$LINENO: result: $acx_pthread_config" >&5
-$as_echo "$acx_pthread_config" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- if test x"$acx_pthread_config" = xno; then continue; fi
- PTHREAD_CFLAGS="`pthread-config --cflags`"
- PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
- ;;
-
- *)
- { $as_echo "$as_me:$LINENO: checking for the pthreads library -l$flag" >&5
-$as_echo_n "checking for the pthreads library -l$flag... " >&6; }
- PTHREAD_LIBS="-l$flag"
- ;;
- esac
-
- save_LIBS="$LIBS"
- save_CFLAGS="$CFLAGS"
- LIBS="$PTHREAD_LIBS $LIBS"
- CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-
- # Check for various functions. We must include pthread.h,
- # since some functions may be macros. (On the Sequent, we
- # need a special flag -Kthread to make this header compile.)
- # We check for pthread_join because it is in -lpthread on IRIX
- # while pthread_create is in libc. We check for pthread_attr_init
- # due to DEC craziness with -lpthreads. We check for
- # pthread_cleanup_push because it is one of the few pthread
- # functions on Solaris that doesn't have a non-functional libc stub.
- # We try pthread_create on general principles.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <pthread.h>
-int
-main ()
-{
-pthread_t th; pthread_join(th, 0);
- pthread_attr_init(0); pthread_cleanup_push(0, 0);
- pthread_create(0,0,0,0); pthread_cleanup_pop(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- acx_pthread_ok=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-
- LIBS="$save_LIBS"
- CFLAGS="$save_CFLAGS"
-
- { $as_echo "$as_me:$LINENO: result: $acx_pthread_ok" >&5
-$as_echo "$acx_pthread_ok" >&6; }
- if test "x$acx_pthread_ok" = xyes; then
- break;
- fi
-
- PTHREAD_LIBS=""
- PTHREAD_CFLAGS=""
-done
-fi
-
-# Various other checks:
-if test "x$acx_pthread_ok" = xyes; then
- save_LIBS="$LIBS"
- LIBS="$PTHREAD_LIBS $LIBS"
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-
- # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
- { $as_echo "$as_me:$LINENO: checking for joinable pthread attribute" >&5
-$as_echo_n "checking for joinable pthread attribute... " >&6; }
- attr_name=unknown
- for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <pthread.h>
-int
-main ()
-{
-int attr=$attr; return attr;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- attr_name=$attr; break
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- done
- { $as_echo "$as_me:$LINENO: result: $attr_name" >&5
-$as_echo "$attr_name" >&6; }
- if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
-
-cat >>confdefs.h <<_ACEOF
-#define PTHREAD_CREATE_JOINABLE $attr_name
-_ACEOF
-
- fi
-
- { $as_echo "$as_me:$LINENO: checking if more special flags are required for pthreads" >&5
-$as_echo_n "checking if more special flags are required for pthreads... " >&6; }
- flag=no
- case "${host_cpu}-${host_os}" in
- *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
- *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
- esac
- { $as_echo "$as_me:$LINENO: result: ${flag}" >&5
-$as_echo "${flag}" >&6; }
- if test "x$flag" != xno; then
- PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
- fi
-
- LIBS="$save_LIBS"
- CFLAGS="$save_CFLAGS"
-
- # More AIX lossage: must compile with xlc_r or cc_r
- if test x"$GCC" != xyes; then
- for ac_prog in xlc_r cc_r
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_PTHREAD_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$PTHREAD_CC"; then
- ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_PTHREAD_CC="$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-PTHREAD_CC=$ac_cv_prog_PTHREAD_CC
-if test -n "$PTHREAD_CC"; then
- { $as_echo "$as_me:$LINENO: result: $PTHREAD_CC" >&5
-$as_echo "$PTHREAD_CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$PTHREAD_CC" && break
-done
-test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}"
-
- else
- PTHREAD_CC=$CC
- fi
-else
- PTHREAD_CC="$CC"
-fi
-
-
-
-
-
-# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
-if test x"$acx_pthread_ok" = xyes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_PTHREAD 1
-_ACEOF
-
- :
-else
- acx_pthread_ok=no
-
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-ac_config_files="$ac_config_files Makefile"
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems. If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
- for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) $as_unset $ac_var ;;
- esac ;;
- esac
- done
-
- (set) 2>&1 |
- case $as_nl`(ac_space=' '; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- # `set' does not quote correctly, so add quotes (double-quote
- # substitution turns \\\\ into \\, and sed turns \\ into \).
- sed -n \
- "s/'/'\\\\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
- ;; #(
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- test "x$cache_file" != "x/dev/null" &&
- { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
- cat confcache >$cache_file
- else
- { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
- fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# Transform confdefs.h into DEFS.
-# Protect against shell expansion while executing Makefile rules.
-# Protect against Makefile macro expansion.
-#
-# If the first sed substitution is executed (which looks for macros that
-# take arguments), then branch to the quote section. Otherwise,
-# look for a macro that doesn't take arguments.
-ac_script='
-:mline
-/\\$/{
- N
- s,\\\n,,
- b mline
-}
-t clear
-:clear
-s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-b any
-:quote
-s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
-s/\[/\\&/g
-s/\]/\\&/g
-s/\$/$$/g
-H
-:any
-${
- g
- s/^\n//
- s/\n/ /g
- p
-}
-'
-DEFS=`sed -n "$ac_script" confdefs.h`
-
-
-ac_libobjs=
-ac_ltlibobjs=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: ${CONFIG_STATUS=./config.status}
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- { (exit 1); exit 1; }
-fi
-
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# CDPATH.
-$as_unset CDPATH
-
-
-
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
-
- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
- # uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line after each line using $LINENO; the second 'sed'
- # does the real work. The second script uses 'N' to pair each
- # line-number line with the line containing $LINENO, and appends
- # trailing '-' during substitution so that $LINENO is not a special
- # case at line end.
- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # scripts with optimization help from Paolo Bonzini. Blame Lee
- # E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
- { (exit 1); exit 1; }; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
--n*)
- case `echo 'x\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- *) ECHO_C='\c';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -p'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -p'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -p'
- fi
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
- as_test_x='test -x'
-else
- if ls -dL / >/dev/null 2>&1; then
- as_ls_L_option=L
- else
- as_ls_L_option=
- fi
- as_test_x='
- eval sh -c '\''
- if test -d "$1"; then
- test -d "$1/.";
- else
- case $1 in
- -*)set "./$1";;
- esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
- ???[sx]*):;;*)false;;esac;fi
- '\'' sh
- '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-
-# Save the log message, to keep $[0] and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by $as_me, which was
-generated by GNU Autoconf 2.63. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
-
-Usage: $0 [OPTION]... [FILE]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- -q, --quiet, --silent
- do not print progress messages
- -d, --debug don't remove temporary files
- --recheck update $as_me by reconfiguring in the same conditions
- --file=FILE[:TEMPLATE]
- instantiate the configuration file FILE
-
-Configuration files:
-$config_files
-
-Report bugs to <bug-autoconf@gnu.org>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_version="\\
-config.status
-configured by $0, generated by GNU Autoconf 2.63,
- with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
-
-Copyright (C) 2008 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
- case $1 in
- --*=*)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
- ac_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- CONFIG_FILES="$CONFIG_FILES '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h | --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) { $as_echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; } ;;
-
- *) ac_config_targets="$ac_config_targets $1"
- ac_need_defaults=false ;;
-
- esac
- shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
- exec 6>/dev/null
- ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
- set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
- shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
- CONFIG_SHELL='$SHELL'
- export CONFIG_SHELL
- exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
- $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-
- *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
- { (exit 1); exit 1; }; };;
- esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used. Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
- tmp=
- trap 'exit_status=$?
- { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
-' 0
- trap '{ (exit 1); exit 1; }' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -n "$tmp" && test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} ||
-{
- $as_echo "$as_me: cannot create a temporary directory in ." >&2
- { (exit 1); exit 1; }
-}
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=' '
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
- ac_cs_awk_cr='\\r'
-else
- ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
-_ACEOF
-
-
-{
- echo "cat >conf$$subs.awk <<_ACEOF" &&
- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
- echo "_ACEOF"
-} >conf$$subs.sh ||
- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- . ./conf$$subs.sh ||
- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
-
- ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
- if test $ac_delim_n = $ac_delim_num; then
- break
- elif $ac_last_try; then
- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\).*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\).*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
- N
- s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
- for (key in S) S_is_set[key] = 1
- FS = ""
-
-}
-{
- line = $ 0
- nfields = split(line, field, "@")
- substed = 0
- len = length(field[1])
- for (i = 2; i < nfields; i++) {
- key = field[i]
- keylen = length(key)
- if (S_is_set[key]) {
- value = S[key]
- line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
- len += length(value) + length(field[++i])
- substed = 1
- } else
- len += 1 + keylen
- }
-
- print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
- sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
- cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
- || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5
-$as_echo "$as_me: error: could not setup config files machinery" >&2;}
- { (exit 1); exit 1; }; }
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=/{
-s/:*\$(srcdir):*/:/
-s/:*\${srcdir}:*/:/
-s/:*@srcdir@:*/:/
-s/^\([^=]*=[ ]*\):*/\1/
-s/:*$//
-s/^[^=]*=[ ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-
-eval set X " :F $CONFIG_FILES "
-shift
-for ac_tag
-do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
- :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5
-$as_echo "$as_me: error: invalid tag $ac_tag" >&2;}
- { (exit 1); exit 1; }; };;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
- esac
- ac_save_IFS=$IFS
- IFS=:
- set x $ac_tag
- IFS=$ac_save_IFS
- shift
- ac_file=$1
- shift
-
- case $ac_mode in
- :L) ac_source=$1;;
- :[FH])
- ac_file_inputs=
- for ac_f
- do
- case $ac_f in
- -) ac_f="$tmp/stdin";;
- *) # Look for the file first in the build tree, then in the source tree
- # (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
- test -f "$ac_f" ||
- case $ac_f in
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
- { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
-$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;}
- { (exit 1); exit 1; }; };;
- esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
- ac_file_inputs="$ac_file_inputs '$ac_f'"
- done
-
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
- `' by configure.'
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:$LINENO: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
- fi
- # Neutralize special characters interpreted by sed in replacement strings.
- case $configure_input in #(
- *\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
- sed 's/[\\\\&|]/\\\\&/g'`;; #(
- *) ac_sed_conf_input=$configure_input;;
- esac
-
- case $ac_tag in
- *:-:* | *:-) cat >"$tmp/stdin" \
- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
- { (exit 1); exit 1; }; } ;;
- esac
- ;;
- esac
-
- ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- { as_dir="$ac_dir"
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
-$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
- { (exit 1); exit 1; }; }; }
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
- case $INSTALL in
- [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
- esac
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-
-ac_sed_dataroot='
-/datarootdir/ {
- p
- q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p
-'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
- s&@infodir@&$infodir&g
- s&@localedir@&$localedir&g
- s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
- { (exit 1); exit 1; }; }
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined." >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined." >&2;}
-
- rm -f "$tmp/stdin"
- case $ac_file in
- -) cat "$tmp/out" && rm -f "$tmp/out";;
- *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
- esac \
- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
- { (exit 1); exit 1; }; }
- ;;
-
-
-
- esac
-
-done # for ac_tag
-
-
-{ (exit 0); exit 0; }
-_ACEOF
-chmod +x $CONFIG_STATUS
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
- { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded. So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status. When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
- ac_cs_success=:
- ac_config_status_args=
- test "$silent" = yes &&
- ac_config_status_args="$ac_config_status_args --quiet"
- exec 5>/dev/null
- $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
- exec 5>>config.log
- # Use ||, not &&, to avoid exiting from the if with $? = 1, which
- # would make configure fail if this is the last instruction.
- $ac_cs_success || { (exit 1); exit 1; }
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
diff --git a/contrib/dnsperf-2.1.0.0-1/configure.in b/contrib/dnsperf-2.1.0.0-1/configure.in
deleted file mode 100644
index 4a6bf6a4..00000000
--- a/contrib/dnsperf-2.1.0.0-1/configure.in
+++ /dev/null
@@ -1,73 +0,0 @@
-#
-# Copyright (C) 2000, 2001 Nominum, Inc.
-#
-# Permission to use, copy, modify, and distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
-# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
-# INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
-# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
-# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-AC_INIT(dnsperf.c)
-
-AC_PREREQ(2.13)
-
-AC_PROG_CC
-AC_PROG_INSTALL
-AC_PROG_RANLIB
-
-AC_C_INLINE
-
-AC_DEFUN(AC_TYPE_SOCKLEN_T,
-[AC_CACHE_CHECK([for socklen_t], ac_cv_type_socklen_t,
-[
- AC_TRY_COMPILE(
- [#include <sys/types.h>
- #include <sys/socket.h>],
- [socklen_t len = 42; return len;],
- ac_cv_type_socklen_t=yes,
- ac_cv_type_socklen_t=no)
-])
- if test $ac_cv_type_socklen_t != yes; then
- AC_DEFINE(socklen_t, int)
- fi
-])
-
-AC_DEFUN(AC_SA_LEN,
-[AC_CACHE_CHECK([for sa_len], ac_cv_sa_len,
-[
- AC_TRY_COMPILE(
- [#include <sys/types.h>
- #include <sys/socket.h>],
- [struct sockaddr sa; sa.sa_len = 0;],
- ac_cv_sa_len=yes,
- ac_cv_sa_len=no)
-])
- if test $ac_cv_sa_len = yes; then
- AC_DEFINE(HAVE_SA_LEN)
- fi
-])
-
-AC_CHECK_LIB(socket, socket)
-AC_CHECK_LIB(nsl, inet_ntoa)
-
-AC_PATH_PROG(ac_cv_isc_config, [isc-config.sh], "no")
-if test "$ac_cv_isc_config" = "no"; then
- AC_MSG_ERROR(BIND 9 libraries must be installed)
-fi
-AC_SUBST(DNSLIBS, "`$ac_cv_isc_config --libs dns bind9`")
-AC_SUBST(DNSCFLAGS, "`$ac_cv_isc_config --cflags dns bind9`")
-
-AC_TYPE_SOCKLEN_T
-AC_SA_LEN
-
-ACX_PTHREAD
-
-AC_OUTPUT(Makefile)
diff --git a/contrib/dnsperf-2.1.0.0-1/contrib/queryparse/INSTALL b/contrib/dnsperf-2.1.0.0-1/contrib/queryparse/INSTALL
deleted file mode 100644
index c22d5b39..00000000
--- a/contrib/dnsperf-2.1.0.0-1/contrib/queryparse/INSTALL
+++ /dev/null
@@ -1,48 +0,0 @@
-
-Installation
-------------
-
-Queryparse requires the dnspython and pcapy python modules. Pcapy depends
-upon the pcap library.
-
-Libpcap may be obtained from http://www.tcpdump.org/
-Dnspython may be obtained from http://www.dnspython.org/
-Pcapy may be obtained from http://oss.coresecurity.com/projects/pcapy.html
-
-Ensure queryparse is somewhere in your path.
-
-
-Usage
------
-queryparse -i <input file> -o <output file>
-
- -i <input file>: the tcpdump file that will be parsed to locate DNS
- queries.
-
- -o <output file>: the file to which you wish to save the queries parsed
- from <input file>. When complete, this file is suitable
- for use as input to dnsperf.
-
- -r Keep packets whose RD flag is not set.
- Use this flag when parsing captures from authoritative
- servers. When parsing captures from caching servers,
- do not use this flag unless you also want to parse the
- queries the server itself is sending.
-
- -R Parse response packets (QR=1), instead of query packets
- (QR=0).
-
-
-Queryparse takes as input a packet capture file as created by tcpdump (or any
-other program that can save data in pcap format). It parses every UDP packet,
-looking for DNS queries. When it finds a potential query, it makes every
-effort to parse it as a valid query.
-
-Once queryparse has finished, it will print a set of statistics regarding
-the capture file to STDOUT.
-
-
-NOTE: Currently, queryparse will correctly handle packets contained in either
-Ethernet frames or Cisco HDLC frames. It is not guaranteed to work with other
-framing formats.
-
diff --git a/contrib/dnsperf-2.1.0.0-1/contrib/queryparse/USAGE b/contrib/dnsperf-2.1.0.0-1/contrib/queryparse/USAGE
deleted file mode 100644
index d5672e9b..00000000
--- a/contrib/dnsperf-2.1.0.0-1/contrib/queryparse/USAGE
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-To use queryparse, you need one or more files containing pcap-formatted packet
-captures, such as those generated by tcpdump via the -w switch.
-
-Once you have such a file, call queryparse as follows:
-
-queryparse -i tcpdump.raw -o outputfile
-
-where "tcpdump.raw" is the name of the pcap-formatted packet capture file, and
-"outputfile" is the name you wish to call the saved output of queryparse.
-
-When queryparse finishes, it will print to STDOUT a count of each type of query
-encountered during its run. For example:
-
-Statistics:
- A: 1175140
- SOA: 23639
- NAPTR: 113
- NS: 1329
- CNAME: 1667
- NONE: 38
- PTR: 186053
- AAAA: 50858
- ANY: 2117
- SRV: 49470
- KEY: 218
- A6: 245
- TXT: 24243
- MX: 517510
--------------------------
- TOTAL: 2032640
-
-
-
-The resulting output is in a format suitable as input to resperf or dnsperf.
-For example:
-
-example.biz. A
-example.net. MX
-foo.example.tv. A
-example.enc. MX
-example[2].txt. MX
-foo.]. MX
-
-
-Note that there are both valid and invalid host names in the output: Neither
-queryparse nor resperf or dnsperf discriminate on the basis of a host name's
-adherence to RFCs. If the query was put on the wire and can be recognized as a
-properly-formed query, it will be saved. If this does not meet your needs, you
-may wish to parse the resulting output file to eliminate nonconforming host
-names.
diff --git a/contrib/dnsperf-2.1.0.0-1/contrib/queryparse/queryparse b/contrib/dnsperf-2.1.0.0-1/contrib/queryparse/queryparse
deleted file mode 100755
index 516d9338..00000000
--- a/contrib/dnsperf-2.1.0.0-1/contrib/queryparse/queryparse
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/usr/bin/env python
-
-import dns.message
-import dns.rrset
-import dns.flags
-import dns.name
-import pcapy
-import socket
-import sys
-import struct
-from optparse import OptionParser
-
-
-__author__ = "Nominum, Inc."
-__version__ = "1.0.2.0"
-__date__ = "2007-05-14"
-
-IPHeader = '!BBHHHBBHLL'
-
-IPHDRLEN = 20
-UDPHDRLEN = 8
-LINKTYPE_C_HDLC = 104
-LINKTYPE_ETHERNET = 1
-qtypecount = {}
-
-
-def main(argv):
- parser = OptionParser(usage="%prog [options]",
- version = "%prog " + __version__ )
- parser.add_option("-i", "--input", dest="fin",
- help="name of tcpdump file to parse", metavar="FILE")
- parser.add_option("-o", "--output", dest="fout",
- help="file in which to save parsed DNS queries",
- metavar="FILE")
- parser.add_option("-r", "--recursion", dest="recurse", action="store_true",
- default=False,
- help="Keep queries whose RD flag is 0 (default: discard)")
- parser.add_option("-R", "--responses", dest="responses",
- action="store_true", default=False,
- help="Parse query responses instead of queries")
- (opts, args) = parser.parse_args()
-
- if opts.fin:
- pcap = pcapy.open_offline(opts.fin)
- else:
- pcap = pcapy.open_offline('-')
- linktype = pcap.datalink()
- if linktype == LINKTYPE_C_HDLC:
- IPHDRSTART = 4
- else:
- IPHDRSTART = 14
- if opts.fout:
- outfile = open(opts.fout, "w")
- else:
- outfile = sys.stdout
- while True:
- try:
- packet = pcap.next()
- except:
- break
-
-
- packet = packet[1]
- # Toss the stuff before the IP header
- packet = packet[IPHDRSTART:]
-
- # Grab the rest of the packet so we can parse proto
- iphdr = packet[0:IPHDRLEN]
- if len(iphdr) < IPHDRLEN:
- continue
- (vhl, tos, tlen, ipid, fragoff, ttl, proto, cksum, srcip, dstip) = \
- struct.unpack(IPHeader, iphdr)
-
- # Toss the IP header, we're done with it. We need to account
- # for any IP header options.
- ihl = (vhl & 0xF) * 4
- packet = packet[ihl:]
-
- if proto == socket.IPPROTO_UDP: # UDP, 8-byte header
- packet = packet[UDPHDRLEN:]
- else:
- continue
-
- try:
- msg = dns.message.from_wire(packet)
- except:
- continue
- if not opts.recurse and not dns.flags.RD:
- continue
- if opts.responses:
- querytest = msg.flags & dns.flags.QR
- else:
- querytest = not (msg.flags & dns.flags.QR)
- if querytest:
- for query in msg.question: # handle multiple queries per packet
- fqdn = query.name.to_text()
- qtype = dns.rdatatype.to_text(query.rdtype)
- outfile.write("%s %s\n" % (fqdn, qtype))
- # add qtype to dict if not present, otherwise increment
- qtypecount[query.rdtype] = qtypecount.get(query.rdtype, 0) + 1
-
- if outfile is not sys.stdout:
- outfile.close()
- sum = 0
- print "Statistics:"
- qtypes = qtypecount.keys()
- qtypes.sort()
- for qtype in qtypes:
- qtype_str = dns.rdatatype.to_text(qtype)
- count = qtypecount[qtype]
- print " %10s:\t%d" % (qtype_str, count)
- sum += count
- print "-------------------------"
- print " TOTAL:\t%d" % sum
-
-if __name__ == '__main__':
- main(sys.argv[1:])
-
diff --git a/contrib/dnsperf-2.1.0.0-1/contrib/queryparse/queryparse.1 b/contrib/dnsperf-2.1.0.0-1/contrib/queryparse/queryparse.1
deleted file mode 100644
index 8d9ea0d1..00000000
--- a/contrib/dnsperf-2.1.0.0-1/contrib/queryparse/queryparse.1
+++ /dev/null
@@ -1,50 +0,0 @@
-.TH "queryparse" 1
-.SH NAME
-queryparse \- extract DNS queries from pcap capture files.
-.SH SYNOPSIS
-.B queryparse [-i
-.I input file
-.B ] [-o
-.I output file
-.B ] [-r
-.I recursion only
-.B ] [-R
-.I parse responses
-.B ]
-.SH DESCRIPTION
-.B queryparse
-is a tool designed to extract DNS queries from pcap-formatted packet
-capture files and save them in a form suitable for input to Nominum's
-dnsperf or resperf benchmarking tools.
-.B queryparse
-will only examine UDP packets, and currently supports Ethernet and Cisco HDLC frame types.
-.SH OPTIONS
-.IP "\-i filename"
-Attempt to extract DNS queries from
-.I filename,
-which should be a pcap-formatted packet capture session (e.g., a file created
-by tcpdump or ethereal).
-.IP "\-o filename"
-Write queries to
-.I filename
-in a format suitable for input to Nominum's dnsperf or resperf benchmarking tools.
-.IP "\-r"
-Keep queries that do not have the RD (recursion desired) flag set. This is useful when parsing packet captures from authoritative nameservers. When parsing captures from caching nameservers, do not use it unless you also want to parse the outgoing queries from the nameserver. Defaults to discarding queries with RD=0.
-.IP "\-R"
-Parse responses (QR=1) instead of queries (QR=0).
-.SH FILES
-None
-.SH ENVIRONMENT
-None
-.SH DIAGNOSTICS
-None
-.SH BUGS
-None
-.SH AUTHOR
-Nominum, Inc.
-.SH "SEE ALSO"
-.BR dnsperf (1),
-.BR resperf (1),
-.BR pcap (3),
-.BR tcpdump (8)
-
diff --git a/contrib/dnsperf-2.1.0.0-1/datafile.c b/contrib/dnsperf-2.1.0.0-1/datafile.c
deleted file mode 100644
index b6274c0c..00000000
--- a/contrib/dnsperf-2.1.0.0-1/datafile.c
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * Copyright (C) 2011 - 2015 Nominum, Inc.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose with or without fee is hereby granted,
- * provided that the above copyright notice and this permission notice
- * appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <fcntl.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/stat.h>
-
-#define ISC_BUFFER_USEINLINE
-
-#include <isc/buffer.h>
-#include <isc/mem.h>
-
-#include "datafile.h"
-#include "log.h"
-#include "os.h"
-#include "util.h"
-
-#define BUFFER_SIZE (64 * 1024)
-
-struct perf_datafile {
- isc_mem_t *mctx;
- pthread_mutex_t lock;
- int pipe_fd;
- int fd;
- isc_boolean_t is_file;
- size_t size;
- isc_boolean_t cached;
- char databuf[BUFFER_SIZE + 1];
- isc_buffer_t data;
- unsigned int maxruns;
- unsigned int nruns;
- isc_boolean_t read_any;
-};
-
-static inline void
-nul_terminate(perf_datafile_t *dfile)
-{
- unsigned char *data;
-
- data = isc_buffer_used(&dfile->data);
- *data = '\0';
-}
-
-perf_datafile_t *
-perf_datafile_open(isc_mem_t *mctx, const char *filename)
-{
- perf_datafile_t *dfile;
- struct stat buf;
-
- dfile = isc_mem_get(mctx, sizeof(*dfile));
- if (dfile == NULL)
- perf_log_fatal("out of memory");
-
- dfile->mctx = mctx;
- MUTEX_INIT(&dfile->lock);
- dfile->pipe_fd = -1;
- dfile->is_file = ISC_FALSE;
- dfile->size = 0;
- dfile->cached = ISC_FALSE;
- dfile->maxruns = 1;
- dfile->nruns = 0;
- dfile->read_any = ISC_FALSE;
- isc_buffer_init(&dfile->data, dfile->databuf, BUFFER_SIZE);
- if (filename == NULL) {
- dfile->fd = STDIN_FILENO;
- } else {
- dfile->fd = open(filename, O_RDONLY);
- if (dfile->fd < 0)
- perf_log_fatal("unable to open file: %s", filename);
- if (fstat(dfile->fd, &buf) == 0 && S_ISREG(buf.st_mode)) {
- dfile->is_file = ISC_TRUE;
- dfile->size = buf.st_size;
- }
- }
- nul_terminate(dfile);
-
- return dfile;
-}
-
-void
-perf_datafile_close(perf_datafile_t **dfilep)
-{
- perf_datafile_t *dfile;
-
- ISC_INSIST(dfilep != NULL && *dfilep != NULL);
-
- dfile = *dfilep;
- *dfilep = NULL;
-
- if (dfile->fd >= 0 && dfile->fd != STDIN_FILENO)
- close(dfile->fd);
- MUTEX_DESTROY(&dfile->lock);
- isc_mem_put(dfile->mctx, dfile, sizeof(*dfile));
-}
-
-void
-perf_datafile_setpipefd(perf_datafile_t *dfile, int pipe_fd)
-{
- dfile->pipe_fd = pipe_fd;
-}
-
-void
-perf_datafile_setmaxruns(perf_datafile_t *dfile, unsigned int maxruns)
-{
- dfile->maxruns = maxruns;
-}
-
-static void
-reopen_file(perf_datafile_t *dfile)
-{
- if (dfile->cached) {
- isc_buffer_first(&dfile->data);
- } else {
- if (lseek(dfile->fd, 0L, SEEK_SET) < 0)
- perf_log_fatal("cannot reread input");
- isc_buffer_clear(&dfile->data);
- nul_terminate(dfile);
- }
-}
-
-static isc_result_t
-read_more(perf_datafile_t *dfile)
-{
- unsigned char *data;
- size_t size;
- ssize_t n;
- isc_result_t result;
-
- if (!dfile->is_file && dfile->pipe_fd >= 0) {
- result = perf_os_waituntilreadable(dfile->fd, dfile->pipe_fd,
- -1);
- if (result != ISC_R_SUCCESS)
- return (result);
- }
-
- isc_buffer_compact(&dfile->data);
- data = isc_buffer_used(&dfile->data);
- size = isc_buffer_availablelength(&dfile->data);
-
- n = read(dfile->fd, data, size);
- if (n < 0)
- return (ISC_R_FAILURE);
-
- isc_buffer_add(&dfile->data, n);
- nul_terminate(dfile);
-
- if (dfile->is_file &&
- isc_buffer_usedlength(&dfile->data) == dfile->size)
- dfile->cached = ISC_TRUE;
-
- return (ISC_R_SUCCESS);
-}
-
-static isc_result_t
-read_one_line(perf_datafile_t *dfile, isc_buffer_t *lines)
-{
- const char *cur;
- unsigned int length, curlen, nrem;
- isc_result_t result;
-
- while (ISC_TRUE) {
- /* Get the current line */
- cur = isc_buffer_current(&dfile->data);
- curlen = strcspn(cur, "\n");
-
- /*
- * If the current line contains the rest of the buffer,
- * we need to read more (unless the full file is cached).
- */
- nrem = isc_buffer_remaininglength(&dfile->data);
- if (curlen == nrem) {
- if (! dfile->cached) {
- result = read_more(dfile);
- if (result != ISC_R_SUCCESS)
- return (result);
- }
- if (isc_buffer_remaininglength(&dfile->data) == 0) {
- dfile->nruns++;
- return (ISC_R_EOF);
- }
- if (isc_buffer_remaininglength(&dfile->data) > nrem)
- continue;
- }
-
- /* We now have a line. Advance the buffer past it. */
- isc_buffer_forward(&dfile->data, curlen);
- if (isc_buffer_remaininglength(&dfile->data) > 0)
- isc_buffer_forward(&dfile->data, 1);
-
- /* If the line is empty or a comment, we need to try again. */
- if (curlen > 0 && cur[0] != ';')
- break;
- }
-
- length = isc_buffer_availablelength(lines);
- if (curlen > length - 1)
- curlen = length - 1;
- isc_buffer_putmem(lines, cur, curlen);
- isc_buffer_putuint8(lines, 0);
-
- return (ISC_R_SUCCESS);
-}
-
-isc_result_t
-perf_datafile_next(perf_datafile_t *dfile, isc_buffer_t *lines,
- isc_boolean_t is_update)
-{
- const char *current;
- isc_result_t result;
-
- LOCK(&dfile->lock);
-
- if (dfile->maxruns > 0 && dfile->maxruns == dfile->nruns) {
- result = ISC_R_EOF;
- goto done;
- }
-
- result = read_one_line(dfile, lines);
- if (result == ISC_R_EOF) {
- if (!dfile->read_any) {
- result = ISC_R_INVALIDFILE;
- goto done;
- }
- if (dfile->maxruns != dfile->nruns) {
- reopen_file(dfile);
- result = read_one_line(dfile, lines);
-
- }
- }
- if (result != ISC_R_SUCCESS) {
- goto done;
- }
- dfile->read_any = ISC_TRUE;
-
- if (is_update) {
- while (ISC_TRUE) {
- current = isc_buffer_used(lines);
- result = read_one_line(dfile, lines);
- if (result == ISC_R_EOF &&
- dfile->maxruns != dfile->nruns) {
- reopen_file(dfile);
- }
- if (result != ISC_R_SUCCESS ||
- strcasecmp(current, "send") == 0)
- break;
- };
- }
-
- result = ISC_R_SUCCESS;
- done:
- UNLOCK(&dfile->lock);
- return (result);
-}
-
-unsigned int
-perf_datafile_nruns(const perf_datafile_t *dfile)
-{
- return dfile->nruns;
-}
diff --git a/contrib/dnsperf-2.1.0.0-1/datafile.h b/contrib/dnsperf-2.1.0.0-1/datafile.h
deleted file mode 100644
index 9e0edc64..00000000
--- a/contrib/dnsperf-2.1.0.0-1/datafile.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2011 - 2015 Nominum, Inc.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose with or without fee is hereby granted,
- * provided that the above copyright notice and this permission notice
- * appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef PERF_DATAFILE_H
-#define PERF_DATAFILE_H 1
-
-#include <isc/types.h>
-
-typedef struct perf_datafile perf_datafile_t;
-
-perf_datafile_t *
-perf_datafile_open(isc_mem_t *mctx, const char *filename);
-
-void
-perf_datafile_close(perf_datafile_t **dfilep);
-
-void
-perf_datafile_setmaxruns(perf_datafile_t *dfile, unsigned int maxruns);
-
-void
-perf_datafile_setpipefd(perf_datafile_t *dfile, int pipe_fd);
-
-isc_result_t
-perf_datafile_next(perf_datafile_t *dfile, isc_buffer_t *lines,
- isc_boolean_t is_update);
-
-unsigned int
-perf_datafile_nruns(const perf_datafile_t *dfile);
-
-#endif
diff --git a/contrib/dnsperf-2.1.0.0-1/dns.c b/contrib/dnsperf-2.1.0.0-1/dns.c
deleted file mode 100644
index be16490b..00000000
--- a/contrib/dnsperf-2.1.0.0-1/dns.c
+++ /dev/null
@@ -1,848 +0,0 @@
-/*
- * Copyright (C) 2000, 2001 Nominum, Inc.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 2004 - 2015 Nominum, Inc.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose with or without fee is hereby granted,
- * provided that the above copyright notice and this permission notice
- * appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <ctype.h>
-#include <time.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#define ISC_BUFFER_USEINLINE
-
-#include <isc/base64.h>
-#include <isc/buffer.h>
-#include <isc/hmacmd5.h>
-#include <isc/hmacsha.h>
-#include <isc/lex.h>
-#include <isc/mem.h>
-#include <isc/region.h>
-#include <isc/result.h>
-#include <isc/util.h>
-
-#include <dns/callbacks.h>
-#include <dns/fixedname.h>
-#include <dns/message.h>
-#include <dns/name.h>
-#include <dns/rdata.h>
-#include <dns/rdataclass.h>
-#include <dns/rdatatype.h>
-#include <dns/ttl.h>
-
-#include "dns.h"
-#include "log.h"
-#include "opt.h"
-
-#define WHITESPACE " \t\n"
-
-#define MAX_RDATA_LENGTH 65535
-#define EDNSLEN 11
-
-const char *perf_dns_rcode_strings[] = {
- "NOERROR", "FORMERR", "SERVFAIL", "NXDOMAIN",
- "NOTIMP", "REFUSED", "YXDOMAIN", "YXRRSET",
- "NXRRSET", "NOTAUTH", "NOTZONE", "rcode11",
- "rcode12", "rcode13", "rcode14", "rcode15"
-};
-
-#define TSIG_HMACMD5_NAME "\010hmac-md5\007sig-alg\003reg\003int"
-#define TSIG_HMACSHA1_NAME "\011hmac-sha1"
-#define TSIG_HMACSHA224_NAME "\013hmac-sha224"
-#define TSIG_HMACSHA256_NAME "\013hmac-sha256"
-#define TSIG_HMACSHA384_NAME "\013hmac-sha384"
-#define TSIG_HMACSHA512_NAME "\013hmac-sha512"
-
-typedef enum {
- TSIG_HMACMD5,
- TSIG_HMACSHA1,
- TSIG_HMACSHA224,
- TSIG_HMACSHA256,
- TSIG_HMACSHA384,
- TSIG_HMACSHA512
-} hmac_type_t;
-
-typedef union {
- isc_hmacmd5_t hmacmd5;
- isc_hmacsha1_t hmacsha1;
- isc_hmacsha224_t hmacsha224;
- isc_hmacsha256_t hmacsha256;
- isc_hmacsha384_t hmacsha384;
- isc_hmacsha512_t hmacsha512;
-} hmac_ctx_t;
-
-struct perf_dnstsigkey {
- isc_mem_t *mctx;
- isc_constregion_t alg;
- hmac_type_t hmactype;
- unsigned int digestlen;
- dns_fixedname_t fname;
- dns_name_t *name;
- unsigned char secretdata[256];
- isc_buffer_t secret;
-};
-
-struct perf_dnsctx {
- isc_mem_t *mctx;
- dns_compress_t compress;
- isc_lex_t *lexer;
-};
-
-perf_dnsctx_t *
-perf_dns_createctx(isc_boolean_t updates)
-{
- isc_mem_t *mctx;
- perf_dnsctx_t *ctx;
- isc_result_t result;
-
- if (!updates)
- return NULL;
-
- mctx = NULL;
- result = isc_mem_create(0, 0, &mctx);
- if (result != ISC_R_SUCCESS)
- perf_log_fatal("creating memory context: %s",
- isc_result_totext(result));
-
- ctx = isc_mem_get(mctx, sizeof(*ctx));
- if (ctx == NULL)
- perf_log_fatal("out of memory");
-
- memset(ctx, 0, sizeof(*ctx));
- ctx->mctx = mctx;
-
- result = dns_compress_init(&ctx->compress, 0, ctx->mctx);
- if (result != ISC_R_SUCCESS) {
- perf_log_fatal("creating compression context: %s",
- isc_result_totext(result));
- }
- dns_compress_setmethods(&ctx->compress, DNS_COMPRESS_GLOBAL14);
-
- result = isc_lex_create(ctx->mctx, 1024, &ctx->lexer);
- if (result != ISC_R_SUCCESS) {
- perf_log_fatal("creating lexer: %s",
- isc_result_totext(result));
- }
-
- return (ctx);
-}
-
-void
-perf_dns_destroyctx(perf_dnsctx_t **ctxp)
-{
- perf_dnsctx_t *ctx;
- isc_mem_t *mctx;
-
- INSIST(ctxp != NULL);
- ctx = *ctxp;
- *ctxp = NULL;
-
- if (ctx == NULL)
- return;
-
- mctx = ctx->mctx;
- isc_lex_destroy(&ctx->lexer);
- dns_compress_invalidate(&ctx->compress);
- isc_mem_put(mctx, ctx, sizeof(*ctx));
- isc_mem_destroy(&mctx);
-}
-
-static isc_result_t
-name_fromstring(dns_name_t *name, dns_name_t *origin,
- const char *str, unsigned int len,
- isc_buffer_t *target, const char *type)
-{
- isc_buffer_t buffer;
- isc_result_t result;
-
- isc_buffer_init(&buffer, str, len);
- isc_buffer_add(&buffer, len);
- result = dns_name_fromtext(name, &buffer, origin, 0, target);
- if (result != ISC_R_SUCCESS)
- perf_log_warning("invalid %s name: %.*s", type, (int)len, str);
- return result;
-}
-
-#define SET_KEY(key, type) do { \
- (key)->alg.base = TSIG_HMAC ## type ## _NAME; \
- (key)->alg.length = sizeof(TSIG_HMAC ## type ## _NAME); \
- (key)->hmactype = TSIG_HMAC ## type; \
- (key)->digestlen = ISC_ ## type ## _DIGESTLENGTH; \
- } while (0)
-
-perf_dnstsigkey_t *
-perf_dns_parsetsigkey(const char *arg, isc_mem_t *mctx)
-{
- perf_dnstsigkey_t *tsigkey;
- const char *sep1, *sep2, *alg, *name, *secret;
- int alglen, namelen;
- isc_result_t result;
-
- tsigkey = isc_mem_get(mctx, sizeof (*tsigkey));
- if (tsigkey == NULL)
- perf_log_fatal("out of memory");
- memset(tsigkey, 0, sizeof (*tsigkey));
- tsigkey->mctx = mctx;
-
- sep1 = strchr(arg, ':');
- if (sep1 == NULL) {
- perf_log_warning("invalid TSIG [alg:]name:secret");
- perf_opt_usage();
- exit(1);
- }
-
- sep2 = strchr(sep1 + 1, ':');
- if (sep2 == NULL) {
- /* name:key */
- alg = NULL;
- alglen = 0;
- name = arg;
- namelen = sep1 - arg;
- secret = sep1 + 1;
- } else {
- /* [alg:]name:secret */
- alg = arg;
- alglen = sep1 - arg;
- name = sep1 + 1;
- namelen = sep2 - sep1 - 1;
- secret = sep2 + 1;
- }
-
- /* Algorithm */
-
- if (alg == NULL || strncasecmp(alg, "hmac-md5:", 9) == 0) {
- SET_KEY(tsigkey, MD5);
- } else if (strncasecmp(alg, "hmac-sha1:", 10) == 0) {
- SET_KEY(tsigkey, SHA1);
- } else if (strncasecmp(alg, "hmac-sha224:", 12) == 0) {
- SET_KEY(tsigkey, SHA224);
- } else if (strncasecmp(alg, "hmac-sha256:", 12) == 0) {
- SET_KEY(tsigkey, SHA256);
- } else if (strncasecmp(alg, "hmac-sha384:", 12) == 0) {
- SET_KEY(tsigkey, SHA384);
- } else if (strncasecmp(alg, "hmac-sha512:", 12) == 0) {
- SET_KEY(tsigkey, SHA512);
- } else {
- perf_log_warning("invalid TSIG algorithm %.*s", alglen, alg);
- perf_opt_usage();
- exit(1);
- }
-
- /* Name */
-
- dns_fixedname_init(&tsigkey->fname);
- tsigkey->name = dns_fixedname_name(&tsigkey->fname);
- result = name_fromstring(tsigkey->name, dns_rootname, name, namelen,
- NULL, "TSIG key");
- if (result != ISC_R_SUCCESS) {
- perf_opt_usage();
- exit(1);
- }
- (void)dns_name_downcase(tsigkey->name, tsigkey->name, NULL);
-
- /* Secret */
-
- isc_buffer_init(&tsigkey->secret, tsigkey->secretdata,
- sizeof(tsigkey->secretdata));
- result = isc_base64_decodestring(secret, &tsigkey->secret);
- if (result != ISC_R_SUCCESS) {
- perf_log_warning("invalid TSIG secret '%s'", secret);
- perf_opt_usage();
- exit(1);
- }
-
- return tsigkey;
-}
-
-void
-perf_dns_destroytsigkey(perf_dnstsigkey_t **tsigkeyp)
-{
- perf_dnstsigkey_t *tsigkey;
-
- INSIST(tsigkeyp != NULL && *tsigkeyp != NULL);
-
- tsigkey = *tsigkeyp;
- *tsigkeyp = NULL;
-
- isc_mem_put(tsigkey->mctx, tsigkey, sizeof(*tsigkey));
-}
-
-/*
- * Appends an OPT record to the packet.
- */
-static isc_result_t
-add_edns(isc_buffer_t *packet, isc_boolean_t dnssec) {
- unsigned char *base;
-
- if (isc_buffer_availablelength(packet) < EDNSLEN) {
- perf_log_warning("failed to add OPT to query packet");
- return (ISC_R_NOSPACE);
- }
-
- base = isc_buffer_base(packet);
-
- isc_buffer_putuint8(packet, 0); /* root name */
- isc_buffer_putuint16(packet, dns_rdatatype_opt);/* type */
- isc_buffer_putuint16(packet, MAX_EDNS_PACKET); /* class */
- isc_buffer_putuint8(packet, 0); /* xrcode */
- isc_buffer_putuint8(packet, 0); /* version */
- if (dnssec) /* flags */
- isc_buffer_putuint16(packet, 0x8000);
- else
- isc_buffer_putuint16(packet, 0);
- isc_buffer_putuint16(packet, 0); /* rdlen */
-
- base[11]++; /* increment record count */
-
- return (ISC_R_SUCCESS);
-}
-
-static void
-hmac_init(perf_dnstsigkey_t *tsigkey, hmac_ctx_t *ctx)
-{
- unsigned char *secret;
- unsigned int length;
-
- secret = isc_buffer_base(&tsigkey->secret);
- length = isc_buffer_usedlength(&tsigkey->secret);
-
- switch (tsigkey->hmactype) {
- case TSIG_HMACMD5:
- isc_hmacmd5_init(&ctx->hmacmd5, secret, length);
- break;
- case TSIG_HMACSHA1:
- isc_hmacsha1_init(&ctx->hmacsha1, secret, length);
- break;
- case TSIG_HMACSHA224:
- isc_hmacsha224_init(&ctx->hmacsha224, secret, length);
- break;
- case TSIG_HMACSHA256:
- isc_hmacsha256_init(&ctx->hmacsha256, secret, length);
- break;
- case TSIG_HMACSHA384:
- isc_hmacsha384_init(&ctx->hmacsha384, secret, length);
- break;
- case TSIG_HMACSHA512:
- isc_hmacsha512_init(&ctx->hmacsha512, secret, length);
- break;
- }
-}
-
-static void
-hmac_update(perf_dnstsigkey_t *tsigkey, hmac_ctx_t *ctx,
- unsigned char *data, unsigned int length)
-{
- switch (tsigkey->hmactype) {
- case TSIG_HMACMD5:
- isc_hmacmd5_update(&ctx->hmacmd5, data, length);
- break;
- case TSIG_HMACSHA1:
- isc_hmacsha1_update(&ctx->hmacsha1, data, length);
- break;
- case TSIG_HMACSHA224:
- isc_hmacsha224_update(&ctx->hmacsha224, data, length);
- break;
- case TSIG_HMACSHA256:
- isc_hmacsha256_update(&ctx->hmacsha256, data, length);
- break;
- case TSIG_HMACSHA384:
- isc_hmacsha384_update(&ctx->hmacsha384, data, length);
- break;
- case TSIG_HMACSHA512:
- isc_hmacsha512_update(&ctx->hmacsha512, data, length);
- break;
- }
-}
-
-static void
-hmac_sign(perf_dnstsigkey_t *tsigkey, hmac_ctx_t *ctx, unsigned char *digest,
- unsigned int digestlen)
-{
- switch (tsigkey->hmactype) {
- case TSIG_HMACMD5:
- isc_hmacmd5_sign(&ctx->hmacmd5, digest);
- break;
- case TSIG_HMACSHA1:
- isc_hmacsha1_sign(&ctx->hmacsha1, digest, digestlen);
- break;
- case TSIG_HMACSHA224:
- isc_hmacsha224_sign(&ctx->hmacsha224, digest, digestlen);
- break;
- case TSIG_HMACSHA256:
- isc_hmacsha256_sign(&ctx->hmacsha256, digest, digestlen);
- break;
- case TSIG_HMACSHA384:
- isc_hmacsha384_sign(&ctx->hmacsha384, digest, digestlen);
- break;
- case TSIG_HMACSHA512:
- isc_hmacsha512_sign(&ctx->hmacsha512, digest, digestlen);
- break;
- }
-}
-
-/*
- * Appends a TSIG record to the packet.
- */
-static isc_result_t
-add_tsig(isc_buffer_t *packet, perf_dnstsigkey_t *tsigkey)
-{
- unsigned char *base;
- hmac_ctx_t hmac;
- isc_region_t name_r;
- isc_region_t *alg_r;
- unsigned int rdlen, totallen;
- unsigned char tmpdata[512];
- isc_buffer_t tmp;
- isc_uint32_t now;
- unsigned char digest[ISC_SHA256_DIGESTLENGTH];
-
- hmac_init(tsigkey, &hmac);
- now = time(NULL);
- dns_name_toregion(tsigkey->name, &name_r);
- alg_r = (isc_region_t *) &tsigkey->alg;
-
- /* Make sure everything will fit */
- rdlen = alg_r->length + 16 + tsigkey->digestlen;
- totallen = name_r.length + 10 + rdlen;
- if (totallen > isc_buffer_availablelength(packet)) {
- perf_log_warning("adding TSIG: out of space");
- return (ISC_R_NOSPACE);
- }
-
- base = isc_buffer_base(packet);
-
- /* Digest the message */
- hmac_update(tsigkey, &hmac, isc_buffer_base(packet),
- isc_buffer_usedlength(packet));
-
- /* Digest the TSIG record */
- isc_buffer_init(&tmp, tmpdata, sizeof tmpdata);
- isc_buffer_copyregion(&tmp, &name_r); /* name */
- isc_buffer_putuint16(&tmp, dns_rdataclass_any); /* class */
- isc_buffer_putuint32(&tmp, 0); /* ttl */
- isc_buffer_copyregion(&tmp, alg_r); /* alg */
- isc_buffer_putuint16(&tmp, 0); /* time high */
- isc_buffer_putuint32(&tmp, now); /* time low */
- isc_buffer_putuint16(&tmp, 300); /* fudge */
- isc_buffer_putuint16(&tmp, 0); /* error */
- isc_buffer_putuint16(&tmp, 0); /* other length */
- hmac_update(tsigkey, &hmac, isc_buffer_base(&tmp),
- isc_buffer_usedlength(&tmp));
- hmac_sign(tsigkey, &hmac, digest, tsigkey->digestlen);
-
- /* Add the TSIG record. */
- isc_buffer_copyregion(packet, &name_r); /* name */
- isc_buffer_putuint16(packet, dns_rdatatype_tsig); /* type */
- isc_buffer_putuint16(packet, dns_rdataclass_any); /* class */
- isc_buffer_putuint32(packet, 0); /* ttl */
- isc_buffer_putuint16(packet, rdlen); /* rdlen */
- isc_buffer_copyregion(packet, alg_r); /* alg */
- isc_buffer_putuint16(packet, 0); /* time high */
- isc_buffer_putuint32(packet, now); /* time low */
- isc_buffer_putuint16(packet, 300); /* fudge */
- isc_buffer_putuint16(packet, tsigkey->digestlen); /* digest len */
- isc_buffer_putmem(packet, digest, tsigkey->digestlen); /* digest */
- isc_buffer_putmem(packet, base, 2); /* orig ID */
- isc_buffer_putuint16(packet, 0); /* error */
- isc_buffer_putuint16(packet, 0); /* other len */
-
- base[11]++; /* increment record count */
-
- return (ISC_R_SUCCESS);
-}
-
-static isc_result_t
-build_query(const isc_textregion_t *line, isc_buffer_t *msg)
-{
- char *domain_str;
- int domain_len;
- dns_name_t name;
- dns_offsets_t offsets;
- isc_textregion_t qtype_r;
- dns_rdatatype_t qtype;
- isc_result_t result;
-
- domain_str = line->base;
- domain_len = strcspn(line->base, WHITESPACE);
-
- qtype_r.base = line->base + domain_len;
- while (isspace(*qtype_r.base & 0xff))
- qtype_r.base++;
- qtype_r.length = strcspn(qtype_r.base, WHITESPACE);
-
- /* Create the question section */
- DNS_NAME_INIT(&name, offsets);
- result = name_fromstring(&name, dns_rootname, domain_str, domain_len,
- msg, "domain");
- if (result != ISC_R_SUCCESS)
- return (result);
-
- if (qtype_r.length == 0) {
- perf_log_warning("invalid query input format: %s", line->base);
- return (ISC_R_FAILURE);
- }
- result = dns_rdatatype_fromtext(&qtype, &qtype_r);
- if (result != ISC_R_SUCCESS) {
- perf_log_warning("invalid query type: %.*s",
- (int) qtype_r.length, qtype_r.base);
- return (ISC_R_FAILURE);
- }
-
- isc_buffer_putuint16(msg, qtype);
- isc_buffer_putuint16(msg, dns_rdataclass_in);
-
- return ISC_R_SUCCESS;
-}
-
-static isc_boolean_t
-token_equals(const isc_textregion_t *token, const char *str)
-{
- return (strlen(str) == token->length &&
- strncasecmp(str, token->base, token->length) == 0);
-}
-
-/*
- * Reads one line containing an individual update for a dynamic update message.
- */
-static isc_result_t
-read_update_line(perf_dnsctx_t *ctx, const isc_textregion_t *line, char *str,
- dns_name_t *zname, int want_ttl, int need_type,
- int want_rdata, int need_rdata, dns_name_t *name,
- isc_uint32_t *ttlp, dns_rdatatype_t *typep,
- dns_rdata_t *rdata, isc_buffer_t *rdatabuf)
-{
- char *curr_str;
- unsigned int curr_len;
- isc_buffer_t buffer;
- isc_textregion_t src;
- dns_rdatacallbacks_t callbacks;
- isc_result_t result;
-
- while (isspace(*str & 0xff))
- str++;
-
- /* Read the owner name */
- curr_str = str;
- curr_len = strcspn(curr_str, WHITESPACE);
- result = name_fromstring(name, zname, curr_str, curr_len, NULL,
- "owner");
- if (result != ISC_R_SUCCESS)
- return (result);
- str += curr_len;
- while (isspace(*str & 0xff))
- str++;
-
- /* Read the ttl */
- if (want_ttl) {
- curr_str = str;
- curr_len = strcspn(curr_str, WHITESPACE);
- src.base = curr_str;
- src.length = curr_len;
- result = dns_ttl_fromtext(&src, ttlp);
- if (result != ISC_R_SUCCESS) {
- perf_log_warning("invalid ttl: %.*s",
- curr_len, curr_str);
- return (result);
- }
- str += curr_len;
- while (isspace(*str & 0xff))
- str++;
- }
-
- /* Read the type */
- curr_str = str;
- curr_len = strcspn(curr_str, WHITESPACE);
- if (curr_len == 0) {
- if (!need_type)
- return (ISC_R_SUCCESS);
- perf_log_warning("invalid update command: %s", line->base);
- return (ISC_R_SUCCESS);
- }
- src.base = curr_str;
- src.length = curr_len;
- result = dns_rdatatype_fromtext(typep, &src);
- if (result != ISC_R_SUCCESS) {
- perf_log_warning("invalid type: %.*s", curr_len, curr_str);
- return (result);
- }
- str += curr_len;
- while (isspace(*str & 0xff))
- str++;
-
- /* Read the rdata */
- if (!want_rdata)
- return (ISC_R_SUCCESS);
-
- if (*str == 0) {
- if (!need_rdata)
- return (ISC_R_SUCCESS);
- perf_log_warning("invalid update command: %s\n", line->base);
- return (ISC_R_FAILURE);
- }
-
- isc_buffer_init(&buffer, str, strlen(str));
- isc_buffer_add(&buffer, strlen(str));
- result = isc_lex_openbuffer(ctx->lexer, &buffer);
- if (result != ISC_R_SUCCESS) {
- perf_log_warning("setting up lexer: %s",
- isc_result_totext(result));
- return (result);
- }
- dns_rdatacallbacks_init_stdio(&callbacks);
- result = dns_rdata_fromtext(rdata, dns_rdataclass_in, *typep,
- ctx->lexer, zname, 0, ctx->mctx, rdatabuf,
- &callbacks);
- (void)isc_lex_close(ctx->lexer);
- if (result != ISC_R_SUCCESS) {
- perf_log_warning("parsing rdata: %s", str);
- return (result);
- }
-
- return (ISC_R_SUCCESS);
-}
-
-/*
- * Reads a complete dynamic update message and sends it.
- */
-static isc_result_t
-build_update(perf_dnsctx_t *ctx, const isc_textregion_t *record,
- isc_buffer_t *msg)
-{
- isc_textregion_t input;
- char *msgbase;
- isc_buffer_t rdlenbuf, rdatabuf;
- unsigned char rdataarray[MAX_RDATA_LENGTH];
- isc_textregion_t token;
- char *str;
- isc_boolean_t is_update;
- int updates = 0;
- int prereqs = 0;
- dns_fixedname_t fzname, foname;
- dns_name_t *zname, *oname;
- isc_uint32_t ttl;
- dns_rdatatype_t rdtype;
- dns_rdataclass_t rdclass;
- dns_rdata_t rdata;
- isc_uint16_t rdlen;
- isc_result_t result;
-
- /* Reset compression context */
- dns_compress_rollback(&ctx->compress, 0);
-
- input = *record;
- msgbase = isc_buffer_base(msg);
-
- /* Initialize */
-
- dns_fixedname_init(&foname);
- oname = dns_fixedname_name(&foname);
-
- /* Parse zone name */
- dns_fixedname_init(&fzname);
- zname = dns_fixedname_name(&fzname);
- result = name_fromstring(zname, dns_rootname,
- input.base, strlen(input.base),
- NULL, "zone");
- if (result != ISC_R_SUCCESS)
- goto done;
-
- /* Render zone section */
- result = dns_name_towire(zname, &ctx->compress, msg);
- if (result != ISC_R_SUCCESS) {
- perf_log_warning("error rendering zone name: %s",
- isc_result_totext(result));
- goto done;
- }
- isc_buffer_putuint16(msg, dns_rdatatype_soa);
- isc_buffer_putuint16(msg, dns_rdataclass_in);
-
- while (ISC_TRUE) {
- input.base += strlen(input.base) + 1;
- if (input.base >= record->base + record->length) {
- perf_log_warning("warning: incomplete update");
- goto done;
- }
-
- ttl = 0;
- rdtype = dns_rdatatype_any;
- isc_buffer_init(&rdatabuf, rdataarray, sizeof(rdataarray));
- dns_rdata_init(&rdata);
- rdlen = 0;
- rdclass = dns_rdataclass_in;
- is_update = ISC_FALSE;
-
- token.base = input.base;
- token.length = strcspn(token.base, WHITESPACE);
- str = input.base + token.length;
- if (token_equals(&token, "send")) {
- break;
- } else if (token_equals(&token, "add")) {
- result = read_update_line(ctx, &input, str, zname,
- ISC_TRUE,
- ISC_TRUE, ISC_TRUE, ISC_TRUE,
- oname, &ttl, &rdtype,
- &rdata, &rdatabuf);
- rdclass = dns_rdataclass_in;
- is_update = ISC_TRUE;
- } else if (token_equals(&token, "delete")) {
- result = read_update_line(ctx, &input, str, zname,
- ISC_FALSE,
- ISC_FALSE, ISC_TRUE,
- ISC_FALSE, oname, &ttl,
- &rdtype, &rdata, &rdatabuf);
- if (isc_buffer_usedlength(&rdatabuf) > 0)
- rdclass = dns_rdataclass_none;
- else
- rdclass = dns_rdataclass_any;
- is_update = ISC_TRUE;
- } else if (token_equals(&token, "require")) {
- result = read_update_line(ctx, &input, str, zname,
- ISC_FALSE,
- ISC_FALSE, ISC_TRUE,
- ISC_FALSE, oname, &ttl,
- &rdtype, &rdata, &rdatabuf);
- if (isc_buffer_usedlength(&rdatabuf) > 0)
- rdclass = dns_rdataclass_in;
- else
- rdclass = dns_rdataclass_any;
- is_update = ISC_FALSE;
- } else if (token_equals(&token, "prohibit")) {
- result = read_update_line(ctx, &input, str, zname,
- ISC_FALSE,
- ISC_FALSE, ISC_FALSE,
- ISC_FALSE, oname, &ttl,
- &rdtype, &rdata, &rdatabuf);
- rdclass = dns_rdataclass_none;
- is_update = ISC_FALSE;
- } else {
- perf_log_warning("invalid update command: %s",
- input.base);
- result = ISC_R_FAILURE;
- }
-
- if (result != ISC_R_SUCCESS)
- goto done;
-
- if (!is_update && updates > 0) {
- perf_log_warning("prereqs must precede updates");
- result = ISC_R_FAILURE;
- goto done;
- }
-
- /* Render record */
- result = dns_name_towire(oname, &ctx->compress, msg);
- if (result != ISC_R_SUCCESS) {
- perf_log_warning("rendering record name: %s",
- isc_result_totext(result));
- goto done;
- }
- if (isc_buffer_availablelength(msg) < 10) {
- perf_log_warning("out of space in message buffer");
- result = ISC_R_NOSPACE;
- goto done;
- }
-
- isc_buffer_putuint16(msg, rdtype);
- isc_buffer_putuint16(msg, rdclass);
- isc_buffer_putuint32(msg, ttl);
- rdlenbuf = *msg;
- isc_buffer_putuint16(msg, 0); /* rdlen */
- rdlen = isc_buffer_usedlength(&rdatabuf);
- if (rdlen > 0) {
- result = dns_rdata_towire(&rdata, &ctx->compress, msg);
- if (result != ISC_R_SUCCESS) {
- perf_log_warning("rendering rdata: %s",
- isc_result_totext(result));
- goto done;
- }
- rdlen = msg->used - rdlenbuf.used - 2;
- isc_buffer_putuint16(&rdlenbuf, rdlen);
- }
- if (is_update)
- updates++;
- else
- prereqs++;
- }
-
- msgbase[7] = prereqs; /* ANCOUNT = number of prereqs */
- msgbase[9] = updates; /* AUCOUNT = number of updates */
-
- result = ISC_R_SUCCESS;
-
- done:
- return result;
-}
-
-isc_result_t
-perf_dns_buildrequest(perf_dnsctx_t *ctx, const isc_textregion_t *record,
- isc_uint16_t qid,
- isc_boolean_t edns, isc_boolean_t dnssec,
- perf_dnstsigkey_t *tsigkey, isc_buffer_t *msg)
-{
- unsigned int flags;
- isc_result_t result;
-
- if (ctx != NULL)
- flags = dns_opcode_update << 11;
- else
- flags = DNS_MESSAGEFLAG_RD;
-
- /* Create the DNS packet header */
- isc_buffer_putuint16(msg, qid);
- isc_buffer_putuint16(msg, flags); /* flags */
- isc_buffer_putuint16(msg, 1); /* qdcount */
- isc_buffer_putuint16(msg, 0); /* ancount */
- isc_buffer_putuint16(msg, 0); /* aucount */
- isc_buffer_putuint16(msg, 0); /* arcount */
-
- if (ctx != NULL) {
- result = build_update(ctx, record, msg);
- } else {
- result = build_query(record, msg);
- }
- if (result != ISC_R_SUCCESS)
- return (result);
-
- if (edns) {
- result = add_edns(msg, dnssec);
- if (result != ISC_R_SUCCESS)
- return (result);
- }
-
- if (tsigkey != NULL) {
- result = add_tsig(msg, tsigkey);
- if (result != ISC_R_SUCCESS)
- return (result);
- }
-
- return (ISC_R_SUCCESS);
-}
diff --git a/contrib/dnsperf-2.1.0.0-1/dns.h b/contrib/dnsperf-2.1.0.0-1/dns.h
deleted file mode 100644
index 3ac98a4e..00000000
--- a/contrib/dnsperf-2.1.0.0-1/dns.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2000, 2001 Nominum, Inc.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 2004 - 2015 Nominum, Inc.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose with or without fee is hereby granted,
- * provided that the above copyright notice and this permission notice
- * appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <isc/types.h>
-
-#ifndef PERF_DNS_H
-#define PERF_DNS_H 1
-
-#define MAX_UDP_PACKET 512
-#define MAX_EDNS_PACKET 4096
-
-typedef struct perf_dnstsigkey perf_dnstsigkey_t;
-typedef struct perf_dnsctx perf_dnsctx_t;
-
-extern const char *perf_dns_rcode_strings[];
-
-perf_dnstsigkey_t *
-perf_dns_parsetsigkey(const char *arg, isc_mem_t *mctx);
-
-void
-perf_dns_destroytsigkey(perf_dnstsigkey_t **tsigkeyp);
-
-perf_dnsctx_t *
-perf_dns_createctx(isc_boolean_t updates);
-
-void
-perf_dns_destroyctx(perf_dnsctx_t **ctxp);
-
-isc_result_t
-perf_dns_buildrequest(perf_dnsctx_t *ctx, const isc_textregion_t *record,
- isc_uint16_t qid,
- isc_boolean_t edns, isc_boolean_t dnssec,
- perf_dnstsigkey_t *tsigkey, isc_buffer_t *msg);
-
-#endif
diff --git a/contrib/dnsperf-2.1.0.0-1/dnsperf.1 b/contrib/dnsperf-2.1.0.0-1/dnsperf.1
deleted file mode 100644
index 5ae36490..00000000
--- a/contrib/dnsperf-2.1.0.0-1/dnsperf.1
+++ /dev/null
@@ -1,313 +0,0 @@
-.\" Copyright (C) Nominum, Inc.
-.\"
-.\" All rights reserved.
-.TH DNSPERF 1 "Dec 9, 2015" Nominum Nominum
-.SH NAME
-\%dnsperf - test the performance of a DNS server
-.SH SYNOPSIS
-.hy 0
-.ad l
-\fBdnsperf\fR\ [\fB\-a\ \fIlocal_addr\fB\fR]
-[\fB\-b\ \fIbufsize\fB\fR]
-[\fB\-c\ \fIclients\fB\fR]
-[\fB\-d\ \fIdatafile\fB\fR]
-[\fB\-D\fR]
-[\fB\-e\fR]
-[\fB\-f\ \fIfamily\fB\fR]
-[\fB\-h\fR]
-[\fB\-l\ \fIlimit\fB\fR]
-[\fB\-n\ \fIruns_through_file\fB\fR]
-[\fB\-p\ \fIport\fB\fR]
-[\fB\-q\ \fInum_queries\fB\fR]
-[\fB\-Q\ \fImax_qps\fB\fR]
-[\fB\-s\ \fIserver_addr\fB\fR]
-[\fB\-S\ \fIstats_interval\fB\fR]
-[\fB\-t\ \fItimeout\fB\fR]
-[\fB\-T\ \fIthreads\fB\fR]
-[\fB\-u\fR]
-[\fB\-v\fR]
-[\fB\-x\ \fIlocal_port\fB\fR]
-[\fB\-y\ \fI[alg:]name:secret\fB\fR]
-.ad
-.hy
-.SH DESCRIPTION
-\fBdnsperf\fR is a DNS server performance testing tool. It is primarily
-intended for measuring the performance of authoritative DNS servers, but it
-can also be used for measuring caching server performance in a closed
-laboratory environment. For testing caching servers resolving against the
-live Internet, the \fBresperf\fR program is preferred.
-
-It is recommended that \fBdnsperf\fR and the name server under test be run
-on separate machines, so that the CPU usage of \fBdnsperf\fR itself does not
-slow down the name server. The two machines should be connected with a fast
-network, preferably a dedicated Gigabit Ethernet segment. Testing through a
-router or firewall is not advisable.
-.SS "Configuring the name server"
-If using \fBdnsperf\fR to test an authoritative server, the name server
-under test should be set up to serve one or more zones similar in size and
-number to what the server is expected to serve in production.
-
-Also, be sure to turn off recursion in the server's configuration (in BIND
-8/9, specify "recursion no;" in the options block). In BIND 8, you should
-also specify "fetch-glue no;"; otherwise the server may attempt to retrieve
-glue information from the Internet during the test, slowing it down by an
-unpredictable factor.
-.SS "Constructing a query input file"
-A \fBdnsperf\fR input file should contain a large and realistic set of
-queries, on the order of ten thousand to a million. The input file contains
-one line per query, consisting of a domain name and an RR type name
-separated by a space. The class of the query is implicitly IN.
-
-When measuring the performance serving non-terminal zones such as the root
-zone or TLDs, note that such servers spend most of their time providing
-referral responses, not authoritative answers. Therefore, a realistic input
-file might consist mostly of queries for type A for names *below*, not at,
-the delegations present in the zone. For example, when testing the
-performance of a server configured to be authoritative for the top-level
-domain "fi.", which contains delegations for domains like "helsinki.fi" and
-"turku.fi", the input file could contain lines like
-.RS
-.hy 0
-
-.nf
-www.turku.fi A
-www.helsinki.fi A
-.fi
-.hy
-.RE
-
-where the "www" prefix ensures that the server will respond with a referral.
-Ideally, a realistic proportion of queries for nonexistent domains should be
-mixed in with those for existing ones, and the lines of the input file
-should be in a random order.
-.SS "Constructing a dynamic update input file"
-To test dynamic update performance, \fBdnsperf\fR is run with the \fB\-u\fR
-option, and the input file is constructed of blocks of lines describing
-dynamic update messages. The first line in a block contains the zone name:
-.RS
-.hy 0
-
-.nf
-example.com
-.fi
-.hy
-.RE
-
-Subsequent lines contain prerequisites, if there are any. Prerequisites can
-specify that a name may or may not exist, an rrset may or may not exist, or
-an rrset exists and its rdata matches all specified rdata for that name and
-type. The keywords "require" and "prohibit" are followed by the appropriate
-information. All relative names are considered to be relative to the zone
-name. The following lines show the 5 types of prerequisites.
-.RS
-.hy 0
-
-.nf
-require a
-require a A
-require a A 1.2.3.4
-prohibit x
-prohibit x A
-.fi
-.hy
-.RE
-
-Subsequent lines contain records to be added, records to be deleted, rrsets
-to be deleted, or names to be deleted. The keywords "add" or "delete" are
-followed by the appropriate information. All relative names are considered
-to be relative to the zone name. The following lines show the 4 types of
-updates.
-.RS
-.hy 0
-
-.nf
-add x 3600 A 10.1.2.3
-delete y A 10.1.2.3
-delete z A
-delete w
-.fi
-.hy
-.RE
-
-Each update message is terminated by a line containing the command:
-.RS
-.hy 0
-
-.nf
-send
-.fi
-.hy
-.RE
-.SS "Running the tests"
-When running \fBdnsperf\fR, a data file (the \fB\-d\fR option) and server
-(the \fB\-s\fR option) will normally be specified. The output of dnsperf is
-mostly self-explanatory. Pay attention to the number of dropped packets
-reported - when running the test over a local Ethernet connection, it should
-be zero. If one or more packets has been dropped, there may be a problem
-with the network connection. In that case, the results should be considered
-suspect and the test repeated.
-.SH OPTIONS
-
-\fB-a \fIlocal_addr\fB\fR
-.br
-.RS
-Specifies the local address from which to send requests. The default is the
-wildcard address.
-.RE
-
-\fB-b \fIbufsize\fB\fR
-.br
-.RS
-Sets the size of the socket's send and receive buffers, in kilobytes. If not
-specified, the operating system's default is used.
-.RE
-
-\fB-c \fIclients\fB\fR
-.br
-.RS
-Act as multiple clients. Requests are sent from multiple sockets. The
-default is to act as 1 client.
-.RE
-
-\fB-d \fIdatafile\fB\fR
-.br
-.RS
-Specifies the input data file. If not specified, \fBdnsperf\fR will read
-from standard input.
-.RE
-
-\fB-D\fR
-.br
-.RS
-Sets the DO (DNSSEC OK) bit [RFC3225] in all packets sent. This also enables
-EDNS0, which is required for DNSSEC.
-.RE
-
-\fB-e\fR
-.br
-.RS
-Enables EDNS0 [RFC2671], by adding an OPT record to all packets sent.
-.RE
-
-\fB-f \fIfamily\fB\fR
-.br
-.RS
-Specifies the address family used for sending DNS packets. The possible
-values are "inet", "inet6", or "any". If "any" (the default value) is
-specified, \fBdnsperf\fR will use whichever address family is appropriate
-for the server it is sending packets to.
-.RE
-
-\fB-h\fR
-.br
-.RS
-Print a usage statement and exit.
-.RE
-
-\fB-l \fIlimit\fB\fR
-.br
-.RS
-Specifies a time limit for the run, in seconds. This may cause the input to
-be read multiple times, or only some of the input to be read. The default
-behavior is to read the input once, and have no specific time limit.
-.RE
-
-\fB-n \fIruns_through_file\fB\fR
-.br
-.RS
-Run through the input file at most this many times. If no time limit is set,
-the file will be read exactly this number of times; if a time limit is set,
-the file may be read fewer times.
-.RE
-
-\fB-p \fIport\fB\fR
-.br
-.RS
-Sets the port on which the DNS packets are sent. If not specified, the
-standard DNS port (53) is used.
-.RE
-
-\fB-q \fInum_queries\fB\fR
-.br
-.RS
-Sets the maximum number of outstanding requests. When this value is reached,
-\fBdnsperf\fR will not send any more requests until either responses are
-received or requests time out. The default value is 100.
-.RE
-
-\fB-Q \fImax_qps\fB\fR
-.br
-.RS
-Limits the number of requests per second. There is no default limit.
-.RE
-
-\fB-s \fIserver_addr\fB\fR
-.br
-.RS
-Specifies the name or address of the server to which requests will be sent.
-The default is the loopback address, 127.0.0.1.
-.RE
-
-\fB-S \fIstats_interval\fB\fR
-.br
-.RS
-If this parameter is specified, a count of the number of queries per second
-during the interval will be printed out every stats_interval seconds.
-.RE
-
-\fB-t \fItimeout\fB\fR
-.br
-.RS
-Specifies the request timeout value, in seconds. \fBdnsperf\fR will no
-longer wait for a response to a particular request after this many seconds
-have elapsed. The default is 5 seconds.
-.RE
-
-\fB-T \fIthreads\fB\fR
-.br
-.RS
-Run multiple client threads. By default, \fBdnsperf\fR uses one thread for
-sending requests and one thread for receiving responses. If this option is
-specified, \fBdnsperf\fR will instead use N pairs of send/receive threads.
-.RE
-
-\fB-u\fR
-.br
-.RS
-Instructs \fBdnsperf\fR to send DNS dynamic update messages, rather than
-queries. The format of the input file is different in this case; see the
-"Constructing a dynamic update input file" section for more details.
-.RE
-
-\fB-v\fR
-.br
-.RS
-Enables verbose mode. The DNS RCODE of each response will be reported to
-standard output when the response is received, as will the latency. If a
-query times out, it will be reported with the special string "T" instead of
-a normal DNS RCODE. If a query is interrupted, it will be reported with the
-special string "I".
-.RE
-
-\fB-x \fIlocal_port\fB\fR
-.br
-.RS
-Specifies the local port from which to send requests. The default is the
-wildcard port (0).
-
-If acting as multiple clients and the wildcard port is used, each client
-will use a different random port. If a port is specified, the clients will
-use a range of ports starting with the specified one.
-.RE
-
-\fB-y \fI[alg:]name:secret\fB\fR
-.br
-.RS
-Add a TSIG record [RFC2845] to all packets sent, using the specified TSIG
-key algorithm, name and secret, where the algorithm defaults to hmac-md5 and
-the secret is expressed as a base-64 encoded string.
-.RE
-.SH AUTHOR
-Nominum, Inc.
-.SH "SEE ALSO"
-\fBresperf\fR(1)
diff --git a/contrib/dnsperf-2.1.0.0-1/dnsperf.c b/contrib/dnsperf-2.1.0.0-1/dnsperf.c
deleted file mode 100644
index d4f2b329..00000000
--- a/contrib/dnsperf-2.1.0.0-1/dnsperf.c
+++ /dev/null
@@ -1,1167 +0,0 @@
-/*
- * Copyright (C) 2000, 2001 Nominum, Inc.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 2004 - 2015 Nominum, Inc.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose with or without fee is hereby granted,
- * provided that the above copyright notice and this permission notice
- * appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/***
- *** DNS Performance Testing Tool
- ***
- *** Version $Id: dnsperf.c 263303 2015-12-15 01:09:36Z bwelling $
- ***/
-
-#include <errno.h>
-#include <math.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-
-#include <sys/time.h>
-
-#define ISC_BUFFER_USEINLINE
-
-#include <isc/buffer.h>
-#include <isc/file.h>
-#include <isc/list.h>
-#include <isc/mem.h>
-#include <isc/netaddr.h>
-#include <isc/print.h>
-#include <isc/region.h>
-#include <isc/result.h>
-#include <isc/sockaddr.h>
-#include <isc/types.h>
-
-#include <dns/rcode.h>
-#include <dns/result.h>
-
-#include "net.h"
-#include "datafile.h"
-#include "dns.h"
-#include "log.h"
-#include "opt.h"
-#include "os.h"
-#include "util.h"
-#include "version.h"
-
-#define DEFAULT_SERVER_NAME "127.0.0.1"
-#define DEFAULT_SERVER_PORT 53
-#define DEFAULT_LOCAL_PORT 0
-#define DEFAULT_MAX_OUTSTANDING 100
-#define DEFAULT_TIMEOUT 5
-
-#define TIMEOUT_CHECK_TIME 100000
-
-#define MAX_INPUT_DATA (64 * 1024)
-
-#define MAX_SOCKETS 256
-
-#define RECV_BATCH_SIZE 16
-
-typedef struct {
- int argc;
- char **argv;
- int family;
- isc_uint32_t clients;
- isc_uint32_t threads;
- isc_uint32_t maxruns;
- isc_uint64_t timelimit;
- isc_sockaddr_t server_addr;
- isc_sockaddr_t local_addr;
- isc_uint64_t timeout;
- isc_uint32_t bufsize;
- isc_boolean_t edns;
- isc_boolean_t dnssec;
- perf_dnstsigkey_t *tsigkey;
- isc_uint32_t max_outstanding;
- isc_uint32_t max_qps;
- isc_uint64_t stats_interval;
- isc_boolean_t updates;
- isc_boolean_t verbose;
-} config_t;
-
-typedef struct {
- isc_uint64_t start_time;
- isc_uint64_t end_time;
- isc_uint64_t stop_time;
- struct timespec stop_time_ns;
-} times_t;
-
-typedef struct {
- isc_uint64_t rcodecounts[16];
-
- isc_uint64_t num_sent;
- isc_uint64_t num_interrupted;
- isc_uint64_t num_timedout;
- isc_uint64_t num_completed;
-
- isc_uint64_t total_request_size;
- isc_uint64_t total_response_size;
-
- isc_uint64_t latency_sum;
- isc_uint64_t latency_sum_squares;
- isc_uint64_t latency_min;
- isc_uint64_t latency_max;
-} stats_t;
-
-typedef ISC_LIST(struct query_info) query_list;
-
-typedef struct query_info {
- isc_uint64_t timestamp;
- query_list *list;
- char *desc;
- int sock;
- /*
- * This link links the query into the list of outstanding
- * queries or the list of available query IDs.
- */
- ISC_LINK(struct query_info) link;
-} query_info;
-
-#define NQIDS 65536
-
-typedef struct {
- query_info queries[NQIDS];
- query_list outstanding_queries;
- query_list unused_queries;
-
- pthread_t sender;
- pthread_t receiver;
-
- pthread_mutex_t lock;
- pthread_cond_t cond;
-
- unsigned int nsocks;
- int current_sock;
- int *socks;
-
- perf_dnsctx_t *dnsctx;
-
- isc_boolean_t done_sending;
- isc_uint64_t done_send_time;
-
- const config_t *config;
- const times_t *times;
- stats_t stats;
-
- isc_uint32_t max_outstanding;
- isc_uint32_t max_qps;
-
- isc_uint64_t last_recv;
-} threadinfo_t;
-
-static threadinfo_t *threads;
-
-static pthread_mutex_t start_lock = PTHREAD_MUTEX_INITIALIZER;
-static pthread_cond_t start_cond = PTHREAD_COND_INITIALIZER;
-static isc_boolean_t started;
-
-static isc_boolean_t interrupted = ISC_FALSE;
-
-static int threadpipe[2];
-static int mainpipe[2];
-static int intrpipe[2];
-
-static isc_mem_t *mctx;
-
-static perf_datafile_t *input;
-
-static void
-handle_sigint(int sig)
-{
- (void)sig;
- write(intrpipe[1], "", 1);
-}
-
-static void
-print_initial_status(const config_t *config)
-{
- time_t now;
- isc_netaddr_t addr;
- char buf[ISC_NETADDR_FORMATSIZE];
- int i;
-
- printf("[Status] Command line: %s",
- isc_file_basename(config->argv[0]));
- for (i = 1; i < config->argc; i++)
- printf(" %s", config->argv[i]);
- printf("\n");
-
- isc_netaddr_fromsockaddr(&addr, &config->server_addr);
- isc_netaddr_format(&addr, buf, sizeof(buf));
- printf("[Status] Sending %s (to %s)\n",
- config->updates ? "updates" : "queries", buf);
-
- now = time(NULL);
- printf("[Status] Started at: %s", ctime(&now));
-
- printf("[Status] Stopping after ");
- if (config->timelimit)
- printf("%u.%06u seconds",
- (unsigned int)(config->timelimit / MILLION),
- (unsigned int)(config->timelimit % MILLION));
- if (config->timelimit && config->maxruns)
- printf(" or ");
- if (config->maxruns)
- printf("%u run%s through file", config->maxruns,
- config->maxruns == 1 ? "" : "s");
- printf("\n");
-}
-
-static void
-print_final_status(const config_t *config)
-{
- const char *reason;
-
- if (interrupted)
- reason = "interruption";
- else if (config->maxruns > 0 &&
- perf_datafile_nruns(input) == config->maxruns)
- reason = "end of file";
- else
- reason = "time limit";
-
- printf("[Status] Testing complete (%s)\n", reason);
- printf("\n");
-}
-
-static double
-stddev(isc_uint64_t sum_of_squares, isc_uint64_t sum, isc_uint64_t total)
-{
- double squared;
-
- squared = (double)sum * (double)sum;
- return sqrt((sum_of_squares - (squared / total)) / (total - 1));
-}
-
-static void
-print_statistics(const config_t *config, const times_t *times, stats_t *stats)
-{
- const char *units;
- isc_uint64_t run_time;
- isc_boolean_t first_rcode;
- isc_uint64_t latency_avg;
- unsigned int i;
-
- units = config->updates ? "Updates" : "Queries";
-
- run_time = times->end_time - times->start_time;
-
- printf("Statistics:\n\n");
-
- printf(" %s sent: %" ISC_PRINT_QUADFORMAT "u\n",
- units, stats->num_sent);
- printf(" %s completed: %" ISC_PRINT_QUADFORMAT "u (%.2lf%%)\n",
- units, stats->num_completed,
- SAFE_DIV(100.0 * stats->num_completed, stats->num_sent));
- printf(" %s lost: %" ISC_PRINT_QUADFORMAT "u (%.2lf%%)\n",
- units, stats->num_timedout,
- SAFE_DIV(100.0 * stats->num_timedout, stats->num_sent));
- if (stats->num_interrupted > 0)
- printf(" %s interrupted: %" ISC_PRINT_QUADFORMAT "u "
- "(%.2lf%%)\n",
- units, stats->num_interrupted,
- SAFE_DIV(100.0 * stats->num_interrupted,
- stats->num_sent));
- printf("\n");
-
- printf(" Response codes: ");
- first_rcode = ISC_TRUE;
- for (i = 0; i < 16; i++) {
- if (stats->rcodecounts[i] == 0)
- continue;
- if (first_rcode)
- first_rcode = ISC_FALSE;
- else
- printf(", ");
- printf("%s %" ISC_PRINT_QUADFORMAT "u (%.2lf%%)",
- perf_dns_rcode_strings[i], stats->rcodecounts[i],
- (stats->rcodecounts[i] * 100.0) / stats->num_completed);
- }
- printf("\n");
-
- printf(" Average packet size: request %u, response %u\n",
- (unsigned int)SAFE_DIV(stats->total_request_size,
- stats->num_sent),
- (unsigned int)SAFE_DIV(stats->total_response_size,
- stats->num_completed));
- printf(" Run time (s): %u.%06u\n",
- (unsigned int)(run_time / MILLION),
- (unsigned int)(run_time % MILLION));
- printf(" %s per second: %.6lf\n", units,
- SAFE_DIV(stats->num_completed, (((double)run_time) / MILLION)));
-
- printf("\n");
-
- latency_avg = SAFE_DIV(stats->latency_sum, stats->num_completed);
- printf(" Average Latency (s): %u.%06u (min %u.%06u, max %u.%06u)\n",
- (unsigned int)(latency_avg / MILLION),
- (unsigned int)(latency_avg % MILLION),
- (unsigned int)(stats->latency_min / MILLION),
- (unsigned int)(stats->latency_min % MILLION),
- (unsigned int)(stats->latency_max / MILLION),
- (unsigned int)(stats->latency_max % MILLION));
- if (stats->num_completed > 1) {
- printf(" Latency StdDev (s): %f\n",
- stddev(stats->latency_sum_squares, stats->latency_sum,
- stats->num_completed) / MILLION);
- }
-
- printf("\n");
-}
-
-static void
-sum_stats(const config_t *config, stats_t *total)
-{
- unsigned int i, j;
-
- memset(total, 0, sizeof(*total));
-
- for (i = 0; i < config->threads; i++) {
- stats_t *stats = &threads[i].stats;
-
- for (j = 0; j < 16; j++)
- total->rcodecounts[j] += stats->rcodecounts[j];
-
- total->num_sent += stats->num_sent;
- total->num_interrupted += stats->num_interrupted;
- total->num_timedout += stats->num_timedout;
- total->num_completed += stats->num_completed;
-
- total->total_request_size += stats->total_request_size;
- total->total_response_size += stats->total_response_size;
-
- total->latency_sum += stats->latency_sum;
- total->latency_sum_squares += stats->latency_sum_squares;
- total->latency_min += stats->latency_min;
- total->latency_max += stats->latency_max;
- }
-}
-
-static char *
-stringify(unsigned int value)
-{
- static char buf[20];
-
- snprintf(buf, sizeof(buf), "%u", value);
- return buf;
-}
-
-static void
-setup(int argc, char **argv, config_t *config)
-{
- const char *family = NULL;
- const char *server_name = DEFAULT_SERVER_NAME;
- in_port_t server_port = DEFAULT_SERVER_PORT;
- const char *local_name = NULL;
- in_port_t local_port = DEFAULT_LOCAL_PORT;
- const char *filename = NULL;
- const char *tsigkey = NULL;
- isc_result_t result;
-
- result = isc_mem_create(0, 0, &mctx);
- if (result != ISC_R_SUCCESS)
- perf_log_fatal("creating memory context: %s",
- isc_result_totext(result));
-
- dns_result_register();
-
- memset(config, 0, sizeof(*config));
- config->argc = argc;
- config->argv = argv;
-
- config->family = AF_UNSPEC;
- config->clients = 1;
- config->threads = 1;
- config->timeout = DEFAULT_TIMEOUT * MILLION;
- config->max_outstanding = DEFAULT_MAX_OUTSTANDING;
-
- perf_opt_add('f', perf_opt_string, "family",
- "address family of DNS transport, inet or inet6", "any",
- &family);
- perf_opt_add('s', perf_opt_string, "server_addr",
- "the server to query", DEFAULT_SERVER_NAME, &server_name);
- perf_opt_add('p', perf_opt_port, "port",
- "the port on which to query the server",
- stringify(DEFAULT_SERVER_PORT), &server_port);
- perf_opt_add('a', perf_opt_string, "local_addr",
- "the local address from which to send queries", NULL,
- &local_name);
- perf_opt_add('x', perf_opt_port, "local_port",
- "the local port from which to send queries",
- stringify(DEFAULT_LOCAL_PORT), &local_port);
- perf_opt_add('d', perf_opt_string, "datafile",
- "the input data file", "stdin", &filename);
- perf_opt_add('c', perf_opt_uint, "clients",
- "the number of clients to act as", NULL,
- &config->clients);
- perf_opt_add('T', perf_opt_uint, "threads",
- "the number of threads to run", NULL,
- &config->threads);
- perf_opt_add('n', perf_opt_uint, "maxruns",
- "run through input at most N times", NULL,
- &config->maxruns);
- perf_opt_add('l', perf_opt_timeval, "timelimit",
- "run for at most this many seconds", NULL,
- &config->timelimit);
- perf_opt_add('b', perf_opt_uint, "buffer_size",
- "socket send/receive buffer size in kilobytes", NULL,
- &config->bufsize);
- perf_opt_add('t', perf_opt_timeval, "timeout",
- "the timeout for query completion in seconds",
- stringify(DEFAULT_TIMEOUT), &config->timeout);
- perf_opt_add('e', perf_opt_boolean, NULL,
- "enable EDNS 0", NULL, &config->edns);
- perf_opt_add('D', perf_opt_boolean, NULL,
- "set the DNSSEC OK bit (implies EDNS)", NULL,
- &config->dnssec);
- perf_opt_add('y', perf_opt_string, "[alg:]name:secret",
- "the TSIG algorithm, name and secret", NULL,
- &tsigkey);
- perf_opt_add('q', perf_opt_uint, "num_queries",
- "the maximum number of queries outstanding",
- stringify(DEFAULT_MAX_OUTSTANDING),
- &config->max_outstanding);
- perf_opt_add('Q', perf_opt_uint, "max_qps",
- "limit the number of queries per second", NULL,
- &config->max_qps);
- perf_opt_add('S', perf_opt_timeval, "stats_interval",
- "print qps statistics every N seconds",
- NULL, &config->stats_interval);
- perf_opt_add('u', perf_opt_boolean, NULL,
- "send dynamic updates instead of queries",
- NULL, &config->updates);
- perf_opt_add('v', perf_opt_boolean, NULL,
- "verbose: report each query to stdout",
- NULL, &config->verbose);
-
- perf_opt_parse(argc, argv);
-
- if (family != NULL)
- config->family = perf_net_parsefamily(family);
- perf_net_parseserver(config->family, server_name, server_port,
- &config->server_addr);
- perf_net_parselocal(isc_sockaddr_pf(&config->server_addr),
- local_name, local_port, &config->local_addr);
-
- input = perf_datafile_open(mctx, filename);
-
- if (config->maxruns == 0 && config->timelimit == 0)
- config->maxruns = 1;
- perf_datafile_setmaxruns(input, config->maxruns);
-
- if (config->dnssec)
- config->edns = ISC_TRUE;
-
- if (tsigkey != NULL)
- config->tsigkey = perf_dns_parsetsigkey(tsigkey, mctx);
-
- /*
- * If we run more threads than max-qps, some threads will have
- * ->max_qps set to 0, and be unlimited.
- */
- if (config->max_qps > 0 && config->threads > config->max_qps)
- config->threads = config->max_qps;
-
- /*
- * We also can't run more threads than clients.
- */
- if (config->threads > config->clients)
- config->threads = config->clients;
-}
-
-static void
-cleanup(config_t *config)
-{
- unsigned int i;
-
- perf_datafile_close(&input);
- for (i = 0; i < 2; i++) {
- close(threadpipe[i]);
- close(mainpipe[i]);
- close(intrpipe[i]);
- }
- if (config->tsigkey != NULL)
- perf_dns_destroytsigkey(&config->tsigkey);
- isc_mem_destroy(&mctx);
-}
-
-typedef enum {
- prepend_unused,
- append_unused,
- prepend_outstanding,
-} query_move_op;
-
-static inline void
-query_move(threadinfo_t *tinfo, query_info *q, query_move_op op)
-{
- ISC_LIST_UNLINK(*q->list, q, link);
- switch (op) {
- case prepend_unused:
- q->list = &tinfo->unused_queries;
- ISC_LIST_PREPEND(tinfo->unused_queries, q, link);
- break;
- case append_unused:
- q->list = &tinfo->unused_queries;
- ISC_LIST_APPEND(tinfo->unused_queries, q, link);
- break;
- case prepend_outstanding:
- q->list = &tinfo->outstanding_queries;
- ISC_LIST_PREPEND(tinfo->outstanding_queries, q, link);
- break;
- }
-}
-
-static inline isc_uint64_t
-num_outstanding(const stats_t *stats)
-{
- return stats->num_sent - stats->num_completed - stats->num_timedout;
-}
-
-static void
-wait_for_start(void)
-{
- LOCK(&start_lock);
- while (!started)
- WAIT(&start_cond, &start_lock);
- UNLOCK(&start_lock);
-}
-
-static void *
-do_send(void *arg)
-{
- threadinfo_t *tinfo;
- const config_t *config;
- const times_t *times;
- stats_t *stats;
- unsigned int max_packet_size;
- isc_buffer_t msg;
- isc_uint64_t now, run_time, req_time;
- char input_data[MAX_INPUT_DATA];
- isc_buffer_t lines;
- isc_region_t used;
- query_info *q;
- int qid;
- unsigned char packet_buffer[MAX_EDNS_PACKET];
- unsigned char *base;
- unsigned int length;
- int n;
- isc_result_t result;
-
- tinfo = (threadinfo_t *) arg;
- config = tinfo->config;
- times = tinfo->times;
- stats = &tinfo->stats;
- max_packet_size = config->edns ? MAX_EDNS_PACKET : MAX_UDP_PACKET;
- isc_buffer_init(&msg, packet_buffer, max_packet_size);
- isc_buffer_init(&lines, input_data, sizeof(input_data));
-
- wait_for_start();
- now = get_time();
- while (!interrupted && now < times->stop_time) {
- /* Avoid flooding the network too quickly. */
- if (stats->num_sent < tinfo->max_outstanding &&
- stats->num_sent % 2 == 1)
- {
- if (stats->num_completed == 0)
- usleep(1000);
- else
- sleep(0);
- now = get_time();
- }
-
- /* Rate limiting */
- if (tinfo->max_qps > 0) {
- run_time = now - times->start_time;
- req_time = (MILLION * stats->num_sent) /
- tinfo->max_qps;
- if (req_time > run_time) {
- usleep(req_time - run_time);
- now = get_time();
- continue;
- }
- }
-
- LOCK(&tinfo->lock);
-
- /* Limit in-flight queries */
- if (num_outstanding(stats) >= tinfo->max_outstanding) {
- TIMEDWAIT(&tinfo->cond, &tinfo->lock,
- &times->stop_time_ns, NULL);
- UNLOCK(&tinfo->lock);
- now = get_time();
- continue;
- }
-
- q = ISC_LIST_HEAD(tinfo->unused_queries);
- query_move(tinfo, q, prepend_outstanding);
- q->timestamp = ISC_UINT64_MAX;
- q->sock = tinfo->socks[tinfo->current_sock++ % tinfo->nsocks];
-
- UNLOCK(&tinfo->lock);
-
- isc_buffer_clear(&lines);
- result = perf_datafile_next(input, &lines, config->updates);
- if (result != ISC_R_SUCCESS) {
- if (result == ISC_R_INVALIDFILE)
- perf_log_fatal("input file contains no data");
- break;
- }
-
- qid = q - tinfo->queries;
- isc_buffer_usedregion(&lines, &used);
- isc_buffer_clear(&msg);
- result = perf_dns_buildrequest(tinfo->dnsctx,
- (isc_textregion_t *) &used,
- qid, config->edns,
- config->dnssec, config->tsigkey,
- &msg);
- if (result != ISC_R_SUCCESS) {
- LOCK(&tinfo->lock);
- query_move(tinfo, q, prepend_unused);
- UNLOCK(&tinfo->lock);
- now = get_time();
- continue;
- }
-
- base = isc_buffer_base(&msg);
- length = isc_buffer_usedlength(&msg);
-
- now = get_time();
- if (config->verbose) {
- q->desc = strdup(lines.base);
- if (q->desc == NULL)
- perf_log_fatal("out of memory");
- }
- q->timestamp = now;
-
- stats->num_sent++;
-
- n = sendto(q->sock, base, length, 0,
- &config->server_addr.type.sa,
- config->server_addr.length);
- if (n < 0 || (unsigned int) n != length) {
- perf_log_warning("failed to send packet: %s",
- strerror(errno));
- LOCK(&tinfo->lock);
- query_move(tinfo, q, prepend_unused);
- UNLOCK(&tinfo->lock);
- stats->num_sent--;
- continue;
- }
-
- stats->total_request_size += length;
- }
- tinfo->done_send_time = get_time();
- tinfo->done_sending = ISC_TRUE;
- write(mainpipe[1], "", 1);
- return NULL;
-}
-
-static void
-process_timeouts(threadinfo_t *tinfo, isc_uint64_t now)
-{
- struct query_info *q;
- const config_t *config;
-
- config = tinfo->config;
-
- /* Avoid locking unless we need to. */
- q = ISC_LIST_TAIL(tinfo->outstanding_queries);
- if (q == NULL || q->timestamp > now ||
- now - q->timestamp < config->timeout)
- return;
-
- LOCK(&tinfo->lock);
-
- do {
- query_move(tinfo, q, append_unused);
-
- tinfo->stats.num_timedout++;
-
- if (q->desc != NULL) {
- perf_log_printf("> T %s", q->desc);
- } else {
- perf_log_printf("[Timeout] %s timed out: msg id %u",
- config->updates ? "Update" : "Query",
- (unsigned int)(q - tinfo->queries));
- }
- q = ISC_LIST_TAIL(tinfo->outstanding_queries);
- } while (q != NULL && q->timestamp < now &&
- now - q->timestamp >= config->timeout);
-
- UNLOCK(&tinfo->lock);
-}
-
-typedef struct {
- int sock;
- isc_uint16_t qid;
- isc_uint16_t rcode;
- unsigned int size;
- isc_uint64_t when;
- isc_uint64_t sent;
- isc_boolean_t unexpected;
- isc_boolean_t short_response;
- char *desc;
-} received_query_t;
-
-static isc_boolean_t
-recv_one(threadinfo_t *tinfo, int which_sock,
- unsigned char *packet_buffer, unsigned int packet_size,
- received_query_t *recvd, int *saved_errnop)
-{
- isc_uint16_t *packet_header;
- int s;
- isc_uint64_t now;
- int n;
-
- packet_header = (isc_uint16_t *) packet_buffer;
-
- s = tinfo->socks[which_sock];
- n = recv(s, packet_buffer, packet_size, 0);
- now = get_time();
- if (n < 0) {
- *saved_errnop = errno;
- return ISC_FALSE;
- }
- recvd->sock = s;
- recvd->qid = ntohs(packet_header[0]);
- recvd->rcode = ntohs(packet_header[1]) & 0xF;
- recvd->size = n;
- recvd->when = now;
- recvd->sent = 0;
- recvd->unexpected = ISC_FALSE;
- recvd->short_response = ISC_TF(n < 4);
- recvd->desc = NULL;
- return ISC_TRUE;
-}
-
-static inline void
-bit_set(unsigned char *bits, unsigned int bit)
-{
- unsigned int shift, mask;
-
- shift = 7 - (bit % 8);
- mask = 1 << shift;
-
- bits[bit / 8] |= mask;
-}
-
-static inline isc_boolean_t
-bit_check(unsigned char *bits, unsigned int bit)
-{
- unsigned int shift;
-
- shift = 7 - (bit % 8);
-
- if ((bits[bit / 8] >> shift) & 0x01)
- return ISC_TRUE;
- return ISC_FALSE;
-}
-
-static void *
-do_recv(void *arg)
-{
- threadinfo_t *tinfo;
- stats_t *stats;
- unsigned char packet_buffer[MAX_EDNS_PACKET];
- received_query_t recvd[RECV_BATCH_SIZE];
- unsigned int nrecvd;
- int saved_errno;
- unsigned char socketbits[MAX_SOCKETS / 8];
- isc_uint64_t now, latency;
- query_info *q;
- unsigned int current_socket, last_socket;
- unsigned int i, j;
-
- tinfo = (threadinfo_t *) arg;
- stats = &tinfo->stats;
-
- wait_for_start();
- now = get_time();
- last_socket = 0;
- while (!interrupted) {
- process_timeouts(tinfo, now);
-
- /*
- * If we're done sending and either all responses have been
- * received, stop.
- */
- if (tinfo->done_sending && num_outstanding(stats) == 0)
- break;
-
- /*
- * Try to receive a few packets, so that we can process them
- * atomically.
- */
- saved_errno = 0;
- memset(socketbits, 0, sizeof(socketbits));
- for (i = 0; i < RECV_BATCH_SIZE; i++) {
- for (j = 0; j < tinfo->nsocks; j++) {
- current_socket = (j + last_socket) %
- tinfo->nsocks;
- if (bit_check(socketbits, current_socket))
- continue;
- if (recv_one(tinfo, current_socket,
- packet_buffer,
- sizeof(packet_buffer),
- &recvd[i], &saved_errno))
- {
- last_socket = (current_socket + 1);
- break;
- }
- bit_set(socketbits, current_socket);
- if (saved_errno != EAGAIN)
- break;
- }
- if (j == tinfo->nsocks)
- break;
- }
- nrecvd = i;
-
- /* Do all of the processing that requires the lock */
- LOCK(&tinfo->lock);
- for (i = 0; i < nrecvd; i++) {
- if (recvd[i].short_response)
- continue;
-
- q = &tinfo->queries[recvd[i].qid];
- if (q->list != &tinfo->outstanding_queries ||
- q->timestamp == ISC_UINT64_MAX ||
- q->sock != recvd[i].sock)
- {
- recvd[i].unexpected = ISC_TRUE;
- continue;
- }
- query_move(tinfo, q, append_unused);
- recvd[i].sent = q->timestamp;
- recvd[i].desc = q->desc;
- q->desc = NULL;
- }
- SIGNAL(&tinfo->cond);
- UNLOCK(&tinfo->lock);
-
- /* Now do the rest of the processing unlocked */
- for (i = 0; i < nrecvd; i++) {
- if (recvd[i].short_response) {
- perf_log_warning("received short response");
- continue;
- }
- if (recvd[i].unexpected) {
- perf_log_warning("received a response with an "
- "unexpected (maybe timed out) "
- "id: %u", recvd[i].qid);
- continue;
- }
- latency = recvd[i].when - recvd[i].sent;
- if (recvd[i].desc != NULL) {
- perf_log_printf(
- "> %s %s %u.%06u",
- perf_dns_rcode_strings[recvd[i].rcode],
- recvd[i].desc,
- (unsigned int)(latency / MILLION),
- (unsigned int)(latency % MILLION));
- free(recvd[i].desc);
- }
-
- stats->num_completed++;
- stats->total_response_size += recvd[i].size;
- stats->rcodecounts[recvd[i].rcode]++;
- stats->latency_sum += latency;
- stats->latency_sum_squares += (latency * latency);
- if (latency < stats->latency_min ||
- stats->num_completed == 1)
- stats->latency_min = latency;
- if (latency > stats->latency_max)
- stats->latency_max = latency;
- }
-
- if (nrecvd > 0)
- tinfo->last_recv = recvd[nrecvd - 1].when;
-
- /*
- * If there was an error, handle it (by either ignoring it,
- * blocking, or exiting).
- */
- if (nrecvd < RECV_BATCH_SIZE) {
- if (saved_errno == EINTR) {
- continue;
- } else if (saved_errno == EAGAIN) {
- perf_os_waituntilanyreadable(
- tinfo->socks,
- tinfo->nsocks,
- threadpipe[0],
- TIMEOUT_CHECK_TIME);
- now = get_time();
- continue;
- } else {
- perf_log_fatal("failed to receive packet: %s",
- strerror(saved_errno));
- }
- }
- }
-
- return NULL;
-}
-
-static void *
-do_interval_stats(void *arg)
-{
- threadinfo_t *tinfo;
- stats_t total;
- isc_uint64_t now;
- isc_uint64_t last_interval_time;
- isc_uint64_t last_completed;
- isc_uint64_t interval_time;
- isc_uint64_t num_completed;
- double qps;
-
- tinfo = arg;
- last_interval_time = tinfo->times->start_time;
- last_completed = 0;
-
- wait_for_start();
- while (perf_os_waituntilreadable(threadpipe[0], threadpipe[0],
- tinfo->config->stats_interval) ==
- ISC_R_TIMEDOUT)
- {
- now = get_time();
- sum_stats(tinfo->config, &total);
- interval_time = now - last_interval_time;
- num_completed = total.num_completed - last_completed;
- qps = num_completed / (((double)interval_time) / MILLION);
- perf_log_printf("%u.%06u: %.6lf",
- (unsigned int)(now / MILLION),
- (unsigned int)(now % MILLION), qps);
- last_interval_time = now;
- last_completed = total.num_completed;
- }
-
- return NULL;
-}
-
-static void
-cancel_queries(threadinfo_t *tinfo)
-{
- struct query_info *q;
-
- while (ISC_TRUE) {
- q = ISC_LIST_TAIL(tinfo->outstanding_queries);
- if (q == NULL)
- break;
- query_move(tinfo, q, append_unused);
-
- if (q->timestamp == ISC_UINT64_MAX)
- continue;
-
- tinfo->stats.num_interrupted++;
- if (q->desc != NULL) {
- perf_log_printf("> I %s", q->desc);
- free(q->desc);
- q->desc = NULL;
- }
- }
-}
-
-static isc_uint32_t
-per_thread(isc_uint32_t total, isc_uint32_t nthreads, unsigned int offset)
-{
- isc_uint32_t value;
-
- value = total / nthreads;
- if (value % nthreads > offset)
- value++;
- return value;
-}
-
-static void
-threadinfo_init(threadinfo_t *tinfo, const config_t *config,
- const times_t *times)
-{
- unsigned int offset, socket_offset, i;
-
- memset(tinfo, 0, sizeof(*tinfo));
- MUTEX_INIT(&tinfo->lock);
- COND_INIT(&tinfo->cond);
-
- ISC_LIST_INIT(tinfo->outstanding_queries);
- ISC_LIST_INIT(tinfo->unused_queries);
- for (i = 0; i < NQIDS; i++) {
- ISC_LINK_INIT(&tinfo->queries[i], link);
- ISC_LIST_APPEND(tinfo->unused_queries,
- &tinfo->queries[i], link);
- tinfo->queries[i].list = &tinfo->unused_queries;
- }
-
- offset = tinfo - threads;
-
- tinfo->dnsctx = perf_dns_createctx(config->updates);
-
- tinfo->config = config;
- tinfo->times = times;
-
- /*
- * Compute per-thread limits based on global values.
- */
- tinfo->max_outstanding = per_thread(config->max_outstanding,
- config->threads, offset);
- tinfo->max_qps = per_thread(config->max_qps, config->threads, offset);
- tinfo->nsocks = per_thread(config->clients, config->threads, offset);
-
- /*
- * We can't have more than 64k outstanding queries per thread.
- */
- if (tinfo->max_outstanding > NQIDS)
- tinfo->max_outstanding = NQIDS;
-
- if (tinfo->nsocks > MAX_SOCKETS)
- tinfo->nsocks = MAX_SOCKETS;
-
- tinfo->socks = isc_mem_get(mctx, tinfo->nsocks * sizeof(int));
- if (tinfo->socks == NULL)
- perf_log_fatal("out of memory");
- socket_offset = 0;
- for (i = 0; i < offset; i++)
- socket_offset += threads[i].nsocks;
- for (i = 0; i < tinfo->nsocks; i++)
- tinfo->socks[i] = perf_net_opensocket(&config->server_addr,
- &config->local_addr,
- socket_offset++,
- config->bufsize);
- tinfo->current_sock = 0;
-
- THREAD(&tinfo->receiver, do_recv, tinfo);
- THREAD(&tinfo->sender, do_send, tinfo);
-}
-
-static void
-threadinfo_stop(threadinfo_t *tinfo)
-{
- SIGNAL(&tinfo->cond);
- JOIN(tinfo->sender, NULL);
- JOIN(tinfo->receiver, NULL);
-}
-
-static void
-threadinfo_cleanup(threadinfo_t *tinfo, times_t *times)
-{
- unsigned int i;
-
- if (interrupted)
- cancel_queries(tinfo);
- for (i = 0; i < tinfo->nsocks; i++)
- close(tinfo->socks[i]);
- isc_mem_put(mctx, tinfo->socks, tinfo->nsocks * sizeof(int));
- perf_dns_destroyctx(&tinfo->dnsctx);
- if (tinfo->last_recv > times->end_time)
- times->end_time = tinfo->last_recv;
-}
-
-int
-main(int argc, char **argv)
-{
- config_t config;
- times_t times;
- stats_t total_stats;
- threadinfo_t stats_thread;
- unsigned int i;
- isc_result_t result;
-
- printf("DNS Performance Testing Tool\n"
- "Nominum Version " VERSION "\n\n");
-
- setup(argc, argv, &config);
-
- if (pipe(threadpipe) < 0 || pipe(mainpipe) < 0 ||
- pipe(intrpipe) < 0)
- perf_log_fatal("creating pipe");
-
- perf_datafile_setpipefd(input, threadpipe[0]);
-
- perf_os_blocksignal(SIGINT, ISC_TRUE);
-
- print_initial_status(&config);
-
- threads = isc_mem_get(mctx, config.threads * sizeof(threadinfo_t));
- if (threads == NULL)
- perf_log_fatal("out of memory");
- for (i = 0; i < config.threads; i++)
- threadinfo_init(&threads[i], &config, &times);
- if (config.stats_interval > 0) {
- stats_thread.config = &config;
- stats_thread.times = &times;
- THREAD(&stats_thread.sender, do_interval_stats, &stats_thread);
- }
-
- times.start_time = get_time();
- if (config.timelimit > 0)
- times.stop_time = times.start_time + config.timelimit;
- else
- times.stop_time = ISC_UINT64_MAX;
- times.stop_time_ns.tv_sec = times.stop_time / MILLION;
- times.stop_time_ns.tv_nsec = (times.stop_time % MILLION) * 1000;
-
- LOCK(&start_lock);
- started = ISC_TRUE;
- BROADCAST(&start_cond);
- UNLOCK(&start_lock);
-
- perf_os_handlesignal(SIGINT, handle_sigint);
- perf_os_blocksignal(SIGINT, ISC_FALSE);
- result = perf_os_waituntilreadable(mainpipe[0], intrpipe[0],
- times.stop_time - times.start_time);
- if (result == ISC_R_CANCELED)
- interrupted = ISC_TRUE;
-
- times.end_time = get_time();
-
- write(threadpipe[1], "", 1);
- for (i = 0; i < config.threads; i++)
- threadinfo_stop(&threads[i]);
- if (config.stats_interval > 0)
- JOIN(stats_thread.sender, NULL);
-
- for (i = 0; i < config.threads; i++)
- threadinfo_cleanup(&threads[i], &times);
-
- print_final_status(&config);
-
- sum_stats(&config, &total_stats);
- print_statistics(&config, &times, &total_stats);
-
- isc_mem_put(mctx, threads, config.threads * sizeof(threadinfo_t));
- cleanup(&config);
-
- return (0);
-}
diff --git a/contrib/dnsperf-2.1.0.0-1/doc/caching-dns-performance.pdf b/contrib/dnsperf-2.1.0.0-1/doc/caching-dns-performance.pdf
deleted file mode 100644
index 613a45c0..00000000
--- a/contrib/dnsperf-2.1.0.0-1/doc/caching-dns-performance.pdf
+++ /dev/null
Binary files differ
diff --git a/contrib/dnsperf-2.1.0.0-1/doc/dnsperf.pdf b/contrib/dnsperf-2.1.0.0-1/doc/dnsperf.pdf
deleted file mode 100644
index 89f1e1d8..00000000
--- a/contrib/dnsperf-2.1.0.0-1/doc/dnsperf.pdf
+++ /dev/null
Binary files differ
diff --git a/contrib/dnsperf-2.1.0.0-1/doc/resperf.pdf b/contrib/dnsperf-2.1.0.0-1/doc/resperf.pdf
deleted file mode 100644
index 7383d238..00000000
--- a/contrib/dnsperf-2.1.0.0-1/doc/resperf.pdf
+++ /dev/null
Binary files differ
diff --git a/contrib/dnsperf-2.1.0.0-1/install-sh b/contrib/dnsperf-2.1.0.0-1/install-sh
deleted file mode 100755
index 058b26c8..00000000
--- a/contrib/dnsperf-2.1.0.0-1/install-sh
+++ /dev/null
@@ -1,250 +0,0 @@
-#! /bin/sh
-#
-# install - install a program, script, or datafile
-# This comes from X11R5 (mit/util/scripts/install.sh).
-#
-# Copyright 1991 by the Massachusetts Institute of Technology
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of M.I.T. not be used in advertising or
-# publicity pertaining to distribution of the software without specific,
-# written prior permission. M.I.T. makes no representations about the
-# suitability of this software for any purpose. It is provided "as is"
-# without express or implied warranty.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch. It can only install one file at a time, a restriction
-# shared with many OS's install programs.
-
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-transformbasename=""
-transform_arg=""
-instcmd="$mvprog"
-chmodcmd="$chmodprog 0755"
-chowncmd=""
-chgrpcmd=""
-stripcmd=""
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=""
-dst=""
-dir_arg=""
-
-while [ x"$1" != x ]; do
- case $1 in
- -c) instcmd="$cpprog"
- shift
- continue;;
-
- -d) dir_arg=true
- shift
- continue;;
-
- -m) chmodcmd="$chmodprog $2"
- shift
- shift
- continue;;
-
- -o) chowncmd="$chownprog $2"
- shift
- shift
- continue;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift
- shift
- continue;;
-
- -s) stripcmd="$stripprog"
- shift
- continue;;
-
- -t=*) transformarg=`echo $1 | sed 's/-t=//'`
- shift
- continue;;
-
- -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
- shift
- continue;;
-
- *) if [ x"$src" = x ]
- then
- src=$1
- else
- # this colon is to work around a 386BSD /bin/sh bug
- :
- dst=$1
- fi
- shift
- continue;;
- esac
-done
-
-if [ x"$src" = x ]
-then
- echo "install: no input file specified"
- exit 1
-else
- true
-fi
-
-if [ x"$dir_arg" != x ]; then
- dst=$src
- src=""
-
- if [ -d $dst ]; then
- instcmd=:
- else
- instcmd=mkdir
- fi
-else
-
-# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
-# might cause directories to be created, which would be especially bad
-# if $src (and thus $dsttmp) contains '*'.
-
- if [ -f $src -o -d $src ]
- then
- true
- else
- echo "install: $src does not exist"
- exit 1
- fi
-
- if [ x"$dst" = x ]
- then
- echo "install: no destination specified"
- exit 1
- else
- true
- fi
-
-# If destination is a directory, append the input filename; if your system
-# does not like double slashes in filenames, you may need to add some logic
-
- if [ -d $dst ]
- then
- dst="$dst"/`basename $src`
- else
- true
- fi
-fi
-
-## this sed command emulates the dirname command
-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
-
-# Make sure that the destination directory exists.
-# this part is taken from Noah Friedman's mkinstalldirs script
-
-# Skip lots of stat calls in the usual case.
-if [ ! -d "$dstdir" ]; then
-defaultIFS='
-'
-IFS="${IFS-${defaultIFS}}"
-
-oIFS="${IFS}"
-# Some sh's can't handle IFS=/ for some reason.
-IFS='%'
-set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
-IFS="${oIFS}"
-
-pathcomp=''
-
-while [ $# -ne 0 ] ; do
- pathcomp="${pathcomp}${1}"
- shift
-
- if [ ! -d "${pathcomp}" ] ;
- then
- $mkdirprog "${pathcomp}"
- else
- true
- fi
-
- pathcomp="${pathcomp}/"
-done
-fi
-
-if [ x"$dir_arg" != x ]
-then
- $doit $instcmd $dst &&
-
- if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
- if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
- if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
- if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
-else
-
-# If we're going to rename the final executable, determine the name now.
-
- if [ x"$transformarg" = x ]
- then
- dstfile=`basename $dst`
- else
- dstfile=`basename $dst $transformbasename |
- sed $transformarg`$transformbasename
- fi
-
-# don't allow the sed command to completely eliminate the filename
-
- if [ x"$dstfile" = x ]
- then
- dstfile=`basename $dst`
- else
- true
- fi
-
-# Make a temp file name in the proper directory.
-
- dsttmp=$dstdir/#inst.$$#
-
-# Move or copy the file name to the temp name
-
- $doit $instcmd $src $dsttmp &&
-
- trap "rm -f ${dsttmp}" 0 &&
-
-# and set any options; do chmod last to preserve setuid bits
-
-# If any of these fail, we abort the whole thing. If we want to
-# ignore errors from any of these, just make sure not to ignore
-# errors from the above "$doit $instcmd $src $dsttmp" command.
-
- if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
- if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
- if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
- if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
-
-# Now rename the file to the real destination.
-
- $doit $rmcmd -f $dstdir/$dstfile &&
- $doit $mvcmd $dsttmp $dstdir/$dstfile
-
-fi &&
-
-
-exit 0
diff --git a/contrib/dnsperf-2.1.0.0-1/log.c b/contrib/dnsperf-2.1.0.0-1/log.c
deleted file mode 100644
index 531080b6..00000000
--- a/contrib/dnsperf-2.1.0.0-1/log.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2011 - 2015 Nominum, Inc.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose with or without fee is hereby granted,
- * provided that the above copyright notice and this permission notice
- * appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <pthread.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "log.h"
-#include "util.h"
-
-pthread_mutex_t log_lock = PTHREAD_MUTEX_INITIALIZER;
-
-static void
-vlog(FILE *stream, const char *prefix, const char *fmt, va_list args)
-{
- LOCK(&log_lock);
- fflush(stdout);
- if (prefix != NULL)
- fprintf(stream, "%s: ", prefix);
- vfprintf(stream, fmt, args);
- fprintf(stream, "\n");
- UNLOCK(&log_lock);
-}
-
-void
-perf_log_printf(const char *fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
- vlog(stdout, NULL, fmt, args);
-}
-
-void
-perf_log_fatal(const char *fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
- vlog(stderr, "Error", fmt, args);
- exit(1);
-}
-
-void
-perf_log_warning(const char *fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
- vlog(stderr, "Warning", fmt, args);
-}
diff --git a/contrib/dnsperf-2.1.0.0-1/log.h b/contrib/dnsperf-2.1.0.0-1/log.h
deleted file mode 100644
index d95df0cc..00000000
--- a/contrib/dnsperf-2.1.0.0-1/log.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2011 - 2015 Nominum, Inc.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose with or without fee is hereby granted,
- * provided that the above copyright notice and this permission notice
- * appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <isc/types.h>
-
-#ifndef PERF_LOG_H
-#define PERF_LOG_H 1
-
-void
-perf_log_printf(const char *fmt, ...);
-
-void
-perf_log_fatal(const char *fmt, ...);
-
-void
-perf_log_warning(const char *fmt, ...);
-
-#endif
diff --git a/contrib/dnsperf-2.1.0.0-1/net.c b/contrib/dnsperf-2.1.0.0-1/net.c
deleted file mode 100644
index 8d31c2aa..00000000
--- a/contrib/dnsperf-2.1.0.0-1/net.c
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright (C) 2000, 2001 Nominum, Inc.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 2004 - 2015 Nominum, Inc.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose with or without fee is hereby granted,
- * provided that the above copyright notice and this permission notice
- * appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <isc/result.h>
-#include <isc/sockaddr.h>
-
-#include <bind9/getaddresses.h>
-
-#include "log.h"
-#include "net.h"
-#include "opt.h"
-
-int
-perf_net_parsefamily(const char *family)
-{
- if (family == NULL || strcmp(family, "any") == 0)
- return AF_UNSPEC;
- else if (strcmp(family, "inet") == 0)
- return AF_INET;
-#ifdef AF_INET6
- else if (strcmp(family, "inet6") == 0)
- return AF_INET6;
-#endif
- else {
- fprintf(stderr, "invalid family %s\n", family);
- perf_opt_usage();
- exit(1);
- }
-}
-
-void
-perf_net_parseserver(int family, const char *name, unsigned int port,
- isc_sockaddr_t *addr)
-{
- isc_sockaddr_t addrs[8];
- int count, i;
- isc_result_t result;
-
- if (port == 0) {
- fprintf(stderr, "server port cannot be 0\n");
- perf_opt_usage();
- exit(1);
- }
-
- count = 0;
- result = bind9_getaddresses(name, port, addrs, 8, &count);
- if (result == ISC_R_SUCCESS) {
- for (i = 0; i < count; i++) {
- if (isc_sockaddr_pf(&addrs[i]) == family ||
- family == AF_UNSPEC)
- {
- *addr = addrs[i];
- return;
- }
- }
- }
-
- fprintf(stderr, "invalid server address %s\n", name);
- perf_opt_usage();
- exit(1);
-}
-
-void
-perf_net_parselocal(int family, const char *name, unsigned int port,
- isc_sockaddr_t *addr)
-{
- struct in_addr in4a;
- struct in6_addr in6a;
-
- if (name == NULL) {
- isc_sockaddr_anyofpf(addr, family);
- isc_sockaddr_setport(addr, port);
- } else if (inet_pton(AF_INET, name, &in4a) == 1) {
- isc_sockaddr_fromin(addr, &in4a, port);
- } else if (inet_pton(AF_INET6, name, &in6a) == 1) {
- isc_sockaddr_fromin6(addr, &in6a, port);
- } else {
- fprintf(stderr, "invalid local address %s\n", name);
- perf_opt_usage();
- exit(1);
- }
-}
-
-int
-perf_net_opensocket(const isc_sockaddr_t *server, const isc_sockaddr_t *local,
- unsigned int offset, int bufsize)
-{
- int family;
- int sock;
- isc_sockaddr_t tmp;
- int port;
- int ret;
- int flags;
-
- family = isc_sockaddr_pf(server);
-
- if (isc_sockaddr_pf(local) != family)
- perf_log_fatal("server and local addresses have "
- "different families");
-
- sock = socket(family, SOCK_DGRAM, 0);
- if (sock == -1)
- perf_log_fatal("Error: socket: %s\n", strerror(errno));
-
-#if defined(AF_INET6) && defined(IPV6_V6ONLY)
- if (family == AF_INET6) {
- int on = 1;
-
- if (setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY,
- &on, sizeof(on)) == -1) {
- perf_log_warning("setsockopt(IPV6_V6ONLY) failed");
- }
- }
-#endif
-
- tmp = *local;
- port = isc_sockaddr_getport(&tmp);
- if (port != 0 && offset != 0) {
- port += offset;
- if (port >= 0xFFFF)
- perf_log_fatal("port %d out of range", port);
- isc_sockaddr_setport(&tmp, port);
- }
-
- if (bind(sock, &tmp.type.sa, tmp.length) == -1)
- perf_log_fatal("bind: %s\n", strerror(errno));
-
- if (bufsize > 0) {
- bufsize *= 1024;
-
- ret = setsockopt(sock, SOL_SOCKET, SO_RCVBUF,
- &bufsize, sizeof(bufsize));
- if (ret < 0)
- perf_log_warning("setsockbuf(SO_RCVBUF) failed");
-
- ret = setsockopt(sock, SOL_SOCKET, SO_SNDBUF,
- &bufsize, sizeof(bufsize));
- if (ret < 0)
- perf_log_warning("setsockbuf(SO_SNDBUF) failed");
- }
-
- flags = fcntl(sock, F_GETFL, 0);
- if (flags < 0)
- perf_log_fatal("fcntl(F_GETFL)");
- ret = fcntl(sock, F_SETFL, flags | O_NONBLOCK);
- if (ret < 0)
- perf_log_fatal("fcntl(F_SETFL)");
-
- return sock;
-}
diff --git a/contrib/dnsperf-2.1.0.0-1/net.h b/contrib/dnsperf-2.1.0.0-1/net.h
deleted file mode 100644
index 1ea0d4f9..00000000
--- a/contrib/dnsperf-2.1.0.0-1/net.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2000, 2001 Nominum, Inc.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 2004 - 2015 Nominum, Inc.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose with or without fee is hereby granted,
- * provided that the above copyright notice and this permission notice
- * appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef PERF_NET_H
-#define PERF_NET_H 1
-
-int
-perf_net_parsefamily(const char *family);
-
-void
-perf_net_parseserver(int family, const char *name, unsigned int port,
- isc_sockaddr_t *addr);
-
-void
-perf_net_parselocal(int family, const char *name, unsigned int port,
- isc_sockaddr_t *addr);
-
-int
-perf_net_opensocket(const isc_sockaddr_t *server, const isc_sockaddr_t *local,
- unsigned int offset, int bufsize);
-
-#endif
diff --git a/contrib/dnsperf-2.1.0.0-1/opt.c b/contrib/dnsperf-2.1.0.0-1/opt.c
deleted file mode 100644
index 7fe46bad..00000000
--- a/contrib/dnsperf-2.1.0.0-1/opt.c
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Copyright (C) 2012 - 2015 Nominum, Inc.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose with or without fee is hereby granted,
- * provided that the above copyright notice and this permission notice
- * appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <getopt.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <netinet/in.h>
-
-#include <isc/file.h>
-#include <isc/parseint.h>
-#include <isc/result.h>
-
-#include "log.h"
-#include "opt.h"
-#include "util.h"
-
-#define MAX_OPTS 64
-#define LINE_LENGTH 80
-
-typedef struct {
- char c;
- perf_opttype_t type;
- const char *desc;
- const char *help;
- const char *defval;
- char defvalbuf[32];
- union {
- void *valp;
- char **stringp;
- isc_boolean_t *boolp;
- unsigned int *uintp;
- isc_uint64_t *uint64p;
- double *doublep;
- in_port_t *portp;
- } u;
-} opt_t;
-
-static opt_t opts[MAX_OPTS];
-static unsigned int nopts;
-static char optstr[MAX_OPTS * 2 + 2];
-static const char *progname;
-
-void
-perf_opt_add(char c, perf_opttype_t type, const char *desc, const char *help,
- const char *defval, void *valp)
-{
- opt_t *opt;
- char s[3];
-
- if (nopts == MAX_OPTS)
- perf_log_fatal("too many defined options");
- opt = &opts[nopts++];
- opt->c = c;
- opt->type = type;
- opt->desc = desc;
- opt->help = help;
- if (defval != NULL) {
- strncpy(opt->defvalbuf, defval, sizeof(opt->defvalbuf));
- opt->defval = opt->defvalbuf;
- } else {
- opt->defval = NULL;
- }
- opt->u.valp = valp;
-
- sprintf(s, "%c%s", c, (type == perf_opt_boolean ? "" : ":"));
- strcat(optstr, s);
-}
-
-void
-perf_opt_usage(void)
-{
- unsigned int prefix_len, position, arg_len, i, j;
-
- prefix_len = fprintf(stderr, "Usage: %s", progname);
- position = prefix_len;
- for (i = 0; i < nopts; i++) {
- arg_len = 6;
- if (opts[i].desc != NULL)
- arg_len += strlen(opts[i].desc) + 1;
- if (LINE_LENGTH - position - 1 < arg_len) {
- fprintf(stderr, "\n");
- for (j = 0; j < prefix_len; j++)
- fprintf(stderr, " ");
- position = prefix_len;
- }
- fprintf(stderr, " [-%c", opts[i].c);
- if (opts[i].desc != NULL)
- fprintf(stderr, " %s", opts[i].desc);
- fprintf(stderr, "]");
- position += arg_len;
- }
- fprintf(stderr, "\n");
-
- for (i = 0; i < nopts; i++) {
- fprintf(stderr, " -%c %s", opts[i].c, opts[i].help);
- if (opts[i].defval)
- fprintf(stderr, " (default: %s)", opts[i].defval);
- fprintf(stderr, "\n");
- }
-}
-
-static isc_uint32_t
-parse_uint(const char *desc, const char *str,
- unsigned int min, unsigned int max)
-{
- isc_uint32_t val;
- isc_result_t result;
-
- val = 0;
- result = isc_parse_uint32(&val, str, 10);
- if (result != ISC_R_SUCCESS || val < min || val > max) {
- fprintf(stderr, "invalid %s: %s\n", desc, str);
- perf_opt_usage();
- exit(1);
- }
- return val;
-}
-
-static isc_uint64_t
-parse_timeval(const char *desc, const char *str)
-{
- const char *s;
- char c;
- isc_boolean_t seen_dot = ISC_FALSE;
-
- s = str;
- while (*s != 0) {
- c = *s++;
- if (c == '.') {
- if (seen_dot)
- goto fail;
- seen_dot = ISC_TRUE;
- } else if (c < '0' || c > '9') {
- goto fail;
- }
- }
-
- return MILLION * atof(str);
- fail:
- fprintf(stderr, "invalid %s: %s\n", desc, str);
- perf_opt_usage();
- exit(1);
-}
-
-static double
-parse_double(const char *desc, const char *str) {
- char c;
- int index = 0;
- isc_boolean_t seen_dot = ISC_FALSE;
-
- while (str[index] != 0) {
- c = str[index];
- if (c == '.') {
- if (seen_dot)
- goto fail;
- seen_dot = ISC_TRUE;
- } else if (c < '0' || c > '9') {
- goto fail;
- }
- index++;
- }
-
- return atof(str);
- fail:
- fprintf(stderr, "invalid %s: %s\n", desc, str);
- perf_opt_usage();
- exit(1);
-}
-
-void
-perf_opt_parse(int argc, char **argv)
-{
- int c;
- opt_t *opt;
- unsigned int i;
-
- progname = isc_file_basename(argv[0]);
-
- perf_opt_add('h', perf_opt_boolean, NULL, "print this help",
- NULL, NULL);
-
- while ((c = getopt(argc, argv, optstr)) != -1) {
- for (i = 0; i < nopts; i++) {
- if (opts[i].c == c)
- break;
- }
- if (i == nopts) {
- perf_opt_usage();
- exit(1);
- }
- if (c == 'h') {
- perf_opt_usage();
- exit(0);
- }
- opt = &opts[i];
- switch (opt->type) {
- case perf_opt_string:
- *opt->u.stringp = optarg;
- break;
- case perf_opt_boolean:
- *opt->u.boolp = ISC_TRUE;
- break;
- case perf_opt_uint:
- *opt->u.uintp = parse_uint(opt->desc, optarg,
- 1, 0xFFFFFFFF);
- break;
- case perf_opt_timeval:
- *opt->u.uint64p = parse_timeval(opt->desc, optarg);
- break;
- case perf_opt_double:
- *opt->u.doublep = parse_double(opt->desc, optarg);
- break;
- case perf_opt_port:
- *opt->u.portp = parse_uint(opt->desc, optarg,
- 0, 0xFFFF);
- break;
- }
- }
- if (optind != argc) {
- fprintf(stderr, "unexpected argument %s\n", argv[optind]);
- perf_opt_usage();
- exit(1);
- }
-}
diff --git a/contrib/dnsperf-2.1.0.0-1/opt.h b/contrib/dnsperf-2.1.0.0-1/opt.h
deleted file mode 100644
index 45dced36..00000000
--- a/contrib/dnsperf-2.1.0.0-1/opt.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2012 - 2015 Nominum, Inc.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose with or without fee is hereby granted,
- * provided that the above copyright notice and this permission notice
- * appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef PERF_OPT_H
-#define PERF_OPT_H 1
-
-typedef enum {
- perf_opt_string,
- perf_opt_boolean,
- perf_opt_uint,
- perf_opt_timeval,
- perf_opt_double,
- perf_opt_port,
-} perf_opttype_t;
-
-void
-perf_opt_add(char c, perf_opttype_t type, const char *desc, const char *help,
- const char *defval, void *valp);
-
-void
-perf_opt_usage(void);
-
-void
-perf_opt_parse(int argc, char **argv);
-
-#endif
diff --git a/contrib/dnsperf-2.1.0.0-1/os.c b/contrib/dnsperf-2.1.0.0-1/os.c
deleted file mode 100644
index 99234b4c..00000000
--- a/contrib/dnsperf-2.1.0.0-1/os.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (C) 2011 - 2015 Nominum, Inc.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose with or without fee is hereby granted,
- * provided that the above copyright notice and this permission notice
- * appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <errno.h>
-#include <signal.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <sys/select.h>
-
-#include <isc/result.h>
-#include <isc/types.h>
-
-#include "log.h"
-#include "os.h"
-#include "util.h"
-
-void
-perf_os_blocksignal(int sig, isc_boolean_t block)
-{
- sigset_t sset;
- int op;
-
- op = block ? SIG_BLOCK : SIG_UNBLOCK;
-
- if (sigemptyset(&sset) < 0 ||
- sigaddset(&sset, sig) < 0 ||
- pthread_sigmask(op, &sset, NULL) < 0)
- perf_log_fatal("pthread_sigmask: %s", strerror(errno));
-}
-
-void
-perf_os_handlesignal(int sig, void (*handler)(int))
-{
- struct sigaction sa;
-
- memset(&sa, 0, sizeof(sa));
- sa.sa_handler = handler;
-
- if (sigfillset(&sa.sa_mask) < 0 ||
- sigaction(sig, &sa, NULL) < 0)
- perf_log_fatal("sigaction: %s", strerror(errno));
-}
-
-isc_result_t
-perf_os_waituntilreadable(int fd, int pipe_fd, isc_int64_t timeout)
-{
- fd_set read_fds;
- int maxfd;
- struct timeval tv, *tvp;
- int n;
-
- FD_ZERO(&read_fds);
- FD_SET(fd, &read_fds);
- FD_SET(pipe_fd, &read_fds);
- maxfd = pipe_fd > fd ? pipe_fd : fd;
- if (timeout < 0) {
- tvp = NULL;
- } else {
- tv.tv_sec = timeout / MILLION;
- tv.tv_usec = timeout % MILLION;
- tvp = &tv;
- }
- n = select(maxfd + 1, &read_fds, NULL, NULL, tvp);
- if (n < 0) {
- if (errno != EINTR)
- perf_log_fatal("select() failed");
- return (ISC_R_CANCELED);
- } else if (FD_ISSET(fd, &read_fds)) {
- return (ISC_R_SUCCESS);
- } else if (FD_ISSET(pipe_fd, &read_fds)) {
- return (ISC_R_CANCELED);
- } else {
- return (ISC_R_TIMEDOUT);
- }
-}
-
-isc_result_t
-perf_os_waituntilanyreadable(int *fds, unsigned int nfds, int pipe_fd,
- isc_int64_t timeout)
-{
- fd_set read_fds;
- unsigned int i;
- int maxfd;
- struct timeval tv, *tvp;
- int n;
-
- FD_ZERO(&read_fds);
- maxfd = 0;
- for (i = 0; i < nfds; i++) {
- FD_SET(fds[i], &read_fds);
- if (fds[i] > maxfd)
- maxfd = fds[i];
- }
- FD_SET(pipe_fd, &read_fds);
- if (pipe_fd > maxfd)
- maxfd = pipe_fd;
-
- if (timeout < 0) {
- tvp = NULL;
- } else {
- tv.tv_sec = timeout / MILLION;
- tv.tv_usec = timeout % MILLION;
- tvp = &tv;
- }
- n = select(maxfd + 1, &read_fds, NULL, NULL, tvp);
- if (n < 0) {
- if (errno != EINTR)
- perf_log_fatal("select() failed");
- return (ISC_R_CANCELED);
- } else if (n == 0) {
- return (ISC_R_TIMEDOUT);
- } else if (FD_ISSET(pipe_fd, &read_fds)) {
- return (ISC_R_CANCELED);
- } else {
- return (ISC_R_SUCCESS);
- }
-}
diff --git a/contrib/dnsperf-2.1.0.0-1/os.h b/contrib/dnsperf-2.1.0.0-1/os.h
deleted file mode 100644
index 6a75f4d4..00000000
--- a/contrib/dnsperf-2.1.0.0-1/os.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2011 - 2015 Nominum, Inc.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose with or without fee is hereby granted,
- * provided that the above copyright notice and this permission notice
- * appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef PERF_OS_H
-#define PERF_OS_H 1
-
-void
-perf_os_blocksignal(int sig, isc_boolean_t block);
-
-void
-perf_os_handlesignal(int sig, void (*handler)(int));
-
-isc_result_t
-perf_os_waituntilreadable(int fd, int pipe_fd, isc_int64_t timeout);
-
-isc_result_t
-perf_os_waituntilanyreadable(int *fds, unsigned int nfds, int pipe_fd,
- isc_int64_t timeout);
-
-#endif
diff --git a/contrib/dnsperf-2.1.0.0-1/resperf-report b/contrib/dnsperf-2.1.0.0-1/resperf-report
deleted file mode 100755
index 46f49b9b..00000000
--- a/contrib/dnsperf-2.1.0.0-1/resperf-report
+++ /dev/null
@@ -1,96 +0,0 @@
-#!/bin/sh
-#
-# Driver script to run resperf and generate an HTML report of
-# the results, with graphs.
-#
-
-# Program locations - change these if not in $PATH
-resperf=resperf
-gnuplot=gnuplot
-
-# The gnuplot terminal type. This determines the image format for the
-# plots; "png" or "gif" will both work as long as the corresponding
-# terminal support is compiled into your copy of gnuplot.
-terminal=png
-
-# Create a unique ID for this report
-id=`date '+%Y%m%d-%H%M'`
-
-# Set up file names
-reportfile="$id.html"
-outputfile="$id.output"
-plotfile="$id.gnuplot"
-rate_graph="$id.rate.$terminal"
-latency_graph="$id.latency.$terminal"
-
-# Run the test
-$resperf -P "$plotfile" "$@" >"$outputfile" 2>&1 ||
- { echo "`basename $0`: error running resperf:" >&2;
- cat $outputfile >&2;
- exit 1;
- }
-
-# Create plots
-
-if
- $gnuplot <<EOF
-set terminal $terminal
-set output "$rate_graph"
-set title "Query / response / failure rate"
-set key top left
-set xlabel "Time (seconds)"
-set yrange [0:]
-plot \
-"$plotfile" using 1:3 title "Queries sent per second" with lines, \
-"$plotfile" using 1:4 title "Total responses received per second" with lines, \
-"$plotfile" using 1:5 title "Failure responses received per second" with lines
-EOF
-then
- :
-else
- echo "`basename $0`: error running gnuplot" >&2; exit 1;
-fi
-
-if
- $gnuplot <<EOF
-set terminal $terminal
-set output "$latency_graph"
-set title "Latency"
-set key top left
-set xlabel "Time (seconds)"
-set yrange [0:]
-plot \
-"$plotfile" using 1:6 title "Average latency (seconds)" with lines
-EOF
-then
- :
-else
- echo "`basename $0`: error running gnuplot" >&2; exit 1;
-fi
-
-# Generate the report
-
-exec >"$reportfile"
-
-cat <<EOF
-<html><head></head><body>
-<h1>Resperf report $id</h1>
-<h2>Resperf output</h2>
-<pre>
-EOF
-cat "$outputfile"
-cat <<EOF
-</pre>
-EOF
-
-cat <<EOF
-<h2>Plots</h2>
-<p>
-<img src="$rate_graph" />
-<img src="$latency_graph" />
-</p>
-</body></html>
-EOF
-
-echo "Done, report is in $reportfile" >&2
-
diff --git a/contrib/dnsperf-2.1.0.0-1/resperf.1 b/contrib/dnsperf-2.1.0.0-1/resperf.1
deleted file mode 100644
index b5dc8e14..00000000
--- a/contrib/dnsperf-2.1.0.0-1/resperf.1
+++ /dev/null
@@ -1,598 +0,0 @@
-.\" Copyright (C) Nominum, Inc.
-.\"
-.\" All rights reserved.
-.TH RESPERF 1 "Dec 9, 2015" Nominum Nominum
-.SH NAME
-\%resperf - test the resolution performance of a caching DNS server
-.SH SYNOPSIS
-.hy 0
-.ad l
-\fBresperf\-report\fR\ [\fB\-a\ \fIlocal_addr\fB\fR]
-[\fB\-d\ \fIdatafile\fB\fR]
-[\fB\-s\ \fIserver_addr\fB\fR]
-[\fB\-p\ \fIport\fB\fR]
-[\fB\-x\ \fIlocal_port\fB\fR]
-[\fB\-t\ \fItimeout\fB\fR]
-[\fB\-b\ \fIbufsize\fB\fR]
-[\fB\-f\ \fIfamily\fB\fR]
-[\fB\-e\fR]
-[\fB\-D\fR]
-[\fB\-y\ \fI[alg:]name:secret\fB\fR]
-[\fB\-h\fR]
-[\fB\-i\ \fIinterval\fB\fR]
-[\fB\-m\ \fImax_qps\fB\fR]
-[\fB\-r\ \fIrampup_time\fB\fR]
-[\fB\-c\ \fIconstant_traffic_time\fB\fR]
-[\fB\-L\ \fImax_loss\fB\fR]
-[\fB\-C\ \fIclients\fB\fR]
-[\fB\-q\ \fImax_outstanding\fB\fR]
-.ad
-.hy
-.hy 0
-.ad l
-
-\fBresperf\fR\ [\fB\-a\ \fIlocal_addr\fB\fR]
-[\fB\-d\ \fIdatafile\fB\fR]
-[\fB\-s\ \fIserver_addr\fB\fR]
-[\fB\-p\ \fIport\fB\fR]
-[\fB\-x\ \fIlocal_port\fB\fR]
-[\fB\-t\ \fItimeout\fB\fR]
-[\fB\-b\ \fIbufsize\fB\fR]
-[\fB\-f\ \fIfamily\fB\fR]
-[\fB\-e\fR]
-[\fB\-D\fR]
-[\fB\-y\ \fI[alg:]name:secret\fB\fR]
-[\fB\-h\fR]
-[\fB\-i\ \fIinterval\fB\fR]
-[\fB\-m\ \fImax_qps\fB\fR]
-[\fB\-P\ \fIplot_data_file\fB\fR]
-[\fB\-r\ \fIrampup_time\fB\fR]
-[\fB\-c\ \fIconstant_traffic_time\fB\fR]
-[\fB\-L\ \fImax_loss\fB\fR]
-[\fB\-C\ \fIclients\fB\fR]
-[\fB\-q\ \fImax_outstanding\fB\fR]
-.ad
-.hy
-.SH DESCRIPTION
-\fBresperf\fR is a companion tool to \fBdnsperf\fR. \fBdnsperf\fR was
-primarily designed for benchmarking authoritative servers, and it does not
-work well with caching servers that are talking to the live Internet. One
-reason for this is that dnsperf uses a "self-pacing" approach, which is
-based on the assumption that you can keep the server 100% busy simply by
-sending it a small burst of back-to-back queries to fill up network buffers,
-and then send a new query whenever you get a response back. This approach
-works well for authoritative servers that process queries in order and one
-at a time; it also works pretty well for a caching server in a closed
-laboratory environment talking to a simulated Internet that's all on the
-same LAN. Unfortunately, it does not work well with a caching server talking
-to the actual Internet, which may need to work on thousands of queries in
-parallel to achieve its maximum throughput. There have been numerous
-attempts to use dnsperf (or its predecessor, queryperf) for benchmarking
-live caching servers, usually with poor results. Therefore, a separate tool
-designed specifically for caching servers is needed.
-.SS "How resperf works"
-Unlike the "self-pacing" approach of dnsperf, resperf works by sending DNS
-queries at a controlled, steadily increasing rate. By default, resperf will
-send traffic for 60 seconds, linearly increasing the amount of traffic from
-zero to 100,000 queries per second.
-
-During the test, resperf listens for responses from the server and keeps
-track of response rates, failure rates, and latencies. It will also continue
-listening for responses for an additional 40 seconds after it has stopped
-sending traffic, so that there is time for the server to respond to the last
-queries sent. This time period was chosen to be longer than the overall
-query timeout of both Nominum Vantio and current versions of BIND.
-
-If the test is successful, the query rate will at some point exceed the
-capacity of the server and queries will be dropped, causing the response
-rate to stop growing or even decrease as the query rate increases.
-
-The result of the test is a set of measurements of the query rate, response
-rate, failure response rate, and average query latency as functions of time.
-.SS "What you will need"
-Benchmarking a live caching server is serious business. A fast caching
-server like Nominum Vantio running on a XEON server, resolving a mix of
-cacheable and non-cacheable queries typical of ISP customer traffic, is
-capable of resolving over 100,000 queries per second. In the process, it
-will send more than 40,000 queries per second to authoritative servers on
-the Internet, and receive responses to most of them. Assuming an average
-request size of 50 bytes and a response size of 150 bytes, this amounts to
-some 16 Mbps of outgoing and 48 Mbps of incoming traffic. If your Internet
-connection can't handle the bandwidth, you will end up measuring the speed
-of the connection, not the server, and may saturate the connection causing a
-degradation in service for other users.
-
-Make sure there is no stateful firewall between the server and the Internet,
-because most of them can't handle the amount of UDP traffic the test will
-generate and will end up dropping packets, skewing the test results. Some
-will even lock up or crash.
-
-You should run resperf on a machine separate from the server under test, on
-the same LAN. Preferably, this should be a Gigabit Ethernet network. The
-machine running resperf should be at least as fast as the machine being
-tested; otherwise, it may end up being the bottleneck.
-
-There should be no other applications running on the machine running
-resperf. Performance testing at the traffic levels involved is essentially a
-hard real-time application - consider the fact that at a query rate of
-100,000 queries per second, if resperf gets delayed by just 1/100 of a
-second, 1000 incoming UDP packets will arrive in the meantime. This is more
-than most operating systems will buffer, which means packets will be
-dropped.
-
-Because the granularity of the timers provided by operating systems is
-typically too coarse to accurately schedule packet transmissions at
-sub-millisecond intervals, resperf will busy-wait between packet
-transmissions, constantly polling for responses in the meantime. Therefore,
-it is normal for resperf to consume 100% CPU during the whole test run, even
-during periods where query rates are relatively low.
-
-You will also need a set of test queries in the \fBdnsperf\fR file format.
-See the \fBdnsperf\fR man page for instructions on how to construct this
-query file. To make the test as realistic as possible, the queries should be
-derived from recorded production client DNS traffic, without removing
-duplicate queries or other filtering. With the default settings, resperf
-will use up to 3 million queries in each test run.
-
-If the caching server to be tested has a configurable limit on the number of
-simultaneous resolutions, like the \fBmax\-recursive\-clients\fR statement
-in Nominum Vantio or the \fBrecursive\-clients\fR option in BIND 9, you will
-probably have to increase it. As a starting point, we recommend a value of
-10000 for Nominum Vantio and 100000 for BIND 9. Should the limit be reached,
-it will show up in the plots as an increase in the number of failure
-responses.
-
-The server being tested should be restarted at the beginning of each test to
-make sure it is starting with an empty cache. If the cache already contains
-data from a previous test run that used the same set of queries, almost all
-queries will be answered from the cache, yielding inflated performance
-numbers.
-
-To use the \fBresperf\-report\fR script, you need to have \fBgnuplot\fR
-installed. Make sure your installed version of \fBgnuplot\fR supports the
-png terminal driver. If your \fBgnuplot\fR doesn't support png but does
-support gif, you can change the line saying terminal=png in the
-\fBresperf\-report\fR script to terminal=gif.
-.SS "Running the test"
-Resperf is typically invoked via the \fBresperf\-report\fR script, which
-will run \fBresperf\fR with its output redirected to a file and then
-automatically generate an illustrated report in HTML format. Command line
-arguments given to resperf-report will be passed on unchanged to resperf.
-
-When running resperf-report, you will need to specify at least the server IP
-address and the query data file. A typical invocation will look like
-.RS
-.hy 0
-
-.nf
-resperf\-report \-s 10.0.0.2 \-d queryfile
-.fi
-.hy
-.RE
-
-With default settings, the test run will take at most 100 seconds (60
-seconds of ramping up traffic and then 40 seconds of waiting for responses),
-but in practice, the 60-second traffic phase will usually be cut short. To
-be precise, resperf can transition from the traffic-sending phase to the
-waiting-for-responses phase in three different ways:
-.IP \(bu 2
-Running for the full allotted time and successfully reaching the maximum
-query rate (by default, 60 seconds and 100,000 qps, respectively). Since
-this is a very high query rate, this will rarely happen (with today's
-hardware); one of the other two conditions listed below will usually occur
-first.
-.IP \(bu 2
-Exceeding 65,536 outstanding queries. This often happens as a result of
-(successfully) exceeding the capacity of the server being tested, causing
-the excess queries to be dropped. The limit of 65,536 queries comes from the
-number of possible values for the ID field in the DNS packet. Resperf needs
-to allocate a unique ID for each outstanding query, and is therefore unable
-to send further queries if the set of possible IDs is exhausted.
-.IP \(bu 2
-When resperf finds itself unable to send queries fast enough. Resperf will
-notice if it is falling behind in its scheduled query transmissions, and if
-this backlog reaches 1000 queries, it will print a message like "Fell behind
-by 1000 queries" (or whatever the actual number is at the time) and stop
-sending traffic.
-.PP
-Regardless of which of the above conditions caused the traffic-sending phase
-of the test to end, you should examine the resulting plots to make sure the
-server's response rate is flattening out toward the end of the test. If it
-is not, then you are not loading the server enough. If you are getting the
-"Fell behind" message, make sure that the machine running resperf is fast
-enough and has no other applications running.
-
-You should also monitor the CPU usage of the server under test. It should
-reach close to 100% CPU at the point of maximum traffic; if it does not, you
-most likely have a bottleneck in some other part of your test setup, for
-example, your external Internet connection.
-
-The report generated by \fBresperf\-report\fR will be stored with a unique
-file name based on the current date and time, e.g.,
-\fI20060812-1550.html\fR. The PNG images of the plots and other auxiliary
-files will be stored in separate files beginning with the same date-time
-string. To view the report, simply open the \fI.html\fR file in a web
-browser.
-
-If you need to copy the report to a separate machine for viewing, make sure
-to copy the .png files along with the .html file (or simply copy all the
-files, e.g., using scp 20060812-1550.* host:directory/).
-.SS "Interpreting the report"
-The \fI.html\fR file produced by \fBresperf\-report\fR consists of two
-sections. The first section, "Resperf output", contains output from the
-\fBresperf\fR program such as progress messages, a summary of the command
-line arguments, and summary statistics. The second section, "Plots",
-contains two plots generated by \fBgnuplot\fR: "Query/response/failure rate"
-and "Latency".
-
-The "Query/response/failure rate" plot contains three graphs. The "Queries
-sent per second" graph shows the amount of traffic being sent to the server;
-this should be very close to a straight diagonal line, reflecting the linear
-ramp-up of traffic.
-
-The "Total responses received per second" graph shows how many of the
-queries received a response from the server. All responses are counted,
-whether successful (NOERROR or NXDOMAIN) or not (e.g., SERVFAIL).
-
-The "Failure responses received per second" graph shows how many of the
-queries received a failure response. A response is considered to be a
-failure if its RCODE is neither NOERROR nor NXDOMAIN.
-
-By visually inspecting the graphs, you can get an idea of how the server
-behaves under increasing load. The "Total responses received per second"
-graph will initially closely follow the "Queries sent per second" graph
-(often rendering it invisible in the plot as the two graphs are plotted on
-top of one another), but when the load exceeds the server's capacity, the
-"Total responses received per second" graph may diverge from the "Queries
-sent per second" graph and flatten out, indicating that some of the queries
-are being dropped.
-
-The "Failure responses received per second" graph will normally show a
-roughly linear ramp close to the bottom of the plot with some random
-fluctuation, since typical query traffic will contain some small percentage
-of failing queries randomly interspersed with the successful ones. As the
-total traffic increases, the number of failures will increase
-proportionally.
-
-If the "Failure responses received per second" graph turns sharply upwards,
-this can be another indication that the load has exceeded the server's
-capacity. This will happen if the server reacts to overload by sending
-SERVFAIL responses rather than by dropping queries. Since Nominum Vantio and
-BIND 9 will both respond with SERVFAIL when they exceed their
-\fBmax\-recursive\-clients\fR or \fBrecursive\-clients\fR limit,
-respectively, a sudden increase in the number of failures could mean that
-the limit needs to be increased.
-
-The "Latency" plot contains a single graph marked "Average latency". This
-shows how the latency varies during the course of the test. Typically, the
-latency graph will exhibit a downwards trend because the cache hit rate
-improves as ever more responses are cached during the test, and the latency
-for a cache hit is much smaller than for a cache miss. The latency graph is
-provided as an aid in determining the point where the server gets
-overloaded, which can be seen as a sharp upwards turn in the graph. The
-latency graph is not intended for making absolute latency measurements or
-comparisons between servers; the latencies shown in the graph are not
-representative of production latencies due to the initially empty cache and
-the deliberate overloading of the server towards the end of the test.
-
-Note that all measurements are displayed on the plot at the horizontal
-position corresponding to the point in time when the query was sent, not
-when the response (if any) was received. This makes it it easy to compare
-the query and response rates; for example, if no queries are dropped, the
-query and response graphs will be identical. As another example, if the plot
-shows 10% failure responses at t=5 seconds, this means that 10% of the
-queries sent at t=5 seconds eventually failed, not that 10% of the responses
-received at t=5 seconds were failures.
-.SS "Determining the server's maximum throughput"
-Often, the goal of running \fBresperf\fR is to determine the server's
-maximum throughput, in other words, the number of queries per second it is
-capable of handling. This is not always an easy task, because as a server is
-driven into overload, the service it provides may deteriorate gradually, and
-this deterioration can manifest itself either as queries being dropped, as
-an increase in the number of SERVFAIL responses, or an increase in latency.
-The maximum throughput may be defined as the highest level of traffic at
-which the server still provides an acceptable level of service, but that
-means you first need to decide what an acceptable level of service means in
-terms of packet drop percentage, SERVFAIL percentage, and latency.
-
-The summary statistics in the "Resperf output" section of the report
-contains a "Maximum throughput" value which by default is determined from
-the maximum rate at which the server was able to return responses, without
-regard to the number of queries being dropped or failing at that point. This
-method of throughput measurement has the advantage of simplicity, but it may
-or may not be appropriate for your needs; the reported value should always
-be validated by a visual inspection of the graphs to ensure that service has
-not already deteriorated unacceptably before the maximum response rate is
-reached. It may also be helpful to look at the "Lost at that point" value in
-the summary statistics; this indicates the percentage of the queries that
-was being dropped at the point in the test when the maximum throughput was
-reached.
-
-Alternatively, you can make resperf report the throughput at the point in
-the test where the percentage of queries dropped exceeds a given limit (or
-the maximum as above if the limit is never exceeded). This can be a more
-realistic indication of how much the server can be loaded while still
-providing an acceptable level of service. This is done using the \fB\-L\fR
-command line option; for example, specifying \fB\-L 10\fR makes resperf
-report the highest throughput reached before the server starts dropping more
-than 10% of the queries.
-
-There is no corresponding way of automatically constraining results based on
-the number of failed queries, because unlike dropped queries, resolution
-failures will occur even when the the server is not overloaded, and the
-number of such failures is heavily dependent on the query data and network
-conditions. Therefore, the plots should be manually inspected to ensure that
-there is not an abnormal number of failures.
-.SH "GENERATING CONSTANT TRAFFIC"
-In addition to ramping up traffic linearly, \fBresperf\fR also has the
-capability to send a constant stream of traffic. This can be useful when
-using \fBresperf\fR for tasks other than performance measurement; for
-example, it can be used to "soak test" a server by subjecting it to a
-sustained load for an extended period of time.
-
-To generate a constant traffic load, use the \fB\-c\fR command line option,
-together with the \fB\-m\fR option which specifies the desired constant
-query rate. For example, to send 10000 queries per second for an hour, use
-\fB\-m 10000 \-c 3600\fR. This will include the usual 30-second gradual
-ramp-up of traffic at the beginning, which may be useful to avoid initially
-overwhelming a server that is starting with an empty cache. To start the
-onslaught of traffic instantly, use \fB\-m 10000 \-c 3600 \-r 0\fR.
-
-To be precise, \fBresperf\fR will do a linear ramp-up of traffic from 0 to
-\fB\-m\fR queries per second over a period of \fB\-r\fR seconds, followed by
-a plateau of steady traffic at \fB\-m\fR queries per second lasting for
-\fB\-c\fR seconds, followed by waiting for responses for an extra 40
-seconds. Either the ramp-up or the plateau can be suppressed by supplying a
-duration of zero seconds with \fB\-r 0\fR and \fB\-c 0\fR, respectively. The
-latter is the default.
-
-Sending traffic at high rates for hours on end will of course require very
-large amounts of input data. Also, a long-running test will generate a large
-amount of plot data, which is kept in memory for the duration of the test.
-To reduce the memory usage and the size of the plot file, consider
-increasing the interval between measurements from the default of 0.5 seconds
-using the \fB\-i\fR option in long-running tests.
-
-When using \fBresperf\fR for long-running tests, it is important that the
-traffic rate specified using the \fB\-m\fR is one that both \fBresperf\fR
-itself and the server under test can sustain. Otherwise, the test is likely
-to be cut short as a result of either running out of query IDs (because of
-large numbers of dropped queries) or of resperf falling behind its
-transmission schedule.
-.SH OPTIONS
-Because the \fBresperf\-report\fR script passes its command line options
-directly to the \fBresperf\fR programs, they both accept the same set of
-options, with one exception: \fBresperf\-report\fR automatically adds an
-appropriate \fB\-P\fR to the \fBresperf\fR command line, and therefore does
-not itself take a \fB\-P\fR option.
-
-\fB-d \fIdatafile\fB\fR
-.br
-.RS
-Specifies the input data file. If not specified, \fBresperf\fR will read
-from standard input.
-.RE
-
-\fB-s \fIserver_addr\fB\fR
-.br
-.RS
-Specifies the name or address of the server to which requests will be sent.
-The default is the loopback address, 127.0.0.1.
-.RE
-
-\fB-p \fIport\fB\fR
-.br
-.RS
-Sets the port on which the DNS packets are sent. If not specified, the
-standard DNS port (53) is used.
-.RE
-
-\fB-a \fIlocal_addr\fB\fR
-.br
-.RS
-Specifies the local address from which to send requests. The default is the
-wildcard address.
-.RE
-
-\fB-x \fIlocal_port\fB\fR
-.br
-.RS
-Specifies the local port from which to send requests. The default is the
-wildcard port (0).
-
-If acting as multiple clients and the wildcard port is used, each client
-will use a different random port. If a port is specified, the clients will
-use a range of ports starting with the specified one.
-.RE
-
-\fB-t \fItimeout\fB\fR
-.br
-.RS
-Specifies the request timeout value, in seconds. \fBresperf\fR will no
-longer wait for a response to a particular request after this many seconds
-have elapsed. The default is 45 seconds.
-
-\fBresperf\fR times out unanswered requests in order to reclaim query IDs so
-that the query ID space will not be exhausted in a long-running test, such
-as when "soak testing" a server for an day with \fB\-m 10000 \-c 86400\fR.
-The timeouts and the ability to tune them are of little use in the more
-typical use case of a performance test lasting only a minute or two.
-
-The default timeout of 45 seconds was chosen to be longer than the query
-timeout of current caching servers. Note that this is longer than the
-corresponding default in \fBdnsperf\fR, because caching servers can take
-many orders of magnitude longer to answer a query than authoritative servers
-do.
-
-If a short timeout is used, there is a possibility that \fBresperf\fR will
-receive a response after the corresponding request has timed out; in this
-case, a message like Warning: Received a response with an unexpected id: 141
-will be printed.
-.RE
-
-\fB-b \fIbufsize\fB\fR
-.br
-.RS
-Sets the size of the socket's send and receive buffers, in kilobytes. If not
-specified, the operating system's default is used.
-.RE
-
-\fB-f \fIfamily\fB\fR
-.br
-.RS
-Specifies the address family used for sending DNS packets. The possible
-values are "inet", "inet6", or "any". If "any" (the default value) is
-specified, \fBresperf\fR will use whichever address family is appropriate
-for the server it is sending packets to.
-.RE
-
-\fB-e\fR
-.br
-.RS
-Enables EDNS0 [RFC2671], by adding an OPT record to all packets sent.
-.RE
-
-\fB-D\fR
-.br
-.RS
-Sets the DO (DNSSEC OK) bit [RFC3225] in all packets sent. This also enables
-EDNS0, which is required for DNSSEC.
-.RE
-
-\fB-y \fI[alg:]name:secret\fB\fR
-.br
-.RS
-Add a TSIG record [RFC2845] to all packets sent, using the specified TSIG
-key algorithm, name and secret, where the algorithm defaults to hmac-md5 and
-the secret is expressed as a base-64 encoded string.
-.RE
-
-\fB-h\fR
-.br
-.RS
-Print a usage statement and exit.
-.RE
-
-\fB-i \fIinterval\fB\fR
-.br
-.RS
-Specifies the time interval between data points in the plot file. The
-default is 0.5 seconds.
-.RE
-
-\fB-m \fImax_qps\fB\fR
-.br
-.RS
-Specifies the target maximum query rate (in queries per second). This should
-be higher than the expected maximum throughput of the server being tested.
-Traffic will be ramped up at a linearly increasing rate until this value is
-reached, or until one of the other conditions described in the section
-"Running the test" occurs. The default is 100000 queries per second.
-.RE
-
-\fB-P \fIplot_data_file\fB\fR
-.br
-.RS
-Specifies the name of the plot data file. The default is
-\fIresperf.gnuplot\fR.
-.RE
-
-\fB-r \fIrampup_time\fB\fR
-.br
-.RS
-Specifies the length of time over which traffic will be ramped up. The
-default is 60 seconds.
-.RE
-
-\fB-c \fIconstant_traffic_time\fB\fR
-.br
-.RS
-Specifies the length of time for which traffic will be sent at a constant
-rate following the initial ramp-up. The default is 0 seconds, meaning no
-sending of traffic at a constant rate will be done.
-.RE
-
-\fB-L \fImax_loss\fB\fR
-.br
-.RS
-Specifies the maximum acceptable query loss percentage for purposes of
-determining the maximum throughput value. The default is 100%, meaning that
-\fBresperf\fR will measure the maximum throughput without regard to query
-loss.
-.RE
-
-\fB-C \fIclients\fB\fR
-.br
-.RS
-Act as multiple clients. Requests are sent from multiple sockets. The
-default is to act as 1 client.
-.RE
-
-\fB-q \fImax_outstanding\fB\fR
-.br
-.RS
-Sets the maximum number of outstanding requests. \fBresperf\fR will stop
-ramping up traffic when this many queries are outstanding. The default is
-64k, and the limit is 64k per client.
-.RE
-.SH "THE PLOT DATA FILE"
-The plot data file is written by the \fBresperf\fR program and contains the
-data to be plotted using \fBgnuplot\fR. When running \fBresperf\fR via the
-\fBresperf\-report\fR script, there is no need for the user to deal with
-this file directly, but its format and contents are documented here for
-completeness and in case you wish to run \fBresperf\fR directly and use its
-output for purposes other than viewing it with \fBgnuplot\fR.
-
-The first line of the file is a comment identifying the fields. It may be
-recognized as a comment by its leading hash sign (#).
-
-Subsequent lines contain the actual plot data. For purposes of generating
-the plot data file, the test run is divided into time intervals of 0.5
-seconds (or some other length of time specified with the \fB\-i\fR command
-line option). Each line corresponds to one such interval, and contains the
-following values as floating-point numbers:
-
-\fBTime\fR
-.br
-.RS
-The midpoint of this time interval, in seconds since the beginning of the
-run
-.RE
-
-\fBTarget queries per second\fR
-.br
-.RS
-The number of queries per second scheduled to be sent in this time interval
-.RE
-
-\fBActual queries per second\fR
-.br
-.RS
-The number of queries per second actually sent in this time interval
-.RE
-
-\fBResponses per second\fR
-.br
-.RS
-The number of responses received corresponding to queries sent in this time
-interval, divided by the length of the interval
-.RE
-
-\fBFailures per second\fR
-.br
-.RS
-The number of responses received corresponding to queries sent in this time
-interval and having an RCODE other than NOERROR or NXDOMAIN, divided by the
-length of the interval
-.RE
-
-\fBAverage latency\fR
-.br
-.RS
-The average time between sending the query and receiving a response, for
-queries sent in this time interval
-.RE
-.SH AUTHOR
-Nominum, Inc.
-.SH "SEE ALSO"
-\fBdnsperf\fR(1)
diff --git a/contrib/dnsperf-2.1.0.0-1/resperf.c b/contrib/dnsperf-2.1.0.0-1/resperf.c
deleted file mode 100644
index 4dfbb220..00000000
--- a/contrib/dnsperf-2.1.0.0-1/resperf.c
+++ /dev/null
@@ -1,745 +0,0 @@
-/*
- * Copyright (C) 2000, 2001 Nominum, Inc.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 2004 - 2015 Nominum, Inc.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose with or without fee is hereby granted,
- * provided that the above copyright notice and this permission notice
- * appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/***
- *** DNS Resolution Performance Testing Tool
- ***
- *** Version $Id: resperf.c 263304 2015-12-15 01:14:10Z bwelling $
- ***/
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <sys/time.h>
-
-#include <isc/buffer.h>
-#include <isc/file.h>
-#include <isc/list.h>
-#include <isc/mem.h>
-#include <isc/print.h>
-#include <isc/region.h>
-#include <isc/result.h>
-#include <isc/sockaddr.h>
-#include <isc/types.h>
-
-#include <dns/result.h>
-
-#include "datafile.h"
-#include "dns.h"
-#include "log.h"
-#include "net.h"
-#include "opt.h"
-#include "util.h"
-#include "version.h"
-
-/*
- * Global stuff
- */
-
-#define DEFAULT_SERVER_NAME "127.0.0.1"
-#define DEFAULT_SERVER_PORT 53
-#define DEFAULT_LOCAL_PORT 0
-#define DEFAULT_SOCKET_BUFFER 32
-#define DEFAULT_TIMEOUT 45
-#define DEFAULT_MAX_OUTSTANDING (64 * 1024)
-
-#define MAX_INPUT_DATA (4 * 1024)
-
-struct query_info;
-
-typedef ISC_LIST(struct query_info) query_list;
-
-typedef struct query_info {
- isc_uint64_t sent_timestamp;
- /*
- * This link links the query into the list of outstanding
- * queries or the list of available query IDs.
- */
- ISC_LINK(struct query_info) link;
- /*
- * The list this query is on.
- */
- query_list *list;
-} query_info;
-
-static query_list outstanding_list;
-static query_list instanding_list;
-
-static query_info *queries;
-
-static isc_mem_t *mctx;
-
-static isc_sockaddr_t server_addr;
-static isc_sockaddr_t local_addr;
-static unsigned int nsocks;
-static int *socks;
-
-static isc_uint64_t query_timeout;
-static isc_boolean_t edns;
-static isc_boolean_t dnssec;
-
-static perf_datafile_t *input;
-
-/* The target traffic level at the end of the ramp-up */
-double max_qps = 100000.0;
-
-/* The time period over which we ramp up traffic */
-#define DEFAULT_RAMP_TIME 60
-static isc_uint64_t ramp_time;
-
-/* How long to send constant traffic after the initial ramp-up */
-#define DEFAULT_SUSTAIN_TIME 0
-static isc_uint64_t sustain_time;
-
-/* How long to wait for responses after sending traffic */
-static isc_uint64_t wait_time = 40 * MILLION;
-
-/* Total duration of the traffic-sending part of the test */
-static isc_uint64_t traffic_time;
-
-/* Total duration of the test */
-static isc_uint64_t end_time;
-
-/* Interval between plot data points, in microseconds */
-#define DEFAULT_BUCKET_INTERVAL 0.5
-static isc_uint64_t bucket_interval;
-
-/* The number of plot data points */
-static int n_buckets;
-
-/* The plot data file */
-static const char *plotfile = "resperf.gnuplot";
-
-/* The largest acceptable query loss when reporting max throughput */
-static double max_loss_percent = 100.0;
-
-/* The maximum number of outstanding queries */
-static unsigned int max_outstanding;
-
-static isc_uint64_t num_queries_sent;
-static isc_uint64_t num_queries_outstanding;
-static isc_uint64_t num_responses_received;
-static isc_uint64_t num_queries_timed_out;
-static isc_uint64_t rcodecounts[16];
-
-static isc_uint64_t time_now;
-static isc_uint64_t time_of_program_start;
-static isc_uint64_t time_of_end_of_run;
-
-/*
- * The last plot data point containing actual data; this can
- * be less than than (n_buckets - 1) if the traffic sending
- * phase is cut short
- */
-static int last_bucket_used;
-
-/*
- * The statistics for queries sent during one bucket_interval
- * of the traffic sending phase.
- */
-typedef struct {
- int queries;
- int responses;
- int failures;
- double latency_sum;
-} ramp_bucket;
-
-/* Pointer to array of n_buckets ramp_bucket structures */
-static ramp_bucket *buckets;
-
-enum phase {
- /*
- * The ramp-up phase: we are steadily increasing traffic.
- */
- PHASE_RAMP,
- /*
- * The sustain phase: we are sending traffic at a constant
- * rate.
- */
- PHASE_SUSTAIN,
- /*
- * The wait phase: we have stopped sending queries and are
- * just waiting for any remaining responses.
- */
- PHASE_WAIT
-};
-static enum phase phase = PHASE_RAMP;
-
-/* The time when the sustain/wait phase began */
-static isc_uint64_t sustain_phase_began, wait_phase_began;
-
-static perf_dnstsigkey_t *tsigkey;
-
-static char *
-stringify(double value, int precision)
-{
- static char buf[20];
-
- snprintf(buf, sizeof(buf), "%.*f", precision, value);
- return buf;
-}
-
-static void
-setup(int argc, char **argv)
-{
- const char *family = NULL;
- const char *server_name = DEFAULT_SERVER_NAME;
- in_port_t server_port = DEFAULT_SERVER_PORT;
- const char *local_name = NULL;
- in_port_t local_port = DEFAULT_LOCAL_PORT;
- const char *filename = NULL;
- const char *tsigkey_str = NULL;
- int sock_family;
- unsigned int bufsize;
- unsigned int i;
- isc_result_t result;
-
- result = isc_mem_create(0, 0, &mctx);
- if (result != ISC_R_SUCCESS)
- perf_log_fatal("creating memory context: %s",
- isc_result_totext(result));
-
- dns_result_register();
-
- sock_family = AF_UNSPEC;
- server_port = DEFAULT_SERVER_PORT;
- local_port = DEFAULT_LOCAL_PORT;
- bufsize = DEFAULT_SOCKET_BUFFER;
- query_timeout = DEFAULT_TIMEOUT * MILLION;
- ramp_time = DEFAULT_RAMP_TIME * MILLION;
- sustain_time = DEFAULT_SUSTAIN_TIME * MILLION;
- bucket_interval = DEFAULT_BUCKET_INTERVAL * MILLION;
- max_outstanding = DEFAULT_MAX_OUTSTANDING;
- nsocks = 1;
-
- perf_opt_add('f', perf_opt_string, "family",
- "address family of DNS transport, inet or inet6", "any",
- &family);
- perf_opt_add('s', perf_opt_string, "server_addr",
- "the server to query", DEFAULT_SERVER_NAME, &server_name);
- perf_opt_add('p', perf_opt_port, "port",
- "the port on which to query the server",
- stringify(DEFAULT_SERVER_PORT, 0), &server_port);
- perf_opt_add('a', perf_opt_string, "local_addr",
- "the local address from which to send queries", NULL,
- &local_name);
- perf_opt_add('x', perf_opt_port, "local_port",
- "the local port from which to send queries",
- stringify(DEFAULT_LOCAL_PORT, 0), &local_port);
- perf_opt_add('d', perf_opt_string, "datafile",
- "the input data file", "stdin", &filename);
- perf_opt_add('t', perf_opt_timeval, "timeout",
- "the timeout for query completion in seconds",
- stringify(DEFAULT_TIMEOUT, 0), &query_timeout);
- perf_opt_add('b', perf_opt_uint, "buffer_size",
- "socket send/receive buffer size in kilobytes", NULL,
- &bufsize);
- perf_opt_add('e', perf_opt_boolean, NULL,
- "enable EDNS 0", NULL, &edns);
- perf_opt_add('D', perf_opt_boolean, NULL,
- "set the DNSSEC OK bit (implies EDNS)", NULL, &dnssec);
- perf_opt_add('y', perf_opt_string, "[alg:]name:secret",
- "the TSIG algorithm, name and secret", NULL,
- &tsigkey_str);
- perf_opt_add('i', perf_opt_timeval, "plot_interval",
- "the time interval between plot data points, in seconds",
- stringify(DEFAULT_BUCKET_INTERVAL, 1), &bucket_interval);
- perf_opt_add('m', perf_opt_double, "max_qps",
- "the maximum number of queries per second",
- stringify(max_qps, 0), &max_qps);
- perf_opt_add('P', perf_opt_string, "plotfile",
- "the name of the plot data file", plotfile, &plotfile);
- perf_opt_add('r', perf_opt_timeval, "ramp_time",
- "the ramp-up time in seconds",
- stringify(DEFAULT_RAMP_TIME, 0), &ramp_time);
- perf_opt_add('c', perf_opt_timeval, "constant_traffic_time",
- "how long to send constant traffic, in seconds",
- stringify(DEFAULT_SUSTAIN_TIME, 0), &sustain_time);
- perf_opt_add('L', perf_opt_double, "max_query_loss",
- "the maximum acceptable query loss, in percent",
- stringify(max_loss_percent, 0), &max_loss_percent);
- perf_opt_add('C', perf_opt_uint, "clients",
- "the number of clients to act as", NULL,
- &nsocks);
- perf_opt_add('q', perf_opt_uint, "num_outstanding",
- "the maximum number of queries outstanding",
- stringify(DEFAULT_MAX_OUTSTANDING, 0), &max_outstanding);
-
- perf_opt_parse(argc, argv);
-
- if (max_outstanding > nsocks * DEFAULT_MAX_OUTSTANDING)
- perf_log_fatal("number of outstanding packets (%u) must not "
- "be more than 64K per client", max_outstanding);
-
- if (ramp_time + sustain_time == 0)
- perf_log_fatal("rampup_time and constant_traffic_time must not "
- "both be 0");
-
- ISC_LIST_INIT(outstanding_list);
- ISC_LIST_INIT(instanding_list);
- queries = isc_mem_get(mctx, max_outstanding * sizeof(query_info));
- if (queries == NULL)
- perf_log_fatal("out of memory");
- for (i = 0; i < max_outstanding; i++) {
- ISC_LINK_INIT(&queries[i], link);
- ISC_LIST_APPEND(instanding_list, &queries[i], link);
- queries[i].list = &instanding_list;
- }
-
-
- if (family != NULL)
- sock_family = perf_net_parsefamily(family);
- perf_net_parseserver(sock_family, server_name, server_port,
- &server_addr);
- perf_net_parselocal(isc_sockaddr_pf(&server_addr),
- local_name, local_port, &local_addr);
-
- input = perf_datafile_open(mctx, filename);
-
- if (dnssec)
- edns = ISC_TRUE;
-
- if (tsigkey_str != NULL)
- tsigkey = perf_dns_parsetsigkey(tsigkey_str, mctx);
-
- socks = isc_mem_get(mctx, nsocks * sizeof(int));
- if (socks == NULL)
- perf_log_fatal("out of memory");
- for (i = 0; i < nsocks; i++)
- socks[i] = perf_net_opensocket(&server_addr, &local_addr, i,
- bufsize);
-
-}
-
-static void
-cleanup(void)
-{
- unsigned int i;
-
- perf_datafile_close(&input);
- for (i = 0; i < nsocks; i++)
- (void) close(socks[i]);
- isc_mem_put(mctx, socks, nsocks * sizeof(int));
- isc_mem_put(mctx, queries, max_outstanding * sizeof(query_info));
- isc_mem_put(mctx, buckets, n_buckets * sizeof(ramp_bucket));
-}
-
-/* Find the ramp_bucket for queries sent at time "when" */
-
-static ramp_bucket *
-find_bucket(isc_uint64_t when) {
- isc_uint64_t sent_at = when - time_of_program_start;
- int i = (int) ((n_buckets * sent_at) / traffic_time);
- /*
- * Guard against array bounds violations due to roundoff
- * errors or scheduling jitter
- */
- if (i < 0)
- i = 0;
- if (i > n_buckets - 1)
- i = n_buckets - 1;
- return &buckets[i];
-}
-
-/*
- * print_statistics:
- * Print out statistics based on the results of the test
- */
-static void
-print_statistics(void) {
- int i;
- double max_throughput;
- double loss_at_max_throughput;
- isc_boolean_t first_rcode;
- isc_uint64_t run_time = time_of_end_of_run - time_of_program_start;
-
- printf("\nStatistics:\n\n");
-
- printf(" Queries sent: %" ISC_PRINT_QUADFORMAT "u\n",
- num_queries_sent);
- printf(" Queries completed: %" ISC_PRINT_QUADFORMAT "u\n",
- num_responses_received);
- printf(" Queries lost: %" ISC_PRINT_QUADFORMAT "u\n",
- num_queries_sent - num_responses_received);
- printf(" Response codes: ");
- first_rcode = ISC_TRUE;
- for (i = 0; i < 16; i++) {
- if (rcodecounts[i] == 0)
- continue;
- if (first_rcode)
- first_rcode = ISC_FALSE;
- else
- printf(", ");
- printf("%s %" ISC_PRINT_QUADFORMAT "u (%.2lf%%)",
- perf_dns_rcode_strings[i], rcodecounts[i],
- (rcodecounts[i] * 100.0) / num_responses_received);
- }
- printf("\n");
- printf(" Run time (s): %u.%06u\n",
- (unsigned int)(run_time / MILLION),
- (unsigned int)(run_time % MILLION));
-
- /* Find the maximum throughput, subject to the -L option */
- max_throughput = 0.0;
- loss_at_max_throughput = 0.0;
- for (i = 0; i <= last_bucket_used; i++) {
- ramp_bucket *b = &buckets[i];
- double responses_per_sec =
- b->responses / (bucket_interval / (double) MILLION);
- double loss = b->queries ?
- (b->queries - b->responses) / (double) b->queries : 0.0;
- double loss_percent = loss * 100.0;
- if (loss_percent > max_loss_percent)
- break;
- if (responses_per_sec > max_throughput) {
- max_throughput = responses_per_sec;
- loss_at_max_throughput = loss_percent;
- }
- }
- printf(" Maximum throughput: %.6lf qps\n", max_throughput);
- printf(" Lost at that point: %.2f%%\n", loss_at_max_throughput);
-}
-
-static ramp_bucket *
-init_buckets(int n) {
- ramp_bucket *p;
- int i;
-
- p = isc_mem_get(mctx, n * sizeof(*p));
- if (p == NULL)
- perf_log_fatal("out of memory");
- for (i = 0; i < n; i++) {
- p[i].queries = p[i].responses = p[i].failures = 0;
- p[i].latency_sum = 0.0;
- }
- return p;
-}
-
-/*
- * Send a query based on a line of input.
- * Return ISC_R_NOMORE if we ran out of query IDs.
- */
-static isc_result_t
-do_one_line(isc_buffer_t *lines, isc_buffer_t *msg) {
- query_info *q;
- unsigned int qid;
- unsigned int sock;
- isc_region_t used;
- unsigned char *base;
- unsigned int length;
- isc_result_t result;
-
- isc_buffer_clear(lines);
- result = perf_datafile_next(input, lines, ISC_FALSE);
- if (result != ISC_R_SUCCESS)
- perf_log_fatal("ran out of query data");
- isc_buffer_usedregion(lines, &used);
-
- q = ISC_LIST_HEAD(instanding_list);
- if (! q)
- return (ISC_R_NOMORE);
- qid = (q - queries) / nsocks;
- sock = (q - queries) % nsocks;
-
- isc_buffer_clear(msg);
- result = perf_dns_buildrequest(NULL, (isc_textregion_t *) &used,
- qid, edns, dnssec, tsigkey, msg);
- if (result != ISC_R_SUCCESS)
- return (result);
-
- q->sent_timestamp = time_now;
-
- base = isc_buffer_base(msg);
- length = isc_buffer_usedlength(msg);
- if (sendto(socks[sock], base, length, 0,
- &server_addr.type.sa,
- server_addr.length) < 1)
- {
- perf_log_warning("failed to send packet: %s",
- strerror(errno));
- return (ISC_R_FAILURE);
- }
-
- ISC_LIST_UNLINK(instanding_list, q, link);
- ISC_LIST_PREPEND(outstanding_list, q, link);
- q->list = &outstanding_list;
-
- num_queries_sent++;
- num_queries_outstanding++;
-
- return ISC_R_SUCCESS;
-}
-
-static void
-enter_sustain_phase(void) {
- phase = PHASE_SUSTAIN;
- if (sustain_time != 0.0)
- printf("[Status] Ramp-up done, sending constant traffic\n");
- sustain_phase_began = time_now;
-}
-
-static void
-enter_wait_phase(void) {
- phase = PHASE_WAIT;
- printf("[Status] Waiting for more responses\n");
- wait_phase_began = time_now;
-}
-
-/*
- * try_process_response:
- *
- * Receive from the given socket & process an individual response packet.
- * Remove it from the list of open queries (status[]) and decrement the
- * number of outstanding queries if it matches an open query.
- */
-static void
-try_process_response(unsigned int sockindex) {
- unsigned char packet_buffer[MAX_EDNS_PACKET];
- isc_uint16_t *packet_header;
- isc_uint16_t qid, rcode;
- query_info *q;
- double latency;
- ramp_bucket *b;
- int n;
-
- packet_header = (isc_uint16_t *) packet_buffer;
- n = recvfrom(socks[sockindex], packet_buffer, sizeof(packet_buffer),
- 0, NULL, NULL);
- if (n < 0) {
- if (errno == EAGAIN || errno == EINTR) {
- return;
- } else {
- perf_log_fatal("failed to receive packet: %s",
- strerror(errno));
- }
- } else if (n < 4) {
- perf_log_warning("received short response");
- return;
- }
-
- qid = ntohs(packet_header[0]);
- rcode = ntohs(packet_header[1]) & 0xF;
-
- q = &queries[qid * nsocks + sockindex];
- if (q->list != &outstanding_list) {
- perf_log_warning("received a response with an "
- "unexpected id: %u", qid);
- return;
- }
-
- ISC_LIST_UNLINK(outstanding_list, q, link);
- ISC_LIST_APPEND(instanding_list, q, link);
- q->list = &instanding_list;
-
- num_queries_outstanding--;
-
- latency = (time_now - q->sent_timestamp) / (double)MILLION;
- b = find_bucket(q->sent_timestamp);
- b->responses++;
- if (!(rcode == dns_rcode_noerror || rcode == dns_rcode_nxdomain))
- b->failures++;
- b->latency_sum += latency;
- num_responses_received++;
- rcodecounts[rcode]++;
-}
-
-static void
-retire_old_queries(void)
-{
- query_info *q;
-
- while (ISC_TRUE) {
- q = ISC_LIST_TAIL(outstanding_list);
- if (q == NULL ||
- (time_now - q->sent_timestamp) < query_timeout)
- break;
- ISC_LIST_UNLINK(outstanding_list, q, link);
- ISC_LIST_APPEND(instanding_list, q, link);
- q->list = &instanding_list;
-
- num_queries_outstanding--;
- num_queries_timed_out++;
- }
-}
-
-static inline int
-num_scheduled(isc_uint64_t time_since_start)
-{
- if (phase == PHASE_RAMP) {
- return 0.5 * max_qps *
- (double)time_since_start * time_since_start /
- (ramp_time * MILLION);
- } else { /* PHASE_SUSTAIN */
- return 0.5 * max_qps * (ramp_time / (double)MILLION) +
- max_qps *
- (time_since_start - ramp_time) / (double)MILLION;
- }
-}
-
-int
-main(int argc, char **argv) {
- int i;
- FILE *plotf;
- isc_buffer_t lines, msg;
- char input_data[MAX_INPUT_DATA];
- unsigned char outpacket_buffer[MAX_EDNS_PACKET];
- unsigned int max_packet_size;
- unsigned int current_sock;
- isc_result_t result;
-
- printf("DNS Resolution Performance Testing Tool\n"
- "Nominum Version " VERSION "\n\n");
-
- setup(argc, argv);
-
- isc_buffer_init(&lines, input_data, sizeof(input_data));
-
- max_packet_size = edns ? MAX_EDNS_PACKET : MAX_UDP_PACKET;
- isc_buffer_init(&msg, outpacket_buffer, max_packet_size);
-
- traffic_time = ramp_time + sustain_time;
- end_time = traffic_time + wait_time;
-
- n_buckets = (traffic_time + bucket_interval - 1) / bucket_interval;
- buckets = init_buckets(n_buckets);
-
- time_now = get_time();
- time_of_program_start = time_now;
-
- printf("[Status] Command line: %s", isc_file_basename(argv[0]));
- for (i = 1; i < argc; i++) {
- printf(" %s", argv[i]);
- }
- printf("\n");
-
- printf("[Status] Sending\n");
-
- current_sock = 0;
- for (;;) {
- int should_send;
- isc_uint64_t time_since_start = time_now -
- time_of_program_start;
- switch (phase) {
- case PHASE_RAMP:
- if (time_since_start >= ramp_time)
- enter_sustain_phase();
- break;
- case PHASE_SUSTAIN:
- if (time_since_start >= traffic_time)
- enter_wait_phase();
- break;
- case PHASE_WAIT:
- if (time_since_start >= end_time ||
- ISC_LIST_EMPTY(outstanding_list))
- goto end_loop;
- break;
- }
- if (phase != PHASE_WAIT) {
- should_send = num_scheduled(time_since_start) -
- num_queries_sent;
- if (should_send >= 1000) {
- printf("[Status] Fell behind by %d queries, "
- "ending test at %.0f qps\n",
- should_send,
- (max_qps * time_since_start) /
- ramp_time);
- enter_wait_phase();
- }
- if (should_send > 0) {
- result = do_one_line(&lines, &msg);
- if (result == ISC_R_SUCCESS)
- find_bucket(time_now)->queries++;
- if (result == ISC_R_NOMORE) {
- printf("[Status] Reached %u outstanding queries\n",
- max_outstanding);
- enter_wait_phase();
- }
- }
- }
- try_process_response(current_sock++);
- current_sock = current_sock % nsocks;
- retire_old_queries();
- time_now = get_time();
- }
- end_loop:
- time_now = get_time();
- time_of_end_of_run = time_now;
-
- printf("[Status] Testing complete\n");
-
- plotf = fopen(plotfile, "w");
- if (! plotf) {
- perf_log_fatal("could not open %s: %s", plotfile,
- strerror(errno));
- }
-
- /* Print column headers */
- fprintf(plotf, "# time target_qps actual_qps "
- "responses_per_sec failures_per_sec "
- "avg_latency\n");
-
- /* Don't print unused buckets */
- last_bucket_used = find_bucket(wait_phase_began) - buckets;
-
- /* Don't print a partial bucket at the end */
- if (last_bucket_used > 0)
- --last_bucket_used;
-
- for (i = 0; i <= last_bucket_used; i++) {
- double t = (i + 0.5) * traffic_time /
- (n_buckets * (double)MILLION);
- double ramp_dtime = ramp_time / (double)MILLION;
- double target_qps =
- t <= ramp_dtime ? (t / ramp_dtime) * max_qps : max_qps;
- double latency = buckets[i].responses ?
- buckets[i].latency_sum / buckets[i].responses : 0;
- double interval = bucket_interval / (double) MILLION;
- fprintf(plotf, "%7.3f %8.2f %8.2f %8.2f %8.2f %8.6f\n",
- t,
- target_qps,
- buckets[i].queries / interval,
- buckets[i].responses / interval,
- buckets[i].failures / interval,
- latency);
- }
-
- fclose(plotf);
- print_statistics();
- cleanup();
-
- return 0;
-}
diff --git a/contrib/dnsperf-2.1.0.0-1/util.h b/contrib/dnsperf-2.1.0.0-1/util.h
deleted file mode 100644
index fdaa8eb5..00000000
--- a/contrib/dnsperf-2.1.0.0-1/util.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2012 - 2015 Nominum, Inc.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose with or without fee is hereby granted,
- * provided that the above copyright notice and this permission notice
- * appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <pthread.h>
-#include <string.h>
-
-#include <sys/time.h>
-
-#include <isc/types.h>
-
-#include "log.h"
-
-#ifndef PERF_UTIL_H
-#define PERF_UTIL_H 1
-
-#define MILLION ((isc_uint64_t) 1000000)
-
-#define THREAD(thread, start, arg) do { \
- int __n = pthread_create((thread), NULL, (start), (arg)); \
- if (__n != 0) \
- perf_log_fatal("pthread_create failed: %s", \
- strerror(__n)); \
- } while (0)
-
-#define JOIN(thread, valuep) do { \
- int __n = pthread_join((thread), (valuep)); \
- if (__n != 0) \
- perf_log_fatal("pthread_join failed: %s", \
- strerror(__n)); \
- } while (0)
-
-#define MUTEX_INIT(mutex) do { \
- int __n = pthread_mutex_init((mutex), NULL); \
- if (__n != 0) \
- perf_log_fatal("pthread_mutex_init failed: %s", \
- strerror(__n)); \
- } while (0)
-
-#define MUTEX_DESTROY(mutex) do { \
- int __n = pthread_mutex_destroy((mutex)); \
- if (__n != 0) \
- perf_log_fatal("pthread_mutex_destroy failed: %s", \
- strerror(__n)); \
- } while (0)
-
-#define LOCK(mutex) do { \
- int __n = pthread_mutex_lock((mutex)); \
- if (__n != 0) \
- perf_log_fatal("pthread_mutex_lock failed: %s", \
- strerror(__n)); \
- } while (0)
-
-#define UNLOCK(mutex) do { \
- int __n = pthread_mutex_unlock((mutex)); \
- if (__n != 0) \
- perf_log_fatal("pthread_mutex_unlock failed: %s", \
- strerror(__n)); \
- } while (0)
-
-#define COND_INIT(cond) do { \
- int __n = pthread_cond_init((cond), NULL); \
- if (__n != 0) \
- perf_log_fatal("pthread_cond_init failed: %s", \
- strerror(__n)); \
- } while (0)
-
-#define SIGNAL(cond) do { \
- int __n = pthread_cond_signal((cond)); \
- if (__n != 0) \
- perf_log_fatal("pthread_cond_signal failed: %s", \
- strerror(__n)); \
- } while (0)
-
-#define BROADCAST(cond) do { \
- int __n = pthread_cond_broadcast((cond)); \
- if (__n != 0) \
- perf_log_fatal("pthread_cond_broadcast failed: %s", \
- strerror(__n)); \
- } while (0)
-
-#define WAIT(cond, mutex) do { \
- int __n = pthread_cond_wait((cond), (mutex)); \
- if (__n != 0) \
- perf_log_fatal("pthread_cond_wait failed: %s", \
- strerror(__n)); \
- } while (0)
-
-#define TIMEDWAIT(cond, mutex, when, timedout) do { \
- int __n = pthread_cond_timedwait((cond), (mutex), (when)); \
- isc_boolean_t *res = (timedout); \
- if (__n != 0 && __n != ETIMEDOUT) \
- perf_log_fatal("pthread_cond_timedwait failed: %s", \
- strerror(__n)); \
- if (res != NULL) \
- *res = ISC_TF(__n != 0); \
- } while (0)
-
-static __inline__ isc_uint64_t
-get_time(void)
-{
- struct timeval tv;
- gettimeofday(&tv, NULL);
- return tv.tv_sec * MILLION + tv.tv_usec;
-}
-
-#define SAFE_DIV(n, d) ( (d) == 0 ? 0 : (n) / (d) )
-
-#endif
diff --git a/contrib/dnsperf-2.1.0.0-1/version.h b/contrib/dnsperf-2.1.0.0-1/version.h
deleted file mode 100644
index d39fa0cc..00000000
--- a/contrib/dnsperf-2.1.0.0-1/version.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#ifndef VERSION_H
-
-#define VERSION "2.1.0.0"
-
-#endif
diff --git a/contrib/idn/README.idnkit b/contrib/idn/README.idnkit
deleted file mode 100644
index 42c07244..00000000
--- a/contrib/idn/README.idnkit
+++ /dev/null
@@ -1,96 +0,0 @@
-
- BIND 9 IDN support
-
- Japan Network Information Center (JPNIC)
-
-
-* Compilation & installation
-
-0. Prerequisite
-
-You have to build and install idnkit before building bind9.
-
-1. Running configure script
-
-Run `configure' in the top directory. See `README' for the
-configuration options.
-
-The following four options to `configure' are relevant to IDN. You
-should at least specify `--with-idn' option to enable IDN support.
-
- --with-idn[=IDN_PREFIX]
- To enable IDN support, you have to specify `--with-idn' option.
- The argument IDN_PREFIX is the install prefix of idnkit. If
- IDN_PREFIX is omitted, PREFIX (derived from `--prefix=PREFIX')
- is assumed.
-
- --with-libiconv[=LIBICONV_PREFIX]
- Specify this option if idnkit you have installed links GNU
- libiconv. The argument LIBICONV_PREFIX is install prefix of
- GNU libiconv. If the argument is omitted, PREFIX (derived
- from `--prefix=PREFIX') is assumed.
-
- `--with-libiconv' is shorthand option for GNU libiconv.
-
- --with-libiconv=/usr/local
-
- This is equivalent to:
-
- --with-iconv='-L/usr/local/lib -R/usr/local/lib -liconv'
-
- `--with-libiconv' assumes that your C compiler has `-R'
- option, and that the option adds the specified run-time path
- to an executable binary. If `-R' option of your compiler has
- different meaning, or your compiler lacks the option, you
- should use `--with-iconv' option instead. Binary command
- without run-time path information might be unexecutable.
- In that case, you would see an error message like:
-
- error in loading shared libraries: libiconv.so.2: cannot
- open shared object file
-
- If both `--with-libiconv' and `--with-iconv' options are
- specified, `--with-iconv' is prior to `--with-libiconv'.
-
- --with-iconv=ICONV_LIBSPEC
- If your libc doesn't provide iconv(), you need to specify the
- library containing iconv() with this option. `ICONV_LIBSPEC'
- is the argument(s) to `cc' or `ld' to link the library, for
- example, `--with-iconv="-L/usr/local/lib -liconv"'.
- You don't need to specify the header file directory for "iconv.h"
- to the compiler, as it isn't included directly by bind9.
-
- --with-idnlib=IDN_LIBSPEC
- With this option, you can explicitly specify the argument(s)
- to `cc' or `ld' to link the idnkit's library, `libidnkit'. If
- this option is not specified, `-L${PREFIX}/lib -lidnkit' is
- assumed, where ${PREFIX} is the installation prefix specified
- with `--with-idn' option above. You may need to use this
- option to specify extra arguments, for example,
- `--with-idnlib="-L/usr/local/lib -R/usr/local/lib -lidnkit"'.
-
-Please consult `README' for other configuration options.
-
-Note that if you want to specify some extra header file directories,
-you should use the environment variable STD_CINCLUDES instead of
-CFLAGS, as described in README.
-
-2. Compilation and installation
-
-After running "configure", just do
-
- make
- make install
-
-for compiling and installing.
-
-
-* Contact information
-
-Please see http://www.nic.ad.jp/en/idn/ for the latest news
-about idnkit.
-
-Bug reports and comments on this kit should be sent to
-mdnkit-bugs@nic.ad.jp and idn-cmt@nic.ad.jp, respectively.
-
-; $Id: README.idnkit,v 1.1 2009/12/04 20:14:28 each Exp $
diff --git a/contrib/idn/idnkit-1.0-src/ChangeLog b/contrib/idn/idnkit-1.0-src/ChangeLog
deleted file mode 100644
index 085e3bda..00000000
--- a/contrib/idn/idnkit-1.0-src/ChangeLog
+++ /dev/null
@@ -1,856 +0,0 @@
-2003-03-16
- * idnkit 1.0 release.
-
- * DISTFILES, README, README.ja, INSTALL, INSTALL.ja: delete BIND8,
- Squid and libiconv patches.
-
-2003-03-13
- * wsock/config/idnconf.tcl: change the version number to '1.0'.
-
-2003-03-12
- * Makefile.in, lib/Makefile.in: Add 'make install-config' to
- Makefile target.
-
-2003-03-11
- * patch/bind9/bind-9.2.2-patch: created.
-
-2003-03-06
- * lib/punycode.c: idn__punycode_encode() outputs an error message
- if the input string is over PUNYCODE_MAXINPUT (the value is 3800).
-
-2003-03-05
- * include/idn/api.h, include/idn/checker.h,
- include/idn/nameprep.h, include/idn/res.h, include/idn/version.h,
- lib/Makefile.in, lib/checker.c, lib/idn.conf.sample.in,
- lib/mapper.c, lib/nameprep.c, lib/nameprepdata.c,
- lib/normalizer.c, lib/tests/checker.tsy, lib/tests/mapper.tsy,
- lib/tests/nameprep.tsy, lib/tests/normalizer.tsy,
- man/idn.conf.5.in, tools/idnconv/idnconv.1, wsock/bin/idn.conf:
- Add NAMEPREP version 'RFC3491', and remove 'nameprep-11'.
-
-2003-02-18
- * lib/tests/api-init1.tsy, lib/tests/api-init2.tsy,
- lib/tests/api-init3.tsy, lib/tests/api-init4-1.tsy,
- lib/tests/api-init4-2.tsy, lib/tests/api-init4-3.tsy,
- lib/tests/api-init5-1.tsy, lib/tests/api-init5-2.tsy,
- lib/tests/api-init5-3.tsy, lib/tests/api.tsy, lib/tests/converter.tsy,
- lib/tests/res.tsy, lib/tests/punycode.c: Change ACE prefix of Punycode
- from `zq--' to `xn--'.
-
-2003-02-13
- * lib/make.wnt: remove dependencies on obsolete files.
-
- * INSTALL, INSTALL.ja, configure.in, aclocal.m4: Delete configure's
- --with-punycode-prefix option.
-
-2003-02-05
- * lib/res.c: improve performance when encoding/decoding
- loooooooong domain names.
-
-2003-01-22
- * lib/res.c: idn_res_encodename() and idn_res_decodename() in
- libidnkit returns `idn_invalid_name' if local converter is not
- available.
-
-2003-01-20
- * lib/normalize.c, lib/unormalize.c, include/idn/unormalize.h,
- lib/tests/normalizer.tsy: unicode-form-c or unicode-form-c/3.2.0 is
- no longer supported.
-
- * lib/mapselector.c, lib/tests/mapselector.tsy:
- idn_mapselector_add() outputs an error message if invalid scheme
- name or TLD is given.
-
- * lib/checker.c, lib/normalizer.c, lib/mapselector.c, lib/res.c:
- modify error messages.
-
- * lib/result.c: modify an error message for `idn_invalid_length'.
-
-2003-01-16
- * lib/checker.c, lib/idn.conf.sample.in, lib/mapper.c, lib/nameprep.c,
- lib/normalizer.c, lib/unicode.c, lib/tests/checker.tsy,
- lib/tests/mapper.tsy, lib/tests/nameprep.tsy, lib/tests/normalizer.tsy,
- man/idn.conf.5.in, tools/idnconv/idnconv.1:
- delete support for nameprep-03 and nameprep-09.
-
- * lib/unicodedata_301.c, lib/unicodedata_310.c, DISTFILES:
- unicodedata_301.c and unicodedata_310.c are removed.
-
-2003-01-14
- * tools/idnconv/idnconv.c, tools/idnconv/util.c, tools/idnconv/util.h:
- remove the restriction on the length of input lines. idnconv can
- now handle very long lines.
-
-2003-01-10
- * lib/converter.c: fix a bug in extending intermediate buffer
- in converter_iconv_convtoucs4(), which causes incorrect
- codeset conversion when the input string is very long.
-
-2002-12-06
- * idnkit 1.0pr2 release (preview release).
-
-2002-12-03
- * lib/mapper.c, lib/normalize.c: Don't check whether an input string
- is STD3 ASCII label.
- lib/res.c: Skip localmap if the string is STD3 ASCII label.
-
-2002-12-02
- * lib/tests/iconvchk.c, lib/tests/Makefile.in: enable to check
- whether codeset names "eucJP" and "SJIS" are available in iconv.
-
-2002-12-01
- * tools/runidn/stub.c: use RTLD_NEXT for dlsym() if it is available.
-
-2002-11-29
- * almost all files: change the license terms.
-
-2002-11-25
- * lib/tests/codeset.h: define character encoding names here.
- * lib/tests/api-init1.tsy, lib/tests/api-init2.tsy,
- lib/tests/api-init3.tsy, lib/tests/api-init4-3.tsy,
- lib/tests/api-init5-3.tsy, lib/tests/converter.tsy,
- lib/tests/mapselector.tsy, lib/tests/resconf.tsy: include `codeset.h'.
- lib/tests/api-init4-1.tsy, lib/tests/api-init4-2.tsy,
- lib/tests/api-init5-1.tsy, lib/tests/api-init5-2.tsy,
- lib/tests/mapselector.tsy, lib/tests/resconf.tsy:
- Delete the unused cpp macro EUCJP_ENCODING_NAME.
- * INSTALL, INSTALL.ja: describe `lib/tests/codeset.h'.
-
- * lib/converter.c: Fix bugs in converter_uescape_convfromucs4()
- and converter_uescape_convtoucs4() that libidnkit might crash
- when `from' is very long.
-
-2002-11-15
- * Makefile.in: `make distclean' also removes `libtool'.
-
-2002-10-25
- * lib/resconf.c: enable the IDN_CONVERTER_RTCHECK flag when it
- calls idn_converter_create().
- * tools/idnconv/util.c: enable the IDN_CONVERTER_RTCHECK flag
- when it calls idn_converter_setlocalconvertername() or
- idn_converter_setidnconvertername().
-
-2002-09-20
- * wsock/README.txt, wsock/README_j.txt: add description on
- "Force local DLL reference" button.
-
-2002-09-19
- * idnkit 1.0pr1 release (preview release).
-
-2002-09-13
- * README, README.ja: update URIs.
-
- * lib/Makefile.in, lib/tests/Makefile.in: generate libidntest and
- libidntestlite for test programs.
-
-2002-09-09
- * wsock/wsock11/dlldef.h, wsock/wsock11/dllfunc.c,
- wsock/wsock11/dllload.c, wsock/wsock11/dllmain.c,
- wsock/wsock20/dlldef.h, wsock/wsock20/dllfunc.c,
- wsock/wsock20/dllload.c, wsock/wsock20/dllmain.c: take out
- DLL load/unload from DllMain(). load/unload is delayed until
- it is really necessary.
- * wsock/common/checkdll.c, wsock/common/wrapcommon.h: move DLL
- load/unload functions from wsock/{ws11,ws20}/dllmain.c.
- * wsock/printf.c: make logging more effective.
-
- * DISTFILES: remove wsock/common/dllmain.c, which is no longer used.
-
-2002-09-05
- * lib/mapper.c: fix a bug that idn_mapper_add(ctx, "filemap") aborts.
-
-2002-09-04
- * lib/nameprep.c: GCC says that a variable declared in
- idn_nameprep_isvalidbidi() might be used uninitialized. Fixed.
-
- * wsock/common/convert.c, wsock/common/printf.c,
- wsock/common/wrapcommon.h: always reset log output callback procedure
- before calling idnkit library functions.
- * wsock/wsock11/dllmain.c, wsock/wsock20/dllmain.c: reset
- log output callback before unloading.
-
-2002-09-03
- * lib/tests/testygen, lib/tests/testsuite.c, lib/tests/testsuite.h:
- add verbose and partial exec modes.
-
-2002-08-29
- * idnkit 020829 snapshot release.
-
-2002-08-28
- * lib/tests/testygen: fix generation of main(). It didn't destroy
- a testsuite context.
- * lib/tests/testsuite.c: fix a double free bug in
- idn_testsuite_destroy().
-
- * lib/filemapper.c: fix one memory leak in read_file().
- * lib/filemapper.c: fix buffer expansion bug in ucsbuf_grow().
- * lib/res.c: plug up memory leak in idn_res_decodename().
-
- * lib/tests/setenv.c: fix memory leak bug.
-
- * lib/filemapper.c, lib/ucsmap.c, lib/ucsset.c: fix misuse of
- realloc().
-
- * lib/converter.c: plug up memory leak in
- converter_iconv_openfromucs4() and converter_iconv_opentoucs4().
-
-2002-08-27
- * lib/tests/Makefile.in: support the case where the build directory
- is different from the source directory.
-
- * lib/tests/Makefile.in: perform tests for lite library only if
- `--enable-liteonly' has been specified at configuration.
-
- * lib/tests/setenv.c, lib/tests/setenv.h, lib/tests/Makefile.in,
- configure.in: support systems which lack setenv() and/or unsetenv().
-
- * configure.in, lib/Makefile.in, lib/idn.conf.sample, INSTALL,
- INSTALL.ja: delete `--with-preference'.
-
-2002-08-26
- * lib/tests/testygen: new option `-L', which suppresses `#line'
- cpp lines on output.
-
- * DISTFILES: Add files for tests.
- * INSTALL, INSTALL.ja: add the `Test' section.
-
- * lib/resconf.c: fix trace message of idn_resconf_create().
-
- * win/README.WIN: update the contents.
-
- * wsock/config/idnconf.tcl: do not display `force local DLL
- reference' button on Windows 95 and NT, since it is meaningless
- for these old OSes.
-
-2002-08-22
- * lib/mapper.c, lib/normalizer.c: add the procedure for the case
- that ctx->nschems is 0 to idn_mapper_map() and
- idn_normalizer_normalize().
-
- * lib/delimitermap.c: idn_delimitermap_add() and
- idn_delimitermap_addall() reject a request to add an invalid
- codepoint.
-
-2002-08-21
- * lib/api.c: fix a bug that api_nameinit() didn't call
- idn_resconf_initialize().
- * lib/api.c: don't set the `ininitialized' flag if idn_nameinit()
- returns with an error.
- * lib/api.c, include/idn/api.h: add idn__setconffile().
-
- * lib/mapselector.c: idn_mapselector_map() and idn_mapselector_map2()
- now accept `tld' beginning with a dot.
-
-2002-08-20
- * wsock/common/checkdll.c: back out 0812 change because the check
- method doesn't seem to work correctly on WinMe.
- * wsock/wsock11/dllload.c, wsock/wsock20/dllload.c: add some trace
- statements.
- * wsock/config/idnconf.tcl: do not install winsock2 wrapper on
- Win98/Me.
-
- * lib/tests/testsuite.c, lib/tests/testsuite.h, lib/tests/testygen:
- exit the testcase if ASSERT fails.
-
- * lib/tests/testsuite.c, lib/tests/testsuite.h:
- replace ASSERT_PTRNOTNULL with ASSERT_PTR_NE.
-
- * lib/tests/testutil.c, lib/testuil.h: new file.
- It provides create_conf_file().
-
-2002-08-19
- * lib/resconf.c: if application calls idn_resconf_create() before
- idn_resconf_initialize(), idnkit returns `idn_failure'.
-
-2002-08-15
- * lib/tests/testsuite.c, lib/tests/testsuite.h, lib/tests/testygen:
- add two assertion macros: ASSERT_PTR and ASSERT_PTRNOTNULL.
-
- * lib/converter.c: fix some warning messages.
-
-2002-08-14
- * lib/resconf.c: fix a but that idnkit aborts if a line in config
- file lacks an argument.
-
- * wsock/common/hook.c, wsock/wsock11/dllfunc.c, wsock/wsock20/dllfunc.c
- : make name resolver APIs return the domain name verbatim (instead
- of returning error) when name decoding fails.
-
-2002-08-13
- * lib/Makefile.in, lib/checker.c, lib/converter.c, lib/delimitermap.c,
- lib/filechecker.c, lib/filemapper.c, lib/mapper.c, lib/mapselector.c,
- lib/nameprep.c, lib/normalizer.c, lib/punycode.c, lib/race.c,
- lib/resconf.c, lib/unormalize.c: delete main routines for test.
-
- * lib/tests/: new directory.
- * configure.in: Check for path of perl command.
-
- * wsock/config/idnconf.tcl: correct OS version check routine.
-
-2002-08-12
- * lib/make.wnt: change amcacez.* to punycode.*.
- * wsock/common/encoding.c, wsock/common/dump.c, wsock/common/convert.c,
- wsock/commn/hook.c, wsock/common/printf.c, wsock/common/wrapcommon.h,
- wsock/wsock11/dllfunc.c, wsock/wsock11/dllload.c,
- wsock/wsock20/dllfunc.c, wsock/wsock20/dllload.c: add extra argument
- (specifying buffer length) to some interface functions, in order to
- prevent possible buffer overflow.
- * wsock/common/printf.c: increase message buffer size.
- * wsock/wsock11/dllmain.c, wsock/wsock20/dllmain.c: call initialize
- routine before first log output.
- * wsock/common/checkdll.c: use light-weight DLL checking using
- LoadLibraryEx.
-
- * lib/res.c: fix bugs in idn_res_encodename(), idn_res_decodename()
- and idn_res_decodename2(). They fell into infinite loops when
- given `tolen' is 0.
-
-2002-08-08
- * lib/resconf.c, lib/res.c: remove unused functions and variables.
-
- * lib/Makefile.in tools/idnconv/Makefile.in,
- tools/runidn/Makefile.in: add @CPPFLAGS@ to $(CFLAGS).
-
- * lib/res.c: idn_res_decodename2() copies `from' to `to' and
- returns immediately when the `actions' argument is 0.
-
-2002-08-07
- * lib/resconf.c: fix a bug in parse_conf() that if `nameprep' or
- `idn-encoding' directive is defined twice, default value is set
- to the directive.
- * lib/resconf.c: cosmetic changes.
- delete parse_map(), parse_normalize(), parse_prohibit(),
- parse_unassigned() and parse_bidi().
-
- * lib/amcacez.c, include/idn/amcacez.h: renamed to lib/punycode.c
- and include/idn/punycode.h.
-
- * include/idn/converter.h, lib/converter.h: define
- idn_converter_getrealname() externally instead of statically
- defined get_realname().
-
-2002-08-06
- * lib/resconf.c: arrange processes of obsolete commands in
- idn_res_loadfile().
-
- * INSTALL, INSTALL.ja, man/idn.conf.5.in, tools/idnconv/idnconv.1:
- remove description of RACE and AMC-ACE-Z.
-
- * lib/resconf.c: fix a bug in handling of local-converter.
-
- * lib/converter.c: add initialization check in
- idn_converter_aliasfile() and idn_converter_resetalias().
-
- * lib/converter.c: free context memory at some right places in
- idn_converter_create().
-
-2002-08-05
- * configure.in, lib/Makefile.in, lib/aliaslist.sh: also add the
- "UTF-8" entry if --with-utf8=NAME option of configure is specified,
- and NAME is not "UTF-8".
-
- * tools/idnconv/idnconv.c: call idn_converter_destroy() after
- idn_resconf_getidnconverter() and idn_resconf_getlocalconverter()
- in main().
-
- * lib/res.c: fix a bug in idn_res_decodename2().
- When the function called idn_res_decodename(), assertion check in
- idn_res_decodename() may have failed.
-
- * lib/res.c: call idn_delimitermap_destroy() after
- idn_resconf_getdelimitermap() in idn_res_encodename() and
- idn_res_decodename().
-
-2002-08-02
- * lib/res.c: fix mismatched pointer type in idn_res_decodename2().
- * lib/res.c: fix a bug in handling of `auxencoding', in
- idn_res_decodename2().
-
-2002-08-01
- * lib/resconf.c: fix two memory leaks in parse_conf().
-
- * lib/aliaslist.c: fix an error of size measurement in
- create_item().
-
-2002-07-31
- * lib/converter.c: AMC-ACE-Z and RACE are now extra ACE.
-
-2002-07-30
- * idnkit 020730 snapshot release.
-
- * lib/resconf.c: fix a bug in idn_resconf_create() that it
- misses initializing `ctx->bidi_checker'.
-
-2002-07-29
- * tools/idnconv/idnconv.1: describe bidi character check.
-
-2002-07-24
- * lib/resconf.c: force to add bidi checker at parsing nameprep
- entry in config file.
-
-2002-07-19
- * include/idn/checker.h, include/idn/nameprep.h,
- include/idn/res.h, include/idn/resconf.h, man/idn.conf.5.in,
- man/libidnkit.3.in, lib/checker.c, lib/nameprep.c, lib/res.c,
- lib/resconf.c, tools/idnconv/idnconv.c: add bidirectional label
- check routine.
-
- * include/idn/api.h, include/idn/res.h, lib/api.c, lib/res.c,
- tools/idnconv/idnconv.c, tools/idnconv/util.c,
- tools/idnconv/util.h: change the type of action flag at conversion
- functions and define it as ``idn_action_t''.
-
-2002-07-18
- * wsock/config/idnconf.tcl: implement .exe.local file
- creation/deletion feature.
- * lib/make.wnt: update list of files according to the recent
- changes of the library.
-
-2002-07-12
- * include/idn/nameprpe.h: define idn_biditype_t.
- * lib/nameprep_template.c, lib/nameprep.c: support for bidi type
- check is added.
-
-2002-07-11
- * idnkit 020711 snapshot release.
-
-2002-07-09
- * man/Makefile.in, man/idn.conf.5.in: force to make and install
- manpage of idnalias.conf (merely a copy of idn.conf's manpage).
-
-2002-07-08
- * DISTFILES: `lib/dude.c' and `include/idn/dude.h' are removed.
- * DISTFILES: `util/Makefile' is added.
-
- * tools/idnconv/idnconv.c: fix typo in decode_file().
-
- * tools/idnconv/idnconv.c: Support "-reverse -out ACE".
-
- * lib/res.c: fix bugs in label_idndecode() and label_idnencode_ace().
- If UCS4 to UTF-8 conversion is failed with idn_buffer_overflow,
- we must extends the size of local buffer and try the conversion
- again.
-
-2002-07-05
- * tools/idnconv/idnconv.c: treat input as the string of the local
- encoding specified by "-out" option at reverse conversion.
-
- * include/idn/api.h, lib/api.c: add idn_decodename2() function.
-
- * include/idn/res.h, lib/res.c: add idn_res_decodename2()
- function.
-
- * include/idn/res.h, lib/res.c: restore IDN_DELIMMAP flag.
-
-2002-07-02
- * lib/unicodedata_320.c, lib/checker.c, lib/idn.conf.sample.in,
- lib/mapper.c, lib/nameprep.c, lib/nameprepdata.c, lib/normalizer.c,
- lib/unicode.c, unicodedata_320.c, include/idn/nameprep.c, DISTFILES,
- man/idn.conf.5.in: Support NAMEPREP-11 which adopts Unicode-3.2.
- Support for NAMEPREP-06, -08, -09 are removed.
-
-2002-07-01
- * tools/idnconv/idnconv.1: added `-A' option.
-
- * include/idn/res.h, lib/res.c: redefine IDN_ENCODE_QUERY,
- IDN_DECODE_QUERY, IDN_ENCODE_STORED, IDN_DECODE_STORED, IDN_ENCODE_APP
- and IDN_DECODE_APP.
-
-2002-06-26
- * lib/resconf.c, include/idn/resconf.h: define
- idn_resconf_getauxidnconverter(), idn_resconf_setauxidnconverter()
- and idn_resconf_setauxidnconvertername().
-
-2002-06-20
- * lib/res.c: use action flags at round trip check.
-
-2002-06-19
- * include/idn/res.h, lib/res.c: remove IDN_UNASCHECK flag from
- IDN_NAMEPREP.
-
- * include/idn/res.h, lib/res.c: add IDN_ENCODE_QUERY,
- IDN_DECODE_QUERY, IDN_ENCODE_STORED, and IDN_DECODE_STORED flags.
-
- * include/idn/res.h, lib/res.c: IDN_ENCODE_APP and IDN_DECODE_APP
- have same value as flags for conversion of the query string
- (IDN_ENCODE_QUERY and IDN_DECODE_QUERY) now.
-
-2002-06-17
- * include/idn/Makefile.in, lib/Makefile.in, lib/converter.c,
- tools/runidn/Makefile.in, configure, INSTALL, INSTALL.ja:
- delete DUDE support.
- * include/idn/dude.h, lib/dude.c: deleted.
-
- * README, README.ja: update URL of mdnkit FAQ.
-
- * include/idn/res.h, lib/res.c, lib/idn.conf.sample.in,
- lib/delimitermap.c, man/libidnkit.3.in: add default delimiters
- defined in IDNA specification and always forced to do delimiter
- mapping.
-
- * lib/resconf.c, man/idn.conf.5.in: remove "delimiter-map" entry
- support of configuration file.
-
- * tools/idnconv/idnconv.c, tools/idnconv/idnconv.1: remove
- "-delimiter-map" and "-d" options.
-
-2002-06-13
- * wsock/common/encoding.c: fix registry key setting so that
- it matches what documents say.
-
-2002-06-11
- * include/idn/delimitermap.h: remove idn_delimitermap_fix()
- declaration.
-
-2002-06-10
- * wsock/wsock2/dllfunc.c: fix a bug which makes wrapping of
- getaddrinfo()/getnameinfo() always fail.
-
-2002-06-05
- * wsock/wsock2/dllfunc.c, wsock/wsock2/dllstub.c,
- wsock/wsock2/ws2_32.def: add new APIs introduced by WinXP.
-
-2002-05-22
- * tools/idnconv/util.c: reset alias information before loading
- alias information file.
-
-2002-05-20
- * idnkit 1.0rc1 release.
-
- * include/idn/res.h: fix typo in a comment.
-
-2002-05-17
- * include/idn/version.h: set IDNKIT_VERSION to "1.0rc1".
-
-2002-05-13
- * tools/rpm/mdnkit.spec: renamed to idnkit.spec, and revised
- for idnkit-1.0.
-
-2002-05-09
- * tools/idnconv/idnconv.c: now `idnconv -r' can convert a file
- from ACE to ACE.
-
-2002-05-08
- * lib/idn.conf.sample.in: delete "encoding-alias-file" entry
- because idnkit does not support it any longer.
-
- * lib/nameprepdata.c lib/nameprep.c, lib/mapper.c, lib/normalizer.c,
- lib/checker.c, lib/idn.conf.sample.in, man/idn.conf.5.in,
- tools/idnconv/idnconv.1: support NAMEPREP-09.
-
- * lib/mapper.c, lib/normalizer.c, lib/checker.c, lib/mapselector.c,
- * lib/res.c, lib/race.c: spmplify local buffer managements.
-
- * tools/idnconv/idnconv.c, tools/idnconv/util.c, tools/idnconv/util.h:
- fix a bug that wrong local encoding is set to a resconf context.
-
-2002-05-07
- * tools/idnconv/util.c: delete set_reverse_context().
- * tools/idnconv/idnconv.c: fix a serious bug in -reverse conversion.
-
-2002-05-04
- * include/idn/util.h, lib/converter.c, lib/resconf.c, lib/util.c:
- simplify Windows registry retrieval function interface.
- * wsock/common/convert.c, wsock/common/dump.c,
- wsock/common/encoding.c, wsock/common/wrapcommon.h: fix type
- conflicts.
- * wsock/wsock11/dlldef.h, wsock/wsock11/dllmain.c,
- wsock/wsock20/dlldef.h, wsock/wsock20/dllmain.c: fix typo.
- * wsock/common/jpnicmdn.def, wsock/common/jpnicmdn.h,
- wsock/config/mdnconf.tcl: removed.
- * DISTFILES: add new files, remove obsolete files.
-
-2002-05-02
- * tools/idnconv/util.c: create a new function set_reverse_context().
- * tools/idnconv/idnconv.c: fix a bug in handing of reference count
- of idn_resconf_t contexts.
-
- * lib/amcacez.c, lib/race.c, lib/dude.c, lib/delimitermap.c,
- lib/checker.c, lib/mapper.c, lib/mapselector.c, lib/converter.c,
- lib/normalizer.c, lib/res.c, lib/ucs4.c, lib/debug.c,
- include/idn/debug.h: output valuable trace logs for developpers.
-
- * lib/res.c: fix double free bugs.
-
- * lib/checker.c, include/idn/checker.h: for symbols of the checker
- module, use `idn_' prefix instead of `idn__' by default.
-
- * wsock/common/checkdll.c, wsock/common/convert.c,
- wsock/common/dump.c, wsock/common/encoding.c, wsock/common/hook.c,
- wsock/common/printf.c, wsock/common/make.wnt,
- wsock/wsock11/dlldef.h, wsock/wsock11/dllfunc.c,
- wsock/wsock11/dllload.c , wsock/wsock11/dllmain.c,
- wsock/wsock11/dllstub.c, wsock/wsock11/make.wnt,
- wsock/wsock20/dlldef.h, wsock/wsock20/dllfunc.c,
- wsock/wsock20/dllload.c , wsock/wsock20/dllmain.c,
- wsock/wsock20/dllstub.c, wsock/wsock20/make.wnt: adapt idnkit
- interface, change name from `mDN Wrapper' to `idn wrapper'.
- * wsock/common/wrapcommon.h: created.
- * wsock/config/idnconf.tcl: created.
-
-2002-05-01
- * include/idn/util.h, lib/converter.c, lib/resonf.c, lib/util.c:
- Move alias information initialization scheme from the resconf
- context initialization to the converter module initialization.
-
- * tools/idnconv/idnconv.c: fix a bug in main().
- Wrong localconverer/idnconverter may be set to resconf2.
-
-2002-04-30
- * lib/res.c, tools/idnconv/idnconv.c: accept non-ace encoding as
- idn-encoding and ace encoding as local-encoding at normal conversion.
-
-2002-04-23
- * man/idn.conf.5.in: use the term "unassigned codepoint", not
- "unassigned character".
-
-2002-04-19
- * include/idn/api.h, include/idn/res.h:
- delete cpp macros for backward compatibility, since they are defined
- in include/mdn/api.h and include/mdn/res.h.
-
- * include/idn/checker.h, include/idn/converter.h,
- include/idn/delimitermap.h, include/idn/filechecker.h,
- include/idn/filemapper.h, include/idn/mapper.h,
- include/idn/mapselector.h, include/idn/nameprep.h,
- include/idn/normalizer.h, include/idn/unormalize.h:
- fix obsolete descriptions.
-
-2002-04-17
- * idnkit 1.0beta2 release.
-
-2002-04-16
- * configure.in: check AC_FIND_SYSTEM_SHOBJ(libnsl),
- AC_CHECK_LIB(socket, socket) and AC_CHECK_LIB(nsl, inet_addr)
- in case of --enable-runidn.
-
-2002-04-15
- * tools/idnconv/idnconv.1: fix the "REVERSE CONVERSION MECHANISM"
- section.
-
-2002-04-12
- * lib/res.c, include/idn/res.h: rename `idn_res_actionstostring()'
- to `idn__res_actionstostring()'.
- * lib/mapper.c, lib/checker.c, lib/converter.c: output trace log
- which shows scheme a name the module is going to perform.
-
-2002-04-10
- * man/idn.conf.5.in: delete the "SETFILE SECTION".
-
-2002-04-09
- * tools/runidn/resolver.c: call idn_nameinit() and then call
- idn_encodename() or idn_decodename().
-
-2002-04-08
- * include/idn/export.h: created.
- * include/idn/Makefile.h, DISTFILES: add export.h.
- * include/idn/api.h, include/idn/converter.h, include/idn/debug.h,
- include/idn/delimitermap.h, include/idn/localencoding.h,
- include/idn/log.h, include/idn/mapper.h, include/idn/mapselector.h,
- include/idn/nameprep.h, include/idn/normalizer.h, include/idn/res.h,
- include/idn/resconf.h, include/idn/result.h, include/idn/ucs4.h,
- include/idn/ucsmap.h, include/idn/ucsset.h, include/idn/unormalize.h,
- include/idn/utf8.h, include/idn/version.h: include export.h. mark
- exportable functions with IDN_EXPORT macro.
- * lib/make.wnt: modify to create DLLs.
- * configure.in: add existance check for pwd.h.
- * configure, include/config.h.in: rebuilt.
- * lib/resconf.c, lib/localencoding.c: port to Win32.
- * include/mdn/version.h: include <idn/version.h> for the declaration
- of idn_version_getstring().
- * tools/make.wnt, tools/idnconv/make.wnt: created.
- * make.wnt: add tools subdirectory.
- * DISTFILES: add tools/make.wnt and tools/idnconv/make.wnt.
-
- * include/idn/mapselector.h, lib/mapselector.c:
- add idn_mapselector_getnotld() and idn_mapselector_getdefaulttld().
- Instead delete idn_mapselector_no_tld and idn_mapselector_default.
-
- * lib/api.c, include/mdn/api.h: define mdn_nameinit(),
- mdn_encodename() and mdn_decodename().
-
- * DISTFILES: delete `patch/bind8/bind-8.2.3-patch' and
- `tools/rpm/mdnsproxy.init'.
-
- * include/idn/aliaslist.h, include/idn/converter.h,
- lib/aliaslist.c, lib/converter.c: enable to add an alias
- information item to either top or bottom of the alias information
- list.
-
-2002-04-05
- * include/idn/resconf.h, lib/resconf.c: add
- idn_resconf_setdefaults().
- * lib/resconf.c: call idn_converter_aliasfile() at parsing the
- default alias information file automatically.
- * include/idn/api.h, lib/api.c: modify api_nameinit() to enable to
- choose initialization scheme.
-
- * tools/idnconv/idnconv.c, tools/idnconv/idnconv.1: delete `-map',
- `-normalize', `-prohibit' and `-unassigned' options.
- * tools/idnconv/idnconv.c: use default configuration if `-noconf'
- is specified.
-
-2002-04-04
- * tools/idnconv/idnconv.1: fix obsolete description.
- * tools/runidn/runidn.1: likewise.
-
-2002-04-02
- * configure.in: add --enable-mdnkit-compat option.
- * include/mdn/Makefile.in, include/mdn/api.h,
- include/mdn/localencoding.h, include/mdn/log.h, include/mdn/res.h,
- include/mdn/resconf.h, include/mdn/result.h, include/mdn/utf8.h,
- include/mdn/version.h: re-added.
- * include/Makefile.in: add `idn' to SUBDIRS.
- * lib/Makefile.in, tools/idnconv/Makefile.in, tools/runidn/Makefile.in,
- man/Makefile.in: support --enable-mdnkit-compat.
- * lib/localencoding.c, lib/resconf.c: ditto.
- * INSTALL: ditto.
-
- * Makefile.in, include/Makefile.in, include/idn/Makefile.in,
- include/mdn/Makefile, lib/Makefile.in, tools/Makefile.in,
- tools/idnconv/Makefile.in, tools/runidn/Makefile.in,
- man/Makefile.in, map/Makefile.in: support DESTDIR and distclean.
-
-2002-03-28
- * include/idn/api.h: enclose the contents with `extern "C" {...}'
- if C++ compiler is used.
-
-2002-03-27
- * man/Makefile.in: generate and install idnrc.5.
- * man/idn.conf.5.in: describe the user configuration file ~/.idnrc.
-
- * tools/idnconv/idnconv.1: add missing description of -nolengthcheck,
- -noasciicheck and -noroundtrip options.
-
- * lib/checker.c, lib/mapper.c, lib/normalizer.c,
- lib/idn.conf.sample.in, tools/idnconv/idnconv.1, man/idn.conf.5.in:
- Add nameprep-08 support, and delete -05 and -07 instead.
-
-2002-03-26
- * idnkit 1.0beta1 release.
-
- * NEWS: add description about Major changes in mDNkit 2.3, 2.3.1,
- 2.4.
- * NEWS: add description about Major changes in idnkit
- version1.0beta1.
-
-2002-03-25
- * DISTFILES: add bind-8.3.1-patch and bind-9.2.0-patch.
- delete bind-9.1.3-patch.
-
-2002-03-22
- * lib/mapselector.c: fix a bug in handling of the special TLD `-'.
-
-2002-03-20
- * lib/converter.c: fix a bug in idn_converter_convtoucs4().
-
- * lib/res.c: fix a bug that IDN_LENCHECK overlook an empty label
- generated by nameprep-map or localmap (e.g. "XXX.\u{200b}").
- * lib/res.c: fix a bug that libidnkit aborts when it decodes "."
-
- * lib/Makefile.in, tools/runidn/Makefile.in: change library
- version.
- * include/idn/version.h: set version `1.0beta1'.
-
- * configure, configure.in: modify some error messages.
-
-2002-03-19
- * man/idn.conf.5.in, lib/idn.conf.sample.in, tools/idnconv/idnconv.1:
- delete DUDE from a list of supported encodings.
-
- * lib/aliaslist.c, lib/debug.c, lib/strhash.c, lib/ucs4.c: they are
- private modules.
-
- * include/idn/resolver.h: moved to tools/runidn/resolver.h.
-
- * tools/runidn/Makefile.in, tools/idnconv/Makefile.in:
- insert `-I$(srcdir)' into INCS.
-
-2002-03-18
- * aclocal.m4, configure, configure.in, include/config.h.in,
- Makefile.in, map/Makefile.in, src/lib/idn.conf.sample.in,
- tools/idnconv/selectiveencode.h: replace `MDN' with `IDN'.
-
- * lib/aliaslist.c: change WARNING message into INFO message when
- idn_aliaslist_aliasfile() finds an error in alias information
- file.
- * lib/resconf.c: change user configuration file name.
- * lib/resconf.c: add procedure to check the existence of default
- alias information file before letting converter parse the file.
- * lib/resconf.c: call idn_converter_aliasfile() even when basic
- configuration files are not found at all.
-
- * tools/idnconv/idnconv.c: use hexadecimal numbers for values
- associated with FLAGS_ macros.
-
- * include/idn/result.h, lib/result.c: rename `idn_too_long' to
- `idn_invalid_length'.
- * lib/res.c: In IDN_LENCHECK, return `idn_invalid_length' for an
- empty label, but return `idn_success'' for the "." domain name.
-
- * lib/converter.c: DUDE is now extra ACE.
-
- * lib/mapselector.c, include/idn/mapselector.h: change types of
- `idn_mapselector_no_tld' and `idn_mapselector_default' from
- (const unsigned long []) to (const unsigned long *).
-
- * DISTFILES: syncronize current source structure.
-
-2002-03-14
- * configure, configure.in, include/config.h.in: add
- `--enable-runidn' option to configure script. Unless the value
- for this option is set to `yes', runidn command will not be
- complied and installed.
-
-2002-03-13
- * man/libidnkit.3.in: describe new idnkit API.
- * man/idn.conf.5.in: use the term `internationalized' rather than
- `multilingual'.
- * lib/Makefile.in: create idnalias.conf.sample correctly even if
- the object directory is different from the source directory.
-
-2002-03-12
- * configure, configure.in, lib/Makefile.in: add
- `--enable-liteonly' option to configure script and change
- description of lib/Makefile.in for designating compilation and
- installation of libidnkitlite alone.
-
-2002-03-08
- * mDNkit is now renamed to idnkit. Also files, directories,
- commands and function names are renamed (e.g. mdnconv -> idnconv).
-
-2002-03-07
- * include/mdn/nameprep.h, lib/nameprep.c, lib/resconf.c: enable
- libmdn(lite) to run without configuration file and alias file, and
- also enable to support user configuration file.
-
-2002-03-05
- * include/mdn/aliaslist.h, lib/aliaslist.c: change year
- description to `2002' in copyright notice.
- * lib/aliaslist.c: fix the initialization scheme of structure's
- members at creation of both list item and list itself.
- * lib/aliaslist.c: fix the order of function free() call when
- an error occurs at list item creation.
- * make.wnt: remove descriptions related to mdnsproxy.
-
-2002-03-04
- * include/mdn/aliaslist.h, include/mdn/amcacez.h, include/mdn/assert.h,
- include/mdn/checker.h, include/mdn/converter.h, include/mdn/debug.h,
- include/mdn/delimitermap.h, include/mdn/dude.h,
- include/mdn/filechecker.h, include/mdn/filemapper.h,
- include/mdn/localencoding.h, include/mdn/log.h, include/mdn/logmacro.h,
- include/mdn/mapper.h, include/mdn/mapselector.h,
- include/mdn/nameprep.h, include/mdn/normalizer.h, include/mdn/race.h,
- include/mdn/res.h, include/mdn/resconf.h, include/mdn/resolver.h,
- include/mdn/result.h, include/mdn/strhash.h, include/mdn/ucs4.h,
- include/mdn/ucsmap.h, include/mdn/ucsset.h, include/mdn/unicode.h,
- include/mdn/unormalize.h, include/mdn/utf8.h, include/mdn/util.h,
- include/mdn/version.h: enclose the contents with `extern "C" {...}'
- if C++ compiler is used.
- * DISTFILES, Makefile.in, configure, configure.in:
- remove descriptions related to mdnsproxy.
-
-2002-03-01
- * include/mdn/result.h, lib/result.h: define new error code
- `mdn_too_long'.
- * lib/res.c: return `mdn_too_long' if MDN_LENCHECK is failed.
diff --git a/contrib/idn/idnkit-1.0-src/DISTFILES b/contrib/idn/idnkit-1.0-src/DISTFILES
deleted file mode 100644
index b81eef2e..00000000
--- a/contrib/idn/idnkit-1.0-src/DISTFILES
+++ /dev/null
@@ -1,191 +0,0 @@
-# $Id: DISTFILES,v 1.1 2003/06/04 00:25:02 marka Exp $
-README
-README.ja
-INSTALL
-INSTALL.ja
-ChangeLog
-DISTFILES
-LICENSE.txt
-Makefile.in
-NEWS
-make.wnt
-acconfig.h
-aclocal.m4
-config.guess
-config.sub
-ltconfig
-ltmain.sh
-configure.in
-configure
-install-sh
-mkinstalldirs
-include/Makefile.in
-include/config.h.in
-include/config.h.win
-include/idn/Makefile.in
-include/idn/aliaslist.h
-include/idn/api.h
-include/idn/assert.h
-include/idn/checker.h
-include/idn/converter.h
-include/idn/debug.h
-include/idn/delimitermap.h
-include/idn/export.h
-include/idn/filechecker.h
-include/idn/filemapper.h
-include/idn/localencoding.h
-include/idn/log.h
-include/idn/logmacro.h
-include/idn/mapper.h
-include/idn/mapselector.h
-include/idn/nameprep.h
-include/idn/normalizer.h
-include/idn/punycode.h
-include/idn/race.h
-include/idn/res.h
-include/idn/resconf.h
-include/idn/result.h
-include/idn/strhash.h
-include/idn/ucs4.h
-include/idn/ucsmap.h
-include/idn/ucsset.h
-include/idn/unicode.h
-include/idn/unormalize.h
-include/idn/utf8.h
-include/idn/util.h
-include/idn/version.h
-include/mdn/Makefile.in
-include/mdn/api.h
-include/mdn/localencoding.h
-include/mdn/log.h
-include/mdn/res.h
-include/mdn/resconf.h
-include/mdn/result.h
-include/mdn/utf8.h
-include/mdn/version.h
-lib/Makefile.in
-lib/aliaslist.c
-lib/api.c
-lib/checker.c
-lib/converter.c
-lib/debug.c
-lib/delimitermap.c
-lib/filechecker.c
-lib/filemapper.c
-lib/localencoding.c
-lib/log.c
-lib/make.wnt
-lib/mapper.c
-lib/mapselector.c
-lib/nameprep.c
-lib/nameprep_template.c
-lib/nameprepdata.c
-lib/normalizer.c
-lib/punycode.c
-lib/race.c
-lib/res.c
-lib/resconf.c
-lib/result.c
-lib/strhash.c
-lib/ucs4.c
-lib/ucsmap.c
-lib/ucsset.c
-lib/unicode.c
-lib/unicode_template.c
-lib/unicodedata_320.c
-lib/unormalize.c
-lib/utf8.c
-lib/util.c
-lib/version.c
-lib/idn.conf.sample.in
-lib/aliaslist.sh
-lib/tests/Makefile.in
-lib/tests/api-init1.tsy
-lib/tests/api-init2.tsy
-lib/tests/api-init3.tsy
-lib/tests/api-init4-1.tsy
-lib/tests/api-init4-2.tsy
-lib/tests/api-init4-3.tsy
-lib/tests/api-init5-1.tsy
-lib/tests/api-init5-2.tsy
-lib/tests/api-init5-3.tsy
-lib/tests/api.tsy
-lib/tests/checker.tsy
-lib/tests/codeset.h
-lib/tests/converter.tsy
-lib/tests/delimitermap.tsy
-lib/tests/iconvchk.c
-lib/tests/mapper.tsy
-lib/tests/mapselector.tsy
-lib/tests/nameprep.tsy
-lib/tests/normalizer.tsy
-lib/tests/res.tsy
-lib/tests/resconf.tsy
-lib/tests/setenv.c
-lib/tests/setenv.h
-lib/tests/testsuite.c
-lib/tests/testsuite.h
-lib/tests/testutil.c
-lib/tests/testutil.h
-lib/tests/testygen
-lib/tests/ucs4.tsy
-lib/tests/utffilter
-tools/Makefile.in
-tools/idnconv/Makefile.in
-tools/idnconv/make.wnt
-tools/idnconv/idnconv.c
-tools/idnconv/selectiveencode.c
-tools/idnconv/selectiveencode.h
-tools/idnconv/util.c
-tools/idnconv/util.h
-tools/idnconv/idnconv.1
-tools/idnconv/idnslookup.in
-tools/make.wnt
-tools/rpm/idnkit.spec
-tools/runidn/Makefile.in
-tools/runidn/resolver.c
-tools/runidn/resolver.h
-tools/runidn/stub.c
-tools/runidn/stub.h
-tools/runidn/runidn.1
-tools/runidn/runidn.in
-man/Makefile.in
-man/libidnkit.3.in
-man/idn.conf.5.in
-patch/bind9/bind-9.2.1-patch
-patch/bind9/bind-9.2.2-patch
-win/README.WIN
-wsock/README.txt
-wsock/README_j.txt
-wsock/make.wnt
-wsock/common/checkdll.c
-wsock/common/convert.c
-wsock/common/dump.c
-wsock/common/encoding.c
-wsock/common/hook.c
-wsock/common/make.wnt
-wsock/common/printf.c
-wsock/common/wrapcommon.h
-wsock/config/make.wnt
-wsock/config/idnconf.tcl
-wsock/wsock11/dlldef.h
-wsock/wsock11/dllfunc.c
-wsock/wsock11/dllload.c
-wsock/wsock11/dllmain.c
-wsock/wsock11/dllstub.c
-wsock/wsock11/make.wnt
-wsock/wsock11/wsock32.def
-wsock/wsock20/dlldef.h
-wsock/wsock20/dllfunc.c
-wsock/wsock20/dllload.c
-wsock/wsock20/dllmain.c
-wsock/wsock20/dllstub.c
-wsock/wsock20/make.wnt
-wsock/wsock20/ws2_32.def
-util/Makefile
-util/SparseMap.pm
-util/UCD.pm
-util/generate_nameprep_data.pl
-util/generate_normalize_data.pl
-map/Makefile.in
-map/jp.map
diff --git a/contrib/idn/idnkit-1.0-src/INSTALL b/contrib/idn/idnkit-1.0-src/INSTALL
deleted file mode 100644
index 64341850..00000000
--- a/contrib/idn/idnkit-1.0-src/INSTALL
+++ /dev/null
@@ -1,309 +0,0 @@
-
- idnkit
- Compilation and Installation
- Japan Network Information Center (JPNIC)
-
-
-This file explains how to compile and install the source package.
-These procedures take the following steps:
-
- + Prerequisite: making iconv() available
- + System Configuration: running `configure' script
- + Compilation: running `make'
- + Test: running `make test' (optional)
- + Installation: running `make install'
- + Site Configuration: tailoring `idn.conf'
- + Configuration Check (optional)
- + Clean up (optional)
-
-See also the following section if you'd like to apply patch and install
-BIND9.
-
- + Applying patches
-
-0. Prerequisite
-
-If you want to install generic idnkit library with code conversion
-support, and also if your system's library does not have iconv()
-function, which is a general codeset conversion utility, install iconv
-as an external library. You also need external library if the
-system's implementation cannot handle UTF-8 encoding, or it doesn't
-support some encodings which your client applications uses.
-
-You can get a free version of iconv() implementation (under LGPL
-license, aka GNU libiconv) from:
-
- ftp://ftp.gnu.org/gnu/libiconv/
- and mirrors of that site.
-
-But if you don't want code conversion support and you want to install
-idnkitlite library without iconv support alone, you have not install
-external library. Instead, set `--enable-liteonly' value to "yes" at
-configure script execution.
-
-
-1. Running configure script
-
-Run `configure' script in the top directory. This checks various
-characteristics of your system and it will create Makefiles and
-config.h appropriate for your system.
-
- % ./configure
-
-`configure' accepts many options. Here is a list of some important
-options.
-
- --prefix=PREFIX
- Specifies the prefix of install directories of idnkit. The
- default is /usr/local.
-
- --enable-runidn
- Build `runidn' command. The default is "no".
-
- You cannot set this option "yes" when `--enable-liteonly' is
- also set "yes".
-
- --with-libiconv=LIBICONV_PREFIX
- If you have installed GNU libiconv and would like to link it
- to idnkit, specify this option. The argument LIBICONV_PREFIX
- is install prefix of GNU libiconv. If the argument is omitted,
- PREFIX (derived from --prefix=PREFIX option) is assumed.
-
- --with-libiconv is shorthand option for GNU libiconv.
-
- --with-libiconv=/usr/local
-
- This is equivalent to:
-
- --with-iconv-include='-I/usr/local/include'
- --with-iconv='-L/usr/local/lib -R/usr/local/lib -liconv'
-
- If both the shorthand option (--with-libiconv) and longhand
- options (--with-iconv-include and/or --with-iconv) are specified,
- the longhand options have priority.
-
- You cannot set this option when --enable-liteonly is set
- "yes", because libidnkitlite library doesn't need iconv
- support.
-
- --with-iconv-include=ICONV_INCDIR
- If the header file "iconv.h" resides in a directory where your
- C compiler doesn't search by default, specify the directory as
- DIR like this:
-
- --with-iconv-include=/usr/local/include
-
- You cannot set this option when `--enable-liteonly' is set
- "yes", because libidnkitlite library doesn't need iconv
- support.
-
- --with-iconv=ICONV_LIB
- If your libc doesn't contain iconv(), specify the library
- that contains iconv(). For example, if iconv() is libiconv
- in /usr/local/lib, you should specify:
-
- --with-iconv="-L/usr/local/lib -liconv"
-
- Note that if the library is a shared one, you might also want
- to specify -R option, like:
-
- --with-iconv="-L/usr/local/lib -R/usr/local/lib -liconv"
-
- You cannot set this option when `--enable-liteonly' is set
- "yes", because libidnkitlite library doesn't need iconv
- support.
-
- --with-iconv-sofile=SOFILE_PATH
- The runidn command in this kit needs to know the pathname of
- shared library file that contains iconv(), if iconv() is not
- part of libc. idnkit tries to find out the pathname from the
- informaiton provided by `--with-iconv' option described above.
- But when it fails, you have to specify it with this option,
- like:
-
- --with-iconv-sofile=/usr/local/lib/libiconv.so.2.0
-
- You cannot set this option when `--enable-liteonly' is set
- "yes", because libidnkitlite library doesn't need iconv
- support.
-
- --with-utf8=UTF8_NAME
- If your iconv() (precisely, iconv_open()) does not accept
- "UTF-8" as the name of UTF-8 encoding, specify the name for
- it. For example if your iconv() uses "utf8" instead, you
- should specify:
-
- --with-utf8=utf8
-
-
-2. Other configure options
-
-The configure script has many other options though they are not widely
-used:
-
- --exec-prefix=EXEC_PREFIX
- Specifies the prefix of install directories for machine-specific
- files. The default is PREFIX (derived from `--prefix=PREFIX'
- and its default is /usr/local).
-
- --bindir=BINDIR
- Specifies the install directory for idnconv and runidn.
- The default is EXEC_PREFIX/bin.
-
- --libdir=LIBDIR
- Specifies the install directory for the libraries (libidnkit
- and libidnkitlite). The default is EXEC_PREFIX/lib.
-
- --includedir=INCDIR
- Specifies the install directory for the header files of the
- libraries. The default is PREFIX/include.
-
- --sysconfdir=SYSCONFDIR
- Specifies the install directory for sample configuration files
- of the libraries. The default is PREFIX/etc.
-
- --mandir=MANDIR
- Specifies the base install directory for online manuals.
- The default is PREFIX/man.
-
- --datadir=DATADIR
- Specifies the base install directory for machine independent
- data files. The default is PREFIX/share. Some data files for
- idnkit will be put under the DATADIR/idnkit directory.
-
- --enable-debug
- Enable debugging codes. The fault is "no".
-
- --enable-shared
- Build shared library. The fault is "yes".
-
- --enable-static
- Build static library. The fault is "yes".
-
- --enable-liteonly
- Build the `libidnlkitite' library only. Do not build the
- `libidnkit' library, idnconv and runidn. The fault is "no".
-
- If you want to set "yes" to this option, you cannot specify it
- together with `--enable-runidn', `--with-libiconv',
- `--with-iconv-include', `--with-iconv' or `--with-iconv-sofile'.
-
-To see the list of available options, you should run it with --help
-option.
-
- % ./configure --help
-
-
-3. Compiling
-
-Run `make' for compilation.
-
- % make
-
-
-4. Test
-
-Optionally, type `make test' to compile and run test programs.
-Note that Perl 5 is required for comipilation of the test programs.
-
- % make test
-
-The test programs assume that iconv() on the system recognizes the
-encoding name "EUC-JP" as Japanese EUC, and "SJIS" as Japanese Shift
-JIS. If iconv() on the system doesn't support the encoding name,
-please edit `lib/tests/codeset.h' before `make test'.
-
-*Note*
- If you use standard iconv which is attached as default on Solaris,
- converter's test "idn_converter_convfromucs4()" may fail. But it's
- not the problem because the result is derived from the difference of
- specification of iconv. So please ignore it if you run the test on
- Solaris.
-
-
-5. Installation
-
-Run `make install' to install binaries and manuals. Don't forget to
-become a super-user before the installation.
-
- % su
- # make install
-
-*Note*
- If you have installed pre-release versions of idnkit (such as 1.0pr1),
- idnkit-1.0 may not work correctly because of the old configuration
- file 'idn.conf'. If this is the case, you should overwrite existing
- configuration files with the new ones by executing the following command
- after 'make install'.
-
- # make install-config
-
-
-6. Configuration and usage
-
-Edit the `idn.conf' configuation file if you'd like to cosutomize
-conversion/normalization rules of idnkit. Please refer the manual
-for `idn.conf' for details. A sample configuration (`idn.conf.sample')
-is also provided for your convenience.
-
-The sample configuration file has also been installed as `idn.conf'
-if it has not exist on your system.
-
-Also online manuals for `idnconv' and `runidn' commands are available.
-Please refer them for the usage and configuration of these commands.
-
- % man idn.conf
- % man idnconv
- % man runidn
-
-
-7. Check your configuration
-
-A simple shell script `idnslookup' is available in the directory
-`tools/idnconv', with which you can make queries for internationalized
-domain names. It may help you check your configuration.
-
-The usage of `idnslookup' is:
-
- % tools/idnconv/idnslookup <domain-name> <dns-server>
-
-Suppose that <domain-name> is an internationalized domain name written
-in the local codeset (see ``LOCAL CODESET'' in the `idn.conf' man page
-for details), and <dns-server> is a hostname or IP address of DNS
-server.
-
-`idnslookup' inquires <idn-domain-name> from <dns-server>, using
-`idnconv' and `nslookup' commands. If something is wrong, you will
-see an error message output by `idnconv', `nslookup' or `idnslookup'
-itself.
-
-
-8. Clean up
-
-Run `make clean' to delete files generated by `make' and `make test'
-from the idnkit source directory. (Files installed by `make install'
-are not removed.)
-
- % make clean
-
-Run `make distclean' instead to also delete files generated by
-`configure'.
-
- % make distclean
-
-After `make distclean', you can run `configure' and compile idnkit for
-another system using the source directory.
-
-
-Appendix A. Applying patches
-
-This distribution also contains patches for BIND9.
-The top of these patch files describe how to apply the patch and
-(re)install.
-
-Note that on Solaris, "patch" command that comes with the system
-sometimes doesn't work correctly. You may want to install the GNU
-version of the command (http://www.gnu.org/software/patch/) and use
-it.
-
-; $Id: INSTALL,v 1.1 2003/06/04 00:24:59 marka Exp $
diff --git a/contrib/idn/idnkit-1.0-src/INSTALL.ja b/contrib/idn/idnkit-1.0-src/INSTALL.ja
deleted file mode 100644
index 2bc3faeb..00000000
--- a/contrib/idn/idnkit-1.0-src/INSTALL.ja
+++ /dev/null
@@ -1,310 +0,0 @@
-
- idnkit
- $B%3%s%Q%$%k$H%$%s%9%H!<%k$NJ}K!(B
- ($B<R(B) $BF|K\%M%C%H%o!<%/%$%s%U%)%a!<%7%g%s%;%s%?!<(B (JPNIC)
-
-
-$BK\%Q%C%1!<%8$N%3%s%Q%$%k$*$h$S%$%s%9%H!<%k$O!"<!$N$h$&$J%9%F%C%W$G9T(B
-$B$$$^$9!#(B
-
- + $BA0=`Hw(B: iconv() $B$,MxMQ$G$-$k$h$&$K$9$k(B
- + $B%7%9%F%`@_Dj(B: `configure' $B%9%/%j%W%H$N<B9T(B
- + $B%3%s%Q%$%k(B: `make' $B$N<B9T(B
- + $B%F%9%H(B: `make test' $B$N<B9T(B ($B>JN,2D(B)
- + $B%$%s%9%H!<%k(B: `make install' $B$N<B9T(B
- + $B%5%$%HKh$N@_Dj(B: `idn.conf' $B$K$h$k@_Dj(B
- + $B@_Dj$N3NG'(B ($B>JN,2D(B)
- + $B8eJRIU$1(B ($B>JN,2D(B)
-
-BIND9 $B$K%Q%C%A$rEv$F$F%$%s%9%H!<%k$7$?$$>l9g$O!"<!$N9`$b;2>H$7$F2<$5$$!#(B
-
- + $B%Q%C%A$NEv$FJ}(B
-
-0. $BA0=`Hw(B
-
-$B$b$7$"$J$?$,%3!<%IJQ495!G=$r%5%]!<%H$7$?DL>o$N(B idnkit $B%i%$%V%i%j$r%$%s%9(B
-$B%H!<%k$9$k$D$b$j$G$"$j!"$^$?$"$J$?$,;HMQ$7$F$$$k%7%9%F%`$N%i%$%V%i%j$K(B
-iconv() $B$,$J$$>l9g!"$"$k$$$O$"$C$F$b(B UTF-8 $B$r07$&$3$H$,$G$-$J$$>l9g$K$O(B
-$B$"$i$+$8$a(B iconv() $B$r%$%s%9%H!<%k$7$F$*$$$F$/$@$5$$!#(Biconv() $B$O!"Nc$($P(B
-GNU libiconv $B$H8F$P$l$k%U%j!<(B (LGPL) $B$N<BAu$,(B
-
- ftp://ftp.gnu.org/gnu/libiconv/
- $B$^$?$O$=$N%_%i!<%5%$%H(B
-
-$B$+$iF~<j2DG=$G$9!#(B
-
-$B$?$@$7!"%3!<%IJQ49$rI,MW$H$;$:!"(Blite $B%P!<%8%g%s$N%i%$%V%i%j$N$_$r%$%s%9(B
-$B%H!<%k$9$k$N$G$"$l$P!"(Biconv() $B$r4^$`%i%$%V%i%j$OI,MW$"$j$^$;$s!#$=$N>l9g!"(B
-configure $B%9%/%j%W%H$N<B9T;~$K(B `--enable-liteonly' $B%*%W%7%g%s$NCM$r(B
-"yes" $B$K%;%C%H$7$F$/$@$5$$!#(B
-
-
-1. configure $B%9%/%j%W%H$N<B9T(B
-
-$B%H%C%W%G%#%l%/%H%j$K$"$k(B configure $B%9%/%j%W%H$r<B9T$7$F$/$@$5$$!#(B
-
- % ./configure
-
-configure $B%9%/%j%W%H$K$O!"?tB?$/$N%*%W%7%g%s$,MQ0U$5$l$F$$$^$9!#$=$N$&(B
-$B$A=EMW$H;W$o$l$k$b$N$O<!$NDL$j$G$9!#(B
-
- --prefix=PREFIX
- idnkit $B$r%$%s%9%H!<%k$9$k%G%#%l%/%H%j$N%Q%9$r;XDj$7$^$9!#%G%U%)(B
- $B%k%H$O(B /usr/local $B$G$9!#(B
-
- --enable-runidn
- runidn $B%3%^%s%I$r:n@.$7$F!"%$%s%9%H!<%k$7$^$9!#%G%U%)%k%H$O(B "no"
- ($B:n@.$7$J$$(B) $B$G$9!#(B
-
- --with-libiconv=LIBICONV_PREFIX
- $B%$%s%9%H!<%k:Q$_$N(B GNU libiconv $B$r(B idnkit $B$K%j%s%/$5$;$k>l9g$O!"(B
- $B$3$N%*%W%7%g%s$r;XDj$7$F2<$5$$!#0z?t(B LIBICONV_PREFIX $B$K$O!"(BGNU
- libiconv $B$,%$%s%9%H!<%k$5$l$F$$$k0LCV$r;XDj$7$^$9!#0z?t$r>JN,(B
- $B$9$k$H!"(BPREFIX (PREFIX $B$NCM$O(B --prefix=PREFIX $B$+$iF3=P$5$l$^$9(B)
- $B$r;XDj$7$?$b$N$H8+$J$5$l$^$9!#(B
-
- --with-libiconv $B$O(B GNU libiconv $BMQ$NC;=L7A$N%*%W%7%g%s$G(B
-
- --with-libiconv=/usr/local
-
- $B$3$l$O<!$HEy2A$K$J$j$^$9!#(B
-
- --with-iconv-include='-I/usr/local/include'
- --with-iconv='-L/usr/local/lib -R/usr/local/lib -liconv'
-
- $BC;=L7A$N%*%W%7%g%s(B (--with-libiconv) $B$HDL>oMQ$N%*%W%7%g%s(B
- (--with-iconv-include, --with-iconv) $B$rN>J}$H$b;XDj$7$?>l9g$O!"(B
- $BDL>oMQ$N%*%W%7%g%s$[$&$,M%@h$5$l$^$9!#(B
-
- $B$3$N%*%W%7%g%s$O(B --enable-liteonly $B$r(B "yes" $B$K$7$?>l9g$O;XDj$9$k(B
- $B$3$H$O$G$-$^$;$s!#$3$l$O!"(Blibidnkitlite $B%i%$%V%i%j$,(B iconv $B%5%]!<(B
- $B%H$rI,MW$H$7$J$$$?$a$G$9!#(B
-
- --with-iconv-include=ICONV_INCDIR
- C $B%3%s%Q%$%i$,DL>o$G$O8!:w$7$J$$%G%#%l%/%H%j$K(B "iconv.h" $B$,CV(B
- $B$+$l$F$$$k>l9g!"<!$N$h$&$K$7$F$=$N%G%#%l%/%H%j$r;XDj$7$^$9!#(B
-
- --with-iconv-include=/usr/local/include
-
- $B$3$N%*%W%7%g%s$O(B --enable-liteonly $B$r(B "yes" $B$K$7$?>l9g$O;XDj$9$k(B
- $B$3$H$O$G$-$^$;$s!#$3$l$O!"(Blibidnkitlite $B%i%$%V%i%j$,(B iconv $B%5%]!<(B
- $B%H$rI,MW$H$7$J$$$?$a$G$9!#(B
-
- --with-iconv=ICONV_LIB
- libc $B$K(B iconv $B$,F~$C$F$$$J$$>l9g(B ($B>e5-$N%Q%C%1!<%8$rF~$l$?(B
- $B>l9g$J$I(B) $B$K!"(Biconv $B$N%i%$%V%i%j$r;XDj$7$^$9!#Nc$($P(B
-
- --with-iconv="-L/usr/local/lib -liconv"
-
- $B$N$h$&$K;XDj$7$^$9!#$b$7(B iconv $B$,6&M-%i%$%V%i%j$K$J$C$F$$$k(B
- $B>l9g$K$O!"(B-R $B%*%W%7%g%s$b;XDj$7$F(B
-
- --with-iconv="-L/usr/local/lib -R/usr/local/lib -liconv"
-
- $B$H$9$kI,MW$,$"$k$+$b$7$l$^$;$s!#(B
-
- $B$3$N%*%W%7%g%s$O(B --enable-liteonly $B$r(B "yes" $B$K$7$?>l9g$O;XDj$9$k(B
- $B$3$H$O$G$-$^$;$s!#$3$l$O!"(Blibidnkitlite $B%i%$%V%i%j$,(B iconv $B%5%]!<(B
- $B%H$rI,MW$H$7$J$$$?$a$G$9!#(B
-
- --with-iconv-sofile=SOFILE_PATH
- idnkit $B$K4^$^$l$F$$$k(B runidn $B%3%^%s%I$O!"(Biconv() $B$,(B libc $B$N0l(B
- $BIt$H$7$FDs6!$5$l$J$$$H$-$K!"(Biconv() $B$r4^$`6&M-%i%$%V%i%j$X$N%Q(B
- $B%9L>$rCN$kI,MW$,$"$j$^$9!#(Bidnkit $B$O!"(B--with-iconv $B%*%W%7%g%s$N(B
- $B5-=R$r4p$K%Q%9L>$r8!:w$7$^$9$,!"$3$l$K<:GT$7$?$H$-$K!"0J2<$N$h(B
- $B$&$K6&M-%i%$%V%i%j$r;XDj$9$k$3$H$,$G$-$^$9!#(B
-
- --with-iconv-sofile=/usr/local/lib/libiconv.so.2.0
-
- $B$3$N%*%W%7%g%s$O(B --enable-liteonly $B$r(B "yes" $B$K$7$?>l9g$O;XDj$9$k(B
- $B$3$H$O$G$-$^$;$s!#$3$l$O!"(Blibidnkitlite $B%i%$%V%i%j$,(B iconv $B%5%]!<(B
- $B%H$rI,MW$H$7$J$$$?$a$G$9!#(B
-
- --with-utf8=UTF8_NAME
- iconv $B$K(B utf-8 $B%(%s%3!<%G%#%s%0$r;XDj$9$k>l9g!"K\%i%$%V%i%j$O(B
- $B%G%U%)%k%H$G$O(B "UTF-8" $B$H$$$&L>A0$r;XDj$7$^$9!#$b$7$"$J$?$N(B
- $B%7%9%F%`$N(B iconv $B$,(B "UTF-8" $B$H$$$&L>A0$r<u$1IU$1$J$$>l9g$K$O!"(B
- $BBe$j$NL>A0$r;XDj$7$^$9!#Nc$($P(B "UTF-8" $B$G$O$J$/(B "utf8" $B$N(B
- $B>l9g$K$O<!$N$h$&$K;XDj$7$^$9!#(B
-
- --with-utf8=utf8
-
-
-2. $B$=$NB>$N(B configure $B$N%*%W%7%g%s(B
-
-$B$=$l$[$I$h$/;H$&$o$1$G$O$"$j$^$;$s$,!"(Bconfigure $B$K$OA09`$N$b$N0J30$K(B
-$B$bMM!9$J%*%W%7%g%s$,MQ0U$5$l$F$$$^$9!#(B
-
- --exec-prefix=EXEC_PREFIX
- $B%^%7%s8GM-$N%U%!%$%k$r%$%s%9%H!<%k$9$k%G%#%l%/%H%j$N%Q%9$r;XDj(B
- $B$7$^$9!#%G%U%)%k%H$O(B PREFIX (``--prefix=PREFIX'' $B$K$h$C$F;XDj(B
- $B2DG=!"(BPREFIX $B$N%G%U%)%k%H$O(B /usr/local) $B$K$J$j$^$9!#(B
-
- --bindir=BINDIR
- idnconv $B$H(B runidn $B$r%$%s%9%H!<%k$9$k%G%#%l%/%H%j$r;XDj$7$^$9!#(B
- $B%G%U%)%k%H$G$O(B EXEC_PREFIX/bin $B$G$9!#(B
-
- --libdir=LIBDIR
- $B%i%$%V%i%j(B (libidnkit $B$*$h$S(B libidnkitlite) $B$r%$%s%9%H!<%k$9$k(B
- $B%G%#%l%/%H%j$r;XDj$7$^$9!#%G%U%)%k%H$G$O(B EXEC_PREFIX/lib $B$G$9!#(B
-
- --includedir=INCDIR
- $B%i%$%V%i%j$N%X%C%@%U%!%$%k$r%$%s%9%H!<%k$9$k%G%#%l%/%H%j$r;XDj(B
- $B$7$^$9!#%G%U%)%k%H$G$O(B PREFIX/include $B$G$9!#(B
-
- --sysconfdir=SYSCONFDIR
- $B%i%$%V%i%j$N@_Dj%U%!%$%k$N%5%s%W%k$r%$%s%9%H!<%k$9$k%G%#%l%/%H(B
- $B%j$r;XDj$7$^$9!#%G%U%)%k%H$G$O(B PREFIX/etc $B$G$9!#(B
-
- --mandir=MANDIR
- $B%*%s%i%$%s%^%K%e%"%k$N%$%s%9%H!<%k%G%#%l%/%H%j$r;XDj$7$^$9!#(B
- $B%G%U%)%k%H$G$O(B PREFIX/man $B$G$9!#(B
-
- --datadir=DATADIR
- $B0[$J$k%^%7%s$G6&M-2DG=$J%U%!%$%k$r%$%s%9%H!<%k$9$k%G%#%l%/%H%j(B
- $B$r;XDj$7$^$9!#%G%U%)%k%H$O(B PREFIX/share $B$G$9!#(BDATADIR/idnkit
- $B$N2<$K!"(Bidnkit $B$G;HMQ$9$k4v$D$+$N%G!<%?%U%!%$%k$,%$%s%9%H!<%k(B
- $B$5$l$^$9!#(B
-
- --enable-debug
- $B%G%P%C%0MQ$N%3!<%I$rM-8z$K$7$^$9!#%G%U%)%k%H$O(B "no" ($BL58z(B) $B$G$9!#(B
-
- --enable-shared
- $B6&M-%i%$%V%i%j$r:n@.$7$^$9!#%G%U%)%k%H$O(B "yes" ($B:n@.$9$k(B) $B$G$9!#(B
-
- --enable-static
- $B@EE*%i%$%V%i%j$r:n@.$7$^$9!#%G%U%)%k%H$O(B "yes" ($B:n@.$9$k(B) $B$G$9!#(B
-
- --enable-liteonly
- libidnkitlite $B%i%$%V%i%j$N$_$r:n@.$7$^$9!#(Blibidnkit $B%i%$%V%i%j!"(B
- idnconv, runidn $B$O:n@.$7$^$;$s!#%G%U%)%k%H$O(B "no" ($B$=$l0J30$N(B
- $B$b$N$b:n@.$9$k(B) $B$G$9!#(B
-
- $B$3$N%*%W%7%g%s$NCM$r(B "yes" $B$K$9$k>l9g!"(B `--enable-runidn'
- `--with-libiconv' `--with-iconv-include' `--with-iconv'
- `--with-iconv-sofile' $B$OF1;~$K;XDj$9$k$3$H$O$G$-$^$;$s!#(B
-
-configure $B$K$OB>$K$bB?$/$N%*%W%7%g%s$,$"$j$^$9$,!";D$j$O0lHLE*$J%*%W%7%g(B
-$B%s$J$N$G@bL@$O>J$-$^$9!#(B
-
- % ./configure --help
-
-$B$r<B9T$9$k$H%*%W%7%g%s$N0lMw$,I=<($5$l$^$9!#(B
-
-
-3. $B%3%s%Q%$%k(B
-
-configure $B$r<B9T$9$k$H(B Makefile $B$J$I$,@8@.$5$l$^$9$N$G!"B3$1$F(B make$B$r(B
-$B<B9T$7$F%3%s%Q%$%k$7$^$9!#(B
-
- % make
-
-
-4. $B%F%9%H(B
-
-$B%F%9%H%W%m%0%i%`$r%3%s%Q%$%k$7!"<B9T$9$k$K$O(B `make test' $B$r<B9T$7$^$9(B
-($B>JN,$7$F$b9=$$$^$;$s(B)$B!#%F%9%H%W%m%0%i%`$N%3%s%Q%$%k$K$O!"(BPerl 5 $B$,I,(B
-$BMW$G$9!#(B
-
- % make test
-
-$B$J$*!"(Biconv() $B$,(B "EUC-JP" $B$rF|K\8l(B EUC $B$N%(%s%3!<%G%#%s%0L>>N$H$7$FG'(B
-$B<1$7!"(B"SJIS" $B$rF|K\8l%7%U%H(B JIS $B$N%(%s%3!<%G%#%s%0L>>N$H$7$FG'<1$9$k$3(B
-$B$H$r!"%F%9%H%W%m%0%i%`$G$OA0Ds$H$7$F$$$^$9!#$b$7!"G'<1$7$J$$$h$&$G$"$l(B
-$B$P!"(B`make test' $B<B9TA0$K(B `lib/tests/codeset.h' $B$rJT=8$7$F2<$5$$!#(B
-
-*$BCm0U(B*
- Solaris $B$K$*$$$F(B OS $BI8=`$N(B iconv $B$r;HMQ$7$F$$$k>l9g!"(Bconverter $B$N(B
- idn_converter_convfromucs4() $B$N%F%9%H$,<:GT$9$k$3$H$,$"$j$^$9!#$3$l(B
- $B$O(B iconv $B$N;EMM$N0c$$$K$h$k$b$N$J$N$G!">e5-4D6-$K$*$$$F%$%s%9%H!<%k(B
- $B$r9T$C$F$$$k>l9g$OL5;k$7$F$/$@$5$$!#(B
-
-
-5. $B%$%s%9%H!<%k(B
-
-$B%9!<%Q%f!<%6$K$J$C$F%$%s%9%H!<%k$7$^$9!#(B
-
- % su
- # make install
-
-*$BCm0U(B*
- idnkit $B$N(B 1.0 $B0JA0$N%P!<%8%g%s(B (1.0pr1 $B$J$I(B) $B$,$9$G$K%$%s%9%H!<%k$5(B
- $B$l$F$$$k>l9g!"%$%s%9%H!<%k$5$l$?@_Dj%U%!%$%k(B 'idn.conf' $B$NFbMF$,8E$$(B
- $B$?$a!"(Bidnkit-1.0$B$,@5$7$/F0:n$7$^$;$s!#$3$N$?$a!"(Bidnkit-1.0 $BMQ$N@_Dj(B
- $B%U%!%$%k$r>e=q$-%$%s%9%H!<%k$9$kI,MW$,$"$j$^$9!#(Bmake install $B<B9T8e!"(B
- $B0J2<$N%3%^%s%I$r<B9T$7$F$/$@$5$$!#(B
-
- # make install-config
-
-
-6. $B@_Dj$H;HMQJ}K!(B
-
-idnkit $B$N@55,2=$*$h$SJQ495,B'$r%+%9%?%^%$%:$7$9$k$J$i!"@_Dj%U%!%$%k(B
-`idn.conf' $B$rJT=8$7$^$9!#$3$N@_Dj%U%!%$%k$N>\:Y$K$D$$$F$O(B idn.conf $B$N(B
-$B%*%s%i%$%s%^%K%e%"%k$r$4Mw$/$@$5$$!#$^$?@_DjNc$,=q$+$l$?%5%s%W%k%U%!%$(B
-$B%k(B (idn.conf.sample) $B$b%$%s%9%H!<%k$5$l$^$9$N$G$4MxMQ$/$@$5$$!#(B
-
-$B%7%9%F%`$K@_Dj%U%!%$%k$,B8:_$7$J$+$C$?>l9g!"$3$N%5%s%W%k$N@_Dj%U%!%$%k(B
-$B$O(B `idn.conf' $B$H$7$F$b%$%s%9%H!<%k$5$l$^$9!#(B
-
-$B$^$?!"(Bidnconv$B!"(Brunidn $B$H$$$C$?%D!<%k$N%*%s%i%$%s%^%K%e%"%k$bDs6!$5$l$F(B
-$B$$$^$9!#$3$l$i$N%3%^%s%I$N;H$$J}!"@_DjJ}K!$K4X$7$F$O$=$A$i$r;2>H$7$F$/(B
-$B$@$5$$!#(B
-
- % man idn.conf
- % man idnconv
- % man runidn
-
-
-7. $B@_Dj$N3NG'(B
-
-`idnslookup' $B$H$$$&4JC1$J%7%'%k%9%/%j%W%H$,(B tools/idnconv $B%G%#%l%/%H%j(B
-$B$KMQ0U$5$l$F$$$^$9!#$3$N%9%/%j%W%H$r;H$&$H(B DNS $B%5!<%P$KBP$7$F9q:]2=%I(B
-$B%a%$%sL>$rLd$$9g$o$;$k$3$H$,$G$-$^$9!#@_Dj%U%!%$%k$N3NG'$KLrN)$D$+$bCN(B
-$B$l$^$;$s!#(B
-
-`idnslookup' $B$N;HMQJ}K!$O!"<!$NDL$j$G$9!#(B
-
- % tools/idnconv/idnslookup <domain-name> <dns-server>
-
-$B$3$3$G(B <domain-name> $B$O%m!<%+%k%3!<%I%;%C%H(B ($B>\$7$/$O(B idn.conf $B$N%^%K%e(B
-$B%"%k$N(B ``LOCAL CODESET'' $B$r;2>H$N$3$H(B) $B$G=q$+$l$?9q:]2=%I%a%$%sL>$G!"(B
-<dns-server> $B$O(B DNS $B%5!<%P$N%[%9%HL>$b$7$/$O(B IP $B%"%I%l%9$G$9!#(B
-
-`idnslookup' $B$O(B `idnconv' $B$*$h$S(B `nslookup' $B%3%^%s%I$rMQ$$$F!"(B
-<dns-server> $B$KBP$7$F(B <domain-name> $B$r0z$-$K9T$-$^$9!#@_Dj$K2?$+4V0c$$(B
-$B$,$"$l$P!"(B`idnconv', `nslookup', $B$"$k$$$O(B `idnslookup' $B<+?H$K$h$k%(%i!<(B
-$B%a%C%;!<%8$,=PNO$5$l$^$9!#(B
-
-
-8. $B8eJRIU$1(B
-
-`make' $B$*$h$S(B `make test' $B$K$h$C$F@8@.$5$l$?%U%!%$%k$r(B idnkit $B$N%=!<(B
-$B%9%G%#%l%/%H%j$+$i:o=|$9$k$K$O!"(B`make clean' $B$r<B9T$7$F2<$5$$!#(B
-(`make install' $B$N:]$K%$%s%9%H!<%k$5$l$?%U%!%$%k$O!":o=|$5$l$^$;$s!#(B)
-
- % make clean
-
-`configure' $B$G@8@.$5$l$?%U%!%$%k$b0l=o$K:o=|$9$k$J$i!"Be$o$j$K(B `make
-distclean' $B$r<B9T$7$^$9!#(B
-
- % make distclean
-
-`make distclean' $B$r9T$($P!"$3$N%=!<%9%G%#%l%/%H%j$r;H$C$F!"A02s$H$OJL(B
-$B$N%7%9%F%`8~$1$K(B `configure' $B$*$h$S(B idnkit $B$N%3%s%Q%$%k$r9T$&$3$H$,$G(B
-$B$-$k$h$&$K$J$j$^$9!#(B
-
-
-$BIUO?(B A. $B%Q%C%A$NEv$FJ}(B
-
-$B$3$NG[I[%-%C%H$K$O!"(BBIND9 $B$KBP$9$k%Q%C%A$,4^$^$l$F$$$^$9!#(B
-$B%Q%C%A$NEv$FJ}$O!"%Q%C%A%U%!%$%k$N@hF,$K=q$+$l$F$$$^$9$N$G$=$A$i$r;2>H(B
-$B$7$F$/$@$5$$!#(B
-
-Solaris $B$G$O!"%7%9%F%`IUB0$N(B patch $B%3%^%s%I$,@5>o$KF0:n$7$J$$$3$H$,$"(B
-$B$j$^$9!#$=$N$h$&$J>l9g$K$O!"(BGNU $B%P!<%8%g%s$N(B patch
-(http://www.gnu.org/software/patch/) $B$r%$%s%9%H!<%k$7$F!"$3$l$r;HMQ$7(B
-$B$F$/$@$5$$!#(B
-
-
-; $Id: INSTALL.ja,v 1.1 2003/06/04 00:25:00 marka Exp $
diff --git a/contrib/idn/idnkit-1.0-src/LICENSE.txt b/contrib/idn/idnkit-1.0-src/LICENSE.txt
deleted file mode 100644
index 1f1e0a06..00000000
--- a/contrib/idn/idnkit-1.0-src/LICENSE.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved.
-
-By using this file, you agree to the terms and conditions set forth bellow.
-
- LICENSE TERMS AND CONDITIONS
-
-The following License Terms and Conditions apply, unless a different
-license is obtained from Japan Network Information Center ("JPNIC"),
-a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-Chiyoda-ku, Tokyo 101-0047, Japan.
-
-1. Use, Modification and Redistribution (including distribution of any
- modified or derived work) in source and/or binary forms is permitted
- under this License Terms and Conditions.
-
-2. Redistribution of source code must retain the copyright notices as they
- appear in each source code file, this License Terms and Conditions.
-
-3. Redistribution in binary form must reproduce the Copyright Notice,
- this License Terms and Conditions, in the documentation and/or other
- materials provided with the distribution. For the purposes of binary
- distribution the "Copyright Notice" refers to the following language:
- "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-
-4. The name of JPNIC may not be used to endorse or promote products
- derived from this Software without specific prior written approval of
- JPNIC.
-
-5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
diff --git a/contrib/idn/idnkit-1.0-src/Makefile.in b/contrib/idn/idnkit-1.0-src/Makefile.in
deleted file mode 100644
index 247ca7f7..00000000
--- a/contrib/idn/idnkit-1.0-src/Makefile.in
+++ /dev/null
@@ -1,79 +0,0 @@
-# $Id: Makefile.in,v 1.1 2003/06/04 00:25:03 marka Exp $
-# Copyright (c) 2000 Japan Network Information Center. All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-PERL = perl
-MKTARPKG = ../util/mktarpkg
-SHELL = @SHELL@
-
-SUBDIRS = include lib man tools map
-
-all: force all-subdirs
-test check: force test-subdirs
-install: force install-subdirs
-clean: force clean-subdirs
-distclean: force distclean-localdir distclean-subdirs
-
-distclean-localdir:
- rm -f config.status config.cache config.log libtool Makefile
-
-all-subdirs install-subdirs clean-subdirs distclean-subdirs test-subdirs:
- @target=`echo $@ | sed 's/-subdirs$$//'`; \
- for d in $(SUBDIRS); do \
- (cd $$d; $(MAKE) DESTDIR=$(DESTDIR) $$target); \
- done
-
-install-config:
- (cd lib; $(MAKE) install-config);
-
-dist: force
- @v=`sed -ne '/^# *define *IDNKIT_VERSION/s/^.*"\([^"]*\)".*$$/\1/p' \
- $(srcdir)/include/idn/version.h`; \
- echo generate idnkit-$$v-src.tar.gz; \
- cd $(srcdir); \
- $(PERL) $(MKTARPKG) --gzip=9 idnkit-$$v-src
-
-force:
diff --git a/contrib/idn/idnkit-1.0-src/NEWS b/contrib/idn/idnkit-1.0-src/NEWS
deleted file mode 100644
index 81c7c021..00000000
--- a/contrib/idn/idnkit-1.0-src/NEWS
+++ /dev/null
@@ -1,186 +0,0 @@
-; $Id: NEWS,v 1.1 2003/06/04 00:25:03 marka Exp $
-
-Major changes in idnkit version 1.0:
-
-* Change ACE prefix of Punycode from 'zq--' to 'xn--'. And delete
- configure's --with-punycode-prefix option.
-
-* Add NAMEPREP version RFC3491. Other versions of NAMEPREP are
- removed.
-
-* Enable idnconv to handle a input line as long as memory permitted
- when encoding/decoding.
-
-* unicode-form-c and unicode-form-c/3.2.0 are not supported.
-
-* Unicode 3.0.1 and Unicode 3.1.0 are not supported.
-
-* Delete BIND8, Squid and GNU libiconv patches.
-
-Major changes in idnkit version 1.0-pr2:
-
-* The license of idnkit is changed to a less restrictive one. See
- LICENSE.txt for the new license.
-
-* The local codeset name used in the test suite, which is hard-coded
- in the previous version, can be specified by a separate header file.
-
-* IDN encoding and decoding now always check the validity of the
- result by performing roundtrip conversion check.
-
-Major changes in idnkit version 1.0-pr1:
-
-* Some test cases are added to the testsuite.
-
-* The testsuite can run on OpenBSD.
-
-Major changes in idnkit version 020829:
-
-* Testsuit is added for the library behavior check.
- Testsuit and testcases are in lib/tests. Read INSTALL (INSTALL.ja)
- for details. Tests aim at api, checker, converter, delimitermap,
- mapper, mapselecter, normalizer, res, resconf, and ucs4 at the
- moment.
-
-* "amcacez" module is renamed to "punycode".
-
-* AMC-ACE-Z and RACE are now treated as extra ACE.
-
-* Add "--with-utf8=NAME" option to configure script.
-
-Major changes in idnkit version 020730:
-
-* Complete bidi check support for NAMEPREP draft -11.
-
-* Type definitions of action flags for conversion APIs are changed
- from int to idn_action_t.
-
-* Add -nobidicheck option to idnconv command.
-
-Major changes in idnkit version 020711:
-
-* Default delimiters are added according to IDNA-10.
-
-* ``delimiter-map'' entry in config file is removed.
-
-* Add Unicode version 3.2 support.
-
-* Add preliminary support of NAMEPREP draft -11.
- This version supports NAMEPREP draft -11 without bidirectional label
- check.
-
-* Supported NAMEPREP versions are changed.
- idnkit supports NAMEPREP draft version -03, -10, and -11. Others
- are removed.
-
-* IDN encoding DUDE is removed.
-
-* New action flags are available for conversion APIs.
- IDN_ENCODE_QUERY, IDN_DECODE_QUERY, IDN_ENCODE_STORED, and
- IDN_DECODE_STORED are newly created according to IDNA specification.
- See include/idn/res.h for precise description.
-
-* Action flags IDN_ENCODE_APP, IDN_DECODE_APP and IDN_NAMEPREP change
- those behavior.
- See include/idn/res.h for precise description.
-
-* New decode APIs are created.
- idn_decodename2() and idn_res_decodename2() are defined to add
- conversion process from "IDN string encoded in local encoding" to
- UTF-8 before actual decode process of IDN.
-
-* idnconv with -reverse option treats input as IDN string(s) encoded
- in local encoding specified by -out option.
-
-* idnconv recognizes `-A' option which is synonym for `-noasciicheck'.
-
-* (Windows) idn Wrapper can run on Windows XP.
-
-* BIND-8 patch for BIND-8.3.3 is available and other patches of BIND-8
- are removed.
-
-Major changes in idnkit version 1.0-rc1:
-
-* NAMEPREP draft -09 is supported.
-
-* idnconv now accepts any encodings specified as argument for `-in'
- or `-out' option. `-out' accepts non-ACE, and `-in' accepts ACE.
-
-* In configuration file, `encoding-alias-file' entry is not supported
- any longer. It is simply ignored.
-
-Major changes in idnkit version 1.0-beta2:
-
-* Supported nameprep version is changed.
- Now idnkit supports nameprep-03, nameprep-06, and nameprep-08.
- Nameprep-05 and nameprep-07 are not supported any more.
-
-* Compatibility with mDNkit is added.
- This feature provides applications formerly written using mDNkit
- library with some source level compatibilities. If you want to use
- this feature, set `--enable-mdnkit-compat' option at execution time
- of configure script.
-
-* Now idnkit can set up easily without configuration file.
- As this feature is added, initialization function and some behavior
- of top level API are changed.
-
-* BIND-8 patch supports IDN conversion in itself.
-
-* (Windows) idnkit library looks for configuration files with registry
- information.
-
-* (Windows) idnkit library returns "CP<code page number>" as local
- encoding name when the environment variable "IDN_LOCAL_CODESET" is
- not set.
-
-* (Windows) libidnkit/libidnkitlite are now installed as DLL.
-
-* (Windows) idnconv can be executed as a console application.
-
-Major changes in idnkit version 1.0-beta1:
-
-* mDNkit has been renamed idnkit.
- This means all symbols with "mdn" are renamed with "idn". For
- example, a function `mdn_encodename()' is now `idn_encodename()', an
- environment variable "MDN_DISABLE" is "IDN_DISABLE", system
- configuretion file is "idn.conf", `runmdn' command is `runidn', and
- so forth.
-
-* Also, library name has been changed to "libidnkit(lite)".
-
-* `mdnsproxy' command has been removed.
-
-* `runidn' (formerly known as `runmdn') command is not installed by
- default.
- If you want to install it, set "yes" to `--enable-runidn' option
- when you run configure script.
-
-* idnkitlite library only instalation is supported.
- Set "yes" to `--enable-liteonly' option at execution of configure
- script to use this feature.
-
-* BIND-9.1.3 patch has been removed.
-
-* User configuration file is supported.
- idnkit now uses ".idnrc" in user's home directory for configuration
- of whole scheme. If there is no user configuration file, then it
- tries to load the system configuration file "idn.conf".
-
-* idnkit is now able to run without configuration file.
- If there are no configuration files (both of user's and system's),
- it sets normal configurations (the latest nameprep scheme it
- supports and the IDN encoding "Punycode") automatically at runtime.
-
-* Encoding alias information file is supported. (by generic libidnkit)
- Its name is "idnalias.conf" by default and it should be located in
- same directory where the system configuration file is. Example
- alias information file "idnalias.conf.sample" is installed
- automatically.
-
-* APIs are renewed. See manpage.
-
-* Now idnkit has full support of IDNA-07.
-
-* Internal representation of domain name is changed to UCS4 in place
- of UTF-8.
diff --git a/contrib/idn/idnkit-1.0-src/README b/contrib/idn/idnkit-1.0-src/README
deleted file mode 100644
index 83230828..00000000
--- a/contrib/idn/idnkit-1.0-src/README
+++ /dev/null
@@ -1,159 +0,0 @@
-
- idnkit
- -- internationalized domain name toolkit --
- version 1.0
- Japan Network Information Center (JPNIC)
-
-
-Table of contents of this file:
-
- 1. Overview
- 2. Directory structure of this distribution
- 3. Supported systems
- 4. Contact information
-
-See the file INSTALL for compilation and installation instructions.
-See the file NEWS for a list of major changes in the current release.
-
-
-1. Overview
-
-idnkit, which was originally known as mDNkit, is a toolkit for handling
-internationalized domain names. To handle such names, the following
-features are required:
-
- + Encoding conversion
- Multilingualized domain names have to be converted from
- the encoding application uses (local encoding) to
- the encoding used for name resolution (IDN encoding), and
- vice versa. Since domain names in IDN encoding just look
- like good old ASCII domain names, the encoding is also known
- as ASCII-compatible encoding (ACE).
-
- + NAMEPREP
- Name preparation of domain names before converting to
- IDN encoding. Basically this is a normalization process
- of the domain names.
-
-These conversion/nameprep processes to domain names have to be
-performed before they are sent to DNS servers. And since the
-processed domain names (in IDN encoding) consist of only legal ASCII
-characters, no changes are required to DNS servers.
-
-idnkit provides several ways for adding these features.
-
-This kit consists of following components.
-
- + library for handling internationalized domain names
- (libidnkit, libidnkitlite)
- Those libraries implement encoding conversion and nameprep.
- They provide easy-to-use APIs for handling internationalized
- domain name in your applications.
-
- Both libraries provide almost the same API. The difference
- between them is that libidnkit internally uses iconv() function
- to provide encoding conversion from UTF-8 to the local encoding
- (such as iso-8859-1, usually determined by the current locale),
- and vise versa. The idnconv and runidn commands in this toolkit
- use libidnkit.
-
- libidnkitlite is lightweight version of libidnkit. It assumes
- local encoding is UTF-8 so that it never uses iconv().
-
- + codeset conversion utility (idnconv)
- This command can convert internationalized domain name written
- in local encoding (e.g. EUC-JP) to ACE or the opposite direction.
- It can also convert named.conf and zone master files for BIND.
-
- + command which adds IDN feature dynamically to unix applications
- (runidn)
- This command enables normal applications to handle
- internationalized domain names by dynamically attaching special
- library to them. See ``2. using runidn'' below.
-
- Note that this command is not installed unless you specify the
- `--enable-runidn' option to `configure'. See the file `INSTALL'
- for more information about installation.
-
- + patch for BIND9 that adds IDN capability
- This patch adds IDN capability to BIND9. It adds encoding
- conversion and nameprep features to `dig', `host' and
- `nslookup'. With the patch, those commands become capable of
- internationalized domain names.
-
- + IDN wrapper for Windows applications
- On windows, name resolving request is passed to WINSOCK DLL. So,
- replacing WINSOCK DLL with multi-lingual domain name version
- makes legacy windows applications compatible with IDN. This is
- wrapper DLL for WINSOCK's name resolving functions. See
- ``3. using IDN wrapper'' below.
-
-
-2. Directory structure of this distribution
-
-Below is a directory structure of this distribution with some
-important files and their brief description.
-
- +README this file
- +README.ja .. in Japanese
- +INSTALL compilation and installation instructions.
- +INSTALL.ja .. in Japanese
- +DISTFILES list of files in this distribution
- +NEWS what's new in this version
- +ChangeLog list of changes
- +Makefile.in toplevel makefile template
- +configure a `configure' script
- +include/
- | +config.h.in template header file for configuration
- | +idn/ header files for libidnkit and libindkitlite
- | +mdn/ header files for backward compatibility
- +lib/ source for libidnkit and libidnkitlite
- +patch/
- | +bind9/ BIND9 patch
- +tools/
- | +idnconv/ source for idnconv command
- | +runidn/ source for runidn command
- +util/ utilities
- +wsock/ source for IDN wrapper
-
-
-3. Supported systems
-
-We've had successful builds on the following systems:
-
- -------------------------------------------------------------------
- OS iconv library configure options
- ===================================================================
- FreeBSD 4.7-RELEASE GNU libiconv --with-libiconv
- for Intel 1.8
- -------------------------------------------------------------------
- Red Hat Linux 7.3 standard library none
- for Intel (glibc)
- -------------------------------------------------------------------
- Solaris 9 standard library none
- for Sparc (libc)
- -------------------------------------------------------------------
-
-The latest information about supported/unsupported systems will be
-found at the mdnkit FAQ page linked from:
-
- http://www.nic.ad.jp/en/idn/
-
-
-4. Contact information
-
-Please see
-
- http://www.nic.ad.jp/en/idn/
-
-for the latest news about this kit.
-Bug reports and comments on this kit should be sent to
-
- mdnkit-bugs@nic.ad.jp
-and
- idn-cmt@nic.ad.jp
-
-respectively.
-
-
-; $Id: README,v 1.1 2003/06/04 00:24:58 marka Exp $
diff --git a/contrib/idn/idnkit-1.0-src/README.ja b/contrib/idn/idnkit-1.0-src/README.ja
deleted file mode 100644
index 8663e3ad..00000000
--- a/contrib/idn/idnkit-1.0-src/README.ja
+++ /dev/null
@@ -1,151 +0,0 @@
-
- idnkit
- -- $B9q:]2=%I%a%$%sL>%D!<%k%-%C%H(B --
- $B%P!<%8%g%s(B 1.0
- ($B<R(B) $BF|K\%M%C%H%o!<%/%$%s%U%)%a!<%7%g%s%;%s%?!<(B (JPNIC)
-
-
-$B$3$N%U%!%$%k$NL\<!(B:
-
- 1. $B35MW(B
- 2. $B%G%#%l%/%H%j9=@.(B
- 3. $BK\%-%C%H$,BP1~$7$F$$$k%7%9%F%`(B
- 4. $BK\%-%C%H$K4X$9$k:G?7>pJs!"Ld$$9g$o$;$K$D$$$F(B
-
-$B%3%s%Q%$%k$*$h$S%$%s%9%H!<%kJ}K!$K$D$$$F$O!"(BINSTALL.ja $B$H$$$&%U%!%$%k$r(B
-$B$4Mw2<$5$$!#$3$N%P!<%8%g%s$G$N<g$JJQ99E@$KIU$$$F$O!"(B($B1QJ8$G$9$,(B) NEWS
-$B$H$$$&%U%!%$%k$r$4Mw2<$5$$!#(B
-
-
-1. $B35MW(B
-
-idnkit ($B5l>N(B mDNkit) $B$H$O9q:]2=%I%a%$%sL>$r07$&$?$a$N%D!<%k%-%C%H$G$9!#(B
-$B9q:]2=%I%a%$%sL>$r07$&$?$a$K$O!"<!$N$h$&$J5!G=$,MW5a$5$l$^$9!#(B
-
-$B!&%(%s%3!<%G%#%s%0JQ49(B
- $B9q:]2=%I%a%$%sL>$KBP$7$F!"$=$N%(%s%3!<%G%#%s%0$r%"%W%j%1!<%7%g%s$,;H(B
- $BMQ$7$F$$$k$b$N(B ($B%m!<%+%k%(%s%3!<%G%#%s%0(B) $B$+$iL>A02r7h$KMQ$$$i$l$k$b(B
- $B$N(B (IDN $B%(%s%3!<%G%#%s%0(B) $B$X$NJQ49!"$^$?$=$N5UJ}8~$NJQ49$r9T$$$^$9!#(B
- $B%I%a%$%sL>$r(B IDN $B%(%s%3!<%G%#%s%0$K$7$?7k2L$O!"=>Mh$N%I%a%$%sL>$HF1(B
- $B$8$/(B ASCII $BJ8;z$N$_$G9=@.$5$l$k$N$G!"(BIDN $B%(%s%3!<%G%#%s%0$O(BASCII $B8_(B
- $B49%(%s%3!<%G%#%s%0(B (ACE) $B$H$b8F$P$l$^$9!#(B
-
-$B!&(BNAMEPREP
- $B%I%a%$%sL>$r(B IDN $B%(%s%3!<%G%#%s%0$KJQ49$9$kA0$K!"L>A0$N@55,2=$r9T$$(B
- $B$^$9!#$3$l$r(B NAMEPREP $B$H8F$S$^$9!#(B
-
-$B>e5-$N=hM}$O%I%a%$%sL>$r(B DNS $B%5!<%P$KAw$kA0$K<B9T$9$kI,MW$,$"$j$^$9!#(B
-$B=hM}:Q$N%I%a%$%sL>$O(B ASCII $BJ8;z$+$i9=@.$5$l!"=>Mh$N(B ASCII $B%I%a%$%sL>$H(B
-$B$7$F$b@5$7$$7A<0$K$J$C$F$$$k$N$G!"(BDNS $B%5!<%PB&$K$O$J$s$NJQ99$bI,MW$"$j(B
-$B$^$;$s!#(B
-
-$B$3$NG[I[%-%C%H$K$O<!$N$h$&$J$b$N$,4^$^$l$^$9!#(B
-
-$B!&9q:]2=%I%a%$%sL>$r=hM}$9$k$?$a$N%i%$%V%i%j(B (libidnkit, libidnkitlite)
- $B$3$l$i$N%i%$%V%i%j$G$O!"%(%s%3!<%G%#%s%0JQ49$d(B NAMEPREP $B$N5!G=$r<B(B
- $BAu$7$F$*$j!"%"%W%j%1!<%7%g%s$,9q:]2=%I%a%$%sL>$r4JC1$K07$($k$h$&$K(B
- $B$9$k$?$a$N(B API $B$rHw$($F$$$^$9!#(B
-
- $B$I$A$i$N%i%$%V%i%j$b$[$H$s$IF1$8(B API $B$rDs6!$7$^$9!#N><T$NAj0cE@$G$9(B
- $B$,!"(Blibidnkit $B$N$[$&$O(B iconv() $B4X?t$r;H$C$F(B UTF-8 $B$H%m!<%+%k%(%s%3!<(B
- $B%G%#%s%0(B (iso-8859-1 $B$J$I!"DL>o$O(B locale $B$+$i7hDj$5$l$^$9(B) $B$H$N4V$N(B
- $BJQ495!G=$rDs6!$7$F$$$^$9!#K\%D!<%k%-%C%HIUB0$N(B idnconv $B$*$h$S(B runidn
- $B$O(B libidnkit $B$r;HMQ$7$F$$$^$9!#(B
-
- libidnkitlite $B$O(B libidnkit $B$N7ZNLHG$G$9!#%m!<%+%k%(%s%3!<%G%#%s%0$O(B
- $B>o$K(B UTF-8 $B$@$H2>Dj$7$F$*$j!"(Biconv() $B$O;HMQ$7$^$;$s!#(B
-
-$B!&%3!<%I%;%C%H%3%s%P!<%?(B (idnconv)
- $B%m!<%+%k%(%s%3!<%G%#%s%0(B ($B$?$H$($P(B EUC-JP) $B$G=q$+$l$?9q:]2=%I%a%$%s(B
- $BL>$+$i(B ACE $B$X$NJQ49$d!"$=$N5UJQ49$r9T$($k%3%^%s%I$G$9!#(BBIND $BMQ$N(B
- named.conf $B$d%>!<%s%^%9%?%U%!%$%k$rJQ49$9$k$3$H$b2DG=$G$9!#(B
-
-$B!&(BUNIX $B%"%W%j%1!<%7%g%s$K(B IDN $B5!G=$rF0E*$KDI2C$9$k%3%^%s%I(B (runidn)
- UNIX $B$NDL>o$N%"%W%j%1!<%7%g%s$G9q:]2=%I%a%$%sL>$r<h$j07$&$?$a$K!"FC(B
- $BJL$J%i%$%V%i%j$rF0E*$K%j%s%/$9$k$?$a$N%3%^%s%I$G$9!#>\$7$/$O!"8e=R$N(B
- $B!V(B2. runidn $B$r;H$&!W$r8fMw$/$@$5$$!#(B
-
- $B$J$*!"(Bconfigure $B<B9T;~$K(B `--enable-runidn' $B$r;XDj$7$J$$$H!"(Brunidn $B$O(B
- $B%$%s%9%H!<%k$5$l$^$;$s!#%$%s%9%H!<%k$K4X$7$F!">\$7$/$O(B INSTALL.ja $B$H(B
- $B$$$&%U%!%$%k$r$4Mw$/$@$5$$!#(B
-
-$B!&(BBIND9 $B$K(B IDN $B5!G=$rDI2C$9$k%Q%C%A(B
- BIND $B$K(B IDN $B$N5!G=$rDI2C$9$k%Q%C%A$G$9!#(B`dig'$B!"(B`host'$B!"(B`nslookup' $B$K(B
- $B%(%s%3!<%G%#%s%0JQ49$H(B NAMEPREP $B$N5!G=$rDI2C$7!"9q:]2=%I%a%$%sL>$,07(B
- $B$($k$h$&$K$7$^$9!#(B
-
-$B!&(BWindows $B%"%W%j%1!<%7%g%sMQ$N(B IDN $B%i%C%Q!<(B
- WINSOCK $B$NL>A02r7h5!G=$KBP$9$k%i%C%Q!<(B DLL $B$G$9!#(BWindows $B>e$G$O!"L>(B
- $BA02r7h$NMW5a$O!"(BWINSOCK DLL $B$rDL$7$F9T$o$l$^$9!#$=$3$G!"$3$l$r9q:]2=(B
- $B%I%a%$%sMQ$N(B WINSOCK DLL $B$KCV$-49$($k$3$H$G!"=>Mh$N(B Windows $B%"%W%j%1!<(B
- $B%7%g%s$G$b(B IDN $B5!G=$r;HMQ$G$-$k$h$&$K$7$^$9!#>\$7$/$O!"8e=R$N(B
- $B!V(B3. IDN $B%i%C%Q!<$r;H$&!W$r8fMw$/$@$5$$!#(B
-
-
-2. $B%G%#%l%/%H%j9=@.(B
-
-$BG[I[%-%C%H$N%G%#%l%/%H%j9=@.$H!"<gMW$J%U%!%$%k$r<($7$^$9!#(B
-
- +README $B1Q8lHG$N(B README
- +README.ja $B$3$N%U%!%$%k(B
- +INSTALL $B1Q8lHG$N(B INSTALL
- +INSTALL.ja $B%3%s%Q%$%k$H%$%s%9%H!<%kJ}K!(B
- +DISTFILES $BG[I[$5$l$k%U%!%$%k0lMw(B
- +NEWS $B<g$JJQ99(B
- +ChangeLog $BJQ99>\:Y(B
- +configure configure $B%9%/%j%W%H(B
- +Makefile.in $B%H%C%W%l%Y%k$N(B Makefile $B$N%F%s%W%l!<%H(B
- +include/
- | +config.h.in config.h $B$N%F%s%W%l!<%H(B
- | +idn/ libidnkit, libidnkitlite $B$N%X%C%@%U%!%$%k(B
- | +mdn/ $B5l%P!<%8%g%s$H$N8_49MQ%X%C%@%U%!%$%k(B
- +lib/ libidnkit, libidnkitlite $B$N%=!<%9(B
- +patch/
- | +bind9/ BIND9 $BMQ%Q%C%A(B
- +tools/
- | +idnconv/ idnconv $B%3%^%s%I$N%=!<%9(B
- | +runidn/ runidn $B%3%^%s%I$N%=!<%9(B
- +util/ $B%f!<%F%#%j%F%#(B
- +wsock/ IDN $B%i%C%Q!<$N%=!<%9(B
-
-
-3. $BK\%-%C%H$,BP1~$7$F$$$k%7%9%F%`(B
-
-$B@5>o$K%$%s%9%H!<%k$G$-$k$3$H$,3NG'$G$-$F$$$k$N$O!"<!$N%7%9%F%`$G$9!#(B
-
- ------------------------------------------------------------------
- OS iconv configure $B$N%*%W%7%g%s(B
- ==================================================================
- FreeBSD 4.7-RELEASE GNU libiconv --with-libiconv
- Intel 1.8
- -------------------------------------------------------------------
- Red Hat Linux 7.3 $BI8=`%i%$%V%i%j(B $B$J$7(B
- Intel (glibc)
- ------------------------------------------------------------------
- Solaris 9 $BI8=`%i%$%V%i%j(B $B$J$7(B
- Sparc (libc)
- -------------------------------------------------------------------
-
-$BK\%-%C%H$,BP1~$7$F$$$k(B/$B$7$F$$$J$$%7%9%F%`$K4X$9$k:G?7$N>pJs$O!"<!$N$H(B
-$B$3$m$+$iC)$l$k(B mdnkit FAQ $B$N%Z!<%8$K5-$5$l$F$$$^$9!#(B
-
- http://www.nic.ad.jp/ja/idn/
-
-
-4. $BK\%-%C%H$K4X$9$k:G?7>pJs!"Ld$$9g$o$;$K$D$$$F(B
-
-$BK\%-%C%H$K4X$9$k:G?7>pJs$K$D$$$F$O!"(B
-
- http://www.nic.ad.jp/ja/idn/
-
-$B$r;2>H$7$F$/$@$5$$(B
-$BK\%-%C%H$K4X$9$k%P%0%l%]!<%H$*$h$S%3%a%s%H$O!"$=$l$>$l(B
-
- mdnkit-bugs@nic.ad.jp
-$B$*$h$S(B
- idn-cmt@nic.ad.jp
-
-$B$X$*4j$$$7$^$9!#(B
-
-
-; $Id: README.ja,v 1.1 2003/06/04 00:24:59 marka Exp $
diff --git a/contrib/idn/idnkit-1.0-src/acconfig.h b/contrib/idn/idnkit-1.0-src/acconfig.h
deleted file mode 100644
index 0da81f2f..00000000
--- a/contrib/idn/idnkit-1.0-src/acconfig.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* $Id: acconfig.h,v 1.1 2003/06/04 00:25:03 marka Exp $ */
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-@TOP@
-
-/* Define as an appropriate type (ex. int) if your system doesn't have. */
-#undef BOOL
-
-@BOTTOM@
-/* Define as the pathname of the shared libc object if your system has one. */
-#undef SOPATH_LIBC
-
-/* Define as the pathname of the shared libnsl object if your system has one. */
-#undef SOPATH_LIBNSL
diff --git a/contrib/idn/idnkit-1.0-src/aclocal.m4 b/contrib/idn/idnkit-1.0-src/aclocal.m4
deleted file mode 100644
index b165a9a9..00000000
--- a/contrib/idn/idnkit-1.0-src/aclocal.m4
+++ /dev/null
@@ -1,472 +0,0 @@
-##
-## $Id: aclocal.m4,v 1.1 2003/06/04 00:25:05 marka Exp $
-##
-AC_DEFUN(AC_FIND_SYSTEM_SHOBJ,[
-AC_MSG_CHECKING(for $1 shared object)
-shobj_name=$1
-shobj_path=
-case "$host" in
-*-hpux*)
- SOEXT=sl
- ;;
-*)
- SOEXT=so
- ;;
-esac
-for shobj_libdir in /lib /usr/lib; do
- if test -f $shobj_libdir/$shobj_name.$SOEXT; then
- shobj_path=$shobj_libdir/$shobj_name.$SOEXT
- else
- shobj_path=`ls -r $shobj_libdir/$shobj_name.$SOEXT* 2>/dev/null | head -1`
- if test "$shobj_path" != "" -a -f "$shobj_path"; then
- :
- else
- shobj_path=
- fi
- fi
- if test "$shobj_path" != ""; then
- AC_MSG_RESULT($shobj_path)
- shobj_pathsymbol=SOPATH_`echo $shobj_name | sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
- AC_DEFINE_UNQUOTED($shobj_pathsymbol, "$shobj_path")
- break
- fi
-done
-if test "$shobj_path" = ""; then
- AC_MSG_RESULT(no)
-fi
-])dnl
-
-## libtool.m4 - Configure libtool for the target system. -*-Shell-script-*-
-## Copyright (C) 1996-1999, 2000 Free Software Foundation, Inc.
-## Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 2 of the License, or
-## (at your option) any later version.
-##
-## This program is distributed in the hope that it will be useful, but
-## WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with this program; if not, write to the Free Software
-## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-##
-## As a special exception to the GNU General Public License, if you
-## distribute this file as part of a program that contains a
-## configuration script generated by Autoconf, you may include it under
-## the same distribution terms that you use for the rest of that program.
-
-# serial 40 AC_PROG_LIBTOOL
-AC_DEFUN(AC_PROG_LIBTOOL,
-[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
-
-# Save cache, so that ltconfig can load it
-AC_CACHE_SAVE
-
-# Actually configure libtool. ac_aux_dir is where install-sh is found.
-CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
-LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \
-LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \
-DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \
-${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \
-$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \
-|| AC_MSG_ERROR([libtool configure failed])
-
-# Reload cache, that may have been modified by ltconfig
-AC_CACHE_LOAD
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-AC_SUBST(LIBTOOL)dnl
-
-# Redirect the config.log output again, so that the ltconfig log is not
-# clobbered by the next message.
-exec 5>>./config.log
-])
-
-AC_DEFUN(AC_LIBTOOL_SETUP,
-[AC_PREREQ(2.13)dnl
-AC_REQUIRE([AC_ENABLE_SHARED])dnl
-AC_REQUIRE([AC_ENABLE_STATIC])dnl
-AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-AC_REQUIRE([AC_PROG_RANLIB])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_PROG_LD])dnl
-AC_REQUIRE([AC_PROG_NM])dnl
-AC_REQUIRE([AC_PROG_LN_S])dnl
-dnl
-
-case "$target" in
-NONE) lt_target="$host" ;;
-*) lt_target="$target" ;;
-esac
-
-# Check for any special flags to pass to ltconfig.
-libtool_flags="--cache-file=$cache_file"
-test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared"
-test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static"
-test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install"
-test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc"
-test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
-ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN],
-[libtool_flags="$libtool_flags --enable-dlopen"])
-ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
-[libtool_flags="$libtool_flags --enable-win32-dll"])
-AC_ARG_ENABLE(libtool-lock,
- [ --disable-libtool-lock avoid locking (might break parallel builds)])
-test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock"
-test x"$silent" = xyes && libtool_flags="$libtool_flags --silent"
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case "$lt_target" in
-*-*-irix6*)
- # Find out which ABI we are using.
- echo '[#]line __oline__ "configure"' > conftest.$ac_ext
- if AC_TRY_EVAL(ac_compile); then
- case "`/usr/bin/file conftest.o`" in
- *32-bit*)
- LD="${LD-ld} -32"
- ;;
- *N32*)
- LD="${LD-ld} -n32"
- ;;
- *64-bit*)
- LD="${LD-ld} -64"
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-
-*-*-sco3.2v5*)
- # On SCO OpenServer 5, we need -belf to get full-featured binaries.
- SAVE_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -belf"
- AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
- [AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])])
- if test x"$lt_cv_cc_needs_belf" != x"yes"; then
- # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
- CFLAGS="$SAVE_CFLAGS"
- fi
- ;;
-
-ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
-[*-*-cygwin* | *-*-mingw*)
- AC_CHECK_TOOL(DLLTOOL, dlltool, false)
- AC_CHECK_TOOL(AS, as, false)
- AC_CHECK_TOOL(OBJDUMP, objdump, false)
- ;;
-])
-esac
-])
-
-# AC_LIBTOOL_DLOPEN - enable checks for dlopen support
-AC_DEFUN(AC_LIBTOOL_DLOPEN, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])])
-
-# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's
-AC_DEFUN(AC_LIBTOOL_WIN32_DLL, [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])])
-
-# AC_ENABLE_SHARED - implement the --enable-shared flag
-# Usage: AC_ENABLE_SHARED[(DEFAULT)]
-# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
-# `yes'.
-AC_DEFUN(AC_ENABLE_SHARED, [dnl
-define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE(shared,
-changequote(<<, >>)dnl
-<< --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
-changequote([, ])dnl
-[p=${PACKAGE-default}
-case "$enableval" in
-yes) enable_shared=yes ;;
-no) enable_shared=no ;;
-*)
- enable_shared=no
- # Look at the argument we got. We use all the common list separators.
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
- for pkg in $enableval; do
- if test "X$pkg" = "X$p"; then
- enable_shared=yes
- fi
- done
- IFS="$ac_save_ifs"
- ;;
-esac],
-enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
-])
-
-# AC_DISABLE_SHARED - set the default shared flag to --disable-shared
-AC_DEFUN(AC_DISABLE_SHARED, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_SHARED(no)])
-
-# AC_ENABLE_STATIC - implement the --enable-static flag
-# Usage: AC_ENABLE_STATIC[(DEFAULT)]
-# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
-# `yes'.
-AC_DEFUN(AC_ENABLE_STATIC, [dnl
-define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE(static,
-changequote(<<, >>)dnl
-<< --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
-changequote([, ])dnl
-[p=${PACKAGE-default}
-case "$enableval" in
-yes) enable_static=yes ;;
-no) enable_static=no ;;
-*)
- enable_static=no
- # Look at the argument we got. We use all the common list separators.
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
- for pkg in $enableval; do
- if test "X$pkg" = "X$p"; then
- enable_static=yes
- fi
- done
- IFS="$ac_save_ifs"
- ;;
-esac],
-enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
-])
-
-# AC_DISABLE_STATIC - set the default static flag to --disable-static
-AC_DEFUN(AC_DISABLE_STATIC, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_STATIC(no)])
-
-
-# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
-# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
-# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
-# `yes'.
-AC_DEFUN(AC_ENABLE_FAST_INSTALL, [dnl
-define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE(fast-install,
-changequote(<<, >>)dnl
-<< --enable-fast-install[=PKGS] optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT],
-changequote([, ])dnl
-[p=${PACKAGE-default}
-case "$enableval" in
-yes) enable_fast_install=yes ;;
-no) enable_fast_install=no ;;
-*)
- enable_fast_install=no
- # Look at the argument we got. We use all the common list separators.
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
- for pkg in $enableval; do
- if test "X$pkg" = "X$p"; then
- enable_fast_install=yes
- fi
- done
- IFS="$ac_save_ifs"
- ;;
-esac],
-enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl
-])
-
-# AC_ENABLE_FAST_INSTALL - set the default to --disable-fast-install
-AC_DEFUN(AC_DISABLE_FAST_INSTALL, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_FAST_INSTALL(no)])
-
-# AC_PROG_LD - find the path to the GNU or non-GNU linker
-AC_DEFUN(AC_PROG_LD,
-[AC_ARG_WITH(gnu-ld,
-[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
-test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-ac_prog=ld
-if test "$ac_cv_prog_gcc" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- AC_MSG_CHECKING([for ld used by GCC])
- ac_prog=`($CC -print-prog-name=ld) 2>&5`
- case "$ac_prog" in
- # Accept absolute paths.
-changequote(,)dnl
- [\\/]* | [A-Za-z]:[\\/]*)
- re_direlt='/[^/][^/]*/\.\./'
-changequote([,])dnl
- # Canonicalize the path of ld
- ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
- while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
- done
- test -z "$LD" && LD="$ac_prog"
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
-elif test "$with_gnu_ld" = yes; then
- AC_MSG_CHECKING([for GNU ld])
-else
- AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(ac_cv_path_LD,
-[if test -z "$LD"; then
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- ac_cv_path_LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some GNU ld's only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
- test "$with_gnu_ld" != no && break
- else
- test "$with_gnu_ld" != yes && break
- fi
- fi
- done
- IFS="$ac_save_ifs"
-else
- ac_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$ac_cv_path_LD"
-if test -n "$LD"; then
- AC_MSG_RESULT($LD)
-else
- AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-AC_PROG_LD_GNU
-])
-
-AC_DEFUN(AC_PROG_LD_GNU,
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
- ac_cv_prog_gnu_ld=yes
-else
- ac_cv_prog_gnu_ld=no
-fi])
-])
-
-# AC_PROG_NM - find the path to a BSD-compatible name lister
-AC_DEFUN(AC_PROG_NM,
-[AC_MSG_CHECKING([for BSD-compatible nm])
-AC_CACHE_VAL(ac_cv_path_NM,
-[if test -n "$NM"; then
- # Let the user override the test.
- ac_cv_path_NM="$NM"
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
- for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then
- # Check to see if the nm accepts a BSD-compat flag.
- # Adding the `sed 1q' prevents false positives on HP-UX, which says:
- # nm: unknown option "B" ignored
- if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
- ac_cv_path_NM="$ac_dir/nm -B"
- break
- elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
- ac_cv_path_NM="$ac_dir/nm -p"
- break
- else
- ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but
- continue # so that we can try to find one that supports BSD flags
- fi
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm
-fi])
-NM="$ac_cv_path_NM"
-AC_MSG_RESULT([$NM])
-])
-
-# AC_CHECK_LIBM - check for math library
-AC_DEFUN(AC_CHECK_LIBM,
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-LIBM=
-case "$lt_target" in
-*-*-beos* | *-*-cygwin*)
- # These system don't have libm
- ;;
-*-ncr-sysv4.3*)
- AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
- AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
- ;;
-*)
- AC_CHECK_LIB(m, main, LIBM="-lm")
- ;;
-esac
-])
-
-# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
-# the libltdl convenience library and INCLTDL to the include flags for
-# the libltdl header and adds --enable-ltdl-convenience to the
-# configure arguments. Note that LIBLTDL and INCLTDL are not
-# AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If DIR is not
-# provided, it is assumed to be `libltdl'. LIBLTDL will be prefixed
-# with '${top_builddir}/' and INCLTDL will be prefixed with
-# '${top_srcdir}/' (note the single quotes!). If your package is not
-# flat and you're not using automake, define top_builddir and
-# top_srcdir appropriately in the Makefiles.
-AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
- case "$enable_ltdl_convenience" in
- no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
- "") enable_ltdl_convenience=yes
- ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
- esac
- LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
- INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
-])
-
-# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
-# the libltdl installable library and INCLTDL to the include flags for
-# the libltdl header and adds --enable-ltdl-install to the configure
-# arguments. Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is
-# AC_CONFIG_SUBDIRS called. If DIR is not provided and an installed
-# libltdl is not found, it is assumed to be `libltdl'. LIBLTDL will
-# be prefixed with '${top_builddir}/' and INCLTDL will be prefixed
-# with '${top_srcdir}/' (note the single quotes!). If your package is
-# not flat and you're not using automake, define top_builddir and
-# top_srcdir appropriately in the Makefiles.
-# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
-AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
- AC_CHECK_LIB(ltdl, main,
- [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
- [if test x"$enable_ltdl_install" = xno; then
- AC_MSG_WARN([libltdl not installed, but installation disabled])
- else
- enable_ltdl_install=yes
- fi
- ])
- if test x"$enable_ltdl_install" = x"yes"; then
- ac_configure_args="$ac_configure_args --enable-ltdl-install"
- LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
- INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
- else
- ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
- LIBLTDL="-lltdl"
- INCLTDL=
- fi
-])
-
-dnl old names
-AC_DEFUN(AM_PROG_LIBTOOL, [indir([AC_PROG_LIBTOOL])])dnl
-AC_DEFUN(AM_ENABLE_SHARED, [indir([AC_ENABLE_SHARED], $@)])dnl
-AC_DEFUN(AM_ENABLE_STATIC, [indir([AC_ENABLE_STATIC], $@)])dnl
-AC_DEFUN(AM_DISABLE_SHARED, [indir([AC_DISABLE_SHARED], $@)])dnl
-AC_DEFUN(AM_DISABLE_STATIC, [indir([AC_DISABLE_STATIC], $@)])dnl
-AC_DEFUN(AM_PROG_LD, [indir([AC_PROG_LD])])dnl
-AC_DEFUN(AM_PROG_NM, [indir([AC_PROG_NM])])dnl
-
-dnl This is just to silence aclocal about the macro not being used
-ifelse([AC_DISABLE_FAST_INSTALL])dnl
diff --git a/contrib/idn/idnkit-1.0-src/config.guess b/contrib/idn/idnkit-1.0-src/config.guess
deleted file mode 100755
index dff9e481..00000000
--- a/contrib/idn/idnkit-1.0-src/config.guess
+++ /dev/null
@@ -1,1317 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-# Free Software Foundation, Inc.
-
-timestamp='2001-09-04'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Written by Per Bothner <bothner@cygnus.com>.
-# Please send patches to <config-patches@gnu.org>.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub. If it succeeds, it prints the system name on stdout, and
-# exits with 0. Otherwise, it exits with 1.
-#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit 0 ;;
- --version | -v )
- echo "$version" ; exit 0 ;;
- --help | --h* | -h )
- echo "$usage"; exit 0 ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help" >&2
- exit 1 ;;
- * )
- break ;;
- esac
-done
-
-if test $# != 0; then
- echo "$me: too many arguments$help" >&2
- exit 1
-fi
-
-
-dummy=dummy-$$
-trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script.
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,) echo "int dummy(){}" > $dummy.c ;
- for c in cc gcc c89 ; do
- ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ;
- if test $? = 0 ; then
- CC_FOR_BUILD="$c"; break ;
- fi ;
- done ;
- rm -f $dummy.c $dummy.o $dummy.rel ;
- if test x"$CC_FOR_BUILD" = x ; then
- CC_FOR_BUILD=no_compiler_found ;
- fi
- ;;
- ,,*) CC_FOR_BUILD=$CC ;;
- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
-esac'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
- PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- *:NetBSD:*:*)
- # Netbsd (nbsd) targets should (where applicable) match one or
- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
- # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
- # switched to ELF, *-*-netbsd* would select the old
- # object file format. This provides both forward
- # compatibility and a consistent mechanism for selecting the
- # object file format.
- # Determine the machine/vendor (is the vendor relevant).
- case "${UNAME_MACHINE}" in
- amiga) machine=m68k-unknown ;;
- arm32) machine=arm-unknown ;;
- atari*) machine=m68k-atari ;;
- sun3*) machine=m68k-sun ;;
- mac68k) machine=m68k-apple ;;
- macppc) machine=powerpc-apple ;;
- hp3[0-9][05]) machine=m68k-hp ;;
- ibmrt|romp-ibm) machine=romp-ibm ;;
- *) machine=${UNAME_MACHINE}-unknown ;;
- esac
- # The Operating System including object format, if it has switched
- # to ELF recently, or will in the future.
- case "${UNAME_MACHINE}" in
- i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k)
- eval $set_cc_for_build
- if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep __ELF__ >/dev/null
- then
- # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- # Return netbsd for either. FIX?
- os=netbsd
- else
- os=netbsdelf
- fi
- ;;
- *)
- os=netbsd
- ;;
- esac
- # The OS release
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
- # contains redundant information, the shorter form:
- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
- exit 0 ;;
- alpha:OSF1:*:*)
- if test $UNAME_RELEASE = "V4.0"; then
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
- fi
- # A Vn.n version is a released version.
- # A Tn.n version is a released field test version.
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
- cat <<EOF >$dummy.s
- .data
-\$Lformat:
- .byte 37,100,45,37,120,10,0 # "%d-%x\n"
-
- .text
- .globl main
- .align 4
- .ent main
-main:
- .frame \$30,16,\$26,0
- ldgp \$29,0(\$27)
- .prologue 1
- .long 0x47e03d80 # implver \$0
- lda \$2,-1
- .long 0x47e20c21 # amask \$2,\$1
- lda \$16,\$Lformat
- mov \$0,\$17
- not \$1,\$18
- jsr \$26,printf
- ldgp \$29,0(\$26)
- mov 0,\$16
- jsr \$26,exit
- .end main
-EOF
- eval $set_cc_for_build
- $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
- if test "$?" = 0 ; then
- case `./$dummy` in
- 0-0)
- UNAME_MACHINE="alpha"
- ;;
- 1-0)
- UNAME_MACHINE="alphaev5"
- ;;
- 1-1)
- UNAME_MACHINE="alphaev56"
- ;;
- 1-101)
- UNAME_MACHINE="alphapca56"
- ;;
- 2-303)
- UNAME_MACHINE="alphaev6"
- ;;
- 2-307)
- UNAME_MACHINE="alphaev67"
- ;;
- 2-1307)
- UNAME_MACHINE="alphaev68"
- ;;
- esac
- fi
- rm -f $dummy.s $dummy
- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- exit 0 ;;
- Alpha\ *:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # Should we change UNAME_MACHINE based on the output of uname instead
- # of the specific Alpha model?
- echo alpha-pc-interix
- exit 0 ;;
- 21064:Windows_NT:50:3)
- echo alpha-dec-winnt3.5
- exit 0 ;;
- Amiga*:UNIX_System_V:4.0:*)
- echo m68k-unknown-sysv4
- exit 0;;
- amiga:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- *:[Aa]miga[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-amigaos
- exit 0 ;;
- arc64:OpenBSD:*:*)
- echo mips64el-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- arc:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- hkmips:OpenBSD:*:*)
- echo mips-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- pmax:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- sgi:OpenBSD:*:*)
- echo mips-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- wgrisc:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- *:OS/390:*:*)
- echo i370-ibm-openedition
- exit 0 ;;
- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix${UNAME_RELEASE}
- exit 0;;
- SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
- exit 0;;
- Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
- # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "`(/bin/universe) 2>/dev/null`" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit 0 ;;
- NILE*:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit 0 ;;
- sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- i86pc:SunOS:5.*:*)
- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:6*:*)
- # According to config.sub, this is the proper way to canonicalize
- # SunOS6. Hard to guess exactly what SunOS6 will be like, but
- # it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:*:*)
- case "`/usr/bin/arch -k`" in
- Series*|S4*)
- UNAME_RELEASE=`uname -v`
- ;;
- esac
- # Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
- exit 0 ;;
- sun3*:SunOS:*:*)
- echo m68k-sun-sunos${UNAME_RELEASE}
- exit 0 ;;
- sun*:*:4.2BSD:*)
- UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
- test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
- case "`/bin/arch`" in
- sun3)
- echo m68k-sun-sunos${UNAME_RELEASE}
- ;;
- sun4)
- echo sparc-sun-sunos${UNAME_RELEASE}
- ;;
- esac
- exit 0 ;;
- aushp:SunOS:*:*)
- echo sparc-auspex-sunos${UNAME_RELEASE}
- exit 0 ;;
- sparc*:NetBSD:*)
- echo `uname -p`-unknown-netbsd${UNAME_RELEASE}
- exit 0 ;;
- atari*:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- # The situation for MiNT is a little confusing. The machine name
- # can be virtually everything (everything which is not
- # "atarist" or "atariste" at least should have a processor
- # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
- # to the lowercase version "mint" (or "freemint"). Finally
- # the system name "TOS" denotes a system which is actually not
- # MiNT. But MiNT is downward compatible to TOS, so this should
- # be no problem.
- atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
- atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
- *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
- milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint${UNAME_RELEASE}
- exit 0 ;;
- hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint${UNAME_RELEASE}
- exit 0 ;;
- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint${UNAME_RELEASE}
- exit 0 ;;
- sun3*:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mac68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvme68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvme88k:OpenBSD:*:*)
- echo m88k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten${UNAME_RELEASE}
- exit 0 ;;
- RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
- exit 0 ;;
- RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix${UNAME_RELEASE}
- exit 0 ;;
- VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix${UNAME_RELEASE}
- exit 0 ;;
- 2020:CLIX:*:* | 2430:CLIX:*:*)
- echo clipper-intergraph-clix${UNAME_RELEASE}
- exit 0 ;;
- mips:*:*:UMIPS | mips:*:*:RISCos)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
- #if defined (host_mips) && defined (MIPSEB)
- #if defined (SYSTYPE_SYSV)
- printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_SVR4)
- printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
- printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
- #endif
- #endif
- exit (-1);
- }
-EOF
- $CC_FOR_BUILD $dummy.c -o $dummy \
- && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
- && rm -f $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
- echo mips-mips-riscos${UNAME_RELEASE}
- exit 0 ;;
- Motorola:PowerMAX_OS:*:*)
- echo powerpc-motorola-powermax
- exit 0 ;;
- Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit 0 ;;
- m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit 0 ;;
- m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit 0 ;;
- m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit 0 ;;
- AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
- then
- if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
- [ ${TARGET_BINARY_INTERFACE}x = x ]
- then
- echo m88k-dg-dgux${UNAME_RELEASE}
- else
- echo m88k-dg-dguxbcs${UNAME_RELEASE}
- fi
- else
- echo i586-dg-dgux${UNAME_RELEASE}
- fi
- exit 0 ;;
- M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit 0 ;;
- M88*:*:R3*:*)
- # Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit 0 ;;
- XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit 0 ;;
- Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit 0 ;;
- *:IRIX*:*:*)
- echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit 0 ;;
- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
- i*86:AIX:*:*)
- echo i386-ibm-aix
- exit 0 ;;
- ia64:AIX:*:*)
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
- exit 0 ;;
- *:AIX:2:3)
- if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <sys/systemcfg.h>
-
- main()
- {
- if (!__power_pc())
- exit(1);
- puts("powerpc-ibm-aix3.2.5");
- exit(0);
- }
-EOF
- $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
- echo rs6000-ibm-aix3.2.5
- elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
- else
- echo rs6000-ibm-aix3.2
- fi
- exit 0 ;;
- *:AIX:*:[45])
- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
- if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
- IBM_ARCH=rs6000
- else
- IBM_ARCH=powerpc
- fi
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${IBM_ARCH}-ibm-aix${IBM_REV}
- exit 0 ;;
- *:AIX:*:*)
- echo rs6000-ibm-aix
- exit 0 ;;
- ibmrt:4.4BSD:*|romp-ibm:BSD:*)
- echo romp-ibm-bsd4.4
- exit 0 ;;
- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
- echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
- exit 0 ;; # report: romp-ibm BSD 4.3
- *:BOSX:*:*)
- echo rs6000-bull-bosx
- exit 0 ;;
- DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit 0 ;;
- 9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit 0 ;;
- hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit 0 ;;
- 9000/[34678]??:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- case "${UNAME_MACHINE}" in
- 9000/31? ) HP_ARCH=m68000 ;;
- 9000/[34]?? ) HP_ARCH=m68k ;;
- 9000/[678][0-9][0-9])
- case "${HPUX_REV}" in
- 11.[0-9][0-9])
- if [ -x /usr/bin/getconf ]; then
- sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
- case "${sc_cpu_version}" in
- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
- 532) # CPU_PA_RISC2_0
- case "${sc_kernel_bits}" in
- 32) HP_ARCH="hppa2.0n" ;;
- 64) HP_ARCH="hppa2.0w" ;;
- esac ;;
- esac
- fi ;;
- esac
- if [ "${HP_ARCH}" = "" ]; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-
- #define _HPUX_SOURCE
- #include <stdlib.h>
- #include <unistd.h>
-
- int main ()
- {
- #if defined(_SC_KERNEL_BITS)
- long bits = sysconf(_SC_KERNEL_BITS);
- #endif
- long cpu = sysconf (_SC_CPU_VERSION);
-
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
- case CPU_PA_RISC2_0:
- #if defined(_SC_KERNEL_BITS)
- switch (bits)
- {
- case 64: puts ("hppa2.0w"); break;
- case 32: puts ("hppa2.0n"); break;
- default: puts ("hppa2.0"); break;
- } break;
- #else /* !defined(_SC_KERNEL_BITS) */
- puts ("hppa2.0"); break;
- #endif
- default: puts ("hppa1.0"); break;
- }
- exit (0);
- }
-EOF
- (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
- if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
- rm -f $dummy.c $dummy
- fi ;;
- esac
- echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- exit 0 ;;
- ia64:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- echo ia64-hp-hpux${HPUX_REV}
- exit 0 ;;
- 3050*:HI-UX:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <unistd.h>
- int
- main ()
- {
- long cpu = sysconf (_SC_CPU_VERSION);
- /* The order matters, because CPU_IS_HP_MC68K erroneously returns
- true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
- results, however. */
- if (CPU_IS_PA_RISC (cpu))
- {
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
- default: puts ("hppa-hitachi-hiuxwe2"); break;
- }
- }
- else if (CPU_IS_HP_MC68K (cpu))
- puts ("m68k-hitachi-hiuxwe2");
- else puts ("unknown-hitachi-hiuxwe2");
- exit (0);
- }
-EOF
- $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
- echo unknown-hitachi-hiuxwe2
- exit 0 ;;
- 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
- echo hppa1.1-hp-bsd
- exit 0 ;;
- 9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit 0 ;;
- *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- echo hppa1.0-hp-mpeix
- exit 0 ;;
- hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
- echo hppa1.1-hp-osf
- exit 0 ;;
- hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit 0 ;;
- i*86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
- echo ${UNAME_MACHINE}-unknown-osf1mk
- else
- echo ${UNAME_MACHINE}-unknown-osf1
- fi
- exit 0 ;;
- parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit 0 ;;
- hppa*:OpenBSD:*:*)
- echo hppa-unknown-openbsd
- exit 0 ;;
- C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit 0 ;;
- C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit 0 ;;
- C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit 0 ;;
- C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit 0 ;;
- C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit 0 ;;
- CRAY*X-MP:*:*:*)
- echo xmp-cray-unicos
- exit 0 ;;
- CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*[A-Z]90:*:*:*)
- echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
- | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
- -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*TS:*:*:*)
- echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*T3D:*:*:*)
- echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*T3E:*:*:*)
- echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*SV1:*:*:*)
- echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY-2:*:*:*)
- echo cray2-cray-unicos
- exit 0 ;;
- F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit 0 ;;
- hp300:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
- exit 0 ;;
- sparc*:BSD/OS:*:*)
- echo sparc-unknown-bsdi${UNAME_RELEASE}
- exit 0 ;;
- *:BSD/OS:*:*)
- echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- exit 0 ;;
- *:FreeBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit 0 ;;
- *:OpenBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- exit 0 ;;
- i*:CYGWIN*:*)
- echo ${UNAME_MACHINE}-pc-cygwin
- exit 0 ;;
- i*:MINGW*:*)
- echo ${UNAME_MACHINE}-pc-mingw32
- exit 0 ;;
- i*:PW*:*)
- echo ${UNAME_MACHINE}-pc-pw32
- exit 0 ;;
- i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
- # UNAME_MACHINE based on the output of uname instead of i386?
- echo i386-pc-interix
- exit 0 ;;
- i*:UWIN*:*)
- echo ${UNAME_MACHINE}-pc-uwin
- exit 0 ;;
- p*:CYGWIN*:*)
- echo powerpcle-unknown-cygwin
- exit 0 ;;
- prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- *:GNU:*:*)
- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit 0 ;;
- i*86:Minix:*:*)
- echo ${UNAME_MACHINE}-pc-minix
- exit 0 ;;
- arm*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux
- exit 0 ;;
- m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- mips:Linux:*:*)
- case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in
- big) echo mips-unknown-linux-gnu && exit 0 ;;
- little) echo mipsel-unknown-linux-gnu && exit 0 ;;
- esac
- ;;
- ppc:Linux:*:*)
- echo powerpc-unknown-linux-gnu
- exit 0 ;;
- ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-gnu
- exit 0 ;;
- alpha:Linux:*:*)
- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
- EV5) UNAME_MACHINE=alphaev5 ;;
- EV56) UNAME_MACHINE=alphaev56 ;;
- PCA56) UNAME_MACHINE=alphapca56 ;;
- PCA57) UNAME_MACHINE=alphapca56 ;;
- EV6) UNAME_MACHINE=alphaev6 ;;
- EV67) UNAME_MACHINE=alphaev67 ;;
- EV68*) UNAME_MACHINE=alphaev68 ;;
- esac
- objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
- exit 0 ;;
- parisc:Linux:*:* | hppa:Linux:*:*)
- # Look for CPU level
- case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- PA7*) echo hppa1.1-unknown-linux-gnu ;;
- PA8*) echo hppa2.0-unknown-linux-gnu ;;
- *) echo hppa-unknown-linux-gnu ;;
- esac
- exit 0 ;;
- parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-gnu
- exit 0 ;;
- s390:Linux:*:* | s390x:Linux:*:*)
- echo ${UNAME_MACHINE}-ibm-linux
- exit 0 ;;
- sh*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- sparc:Linux:*:* | sparc64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- x86_64:Linux:*:*)
- echo x86_64-unknown-linux-gnu
- exit 0 ;;
- i*86:Linux:*:*)
- # The BFD linker knows what the default object file format is, so
- # first see if it will tell us. cd to the root directory to prevent
- # problems with other programs or directories called `ld' in the path.
- ld_supported_targets=`cd /; ld --help 2>&1 \
- | sed -ne '/supported targets:/!d
- s/[ ][ ]*/ /g
- s/.*supported targets: *//
- s/ .*//
- p'`
- case "$ld_supported_targets" in
- elf32-i386)
- TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
- ;;
- a.out-i386-linux)
- echo "${UNAME_MACHINE}-pc-linux-gnuaout"
- exit 0 ;;
- coff-i386)
- echo "${UNAME_MACHINE}-pc-linux-gnucoff"
- exit 0 ;;
- "")
- # Either a pre-BFD a.out linker (linux-gnuoldld) or
- # one that does not give us useful --help.
- echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
- exit 0 ;;
- esac
- # Determine whether the default compiler is a.out or elf
- eval $set_cc_for_build
- cat >$dummy.c <<EOF
-#include <features.h>
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
-#ifdef __ELF__
-# ifdef __GLIBC__
-# if __GLIBC__ >= 2
- printf ("%s-pc-linux-gnu\n", argv[1]);
-# else
- printf ("%s-pc-linux-gnulibc1\n", argv[1]);
-# endif
-# else
- printf ("%s-pc-linux-gnulibc1\n", argv[1]);
-# endif
-#else
- printf ("%s-pc-linux-gnuaout\n", argv[1]);
-#endif
- return 0;
-}
-EOF
- $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
- test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
- ;;
- i*86:DYNIX/ptx:4*:*)
- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
- # earlier versions are messed up and put the nodename in both
- # sysname and nodename.
- echo i386-sequent-sysv4
- exit 0 ;;
- i*86:UNIX_SV:4.2MP:2.*)
- # Unixware is an offshoot of SVR4, but it has its own version
- # number series starting with 2...
- # I am not positive that other SVR4 systems won't match this,
- # I just have to hope. -- rms.
- # Use sysv4.2uw... so that sysv4* matches it.
- echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
- exit 0 ;;
- i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
- UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
- else
- echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
- fi
- exit 0 ;;
- i*86:*:5:[78]*)
- case `/bin/uname -X | grep "^Machine"` in
- *486*) UNAME_MACHINE=i486 ;;
- *Pentium) UNAME_MACHINE=i586 ;;
- *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
- esac
- echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
- exit 0 ;;
- i*86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
- echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
- elif /bin/uname -X 2>/dev/null >/dev/null ; then
- UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
- (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
- (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
- && UNAME_MACHINE=i586
- (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
- && UNAME_MACHINE=i686
- (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
- && UNAME_MACHINE=i686
- echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
- else
- echo ${UNAME_MACHINE}-pc-sysv32
- fi
- exit 0 ;;
- i*86:*DOS:*:*)
- echo ${UNAME_MACHINE}-pc-msdosdjgpp
- exit 0 ;;
- pc:*:*:*)
- # Left here for compatibility:
- # uname -m prints for DJGPP always 'pc', but it prints nothing about
- # the processor, so we play safe by assuming i386.
- echo i386-pc-msdosdjgpp
- exit 0 ;;
- Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit 0 ;;
- paragon:*:*:*)
- echo i860-intel-osf1
- exit 0 ;;
- i860:*:4.*:*) # i860-SVR4
- if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
- else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
- fi
- exit 0 ;;
- mini*:CTIX:SYS*5:*)
- # "miniframe"
- echo m68010-convergent-sysv
- exit 0 ;;
- M68*:*:R3V[567]*:*)
- test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
- 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
- OS_REL=''
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4.3${OS_REL} && exit 0
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4 && exit 0 ;;
- m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit 0 ;;
- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
- echo i386-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
- echo powerpc-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv${UNAME_RELEASE}
- exit 0 ;;
- RM*:ReliantUNIX-*:*:*)
- echo mips-sni-sysv4
- exit 0 ;;
- RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit 0 ;;
- *:SINIX-*:*:*)
- if uname -p 2>/dev/null >/dev/null ; then
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- echo ${UNAME_MACHINE}-sni-sysv4
- else
- echo ns32k-sni-sysv
- fi
- exit 0 ;;
- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit 0 ;;
- *:UNIX_System_V:4*:FTX*)
- # From Gerald Hewes <hewes@openmarket.com>.
- # How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit 0 ;;
- *:*:*:FTX*)
- # From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
- exit 0 ;;
- *:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo hppa1.1-stratus-vos
- exit 0 ;;
- mc68*:A/UX:*:*)
- echo m68k-apple-aux${UNAME_RELEASE}
- exit 0 ;;
- news*:NEWS-OS:6*:*)
- echo mips-sony-newsos6
- exit 0 ;;
- R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if [ -d /usr/nec ]; then
- echo mips-nec-sysv${UNAME_RELEASE}
- else
- echo mips-unknown-sysv${UNAME_RELEASE}
- fi
- exit 0 ;;
- BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
- exit 0 ;;
- BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
- echo powerpc-apple-beos
- exit 0 ;;
- BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
- exit 0 ;;
- SX-4:SUPER-UX:*:*)
- echo sx4-nec-superux${UNAME_RELEASE}
- exit 0 ;;
- SX-5:SUPER-UX:*:*)
- echo sx5-nec-superux${UNAME_RELEASE}
- exit 0 ;;
- Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody${UNAME_RELEASE}
- exit 0 ;;
- *:Rhapsody:*:*)
- echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
- exit 0 ;;
- *:Darwin:*:*)
- echo `uname -p`-apple-darwin${UNAME_RELEASE}
- exit 0 ;;
- *:procnto*:*:* | *:QNX:[0123456789]*:*)
- if test "${UNAME_MACHINE}" = "x86pc"; then
- UNAME_MACHINE=pc
- fi
- echo `uname -p`-${UNAME_MACHINE}-nto-qnx
- exit 0 ;;
- *:QNX:*:4*)
- echo i386-pc-qnx
- exit 0 ;;
- NSR-[KW]:NONSTOP_KERNEL:*:*)
- echo nsr-tandem-nsk${UNAME_RELEASE}
- exit 0 ;;
- *:NonStop-UX:*:*)
- echo mips-compaq-nonstopux
- exit 0 ;;
- BS2000:POSIX*:*:*)
- echo bs2000-siemens-sysv
- exit 0 ;;
- DS/*:UNIX_System_V:*:*)
- echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
- exit 0 ;;
- *:Plan9:*:*)
- # "uname -m" is not consistent, so use $cputype instead. 386
- # is converted to i386 for consistency with other x86
- # operating systems.
- if test "$cputype" = "386"; then
- UNAME_MACHINE=i386
- else
- UNAME_MACHINE="$cputype"
- fi
- echo ${UNAME_MACHINE}-unknown-plan9
- exit 0 ;;
- i*86:OS/2:*:*)
- # If we were able to find `uname', then EMX Unix compatibility
- # is probably installed.
- echo ${UNAME_MACHINE}-pc-os2-emx
- exit 0 ;;
- *:TOPS-10:*:*)
- echo pdp10-unknown-tops10
- exit 0 ;;
- *:TENEX:*:*)
- echo pdp10-unknown-tenex
- exit 0 ;;
- KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- echo pdp10-dec-tops20
- exit 0 ;;
- XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- echo pdp10-xkl-tops20
- exit 0 ;;
- *:TOPS-20:*:*)
- echo pdp10-unknown-tops20
- exit 0 ;;
- *:ITS:*:*)
- echo pdp10-unknown-its
- exit 0 ;;
- i*86:XTS-300:*:STOP)
- echo ${UNAME_MACHINE}-unknown-stop
- exit 0 ;;
- i*86:atheos:*:*)
- echo ${UNAME_MACHINE}-unknown-atheos
- exit 0 ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
- printf ("arm-acorn-riscix"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
- printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
- if (version < 4)
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- else
- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
-
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-# include <sys/param.h>
-# if defined (BSD)
-# if BSD == 43
- printf ("vax-dec-bsd4.3\n"); exit (0);
-# else
-# if BSD == 199006
- printf ("vax-dec-bsd4.3reno\n"); exit (0);
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# endif
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# else
- printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
- exit (1);
-}
-EOF
-
-$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
-rm -f $dummy.c $dummy
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
- case `getsysinfo -f cpu_type` in
- c1*)
- echo c1-convex-bsd
- exit 0 ;;
- c2*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit 0 ;;
- c34*)
- echo c34-convex-bsd
- exit 0 ;;
- c38*)
- echo c38-convex-bsd
- exit 0 ;;
- c4*)
- echo c4-convex-bsd
- exit 0 ;;
- esac
-fi
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
- ftp://ftp.gnu.org/pub/gnu/config/
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo = `(hostinfo) 2>/dev/null`
-/bin/universe = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/contrib/idn/idnkit-1.0-src/config.sub b/contrib/idn/idnkit-1.0-src/config.sub
deleted file mode 100755
index 393f13d3..00000000
--- a/contrib/idn/idnkit-1.0-src/config.sub
+++ /dev/null
@@ -1,1411 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-# Free Software Foundation, Inc.
-
-timestamp='2001-09-07'
-
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine. It does not imply ALL GNU software can.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Please send patches to <config-patches@gnu.org>.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support. The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
- $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit 0 ;;
- --version | -v )
- echo "$version" ; exit 0 ;;
- --help | --h* | -h )
- echo "$usage"; exit 0 ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help"
- exit 1 ;;
-
- *local*)
- # First pass through any local machine types.
- echo $1
- exit 0;;
-
- * )
- break ;;
- esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
- exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
- exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
- nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*)
- os=-$maybe_os
- basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
- *)
- basic_machine=`echo $1 | sed 's/-[^-]*$//'`
- if [ $basic_machine != $1 ]
- then os=`echo $1 | sed 's/.*-/-/'`
- else os=; fi
- ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work. We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
- -sun*os*)
- # Prevent following clause from handling this invalid input.
- ;;
- -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
- -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
- -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
- -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
- -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple | -axis)
- os=
- basic_machine=$1
- ;;
- -sim | -cisco | -oki | -wec | -winbond)
- os=
- basic_machine=$1
- ;;
- -scout)
- ;;
- -wrs)
- os=-vxworks
- basic_machine=$1
- ;;
- -chorusos*)
- os=-chorusos
- basic_machine=$1
- ;;
- -chorusrdb)
- os=-chorusrdb
- basic_machine=$1
- ;;
- -hiux*)
- os=-hiuxwe2
- ;;
- -sco5)
- os=-sco3.2v5
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco4)
- os=-sco3.2v4
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2.[4-9]*)
- os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2v[4-9]*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco*)
- os=-sco3.2v2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -udk*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -isc)
- os=-isc2.2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -clix*)
- basic_machine=clipper-intergraph
- ;;
- -isc*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -lynx*)
- os=-lynxos
- ;;
- -ptx*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
- ;;
- -windowsnt*)
- os=`echo $os | sed -e 's/windowsnt/winnt/'`
- ;;
- -psos*)
- os=-psos
- ;;
- -mint | -mint[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
- # Recognize the basic CPU types without company name.
- # Some are omitted here because they have special meanings below.
- 1750a | 580 \
- | a29k \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
- | c4x | clipper \
- | d10v | d30v | dsp16xx \
- | fr30 \
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | i370 | i860 | i960 | ia64 \
- | m32r | m68000 | m68k | m88k | mcore \
- | mips16 | mips64 | mips64el | mips64orion | mips64orionel \
- | mips64vr4100 | mips64vr4100el | mips64vr4300 \
- | mips64vr4300el | mips64vr5000 | mips64vr5000el \
- | mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \
- | mipsisa32 \
- | mn10200 | mn10300 \
- | ns16k | ns32k \
- | openrisc \
- | pdp10 | pdp11 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
- | pyramid \
- | s390 | s390x \
- | sh | sh[34] | sh[34]eb | shbe | shle \
- | sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \
- | stormy16 | strongarm \
- | tahoe | thumb | tic80 | tron \
- | v850 \
- | we32k \
- | x86 | xscale \
- | z8k)
- basic_machine=$basic_machine-unknown
- ;;
- m6811 | m68hc11 | m6812 | m68hc12)
- # Motorola 68HC11/12.
- basic_machine=$basic_machine-unknown
- os=-none
- ;;
- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
- ;;
-
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
- i*86 | x86_64)
- basic_machine=$basic_machine-pc
- ;;
- # Object if more than one company name word.
- *-*-*)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
- # Recognize the basic CPU types with company name.
- 580-* \
- | a29k-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- | alphapca5[67]-* | arc-* \
- | arm-* | armbe-* | armle-* | armv*-* \
- | bs2000-* \
- | c[123]* | c30-* | [cjt]90-* | c54x-* \
- | clipper-* | cray2-* | cydra-* \
- | d10v-* | d30v-* \
- | elxsi-* \
- | f30[01]-* | f700-* | fr30-* | fx80-* \
- | h8300-* | h8500-* \
- | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
- | i*86-* | i860-* | i960-* | ia64-* \
- | m32r-* \
- | m68000-* | m680[01234]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | mcore-* \
- | mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \
- | mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \
- | mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \
- | mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \
- | none-* | np1-* | ns16k-* | ns32k-* \
- | orion-* \
- | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
- | pyramid-* \
- | romp-* | rs6000-* \
- | s390-* | s390x-* \
- | sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* \
- | sparc-* | sparc64-* | sparc86x-* | sparclite-* \
- | sparcv9-* | sparcv9b-* | stormy16-* | strongarm-* | sv1-* \
- | t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \
- | v850-* | vax-* \
- | we32k-* \
- | x86-* | x86_64-* | xmp-* | xps100-* | xscale-* \
- | ymp-* \
- | z8k-*)
- ;;
- # Recognize the various machine names and aliases which stand
- # for a CPU type and a company and sometimes even an OS.
- 386bsd)
- basic_machine=i386-unknown
- os=-bsd
- ;;
- 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- basic_machine=m68000-att
- ;;
- 3b*)
- basic_machine=we32k-att
- ;;
- a29khif)
- basic_machine=a29k-amd
- os=-udi
- ;;
- adobe68k)
- basic_machine=m68010-adobe
- os=-scout
- ;;
- alliant | fx80)
- basic_machine=fx80-alliant
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- ;;
- am29k)
- basic_machine=a29k-none
- os=-bsd
- ;;
- amdahl)
- basic_machine=580-amdahl
- os=-sysv
- ;;
- amiga | amiga-*)
- basic_machine=m68k-unknown
- ;;
- amigaos | amigados)
- basic_machine=m68k-unknown
- os=-amigaos
- ;;
- amigaunix | amix)
- basic_machine=m68k-unknown
- os=-sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- os=-sysv
- ;;
- apollo68bsd)
- basic_machine=m68k-apollo
- os=-bsd
- ;;
- aux)
- basic_machine=m68k-apple
- os=-aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- os=-dynix
- ;;
- convex-c1)
- basic_machine=c1-convex
- os=-bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- os=-bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- os=-bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- os=-bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- os=-bsd
- ;;
- cray | ymp)
- basic_machine=ymp-cray
- os=-unicos
- ;;
- cray2)
- basic_machine=cray2-cray
- os=-unicos
- ;;
- [cjt]90)
- basic_machine=${basic_machine}-cray
- os=-unicos
- ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- cris | cris-* | etrax*)
- basic_machine=cris-axis
- ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
- decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
- ;;
- delta | 3300 | motorola-3300 | motorola-delta \
- | 3300-motorola | delta-motorola)
- basic_machine=m68k-motorola
- ;;
- delta88)
- basic_machine=m88k-motorola
- os=-sysv3
- ;;
- dpx20 | dpx20-*)
- basic_machine=rs6000-bull
- os=-bosx
- ;;
- dpx2* | dpx2*-bull)
- basic_machine=m68k-bull
- os=-sysv3
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- os=-ebmon
- ;;
- elxsi)
- basic_machine=elxsi-elxsi
- os=-bsd
- ;;
- encore | umax | mmax)
- basic_machine=ns32k-encore
- ;;
- es1800 | OSE68k | ose68k | ose | OSE)
- basic_machine=m68k-ericsson
- os=-ose
- ;;
- fx2800)
- basic_machine=i860-alliant
- ;;
- genix)
- basic_machine=ns32k-ns
- ;;
- gmicro)
- basic_machine=tron-gmicro
- os=-sysv
- ;;
- go32)
- basic_machine=i386-pc
- os=-go32
- ;;
- h3050r* | hiux*)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- os=-hms
- ;;
- h8300xray)
- basic_machine=h8300-hitachi
- os=-xray
- ;;
- h8500hms)
- basic_machine=h8500-hitachi
- os=-hms
- ;;
- harris)
- basic_machine=m88k-harris
- os=-sysv3
- ;;
- hp300-*)
- basic_machine=m68k-hp
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- os=-bsd
- ;;
- hp300hpux)
- basic_machine=m68k-hp
- os=-hpux
- ;;
- hp3k9[0-9][0-9] | hp9[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k2[0-9][0-9] | hp9k31[0-9])
- basic_machine=m68000-hp
- ;;
- hp9k3[2-9][0-9])
- basic_machine=m68k-hp
- ;;
- hp9k6[0-9][0-9] | hp6[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k7[0-79][0-9] | hp7[0-79][0-9])
- basic_machine=hppa1.1-hp
- ;;
- hp9k78[0-9] | hp78[0-9])
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][13679] | hp8[0-9][13679])
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][0-9] | hp8[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hppa-next)
- os=-nextstep3
- ;;
- hppaosf)
- basic_machine=hppa1.1-hp
- os=-osf
- ;;
- hppro)
- basic_machine=hppa1.1-hp
- os=-proelf
- ;;
- i370-ibm* | ibm*)
- basic_machine=i370-ibm
- ;;
-# I'm not sure what "Sysv32" means. Should this be sysv3.2?
- i*86v32)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv32
- ;;
- i*86v4*)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv4
- ;;
- i*86v)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv
- ;;
- i*86sol2)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-solaris2
- ;;
- i386mach)
- basic_machine=i386-mach
- os=-mach
- ;;
- i386-vsta | vsta)
- basic_machine=i386-unknown
- os=-vsta
- ;;
- iris | iris4d)
- basic_machine=mips-sgi
- case $os in
- -irix*)
- ;;
- *)
- os=-irix4
- ;;
- esac
- ;;
- isi68 | isi)
- basic_machine=m68k-isi
- os=-sysv
- ;;
- m88k-omron*)
- basic_machine=m88k-omron
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- os=-sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- os=-sysv
- ;;
- mingw32)
- basic_machine=i386-pc
- os=-mingw32
- ;;
- miniframe)
- basic_machine=m68000-convergent
- ;;
- *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
- mipsel*-linux*)
- basic_machine=mipsel-unknown
- os=-linux-gnu
- ;;
- mips*-linux*)
- basic_machine=mips-unknown
- os=-linux-gnu
- ;;
- mips3*-*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
- ;;
- mips3*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
- ;;
- mmix*)
- basic_machine=mmix-knuth
- os=-mmixware
- ;;
- monitor)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- msdos)
- basic_machine=i386-pc
- os=-msdos
- ;;
- mvs)
- basic_machine=i370-ibm
- os=-mvs
- ;;
- ncr3000)
- basic_machine=i486-ncr
- os=-sysv4
- ;;
- netbsd386)
- basic_machine=i386-unknown
- os=-netbsd
- ;;
- netwinder)
- basic_machine=armv4l-rebel
- os=-linux
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- os=-newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- os=-newsos
- ;;
- news-3600 | risc-news)
- basic_machine=mips-sony
- os=-newsos
- ;;
- necv70)
- basic_machine=v70-nec
- os=-sysv
- ;;
- next | m*-next )
- basic_machine=m68k-next
- case $os in
- -nextstep* )
- ;;
- -ns2*)
- os=-nextstep2
- ;;
- *)
- os=-nextstep3
- ;;
- esac
- ;;
- nh3000)
- basic_machine=m68k-harris
- os=-cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- os=-cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- os=-nindy
- ;;
- mon960)
- basic_machine=i960-intel
- os=-mon960
- ;;
- nonstopux)
- basic_machine=mips-compaq
- os=-nonstopux
- ;;
- np1)
- basic_machine=np1-gould
- ;;
- nsr-tandem)
- basic_machine=nsr-tandem
- ;;
- op50n-* | op60c-*)
- basic_machine=hppa1.1-oki
- os=-proelf
- ;;
- OSE68000 | ose68000)
- basic_machine=m68000-ericsson
- os=-ose
- ;;
- os68k)
- basic_machine=m68k-none
- os=-os68k
- ;;
- pa-hitachi)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- paragon)
- basic_machine=i860-intel
- os=-osf
- ;;
- pbd)
- basic_machine=sparc-tti
- ;;
- pbb)
- basic_machine=m68k-tti
- ;;
- pc532 | pc532-*)
- basic_machine=ns32k-pc532
- ;;
- pentium | p5 | k5 | k6 | nexgen)
- basic_machine=i586-pc
- ;;
- pentiumpro | p6 | 6x86 | athlon)
- basic_machine=i686-pc
- ;;
- pentiumii | pentium2)
- basic_machine=i686-pc
- ;;
- pentium-* | p5-* | k5-* | k6-* | nexgen-*)
- basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumpro-* | p6-* | 6x86-* | athlon-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumii-* | pentium2-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pn)
- basic_machine=pn-gould
- ;;
- power) basic_machine=power-ibm
- ;;
- ppc) basic_machine=powerpc-unknown
- ;;
- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppcle | powerpclittle | ppc-le | powerpc-little)
- basic_machine=powerpcle-unknown
- ;;
- ppcle-* | powerpclittle-*)
- basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64) basic_machine=powerpc64-unknown
- ;;
- ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64le | powerpc64little | ppc64-le | powerpc64-little)
- basic_machine=powerpc64le-unknown
- ;;
- ppc64le-* | powerpc64little-*)
- basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ps2)
- basic_machine=i386-ibm
- ;;
- pw32)
- basic_machine=i586-unknown
- os=-pw32
- ;;
- rom68k)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- rm[46]00)
- basic_machine=mips-siemens
- ;;
- rtpc | rtpc-*)
- basic_machine=romp-ibm
- ;;
- sa29200)
- basic_machine=a29k-amd
- os=-udi
- ;;
- sequent)
- basic_machine=i386-sequent
- ;;
- sh)
- basic_machine=sh-hitachi
- os=-hms
- ;;
- sparclite-wrs)
- basic_machine=sparclite-wrs
- os=-vxworks
- ;;
- sps7)
- basic_machine=m68k-bull
- os=-sysv2
- ;;
- spur)
- basic_machine=spur-unknown
- ;;
- st2000)
- basic_machine=m68k-tandem
- ;;
- stratus)
- basic_machine=i860-stratus
- os=-sysv4
- ;;
- sun2)
- basic_machine=m68000-sun
- ;;
- sun2os3)
- basic_machine=m68000-sun
- os=-sunos3
- ;;
- sun2os4)
- basic_machine=m68000-sun
- os=-sunos4
- ;;
- sun3os3)
- basic_machine=m68k-sun
- os=-sunos3
- ;;
- sun3os4)
- basic_machine=m68k-sun
- os=-sunos4
- ;;
- sun4os3)
- basic_machine=sparc-sun
- os=-sunos3
- ;;
- sun4os4)
- basic_machine=sparc-sun
- os=-sunos4
- ;;
- sun4sol2)
- basic_machine=sparc-sun
- os=-solaris2
- ;;
- sun3 | sun3-*)
- basic_machine=m68k-sun
- ;;
- sun4)
- basic_machine=sparc-sun
- ;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
- ;;
- sv1)
- basic_machine=sv1-cray
- os=-unicos
- ;;
- symmetry)
- basic_machine=i386-sequent
- os=-dynix
- ;;
- t3e)
- basic_machine=t3e-cray
- os=-unicos
- ;;
- tic54x | c54x*)
- basic_machine=tic54x-unknown
- os=-coff
- ;;
- tx39)
- basic_machine=mipstx39-unknown
- ;;
- tx39el)
- basic_machine=mipstx39el-unknown
- ;;
- tower | tower-32)
- basic_machine=m68k-ncr
- ;;
- udi29k)
- basic_machine=a29k-amd
- os=-udi
- ;;
- ultra3)
- basic_machine=a29k-nyu
- os=-sym1
- ;;
- v810 | necv810)
- basic_machine=v810-nec
- os=-none
- ;;
- vaxv)
- basic_machine=vax-dec
- os=-sysv
- ;;
- vms)
- basic_machine=vax-dec
- os=-vms
- ;;
- vpp*|vx|vx-*)
- basic_machine=f301-fujitsu
- ;;
- vxworks960)
- basic_machine=i960-wrs
- os=-vxworks
- ;;
- vxworks68)
- basic_machine=m68k-wrs
- os=-vxworks
- ;;
- vxworks29k)
- basic_machine=a29k-wrs
- os=-vxworks
- ;;
- w65*)
- basic_machine=w65-wdc
- os=-none
- ;;
- w89k-*)
- basic_machine=hppa1.1-winbond
- os=-proelf
- ;;
- windows32)
- basic_machine=i386-pc
- os=-windows32-msvcrt
- ;;
- xmp)
- basic_machine=xmp-cray
- os=-unicos
- ;;
- xps | xps100)
- basic_machine=xps100-honeywell
- ;;
- z8k-*-coff)
- basic_machine=z8k-unknown
- os=-sim
- ;;
- none)
- basic_machine=none-none
- os=-none
- ;;
-
-# Here we handle the default manufacturer of certain CPU types. It is in
-# some cases the only manufacturer, in others, it is the most popular.
- w89k)
- basic_machine=hppa1.1-winbond
- ;;
- op50n)
- basic_machine=hppa1.1-oki
- ;;
- op60c)
- basic_machine=hppa1.1-oki
- ;;
- mips)
- if [ x$os = x-linux-gnu ]; then
- basic_machine=mips-unknown
- else
- basic_machine=mips-mips
- fi
- ;;
- romp)
- basic_machine=romp-ibm
- ;;
- rs6000)
- basic_machine=rs6000-ibm
- ;;
- vax)
- basic_machine=vax-dec
- ;;
- pdp10)
- # there are many clones, so DEC is not a safe bet
- basic_machine=pdp10-unknown
- ;;
- pdp11)
- basic_machine=pdp11-dec
- ;;
- we32k)
- basic_machine=we32k-att
- ;;
- sh3 | sh4 | sh3eb | sh4eb)
- basic_machine=sh-unknown
- ;;
- sparc | sparcv9 | sparcv9b)
- basic_machine=sparc-sun
- ;;
- cydra)
- basic_machine=cydra-cydrome
- ;;
- orion)
- basic_machine=orion-highlevel
- ;;
- orion105)
- basic_machine=clipper-highlevel
- ;;
- mac | mpw | mac-mpw)
- basic_machine=m68k-apple
- ;;
- pmac | pmac-mpw)
- basic_machine=powerpc-apple
- ;;
- c4x*)
- basic_machine=c4x-none
- os=-coff
- ;;
- *-unknown)
- # Make sure to match an already-canonicalized machine name.
- ;;
- *)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
- *-digital*)
- basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
- ;;
- *-commodore*)
- basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
- ;;
- *)
- ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
- # First match some system type aliases
- # that might get confused with valid system types.
- # -solaris* is a basic system type, with this one exception.
- -solaris1 | -solaris1.*)
- os=`echo $os | sed -e 's|solaris1|sunos4|'`
- ;;
- -solaris)
- os=-solaris2
- ;;
- -svr4*)
- os=-sysv4
- ;;
- -unixware*)
- os=-sysv4.2uw
- ;;
- -gnu/linux*)
- os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
- ;;
- # First accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST END IN A *, to match a version number.
- # -sysv* is not here because it comes later, after sysvr4.
- -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
- | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
- | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -chorusos* | -chorusrdb* \
- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
- | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
- | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
- | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
- | -os2* | -vos*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- -qnx*)
- case $basic_machine in
- x86-* | i*86-*)
- ;;
- *)
- os=-nto$os
- ;;
- esac
- ;;
- -nto*)
- os=-nto-qnx
- ;;
- -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
- | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
- | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
- ;;
- -mac*)
- os=`echo $os | sed -e 's|mac|macos|'`
- ;;
- -linux*)
- os=`echo $os | sed -e 's|linux|linux-gnu|'`
- ;;
- -sunos5*)
- os=`echo $os | sed -e 's|sunos5|solaris2|'`
- ;;
- -sunos6*)
- os=`echo $os | sed -e 's|sunos6|solaris3|'`
- ;;
- -opened*)
- os=-openedition
- ;;
- -wince*)
- os=-wince
- ;;
- -osfrose*)
- os=-osfrose
- ;;
- -osf*)
- os=-osf
- ;;
- -utek*)
- os=-bsd
- ;;
- -dynix*)
- os=-bsd
- ;;
- -acis*)
- os=-aos
- ;;
- -386bsd)
- os=-bsd
- ;;
- -ctix* | -uts*)
- os=-sysv
- ;;
- -ns2 )
- os=-nextstep2
- ;;
- -nsk*)
- os=-nsk
- ;;
- # Preserve the version number of sinix5.
- -sinix5.*)
- os=`echo $os | sed -e 's|sinix|sysv|'`
- ;;
- -sinix*)
- os=-sysv4
- ;;
- -triton*)
- os=-sysv3
- ;;
- -oss*)
- os=-sysv3
- ;;
- -svr4)
- os=-sysv4
- ;;
- -svr3)
- os=-sysv3
- ;;
- -sysvr4)
- os=-sysv4
- ;;
- # This must come after -sysvr4.
- -sysv*)
- ;;
- -ose*)
- os=-ose
- ;;
- -es1800*)
- os=-ose
- ;;
- -xenix)
- os=-xenix
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- os=-mint
- ;;
- -none)
- ;;
- *)
- # Get rid of the `-' at the beginning of $os.
- os=`echo $os | sed 's/[^-]*-//'`
- echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
- exit 1
- ;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system. Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
- *-acorn)
- os=-riscix1.2
- ;;
- arm*-rebel)
- os=-linux
- ;;
- arm*-semi)
- os=-aout
- ;;
- pdp10-*)
- os=-tops20
- ;;
- pdp11-*)
- os=-none
- ;;
- *-dec | vax-*)
- os=-ultrix4.2
- ;;
- m68*-apollo)
- os=-domain
- ;;
- i386-sun)
- os=-sunos4.0.2
- ;;
- m68000-sun)
- os=-sunos3
- # This also exists in the configure program, but was not the
- # default.
- # os=-sunos4
- ;;
- m68*-cisco)
- os=-aout
- ;;
- mips*-cisco)
- os=-elf
- ;;
- mips*-*)
- os=-elf
- ;;
- *-tti) # must be before sparc entry or we get the wrong os.
- os=-sysv3
- ;;
- sparc-* | *-sun)
- os=-sunos4.1.1
- ;;
- *-be)
- os=-beos
- ;;
- *-ibm)
- os=-aix
- ;;
- *-wec)
- os=-proelf
- ;;
- *-winbond)
- os=-proelf
- ;;
- *-oki)
- os=-proelf
- ;;
- *-hp)
- os=-hpux
- ;;
- *-hitachi)
- os=-hiux
- ;;
- i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=-sysv
- ;;
- *-cbm)
- os=-amigaos
- ;;
- *-dg)
- os=-dgux
- ;;
- *-dolphin)
- os=-sysv3
- ;;
- m68k-ccur)
- os=-rtu
- ;;
- m88k-omron*)
- os=-luna
- ;;
- *-next )
- os=-nextstep
- ;;
- *-sequent)
- os=-ptx
- ;;
- *-crds)
- os=-unos
- ;;
- *-ns)
- os=-genix
- ;;
- i370-*)
- os=-mvs
- ;;
- *-next)
- os=-nextstep3
- ;;
- *-gould)
- os=-sysv
- ;;
- *-highlevel)
- os=-bsd
- ;;
- *-encore)
- os=-bsd
- ;;
- *-sgi)
- os=-irix
- ;;
- *-siemens)
- os=-sysv4
- ;;
- *-masscomp)
- os=-rtu
- ;;
- f30[01]-fujitsu | f700-fujitsu)
- os=-uxpv
- ;;
- *-rom68k)
- os=-coff
- ;;
- *-*bug)
- os=-coff
- ;;
- *-apple)
- os=-macos
- ;;
- *-atari*)
- os=-mint
- ;;
- *)
- os=-none
- ;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer. We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
- *-unknown)
- case $os in
- -riscix*)
- vendor=acorn
- ;;
- -sunos*)
- vendor=sun
- ;;
- -aix*)
- vendor=ibm
- ;;
- -beos*)
- vendor=be
- ;;
- -hpux*)
- vendor=hp
- ;;
- -mpeix*)
- vendor=hp
- ;;
- -hiux*)
- vendor=hitachi
- ;;
- -unos*)
- vendor=crds
- ;;
- -dgux*)
- vendor=dg
- ;;
- -luna*)
- vendor=omron
- ;;
- -genix*)
- vendor=ns
- ;;
- -mvs* | -opened*)
- vendor=ibm
- ;;
- -ptx*)
- vendor=sequent
- ;;
- -vxsim* | -vxworks*)
- vendor=wrs
- ;;
- -aux*)
- vendor=apple
- ;;
- -hms*)
- vendor=hitachi
- ;;
- -mpw* | -macos*)
- vendor=apple
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- vendor=atari
- ;;
- -vos*)
- vendor=stratus
- ;;
- esac
- basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
- ;;
-esac
-
-echo $basic_machine$os
-exit 0
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/contrib/idn/idnkit-1.0-src/configure b/contrib/idn/idnkit-1.0-src/configure
deleted file mode 100755
index 1d22dacd..00000000
--- a/contrib/idn/idnkit-1.0-src/configure
+++ /dev/null
@@ -1,3517 +0,0 @@
-#! /bin/sh
-
-# Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.13
-# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-
-# Defaults:
-ac_help=
-ac_default_prefix=/usr/local
-# Any additions from configure.in:
-ac_help="$ac_help
- --enable-debug enable debug codes [default=no]"
-ac_help="$ac_help
- --enable-mdnkit-compat enable mDNkit compatibility mode [default=no]"
-ac_help="$ac_help
- --enable-extra-ace enable additional ACE converters. [default=no]"
-ac_help="$ac_help
- --with-utf8=NAME codeset name for UTF-8 encoding [UTF-8]"
-ac_help="$ac_help
- --enable-liteonly compile and install lite library only [default=no]"
-ac_help="$ac_help
- --enable-runidn compile and install runidn [default=no]"
-ac_help="$ac_help
- --with-libiconv=IPREFIX GNU libiconv are installed in IPREFIX [PREFIX]"
-ac_help="$ac_help
- --with-iconv-include=DIR iconv include files are in DIR []"
-ac_help="$ac_help
- --with-iconv=LIB special library for iconv []"
-ac_help="$ac_help
- --with-iconv-sofile=PATH shared library file for libiconv []"
-ac_help="$ac_help
- --enable-shared[=PKGS] build shared libraries [default=yes]"
-ac_help="$ac_help
- --enable-static[=PKGS] build static libraries [default=yes]"
-ac_help="$ac_help
- --enable-fast-install[=PKGS] optimize for fast installation [default=yes]"
-ac_help="$ac_help
- --with-gnu-ld assume the C compiler uses GNU ld [default=no]"
-ac_help="$ac_help
- --disable-libtool-lock avoid locking (might break parallel builds)"
-
-# Initialize some variables set by options.
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-build=NONE
-cache_file=./config.cache
-exec_prefix=NONE
-host=NONE
-no_create=
-nonopt=NONE
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-target=NONE
-verbose=
-x_includes=NONE
-x_libraries=NONE
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datadir='${prefix}/share'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-libdir='${exec_prefix}/lib'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-infodir='${prefix}/info'
-mandir='${prefix}/man'
-
-# Initialize some other variables.
-subdirs=
-MFLAGS= MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-# Maximum number of lines to put in a shell here document.
-ac_max_here_lines=12
-
-ac_prev=
-for ac_option
-do
-
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval "$ac_prev=\$ac_option"
- ac_prev=
- continue
- fi
-
- case "$ac_option" in
- -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
- *) ac_optarg= ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case "$ac_option" in
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir="$ac_optarg" ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build="$ac_optarg" ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file="$ac_optarg" ;;
-
- -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
- | --da=*)
- datadir="$ac_optarg" ;;
-
- -disable-* | --disable-*)
- ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
- # Reject names that are not valid shell variable names.
- if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
- { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
- fi
- ac_feature=`echo $ac_feature| sed 's/-/_/g'`
- eval "enable_${ac_feature}=no" ;;
-
- -enable-* | --enable-*)
- ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
- # Reject names that are not valid shell variable names.
- if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
- { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
- fi
- ac_feature=`echo $ac_feature| sed 's/-/_/g'`
- case "$ac_option" in
- *=*) ;;
- *) ac_optarg=yes ;;
- esac
- eval "enable_${ac_feature}='$ac_optarg'" ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix="$ac_optarg" ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he)
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat << EOF
-Usage: configure [options] [host]
-Options: [defaults in brackets after descriptions]
-Configuration:
- --cache-file=FILE cache test results in FILE
- --help print this message
- --no-create do not create output files
- --quiet, --silent do not print \`checking...' messages
- --version print the version of autoconf that created configure
-Directory and file names:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [same as prefix]
- --bindir=DIR user executables in DIR [EPREFIX/bin]
- --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
- --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
- --datadir=DIR read-only architecture-independent data in DIR
- [PREFIX/share]
- --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data in DIR
- [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
- --libdir=DIR object code libraries in DIR [EPREFIX/lib]
- --includedir=DIR C header files in DIR [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
- --infodir=DIR info documentation in DIR [PREFIX/info]
- --mandir=DIR man documentation in DIR [PREFIX/man]
- --srcdir=DIR find the sources in DIR [configure dir or ..]
- --program-prefix=PREFIX prepend PREFIX to installed program names
- --program-suffix=SUFFIX append SUFFIX to installed program names
- --program-transform-name=PROGRAM
- run sed PROGRAM on installed program names
-EOF
- cat << EOF
-Host type:
- --build=BUILD configure for building on BUILD [BUILD=HOST]
- --host=HOST configure for HOST [guessed]
- --target=TARGET configure for TARGET [TARGET=HOST]
-Features and packages:
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --x-includes=DIR X include files are in DIR
- --x-libraries=DIR X library files are in DIR
-EOF
- if test -n "$ac_help"; then
- echo "--enable and --with options recognized:$ac_help"
- fi
- exit 0 ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host="$ac_optarg" ;;
-
- -includedir | --includedir | --includedi | --included | --include \
- | --includ | --inclu | --incl | --inc)
- ac_prev=includedir ;;
- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
- | --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir="$ac_optarg" ;;
-
- -infodir | --infodir | --infodi | --infod | --info | --inf)
- ac_prev=infodir ;;
- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir="$ac_optarg" ;;
-
- -libdir | --libdir | --libdi | --libd)
- ac_prev=libdir ;;
- -libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir="$ac_optarg" ;;
-
- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
- | --libexe | --libex | --libe)
- ac_prev=libexecdir ;;
- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
- | --libexe=* | --libex=* | --libe=*)
- libexecdir="$ac_optarg" ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst \
- | --locals | --local | --loca | --loc | --lo)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* \
- | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
- localstatedir="$ac_optarg" ;;
-
- -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
- ac_prev=mandir ;;
- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir="$ac_optarg" ;;
-
- -nfp | --nfp | --nf)
- # Obsolete; use --without-fp.
- with_fp=no ;;
-
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c)
- no_create=yes ;;
-
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
- no_recursion=yes ;;
-
- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
- | --oldin | --oldi | --old | --ol | --o)
- ac_prev=oldincludedir ;;
- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir="$ac_optarg" ;;
-
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix="$ac_optarg" ;;
-
- -program-prefix | --program-prefix | --program-prefi | --program-pref \
- | --program-pre | --program-pr | --program-p)
- ac_prev=program_prefix ;;
- -program-prefix=* | --program-prefix=* | --program-prefi=* \
- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix="$ac_optarg" ;;
-
- -program-suffix | --program-suffix | --program-suffi | --program-suff \
- | --program-suf | --program-su | --program-s)
- ac_prev=program_suffix ;;
- -program-suffix=* | --program-suffix=* | --program-suffi=* \
- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix="$ac_optarg" ;;
-
- -program-transform-name | --program-transform-name \
- | --program-transform-nam | --program-transform-na \
- | --program-transform-n | --program-transform- \
- | --program-transform | --program-transfor \
- | --program-transfo | --program-transf \
- | --program-trans | --program-tran \
- | --progr-tra | --program-tr | --program-t)
- ac_prev=program_transform_name ;;
- -program-transform-name=* | --program-transform-name=* \
- | --program-transform-nam=* | --program-transform-na=* \
- | --program-transform-n=* | --program-transform-=* \
- | --program-transform=* | --program-transfor=* \
- | --program-transfo=* | --program-transf=* \
- | --program-trans=* | --program-tran=* \
- | --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name="$ac_optarg" ;;
-
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- silent=yes ;;
-
- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
- ac_prev=sbindir ;;
- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
- | --sbi=* | --sb=*)
- sbindir="$ac_optarg" ;;
-
- -sharedstatedir | --sharedstatedir | --sharedstatedi \
- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
- | --sharedst | --shareds | --shared | --share | --shar \
- | --sha | --sh)
- ac_prev=sharedstatedir ;;
- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
- | --sha=* | --sh=*)
- sharedstatedir="$ac_optarg" ;;
-
- -site | --site | --sit)
- ac_prev=site ;;
- -site=* | --site=* | --sit=*)
- site="$ac_optarg" ;;
-
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir="$ac_optarg" ;;
-
- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
- | --syscon | --sysco | --sysc | --sys | --sy)
- ac_prev=sysconfdir ;;
- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir="$ac_optarg" ;;
-
- -target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target="$ac_optarg" ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers)
- echo "configure generated by autoconf version 2.13"
- exit 0 ;;
-
- -with-* | --with-*)
- ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
- # Reject names that are not valid shell variable names.
- if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
- { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
- fi
- ac_package=`echo $ac_package| sed 's/-/_/g'`
- case "$ac_option" in
- *=*) ;;
- *) ac_optarg=yes ;;
- esac
- eval "with_${ac_package}='$ac_optarg'" ;;
-
- -without-* | --without-*)
- ac_package=`echo $ac_option|sed -e 's/-*without-//'`
- # Reject names that are not valid shell variable names.
- if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
- { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
- fi
- ac_package=`echo $ac_package| sed 's/-/_/g'`
- eval "with_${ac_package}=no" ;;
-
- --x)
- # Obsolete; use --with-x.
- with_x=yes ;;
-
- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
- | --x-incl | --x-inc | --x-in | --x-i)
- ac_prev=x_includes ;;
- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes="$ac_optarg" ;;
-
- -x-libraries | --x-libraries | --x-librarie | --x-librari \
- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
- ac_prev=x_libraries ;;
- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries="$ac_optarg" ;;
-
- -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
- ;;
-
- *)
- if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
- echo "configure: warning: $ac_option: invalid host type" 1>&2
- fi
- if test "x$nonopt" != xNONE; then
- { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
- fi
- nonopt="$ac_option"
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
-fi
-
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
-# File descriptor usage:
-# 0 standard input
-# 1 file creation
-# 2 errors and warnings
-# 3 some systems may open it to /dev/tty
-# 4 used on the Kubota Titan
-# 6 checking for... messages and results
-# 5 compiler messages saved in config.log
-if test "$silent" = yes; then
- exec 6>/dev/null
-else
- exec 6>&1
-fi
-exec 5>./config.log
-
-echo "\
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-" 1>&5
-
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Also quote any args containing shell metacharacters.
-ac_configure_args=
-for ac_arg
-do
- case "$ac_arg" in
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c) ;;
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
- ac_configure_args="$ac_configure_args '$ac_arg'" ;;
- *) ac_configure_args="$ac_configure_args $ac_arg" ;;
- esac
-done
-
-# NLS nuisances.
-# Only set these to C if already set. These must not be set unconditionally
-# because not all systems understand e.g. LANG=C (notably SCO).
-# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
-# Non-C LC_CTYPE values break the ctype check.
-if test "${LANG+set}" = set; then LANG=C; export LANG; fi
-if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
-if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
-if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo > confdefs.h
-
-# A filename unique to this package, relative to the directory that
-# configure is in, which we can look for to find out if srcdir is correct.
-ac_unique_file=include/idn/converter.h
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
- ac_srcdir_defaulted=yes
- # Try the directory containing this script, then its parent.
- ac_prog=$0
- ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
- test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
- srcdir=$ac_confdir
- if test ! -r $srcdir/$ac_unique_file; then
- srcdir=..
- fi
-else
- ac_srcdir_defaulted=no
-fi
-if test ! -r $srcdir/$ac_unique_file; then
- if test "$ac_srcdir_defaulted" = yes; then
- { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
- else
- { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
- fi
-fi
-srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
-
-# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
- if test "x$prefix" != xNONE; then
- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
- else
- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
- fi
-fi
-for ac_site_file in $CONFIG_SITE; do
- if test -r "$ac_site_file"; then
- echo "loading site script $ac_site_file"
- . "$ac_site_file"
- fi
-done
-
-if test -r "$cache_file"; then
- echo "loading cache $cache_file"
- . $cache_file
-else
- echo "creating cache $cache_file"
- > $cache_file
-fi
-
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-ac_exeext=
-ac_objext=o
-if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
- # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
- if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
- ac_n= ac_c='
-' ac_t=' '
- else
- ac_n=-n ac_c= ac_t=
- fi
-else
- ac_n= ac_c='\c' ac_t=
-fi
-
-
-
-ac_aux_dir=
-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
- if test -f $ac_dir/install-sh; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f $ac_dir/install.sh; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
-fi
-ac_config_guess=$ac_aux_dir/config.guess
-ac_config_sub=$ac_aux_dir/config.sub
-ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
-
-
-# Make sure we can run config.sub.
-if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
-else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
-fi
-
-echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:582: checking host system type" >&5
-
-host_alias=$host
-case "$host_alias" in
-NONE)
- case $nonopt in
- NONE)
- if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
- else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
- fi ;;
- *) host_alias=$nonopt ;;
- esac ;;
-esac
-
-host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
-host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-echo "$ac_t""$host" 1>&6
-
-
-debug=no
-# Check whether --enable-debug or --disable-debug was given.
-if test "${enable_debug+set}" = set; then
- enableval="$enable_debug"
- debug=$enableval
-fi
-
-case "$debug" in
-yes)
- CFLAGS="$CFLAGS -DDEBUG"
- ;;
-esac
-
-mdnkit_compat=no
-COMPAT_TRUE="#"
-COMPAT_FALSE=
-# Check whether --enable-mdnkit-compat or --disable-mdnkit-compat was given.
-if test "${enable_mdnkit_compat+set}" = set; then
- enableval="$enable_mdnkit_compat"
- mdnkit_compat=$enableval
-fi
-
-case "$mdnkit_compat" in
-yes)
- COMPAT_TRUE=
- COMPAT_FALSE="#"
- cat >> confdefs.h <<\EOF
-#define ENABLE_MDNKIT_COMPAT 1
-EOF
-
- ;;
-no)
- ;;
-*)
- { echo "configure: error: You must specify yes or no to --enable-runidn option." 1>&2; exit 1; }
- ;;
-esac
-
-
-
-extraace=no
-# Check whether --enable-extra-ace or --disable-extra-ace was given.
-if test "${enable_extra_ace+set}" = set; then
- enableval="$enable_extra_ace"
- extraace=$enableval
-fi
-
-case "$extraace" in
-no)
- ;;
-yes)
- cat >> confdefs.h <<\EOF
-#define IDN_EXTRA_ACE 1
-EOF
-
- ;;
-*)
- { echo "configure: error: You must specify yes or no to --enable-extra-ace option." 1>&2; exit 1; }
- ;;
-esac
-
-UTF8_NAME=no
-# Check whether --with-utf8 or --without-utf8 was given.
-if test "${with_utf8+set}" = set; then
- withval="$with_utf8"
- UTF8_NAME=$withval
-fi
-
-case "$UTF8_NAME" in
-no)
- UTF8_NAME=UTF-8
- ;;
-yes)
- { echo "configure: error: You must specify NAME to --with-utf8 option." 1>&2; exit 1; }
- ;;
-*)
- cat >> confdefs.h <<EOF
-#define IDN_UTF8_ENCODING_NAME "$UTF8_NAME"
-EOF
-
- ;;
-esac
-
-
-liteonly=no
-LITEONLY_TRUE="#"
-LITEONLY_FALSE=
-# Check whether --enable-liteonly or --disable-liteonly was given.
-if test "${enable_liteonly+set}" = set; then
- enableval="$enable_liteonly"
- liteonly=$enableval
-fi
-
-case "$liteonly" in
-no)
- ;;
-yes)
- if test "$install_runidn" = yes ; then
- { echo "configure: error: you can't set value \"yes\" to --enable-runidn and --enable-liteonly simultaneously, because runidn requires iconv support of generic libidnkit." 1>&2; exit 1; }
- fi
- LITEONLY_TRUE=
- LITEONLY_FALSE="#"
- ;;
-*)
- { echo "configure: error: You must specify yes or no to --enable-liteonly option." 1>&2; exit 1; }
- ;;
-esac
-
-
-
-install_runidn=no
-RUNIDN_TRUE="#"
-RUNIDN_FALSE=
-# Check whether --enable-runidn or --disable-runidn was given.
-if test "${enable_runidn+set}" = set; then
- enableval="$enable_runidn"
- install_runidn=$enableval
-fi
-
-case "$install_runidn" in
-no)
- ;;
-yes)
- if test "$liteonly" = yes ; then
- { echo "configure: error: you can't set value \"yes\" to --enable-runidn and --enable-liteonly simultaneously, because runidn requires iconv support of generic libidnkit." 1>&2; exit 1; }
- fi
- RUNIDN_TRUE=
- RUNIDN_FALSE="#"
- ;;
-*)
- { echo "configure: error: You must specify yes or no to --enable-runidn option." 1>&2; exit 1; }
- ;;
-esac
-
-
-
-ICONVINC=
-ICONVLIB=
-
-libiconv=unspec
-# Check whether --with-libiconv or --without-libiconv was given.
-if test "${with_libiconv+set}" = set; then
- withval="$with_libiconv"
- libiconv=$withval
-fi
-
-case "$libiconv" in
-unspec)
- ;;
-no)
- ICONVINC=
- ICONVLIB=
- ;;
-yes)
- if test "$liteonly" = yes ; then
- { echo "configure: error: you can't set iconv options at all when you set value \"yes\" to --enable-liteonly, because lite library does not have iconv support." 1>&2; exit 1; }
- fi
- if test X$prefix = XNONE ; then
- libiconv=$ac_default_prefix
- else
- libiconv=$prefix
- fi
- ICONVINC="-I$libiconv/include"
- ICONVLIB="-L$libiconv/lib -R$libiconv/lib -liconv"
- ;;
-*)
- if test "$liteonly" = yes ; then
- { echo "configure: error: you can't set iconv options at all when you set value \"yes\" to --enable-liteonly, because lite library does not have iconv support." 1>&2; exit 1; }
- fi
- ICONVINC="-I$libiconv/include"
- ICONVLIB="-L$libiconv/lib -R$libiconv/lib -liconv"
- ;;
-esac
-
-iconv_include=unspec
-# Check whether --with-iconv-include or --without-iconv-include was given.
-if test "${with_iconv_include+set}" = set; then
- withval="$with_iconv_include"
- iconv_include=$withval
-fi
-
-case "$iconv_include" in
-unspec)
- ;;
-no)
- ICONVINC=
- ;;
-yes)
- if test "$liteonly" = yes ; then
- { echo "configure: error: you can't set iconv options at all when you set value \"yes\" to --enable-liteonly, because lite library does not have iconv support." 1>&2; exit 1; }
- fi
- echo "configure: warning: You must supply DIR to --with-iconv-include option.
- Ignored." 1>&2
- ICONVINC=
- ;;
-*)
- if test "$liteonly" = yes ; then
- { echo "configure: error: you can't set iconv options at all when you set value \"yes\" to --enable-liteonly, because lite library does not have iconv support." 1>&2; exit 1; }
- fi
- ICONVINC="-I$iconv_include"
- ;;
-esac
-
-if test "X$ICONVINC" != X ; then
- iconv_include="`echo X$ICONVINC | sed -e 's/^X-I//'`"
- if test ! -f "$iconv_include/iconv.h" ; then
- { echo "configure: error: iconv.h doesn't exist in $iconv_include" 1>&2; exit 1; }
- fi
-fi
-
-
-
-iconv=unspec
-# Check whether --with-iconv or --without-iconv was given.
-if test "${with_iconv+set}" = set; then
- withval="$with_iconv"
- iconv=$withval
-fi
-
-case "$iconv" in
-unspec)
- ;;
-no)
- ICONVLIB=
- ;;
-yes)
- if test "$liteonly" = yes ; then
- { echo "configure: error: you can't set iconv options at all when you set value \"yes\" to --enable-liteonly, because lite library does not have iconv support." 1>&2; exit 1; }
- fi
- echo "configure: warning: You must supply LIB to --with-iconv option.
- -liconv is assumed." 1>&2
- ICONVLIB=-liconv
- ;;
-*)
- if test "$liteonly" = yes ; then
- { echo "configure: error: you can't set iconv options at all when you set value \"yes\" to --enable-liteonly, because lite library does not have iconv support." 1>&2; exit 1; }
- fi
- ICONVLIB=$iconv
- ;;
-esac
-
-
-# Check whether --with-iconv-sofile or --without-iconv-sofile was given.
-if test "${with_iconv_sofile+set}" = set; then
- withval="$with_iconv_sofile"
- iconv_file=$withval
-else
- iconv_file=guess
-fi
-
-ICONVSOFILE=
-case "$iconv_file" in
-no)
- ICONVSOFILE=none
- ;;
-yes)
- if test "$liteonly" = yes ; then
- { echo "configure: error: you can't set iconv options at all when you set value \"yes\" to --enable-liteonly, because lite library does not have iconv support." 1>&2; exit 1; }
- fi
- { echo "configure: error: You must supply PATH to --with-iconv-sofile option." 1>&2; exit 1; }
- ;;
-guess)
- if test "$liteonly" != yes ; then
- if test "$ICONVLIB" = ""; then
- ICONVSOFILE=none
- else
- echo $ac_n "checking pathname of iconv shared library""... $ac_c" 1>&6
-echo "configure:870: checking pathname of iconv shared library" >&5
- ic_libdir=
- ic_libname=
- case "$host" in
- *-hpux*)
- SO=sl
- ;;
- *)
- SO=so
- ;;
- esac
- for arg in $ICONVLIB; do
- case "$arg" in
- -L*) ic_libdir="$ic_libdir `echo $arg | sed s/-L//`" ;;
- -l*) ic_libname=`echo $arg | sed s/-l//` ;;
- /*.$SO*) ICONVSOFILE=$arg ;;
- esac
- done
- if test "$ICONVSOFILE" = ""; then
- if test "$ic_libname" = ""; then
- echo "$ac_t""unknown" 1>&6
- echo "configure: warning: use --with-iconv-sofile for specifying iconv shared library file" 1>&2
- ICONVSOFILE=none
- else
- if test "$ic_libdir" = ""; then
- # Standard (and semi-standard) library directories
- ic_libdir="/lib /usr/lib /usr/local/lib"
- fi
- for dir in $ic_libdir; do
- ICONVSOFILE=`ls -r $dir/lib$ic_libname.$SO* 2>/dev/null | head -1`
- if test "$ICONVSOFILE" != ""; then
- break
- fi
- done
- if test "$ICONVSOFILE" != ""; then
- echo "$ac_t""$ICONVSOFILE" 1>&6
- else
- echo "$ac_t""unknown" 1>&6
- echo "configure: warning: use --with-iconv-sofile for specifying iconv shared library file" 1>&2
- ICONVSOFILE=none
- fi
- fi
- fi
- fi
- else
- ICONVSOFILE=none
- fi
- ;;
-*)
- if test "$liteonly" = yes ; then
- { echo "configure: error: you can't set iconv options at all when you set value \"yes\" to --enable-liteonly, because lite library does not have iconv support." 1>&2; exit 1; }
- fi
- ICONVSOFILE=$iconv_file
- ;;
-esac
-
-
-PRELOAD_VAR="LD_PRELOAD"
-PRELOAD_SEP=":"
-PRELOAD_LAST=""
-case "$host" in
-*-solaris*)
- PRELOAD_SEP=" "
- ;;
-*-linux*)
- PRELOAD_SEP=" "
- ;;
-*-osf*)
- PRELOAD_VAR="_RLD_LIST"
- PRELOAD_LAST=":DEFAULT"
- ;;
-*-netbsd*)
- if test -x /usr/bin/file -a -x /usr/bin/grep ; then
- case "`/usr/bin/file /usr/bin/grep`" in
- *ELF*)
- PRELOAD_SEP=" "
- ;;
- esac
- fi
- ;;
-esac
-
-
-
-
-
-# Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:959: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CC="gcc"
- break
- fi
- done
- IFS="$ac_save_ifs"
-fi
-fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:989: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_prog_rejected=no
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- break
- fi
- done
- IFS="$ac_save_ifs"
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# -gt 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- set dummy "$ac_dir/$ac_word" "$@"
- shift
- ac_cv_prog_CC="$@"
- fi
-fi
-fi
-fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
- if test -z "$CC"; then
- case "`uname -s`" in
- *win32* | *WIN32*)
- # Extract the first word of "cl", so it can be a program name with args.
-set dummy cl; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1040: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CC="cl"
- break
- fi
- done
- IFS="$ac_save_ifs"
-fi
-fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
- ;;
- esac
- fi
- test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
-fi
-
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1072: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
-
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-cat > conftest.$ac_ext << EOF
-
-#line 1083 "configure"
-#include "confdefs.h"
-
-main(){return(0);}
-EOF
-if { (eval echo configure:1088: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- ac_cv_prog_cc_works=yes
- # If we can't run a trivial program, we are probably using a cross compiler.
- if (./conftest; exit) 2>/dev/null; then
- ac_cv_prog_cc_cross=no
- else
- ac_cv_prog_cc_cross=yes
- fi
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- ac_cv_prog_cc_works=no
-fi
-rm -fr conftest*
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
-if test $ac_cv_prog_cc_works = no; then
- { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
-fi
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1114: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
-echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
-cross_compiling=$ac_cv_prog_cc_cross
-
-echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1119: checking whether we are using GNU C" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.c <<EOF
-#ifdef __GNUC__
- yes;
-#endif
-EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1128: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
- ac_cv_prog_gcc=yes
-else
- ac_cv_prog_gcc=no
-fi
-fi
-
-echo "$ac_t""$ac_cv_prog_gcc" 1>&6
-
-if test $ac_cv_prog_gcc = yes; then
- GCC=yes
-else
- GCC=
-fi
-
-ac_test_CFLAGS="${CFLAGS+set}"
-ac_save_CFLAGS="$CFLAGS"
-CFLAGS=
-echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1147: checking whether ${CC-cc} accepts -g" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- echo 'void f(){}' > conftest.c
-if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
- ac_cv_prog_cc_g=yes
-else
- ac_cv_prog_cc_g=no
-fi
-rm -f conftest*
-
-fi
-
-echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS="$ac_save_CFLAGS"
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# ./install, which can be erroneously created by make from ./install.sh.
-echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:1190: checking for a BSD compatible install" >&5
-if test -z "$INSTALL"; then
-if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
- for ac_dir in $PATH; do
- # Account for people who put trailing slashes in PATH elements.
- case "$ac_dir/" in
- /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- if test -f $ac_dir/$ac_prog; then
- if test $ac_prog = install &&
- grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- else
- ac_cv_path_install="$ac_dir/$ac_prog -c"
- break 2
- fi
- fi
- done
- ;;
- esac
- done
- IFS="$ac_save_IFS"
-
-fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL="$ac_cv_path_install"
- else
- # As a last resort, use the slow shell script. We don't cache a
- # path for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the path is relative.
- INSTALL="$ac_install_sh"
- fi
-fi
-echo "$ac_t""$INSTALL" 1>&6
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-# Check whether --enable-shared or --disable-shared was given.
-if test "${enable_shared+set}" = set; then
- enableval="$enable_shared"
- p=${PACKAGE-default}
-case "$enableval" in
-yes) enable_shared=yes ;;
-no) enable_shared=no ;;
-*)
- enable_shared=no
- # Look at the argument we got. We use all the common list separators.
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
- for pkg in $enableval; do
- if test "X$pkg" = "X$p"; then
- enable_shared=yes
- fi
- done
- IFS="$ac_save_ifs"
- ;;
-esac
-else
- enable_shared=yes
-fi
-
-# Check whether --enable-static or --disable-static was given.
-if test "${enable_static+set}" = set; then
- enableval="$enable_static"
- p=${PACKAGE-default}
-case "$enableval" in
-yes) enable_static=yes ;;
-no) enable_static=no ;;
-*)
- enable_static=no
- # Look at the argument we got. We use all the common list separators.
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
- for pkg in $enableval; do
- if test "X$pkg" = "X$p"; then
- enable_static=yes
- fi
- done
- IFS="$ac_save_ifs"
- ;;
-esac
-else
- enable_static=yes
-fi
-
-# Check whether --enable-fast-install or --disable-fast-install was given.
-if test "${enable_fast_install+set}" = set; then
- enableval="$enable_fast_install"
- p=${PACKAGE-default}
-case "$enableval" in
-yes) enable_fast_install=yes ;;
-no) enable_fast_install=no ;;
-*)
- enable_fast_install=no
- # Look at the argument we got. We use all the common list separators.
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
- for pkg in $enableval; do
- if test "X$pkg" = "X$p"; then
- enable_fast_install=yes
- fi
- done
- IFS="$ac_save_ifs"
- ;;
-esac
-else
- enable_fast_install=yes
-fi
-
-echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:1312: checking build system type" >&5
-
-build_alias=$build
-case "$build_alias" in
-NONE)
- case $nonopt in
- NONE) build_alias=$host_alias ;;
- *) build_alias=$nonopt ;;
- esac ;;
-esac
-
-build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias`
-build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-echo "$ac_t""$build" 1>&6
-
-# Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1332: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_RANLIB="ranlib"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
-fi
-fi
-RANLIB="$ac_cv_prog_RANLIB"
-if test -n "$RANLIB"; then
- echo "$ac_t""$RANLIB" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-# Check whether --with-gnu-ld or --without-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then
- withval="$with_gnu_ld"
- test "$withval" = no || with_gnu_ld=yes
-else
- with_gnu_ld=no
-fi
-
-ac_prog=ld
-if test "$ac_cv_prog_gcc" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6
-echo "configure:1371: checking for ld used by GCC" >&5
- ac_prog=`($CC -print-prog-name=ld) 2>&5`
- case "$ac_prog" in
- # Accept absolute paths.
- [\\/]* | [A-Za-z]:[\\/]*)
- re_direlt='/[^/][^/]*/\.\./'
- # Canonicalize the path of ld
- ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
- while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
- done
- test -z "$LD" && LD="$ac_prog"
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
-elif test "$with_gnu_ld" = yes; then
- echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:1395: checking for GNU ld" >&5
-else
- echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-echo "configure:1398: checking for non-GNU ld" >&5
-fi
-if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -z "$LD"; then
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- ac_cv_path_LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some GNU ld's only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
- test "$with_gnu_ld" != no && break
- else
- test "$with_gnu_ld" != yes && break
- fi
- fi
- done
- IFS="$ac_save_ifs"
-else
- ac_cv_path_LD="$LD" # Let the user override the test with a path.
-fi
-fi
-
-LD="$ac_cv_path_LD"
-if test -n "$LD"; then
- echo "$ac_t""$LD" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; }
-echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6
-echo "configure:1433: checking if the linker ($LD) is GNU ld" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- # I'd rather use --version here, but apparently some GNU ld's only accept -v.
-if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
- ac_cv_prog_gnu_ld=yes
-else
- ac_cv_prog_gnu_ld=no
-fi
-fi
-
-echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6
-
-
-echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
-echo "configure:1449: checking for BSD-compatible nm" >&5
-if eval "test \"`echo '$''{'ac_cv_path_NM'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$NM"; then
- # Let the user override the test.
- ac_cv_path_NM="$NM"
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
- for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then
- # Check to see if the nm accepts a BSD-compat flag.
- # Adding the `sed 1q' prevents false positives on HP-UX, which says:
- # nm: unknown option "B" ignored
- if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
- ac_cv_path_NM="$ac_dir/nm -B"
- break
- elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
- ac_cv_path_NM="$ac_dir/nm -p"
- break
- else
- ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but
- continue # so that we can try to find one that supports BSD flags
- fi
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm
-fi
-fi
-
-NM="$ac_cv_path_NM"
-echo "$ac_t""$NM" 1>&6
-
-echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:1485: checking whether ln -s works" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- rm -f conftestdata
-if ln -s X conftestdata 2>/dev/null
-then
- rm -f conftestdata
- ac_cv_prog_LN_S="ln -s"
-else
- ac_cv_prog_LN_S=ln
-fi
-fi
-LN_S="$ac_cv_prog_LN_S"
-if test "$ac_cv_prog_LN_S" = "ln -s"; then
- echo "$ac_t""yes" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-
-case "$target" in
-NONE) lt_target="$host" ;;
-*) lt_target="$target" ;;
-esac
-
-# Check for any special flags to pass to ltconfig.
-libtool_flags="--cache-file=$cache_file"
-test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared"
-test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static"
-test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install"
-test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc"
-test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
-
-
-# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
-if test "${enable_libtool_lock+set}" = set; then
- enableval="$enable_libtool_lock"
- :
-fi
-
-test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock"
-test x"$silent" = xyes && libtool_flags="$libtool_flags --silent"
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case "$lt_target" in
-*-*-irix6*)
- # Find out which ABI we are using.
- echo '#line 1534 "configure"' > conftest.$ac_ext
- if { (eval echo configure:1535: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- case "`/usr/bin/file conftest.o`" in
- *32-bit*)
- LD="${LD-ld} -32"
- ;;
- *N32*)
- LD="${LD-ld} -n32"
- ;;
- *64-bit*)
- LD="${LD-ld} -64"
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-
-*-*-sco3.2v5*)
- # On SCO OpenServer 5, we need -belf to get full-featured binaries.
- SAVE_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -belf"
- echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
-echo "configure:1556: checking whether the C compiler needs -belf" >&5
-if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1561 "configure"
-#include "confdefs.h"
-
-int main() {
-
-; return 0; }
-EOF
-if { (eval echo configure:1568: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- lt_cv_cc_needs_belf=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- lt_cv_cc_needs_belf=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$lt_cv_cc_needs_belf" 1>&6
- if test x"$lt_cv_cc_needs_belf" != x"yes"; then
- # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
- CFLAGS="$SAVE_CFLAGS"
- fi
- ;;
-
-
-esac
-
-
-# Save cache, so that ltconfig can load it
-cat > confcache <<\EOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs. It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
-#
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already. You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
-#
-EOF
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(set) 2>&1 |
- case `(ac_space=' '; set | grep ac_space) 2>&1` in
- *ac_space=\ *)
- # `set' does not quote correctly, so add quotes (double-quote substitution
- # turns \\\\ into \\, and sed turns \\ into \).
- sed -n \
- -e "s/'/'\\\\''/g" \
- -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
- ;;
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
- ;;
- esac >> confcache
-if cmp -s $cache_file confcache; then
- :
-else
- if test -w $cache_file; then
- echo "updating cache $cache_file"
- cat confcache > $cache_file
- else
- echo "not updating unwritable cache $cache_file"
- fi
-fi
-rm -f confcache
-
-
-# Actually configure libtool. ac_aux_dir is where install-sh is found.
-CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
-LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \
-LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \
-DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \
-${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \
-$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \
-|| { echo "configure: error: libtool configure failed" 1>&2; exit 1; }
-
-# Reload cache, that may have been modified by ltconfig
-if test -r "$cache_file"; then
- echo "loading cache $cache_file"
- . $cache_file
-else
- echo "creating cache $cache_file"
- > $cache_file
-fi
-
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-
-# Redirect the config.log output again, so that the ltconfig log is not
-# clobbered by the next message.
-exec 5>>./config.log
-
-
-for ac_prog in perl
-do
-# Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1675: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- case "$PERL" in
- /*)
- ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
- ;;
- ?:/*)
- ac_cv_path_PERL="$PERL" # Let the user override the test with a dos path.
- ;;
- *)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_PERL="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
- ;;
-esac
-fi
-PERL="$ac_cv_path_PERL"
-if test -n "$PERL"; then
- echo "$ac_t""$PERL" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-test -n "$PERL" && break
-done
-test -n "$PERL" || PERL="perl"
-
-
-echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1713: checking how to run the C preprocessor" >&5
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
-if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- # This must be in double quotes, not single quotes, because CPP may get
- # substituted into the Makefile and "${CC-cc}" will confuse make.
- CPP="${CC-cc} -E"
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp.
- cat > conftest.$ac_ext <<EOF
-#line 1728 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1734: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- :
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP="${CC-cc} -E -traditional-cpp"
- cat > conftest.$ac_ext <<EOF
-#line 1745 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1751: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- :
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP="${CC-cc} -nologo -E"
- cat > conftest.$ac_ext <<EOF
-#line 1762 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1768: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- :
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP=/lib/cpp
-fi
-rm -f conftest*
-fi
-rm -f conftest*
-fi
-rm -f conftest*
- ac_cv_prog_CPP="$CPP"
-fi
- CPP="$ac_cv_prog_CPP"
-else
- ac_cv_prog_CPP="$CPP"
-fi
-echo "$ac_t""$CPP" 1>&6
-
-for ac_hdr in unistd.h locale.h langinfo.h pwd.h
-do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1796: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1801 "configure"
-#include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1806: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
-if test "$install_runidn" = yes ; then
- for ac_hdr in dlfcn.h
-do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1837: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1842 "configure"
-#include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1847: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
-fi
-
-saved_CPPFLAGS=$CPPFLAGS
-CPPFLAGS="$CPPFLAGS $ICONVINC"
-if test "$liteonly" != yes ; then
- ac_safe=`echo "iconv.h" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for iconv.h""... $ac_c" 1>&6
-echo "configure:1880: checking for iconv.h" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1885 "configure"
-#include "confdefs.h"
-#include <iconv.h>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1890: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- :
-else
- echo "$ac_t""no" 1>&6
-{ echo "configure: error: iconv.h doesn't exist" 1>&2; exit 1; }
-fi
-
-fi
-CPPFLAGS=$saved_CPPFLAGS
-
-echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:1916: checking for uid_t in sys/types.h" >&5
-if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1921 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "uid_t" >/dev/null 2>&1; then
- rm -rf conftest*
- ac_cv_type_uid_t=yes
-else
- rm -rf conftest*
- ac_cv_type_uid_t=no
-fi
-rm -f conftest*
-
-fi
-
-echo "$ac_t""$ac_cv_type_uid_t" 1>&6
-if test $ac_cv_type_uid_t = no; then
- cat >> confdefs.h <<\EOF
-#define uid_t int
-EOF
-
- cat >> confdefs.h <<\EOF
-#define gid_t int
-EOF
-
-fi
-
-echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:1950: checking for ANSI C header files" >&5
-if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1955 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1963: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- rm -rf conftest*
- ac_cv_header_stdc=yes
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-cat > conftest.$ac_ext <<EOF
-#line 1980 "configure"
-#include "confdefs.h"
-#include <string.h>
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "memchr" >/dev/null 2>&1; then
- :
-else
- rm -rf conftest*
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-cat > conftest.$ac_ext <<EOF
-#line 1998 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "free" >/dev/null 2>&1; then
- :
-else
- rm -rf conftest*
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-if test "$cross_compiling" = yes; then
- :
-else
- cat > conftest.$ac_ext <<EOF
-#line 2019 "configure"
-#include "confdefs.h"
-#include <ctype.h>
-#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int main () { int i; for (i = 0; i < 256; i++)
-if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
-exit (0); }
-
-EOF
-if { (eval echo configure:2030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- :
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- ac_cv_header_stdc=no
-fi
-rm -fr conftest*
-fi
-
-fi
-fi
-
-echo "$ac_t""$ac_cv_header_stdc" 1>&6
-if test $ac_cv_header_stdc = yes; then
- cat >> confdefs.h <<\EOF
-#define STDC_HEADERS 1
-EOF
-
-fi
-
-echo $ac_n "checking for BOOL""... $ac_c" 1>&6
-echo "configure:2054: checking for BOOL" >&5
-if eval "test \"`echo '$''{'ac_cv_type_BOOL'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2059 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "(^|[^a-zA-Z_0-9])BOOL[^a-zA-Z_0-9]" >/dev/null 2>&1; then
- rm -rf conftest*
- ac_cv_type_BOOL=yes
-else
- rm -rf conftest*
- ac_cv_type_BOOL=no
-fi
-rm -f conftest*
-
-fi
-echo "$ac_t""$ac_cv_type_BOOL" 1>&6
-if test $ac_cv_type_BOOL = no; then
- cat >> confdefs.h <<\EOF
-#define BOOL int
-EOF
-
-fi
-
-
-if test "$install_runidn" = yes ; then
- echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6
-echo "configure:2089: checking for socket in -lsocket" >&5
-ac_lib_var=`echo socket'_'socket | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-lsocket $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2097 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char socket();
-
-int main() {
-socket()
-; return 0; }
-EOF
-if { (eval echo configure:2108: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_lib=HAVE_LIB`echo socket | sed -e 's/[^a-zA-Z0-9_]/_/g' \
- -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_lib 1
-EOF
-
- LIBS="-lsocket $LIBS"
-
-else
- echo "$ac_t""no" 1>&6
-fi
-
- echo $ac_n "checking for inet_addr in -lnsl""... $ac_c" 1>&6
-echo "configure:2136: checking for inet_addr in -lnsl" >&5
-ac_lib_var=`echo nsl'_'inet_addr | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-lnsl $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2144 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char inet_addr();
-
-int main() {
-inet_addr()
-; return 0; }
-EOF
-if { (eval echo configure:2155: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_lib=HAVE_LIB`echo nsl | sed -e 's/[^a-zA-Z0-9_]/_/g' \
- -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_lib 1
-EOF
-
- LIBS="-lnsl $LIBS"
-
-else
- echo "$ac_t""no" 1>&6
-fi
-
- echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:2183: checking for dlopen in -ldl" >&5
-ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-ldl $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2191 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char dlopen();
-
-int main() {
-dlopen()
-; return 0; }
-EOF
-if { (eval echo configure:2202: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
-
- LIBS="-ldl $LIBS"
- LIBDL="-ldl"
- cat >> confdefs.h <<\EOF
-#define HAVE_LIBDL 1
-EOF
-
-
-
-else
- echo "$ac_t""no" 1>&6
-fi
-
-fi
-
-for ac_func in vsnprintf setvbuf setlocale nl_langinfo memmove bcopy setenv \
- unsetenv
-do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2236: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2241 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-$ac_func();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo configure:2264: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
-if test "$install_runidn" = yes ; then
- for ac_func in gethostbyname gethostbyname2 gethostbyaddr
-do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2292: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2297 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-$ac_func();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo configure:2320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
- for ac_func in gethostbyname_r gethostbyname2_r gethostbyaddr_r
-do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2347: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2352 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-$ac_func();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo configure:2375: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
- find_gethost_r=yes
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
- for ac_func in getipnodebyname getipnodebyaddr freehostent
-do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2402: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2407 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-$ac_func();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo configure:2430: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
- for ac_func in getaddrinfo freeaddrinfo getnameinfo
-do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2457: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2462 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-$ac_func();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo configure:2485: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
- for ac_func in dlopen dlsym
-do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2512: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2517 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-$ac_func();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo configure:2540: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
-fi
-
-if test "$install_runidn" = yes ; then
- echo $ac_n "checking flavor of gethostbyaddr""... $ac_c" 1>&6
-echo "configure:2568: checking flavor of gethostbyaddr" >&5
-if eval "test \"`echo '$''{'ac_cv_flavor_gethostbyaddr'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_cv_flavor_gethostbyaddr=unknown
- if test "$cross_compiling" = yes; then
- ac_cv_flavor_gethostbyaddr=unknown
-else
- cat > conftest.$ac_ext <<EOF
-#line 2577 "configure"
-#include "confdefs.h"
-
- #include <stddef.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netdb.h>
- struct hostent *gethostbyaddr(const void *addr, socklen_t len, int type) {
- return NULL;
- }
- int main() {
- (void)gethostbyaddr(NULL, 0, 0);
- return 0;
- }
-
-EOF
-if { (eval echo configure:2593: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- ac_cv_flavor_gethostbyaddr=glibc2_2
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
-fi
-rm -fr conftest*
-fi
-
- if test "$cross_compiling" = yes; then
- ac_cv_flavor_gethostbyaddr=unknown
-else
- cat > conftest.$ac_ext <<EOF
-#line 2607 "configure"
-#include "confdefs.h"
-
- #include <stddef.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netdb.h>
- struct hostent *gethostbyaddr(const char *addr, size_t len, int type) {
- return NULL;
- }
- int main() {
- (void)gethostbyaddr(NULL, 0, 0);
- return 0;
- }
-
-EOF
-if { (eval echo configure:2623: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- ac_cv_flavor_gethostbyaddr=glibc
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
-fi
-rm -fr conftest*
-fi
-
- if test "$cross_compiling" = yes; then
- ac_cv_flavor_gethostbyaddr=unknown
-else
- cat > conftest.$ac_ext <<EOF
-#line 2637 "configure"
-#include "confdefs.h"
-
- #include <stddef.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netdb.h>
- struct hostent *gethostbyaddr(const char *addr, int len, int type) {
- return NULL;
- }
- int main() {
- (void)gethostbyaddr(NULL, 0, 0);
- return 0;
- }
-
-EOF
-if { (eval echo configure:2653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- ac_cv_flavor_gethostbyaddr=traditional
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
-fi
-rm -fr conftest*
-fi
-
- if test "$ac_cv_func_gethostbyaddr" = no ; then
- ac_cv_flavor_gethostbyaddr=none
- fi
-fi
-
-echo "$ac_t""$ac_cv_flavor_gethostbyaddr" 1>&6
-
- case "$ac_cv_flavor_gethostbyaddr" in
- glibc2_2)
- ac_cv_type_ghba_addr_t='const void *'
- ac_cv_type_ghba_addrlen_t='socklen_t'
- ;;
- glibc)
- ac_cv_type_ghba_addr_t='const char *'
- ac_cv_type_ghba_addrlen_t='size_t'
- ;;
- traditional | none)
- ac_cv_type_ghba_addr_t='const char *'
- ac_cv_type_ghba_addrlen_t='int'
- ;;
- *)
- { echo "configure: error: can't build runidn, since parameter type list of gethostbyaddr() is unknown to configure." 1>&2; exit 1; }
- ;;
- esac
- cat >> confdefs.h <<EOF
-#define GHBA_ADDR_T $ac_cv_type_ghba_addr_t
-EOF
-
- cat >> confdefs.h <<EOF
-#define GHBA_ADDRLEN_T $ac_cv_type_ghba_addrlen_t
-EOF
-
-
- echo $ac_n "checking flavor of getnameinfo""... $ac_c" 1>&6
-echo "configure:2697: checking flavor of getnameinfo" >&5
-if eval "test \"`echo '$''{'ac_cv_flavor_getnameinfo'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_cv_flavor_getnameinfo=unknown
- if test "$cross_compiling" = yes; then
- ac_cv_flavor_getnameinfo=unknown
-else
- cat > conftest.$ac_ext <<EOF
-#line 2706 "configure"
-#include "confdefs.h"
-
- #include <stddef.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netdb.h>
- int getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host,
- socklen_t hostlen, char *serv, socklen_t servlen,
- unsigned int flags) {
- return NULL;
- }
- int main() {
- (void)getnameinfo(NULL, 0, NULL, 0, NULL, 0, 0);
- return 0;
- }
-
-EOF
-if { (eval echo configure:2724: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- ac_cv_flavor_getnameinfo=glibc2_2_2
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
-fi
-rm -fr conftest*
-fi
-
- if test "$cross_compiling" = yes; then
- ac_cv_flavor_getnameinfo=unknown
-else
- cat > conftest.$ac_ext <<EOF
-#line 2738 "configure"
-#include "confdefs.h"
-
- #include <stddef.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netdb.h>
- int getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host,
- socklen_t hostlen, char *serv, socklen_t servlen,
- int flags) {
- return NULL;
- }
- int main() {
- (void)getnameinfo(NULL, 0, NULL, 0, NULL, 0, 0);
- return 0;
- }
-
-EOF
-if { (eval echo configure:2756: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- ac_cv_flavor_getnameinfo=rfc2553bis_03
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
-fi
-rm -fr conftest*
-fi
-
- if test "$cross_compiling" = yes; then
- ac_cv_flavor_getnameinfo=unknown
-else
- cat > conftest.$ac_ext <<EOF
-#line 2770 "configure"
-#include "confdefs.h"
-
- #include <stddef.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netdb.h>
- int getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host,
- size_t hostlen, char *serv, size_t servlen, int flags) {
- return NULL;
- }
- int main() {
- (void)getnameinfo(NULL, 0, NULL, 0, NULL, 0, 0);
- return 0;
- }
-
-EOF
-if { (eval echo configure:2787: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- ac_cv_flavor_getnameinfo=rfc2553
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
-fi
-rm -fr conftest*
-fi
-
- if test "$cross_compiling" = yes; then
- ac_cv_flavor_getnameinfo=unknown
-else
- cat > conftest.$ac_ext <<EOF
-#line 2801 "configure"
-#include "confdefs.h"
-
- #include <stddef.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netdb.h>
- int getnameinfo(const struct sockaddr *sa, size_t salen, char *host,
- size_t hostlen, char *serv, size_t servlen, int flags) {
- return NULL;
- }
- int main() {
- (void)getnameinfo(NULL, 0, NULL, 0, NULL, 0, 0);
- return 0;
- }
-
-EOF
-if { (eval echo configure:2818: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- ac_cv_flavor_getnameinfo=rfc2133
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
-fi
-rm -fr conftest*
-fi
-
- if test "$ac_cv_func_getnameinfo" = no ; then
- ac_cv_flavor_getnameinfo=none
- fi
-fi
-
-echo "$ac_t""$ac_cv_flavor_getnameinfo" 1>&6
-
- case "$ac_cv_flavor_getnameinfo" in
- glibc2_2_2)
- ac_cv_type_gni_salen_t='socklen_t'
- ac_cv_type_gni_hostlen_t='socklen_t'
- ac_cv_type_gni_servlen_t='socklen_t'
- ac_cv_type_gni_flags_t='unsigned int'
- ;;
- rfc2553bis_03)
- ac_cv_type_gni_salen_t='socklen_t'
- ac_cv_type_gni_hostlen_t='socklen_t'
- ac_cv_type_gni_servlen_t='socklen_t'
- ac_cv_type_gni_flags_t='int'
- ;;
- rfc2553)
- ac_cv_type_gni_salen_t='socklen_t'
- ac_cv_type_gni_hostlen_t='size_t'
- ac_cv_type_gni_servlen_t='size_t'
- ac_cv_type_gni_flags_t='int'
- ;;
- rfc2133 | none)
- ac_cv_type_gni_salen_t='size_t'
- ac_cv_type_gni_hostlen_t='size_t'
- ac_cv_type_gni_servlen_t='size_t'
- ac_cv_type_gni_flags_t='int'
- ;;
- *)
- { echo "configure: error: can't build runidn, since parameter type list of getnameinfo() is unknown to configure." 1>&2; exit 1; }
- esac
- cat >> confdefs.h <<EOF
-#define GNI_SALEN_T $ac_cv_type_gni_salen_t
-EOF
-
- cat >> confdefs.h <<EOF
-#define GNI_HOSTLEN_T $ac_cv_type_gni_hostlen_t
-EOF
-
- cat >> confdefs.h <<EOF
-#define GNI_SERVLEN_T $ac_cv_type_gni_servlen_t
-EOF
-
- cat >> confdefs.h <<EOF
-#define GNI_FLAGS_T $ac_cv_type_gni_flags_t
-EOF
-
-fi
-
-if test "$find_gethost_r" = yes; then
- echo $ac_n "checking flavor of gethostbyname_r""... $ac_c" 1>&6
-echo "configure:2883: checking flavor of gethostbyname_r" >&5
-if eval "test \"`echo '$''{'ac_cv_flavor_gethost_r'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test "$cross_compiling" = yes; then
- ac_cv_flavor_gethost_r=sun
-else
- cat > conftest.$ac_ext <<EOF
-#line 2891 "configure"
-#include "confdefs.h"
-
-#include <stddef.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netdb.h>
-#include <stdio.h>
-int main()
-{
- int err = 0;
- struct hostent hebuf, *hp;
- char buf[10];
- /* Try resolving a invalid name using glibc flavor. */
- (void)gethostbyname_r("@#!", &hebuf, buf, sizeof(buf), &hp, &err);
- if (err != 0)
- return 0; /* glibc flavor */
- else
- return 1; /* Sun flavor */
-}
-
-EOF
-if { (eval echo configure:2913: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- ac_cv_flavor_gethost_r=glibc
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- ac_cv_flavor_gethost_r=sun
-fi
-rm -fr conftest*
-fi
-
-fi
-
-echo "$ac_t""$ac_cv_flavor_gethost_r" 1>&6
- if test "$ac_cv_flavor_gethost_r" = "glibc"; then
- cat >> confdefs.h <<\EOF
-#define GETHOST_R_GLIBC_FLAVOR 1
-EOF
-
- fi
-fi
-
-
-echo $ac_n "checking for libc shared object""... $ac_c" 1>&6
-echo "configure:2938: checking for libc shared object" >&5
-shobj_name=libc
-shobj_path=
-case "$host" in
-*-hpux*)
- SOEXT=sl
- ;;
-*)
- SOEXT=so
- ;;
-esac
-for shobj_libdir in /lib /usr/lib; do
- if test -f $shobj_libdir/$shobj_name.$SOEXT; then
- shobj_path=$shobj_libdir/$shobj_name.$SOEXT
- else
- shobj_path=`ls -r $shobj_libdir/$shobj_name.$SOEXT* 2>/dev/null | head -1`
- if test "$shobj_path" != "" -a -f "$shobj_path"; then
- :
- else
- shobj_path=
- fi
- fi
- if test "$shobj_path" != ""; then
- echo "$ac_t""$shobj_path" 1>&6
- shobj_pathsymbol=SOPATH_`echo $shobj_name | sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
- cat >> confdefs.h <<EOF
-#define $shobj_pathsymbol "$shobj_path"
-EOF
-
- break
- fi
-done
-if test "$shobj_path" = ""; then
- echo "$ac_t""no" 1>&6
-fi
-
-if test "$install_runidn" = yes ; then
-
-echo $ac_n "checking for libnsl shared object""... $ac_c" 1>&6
-echo "configure:2977: checking for libnsl shared object" >&5
-shobj_name=libnsl
-shobj_path=
-case "$host" in
-*-hpux*)
- SOEXT=sl
- ;;
-*)
- SOEXT=so
- ;;
-esac
-for shobj_libdir in /lib /usr/lib; do
- if test -f $shobj_libdir/$shobj_name.$SOEXT; then
- shobj_path=$shobj_libdir/$shobj_name.$SOEXT
- else
- shobj_path=`ls -r $shobj_libdir/$shobj_name.$SOEXT* 2>/dev/null | head -1`
- if test "$shobj_path" != "" -a -f "$shobj_path"; then
- :
- else
- shobj_path=
- fi
- fi
- if test "$shobj_path" != ""; then
- echo "$ac_t""$shobj_path" 1>&6
- shobj_pathsymbol=SOPATH_`echo $shobj_name | sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
- cat >> confdefs.h <<EOF
-#define $shobj_pathsymbol "$shobj_path"
-EOF
-
- break
- fi
-done
-if test "$shobj_path" = ""; then
- echo "$ac_t""no" 1>&6
-fi
-
-fi
-
-if test "$liteonly" != yes ; then
- echo $ac_n "checking for iconv""... $ac_c" 1>&6
-echo "configure:3017: checking for iconv" >&5
- saved_CPPFLAGS=$CPPFLAGS
- saved_LIBS=$LIBS
- CPPFLAGS="$CPPFLAGS $ICONVINC"
- LIBS="$LIBS $ICONVLIB"
- cat > conftest.$ac_ext <<EOF
-#line 3023 "configure"
-#include "confdefs.h"
-
- #include <iconv.h>
-
-int main() {
-
- iconv_t i;
- i = iconv_open("ISO-8859-1", "UTF-8");
-
-; return 0; }
-EOF
-if { (eval echo configure:3035: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- iconv_try_link=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- iconv_try_link=no
-fi
-rm -f conftest*
- LIBS=$saved_LIBS
- CPPFLAGS=$saved_CPPFLAGS
- echo "$ac_t""$iconv_try_link" 1>&6
- if test "$iconv_try_link" = no ; then
- { echo "configure: error: iconv function not available" 1>&2; exit 1; }
- fi
-fi
-
-if test "$liteonly" != yes ; then
- echo $ac_n "checking for codeset name $UTF8_NAME""... $ac_c" 1>&6
-echo "configure:3055: checking for codeset name $UTF8_NAME" >&5
- saved_CPPFLAGS=$CPPFLAGS
- saved_LIBS=$LIBS
- CPPFLAGS="$CPPFLAGS $ICONVINC"
- LIBS="$LIBS $ICONVLIB"
- if test "$cross_compiling" = yes; then
- utf8_name_valid=unknown
-else
- cat > conftest.$ac_ext <<EOF
-#line 3064 "configure"
-#include "confdefs.h"
-
- #include <stddef.h>
- #include <stdlib.h>
- #include <iconv.h>
- #define UTF8_NAME "$UTF8_NAME"
- #define ICONV_FAIL ((iconv_t)(-1))
- /* Check if the codeset name UTF8_NAME is valid by performing iconv_open(). */
- int main() {
- int i;
- /* list of codeset names likely to exist */
- static char *codeset[] = {
- "ASCII", "ISO-8859-1", "ISO8859-1", "iso8859_1", "8859-1",
- "Shift_JIS", "SJIS", "sjis", NULL,
- };
-
- /* First try null conversion. */
- if (iconv_open(UTF8_NAME, UTF8_NAME) != ICONV_FAIL) return 0;
-
- /* Unfortunately, above check fails on certain systems, such as Solaris. */
- for (i = 0; codeset[i] != NULL; i++) {
- if (iconv_open(UTF8_NAME, codeset[i]) != ICONV_FAIL) return 0;
- }
- return 1;
- }
-
-EOF
-if { (eval echo configure:3092: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- utf8_name_valid=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- utf8_name_valid=no
-fi
-rm -fr conftest*
-fi
-
- LIBS=$saved_LIBS
- CPPFLAGS=$saved_CPPFLAGS
- echo "$ac_t""$utf8_name_valid" 1>&6
-fi
-
-
-trap '' 1 2 15
-cat > confcache <<\EOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs. It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
-#
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already. You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
-#
-EOF
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(set) 2>&1 |
- case `(ac_space=' '; set | grep ac_space) 2>&1` in
- *ac_space=\ *)
- # `set' does not quote correctly, so add quotes (double-quote substitution
- # turns \\\\ into \\, and sed turns \\ into \).
- sed -n \
- -e "s/'/'\\\\''/g" \
- -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
- ;;
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
- ;;
- esac >> confcache
-if cmp -s $cache_file confcache; then
- :
-else
- if test -w $cache_file; then
- echo "updating cache $cache_file"
- cat confcache > $cache_file
- else
- echo "not updating unwritable cache $cache_file"
- fi
-fi
-rm -f confcache
-
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# Any assignment to VPATH causes Sun make to only execute
-# the first set of double-colon rules, so remove it if not needed.
-# If there is a colon in the path, we need to keep it.
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
-fi
-
-trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
-
-DEFS=-DHAVE_CONFIG_H
-
-# Without the "./", some shells look in PATH for config.status.
-: ${CONFIG_STATUS=./config.status}
-
-echo creating $CONFIG_STATUS
-rm -f $CONFIG_STATUS
-cat > $CONFIG_STATUS <<EOF
-#! /bin/sh
-# Generated automatically by configure.
-# Run this file to recreate the current configuration.
-# This directory was configured as follows,
-# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-#
-# $0 $ac_configure_args
-#
-# Compiler output produced by configure, useful for debugging
-# configure, is in ./config.log if it exists.
-
-ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
-for ac_option
-do
- case "\$ac_option" in
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
- exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
- -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
- echo "$CONFIG_STATUS generated by autoconf version 2.13"
- exit 0 ;;
- -help | --help | --hel | --he | --h)
- echo "\$ac_cs_usage"; exit 0 ;;
- *) echo "\$ac_cs_usage"; exit 1 ;;
- esac
-done
-
-ac_given_srcdir=$srcdir
-ac_given_INSTALL="$INSTALL"
-
-trap 'rm -fr `echo "Makefile
- include/Makefile
- include/idn/Makefile
- include/mdn/Makefile
- lib/Makefile
- man/Makefile
- tools/Makefile
- tools/idnconv/Makefile
- tools/runidn/Makefile
- tools/runidn/runidn
- map/Makefile
- lib/tests/Makefile
- include/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
-EOF
-cat >> $CONFIG_STATUS <<EOF
-
-# Protect against being on the right side of a sed subst in config.status.
-sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
- s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
-$ac_vpsub
-$extrasub
-s%@SHELL@%$SHELL%g
-s%@CFLAGS@%$CFLAGS%g
-s%@CPPFLAGS@%$CPPFLAGS%g
-s%@CXXFLAGS@%$CXXFLAGS%g
-s%@FFLAGS@%$FFLAGS%g
-s%@DEFS@%$DEFS%g
-s%@LDFLAGS@%$LDFLAGS%g
-s%@LIBS@%$LIBS%g
-s%@exec_prefix@%$exec_prefix%g
-s%@prefix@%$prefix%g
-s%@program_transform_name@%$program_transform_name%g
-s%@bindir@%$bindir%g
-s%@sbindir@%$sbindir%g
-s%@libexecdir@%$libexecdir%g
-s%@datadir@%$datadir%g
-s%@sysconfdir@%$sysconfdir%g
-s%@sharedstatedir@%$sharedstatedir%g
-s%@localstatedir@%$localstatedir%g
-s%@libdir@%$libdir%g
-s%@includedir@%$includedir%g
-s%@oldincludedir@%$oldincludedir%g
-s%@infodir@%$infodir%g
-s%@mandir@%$mandir%g
-s%@host@%$host%g
-s%@host_alias@%$host_alias%g
-s%@host_cpu@%$host_cpu%g
-s%@host_vendor@%$host_vendor%g
-s%@host_os@%$host_os%g
-s%@COMPAT_TRUE@%$COMPAT_TRUE%g
-s%@COMPAT_FALSE@%$COMPAT_FALSE%g
-s%@UTF8_NAME@%$UTF8_NAME%g
-s%@LITEONLY_TRUE@%$LITEONLY_TRUE%g
-s%@LITEONLY_FALSE@%$LITEONLY_FALSE%g
-s%@RUNIDN_TRUE@%$RUNIDN_TRUE%g
-s%@RUNIDN_FALSE@%$RUNIDN_FALSE%g
-s%@ICONVINC@%$ICONVINC%g
-s%@ICONVLIB@%$ICONVLIB%g
-s%@ICONVSOFILE@%$ICONVSOFILE%g
-s%@PRELOAD_VAR@%$PRELOAD_VAR%g
-s%@PRELOAD_SEP@%$PRELOAD_SEP%g
-s%@PRELOAD_LAST@%$PRELOAD_LAST%g
-s%@CC@%$CC%g
-s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
-s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
-s%@INSTALL_DATA@%$INSTALL_DATA%g
-s%@build@%$build%g
-s%@build_alias@%$build_alias%g
-s%@build_cpu@%$build_cpu%g
-s%@build_vendor@%$build_vendor%g
-s%@build_os@%$build_os%g
-s%@RANLIB@%$RANLIB%g
-s%@LN_S@%$LN_S%g
-s%@LIBTOOL@%$LIBTOOL%g
-s%@PERL@%$PERL%g
-s%@CPP@%$CPP%g
-s%@LIBDL@%$LIBDL%g
-
-CEOF
-EOF
-
-cat >> $CONFIG_STATUS <<\EOF
-
-# Split the substitutions into bite-sized pieces for seds with
-# small command number limits, like on Digital OSF/1 and HP-UX.
-ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
-ac_file=1 # Number of current file.
-ac_beg=1 # First line for current file.
-ac_end=$ac_max_sed_cmds # Line after last line for current file.
-ac_more_lines=:
-ac_sed_cmds=""
-while $ac_more_lines; do
- if test $ac_beg -gt 1; then
- sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
- else
- sed "${ac_end}q" conftest.subs > conftest.s$ac_file
- fi
- if test ! -s conftest.s$ac_file; then
- ac_more_lines=false
- rm -f conftest.s$ac_file
- else
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds="sed -f conftest.s$ac_file"
- else
- ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
- fi
- ac_file=`expr $ac_file + 1`
- ac_beg=$ac_end
- ac_end=`expr $ac_end + $ac_max_sed_cmds`
- fi
-done
-if test -z "$ac_sed_cmds"; then
- ac_sed_cmds=cat
-fi
-EOF
-
-cat >> $CONFIG_STATUS <<EOF
-
-CONFIG_FILES=\${CONFIG_FILES-"Makefile
- include/Makefile
- include/idn/Makefile
- include/mdn/Makefile
- lib/Makefile
- man/Makefile
- tools/Makefile
- tools/idnconv/Makefile
- tools/runidn/Makefile
- tools/runidn/runidn
- map/Makefile
- lib/tests/Makefile
-"}
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case "$ac_file" in
- *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
- ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- *) ac_file_in="${ac_file}.in" ;;
- esac
-
- # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
-
- # Remove last slash and all that follows it. Not all systems have dirname.
- ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
- if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
- # The file is in a subdirectory.
- test ! -d "$ac_dir" && mkdir "$ac_dir"
- ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
- # A "../" for each directory in $ac_dir_suffix.
- ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
- else
- ac_dir_suffix= ac_dots=
- fi
-
- case "$ac_given_srcdir" in
- .) srcdir=.
- if test -z "$ac_dots"; then top_srcdir=.
- else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
- /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
- *) # Relative path.
- srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
- top_srcdir="$ac_dots$ac_given_srcdir" ;;
- esac
-
- case "$ac_given_INSTALL" in
- [/$]*) INSTALL="$ac_given_INSTALL" ;;
- *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
- esac
-
- echo creating "$ac_file"
- rm -f "$ac_file"
- configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
- case "$ac_file" in
- *Makefile*) ac_comsub="1i\\
-# $configure_input" ;;
- *) ac_comsub= ;;
- esac
-
- ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
- sed -e "$ac_comsub
-s%@configure_input@%$configure_input%g
-s%@srcdir@%$srcdir%g
-s%@top_srcdir@%$top_srcdir%g
-s%@INSTALL@%$INSTALL%g
-" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
-fi; done
-rm -f conftest.s*
-
-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
-# NAME is the cpp macro being defined and VALUE is the value it is being given.
-#
-# ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)'
-ac_dB='\([ ][ ]*\)[^ ]*%\1#\2'
-ac_dC='\3'
-ac_dD='%g'
-# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
-ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_uB='\([ ]\)%\1#\2define\3'
-ac_uC=' '
-ac_uD='\4%g'
-# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_eB='$%\1#\2define\3'
-ac_eC=' '
-ac_eD='%g'
-
-if test "${CONFIG_HEADERS+set}" != set; then
-EOF
-cat >> $CONFIG_STATUS <<EOF
- CONFIG_HEADERS="include/config.h"
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-fi
-for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case "$ac_file" in
- *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
- ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- *) ac_file_in="${ac_file}.in" ;;
- esac
-
- echo creating $ac_file
-
- rm -f conftest.frag conftest.in conftest.out
- ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
- cat $ac_file_inputs > conftest.in
-
-EOF
-
-# Transform confdefs.h into a sed script conftest.vals that substitutes
-# the proper values into config.h.in to produce config.h. And first:
-# Protect against being on the right side of a sed subst in config.status.
-# Protect against being in an unquoted here document in config.status.
-rm -f conftest.vals
-cat > conftest.hdr <<\EOF
-s/[\\&%]/\\&/g
-s%[\\$`]%\\&%g
-s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
-s%ac_d%ac_u%gp
-s%ac_u%ac_e%gp
-EOF
-sed -n -f conftest.hdr confdefs.h > conftest.vals
-rm -f conftest.hdr
-
-# This sed command replaces #undef with comments. This is necessary, for
-# example, in the case of _POSIX_SOURCE, which is predefined and required
-# on some systems where configure will not decide to define it.
-cat >> conftest.vals <<\EOF
-s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
-EOF
-
-# Break up conftest.vals because some shells have a limit on
-# the size of here documents, and old seds have small limits too.
-
-rm -f conftest.tail
-while :
-do
- ac_lines=`grep -c . conftest.vals`
- # grep -c gives empty output for an empty file on some AIX systems.
- if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
- # Write a limited-size here document to conftest.frag.
- echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
- sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
- echo 'CEOF
- sed -f conftest.frag conftest.in > conftest.out
- rm -f conftest.in
- mv conftest.out conftest.in
-' >> $CONFIG_STATUS
- sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
- rm -f conftest.vals
- mv conftest.tail conftest.vals
-done
-rm -f conftest.vals
-
-cat >> $CONFIG_STATUS <<\EOF
- rm -f conftest.frag conftest.h
- echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
- cat conftest.in >> conftest.h
- rm -f conftest.in
- if cmp -s $ac_file conftest.h 2>/dev/null; then
- echo "$ac_file is unchanged"
- rm -f conftest.h
- else
- # Remove last slash and all that follows it. Not all systems have dirname.
- ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
- if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
- # The file is in a subdirectory.
- test ! -d "$ac_dir" && mkdir "$ac_dir"
- fi
- rm -f $ac_file
- mv conftest.h $ac_file
- fi
-fi; done
-
-EOF
-cat >> $CONFIG_STATUS <<EOF
-
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-
-exit 0
-EOF
-chmod +x $CONFIG_STATUS
-rm -fr confdefs* $ac_clean_files
-test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
-
diff --git a/contrib/idn/idnkit-1.0-src/configure.in b/contrib/idn/idnkit-1.0-src/configure.in
deleted file mode 100644
index 5d46c70c..00000000
--- a/contrib/idn/idnkit-1.0-src/configure.in
+++ /dev/null
@@ -1,711 +0,0 @@
-dnl $Id: configure.in,v 1.1 2003/06/04 00:25:25 marka Exp $
-dnl Process this file with autoconf to produce a configure script.
-dnl
-dnl Copyright (c) 2000 Japan Network Information Center. All rights reserved.
-dnl
-dnl By using this file, you agree to the terms and conditions set forth bellow.
-dnl
-dnl LICENSE TERMS AND CONDITIONS
-dnl
-dnl The following License Terms and Conditions apply, unless a different
-dnl license is obtained from Japan Network Information Center ("JPNIC"),
-dnl a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-dnl Chiyoda-ku, Tokyo 101-0047, Japan.
-dnl
-dnl 1. Use, Modification and Redistribution (including distribution of any
-dnl modified or derived work) in source and/or binary forms is permitted
-dnl under this License Terms and Conditions.
-dnl
-dnl 2. Redistribution of source code must retain the copyright notices as they
-dnl appear in each source code file, this License Terms and Conditions.
-dnl
-dnl 3. Redistribution in binary form must reproduce the Copyright Notice,
-dnl this License Terms and Conditions, in the documentation and/or other
-dnl materials provided with the distribution. For the purposes of binary
-dnl distribution the "Copyright Notice" refers to the following language:
-dnl "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-dnl
-dnl 4. The name of JPNIC may not be used to endorse or promote products
-dnl derived from this Software without specific prior written approval of
-dnl JPNIC.
-dnl
-dnl 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-dnl "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-dnl LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-dnl PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-dnl FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-dnl CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-dnl SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-dnl BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-dnl WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-dnl OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-dnl ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-AC_INIT(include/idn/converter.h)
-
-AC_CANONICAL_HOST
-
-debug=no
-AC_ARG_ENABLE(debug,
-[ --enable-debug enable debug codes [default=no]],
- debug=$enableval)
-case "$debug" in
-yes)
- CFLAGS="$CFLAGS -DDEBUG"
- ;;
-esac
-
-mdnkit_compat=no
-COMPAT_TRUE="#"
-COMPAT_FALSE=
-AC_ARG_ENABLE(mdnkit-compat,
-[ --enable-mdnkit-compat enable mDNkit compatibility mode [default=no]],
- mdnkit_compat=$enableval)
-case "$mdnkit_compat" in
-yes)
- COMPAT_TRUE=
- COMPAT_FALSE="#"
- AC_DEFINE(ENABLE_MDNKIT_COMPAT, 1,
- [Define if --enable-mdnkit-compat is specified])
- ;;
-no)
- ;;
-*)
- AC_MSG_ERROR([You must specify yes or no to --enable-runidn option.])
- ;;
-esac
-AC_SUBST(COMPAT_TRUE)
-AC_SUBST(COMPAT_FALSE)
-
-extraace=no
-AC_ARG_ENABLE(extra-ace,
-[ --enable-extra-ace enable additional ACE converters. [default=no]],
- extraace=$enableval)
-case "$extraace" in
-no)
- ;;
-yes)
- AC_DEFINE(IDN_EXTRA_ACE, 1,
- [Define if you want additional ACE converters compiled in.])
- ;;
-*)
- AC_MSG_ERROR([You must specify yes or no to --enable-extra-ace option.])
- ;;
-esac
-
-UTF8_NAME=no
-AC_ARG_WITH(utf8,
-[ --with-utf8=NAME codeset name for UTF-8 encoding [UTF-8]],
- UTF8_NAME=$withval)
-case "$UTF8_NAME" in
-no)
- UTF8_NAME=UTF-8
- ;;
-yes)
- AC_MSG_ERROR([You must specify NAME to --with-utf8 option.])
- ;;
-*)
- AC_DEFINE_UNQUOTED(IDN_UTF8_ENCODING_NAME, "$UTF8_NAME",
- [Define if your iconv() does not accept "UTF-8" as the codeset name for utf-8.])
- ;;
-esac
-AC_SUBST(UTF8_NAME)
-
-liteonly=no
-LITEONLY_TRUE="#"
-LITEONLY_FALSE=
-AC_ARG_ENABLE(liteonly,
-[ --enable-liteonly compile and install lite library only [default=no]],
- liteonly=$enableval)
-case "$liteonly" in
-no)
- ;;
-yes)
- if test "$install_runidn" = yes ; then
- AC_MSG_ERROR([you can't set value \"yes\" to --enable-runidn and --enable-liteonly simultaneously, because runidn requires iconv support of generic libidnkit.])
- fi
- LITEONLY_TRUE=
- LITEONLY_FALSE="#"
- ;;
-*)
- AC_MSG_ERROR([You must specify yes or no to --enable-liteonly option.])
- ;;
-esac
-AC_SUBST(LITEONLY_TRUE)
-AC_SUBST(LITEONLY_FALSE)
-
-install_runidn=no
-RUNIDN_TRUE="#"
-RUNIDN_FALSE=
-AC_ARG_ENABLE(runidn,
-[ --enable-runidn compile and install runidn [default=no]],
- install_runidn=$enableval)
-case "$install_runidn" in
-no)
- ;;
-yes)
- if test "$liteonly" = yes ; then
- AC_MSG_ERROR([you can't set value \"yes\" to --enable-runidn and --enable-liteonly simultaneously, because runidn requires iconv support of generic libidnkit.])
- fi
- RUNIDN_TRUE=
- RUNIDN_FALSE="#"
- ;;
-*)
- AC_MSG_ERROR([You must specify yes or no to --enable-runidn option.])
- ;;
-esac
-AC_SUBST(RUNIDN_TRUE)
-AC_SUBST(RUNIDN_FALSE)
-
-ICONVINC=
-ICONVLIB=
-
-libiconv=unspec
-AC_ARG_WITH(libiconv,
-[ --with-libiconv=IPREFIX GNU libiconv are installed in IPREFIX [PREFIX]],
- libiconv=$withval)
-case "$libiconv" in
-unspec)
- ;;
-no)
- ICONVINC=
- ICONVLIB=
- ;;
-yes)
- if test "$liteonly" = yes ; then
- AC_MSG_ERROR([you can't set iconv options at all when you set value \"yes\" to --enable-liteonly, because lite library does not have iconv support.])
- fi
- if test X$prefix = XNONE ; then
- libiconv=$ac_default_prefix
- else
- libiconv=$prefix
- fi
- ICONVINC="-I$libiconv/include"
- ICONVLIB="-L$libiconv/lib -R$libiconv/lib -liconv"
- ;;
-*)
- if test "$liteonly" = yes ; then
- AC_MSG_ERROR([you can't set iconv options at all when you set value \"yes\" to --enable-liteonly, because lite library does not have iconv support.])
- fi
- ICONVINC="-I$libiconv/include"
- ICONVLIB="-L$libiconv/lib -R$libiconv/lib -liconv"
- ;;
-esac
-
-iconv_include=unspec
-AC_ARG_WITH(iconv-include,
-[ --with-iconv-include=DIR iconv include files are in DIR []],
- iconv_include=$withval)
-case "$iconv_include" in
-unspec)
- ;;
-no)
- ICONVINC=
- ;;
-yes)
- if test "$liteonly" = yes ; then
- AC_MSG_ERROR([you can't set iconv options at all when you set value \"yes\" to --enable-liteonly, because lite library does not have iconv support.])
- fi
- AC_MSG_WARN([You must supply DIR to --with-iconv-include option.
- Ignored.])
- ICONVINC=
- ;;
-*)
- if test "$liteonly" = yes ; then
- AC_MSG_ERROR([you can't set iconv options at all when you set value \"yes\" to --enable-liteonly, because lite library does not have iconv support.])
- fi
- ICONVINC="-I$iconv_include"
- ;;
-esac
-
-if test "X$ICONVINC" != X ; then
- iconv_include="`echo X$ICONVINC | sed -e 's/^X-I//'`"
- if test ! -f "$iconv_include/iconv.h" ; then
- AC_MSG_ERROR([iconv.h doesn't exist in $iconv_include])
- fi
-fi
-
-AC_SUBST(ICONVINC)
-
-iconv=unspec
-AC_ARG_WITH(iconv,
-[ --with-iconv=LIB special library for iconv []],
- iconv=$withval)
-case "$iconv" in
-unspec)
- ;;
-no)
- ICONVLIB=
- ;;
-yes)
- if test "$liteonly" = yes ; then
- AC_MSG_ERROR([you can't set iconv options at all when you set value \"yes\" to --enable-liteonly, because lite library does not have iconv support.])
- fi
- AC_MSG_WARN([You must supply LIB to --with-iconv option.
- -liconv is assumed.])
- ICONVLIB=-liconv
- ;;
-*)
- if test "$liteonly" = yes ; then
- AC_MSG_ERROR([you can't set iconv options at all when you set value \"yes\" to --enable-liteonly, because lite library does not have iconv support.])
- fi
- ICONVLIB=$iconv
- ;;
-esac
-AC_SUBST(ICONVLIB)
-
-AC_ARG_WITH(iconv-sofile,
-[ --with-iconv-sofile=PATH shared library file for libiconv []],
- iconv_file=$withval, iconv_file=guess)
-ICONVSOFILE=
-case "$iconv_file" in
-no)
- ICONVSOFILE=none
- ;;
-yes)
- if test "$liteonly" = yes ; then
- AC_MSG_ERROR([you can't set iconv options at all when you set value \"yes\" to --enable-liteonly, because lite library does not have iconv support.])
- fi
- AC_MSG_ERROR([You must supply PATH to --with-iconv-sofile option.])
- ;;
-guess)
- if test "$liteonly" != yes ; then
- if test "$ICONVLIB" = ""; then
- ICONVSOFILE=none
- else
- AC_MSG_CHECKING(pathname of iconv shared library)
- ic_libdir=
- ic_libname=
- case "$host" in
- *-hpux*)
- SO=sl
- ;;
- *)
- SO=so
- ;;
- esac
- for arg in $ICONVLIB; do
- case "$arg" in
- -L*) ic_libdir="$ic_libdir `echo $arg | sed s/-L//`" ;;
- -l*) ic_libname=`echo $arg | sed s/-l//` ;;
- /*.$SO*) ICONVSOFILE=$arg ;;
- esac
- done
- if test "$ICONVSOFILE" = ""; then
- if test "$ic_libname" = ""; then
- AC_MSG_RESULT(unknown)
- AC_MSG_WARN([use --with-iconv-sofile for specifying iconv shared library file])
- ICONVSOFILE=none
- else
- if test "$ic_libdir" = ""; then
- # Standard (and semi-standard) library directories
- ic_libdir="/lib /usr/lib /usr/local/lib"
- fi
- for dir in $ic_libdir; do
- ICONVSOFILE=`ls -r $dir/lib$ic_libname.$SO* 2>/dev/null | head -1`
- if test "$ICONVSOFILE" != ""; then
- break
- fi
- done
- if test "$ICONVSOFILE" != ""; then
- AC_MSG_RESULT($ICONVSOFILE)
- else
- AC_MSG_RESULT(unknown)
- AC_MSG_WARN([use --with-iconv-sofile for specifying iconv shared library file])
- ICONVSOFILE=none
- fi
- fi
- fi
- fi
- else
- ICONVSOFILE=none
- fi
- ;;
-*)
- if test "$liteonly" = yes ; then
- AC_MSG_ERROR([you can't set iconv options at all when you set value \"yes\" to --enable-liteonly, because lite library does not have iconv support.])
- fi
- ICONVSOFILE=$iconv_file
- ;;
-esac
-AC_SUBST(ICONVSOFILE)
-
-dnl Figure out preload stuff.
-PRELOAD_VAR="LD_PRELOAD"
-PRELOAD_SEP=":"
-PRELOAD_LAST=""
-case "$host" in
-*-solaris*)
- PRELOAD_SEP=" "
- ;;
-*-linux*)
- PRELOAD_SEP=" "
- ;;
-*-osf*)
- PRELOAD_VAR="_RLD_LIST"
- PRELOAD_LAST=":DEFAULT"
- ;;
-*-netbsd*)
- if test -x /usr/bin/file -a -x /usr/bin/grep ; then
- case "`/usr/bin/file /usr/bin/grep`" in
- *ELF*)
- PRELOAD_SEP=" "
- ;;
- esac
- fi
- ;;
-esac
-
-AC_SUBST(PRELOAD_VAR)
-AC_SUBST(PRELOAD_SEP)
-AC_SUBST(PRELOAD_LAST)
-
-dnl Checks for standard tools.
-AC_PROG_CC
-AC_PROG_INSTALL
-AM_PROG_LIBTOOL
-
-AC_PATH_PROGS(PERL, perl, perl)
-
-dnl Checks for header files.
-AC_CHECK_HEADERS(unistd.h locale.h langinfo.h pwd.h)
-if test "$install_runidn" = yes ; then
- AC_CHECK_HEADERS(dlfcn.h)
-fi
-
-saved_CPPFLAGS=$CPPFLAGS
-CPPFLAGS="$CPPFLAGS $ICONVINC"
-if test "$liteonly" != yes ; then
- AC_CHECK_HEADER(iconv.h, , [AC_MSG_ERROR([iconv.h doesn't exist])])
-fi
-CPPFLAGS=$saved_CPPFLAGS
-
-dnl Checks for data types.
-AC_TYPE_UID_T
-dnl for dnsproxy.
-AC_CHECK_TYPE(BOOL, int)
-
-dnl Checks for libraries.
-if test "$install_runidn" = yes ; then
- AC_CHECK_LIB(socket, socket)
- AC_CHECK_LIB(nsl, inet_addr)
- AC_CHECK_LIB(dl, dlopen, [
- LIBS="-ldl $LIBS"
- LIBDL="-ldl"
- AC_DEFINE(HAVE_LIBDL, 1, [Define if you have the dl library (-ldl).])
- AC_SUBST(LIBDL)
- ])
-fi
-
-dnl Checks for library functions.
-AC_CHECK_FUNCS(vsnprintf setvbuf setlocale nl_langinfo memmove bcopy setenv \
- unsetenv)
-if test "$install_runidn" = yes ; then
- AC_CHECK_FUNCS(gethostbyname gethostbyname2 gethostbyaddr)
- AC_CHECK_FUNCS(gethostbyname_r gethostbyname2_r gethostbyaddr_r, find_gethost_r=yes)
- AC_CHECK_FUNCS(getipnodebyname getipnodebyaddr freehostent)
- AC_CHECK_FUNCS(getaddrinfo freeaddrinfo getnameinfo)
- AC_CHECK_FUNCS(dlopen dlsym)
-fi
-
-if test "$install_runidn" = yes ; then
-dnl Checks the flavor of gethostbyaddr* functions.
- AC_CACHE_CHECK(flavor of gethostbyaddr, ac_cv_flavor_gethostbyaddr,
- [ac_cv_flavor_gethostbyaddr=unknown
- AC_TRY_RUN(
- [
- #include <stddef.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netdb.h>
- struct hostent *gethostbyaddr(const void *addr, socklen_t len, int type) {
- return NULL;
- }
- int main() {
- (void)gethostbyaddr(NULL, 0, 0);
- return 0;
- }
- ], ac_cv_flavor_gethostbyaddr=glibc2_2,,
- ac_cv_flavor_gethostbyaddr=unknown)
- AC_TRY_RUN(
- [
- #include <stddef.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netdb.h>
- struct hostent *gethostbyaddr(const char *addr, size_t len, int type) {
- return NULL;
- }
- int main() {
- (void)gethostbyaddr(NULL, 0, 0);
- return 0;
- }
- ], ac_cv_flavor_gethostbyaddr=glibc,,
- ac_cv_flavor_gethostbyaddr=unknown)
- AC_TRY_RUN(
- [
- #include <stddef.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netdb.h>
- struct hostent *gethostbyaddr(const char *addr, int len, int type) {
- return NULL;
- }
- int main() {
- (void)gethostbyaddr(NULL, 0, 0);
- return 0;
- }
- ], ac_cv_flavor_gethostbyaddr=traditional,,
- ac_cv_flavor_gethostbyaddr=unknown)
- if test "$ac_cv_func_gethostbyaddr" = no ; then
- ac_cv_flavor_gethostbyaddr=none
- fi])
-
- case "$ac_cv_flavor_gethostbyaddr" in
- glibc2_2)
- ac_cv_type_ghba_addr_t='const void *'
- ac_cv_type_ghba_addrlen_t='socklen_t'
- ;;
- glibc)
- ac_cv_type_ghba_addr_t='const char *'
- ac_cv_type_ghba_addrlen_t='size_t'
- ;;
- traditional | none)
- ac_cv_type_ghba_addr_t='const char *'
- ac_cv_type_ghba_addrlen_t='int'
- ;;
- *)
- AC_MSG_ERROR([can't build runidn, since parameter type list of gethostbyaddr() is unknown to configure.])
- ;;
- esac
- AC_DEFINE_UNQUOTED(GHBA_ADDR_T, $ac_cv_type_ghba_addr_t,
- [Define as the type of the 1st argument of gethostbyaddr.])
- AC_DEFINE_UNQUOTED(GHBA_ADDRLEN_T, $ac_cv_type_ghba_addrlen_t,
- [Define as the type of the 2nd argument of gethostbyaddr.])
-
-dnl Checks the flavor of getnameinfo functions.
- AC_CACHE_CHECK(flavor of getnameinfo, ac_cv_flavor_getnameinfo,
- [ac_cv_flavor_getnameinfo=unknown
- AC_TRY_RUN(
- [
- #include <stddef.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netdb.h>
- int getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host,
- socklen_t hostlen, char *serv, socklen_t servlen,
- unsigned int flags) {
- return NULL;
- }
- int main() {
- (void)getnameinfo(NULL, 0, NULL, 0, NULL, 0, 0);
- return 0;
- }
- ], ac_cv_flavor_getnameinfo=glibc2_2_2,,
- ac_cv_flavor_getnameinfo=unknown)
- AC_TRY_RUN(
- [
- #include <stddef.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netdb.h>
- int getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host,
- socklen_t hostlen, char *serv, socklen_t servlen,
- int flags) {
- return NULL;
- }
- int main() {
- (void)getnameinfo(NULL, 0, NULL, 0, NULL, 0, 0);
- return 0;
- }
- ], ac_cv_flavor_getnameinfo=rfc2553bis_03,,
- ac_cv_flavor_getnameinfo=unknown)
- AC_TRY_RUN(
- [
- #include <stddef.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netdb.h>
- int getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host,
- size_t hostlen, char *serv, size_t servlen, int flags) {
- return NULL;
- }
- int main() {
- (void)getnameinfo(NULL, 0, NULL, 0, NULL, 0, 0);
- return 0;
- }
- ], ac_cv_flavor_getnameinfo=rfc2553,,
- ac_cv_flavor_getnameinfo=unknown)
- AC_TRY_RUN(
- [
- #include <stddef.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netdb.h>
- int getnameinfo(const struct sockaddr *sa, size_t salen, char *host,
- size_t hostlen, char *serv, size_t servlen, int flags) {
- return NULL;
- }
- int main() {
- (void)getnameinfo(NULL, 0, NULL, 0, NULL, 0, 0);
- return 0;
- }
- ], ac_cv_flavor_getnameinfo=rfc2133,,
- ac_cv_flavor_getnameinfo=unknown)
- if test "$ac_cv_func_getnameinfo" = no ; then
- ac_cv_flavor_getnameinfo=none
- fi])
-
- case "$ac_cv_flavor_getnameinfo" in
- glibc2_2_2)
- ac_cv_type_gni_salen_t='socklen_t'
- ac_cv_type_gni_hostlen_t='socklen_t'
- ac_cv_type_gni_servlen_t='socklen_t'
- ac_cv_type_gni_flags_t='unsigned int'
- ;;
- rfc2553bis_03)
- ac_cv_type_gni_salen_t='socklen_t'
- ac_cv_type_gni_hostlen_t='socklen_t'
- ac_cv_type_gni_servlen_t='socklen_t'
- ac_cv_type_gni_flags_t='int'
- ;;
- rfc2553)
- ac_cv_type_gni_salen_t='socklen_t'
- ac_cv_type_gni_hostlen_t='size_t'
- ac_cv_type_gni_servlen_t='size_t'
- ac_cv_type_gni_flags_t='int'
- ;;
- rfc2133 | none)
- ac_cv_type_gni_salen_t='size_t'
- ac_cv_type_gni_hostlen_t='size_t'
- ac_cv_type_gni_servlen_t='size_t'
- ac_cv_type_gni_flags_t='int'
- ;;
- *)
- AC_MSG_ERROR([can't build runidn, since parameter type list of getnameinfo() is unknown to configure.])
- esac
- AC_DEFINE_UNQUOTED(GNI_SALEN_T, $ac_cv_type_gni_salen_t,
- [Define as the type of the 2nd argument of getnameinfo.])
- AC_DEFINE_UNQUOTED(GNI_HOSTLEN_T, $ac_cv_type_gni_hostlen_t,
- [Define as the type of the 4th argument of getnameinfo.])
- AC_DEFINE_UNQUOTED(GNI_SERVLEN_T, $ac_cv_type_gni_servlen_t,
- [Define as the type of the 6th argument of getnameinfo.])
- AC_DEFINE_UNQUOTED(GNI_FLAGS_T, $ac_cv_type_gni_flags_t,
- [Define as the type of the 7th argument of getnameinfo.])
-fi
-
-dnl resume here.
-dnl Checks the flavor of gethost*_r functions.
-if test "$find_gethost_r" = yes; then
- AC_CACHE_CHECK(flavor of gethostbyname_r, ac_cv_flavor_gethost_r,
- [AC_TRY_RUN(
-changequote(<<, >>)dnl
-<<
-#include <stddef.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netdb.h>
-#include <stdio.h>
-int main()
-{
- int err = 0;
- struct hostent hebuf, *hp;
- char buf[10];
- /* Try resolving a invalid name using glibc flavor. */
- (void)gethostbyname_r("@#!", &hebuf, buf, sizeof(buf), &hp, &err);
- if (err != 0)
- return 0; /* glibc flavor */
- else
- return 1; /* Sun flavor */
-}
->>,
-changequote([, ])dnl
- ac_cv_flavor_gethost_r=glibc,
- ac_cv_flavor_gethost_r=sun,
- ac_cv_flavor_gethost_r=sun)])
- if test "$ac_cv_flavor_gethost_r" = "glibc"; then
- AC_DEFINE(GETHOST_R_GLIBC_FLAVOR, 1,
- [Define if the prototype of gethost*_r is glibc flavor.])
- fi
-fi
-
-dnl Find system shared object paths.
-AC_FIND_SYSTEM_SHOBJ(libc)
-if test "$install_runidn" = yes ; then
- AC_FIND_SYSTEM_SHOBJ(libnsl)
-fi
-
-dnl Checks for iconv library.
-if test "$liteonly" != yes ; then
- AC_MSG_CHECKING(for iconv)
- saved_CPPFLAGS=$CPPFLAGS
- saved_LIBS=$LIBS
- CPPFLAGS="$CPPFLAGS $ICONVINC"
- LIBS="$LIBS $ICONVLIB"
- AC_TRY_LINK([
- #include <iconv.h>
- ], [
- iconv_t i;
- i = iconv_open("ISO-8859-1", "UTF-8");
- ], [iconv_try_link=yes], [iconv_try_link=no])
- LIBS=$saved_LIBS
- CPPFLAGS=$saved_CPPFLAGS
- AC_MSG_RESULT($iconv_try_link)
- if test "$iconv_try_link" = no ; then
- AC_MSG_ERROR(iconv function not available)
- fi
-fi
-
-dnl Check for codeset name for UTF-8.
-if test "$liteonly" != yes ; then
- AC_MSG_CHECKING([for codeset name $UTF8_NAME])
- saved_CPPFLAGS=$CPPFLAGS
- saved_LIBS=$LIBS
- CPPFLAGS="$CPPFLAGS $ICONVINC"
- LIBS="$LIBS $ICONVLIB"
- AC_TRY_RUN([
- #include <stddef.h>
- #include <stdlib.h>
- #include <iconv.h>
- #define UTF8_NAME "$UTF8_NAME"
- #define ICONV_FAIL ((iconv_t)(-1))
- /* Check if the codeset name UTF8_NAME is valid by performing iconv_open(). */
- int main() {
- int i;
- /* list of codeset names likely to exist */
- static char *codeset[] = {
- "ASCII", "ISO-8859-1", "ISO8859-1", "iso8859_1", "8859-1",
- "Shift_JIS", "SJIS", "sjis", NULL,
- };
-
- /* First try null conversion. */
- if (iconv_open(UTF8_NAME, UTF8_NAME) != ICONV_FAIL) return 0;
-
- /* Unfortunately, above check fails on certain systems, such as Solaris. */
- for (i = 0; codeset[i] != NULL; i++) {
- if (iconv_open(UTF8_NAME, codeset[i]) != ICONV_FAIL) return 0;
- }
- return 1;
- }
- ], utf8_name_valid=yes, utf8_name_valid=no, utf8_name_valid=unknown)
- LIBS=$saved_LIBS
- CPPFLAGS=$saved_CPPFLAGS
- AC_MSG_RESULT($utf8_name_valid)
-fi
-
-dnl Output.
-AC_CONFIG_HEADER(include/config.h)
-AC_OUTPUT(
- Makefile
- include/Makefile
- include/idn/Makefile
- include/mdn/Makefile
- lib/Makefile
- man/Makefile
- tools/Makefile
- tools/idnconv/Makefile
- tools/runidn/Makefile
- tools/runidn/runidn
- map/Makefile
- lib/tests/Makefile
-)
diff --git a/contrib/idn/idnkit-1.0-src/include/Makefile.in b/contrib/idn/idnkit-1.0-src/include/Makefile.in
deleted file mode 100644
index 8e76d397..00000000
--- a/contrib/idn/idnkit-1.0-src/include/Makefile.in
+++ /dev/null
@@ -1,65 +0,0 @@
-# $Id: Makefile.in,v 1.1 2003/06/04 00:25:33 marka Exp $
-# Copyright (c) 2000 Japan Network Information Center. All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-SHELL = @SHELL@
-
-SUBDIRS = idn mdn
-
-all: all-subdirs
-install: install-subdirs
-clean: clean-subdirs
-distclean: distclean-localdir distclean-subdirs
-check test: test-subdirs
-
-all-subdirs install-subdirs clean-subdirs distclean-subdirs test-subdirs:
- @target=`echo $@ | sed 's/-subdirs$$//'`; \
- for d in $(SUBDIRS); do \
- (cd $$d; $(MAKE) DESTDIR=$(DESTDIR) $$target); \
- done
-
-distclean-localdir:
- rm -f config.h Makefile
diff --git a/contrib/idn/idnkit-1.0-src/include/config.h.in b/contrib/idn/idnkit-1.0-src/include/config.h.in
deleted file mode 100644
index ea4ae745..00000000
--- a/contrib/idn/idnkit-1.0-src/include/config.h.in
+++ /dev/null
@@ -1,181 +0,0 @@
-/* include/config.h.in. Generated automatically from configure.in by autoheader. */
-/* $Id: config.h.in,v 1.1 2003/06/04 00:25:34 marka Exp $ */
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-/* Define to `int' if <sys/types.h> doesn't define. */
-#undef gid_t
-
-/* Define if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define to `int' if <sys/types.h> doesn't define. */
-#undef uid_t
-
-/* Define as an appropriate type (ex. int) if your system doesn't have. */
-#undef BOOL
-
-/* Define if you have the bcopy function. */
-#undef HAVE_BCOPY
-
-/* Define if you have the dlopen function. */
-#undef HAVE_DLOPEN
-
-/* Define if you have the dlsym function. */
-#undef HAVE_DLSYM
-
-/* Define if you have the freeaddrinfo function. */
-#undef HAVE_FREEADDRINFO
-
-/* Define if you have the freehostent function. */
-#undef HAVE_FREEHOSTENT
-
-/* Define if you have the getaddrinfo function. */
-#undef HAVE_GETADDRINFO
-
-/* Define if you have the gethostbyaddr function. */
-#undef HAVE_GETHOSTBYADDR
-
-/* Define if you have the gethostbyaddr_r function. */
-#undef HAVE_GETHOSTBYADDR_R
-
-/* Define if you have the gethostbyname function. */
-#undef HAVE_GETHOSTBYNAME
-
-/* Define if you have the gethostbyname2 function. */
-#undef HAVE_GETHOSTBYNAME2
-
-/* Define if you have the gethostbyname2_r function. */
-#undef HAVE_GETHOSTBYNAME2_R
-
-/* Define if you have the gethostbyname_r function. */
-#undef HAVE_GETHOSTBYNAME_R
-
-/* Define if you have the getipnodebyaddr function. */
-#undef HAVE_GETIPNODEBYADDR
-
-/* Define if you have the getipnodebyname function. */
-#undef HAVE_GETIPNODEBYNAME
-
-/* Define if you have the getnameinfo function. */
-#undef HAVE_GETNAMEINFO
-
-/* Define if you have the memmove function. */
-#undef HAVE_MEMMOVE
-
-/* Define if you have the nl_langinfo function. */
-#undef HAVE_NL_LANGINFO
-
-/* Define if you have the setenv function. */
-#undef HAVE_SETENV
-
-/* Define if you have the setlocale function. */
-#undef HAVE_SETLOCALE
-
-/* Define if you have the setvbuf function. */
-#undef HAVE_SETVBUF
-
-/* Define if you have the unsetenv function. */
-#undef HAVE_UNSETENV
-
-/* Define if you have the vsnprintf function. */
-#undef HAVE_VSNPRINTF
-
-/* Define if you have the <dlfcn.h> header file. */
-#undef HAVE_DLFCN_H
-
-/* Define if you have the <langinfo.h> header file. */
-#undef HAVE_LANGINFO_H
-
-/* Define if you have the <locale.h> header file. */
-#undef HAVE_LOCALE_H
-
-/* Define if you have the <pwd.h> header file. */
-#undef HAVE_PWD_H
-
-/* Define if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define if you have the nsl library (-lnsl). */
-#undef HAVE_LIBNSL
-
-/* Define if you have the socket library (-lsocket). */
-#undef HAVE_LIBSOCKET
-
-/* Define if --enable-mdnkit-compat is specified */
-#undef ENABLE_MDNKIT_COMPAT
-
-/* Define if you want additional ACE converters compiled in. */
-#undef IDN_EXTRA_ACE
-
-/* Define if your iconv() does not accept UTF-8 as the codeset name for utf-8. */
-#undef IDN_UTF8_ENCODING_NAME
-
-/* Define if you have the dl library (-ldl). */
-#undef HAVE_LIBDL
-
-/* Define as the type of the 1st argument of gethostbyaddr. */
-#undef GHBA_ADDR_T
-
-/* Define as the type of the 2nd argument of gethostbyaddr. */
-#undef GHBA_ADDRLEN_T
-
-/* Define as the type of the 2nd argument of getnameinfo. */
-#undef GNI_SALEN_T
-
-/* Define as the type of the 4th argument of getnameinfo. */
-#undef GNI_HOSTLEN_T
-
-/* Define as the type of the 6th argument of getnameinfo. */
-#undef GNI_SERVLEN_T
-
-/* Define as the type of the 7th argument of getnameinfo. */
-#undef GNI_FLAGS_T
-
-/* Define if the prototype of gethost*_r is glibc flavor. */
-#undef GETHOST_R_GLIBC_FLAVOR
-
-/* Define as the pathname of the shared libc object if your system has one. */
-#undef SOPATH_LIBC
-
-/* Define as the pathname of the shared libnsl object if your system has one. */
-#undef SOPATH_LIBNSL
diff --git a/contrib/idn/idnkit-1.0-src/include/config.h.win b/contrib/idn/idnkit-1.0-src/include/config.h.win
deleted file mode 100644
index bd7f00f4..00000000
--- a/contrib/idn/idnkit-1.0-src/include/config.h.win
+++ /dev/null
@@ -1,45 +0,0 @@
-/* $Id: config.h.win,v 1.1 2003/06/04 00:25:34 marka Exp $ */
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-/* for enabling RACE */
-#define IDN_EXTRA_ACE
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/Makefile.in b/contrib/idn/idnkit-1.0-src/include/idn/Makefile.in
deleted file mode 100644
index 8e20de86..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/Makefile.in
+++ /dev/null
@@ -1,103 +0,0 @@
-# $Id: Makefile.in,v 1.1 2003/06/04 00:25:34 marka Exp $
-# Copyright (c) 2000 Japan Network Information Center. All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-includedir = @includedir@
-idnincludedir = $(includedir)/idn
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-MKINSTALLDIRS = @top_srcdir@/mkinstalldirs
-SHELL = @SHELL@
-
-HDRS = \
- api.h \
- assert.h \
- checker.h \
- converter.h \
- debug.h \
- delimitermap.h \
- export.h \
- filechecker.h \
- filemapper.h \
- localencoding.h \
- log.h \
- logmacro.h \
- mapper.h \
- mapselector.h \
- nameprep.h \
- normalizer.h \
- punycode.h \
- race.h \
- res.h \
- resconf.h \
- result.h \
- strhash.h \
- ucsmap.h \
- ucsset.h \
- unicode.h \
- unormalize.h \
- ucs4.h \
- utf8.h \
- util.h \
- version.h
-
-all:
-
-install:
- $(MKINSTALLDIRS) $(DESTDIR)$(idnincludedir)
- for hdr in $(HDRS); do \
- $(INSTALL_DATA) $(srcdir)/$$hdr $(DESTDIR)$(idnincludedir)/$$hdr; \
- done
-
-clean:
- rm -f *~
-
-distclean: clean
- rm -f Makefile
-
-test check:
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/aliaslist.h b/contrib/idn/idnkit-1.0-src/include/idn/aliaslist.h
deleted file mode 100644
index 4551ea06..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/aliaslist.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/* $Id: aliaslist.h,v 1.1 2003/06/04 00:25:34 marka Exp $ */
-/*
- * Copyright (c) 2002 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_ALIASLIST_H
-#define IDN_ALIASLIST_H 1
-
-#include <idn/result.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct idn__aliaslist *idn__aliaslist_t;
-
-/*
- * Create a list.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- */
-extern idn_result_t
-idn__aliaslist_create(idn__aliaslist_t *listp);
-
-/*
- * Delete a list created by 'idn__aliaslist_create'.
- */
-extern void
-idn__aliaslist_destroy(idn__aliaslist_t list);
-
-/*
- * Parse alias information file and set items to the list.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nofile -- no such file.
- * idn_invalid_syntax -- file is malformed.
- * idn_nomemory -- malloc failed.
- */
-extern idn_result_t
-idn__aliaslist_aliasfile(idn__aliaslist_t list, const char *path);
-
-/*
- * Add an item to the list.
- *
- * If top is 0, item is placed as the last item of the alias list.
- * Otherwise, it is done as the first item.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- */
-extern idn_result_t
-idn__aliaslist_additem(idn__aliaslist_t list,
- const char *pattern, const char *encoding,
- int first_item);
-
-/*
- * Find the encoding name with the specified pattern by wildcard
- * match.
- *
- * Returns:
- * idn_success -- ok. found.
- * idn_noentry -- not found.
- */
-extern idn_result_t
-idn__aliaslist_find(idn__aliaslist_t list,
- const char *pattern, char **encodingp);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_ALIASLIST_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/api.h b/contrib/idn/idnkit-1.0-src/include/idn/api.h
deleted file mode 100644
index 3adf06ed..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/api.h
+++ /dev/null
@@ -1,298 +0,0 @@
-/* $Id: api.h,v 1.1 2003/06/04 00:25:35 marka Exp $ */
-/*
- * Copyright (c) 2001,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_API_H
-#define IDN_API_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <idn/export.h>
-#include <idn/result.h>
-#include <idn/res.h>
-
-/*
- * Application Programming Interface for Internationalized Domain Name
- * Handling. This module provides high-level APIs for ordinary applications.
- * Low-level APIs are also available. See "res.h" for details.
- */
-
-/*
- * Enable or disable IDN conversion scheme.
- *
- * If on_off is 0, IDN conversion scheme is disabled. Otherwise, IDN
- * conversion is enabled even when IDN_DISABLE is defined.
- */
-IDN_EXPORT void
-idn_enable(int on_off);
-
-/*
- * Set configuration file name.
- * This function is for private use only.
- *
- * When idn_nameinit(1) is called, this module loads `file'.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- * idn_failure -- idn_nameinit() has already been
- * called.
- */
-extern idn_result_t
-idn__setconffile(const char *file);
-
-/*
- * Initialize this module, and load configuration from the default
- * configuration file (idn.conf).
- *
- * The initialization will be done only once when this function is
- * called first, while either loading of the configuration file or
- * setting the defaults behavior without the configuration file will
- * be done every time it is called.
- *
- * If load_file is 0, this will set the defaults behavior without the
- * configuration file. Otherwise, loading of the configuration file
- * occurs.
- *
- * If 'idn_encodename' or 'idn_decodename' is called without calling
- * this function, implicit initialization without the configuration
- * file will be done prior to encoding/decoding process.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nofile -- cannot open the configuration file.
- * idn_invalid_syntax -- syntax error found in the file.
- * idn_invalid_name -- there are invalid names (encoding,
- * normalization etc.).
- * idn_nomemory -- malloc failed.
- */
-IDN_EXPORT idn_result_t
-idn_nameinit(int load_file);
-
-/*
- * Encode internationalized domain name.
- *
- * The encoding process consists of the following 7 steps.
- *
- * 1. Local encoding to UTF-8 conversion
- * Converts a domain name written with local encoding (e.g. ISO-
- * 8859-1) to UTF-8.
- * 2. Delimiter mapping,
- * Maps certain characters to period (U+002E, FULL STOP).
- * 3. Local mapping
- * Apply character mappings according with the TLD of the domain
- * name.
- * 4. NAMEPREP
- * Perform NAME preparation described in RFC3491.
- * This step consists of the following 4 steps:
- * 4.1. Mapping
- * 4.2. Normalization
- * 4.3. Prohibited character check
- * 4.4. Unassigned check
- * 5. ASCII range character check
- * Checks if the domain name contains non-LDH ASCII character (not
- * alpha-numeric or hypen), or it begins or end with hypen.
- * 6. UTF-8 to IDN encoding conversion.
- * Converts the domain name from UTF-8 to ACE (e.g. Punycode).
- * 7. Length check
- * Checks the length of each label.
- *
- * 'actions' specifies actions and options of the encoding procedure.
- * Its value is a bitwise-or of the following flags:
- *
- * IDN_LOCALCONV -- perform local encoding to UTF-8 conversion (step 1)
- * IDN_DELIMMAP -- perform delimiter mapping (step 2)
- * IDN_LOCALMAP -- perform local mapping (step 3)
- * IDN_MAP -- perform mapping (step 4.1)
- * IDN_NORMALIZE -- perform normalization (step 4.2)
- * IDN_PROHCHECK -- perform prohibited character check (step 4.3)
- * IDN_UNASCHECK -- perform unassigned codepoint check (step 4.4)
- * IDN_ASCCHECK -- perform ASCII range character check (step 5)
- * IDN_IDNCONV -- perform UTF-8 to IDN encoding conversion (step 6)
- * IDN_LENCHECK -- perform length check (step 7)
- *
- * Also the following flags are provided for convinience:
- *
- * IDN_ENCODE_QUERY -- On libidnkit, perform step 1..7, except for step
- * 4.4 and 5.
- * On libidnkitlite, perform step 2..7, except for
- * step 4.4 and 5.
- * IDN_ENCODE_STORED -- On libidnkit, perform step 1..7, except for step
- * 5.
- * On libidnkitlite, perform step 2..7, except for
- * step 5.
- * IDN_ENCODE_APP -- Same as IDN_ENCODE_QUERY.
- * IDN_NAMEPREP -- perform NAMEPREP (step 4) without unassigned
- * codepoint check (step 4.4).
- *
- * The following flag does not corresponding to a particular action,
- * but an option of conversion process:
- *
- * IDN_UNDOIFERR -- If any step fails, the original input name is
- * returned.
- *
- * Note that if no flags are specified, 'idn_encodename' does nothing
- * fancy, just copies the given name verbatim.
- *
- * Returns:
- * idn_success -- ok.
- * idn_invalid_action -- invalid action flag specified.
- * idn_invalid_encoding -- the given string has invalid/illegal
- * byte sequence.
- * idn_invalid_length -- invalid length of a label.
- * idn_prohibited -- prohibited/unassigned code point found.
- * idn_buffer_overflow -- 'tolen' is too small.
- * idn_nomemory -- malloc failed.
- *
- * Also, if this function is called without calling 'idn_nameinit',
- * the following error codes might be returned.
- * idn_nofile -- cannot open the configuration file.
- * idn_invalid_syntax -- syntax error found in the file.
- * idn_invalid_name -- there are invalid names (encoding,
- * normalization etc.).
- */
-IDN_EXPORT idn_result_t
-idn_encodename(idn_action_t actions, const char *from, char *to, size_t tolen);
-
-/*
- * Decode internationalized domain name.
- *
- * The decoding process consists of the following 5 steps.
- *
- * 1. delimiter mapping
- * Maps certain characters to period (U+002E, FULL STOP).
- * 2. NAMEPREP
- * Perform NAME preparation described in RFC3491.
- * This step consists of the following 4 steps:
- * 2.1. Mapping
- * 2.2. Normalization
- * 2.3. Prohibited character check
- * 2.4. Unassigned check
- * 3. IDN encoding to UTF-8 conversion.
- * Converts the domain name from ACE (e.g. Punycode) to UCS4.
- * 4. Perform round-trip check.
- * Encode the result of step 3, and then compare it with the result
- * of the step 2. If they are different, the check is failed.
- * 5. Convert UTF-8 to local encoding.
- * If a character in the domain name cannot be converted to local
- * encoding, the conversion is failed.
- *
- * 'actions' specifies actions of the decoding procedure.
- * Its value is a bitwise-or of the following flags:
- *
- * IDN_DELIMMAP -- perform delimiter mapping (step 1)
- * IDN_MAP -- perform mapping (step 2.1)
- * IDN_NORMALIZE -- perform normalization (step 2.2)
- * IDN_PROHCHECK -- perform prohibited character check (step 2.3)
- * IDN_UNASCHECK -- perform unassigned codepoint check (step 2.4)
- * IDN_IDNCONV -- perform IDN encoding to UTF-8 conversion (step 3)
- * IDN_RTCHECK -- perform round-trip check (step 4)
- * IDN_ASCCHECK -- perform ASCII range character check while
- * round-trip check (step 4.1)
- * IDN_LOCALCONV -- perform UTF-8 to local encoding conversion (step 5)
- *
- * Also the following flags are provided for the convenience:
- *
- * IDN_DECODE_QUERY -- On libidnkit, perform step 1..5, except for step
- * 2.4 and 4.1.
- * On libidnkitlite, perform step 1..3, except for
- * step 2.4 and 4.1.
- * IDN_DECODE_STORED -- On libidnkit, perform step 1..5, except for step
- * 4.1.
- * On libidnkitlite, perform step 1..3, except for
- * step 4.1.
- * IDN_DECODE_APP -- Same as IDN_DECODE_QUERY.
- * IDN_NAMEPREP -- perform NAMEPREP (step 2) without unassigned
- * codepoint check (step 2.4).
- *
- * If any step fails, the original input name is returned.
- * 'actions' specifies what actions to take when decoding, and is
- * a bitwise-or of the following flags:
- *
- * Note that if no flags are specified, 'idn_decodename' does nothing
- * but copying the given name verbatim.
- *
- * Returns:
- * idn_success -- ok.
- * idn_invalid_action -- invalid action flag specified.
- * idn_invalid_encoding -- the given string has invalid/illegal
- * byte sequence.
- * idn_buffer_overflow -- 'tolen' is too small.
- * idn_invalid_length -- length of a label is not 1..63 characters.
- * idn_nomemory -- malloc failed.
- *
- * Also, if this function is called without calling 'idn_nameinit',
- * the following error codes might be returned.
- * idn_nofile -- cannot open the configuration file.
- * idn_invalid_syntax -- syntax error found in the file.
- * idn_invalid_name -- there are invalid names (encoding,
- * normalization etc.).
- */
-IDN_EXPORT idn_result_t
-idn_decodename(idn_action_t actions, const char *from, char *to, size_t tolen);
-
-/*
- * Decode internationalized domain name with auxiliary encoding
- * support.
- *
- * This is another API for IDN string decode. The difference between
- * two is whether the encoding conversion from auxiliary encoding to
- * UTF-8 occurs prior to the actual decode process (read description
- * of idn_res_decodename() above) or not.
- *
- * If auxencoding is NULL, from is treated as UTF-8 encoded string.
- *
- * Other arguments serve exactly same role as those of
- * idn_res_decodename().
- */
-idn_result_t
-idn_decodename2(idn_action_t actions, const char *from, char *to, size_t tolen,
- const char *auxencoding);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_API_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/assert.h b/contrib/idn/idnkit-1.0-src/include/idn/assert.h
deleted file mode 100644
index 060caca5..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/assert.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* $Id: assert.h,v 1.1 2003/06/04 00:25:35 marka Exp $ */
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_ASSERT_H
-#define IDN_ASSERT_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <assert.h>
-
-#ifndef DEBUG
-#define NDEBUG
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-# endif /* IDN_ASSERT_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/checker.h b/contrib/idn/idnkit-1.0-src/include/idn/checker.h
deleted file mode 100644
index 0d4e6d04..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/checker.h
+++ /dev/null
@@ -1,171 +0,0 @@
-/* $Id: checker.h,v 1.1 2003/06/04 00:25:36 marka Exp $ */
-/*
- * Copyright (c) 2001 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_CHECKER_H
-#define IDN_CHECKER_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Character Checker.
- *
- * Perfom checking characters in the specified domain name.
- */
-
-#include <idn/result.h>
-#include <idn/filechecker.h>
-#include <idn/nameprep.h>
-
-/*
- * Schems name prefixes for the standard nameprep prohibit/unassigned
- * checks.
- *
- * If you'd like to add the unassigned check scheme of "RFC3491"
- * to a checker context, IDN_CHECKER_UNASSIGNED_PREFIX + "RFC3491"
- * (i.e. "unassigned#RFC3491") is the scheme name passed to
- * idn_checker_add().
- */
-#define IDN_CHECKER_PROHIBIT_PREFIX "prohibit#"
-#define IDN_CHECKER_UNASSIGNED_PREFIX "unassigned#"
-#define IDN_CHECKER_BIDI_PREFIX "bidi#"
-
-/*
- * Checker object type.
- */
-typedef struct idn_checker *idn_checker_t;
-
-/*
- * Initialize module. Must be called before any other calls of
- * the functions of this module.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- */
-extern idn_result_t
-idn_checker_initialize(void);
-
-/*
- * Create a checker context.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- */
-extern idn_result_t
-idn_checker_create(idn_checker_t *ctxp);
-
-/*
- * Decrement reference count of the checker `ctx' created by
- * 'idn_checker_create', if it is still refered by another object.
- * Otherwise, release all the memory allocated to the checker.
- */
-extern void
-idn_checker_destroy(idn_checker_t ctx);
-
-/*
- * Increment reference count of the checker `ctx' created by
- * 'idn_checker_create'.
- */
-extern void
-idn_checker_incrref(idn_checker_t ctx);
-
-/*
- * Add checking scheme `name' to the checker to `ctx'.
- *
- * Returns:
- * idn_success -- ok.
- * idn_invalid_name -- the given name is not valid.
- * idn_nomemory -- malloc failed.
- */
-extern idn_result_t
-idn_checker_add(idn_checker_t ctx, const char *name);
-
-extern idn_result_t
-idn_checker_addall(idn_checker_t ctx, const char **names, int nnames);
-
-/*
- * Check a domain name. All checking schemes regsitered in `ctx' are
- * applied in the regisration order.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- * idn_buffer_overflow -- output buffer is too small.
- */
-extern idn_result_t
-idn_checker_lookup(idn_checker_t ctx, const unsigned long *ucs4,
- const unsigned long **found);
-
-/*
- * Checking procedure type.
- */
-typedef idn_result_t (*idn_checker_createproc_t)(const char *parameter,
- void **ctxp);
-typedef void (*idn_checker_destroyproc_t)(void *ctx);
-typedef idn_result_t (*idn_checker_lookupproc_t)(void *ctx,
- const unsigned long *ucs4,
- const unsigned long **found);
-
-/*
- * Register a new checking scheme.
- *
- * You can override the default normalization schemes, if you want.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- */
-extern idn_result_t
-idn_checker_register(const char *prefix,
- idn_checker_createproc_t create,
- idn_checker_destroyproc_t destroy,
- idn_checker_lookupproc_t lookup);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_CHECKER_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/converter.h b/contrib/idn/idnkit-1.0-src/include/idn/converter.h
deleted file mode 100644
index 0c4e03dd..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/converter.h
+++ /dev/null
@@ -1,258 +0,0 @@
-/* $Id: converter.h,v 1.1 2003/06/04 00:25:36 marka Exp $ */
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_CONVERTER_H
-#define IDN_CONVERTER_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Codeset converter.
- *
- * This module provides conversions from some local codeset to UCS4
- * and vice versa.
- */
-
-#include <idn/export.h>
-#include <idn/result.h>
-
-/*
- * Converter context type (opaque).
- */
-typedef struct idn_converter *idn_converter_t;
-
-/*
- * Conversion flags.
- */
-#define IDN_CONVERTER_DELAYEDOPEN 1
-#define IDN_CONVERTER_RTCHECK 2
-
-/*
- * Encoding types.
- */
-#define IDN_NONACE 0
-#define IDN_ACE_STRICTCASE 1
-#define IDN_ACE_LOOSECASE 2
-
-/*
- * Initialize module. Must be called before any other calls of
- * the functions of this module.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- */
-IDN_EXPORT idn_result_t
-idn_converter_initialize(void);
-
-/*
- * Create a conversion context.
- *
- * Returns:
- * idn_success -- ok.
- * idn_invalid_name -- specified codeset is not supported.
- * idn_nomemory -- malloc failed.
- * idn_failure -- other failure (unknown cause).
- */
-IDN_EXPORT idn_result_t
-idn_converter_create(const char *name, idn_converter_t *ctxp,
- int flags);
-
-/*
- * Decrement reference count of the converter `ctx' created by
- * 'idn_converter_create', if it is still refered by another object.
- * Otherwise, release all the memory allocated to the converter.
- */
-IDN_EXPORT void
-idn_converter_destroy(idn_converter_t ctx);
-
-/*
- * Increment reference count of the converter `ctx' created by
- * 'idn_converter_create'.
- */
-IDN_EXPORT void
-idn_converter_incrref(idn_converter_t ctx);
-
-/*
- * Convert between local codeset and UCS4. Note that each conversion
- * is started with initial state.
- *
- * Returns:
- * idn_success -- ok.
- * idn_buffer_overflow -- output buffer is too small.
- * idn_invalid_encoding -- the input string has invalid/illegal
- * byte sequence.
- * idn_invalid_name -- codeset is not supported (this error
- * should happen only if 'delayedopen'
- * flag was set when idn_converter_create
- * was called)
- * idn_failure -- other failure.
- */
-IDN_EXPORT idn_result_t
-idn_converter_convfromucs4(idn_converter_t ctx,
- const unsigned long *from, char *to, size_t tolen);
-
-IDN_EXPORT idn_result_t
-idn_converter_convtoucs4(idn_converter_t ctx,
- const char *from, unsigned long *to, size_t tolen);
-
-/*
- * Get the name of local codeset. The returned name may be different from
- * the one specified to idn_converter_create, if the specified one was an
- * alias.
- *
- * Returns:
- * the local codeset name.
- */
-IDN_EXPORT char *
-idn_converter_localencoding(idn_converter_t ctx);
-
-/*
- * Return the encoding type of this local encoding.
- *
- * Returns:
- * IDN_NONACE -- encoding is not ACE.
- * IDN_ACE_STRICTCASE -- encoding is ACE.
- * decoder of this ACE preserve letter case.
- * IDN_ACE_LOOSECASE -- encoding type is ACE.
- * decoder cannot preserve letter case.
- */
-IDN_EXPORT int
-idn_converter_encodingtype(idn_converter_t ctx);
-
-/*
- * Return if this local encoding is ACE (Ascii Compatible Encoding).
- *
- * Returns:
- * 1 -- yes, it is ACE.
- * 0 -- no.
- */
-IDN_EXPORT int
-idn_converter_isasciicompatible(idn_converter_t ctx);
-
-/*
- * Register an alias for a codeset name.
- *
- * If first_item is 0, alias pattern is placed as the last item of the
- * alias list. Otherwise, it is done as the first item.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- */
-IDN_EXPORT idn_result_t
-idn_converter_addalias(const char *alias_name, const char *real_name,
- int first_item);
-
-/*
- * Register aliases defined by the specified file.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nofile -- no such file.
- * idn_invalid_syntax -- file is malformed.
- * idn_nomemory -- malloc failed.
- */
-IDN_EXPORT idn_result_t
-idn_converter_aliasfile(const char *path);
-
-/*
- * Unregister all the aliases.
- */
-IDN_EXPORT idn_result_t
-idn_converter_resetalias(void);
-
-/*
- * resolve real encoding name from alias information.
- */
-IDN_EXPORT const char *
-idn_converter_getrealname(const char *name);
-
-
-/*
- * New converter registration.
- */
-
-/*
- * Conversion operation functions.
- */
-typedef idn_result_t (*idn_converter_openproc_t)(idn_converter_t ctx,
- void **privdata);
-typedef idn_result_t (*idn_converter_closeproc_t)(idn_converter_t ctx,
- void *privdata);
-typedef idn_result_t
- (*idn_converter_convfromucs4proc_t)(idn_converter_t ctx,
- void *privdata,
- const unsigned long *from,
- char *to, size_t tolen);
-typedef idn_result_t
- (*idn_converter_convtoucs4proc_t)(idn_converter_t ctx,
- void *privdata,
- const char *from,
- unsigned long *to,
- size_t tolen);
-
-/*
- * Register a new converter.
- * 'encoding_type' is a value which idn_converter_encodingtype() returns.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- */
-IDN_EXPORT idn_result_t
-idn_converter_register(const char *name,
- idn_converter_openproc_t openfromucs4,
- idn_converter_openproc_t opentoucs4,
- idn_converter_convfromucs4proc_t convfromucs4,
- idn_converter_convtoucs4proc_t convtoucs4,
- idn_converter_closeproc_t close,
- int encoding_type);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_CONVERTER_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/debug.h b/contrib/idn/idnkit-1.0-src/include/idn/debug.h
deleted file mode 100644
index fad444c9..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/debug.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* $Id: debug.h,v 1.1 2003/06/04 00:25:36 marka Exp $ */
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_DEBUG_H
-#define IDN_DEBUG_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Debug utility
- */
-
-#include <idn/export.h>
-
-IDN_EXPORT char *idn__debug_hexstring(const char *s, int maxbytes);
-IDN_EXPORT char *idn__debug_xstring(const char *s, int maxbytes);
-IDN_EXPORT char *idn__debug_ucs4xstring(const unsigned long *s, int maxbytes);
-IDN_EXPORT char *idn__debug_utf16xstring(const unsigned short *s,
- int maxbytes);
-IDN_EXPORT char *idn__debug_hexdata(const char *s, int length, int maxbytes);
-IDN_EXPORT void idn__debug_hexdump(const char *s, int maxbytes);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_DEBUG_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/delimitermap.h b/contrib/idn/idnkit-1.0-src/include/idn/delimitermap.h
deleted file mode 100644
index d9aa33ab..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/delimitermap.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/* $Id: delimitermap.h,v 1.1 2003/06/04 00:25:37 marka Exp $ */
-/*
- * Copyright (c) 2001 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_DELIMITERMAP_H
-#define IDN_DELIMITERMAP_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Mapper.
- *
- * Perfom mapping local delimiters to `.'.
- */
-
-#include <idn/export.h>
-#include <idn/result.h>
-
-/*
- * Map object type.
- */
-typedef struct idn_delimitermap *idn_delimitermap_t;
-
-/*
- * Create a delimitermap context.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- */
-IDN_EXPORT idn_result_t
-idn_delimitermap_create(idn_delimitermap_t *ctxp);
-
-/*
- * Decrement reference count of the delimitermap `ctx' created by
- * 'idn_delimitermap_create', if it is still refered by another object.
- * Otherwise, release all the memory allocated to the delimitermap.
- */
-IDN_EXPORT void
-idn_delimitermap_destroy(idn_delimitermap_t ctx);
-
-/*
- * Increment reference count of the delimitermap `ctx' created by
- * 'idn_delimitermap_create'.
- */
-IDN_EXPORT void
-idn_delimitermap_incrref(idn_delimitermap_t ctx);
-
-/*
- * Add a local delimiter.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- * idn_invalid_codepoint -- delimiter is not valid UCS4 character.
- */
-IDN_EXPORT idn_result_t
-idn_delimitermap_add(idn_delimitermap_t ctx, unsigned long delimiter);
-
-IDN_EXPORT idn_result_t
-idn_delimitermap_addall(idn_delimitermap_t ctx, unsigned long *delimiters,
- int ndelimiters);
-
-/*
- * Map local delimiters in `from' to `.'.
- *
- * Note that if no delimiter is added to the context, the function copies
- * the string.
- *
- * Returns:
- * idn_success -- ok.
- * idn_buffer_overflow -- output buffer is too small.
- */
-IDN_EXPORT idn_result_t
-idn_delimitermap_map(idn_delimitermap_t ctx, const unsigned long *from,
- unsigned long *to, size_t tolen);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_DELIMITERMAP_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/export.h b/contrib/idn/idnkit-1.0-src/include/idn/export.h
deleted file mode 100644
index 71e93148..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/export.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* $Id: export.h,v 1.1 2003/06/04 00:25:37 marka Exp $ */
-/*
- * Copyright (c) 2002 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_EXPORT_H
-#define IDN_EXPORT_H 1
-
-/*
- * Macro for exporting functions.
- *
- * When creating a Windows DLL, define IDN_EXPORT something as
- * "extern __declspec(dllexport)".
- */
-
-#ifndef IDN_EXPORT
-#define IDN_EXPORT extern
-#endif
-
-# endif /* IDN_EXPORT_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/filechecker.h b/contrib/idn/idnkit-1.0-src/include/idn/filechecker.h
deleted file mode 100644
index c69c2b1e..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/filechecker.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/* $Id: filechecker.h,v 1.1 2003/06/04 00:25:37 marka Exp $ */
-/*
- * Copyright (c) 2001 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_FILECHECKER_H
-#define IDN_FILECHECKER_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Character checker -- check if there are any characters specified
- * by a file in the given string.
- */
-
-#include <idn/result.h>
-
-/*
- * Check object type.
- */
-typedef struct idn__filechecker *idn__filechecker_t;
-
-/*
- * Read the contents of the given file and create a context for
- * checking.
- *
- * 'file' is the pathname of the file, which specifies the set of
- * characters to be checked. The file is a simple text file, and
- * each line must be of the form either
- * <code_point>
- * or
- * <code_point>-<code_point>
- * (or comment, see below) where <code_point> is a UCS code point
- * represented as hexadecimal string with optional prefix `U+'
- * (ex. `0041' or `U+FEDC').
- *
- * The former specifies just one character (a code point, to be precise),
- * while the latter specified a range of characters. In the case of
- * a character range, the first code point (before hyphen) must not be
- * greater than the second code point (after hyphen).
- *
- * Lines starting with `#' are comments.
- *
- * If file is read with no errors, the created context is stored in
- * '*ctxp', and 'idn_success' is returned. Otherwise, the contents
- * of '*ctxp' is undefined.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nofile -- cannot open the specified file.
- * idn_nomemory -- malloc failed.
- * idn_invalid_syntax -- file format is not valid.
- */
-extern idn_result_t
-idn__filechecker_create(const char *file, idn__filechecker_t *ctxp);
-
-/*
- * Release memory for the specified context.
- */
-extern void
-idn__filechecker_destroy(idn__filechecker_t ctx);
-
-/*
- * See if the given string contains any specified characters.
- *
- * Check if there is any characters pecified by the context 'ctx' in
- * the UCS4 string 'str'. If there are none, NULL is stored in '*found'.
- * Otherwise, the pointer to the first occurence of such character is
- * stored in '*found'.
- *
- * Returns:
- * idn_success -- ok.
- */
-extern idn_result_t
-idn__filechecker_lookup(idn__filechecker_t ctx, const unsigned long *str,
- const unsigned long **found);
-
-/*
- * The following functions are for internal use.
- * They are used for this module to be add to the checker module.
- */
-extern idn_result_t
-idn__filechecker_createproc(const char *parameter, void **ctxp);
-
-extern void
-idn__filechecker_destroyproc(void *ctxp);
-
-extern idn_result_t
-idn__filechecker_lookupproc(void *ctx, const unsigned long *str,
- const unsigned long **found);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_FILECHECKER_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/filemapper.h b/contrib/idn/idnkit-1.0-src/include/idn/filemapper.h
deleted file mode 100644
index 1f8e6b94..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/filemapper.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/* $Id: filemapper.h,v 1.1 2003/06/04 00:25:38 marka Exp $ */
-/*
- * Copyright (c) 2001 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_FILEMAPPER_H
-#define IDN_FILEMAPPER_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Perform character mapping (substitution) according to a
- * map file.
- */
-
-#include <idn/result.h>
-
-/*
- * Mapping object type.
- */
-typedef struct idn__filemapper *idn__filemapper_t;
-
-/*
- * Read the contents of the given map file and create a context for mapping.
- *
- * 'file' is the pathname of the file, which specifies the character
- * mapping. The file is a simple text file, and each line specifies
- * a mapping of a single character. The format of each line is
- *
- * <code_point>; [<code_point>..][;]
- *
- * where <code_point> is a UCS code point represented as a hexadecimal
- * string with optional prefix `U+' (ex. `0041' or `U+FEDC').
- * The code point before the first semicolon will be mapped to the
- * sequence of code points separated by space characters after the
- * first semicolon. The sequence may be empty, denoting wiping out
- * the character.
- *
- * For example,
- * U+0041; U+0061 -- maps 'A' to 'a'
- * 20;; -- wipes out ' '
- *
- * Anything after the second semicolon is ignored. Also lines beginning
- * with '#' are treated as comments.
- *
- * If there is no error, the created context is stored in '*ctxp'.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nofile -- cannot open the specified file.
- * idn_nomemory -- malloc failed.
- * idn_invalid_syntax -- file format is not valid.
- */
-extern idn_result_t
-idn__filemapper_create(const char *file, idn__filemapper_t *ctxp);
-
-/*
- * Release memory for the given context.
- */
-extern void
-idn__filemapper_destroy(idn__filemapper_t ctx);
-
-/*
- * Perform character substitution.
- *
- * Each character in the string 'from' is examined and if it
- * has a mapping, it is substituted to the corresponding
- * character sequence. The substituted string is stored in 'to',
- * whose length is specified by 'tolen'.
- *
- * Returns:
- * idn_success -- ok.
- * idn_buffer_overflow -- result buffer is too small.
- */
-extern idn_result_t
-idn__filemapper_map(idn__filemapper_t ctx, const unsigned long *from,
- unsigned long *to, size_t tolen);
-
-/*
- * The following functions are for internal use.
- * They are used for this module to be add to the mapper module.
- */
-extern idn_result_t
-idn__filemapper_createproc(const char *parameter, void **ctxp);
-
-extern void
-idn__filemapper_destroyproc(void *ctxp);
-
-extern idn_result_t
-idn__filemapper_mapproc(void *ctx, const unsigned long *from,
- unsigned long *to, size_t tolen);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_FILEMAPPER_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/localencoding.h b/contrib/idn/idnkit-1.0-src/include/idn/localencoding.h
deleted file mode 100644
index 012c08ab..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/localencoding.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* $Id: localencoding.h,v 1.1 2003/06/04 00:25:38 marka Exp $ */
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_LOCALENCODING_H
-#define IDN_LOCALENCODING_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Local codeset detection.
- *
- * Determine the local codeset (the codeset used by the current application),
- * based on the locale information.
- */
-
-#include <idn/export.h>
-
-#define IDN_LOCALCS_ENV "IDN_LOCAL_CODESET"
-
-/*
- * Get the codeset name corresponding to the current locale,
- * suitable for passing to 'idn_converter_create'.
- *
- * If the codeset cannot be determined, the locale name itself
- * will be returned in the hope that codeset alias file translates it
- * to the right name.
- *
- * If it cannot retrieve the current locale name, NULL will be
- * returned.
- */
-IDN_EXPORT const char *idn_localencoding_name(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_LOCALENCODING_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/log.h b/contrib/idn/idnkit-1.0-src/include/idn/log.h
deleted file mode 100644
index 52ea82d3..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/log.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/* $Id: log.h,v 1.1 2003/06/04 00:25:38 marka Exp $ */
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_LOG_H
-#define IDN_LOG_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * libidnkit logging facility.
- */
-
-#include <idn/export.h>
-
-/*
- * Log level definition.
- */
-enum {
- idn_log_level_fatal = 0,
- idn_log_level_error = 1,
- idn_log_level_warning = 2,
- idn_log_level_info = 3,
- idn_log_level_trace = 4,
- idn_log_level_dump = 5
-};
-
-/*
- * Log handler type.
- */
-typedef void (*idn_log_proc_t)(int level, const char *msg);
-
-/*
- * Log routines.
- */
-IDN_EXPORT void idn_log_fatal(const char *fmt, ...);
-IDN_EXPORT void idn_log_error(const char *fmt, ...);
-IDN_EXPORT void idn_log_warning(const char *fmt, ...);
-IDN_EXPORT void idn_log_info(const char *fmt, ...);
-IDN_EXPORT void idn_log_trace(const char *fmt, ...);
-IDN_EXPORT void idn_log_dump(const char *fmt, ...);
-
-/*
- * Set/get log level.
- *
- * If log level has not been explicitly defined by 'idn_log_setlevel',
- * the default level is determined by the value of enrironment
- * variable 'IDN_LOG_LEVEL'.
- */
-IDN_EXPORT void idn_log_setlevel(int level);
-IDN_EXPORT int idn_log_getlevel(void);
-
-/*
- * Set log handler.
- *
- * If no log handler is set, log goes to stderr by default.
- * You can reset the handler to the default one by specifying
- * NULL.
- */
-IDN_EXPORT void idn_log_setproc(idn_log_proc_t proc);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_LOG_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/logmacro.h b/contrib/idn/idnkit-1.0-src/include/idn/logmacro.h
deleted file mode 100644
index 22b26dee..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/logmacro.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* $Id: logmacro.h,v 1.1 2003/06/04 00:25:38 marka Exp $ */
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_LOGMACRO_H
-#define IDN_LOGMACRO_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <idn/log.h>
-
-#define FATAL(x) idn_log_fatal x
-#define ERROR(x) idn_log_error x
-#define WARNING(x) idn_log_warning x
-#define INFO(x) LOG_AT_LEVEL(idn_log_level_info, idn_log_info, x)
-#define TRACE(x) LOG_AT_LEVEL(idn_log_level_trace, idn_log_trace, x)
-
-#ifdef DEBUG
-#define DUMP(x) LOG_AT_LEVEL(idn_log_level_dump, idn_log_dump, x)
-#else
-#define DUMP(x)
-#endif /* DEBUG */
-
-#define LOG_AT_LEVEL(lv, fun, x) do {if (LOGLEVEL >= (lv)) fun x; } while (0)
-#define LOGLEVEL idn_log_getlevel()
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_LOGMACRO_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/mapper.h b/contrib/idn/idnkit-1.0-src/include/idn/mapper.h
deleted file mode 100644
index 4375b74c..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/mapper.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/* $Id: mapper.h,v 1.1 2003/06/04 00:25:38 marka Exp $ */
-/*
- * Copyright (c) 2001 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_MAPPER_H
-#define IDN_MAPPER_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Mapper.
- *
- * Perfom mapping the specified domain name.
- */
-
-#include <idn/export.h>
-#include <idn/result.h>
-#include <idn/filemapper.h>
-#include <idn/nameprep.h>
-
-/*
- * Map object type.
- */
-typedef struct idn_mapper *idn_mapper_t;
-
-/*
- * Initialize module. Must be called before any other calls of
- * the functions of this module.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- */
-IDN_EXPORT idn_result_t
-idn_mapper_initialize(void);
-
-/*
- * Create a mapper context.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- */
-IDN_EXPORT idn_result_t
-idn_mapper_create(idn_mapper_t *ctxp);
-
-/*
- * Decrement reference count of the mapper `ctx' created by
- * 'idn_mapper_create', if it is still refered by another object.
- * Otherwise, release all the memory allocated to the mapper.
- */
-IDN_EXPORT void
-idn_mapper_destroy(idn_mapper_t ctx);
-
-/*
- * Increment reference count of the mapper `ctx' created by
- * 'idn_mapper_create'.
- */
-IDN_EXPORT void
-idn_mapper_incrref(idn_mapper_t ctx);
-
-/*
- * Add mapping scheme `name' to the mapper to `ctx'.
- *
- * Returns:
- * idn_success -- ok.
- * idn_invalid_name -- the given name is not valid.
- * idn_nomemory -- malloc failed.
- */
-IDN_EXPORT idn_result_t
-idn_mapper_add(idn_mapper_t ctx, const char *name);
-
-IDN_EXPORT idn_result_t
-idn_mapper_addall(idn_mapper_t ctx, const char **names, int nnames);
-
-/*
- * Map an UCS4 string. All mapping schemes regsitered in `ctx'
- * are applied in the regisration order.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- * idn_buffer_overflow -- output buffer is too small.
- */
-IDN_EXPORT idn_result_t
-idn_mapper_map(idn_mapper_t ctx, const unsigned long *from,
- unsigned long *to, size_t tolen);
-
-/*
- * Mapping procedure type.
- */
-typedef idn_result_t (*idn_mapper_createproc_t)(const char *parameter,
- void **ctxp);
-typedef void (*idn_mapper_destroyproc_t)(void *ctxp);
-typedef idn_result_t (*idn_mapper_mapproc_t)(void *ctx,
- const unsigned long *from,
- unsigned long *, size_t);
-
-/*
- * Register a new mapping scheme.
- *
- * You can override the default normalization schemes, if you want.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- */
-IDN_EXPORT idn_result_t
-idn_mapper_register(const char *prefix,
- idn_mapper_createproc_t create,
- idn_mapper_destroyproc_t destroy,
- idn_mapper_mapproc_t map);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_MAPPER_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/mapselector.h b/contrib/idn/idnkit-1.0-src/include/idn/mapselector.h
deleted file mode 100644
index 24485cad..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/mapselector.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/* $Id: mapselector.h,v 1.1 2003/06/04 00:25:39 marka Exp $ */
-/*
- * Copyright (c) 2001 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_MAPSELECTOR_H
-#define IDN_MAPSELECTOR_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Map selector.
- *
- * Perfom mapping the specified domain name according with the TLD
- * of the donmain name.
- */
-
-#include <idn/export.h>
-#include <idn/result.h>
-#include <idn/mapper.h>
-
-/*
- * Special TLDs for map selection.
- */
-#define IDN_MAPSELECTOR_NOTLD "-"
-#define IDN_MAPSELECTOR_DEFAULTTLD "."
-
-IDN_EXPORT const unsigned long *
-idn_mapselector_getnotld(void);
-
-IDN_EXPORT const unsigned long *
-idn_mapselector_getdefaulttld(void);
-
-/*
- * Mapselector object type.
- */
-typedef struct idn_mapselector *idn_mapselector_t;
-
-/*
- * Initialize module. Must be called before any other calls of
- * the functions of this module.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- */
-IDN_EXPORT idn_result_t
-idn_mapselector_initialize(void);
-
-/*
- * Create a mapselector context.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- */
-IDN_EXPORT idn_result_t
-idn_mapselector_create(idn_mapselector_t *ctxp);
-
-/*
- * Decrement reference count of the mapselector `ctx' created by
- * 'idn_mapselector_create', if it is still refered by another object.
- * Otherwise, release all the memory allocated to the mapselector.
- */
-IDN_EXPORT void
-idn_mapselector_destroy(idn_mapselector_t ctx);
-
-/*
- * Increment reference count of the mapselector `ctx' created by
- * 'idn_mapselector_create'.
- */
-IDN_EXPORT void
-idn_mapselector_incrref(idn_mapselector_t ctx);
-
-/*
- * Return the mapper for `tld' registered in `ctx', or return NULL if
- * mapper for `tld' is not registered.
- */
-IDN_EXPORT idn_mapper_t
-idn_mapselector_mapper(idn_mapselector_t ctx, const char *tld);
-
-/*
- * Add mapping scheme `name' to the mapper for `tld' to the mapselector
- * context `ctx'. If no mapper for `TLD' has not been registered, the
- * function creates a new mapper for `tld', and then adds the given mapping
- * scheme to the mapper. Otherwise, it adds the scheme to the mapper for
- * TLD registered in `ctx'.
- *
- * Returns:
- * idn_success -- ok.
- * idn_invalid_name -- the given tld or name is not valid.
- * idn_nomemory -- malloc failed.
- */
-IDN_EXPORT idn_result_t
-idn_mapselector_add(idn_mapselector_t ctx, const char *tld, const char *name);
-
-IDN_EXPORT idn_result_t
-idn_mapselector_addall(idn_mapselector_t ctx, const char *tld,
- const char **names, int nnames);
-
-/*
- * Map an UCS4 string with the mapper for TLD of the domain name.
- * If there is no mapper suitable for the domain name, the function
- * simply copies the doman name.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- * idn_buffer_overflow -- output buffer is too small.
- * idn_invalid_name -- the given tld is not valid.
- */
-IDN_EXPORT idn_result_t
-idn_mapselector_map(idn_mapselector_t ctx, const unsigned long *from,
- const char *tld, unsigned long *to, size_t tolen);
-
-IDN_EXPORT idn_result_t
-idn_mapselector_map2(idn_mapselector_t ctx, const unsigned long *from,
- const unsigned long *tld, unsigned long *to,
- size_t tolen);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_MAPSELECTOR_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/nameprep.h b/contrib/idn/idnkit-1.0-src/include/idn/nameprep.h
deleted file mode 100644
index 57f6fe52..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/nameprep.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/* $Id: nameprep.h,v 1.1 2003/06/04 00:25:39 marka Exp $ */
-/*
- * Copyright (c) 2001 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_NAMEPREP_H
-#define IDN_NAMEPREP_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Perform NAMEPREP (mapping, prohibited/unassigned checking).
- */
-
-#include <idn/export.h>
-#include <idn/result.h>
-
-/*
- * BIDI type codes.
- */
-typedef enum {
- idn_biditype_r_al,
- idn_biditype_l,
- idn_biditype_others
-} idn_biditype_t;
-
-/*
- * A Handle for nameprep operations.
- */
-typedef struct idn_nameprep *idn_nameprep_t;
-
-
-/*
- * The latest version of nameprep.
- */
-#define IDN_NAMEPREP_CURRENT "RFC3491"
-
-/*
- * Create a handle for nameprep operations.
- * The handle is stored in '*handlep', which is used other functions
- * in this module.
- * The version of the NAMEPREP specification can be specified with
- * 'version' parameter. If 'version' is NULL, the latest version
- * is used.
- *
- * Returns:
- * idn_success -- ok.
- * idn_notfound -- specified version not found.
- */
-IDN_EXPORT idn_result_t
-idn_nameprep_create(const char *version, idn_nameprep_t *handlep);
-
-/*
- * Close a handle, which was created by 'idn_nameprep_create'.
- */
-IDN_EXPORT void
-idn_nameprep_destroy(idn_nameprep_t handle);
-
-/*
- * Perform character mapping on an UCS4 string specified by 'from', and
- * store the result into 'to', whose length is specified by 'tolen'.
- *
- * Returns:
- * idn_success -- ok.
- * idn_buffer_overflow -- result buffer is too small.
- */
-IDN_EXPORT idn_result_t
-idn_nameprep_map(idn_nameprep_t handle, const unsigned long *from,
- unsigned long *to, size_t tolen);
-
-/*
- * Check if an UCS4 string 'str' contains any prohibited characters specified
- * by the draft. If found, the pointer to the first such character is stored
- * into '*found'. Otherwise '*found' will be NULL.
- *
- * Returns:
- * idn_success -- check has been done properly. (But this
- * does not mean that no prohibited character
- * was found. Check '*found' to see the
- * result.)
- */
-IDN_EXPORT idn_result_t
-idn_nameprep_isprohibited(idn_nameprep_t handle, const unsigned long *str,
- const unsigned long **found);
-
-/*
- * Check if an UCS4 string 'str' contains any unassigned characters specified
- * by the draft. If found, the pointer to the first such character is stored
- * into '*found'. Otherwise '*found' will be NULL.
- *
- * Returns:
- * idn_success -- check has been done properly. (But this
- * does not mean that no unassinged character
- * was found. Check '*found' to see the
- * result.)
- */
-IDN_EXPORT idn_result_t
-idn_nameprep_isunassigned(idn_nameprep_t handle, const unsigned long *str,
- const unsigned long **found);
-
-/*
- * Check if an UCS4 string 'str' is valid string specified by ``bidi check''
- * of the draft. If it is not valid, the pointer to the first invalid
- * character is stored into '*found'. Otherwise '*found' will be NULL.
- *
- * Returns:
- * idn_success -- check has been done properly. (But this
- * does not mean that the string was valid.
- * Check '*found' to see the result.)
- */
-IDN_EXPORT idn_result_t
-idn_nameprep_isvalidbidi(idn_nameprep_t handle, const unsigned long *str,
- const unsigned long **found);
-
-/*
- * The following functions are for internal use.
- * They are used for this module to be add to the checker and mapper modules.
- */
-IDN_EXPORT idn_result_t
-idn_nameprep_createproc(const char *parameter, void **handlep);
-
-IDN_EXPORT void
-idn_nameprep_destroyproc(void *handle);
-
-IDN_EXPORT idn_result_t
-idn_nameprep_mapproc(void *handle, const unsigned long *from,
- unsigned long *to, size_t tolen);
-
-IDN_EXPORT idn_result_t
-idn_nameprep_prohibitproc(void *handle, const unsigned long *str,
- const unsigned long **found);
-
-IDN_EXPORT idn_result_t
-idn_nameprep_unassignedproc(void *handle, const unsigned long *str,
- const unsigned long **found);
-
-IDN_EXPORT idn_result_t
-idn_nameprep_bidiproc(void *handle, const unsigned long *str,
- const unsigned long **found);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_NAMEPREP_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/normalizer.h b/contrib/idn/idnkit-1.0-src/include/idn/normalizer.h
deleted file mode 100644
index 85a1103c..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/normalizer.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/* $Id: normalizer.h,v 1.1 2003/06/04 00:25:40 marka Exp $ */
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_NORMALIZER_H
-#define IDN_NORMALIZER_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Domain name normalizer.
- *
- * Perform normalization on the specified strings. String must be
- * in UCS4 encoding.
- */
-
-#include <idn/export.h>
-#include <idn/result.h>
-
-/*
- * Normalizer type (opaque).
- */
-typedef struct idn_normalizer *idn_normalizer_t;
-
-/*
- * Normalizer procedure type.
- */
-typedef idn_result_t (*idn_normalizer_proc_t)(const unsigned long *from,
- unsigned long *to, size_t tolen);
-
-/*
- * Initialize this module.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- */
-IDN_EXPORT idn_result_t
-idn_normalizer_initialize(void);
-
-/*
- * Create a empty normalizer.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- */
-IDN_EXPORT idn_result_t
-idn_normalizer_create(idn_normalizer_t *ctxp);
-
-/*
- * Decrement reference count of the normalizer `ctx' created by
- * 'idn_normalizer_create', if it is still refered by another object.
- * Otherwise, release all the memory allocated to the normalizer.
- */
-IDN_EXPORT void
-idn_normalizer_destroy(idn_normalizer_t ctx);
-
-/*
- * Increment reference count of the normalizer `ctx' created by
- * 'idn_normalizer_create'.
- */
-IDN_EXPORT void
-idn_normalizer_incrref(idn_normalizer_t ctx);
-
-/*
- * Add a normalization scheme to a normalizer.
- *
- * Multiple shemes can be added to a normalizer, and they will be
- * applied in order.
- *
- * Returns:
- * idn_success -- ok.
- * idn_invalid_name -- unknown scheme was specified.
- * idn_nomemory -- malloc failed.
- */
-IDN_EXPORT idn_result_t
-idn_normalizer_add(idn_normalizer_t ctx, const char *scheme_name);
-
-IDN_EXPORT idn_result_t
-idn_normalizer_addall(idn_normalizer_t ctx, const char **scheme_names,
- int nschemes);
-
-/*
- * Perform normalization(s) defined by a normalizer to the specified string,
- * If the normalizer has two or more normalization schemes, they are
- * applied in order.
- *
- * Returns:
- * idn_success -- ok.
- * idn_buffer_overflow -- output buffer is too small.
- * idn_nomemory -- malloc failed.
- */
-IDN_EXPORT idn_result_t
-idn_normalizer_normalize(idn_normalizer_t ctx, const unsigned long *from,
- unsigned long *to, size_t tolen);
-
-/*
- * Register a new normalization scheme.
- *
- * You can override the default normalization schemes, if you want.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- */
-IDN_EXPORT idn_result_t
-idn_normalizer_register(const char *scheme_name, idn_normalizer_proc_t proc);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_NORMALIZER_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/punycode.h b/contrib/idn/idnkit-1.0-src/include/idn/punycode.h
deleted file mode 100644
index 32cf1479..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/punycode.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* $Id: punycode.h,v 1.1 2003/06/04 00:25:40 marka Exp $ */
-/*
- * Copyright (c) 2001 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_PUNYCODE_H
-#define IDN_PUNYCODE_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Punycode Converter.
- */
-
-#include <idn/result.h>
-#include <idn/converter.h>
-
-extern idn_result_t
-idn__punycode_decode(idn_converter_t ctx, void *privdata,
- const char *from, unsigned long *to, size_t tolen);
-
-extern idn_result_t
-idn__punycode_encode(idn_converter_t ctx, void *privdata,
- const unsigned long *from, char *to, size_t tolen);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_PUNYCODE_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/race.h b/contrib/idn/idnkit-1.0-src/include/idn/race.h
deleted file mode 100644
index bb713a23..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/race.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* $Id: race.h,v 1.1 2003/06/04 00:25:40 marka Exp $ */
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_RACE_H
-#define IDN_RACE_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * RACE Converter.
- *
- * See Internet Draft draft-ietf-idn-race-03.txt for details.
- */
-
-#include <idn/result.h>
-#include <idn/converter.h>
-
-extern idn_result_t
-idn__race_encode(idn_converter_t ctx, void *privdata,
- const unsigned long *from, char *to, size_t tolen);
-
-extern idn_result_t
-idn__race_decode(idn_converter_t ctx, void *privdata,
- const char *from, unsigned long *to, size_t tolen);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_RACE_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/res.h b/contrib/idn/idnkit-1.0-src/include/idn/res.h
deleted file mode 100644
index 7502543a..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/res.h
+++ /dev/null
@@ -1,309 +0,0 @@
-/* $Id: res.h,v 1.1 2003/06/04 00:25:41 marka Exp $ */
-/*
- * Copyright (c) 2001,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_RES_H
-#define IDN_RES_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Resolver library support.
- *
- * All the functions provided by this module requires IDN resolver
- * configuration context of type 'idn_resconf_t' as an argument.
- * This context holds information described in the configuration file
- * (idn.conf). See idn_resconf module for details.
- *
- * All functions also accept NULL as the context, but since
- * no conversion/normalization will be done in this case, it is
- * pretty useless.
- */
-
-#include <idn/export.h>
-#include <idn/resconf.h>
-#include <idn/result.h>
-
-typedef unsigned long idn_action_t;
-
-/*
- * Actions
- */
-#define IDN_LOCALCONV 0x00000001 /* Local encoding <-> UTF-8 conversion */
-#define IDN_DELIMMAP 0x00000002 /* Delimiter mapping */
-#define IDN_LOCALMAP 0x00000004 /* Local mapping */
-#define IDN_MAP 0x00000008 /* NAMEPREP map */
-#define IDN_NORMALIZE 0x00000010 /* NAMEPREP normalize */
-#define IDN_PROHCHECK 0x00000020 /* NAMEPREP prohibited character check */
-#define IDN_UNASCHECK 0x00000040 /* Unassigned code point check */
-#define IDN_BIDICHECK 0x00000080 /* bidirectional string check */
-#define IDN_ASCCHECK 0x00000100 /* Non-LDH ASCII check */
-#define IDN_IDNCONV 0x00000200 /* UTF-8 <-> IDN encoding conversion */
-#define IDN_LENCHECK 0x00000400 /* Label length check */
-#define IDN_RTCHECK 0x00000800 /* Round trip check */
-#define IDN_UNDOIFERR 0x00001000 /* Option: undo if error occurs */
-
-#define IDN_ENCODE_QUERY 0x00002000 /* Encode query string */
-#define IDN_DECODE_QUERY 0x00004000 /* Decode query string */
-
-#define IDN_ENCODE_APP \
-(IDN_ENCODE_QUERY | IDN_ASCCHECK) /* Standard encode */
-#define IDN_DECODE_APP \
-(IDN_DECODE_QUERY | IDN_ASCCHECK) /* Standard decode */
-
-#define IDN_ENCODE_STORED \
-(IDN_ENCODE_QUERY | IDN_ASCCHECK | IDN_UNASCHECK) /* Encode query string */
-#define IDN_DECODE_STORED \
-(IDN_DECODE_QUERY | IDN_ASCCHECK | IDN_UNASCHECK) /* Decode query string */
-
-
-#define IDN_NAMEPREP \
-(IDN_MAP | IDN_NORMALIZE | IDN_PROHCHECK | IDN_BIDICHECK)
-
-/*
- * Enable or disable IDN conversion scheme.
- *
- * If on_off is 0, IDN conversion scheme is disabled. Otherwise, IDN
- * conversion is enabled even when IDN_DISABLE is defined.
- */
-IDN_EXPORT void
-idn_res_enable(int on_off);
-
-/*
- * Encode internationalized domain name.
- *
- * The encoding process consists of the following 7 steps.
- *
- * 1. Local encoding to UTF-8 conversion
- * Converts a domain name written with local encoding (e.g. ISO-
- * 8859-1) to UTF-8.
- * 2. Delimiter mapping,
- * Maps certain characters to period (U+002E, FULL STOP).
- * 3. Local mapping
- * Apply character mappings according with the TLD of the domain
- * name.
- * 4. NAMEPREP
- * Perform NAME preparation described in RFC3491.
- * This step consists of the following 4 steps:
- * 4.1. Mapping
- * 4.2. Normalization
- * 4.3. Prohibited character check
- * 4.4. Unassigned check
- * 5. ASCII range character check
- * Checks if the domain name contains non-LDH ASCII character (not
- * alpha-numeric or hypen), or it begins or end with hypen.
- * 6. UTF-8 to IDN encoding conversion.
- * Converts the domain name from UTF-8 to ACE (e.g. Punycode).
- * 7. Length check
- * Checks the length of each label.
- *
- * 'actions' specifies actions and options of the encoding procedure.
- * Its value is a bitwise-or of the following flags:
- *
- * IDN_LOCALCONV -- perform local encoding to UTF-8 conversion (step 1)
- * IDN_DELIMMAP -- perform delimiter mapping (step 2)
- * IDN_LOCALMAP -- perform local mapping (step 3)
- * IDN_MAP -- perform mapping (step 4.1)
- * IDN_NORMALIZE -- perform normalization (step 4.2)
- * IDN_PROHCHECK -- perform prohibited character check (step 4.3)
- * IDN_UNASCHECK -- perform unassigned codepoint check (step 4.4)
- * IDN_ASCCHECK -- perform ASCII range character check (step 5)
- * IDN_IDNCONV -- perform UTF-8 to IDN encoding conversion (step 6)
- * IDN_LENCHECK -- perform length check (step 7)
- *
- * Also the following flags are provided for convinience:
- *
- * IDN_ENCODE_QUERY -- On libidnkit, perform step 1..7, except for step
- * 4.4 and 5.
- * On libidnkitlite, perform step 2..7, except for
- * step 4.4 and 5.
- * IDN_ENCODE_STORED -- On libidnkit, perform step 1..7, except for step
- * 5.
- * On libidnkitlite, perform step 2..7, except for
- * step 5.
- * IDN_ENCODE_APP -- Same as IDN_ENCODE_QUERY.
- * IDN_NAMEPREP -- perform NAMEPREP (step 4) without unassigned
- * codepoint check (step 4.4).
- *
- * The following flag does not corresponding to a particular action,
- * but an option of conversion process:
- *
- * IDN_UNDOIFERR -- If any step fails, the original input name is
- * returned.
- *
- * Note that if no flags are specified, 'idn_encodename' does nothing
- * fancy, just copies the given name verbatim.
- *
- * Returns:
- * idn_success -- ok.
- * idn_invalid_action -- invalid action flag specified.
- * idn_invalid_encoding -- the given string has invalid/illegal
- * byte sequence.
- * idn_invalid_length -- invalid length of a label.
- * idn_prohibited -- prohibited/unassigned code point found.
- * idn_buffer_overflow -- 'tolen' is too small.
- * idn_nomemory -- malloc failed.
- *
- * Also, if this function is called without calling 'idn_nameinit',
- * the following error codes might be returned.
- * idn_nofile -- cannot open the configuration file.
- * idn_invalid_syntax -- syntax error found in the file.
- * idn_invalid_name -- there are invalid names (encoding,
- * normalization etc.).
- */
-IDN_EXPORT idn_result_t
-idn_res_encodename(idn_resconf_t ctx, idn_action_t actions, const char *from,
- char *to, size_t tolen);
-
-/*
- * Decode internationalized domain name.
- *
- * The decoding process consists of the following 5 steps.
- *
- * 1. delimiter mapping
- * Maps certain characters to period (U+002E, FULL STOP).
- * 2. NAMEPREP
- * Perform NAME preparation described in RFC3491.
- * This step consists of the following 4 steps:
- * 2.1. Mapping
- * 2.2. Normalization
- * 2.3. Prohibited character check
- * 2.4. Unassigned check
- * 3. IDN encoding to UTF-8 conversion.
- * Converts the domain name from ACE (e.g. Punycode) to UCS4.
- * 4. Perform round-trip check.
- * Encode the result of step 3, and then compare it with the result
- * of the step 2. If they are different, the check is failed.
- * 5. Convert UTF-8 to local encoding.
- * If a character in the domain name cannot be converted to local
- * encoding, the conversion is failed.
- *
- * 'actions' specifies actions of the decoding procedure.
- * Its value is a bitwise-or of the following flags:
- *
- * IDN_DELIMMAP -- perform delimiter mapping (step 1)
- * IDN_MAP -- perform mapping (step 2.1)
- * IDN_NORMALIZE -- perform normalization (step 2.2)
- * IDN_PROHCHECK -- perform prohibited character check (step 2.3)
- * IDN_UNASCHECK -- perform unassigned codepoint check (step 2.4)
- * IDN_IDNCONV -- perform IDN encoding to UTF-8 conversion (step 3)
- * IDN_RTCHECK -- perform round-trip check (step 4)
- * IDN_ASCCHECK -- perform ASCII range character check while
- * round-trip check (step 4.1)
- * IDN_LOCALCONV -- perform UTF-8 to local encoding conversion (step 5)
- *
- * Also the following flags are provided for the convenience:
- *
- * IDN_DECODE_QUERY -- On libidnkit, perform step 1..5, except for step
- * 2.4 and 4.1.
- * On libidnkitlite, perform step 1..3, except for
- * step 2.4 and 4.1.
- * IDN_DECODE_STORED -- On libidnkit, perform step 1..5, except for step
- * 4.1.
- * On libidnkitlite, perform step 1..3, except for
- * step 4.1.
- * IDN_DECODE_APP -- Same as IDN_DECODE_QUERY.
- * IDN_NAMEPREP -- perform NAMEPREP (step 2) without unassigned
- * codepoint check (step 2.4).
- *
- * If any step fails, the original input name is returned.
- * 'actions' specifies what actions to take when decoding, and is
- * a bitwise-or of the following flags:
- *
- * Note that if no flags are specified, 'idn_decodename' does nothing
- * but copying the given name verbatim.
- *
- * Returns:
- * idn_success -- ok.
- * idn_invalid_action -- invalid action flag specified.
- * idn_invalid_encoding -- the given string has invalid/illegal
- * byte sequence.
- * idn_buffer_overflow -- 'tolen' is too small.
- * idn_invalid_action -- length of a label is not 1..63 characters.
- * idn_nomemory -- malloc failed.
- *
- * Also, if this function is called without calling 'idn_nameinit',
- * the following error codes might be returned.
- * idn_nofile -- cannot open the configuration file.
- * idn_invalid_syntax -- syntax error found in the file.
- * idn_invalid_name -- there are invalid names (encoding,
- * normalization etc.).
- */
-IDN_EXPORT idn_result_t
-idn_res_decodename(idn_resconf_t ctx, idn_action_t actions, const char *from,
- char *to, size_t tolen);
-
-/*
- * Decode internationalized domain name with auxiliary encoding
- * support.
- *
- * This is another API for IDN string decode. The difference between
- * two is whether the encoding conversion from auxiliary encoding to
- * UTF-8 occurs prior to the actual decode process (read description
- * of idn_res_decodename() above) or not.
- *
- * If auxencoding is NULL, from is treated as UTF-8 encoded string.
- *
- * Other arguments serve exactly same role as those of
- * idn_res_decodename().
- */
-idn_result_t
-idn_res_decodename2(idn_resconf_t ctx, idn_action_t actions, const char *from,
- char *to, size_t tolen, const char *auxencoding);
-
-/*
- * Convert `actions' to a string, and then return the string.
- * This function is for internal use only.
- *
- * Note that this function returns a pointer to static buffer.
- */
-extern const char *
-idn__res_actionstostring(idn_action_t actions);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_RES_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/resconf.h b/contrib/idn/idnkit-1.0-src/include/idn/resconf.h
deleted file mode 100644
index 876b31b9..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/resconf.h
+++ /dev/null
@@ -1,323 +0,0 @@
-/* $Id: resconf.h,v 1.1 2003/06/04 00:25:41 marka Exp $ */
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_RESCONF_H
-#define IDN_RESCONF_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * IDN resolver configuration.
- */
-
-#include <idn/export.h>
-#include <idn/result.h>
-#include <idn/converter.h>
-#include <idn/normalizer.h>
-#include <idn/checker.h>
-#include <idn/mapper.h>
-#include <idn/mapselector.h>
-#include <idn/delimitermap.h>
-
-/*
- * Configuration type (opaque).
- */
-typedef struct idn_resconf *idn_resconf_t;
-
-/*
- * Initialize.
- *
- * Initialize this module and underlying ones. Must be called before
- * any other functions of this module.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- */
-IDN_EXPORT idn_result_t
-idn_resconf_initialize(void);
-
-/*
- * Create a configuration context.
- *
- * Create an empty context and store it in '*ctxp'.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- */
-IDN_EXPORT idn_result_t
-idn_resconf_create(idn_resconf_t *ctxp);
-
-/*
- * Destroy the configuration context.
- *
- * Destroy the configuration context created by 'idn_resconf_create',
- * and release memory for it.
- */
-IDN_EXPORT void
-idn_resconf_destroy(idn_resconf_t ctx);
-
-/*
- * Increment reference count of the context created by 'idn_resconf_create'.
- */
-IDN_EXPORT void
-idn_resconf_incrref(idn_resconf_t ctx);
-
-/*
- * Set default configurations to resconf context.
- *
- * "default configurations" means current nameprep and IDN encoding
- * which IDN standard document suggests.
- *
- * Warning: configurations set previously are removed.
- *
- * Returns:
- * idn_success -- ok.
- * idn_invalid_syntax -- syntax error found.
- * idn_invalid_name -- invalid encoding/nomalization name is
- * specified.
- * idn_nomemory -- malloc failed.
- */
-IDN_EXPORT idn_result_t
-idn_resconf_setdefaults(idn_resconf_t ctx);
-
-/*
- * Load configuration file.
- *
- * Parse a configuration file whose name is specified by 'file',
- * store the result in 'ctx'. If 'file' is NULL, the default file is
- * loaded.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nofile -- couldn't open specified file.
- * idn_invalid_syntax -- syntax error found.
- * idn_invalid_name -- invalid encoding/nomalization name is
- * specified.
- * idn_nomemory -- malloc failed.
- */
-IDN_EXPORT idn_result_t
-idn_resconf_loadfile(idn_resconf_t ctx, const char *file);
-
-/*
- * Get the pathname of the default configuration file.
- *
- * Returns:
- * the pathname of the default configuration file.
- */
-IDN_EXPORT char *
-idn_resconf_defaultfile(void);
-
-/*
- * Get an object of lower module that `ctx' holds.
- */
-IDN_EXPORT idn_delimitermap_t
-idn_resconf_getdelimitermap(idn_resconf_t ctx);
-
-IDN_EXPORT idn_converter_t
-idn_resconf_getidnconverter(idn_resconf_t ctx);
-
-IDN_EXPORT idn_converter_t
-idn_resconf_getauxidnconverter(idn_resconf_t ctx);
-
-IDN_EXPORT idn_converter_t
-idn_resconf_getlocalconverter(idn_resconf_t ctx);
-
-IDN_EXPORT idn_mapselector_t
-idn_resconf_getlocalmapselector(idn_resconf_t ctx);
-
-IDN_EXPORT idn_mapper_t
-idn_resconf_getmapper(idn_resconf_t ctx);
-
-IDN_EXPORT idn_normalizer_t
-idn_resconf_getnormalizer(idn_resconf_t ctx);
-
-IDN_EXPORT idn_checker_t
-idn_resconf_getprohibitchecker(idn_resconf_t ctx);
-
-IDN_EXPORT idn_checker_t
-idn_resconf_getunassignedchecker(idn_resconf_t ctx);
-
-IDN_EXPORT idn_checker_t
-idn_resconf_getbidichecker(idn_resconf_t ctx);
-
-/*
- * Set an object of lower module to `ctx'.
- */
-IDN_EXPORT void
-idn_resconf_setdelimitermap(idn_resconf_t ctx,
- idn_delimitermap_t delimiter_mapper);
-
-IDN_EXPORT void
-idn_resconf_setidnconverter(idn_resconf_t ctx,
- idn_converter_t idn_coverter);
-
-IDN_EXPORT void
-idn_resconf_setauxidnconverter(idn_resconf_t ctx,
- idn_converter_t aux_idn_coverter);
-
-IDN_EXPORT void
-idn_resconf_setlocalconverter(idn_resconf_t ctx,
- idn_converter_t local_converter);
-
-IDN_EXPORT void
-idn_resconf_setlocalmapselector(idn_resconf_t ctx,
- idn_mapselector_t map_selector);
-
-IDN_EXPORT void
-idn_resconf_setmapper(idn_resconf_t ctx, idn_mapper_t mapper);
-
-IDN_EXPORT void
-idn_resconf_setnormalizer(idn_resconf_t ctx, idn_normalizer_t normalizer);
-
-IDN_EXPORT void
-idn_resconf_setprohibitchecker(idn_resconf_t ctx,
- idn_checker_t prohibit_checker);
-
-IDN_EXPORT void
-idn_resconf_setunassignedchecker(idn_resconf_t ctx,
- idn_checker_t unassigned_checker);
-
-IDN_EXPORT void
-idn_resconf_setbidichecker(idn_resconf_t ctx,
- idn_checker_t bidi_checker);
-
-/*
- * Set name or add names to an object of lower module that `ctx' holds.
- */
-IDN_EXPORT idn_result_t
-idn_resconf_setidnconvertername(idn_resconf_t ctx, const char *name,
- int flags);
-
-IDN_EXPORT idn_result_t
-idn_resconf_setauxidnconvertername(idn_resconf_t ctx, const char *name,
- int flags);
-
-IDN_EXPORT idn_result_t
-idn_resconf_addalldelimitermapucs(idn_resconf_t ctx, unsigned long *v, int nv);
-
-IDN_EXPORT idn_result_t
-idn_resconf_setlocalconvertername(idn_resconf_t ctx, const char *name,
- int flags);
-
-IDN_EXPORT idn_result_t
-idn_resconf_addalllocalmapselectornames(idn_resconf_t ctx, const char *tld,
- const char **names, int nnames);
-
-IDN_EXPORT idn_result_t
-idn_resconf_addallmappernames(idn_resconf_t ctx, const char **names,
- int nnames);
-
-IDN_EXPORT idn_result_t
-idn_resconf_addallnormalizernames(idn_resconf_t ctx, const char **names,
- int nnames);
-
-IDN_EXPORT idn_result_t
-idn_resconf_addallprohibitcheckernames(idn_resconf_t ctx, const char **names,
- int nnames);
-
-IDN_EXPORT idn_result_t
-idn_resconf_addallunassignedcheckernames(idn_resconf_t ctx, const char **names,
- int nnames);
-
-IDN_EXPORT idn_result_t
-idn_resconf_addallbidicheckernames(idn_resconf_t ctx, const char **names,
- int nnames);
-
-IDN_EXPORT idn_result_t
-idn_resconf_setnameprepversion(idn_resconf_t ctx, const char *version);
-
-/*
- * These macros are provided for backward compatibility to mDNkit 2.1
- * and older.
- */
-IDN_EXPORT void
-idn_resconf_setalternateconverter(idn_resconf_t ctx,
- idn_converter_t alternate_converter);
-
-IDN_EXPORT idn_result_t
-idn_resconf_setalternateconvertername(idn_resconf_t ctx, const char *name,
- int flags);
-
-IDN_EXPORT idn_converter_t
-idn_resconf_getalternateconverter(idn_resconf_t ctx);
-
-
-/*
- * These macros are provided for backward compatibility to idnkit 1.x.
- */
-#define idn_resconf_localconverter(ctx) \
- idn_resconf_getlocalconverter(ctx)
-
-#define idn_resconf_idnconverter(ctx) \
- idn_resconf_getidnconverter(ctx)
-
-#define idn_resconf_alternateconverter(ctx) \
- idn_resconf_getalternateconverter(ctx)
-
-#define idn_resconf_normalizer(ctx) \
- idn_resconf_getnormalizer(ctx)
-
-#define idn_resconf_mapper(ctx) \
- idn_resconf_getmapper(ctx)
-
-#define idn_resconf_delimitermap(ctx) \
- idn_resconf_getdelimitermap(ctx)
-
-#define idn_resconf_localmapselector(ctx) \
- idn_resconf_getlocalmapselector(ctx)
-
-#define idn_resconf_prohibitchecker(ctx) \
- idn_resconf_getprohibitchecker(ctx)
-
-#define idn_resconf_unassignedchecker(ctx) \
- idn_resconf_getunassignedchecker(ctx)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_RESCONF_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/result.h b/contrib/idn/idnkit-1.0-src/include/idn/result.h
deleted file mode 100644
index 968f9a98..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/result.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* $Id: result.h,v 1.1 2003/06/04 00:25:42 marka Exp $ */
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_RESULT_H
-#define IDN_RESULT_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <idn/export.h>
-
-/*
- * libidnkit result code.
- */
-typedef enum {
- idn_success,
- idn_notfound,
- idn_invalid_encoding,
- idn_invalid_syntax,
- idn_invalid_name,
- idn_invalid_message,
- idn_invalid_action,
- idn_invalid_codepoint,
- idn_invalid_length,
- idn_buffer_overflow,
- idn_noentry,
- idn_nomemory,
- idn_nofile,
- idn_nomapping,
- idn_context_required,
- idn_prohibited,
- idn_failure /* !!This must be the last one!! */
-} idn_result_t;
-
-/*
- * Get the string description of a result code.
- */
-IDN_EXPORT char *
-idn_result_tostring(idn_result_t result);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_RESULT_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/strhash.h b/contrib/idn/idnkit-1.0-src/include/idn/strhash.h
deleted file mode 100644
index 88154c73..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/strhash.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/* $Id: strhash.h,v 1.1 2003/06/04 00:25:42 marka Exp $ */
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_STRHASH_H
-#define IDN_STRHASH_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * String-keyed hash table
- *
- * Just a hash table. Nothing special. Number of hash buckets
- * grows automatically.
- */
-
-#include <idn/result.h>
-
-/*
- * Hash table type, which is opaque.
- */
-typedef struct idn__strhash *idn__strhash_t;
-
-/*
- * Hash value free proc.
- */
-typedef void (*idn__strhash_freeproc_t)(void *value);
-
-/*
- * Create a hash table.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- */
-extern idn_result_t
-idn__strhash_create(idn__strhash_t *hashp);
-
-/*
- * Delete a hash table created by 'idn__strhash_create'.
- * If 'proc' is not NULL, it is called for each value in the
- * hash to release memory for them.
- */
-extern void
-idn__strhash_destroy(idn__strhash_t hash, idn__strhash_freeproc_t proc);
-
-/*
- * Register an item to the hash table. This function makes a
- * private copy of the key string.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- */
-extern idn_result_t
-idn__strhash_put(idn__strhash_t hash, const char *key, void *value);
-
-/*
- * Find an item with the specified key.
- *
- * Returns:
- * idn_success -- ok. found.
- * idn_noentry -- not found.
- */
-extern idn_result_t
-idn__strhash_get(idn__strhash_t hash, const char *key, void **valuep);
-
-/*
- * Check if an item with the specified key exists.
- *
- * Returns:
- * 1 -- yes.
- * 0 -- no.
- */
-extern int
-idn__strhash_exists(idn__strhash_t hash, const char *key);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_STRHASH_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/ucs4.h b/contrib/idn/idnkit-1.0-src/include/idn/ucs4.h
deleted file mode 100644
index d984be84..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/ucs4.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/* $Id: ucs4.h,v 1.1 2003/06/04 00:25:42 marka Exp $ */
-/*
- * Copyright (c) 2002 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_UCS4_H
-#define IDN_UCS4_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * UCS4 encoded string facility.
- */
-
-#include <idn/export.h>
-#include <idn/result.h>
-
-/*
- * UCS4 to UTF-16 conversion and vice versa.
- */
-IDN_EXPORT idn_result_t
-idn_ucs4_ucs4toutf16(const unsigned long *ucs4, unsigned short *utf16,
- size_t tolen);
-
-IDN_EXPORT idn_result_t
-idn_ucs4_utf16toucs4(const unsigned short *utf16, unsigned long *ucs4,
- size_t tolen);
-
-/*
- * UCS4 to UTF-8 conversion and vice versa.
- */
-IDN_EXPORT idn_result_t
-idn_ucs4_utf8toucs4(const char *utf8, unsigned long *ucs4, size_t tolen);
-
-IDN_EXPORT idn_result_t
-idn_ucs4_ucs4toutf8(const unsigned long *ucs4, char *utf8, size_t tolen);
-
-/*
- * UCS4 version of string operation functions.
- */
-IDN_EXPORT size_t
-idn_ucs4_strlen(const unsigned long *ucs4);
-
-IDN_EXPORT unsigned long *
-idn_ucs4_strcpy(unsigned long *to, const unsigned long *from);
-
-IDN_EXPORT unsigned long *
-idn_ucs4_strcat(unsigned long *to, const unsigned long *from);
-
-IDN_EXPORT int
-idn_ucs4_strcmp(const unsigned long *str1, const unsigned long *str2);
-
-IDN_EXPORT int
-idn_ucs4_strcasecmp(const unsigned long *str1, const unsigned long *str2);
-
-IDN_EXPORT unsigned long *
-idn_ucs4_strdup(const unsigned long *str);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_UCS4_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/ucsmap.h b/contrib/idn/idnkit-1.0-src/include/idn/ucsmap.h
deleted file mode 100644
index fe5f9f76..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/ucsmap.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/* $Id: ucsmap.h,v 1.1 2003/06/04 00:25:42 marka Exp $ */
-/*
- * Copyright (c) 2001 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_UCSMAP_H
-#define IDN_UCSMAP_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Perform UCS character mapping.
- * This module support one-to-N mapping (N may be zero, one or more).
- */
-
-#include <idn/export.h>
-#include <idn/result.h>
-
-/*
- * Mapper type (opaque).
- */
-typedef struct idn_ucsmap *idn_ucsmap_t;
-
-/*
- * Create an empty mapping. The reference count is set to 1.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- */
-IDN_EXPORT idn_result_t
-idn_ucsmap_create(idn_ucsmap_t *ctxp);
-
-/*
- * Decrement the reference count of the given set, and if it reaches zero,
- * release all the memory allocated for it.
- */
-IDN_EXPORT void
-idn_ucsmap_destroy(idn_ucsmap_t ctx);
-
-/*
- * Increment the reference count of the given set by one, so that
- * the map can be shared.
- */
-IDN_EXPORT void
-idn_ucsmap_incrref(idn_ucsmap_t ctx);
-
-/*
- * Add a mapping.
- * 'ucs' is the character to be mapped, 'map' points an array of mapped
- * characters of length 'maplen'. 'map' may be NULL if 'maplen' is zero,
- * meaning one-to-none mapping.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- * idn_failure -- already fixed by 'idn_ucsmap_fix',
- * or too large maplen.
- */
-IDN_EXPORT idn_result_t
-idn_ucsmap_add(idn_ucsmap_t ctx, unsigned long ucs, unsigned long *map,
- size_t maplen);
-
-/*
- * Perform internal arrangement of the map for lookup.
- * Once it is fixed, 'idn_ucsmap_add' cannot be permitted to the map.
- */
-IDN_EXPORT void
-idn_ucsmap_fix(idn_ucsmap_t ctx);
-
-/*
- * Find the mapping for the given character.
- * 'idn_ucsmap_fix' must be performed before calling this function.
- * Find the mapping for 'v' and store the result to 'to'. The length
- * of the mapped sequence is stored in '*maplenp'. 'tolen' specifies
- * the length allocated for 'to'.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomapping -- specified character has no mapping.
- * idn_failure -- not fixed by 'idn_ucsmap_fix' yet.
- */
-IDN_EXPORT idn_result_t
-idn_ucsmap_map(idn_ucsmap_t ctx, unsigned long v, unsigned long *to,
- size_t tolen, size_t *maplenp);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_UCSMAP_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/ucsset.h b/contrib/idn/idnkit-1.0-src/include/idn/ucsset.h
deleted file mode 100644
index ab8144d6..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/ucsset.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/* $Id: ucsset.h,v 1.1 2003/06/04 00:25:43 marka Exp $ */
-/*
- * Copyright (c) 2001 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_UCSSET_H
-#define IDN_UCSSET_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * A 'set' of UCS codepoints.
- */
-
-#include <idn/export.h>
-#include <idn/result.h>
-
-/*
- * Type representing a set (opaque).
- */
-typedef struct idn_ucsset *idn_ucsset_t;
-
-
-/*
- * Create an empty set. The reference count is set to 1.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- */
-IDN_EXPORT idn_result_t
-idn_ucsset_create(idn_ucsset_t *ctxp);
-
-/*
- * Decrement the reference count of the given set, and if it reaches zero,
- * release all the memory allocated for it.
- */
-IDN_EXPORT void
-idn_ucsset_destroy(idn_ucsset_t ctx);
-
-/*
- * Increments the reference count by one.
- */
-IDN_EXPORT void
-idn_ucsset_incrref(idn_ucsset_t ctx);
-
-/*
- * Add a UCS code point to the set.
- * The set must be in the building phase -- that is, before 'idn_ucsset_fix'
- * is called for the set.
- *
- * Returns:
- * idn_success -- ok.
- * idn_invalid_code -- code point out of range.
- * idn_nomemory -- malloc failed.
- * idn_failure -- already fixed by 'idn_ucsset_fix'.
- */
-IDN_EXPORT idn_result_t
-idn_ucsset_add(idn_ucsset_t ctx, unsigned long v);
-
-/*
- * Add a range of code points (from 'from' to 'to', inclusive) to the set.
- * 'from' must not be greater than 'to'.
- * This function is similar to 'idn_ucsset_add' except that it accepts
- * range of code points.
- *
- * Returns:
- * idn_success -- ok.
- * idn_invalid_code -- code point out of range, or the range
- * specification is invalid.
- * idn_nomemory -- malloc failed.
- * idn_failure -- already fixed by 'idn_ucsset_fix'.
- */
-IDN_EXPORT idn_result_t
-idn_ucsset_addrange(idn_ucsset_t ctx, unsigned long from, unsigned long to);
-
-/*
- * Perform internal arrangement of the set for lookup.
- * Before calling this function, a set is in 'building' phase, and code
- * points can be added freely by 'idn_ucsset_add' or 'idn_ucsset_addrange'.
- * But once it is fixed by this function, the set becomes immutable, and
- * it shifts into 'lookup' phase.
- */
-IDN_EXPORT void
-idn_ucsset_fix(idn_ucsset_t ctx);
-
-/*
- * Find if the given code point is in the set.
- * The set must be in the lookup phase -- in other words, 'idn_ucsset_fix'
- * must be called for the set before calling this function.
- * '*found' is set to 1 if the specified code point is in the set, 0 otherwise.
- *
- * Returns:
- * idn_success -- ok.
- * idn_invalid_code -- specified code point is out of range.
- * idn_failure -- not fixed by 'idn_ucsset_fix' yet.
- */
-IDN_EXPORT idn_result_t
-idn_ucsset_lookup(idn_ucsset_t ctx, unsigned long v, int *found);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_UCSSET_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/unicode.h b/contrib/idn/idnkit-1.0-src/include/idn/unicode.h
deleted file mode 100644
index 6a0f5d41..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/unicode.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/* $Id: unicode.h,v 1.1 2003/06/04 00:25:43 marka Exp $ */
-/*
- * Copyright (c) 2000,2001 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_UNICODE_H
-#define IDN_UNICODE_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Unicode attributes retriever.
- *
- * All the information this module provides is based on UnicodeData.txt,
- * CompositionExclusions-1.txt and SpecialCasing.txt, all of which can be
- * obtained from unicode.org.
- *
- * Unicode characters are represented as 'unsigned long'.
- */
-
-#include <idn/result.h>
-
-/*
- * A Handle for Unicode versions.
- */
-typedef struct idn__unicode_ops *idn__unicode_version_t;
-
-/*
- * Context information for case conversion.
- */
-typedef enum {
- idn__unicode_context_unknown,
- idn__unicode_context_final,
- idn__unicode_context_nonfinal
-} idn__unicode_context_t;
-
-/*
- * Create a handle for a specific Unicode version.
- * The version number (such as "3.0.1") is specified by 'version' parameter.
- * If it is NULL, the latest version is used.
- * The handle is stored in '*versionp', which is used various functions
- * in this and unormalize modules.
- *
- * Returns:
- * idn_success -- ok.
- * idn_notfound -- specified version not found.
- */
-extern idn_result_t
-idn__unicode_create(const char *version, idn__unicode_version_t *versionp);
-
-/*
- * Close a handle which was created by 'idn__unicode_create'.
- */
-extern void
-idn__unicode_destroy(idn__unicode_version_t version);
-
-/*
- * Get canonical class.
- *
- * For characters out of unicode range (i.e. above 0xffff), 0 will
- * be returned.
- */
-extern int
-idn__unicode_canonicalclass(idn__unicode_version_t version, unsigned long c);
-
-/*
- * Decompose a character.
- *
- * Decompose character given by 'c', and put the result into 'v',
- * which can hold 'vlen' characters. The number of decomposed characters
- * will be stored in '*decomp_lenp'.
- *
- * If 'compat' is true, compatibility decomposition is performed.
- * Otherwise canonical decomposition is done.
- *
- * Since decomposition is done recursively, no further decomposition
- * will be needed.
- *
- * Returns:
- * idn_success -- ok, decomposed.
- * idn_notfound -- no decomposition possible.
- * idn_buffer_overflow -- 'vlen' is too small.
- */
-extern idn_result_t
-idn__unicode_decompose(idn__unicode_version_t version,
- int compat, unsigned long *v, size_t vlen,
- unsigned long c, int *decomp_lenp);
-
-/*
- * Perform canonical composition.
- *
- * Do canonical composition to the character sequence 'c1' and 'c2', put the
- * result into '*compp'.
- *
- * Since Unicode Nomalization Froms requires only canonical composition,
- * compatibility composition is not supported.
- *
- * Returns:
- * idn_success -- ok, composed.
- * idn_notfound -- no composition possible.
- */
-extern idn_result_t
-idn__unicode_compose(idn__unicode_version_t version,
- unsigned long c1, unsigned long c2, unsigned long *compp);
-
-/*
- * Returns if there may be a canonical composition sequence which starts
- * with the given character.
- *
- * Returns:
- * 1 -- there may be a composition sequence
- * (maybe not).
- * 0 -- no, there is definitely no such sequences.
- */
-extern int
-idn__unicode_iscompositecandidate(idn__unicode_version_t version,
- unsigned long c);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_UNICODE_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/unormalize.h b/contrib/idn/idnkit-1.0-src/include/idn/unormalize.h
deleted file mode 100644
index d06d2f5c..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/unormalize.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* $Id: unormalize.h,v 1.1 2003/06/04 00:25:44 marka Exp $ */
-/*
- * Copyright (c) 2000,2001 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_UNORMALIZE_H
-#define IDN_UNORMALIZE_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Unicode Normalizations.
- *
- * Perform 4 normalizations defined by 'Unicode Normalization Forms'
- * (http://www.unicode.org/unicode/reports/tr15)
- *
- * All of the functions use UCS4 encoding for input/output.
- */
-
-#include <idn/result.h>
-#include <idn/unicode.h>
-
-/*
- * Perform Unicode Normalication Form C and KC.
- *
- * They take NUL-terminated UCS4 encoded string 'from', perform
- * the normalization specified by 'version', put the result
- * (also a NUL-terminated UCS4 encoded string) to 'to', which must be
- * able to hold at least 'tolen' bytes.
- *
- * Returns:
- * idn_success -- ok.
- * idn_nomemory -- malloc failed.
- * idn_buffer_overflow -- 'tolen' is too small.
- */
-extern idn_result_t
-idn__unormalize_formkc(idn__unicode_version_t version,
- const unsigned long *from, unsigned long *to,
- size_t tolen);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_UNORMALIZE_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/utf8.h b/contrib/idn/idnkit-1.0-src/include/idn/utf8.h
deleted file mode 100644
index b639c205..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/utf8.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/* $Id: utf8.h,v 1.1 2003/06/04 00:25:44 marka Exp $ */
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_UTF8_H
-#define IDN_UTF8_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * UTF-8 encoded string facility.
- */
-
-#include <idn/export.h>
-
-/*
- * Get the length of a character.
- *
- * Get the length (in bytes) of a character whose first byte is pointed
- * by 's'. Since this function only looks one first byte to determine the
- * length, it is possible some of the following bytes are invalid.
- */
-IDN_EXPORT int
-idn_utf8_mblen(const char *s);
-
-/*
- * Get one character.
- *
- * Get the first character of the string pointed by 's', and copy it
- * to 'buf', whose length is 'len'. Returns the number of bytes copied,
- * or zero if the encoding is invalid or len is too small.
- *
- * The area pointed by 'buf' must be large enough to store any UTF-8 encoded
- * character.
- *
- * Note that the copied string is not NUL-terminated.
- */
-IDN_EXPORT int
-idn_utf8_getmb(const char *s, size_t len, char *buf);
-
-/*
- * Get one character in UCS-4.
- *
- * Similar to 'idn_utf8_getmb', except that the result is not in UTF-8
- * encoding, but in UCS-4 format (plain 32bit integer value).
- */
-IDN_EXPORT int
-idn_utf8_getwc(const char *s, size_t len, unsigned long *vp);
-
-/*
- * Put one character.
- *
- * This function is an opposite of 'idn_utf8_getwc'. It takes a UCS-4
- * value 'v', convert it to UTF-8 encoded sequence, and store it to 's',
- * whose length is 'len'. It returns the number of bytes written, or
- * zero 'v' is out of range or 'len' is too small.
- */
-IDN_EXPORT int
-idn_utf8_putwc(char *s, size_t len, unsigned long v);
-
-/*
- * Check the validity of UTF-8 encoded character.
- *
- * Check if the character pointed by 's' is a valid UTF-8 encoded
- * character. Return the length of the character (in bytes) if it is valid,
- * 0 otherwise.
- */
-IDN_EXPORT int
-idn_utf8_isvalidchar(const char *s);
-
-/*
- * Check the validity of UTF-8 encoded string.
- *
- * Check if the NUL-terminated string 's' is valid as a UTF-8 encoded
- * string. Return 1 if it is valid, 0 otherwise.
- */
-IDN_EXPORT int
-idn_utf8_isvalidstring(const char *s);
-
-/*
- * Find first byte of a character.
- *
- * Find the first byte of a character 's' points to. 's' may point
- * the 2nd or later byte of a character. 'known_top' is a pointer to
- * a string which contains 's', and is known to be the first byte of
- * a character. If it couldn't find the first byte between 'known_top'
- * and 's', NULL will be returned.
- */
-IDN_EXPORT char *
-idn_utf8_findfirstbyte(const char *s, const char *known_top);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_UTF8_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/util.h b/contrib/idn/idnkit-1.0-src/include/idn/util.h
deleted file mode 100644
index ddafe174..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/util.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* $Id: util.h,v 1.1 2003/06/04 00:25:44 marka Exp $ */
-/*
- * Copyright (c) 2000,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_UTIL_H
-#define IDN_UTIL_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Utility functions.
- */
-
-/*
- * Check ACE prefix.
- *
- * These functions examine whether `str' begins with `prefix'.
- * They disregard the case difference of ASCII letters ([A-Za-z]).
- * They return 1 if `str' has the ACE prefix, 0 otherwise.
- */
-extern int
-idn__util_asciihaveaceprefix(const char *str, const char *prefix);
-extern int
-idn__util_ucs4haveaceprefix(const unsigned long *str, const char *prefix);
-
-/*
- * Check if all codepoints in the UCS4 string `str' are in the ASCII
- * range (i.e. U+0000...U+007F).
- *
- * The function return 1 if it is, 0 otherwise.
- */
-extern int
-idn__util_ucs4isasciirange(const unsigned long *str);
-
-/*
- * Get registry information from the system. (Windows only)
- */
-#ifdef WIN32
-/*
- * registry top type.
- */
-typedef enum {
- idn__util_hkey_currentuser,
- idn__util_hkey_localmachine
-} idn__util_hkey_t;
-
-extern int
-idn__util_getregistrystring(idn__util_hkey_t topkey, const char *name,
- char *str, size_t length);
-#endif /* WIN32 */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_UTIL_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/idn/version.h b/contrib/idn/idnkit-1.0-src/include/idn/version.h
deleted file mode 100644
index 88d876d1..00000000
--- a/contrib/idn/idnkit-1.0-src/include/idn/version.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* $Id: version.h,v 1.1 2003/06/04 00:25:44 marka Exp $ */
-/*
- * Copyright (c) 2001 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_VERSION_H
-#define IDN_VERSION_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <idn/export.h>
-
-/*
- * Version number of this package.
- */
-#define IDNKIT_VERSION "1.0"
-#define IDNKIT_MAJOR_VERSION 1
-#define IDNKIT_MINOR_VERSION 0
-
-/*
- * Get the version of the library (libidnkit).
- */
-IDN_EXPORT const char *
-idn_version_getstring(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_VERSION_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/mdn/Makefile.in b/contrib/idn/idnkit-1.0-src/include/mdn/Makefile.in
deleted file mode 100644
index 48344c99..00000000
--- a/contrib/idn/idnkit-1.0-src/include/mdn/Makefile.in
+++ /dev/null
@@ -1,83 +0,0 @@
-# $Id: Makefile.in,v 1.1 2003/06/04 00:25:45 marka Exp $
-# Copyright (c) 2000 Japan Network Information Center. All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-includedir = @includedir@
-mdnincludedir = $(includedir)/mdn
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-MKINSTALLDIRS = @top_srcdir@/mkinstalldirs
-SHELL = @SHELL@
-
-HDRS = \
- api.h \
- log.h \
- res.h \
- resconf.h \
- result.h \
- utf8.h \
- version.h
-
-all:
-
-@COMPAT_TRUE@install: all install-compat
-@COMPAT_FALSE@install:
-
-install-compat:
- $(MKINSTALLDIRS) $(DESTDIR)$(mdnincludedir)
- for hdr in $(HDRS); do \
- $(INSTALL_DATA) $(srcdir)/$$hdr $(DESTDIR)$(mdnincludedir)/$$hdr; \
- done
-
-clean:
- rm -f *~
-
-distclean:
- rm -f Makefile
-
-test check:
diff --git a/contrib/idn/idnkit-1.0-src/include/mdn/api.h b/contrib/idn/idnkit-1.0-src/include/mdn/api.h
deleted file mode 100644
index 01c425cb..00000000
--- a/contrib/idn/idnkit-1.0-src/include/mdn/api.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* $Id: api.h,v 1.1 2003/06/04 00:25:45 marka Exp $ */
-/*
- * Copyright (c) 2001,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef MDN_API_H
-#define MDN_API_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <mdn/result.h>
-#include <mdn/res.h>
-#include <idn/api.h>
-
-#define mdn_enable idn_enable
-
-extern idn_result_t
-mdn_nameinit(void);
-
-extern idn_result_t
-mdn_encodename(int actions, const char *from, char *to, size_t tolen);
-
-extern idn_result_t
-mdn_decodename(int actions, const char *from, char *to, size_t tolen);
-
-#define mdn_localtoutf8(from, to, tolen) \
- mdn_encodename(IDN_LOCALCONV, from, to, len)
-#define mdn_delimitermap(from, to, tolen) \
- mdn_encodename(IDN_DELIMMAP, from, to, len)
-#define mdn_localmap(from, to, tolen) \
- mdn_encodename(IDN_LOCALMAP, from, to, len)
-#define mdn_nameprep(from, to, tolen) \
- mdn_encodename(IDN_NAMEPREP, from, to, len)
-#define mdn_utf8toidn(from, to, tolen) \
- mdn_encodename(IDN_IDNCONV, from, to, len)
-#define mdn_idntoutf8(from, to, tolen) \
- mdn_decodename(IDN_IDNCONV, from, to, tolen)
-#define mdn_utf8tolocal(from, to, tolen) \
- mdn_decodename(IDN_LOCALCONV, from, to, tolen)
-
-#define mdn_localtoidn(from, to, tolen) \
- mdn_encodename(IDN_ENCODE_APP, from, to, tolen)
-#define mdn_idntolocal(from, to, tolen) \
- mdn_decodename(IDN_DECODE_APP, from, to, tolen)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* MDN_API_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/mdn/localencoding.h b/contrib/idn/idnkit-1.0-src/include/mdn/localencoding.h
deleted file mode 100644
index 79cb9980..00000000
--- a/contrib/idn/idnkit-1.0-src/include/mdn/localencoding.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* $Id: localencoding.h,v 1.1 2003/06/04 00:25:45 marka Exp $ */
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef MDN_LOCALENCODING_H
-#define MDN_LOCALENCODING_H 1
-
-#define MDN_LOCALCS_ENV "MDN_LOCAL_CODESET"
-
-#endif /* MDN_LOCALENCODING_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/mdn/log.h b/contrib/idn/idnkit-1.0-src/include/mdn/log.h
deleted file mode 100644
index d17bd521..00000000
--- a/contrib/idn/idnkit-1.0-src/include/mdn/log.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* $Id: log.h,v 1.1 2003/06/04 00:25:45 marka Exp $ */
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef MDN_LOG_H
-#define MDN_LOG_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <idn/log.h>
-
-#define mdn_log_proc_t \
- idn_log_proc_t
-
-#define mdn_log_level_fatal \
- idn_log_level_fatal
-#define mdn_log_level_error \
- idn_log_level_error
-#define mdn_log_level_warning \
- idn_log_level_warning
-#define mdn_log_level_info \
- idn_log_level_info
-#define mdn_log_level_trace \
- idn_log_level_trace
-#define mdn_log_level_dump \
- idn_log_level_dump
-
-#define mdn_log_fatal \
- idn_log_fatal
-#define mdn_log_error \
- idn_log_error
-#define mdn_log_warning \
- idn_log_warning
-#define mdn_log_info \
- idn_log_info
-#define mdn_log_trace \
- idn_log_trace
-#define mdn_log_dump \
- idn_log_dump
-#define mdn_log_setlevel \
- idn_log_setlevel
-#define mdn_log_getlevel \
- idn_log_getlevel
-#define mdn_log_setproc \
- idn_log_setproc
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* MDN_LOG_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/mdn/res.h b/contrib/idn/idnkit-1.0-src/include/mdn/res.h
deleted file mode 100644
index 7b60838d..00000000
--- a/contrib/idn/idnkit-1.0-src/include/mdn/res.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/* $Id: res.h,v 1.1 2003/06/04 00:25:45 marka Exp $ */
-/*
- * Copyright (c) 2001,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef MDN_RES_H
-#define MDN_RES_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <mdn/resconf.h>
-#include <mdn/result.h>
-#include <idn/res.h>
-
-#define MDN_LOCALCONV \
- IDN_LOCALCONV
-#define MDN_DELIMMAP \
- IDN_DELIMMAP
-#define MDN_LOCALMAP \
- IDN_LOCALMAP
-#define MDN_MAP \
- IDN_MAP
-#define MDN_NORMALIZE \
- IDN_NORMALIZE
-#define MDN_PROHCHECK \
- IDN_PROHCHECK
-#define MDN_UNASCHECK \
- IDN_UNASCHECK
-#define MDN_ASCCHECK \
- IDN_ASCCHECK
-#define MDN_IDNCONV \
- IDN_IDNCONV
-#define MDN_LENCHECK \
- IDN_LENCHECK
-#define MDN_RTCHECK \
- IDN_RTCHECK
-#define MDN_UNDOIFERR \
- IDN_UNDOIFERR
-#define MDN_ENCODE_APP \
- IDN_ENCODE_APP
-#define MDN_DECODE_APP \
- IDN_DECODE_APP
-#define MDN_NAMEPREP \
- IDN_NAMEPREP
-
-#define mdn_res_enable \
- idn_res_enable
-#define mdn_res_encodename \
- idn_res_encodename
-#define mdn_res_decodename \
- idn_res_decodename
-#define mdn_res_actiontostring \
- idn_res_actiontostring
-
-#define mdn_res_localtoutf8 \
- idn_res_localtoutf8
-#define mdn_res_delimitermap \
- idn_res_delimitermap
-#define mdn_res_localmap \
- idn_res_localmap
-#define mdn_res_nameprep \
- idn_res_nameprep
-#define mdn_res_utf8toidn \
- idn_res_utf8toidn
-#define mdn_res_idntoutf8 \
- idn_res_idntoutf8
-#define mdn_res_utf8tolocal \
- idn_res_utf8tolocal
-#define mdn_res_nameprepcheck \
- idn_res_nameprepcheck
-#define mdn_res_localtoidn \
- idn_res_localtoidn
-#define mdn_res_idntolocal \
- idn_res_idntolocal
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* MDN_RES_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/mdn/resconf.h b/contrib/idn/idnkit-1.0-src/include/mdn/resconf.h
deleted file mode 100644
index bd408105..00000000
--- a/contrib/idn/idnkit-1.0-src/include/mdn/resconf.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/* $Id: resconf.h,v 1.1 2003/06/04 00:25:46 marka Exp $ */
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef MDN_RESCONF_H
-#define MDN_RESCONF_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <mdn/result.h>
-#include <idn/resconf.h>
-
-#define mdn_resconf_t \
- idn_resconf_t
-
-#define mdn_resconf_initialize \
- idn_resconf_initialize
-#define mdn_resconf_create \
- idn_resconf_create
-#define mdn_resconf_destroy \
- idn_resconf_destroy
-
-#define mdn_resconf_incrref \
- idn_resconf_incrref
-#define mdn_resconf_loadfile \
- idn_resconf_loadfile
-#define mdn_resconf_defaultfile \
- idn_resconf_defaultfile
-#define mdn_resconf_getdelimitermap \
- idn_resconf_getdelimitermap
-#define mdn_resconf_getidnconverter \
- idn_resconf_getidnconverter
-#define mdn_resconf_getlocalconverter \
- idn_resconf_getlocalconverter
-#define mdn_resconf_getlocalmapselector \
- idn_resconf_getlocalmapselector
-#define mdn_resconf_getmapper \
- idn_resconf_getmapper
-#define mdn_resconf_getnormalizer \
- idn_resconf_getnormalizer
-#define mdn_resconf_getprohibitchecker \
- idn_resconf_getprohibitchecker
-#define mdn_resconf_getunassignedchecker \
- idn_resconf_getunassignedchecker
-#define mdn_resconf_setdelimitermap \
- idn_resconf_setdelimitermap
-#define mdn_resconf_setidnconverter \
- idn_resconf_setidnconverter
-#define mdn_resconf_setlocalconverter \
- idn_resconf_setlocalconverter
-#define mdn_resconf_setlocalmapselector \
- idn_resconf_setlocalmapselector
-#define mdn_resconf_setmapper \
- idn_resconf_setmapper
-#define mdn_resconf_setnormalizer \
- idn_resconf_setnormalizer
-#define mdn_resconf_setprohibitchecker \
- idn_resconf_setprohibitchecker
-#define mdn_resconf_setunassignedchecker \
- idn_resconf_setunassignedchecker
-#define mdn_resconf_setidnconvertername \
- idn_resconf_setidnconvertername
-#define mdn_resconf_addalldelimitermapucs \
- idn_resconf_addalldelimitermapucs
-#define mdn_resconf_setlocalconvertername \
- idn_resconf_setlocalconvertername
-#define mdn_resconf_addalllocalmapselectornames \
- idn_resconf_addalllocalmapselectornames
-#define mdn_resconf_addallmappernames \
- idn_resconf_addallmappernames
-#define mdn_resconf_addallnormalizernames \
- idn_resconf_addallnormalizernames
-#define mdn_resconf_addallprohibitcheckernames \
- idn_resconf_addallprohibitcheckernames
-#define mdn_resconf_addallunassignedcheckernames \
- idn_resconf_addallunassignedcheckernames
-#define mdn_resconf_setnameprepversion \
- idn_resconf_setnameprepversion
-#define mdn_resconf_setalternateconverter \
- idn_resconf_setalternateconverter
-#define mdn_resconf_setalternateconvertername \
- idn_resconf_setalternateconvertername
-#define mdn_resconf_getalternateconverter \
- idn_resconf_getalternateconverter
-
-#define mdn_resconf_localconverter \
- idn_resconf_localconverter
-#define mdn_resconf_idnconverter \
- idn_resconf_idnconverter
-#define mdn_resconf_alternateconverter \
- idn_resconf_alternateconverter
-#define mdn_resconf_normalizer \
- idn_resconf_normalizer
-#define mdn_resconf_mapper \
- idn_resconf_mapper
-#define mdn_resconf_delimitermap \
- idn_resconf_delimitermap
-#define mdn_resconf_localmapselector \
- idn_resconf_localmapselector
-#define mdn_resconf_prohibitchecker \
- idn_resconf_prohibitchecker
-#define mdn_resconf_unassignedchecker \
- idn_resconf_unassignedchecker
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* MDN_RESCONF_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/mdn/result.h b/contrib/idn/idnkit-1.0-src/include/mdn/result.h
deleted file mode 100644
index 54d0d5e6..00000000
--- a/contrib/idn/idnkit-1.0-src/include/mdn/result.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/* $Id: result.h,v 1.1 2003/06/04 00:25:46 marka Exp $ */
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef MDN_RESULT_H
-#define MDN_RESULT_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <idn/result.h>
-
-#define mdn_result_t \
- idn_result_t
-
-#define mdn_success \
- idn_success
-#define mdn_notfound \
- idn_notfound
-#define mdn_invalid_encoding \
- idn_invalid_encoding
-#define mdn_invalid_syntax \
- idn_invalid_syntax
-#define mdn_invalid_name \
- idn_invalid_name
-#define mdn_invalid_message \
- idn_invalid_message
-#define mdn_invalid_action \
- idn_invalid_action
-#define mdn_invalid_codepoint \
- idn_invalid_codepoint
-#define mdn_invalid_length \
- idn_invalid_length
-#define mdn_buffer_overflow \
- idn_buffer_overflow
-#define mdn_noentry \
- idn_noentry
-#define mdn_nomemory \
- idn_nomemory
-#define mdn_nofile \
- idn_nofile
-#define mdn_nomapping \
- idn_nomapping
-#define mdn_context_required \
- idn_context_required
-#define mdn_prohibited \
- idn_prohibited
-#define mdn_failure \
- idn_failure
-#define mdn_result_tostring \
- idn_result_tostring
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* MDN_RESULT_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/mdn/utf8.h b/contrib/idn/idnkit-1.0-src/include/mdn/utf8.h
deleted file mode 100644
index 2c2af879..00000000
--- a/contrib/idn/idnkit-1.0-src/include/mdn/utf8.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* $Id: utf8.h,v 1.1 2003/06/04 00:25:46 marka Exp $ */
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef MDN_UTF8_H
-#define MDN_UTF8_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define mdn_utf8_mblen \
- idn_utf8_mblen
-#define mdn_utf8_getmb \
- idn_utf8_getmb
-#define mdn_utf8_getwc \
- idn_utf8_getwc
-#define mdn_utf8_putwc \
- idn_utf8_putwc
-#define mdn_utf8_isvalidchar \
- idn_utf8_isvalidchar
-#define mdn_utf8_isvalidstring \
- idn_utf8_isvalidstring
-#define mdn_utf8_findfirstbyte \
- idn_utf8_findfirstbyte
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* MDN_UTF8_H */
diff --git a/contrib/idn/idnkit-1.0-src/include/mdn/version.h b/contrib/idn/idnkit-1.0-src/include/mdn/version.h
deleted file mode 100644
index 0e525a22..00000000
--- a/contrib/idn/idnkit-1.0-src/include/mdn/version.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* $Id: version.h,v 1.1 2003/06/04 00:25:46 marka Exp $ */
-/*
- * Copyright (c) 2001 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef MDN_VERSION_H
-#define MDN_VERSION_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <idn/version.h>
-
-/*
- * Version number of this package.
- */
-#define MDNKIT_VERSION "idnkit " IDNKIT_VERSION
-#define MDNKIT_MAJOR_VERSION (IDNKIT_MAJOR_VERSION + 4)
-#define MDNKIT_MINOR_VERSION IDNKIT_MINOR_VERSION
-
-#define mdn_version_getstring idn_version_getstring
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* MDN_VERSION_H */
diff --git a/contrib/idn/idnkit-1.0-src/install-sh b/contrib/idn/idnkit-1.0-src/install-sh
deleted file mode 100755
index ebc66913..00000000
--- a/contrib/idn/idnkit-1.0-src/install-sh
+++ /dev/null
@@ -1,250 +0,0 @@
-#! /bin/sh
-#
-# install - install a program, script, or datafile
-# This comes from X11R5 (mit/util/scripts/install.sh).
-#
-# Copyright 1991 by the Massachusetts Institute of Technology
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of M.I.T. not be used in advertising or
-# publicity pertaining to distribution of the software without specific,
-# written prior permission. M.I.T. makes no representations about the
-# suitability of this software for any purpose. It is provided "as is"
-# without express or implied warranty.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch. It can only install one file at a time, a restriction
-# shared with many OS's install programs.
-
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-transformbasename=""
-transform_arg=""
-instcmd="$mvprog"
-chmodcmd="$chmodprog 0755"
-chowncmd=""
-chgrpcmd=""
-stripcmd=""
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=""
-dst=""
-dir_arg=""
-
-while [ x"$1" != x ]; do
- case $1 in
- -c) instcmd="$cpprog"
- shift
- continue;;
-
- -d) dir_arg=true
- shift
- continue;;
-
- -m) chmodcmd="$chmodprog $2"
- shift
- shift
- continue;;
-
- -o) chowncmd="$chownprog $2"
- shift
- shift
- continue;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift
- shift
- continue;;
-
- -s) stripcmd="$stripprog"
- shift
- continue;;
-
- -t=*) transformarg=`echo $1 | sed 's/-t=//'`
- shift
- continue;;
-
- -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
- shift
- continue;;
-
- *) if [ x"$src" = x ]
- then
- src=$1
- else
- # this colon is to work around a 386BSD /bin/sh bug
- :
- dst=$1
- fi
- shift
- continue;;
- esac
-done
-
-if [ x"$src" = x ]
-then
- echo "install: no input file specified"
- exit 1
-else
- true
-fi
-
-if [ x"$dir_arg" != x ]; then
- dst=$src
- src=""
-
- if [ -d $dst ]; then
- instcmd=:
- else
- instcmd=mkdir
- fi
-else
-
-# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
-# might cause directories to be created, which would be especially bad
-# if $src (and thus $dsttmp) contains '*'.
-
- if [ -f $src -o -d $src ]
- then
- true
- else
- echo "install: $src does not exist"
- exit 1
- fi
-
- if [ x"$dst" = x ]
- then
- echo "install: no destination specified"
- exit 1
- else
- true
- fi
-
-# If destination is a directory, append the input filename; if your system
-# does not like double slashes in filenames, you may need to add some logic
-
- if [ -d $dst ]
- then
- dst="$dst"/`basename $src`
- else
- true
- fi
-fi
-
-## this sed command emulates the dirname command
-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
-
-# Make sure that the destination directory exists.
-# this part is taken from Noah Friedman's mkinstalldirs script
-
-# Skip lots of stat calls in the usual case.
-if [ ! -d "$dstdir" ]; then
-defaultIFS='
-'
-IFS="${IFS-${defaultIFS}}"
-
-oIFS="${IFS}"
-# Some sh's can't handle IFS=/ for some reason.
-IFS='%'
-set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
-IFS="${oIFS}"
-
-pathcomp=''
-
-while [ $# -ne 0 ] ; do
- pathcomp="${pathcomp}${1}"
- shift
-
- if [ ! -d "${pathcomp}" ] ;
- then
- $mkdirprog "${pathcomp}"
- else
- true
- fi
-
- pathcomp="${pathcomp}/"
-done
-fi
-
-if [ x"$dir_arg" != x ]
-then
- $doit $instcmd $dst &&
-
- if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
- if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
- if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
- if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
-else
-
-# If we're going to rename the final executable, determine the name now.
-
- if [ x"$transformarg" = x ]
- then
- dstfile=`basename $dst`
- else
- dstfile=`basename $dst $transformbasename |
- sed $transformarg`$transformbasename
- fi
-
-# don't allow the sed command to completely eliminate the filename
-
- if [ x"$dstfile" = x ]
- then
- dstfile=`basename $dst`
- else
- true
- fi
-
-# Make a temp file name in the proper directory.
-
- dsttmp=$dstdir/#inst.$$#
-
-# Move or copy the file name to the temp name
-
- $doit $instcmd $src $dsttmp &&
-
- trap "rm -f ${dsttmp}" 0 &&
-
-# and set any options; do chmod last to preserve setuid bits
-
-# If any of these fail, we abort the whole thing. If we want to
-# ignore errors from any of these, just make sure not to ignore
-# errors from the above "$doit $instcmd $src $dsttmp" command.
-
- if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
- if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
- if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
- if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
-
-# Now rename the file to the real destination.
-
- $doit $rmcmd -f $dstdir/$dstfile &&
- $doit $mvcmd $dsttmp $dstdir/$dstfile
-
-fi &&
-
-
-exit 0
diff --git a/contrib/idn/idnkit-1.0-src/lib/Makefile.in b/contrib/idn/idnkit-1.0-src/lib/Makefile.in
deleted file mode 100644
index e7687306..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/Makefile.in
+++ /dev/null
@@ -1,309 +0,0 @@
-# $Id: Makefile.in,v 1.2 2004/07/20 07:13:39 marka Exp $
-# Copyright (c) 2000, 2002 Japan Network Information Center.
-# All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-build = @build@
-
-LIB_CURRENT = 1
-LIB_REVISION = 2
-LIB_AGE = 0
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .to
-
-top_builddir = ..
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-libdir = @libdir@
-sysconfdir = @sysconfdir@
-datadir = @datadir@
-mapdir = $(datadir)/idnkit
-utf8_name = @UTF8_NAME@
-
-SUBDIRS = tests
-
-SHELL = @SHELL@
-CC = @CC@
-RANLIB = @RANLIB@
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-MKINSTALLDIRS = @top_srcdir@/mkinstalldirs
-LIBTOOL = @LIBTOOL@
-
-ICONVINC = @ICONVINC@
-ICONVLIB = @ICONVLIB@
-
-INCS = -I$(srcdir)/../include -I../include $(ICONVINC)
-DEFS = -DIDN_RESCONF_DIR="\"$(sysconfdir)\""
-
-CFLAGS = $(OPTS) $(INCS) $(DEFS) @CPPFLAGS@ @CFLAGS@
-LDFLAGS = @LDFLAGS@
-
-SRCS = \
- aliaslist.c \
- api.c \
- checker.c \
- converter.c \
- debug.c \
- delimitermap.c \
- filechecker.c \
- filemapper.c \
- localencoding.c \
- log.c \
- mapper.c \
- mapselector.c \
- nameprep.c \
- nameprep_template.c \
- nameprepdata.c \
- normalizer.c \
- punycode.c \
- race.c \
- res.c \
- resconf.c \
- result.c \
- strhash.c \
- ucs4.c \
- ucsmap.c \
- ucsset.c \
- unicode.c \
- unicode_template.c \
- unicodedata_320.c \
- unormalize.c \
- util.c \
- utf8.c \
- version.c
-
-OBJS = \
- aliaslist.lo \
- api.lo \
- checker.lo \
- converter.lo \
- debug.lo \
- delimitermap.lo \
- filechecker.lo \
- filemapper.lo \
- localencoding.lo \
- log.lo \
- mapper.lo \
- mapselector.lo \
- nameprep.lo \
- normalizer.lo \
- punycode.lo \
- race.lo \
- res.lo \
- resconf.lo \
- result.lo \
- strhash.lo \
- ucs4.lo \
- ucsmap.lo \
- ucsset.lo \
- unicode.lo \
- unormalize.lo \
- utf8.lo \
- util.lo \
- version.lo
-
-LIB = libidnkit
-TESTLIB = libidntest
-
-LITELIBCFLAGS = $(CFLAGS) -DWITHOUT_ICONV
-LITELIB_OBJS = \
- apilite.lo \
- converterlite.lo \
- reslite.lo \
- resconflite.lo \
- aliaslist.lo \
- checker.lo \
- debug.lo \
- delimitermap.lo \
- filechecker.lo \
- filemapper.lo \
- log.lo \
- mapper.lo \
- mapselector.lo \
- nameprep.lo \
- normalizer.lo \
- punycode.lo \
- race.lo \
- result.lo \
- strhash.lo \
- ucsmap.lo \
- ucsset.lo \
- unicode.lo \
- unormalize.lo \
- ucs4.lo \
- utf8.lo \
- util.lo \
- version.lo
-
-LITELIB = libidnkitlite
-TESTLITELIB = libidntestlite
-
-SAMPLES = idn.conf.sample idnalias.conf.sample
-
-.c.lo:
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c $<
-
-.c.to:
- $(CC) -o $@ -DTEST $(CFLAGS) $(LDFLAGS) -c $<
-
-all: all-localdir all-subdirs
-@LITEONLY_TRUE@all-localdir: $(LITELIB).la $(SAMPLES)
-@LITEONLY_FALSE@all-localdir: $(LIB).la $(LITELIB).la $(SAMPLES)
-
-$(LIB).la: $(OBJS)
- $(LIBTOOL) --mode=link $(LD) $(LDFLAGS) -o $@ \
- -version-info $(LIB_CURRENT):$(LIB_REVISION):$(LIB_AGE) \
- -rpath $(libdir) $(OBJS)
-
-$(TESTLIB).la: $(OBJS)
- $(LIBTOOL) --mode=link $(LD) $(LDFLAGS) -o $@ \
- -version-info $(LIB_CURRENT):$(LIB_REVISION):$(LIB_AGE) \
- -rpath $(libdir) $(OBJS)
-
-apilite.lo: api.c
- $(LIBTOOL) --mode=compile $(CC) $(LITELIBCFLAGS) -o $@ \
- -c $(srcdir)/api.c
-converterlite.lo: converter.c
- $(LIBTOOL) --mode=compile $(CC) $(LITELIBCFLAGS) -o $@ \
- -c $(srcdir)/converter.c
-reslite.lo: res.c
- $(LIBTOOL) --mode=compile $(CC) $(LITELIBCFLAGS) -o $@ \
- -c $(srcdir)/res.c
-resconflite.lo: resconf.c
- $(LIBTOOL) --mode=compile $(CC) $(LITELIBCFLAGS) -o $@ \
- -c $(srcdir)/resconf.c
-
-$(LITELIB).la: $(LITELIB_OBJS)
- $(LIBTOOL) --mode=link $(LD) $(LDFLAGS) -o $@ \
- -version-info $(LIB_CURRENT):$(LIB_REVISION):$(LIB_AGE) \
- -rpath $(libdir) $(LITELIB_OBJS)
-
-$(TESTLITELIB).la: $(LITELIB_OBJS)
- $(LIBTOOL) --mode=link $(LD) $(LDFLAGS) -o $@ \
- -version-info $(LIB_CURRENT):$(LIB_REVISION):$(LIB_AGE) \
- -rpath $(libdir) $(LITELIB_OBJS)
-
-idn.conf.sample: idn.conf.sample.in
- sed -e 's%[@]mapdir[@]%$(mapdir)%' \
- < $(srcdir)/idn.conf.sample.in > $@
-
-idnalias.conf.sample: Makefile
- $(SHELL) $(srcdir)/aliaslist.sh $(build) $(utf8_name) > $@
-
-install: install-localdir install-subdirs
-@LITEONLY_TRUE@install-localdir: all install-common
-@LITEONLY_FALSE@install-localdir: all install-common install-nolite
-
-install-common:
- $(MKINSTALLDIRS) $(DESTDIR)$(libdir)
- $(LIBTOOL) $(INSTALL_DATA) $(LITELIB).la \
- $(DESTDIR)$(libdir)/$(LITELIB).la
- -[ -f $(DESTDIR)$(libdir)/$(LITELIB).a ] \
- && $(RANLIB) $(DESTDIR)$(libdir)/$(LITELIB).a
- $(MKINSTALLDIRS) $(DESTDIR)$(sysconfdir)
- $(INSTALL_DATA) idn.conf.sample \
- $(DESTDIR)$(sysconfdir)/idn.conf.sample
- $(INSTALL_DATA) idnalias.conf.sample \
- $(DESTDIR)$(sysconfdir)/idnalias.conf.sample
- @if [ ! -f $(DESTDIR)$(sysconfdir)/idn.conf ]; then \
- echo "** installing default idn.conf"; \
- $(INSTALL_DATA) idn.conf.sample $(DESTDIR)$(sysconfdir)/idn.conf; \
- fi
- @if [ ! -f $(DESTDIR)$(sysconfdir)/idnalias.conf ]; then \
- echo "** installing default idnalias.conf"; \
- $(INSTALL_DATA) idnalias.conf.sample \
- $(DESTDIR)$(sysconfdir)/idnalias.conf; \
- fi
-
-install-nolite:
- $(MKINSTALLDIRS) $(DESTDIR)$(libdir)
- $(LIBTOOL) $(INSTALL_DATA) $(LIB).la \
- $(DESTDIR)$(libdir)/$(LIB).la
- -[ -f $(DESTDIR)$(libdir)/$(LIB).a ] \
- && $(RANLIB) $(DESTDIR)$(libdir)/$(LIB).a
-
-install-config:
- @if [ -f $(DESTDIR)$(sysconfdir)/idn.conf ]; then \
- echo "** backing up old idn.conf as idn.conf.old"; \
- mv -f $(DESTDIR)$(sysconfdir)/idn.conf \
- $(DESTDIR)$(sysconfdir)/idn.conf.old; \
- fi
- @echo "** installing default idn.conf forcibly"
- $(INSTALL_DATA) idn.conf.sample $(DESTDIR)$(sysconfdir)/idn.conf
- @if [ -f $(DESTDIR)$(sysconfdir)/idnalias.conf ]; then \
- echo "** backing up old idnalias.conf as idnalias.conf.old"; \
- mv -f $(DESTDIR)$(sysconfdir)/idnalias.conf \
- $(DESTDIR)$(sysconfdir)/idnalias.conf.old; \
- fi
- @echo "** installing default idnalias.conf forcibly"
- $(INSTALL_DATA) idnalias.conf.sample \
- $(DESTDIR)$(sysconfdir)/idnalias.conf
-
-clean: clean-localdir clean-subdirs
-clean-localdir: force
- rm -f *.o *.lo *.la *.a core *.core *~
- rm -f *.to *_test.c *_test
- rm -f idn.conf.sample idnalias.conf.sample
- rm -fr .libs/
-
-distclean: distclean-localdir distclean-subdirs
-distclean-localdir: force clean-localdir
- rm -f Makefile
-
-test check: test-localdir test-subdirs
-
-@LITEONLY_TRUE@test-localdir: $(TESTLITELIB).la $(SAMPLES)
-@LITEONLY_FALSE@test-localdir: $(TESTLIB).la $(TESTLITELIB).la $(SAMPLES)
-
-all-subdirs install-subdirs clean-subdirs distclean-subdirs test-subdirs:
- @target=`echo $@ | sed 's/-subdirs$$//'`; \
- for d in $(SUBDIRS) ; do \
- (cd $$d; $(MAKE) DESTDIR=$(DESTDIR) $$target); \
- done
-
-force:
diff --git a/contrib/idn/idnkit-1.0-src/lib/aliaslist.c b/contrib/idn/idnkit-1.0-src/lib/aliaslist.c
deleted file mode 100644
index f893dccf..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/aliaslist.c
+++ /dev/null
@@ -1,355 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: aliaslist.c,v 1.1 2003/06/04 00:25:47 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <idn/aliaslist.h>
-#include <idn/assert.h>
-#include <idn/logmacro.h>
-#include <idn/result.h>
-
-struct aliasitem {
- char *pattern; /* name pattern */
- char *encoding; /* MIME-preferred charset name */
- struct aliasitem *next;
-};
-typedef struct aliasitem *aliasitem_t;
-
-struct idn__aliaslist {
- aliasitem_t first_item; /* first item of the list */
-};
-
-static idn_result_t
-additem_to_top(idn__aliaslist_t list,
- const char *pattern, const char *encoding);
-
-static idn_result_t
-additem_to_bottom(idn__aliaslist_t list,
- const char *pattern, const char *encoding);
-
-static int match(const char *pattern, const char *str);
-
-static idn_result_t create_item(const char *pattern, const char *encoding,
- aliasitem_t *itemp);
-
-#ifdef DEBUG
-static void dump_list(idn__aliaslist_t list);
-#endif
-
-idn_result_t
-idn__aliaslist_create(idn__aliaslist_t *listp) {
- static int size = sizeof(struct idn__aliaslist);
-
- TRACE(("idn__aliaslist_create()\n"));
-
- assert(listp != NULL);
-
- if ((*listp = malloc(size)) == NULL) {
- return (idn_nomemory);
- }
- (*listp)->first_item = NULL;
-
- return (idn_success);
-}
-
-void
-idn__aliaslist_destroy(idn__aliaslist_t list) {
- aliasitem_t current;
- aliasitem_t next;
-
- TRACE(("idn__aliaslist_destroy()\n"));
-
- assert(list != NULL);
-
- current = list->first_item;
- while (current != NULL) {
- if (current->pattern != NULL) {
- free(current->pattern);
- }
- if (current->encoding != NULL) {
- free(current->encoding);
- }
- next = current->next;
- free(current);
- current = next;
- }
- free(list);
-}
-
-idn_result_t
-idn__aliaslist_aliasfile(idn__aliaslist_t list, const char *path) {
- FILE *fp;
- int line_no;
- idn_result_t r = idn_success;
- char line[200], alias[200], real[200];
-
- assert(path != NULL);
-
- TRACE(("idn__aliaslist_aliasfile(path=%s)\n", path));
-
- if ((fp = fopen(path, "r")) == NULL) {
- return (idn_nofile);
- }
- for (line_no = 1; fgets(line, sizeof(line), fp) != NULL; line_no++) {
- unsigned char *p = (unsigned char *)line;
-
- while (isascii(*p) && isspace(*p))
- p++;
- if (*p == '#' || *p == '\n')
- continue;
- if (sscanf((char *)p, "%s %s", alias, real) == 2) {
- r = additem_to_bottom(list, alias, real);
- if (r != idn_success)
- break;
- } else {
- INFO(("idn__aliaslist_aliasfile: file %s has "
- "invalid contents at line %d\n",
- path, line_no));
- r = idn_invalid_syntax;
- break;
- }
- }
- fclose(fp);
-
-#ifdef DEBUG
- dump_list(list);
-#endif
-
- return (r);
-}
-
-idn_result_t
-idn__aliaslist_additem(idn__aliaslist_t list,
- const char *pattern, const char *encoding,
- int first_item) {
- if (first_item) {
- return additem_to_top(list, pattern, encoding);
- } else {
- return additem_to_bottom(list, pattern, encoding);
- }
-}
-
-static idn_result_t
-additem_to_top(idn__aliaslist_t list,
- const char *pattern, const char *encoding) {
- aliasitem_t new_item;
- idn_result_t r;
-
- TRACE(("additem_to_top()\n"));
-
- assert(list != NULL);
- assert(pattern != NULL);
- assert(encoding != NULL);
-
- if ((r = create_item(pattern, encoding, &new_item))
- != idn_success) {
- WARNING(("additem_to_top: malloc failed\n"));
- return (r);
- }
-
- new_item->next = list->first_item;
- list->first_item = new_item;
-
-#ifdef DEBUG
- dump_list(list);
-#endif
-
- return (idn_success);
-}
-
-static idn_result_t
-additem_to_bottom(idn__aliaslist_t list,
- const char *pattern, const char *encoding) {
- aliasitem_t new_item;
- idn_result_t r;
-
- TRACE(("additem_to_bottom()\n"));
-
- assert(list != NULL);
- assert(pattern != NULL);
- assert(encoding != NULL);
-
- r = create_item(pattern, encoding, &new_item);
- if (r != idn_success) {
- WARNING(("additem_to_bottom: malloc failed\n"));
- return r;
- }
-
- if (list->first_item == NULL) {
- list->first_item = new_item;
- } else {
- aliasitem_t cur_item = list->first_item;
- for (;;) {
- if (cur_item->next == NULL) {
- break;
- }
- cur_item = cur_item->next;
- }
- cur_item->next = new_item;
- }
-
- return (idn_success);
-}
-
-idn_result_t
-idn__aliaslist_find(idn__aliaslist_t list,
- const char *pattern, char **encodingp) {
- aliasitem_t current;
-
- TRACE(("idn__aliaslist_find()\n"));
-
- assert(list != NULL);
- assert(pattern != NULL);
-
-#ifdef DEBUG
- DUMP(("target pattern: %s\n", pattern));
-#endif
- current = list->first_item;
- while (current != NULL) {
-#ifdef DEBUG
- DUMP(("current pattern: %s, encoding: %s\n",
- current->pattern, current->encoding));
-#endif
- if (match(current->pattern, pattern)) {
- *encodingp = current->encoding;
- return (idn_success);
- }
- current = current->next;
- }
-
- TRACE(("idn__aliaslist_find(): not found\n"));
- *encodingp = (char *)pattern;
- return (idn_notfound);
-}
-
-/*
- * Wild card matching function that supports only '*'.
- */
-static int
-match(const char *pattern, const char *str) {
- for (;;) {
- int c;
-
- switch (c = *pattern++) {
- case '\0':
- return (*str == '\0');
- case '*':
- while (!match(pattern, str)) {
- if (*str == '\0')
- return (0);
- str++;
- }
- return (1);
- break;
- default:
- if (*str++ != c)
- return (0);
- break;
- }
- }
-}
-
-/*
- * List item creation.
- * pattern and encoding must not be NULL.
- */
-static idn_result_t
-create_item(const char *pattern, const char *encoding,
- aliasitem_t *itemp) {
- static size_t size = sizeof(struct aliasitem);
-
- assert(pattern != NULL);
- assert(encoding != NULL);
-
- if ((*itemp = malloc(size)) == NULL)
- return (idn_nomemory);
-
- if (((*itemp)->pattern = malloc(strlen(pattern) + 1)) == NULL) {
- free(*itemp);
- *itemp = NULL;
- return (idn_nomemory);
- }
-
- if (((*itemp)->encoding = malloc(strlen(encoding) + 1)) == NULL) {
- free((*itemp)->pattern);
- free(*itemp);
- *itemp = NULL;
- return (idn_nomemory);
- }
-
- (void)strcpy((*itemp)->pattern, pattern);
- (void)strcpy((*itemp)->encoding, encoding);
- (*itemp)->next = NULL;
-
- return (idn_success);
-}
-
-#ifdef DEBUG
-static void
-dump_list(idn__aliaslist_t list) {
- aliasitem_t item;
- int i;
-
- TRACE(("dump_list()\n"));
- if (list == NULL) {
- TRACE(("list is NULL\n"));
- return;
- }
- item = list->first_item;
- i = 0;
- while (item != NULL) {
- DUMP(("%d: %s\t%s\n", i, item->pattern, item->encoding));
- item = item->next;
- i++;
- }
-}
-#endif
diff --git a/contrib/idn/idnkit-1.0-src/lib/aliaslist.sh b/contrib/idn/idnkit-1.0-src/lib/aliaslist.sh
deleted file mode 100644
index 47c3d4f9..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/aliaslist.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/sh
-#
-# aliaslist.sh -- Generate `idnalias.conf.sample' file.
-#
-
-cpu_company_system="$1"
-utf8_name="$2"
-
-cat <<EOF
-*.ISO_8859-1 ISO-8859-1
-*.ISO_8859-2 ISO-8859-1
-*.SJIS Shift_JIS
-*.Shift_JIS Shift_JIS
-ja_JP.EUC EUC-JP
-ko_KR.EUC EUC-KR
-*.big5 Big5
-*.Big5 Big5
-*.KOI8-R KOI8-R
-*.GB2312 GB2312
-ja EUC-JP
-EOF
-
-case "$cpu_company_system" in
-*-*-hpux*)
- echo "japanese Shift_JIS"
- ;;
-*)
- echo "japanese EUC-JP"
-esac
-
-if [ "x$utf8_name" != xUTF-8 ] ; then
- echo "UTF-8 $utf8_name"
-fi
-
-exit 0
diff --git a/contrib/idn/idnkit-1.0-src/lib/api.c b/contrib/idn/idnkit-1.0-src/lib/api.c
deleted file mode 100644
index 772d0044..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/api.c
+++ /dev/null
@@ -1,257 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: api.c,v 1.1 2003/06/04 00:25:48 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2001,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <string.h>
-#include <stdlib.h>
-
-#include <idn/result.h>
-#include <idn/assert.h>
-#include <idn/log.h>
-#include <idn/logmacro.h>
-#include <idn/resconf.h>
-#include <idn/api.h>
-#include <idn/debug.h>
-#include <idn/res.h>
-
-static int initialized;
-static idn_resconf_t default_conf;
-
-static char *conf_file;
-
-void
-idn_enable(int on_off) {
- idn_res_enable(on_off);
-}
-
-idn_result_t
-idn__setconffile(const char *file) {
- idn_result_t r;
- char *s;
-
- TRACE(("idn__setconffile(%s)\n", (file == NULL) ? "<null>" : file));
-
- if (initialized) {
- r = idn_failure;
- goto ret;
- }
-
- if (file == NULL)
- s = NULL;
- else {
- s = (char *)malloc(strlen(file) + 1);
- if (s == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- strcpy(s, file);
- }
- free(conf_file);
- conf_file = s;
-
- r = idn_success;
-ret:
- TRACE(("idn__setconffile(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-idn_result_t
-idn_nameinit(int load_file) {
- idn_result_t r;
-
- TRACE(("idn_nameinit()\n"));
-
- if (initialized) {
- r = idn_success;
- goto ret;
- }
-
- idn_resconf_initialize();
-
- r = idn_resconf_create(&default_conf);
- if (r != idn_success)
- goto ret;
-
- if (load_file)
- r = idn_resconf_loadfile(default_conf, conf_file);
- else
- r = idn_resconf_setdefaults(default_conf);
- if (r != idn_success)
- goto ret;
-
- initialized = 1;
-
-ret:
- if (r != idn_success && default_conf != NULL) {
- idn_resconf_destroy(default_conf);
- default_conf = NULL;
- }
- TRACE(("idn_nameinit(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-idn_result_t
-idn_encodename(idn_action_t actions, const char *from, char *to, size_t tolen) {
- idn_result_t r;
-
- assert(from != NULL && to != NULL);
-
- TRACE(("idn_encodename(actions=%s, from=\"%s\")\n",
- idn__res_actionstostring(actions),
- idn__debug_xstring(from, 50)));
-
- if (!initialized && ((r = idn_nameinit(0)) != idn_success))
- goto ret;
-
- r = idn_res_encodename(default_conf, actions, from, to, tolen);
-
-ret:
- if (r == idn_success) {
- TRACE(("idn_encodename(): success (to=\"%s\")\n",
- idn__debug_xstring(to, 50)));
- } else {
- TRACE(("idn_encodename(): %s\n", idn_result_tostring(r)));
- }
- return (r);
-}
-
-idn_result_t
-idn_decodename(idn_action_t actions, const char *from, char *to, size_t tolen) {
- idn_result_t r;
-
- assert(from != NULL && to != NULL);
-
- TRACE(("idn_decodename(actions=%s, from=\"%s\", tolen=%d)\n",
- idn__res_actionstostring(actions),
- idn__debug_xstring(from, 50), (int)tolen));
-
- if (!initialized && ((r = idn_nameinit(0)) != idn_success))
- goto ret;
-
- r = idn_res_decodename(default_conf, actions, from, to, tolen);
-
-ret:
- if (r == idn_success) {
- TRACE(("idn_decodename(): success (to=\"%s\")\n",
- idn__debug_xstring(to, 50)));
- } else {
- TRACE(("idn_decodename(): %s\n", idn_result_tostring(r)));
- }
- return (r);
-}
-
-idn_result_t
-idn_decodename2(idn_action_t actions, const char *from, char *to, size_t tolen,
- const char *auxencoding) {
- idn_result_t r;
-
- assert(from != NULL && to != NULL);
-
- TRACE(("idn_decodename2(actions=%s, from=\"%s\", tolen=%d)\n",
- idn__res_actionstostring(actions),
- idn__debug_xstring(from, 50), (int)tolen));
-
- if (!initialized && ((r = idn_nameinit(0)) != idn_success))
- goto ret;
-
- r = idn_res_decodename2(default_conf, actions, from, to, tolen,
- auxencoding);
-
-ret:
- if (r == idn_success) {
- TRACE(("idn_decodename2(): success (to=\"%s\")\n",
- idn__debug_xstring(to, 50)));
- } else {
- TRACE(("idn_decodename2(): %s\n", idn_result_tostring(r)));
- }
- return (r);
-}
-
-/*
- * These functions are for backward compatibility.
- */
-#ifdef ENABLE_MDNKIT_COMPAT
-
-idn_result_t
-mdn_nameinit(void) {
- return idn_nameinit(1);
-}
-
-idn_result_t
-mdn_encodename(int actions, const char *from, char *to, size_t tolen) {
- idn_result_t r;
-
- assert(from != NULL && to != NULL);
-
- TRACE(("mdn_encodename(actions=%s, from=\"%s\")\n",
- idn__res_actionstostring(actions),
- idn__debug_xstring(from, 50)));
-
- if (!initialized && ((r = idn_nameinit(1)) != idn_success))
- return (r);
-
- return (idn_res_encodename(default_conf, actions, from, to, tolen));
-}
-
-idn_result_t
-mdn_decodename(int actions, const char *from, char *to, size_t tolen) {
- idn_result_t r;
-
- assert(from != NULL && to != NULL);
-
- TRACE(("idn_decodename(actions=%s, from=\"%s\", tolen=%d)\n",
- idn__res_actionstostring(actions),
- idn__debug_xstring(from, 50), (int)tolen));
-
- if (!initialized && ((r = idn_nameinit(1)) != idn_success))
- return (r);
-
- return (idn_res_decodename(default_conf, actions, from, to, tolen));
-}
-
-#endif /* ENABLE_MDNKIT_COMPAT */
diff --git a/contrib/idn/idnkit-1.0-src/lib/checker.c b/contrib/idn/idnkit-1.0-src/lib/checker.c
deleted file mode 100644
index 52e5b118..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/checker.c
+++ /dev/null
@@ -1,446 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: checker.c,v 1.1 2003/06/04 00:25:49 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2001,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <idn/result.h>
-#include <idn/assert.h>
-#include <idn/logmacro.h>
-#include <idn/checker.h>
-#include <idn/strhash.h>
-#include <idn/debug.h>
-
-/*
- * Type for checking scheme.
- */
-typedef struct {
- char *prefix;
- char *parameter;
- idn_checker_createproc_t create;
- idn_checker_destroyproc_t destroy;
- idn_checker_lookupproc_t lookup;
- void *context;
-} check_scheme_t;
-
-/*
- * Standard checking schemes.
- */
-static const check_scheme_t rfc3491_prohibit_scheme = {
- "prohibit#RFC3491",
- "RFC3491",
- idn_nameprep_createproc,
- idn_nameprep_destroyproc,
- idn_nameprep_prohibitproc,
- NULL,
-};
-
-static const check_scheme_t rfc3491_unasigned_scheme = {
- "unassigned#RFC3491",
- "RFC3491",
- idn_nameprep_createproc,
- idn_nameprep_destroyproc,
- idn_nameprep_unassignedproc,
- NULL,
-};
-
-static const check_scheme_t rfc3491_bidi_scheme = {
- "bidi#RFC3491",
- "RFC3491",
- idn_nameprep_createproc,
- idn_nameprep_destroyproc,
- idn_nameprep_bidiproc,
- NULL,
-};
-
-static const check_scheme_t filecheck_prohibit_scheme = {
- "prohibit#fileset",
- NULL,
- idn__filechecker_createproc,
- idn__filechecker_destroyproc,
- idn__filechecker_lookupproc,
- NULL,
-};
-
-static const check_scheme_t filecheck_unassigned_scheme = {
- "unassigned#fileset",
- NULL,
- idn__filechecker_createproc,
- idn__filechecker_destroyproc,
- idn__filechecker_lookupproc,
- NULL,
-};
-
-static const check_scheme_t *standard_check_schemes[] = {
- &rfc3491_unasigned_scheme,
- &rfc3491_prohibit_scheme,
- &rfc3491_bidi_scheme,
- &filecheck_prohibit_scheme,
- &filecheck_unassigned_scheme,
- NULL,
-};
-
-/*
- * Hash table for checking schemes.
- */
-static idn__strhash_t scheme_hash = NULL;
-
-/*
- * Mapper object type.
- */
-struct idn_checker {
- int nschemes;
- int scheme_size;
- check_scheme_t *schemes;
- int reference_count;
-};
-
-#define MAPPER_INITIAL_SCHEME_SIZE 1
-
-idn_result_t
-idn_checker_initialize(void) {
- idn_result_t r;
- check_scheme_t **scheme;
-
- TRACE(("idn_checker_initialize()\n"));
-
- if (scheme_hash != NULL) {
- r = idn_success; /* already initialized */
- goto ret;
- }
-
- r = idn__strhash_create(&scheme_hash);
- if (r != idn_success) {
- goto ret;
- }
-
- for (scheme = (check_scheme_t **)standard_check_schemes;
- *scheme != NULL; scheme++) {
- r = idn__strhash_put(scheme_hash, (*scheme)->prefix, *scheme);
- if (r != idn_success)
- goto ret;
- }
-
- r = idn_success;
-ret:
- if (r != idn_success) {
- if (scheme_hash != NULL) {
- idn__strhash_destroy(scheme_hash, NULL);
- scheme_hash = NULL;
- }
- }
- TRACE(("idn_checker_initialize(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-idn_result_t
-idn_checker_create(idn_checker_t *ctxp) {
- idn_checker_t ctx = NULL;
- idn_result_t r;
-
- assert(scheme_hash != NULL);
- assert(ctxp != NULL);
-
- TRACE(("idn_checker_create()\n"));
-
- ctx = (idn_checker_t) malloc(sizeof(struct idn_checker));
- if (ctx == NULL) {
- r = idn_nomemory;
- goto ret;
- }
-
- ctx->schemes = (check_scheme_t *) malloc(sizeof(check_scheme_t)
- * MAPPER_INITIAL_SCHEME_SIZE);
- if (ctx->schemes == NULL) {
- r = idn_nomemory;
- goto ret;
- }
-
- ctx->nschemes = 0;
- ctx->scheme_size = MAPPER_INITIAL_SCHEME_SIZE;
- ctx->reference_count = 1;
- *ctxp = ctx;
- r = idn_success;
-ret:
- if (r != idn_success) {
- if (ctx != NULL)
- free(ctx->schemes);
- free(ctx);
- }
- TRACE(("idn_checker_create(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-void
-idn_checker_destroy(idn_checker_t ctx) {
- int i;
-
- assert(scheme_hash != NULL);
- assert(ctx != NULL);
-
- TRACE(("idn_checker_destroy()\n"));
-
- ctx->reference_count--;
- if (ctx->reference_count <= 0) {
- TRACE(("idn_checker_destroy(): the object is destroyed\n"));
- for (i = 0; i < ctx->nschemes; i++)
- ctx->schemes[i].destroy(ctx->schemes[i].context);
- free(ctx->schemes);
- free(ctx);
- } else {
- TRACE(("idn_checker_destroy(): "
- "update reference count (%d->%d)\n",
- ctx->reference_count + 1, ctx->reference_count));
- }
-}
-
-void
-idn_checker_incrref(idn_checker_t ctx) {
- assert(ctx != NULL && scheme_hash != NULL);
-
- TRACE(("idn_checker_incrref()\n"));
- TRACE(("idn_checker_incrref: update reference count (%d->%d)\n",
- ctx->reference_count, ctx->reference_count + 1));
-
- ctx->reference_count++;
-}
-
-idn_result_t
-idn_checker_add(idn_checker_t ctx, const char *scheme_name) {
- idn_result_t r;
- check_scheme_t *scheme;
- const char *scheme_prefix;
- const char *scheme_parameter;
- void *scheme_context = NULL;
- char *buffer = NULL;
-
- assert(scheme_hash != NULL);
- assert(ctx != NULL);
-
- TRACE(("idn_checker_add(scheme_name=%s)\n",
- idn__debug_xstring(scheme_name, 50)));
-
- /*
- * Split `scheme_name' into `scheme_prefix' and `scheme_parameter'.
- */
- scheme_parameter = strchr(scheme_name, ':');
- if (scheme_parameter == NULL) {
- scheme_prefix = scheme_name;
- scheme_parameter = NULL;
- } else {
- ptrdiff_t scheme_prefixlen;
-
- scheme_prefixlen = scheme_parameter - scheme_name;
- buffer = (char *) malloc(scheme_prefixlen + 1);
- if (buffer == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- memcpy(buffer, scheme_name, scheme_prefixlen);
- *(buffer + scheme_prefixlen) = '\0';
- scheme_prefix = buffer;
- scheme_parameter++;
- }
-
- /*
- * Find a scheme.
- */
- if (idn__strhash_get(scheme_hash, scheme_prefix, (void **)&scheme)
- != idn_success) {
- ERROR(("idn_checker_add(): invalid scheme \"%-.30s\"\n",
- scheme_name));
- r = idn_invalid_name;
- goto ret;
- }
- if (scheme_parameter == NULL && scheme->parameter != NULL)
- scheme_parameter = scheme->parameter;
-
- /*
- * Add the scheme.
- */
- assert(ctx->nschemes <= ctx->scheme_size);
-
- if (ctx->nschemes == ctx->scheme_size) {
- check_scheme_t *new_schemes;
-
- new_schemes = (check_scheme_t *) realloc(ctx->schemes,
- sizeof(check_scheme_t) * ctx->scheme_size * 2);
- if (new_schemes == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- ctx->schemes = new_schemes;
- ctx->scheme_size *= 2;
- }
-
- r = scheme->create(scheme_parameter, &scheme_context);
- if (r != idn_success)
- goto ret;
-
- memcpy(ctx->schemes + ctx->nschemes, scheme, sizeof(check_scheme_t));
- ctx->schemes[ctx->nschemes].context = scheme_context;
- ctx->nschemes++;
- r = idn_success;
-
-ret:
- free(buffer);
- if (r != idn_success)
- free(scheme_context);
- TRACE(("idn_checker_add(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-idn_result_t
-idn_checker_addall(idn_checker_t ctx, const char **scheme_names,
- int nschemes) {
- idn_result_t r;
- int i;
-
- assert(scheme_hash != NULL);
- assert(ctx != NULL && scheme_names != NULL);
-
- TRACE(("idn_checker_addall(nschemes=%d)\n", nschemes));
-
- for (i = 0; i < nschemes; i++) {
- r = idn_checker_add(ctx, (const char *)*scheme_names);
- if (r != idn_success)
- goto ret;
- scheme_names++;
- }
-
- r = idn_success;
-ret:
- TRACE(("idn_checker_addall(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-idn_result_t
-idn_checker_lookup(idn_checker_t ctx, const unsigned long *ucs4,
- const unsigned long **found) {
- idn_result_t r;
- int i;
-
- assert(scheme_hash != NULL);
- assert(ctx != NULL && ucs4 != NULL && found != NULL);
-
- TRACE(("idn_checker_lookup(ucs4=\"%s\")\n",
- idn__debug_ucs4xstring(ucs4, 50)));
-
- /*
- * Lookup.
- */
- *found = NULL;
-
- for (i = 0; i < ctx->nschemes; i++) {
- TRACE(("idn_checker_lookup(): lookup %s\n",
- ctx->schemes[i].prefix));
-
- r = (ctx->schemes[i].lookup)(ctx->schemes[i].context, ucs4,
- found);
- if (r != idn_success)
- goto ret;
- if (*found != NULL)
- break;
- }
-
- r = idn_success;
-ret:
- if (*found == NULL) {
- TRACE(("idn_checker_lookup(): %s (not found)\n",
- idn_result_tostring(r)));
- } else {
- TRACE(("idn_checker_lookup(): %s (found \\x%04lx)\n",
- idn_result_tostring(r), **found));
- }
- return (r);
-}
-
-idn_result_t
-idn_checker_register(const char *prefix,
- idn_checker_createproc_t create,
- idn_checker_destroyproc_t destroy,
- idn_checker_lookupproc_t lookup) {
- idn_result_t r;
- check_scheme_t *scheme = NULL;
-
- assert(scheme_hash != NULL);
- assert(prefix != NULL && create != NULL && destroy != NULL &&
- lookup != NULL);
-
- TRACE(("idn_checker_register(prefix=%s)\n", prefix));
-
- scheme = (check_scheme_t *) malloc(sizeof(check_scheme_t));
- if (scheme == NULL) {
- r = idn_nomemory;
- goto ret;
- }
-
- scheme->prefix = (char *) malloc(strlen(prefix) + 1);
- if (scheme->prefix == NULL) {
- r = idn_nomemory;
- goto ret;
- }
-
- strcpy(scheme->prefix, prefix);
- scheme->parameter = NULL;
- scheme->create = create;
- scheme->destroy = destroy;
- scheme->lookup = lookup;
-
- r = idn__strhash_put(scheme_hash, prefix, scheme);
-ret:
- if (r != idn_success) {
- if (scheme != NULL)
- free(scheme->prefix);
- free(scheme);
- }
- TRACE(("idn_checker_register(): %s\n", idn_result_tostring(r)));
- return (r);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/converter.c b/contrib/idn/idnkit-1.0-src/lib/converter.c
deleted file mode 100644
index b08984c3..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/converter.c
+++ /dev/null
@@ -1,1244 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: converter.c,v 1.1 2003/06/04 00:25:51 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2000,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-#ifndef WITHOUT_ICONV
-#include <iconv.h>
-#endif
-
-#include <idn/result.h>
-#include <idn/assert.h>
-#include <idn/logmacro.h>
-#include <idn/converter.h>
-#include <idn/aliaslist.h>
-#include <idn/strhash.h>
-#include <idn/debug.h>
-#include <idn/ucs4.h>
-#include <idn/punycode.h>
-#include <idn/race.h>
-#include <idn/util.h>
-
-#ifndef IDN_UTF8_ENCODING_NAME
-#define IDN_UTF8_ENCODING_NAME "UTF-8" /* by IANA */
-#endif
-#ifndef IDN_RACE_ENCODING_NAME
-#define IDN_RACE_ENCODING_NAME "RACE"
-#endif
-#ifndef IDN_AMCACEZ_ENCODING_NAME
-#define IDN_AMCACEZ_ENCODING_NAME "AMC-ACE-Z"
-#endif
-#ifndef IDN_PUNYCODE_ENCODING_NAME
-#define IDN_PUNYCODE_ENCODING_NAME "Punycode"
-#endif
-
-#define MAX_RECURSE 20
-
-#ifdef WIN32
-
-#define IDNKEY_IDNKIT "Software\\JPNIC\\IDN"
-#define IDNVAL_ALIASFILE "AliasFile"
-
-#else /* WIN32 */
-
-#ifndef IDN_RESCONF_DIR
-#define IDN_RESCONF_DIR "/etc"
-#endif
-#define IDN_ALIAS_FILE IDN_RESCONF_DIR "/idnalias.conf"
-
-#endif /* WIN32 */
-
-typedef struct {
- idn_converter_openproc_t openfromucs4;
- idn_converter_openproc_t opentoucs4;
- idn_converter_convfromucs4proc_t convfromucs4;
- idn_converter_convtoucs4proc_t convtoucs4;
- idn_converter_closeproc_t close;
- int encoding_type;
-} converter_ops_t;
-
-struct idn_converter {
- char *local_encoding_name;
- converter_ops_t *ops;
- int flags;
- int opened_convfromucs4;
- int opened_convtoucs4;
- int reference_count;
- void *private_data;
-};
-
-static idn__strhash_t encoding_name_hash;
-static idn__aliaslist_t encoding_alias_list;
-
-static idn_result_t register_standard_encoding(void);
-static idn_result_t roundtrip_check(idn_converter_t ctx,
- const unsigned long *from,
- const char *to);
-
-static idn_result_t
- converter_none_open(idn_converter_t ctx, void **privdata);
-static idn_result_t
- converter_none_close(idn_converter_t ctx, void *privdata);
-static idn_result_t
- converter_none_convfromucs4(idn_converter_t ctx,
- void *privdata,
- const unsigned long *from,
- char *to, size_t tolen);
-static idn_result_t
- converter_none_convtoucs4(idn_converter_t ctx,
- void *privdata, const char *from,
- unsigned long *to, size_t tolen);
-
-#ifndef WITHOUT_ICONV
-static idn_result_t
- converter_iconv_openfromucs4(idn_converter_t ctx, void **privdata);
-static idn_result_t
- converter_iconv_opentoucs4(idn_converter_t ctx, void **privdata);
-static idn_result_t
- converter_iconv_close(idn_converter_t ctx, void *privdata);
-static idn_result_t
- converter_iconv_convfromucs4(idn_converter_t ctx,
- void *privdata,
- const unsigned long *from,
- char *to, size_t tolen);
-static idn_result_t
- converter_iconv_convtoucs4(idn_converter_t ctx,
- void *privdata,
- const char *from,
- unsigned long *to, size_t tolen);
-
-static idn_result_t
-iconv_initialize_privdata(void **privdata);
-static void
-iconv_finalize_privdata(void *privdata);
-
-static char * get_system_aliasfile(void);
-static int file_exist(const char *filename);
-
-#endif /* !WITHOUT_ICONV */
-
-#ifdef DEBUG
-static idn_result_t
- converter_uescape_convfromucs4(idn_converter_t ctx,
- void *privdata,
- const unsigned long *from,
- char *to, size_t tolen);
-static idn_result_t
- converter_uescape_convtoucs4(idn_converter_t ctx,
- void *privdata,
- const char *from,
- unsigned long *to,
- size_t tolen);
-#endif /* DEBUG */
-
-static converter_ops_t none_converter_ops = {
- converter_none_open,
- converter_none_open,
- converter_none_convfromucs4,
- converter_none_convtoucs4,
- converter_none_close,
- IDN_NONACE,
-};
-
-#ifndef WITHOUT_ICONV
-static converter_ops_t iconv_converter_ops = {
- converter_iconv_openfromucs4,
- converter_iconv_opentoucs4,
- converter_iconv_convfromucs4,
- converter_iconv_convtoucs4,
- converter_iconv_close,
- IDN_NONACE,
-};
-#endif
-
-/*
- * Initialize.
- */
-
-idn_result_t
-idn_converter_initialize(void) {
- idn_result_t r;
- idn__strhash_t hash;
- idn__aliaslist_t list;
-#ifndef WITHOUT_ICONV
- const char *fname;
-#endif
-
- TRACE(("idn_converter_initialize()\n"));
-
- if (encoding_name_hash == NULL) {
- if ((r = idn__strhash_create(&hash)) != idn_success)
- goto ret;
- encoding_name_hash = hash;
- r = register_standard_encoding();
- }
- if (encoding_alias_list == NULL) {
- if ((r = idn__aliaslist_create(&list)) != idn_success)
- goto ret;
- encoding_alias_list = list;
-#ifndef WITHOUT_ICONV
- fname = get_system_aliasfile();
- if (fname != NULL && file_exist(fname))
- idn_converter_aliasfile(fname);
-#endif
- }
-
- r = idn_success;
-ret:
- TRACE(("idn_converter_initialize(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-#ifndef WITHOUT_ICONV
-static char *
-get_system_aliasfile() {
-#ifdef WIN32
- static char alias_path[500]; /* a good longer than MAX_PATH */
-
- if (idn__util_getregistrystring(idn__util_hkey_localmachine,
- IDNVAL_ALIASFILE,
- alias_path, sizeof(alias_path))) {
- return (alias_path);
- } else {
- return (NULL);
- }
-#else
- return (IDN_ALIAS_FILE);
-#endif
-}
-
-static int
-file_exist(const char *filename) {
- FILE *fp;
-
- if ((fp = fopen(filename, "r")) == NULL)
- return (0);
- fclose(fp);
- return (1);
-}
-#endif
-
-idn_result_t
-idn_converter_create(const char *name, idn_converter_t *ctxp, int flags) {
- const char *realname;
- idn_converter_t ctx;
- idn_result_t r;
- void *v;
-
- assert(name != NULL && ctxp != NULL);
-
- TRACE(("idn_converter_create(%s)\n", name));
-
- realname = idn_converter_getrealname(name);
-#ifdef DEBUG
- if (strcmp(name, realname) != 0) {
- TRACE(("idn_converter_create: realname=%s\n", realname));
- }
-#endif
-
- *ctxp = NULL;
-
- /* Allocate memory for a converter context and the name. */
- ctx = malloc(sizeof(struct idn_converter) + strlen(realname) + 1);
- if (ctx == NULL) {
- r = idn_nomemory;
- goto ret;
- }
-
- ctx->local_encoding_name = (char *)(ctx + 1);
- (void)strcpy(ctx->local_encoding_name, realname);
- ctx->flags = flags;
- ctx->reference_count = 1;
- ctx->opened_convfromucs4 = 0;
- ctx->opened_convtoucs4 = 0;
- ctx->private_data = NULL;
-
- assert(encoding_name_hash != NULL);
-
- if (strcmp(realname, IDN_UTF8_ENCODING_NAME) == 0) {
- /* No conversion needed */
- ctx->ops = &none_converter_ops;
- } else if ((r = idn__strhash_get(encoding_name_hash, realname, &v))
- == idn_success) {
- /* Special converter found */
- ctx->ops = (converter_ops_t *)v;
- } else {
- /* General case */
-#ifdef WITHOUT_ICONV
- free(ctx);
- *ctxp = NULL;
- r = idn_invalid_name;
- goto ret;
-#else
- ctx->ops = &iconv_converter_ops;
-#endif
- }
-
- if ((flags & IDN_CONVERTER_DELAYEDOPEN) == 0) {
- r = (ctx->ops->openfromucs4)(ctx, &(ctx->private_data));
- if (r != idn_success) {
- WARNING(("idn_converter_create(): open failed "
- "(ucs4->local)\n"));
- free(ctx);
- *ctxp = NULL;
- goto ret;
- }
- ctx->opened_convfromucs4 = 1;
-
- r = (*ctx->ops->opentoucs4)(ctx, &(ctx->private_data));
- if (r != idn_success) {
- WARNING(("idn_converter_create(): open failed "
- "(local->ucs4)\n"));
- free(ctx);
- *ctxp = NULL;
- goto ret;
- }
- ctx->opened_convtoucs4 = 1;
- }
-
- *ctxp = ctx;
- r = idn_success;
-ret:
- TRACE(("idn_converter_create(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-void
-idn_converter_destroy(idn_converter_t ctx) {
- assert(ctx != NULL);
-
- TRACE(("idn_converter_destroy(ctx=%s)\n", ctx->local_encoding_name));
-
- ctx->reference_count--;
- if (ctx->reference_count <= 0) {
- TRACE(("idn_converter_destroy(): the object is destroyed\n"));
- (void)(*ctx->ops->close)(ctx, ctx->private_data);
- free(ctx);
- } else {
- TRACE(("idn_converter_destroy(): "
- "update reference count (%d->%d)\n",
- ctx->reference_count + 1, ctx->reference_count));
- }
-}
-
-void
-idn_converter_incrref(idn_converter_t ctx) {
- assert(ctx != NULL);
-
- TRACE(("idn_converter_incrref(ctx=%s)\n", ctx->local_encoding_name));
- TRACE(("idn_converter_incrref: update reference count (%d->%d)\n",
- ctx->reference_count, ctx->reference_count + 1));
-
- ctx->reference_count++;
-}
-
-char *
-idn_converter_localencoding(idn_converter_t ctx) {
- assert(ctx != NULL);
- TRACE(("idn_converter_localencoding(ctx=%s)\n",
- ctx->local_encoding_name));
- return (ctx->local_encoding_name);
-}
-
-int
-idn_converter_encodingtype(idn_converter_t ctx) {
- int encoding_type;
-
- assert(ctx != NULL);
- TRACE(("idn_converter_encodingtype(ctx=%s)\n",
- ctx->local_encoding_name));
-
- encoding_type = ctx->ops->encoding_type;
- TRACE(("idn_converter_encodingtype(): %d\n", encoding_type));
- return (encoding_type);
-}
-
-int
-idn_converter_isasciicompatible(idn_converter_t ctx) {
- int iscompat;
-
- assert(ctx != NULL);
- TRACE(("idn_converter_isasciicompatible(ctx=%s)\n",
- ctx->local_encoding_name));
-
- iscompat = (ctx->ops->encoding_type != IDN_NONACE);
- TRACE(("idn_converter_isasciicompatible(): %d\n", iscompat));
- return (iscompat);
-}
-
-idn_result_t
-idn_converter_convfromucs4(idn_converter_t ctx, const unsigned long *from,
- char *to, size_t tolen) {
- idn_result_t r;
-
- assert(ctx != NULL && from != NULL && to != NULL);
-
- TRACE(("idn_converter_convfromucs4(ctx=%s, from=\"%s\", tolen=%d)\n",
- ctx->local_encoding_name, idn__debug_ucs4xstring(from, 50),
- (int)tolen));
-
- if (!ctx->opened_convfromucs4) {
- r = (*ctx->ops->openfromucs4)(ctx, &(ctx->private_data));
- if (r != idn_success)
- goto ret;
- ctx->opened_convfromucs4 = 1;
- }
-
- r = (*ctx->ops->convfromucs4)(ctx, ctx->private_data, from, to, tolen);
- if (r != idn_success)
- goto ret;
- if ((ctx->flags & IDN_CONVERTER_RTCHECK) != 0) {
- r = roundtrip_check(ctx, from, to);
- if (r != idn_success)
- goto ret;
- }
-
- r = idn_success;
-ret:
- if (r == idn_success) {
- TRACE(("idn_converter_convfromucs4(): success (to=\"%s\")\n",
- idn__debug_xstring(to, 50)));
- } else {
- TRACE(("idn_converter_convfromucs4(): %s\n",
- idn_result_tostring(r)));
- }
- return (r);
-}
-
-idn_result_t
-idn_converter_convtoucs4(idn_converter_t ctx, const char *from,
- unsigned long *to, size_t tolen) {
- idn_result_t r;
-
- assert(ctx != NULL && from != NULL && to != NULL);
-
- TRACE(("idn_converter_convtoucs4(ctx=%s, from=\"%s\", tolen=%d)\n",
- ctx->local_encoding_name, idn__debug_xstring(from, 50),
- (int)tolen));
-
- if (!ctx->opened_convtoucs4) {
- r = (*ctx->ops->opentoucs4)(ctx, &(ctx->private_data));
- if (r != idn_success)
- goto ret;
- ctx->opened_convtoucs4 = 1;
- }
-
- r = (*ctx->ops->convtoucs4)(ctx, ctx->private_data, from, to, tolen);
-ret:
- if (r == idn_success) {
- TRACE(("idn_converter_convtoucs4(): success (to=\"%s\")\n",
- idn__debug_ucs4xstring(to, 50)));
- } else {
- TRACE(("idn_converter_convtoucs4(): %s\n",
- idn_result_tostring(r)));
- }
- return (r);
-}
-
-/*
- * Encoding registration.
- */
-
-idn_result_t
-idn_converter_register(const char *name,
- idn_converter_openproc_t openfromucs4,
- idn_converter_openproc_t opentoucs4,
- idn_converter_convfromucs4proc_t convfromucs4,
- idn_converter_convtoucs4proc_t convtoucs4,
- idn_converter_closeproc_t close,
- int encoding_type) {
- converter_ops_t *ops;
- idn_result_t r;
-
- assert(name != NULL && convfromucs4 != NULL && convtoucs4 != NULL);
-
- TRACE(("idn_converter_register(name=%s)\n", name));
-
- if ((ops = malloc(sizeof(*ops))) == NULL) {
- r = idn_nomemory;
- goto ret;
- }
-
- if (openfromucs4 == NULL)
- openfromucs4 = converter_none_open;
- if (opentoucs4 == NULL)
- opentoucs4 = converter_none_open;
- if (close == NULL)
- close = converter_none_close;
-
- ops->openfromucs4 = openfromucs4;
- ops->opentoucs4 = opentoucs4;
- ops->convfromucs4 = convfromucs4;
- ops->convtoucs4 = convtoucs4;
- ops->close = close;
- ops->encoding_type = encoding_type;
-
- r = idn__strhash_put(encoding_name_hash, name, ops);
- if (r != idn_success) {
- free(ops);
- goto ret;
- }
-
- r = idn_success;
-ret:
- TRACE(("idn_converter_register(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-static idn_result_t
-register_standard_encoding(void) {
- idn_result_t r;
-
- r = idn_converter_register(IDN_PUNYCODE_ENCODING_NAME,
- NULL,
- NULL,
- idn__punycode_encode,
- idn__punycode_decode,
- converter_none_close,
- IDN_ACE_STRICTCASE);
- if (r != idn_success)
- return (r);
-
-#ifdef IDN_EXTRA_ACE
- r = idn_converter_register(IDN_AMCACEZ_ENCODING_NAME,
- NULL,
- NULL,
- idn__punycode_encode,
- idn__punycode_decode,
- converter_none_close,
- IDN_ACE_STRICTCASE);
- if (r != idn_success)
- return (r);
-
- r = idn_converter_register(IDN_RACE_ENCODING_NAME,
- NULL,
- NULL,
- idn__race_encode,
- idn__race_decode,
- converter_none_close,
- IDN_ACE_LOOSECASE);
- if (r != idn_success)
- return (r);
-#endif /* IDN_EXTRA_ACE */
-
-#ifdef DEBUG
- /* This is convenient for debug. Not useful for other purposes. */
- r = idn_converter_register("U-escape",
- NULL,
- NULL,
- converter_uescape_convfromucs4,
- converter_uescape_convtoucs4,
- NULL,
- IDN_NONACE);
- if (r != idn_success)
- return (r);
-#endif /* DEBUG */
-
- return (r);
-}
-
-/*
- * Encoding alias support.
- */
-idn_result_t
-idn_converter_addalias(const char *alias_name, const char *real_name,
- int first_item) {
- idn_result_t r;
-
- assert(alias_name != NULL && real_name != NULL);
-
- TRACE(("idn_converter_addalias(alias_name=%s,real_name=%s)\n",
- alias_name, real_name));
-
- if (strlen(alias_name) == 0 || strlen(real_name) == 0) {
- return idn_invalid_syntax;
- }
-
- if (strcmp(alias_name, real_name) == 0) {
- r = idn_success;
- goto ret;
- }
-
- if (encoding_alias_list == NULL) {
- WARNING(("idn_converter_addalias(): the module is not "
- "initialized\n"));
- r = idn_failure;
- goto ret;
- }
-
- r = idn__aliaslist_additem(encoding_alias_list, alias_name, real_name,
- first_item);
-ret:
- TRACE(("idn_converter_addalias(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-idn_result_t
-idn_converter_aliasfile(const char *path) {
- idn_result_t r;
-
- assert(path != NULL);
-
- TRACE(("idn_converter_aliasfile(path=%s)\n", path));
-
- if (encoding_alias_list == NULL) {
- WARNING(("idn_converter_aliasfile(): the module is not "
- "initialized\n"));
- return (idn_failure);
- }
-
- r = idn__aliaslist_aliasfile(encoding_alias_list, path);
-
- TRACE(("idn_converter_aliasfile(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-idn_result_t
-idn_converter_resetalias(void) {
- idn__aliaslist_t list;
- idn_result_t r;
-
- TRACE(("idn_converter_resetalias()\n"));
-
- if (encoding_alias_list == NULL) {
- WARNING(("idn_converter_resetalias(): the module is not "
- "initialized\n"));
- return (idn_failure);
- }
-
- list = encoding_alias_list;
- encoding_alias_list = NULL;
- idn__aliaslist_destroy(list);
- list = NULL;
- r = idn__aliaslist_create(&list);
- encoding_alias_list = list;
-
- TRACE(("idn_converter_resetalias(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-const char *
-idn_converter_getrealname(const char *name) {
- char *realname;
- idn_result_t r;
-
- TRACE(("idn_converter_getrealname()\n"));
-
- assert(name != NULL);
-
- if (encoding_alias_list == NULL) {
- WARNING(("idn_converter_getrealname(): the module is not "
- "initialized\n"));
- return (name);
- }
-
- r = idn__aliaslist_find(encoding_alias_list, name, &realname);
- if (r != idn_success) {
- return (name);
- }
- return (realname);
-}
-
-/*
- * Round trip check.
- */
-
-static idn_result_t
-roundtrip_check(idn_converter_t ctx, const unsigned long *from, const char *to)
-{
- /*
- * One problem with iconv() convertion is that
- * iconv() doesn't signal an error if the input
- * string contains characters which are valid but
- * do not have mapping to the output codeset.
- * (the behavior of iconv() for that case is defined as
- * `implementation dependent')
- * One way to check this case is to perform round-trip
- * conversion and see if it is same as the original string.
- */
- idn_result_t r;
- unsigned long *back;
- unsigned long backbuf[256];
- size_t fromlen;
- size_t backlen;
-
- TRACE(("idn_converter_convert: round-trip checking (from=\"%s\")\n",
- idn__debug_ucs4xstring(from, 50)));
-
- /* Allocate enough buffer. */
- fromlen = idn_ucs4_strlen(from) + 1;
- if (fromlen * sizeof(*back) <= sizeof(backbuf)) {
- backlen = sizeof(backbuf);
- back = backbuf;
- } else {
- backlen = fromlen;
- back = (unsigned long *)malloc(backlen * sizeof(*back));
- if (back == NULL)
- return (idn_nomemory);
- }
-
- /*
- * Perform backward conversion.
- */
- r = idn_converter_convtoucs4(ctx, to, back, backlen);
- switch (r) {
- case idn_success:
- if (memcmp(back, from, sizeof(*from) * fromlen) != 0)
- r = idn_nomapping;
- break;
- case idn_invalid_encoding:
- case idn_buffer_overflow:
- r = idn_nomapping;
- break;
- default:
- break;
- }
-
- if (back != backbuf)
- free(back);
-
- if (r != idn_success) {
- TRACE(("round-trip check failed: %s\n",
- idn_result_tostring(r)));
- }
-
- return (r);
-}
-
-/*
- * Identity conversion (or, no conversion at all).
- */
-
-static idn_result_t
-converter_none_open(idn_converter_t ctx, void **privdata) {
- assert(ctx != NULL);
-
- return (idn_success);
-}
-
-static idn_result_t
-converter_none_close(idn_converter_t ctx, void *privdata) {
- assert(ctx != NULL);
-
- return (idn_success);
-}
-
-static idn_result_t
-converter_none_convfromucs4(idn_converter_t ctx, void *privdata,
- const unsigned long *from, char *to, size_t tolen) {
- assert(ctx != NULL && from != NULL && to != NULL);
-
- return idn_ucs4_ucs4toutf8(from, to, tolen);
-}
-
-static idn_result_t
-converter_none_convtoucs4(idn_converter_t ctx, void *privdata,
- const char *from, unsigned long *to, size_t tolen) {
- assert(ctx != NULL && from != NULL && to != NULL);
-
- return idn_ucs4_utf8toucs4(from, to, tolen);
-}
-
-#ifndef WITHOUT_ICONV
-
-/*
- * Conversion using iconv() interface.
- */
-
-static idn_result_t
-converter_iconv_openfromucs4(idn_converter_t ctx, void **privdata) {
- iconv_t *ictxp;
- idn_result_t r;
-
- assert(ctx != NULL);
-
- r = iconv_initialize_privdata(privdata);
- if (r != idn_success)
- return (r);
-
- ictxp = (iconv_t *)*privdata;
- *ictxp = iconv_open(ctx->local_encoding_name, IDN_UTF8_ENCODING_NAME);
- if (*ictxp == (iconv_t)(-1)) {
- free(*privdata);
- *privdata = NULL;
- switch (errno) {
- case ENOMEM:
- return (idn_nomemory);
- case EINVAL:
- return (idn_invalid_name);
- default:
- WARNING(("iconv_open failed with errno %d\n", errno));
- return (idn_failure);
- }
- }
-
- return (idn_success);
-}
-
-static idn_result_t
-converter_iconv_opentoucs4(idn_converter_t ctx, void **privdata) {
- iconv_t *ictxp;
- idn_result_t r;
-
- assert(ctx != NULL);
-
- r = iconv_initialize_privdata(privdata);
- if (r != idn_success)
- return (r);
-
- ictxp = (iconv_t *)*privdata + 1;
- *ictxp = iconv_open(IDN_UTF8_ENCODING_NAME, ctx->local_encoding_name);
- if (*ictxp == (iconv_t)(-1)) {
- free(*privdata);
- *privdata = NULL;
- switch (errno) {
- case ENOMEM:
- return (idn_nomemory);
- case EINVAL:
- return (idn_invalid_name);
- default:
- WARNING(("iconv_open failed with errno %d\n", errno));
- return (idn_failure);
- }
- }
-
- return (idn_success);
-}
-
-static idn_result_t
-iconv_initialize_privdata(void **privdata) {
- if (*privdata == NULL) {
- *privdata = malloc(sizeof(iconv_t) * 2);
- if (*privdata == NULL)
- return (idn_nomemory);
- *((iconv_t *)*privdata) = (iconv_t)(-1);
- *((iconv_t *)*privdata + 1) = (iconv_t)(-1);
- }
-
- return (idn_success);
-}
-
-static void
-iconv_finalize_privdata(void *privdata) {
- iconv_t *ictxp;
-
- if (privdata != NULL) {
- ictxp = (iconv_t *)privdata;
- if (*ictxp != (iconv_t)(-1))
- iconv_close(*ictxp);
-
- ictxp++;
- if (*ictxp != (iconv_t)(-1))
- iconv_close(*ictxp);
- free(privdata);
- }
-}
-
-static idn_result_t
-converter_iconv_close(idn_converter_t ctx, void *privdata) {
- assert(ctx != NULL);
-
- iconv_finalize_privdata(privdata);
-
- return (idn_success);
-}
-
-static idn_result_t
-converter_iconv_convfromucs4(idn_converter_t ctx, void *privdata,
- const unsigned long *from, char *to,
- size_t tolen) {
- iconv_t ictx;
- char *utf8 = NULL;
- size_t utf8size = 256; /* large enough */
- idn_result_t r;
- size_t sz;
- size_t inleft;
- size_t outleft;
- char *inbuf, *outbuf;
-
- assert(ctx != NULL && from != NULL && to != NULL);
-
- if (tolen <= 0) {
- r = idn_buffer_overflow; /* need space for NUL */
- goto ret;
- }
-
- /*
- * UCS4 -> UTF-8 conversion.
- */
- utf8 = (char *)malloc(utf8size);
- if (utf8 == NULL) {
- r = idn_nomemory;
- goto ret;
- }
-
-try_again:
- r = idn_ucs4_ucs4toutf8(from, utf8, utf8size);
- if (r == idn_buffer_overflow) {
- char *new_utf8;
-
- utf8size *= 2;
- new_utf8 = (char *)realloc(utf8, utf8size);
- if (new_utf8 == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- utf8 = new_utf8;
- goto try_again;
- } else if (r != idn_success) {
- goto ret;
- }
-
- ictx = ((iconv_t *)privdata)[0];
-
- /*
- * Reset internal state.
- *
- * The following code should work according to the SUSv2 spec,
- * but causes segmentation fault with Solaris 2.6.
- * So.. a work-around.
- *
- * (void)iconv(ictx, (const char **)NULL, (size_t *)NULL,
- * (char **)NULL, (size_t *)NULL);
- */
- inleft = 0;
- outbuf = NULL;
- outleft = 0;
- (void)iconv(ictx, (const char **)NULL, &inleft, &outbuf, &outleft);
-
- inleft = strlen(utf8);
- inbuf = utf8;
- outleft = tolen - 1; /* reserve space for terminating NUL */
- sz = iconv(ictx, (const char **)&inbuf, &inleft, &to, &outleft);
-
- if (sz == (size_t)(-1) || inleft > 0) {
- switch (errno) {
- case EILSEQ:
- case EINVAL:
- /*
- * We already checked the validity of the input
- * string. So we assume a mapping error.
- */
- r = idn_nomapping;
- goto ret;
- case E2BIG:
- r = idn_buffer_overflow;
- goto ret;
- default:
- WARNING(("iconv failed with errno %d\n", errno));
- r = idn_failure;
- goto ret;
- }
- }
-
- /*
- * For UTF-8 -> local conversion, append a sequence of
- * state reset.
- */
- inleft = 0;
- sz = iconv(ictx, (const char **)NULL, &inleft, &to, &outleft);
- if (sz == (size_t)(-1)) {
- switch (errno) {
- case EILSEQ:
- case EINVAL:
- r = idn_invalid_encoding;
- goto ret;
- case E2BIG:
- r = idn_buffer_overflow;
- goto ret;
- default:
- WARNING(("iconv failed with errno %d\n", errno));
- r = idn_failure;
- goto ret;
- }
- }
- *to = '\0';
- r = idn_success;
-
-ret:
- free(utf8);
- return (r);
-
-}
-
-static idn_result_t
-converter_iconv_convtoucs4(idn_converter_t ctx, void *privdata,
- const char *from, unsigned long *to, size_t tolen) {
- iconv_t ictx;
- char *utf8 = NULL;
- size_t utf8size = 256; /* large enough */
- idn_result_t r;
- size_t sz;
- size_t inleft;
- size_t outleft;
- const char *from_ptr;
- char *outbuf;
-
- assert(ctx != NULL && from != NULL && to != NULL);
-
- if (tolen <= 0) {
- r = idn_buffer_overflow; /* need space for NUL */
- goto ret;
- }
- ictx = ((iconv_t *)privdata)[1];
- utf8 = (char *)malloc(utf8size);
- if (utf8 == NULL) {
- r = idn_nomemory;
- goto ret;
- }
-
-try_again:
- /*
- * Reset internal state.
- */
- inleft = 0;
- outbuf = NULL;
- outleft = 0;
- (void)iconv(ictx, (const char **)NULL, &inleft, &outbuf, &outleft);
-
- from_ptr = from;
- inleft = strlen(from);
- outbuf = utf8;
- outleft = utf8size - 1; /* reserve space for terminating NUL */
- sz = iconv(ictx, (const char **)&from_ptr, &inleft, &outbuf, &outleft);
-
- if (sz == (size_t)(-1) || inleft > 0) {
- char *new_utf8;
-
- switch (errno) {
- case EILSEQ:
- case EINVAL:
- /*
- * We assume all the characters in the local
- * codeset are included in UCS. This means mapping
- * error is not possible, so the input string must
- * have some problem.
- */
- r = idn_invalid_encoding;
- goto ret;
- case E2BIG:
- utf8size *= 2;
- new_utf8 = (char *)realloc(utf8, utf8size);
- if (new_utf8 == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- utf8 = new_utf8;
- goto try_again;
- default:
- WARNING(("iconv failed with errno %d\n", errno));
- r = idn_failure;
- goto ret;
- }
- }
- *outbuf = '\0';
-
- /*
- * UTF-8 -> UCS4 conversion.
- */
- r = idn_ucs4_utf8toucs4(utf8, to, tolen);
-
-ret:
- free(utf8);
- return (r);
-}
-
-#endif /* !WITHOUT_ICONV */
-
-#ifdef DEBUG
-/*
- * Conversion to/from unicode escape string.
- * Arbitrary UCS-4 character can be specified by a special sequence
- * \u{XXXXXX}
- * where XXXXX denotes any hexadecimal string up to FFFFFFFF.
- * This is designed for debugging.
- */
-
-static idn_result_t
-converter_uescape_convfromucs4(idn_converter_t ctx, void *privdata,
- const unsigned long *from, char *to,
- size_t tolen) {
- idn_result_t r;
- unsigned long v;
-
- while (*from != '\0') {
- v = *from++;
-
- if (v <= 0x7f) {
- if (tolen < 1) {
- r = idn_buffer_overflow;
- goto failure;
- }
- *to++ = v;
- tolen--;
- } else if (v <= 0xffffffff) {
- char tmp[20];
- int len;
-
- (void)sprintf(tmp, "\\u{%lx}", v);
- len = strlen(tmp);
- if (tolen < len) {
- r = idn_buffer_overflow;
- goto failure;
- }
- (void)memcpy(to, tmp, len);
- to += len;
- tolen -= len;
- } else {
- r = idn_invalid_encoding;
- goto failure;
- }
- }
-
- if (tolen <= 0) {
- r = idn_buffer_overflow;
- goto failure;
- }
- *to = '\0';
-
- return (idn_success);
-
-failure:
- if (r != idn_buffer_overflow) {
- WARNING(("idn_uescape_convfromucs4(): %s\n",
- idn_result_tostring(r)));
- }
- return (r);
-}
-
-static idn_result_t
-converter_uescape_convtoucs4(idn_converter_t ctx, void *privdata,
- const char *from, unsigned long *to, size_t tolen)
-{
- idn_result_t r;
- size_t fromlen = strlen(from);
-
- while (*from != '\0') {
- if (tolen <= 0) {
- r = idn_buffer_overflow;
- goto failure;
- }
- if (strncmp(from, "\\u{", 3) == 0 ||
- strncmp(from, "\\U{", 3) == 0) {
- size_t ullen;
- unsigned long v;
- char *end;
-
- v = strtoul(from + 3, &end, 16);
- ullen = end - (from + 3);
- if (*end == '}' && ullen > 1 && ullen < 8) {
- *to = v;
- from = end + 1;
- fromlen -= ullen;
- } else {
- *to = '\\';
- from++;
- fromlen--;
- }
- } else {
- int c = *(unsigned char *)from;
- size_t width;
- char buf[8];
-
- if (c < 0x80)
- width = 1;
- else if (c < 0xc0)
- width = 0;
- else if (c < 0xe0)
- width = 2;
- else if (c < 0xf0)
- width = 3;
- else if (c < 0xf8)
- width = 4;
- else if (c < 0xfc)
- width = 5;
- else if (c < 0xfe)
- width = 6;
- else
- width = 0;
- if (width == 0 || width > fromlen) {
- r = idn_invalid_encoding;
- goto failure;
- }
-
- memcpy(buf, from, width);
- buf[width] = '\0';
- r = idn_ucs4_utf8toucs4(buf, to, tolen);
- if (r != idn_success) {
- r = idn_invalid_encoding;
- goto failure;
- }
- from += width;
- fromlen -= width;
- }
- to++;
- tolen--;
- }
-
- if (tolen <= 0) {
- r = idn_buffer_overflow;
- goto failure;
- }
- *to = '\0';
-
- return (idn_success);
-
-failure:
- if (r != idn_buffer_overflow) {
- WARNING(("idn_uescape_convtoucs4(): %s\n",
- idn_result_tostring(r)));
- }
- return (r);
-}
-
-#endif
diff --git a/contrib/idn/idnkit-1.0-src/lib/debug.c b/contrib/idn/idnkit-1.0-src/lib/debug.c
deleted file mode 100644
index 51037e9d..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/debug.c
+++ /dev/null
@@ -1,267 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: debug.c,v 1.1 2003/06/04 00:25:51 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2000,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <idn/debug.h>
-
-static char *hex = "0123456789abcdef";
-
-#define STRING_MAXBYTES 200
-#define STRING_NBUFS 4
-static char bufs[STRING_NBUFS][STRING_MAXBYTES + 16]; /* +16 for margin */
-static int bufno = 0;
-
-char *
-idn__debug_hexstring(const char *s, int maxbytes) {
- char *buf = bufs[bufno];
- char *p;
- int i;
-
- if (maxbytes > STRING_MAXBYTES)
- maxbytes = STRING_MAXBYTES;
-
- for (i = 0, p = buf; i < maxbytes; i += 3, s++) {
- int c = *(unsigned char *)s;
-
- if (c == '\0')
- break;
- *p++ = hex[c >> 4];
- *p++ = hex[c & 15];
- *p++ = ' ';
- }
-
- if (i >= maxbytes)
- strcpy(p, "...");
- else
- *p = '\0';
-
- bufno = (bufno + 1) % STRING_NBUFS;
- return (buf);
-}
-
-char *
-idn__debug_xstring(const char *s, int maxbytes) {
- char *buf = bufs[bufno];
- char *p;
- int i;
-
- if (maxbytes > STRING_MAXBYTES)
- maxbytes = STRING_MAXBYTES;
-
- i = 0;
- p = buf;
- while (i < maxbytes) {
- int c = *(unsigned char *)s;
-
- if (c == '\0') {
- break;
- } else if (0x20 <= c && c <= 0x7e) {
- *p++ = c;
- i++;
- } else {
- *p++ = '\\';
- *p++ = 'x';
- *p++ = hex[c >> 4];
- *p++ = hex[c & 15];
- i += 4;
- }
- s++;
- }
-
- if (i >= maxbytes)
- strcpy(p, "...");
- else
- *p = '\0';
-
- bufno = (bufno + 1) % STRING_NBUFS;
- return (buf);
-}
-
-char *
-idn__debug_ucs4xstring(const unsigned long *s, int maxbytes) {
- char *buf = bufs[bufno];
- char *p;
- int i;
-
- if (maxbytes > STRING_MAXBYTES)
- maxbytes = STRING_MAXBYTES;
-
- i = 0;
- p = buf;
- while (i < maxbytes) {
- if (*s == '\0') {
- break;
- } else if (0x20 <= *s && *s <= 0x7e) {
- *p++ = *s;
- i++;
- } else {
- *p++ = '\\';
- *p++ = 'x';
- i += 2;
- if (*s >= 0x1000000UL) {
- *p++ = hex[(*s >> 28) & 0x0f];
- *p++ = hex[(*s >> 24) & 0x0f];
- i += 2;
- }
- if (*s >= 0x10000UL) {
- *p++ = hex[(*s >> 20) & 0x0f];
- *p++ = hex[(*s >> 16) & 0x0f];
- i += 2;
- }
- if (*s >= 0x100UL) {
- *p++ = hex[(*s >> 12) & 0x0f];
- *p++ = hex[(*s >> 8) & 0x0f];
- i += 2;
- }
- *p++ = hex[(*s >> 4) & 0x0f];
- *p++ = hex[ *s & 0x0f];
- i += 2;
- }
- s++;
- }
-
- if (i >= maxbytes)
- strcpy(p, "...");
- else
- *p = '\0';
-
- bufno = (bufno + 1) % STRING_NBUFS;
- return (buf);
-}
-
-char *
-idn__debug_utf16xstring(const unsigned short *s, int maxbytes) {
- char *buf = bufs[bufno];
- char *p;
- int i;
-
- if (maxbytes > STRING_MAXBYTES)
- maxbytes = STRING_MAXBYTES;
-
- i = 0;
- p = buf;
- while (i < maxbytes) {
- if (*s == '\0') {
- break;
- } else if (0x20 <= *s && *s <= 0x7e) {
- *p++ = *s;
- i++;
- } else {
- *p++ = '\\';
- *p++ = 'x';
- *p++ = hex[(*s >> 12) & 0x0f];
- *p++ = hex[(*s >> 8) & 0x0f];
- *p++ = hex[(*s >> 4) & 0x0f];
- *p++ = hex[ *s & 0x0f];
- i += 6;
- }
- s++;
- }
-
- if (i >= maxbytes)
- strcpy(p, "...");
- else
- *p = '\0';
-
- bufno = (bufno + 1) % STRING_NBUFS;
- return (buf);
-}
-
-char *
-idn__debug_hexdata(const char *s, int length, int maxbytes) {
- char *buf = bufs[bufno];
- char *p;
- int i;
-
- if (maxbytes > STRING_MAXBYTES)
- maxbytes = STRING_MAXBYTES;
-
- i = 0;
- p = buf;
- while (length > 0 && i < maxbytes) {
- int c = *(const unsigned char *)s;
-
- *p++ = hex[c >> 4];
- *p++ = hex[c & 15];
- *p++ = ' ';
- i += 3;
- length--;
- s++;
- }
-
- if (i >= maxbytes)
- strcpy(p, "...");
- else
- *p = '\0';
-
- bufno = (bufno + 1) % STRING_NBUFS;
- return (buf);
-}
-
-void
-idn__debug_hexdump(const char *s, int length) {
- int i;
- const unsigned char *p = (const unsigned char *)s;
-
- i = 0;
- while (length-- > 0) {
- if (i % 16 == 0) {
- if (i > 0)
- fprintf(stderr, "\n");
- fprintf(stderr, "%4x:", i);
- }
- fprintf(stderr, " %02x", p[i]);
- i++;
- }
- fprintf(stderr, "\n");
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/delimitermap.c b/contrib/idn/idnkit-1.0-src/lib/delimitermap.c
deleted file mode 100644
index a54142b0..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/delimitermap.c
+++ /dev/null
@@ -1,268 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: delimitermap.c,v 1.1 2003/06/04 00:25:52 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2001,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <idn/result.h>
-#include <idn/assert.h>
-#include <idn/logmacro.h>
-#include <idn/delimitermap.h>
-#include <idn/util.h>
-#include <idn/debug.h>
-#include <idn/ucs4.h>
-
-/*
- * Mapper object type.
- */
-struct idn_delimitermap {
- int ndelimiters;
- int delimiter_size;
- unsigned long *delimiters;
- int reference_count;
-};
-
-#define DELIMITERMAP_INITIAL_DELIMITER_SIZE 4
-#define UNICODE_MAX 0x10ffff
-#define IS_SURROGATE_HIGH(v) (0xd800 <= (v) && (v) <= 0xdbff)
-#define IS_SURROGATE_LOW(v) (0xdc00 <= (v) && (v) <= 0xdfff)
-
-idn_result_t
-idn_delimitermap_create(idn_delimitermap_t *ctxp) {
- idn_delimitermap_t ctx = NULL;
- idn_result_t r;
-
- assert(ctxp != NULL);
- TRACE(("idn_delimitermap_create()\n"));
-
- ctx = (idn_delimitermap_t) malloc(sizeof(struct idn_delimitermap));
- if (ctx == NULL) {
- WARNING(("idn_mapper_create: malloc failed\n"));
- r = idn_nomemory;
- goto ret;
- }
-
- ctx->delimiters = (unsigned long *) malloc(sizeof(unsigned long)
- * DELIMITERMAP_INITIAL_DELIMITER_SIZE);
- if (ctx->delimiters == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- ctx->ndelimiters = 0;
- ctx->delimiter_size = DELIMITERMAP_INITIAL_DELIMITER_SIZE;
- ctx->reference_count = 1;
- *ctxp = ctx;
- r = idn_success;
-
-ret:
- if (r != idn_success)
- free(ctx);
- TRACE(("idn_delimitermap_create(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-void
-idn_delimitermap_destroy(idn_delimitermap_t ctx) {
- assert(ctx != NULL);
-
- TRACE(("idn_delimitermap_destroy()\n"));
-
- ctx->reference_count--;
- if (ctx->reference_count <= 0) {
- TRACE(("idn_mapper_destroy(): the object is destroyed\n"));
- free(ctx->delimiters);
- free(ctx);
- } else {
- TRACE(("idn_delimitermap_destroy(): "
- "update reference count (%d->%d)\n",
- ctx->reference_count + 1, ctx->reference_count));
- }
-}
-
-void
-idn_delimitermap_incrref(idn_delimitermap_t ctx) {
- assert(ctx != NULL);
-
- TRACE(("idn_delimitermap_incrref()\n"));
- TRACE(("idn_delimitermap_incrref: update reference count (%d->%d)\n",
- ctx->reference_count, ctx->reference_count + 1));
-
- ctx->reference_count++;
-}
-
-idn_result_t
-idn_delimitermap_add(idn_delimitermap_t ctx, unsigned long delimiter) {
- idn_result_t r;
-
- assert(ctx != NULL && ctx->ndelimiters <= ctx->delimiter_size);
- TRACE(("idn_delimitermap_add(delimiter=\\x%04lx)\n", delimiter));
-
- if (delimiter == 0 || delimiter > UNICODE_MAX ||
- IS_SURROGATE_HIGH(delimiter) || IS_SURROGATE_LOW(delimiter)) {
- r = idn_invalid_codepoint;
- goto ret;
- }
-
- if (ctx->ndelimiters == ctx->delimiter_size) {
- unsigned long *new_delimiters;
-
- new_delimiters = (unsigned long *) realloc(ctx->delimiters,
- sizeof(unsigned long) * ctx->delimiter_size * 2);
- if (new_delimiters == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- ctx->delimiters = new_delimiters;
- ctx->delimiter_size *= 2;
- }
-
- ctx->delimiters[ctx->ndelimiters] = delimiter;
- ctx->ndelimiters++;
- r = idn_success;
-
-ret:
- TRACE(("idn_delimitermap_add(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-idn_result_t
-idn_delimitermap_addall(idn_delimitermap_t ctx, unsigned long *delimiters,
- int ndelimiters) {
- idn_result_t r;
- int i;
-
- assert(ctx != NULL && delimiters != NULL);
-
- TRACE(("idn_delimitermap_addall(ndelimiters=%d)\n", ndelimiters));
-
- for (i = 0; i < ndelimiters; i++) {
- r = idn_delimitermap_add(ctx, *delimiters);
- if (r != idn_success)
- goto ret;
- delimiters++;
- }
-
- r = idn_success;
-ret:
- TRACE(("idn_delimitermap_addall(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-idn_result_t
-idn_delimitermap_map(idn_delimitermap_t ctx, const unsigned long *from,
- unsigned long *to, size_t tolen) {
-
- /* default delimiters (label separators) from IDNA specification */
- static const unsigned long default_delimiters[] =
- { 0x002e, /* full stop */
- 0x3002, /* ideographic full stop */
- 0xff0e, /* fullwidth full stop */
- 0xff61, /* halfwidth ideographic full stop */
- 0x0000 };
-
- unsigned long *to_org = to;
- idn_result_t r;
- int i, j;
- int found;
-
- assert(ctx != NULL && from != NULL && to != NULL);
-
- TRACE(("idn_delimitermap_map(from=\"%s\", tolen=%d)\n",
- idn__debug_ucs4xstring(from, 50), (int)tolen));
-
- /*
- * Map.
- */
- while (*from != '\0') {
- found = 0;
- if (tolen < 1) {
- r = idn_buffer_overflow;
- goto ret;
- }
- for (j = 0; default_delimiters[j] != 0x0000; j++) {
- if (default_delimiters[j] == *from) {
- found = 1;
- break;
- }
- }
- if (!found) {
- for (i = 0; i < ctx->ndelimiters; i++) {
- if (ctx->delimiters[i] == *from) {
- found = 1;
- break;
- }
- }
- }
- if (found)
- *to = '.';
- else
- *to = *from;
- from++;
- to++;
- tolen--;
- }
-
- if (tolen < 1) {
- r = idn_buffer_overflow;
- goto ret;
- }
- *to = '\0';
- r = idn_success;
-
-ret:
- if (r == idn_success) {
- TRACE(("idn_delimitermap_map(): success (to=\"%s\")\n",
- idn__debug_ucs4xstring(to_org, 50)));
- } else {
- TRACE(("idn_delimitermap_map(): %s\n",
- idn_result_tostring(r)));
- }
- return (r);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/filechecker.c b/contrib/idn/idnkit-1.0-src/lib/filechecker.c
deleted file mode 100644
index 507c9315..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/filechecker.c
+++ /dev/null
@@ -1,261 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: filechecker.c,v 1.1 2003/06/04 00:25:52 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2001,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <idn/result.h>
-#include <idn/assert.h>
-#include <idn/log.h>
-#include <idn/logmacro.h>
-#include <idn/ucsset.h>
-#include <idn/filechecker.h>
-#include <idn/debug.h>
-
-#define SUPPORT_VERSIONING
-
-struct idn__filechecker {
- idn_ucsset_t set;
-};
-
-static idn_result_t read_file(const char *file, FILE *fp,
- idn_ucsset_t set);
-static int get_range(char *s, unsigned long *ucs1,
- unsigned long *ucs2);
-static char *get_ucs(char *p, unsigned long *vp);
-
-
-idn_result_t
-idn__filechecker_create(const char *file, idn__filechecker_t *ctxp) {
- FILE *fp;
- idn__filechecker_t ctx;
- idn_result_t r;
-
- assert(file != NULL && ctxp != NULL);
-
- TRACE(("idn__filechecker_create(file=\"%-.100s\")\n", file));
-
- if ((fp = fopen(file, "r")) == NULL) {
- WARNING(("idn__filechecker_create: cannot open %-.100s\n",
- file));
- return (idn_nofile);
- }
-
- if ((ctx = malloc(sizeof(struct idn__filechecker))) == NULL)
- return (idn_nomemory);
-
- if ((r = idn_ucsset_create(&ctx->set)) != idn_success) {
- free(ctx);
- return (r);
- }
-
- r = read_file(file, fp, ctx->set);
- fclose(fp);
-
- if (r == idn_success) {
- idn_ucsset_fix(ctx->set);
- *ctxp = ctx;
- } else {
- idn_ucsset_destroy(ctx->set);
- free(ctx);
- }
- return (r);
-}
-
-void
-idn__filechecker_destroy(idn__filechecker_t ctx) {
- assert(ctx != NULL);
-
- TRACE(("idn__filechecker_destroy()\n"));
-
- idn_ucsset_destroy(ctx->set);
- free(ctx);
-}
-
-idn_result_t
-idn__filechecker_lookup(idn__filechecker_t ctx, const unsigned long *str,
- const unsigned long **found) {
- idn_result_t r = idn_success;
-
- assert(ctx != NULL && str != NULL);
-
- TRACE(("idn__filechecker_lookup(str=\"%s\")\n",
- idn__debug_ucs4xstring(str, 50)));
-
- while (*str != '\0') {
- int exists;
-
- r = idn_ucsset_lookup(ctx->set, *str, &exists);
-
- if (r != idn_success) {
- return (r);
- } else if (exists) {
- /* Found. */
- *found = str;
- return (idn_success);
- }
- str++;
- }
- *found = NULL;
- return (idn_success);
-}
-
-static idn_result_t
-read_file(const char *file, FILE *fp, idn_ucsset_t set) {
- char line[256];
- idn_result_t r;
- int lineno = 0;
-
- while (fgets(line, sizeof(line), fp) != NULL) {
- char *p = line;
- unsigned long ucs1, ucs2;
-
- lineno++;
- while (isspace((unsigned char)*p))
- p++;
- if (*p == '\0' || *p == '#')
- continue;
-
-#ifdef SUPPORT_VERSIONING
- /* Skip version tag. */
- if (lineno == 1 && strncmp("version=", line, 8) == 0)
- continue;
-#endif
- if (!get_range(p, &ucs1, &ucs2)) {
- WARNING(("syntax error in file \"%-.100s\" line %d: "
- "%-.100s", file, lineno, line));
- return (idn_invalid_syntax);
- }
- if ((r = idn_ucsset_addrange(set, ucs1, ucs2)) != idn_success)
- return (r);
- }
- return (idn_success);
-}
-
-static int
-get_range(char *s, unsigned long *ucs1, unsigned long *ucs2) {
- if ((s = get_ucs(s, ucs1)) == NULL)
- return (0);
- *ucs2 = *ucs1;
-
- switch (s[0]) {
- case '\0':
- case '\n':
- case '#':
- case ';':
- return (1);
- case '-':
- break;
- default:
- return (0);
- }
-
- if ((s = get_ucs(s + 1, ucs2)) == NULL)
- return (0);
-
- if (*ucs1 > *ucs2) {
- INFO(("idn__filechecker_create: invalid range spec "
- "U+%X-U+%X\n", *ucs1, *ucs2));
- return (0);
- }
-
- switch (s[0]) {
- case '\0':
- case '\n':
- case '#':
- case ';':
- return (1);
- default:
- return (0);
- }
-}
-
-
-static char *
-get_ucs(char *p, unsigned long *vp) {
- char *end;
-
- /* Skip leading space */
- while (isspace((unsigned char)*p))
- p++;
-
- /* Skip optional 'U+' */
- if (strncmp(p, "U+", 2) == 0)
- p += 2;
-
- *vp = strtoul(p, &end, 16);
- if (end == p) {
- INFO(("idn__filechecker_create: UCS code point expected\n"));
- return (NULL);
- }
- p = end;
-
- /* Skip trailing space */
- while (isspace((unsigned char)*p))
- p++;
- return p;
-}
-
-idn_result_t
-idn__filechecker_createproc(const char *parameter, void **ctxp) {
- return idn__filechecker_create(parameter, (idn__filechecker_t *)ctxp);
-}
-
-void
-idn__filechecker_destroyproc(void *ctxp) {
- idn__filechecker_destroy((idn__filechecker_t)ctxp);
-}
-
-idn_result_t
-idn__filechecker_lookupproc(void *ctx, const unsigned long *str,
- const unsigned long **found) {
- return idn__filechecker_lookup((idn__filechecker_t)ctx, str, found);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/filemapper.c b/contrib/idn/idnkit-1.0-src/lib/filemapper.c
deleted file mode 100644
index 1b752197..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/filemapper.c
+++ /dev/null
@@ -1,347 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: filemapper.c,v 1.1 2003/06/04 00:25:53 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2001,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <idn/result.h>
-#include <idn/assert.h>
-#include <idn/log.h>
-#include <idn/logmacro.h>
-#include <idn/debug.h>
-#include <idn/ucs4.h>
-#include <idn/ucsmap.h>
-#include <idn/filemapper.h>
-
-#define SUPPORT_VERSIONING
-
-#define UCSBUF_LOCAL_SIZE 20
-
-typedef struct ucsbuf {
- unsigned long *ucs;
- size_t size;
- size_t len;
- unsigned long local[UCSBUF_LOCAL_SIZE];
-} ucsbuf_t;
-
-struct idn__filemapper {
- idn_ucsmap_t map;
-};
-
-static void ucsbuf_init(ucsbuf_t *b);
-static idn_result_t ucsbuf_grow(ucsbuf_t *b);
-static idn_result_t ucsbuf_append(ucsbuf_t *b, unsigned long v);
-static void ucsbuf_free(ucsbuf_t *b);
-static idn_result_t read_file(const char *file, FILE *fp,
- idn_ucsmap_t map);
-static idn_result_t get_map(char *p, ucsbuf_t *b);
-static char *get_ucs(char *p, unsigned long *vp);
-
-
-idn_result_t
-idn__filemapper_create(const char *file, idn__filemapper_t *ctxp) {
- FILE *fp;
- idn__filemapper_t ctx;
- idn_result_t r;
-
- assert(file != NULL && ctxp != NULL);
-
- TRACE(("idn__filemapper_create(file=\"%-.100s\")\n", file));
-
- if ((fp = fopen(file, "r")) == NULL) {
- WARNING(("idn__filemapper_create: cannot open %-.100s\n",
- file));
- return (idn_nofile);
- }
- if ((ctx = malloc(sizeof(struct idn__filemapper))) == NULL)
- return (idn_nomemory);
-
- if ((r = idn_ucsmap_create(&ctx->map)) != idn_success) {
- free(ctx);
- return (r);
- }
-
- r = read_file(file, fp, ctx->map);
- fclose(fp);
-
- if (r == idn_success) {
- idn_ucsmap_fix(ctx->map);
- *ctxp = ctx;
- } else {
- idn_ucsmap_destroy(ctx->map);
- free(ctx);
- }
- return (r);
-}
-
-void
-idn__filemapper_destroy(idn__filemapper_t ctx) {
-
- assert(ctx != NULL);
-
- TRACE(("idn__filemapper_destroy()\n"));
-
- idn_ucsmap_destroy(ctx->map);
- free(ctx);
-}
-
-idn_result_t
-idn__filemapper_map(idn__filemapper_t ctx, const unsigned long *from,
- unsigned long *to, size_t tolen)
-{
- idn_result_t r = idn_success;
- ucsbuf_t ub;
-
- assert(ctx != NULL && from != NULL && to != NULL);
-
- TRACE(("idn__filemapper_map(from=\"%s\")\n",
- idn__debug_ucs4xstring(from, 50)));
-
- /* Initialize temporary buffer. */
- ucsbuf_init(&ub);
-
- while (*from != '\0') {
- /* Try mapping. */
- r = idn_ucsmap_map(ctx->map, *from, ub.ucs, ub.size, &ub.len);
- switch (r) {
- case idn_buffer_overflow:
- /* Temporary buffer too small. Enlarge and retry. */
- if ((r = ucsbuf_grow(&ub)) != idn_success)
- break;
- continue;
- case idn_nomapping:
- /* There is no mapping. */
- r = idn_success;
- /* fallthrough */
- case idn_success:
- if (tolen < ub.len) {
- r = idn_buffer_overflow;
- goto ret;
- }
- memcpy(to, ub.ucs, sizeof(*to) * ub.len);
- to += ub.len;
- tolen -= ub.len;
- break;
- default:
- goto ret;
- }
- from++;
- }
-
- ret:
- ucsbuf_free(&ub);
-
- if (r == idn_success) {
- /* Terminate with NUL. */
- if (tolen == 0)
- return (idn_buffer_overflow);
- *to = '\0';
- }
-
- return (r);
-}
-
-static void
-ucsbuf_init(ucsbuf_t *b) {
- b->ucs = b->local;
- b->size = UCSBUF_LOCAL_SIZE;
- b->len = 0;
-}
-
-static idn_result_t
-ucsbuf_grow(ucsbuf_t *b) {
- unsigned long *newbuf;
-
- b->size *= 2;
- if (b->ucs == b->local) {
- b->ucs = malloc(sizeof(unsigned long) * b->size);
- if (b->ucs == NULL)
- return (idn_nomemory);
- memcpy(b->ucs, b->local, sizeof(b->local));
- } else {
- newbuf = realloc(b->ucs, sizeof(unsigned long) * b->size);
- if (newbuf == NULL)
- return (idn_nomemory);
- b->ucs = newbuf;
- }
- return (idn_success);
-}
-
-static idn_result_t
-ucsbuf_append(ucsbuf_t *b, unsigned long v) {
- idn_result_t r;
-
- if (b->len + 1 > b->size) {
- r = ucsbuf_grow(b);
- if (r != idn_success)
- return (r);
- }
- b->ucs[b->len++] = v;
- return (idn_success);
-}
-
-static void
-ucsbuf_free(ucsbuf_t *b) {
- if (b->ucs != b->local && b->ucs != NULL)
- free(b->ucs);
-}
-
-static idn_result_t
-read_file(const char *file, FILE *fp, idn_ucsmap_t map) {
- char line[1024];
- ucsbuf_t ub;
- idn_result_t r = idn_success;
- int lineno = 0;
-
- ucsbuf_init(&ub);
-
- while (fgets(line, sizeof(line), fp) != NULL) {
- char *p = line;
-
- lineno++;
- while (isspace((unsigned char)*p))
- p++;
- if (*p == '\0' || *p == '#')
- continue;
-#ifdef SUPPORT_VERSIONING
- /* Skip version tag. */
- if (lineno == 1 && strncmp("version=", line, 8) == 0)
- continue;
-#endif
- again:
- ub.len = 0;
- r = get_map(p, &ub);
- switch (r) {
- case idn_success:
- r = idn_ucsmap_add(map, ub.ucs[0],
- &ub.ucs[1], ub.len - 1);
- break;
- case idn_buffer_overflow:
- if ((r = ucsbuf_grow(&ub)) != idn_success)
- break;
- goto again;
- case idn_invalid_syntax:
- WARNING(("syntax error in file \"%-.100s\" line %d: "
- "%-.100s", file, lineno, line));
- /* fall through */
- default:
- ucsbuf_free(&ub);
- return (r);
- }
- }
- ucsbuf_free(&ub);
- return (r);
-}
-
-static idn_result_t
-get_map(char *p, ucsbuf_t *b) {
- unsigned long v;
- idn_result_t r = idn_success;
-
- for (;;) {
- if ((p = get_ucs(p, &v)) == NULL)
- return (idn_invalid_syntax);
- if ((r = ucsbuf_append(b, v)) != idn_success)
- return (r);
- if (b->len == 1) {
- if (*p != ';')
- return (idn_invalid_syntax);
- p++;
- while (isspace((unsigned char)*p))
- p++;
- }
-
- if (*p == ';' || *p == '#' || *p == '\0')
- return (r);
- }
- return (r);
-}
-
-static char *
-get_ucs(char *p, unsigned long *vp) {
- char *end;
-
- /* Skip leading space */
- while (isspace((unsigned char)*p))
- p++;
-
- /* Skip optional 'U+' */
- if (strncmp(p, "U+", 2) == 0)
- p += 2;
-
- *vp = strtoul(p, &end, 16);
- if (end == p) {
- INFO(("idn__filemapper_create: UCS code point expected\n"));
- return (NULL);
- }
- p = end;
-
- /* Skip trailing space */
- while (isspace((unsigned char)*p))
- p++;
- return p;
-}
-
-idn_result_t
-idn__filemapper_createproc(const char *parameter, void **ctxp) {
- return idn__filemapper_create(parameter, (idn__filemapper_t *)ctxp);
-}
-
-void
-idn__filemapper_destroyproc(void *ctxp) {
- idn__filemapper_destroy((idn__filemapper_t)ctxp);
-}
-
-idn_result_t
-idn__filemapper_mapproc(void *ctx, const unsigned long *from,
- unsigned long *to, size_t tolen) {
- return idn__filemapper_map((idn__filemapper_t)ctx, from, to, tolen);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/idn.conf.sample.in b/contrib/idn/idnkit-1.0-src/lib/idn.conf.sample.in
deleted file mode 100644
index 11108607..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/idn.conf.sample.in
+++ /dev/null
@@ -1,61 +0,0 @@
-# $Id: idn.conf.sample.in,v 1.1 2003/06/04 00:26:45 marka Exp $
-#
-# Sample file for idnkit configuration file (idn.conf).
-#
-
-#
-# `idn-encoding' entry specifies the encoding name used as the encoding
-# of multilingualized names by resolvers and DNS servers. Currently, the
-# following encodings are available:
-#
-# Punycode
-# UTF-8
-# <codeset names your iconv_open() accepts>
-#
-# If you enabled extra ace feature, following IDN encoding can be used.
-#
-# AMC-ACE-Z (old name of Punycode)
-# RACE
-#
-# syntax)
-# idn-encoding <encoding>
-#
-idn-encoding Punycode
-
-#
-# `nameprep' entry specifies the version of NAMEPREP.
-# idnkit currently supports the following version:
-#
-# RFC3491 -- name preparation scheme described in the
-# RFC3491
-#
-# syntax)
-# nameprep <nameprep version>
-#
-nameprep RFC3491
-
-#
-# `local-map' entry specifies TLD (top level domain) based local mapping
-# schemes, which is performed before NAMEPREP. Available schemes are:
-#
-# <nameprep version> -- nameprep version
-# filemap:<pathname> -- read mapping rules from a file
-#
-# syntax)
-# local-map <tld> <scheme> ...
-#
-# If the TLD of the domain name matches <tld>, local mapping specified
-# by <scheme> is performed on the name. Otherwise no mapping are
-# performed. Multiple schemes can be specified; they are applied in
-# turn.
-#
-# There are two special <tld>s for specifying a default mapping rule
-# and a mapping rule for local names (domain names containing no
-# dots). If <tld> is `.', its schemes are applied to domain names
-# whose TLD does not match any TLDs specified in local-map entries.
-# If <tld> is `-', its schemes are applied to domain names which
-# contain no dots.
-#
-#local-map - filemap:/some/where/local.map
-#local-map . filemap:/some/where/default.map
-local-map .jp filemap:@mapdir@/jp.map
diff --git a/contrib/idn/idnkit-1.0-src/lib/localencoding.c b/contrib/idn/idnkit-1.0-src/lib/localencoding.c
deleted file mode 100644
index f713d3cb..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/localencoding.c
+++ /dev/null
@@ -1,123 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: localencoding.c,v 1.1 2003/06/04 00:25:53 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#ifdef WIN32
-#include <windows.h>
-#endif
-#include <stddef.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#ifdef HAVE_LOCALE_H
-#include <locale.h>
-#endif
-#ifdef HAVE_LANGINFO_H
-#include <langinfo.h>
-#endif
-
-#include <idn/logmacro.h>
-#include <idn/localencoding.h>
-#include <idn/debug.h>
-
-#ifdef ENABLE_MDNKIT_COMPAT
-#include <mdn/localencoding.h>
-#endif
-
-const char *
-idn_localencoding_name(void) {
- char *name;
-
- TRACE(("idn_localencoding_name()\n"));
-
- if ((name = getenv(IDN_LOCALCS_ENV)) != NULL) {
- TRACE(("local encoding=\"%-.30s\"\n",
- name == NULL ? "<null>" : name));
- return (name);
- }
-#ifdef ENABLE_MDNKIT_COMPAT
- if ((name = getenv(MDN_LOCALCS_ENV)) != NULL) {
- TRACE(("local encoding=\"%-.30s\"\n",
- name == NULL ? "<null>" : name));
- return (name);
- }
-#endif
-
-#ifdef WIN32
- {
- static char cp_str[40]; /* enough */
- (void)sprintf(cp_str, "CP%u", GetACP());
- TRACE(("local encoding(codepage)=\"%-.30s\"\n", cp_str));
- return (cp_str);
- }
-#else /* WIN32 */
-#ifdef HAVE_LIBCHARSET
- name = locale_charset();
- TRACE(("local encoding=\"%-.30s\"\n",
- name == NULL ? "<null>" : name));
- return (name);
-#endif
-
-#if defined(HAVE_NL_LANGINFO) && defined(CODESET)
- if ((name = nl_langinfo(CODESET)) != NULL) {
- TRACE(("local encoding=\"%-.30s\"\n",
- name == NULL ? "<null>" : name));
- return (name);
- }
-#endif
- (void)(
-#ifdef HAVE_SETLOCALE
- (name = setlocale(LC_CTYPE, NULL)) ||
-#endif
- (name = getenv("LC_ALL")) ||
- (name = getenv("LC_CTYPE")) ||
- (name = getenv("LANG")));
- TRACE(("local encoding=\"%-.30s\"\n", name == NULL ? "<null>" : name));
- return (name);
-#endif /* WIN32 */
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/log.c b/contrib/idn/idnkit-1.0-src/lib/log.c
deleted file mode 100644
index 2b7c24e9..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/log.c
+++ /dev/null
@@ -1,215 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: log.c,v 1.1 2003/06/04 00:25:53 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <idn/log.h>
-
-#define LOGLEVEL_ENV "IDN_LOG_LEVEL"
-
-#ifdef DEBUG
-#define DEFAULT_LOG_LEVEL idn_log_level_info
-#else
-#define DEFAULT_LOG_LEVEL idn_log_level_error
-#endif
-
-static int log_level = -1;
-static idn_log_proc_t log_proc;
-
-static void initialize(void);
-static void log(int level, const char *fmt, va_list args);
-static void log_to_stderr(int level, const char *buf);
-
-void
-idn_log_fatal(const char *fmt, ...) {
- va_list args;
-
- va_start(args, fmt);
- log(idn_log_level_fatal, fmt, args);
- va_end(args);
- exit(1);
-}
-
-void
-idn_log_error(const char *fmt, ...) {
- va_list args;
-
- va_start(args, fmt);
- log(idn_log_level_error, fmt, args);
- va_end(args);
-}
-
-void
-idn_log_warning(const char *fmt, ...) {
- va_list args;
-
- va_start(args, fmt);
- log(idn_log_level_warning, fmt, args);
- va_end(args);
-}
-
-void
-idn_log_info(const char *fmt, ...) {
- va_list args;
-
- va_start(args, fmt);
- log(idn_log_level_info, fmt, args);
- va_end(args);
-}
-
-void
-idn_log_trace(const char *fmt, ...) {
- va_list args;
-
- va_start(args, fmt);
- log(idn_log_level_trace, fmt, args);
- va_end(args);
-}
-
-void
-idn_log_dump(const char *fmt, ...) {
- va_list args;
-
- va_start(args, fmt);
- log(idn_log_level_dump, fmt, args);
- va_end(args);
-}
-
-void
-idn_log_setlevel(int level) {
- if (level >= 0)
- log_level = level;
-}
-
-int
-idn_log_getlevel(void) {
- if (log_level < 0)
- initialize();
- return log_level;
-}
-
-void
-idn_log_setproc(idn_log_proc_t proc) {
- if (proc == NULL)
- log_proc = log_to_stderr;
- else
- log_proc = proc;
-}
-
-static void
-initialize(void) {
- char *s;
-
- if (log_level < 0) {
- if ((s = getenv(LOGLEVEL_ENV)) != NULL) {
- int level = atoi(s);
- if (level >= 0)
- log_level = level;
- }
- if (log_level < 0)
- log_level = DEFAULT_LOG_LEVEL;
- }
-
- if (log_proc == NULL)
- log_proc = log_to_stderr;
-}
-
-static void
-log(int level, const char *fmt, va_list args) {
- char buf[1024];
-
- initialize();
-
- if (log_level < level)
- return;
-
-#if HAVE_VSNPRINTF
- (void)vsnprintf(buf, sizeof(buf), fmt, args);
-#else
- /* Let's hope 1024 is enough.. */
- (void)vsprintf(buf, fmt, args);
-#endif
- (*log_proc)(level, buf);
-}
-
-static void
-log_to_stderr(int level, const char *buf) {
- char *title;
- char tmp[20];
-
- switch (level) {
- case idn_log_level_fatal:
- title = "FATAL";
- break;
- case idn_log_level_error:
- title = "ERROR";
- break;
- case idn_log_level_warning:
- title = "WARNING";
- break;
- case idn_log_level_info:
- title = "INFO";
- break;
- case idn_log_level_trace:
- title = "TRACE";
- break;
- case idn_log_level_dump:
- title = "DUMP";
- break;
- default:
- (void)sprintf(tmp, "LEVEL%d", level);
- title = tmp;
- break;
- }
- fprintf(stderr, "%u: [%s] %s", (unsigned int)getpid(), title, buf);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/make.wnt b/contrib/idn/idnkit-1.0-src/lib/make.wnt
deleted file mode 100644
index b006306f..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/make.wnt
+++ /dev/null
@@ -1,279 +0,0 @@
-# $Id: make.wnt,v 1.1 2003/06/04 00:25:54 marka Exp $
-# Makefile for MDN library, manually configured for WIN-NT (VC5.0)
-#
-# Copyright (c) 2000,2002 Japan Network Information Center. All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-!include <ntwin32.mak>
-
-INCDIR = ..\include
-ICONVDIR = ..\win
-LIBS = $(ICONVDIR)\iconv.lib
-LIBS_LITE =
-SYSLIBS = $(conlibsdll)
-
-#
-# Files to build MDN library
-#
-
-HDRS_LITE = \
- $(INCDIR)\config.h \
- $(INCDIR)\idn\aliaslist.h \
- $(INCDIR)\idn\api.h \
- $(INCDIR)\idn\assert.h \
- $(INCDIR)\idn\checker.h \
- $(INCDIR)\idn\converter.h \
- $(INCDIR)\idn\debug.h \
- $(INCDIR)\idn\delimitermap.h \
- $(INCDIR)\idn\export.h \
- $(INCDIR)\idn\filechecker.h \
- $(INCDIR)\idn\filemapper.h \
- $(INCDIR)\idn\localencoding.h \
- $(INCDIR)\idn\log.h \
- $(INCDIR)\idn\logmacro.h \
- $(INCDIR)\idn\mapper.h \
- $(INCDIR)\idn\mapselector.h \
- $(INCDIR)\idn\nameprep.h \
- $(INCDIR)\idn\normalizer.h \
- $(INCDIR)\idn\punycode.h \
- $(INCDIR)\idn\race.h \
- $(INCDIR)\idn\res.h \
- $(INCDIR)\idn\resconf.h \
- $(INCDIR)\idn\result.h \
- $(INCDIR)\idn\strhash.h \
- $(INCDIR)\idn\ucs4.h \
- $(INCDIR)\idn\ucsmap.h \
- $(INCDIR)\idn\ucsset.h \
- $(INCDIR)\idn\unicode.h \
- $(INCDIR)\idn\unormalize.h \
- $(INCDIR)\idn\utf8.h \
- $(INCDIR)\idn\util.h \
- $(INCDIR)\idn\version.h
-
-HDRS = $(ICONVDIR)\iconv.h \
- $(HDRS_LITE)
-
-SRCS = aliaslist.c api.c checker.c \
- converter.c debug.c delimitermap.c \
- filechecker.c filemapper.c \
- localencoding.c log.c mapper.c \
- mapselector.c nameprep.c nameprep_template.c \
- nameprepdata.c normalizer.c punycode.c race.c \
- res.c resconf.c result.c \
- strhash.c ucs4.c ucsmap.c \
- ucsset.c unicode.c unicode_template.c \
- unicodedata_320.c unormalize.c \
- utf8.c util.c version.c
-
-OBJS = aliaslist.obj api.obj checker.obj \
- converter.obj debug.obj delimitermap.obj \
- filechecker.obj filemapper.obj \
- localencoding.obj log.obj mapper.obj \
- mapselector.obj nameprep.obj \
- normalizer.obj punycode.obj race.obj \
- res.obj resconf.obj result.obj \
- strhash.obj ucs4.obj ucsmap.obj \
- ucsset.obj unicode.obj \
- unormalize.obj \
- utf8.obj util.obj version.obj
-
-OBJS_LITE = \
- aliaslist_l.obj api_l.obj checker_l.obj \
- converter_l.obj debug_l.obj delimitermap_l.obj \
- filechecker_l.obj filemapper_l.obj \
- localencoding_l.obj log_l.obj mapper_l.obj \
- mapselector_l.obj nameprep_l.obj \
- normalizer_l.obj punycode_l.obj race_l.obj \
- res_l.obj resconf_l.obj result_l.obj \
- strhash_l.obj ucs4_l.obj ucsmap_l.obj \
- ucsset_l.obj unicode_l.obj \
- unormalize_l.obj \
- utf8_l.obj util_l.obj version_l.obj
-
-
-#DBG = -DDEBUG
-
-#
-# Target to build
-#
-
-TARGETS = idnkit.dll idnkitlite.dll
-
-all: $(TARGETS)
-
-idnkit.dll: $(OBJS)
- -del idnkit.dll
- $(link) /out:"idnkit.dll" /implib:"idnkit.lib" $(dlllflags) $(OBJS) $(LIBS) $(SYSLIBS)
-
-idnkitlite.dll: $(OBJS_LITE)
- -del idnkitlite.dll
- $(link) /out:"idnkitlite.dll" /implib:"idnkitlite.lib" $(dlllflags) $(OBJS_LITE) $(LIBS_LITE) $(SYSLIBS)
-
-install:
-
-clean:
- -del *.obj
- -del *.lib
- -del *.dll
- -del *.exp
-
-#
-# Dependencies
-#
-
-EXP = -DIDN_EXPORT="extern __declspec(dllexport)"
-CCARGS = $(cflags) $(cvarsdll) -I$(INCDIR) -I$(ICONVDIR) $(EXP) $(DBG)
-CCARGS_LITE = $(cflags) $(cvarsdll) -I$(INCDIR) -DWITHOUT_ICONV $(EXP) $(DBG)
-
-aliaslist.obj: aliaslist.c $(HDRS)
- $(cc) $(CCARGS) /Foaliaslist.obj aliaslist.c
-api.obj: api.c $(HDRS)
- $(cc) $(CCARGS) /Foapi.obj api.c
-checker.obj: checker.c $(HDRS)
- $(cc) $(CCARGS) /Fochecker.obj checker.c
-converter.obj: converter.c $(HDRS)
- $(cc) $(CCARGS) /Foconverter.obj converter.c
-debug.obj: debug.c $(HDRS)
- $(cc) $(CCARGS) /Fodebug.obj debug.c
-delimitermap.obj: delimitermap.c $(HDRS)
- $(cc) $(CCARGS) /Fodelimitermap.obj delimitermap.c
-filechecker.obj: filechecker.c $(HDRS)
- $(cc) $(CCARGS) /Fofilechecker.obj filechecker.c
-filemapper.obj: filemapper.c $(HDRS)
- $(cc) $(CCARGS) /Fofilemapper.obj filemapper.c
-localencoding.obj: localencoding.c $(HDRS)
- $(cc) $(CCARGS) /Folocalencoding.obj localencoding.c
-log.obj: log.c $(HDRS)
- $(cc) $(CCARGS) /Folog.obj log.c
-mapper.obj: mapper.c $(HDRS)
- $(cc) $(CCARGS) /Fomapper.obj mapper.c
-mapselector.obj: mapselector.c $(HDRS)
- $(cc) $(CCARGS) /Fomapselector.obj mapselector.c
-nameprep.obj: nameprep.c nameprepdata.c nameprep_template.c $(HDRS)
- $(cc) $(CCARGS) /Fonameprep.obj nameprep.c
-normalizer.obj: normalizer.c $(HDRS)
- $(cc) $(CCARGS) /Fonormalizer.obj normalizer.c
-punycode.obj: punycode.c $(HDRS)
- $(cc) $(CCARGS) /Fopunycode.obj punycode.c
-race.obj: race.c $(HDRS)
- $(cc) $(CCARGS) /Forace.obj race.c
-res.obj: res.c $(HDRS)
- $(cc) $(CCARGS) /Fores.obj res.c
-resconf.obj: resconf.c $(HDRS)
- $(cc) $(CCARGS) /Foresconf.obj resconf.c
-result.obj: result.c $(HDRS)
- $(cc) $(CCARGS) /Foresult.obj result.c
-strhash.obj: strhash.c $(HDRS)
- $(cc) $(CCARGS) /Fostrhash.obj strhash.c
-ucs4.obj: ucs4.c $(HDRS)
- $(cc) $(CCARGS) /Foucs4.obj ucs4.c
-ucsmap.obj: ucsmap.c $(HDRS)
- $(cc) $(CCARGS) /Foucsmap.obj ucsmap.c
-ucsset.obj: ucsset.c $(HDRS)
- $(cc) $(CCARGS) /Foucsset.obj ucsset.c
-unicode.obj: unicode.c unicodedata_320.c unicode_template.c $(HDRS)
- $(cc) $(CCARGS) /Founicode.obj unicode.c
-unormalize.obj: unormalize.c $(HDRS)
- $(cc) $(CCARGS) /Founormalize.obj unormalize.c
-utf8.obj: utf8.c $(HDRS)
- $(cc) $(CCARGS) /Foutf8.obj utf8.c
-util.obj: util.c $(HDRS)
- $(cc) $(CCARGS) /Foutil.obj util.c
-version.obj: version.c $(HDRS)
- $(cc) $(CCARGS) /Foversion.obj version.c
-
-aliaslist_l.obj: aliaslist.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Foaliaslist_l.obj aliaslist.c
-api_l.obj: api.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Foapi_l.obj api.c
-checker_l.obj: checker.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Fochecker_l.obj checker.c
-converter_l.obj: converter.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Foconverter_l.obj converter.c
-debug_l.obj: debug.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Fodebug_l.obj debug.c
-delimitermap_l.obj: delimitermap.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Fodelimitermap_l.obj delimitermap.c
-dude_l.obj: dude.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Fodude_l.obj dude.c
-filechecker_l.obj: filechecker.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Fofilechecker_l.obj filechecker.c
-filemapper_l.obj: filemapper.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Fofilemapper_l.obj filemapper.c
-localencoding_l.obj: localencoding.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Folocalencoding_l.obj localencoding.c
-log_l.obj: log.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Folog_l.obj log.c
-mapper_l.obj: mapper.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Fomapper_l.obj mapper.c
-mapselector_l.obj: mapselector.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Fomapselector_l.obj mapselector.c
-nameprep_l.obj: nameprep.c nameprepdata.c nameprep_template.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Fonameprep_l.obj nameprep.c
-normalizer_l.obj: normalizer.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Fonormalizer_l.obj normalizer.c
-punycode_l.obj: punycode.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Fopunycode_l.obj punycode.c
-race_l.obj: race.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Forace_l.obj race.c
-res_l.obj: res.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Fores_l.obj res.c
-resconf_l.obj: resconf.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Foresconf_l.obj resconf.c
-result_l.obj: result.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Foresult_l.obj result.c
-strhash_l.obj: strhash.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Fostrhash_l.obj strhash.c
-ucs4_l.obj: ucs4.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Foucs4_l.obj ucs4.c
-ucsmap_l.obj: ucsmap.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Foucsmap_l.obj ucsmap.c
-ucsset_l.obj: ucsset.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Foucsset_l.obj ucsset.c
-unicode_l.obj: unicode.c unicodedata_320.c unicode_template.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Founicode_l.obj unicode.c
-unormalize_l.obj: unormalize.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Founormalize_l.obj unormalize.c
-utf8_l.obj: utf8.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Foutf8_l.obj utf8.c
-util_l.obj: util.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Foutil_l.obj util.c
-version_l.obj: version.c $(HDRS_LITE)
- $(cc) $(CCARGS_LITE) /Foversion_l.obj version.c
diff --git a/contrib/idn/idnkit-1.0-src/lib/mapper.c b/contrib/idn/idnkit-1.0-src/lib/mapper.c
deleted file mode 100644
index 22e85201..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/mapper.c
+++ /dev/null
@@ -1,482 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: mapper.c,v 1.1 2003/06/04 00:25:55 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2001,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <idn/result.h>
-#include <idn/assert.h>
-#include <idn/logmacro.h>
-#include <idn/mapper.h>
-#include <idn/strhash.h>
-#include <idn/debug.h>
-#include <idn/util.h>
-#include <idn/ucs4.h>
-
-/*
- * Type for mapping scheme.
- */
-typedef struct {
- char *prefix;
- char *parameter;
- idn_mapper_createproc_t create;
- idn_mapper_destroyproc_t destroy;
- idn_mapper_mapproc_t map;
- void *context;
-} map_scheme_t;
-
-/*
- * Standard mapping schemes.
- */
-static const map_scheme_t nameprep_scheme = {
- "RFC3491",
- NULL,
- idn_nameprep_createproc,
- idn_nameprep_destroyproc,
- idn_nameprep_mapproc,
- NULL,
-};
-
-static const map_scheme_t filemap_scheme = {
- "filemap",
- "",
- idn__filemapper_createproc,
- idn__filemapper_destroyproc,
- idn__filemapper_mapproc,
- NULL,
-};
-
-static const map_scheme_t *standard_map_schemes[] = {
- &nameprep_scheme,
- &filemap_scheme,
- NULL,
-};
-
-/*
- * Hash table for mapping schemes.
- */
-static idn__strhash_t scheme_hash = NULL;
-
-/*
- * Mapper object type.
- */
-struct idn_mapper {
- int nschemes;
- int scheme_size;
- map_scheme_t *schemes;
- int reference_count;
-};
-
-#define MAPPER_INITIAL_SCHEME_SIZE 1
-
-idn_result_t
-idn_mapper_initialize(void) {
- idn_result_t r;
- map_scheme_t **scheme;
-
- TRACE(("idn_mapper_initialize()\n"));
-
- if (scheme_hash != NULL) {
- r = idn_success; /* already initialized */
- goto ret;
- }
-
- r = idn__strhash_create(&scheme_hash);
- if (r != idn_success)
- goto ret;
-
- for (scheme = (map_scheme_t **)standard_map_schemes;
- *scheme != NULL; scheme++) {
- r = idn__strhash_put(scheme_hash, (*scheme)->prefix, *scheme);
- if (r != idn_success)
- goto ret;
- }
-
- r = idn_success;
-ret:
- if (r != idn_success && scheme_hash != NULL) {
- idn__strhash_destroy(scheme_hash, NULL);
- scheme_hash = NULL;
- }
- TRACE(("idn_mapper_initialize(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-idn_result_t
-idn_mapper_create(idn_mapper_t *ctxp) {
- idn_mapper_t ctx = NULL;
- idn_result_t r;
-
- assert(scheme_hash != NULL);
- assert(ctxp != NULL);
-
- TRACE(("idn_mapper_create()\n"));
-
- ctx = (idn_mapper_t) malloc(sizeof(struct idn_mapper));
- if (ctx == NULL) {
- r = idn_nomemory;
- goto ret;
- }
-
- ctx->schemes = (map_scheme_t *) malloc(sizeof(map_scheme_t)
- * MAPPER_INITIAL_SCHEME_SIZE);
- if (ctx->schemes == NULL) {
- r = idn_nomemory;
- goto ret;
- }
-
- ctx->nschemes = 0;
- ctx->scheme_size = MAPPER_INITIAL_SCHEME_SIZE;
- ctx->reference_count = 1;
- *ctxp = ctx;
- r = idn_success;
-
-ret:
- if (r != idn_success) {
- if (ctx != NULL)
- free(ctx->schemes);
- free(ctx);
- }
- TRACE(("idn_mapper_create(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-void
-idn_mapper_destroy(idn_mapper_t ctx) {
- int i;
-
- assert(scheme_hash != NULL);
- assert(ctx != NULL);
-
- TRACE(("idn_mapper_destroy()\n"));
-
- ctx->reference_count--;
- if (ctx->reference_count <= 0) {
- TRACE(("idn_mapper_destroy(): the object is destroyed\n"));
- for (i = 0; i < ctx->nschemes; i++)
- ctx->schemes[i].destroy(ctx->schemes[i].context);
- free(ctx->schemes);
- free(ctx);
- } else {
- TRACE(("idn_mapper_destroy(): "
- "update reference count (%d->%d)\n",
- ctx->reference_count + 1, ctx->reference_count));
- }
-}
-
-void
-idn_mapper_incrref(idn_mapper_t ctx) {
- assert(ctx != NULL && scheme_hash != NULL);
-
- TRACE(("idn_mapper_incrref()\n"));
- TRACE(("idn_mapper_incrref: update reference count (%d->%d)\n",
- ctx->reference_count, ctx->reference_count + 1));
-
- ctx->reference_count++;
-}
-
-idn_result_t
-idn_mapper_add(idn_mapper_t ctx, const char *scheme_name) {
- idn_result_t r;
- map_scheme_t *scheme;
- const char *scheme_prefix;
- const char *scheme_parameter;
- void *scheme_context = NULL;
- char static_buffer[128]; /* large enough */
- char *buffer = static_buffer;
-
- assert(scheme_hash != NULL);
- assert(ctx != NULL);
-
- TRACE(("idn_mapper_add(scheme_name=%s)\n",
- idn__debug_xstring(scheme_name, 50)));
-
- /*
- * Split `scheme_name' into `scheme_prefix' and `scheme_parameter'.
- */
- scheme_parameter = strchr(scheme_name, ':');
- if (scheme_parameter == NULL) {
- scheme_prefix = scheme_name;
- } else {
- ptrdiff_t scheme_prefixlen;
-
- scheme_prefixlen = scheme_parameter - scheme_name;
- if (scheme_prefixlen + 1 > sizeof(static_buffer)) {
- buffer = (char *) malloc(scheme_prefixlen + 1);
- if (buffer == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- }
- memcpy(buffer, scheme_name, scheme_prefixlen);
- *(buffer + scheme_prefixlen) = '\0';
- scheme_prefix = buffer;
- scheme_parameter++;
- }
-
- /*
- * Find a scheme.
- */
- if (idn__strhash_get(scheme_hash, scheme_prefix, (void **)&scheme)
- != idn_success) {
- ERROR(("idn_mapper_add(): invalid scheme name \"%-.30s\"\n",
- scheme_prefix));
- r = idn_invalid_name;
- goto ret;
- }
- if (scheme_parameter == NULL) {
- if (scheme->parameter != NULL)
- scheme_parameter = scheme->parameter;
- else
- scheme_parameter = scheme->prefix;
- }
-
- /*
- * Add the scheme.
- */
- assert(ctx->nschemes <= ctx->scheme_size);
-
- if (ctx->nschemes == ctx->scheme_size) {
- map_scheme_t *new_schemes;
-
- new_schemes = (map_scheme_t *) realloc(ctx->schemes,
- sizeof(map_scheme_t) * ctx->scheme_size * 2);
- if (new_schemes == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- ctx->schemes = new_schemes;
- ctx->scheme_size *= 2;
- }
-
- r = scheme->create(scheme_parameter, &scheme_context);
- if (r != idn_success)
- goto ret;
-
- memcpy(ctx->schemes + ctx->nschemes, scheme, sizeof(map_scheme_t));
- ctx->schemes[ctx->nschemes].context = scheme_context;
- ctx->nschemes++;
- r = idn_success;
-ret:
- if (r != idn_success)
- free(scheme_context);
- if (buffer != static_buffer)
- free(buffer);
- TRACE(("idn_mapper_add(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-idn_result_t
-idn_mapper_addall(idn_mapper_t ctx, const char **scheme_names, int nschemes) {
- idn_result_t r;
- int i;
-
- assert(scheme_hash != NULL);
- assert(ctx != NULL && scheme_names != NULL);
-
- TRACE(("idn_mapper_addall(nschemes=%d)\n", nschemes));
-
- for (i = 0; i < nschemes; i++) {
- r = idn_mapper_add(ctx, (const char *)*scheme_names);
- if (r != idn_success)
- goto ret;
- scheme_names++;
- }
-
- r = idn_success;
-ret:
- TRACE(("idn_mapper_addall(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-idn_result_t
-idn_mapper_map(idn_mapper_t ctx, const unsigned long *from,
- unsigned long *to, size_t tolen) {
- idn_result_t r;
- unsigned long *src, *dst;
- unsigned long *buffers[2] = {NULL, NULL};
- size_t buflen[2] = {0, 0};
- size_t dstlen;
- int idx;
- int i;
-
- assert(scheme_hash != NULL);
- assert(ctx != NULL && from != NULL && to != NULL);
-
- TRACE(("idn_mapper_map(from=\"%s\", tolen=%d)\n",
- idn__debug_ucs4xstring(from, 50), (int)tolen));
-
- if (ctx->nschemes <= 0) {
- if (tolen < idn_ucs4_strlen(from) + 1) {
- r = idn_buffer_overflow;
- goto ret;
- }
- idn_ucs4_strcpy(to, from);
- r = idn_success;
- goto ret;
- }
-
- /*
- * Map.
- */
- src = (void *)from;
- dstlen = idn_ucs4_strlen(from) + 1;
-
- i = 0;
- while (i < ctx->nschemes) {
- TRACE(("idn_mapper_map(): map %s\n", ctx->schemes[i].prefix));
-
- /*
- * Choose destination area to restore the result of a mapping.
- */
- if (i + 1 == ctx->nschemes) {
- dst = to;
- dstlen = tolen;
-
- } else {
- if (src == buffers[0])
- idx = 1;
- else
- idx = 0;
-
- if (buflen[idx] < dstlen) {
- void *newbuf;
-
- newbuf = realloc(buffers[idx],
- sizeof(long) * dstlen);
- if (newbuf == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- buffers[idx] = (unsigned long *)newbuf;
- buflen[idx] = dstlen;
- }
-
- dst = buffers[idx];
- dstlen = buflen[idx];
- }
-
- /*
- * Perform i-th map scheme.
- * If buffer size is not enough, we double it and try again.
- */
- r = (ctx->schemes[i].map)(ctx->schemes[i].context, src, dst,
- dstlen);
- if (r == idn_buffer_overflow && dst != to) {
- dstlen *= 2;
- continue;
- }
- if (r != idn_success)
- goto ret;
-
- src = dst;
- i++;
- }
-
- r = idn_success;
-ret:
- free(buffers[0]);
- free(buffers[1]);
- if (r == idn_success) {
- TRACE(("idn_mapper_map(): success (to=\"%s\")\n",
- idn__debug_ucs4xstring(to, 50)));
- } else {
- TRACE(("idn_mapper_map(): %s\n", idn_result_tostring(r)));
- }
- return (r);
-}
-
-idn_result_t
-idn_mapper_register(const char *prefix,
- idn_mapper_createproc_t create,
- idn_mapper_destroyproc_t destroy,
- idn_mapper_mapproc_t map) {
- idn_result_t r;
- map_scheme_t *scheme = NULL;
-
- assert(scheme_hash != NULL);
- assert(prefix != NULL && create != NULL && destroy != NULL &&
- map != NULL);
-
- TRACE(("idn_mapper_register(prefix=%s)\n", prefix));
-
- scheme = (map_scheme_t *) malloc(sizeof(map_scheme_t));
- if (scheme == NULL) {
- r = idn_nomemory;
- goto ret;
- }
-
- scheme->prefix = (char *) malloc(strlen(prefix) + 1);
- if (scheme->prefix == NULL) {
- r = idn_nomemory;
- goto ret;
- }
-
- strcpy(scheme->prefix, prefix);
- scheme->parameter = NULL;
- scheme->create = create;
- scheme->destroy = destroy;
- scheme->map = map;
-
- r = idn__strhash_put(scheme_hash, prefix, scheme);
- if (r != idn_success)
- goto ret;
-
- r = idn_success;
-ret:
- if (r != idn_success) {
- if (scheme != NULL)
- free(scheme->prefix);
- free(scheme);
- }
-
- TRACE(("idn_mapper_register(): %s\n", idn_result_tostring(r)));
- return (r);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/mapselector.c b/contrib/idn/idnkit-1.0-src/lib/mapselector.c
deleted file mode 100644
index bcfb26c8..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/mapselector.c
+++ /dev/null
@@ -1,375 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: mapselector.c,v 1.1 2003/06/04 00:25:56 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2001,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <idn/assert.h>
-#include <idn/logmacro.h>
-#include <idn/result.h>
-#include <idn/mapselector.h>
-#include <idn/strhash.h>
-#include <idn/debug.h>
-#include <idn/util.h>
-#include <idn/ucs4.h>
-
-struct idn_mapselector {
- idn__strhash_t maphash;
- int reference_count;
-};
-
-/*
- * Maximum length of a top level domain name. (e.g. `com', `jp', ...)
- */
-#define MAPSELECTOR_MAX_TLD_LENGTH 63
-
-static void string_ascii_tolower(char *string);
-
-
-const unsigned long *
-idn_mapselector_getnotld(void) {
- static const unsigned long notld[] = {0x002d, 0x0000}; /* "-" */
- return (notld);
-}
-
-const unsigned long *
-idn_mapselector_getdefaulttld(void) {
- const static unsigned long defaulttld[] = {0x002e, 0x0000}; /* "." */
- return (defaulttld);
-}
-
-idn_result_t
-idn_mapselector_initialize(void) {
- idn_result_t r;
-
- TRACE(("idn_mapselector_initialize()\n"));
-
- r = idn_mapper_initialize();
-
- TRACE(("idn_mapselector_initialize(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-idn_result_t
-idn_mapselector_create(idn_mapselector_t *ctxp) {
- idn_mapselector_t ctx = NULL;
- idn_result_t r;
-
- assert(ctxp != NULL);
- TRACE(("idn_mapselector_create()\n"));
-
- ctx = (idn_mapselector_t)malloc(sizeof(struct idn_mapselector));
- if (ctx == NULL) {
- r = idn_nomemory;
- goto ret;
- }
-
- ctx->maphash = NULL;
- ctx->reference_count = 1;
-
- r = idn__strhash_create(&(ctx->maphash));
- if (r != idn_success)
- goto ret;
-
- *ctxp = ctx;
- r = idn_success;
-
-ret:
- if (r != idn_success) {
- if (ctx != NULL)
- free(ctx->maphash);
- free(ctx);
- }
- TRACE(("idn_mapselector_create(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-void
-idn_mapselector_destroy(idn_mapselector_t ctx) {
- assert(ctx != NULL);
-
- TRACE(("idn_mapselector_destroy()\n"));
-
- ctx->reference_count--;
- if (ctx->reference_count <= 0) {
- TRACE(("idn_mapselector_destroy(): "
- "the object is destroyed\n"));
- idn__strhash_destroy(ctx->maphash,
- (idn__strhash_freeproc_t)&idn_mapper_destroy);
- free(ctx);
- } else {
- TRACE(("idn_mapselector_destroy(): "
- "update reference count (%d->%d)\n",
- ctx->reference_count + 1, ctx->reference_count));
- }
-}
-
-void
-idn_mapselector_incrref(idn_mapselector_t ctx) {
- assert(ctx != NULL);
-
- TRACE(("idn_mapselector_incrref()\n"));
- TRACE(("idn_mapselector_incrref: update reference count (%d->%d)\n",
- ctx->reference_count, ctx->reference_count + 1));
-
- ctx->reference_count++;
-}
-
-idn_result_t
-idn_mapselector_add(idn_mapselector_t ctx, const char *tld, const char *name) {
- idn_result_t r;
- idn_mapper_t mapper;
- char hash_key[MAPSELECTOR_MAX_TLD_LENGTH + 1];
-
- assert(ctx != NULL && tld != NULL);
-
- TRACE(("idn_mapselector_add(tld=%s, name=%s)\n", tld, name));
-
- if (!(tld[0] == '.' && tld[1] == '\0')) {
- if (tld[0] == '.')
- tld++;
- if (strchr(tld, '.') != NULL) {
- ERROR(("idn_mapselector_add: "
- "invalid TLD \"%-.100s\"\n", tld));
- r = idn_invalid_name;
- goto ret;
- }
- }
- if (strlen(tld) > MAPSELECTOR_MAX_TLD_LENGTH) {
- ERROR(("idn_mapselector_add: "
- "too long TLD \"%-.100s\"\n", tld));
- r = idn_invalid_name;
- goto ret;
- }
- strcpy(hash_key, tld);
- string_ascii_tolower(hash_key);
-
- if (idn__strhash_get(ctx->maphash, hash_key, (void **)&mapper)
- != idn_success) {
- r = idn_mapper_create(&mapper);
- if (r != idn_success)
- goto ret;
-
- r = idn__strhash_put(ctx->maphash, hash_key, mapper);
- if (r != idn_success)
- goto ret;
- }
-
- r = idn_mapper_add(mapper, name);
-ret:
- TRACE(("idn_mapselector_add(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-idn_result_t
-idn_mapselector_addall(idn_mapselector_t ctx, const char *tld,
- const char **scheme_names, int nschemes) {
- idn_result_t r;
- int i;
-
- assert(ctx != NULL && tld != NULL && scheme_names != NULL);
-
- TRACE(("idn_mapselector_addall(tld=%s, nschemes=%d)\n",
- tld, nschemes));
-
- for (i = 0; i < nschemes; i++) {
- r = idn_mapselector_add(ctx, tld, (const char *)*scheme_names);
- if (r != idn_success)
- goto ret;
- scheme_names++;
- }
-
- r = idn_success;
-ret:
- TRACE(("idn_mapselector_addall(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-idn_mapper_t
-idn_mapselector_mapper(idn_mapselector_t ctx, const char *tld) {
- idn_result_t r;
- idn_mapper_t mapper;
- char hash_key[MAPSELECTOR_MAX_TLD_LENGTH + 1];
-
- assert(ctx != NULL && tld != NULL);
-
- TRACE(("idn_mapselector_mapper(tld=%s)\n", tld));
-
- if (!(tld[0] == '.' && tld[1] == '\0')) {
- if (tld[0] == '.')
- tld++;
- if (strchr(tld, '.') != NULL)
- return (NULL);
- }
- if (strlen(tld) > MAPSELECTOR_MAX_TLD_LENGTH)
- return (NULL);
- strcpy(hash_key, tld);
- string_ascii_tolower(hash_key);
-
- mapper = NULL;
- r = idn__strhash_get(ctx->maphash, hash_key, (void **)&mapper);
- if (r != idn_success)
- return (NULL);
-
- idn_mapper_incrref(mapper);
-
- return (mapper);
-}
-
-idn_result_t
-idn_mapselector_map(idn_mapselector_t ctx, const unsigned long *from,
- const char *tld, unsigned long *to, size_t tolen) {
- idn_result_t r;
- idn_mapper_t mapper = NULL;
- char hash_key[MAPSELECTOR_MAX_TLD_LENGTH + 1];
- size_t fromlen;
-
- assert(ctx != NULL && from != NULL && to != NULL);
-
- TRACE(("idn_mapselector_map(from=\"%s\", tld=\"%s\", tolen=%d)\n",
- idn__debug_ucs4xstring(from, 50), idn__debug_xstring(tld, 50),
- (int)tolen));
-
- if (!(tld[0] == '.' && tld[1] == '\0')) {
- if (tld[0] == '.')
- tld++;
- if (strchr(tld, '.') != NULL) {
- r = idn_invalid_name;
- goto ret;
- }
- }
- if (strlen(tld) > MAPSELECTOR_MAX_TLD_LENGTH) {
- r = idn_invalid_name;
- goto ret;
- }
- strcpy(hash_key, tld);
- string_ascii_tolower(hash_key);
-
- fromlen = idn_ucs4_strlen(from);
-
- /*
- * Get mapper for the TLD.
- */
- if (idn__strhash_get(ctx->maphash, hash_key, (void **)&mapper)
- != idn_success) {
- strcpy(hash_key, IDN_MAPSELECTOR_DEFAULTTLD);
- idn__strhash_get(ctx->maphash, hash_key, (void **)&mapper);
- }
-
- /*
- * Map.
- * If default mapper has not been registered, copy the string.
- */
- if (mapper == NULL) {
- TRACE(("idn_mapselector_map(): no mapper\n"));
- if (fromlen + 1 > tolen) {
- r = idn_buffer_overflow;
- goto ret;
- }
- memcpy(to, from, (fromlen + 1) * sizeof(*from));
- } else {
- TRACE(("idn_mapselector_map(): tld=%s\n", tld));
- r = idn_mapper_map(mapper, from, to, tolen);
- if (r != idn_success)
- goto ret;
- }
-
- r = idn_success;
-ret:
- if (r == idn_success) {
- TRACE(("idn_mapselector_map(): succcess (to=\"%s\")\n",
- idn__debug_ucs4xstring(to, 50)));
- } else {
- TRACE(("idn_mapselector_map(): %s\n", idn_result_tostring(r)));
- }
- return (r);
-}
-
-idn_result_t
-idn_mapselector_map2(idn_mapselector_t ctx, const unsigned long *from,
- const unsigned long *tld, unsigned long *to,
- size_t tolen) {
- char tld_utf8[MAPSELECTOR_MAX_TLD_LENGTH + 1];
- idn_result_t r;
-
- assert(ctx != NULL && from != NULL && to != NULL);
-
- TRACE(("idn_mapselector_map2(from=\"%s\", tld=\"%s\")\n",
- idn__debug_ucs4xstring(from, 50),
- idn__debug_ucs4xstring(tld, 50)));
-
- r = idn_ucs4_ucs4toutf8(tld, tld_utf8, sizeof(tld_utf8));
- if (r == idn_buffer_overflow) {
- r = idn_invalid_name;
- goto ret;
- } else if (r != idn_success) {
- goto ret;
- }
-
- r = idn_mapselector_map(ctx, from, tld_utf8, to, tolen);
-ret:
- if (r == idn_success) {
- TRACE(("idn_mapselector_map2(): success (to=\"%s\")\n",
- idn__debug_ucs4xstring(to, 50)));
- } else {
- TRACE(("idn_mapselector_map2(): %s\n", idn_result_tostring(r)));
- }
- return (r);
-}
-
-static void
-string_ascii_tolower(char *string) {
- unsigned char *p;
-
- for (p = (unsigned char *) string; *p != '\0'; p++) {
- if ('A' <= *p && *p <= 'Z')
- *p = *p - 'A' + 'a';
- }
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/nameprep.c b/contrib/idn/idnkit-1.0-src/lib/nameprep.c
deleted file mode 100644
index b46b81b3..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/nameprep.c
+++ /dev/null
@@ -1,357 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: nameprep.c,v 1.1 2003/06/04 00:25:56 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2001,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <idn/result.h>
-#include <idn/assert.h>
-#include <idn/log.h>
-#include <idn/logmacro.h>
-#include <idn/debug.h>
-#include <idn/nameprep.h>
-
-#define UCS_MAX 0x7fffffff
-#define UNICODE_MAX 0x10ffff
-
-
-/*
- * Load NAMEPREP compiled tables.
- */
-#include "nameprepdata.c"
-
-/*
- * Define mapping/checking functions for each version of the draft.
- */
-
-#define VERSION rfc3491
-#include "nameprep_template.c"
-#undef VERSION
-
-typedef const char *(*nameprep_mapproc)(unsigned long v);
-typedef int (*nameprep_checkproc)(unsigned long v);
-typedef idn_biditype_t (*nameprep_biditypeproc)(unsigned long v);
-
-static struct idn_nameprep {
- char *version;
- nameprep_mapproc map_proc;
- nameprep_checkproc prohibited_proc;
- nameprep_checkproc unassigned_proc;
- nameprep_biditypeproc biditype_proc;
-} nameprep_versions[] = {
-#define MAKE_NAMEPREP_HANDLE(version, id) \
- { version, \
- compose_sym2(nameprep_map_, id), \
- compose_sym2(nameprep_prohibited_, id), \
- compose_sym2(nameprep_unassigned_, id), \
- compose_sym2(nameprep_biditype_, id), }
- MAKE_NAMEPREP_HANDLE("RFC3491", rfc3491),
- { NULL, NULL, NULL },
-};
-
-static idn_result_t idn_nameprep_check(nameprep_checkproc proc,
- const unsigned long *str,
- const unsigned long **found);
-
-idn_result_t
-idn_nameprep_create(const char *version, idn_nameprep_t *handlep) {
- idn_nameprep_t handle;
-
- assert(handlep != NULL);
-
- TRACE(("idn_nameprep_create(version=%-.50s)\n",
- version == NULL ? "<NULL>" : version));
-
- if (version == NULL)
- version = IDN_NAMEPREP_CURRENT;
-
- /*
- * Lookup table for the specified version. Since the number of
- * versions won't be large (I don't want see draft-23 or such :-),
- * simple linear search is OK.
- */
- for (handle = nameprep_versions; handle->version != NULL; handle++) {
- if (strcmp(handle->version, version) == 0) {
- *handlep = handle;
- return (idn_success);
- }
- }
- return (idn_notfound);
-}
-
-void
-idn_nameprep_destroy(idn_nameprep_t handle) {
- assert(handle != NULL);
-
- TRACE(("idn_nameprep_destroy()\n"));
-
- /* Nothing to do. */
-}
-
-idn_result_t
-idn_nameprep_map(idn_nameprep_t handle, const unsigned long *from,
- unsigned long *to, size_t tolen) {
- assert(handle != NULL && from != NULL && to != NULL);
-
- TRACE(("idn_nameprep_map(ctx=%s, from=\"%s\")\n",
- handle->version, idn__debug_ucs4xstring(from, 50)));
-
- while (*from != '\0') {
- unsigned long v = *from;
- const char *mapped;
-
- if (v > UCS_MAX) {
- /* This cannot happen, but just in case.. */
- return (idn_invalid_codepoint);
- } else if (v > UNICODE_MAX) {
- /* No mapping is possible. */
- mapped = NULL;
- } else {
- /* Try mapping. */
- mapped = (*handle->map_proc)(v);
- }
-
- if (mapped == NULL) {
- /* No mapping. Just copy verbatim. */
- if (tolen < 1)
- return (idn_buffer_overflow);
- *to++ = v;
- tolen--;
- } else {
- const unsigned char *mappeddata;
- size_t mappedlen;
-
- mappeddata = (const unsigned char *)mapped + 1;
- mappedlen = *mapped;
-
- if (tolen < (mappedlen + 3) / 4)
- return (idn_buffer_overflow);
- tolen -= (mappedlen + 3) / 4;
- while (mappedlen >= 4) {
- *to = *mappeddata++;
- *to |= *mappeddata++ << 8;
- *to |= *mappeddata++ << 16;
- *to |= *mappeddata++ << 24;
- mappedlen -= 4;
- to++;
- }
- if (mappedlen > 0) {
- *to = *mappeddata++;
- *to |= (mappedlen >= 2) ?
- *mappeddata++ << 8: 0;
- *to |= (mappedlen >= 3) ?
- *mappeddata++ << 16: 0;
- to++;
- }
- }
- from++;
- }
- if (tolen == 0)
- return (idn_buffer_overflow);
- *to = '\0';
- return (idn_success);
-}
-
-idn_result_t
-idn_nameprep_isprohibited(idn_nameprep_t handle, const unsigned long *str,
- const unsigned long **found) {
- assert(handle != NULL && str != NULL && found != NULL);
-
- TRACE(("idn_nameprep_isprohibited(ctx=%s, str=\"%s\")\n",
- handle->version, idn__debug_ucs4xstring(str, 50)));
-
- return (idn_nameprep_check(handle->prohibited_proc, str, found));
-}
-
-idn_result_t
-idn_nameprep_isunassigned(idn_nameprep_t handle, const unsigned long *str,
- const unsigned long **found) {
- assert(handle != NULL && str != NULL && found != NULL);
-
- TRACE(("idn_nameprep_isunassigned(handle->version, str=\"%s\")\n",
- handle->version, idn__debug_ucs4xstring(str, 50)));
-
- return (idn_nameprep_check(handle->unassigned_proc, str, found));
-}
-
-static idn_result_t
-idn_nameprep_check(nameprep_checkproc proc, const unsigned long *str,
- const unsigned long **found) {
- unsigned long v;
-
- while (*str != '\0') {
- v = *str;
-
- if (v > UCS_MAX) {
- /* This cannot happen, but just in case.. */
- return (idn_invalid_codepoint);
- } else if (v > UNICODE_MAX) {
- /* It is invalid.. */
- *found = str;
- return (idn_success);
- } else if ((*proc)(v)) {
- *found = str;
- return (idn_success);
- }
- str++;
- }
- *found = NULL;
- return (idn_success);
-}
-
-idn_result_t
-idn_nameprep_isvalidbidi(idn_nameprep_t handle, const unsigned long *str,
- const unsigned long **found) {
- unsigned long v;
- idn_biditype_t first_char;
- idn_biditype_t last_char;
- int found_r_al;
-
- assert(handle != NULL && str != NULL && found != NULL);
-
- TRACE(("idn_nameprep_isvalidbidi(ctx=%s, str=\"%s\")\n",
- handle->version, idn__debug_ucs4xstring(str, 50)));
-
- if (*str == '\0') {
- *found = NULL;
- return (idn_success);
- }
-
- /*
- * check first character's type and initialize variables.
- */
- found_r_al = 0;
- if (*str > UCS_MAX) {
- /* This cannot happen, but just in case.. */
- return (idn_invalid_codepoint);
- } else if (*str > UNICODE_MAX) {
- /* It is invalid.. */
- *found = str;
- return (idn_success);
- }
- first_char = last_char = (*(handle->biditype_proc))(*str);
- if (first_char == idn_biditype_r_al) {
- found_r_al = 1;
- }
- str++;
-
- /*
- * see whether string is valid or not.
- */
- while (*str != '\0') {
- v = *str;
-
- if (v > UCS_MAX) {
- /* This cannot happen, but just in case.. */
- return (idn_invalid_codepoint);
- } else if (v > UNICODE_MAX) {
- /* It is invalid.. */
- *found = str;
- return (idn_success);
- } else {
- last_char = (*(handle->biditype_proc))(v);
- if (found_r_al && last_char == idn_biditype_l) {
- *found = str;
- return (idn_success);
- }
- if (first_char != idn_biditype_r_al && last_char == idn_biditype_r_al) {
- *found = str;
- return (idn_success);
- }
- if (last_char == idn_biditype_r_al) {
- found_r_al = 1;
- }
- }
- str++;
- }
-
- if (found_r_al) {
- if (last_char != idn_biditype_r_al) {
- *found = str - 1;
- return (idn_success);
- }
- }
-
- *found = NULL;
- return (idn_success);
-}
-
-idn_result_t
-idn_nameprep_createproc(const char *parameter, void **handlep) {
- return idn_nameprep_create(parameter, (idn_nameprep_t *)handlep);
-}
-
-void
-idn_nameprep_destroyproc(void *handle) {
- idn_nameprep_destroy((idn_nameprep_t)handle);
-}
-
-idn_result_t
-idn_nameprep_mapproc(void *handle, const unsigned long *from,
- unsigned long *to, size_t tolen) {
- return idn_nameprep_map((idn_nameprep_t)handle, from, to, tolen);
-}
-
-idn_result_t
-idn_nameprep_prohibitproc(void *handle, const unsigned long *str,
- const unsigned long **found) {
- return idn_nameprep_isprohibited((idn_nameprep_t)handle, str, found);
-}
-
-idn_result_t
-idn_nameprep_unassignedproc(void *handle, const unsigned long *str,
- const unsigned long **found) {
- return idn_nameprep_isunassigned((idn_nameprep_t)handle, str, found);
-}
-
-idn_result_t
-idn_nameprep_bidiproc(void *handle, const unsigned long *str,
- const unsigned long **found) {
- return idn_nameprep_isvalidbidi((idn_nameprep_t)handle, str, found);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/nameprep_template.c b/contrib/idn/idnkit-1.0-src/lib/nameprep_template.c
deleted file mode 100644
index 8a6a60f7..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/nameprep_template.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/* $Id: nameprep_template.c,v 1.1 2003/06/04 00:25:57 marka Exp $ */
-
-/*
- * Copyright (c) 2001 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-/*
- * Include this file once for each version of NAMEPREP.
- * VERSION should be defined to appropriate value before inclusion.
- */
-
-#ifndef NAMEPREP_TEMPLATE_INIT
-#define NAMEPREP_TEMPLATE_INIT
-
-/* Symbol composition. */
-#define compose_sym2(a, b) compose_sym2X(a, b)
-#define compose_sym2X(a, b) a ## b
-#define compose_sym3(a, b, c) compose_sym3X(a, b, c)
-#define compose_sym3X(a, b, c) a ## b ## c
-
-/* Index calculation for multi-level index tables. */
-#define IDX0(type, v) IDX_0(v, BITS1(type), BITS2(type))
-#define IDX1(type, v) IDX_1(v, BITS1(type), BITS2(type))
-#define IDX2(type, v) IDX_2(v, BITS1(type), BITS2(type))
-
-#define IDX_0(v, bits1, bits2) ((v) >> ((bits1) + (bits2)))
-#define IDX_1(v, bits1, bits2) (((v) >> (bits2)) & ((1 << (bits1)) - 1))
-#define IDX_2(v, bits1, bits2) ((v) & ((1 << (bits2)) - 1))
-
-#define BITS1(type) type ## _BITS_1
-#define BITS2(type) type ## _BITS_2
-
-#endif /* NAMEPREP_TEMPLATE_INIT */
-
-static const char *
-compose_sym2(nameprep_map_, VERSION) (unsigned long v) {
- int idx0 = IDX0(MAP, v);
- int idx1 = IDX1(MAP, v);
- int idx2 = IDX2(MAP, v);
- int offset;
-
-#define IMAP compose_sym3(nameprep_, VERSION, _map_imap)
-#define TABLE compose_sym3(nameprep_, VERSION, _map_table)
-#define DATA compose_sym3(nameprep_, VERSION, _map_data)
- offset = TABLE[IMAP[IMAP[idx0] + idx1]].tbl[idx2];
- if (offset == 0)
- return (NULL); /* no mapping */
- return (const char *)(DATA + offset);
-#undef IMAP
-#undef TABLE
-#undef DATA
-}
-
-static int
-compose_sym2(nameprep_prohibited_, VERSION) (unsigned long v) {
- int idx0 = IDX0(PROH, v);
- int idx1 = IDX1(PROH, v);
- int idx2 = IDX2(PROH, v);
- const unsigned char *bm;
-
-#define IMAP compose_sym3(nameprep_, VERSION, _prohibited_imap)
-#define BITMAP compose_sym3(nameprep_, VERSION, _prohibited_bitmap)
- bm = BITMAP[IMAP[IMAP[idx0] + idx1]].bm;
- return (bm[idx2 / 8] & (1 << (idx2 % 8)));
-#undef IMAP
-#undef BITMAP
-}
-
-static int
-compose_sym2(nameprep_unassigned_, VERSION) (unsigned long v) {
- int idx0 = IDX0(UNAS, v);
- int idx1 = IDX1(UNAS, v);
- int idx2 = IDX2(UNAS, v);
- const unsigned char *bm;
-
-#define IMAP compose_sym3(nameprep_, VERSION, _unassigned_imap)
-#define BITMAP compose_sym3(nameprep_, VERSION, _unassigned_bitmap)
- bm = BITMAP[IMAP[IMAP[idx0] + idx1]].bm;
- return (bm[idx2 / 8] & (1 << (idx2 % 8)));
-#undef IMAP
-#undef BITMAP
-}
-
-static idn_biditype_t
-compose_sym2(nameprep_biditype_, VERSION) (unsigned long v) {
- int idx0 = IDX0(BIDI, v);
- int idx1 = IDX1(BIDI, v);
- int idx2 = IDX2(BIDI, v);
- int offset;
-
-#define IMAP compose_sym3(nameprep_, VERSION, _bidi_imap)
-#define TABLE compose_sym3(nameprep_, VERSION, _bidi_table)
-#define DATA compose_sym3(nameprep_, VERSION, _bidi_data)
- offset = TABLE[IMAP[IMAP[idx0] + idx1]].tbl[idx2];
- return DATA[offset];
-#undef IMAP
-#undef TABLE
-#undef DATA
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/nameprepdata.c b/contrib/idn/idnkit-1.0-src/lib/nameprepdata.c
deleted file mode 100644
index f0fe44fe..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/nameprepdata.c
+++ /dev/null
@@ -1,2546 +0,0 @@
-/* $Id: nameprepdata.c,v 1.1 2003/06/04 00:26:05 marka Exp $ */
-/* $-Id: generate_nameprep_data.pl,v 1.9 2002/11/29 09:08:13 ishisone Exp -$ */
-/*
- * Do not edit this file!
- * This file is generated from NAMEPREP specification.
- */
-
-#define MAP_BITS_0 9
-#define MAP_BITS_1 7
-#define MAP_BITS_2 5
-
-#define PROH_BITS_0 7
-#define PROH_BITS_1 7
-#define PROH_BITS_2 7
-
-#define UNAS_BITS_0 7
-#define UNAS_BITS_1 7
-#define UNAS_BITS_2 7
-
-#define BIDI_BITS_0 9
-#define BIDI_BITS_1 7
-#define BIDI_BITS_2 5
-
-static const unsigned short nameprep_rfc3491_map_imap[] = {
- 272, 400, 528, 656, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 912,
- 1040, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 1168, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 0, 0, 1, 0, 0, 2, 3, 0,
- 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 0, 0, 0, 0, 0, 0,
- 0, 0, 14, 15, 16, 17, 18, 19,
- 20, 21, 0, 22, 23, 24, 25, 26,
- 27, 28, 29, 0, 30, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 31, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 0, 0, 49, 0, 50, 0, 0,
- 51, 52, 53, 54, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 55, 56, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 57, 58, 59, 60, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 61, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 62, 0, 0, 0, 0, 0, 0, 63,
- 0, 64, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 65, 66, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 76, 77, 78, 79, 67, 68, 69,
- 70, 80, 81, 73, 74, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const struct {
- unsigned short tbl[32];
-} nameprep_rfc3491_map_table[] = {
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
- 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42,
- 44, 46, 48, 50, 52, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 54,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77,
- 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99,
- 101, 0, 103, 105, 107, 109, 111, 113, 115, 117,
- }},
- {{
- 123, 0, 126, 0, 129, 0, 132, 0, 135, 0, 138,
- 0, 141, 0, 144, 0, 147, 0, 150, 0, 153, 0,
- 156, 0, 159, 0, 162, 0, 165, 0, 168, 0,
- }},
- {{
- 171, 0, 174, 0, 177, 0, 180, 0, 183, 0, 186,
- 0, 189, 0, 192, 0, 195, 0, 202, 0, 205, 0,
- 208, 0, 0, 211, 0, 214, 0, 217, 0, 220,
- }},
- {{
- 0, 223, 0, 226, 0, 229, 0, 232, 0, 235, 241,
- 0, 244, 0, 247, 0, 250, 0, 253, 0, 256, 0,
- 259, 0, 262, 0, 265, 0, 268, 0, 271, 0,
- }},
- {{
- 274, 0, 277, 0, 280, 0, 283, 0, 286, 0, 289,
- 0, 292, 0, 295, 0, 298, 0, 301, 0, 304, 0,
- 307, 0, 310, 312, 0, 315, 0, 318, 0, 38,
- }},
- {{
- 0, 321, 324, 0, 327, 0, 330, 333, 0, 336, 339,
- 342, 0, 0, 345, 348, 351, 354, 0, 357, 360, 0,
- 363, 366, 369, 0, 0, 0, 372, 375, 0, 378,
- }},
- {{
- 381, 0, 384, 0, 387, 0, 390, 393, 0, 396, 0,
- 0, 399, 0, 402, 405, 0, 408, 411, 414, 0, 417,
- 0, 420, 423, 0, 0, 0, 426, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 429, 429, 0, 432, 432, 0, 435,
- 435, 0, 438, 0, 441, 0, 444, 0, 447, 0, 450,
- 0, 453, 0, 456, 0, 459, 0, 0, 462, 0,
- }},
- {{
- 465, 0, 468, 0, 471, 0, 474, 0, 477, 0, 480,
- 0, 483, 0, 486, 0, 489, 496, 496, 0, 499, 0,
- 502, 505, 508, 0, 511, 0, 514, 0, 517, 0,
- }},
- {{
- 520, 0, 523, 0, 526, 0, 529, 0, 532, 0, 535,
- 0, 538, 0, 541, 0, 544, 0, 547, 0, 550, 0,
- 553, 0, 556, 0, 559, 0, 562, 0, 565, 0,
- }},
- {{
- 568, 0, 571, 0, 574, 0, 577, 0, 580, 0, 583,
- 0, 586, 0, 589, 0, 592, 0, 595, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 598, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 601, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 608, 0, 611, 614, 617,
- 0, 620, 0, 623, 626, 629, 640, 643, 646, 649, 652,
- 655, 658, 661, 598, 664, 667, 54, 670, 673, 676,
- }},
- {{
- 679, 682, 0, 685, 688, 691, 694, 697, 700, 703, 706,
- 709, 0, 0, 0, 0, 712, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 685, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 643, 661, 691, 623, 709, 694,
- 679, 0, 723, 0, 726, 0, 729, 0, 732, 0,
- }},
- {{
- 735, 0, 738, 0, 741, 0, 744, 0, 747, 0, 750,
- 0, 753, 0, 756, 0, 664, 682, 685, 0, 661, 652,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 759, 762, 765, 768, 771, 774, 777, 780, 783, 786, 789,
- 792, 795, 798, 801, 804, 807, 810, 813, 816, 819, 822,
- 825, 828, 831, 834, 837, 840, 843, 846, 849, 852,
- }},
- {{
- 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885,
- 888, 891, 894, 897, 900, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 903, 0, 906, 0, 909, 0, 912, 0, 915, 0, 918,
- 0, 921, 0, 924, 0, 927, 0, 930, 0, 933, 0,
- 936, 0, 939, 0, 942, 0, 945, 0, 948, 0,
- }},
- {{
- 951, 0, 0, 0, 0, 0, 0, 0, 0, 0, 954,
- 0, 957, 0, 960, 0, 963, 0, 966, 0, 969, 0,
- 972, 0, 975, 0, 978, 0, 981, 0, 984, 0,
- }},
- {{
- 987, 0, 990, 0, 993, 0, 996, 0, 999, 0, 1002,
- 0, 1005, 0, 1008, 0, 1011, 0, 1014, 0, 1017, 0,
- 1020, 0, 1023, 0, 1026, 0, 1029, 0, 1032, 0,
- }},
- {{
- 0, 1035, 0, 1038, 0, 1041, 0, 1044, 0, 1047, 0,
- 1050, 0, 1053, 0, 0, 1056, 0, 1059, 0, 1062, 0,
- 1065, 0, 1068, 0, 1071, 0, 1074, 0, 1077, 0,
- }},
- {{
- 1080, 0, 1083, 0, 1086, 0, 1089, 0, 1092, 0, 1095,
- 0, 1098, 0, 1101, 0, 1104, 0, 1107, 0, 1110, 0,
- 0, 0, 1113, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 1116, 0, 1119, 0, 1122, 0, 1125, 0, 1128, 0, 1131,
- 0, 1134, 0, 1137, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1140, 1143, 1146, 1149, 1152,
- 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1176, 1179, 1182,
- }},
- {{
- 1185, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 1215,
- 1218, 1221, 1224, 1227, 1230, 1233, 1236, 1239, 1242, 1245, 1248,
- 1251, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 1254, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 1261, 0, 1264, 0, 1267, 0, 1270, 0, 1273, 0, 1276,
- 0, 1279, 0, 1282, 0, 1285, 0, 1288, 0, 1291, 0,
- 1294, 0, 1297, 0, 1300, 0, 1303, 0, 1306, 0,
- }},
- {{
- 1309, 0, 1312, 0, 1315, 0, 1318, 0, 1321, 0, 1324,
- 0, 1327, 0, 1330, 0, 1333, 0, 1336, 0, 1339, 0,
- 1342, 0, 1345, 0, 1348, 0, 1351, 0, 1354, 0,
- }},
- {{
- 1357, 0, 1360, 0, 1363, 0, 1366, 0, 1369, 0, 1372,
- 0, 1375, 0, 1378, 0, 1381, 0, 1384, 0, 1387, 0,
- 1390, 0, 1393, 0, 1396, 0, 1399, 0, 1402, 0,
- }},
- {{
- 1405, 0, 1408, 0, 1411, 0, 1414, 0, 1417, 0, 1420,
- 0, 1423, 0, 1426, 0, 1429, 0, 1432, 0, 1435, 0,
- 1438, 0, 1441, 0, 1444, 0, 1447, 0, 1450, 0,
- }},
- {{
- 1453, 0, 1456, 0, 1459, 0, 1462, 0, 1465, 0, 1468,
- 0, 1471, 0, 1474, 0, 1477, 0, 1480, 0, 1483, 0,
- 1486, 1493, 1500, 1507, 1514, 1405, 0, 0, 0, 0,
- }},
- {{
- 1521, 0, 1524, 0, 1527, 0, 1530, 0, 1533, 0, 1536,
- 0, 1539, 0, 1542, 0, 1545, 0, 1548, 0, 1551, 0,
- 1554, 0, 1557, 0, 1560, 0, 1563, 0, 1566, 0,
- }},
- {{
- 1569, 0, 1572, 0, 1575, 0, 1578, 0, 1581, 0, 1584,
- 0, 1587, 0, 1590, 0, 1593, 0, 1596, 0, 1599, 0,
- 1602, 0, 1605, 0, 1608, 0, 1611, 0, 1614, 0,
- }},
- {{
- 1617, 0, 1620, 0, 1623, 0, 1626, 0, 1629, 0, 1632,
- 0, 1635, 0, 1638, 0, 1641, 0, 1644, 0, 1647, 0,
- 1650, 0, 1653, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 1656, 1659, 1662,
- 1665, 1668, 1671, 1674, 1677, 0, 0, 0, 0, 0, 0,
- 0, 0, 1680, 1683, 1686, 1689, 1692, 1695, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 1698, 1701, 1704,
- 1707, 1710, 1713, 1716, 1719, 0, 0, 0, 0, 0, 0,
- 0, 0, 1722, 1725, 1728, 1731, 1734, 1737, 1740, 1743,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 1746, 1749, 1752,
- 1755, 1758, 1761, 0, 0, 1764, 0, 1771, 0, 1782, 0,
- 1793, 0, 0, 1804, 0, 1807, 0, 1810, 0, 1813,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 1816, 1819, 1822,
- 1825, 1828, 1831, 1834, 1837, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 1840, 1847, 1854, 1861, 1868, 1875, 1882, 1889, 1840, 1847, 1854,
- 1861, 1868, 1875, 1882, 1889, 1896, 1903, 1910, 1917, 1924, 1931,
- 1938, 1945, 1896, 1903, 1910, 1917, 1924, 1931, 1938, 1945,
- }},
- {{
- 1952, 1959, 1966, 1973, 1980, 1987, 1994, 2001, 1952, 1959, 1966,
- 1973, 1980, 1987, 1994, 2001, 0, 0, 2008, 2015, 2022, 0,
- 2029, 2036, 2047, 2050, 2053, 2056, 2015, 0, 598, 0,
- }},
- {{
- 0, 0, 2059, 2066, 2073, 0, 2080, 2087, 2098, 2101, 2104,
- 2107, 2066, 0, 0, 0, 0, 0, 2110, 629, 0, 0,
- 2121, 2128, 2139, 2142, 2145, 2148, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 2151, 712, 2162, 0, 2169, 2176, 2187, 2190, 2193,
- 2196, 2199, 0, 0, 0, 0, 0, 2202, 2209, 2216, 0,
- 2223, 2230, 2241, 2244, 2247, 2250, 2209, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 2253, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 6, 2259, 0, 0, 0, 351, 0, 2265, 0,
- 16, 16, 16, 0, 0, 18, 18, 24, 0, 0, 28,
- 2271, 0, 0, 32, 34, 36, 36, 36, 0, 0,
- }},
- {{
- 2277, 2283, 2293, 0, 52, 0, 703, 0, 52, 0, 22,
- 67, 4, 6, 0, 0, 10, 12, 0, 26, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 646, 679,
- }},
- {{
- 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2299, 2302, 2305, 2308, 2311, 2314, 2317, 2320, 2323, 2326, 2329,
- 2332, 2335, 2338, 2341, 2344, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2347, 2350, 2353, 2356, 2359, 2362, 2365, 2368, 2371, 2374,
- }},
- {{
- 2377, 2380, 2383, 2386, 2389, 2392, 2395, 2398, 2401, 2404, 2407,
- 2410, 2413, 2416, 2419, 2422, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2425, 0, 2435, 0, 2441,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2447, 2453, 2459, 2465, 2471, 2477, 2483, 2489, 0, 0, 2495,
- 2501, 2507, 0, 0, 0, 2513, 2519, 2529, 2539, 2549, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 2447, 2559,
- 2569, 2579, 0, 0, 0, 0, 0, 0, 0, 2589, 2595,
- 2601, 2607, 2613, 2607, 2619, 2625, 2631, 2637, 2643, 2637,
- }},
- {{
- 2649, 2656, 0, 2663, 0, 0, 2669, 2683, 2693, 2699, 0,
- 2705, 0, 2711, 2717, 0, 0, 0, 0, 0, 0, 0,
- 0, 2723, 0, 2729, 2739, 0, 2745, 2751, 0, 0,
- }},
- {{
- 2757, 2763, 2769, 2775, 2785, 2795, 2795, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2801, 2808, 2815,
- 2822, 2829, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- }},
- {{
- 0, 2836, 2839, 2842, 2845, 2848, 2851, 2854, 2857, 2860, 2863,
- 2866, 2869, 2872, 2875, 2878, 2881, 2884, 2887, 2890, 2893, 2896,
- 2899, 2902, 2905, 2908, 2911, 0, 0, 0, 0, 0,
- }},
- {{
- 2914, 2918, 2922, 2926, 2930, 2934, 2938, 2942, 2946, 2950, 2954,
- 2958, 2962, 2966, 2970, 2974, 2978, 2982, 2986, 2990, 2994, 2998,
- 3002, 3006, 3010, 3014, 3018, 3022, 3026, 3030, 3034, 3038,
- }},
- {{
- 3042, 3046, 3050, 3054, 3058, 3062, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22,
- 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44,
- 46, 48, 50, 52, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4,
- 6, 8, 10, 12, 14, 16, 18, 20, 22, 24,
- }},
- {{
- 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46,
- 48, 50, 52, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 6,
- 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28,
- 30, 32, 34, 36, 38, 40, 42, 44, 46, 48,
- }},
- {{
- 50, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2, 0, 6, 8,
- }},
- {{
- 0, 0, 14, 0, 0, 20, 22, 0, 0, 28, 30,
- 32, 34, 0, 38, 40, 42, 44, 46, 48, 50, 52,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 4, 6, 8, 10, 12,
- 14, 16, 18, 20, 22, 24, 26, 28, 30, 32,
- }},
- {{
- 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 2, 4, 0, 8, 10, 12, 14,
- 0, 0, 20, 22, 24, 26, 28, 30, 32, 34, 0,
- 38, 40, 42, 44, 46, 48, 50, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 4, 0, 8, 10, 12, 14, 0,
- }},
- {{
- 18, 20, 22, 24, 26, 0, 30, 0, 0, 0, 38,
- 40, 42, 44, 46, 48, 50, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
- 22, 24, 26, 28, 30, 32, 34, 36, 38, 40,
- }},
- {{
- 42, 44, 46, 48, 50, 52, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 50, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2, 4, 6, 8,
- }},
- {{
- 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30,
- 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 640, 643, 646,
- 649, 652, 655, 658, 661, 598, 664, 667, 54, 670, 673,
- 676, 679, 682, 661, 685, 688, 691, 694, 697, 700,
- }},
- {{
- 703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 685, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 640, 643, 646, 649, 652, 655, 658, 661, 598,
- 664, 667, 54, 670, 673, 676, 679, 682, 661, 685, 688,
- 691, 694, 697, 700, 703, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 685, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 640, 643, 646, 649,
- }},
- {{
- 652, 655, 658, 661, 598, 664, 667, 54, 670, 673, 676,
- 679, 682, 661, 685, 688, 691, 694, 697, 700, 703, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 685, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 640, 643, 646, 649, 652, 655, 658, 661, 598, 664,
- }},
- {{
- 667, 54, 670, 673, 676, 679, 682, 661, 685, 688, 691,
- 694, 697, 700, 703, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 685, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 640, 643, 646, 649, 652, 655,
- 658, 661, 598, 664, 667, 54, 670, 673, 676, 679,
- }},
- {{
- 682, 661, 685, 688, 691, 694, 697, 700, 703, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 685, 0, 0, 0, 0,
- }},
-};
-
-static const unsigned char nameprep_rfc3491_map_data[] = {
- 0, 0, 1, 97, 1, 98, 1, 99, 1, 100, 1, 101,
- 1, 102, 1, 103, 1, 104, 1, 105, 1, 106, 1, 107,
- 1, 108, 1, 109, 1, 110, 1, 111, 1, 112, 1, 113,
- 1, 114, 1, 115, 1, 116, 1, 117, 1, 118, 1, 119,
- 1, 120, 1, 121, 1, 122, 2, 188, 3, 1, 224, 1,
- 225, 1, 226, 1, 227, 1, 228, 1, 229, 1, 230, 1,
- 231, 1, 232, 1, 233, 1, 234, 1, 235, 1, 236, 1,
- 237, 1, 238, 1, 239, 1, 240, 1, 241, 1, 242, 1,
- 243, 1, 244, 1, 245, 1, 246, 1, 248, 1, 249, 1,
- 250, 1, 251, 1, 252, 1, 253, 1, 254, 5, 115, 0,
- 0, 0, 115, 2, 1, 1, 2, 3, 1, 2, 5, 1,
- 2, 7, 1, 2, 9, 1, 2, 11, 1, 2, 13, 1,
- 2, 15, 1, 2, 17, 1, 2, 19, 1, 2, 21, 1,
- 2, 23, 1, 2, 25, 1, 2, 27, 1, 2, 29, 1,
- 2, 31, 1, 2, 33, 1, 2, 35, 1, 2, 37, 1,
- 2, 39, 1, 2, 41, 1, 2, 43, 1, 2, 45, 1,
- 2, 47, 1, 6, 105, 0, 0, 0, 7, 3, 2, 51,
- 1, 2, 53, 1, 2, 55, 1, 2, 58, 1, 2, 60,
- 1, 2, 62, 1, 2, 64, 1, 2, 66, 1, 2, 68,
- 1, 2, 70, 1, 2, 72, 1, 5, 188, 2, 0, 0,
- 110, 2, 75, 1, 2, 77, 1, 2, 79, 1, 2, 81,
- 1, 2, 83, 1, 2, 85, 1, 2, 87, 1, 2, 89,
- 1, 2, 91, 1, 2, 93, 1, 2, 95, 1, 2, 97,
- 1, 2, 99, 1, 2, 101, 1, 2, 103, 1, 2, 105,
- 1, 2, 107, 1, 2, 109, 1, 2, 111, 1, 2, 113,
- 1, 2, 115, 1, 2, 117, 1, 2, 119, 1, 1, 255,
- 2, 122, 1, 2, 124, 1, 2, 126, 1, 2, 83, 2,
- 2, 131, 1, 2, 133, 1, 2, 84, 2, 2, 136, 1,
- 2, 86, 2, 2, 87, 2, 2, 140, 1, 2, 221, 1,
- 2, 89, 2, 2, 91, 2, 2, 146, 1, 2, 96, 2,
- 2, 99, 2, 2, 105, 2, 2, 104, 2, 2, 153, 1,
- 2, 111, 2, 2, 114, 2, 2, 117, 2, 2, 161, 1,
- 2, 163, 1, 2, 165, 1, 2, 128, 2, 2, 168, 1,
- 2, 131, 2, 2, 173, 1, 2, 136, 2, 2, 176, 1,
- 2, 138, 2, 2, 139, 2, 2, 180, 1, 2, 182, 1,
- 2, 146, 2, 2, 185, 1, 2, 189, 1, 2, 198, 1,
- 2, 201, 1, 2, 204, 1, 2, 206, 1, 2, 208, 1,
- 2, 210, 1, 2, 212, 1, 2, 214, 1, 2, 216, 1,
- 2, 218, 1, 2, 220, 1, 2, 223, 1, 2, 225, 1,
- 2, 227, 1, 2, 229, 1, 2, 231, 1, 2, 233, 1,
- 2, 235, 1, 2, 237, 1, 2, 239, 1, 6, 106, 0,
- 0, 0, 12, 3, 2, 243, 1, 2, 245, 1, 2, 149,
- 1, 2, 191, 1, 2, 249, 1, 2, 251, 1, 2, 253,
- 1, 2, 255, 1, 2, 1, 2, 2, 3, 2, 2, 5,
- 2, 2, 7, 2, 2, 9, 2, 2, 11, 2, 2, 13,
- 2, 2, 15, 2, 2, 17, 2, 2, 19, 2, 2, 21,
- 2, 2, 23, 2, 2, 25, 2, 2, 27, 2, 2, 29,
- 2, 2, 31, 2, 2, 158, 1, 2, 35, 2, 2, 37,
- 2, 2, 39, 2, 2, 41, 2, 2, 43, 2, 2, 45,
- 2, 2, 47, 2, 2, 49, 2, 2, 51, 2, 2, 185,
- 3, 6, 32, 0, 0, 0, 185, 3, 2, 172, 3, 2,
- 173, 3, 2, 174, 3, 2, 175, 3, 2, 204, 3, 2,
- 205, 3, 2, 206, 3, 10, 185, 3, 0, 0, 8, 3,
- 0, 0, 1, 3, 2, 177, 3, 2, 178, 3, 2, 179,
- 3, 2, 180, 3, 2, 181, 3, 2, 182, 3, 2, 183,
- 3, 2, 184, 3, 2, 186, 3, 2, 187, 3, 2, 189,
- 3, 2, 190, 3, 2, 191, 3, 2, 192, 3, 2, 193,
- 3, 2, 195, 3, 2, 196, 3, 2, 197, 3, 2, 198,
- 3, 2, 199, 3, 2, 200, 3, 2, 201, 3, 2, 202,
- 3, 2, 203, 3, 10, 197, 3, 0, 0, 8, 3, 0,
- 0, 1, 3, 2, 217, 3, 2, 219, 3, 2, 221, 3,
- 2, 223, 3, 2, 225, 3, 2, 227, 3, 2, 229, 3,
- 2, 231, 3, 2, 233, 3, 2, 235, 3, 2, 237, 3,
- 2, 239, 3, 2, 80, 4, 2, 81, 4, 2, 82, 4,
- 2, 83, 4, 2, 84, 4, 2, 85, 4, 2, 86, 4,
- 2, 87, 4, 2, 88, 4, 2, 89, 4, 2, 90, 4,
- 2, 91, 4, 2, 92, 4, 2, 93, 4, 2, 94, 4,
- 2, 95, 4, 2, 48, 4, 2, 49, 4, 2, 50, 4,
- 2, 51, 4, 2, 52, 4, 2, 53, 4, 2, 54, 4,
- 2, 55, 4, 2, 56, 4, 2, 57, 4, 2, 58, 4,
- 2, 59, 4, 2, 60, 4, 2, 61, 4, 2, 62, 4,
- 2, 63, 4, 2, 64, 4, 2, 65, 4, 2, 66, 4,
- 2, 67, 4, 2, 68, 4, 2, 69, 4, 2, 70, 4,
- 2, 71, 4, 2, 72, 4, 2, 73, 4, 2, 74, 4,
- 2, 75, 4, 2, 76, 4, 2, 77, 4, 2, 78, 4,
- 2, 79, 4, 2, 97, 4, 2, 99, 4, 2, 101, 4,
- 2, 103, 4, 2, 105, 4, 2, 107, 4, 2, 109, 4,
- 2, 111, 4, 2, 113, 4, 2, 115, 4, 2, 117, 4,
- 2, 119, 4, 2, 121, 4, 2, 123, 4, 2, 125, 4,
- 2, 127, 4, 2, 129, 4, 2, 139, 4, 2, 141, 4,
- 2, 143, 4, 2, 145, 4, 2, 147, 4, 2, 149, 4,
- 2, 151, 4, 2, 153, 4, 2, 155, 4, 2, 157, 4,
- 2, 159, 4, 2, 161, 4, 2, 163, 4, 2, 165, 4,
- 2, 167, 4, 2, 169, 4, 2, 171, 4, 2, 173, 4,
- 2, 175, 4, 2, 177, 4, 2, 179, 4, 2, 181, 4,
- 2, 183, 4, 2, 185, 4, 2, 187, 4, 2, 189, 4,
- 2, 191, 4, 2, 194, 4, 2, 196, 4, 2, 198, 4,
- 2, 200, 4, 2, 202, 4, 2, 204, 4, 2, 206, 4,
- 2, 209, 4, 2, 211, 4, 2, 213, 4, 2, 215, 4,
- 2, 217, 4, 2, 219, 4, 2, 221, 4, 2, 223, 4,
- 2, 225, 4, 2, 227, 4, 2, 229, 4, 2, 231, 4,
- 2, 233, 4, 2, 235, 4, 2, 237, 4, 2, 239, 4,
- 2, 241, 4, 2, 243, 4, 2, 245, 4, 2, 249, 4,
- 2, 1, 5, 2, 3, 5, 2, 5, 5, 2, 7, 5,
- 2, 9, 5, 2, 11, 5, 2, 13, 5, 2, 15, 5,
- 2, 97, 5, 2, 98, 5, 2, 99, 5, 2, 100, 5,
- 2, 101, 5, 2, 102, 5, 2, 103, 5, 2, 104, 5,
- 2, 105, 5, 2, 106, 5, 2, 107, 5, 2, 108, 5,
- 2, 109, 5, 2, 110, 5, 2, 111, 5, 2, 112, 5,
- 2, 113, 5, 2, 114, 5, 2, 115, 5, 2, 116, 5,
- 2, 117, 5, 2, 118, 5, 2, 119, 5, 2, 120, 5,
- 2, 121, 5, 2, 122, 5, 2, 123, 5, 2, 124, 5,
- 2, 125, 5, 2, 126, 5, 2, 127, 5, 2, 128, 5,
- 2, 129, 5, 2, 130, 5, 2, 131, 5, 2, 132, 5,
- 2, 133, 5, 2, 134, 5, 6, 101, 5, 0, 0, 130,
- 5, 2, 1, 30, 2, 3, 30, 2, 5, 30, 2, 7,
- 30, 2, 9, 30, 2, 11, 30, 2, 13, 30, 2, 15,
- 30, 2, 17, 30, 2, 19, 30, 2, 21, 30, 2, 23,
- 30, 2, 25, 30, 2, 27, 30, 2, 29, 30, 2, 31,
- 30, 2, 33, 30, 2, 35, 30, 2, 37, 30, 2, 39,
- 30, 2, 41, 30, 2, 43, 30, 2, 45, 30, 2, 47,
- 30, 2, 49, 30, 2, 51, 30, 2, 53, 30, 2, 55,
- 30, 2, 57, 30, 2, 59, 30, 2, 61, 30, 2, 63,
- 30, 2, 65, 30, 2, 67, 30, 2, 69, 30, 2, 71,
- 30, 2, 73, 30, 2, 75, 30, 2, 77, 30, 2, 79,
- 30, 2, 81, 30, 2, 83, 30, 2, 85, 30, 2, 87,
- 30, 2, 89, 30, 2, 91, 30, 2, 93, 30, 2, 95,
- 30, 2, 97, 30, 2, 99, 30, 2, 101, 30, 2, 103,
- 30, 2, 105, 30, 2, 107, 30, 2, 109, 30, 2, 111,
- 30, 2, 113, 30, 2, 115, 30, 2, 117, 30, 2, 119,
- 30, 2, 121, 30, 2, 123, 30, 2, 125, 30, 2, 127,
- 30, 2, 129, 30, 2, 131, 30, 2, 133, 30, 2, 135,
- 30, 2, 137, 30, 2, 139, 30, 2, 141, 30, 2, 143,
- 30, 2, 145, 30, 2, 147, 30, 2, 149, 30, 6, 104,
- 0, 0, 0, 49, 3, 6, 116, 0, 0, 0, 8, 3,
- 6, 119, 0, 0, 0, 10, 3, 6, 121, 0, 0, 0,
- 10, 3, 6, 97, 0, 0, 0, 190, 2, 2, 161, 30,
- 2, 163, 30, 2, 165, 30, 2, 167, 30, 2, 169, 30,
- 2, 171, 30, 2, 173, 30, 2, 175, 30, 2, 177, 30,
- 2, 179, 30, 2, 181, 30, 2, 183, 30, 2, 185, 30,
- 2, 187, 30, 2, 189, 30, 2, 191, 30, 2, 193, 30,
- 2, 195, 30, 2, 197, 30, 2, 199, 30, 2, 201, 30,
- 2, 203, 30, 2, 205, 30, 2, 207, 30, 2, 209, 30,
- 2, 211, 30, 2, 213, 30, 2, 215, 30, 2, 217, 30,
- 2, 219, 30, 2, 221, 30, 2, 223, 30, 2, 225, 30,
- 2, 227, 30, 2, 229, 30, 2, 231, 30, 2, 233, 30,
- 2, 235, 30, 2, 237, 30, 2, 239, 30, 2, 241, 30,
- 2, 243, 30, 2, 245, 30, 2, 247, 30, 2, 249, 30,
- 2, 0, 31, 2, 1, 31, 2, 2, 31, 2, 3, 31,
- 2, 4, 31, 2, 5, 31, 2, 6, 31, 2, 7, 31,
- 2, 16, 31, 2, 17, 31, 2, 18, 31, 2, 19, 31,
- 2, 20, 31, 2, 21, 31, 2, 32, 31, 2, 33, 31,
- 2, 34, 31, 2, 35, 31, 2, 36, 31, 2, 37, 31,
- 2, 38, 31, 2, 39, 31, 2, 48, 31, 2, 49, 31,
- 2, 50, 31, 2, 51, 31, 2, 52, 31, 2, 53, 31,
- 2, 54, 31, 2, 55, 31, 2, 64, 31, 2, 65, 31,
- 2, 66, 31, 2, 67, 31, 2, 68, 31, 2, 69, 31,
- 6, 197, 3, 0, 0, 19, 3, 10, 197, 3, 0, 0,
- 19, 3, 0, 0, 0, 3, 10, 197, 3, 0, 0, 19,
- 3, 0, 0, 1, 3, 10, 197, 3, 0, 0, 19, 3,
- 0, 0, 66, 3, 2, 81, 31, 2, 83, 31, 2, 85,
- 31, 2, 87, 31, 2, 96, 31, 2, 97, 31, 2, 98,
- 31, 2, 99, 31, 2, 100, 31, 2, 101, 31, 2, 102,
- 31, 2, 103, 31, 6, 0, 31, 0, 0, 185, 3, 6,
- 1, 31, 0, 0, 185, 3, 6, 2, 31, 0, 0, 185,
- 3, 6, 3, 31, 0, 0, 185, 3, 6, 4, 31, 0,
- 0, 185, 3, 6, 5, 31, 0, 0, 185, 3, 6, 6,
- 31, 0, 0, 185, 3, 6, 7, 31, 0, 0, 185, 3,
- 6, 32, 31, 0, 0, 185, 3, 6, 33, 31, 0, 0,
- 185, 3, 6, 34, 31, 0, 0, 185, 3, 6, 35, 31,
- 0, 0, 185, 3, 6, 36, 31, 0, 0, 185, 3, 6,
- 37, 31, 0, 0, 185, 3, 6, 38, 31, 0, 0, 185,
- 3, 6, 39, 31, 0, 0, 185, 3, 6, 96, 31, 0,
- 0, 185, 3, 6, 97, 31, 0, 0, 185, 3, 6, 98,
- 31, 0, 0, 185, 3, 6, 99, 31, 0, 0, 185, 3,
- 6, 100, 31, 0, 0, 185, 3, 6, 101, 31, 0, 0,
- 185, 3, 6, 102, 31, 0, 0, 185, 3, 6, 103, 31,
- 0, 0, 185, 3, 6, 112, 31, 0, 0, 185, 3, 6,
- 177, 3, 0, 0, 185, 3, 6, 172, 3, 0, 0, 185,
- 3, 6, 177, 3, 0, 0, 66, 3, 10, 177, 3, 0,
- 0, 66, 3, 0, 0, 185, 3, 2, 176, 31, 2, 177,
- 31, 2, 112, 31, 2, 113, 31, 6, 116, 31, 0, 0,
- 185, 3, 6, 183, 3, 0, 0, 185, 3, 6, 174, 3,
- 0, 0, 185, 3, 6, 183, 3, 0, 0, 66, 3, 10,
- 183, 3, 0, 0, 66, 3, 0, 0, 185, 3, 2, 114,
- 31, 2, 115, 31, 2, 116, 31, 2, 117, 31, 10, 185,
- 3, 0, 0, 8, 3, 0, 0, 0, 3, 6, 185, 3,
- 0, 0, 66, 3, 10, 185, 3, 0, 0, 8, 3, 0,
- 0, 66, 3, 2, 208, 31, 2, 209, 31, 2, 118, 31,
- 2, 119, 31, 10, 197, 3, 0, 0, 8, 3, 0, 0,
- 0, 3, 6, 193, 3, 0, 0, 19, 3, 6, 197, 3,
- 0, 0, 66, 3, 10, 197, 3, 0, 0, 8, 3, 0,
- 0, 66, 3, 2, 224, 31, 2, 225, 31, 2, 122, 31,
- 2, 123, 31, 2, 229, 31, 6, 124, 31, 0, 0, 185,
- 3, 6, 201, 3, 0, 0, 185, 3, 6, 206, 3, 0,
- 0, 185, 3, 6, 201, 3, 0, 0, 66, 3, 10, 201,
- 3, 0, 0, 66, 3, 0, 0, 185, 3, 2, 120, 31,
- 2, 121, 31, 2, 124, 31, 2, 125, 31, 5, 114, 0,
- 0, 0, 115, 5, 176, 0, 0, 0, 99, 5, 176, 0,
- 0, 0, 102, 5, 110, 0, 0, 0, 111, 5, 115, 0,
- 0, 0, 109, 9, 116, 0, 0, 0, 101, 0, 0, 0,
- 108, 5, 116, 0, 0, 0, 109, 2, 112, 33, 2, 113,
- 33, 2, 114, 33, 2, 115, 33, 2, 116, 33, 2, 117,
- 33, 2, 118, 33, 2, 119, 33, 2, 120, 33, 2, 121,
- 33, 2, 122, 33, 2, 123, 33, 2, 124, 33, 2, 125,
- 33, 2, 126, 33, 2, 127, 33, 2, 208, 36, 2, 209,
- 36, 2, 210, 36, 2, 211, 36, 2, 212, 36, 2, 213,
- 36, 2, 214, 36, 2, 215, 36, 2, 216, 36, 2, 217,
- 36, 2, 218, 36, 2, 219, 36, 2, 220, 36, 2, 221,
- 36, 2, 222, 36, 2, 223, 36, 2, 224, 36, 2, 225,
- 36, 2, 226, 36, 2, 227, 36, 2, 228, 36, 2, 229,
- 36, 2, 230, 36, 2, 231, 36, 2, 232, 36, 2, 233,
- 36, 9, 104, 0, 0, 0, 112, 0, 0, 0, 97, 5,
- 97, 0, 0, 0, 117, 5, 111, 0, 0, 0, 118, 5,
- 112, 0, 0, 0, 97, 5, 110, 0, 0, 0, 97, 5,
- 188, 3, 0, 0, 97, 5, 109, 0, 0, 0, 97, 5,
- 107, 0, 0, 0, 97, 5, 107, 0, 0, 0, 98, 5,
- 109, 0, 0, 0, 98, 5, 103, 0, 0, 0, 98, 5,
- 112, 0, 0, 0, 102, 5, 110, 0, 0, 0, 102, 5,
- 188, 3, 0, 0, 102, 5, 104, 0, 0, 0, 122, 9,
- 107, 0, 0, 0, 104, 0, 0, 0, 122, 9, 109, 0,
- 0, 0, 104, 0, 0, 0, 122, 9, 103, 0, 0, 0,
- 104, 0, 0, 0, 122, 9, 116, 0, 0, 0, 104, 0,
- 0, 0, 122, 9, 107, 0, 0, 0, 112, 0, 0, 0,
- 97, 9, 109, 0, 0, 0, 112, 0, 0, 0, 97, 9,
- 103, 0, 0, 0, 112, 0, 0, 0, 97, 5, 112, 0,
- 0, 0, 118, 5, 110, 0, 0, 0, 118, 5, 188, 3,
- 0, 0, 118, 5, 109, 0, 0, 0, 118, 5, 107, 0,
- 0, 0, 118, 5, 112, 0, 0, 0, 119, 5, 110, 0,
- 0, 0, 119, 5, 188, 3, 0, 0, 119, 5, 109, 0,
- 0, 0, 119, 5, 107, 0, 0, 0, 119, 6, 107, 0,
- 0, 0, 201, 3, 6, 109, 0, 0, 0, 201, 3, 5,
- 98, 0, 0, 0, 113, 13, 99, 0, 0, 0, 21, 34,
- 0, 0, 107, 0, 0, 0, 103, 9, 99, 0, 0, 0,
- 111, 0, 0, 0, 46, 5, 100, 0, 0, 0, 98, 5,
- 103, 0, 0, 0, 121, 5, 104, 0, 0, 0, 112, 5,
- 107, 0, 0, 0, 107, 5, 107, 0, 0, 0, 109, 5,
- 112, 0, 0, 0, 104, 9, 112, 0, 0, 0, 112, 0,
- 0, 0, 109, 5, 112, 0, 0, 0, 114, 5, 115, 0,
- 0, 0, 118, 5, 119, 0, 0, 0, 98, 5, 102, 0,
- 0, 0, 102, 5, 102, 0, 0, 0, 105, 5, 102, 0,
- 0, 0, 108, 9, 102, 0, 0, 0, 102, 0, 0, 0,
- 105, 9, 102, 0, 0, 0, 102, 0, 0, 0, 108, 5,
- 115, 0, 0, 0, 116, 6, 116, 5, 0, 0, 118, 5,
- 6, 116, 5, 0, 0, 101, 5, 6, 116, 5, 0, 0,
- 107, 5, 6, 126, 5, 0, 0, 118, 5, 6, 116, 5,
- 0, 0, 109, 5, 2, 65, 255, 2, 66, 255, 2, 67,
- 255, 2, 68, 255, 2, 69, 255, 2, 70, 255, 2, 71,
- 255, 2, 72, 255, 2, 73, 255, 2, 74, 255, 2, 75,
- 255, 2, 76, 255, 2, 77, 255, 2, 78, 255, 2, 79,
- 255, 2, 80, 255, 2, 81, 255, 2, 82, 255, 2, 83,
- 255, 2, 84, 255, 2, 85, 255, 2, 86, 255, 2, 87,
- 255, 2, 88, 255, 2, 89, 255, 2, 90, 255, 3, 40,
- 4, 1, 3, 41, 4, 1, 3, 42, 4, 1, 3, 43,
- 4, 1, 3, 44, 4, 1, 3, 45, 4, 1, 3, 46,
- 4, 1, 3, 47, 4, 1, 3, 48, 4, 1, 3, 49,
- 4, 1, 3, 50, 4, 1, 3, 51, 4, 1, 3, 52,
- 4, 1, 3, 53, 4, 1, 3, 54, 4, 1, 3, 55,
- 4, 1, 3, 56, 4, 1, 3, 57, 4, 1, 3, 58,
- 4, 1, 3, 59, 4, 1, 3, 60, 4, 1, 3, 61,
- 4, 1, 3, 62, 4, 1, 3, 63, 4, 1, 3, 64,
- 4, 1, 3, 65, 4, 1, 3, 66, 4, 1, 3, 67,
- 4, 1, 3, 68, 4, 1, 3, 69, 4, 1, 3, 70,
- 4, 1, 3, 71, 4, 1, 3, 72, 4, 1, 3, 73,
- 4, 1, 3, 74, 4, 1, 3, 75, 4, 1, 3, 76,
- 4, 1, 3, 77, 4, 1,
-};
-
-static const unsigned short nameprep_rfc3491_prohibited_imap[] = {
- 68, 196, 196, 324, 196, 196, 196, 452,
- 196, 196, 196, 580, 196, 196, 196, 580,
- 196, 196, 196, 580, 196, 196, 196, 580,
- 196, 196, 196, 580, 196, 196, 196, 580,
- 196, 196, 196, 580, 196, 196, 196, 580,
- 196, 196, 196, 580, 196, 196, 196, 580,
- 196, 196, 196, 580, 196, 196, 196, 580,
- 708, 196, 196, 580, 836, 836, 836, 836,
- 836, 836, 836, 836, 0, 1, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0,
- 0, 3, 4, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 5, 0, 0, 6, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 7, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 8, 5, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 10,
- 0, 0, 0, 11, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 12, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 13, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 13, 14, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9,
-};
-
-static const struct {
- unsigned char bm[16];
-} nameprep_rfc3491_prohibited_bitmap[] = {
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 255,255,255,255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0,
- }},
- {{
- 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 255,199, 0, 0, 0,255, 0, 0, 0, 0, 0,128, 14,252, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 15,
- }},
- {{
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 7,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,
- }},
- {{
- 2, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,
- }},
-};
-
-static const unsigned short nameprep_rfc3491_unassigned_imap[] = {
- 68, 196, 324, 452, 580, 708, 708, 836,
- 964, 964, 1092, 1220, 708, 708, 708, 1348,
- 708, 708, 708, 1348, 708, 708, 708, 1348,
- 708, 708, 708, 1348, 708, 708, 708, 1348,
- 708, 708, 708, 1348, 708, 708, 708, 1348,
- 708, 708, 708, 1348, 708, 708, 708, 1348,
- 708, 708, 708, 1348, 708, 708, 708, 1348,
- 1476, 708, 708, 1348, 964, 964, 964, 964,
- 964, 964, 964, 964, 0, 0, 0, 0,
- 1, 2, 3, 4, 0, 5, 6, 7,
- 8, 9, 10, 11, 12, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, 27, 28, 29, 30,
- 31, 32, 33, 34, 35, 0, 0, 0,
- 36, 37, 38, 39, 40, 41, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 0, 42, 43, 44, 45, 46, 47, 48,
- 0, 0, 0, 49, 50, 51, 0, 0,
- 52, 53, 54, 55, 0, 0, 0, 0,
- 0, 0, 12, 12, 12, 12, 12, 12,
- 12, 56, 0, 57, 58, 59, 60, 61,
- 62, 63, 64, 65, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 66,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 67, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 68, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 69, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 70, 12, 71, 72, 0, 0, 73, 74,
- 75, 76, 35, 77, 12, 12, 12, 12,
- 12, 12, 78, 12, 79, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 0, 80, 81, 82,
- 12, 12, 12, 12, 83, 84, 85, 0,
- 0, 86, 0, 87, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 88, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 89, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 0, 0, 0, 0,
- 90, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 88, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 88, 91, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12,
-};
-
-static const struct {
- unsigned char bm[16];
-} nameprep_rfc3491_unassigned_bitmap[] = {
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 2, 0,240,255,255,255, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0,128,255,255,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255, 0, 0,207,187,
- }},
- {{
- 15, 40, 0, 0, 4, 0, 0, 0, 0,128, 0, 0, 0, 0,128,255,
- }},
- {{
- 128, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0,192,252,
- }},
- {{
- 0, 0,255,255,255,255, 1, 0, 0, 0,128, 1, 1, 0, 0, 0,
- }},
- {{
- 0,249, 1, 0, 4, 0, 0, 4,224,255, 0, 0, 0,248,224,255,
- }},
- {{
- 255,239,255,119, 1, 0, 0,248, 0, 0,192,255, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 0,128,
- }},
- {{
- 0, 64, 0, 0, 0,224, 0, 0, 0,248,255,255,255,255,255,255,
- }},
- {{
- 0, 0, 0, 0, 0, 0,252,255,255,255,255,255,255,255,255,255,
- }},
- {{
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- }},
- {{
- 17, 0, 0, 0, 0, 0, 0, 12, 0,192,224, 0, 0, 0,254,255,
- }},
- {{
- 17, 96, 6, 0, 0, 2, 58, 44, 96,198,127, 79, 48, 0, 0,248,
- }},
- {{
- 27,120, 6, 0, 0, 2,146, 44,120,198,255,161, 63, 0,224,255,
- }},
- {{
- 17, 80, 4, 0, 0, 2, 18, 12, 64,196,254,255, 62, 0,255,255,
- }},
- {{
- 17, 96, 6, 0, 0, 2, 50, 12,112,198, 63, 79, 60, 0,254,255,
- }},
- {{
- 19, 56,194, 41,231, 56, 64, 60, 56,194,127,255,127, 0,248,255,
- }},
- {{
- 17, 32, 2, 0, 0, 2, 16, 60, 32,194,159,255, 60, 0,255,255,
- }},
- {{
- 19, 32, 2, 0, 0, 2, 16, 60, 32,194,159,191, 60, 0,255,255,
- }},
- {{
- 19, 32, 2, 0, 0, 2, 0, 60, 48,194,127,255, 60, 0,255,255,
- }},
- {{
- 19, 0,128, 3, 0, 0, 4,208,128,123,160, 0,255,255,227,255,
- }},
- {{
- 1, 0, 0, 0, 0, 0, 0,120, 0, 0, 0,240,255,255,255,255,
- }},
- {{
- 105,218, 15, 1, 81, 19, 0,196,160,192, 0,204,255,255,255,255,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,248, 1, 0,
- }},
- {{
- 0,240, 0, 1, 0, 0, 0, 32, 0, 96,255,255,255,255,255,255,
- }},
- {{
- 0, 0, 0, 0, 4, 9, 56,252, 0, 0, 0,252,255,255,255,255,
- }},
- {{
- 255,255,255,255, 0, 0, 0, 0,192,255, 0, 0, 0, 0, 0,246,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0,248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252,
- }},
- {{
- 128, 0, 0, 0, 0, 0, 0, 0,128,194,128,194, 0, 0, 0, 0,
- }},
- {{
- 128,194, 0, 0, 0,128,194,128,194,128,128, 0, 0,128, 0, 0,
- }},
- {{
- 0,128,194,128, 0, 0, 0, 0,128, 0, 0,248, 1, 0, 0,224,
- }},
- {{
- 255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,255,
- }},
- {{
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,255,
- }},
- {{
- 0, 0, 0,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254,255,
- }},
- {{
- 0, 32,224,255, 0, 0,128,255, 0, 0,240,255, 0, 32,242,255,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 0,252,255,255,
- }},
- {{
- 0,128, 0,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,
- }},
- {{
- 0, 0, 0, 0, 0,252,255,255,255,255,255,255,255,255,255,255,
- }},
- {{
- 0, 0, 0,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252,
- }},
- {{
- 0, 0,192,192, 0, 0, 0, 0,192,192, 0, 85, 0, 0, 0,192,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 32, 0, 32, 0, 48, 16, 0, 0, 35,128,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,127,240, 3, 12, 0,
- }},
- {{
- 0,128,255,255, 0, 0,252,255,255,255, 0, 0, 0,248,255,255,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 24, 0,240, 7, 0, 0, 0, 0, 0,
- }},
- {{
- 240,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0,128,255,255,255,255,255,255,
- }},
- {{
- 0, 0, 0, 0,128,255,255,255, 0,248,255,255, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,
- }},
- {{
- 0, 0, 48, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,
- }},
- {{
- 0,252,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- }},
- {{
- 33, 12, 0, 0, 0, 1, 0, 0, 0, 80,184,128, 1, 0, 0, 0,
- }},
- {{
- 0, 0,224, 0, 0, 0, 1,128,255,255, 0, 0, 0,240, 0, 0,
- }},
- {{
- 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,255,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,255,255,255, 0,240,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0,128, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 31, 0, 0, 0, 0,224, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0,128, 0, 0, 0, 0, 0,255,255,255,255,255,255,255, 0, 0,
- }},
- {{
- 0, 0, 0,224, 0, 0, 0, 0,240,255, 1, 0, 0, 0, 0,112,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 0, 0, 0, 0, 0,128,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 0, 0,128,
- }},
- {{
- 0, 0, 0, 0, 0, 0,192,255,255,255,255,255,255,255,255,255,
- }},
- {{
- 0, 0, 0, 0,192,255,255,255,255,255,255,255,255,255,255,255,
- }},
- {{
- 0,224, 0, 0, 0, 0, 0, 0,128,255,255,255,255,255,255,255,
- }},
- {{
- 0, 0, 0, 0,240,255,255,255,255,255,255,255,255,255,255,255,
- }},
- {{
- 0, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0,248,255,255,
- }},
- {{
- 128,255, 7, 31, 0, 0,128,160, 36, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0,252,255,255,255, 7, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,255,255, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 3, 0, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 0,224,
- }},
- {{
- 0, 0,255,255,240,255, 0, 0,128, 1, 8, 0,128,240, 32, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,128, 3, 3, 3,227,128,128,255, 1,
- }},
- {{
- 0, 0, 0,128,240,255, 0, 0, 0,248,255,255,255,255,255,255,
- }},
- {{
- 0, 0, 0, 0,192, 0, 0, 0, 0,192,255,255,255,255,255,255,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,255,
- }},
- {{
- 0, 0, 0, 0,128, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,255,255,255,255,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 32,155, 33, 0, 20, 18, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 64, 24, 32, 32, 0, 0, 0,132,160, 3, 2, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 63,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,255,255,255,255,255,
- }},
- {{
- 0, 0, 0,192,255,255,255,255,255,255,255,255,255,255,255,255,
- }},
- {{
- 253,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
-};
-
-static const unsigned short nameprep_rfc3491_bidi_imap[] = {
- 272, 400, 528, 656, 784, 912, 912, 912,
- 912, 1040, 1168, 912, 912, 1296, 912, 1424,
- 1552, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1680, 1680, 1680, 1680, 1680, 1808, 1680, 1680,
- 912, 912, 912, 912, 912, 912, 912, 912,
- 912, 912, 1936, 1680, 1680, 1680, 1680, 2064,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 912, 912, 912, 912, 912, 912, 912, 912,
- 912, 912, 912, 912, 912, 912, 912, 2192,
- 912, 912, 912, 912, 912, 912, 912, 912,
- 912, 912, 912, 912, 912, 912, 912, 2192,
- 0, 0, 1, 1, 0, 2, 3, 3,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 5, 6, 4, 4, 7, 8, 9,
- 0, 0, 0, 10, 11, 12, 13, 14,
- 4, 4, 4, 4, 15, 4, 13, 16,
- 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 29, 30, 31,
- 32, 33, 0, 0, 29, 34, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 48, 49, 50,
- 39, 51, 41, 52, 53, 54, 55, 56,
- 57, 58, 59, 60, 61, 62, 63, 60,
- 61, 64, 65, 60, 66, 67, 68, 69,
- 20, 70, 71, 0, 72, 73, 74, 0,
- 75, 76, 77, 78, 79, 80, 81, 0,
- 4, 82, 83, 0, 0, 4, 84, 85,
- 4, 4, 86, 4, 4, 87, 4, 88,
- 89, 4, 90, 4, 91, 92, 93, 13,
- 92, 4, 94, 95, 0, 4, 4, 96,
- 20, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 97, 1, 4, 4, 98,
- 99, 100, 101, 102, 4, 103, 104, 105,
- 106, 4, 4, 83, 4, 107, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 4, 4, 4, 108, 4, 4, 88,
- 109, 4, 110, 111, 4, 112, 113, 114,
- 115, 0, 0, 116, 0, 0, 0, 0,
- 117, 118, 119, 4, 120, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 121, 4, 122, 123, 0, 0, 0,
- 0, 0, 0, 0, 124, 4, 4, 105,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 125, 126, 20, 4, 127, 20, 4, 128,
- 129, 130, 4, 4, 13, 83, 0, 6,
- 131, 4, 120, 132, 4, 98, 133, 134,
- 4, 4, 4, 135, 4, 4, 111, 134,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 14, 0, 0,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 136, 0, 0,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 137, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 120, 0, 0,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 138, 4, 139, 0, 0, 0, 0,
- 140, 141, 142, 29, 29, 143, 144, 29,
- 29, 29, 29, 29, 29, 29, 29, 29,
- 29, 145, 146, 29, 147, 29, 148, 149,
- 0, 0, 0, 150, 29, 29, 29, 151,
- 0, 1, 1, 152, 4, 134, 153, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 134, 154, 139, 0, 0, 0, 0, 0,
- 4, 155, 156, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 4, 4, 4, 4, 4, 4, 14,
- 4, 157, 4, 158, 159, 160, 111, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 4, 161, 4, 162, 163, 164, 4,
- 165, 166, 167, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 168, 4, 4,
- 4, 4, 4, 4, 4, 4, 105, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 97, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 111, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 111,
-};
-
-static const struct {
- unsigned char tbl[32];
-} nameprep_rfc3491_bidi_table[] = {
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 2, 0, 2, 0, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- }},
- {{
- 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1,
- 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1,
- }},
- {{
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1,
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2,
- }},
- {{
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2,
- 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2,
- 0, 2, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2,
- }},
- {{
- 2, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 2, 0, 2,
- }},
- {{
- 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2,
- 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2,
- 0, 2, 2, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 2, 2,
- }},
- {{
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 2, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,
- 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 2, 2,
- 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2,
- 0, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2,
- }},
- {{
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2,
- 0, 2, 2, 0, 0, 2, 2, 2, 2, 0, 0, 0, 2, 2, 0,
- }},
- {{
- 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 2, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2,
- 0, 2, 2, 2, 2, 0, 0, 0, 2, 2, 0, 2, 0, 2, 2,
- }},
- {{
- 0, 0, 0, 2, 2, 0, 0, 0, 2, 2, 2, 0, 0, 0, 2, 2, 2,
- 2, 2, 2, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 2, 2,
- }},
- {{
- 0, 2, 2, 0, 0, 0, 2, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2,
- 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2,
- 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 0, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2,
- }},
- {{
- 2, 0, 0, 0, 0, 0, 2, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
- 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0,
- }},
- {{
- 0, 2, 2, 0, 2, 0, 0, 2, 2, 0, 2, 0, 0, 2, 0, 0, 0,
- 0, 0, 0, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 0, 2, 2, 2, 0, 2, 0, 2, 0, 0, 2, 2, 0, 2, 2, 2, 2,
- 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- }},
- {{
- 0, 0, 0, 0, 0, 2, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 0, 0, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 0, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2,
- }},
- {{
- 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 2, 2, 2, 2, 0, 0, 2,
- 2, 2, 2, 2, 2, 2, 0, 2, 0, 2, 2, 2, 2, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 2, 2, 2, 2, 0, 0, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2,
- 0, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0,
- }},
- {{
- 2, 0, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 2,
- 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 2,
- 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 2, 0, 2, 0, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0,
- }},
- {{
- 0, 0, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2,
- 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0,
- 0, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- }},
- {{
- 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 0, 2, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 2, 0, 2, 0, 2, 0, 2, 2, 2, 2, 0, 2, 2,
- 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2,
- }},
- {{
- 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2,
- }},
- {{
- 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2,
- }},
- {{
- 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 1, 0, 1,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0,
- }},
- {{
- 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 0,
- 0, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2,
- }},
- {{
- 0, 0, 2, 0, 0, 2, 2, 0, 0, 2, 2, 2, 2, 0, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 2, 2, 2,
- }},
- {{
- 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2,
- 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 0, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2,
- 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
-};
-
-static const unsigned char nameprep_rfc3491_bidi_data[] = {
- idn_biditype_others,
- idn_biditype_r_al,
- idn_biditype_l,
-};
-
diff --git a/contrib/idn/idnkit-1.0-src/lib/normalizer.c b/contrib/idn/idnkit-1.0-src/lib/normalizer.c
deleted file mode 100644
index 6695e383..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/normalizer.c
+++ /dev/null
@@ -1,439 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: normalizer.c,v 1.1 2003/06/04 00:26:05 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2000,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <idn/assert.h>
-#include <idn/logmacro.h>
-#include <idn/result.h>
-#include <idn/normalizer.h>
-#include <idn/strhash.h>
-#include <idn/unormalize.h>
-#include <idn/unicode.h>
-#include <idn/ucs4.h>
-#include <idn/debug.h>
-#include <idn/util.h>
-
-#define MAX_LOCAL_SCHEME 3
-
-#define INITIALIZED (scheme_hash != NULL)
-
-typedef struct {
- char *name;
- idn_normalizer_proc_t proc;
-} normalize_scheme_t;
-
-struct idn_normalizer {
- int nschemes;
- int scheme_size;
- normalize_scheme_t **schemes;
- normalize_scheme_t *local_buf[MAX_LOCAL_SCHEME];
- int reference_count;
-};
-
-static idn__strhash_t scheme_hash;
-
-static idn__unicode_version_t vcur = NULL;
-static idn__unicode_version_t v320 = NULL;
-#define INIT_VERSION(version, var) \
- if (var == NULL) { \
- idn_result_t r = idn__unicode_create(version, &var); \
- if (r != idn_success) \
- return (r); \
- }
-
-static idn_result_t expand_schemes(idn_normalizer_t ctx);
-static idn_result_t register_standard_normalizers(void);
-static idn_result_t normalizer_formkc(const unsigned long *from,
- unsigned long *to, size_t tolen);
-static idn_result_t normalizer_formkc_v320(const unsigned long *from,
- unsigned long *to,
- size_t tolen);
-
-static struct standard_normalizer {
- char *name;
- idn_normalizer_proc_t proc;
-} standard_normalizer[] = {
- { "unicode-form-kc", normalizer_formkc },
- { "unicode-form-kc/3.2.0", normalizer_formkc_v320 },
- { "RFC3491", normalizer_formkc_v320 },
- { NULL, NULL },
-};
-
-idn_result_t
-idn_normalizer_initialize(void) {
- idn__strhash_t hash;
- idn_result_t r;
-
- TRACE(("idn_normalizer_initialize()\n"));
-
- if (scheme_hash != NULL) {
- r = idn_success; /* already initialized */
- goto ret;
- }
-
- if ((r = idn__strhash_create(&hash)) != idn_success)
- goto ret;
- scheme_hash = hash;
-
- /* Register standard normalizers */
- r = register_standard_normalizers();
-ret:
- TRACE(("idn_normalizer_initialize(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-idn_result_t
-idn_normalizer_create(idn_normalizer_t *ctxp) {
- idn_normalizer_t ctx;
- idn_result_t r;
-
- assert(ctxp != NULL);
- TRACE(("idn_normalizer_create()\n"));
-
- if ((ctx = malloc(sizeof(struct idn_normalizer))) == NULL) {
- r = idn_nomemory;
- goto ret;
- }
-
- ctx->nschemes = 0;
- ctx->scheme_size = MAX_LOCAL_SCHEME;
- ctx->schemes = ctx->local_buf;
- ctx->reference_count = 1;
- *ctxp = ctx;
-
- r = idn_success;
-ret:
- TRACE(("idn_normalizer_create(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-void
-idn_normalizer_destroy(idn_normalizer_t ctx) {
- assert(ctx != NULL);
-
- TRACE(("idn_normalizer_destroy()\n"));
-
- ctx->reference_count--;
- if (ctx->reference_count <= 0) {
- TRACE(("idn_normalizer_destroy(): the object is destroyed\n"));
- if (ctx->schemes != ctx->local_buf)
- free(ctx->schemes);
- free(ctx);
- } else {
- TRACE(("idn_normalizer_destroy(): "
- "update reference count (%d->%d)\n",
- ctx->reference_count + 1, ctx->reference_count));
- }
-}
-
-void
-idn_normalizer_incrref(idn_normalizer_t ctx) {
- assert(ctx != NULL);
-
- TRACE(("idn_normalizer_incrref()\n"));
- TRACE(("idn_normalizer_incrref: update reference count (%d->%d)\n",
- ctx->reference_count, ctx->reference_count + 1));
-
- ctx->reference_count++;
-}
-
-idn_result_t
-idn_normalizer_add(idn_normalizer_t ctx, const char *scheme_name) {
- idn_result_t r;
- void *v;
- normalize_scheme_t *scheme;
-
- assert(ctx != NULL && scheme_name != NULL);
-
- TRACE(("idn_normalizer_add(scheme_name=%s)\n", scheme_name));
-
- assert(INITIALIZED);
-
- if (idn__strhash_get(scheme_hash, scheme_name, &v) != idn_success) {
- ERROR(("idn_normalizer_add(): invalid scheme \"%-.30s\"\n",
- scheme_name));
- r = idn_invalid_name;
- goto ret;
- }
-
- scheme = v;
-
- assert(ctx->nschemes <= ctx->scheme_size);
-
- if (ctx->nschemes == ctx->scheme_size &&
- (r = expand_schemes(ctx)) != idn_success) {
- goto ret;
- }
-
- ctx->schemes[ctx->nschemes++] = scheme;
- r = idn_success;
-ret:
- TRACE(("idn_normalizer_add(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-idn_result_t
-idn_normalizer_addall(idn_normalizer_t ctx, const char **scheme_names,
- int nschemes) {
- idn_result_t r;
- int i;
-
- assert(ctx != NULL && scheme_names != NULL);
-
- TRACE(("idn_normalizer_addall(nschemes=%d)\n", nschemes));
-
- for (i = 0; i < nschemes; i++) {
- r = idn_normalizer_add(ctx, (const char *)*scheme_names);
- if (r != idn_success)
- goto ret;
- scheme_names++;
- }
-
- r = idn_success;
-ret:
- TRACE(("idn_normalizer_addall(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-idn_result_t
-idn_normalizer_normalize(idn_normalizer_t ctx, const unsigned long *from,
- unsigned long *to, size_t tolen) {
- idn_result_t r;
- unsigned long *src, *dst;
- unsigned long *buffers[2] = {NULL, NULL};
- size_t buflen[2] = {0, 0};
- size_t dstlen;
- int idx;
- int i;
-
- assert(scheme_hash != NULL);
- assert(ctx != NULL && from != NULL && to != NULL);
-
- TRACE(("idn_normalizer_normalize(from=\"%s\", tolen=%d)\n",
- idn__debug_ucs4xstring(from, 50), (int)tolen));
-
- if (ctx->nschemes <= 0) {
- if (tolen < idn_ucs4_strlen(from) + 1) {
- r = idn_buffer_overflow;
- goto ret;
- }
- idn_ucs4_strcpy(to, from);
- r = idn_success;
- goto ret;
- }
-
- /*
- * Normalize.
- */
- src = (void *)from;
- dstlen = idn_ucs4_strlen(from) + 1;
-
- i = 0;
- while (i < ctx->nschemes) {
- TRACE(("idn_normalizer_normalize(): normalize %s\n",
- ctx->schemes[i]->name));
-
- /*
- * Choose destination area to restore the result of a mapping.
- */
- if (i + 1 == ctx->nschemes) {
- dst = to;
- dstlen = tolen;
- } else {
- if (src == buffers[0])
- idx = 1;
- else
- idx = 0;
-
- if (buflen[idx] < dstlen) {
- void *newbuf;
-
- newbuf = realloc(buffers[idx],
- sizeof(long) * dstlen);
- if (newbuf == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- buffers[idx] = (unsigned long *)newbuf;
- buflen[idx] = dstlen;
- }
-
- dst = buffers[idx];
- dstlen = buflen[idx];
- }
-
- /*
- * Perform i-th normalization scheme.
- * If buffer size is not enough, we double it and try again.
- */
- r = (ctx->schemes[i]->proc)(src, dst, dstlen);
- if (r == idn_buffer_overflow && dst != to) {
- dstlen *= 2;
- continue;
- }
- if (r != idn_success)
- goto ret;
-
- src = dst;
- i++;
- }
-
- r = idn_success;
-ret:
- free(buffers[0]);
- free(buffers[1]);
- if (r == idn_success) {
- TRACE(("idn_normalizer_normalize(): success (to=\"%s\")\n",
- idn__debug_ucs4xstring(to, 50)));
- } else {
- TRACE(("idn_normalizer_normalize(): %s\n",
- idn_result_tostring(r)));
- }
- return (r);
-}
-
-idn_result_t
-idn_normalizer_register(const char *scheme_name, idn_normalizer_proc_t proc) {
- idn_result_t r;
- normalize_scheme_t *scheme;
-
- assert(scheme_name != NULL && proc != NULL);
-
- TRACE(("idn_normalizer_register(scheme_name=%s)\n", scheme_name));
-
- assert(INITIALIZED);
-
- scheme = malloc(sizeof(*scheme) + strlen(scheme_name) + 1);
- if (scheme == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- scheme->name = (char *)(scheme + 1);
- (void)strcpy(scheme->name, scheme_name);
- scheme->proc = proc;
-
- r = idn__strhash_put(scheme_hash, scheme_name, scheme);
- if (r != idn_success)
- goto ret;
-
- r = idn_success;
-ret:
- TRACE(("idn_normalizer_register(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-static idn_result_t
-expand_schemes(idn_normalizer_t ctx) {
- normalize_scheme_t **new_schemes;
- int new_size = ctx->scheme_size * 2;
-
- if (ctx->schemes == ctx->local_buf) {
- new_schemes = malloc(sizeof(normalize_scheme_t) * new_size);
- } else {
- new_schemes = realloc(ctx->schemes,
- sizeof(normalize_scheme_t) * new_size);
- }
- if (new_schemes == NULL)
- return (idn_nomemory);
-
- if (ctx->schemes == ctx->local_buf)
- memcpy(new_schemes, ctx->local_buf, sizeof(ctx->local_buf));
-
- ctx->schemes = new_schemes;
- ctx->scheme_size = new_size;
-
- return (idn_success);
-}
-
-static idn_result_t
-register_standard_normalizers(void) {
- int i;
- int failed = 0;
-
- for (i = 0; standard_normalizer[i].name != NULL; i++) {
- idn_result_t r;
- r = idn_normalizer_register(standard_normalizer[i].name,
- standard_normalizer[i].proc);
- if (r != idn_success) {
- WARNING(("idn_normalizer_initialize(): "
- "failed to register \"%-.100s\"\n",
- standard_normalizer[i].name));
- failed++;
- }
- }
- if (failed > 0)
- return (idn_failure);
- else
- return (idn_success);
-}
-
-/*
- * Unicode Normalization Forms -- latest version
- */
-
-static idn_result_t
-normalizer_formkc(const unsigned long *from, unsigned long *to, size_t tolen) {
- INIT_VERSION(NULL, vcur);
- return (idn__unormalize_formkc(vcur, from, to, tolen));
-}
-
-/*
- * Unicode Normalization Forms -- version 3.2.0
- */
-
-static idn_result_t
-normalizer_formkc_v320(const unsigned long *from, unsigned long *to,
- size_t tolen) {
- INIT_VERSION("3.2.0", v320);
- return (idn__unormalize_formkc(v320, from, to, tolen));
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/punycode.c b/contrib/idn/idnkit-1.0-src/lib/punycode.c
deleted file mode 100644
index 292763d5..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/punycode.c
+++ /dev/null
@@ -1,434 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: punycode.c,v 1.1 2003/06/04 00:26:06 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2001,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <idn/result.h>
-#include <idn/assert.h>
-#include <idn/logmacro.h>
-#include <idn/converter.h>
-#include <idn/ucs4.h>
-#include <idn/debug.h>
-#include <idn/punycode.h>
-#include <idn/util.h>
-
-/*
- * Although draft-ietf-idn-punycode-00.txt doesn't specify the ACE
- * signature, we have to choose one. In order to prevent the converted
- * name from beginning with a hyphen, we should choose a prefix rather
- * than a suffix.
- */
-#ifndef IDN_PUNYCODE_PREFIX
-#define IDN_PUNYCODE_PREFIX "xn--"
-#endif
-
-#define INVALID_UCS 0x80000000
-#define MAX_UCS 0x10FFFF
-
-/*
- * As the draft states, it is possible that `delta' may overflow during
- * the encoding. The upper bound of 'delta' is:
- * <# of chars. of input string> + <max. difference in code point> *
- * <# of chars. of input string + 1>
- * For this value not to be greater than 0xffffffff (since the calculation
- * is done using unsigned long, which is at least 32bit long), the maxmum
- * input string size is about 3850 characters, which is long enough for
- * a domain label...
- */
-#define PUNYCODE_MAXINPUT 3800
-
-/*
- * Parameters.
- */
-#define PUNYCODE_BASE 36
-#define PUNYCODE_TMIN 1
-#define PUNYCODE_TMAX 26
-#define PUNYCODE_SKEW 38
-#define PUNYCODE_DAMP 700
-#define PUNYCODE_INITIAL_BIAS 72
-#define PUNYCODE_INITIAL_N 0x80
-
-static int punycode_getwc(const char *s, size_t len,
- int bias, unsigned long *vp);
-static int punycode_putwc(char *s, size_t len,
- unsigned long delta, int bias);
-static int punycode_update_bias(unsigned long delta,
- size_t npoints, int first);
-
-idn_result_t
-idn__punycode_decode(idn_converter_t ctx, void *privdata,
- const char *from, unsigned long *to, size_t tolen) {
- unsigned long *to_org = to;
- unsigned long c, idx;
- size_t prefixlen = strlen(IDN_PUNYCODE_PREFIX);
- size_t fromlen;
- size_t uidx, fidx, ucslen;
- int first, bias;
- idn_result_t r;
-
- assert(ctx != NULL);
-
- TRACE(("idn__punycode_decode(from=\"%s\", tolen=%d)\n",
- idn__debug_xstring(from, 50), (int)tolen));
-
- if (!idn__util_asciihaveaceprefix(from, IDN_PUNYCODE_PREFIX)) {
- if (*from == '\0') {
- r = idn_ucs4_utf8toucs4(from, to, tolen);
- goto ret;
- }
- r = idn_invalid_encoding;
- goto ret;
- }
- from += prefixlen;
- fromlen = strlen(from);
-
- /*
- * Find the last delimiter, and copy the characters
- * before it verbatim.
- */
- ucslen = 0;
- for (fidx = fromlen; fidx > 0; fidx--) {
- if (from[fidx - 1] == '-') {
- if (tolen < fidx) {
- r = idn_buffer_overflow;
- goto ret;
- }
- for (uidx = 0; uidx < fidx - 1; uidx++) {
- to[uidx] = from[uidx];
- }
- ucslen = uidx;
- break;
- }
- }
-
- first = 1;
- bias = PUNYCODE_INITIAL_BIAS;
- c = PUNYCODE_INITIAL_N;
- idx = 0;
- while (fidx < fromlen) {
- int len;
- unsigned long delta;
- int i;
-
- len = punycode_getwc(from + fidx, fromlen - fidx, bias, &delta);
- if (len == 0) {
- r = idn_invalid_encoding;
- goto ret;
- }
- fidx += len;
-
- bias = punycode_update_bias(delta, ucslen + 1, first);
- first = 0;
- idx += delta;
- c += idx / (ucslen + 1);
- uidx = idx % (ucslen + 1);
-
- /* Insert 'c' at uidx. */
- if (tolen-- <= 0) {
- r = idn_buffer_overflow;
- goto ret;
- }
- for (i = ucslen; i > uidx; i--)
- to[i] = to[i - 1];
- to[uidx] = c;
-
- ucslen++;
- idx = uidx + 1;
- }
-
- /* Terminate with NUL. */
- if (tolen <= 0) {
- r = idn_buffer_overflow;
- goto ret;
- }
- to[ucslen] = '\0';
- r = idn_success;
-
-ret:
- if (r == idn_success) {
- TRACE(("idn__punycode_decode(): succcess (to=\"%s\")\n",
- idn__debug_ucs4xstring(to_org, 50)));
- } else {
- TRACE(("idn__punycode_decode(): %s\n", idn_result_tostring(r)));
- }
- return (r);
-}
-
-idn_result_t
-idn__punycode_encode(idn_converter_t ctx, void *privdata,
- const unsigned long *from, char *to, size_t tolen) {
- char *to_org = to;
- unsigned long cur_code, next_code, delta;
- size_t prefixlen = strlen(IDN_PUNYCODE_PREFIX);
- size_t fromlen;
- size_t ucsdone;
- size_t toidx;
- int uidx, bias, first;
- idn_result_t r;
-
- assert(ctx != NULL);
-
- TRACE(("idn__punycode_encode(from=\"%s\", tolen=%d)\n",
- idn__debug_ucs4xstring(from, 50), (int)tolen));
-
- if (*from == '\0') {
- r = idn_ucs4_ucs4toutf8(from, to, tolen);
- goto ret;
- } else if (idn__util_ucs4haveaceprefix(from, IDN_PUNYCODE_PREFIX)) {
- r = idn_prohibited;
- goto ret;
- }
-
- if (tolen < prefixlen) {
- r = idn_buffer_overflow;
- goto ret;
- }
- memcpy(to, IDN_PUNYCODE_PREFIX, prefixlen);
- to += prefixlen;
- tolen -= prefixlen;
-
- fromlen = idn_ucs4_strlen(from);
-
- /*
- * If the input string is too long (actually too long to be sane),
- * return failure in order to prevent possible overflow.
- */
- if (fromlen > PUNYCODE_MAXINPUT) {
- ERROR(("idn__punycode_encode(): "
- "the input string is too long to convert Punycode\n",
- idn__debug_ucs4xstring(from, 50)));
- r = idn_failure;
- goto ret;
- }
-
- ucsdone = 0; /* number of characters processed */
- toidx = 0;
-
- /*
- * First, pick up basic code points and copy them to 'to'.
- */
- for (uidx = 0; uidx < fromlen; uidx++) {
- if (from[uidx] < 0x80) {
- if (toidx >= tolen) {
- r = idn_buffer_overflow;
- goto ret;
- }
- to[toidx++] = from[uidx];
- ucsdone++;
- }
- }
-
- /*
- * If there are any basic code points, output a delimiter
- * (hyphen-minus).
- */
- if (toidx > 0) {
- if (toidx >= tolen) {
- r = idn_buffer_overflow;
- goto ret;
- }
- to[toidx++] = '-';
- to += toidx;
- tolen -= toidx;
- }
-
- /*
- * Then encode non-basic characters.
- */
- first = 1;
- cur_code = PUNYCODE_INITIAL_N;
- bias = PUNYCODE_INITIAL_BIAS;
- delta = 0;
- while (ucsdone < fromlen) {
- int limit = -1, rest;
-
- /*
- * Find the smallest code point equal to or greater
- * than 'cur_code'. Also remember the index of the
- * last occurence of the code point.
- */
- for (next_code = MAX_UCS, uidx = fromlen - 1;
- uidx >= 0; uidx--) {
- if (from[uidx] >= cur_code && from[uidx] < next_code) {
- next_code = from[uidx];
- limit = uidx;
- }
- }
- /* There must be such code point. */
- assert(limit >= 0);
-
- delta += (next_code - cur_code) * (ucsdone + 1);
- cur_code = next_code;
-
- /*
- * Scan the input string again, and encode characters
- * whose code point is 'cur_code'. Use 'limit' to avoid
- * unnecessary scan.
- */
- for (uidx = 0, rest = ucsdone; uidx <= limit; uidx++) {
- if (from[uidx] < cur_code) {
- delta++;
- rest--;
- } else if (from[uidx] == cur_code) {
- int sz = punycode_putwc(to, tolen, delta, bias);
- if (sz == 0) {
- r = idn_buffer_overflow;
- goto ret;
- }
- to += sz;
- tolen -= sz;
- ucsdone++;
- bias = punycode_update_bias(delta, ucsdone,
- first);
- delta = 0;
- first = 0;
- }
- }
- delta += rest + 1;
- cur_code++;
- }
-
- /*
- * Terminate with NUL.
- */
- if (tolen <= 0) {
- r = idn_buffer_overflow;
- goto ret;
- }
- *to = '\0';
- r = idn_success;
-
-ret:
- if (r == idn_success) {
- TRACE(("idn__punycode_encode(): succcess (to=\"%s\")\n",
- idn__debug_xstring(to_org, 50)));
- } else {
- TRACE(("idn__punycode_encode(): %s\n", idn_result_tostring(r)));
- }
- return (r);
-}
-
-static int
-punycode_getwc(const char *s, size_t len, int bias, unsigned long *vp) {
- size_t orglen = len;
- unsigned long v = 0, w = 1;
- int k;
-
- for (k = PUNYCODE_BASE - bias; len > 0; k += PUNYCODE_BASE) {
- int c = *s++;
- int t = (k < PUNYCODE_TMIN) ? PUNYCODE_TMIN :
- (k > PUNYCODE_TMAX) ? PUNYCODE_TMAX : k;
-
- len--;
- if ('a' <= c && c <= 'z')
- c = c - 'a';
- else if ('A' <= c && c <= 'Z')
- c = c - 'A';
- else if ('0' <= c && c <= '9')
- c = c - '0' + 26;
- else
- c = -1;
-
- if (c < 0)
- return (0); /* invalid character */
-
- v += c * w;
-
- if (c < t) {
- *vp = v;
- return (orglen - len);
- }
-
- w *= (PUNYCODE_BASE - t);
- }
-
- return (0); /* final character missing */
-}
-
-static int
-punycode_putwc(char *s, size_t len, unsigned long delta, int bias) {
- const char *punycode_base36 = "abcdefghijklmnopqrstuvwxyz0123456789";
- int k;
- char *sorg = s;
-
- for (k = PUNYCODE_BASE - bias; 1; k += PUNYCODE_BASE) {
- int t = (k < PUNYCODE_TMIN) ? PUNYCODE_TMIN :
- (k > PUNYCODE_TMAX) ? PUNYCODE_TMAX : k;
-
- if (delta < t)
- break;
- if (len < 1)
- return (0);
- *s++ = punycode_base36[t + ((delta - t) % (PUNYCODE_BASE - t))];
- len--;
- delta = (delta - t) / (PUNYCODE_BASE - t);
- }
- if (len < 1)
- return (0);
- *s++ = punycode_base36[delta];
- return (s - sorg);
-}
-
-static int
-punycode_update_bias(unsigned long delta, size_t npoints, int first) {
- int k = 0;
-
- delta /= first ? PUNYCODE_DAMP : 2;
- delta += delta / npoints;
-
- while (delta > ((PUNYCODE_BASE - PUNYCODE_TMIN) * PUNYCODE_TMAX) / 2) {
- delta /= PUNYCODE_BASE - PUNYCODE_TMIN;
- k++;
- }
- return (PUNYCODE_BASE * k +
- (((PUNYCODE_BASE - PUNYCODE_TMIN + 1) * delta) /
- (delta + PUNYCODE_SKEW)));
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/race.c b/contrib/idn/idnkit-1.0-src/lib/race.c
deleted file mode 100644
index 44c2101d..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/race.c
+++ /dev/null
@@ -1,427 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: race.c,v 1.1 2003/06/04 00:26:07 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2000,2001,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <idn/result.h>
-#include <idn/assert.h>
-#include <idn/logmacro.h>
-#include <idn/converter.h>
-#include <idn/ucs4.h>
-#include <idn/debug.h>
-#include <idn/race.h>
-#include <idn/util.h>
-
-#ifndef IDN_RACE_PREFIX
-#define IDN_RACE_PREFIX "bq--"
-#endif
-#define RACE_2OCTET_MODE 0xd8
-#define RACE_ESCAPE 0xff
-#define RACE_ESCAPE_2ND 0x99
-
-#define RACE_BUF_SIZE 128 /* more than enough */
-
-/*
- * Unicode surrogate pair.
- */
-#define IS_SURROGATE_HIGH(v) (0xd800 <= (v) && (v) <= 0xdbff)
-#define IS_SURROGATE_LOW(v) (0xdc00 <= (v) && (v) <= 0xdfff)
-#define SURROGATE_HIGH(v) (SURROGATE_H_OFF + (((v) - 0x10000) >> 10))
-#define SURROGATE_LOW(v) (SURROGATE_L_OFF + ((v) & 0x3ff))
-#define SURROGATE_BASE 0x10000
-#define SURROGATE_H_OFF 0xd800
-#define SURROGATE_L_OFF 0xdc00
-#define COMBINE_SURROGATE(h, l) \
- (SURROGATE_BASE + (((h)-SURROGATE_H_OFF)<<10) + ((l)-SURROGATE_L_OFF))
-
-/*
- * Compression type.
- */
-enum {
- compress_one, /* all characters are in a single row */
- compress_two, /* row 0 and another row */
- compress_none /* nope */
-};
-
-static idn_result_t race_decode_decompress(const char *from,
- unsigned short *buf,
- size_t buflen);
-static idn_result_t race_compress_encode(const unsigned short *p,
- int compress_mode,
- char *to, size_t tolen);
-static int get_compress_mode(unsigned short *p);
-
-idn_result_t
-idn__race_decode(idn_converter_t ctx, void *privdata,
- const char *from, unsigned long *to, size_t tolen) {
- unsigned short *buf = NULL;
- size_t prefixlen = strlen(IDN_RACE_PREFIX);
- size_t fromlen;
- size_t buflen;
- idn_result_t r;
-
- assert(ctx != NULL);
-
- TRACE(("idn__race_decode(from=\"%s\", tolen=%d)\n",
- idn__debug_xstring(from, 50), (int)tolen));
-
- if (!idn__util_asciihaveaceprefix(from, IDN_RACE_PREFIX)) {
- if (*from == '\0') {
- r = idn_ucs4_utf8toucs4(from, to, tolen);
- goto ret;
- }
- r = idn_invalid_encoding;
- goto ret;
- }
- from += prefixlen;
- fromlen = strlen(from);
-
- /*
- * Allocate sufficient buffer.
- */
- buflen = fromlen + 1;
- buf = malloc(sizeof(*buf) * buflen);
- if (buf == NULL) {
- r = idn_nomemory;
- goto ret;
- }
-
- /*
- * Decode base32 and decompress.
- */
- r = race_decode_decompress(from, buf, buflen);
- if (r != idn_success)
- goto ret;
-
- /*
- * Now 'buf' points the decompressed string, which must contain
- * UTF-16 characters.
- */
-
- /*
- * Convert to UCS4.
- */
- r = idn_ucs4_utf16toucs4(buf, to, tolen);
- if (r != idn_success)
- goto ret;
-
-ret:
- free(buf);
- if (r == idn_success) {
- TRACE(("idn__race_decode(): succcess (to=\"%s\")\n",
- idn__debug_ucs4xstring(to, 50)));
- } else {
- TRACE(("idn__race_decode(): %s\n", idn_result_tostring(r)));
- }
- return (r);
-}
-
-static idn_result_t
-race_decode_decompress(const char *from, unsigned short *buf, size_t buflen)
-{
- unsigned short *p = buf;
- unsigned int bitbuf = 0;
- int bitlen = 0;
- int i, j;
- size_t len;
-
- while (*from != '\0') {
- int c = *from++;
- int x;
-
- if ('a' <= c && c <= 'z')
- x = c - 'a';
- else if ('A' <= c && c <= 'Z')
- x = c - 'A';
- else if ('2' <= c && c <= '7')
- x = c - '2' + 26;
- else
- return (idn_invalid_encoding);
-
- bitbuf = (bitbuf << 5) + x;
- bitlen += 5;
- if (bitlen >= 8) {
- *p++ = (bitbuf >> (bitlen - 8)) & 0xff;
- bitlen -= 8;
- }
- }
- len = p - buf;
-
- /*
- * Now 'buf' holds the decoded string.
- */
-
- /*
- * Decompress.
- */
- if (buf[0] == RACE_2OCTET_MODE) {
- if ((len - 1) % 2 != 0)
- return (idn_invalid_encoding);
- for (i = 1, j = 0; i < len; i += 2, j++)
- buf[j] = (buf[i] << 8) + buf[i + 1];
- len = j;
- } else {
- unsigned short c = buf[0] << 8; /* higher octet */
-
- for (i = 1, j = 0; i < len; j++) {
- if (buf[i] == RACE_ESCAPE) {
- if (i + 1 >= len)
- return (idn_invalid_encoding);
- else if (buf[i + 1] == RACE_ESCAPE_2ND)
- buf[j] = c | 0xff;
- else
- buf[j] = buf[i + 1];
- i += 2;
-
- } else if (buf[i] == 0x99 && c == 0x00) {
- /*
- * The RACE specification says this is error.
- */
- return (idn_invalid_encoding);
-
- } else {
- buf[j] = c | buf[i++];
- }
- }
- len = j;
- }
- buf[len] = '\0';
-
- return (idn_success);
-}
-
-idn_result_t
-idn__race_encode(idn_converter_t ctx, void *privdata,
- const unsigned long *from, char *to, size_t tolen) {
- char *to_org = to;
- unsigned short *p, *buf = NULL;
- size_t prefixlen = strlen(IDN_RACE_PREFIX);
- size_t buflen;
- size_t fromlen;
- idn_result_t r;
- int compress_mode;
-
- assert(ctx != NULL);
-
- TRACE(("idn__race_encode(from=\"%s\", tolen=%d)\n",
- idn__debug_ucs4xstring(from, 50), (int)tolen));
-
- if (*from == '\0') {
- r = idn_ucs4_ucs4toutf8(from, to, tolen);
- goto ret;
- } else if (idn__util_ucs4haveaceprefix(from, IDN_RACE_PREFIX)) {
- r = idn_prohibited;
- goto ret;
- }
-
- if (tolen < prefixlen) {
- r = idn_buffer_overflow;
- goto ret;
- }
- memcpy(to, IDN_RACE_PREFIX, prefixlen);
- to += prefixlen;
- tolen -= prefixlen;
-
- fromlen = idn_ucs4_strlen(from);
- buflen = fromlen * 2 + 2;
-
- /*
- * Convert to UTF-16.
- * Preserve space for a character at the top of the buffer.
- */
- for (;;) {
- unsigned short *new_buf;
-
- new_buf = realloc(buf, sizeof(*buf) * buflen);
- if (new_buf == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- buf = new_buf;
-
- r = idn_ucs4_ucs4toutf16(from, buf + 1, buflen - 1);
- if (r == idn_success)
- break;
- else if (r != idn_buffer_overflow)
- goto ret;
-
- buflen = fromlen * 2 + 2;
- }
- p = buf + 1;
-
- /*
- * Now 'p' contains UTF-16 encoded string.
- */
-
- /*
- * Check U+0099.
- * RACE doesn't permit U+0099 in an input string.
- */
- for (p = buf + 1; *p != '\0'; p++) {
- if (*p == 0x0099) {
- r = idn_invalid_encoding;
- goto ret;
- }
- }
-
- /*
- * Compress, encode in base-32 and output.
- */
- compress_mode = get_compress_mode(buf + 1);
- r = race_compress_encode(buf, compress_mode, to, tolen);
-
-ret:
- free(buf);
- if (r == idn_success) {
- TRACE(("idn__race_encode(): succcess (to=\"%s\")\n",
- idn__debug_xstring(to_org, 50)));
- } else {
- TRACE(("idn__race_encode(): %s\n", idn_result_tostring(r)));
- }
- return (r);
-}
-
-static idn_result_t
-race_compress_encode(const unsigned short *p, int compress_mode,
- char *to, size_t tolen)
-{
- unsigned long bitbuf = *p++; /* bit stream buffer */
- int bitlen = 8; /* # of bits in 'bitbuf' */
-
- while (*p != '\0' || bitlen > 0) {
- unsigned int c = *p;
-
- if (c == '\0') {
- /* End of data. Flush. */
- bitbuf <<= (5 - bitlen);
- bitlen = 5;
- } else if (compress_mode == compress_none) {
- /* Push 16 bit data. */
- bitbuf = (bitbuf << 16) | c;
- bitlen += 16;
- p++;
- } else {/* compress_mode == compress_one/compress_two */
- /* Push 8 or 16 bit data. */
- if (compress_mode == compress_two &&
- (c & 0xff00) == 0) {
- /* Upper octet is zero (and not U1). */
- bitbuf = (bitbuf << 16) | 0xff00 | c;
- bitlen += 16;
- } else if ((c & 0xff) == 0xff) {
- /* Lower octet is 0xff. */
- bitbuf = (bitbuf << 16) |
- (RACE_ESCAPE << 8) | RACE_ESCAPE_2ND;
- bitlen += 16;
- } else {
- /* Just output lower octet. */
- bitbuf = (bitbuf << 8) | (c & 0xff);
- bitlen += 8;
- }
- p++;
- }
-
- /*
- * Output bits in 'bitbuf' in 5-bit unit.
- */
- while (bitlen >= 5) {
- int x;
-
- /* Get top 5 bits. */
- x = (bitbuf >> (bitlen - 5)) & 0x1f;
- bitlen -= 5;
-
- /* Encode. */
- if (x < 26)
- x += 'a';
- else
- x = (x - 26) + '2';
-
- if (tolen < 1)
- return (idn_buffer_overflow);
-
- *to++ = x;
- tolen--;
- }
- }
-
- if (tolen <= 0)
- return (idn_buffer_overflow);
-
- *to = '\0';
- return (idn_success);
-}
-
-static int
-get_compress_mode(unsigned short *p) {
- int zero = 0;
- unsigned int upper = 0;
- unsigned short *modepos = p - 1;
-
- while (*p != '\0') {
- unsigned int hi = *p++ & 0xff00;
-
- if (hi == 0) {
- zero++;
- } else if (hi == upper) {
- ;
- } else if (upper == 0) {
- upper = hi;
- } else {
- *modepos = RACE_2OCTET_MODE;
- return (compress_none);
- }
- }
- *modepos = upper >> 8;
- if (upper > 0 && zero > 0)
- return (compress_two);
- else
- return (compress_one);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/res.c b/contrib/idn/idnkit-1.0-src/lib/res.c
deleted file mode 100644
index a3024d32..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/res.c
+++ /dev/null
@@ -1,1726 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: res.c,v 1.1 2003/06/04 00:26:10 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2000,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <idn/result.h>
-#include <idn/assert.h>
-#include <idn/logmacro.h>
-#include <idn/converter.h>
-#include <idn/normalizer.h>
-#include <idn/checker.h>
-#include <idn/mapper.h>
-#include <idn/mapselector.h>
-#include <idn/delimitermap.h>
-#include <idn/resconf.h>
-#include <idn/res.h>
-#include <idn/util.h>
-#include <idn/debug.h>
-#include <idn/ucs4.h>
-
-#ifndef IDN_UTF8_ENCODING_NAME
-#define IDN_UTF8_ENCODING_NAME "UTF-8" /* by IANA */
-#endif
-
-#ifndef WITHOUT_ICONV
-#define ENCODE_MASK \
- (IDN_LOCALCONV | IDN_DELIMMAP | IDN_LOCALMAP | IDN_MAP | \
- IDN_NORMALIZE | IDN_PROHCHECK | IDN_UNASCHECK | IDN_BIDICHECK | \
- IDN_ASCCHECK | IDN_IDNCONV | IDN_LENCHECK | IDN_ENCODE_QUERY | \
- IDN_UNDOIFERR)
-#define DECODE_MASK \
- (IDN_DELIMMAP | IDN_MAP | IDN_NORMALIZE | IDN_PROHCHECK | \
- IDN_UNASCHECK | IDN_BIDICHECK | IDN_IDNCONV | IDN_ASCCHECK | \
- IDN_RTCHECK | IDN_LOCALCONV | IDN_DECODE_QUERY)
-#else
-#define ENCODE_MASK \
- (IDN_DELIMMAP | IDN_LOCALMAP | IDN_MAP | IDN_NORMALIZE | \
- IDN_PROHCHECK | IDN_UNASCHECK | IDN_BIDICHECK | IDN_ASCCHECK | \
- IDN_IDNCONV | IDN_LENCHECK | IDN_ENCODE_QUERY | IDN_UNDOIFERR)
-#define DECODE_MASK \
- (IDN_DELIMMAP | IDN_MAP | IDN_NORMALIZE | IDN_PROHCHECK | \
- IDN_UNASCHECK | IDN_BIDICHECK | IDN_IDNCONV | IDN_ASCCHECK | \
- IDN_RTCHECK | IDN_DECODE_QUERY)
-#endif
-
-#define MAX_LABEL_LENGTH 63
-
-/*
- * label to convert.
- */
-typedef struct labellist * labellist_t;
-struct labellist {
- unsigned long *name;
- size_t name_length;
- unsigned long *undo_name;
- labellist_t next;
- labellist_t previous;
- int dot_followed;
-};
-
-typedef idn_result_t (*res_insnproc_t)(idn_resconf_t ctx,
- labellist_t label);
-
-static void idn_res_initialize(void);
-static idn_result_t copy_verbatim(const char *from, char *to,
- size_t tolen);
-static idn_result_t labellist_create(const unsigned long *name,
- labellist_t *labelp);
-static void labellist_destroy(labellist_t label);
-static idn_result_t labellist_setname(labellist_t label,
- const unsigned long *name);
-static const unsigned long *
- labellist_getname(labellist_t label);
-static const unsigned long *
- labellist_gettldname(labellist_t label);
-static idn_result_t labellist_getnamelist(labellist_t label,
- unsigned long *name,
- size_t label_length);
-static void labellist_undo(labellist_t label);
-static labellist_t labellist_tail(labellist_t label);
-static labellist_t labellist_previous(labellist_t label);
-
-#ifndef WITHOUT_ICONV
-static idn_result_t label_localdecodecheck(idn_resconf_t ctx,
- labellist_t label);
-#endif
-static idn_result_t label_idnencode_ace(idn_resconf_t ctx,
- labellist_t label);
-static idn_result_t label_idndecode(idn_resconf_t ctx, labellist_t label);
-static idn_result_t label_localmap(idn_resconf_t ctx, labellist_t label);
-static idn_result_t label_map(idn_resconf_t ctx, labellist_t label);
-static idn_result_t label_normalize(idn_resconf_t ctx, labellist_t label);
-static idn_result_t label_prohcheck(idn_resconf_t ctx, labellist_t label);
-static idn_result_t label_unascheck(idn_resconf_t ctx, labellist_t label);
-static idn_result_t label_bidicheck(idn_resconf_t ctx, labellist_t label);
-static idn_result_t label_asccheck(idn_resconf_t ctx, labellist_t label);
-static idn_result_t label_lencheck_ace(idn_resconf_t ctx,
- labellist_t label);
-static idn_result_t label_lencheck_nonace(idn_resconf_t ctx,
- labellist_t label);
-static idn_result_t label_rtcheck(idn_resconf_t ctx, idn_action_t actions,
- labellist_t label,
- const unsigned long *original_name);
-
-static int initialized;
-static int enabled;
-
-void
-idn_res_enable(int on_off) {
- if (!initialized) {
- idn_res_initialize();
- }
-
- if (on_off == 0) {
- enabled = 0;
- } else {
- enabled = 1;
- }
-}
-
-static void
-idn_res_initialize(void) {
- if (!initialized) {
- char *value = getenv("IDN_DISABLE");
-
- if (value == NULL) {
- enabled = 1;
- } else {
- enabled = 0;
- }
- initialized = 1;
- }
-}
-
-idn_result_t
-idn_res_encodename(idn_resconf_t ctx, idn_action_t actions, const char *from,
- char *to, size_t tolen) {
- idn_converter_t local_converter = NULL;
- idn_converter_t idn_converter = NULL;
- idn_delimitermap_t delimiter_mapper;
- idn_result_t r;
- labellist_t labels = NULL, l;
- unsigned long *buffer = NULL;
- size_t buffer_length;
- int from_is_root;
- int idn_is_ace;
-
- assert(ctx != NULL && from != NULL && to != NULL);
-
- TRACE(("idn_res_encodename(actions=%s, from=\"%s\", tolen=%d)\n",
- idn__res_actionstostring(actions),
- idn__debug_xstring(from, 50), (int)tolen));
-
- if (actions & ~ENCODE_MASK) {
- WARNING(("idn_res_encodename: invalid actions 0x%x\n",
- actions));
- r = idn_invalid_action;
- goto ret;
- }
-
- if (!initialized)
- idn_res_initialize();
- if (!enabled || actions == 0) {
- r = copy_verbatim(from, to, tolen);
- goto ret;
- } else if (tolen <= 0) {
- r = idn_buffer_overflow;
- goto ret;
- }
-
- if (actions & IDN_ENCODE_QUERY) {
-#ifndef WITHOUT_ICONV
- actions |= (IDN_LOCALCONV | IDN_DELIMMAP | IDN_LOCALMAP | \
- IDN_MAP | IDN_NORMALIZE | IDN_PROHCHECK | \
- IDN_BIDICHECK | IDN_IDNCONV | IDN_LENCHECK);
-#else
- actions |= (IDN_DELIMMAP | IDN_LOCALMAP | IDN_MAP | \
- IDN_NORMALIZE | IDN_PROHCHECK | IDN_BIDICHECK | \
- IDN_IDNCONV | IDN_LENCHECK);
-#endif
- }
-
- /*
- * Convert `from' to UCS4.
- */
- local_converter = idn_resconf_getlocalconverter(ctx);
-#ifndef WITHOUT_ICONV
- if (local_converter == NULL) {
- r = idn_invalid_name;
- goto ret;
- }
-#endif
-
- idn_converter = idn_resconf_getidnconverter(ctx);
- if (idn_converter != NULL &&
- idn_converter_isasciicompatible(idn_converter))
- idn_is_ace = 1;
- else
- idn_is_ace = 0;
-
- buffer_length = tolen * 2;
-
- for (;;) {
- void *new_buffer;
-
- new_buffer = realloc(buffer, sizeof(*buffer) * buffer_length);
- if (new_buffer == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- buffer = (unsigned long *)new_buffer;
-
- if (actions & IDN_LOCALCONV) {
- r = idn_converter_convtoucs4(local_converter, from,
- buffer, buffer_length);
- } else {
- r = idn_ucs4_utf8toucs4(from, buffer, buffer_length);
- }
- if (r == idn_success)
- break;
- else if (r != idn_buffer_overflow)
- goto ret;
-
- buffer_length *= 2;
- }
-
- if (*buffer == '\0') {
- if (tolen <= 0) {
- r = idn_buffer_overflow;
- goto ret;
- }
- *to = '\0';
- r = idn_success;
- goto ret;
- }
-
- /*
- * Delimiter map.
- */
- if (actions & IDN_DELIMMAP) {
- TRACE(("res delimitermap(name=\"%s\")\n",
- idn__debug_ucs4xstring(buffer, 50)));
-
- delimiter_mapper = idn_resconf_getdelimitermap(ctx);
- if (delimiter_mapper != NULL) {
- r = idn_delimitermap_map(delimiter_mapper, buffer,
- buffer, buffer_length);
- idn_delimitermap_destroy(delimiter_mapper);
- if (r != idn_success)
- goto ret;
- }
- TRACE(("res delimitermap(): success (name=\"%s\")\n",
- idn__debug_ucs4xstring(buffer, 50)));
- }
-
- from_is_root = (buffer[0] == '.' && buffer[1] == '\0');
-
- /*
- * Split the name into a list of labels.
- */
- r = labellist_create(buffer, &labels);
- if (r != idn_success)
- goto ret;
-
- /*
- * Perform conversions and tests.
- */
- for (l = labellist_tail(labels); l != NULL;
- l = labellist_previous(l)) {
-
- if (!idn__util_ucs4isasciirange(labellist_getname(l))) {
- if (actions & IDN_LOCALMAP) {
- r = label_localmap(ctx, l);
- if (r != idn_success)
- goto ret;
- }
- }
-
- if (!idn__util_ucs4isasciirange(labellist_getname(l))) {
- if (actions & IDN_MAP) {
- r = label_map(ctx, l);
- if (r != idn_success)
- goto ret;
- }
- if (actions & IDN_NORMALIZE) {
- r = label_normalize(ctx, l);
- if (r != idn_success)
- goto ret;
- }
- if (actions & IDN_PROHCHECK) {
- r = label_prohcheck(ctx, l);
- if (r == idn_prohibited &&
- (actions & IDN_UNDOIFERR)) {
- labellist_undo(l);
- continue;
- } else if (r != idn_success) {
- goto ret;
- }
- }
- if (actions & IDN_UNASCHECK) {
- r = label_unascheck(ctx, l);
- if (r == idn_prohibited &&
- (actions & IDN_UNDOIFERR)) {
- labellist_undo(l);
- continue;
- } else if (r != idn_success) {
- goto ret;
- }
- }
- if (actions & IDN_BIDICHECK) {
- r = label_bidicheck(ctx, l);
- if (r == idn_prohibited &&
- (actions & IDN_UNDOIFERR)) {
- labellist_undo(l);
- continue;
- } else if (r != idn_success) {
- goto ret;
- }
- }
- }
-
- if (actions & IDN_ASCCHECK) {
- r = label_asccheck(ctx, l);
- if (r == idn_prohibited && (actions & IDN_UNDOIFERR)) {
- labellist_undo(l);
- continue;
- } else if (r != idn_success) {
- goto ret;
- }
- }
-
- if (!idn__util_ucs4isasciirange(labellist_getname(l))) {
- if ((actions & IDN_IDNCONV) && idn_is_ace) {
- r = label_idnencode_ace(ctx, l);
- if (r != idn_success)
- goto ret;
- }
- }
-
- if (!from_is_root && (actions & IDN_LENCHECK)) {
- if (idn_is_ace)
- r = label_lencheck_ace(ctx, l);
- else
- r = label_lencheck_nonace(ctx, l);
- if (r == idn_invalid_length &&
- (actions & IDN_UNDOIFERR)) {
- labellist_undo(l);
- continue;
- } else if (r != idn_success) {
- goto ret;
- }
- }
- }
-
- /*
- * Concat a list of labels to a name.
- */
- for (;;) {
- void *new_buffer;
-
- new_buffer = realloc(buffer, sizeof(*buffer) * buffer_length);
- if (new_buffer == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- buffer = (unsigned long *)new_buffer;
-
- r = labellist_getnamelist(labels, buffer, buffer_length);
- if (r == idn_success)
- break;
- else if (r != idn_buffer_overflow)
- goto ret;
-
- buffer_length *= 2;
- }
-
- if ((actions & IDN_IDNCONV) && idn_converter != NULL && !idn_is_ace) {
- r = idn_converter_convfromucs4(idn_converter, buffer, to,
- tolen);
- } else {
- r = idn_ucs4_ucs4toutf8(buffer, to, tolen);
- }
-
-ret:
- if (r == idn_success) {
- TRACE(("idn_res_encodename(): success (to=\"%s\")\n",
- idn__debug_xstring(to, 50)));
- } else {
- TRACE(("idn_res_encodename(): %s\n", idn_result_tostring(r)));
- }
- free(buffer);
- if (local_converter != NULL)
- idn_converter_destroy(local_converter);
- if (idn_converter != NULL)
- idn_converter_destroy(idn_converter);
- if (labels != NULL)
- labellist_destroy(labels);
- return (r);
-}
-
-idn_result_t
-idn_res_decodename(idn_resconf_t ctx, idn_action_t actions, const char *from,
- char *to, size_t tolen) {
- idn_converter_t local_converter = NULL;
- idn_converter_t idn_converter = NULL;
- idn_delimitermap_t delimiter_mapper;
- idn_result_t r;
- labellist_t labels = NULL, l;
- unsigned long *buffer = NULL;
- unsigned long *saved_name = NULL;
- size_t buffer_length;
- int idn_is_ace;
-
- assert(ctx != NULL && from != NULL && to != NULL);
-
- TRACE(("idn_res_decodename(actions=%s, from=\"%s\", tolen=%d)\n",
- idn__res_actionstostring(actions),
- idn__debug_xstring(from, 50), (int)tolen));
-
- if (actions & ~DECODE_MASK) {
- WARNING(("idn_res_decodename: invalid actions 0x%x\n",
- actions));
- r = idn_invalid_action;
- goto ret;
- }
-
- if (!initialized)
- idn_res_initialize();
- if (!enabled || actions == 0) {
- r = copy_verbatim(from, to, tolen);
- goto ret;
- } else if (tolen <= 0) {
- r = idn_buffer_overflow;
- goto ret;
- }
-
- if (actions & IDN_DECODE_QUERY) {
-#ifndef WITHOUT_ICONV
- actions |= (IDN_DELIMMAP | IDN_MAP | IDN_NORMALIZE | \
- IDN_PROHCHECK | IDN_BIDICHECK | IDN_IDNCONV | \
- IDN_RTCHECK | IDN_LOCALCONV);
-#else
- actions |= (IDN_DELIMMAP | IDN_MAP | IDN_NORMALIZE | \
- IDN_PROHCHECK | IDN_BIDICHECK | IDN_IDNCONV | \
- IDN_RTCHECK);
-#endif
- }
-
- /*
- * Convert `from' to UCS4.
- */
- local_converter = idn_resconf_getlocalconverter(ctx);
-#ifndef WITHOUT_ICONV
- if (local_converter == NULL) {
- r = idn_invalid_name;
- goto ret;
- }
-#endif
-
- idn_converter = idn_resconf_getidnconverter(ctx);
- if (idn_converter != NULL &&
- idn_converter_isasciicompatible(idn_converter))
- idn_is_ace = 1;
- else
- idn_is_ace = 0;
-
- buffer_length = tolen * 2;
-
- TRACE(("res idndecode(name=\"%s\")\n", idn__debug_xstring(from, 50)));
-
- for (;;) {
- void *new_buffer;
-
- new_buffer = realloc(buffer, sizeof(*buffer) * buffer_length);
- if (new_buffer == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- buffer = (unsigned long *)new_buffer;
-
- if ((actions & IDN_IDNCONV) &&
- idn_converter != NULL && !idn_is_ace) {
- r = idn_converter_convtoucs4(idn_converter, from,
- buffer, buffer_length);
- } else {
- r = idn_ucs4_utf8toucs4(from, buffer, buffer_length);
- }
- if (r == idn_success)
- break;
- else if (r != idn_buffer_overflow)
- goto ret;
-
- buffer_length *= 2;
- }
-
- if (*buffer == '\0') {
- if (tolen <= 0) {
- r = idn_buffer_overflow;
- goto ret;
- }
- *to = '\0';
- r = idn_success;
- goto ret;
- }
-
- /*
- * Delimiter map.
- */
- if (actions & IDN_DELIMMAP) {
- TRACE(("res delimitermap(name=\"%s\")\n",
- idn__debug_ucs4xstring(buffer, 50)));
-
- delimiter_mapper = idn_resconf_getdelimitermap(ctx);
- if (delimiter_mapper != NULL) {
- r = idn_delimitermap_map(delimiter_mapper, buffer,
- buffer, buffer_length);
- idn_delimitermap_destroy(delimiter_mapper);
- if (r != idn_success)
- goto ret;
- }
- TRACE(("res delimitermap(): success (name=\"%s\")\n",
- idn__debug_ucs4xstring(buffer, 50)));
- }
-
- /*
- * Split the name into a list of labels.
- */
- r = labellist_create(buffer, &labels);
- if (r != idn_success)
- goto ret;
-
- /*
- * Perform conversions and tests.
- */
- for (l = labellist_tail(labels); l != NULL;
- l = labellist_previous(l)) {
-
- free(saved_name);
- saved_name = NULL;
-
- if (!idn__util_ucs4isasciirange(labellist_getname(l))) {
- if (actions & IDN_MAP) {
- r = label_map(ctx, l);
- if (r != idn_success)
- goto ret;
- }
- if (actions & IDN_NORMALIZE) {
- r = label_normalize(ctx, l);
- if (r != idn_success)
- goto ret;
- }
- if (actions & IDN_PROHCHECK) {
- r = label_prohcheck(ctx, l);
- if (r == idn_prohibited) {
- labellist_undo(l);
- continue;
- } else if (r != idn_success) {
- goto ret;
- }
- }
- if (actions & IDN_UNASCHECK) {
- r = label_unascheck(ctx, l);
- if (r == idn_prohibited) {
- labellist_undo(l);
- continue;
- } else if (r != idn_success) {
- goto ret;
- }
- }
- if (actions & IDN_BIDICHECK) {
- r = label_bidicheck(ctx, l);
- if (r == idn_prohibited) {
- labellist_undo(l);
- continue;
- } else if (r != idn_success) {
- goto ret;
- }
- }
- }
-
- if ((actions & IDN_IDNCONV) && idn_is_ace) {
- saved_name = idn_ucs4_strdup(labellist_getname(l));
- if (saved_name == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- r = label_idndecode(ctx, l);
- if (r == idn_invalid_encoding) {
- labellist_undo(l);
- continue;
- } else if (r != idn_success) {
- goto ret;
- }
- }
- if ((actions & IDN_RTCHECK) && saved_name != NULL) {
- r = label_rtcheck(ctx, actions, l, saved_name);
- if (r == idn_invalid_encoding) {
- labellist_undo(l);
- continue;
- } else if (r != idn_success) {
- goto ret;
- }
- }
-
-#ifndef WITHOUT_ICONV
- if (actions & IDN_LOCALCONV) {
- r = label_localdecodecheck(ctx, l);
- if (r != idn_success)
- goto ret;
- }
-#endif
- }
-
- /*
- * Concat a list of labels to a name.
- */
- for (;;) {
- void *new_buffer;
-
- new_buffer = realloc(buffer, sizeof(*buffer) * buffer_length);
- if (new_buffer == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- buffer = (unsigned long *)new_buffer;
-
- r = labellist_getnamelist(labels, buffer, buffer_length);
- if (r == idn_success)
- break;
- else if (r != idn_buffer_overflow)
- goto ret;
-
- buffer_length *= 2;
- }
-
- if (actions & IDN_LOCALCONV) {
- r = idn_converter_convfromucs4(local_converter, buffer, to,
- tolen);
- } else {
- r = idn_ucs4_ucs4toutf8(buffer, to, tolen);
- }
-
-ret:
- if (r == idn_success) {
- TRACE(("idn_res_decodename(): success (to=\"%s\")\n",
- idn__debug_xstring(to, 50)));
- } else {
- TRACE(("idn_res_decodename(): %s\n", idn_result_tostring(r)));
- }
- free(saved_name);
- free(buffer);
- if (local_converter != NULL)
- idn_converter_destroy(local_converter);
- if (idn_converter != NULL)
- idn_converter_destroy(idn_converter);
- if (labels != NULL)
- labellist_destroy(labels);
- return (r);
-}
-
-idn_result_t
-idn_res_decodename2(idn_resconf_t ctx, idn_action_t actions, const char *from,
- char *to, size_t tolen, const char *auxencoding) {
-#ifdef WITHOUT_ICONV
- return idn_failure;
-
-#else /* WITHOUT_ICONV */
- idn_result_t r;
- idn_converter_t aux_converter = NULL;
- unsigned long *buffer_ucs4 = NULL;
- char *buffer_utf8 = NULL;
- size_t buffer_length;
-
- assert(ctx != NULL && from != NULL && to != NULL);
-
- TRACE(("idn_res_decodename2(actions=%s, from=\"%s\", tolen=%d, "
- "auxencoding=\"%s\")\n",
- idn__res_actionstostring(actions),
- idn__debug_xstring(from, 50), (int)tolen,
- (auxencoding != NULL) ? auxencoding : "<null>"));
-
- if (!initialized)
- idn_res_initialize();
- if (!enabled || actions == 0) {
- r = copy_verbatim(from, to, tolen);
- goto ret;
- } else if (tolen <= 0) {
- r = idn_buffer_overflow;
- goto ret;
- }
-
- if (auxencoding == NULL ||
- strcmp(auxencoding, IDN_UTF8_ENCODING_NAME) == 0 ||
- strcmp(auxencoding, "UTF-8") == 0) {
- return idn_res_decodename(ctx, actions, from, to, tolen);
- }
-
- /*
- * Convert `from' to UCS4.
- */
- r = idn_resconf_setauxidnconvertername(ctx, auxencoding,
- IDN_CONVERTER_DELAYEDOPEN);
- if (r != idn_success) {
- goto ret;
- }
-
- aux_converter = idn_resconf_getauxidnconverter(ctx);
- if (aux_converter == NULL) {
- r = idn_failure;
- goto ret;
- }
-
- buffer_length = tolen * 2;
- for (;;) {
- void *new_buffer;
-
- new_buffer = realloc(buffer_ucs4,
- sizeof(*buffer_ucs4) * buffer_length);
- if (new_buffer == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- buffer_ucs4 = (unsigned long *)new_buffer;
-
- r = idn_converter_convtoucs4(aux_converter, from,
- buffer_ucs4,
- buffer_length);
- if (r == idn_success)
- break;
- else if (r != idn_buffer_overflow)
- goto ret;
-
- buffer_length *= 2;
- }
-
- if (*buffer_ucs4 == '\0') {
- if (tolen <= 0) {
- r = idn_buffer_overflow;
- goto ret;
- }
- *to = '\0';
- r = idn_success;
- goto ret;
- }
-
- /*
- * Convert `buffer_ucs4' to UTF-8.
- */
- buffer_length = tolen * 2;
- for (;;) {
- void *new_buffer;
-
- new_buffer = realloc(buffer_utf8,
- sizeof(*buffer_utf8) * buffer_length);
- if (new_buffer == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- buffer_utf8 = (char *)new_buffer;
- r = idn_ucs4_ucs4toutf8(buffer_ucs4, buffer_utf8,
- buffer_length);
-
- if (r == idn_success)
- break;
- else if (r != idn_buffer_overflow)
- goto ret;
-
- buffer_length *= 2;
- }
-
- if (*buffer_utf8 == '\0') {
- if (tolen <= 0) {
- r = idn_buffer_overflow;
- goto ret;
- }
- *to = '\0';
- r = idn_success;
- goto ret;
- }
-
- r = idn_res_decodename(ctx, actions, buffer_utf8, to, tolen);
-
-ret:
- if (r == idn_success) {
- TRACE(("idn_res_decodename2(): success (to=\"%s\")\n",
- idn__debug_xstring(to, 50)));
- } else {
- TRACE(("idn_res_decodename2(): %s\n", idn_result_tostring(r)));
- }
- free(buffer_ucs4);
- free(buffer_utf8);
- if (aux_converter != NULL)
- idn_converter_destroy(aux_converter);
-
- return (r);
-
-#endif /* WITHOUT_ICONV */
-}
-
-static idn_result_t
-copy_verbatim(const char *from, char *to, size_t tolen) {
- size_t fromlen = strlen(from);
-
- if (fromlen + 1 > tolen)
- return (idn_buffer_overflow);
- (void)memcpy(to, from, fromlen + 1);
- return (idn_success);
-}
-
-static idn_result_t
-labellist_create(const unsigned long *name, labellist_t *labelp) {
- size_t length, malloc_length;
- labellist_t head_label = NULL;
- labellist_t tail_label = NULL;
- labellist_t new_label = NULL;
- const unsigned long *endp = NULL;
- idn_result_t r;
-
- while (*name != '\0') {
- for (endp = name; *endp != '.' && *endp != '\0'; endp++)
- ; /* nothing to be done */
- length = (endp - name) + 1;
- malloc_length = length + 15; /* add 15 for margin */
-
- new_label = (labellist_t)
- malloc(sizeof(struct labellist));
- if (new_label == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- if (head_label == NULL)
- head_label = new_label;
-
- new_label->name = NULL;
- new_label->undo_name = NULL;
- new_label->name_length = malloc_length;
- new_label->next = NULL;
- new_label->previous = NULL;
- new_label->dot_followed = (*endp == '.');
-
- new_label->name = (unsigned long *)
- malloc(sizeof(long) * malloc_length);
- if (new_label->name == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- memcpy(new_label->name, name, sizeof(long) * length);
- *(new_label->name + length - 1) = '\0';
-
- new_label->undo_name = (unsigned long *)
- malloc(sizeof(long) * malloc_length);
- if (new_label->undo_name == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- memcpy(new_label->undo_name, name, sizeof(long) * length);
- *(new_label->undo_name + length - 1) = '\0';
-
- if (tail_label != NULL) {
- tail_label->next = new_label;
- new_label->previous = tail_label;
- }
- tail_label = new_label;
-
- if (*endp == '.')
- name = endp + 1;
- else
- name = endp;
- }
-
- *labelp = head_label;
- r = idn_success;
-
-ret:
- if (r != idn_success) {
- if (new_label != NULL) {
- free(new_label->name);
- free(new_label->undo_name);
- free(new_label);
- }
- if (head_label != NULL)
- labellist_destroy(head_label);
- }
- return (r);
-}
-
-
-static void
-labellist_destroy(labellist_t label) {
- labellist_t l, l_next;
-
- for (l = label; l != NULL; l = l_next) {
- l_next = l->next;
- free(l->name);
- free(l->undo_name);
- free(l);
- }
-}
-
-static idn_result_t
-labellist_setname(labellist_t label, const unsigned long *name) {
- unsigned long *new_name;
- size_t length, new_length;
-
- length = idn_ucs4_strlen(name) + 1;
- new_length = length + 15; /* add 15 for margin */
-
- if (label->name_length < new_length) {
- new_name = (unsigned long *)
- realloc(label->name, sizeof(long) * new_length);
- if (new_name == NULL)
- return (idn_nomemory);
- label->name = new_name;
- label->name_length = new_length;
- }
- memcpy(label->name, name, sizeof(long) * length);
-
- return (idn_success);
-}
-
-static const unsigned long *
-labellist_getname(labellist_t label) {
- return (label->name);
-}
-
-static const unsigned long *
-labellist_gettldname(labellist_t label) {
- labellist_t l;
-
- if (label->previous == NULL && label->next == NULL &&
- !label->dot_followed)
- return (idn_mapselector_getnotld());
-
- for (l = label; l->next != NULL; l = l->next)
- ; /* nothing to be done */
-
- return (l->name);
-}
-
-static idn_result_t
-labellist_getnamelist(labellist_t label, unsigned long *name,
- size_t name_length) {
- static const unsigned long dot_string[] = {0x002e, 0x0000}; /* "." */
- size_t length;
- labellist_t l;
-
- for (l = label, length = 0; l != NULL; l = l->next)
- length += idn_ucs4_strlen(l->name) + 1; /* name + `.' */
- length++; /* for NUL */
-
- if (name_length < length)
- return (idn_buffer_overflow);
-
- *name = '\0';
- for (l = label; l != NULL; l = l->next) {
- idn_ucs4_strcat(name, l->name);
- name += idn_ucs4_strlen(name);
- if (l->dot_followed)
- idn_ucs4_strcat(name, dot_string);
- }
- return (idn_success);
-}
-
-static void
-labellist_undo(labellist_t label) {
- size_t length;
-
- length = idn_ucs4_strlen(label->undo_name) + 1;
- memcpy(label->name, label->undo_name, sizeof(long) * length);
-}
-
-static labellist_t
-labellist_tail(labellist_t label) {
- labellist_t l;
-
- if (label == NULL)
- return (NULL);
- for (l = label; l->next != NULL; l = l->next)
- ; /* nothing to be done */
- return (l);
-}
-
-static labellist_t
-labellist_previous(labellist_t label) {
- return (label->previous);
-}
-
-#ifndef WITHOUT_ICONV
-
-static idn_result_t
-label_localdecodecheck(idn_resconf_t ctx, labellist_t label) {
- idn_converter_t local_converter = NULL;
- const unsigned long *from;
- char *to = NULL;
- size_t to_length;
- idn_result_t r;
-
- from = labellist_getname(label);
- to_length = idn_ucs4_strlen(from) + 1 + 15; /* 15 for margin */
- TRACE(("res ucs4tolocal_check(label=\"%s\")\n",
- idn__debug_ucs4xstring(from, 50)));
-
- local_converter = idn_resconf_getlocalconverter(ctx);
- if (local_converter == NULL) {
- r = idn_success;
- goto ret;
- }
-
- for (;;) {
- char *new_buffer;
-
- new_buffer = (char *)realloc(to, to_length);
- if (new_buffer == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- to = new_buffer;
- r = idn_converter_convfromucs4(local_converter, from, to,
- to_length);
- if (r == idn_success)
- break;
- else if (r == idn_nomapping) {
- r = label_idnencode_ace(ctx, label);
- if (r != idn_success)
- goto ret;
- break;
- } else if (r != idn_buffer_overflow) {
- goto ret;
- }
- to_length *= 2;
- }
-
- r = idn_success;
-ret:
- TRACE(("res ucs4tolocal_check(): %s\n", idn_result_tostring(r)));
- if (local_converter != NULL)
- idn_converter_destroy(local_converter);
- free(to);
- return (r);
-}
-
-#endif /* !WITHOUT_ICONV */
-
-static idn_result_t
-label_idndecode(idn_resconf_t ctx, labellist_t label) {
- idn_converter_t idn_converter = NULL;
- const unsigned long *from;
- char *ascii_from = NULL;
- unsigned long *to = NULL;
- size_t from_length, to_length;
- idn_result_t r;
-
- from = labellist_getname(label);
- from_length = idn_ucs4_strlen(from) + 1;
- TRACE(("res idntoucs4(label=\"%s\")\n",
- idn__debug_ucs4xstring(from, 50)));
-
- idn_converter = idn_resconf_getidnconverter(ctx);
- if (idn_converter == NULL) {
- r = idn_success;
- goto ret;
- }
-
- for (;;) {
- char *new_buffer;
-
- new_buffer = (char *) realloc(ascii_from, from_length);
- if (new_buffer == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- ascii_from = new_buffer;
- r = idn_ucs4_ucs4toutf8(from, ascii_from, from_length);
- if (r == idn_success)
- break;
- else if (r != idn_buffer_overflow)
- goto ret;
- from_length *= 2;
- }
-
- to = NULL;
- to_length = from_length;
-
- for (;;) {
- unsigned long *new_buffer;
-
- new_buffer = (unsigned long *)
- realloc(to, sizeof(long) * to_length);
- if (new_buffer == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- to = new_buffer;
- r = idn_converter_convtoucs4(idn_converter, ascii_from, to,
- to_length);
- if (r == idn_success)
- break;
- else if (r != idn_buffer_overflow)
- goto ret;
- to_length *= 2;
- }
-
- r = labellist_setname(label, to);
-ret:
- if (r == idn_success) {
- TRACE(("res idntoucs4(): success (label=\"%s\")\n",
- idn__debug_ucs4xstring(labellist_getname(label),
- 50)));
- } else {
- TRACE(("res idntoucs4(): %s\n", idn_result_tostring(r)));
- }
- if (idn_converter != NULL)
- idn_converter_destroy(idn_converter);
- free(to);
- free(ascii_from);
- return (r);
-}
-
-static idn_result_t
-label_idnencode_ace(idn_resconf_t ctx, labellist_t label) {
- idn_converter_t idn_converter = NULL;
- const unsigned long *from;
- char *ascii_to = NULL;
- unsigned long *to = NULL;
- size_t to_length;
- idn_result_t r;
-
- from = labellist_getname(label);
- TRACE(("res ucs4toidn(label=\"%s\")\n",
- idn__debug_ucs4xstring(from, 50)));
-
- idn_converter = idn_resconf_getidnconverter(ctx);
- if (idn_converter == NULL) {
- r = idn_success;
- goto ret;
- }
-
- ascii_to = NULL;
- to_length = idn_ucs4_strlen(from) * 4 + 16; /* add mergin */
-
- for (;;) {
- char *new_buffer;
-
- new_buffer = (char *) realloc(ascii_to, to_length);
- if (new_buffer == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- ascii_to = new_buffer;
- r = idn_converter_convfromucs4(idn_converter, from, ascii_to,
- to_length);
- if (r == idn_success)
- break;
- else if (r != idn_buffer_overflow)
- goto ret;
- to_length *= 2;
- }
-
- for (;;) {
- unsigned long *new_buffer;
-
- new_buffer = (unsigned long *)
- realloc(to, sizeof(long) * to_length);
- if (new_buffer == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- to = new_buffer;
- r = idn_ucs4_utf8toucs4(ascii_to, to, to_length);
- if (r == idn_success)
- break;
- else if (r != idn_buffer_overflow)
- goto ret;
- to_length *= 2;
- }
-
- if (r != idn_success)
- goto ret;
-
- r = labellist_setname(label, to);
-ret:
- if (r == idn_success) {
- TRACE(("res ucs4toidn(): success (label=\"%s\")\n",
- idn__debug_ucs4xstring(labellist_getname(label),
- 50)));
- } else {
- TRACE(("res ucs4toidn(): %s\n", idn_result_tostring(r)));
- }
- if (idn_converter != NULL)
- idn_converter_destroy(idn_converter);
- free(to);
- free(ascii_to);
- return (r);
-}
-
-static idn_result_t
-label_localmap(idn_resconf_t ctx, labellist_t label) {
- const unsigned long *from;
- const unsigned long *tld;
- unsigned long *to = NULL;
- size_t to_length;
- idn_mapselector_t local_mapper;
- idn_result_t r;
-
- from = labellist_getname(label);
- tld = labellist_gettldname(label);
- TRACE(("res localmap(label=\"%s\", tld=\"%s\")\n",
- idn__debug_ucs4xstring(from, 50),
- idn__debug_ucs4xstring(tld, 50)));
-
- local_mapper = idn_resconf_getlocalmapselector(ctx);
- if (local_mapper == NULL) {
- r = idn_success;
- goto ret;
- }
-
- if (tld == from)
- tld = idn_mapselector_getdefaulttld();
- to_length = idn_ucs4_strlen(from) + 1 + 15; /* 15 for margin */
-
- for (;;) {
- unsigned long *new_buffer;
-
- new_buffer = (unsigned long *)
- realloc(to, sizeof(long) * to_length);
- if (new_buffer == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- to = new_buffer;
- r = idn_mapselector_map2(local_mapper, from, tld, to,
- to_length);
- if (r == idn_success)
- break;
- else if (r != idn_buffer_overflow)
- goto ret;
- to_length *= 2;
- }
-
- r = labellist_setname(label, to);
-ret:
- if (r == idn_success) {
- TRACE(("res localmap(): success (label=\"%s\")\n",
- idn__debug_ucs4xstring(labellist_getname(label),
- 50)));
- } else {
- TRACE(("res localmap(): %s\n", idn_result_tostring(r)));
- }
- if (local_mapper != NULL)
- idn_mapselector_destroy(local_mapper);
- free(to);
- return (r);
-}
-
-static idn_result_t
-label_map(idn_resconf_t ctx, labellist_t label) {
- const unsigned long *from;
- unsigned long *to = NULL;
- size_t to_length;
- idn_mapper_t mapper;
- idn_result_t r;
-
- from = labellist_getname(label);
- TRACE(("res map(label=\"%s\")\n", idn__debug_ucs4xstring(from, 50)));
-
- mapper = idn_resconf_getmapper(ctx);
- if (mapper == NULL) {
- r = idn_success;
- goto ret;
- }
- to_length = idn_ucs4_strlen(from) + 1 + 15; /* 15 for margin */
-
- for (;;) {
- unsigned long *new_buffer;
-
- new_buffer = (unsigned long *)
- realloc(to, sizeof(long) * to_length);
- if (new_buffer == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- to = new_buffer;
- r = idn_mapper_map(mapper, from, to, to_length);
- if (r == idn_success)
- break;
- else if (r != idn_buffer_overflow)
- goto ret;
- to_length *= 2;
- }
-
- r = labellist_setname(label, to);
-ret:
- if (r == idn_success) {
- TRACE(("res map(): success (label=\"%s\")\n",
- idn__debug_ucs4xstring(labellist_getname(label),
- 50)));
- } else {
- TRACE(("res map(): %s\n", idn_result_tostring(r)));
- }
- if (mapper != NULL)
- idn_mapper_destroy(mapper);
- free(to);
- return (r);
-}
-
-static idn_result_t
-label_normalize(idn_resconf_t ctx, labellist_t label) {
- const unsigned long *from;
- unsigned long *to = NULL;
- size_t to_length;
- idn_normalizer_t normalizer;
- idn_result_t r;
-
- from = labellist_getname(label);
- TRACE(("res normalzie(label=\"%s\")\n",
- idn__debug_ucs4xstring(from, 50)));
-
- normalizer = idn_resconf_getnormalizer(ctx);
- if (normalizer == NULL) {
- r = idn_success;
- goto ret;
- }
- to_length = idn_ucs4_strlen(from) + 1 + 15; /* 15 for margin */
-
- for (;;) {
- unsigned long *new_buffer;
-
- new_buffer = (unsigned long *)
- realloc(to, sizeof(long) * to_length);
- if (new_buffer == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- to = new_buffer;
- r = idn_normalizer_normalize(normalizer, from, to, to_length);
- if (r == idn_success)
- break;
- else if (r != idn_buffer_overflow)
- goto ret;
- to_length *= 2;
- }
-
- r = labellist_setname(label, to);
-ret:
- if (r == idn_success) {
- TRACE(("res normalize(): success (label=\"%s\")\n",
- idn__debug_ucs4xstring(labellist_getname(label),
- 50)));
- } else {
- TRACE(("res normalize(): %s\n", idn_result_tostring(r)));
- }
- if (normalizer != NULL)
- idn_normalizer_destroy(normalizer);
- free(to);
- return (r);
-}
-
-static idn_result_t
-label_prohcheck(idn_resconf_t ctx, labellist_t label) {
- const unsigned long *name, *found;
- idn_checker_t prohibit_checker;
- idn_result_t r;
-
- name = labellist_getname(label);
- TRACE(("res prohcheck(label=\"%s\")\n",
- idn__debug_ucs4xstring(name, 50)));
-
- prohibit_checker = idn_resconf_getprohibitchecker(ctx);
- if (prohibit_checker == NULL) {
- r = idn_success;
- goto ret;
- }
-
- r = idn_checker_lookup(prohibit_checker, name, &found);
- idn_checker_destroy(prohibit_checker);
- if (r == idn_success && found != NULL)
- r = idn_prohibited;
-
-ret:
- TRACE(("res prohcheck(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-static idn_result_t
-label_unascheck(idn_resconf_t ctx, labellist_t label) {
- const unsigned long *name, *found;
- idn_checker_t unassigned_checker;
- idn_result_t r;
-
- name = labellist_getname(label);
- TRACE(("res unascheck(label=\"%s\")\n",
- idn__debug_ucs4xstring(name, 50)));
-
- unassigned_checker = idn_resconf_getunassignedchecker(ctx);
- if (unassigned_checker == NULL) {
- r = idn_success;
- goto ret;
- }
-
- r = idn_checker_lookup(unassigned_checker, name, &found);
- idn_checker_destroy(unassigned_checker);
- if (r == idn_success && found != NULL)
- r = idn_prohibited;
-
-ret:
- TRACE(("res unascheck(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-static idn_result_t
-label_bidicheck(idn_resconf_t ctx, labellist_t label) {
- const unsigned long *name, *found;
- idn_checker_t bidi_checker;
- idn_result_t r;
-
- name = labellist_getname(label);
- TRACE(("res bidicheck(label=\"%s\")\n",
- idn__debug_ucs4xstring(name, 50)));
-
- bidi_checker = idn_resconf_getbidichecker(ctx);
- if (bidi_checker == NULL) {
- r = idn_success;
- goto ret;
- }
-
- r = idn_checker_lookup(bidi_checker, name, &found);
- idn_checker_destroy(bidi_checker);
- if (r == idn_success && found != NULL)
- r = idn_prohibited;
-
-ret:
- TRACE(("res bidicheck(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-static idn_result_t
-label_asccheck(idn_resconf_t ctx, labellist_t label) {
- const unsigned long *name, *n;
- idn_result_t r;
-
- name = labellist_getname(label);
- TRACE(("res asccheck(label=\"%s\")\n",
- idn__debug_ucs4xstring(name, 50)));
-
- if (*name == '-') {
- r = idn_prohibited;
- goto ret;
- }
-
- for (n = name; *n != '\0'; n++) {
- if (*n <= '\177') {
- if ((*n < '0' || *n > '9') &&
- (*n < 'A' || *n > 'Z') &&
- (*n < 'a' || *n > 'z') &&
- *n != '-') {
- r = idn_prohibited;
- goto ret;
- }
- }
- }
-
- if (n > name && *(n - 1) == '-') {
- r = idn_prohibited;
- goto ret;
- }
-
- r = idn_success;
-ret:
- TRACE(("res asccheck(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-static idn_result_t
-label_lencheck_ace(idn_resconf_t ctx, labellist_t label) {
- const unsigned long *name;
- size_t name_length;
- idn_result_t r;
-
- name = labellist_getname(label);
- name_length = idn_ucs4_strlen(name);
- TRACE(("res lencheck(label=\"%s\")\n",
- idn__debug_ucs4xstring(name, 50)));
-
- if (name_length == 0 || name_length > MAX_LABEL_LENGTH) {
- r = idn_invalid_length;
- goto ret;
- }
-
- r = idn_success;
-ret:
- TRACE(("res lencheck(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-static idn_result_t
-label_lencheck_nonace(idn_resconf_t ctx, labellist_t label) {
- idn_converter_t idn_converter;
- const unsigned long *from;
- size_t to_length;
- idn_result_t r;
- char *buffer = NULL;
- size_t buffer_length;
-
- from = labellist_getname(label);
- TRACE(("res lencheck(label=\"%s\")\n",
- idn__debug_ucs4xstring(from, 50)));
-
- buffer_length = idn_ucs4_strlen(from) * 4 + 16; /* 16 for margin */
- idn_converter = idn_resconf_getidnconverter(ctx);
-
- for (;;) {
- void *new_buffer;
-
- new_buffer = realloc(buffer, sizeof(*buffer) * buffer_length);
- if (new_buffer == NULL) {
- r = idn_nomemory;
- goto ret;
- }
- buffer = (char *)new_buffer;
-
- if (idn_converter != NULL) {
- r = idn_converter_convfromucs4(idn_converter, from,
- buffer, buffer_length);
- } else {
- r = idn_ucs4_ucs4toutf8(from, buffer, buffer_length);
- }
- if (r == idn_success)
- break;
- else if (r != idn_buffer_overflow)
- goto ret;
-
- buffer_length *= 2;
- }
-
- to_length = strlen(buffer);
- if (to_length == 0 || to_length > MAX_LABEL_LENGTH) {
- r = idn_invalid_length;
- goto ret;
- }
-
- r = idn_success;
-ret:
- TRACE(("res lencheck(): %s\n", idn_result_tostring(r)));
- if (idn_converter != NULL)
- idn_converter_destroy(idn_converter);
- free(buffer);
- return (r);
-}
-
-static idn_result_t
-label_rtcheck(idn_resconf_t ctx, idn_action_t actions, labellist_t label,
- const unsigned long *original_name) {
- labellist_t rt_label = NULL;
- const unsigned long *rt_name;
- const unsigned long *cur_name;
- idn_result_t r;
-
- cur_name = labellist_getname(label);
- TRACE(("res rtcheck(label=\"%s\", org_label=\"%s\")\n",
- idn__debug_ucs4xstring(cur_name, 50),
- idn__debug_ucs4xstring(original_name, 50)));
-
- r = labellist_create(cur_name, &rt_label);
- if (r != idn_success)
- goto ret;
- if (rt_label == NULL) {
- if (*original_name == '\0')
- r = idn_success;
- else
- r = idn_invalid_encoding;
- goto ret;
- }
-
- if (!idn__util_ucs4isasciirange(labellist_getname(rt_label))) {
- r = label_map(ctx, rt_label);
- if (r != idn_success)
- goto ret;
- r = label_normalize(ctx, rt_label);
- if (r != idn_success)
- goto ret;
- r = label_prohcheck(ctx, rt_label);
- if (r != idn_success)
- goto ret;
- if (actions & IDN_UNASCHECK) {
- r = label_unascheck(ctx, rt_label);
- if (r != idn_success)
- goto ret;
- }
- r = label_bidicheck(ctx, rt_label);
- if (r != idn_success)
- goto ret;
- }
-
- if (actions & IDN_ASCCHECK) {
- r = label_asccheck(ctx, rt_label);
- if (r != idn_success)
- goto ret;
- }
- if (!idn__util_ucs4isasciirange(labellist_getname(rt_label))) {
- r = label_idnencode_ace(ctx, rt_label);
- if (r != idn_success)
- goto ret;
- }
- r = label_lencheck_ace(ctx, rt_label);
- if (r != idn_success)
- goto ret;
- rt_name = labellist_getname(rt_label);
-
- if (idn_ucs4_strcasecmp(rt_name, original_name) != 0) {
- TRACE(("res rtcheck(): round trip failed, org =\"%s\", rt=\"%s\"\n",
- idn__debug_ucs4xstring(original_name, 50),
- idn__debug_ucs4xstring(rt_name, 50)));
- r = idn_invalid_encoding;
- goto ret;
- }
-
- r = idn_success;
-ret:
- if (r != idn_nomemory && r != idn_success)
- r = idn_invalid_encoding;
- TRACE(("res rtcheck(): %s\n", idn_result_tostring(r)));
- if (rt_label != NULL)
- labellist_destroy(rt_label);
- return (r);
-}
-
-const char *
-idn__res_actionstostring(idn_action_t actions) {
- static char buf[100];
-
- buf[0] = '\0';
-
- if (actions == IDN_ENCODE_QUERY)
- strcpy(buf, "encode-query");
- else if (actions == IDN_DECODE_QUERY)
- strcpy(buf, "decode-query");
- else if (actions == IDN_ENCODE_APP)
- strcpy(buf, "encode-app");
- else if (actions == IDN_DECODE_APP)
- strcpy(buf, "decode-app");
- else if (actions == IDN_ENCODE_STORED)
- strcpy(buf, "encode-stored");
- else if (actions == IDN_DECODE_STORED)
- strcpy(buf, "decode-stored");
- else {
- if (actions & IDN_LOCALCONV)
- strcat(buf, "|localconv");
- if (actions & IDN_DELIMMAP)
- strcat(buf, "|delimmap");
- if (actions & IDN_LOCALMAP)
- strcat(buf, "|localmap");
-
- if (actions & IDN_MAP)
- strcat(buf, "|map");
- if (actions & IDN_NORMALIZE)
- strcat(buf, "|normalize");
- if (actions & IDN_PROHCHECK)
- strcat(buf, "|prohcheck");
- if (actions & IDN_UNASCHECK)
- strcat(buf, "|unascheck");
- if (actions & IDN_BIDICHECK)
- strcat(buf, "|bidicheck");
-
- if (actions & IDN_IDNCONV)
- strcat(buf, "|idnconv");
- if (actions & IDN_ASCCHECK)
- strcat(buf, "|asccheck");
- if (actions & IDN_LENCHECK)
- strcat(buf, "|lencheck");
- if (actions & IDN_RTCHECK)
- strcat(buf, "|rtcheck");
- }
-
- if (buf[0] == '|')
- return (buf + 1);
- else
- return (buf);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/resconf.c b/contrib/idn/idnkit-1.0-src/lib/resconf.c
deleted file mode 100644
index 9477c280..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/resconf.c
+++ /dev/null
@@ -1,1477 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: resconf.c,v 1.1 2003/06/04 00:26:12 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stddef.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_PWD_H
-#include <pwd.h>
-#endif
-
-#include <idn/result.h>
-#include <idn/assert.h>
-#include <idn/logmacro.h>
-#include <idn/converter.h>
-#include <idn/nameprep.h>
-#include <idn/normalizer.h>
-#include <idn/checker.h>
-#include <idn/mapper.h>
-#include <idn/mapselector.h>
-#include <idn/delimitermap.h>
-#include <idn/localencoding.h>
-#include <idn/resconf.h>
-#include <idn/debug.h>
-#include <idn/util.h>
-
-#ifdef WIN32
-#define MAX_PATH_SIZE 500 /* a good longer than MAX_PATH */
-#define IDNVAL_CONFFILE "ConfFile"
-#else /* WIN32 */
-
-#ifndef IDN_RESCONF_DIR
-#define IDN_RESCONF_DIR "/etc"
-#endif
-#define IDN_RESCONF_FILE IDN_RESCONF_DIR "/idn.conf"
-#define IDN_USER_RESCONF_FILE "/.idnrc"
-
-#endif /* WIN32 */
-
-#define MAX_CONF_LINE_LENGTH 255
-#define MAX_CONF_LINE_ARGS 63
-
-#define DEFAULT_CONF_NAMEPREP 0x0001
-#define DEFAULT_CONF_IDN_ENCODING 0x0010
-#define DEFAULT_CONF_ALL (DEFAULT_CONF_NAMEPREP | \
- DEFAULT_CONF_IDN_ENCODING)
-
-#define IDN_ENCODING_CURRENT "Punycode"
-
-#ifdef ENABLE_MDNKIT_COMPAT
-#define MDN_RESCONF_FILE IDN_RESCONF_DIR "/mdn.conf"
-#endif
-
-struct idn_resconf {
- int local_converter_is_static;
- idn_converter_t local_converter;
- idn_converter_t idn_converter;
- idn_converter_t aux_idn_converter;
- idn_normalizer_t normalizer;
- idn_checker_t prohibit_checker;
- idn_checker_t unassigned_checker;
- idn_checker_t bidi_checker;
- idn_mapper_t mapper;
- idn_mapselector_t local_mapper;
- idn_delimitermap_t delimiter_mapper;
- int reference_count;
-};
-
-static int initialized;
-
-#ifndef WIN32
-static const char * userhomedir(void);
-#endif
-static idn_result_t open_userdefaultfile(FILE **fpp);
-static idn_result_t open_defaultfile(FILE **fpp);
-static idn_result_t parse_conf(idn_resconf_t ctx, FILE *fp);
-static idn_result_t parse_idn_encoding(idn_resconf_t ctx, char *args,
- int lineno);
-static idn_result_t parse_local_map(idn_resconf_t ctx, char *args,
- int lineno);
-static idn_result_t parse_nameprep(idn_resconf_t ctx, char *args,
- int lineno);
-static int split_args(char *s, char **av, int max_ac);
-static void resetconf(idn_resconf_t ctx);
-#ifndef WITHOUT_ICONV
-static idn_result_t update_local_converter(idn_resconf_t ctx);
-#endif
-static idn_result_t setdefaults_body(idn_resconf_t ctx, int conf_mask);
-
-idn_result_t
-idn_resconf_initialize(void) {
- idn_result_t r;
-
- TRACE(("idn_resconf_initialize()\n"));
-
- if (initialized) {
- r = idn_success;
- goto ret;
- }
-
- /*
- * Initialize sub modules.
- */
- if ((r = idn_converter_initialize()) != idn_success)
- goto ret;
- if ((r = idn_normalizer_initialize()) != idn_success)
- goto ret;
- if ((r = idn_checker_initialize()) != idn_success)
- goto ret;
- if ((r = idn_mapselector_initialize()) != idn_success)
- goto ret;
- if ((r = idn_mapper_initialize()) != idn_success)
- goto ret;
-
- r = idn_success;
- initialized = 1;
-ret:
- TRACE(("idn_resconf_initialize(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-idn_result_t
-idn_resconf_create(idn_resconf_t *ctxp) {
- idn_resconf_t ctx = NULL;
- idn_result_t r;
-
- assert(ctxp != NULL);
-
- TRACE(("idn_resconf_create()\n"));
-
- if (!initialized) {
- r = idn_failure;
- goto ret;
- }
- if ((ctx = malloc(sizeof(*ctx))) == NULL) {
- r = idn_nomemory;
- goto ret;
- }
-
- ctx->local_converter_is_static = 0;
- ctx->local_converter = NULL;
- ctx->idn_converter = NULL;
- ctx->aux_idn_converter = NULL;
- ctx->normalizer = NULL;
- ctx->prohibit_checker = NULL;
- ctx->unassigned_checker = NULL;
- ctx->bidi_checker = NULL;
- ctx->mapper = NULL;
- ctx->local_mapper = NULL;
- ctx->reference_count = 1;
-
- r = idn_delimitermap_create(&ctx->delimiter_mapper);
- if (r != idn_success)
- goto ret;
-
- *ctxp = ctx;
- r = idn_success;
-ret:
- TRACE(("idn_resconf_create(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-char *
-idn_resconf_defaultfile() {
-#ifdef WIN32
- static char default_path[MAX_PATH_SIZE];
-
- if (idn__util_getregistrystring(idn__util_hkey_localmachine,
- IDNVAL_CONFFILE, default_path,
- sizeof(default_path))) {
- return (default_path);
- } else {
- return (NULL);
- }
-#else
- return (IDN_RESCONF_FILE);
-#endif
-}
-
-#ifndef WIN32
-static const char *
-userhomedir() {
- uid_t uid;
- struct passwd *pwd;
-
- uid = getuid();
- pwd = getpwuid(uid);
- if (pwd == NULL) {
- return (NULL);
- }
-
- return (pwd->pw_dir);
-}
-#endif
-
-static idn_result_t
-open_userdefaultfile(FILE **fpp) {
-#ifdef WIN32
- char user_path[MAX_PATH_SIZE];
-
- TRACE(("open_userdefaultfile()\n"));
-
- if (idn__util_getregistrystring(idn__util_hkey_currentuser,
- IDNVAL_CONFFILE, user_path,
- sizeof(user_path)) == 0) {
- return (idn_nofile);
- }
- *fpp = fopen(user_path, "r");
- if (*fpp == NULL) {
- return (idn_nofile);
- }
- return (idn_success);
-#else /* WIN32 */
- const char *homedir;
- char *file;
- int len;
-
- TRACE(("open_userdefaultfile()\n"));
-
- homedir = userhomedir();
- len = strlen(IDN_USER_RESCONF_FILE) + 1;
- if (homedir != NULL) {
- len += strlen(homedir);
- } else {
- return (idn_notfound);
- }
-
- file = (char *)malloc(sizeof(char) * len);
- if (file == NULL) {
- WARNING(("open_userdefaultfile(): malloc failed\n"));
- return (idn_nomemory);
- }
-
- (void)strcpy(file, homedir);
- strcat(file, IDN_USER_RESCONF_FILE);
-
- *fpp = fopen(file, "r");
- free(file);
- if (*fpp == NULL) {
- return (idn_nofile);
- }
-
- return (idn_success);
-#endif /* WIN32 */
-}
-
-static idn_result_t
-open_defaultfile(FILE **fpp) {
- idn_result_t r;
- const char *file;
-
- r = open_userdefaultfile(fpp);
- if (r == idn_nofile || r == idn_notfound) {
- TRACE(("open_defaultfile: "
- "cannot open user configuration file\n"));
- file = idn_resconf_defaultfile();
- *fpp = fopen(file, "r");
-#ifdef ENABLE_MDNKIT_COMPAT
- if (*fpp == NULL)
- *fpp = fopen(MDN_RESCONF_FILE, "r");
-#endif
- if (*fpp == NULL) {
- TRACE(("open_defaultfile: "
- "cannot open system configuration file\n"));
- return (idn_nofile);
- }
- } else if (r != idn_success) {
- return (r);
- }
-
- return (idn_success);
-}
-
-idn_result_t
-idn_resconf_loadfile(idn_resconf_t ctx, const char *file) {
- FILE *fp = NULL;
- idn_result_t r;
-
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_loadfile(file=%s)\n",
- file == NULL ? "<null>" : file));
-
- resetconf(ctx);
- r = idn_delimitermap_create(&ctx->delimiter_mapper);
- if (r != idn_success) {
- goto ret;
- }
-
- if (file == NULL) {
- r = open_defaultfile(&fp);
- if (r == idn_nofile || r == idn_notfound) {
- r = setdefaults_body(ctx, 0);
- goto ret;
- } else if (r != idn_success) {
- goto ret;
- }
- } else {
- fp = fopen(file, "r");
- if (fp == NULL) {
- TRACE(("idn_resconf_loadfile: cannot open %-.40s\n",
- file));
- r = idn_nofile;
- goto ret;
- }
- }
-
- r = parse_conf(ctx, fp);
- fclose(fp);
-
-ret:
- TRACE(("idn_resconf_loadfile(): %s\n", idn_result_tostring(r)));
- return (r);
-}
-
-void
-idn_resconf_destroy(idn_resconf_t ctx) {
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_destroy()\n"));
-
- ctx->reference_count--;
- if (ctx->reference_count <= 0) {
- resetconf(ctx);
- free(ctx);
- TRACE(("idn_resconf_destroy: the object is destroyed\n"));
- } else {
- TRACE(("idn_resconf_destroy(): "
- "update reference count (%d->%d)\n",
- ctx->reference_count + 1, ctx->reference_count));
- }
-}
-
-void
-idn_resconf_incrref(idn_resconf_t ctx) {
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_incrref()\n"));
- TRACE(("idn_resconf_incrref: update reference count (%d->%d)\n",
- ctx->reference_count, ctx->reference_count + 1));
-
- ctx->reference_count++;
-}
-
-idn_converter_t
-idn_resconf_getalternateconverter(idn_resconf_t ctx) {
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_getalternateconverter()\n"));
-
- return (idn_resconf_getidnconverter(ctx));
-}
-
-idn_delimitermap_t
-idn_resconf_getdelimitermap(idn_resconf_t ctx) {
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_getdelimitermap()\n"));
-
- if (ctx->delimiter_mapper != NULL)
- idn_delimitermap_incrref(ctx->delimiter_mapper);
- return (ctx->delimiter_mapper);
-}
-
-idn_converter_t
-idn_resconf_getidnconverter(idn_resconf_t ctx) {
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_getidnconverter()\n"));
-
- if (ctx->idn_converter != NULL)
- idn_converter_incrref(ctx->idn_converter);
- return (ctx->idn_converter);
-}
-
-idn_converter_t
-idn_resconf_getauxidnconverter(idn_resconf_t ctx) {
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_getauxidnconverter()\n"));
-
- if (ctx->aux_idn_converter != NULL)
- idn_converter_incrref(ctx->aux_idn_converter);
- return (ctx->aux_idn_converter);
-}
-
-idn_converter_t
-idn_resconf_getlocalconverter(idn_resconf_t ctx) {
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_getlocalconverter()\n"));
-
-#ifdef WITHOUT_ICONV
- return NULL;
-
-#else /* WITHOUT_ICONV */
- if (update_local_converter(ctx) != idn_success)
- return (NULL);
-
- idn_converter_incrref(ctx->local_converter);
- return (ctx->local_converter);
-
-#endif /* WITHOUT_ICONV */
-}
-
-idn_mapselector_t
-idn_resconf_getlocalmapselector(idn_resconf_t ctx) {
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_getlocalmapselector()\n"));
-
- if (ctx->local_mapper != NULL)
- idn_mapselector_incrref(ctx->local_mapper);
- return (ctx->local_mapper);
-}
-
-idn_mapper_t
-idn_resconf_getmapper(idn_resconf_t ctx) {
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_getmapper()\n"));
-
- if (ctx->mapper != NULL)
- idn_mapper_incrref(ctx->mapper);
- return (ctx->mapper);
-}
-
-idn_normalizer_t
-idn_resconf_getnormalizer(idn_resconf_t ctx) {
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_getnormalizer()\n"));
-
- if (ctx->normalizer != NULL)
- idn_normalizer_incrref(ctx->normalizer);
- return (ctx->normalizer);
-}
-
-idn_checker_t
-idn_resconf_getprohibitchecker(idn_resconf_t ctx) {
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_getprohibitchecker()\n"));
-
- if (ctx->prohibit_checker != NULL)
- idn_checker_incrref(ctx->prohibit_checker);
- return (ctx->prohibit_checker);
-}
-
-idn_checker_t
-idn_resconf_getunassignedchecker(idn_resconf_t ctx) {
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_getunassignedchecker()\n"));
-
- if (ctx->unassigned_checker != NULL)
- idn_checker_incrref(ctx->unassigned_checker);
- return (ctx->unassigned_checker);
-}
-
-idn_checker_t
-idn_resconf_getbidichecker(idn_resconf_t ctx) {
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_getbidichecker()\n"));
-
- if (ctx->bidi_checker != NULL)
- idn_checker_incrref(ctx->bidi_checker);
- return (ctx->bidi_checker);
-}
-
-void
-idn_resconf_setalternateconverter(idn_resconf_t ctx,
- idn_converter_t alternate_converter) {
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_setalternateconverter()\n"));
-}
-
-void
-idn_resconf_setdelimitermap(idn_resconf_t ctx,
- idn_delimitermap_t delimiter_mapper) {
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_setdelimitermap()\n"));
-
- if (ctx->delimiter_mapper != NULL)
- idn_delimitermap_destroy(ctx->delimiter_mapper);
- ctx->delimiter_mapper = delimiter_mapper;
- if (delimiter_mapper != NULL)
- idn_delimitermap_incrref(ctx->delimiter_mapper);
-}
-
-void
-idn_resconf_setidnconverter(idn_resconf_t ctx,
- idn_converter_t idn_converter) {
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_setidnconverter()\n"));
-
- if (ctx->idn_converter != NULL)
- idn_converter_destroy(ctx->idn_converter);
- ctx->idn_converter = idn_converter;
- if (idn_converter != NULL)
- idn_converter_incrref(ctx->idn_converter);
-}
-
-void
-idn_resconf_setauxidnconverter(idn_resconf_t ctx,
- idn_converter_t aux_idn_converter) {
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_setauxidnconverter()\n"));
-
- if (ctx->aux_idn_converter != NULL)
- idn_converter_destroy(ctx->aux_idn_converter);
- ctx->aux_idn_converter = aux_idn_converter;
- if (aux_idn_converter != NULL)
- idn_converter_incrref(ctx->aux_idn_converter);
-}
-
-void
-idn_resconf_setlocalconverter(idn_resconf_t ctx,
- idn_converter_t local_converter) {
-#ifndef WITHOUT_ICONV
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_setlocalconverter()\n"));
-
- if (ctx->local_converter != NULL) {
- idn_converter_destroy(ctx->local_converter);
- ctx->local_converter = NULL;
- }
-
- if (local_converter == NULL)
- ctx->local_converter_is_static = 0;
- else {
- ctx->local_converter = local_converter;
- idn_converter_incrref(local_converter);
- ctx->local_converter_is_static = 1;
- }
-#endif /* WITHOUT_ICONV */
-}
-
-void
-idn_resconf_setlocalmapselector(idn_resconf_t ctx,
- idn_mapselector_t local_mapper) {
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_setlocalmapselector()\n"));
-
- if (ctx->local_mapper != NULL)
- idn_mapselector_destroy(ctx->local_mapper);
- ctx->local_mapper = local_mapper;
- if (local_mapper != NULL)
- idn_mapselector_incrref(ctx->local_mapper);
-}
-
-void
-idn_resconf_setmapper(idn_resconf_t ctx, idn_mapper_t mapper) {
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_setmapper()\n"));
-
- if (ctx->mapper != NULL)
- idn_mapper_destroy(ctx->mapper);
- ctx->mapper = mapper;
- if (mapper != NULL)
- idn_mapper_incrref(ctx->mapper);
-}
-
-void
-idn_resconf_setnormalizer(idn_resconf_t ctx, idn_normalizer_t normalizer) {
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_setnormalizer()\n"));
-
- if (ctx->normalizer != NULL)
- idn_normalizer_destroy(ctx->normalizer);
- ctx->normalizer = normalizer;
- if (normalizer != NULL)
- idn_normalizer_incrref(ctx->normalizer);
-}
-
-void
-idn_resconf_setprohibitchecker(idn_resconf_t ctx,
- idn_checker_t prohibit_checker) {
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_setprohibitchecker()\n"));
-
- if (ctx->prohibit_checker != NULL)
- idn_checker_destroy(ctx->prohibit_checker);
- ctx->prohibit_checker = prohibit_checker;
- if (prohibit_checker != NULL)
- idn_checker_incrref(ctx->prohibit_checker);
-}
-
-void
-idn_resconf_setunassignedchecker(idn_resconf_t ctx,
- idn_checker_t unassigned_checker) {
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_setunassignedchecker()\n"));
-
- if (ctx->unassigned_checker != NULL)
- idn_checker_destroy(ctx->unassigned_checker);
- ctx->unassigned_checker = unassigned_checker;
- if (unassigned_checker != NULL)
- idn_checker_incrref(ctx->unassigned_checker);
-}
-
-void
-idn_resconf_setbidichecker(idn_resconf_t ctx,
- idn_checker_t bidi_checker) {
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_setbidichecker()\n"));
-
- if (ctx->bidi_checker != NULL)
- idn_checker_destroy(ctx->bidi_checker);
- ctx->bidi_checker = bidi_checker;
- if (bidi_checker != NULL)
- idn_checker_incrref(ctx->bidi_checker);
-}
-
-idn_result_t
-idn_resconf_setnameprepversion(idn_resconf_t ctx, const char *version)
-{
- char prohibit_scheme_name[MAX_CONF_LINE_LENGTH + 1];
- char unassigned_scheme_name[MAX_CONF_LINE_LENGTH + 1];
- char bidi_scheme_name[MAX_CONF_LINE_LENGTH + 1];
- idn_mapper_t mapper = NULL;
- idn_normalizer_t normalizer = NULL;
- idn_checker_t prohibit_checker = NULL;
- idn_checker_t unassigned_checker = NULL;
- idn_checker_t bidi_checker = NULL;
- idn_result_t r;
-
- assert(ctx != NULL && version != NULL);
-
- TRACE(("idn_resconf_setnameprepversion()\n"));
-
- /*
- * Set canonical scheme names.
- */
- if (strlen(version) + strlen(IDN_CHECKER_PROHIBIT_PREFIX)
- > MAX_CONF_LINE_LENGTH) {
- r = idn_invalid_name;
- goto failure;
- }
- sprintf(prohibit_scheme_name, "%s%s",
- IDN_CHECKER_PROHIBIT_PREFIX, version);
-
- if (strlen(version) + strlen(IDN_CHECKER_UNASSIGNED_PREFIX)
- > MAX_CONF_LINE_LENGTH) {
- r = idn_invalid_name;
- goto failure;
- }
- sprintf(unassigned_scheme_name, "%s%s",
- IDN_CHECKER_UNASSIGNED_PREFIX, version);
-
- if (strlen(version) + strlen(IDN_CHECKER_BIDI_PREFIX)
- > MAX_CONF_LINE_LENGTH) {
- r = idn_invalid_name;
- goto failure;
- }
- sprintf(bidi_scheme_name, "%s%s",
- IDN_CHECKER_BIDI_PREFIX, version);
-
- /*
- * Create objects.
- */
- r = idn_mapper_create(&mapper);
- if (r != idn_success)
- goto failure;
- r = idn_normalizer_create(&normalizer);
- if (r != idn_success)
- goto failure;
- r = idn_checker_create(&prohibit_checker);
- if (r != idn_success)
- goto failure;
- r = idn_checker_create(&unassigned_checker);
- if (r != idn_success)
- goto failure;
- r = idn_checker_create(&bidi_checker);
- if (r != idn_success)
- goto failure;
-
- r = idn_mapper_add(mapper, version);
- if (r != idn_success)
- goto failure;
- r = idn_normalizer_add(normalizer, version);
- if (r != idn_success)
- goto failure;
- r = idn_checker_add(prohibit_checker, prohibit_scheme_name);
- if (r != idn_success)
- goto failure;
- r = idn_checker_add(unassigned_checker, unassigned_scheme_name);
- if (r != idn_success)
- goto failure;
- r = idn_checker_add(bidi_checker, bidi_scheme_name);
- if (r != idn_success)
- goto failure;
-
- /*
- * Set the objects.
- */
- idn_resconf_setmapper(ctx, mapper);
- idn_resconf_setnormalizer(ctx, normalizer);
- idn_resconf_setprohibitchecker(ctx, prohibit_checker);
- idn_resconf_setunassignedchecker(ctx, unassigned_checker);
- idn_resconf_setbidichecker(ctx, bidi_checker);
-
- /*
- * Destroy the objects.
- */
- idn_mapper_destroy(mapper);
- idn_normalizer_destroy(normalizer);
- idn_checker_destroy(prohibit_checker);
- idn_checker_destroy(unassigned_checker);
- idn_checker_destroy(bidi_checker);
-
- return (idn_success);
-
-failure:
- if (mapper != NULL)
- idn_mapper_destroy(mapper);
- if (normalizer != NULL)
- idn_normalizer_destroy(normalizer);
- if (prohibit_checker != NULL)
- idn_checker_destroy(prohibit_checker);
- if (unassigned_checker != NULL)
- idn_checker_destroy(unassigned_checker);
- if (bidi_checker != NULL)
- idn_checker_destroy(bidi_checker);
-
- return (r);
-}
-
-idn_result_t
-idn_resconf_setalternateconvertername(idn_resconf_t ctx, const char *name,
- int flags) {
- assert(ctx != NULL && name != NULL);
-
- TRACE(("idn_resconf_setalternateconvertername(name=%s, flags=%d)\n",
- name, flags));
-
- return (idn_success);
-}
-
-idn_result_t
-idn_resconf_setidnconvertername(idn_resconf_t ctx, const char *name,
- int flags) {
- idn_converter_t idn_converter;
- idn_result_t r;
-
- assert(ctx != NULL && name != NULL);
-
- TRACE(("idn_resconf_setidnconvertername(name=%s, flags=%d)\n",
- name, flags));
-
- r = idn_converter_create(name, &idn_converter, flags);
- if (r != idn_success)
- return (r);
-
- if (ctx->idn_converter != NULL)
- idn_converter_destroy(ctx->idn_converter);
- ctx->idn_converter = idn_converter;
-
- return (idn_success);
-}
-
-idn_result_t
-idn_resconf_setauxidnconvertername(idn_resconf_t ctx, const char *name,
- int flags) {
- idn_converter_t aux_idn_converter;
- const char *old_name;
- idn_result_t r;
-
- assert(ctx != NULL && name != NULL);
-
- TRACE(("idn_resconf_setauxidnconvertername(name=%s, flags=%d)\n",
- name, flags));
-
- if (ctx->aux_idn_converter != NULL) {
- old_name = idn_converter_localencoding(ctx->aux_idn_converter);
- if (old_name != NULL && strcmp(old_name, name) == 0)
- return (idn_success);
- }
-
- r = idn_converter_create(name, &aux_idn_converter, flags);
- if (r != idn_success)
- return (r);
-
- if (ctx->aux_idn_converter != NULL)
- idn_converter_destroy(ctx->aux_idn_converter);
- ctx->aux_idn_converter = aux_idn_converter;
-
- return (idn_success);
-}
-
-idn_result_t
-idn_resconf_setlocalconvertername(idn_resconf_t ctx, const char *name,
- int flags) {
-#ifdef WITHOUT_ICONV
- return idn_failure;
-
-#else /* WITHOUT_ICONV */
- idn_converter_t local_converter;
- idn_result_t r;
-
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_setlocalconvertername(name=%s, flags=%d)\n",
- name == NULL ? "<null>" : name, flags));
-
- if (ctx->local_converter != NULL) {
- idn_converter_destroy(ctx->local_converter);
- ctx->local_converter = NULL;
- }
- ctx->local_converter_is_static = 0;
-
- if (name != NULL) {
- r = idn_converter_create(name, &local_converter, flags);
- if (r != idn_success)
- return (r);
- ctx->local_converter = local_converter;
- ctx->local_converter_is_static = 1;
- }
-
- return (idn_success);
-
-#endif /* WITHOUT_ICONV */
-}
-
-idn_result_t
-idn_resconf_addalldelimitermapucs(idn_resconf_t ctx, unsigned long *v,
- int nv) {
- idn_result_t r;
-
- TRACE(("idn_resconf_addalldelimitermapucs(nv=%d)\n", nv));
-
- if (ctx->delimiter_mapper == NULL) {
- r = idn_delimitermap_create(&(ctx->delimiter_mapper));
- if (r != idn_success)
- return (r);
- }
-
- r = idn_delimitermap_addall(ctx->delimiter_mapper, v, nv);
- return (r);
-}
-
-idn_result_t
-idn_resconf_addalllocalmapselectornames(idn_resconf_t ctx, const char *tld,
- const char **names, int nnames) {
- idn_result_t r;
-
- assert(ctx != NULL && names != NULL && tld != NULL);
-
- TRACE(("idn_resconf_addalllocalmapselectorname(tld=%s, nnames=%d)\n",
- tld, nnames));
-
- if (ctx->local_mapper == NULL) {
- r = idn_mapselector_create(&(ctx->local_mapper));
- if (r != idn_success)
- return (r);
- }
-
- r = idn_mapselector_addall(ctx->local_mapper, tld, names, nnames);
- return (r);
-}
-
-idn_result_t
-idn_resconf_addallmappernames(idn_resconf_t ctx, const char **names,
- int nnames) {
- idn_result_t r;
-
- assert(ctx != NULL && names != NULL);
-
- TRACE(("idn_resconf_addallmappername()\n"));
-
- if (ctx->mapper == NULL) {
- r = idn_mapper_create(&(ctx->mapper));
- if (r != idn_success)
- return (r);
- }
-
- r = idn_mapper_addall(ctx->mapper, names, nnames);
- return (r);
-}
-
-idn_result_t
-idn_resconf_addallnormalizernames(idn_resconf_t ctx, const char **names,
- int nnames) {
- idn_result_t r;
-
- assert(ctx != NULL && names != NULL);
-
- TRACE(("idn_resconf_addallnormalizername(nnames=%d)\n", nnames));
-
- if (ctx->normalizer == NULL) {
- r = idn_normalizer_create(&(ctx->normalizer));
- if (r != idn_success)
- return (r);
- }
-
- r = idn_normalizer_addall(ctx->normalizer, names, nnames);
- return (r);
-}
-
-idn_result_t
-idn_resconf_addallprohibitcheckernames(idn_resconf_t ctx, const char **names,
- int nnames) {
- char long_name[MAX_CONF_LINE_LENGTH + 1];
- idn_result_t r;
- int i;
-
- assert(ctx != NULL && names != NULL);
-
- TRACE(("idn_resconf_addallprohibitcheckername(nnames=%d)\n", nnames));
-
- if (ctx->prohibit_checker == NULL) {
- r = idn_checker_create(&(ctx->prohibit_checker));
- if (r != idn_success)
- return (r);
- }
-
- for (i = 0; i < nnames; i++, names++) {
- if (strlen(*names) + strlen(IDN_CHECKER_PROHIBIT_PREFIX)
- > MAX_CONF_LINE_LENGTH) {
- return (idn_invalid_name);
- }
- strcpy(long_name, IDN_CHECKER_PROHIBIT_PREFIX);
- strcat(long_name, *names);
-
- r = idn_checker_add(ctx->prohibit_checker, long_name);
- if (r != idn_success)
- return (r);
- }
-
- return (idn_success);
-}
-
-idn_result_t
-idn_resconf_addallunassignedcheckernames(idn_resconf_t ctx, const char **names,
- int nnames) {
- char long_name[MAX_CONF_LINE_LENGTH + 1];
- idn_result_t r;
- int i;
-
- assert(ctx != NULL && names != NULL);
-
- TRACE(("idn_resconf_addallunassignedcheckername(nnames=%d)\n",
- nnames));
-
- if (ctx->unassigned_checker == NULL) {
- r = idn_checker_create(&(ctx->unassigned_checker));
- if (r != idn_success)
- return (r);
- }
-
- for (i = 0; i < nnames; i++, names++) {
- if (strlen(*names) + strlen(IDN_CHECKER_UNASSIGNED_PREFIX)
- > MAX_CONF_LINE_LENGTH) {
- return (idn_invalid_name);
- }
- strcpy(long_name, IDN_CHECKER_UNASSIGNED_PREFIX);
- strcat(long_name, *names);
-
- r = idn_checker_add(ctx->unassigned_checker, long_name);
- if (r != idn_success)
- return (r);
- }
-
- return (idn_success);
-}
-
-idn_result_t
-idn_resconf_addallbidicheckernames(idn_resconf_t ctx, const char **names,
- int nnames) {
- char long_name[MAX_CONF_LINE_LENGTH + 1];
- idn_result_t r;
- int i;
-
- assert(ctx != NULL && names != NULL);
-
- TRACE(("idn_resconf_addallbidicheckername(nnames=%d)\n", nnames));
-
- if (ctx->bidi_checker == NULL) {
- r = idn_checker_create(&(ctx->bidi_checker));
- if (r != idn_success)
- return (r);
- }
-
- for (i = 0; i < nnames; i++, names++) {
- if (strlen(*names) + strlen(IDN_CHECKER_BIDI_PREFIX)
- > MAX_CONF_LINE_LENGTH) {
- return (idn_invalid_name);
- }
- strcpy(long_name, IDN_CHECKER_BIDI_PREFIX);
- strcat(long_name, *names);
-
- r = idn_checker_add(ctx->bidi_checker, long_name);
- if (r != idn_success)
- return (r);
- }
-
- return (idn_success);
-}
-
-static idn_result_t
-parse_conf(idn_resconf_t ctx, FILE *fp) {
- char line[MAX_CONF_LINE_LENGTH + 1];
- int lineno = 0;
- char *argv[3];
- int argc;
- idn_result_t r;
- int conf_mask = 0;
-
- TRACE(("parse_conf()\n"));
-
- /*
- * Parse config file. parsing of 'idn-encoding' line is
- * postponed because 'alias-file' line must be processed
- * before them.
- */
- while (fgets(line, sizeof(line), fp) != NULL) {
- char *newline;
-
- lineno++;
- newline = strpbrk(line, "\r\n");
- if (newline != NULL)
- *newline = '\0';
- else if (fgetc(fp) != EOF) {
- ERROR(("libidnkit: too long line \"%-.30s\", "
- "line %d\n", line, lineno));
- return (idn_invalid_syntax);
- }
-
- argc = split_args(line, argv, 2);
- if (argc == -1) {
- ERROR(("libidnkit: syntax error, line %d\n", lineno));
- return (idn_invalid_syntax);
- } else if (argc == 0 || argv[0][0] == '#') {
- continue;
- } else if (argc == 1) {
- ERROR(("libidnkit: syntax error, line %d\n", lineno));
- return (idn_invalid_syntax);
- }
-
- if (strcmp(argv[0], "idn-encoding") == 0) {
- if (conf_mask & DEFAULT_CONF_IDN_ENCODING) {
- ERROR(("libidnkit: \"%s\" redefined, "
- "line %d\n", argv[0], lineno));
- r = idn_invalid_syntax;
- } else {
- conf_mask |= DEFAULT_CONF_IDN_ENCODING;
- r = parse_idn_encoding(ctx, argv[1], lineno);
- }
- } else if (strcmp(argv[0], "local-map") == 0) {
- r = parse_local_map(ctx, argv[1], lineno);
-
- } else if (strcmp(argv[0], "nameprep") == 0) {
- if (conf_mask & DEFAULT_CONF_NAMEPREP) {
- ERROR(("libidnkit: \"%s\" redefined, "
- "line %d\n", argv[0], lineno));
- r = idn_invalid_syntax;
- } else {
- conf_mask |= DEFAULT_CONF_NAMEPREP;
- r = parse_nameprep(ctx, argv[1], lineno);
- }
- } else if (strcmp(argv[0], "nameprep-map") == 0 ||
- strcmp(argv[0], "nameprep-normalize") == 0 ||
- strcmp(argv[0], "nameprep-prohibit") == 0 ||
- strcmp(argv[0], "nameprep-unassigned") == 0 ||
- strcmp(argv[0], "alias-file") == 0 ||
- strcmp(argv[0], "encoding-alias-file") == 0 ||
- strcmp(argv[0], "normalize") == 0 ||
- strcmp(argv[0], "server-encoding") == 0 ||
- strcmp(argv[0], "alternate-encoding") == 0 ||
- strcmp(argv[0], "delimiter-map") == 0) {
- WARNING(("libidnkit: obsolete command \"%s\", line %d "
- "(ignored)\n", argv[0], lineno));
- r = idn_success;
- } else {
- ERROR(("libidnkit: unknown command \"%-.30s\", "
- "line %d\n", argv[0], lineno));
- r = idn_invalid_syntax;
- }
- if (r != idn_success)
- return (r);
- }
-
- lineno++;
-
- if (conf_mask != DEFAULT_CONF_ALL) {
- return setdefaults_body(ctx, conf_mask);
- }
-
- return (idn_success);
-}
-
-static idn_result_t
-parse_idn_encoding(idn_resconf_t ctx, char *args, int lineno) {
- idn_result_t r;
- char *argv[MAX_CONF_LINE_ARGS + 1];
- int argc;
-
- argc = split_args(args, argv, MAX_CONF_LINE_ARGS + 1);
-
- if (argc != 1) {
- ERROR(("libidnkit: wrong # of args for idn-encoding, "
- "line %d\n", lineno));
- return (idn_invalid_syntax);
- }
-
- r = idn_converter_create(argv[0], &ctx->idn_converter,
- IDN_CONVERTER_DELAYEDOPEN |
- IDN_CONVERTER_RTCHECK);
- if (r != idn_success) {
- ERROR(("libidnkit: cannot create idn converter, %s, "
- "line %d\n", idn_result_tostring(r), lineno));
- }
-
- return (r);
-}
-
-static idn_result_t
-parse_local_map(idn_resconf_t ctx, char *args, int lineno) {
- idn_result_t r;
- char *argv[MAX_CONF_LINE_ARGS + 1];
- int argc;
- int i;
-
- argc = split_args(args, argv, MAX_CONF_LINE_ARGS + 1);
-
- if (argc < 2 || argc > MAX_CONF_LINE_ARGS) {
- ERROR(("libidnkit: wrong # of args for local-map, line %d\n",
- lineno));
- return (idn_invalid_syntax);
- }
-
- if (ctx->local_mapper == NULL) {
- r = idn_mapselector_create(&ctx->local_mapper);
- if (r != idn_success) {
- ERROR(("libidnkit: cannot create local mapper, %s, "
- "line %d\n", idn_result_tostring(r), lineno));
- return (r);
- }
- }
-
- for (i = 1; i < argc; i++) {
- r = idn_mapselector_add(ctx->local_mapper, argv[0], argv[i]);
- if (r == idn_invalid_name) {
- ERROR(("libidnkit: map scheme unavailable \"%-.30s\""
- " or invalid TLD \"%-.30s\", line %d\n",
- argv[i], argv[0], lineno));
- return (r);
- } else if (r != idn_success) {
- return (r);
- }
- }
-
- return (idn_success);
-}
-
-static idn_result_t
-parse_nameprep(idn_resconf_t ctx, char *args, int lineno) {
- idn_result_t r;
- char *argv[MAX_CONF_LINE_ARGS + 1];
- char scheme_name[MAX_CONF_LINE_LENGTH + 1];
- int argc;
-
- argc = split_args(args, argv, MAX_CONF_LINE_ARGS + 1);
-
- if (argc != 1) {
- ERROR(("libidnkit: wrong # of args for nameprep, line %d\n",
- lineno));
- return (idn_invalid_syntax);
- }
-
- /*
- * Set mapper.
- */
- r = idn_mapper_create(&ctx->mapper);
- if (r != idn_success) {
- ERROR(("libidnkit: cannot create mapper, %s, line %d\n",
- idn_result_tostring(r), lineno));
- return (r);
- }
-
- r = idn_mapper_add(ctx->mapper, argv[0]);
- if (r == idn_invalid_name) {
- ERROR(("libidnkit: map scheme unavailable \"%-.30s\", "
- "line %d\n", argv[0], lineno));
- return (r);
- } else if (r != idn_success) {
- return (r);
- }
-
- /*
- * Set normalizer.
- */
- r = idn_normalizer_create(&ctx->normalizer);
- if (r != idn_success) {
- ERROR(("libidnkit: cannot create normalizer, %s, line %d\n",
- idn_result_tostring(r), lineno));
- return (r);
- }
-
- r = idn_normalizer_add(ctx->normalizer, argv[0]);
- if (r == idn_invalid_name) {
- ERROR(("libidnkit: unknown normalization scheme \"%-.30s\", "
- "line %d\n", argv[0], lineno));
- return (r);
- } else if (r != idn_success) {
- return (r);
- }
-
- /*
- * Set prohibit checker.
- */
- r = idn_checker_create(&ctx->prohibit_checker);
- if (r != idn_success) {
- ERROR(("libidnkit: cannot create prohibit checker, %s, "
- "line %d\n", idn_result_tostring(r), lineno));
- return (r);
- }
-
- sprintf(scheme_name, "%s%s", IDN_CHECKER_PROHIBIT_PREFIX, argv[0]);
- r = idn_checker_add(ctx->prohibit_checker, scheme_name);
- if (r == idn_invalid_name) {
- ERROR(("libidnkit: unknown prohibit scheme \"%-.30s\", "
- "line %d\n", argv[0], lineno));
- return (r);
- } else if (r != idn_success) {
- return (r);
- }
-
- /*
- * Set unassigned checker.
- */
- r = idn_checker_create(&ctx->unassigned_checker);
- if (r != idn_success) {
- ERROR(("libidnkit: cannot create unassigned checker, %s, "
- "line %d\n", idn_result_tostring(r), lineno));
- return (r);
- }
-
- sprintf(scheme_name, "%s%s", IDN_CHECKER_UNASSIGNED_PREFIX, argv[0]);
- r = idn_checker_add(ctx->unassigned_checker, scheme_name);
- if (r == idn_invalid_name) {
- ERROR(("libidnkit: unknown unassigned scheme \"%-.30s\", "
- "line %d\n", argv[0], lineno));
- return (r);
- } else if (r != idn_success) {
- return (r);
- }
-
- /*
- * Set bidi checker.
- */
- r = idn_checker_create(&ctx->bidi_checker);
- if (r != idn_success) {
- ERROR(("libidnkit: cannot create bidi checker, %s, line %d\n",
- idn_result_tostring(r), lineno));
- return (r);
- }
-
- sprintf(scheme_name, "%s%s", IDN_CHECKER_BIDI_PREFIX, argv[0]);
- r = idn_checker_add(ctx->bidi_checker, scheme_name);
- if (r == idn_invalid_name) {
- ERROR(("libidnkit: unknown bidi scheme \"%-.30s\", "
- "line %d\n", argv[0], lineno));
- return (r);
- } else if (r != idn_success) {
- return (r);
- }
-
- return (idn_success);
-}
-
-static int
-split_args(char *s, char **av, int max_ac) {
- int ac;
- int i;
-
- for (ac = 0; *s != '\0' && ac < max_ac; ac++) {
- if (ac > 0)
- *s++ = '\0';
- while (isspace((unsigned char)*s))
- s++;
- if (*s == '\0')
- break;
- if (*s == '"' || *s == '\'') {
- int qc = *s++;
- av[ac] = s;
- while (*s != qc) {
- if (*s == '\0')
- return (-1);
- s++;
- }
- } else {
- av[ac] = s;
- while (*s != '\0' && !isspace((unsigned char)*s))
- s++;
- }
- }
-
- for (i = ac; i < max_ac; i++)
- av[i] = NULL;
-
- return (ac);
-}
-
-static void
-resetconf(idn_resconf_t ctx) {
-#ifndef WITHOUT_ICONV
- idn_resconf_setlocalconverter(ctx, NULL);
-#endif
- idn_resconf_setidnconverter(ctx, NULL);
- idn_resconf_setauxidnconverter(ctx, NULL);
- idn_resconf_setdelimitermap(ctx, NULL);
- idn_resconf_setlocalmapselector(ctx, NULL);
- idn_resconf_setmapper(ctx, NULL);
- idn_resconf_setnormalizer(ctx, NULL);
- idn_resconf_setprohibitchecker(ctx, NULL);
- idn_resconf_setunassignedchecker(ctx, NULL);
- idn_resconf_setbidichecker(ctx, NULL);
-}
-
-#ifndef WITHOUT_ICONV
-static idn_result_t
-update_local_converter(idn_resconf_t ctx) {
- idn_result_t r;
- const char *old_encoding;
- const char *new_encoding;
-
- /*
- * We don't update local converter, if the converter is set
- * by idn_resconf_setlocalconverter() or
- * idn_resconf_setlocalconvertername().
- */
- if (ctx->local_converter_is_static)
- return (idn_success);
-
- /*
- * Update the local converter if the local encoding is changed.
- */
- old_encoding = (ctx->local_converter != NULL) ?
- idn_converter_localencoding(ctx->local_converter) :
- NULL;
- new_encoding = idn_localencoding_name();
- if (new_encoding == NULL) {
- ERROR(("cannot determine local codeset name\n"));
- return (idn_notfound);
- }
-
- if (old_encoding != NULL &&
- new_encoding != NULL &&
- strcmp(old_encoding, new_encoding) == 0) {
- return (idn_success);
- }
-
- if (ctx->local_converter != NULL) {
- idn_converter_destroy(ctx->local_converter);
- ctx->local_converter = NULL;
- }
-
- r = idn_converter_create(new_encoding,
- &ctx->local_converter,
- IDN_CONVERTER_RTCHECK);
- return (r);
-}
-#endif
-
-idn_result_t
-idn_resconf_setdefaults(idn_resconf_t ctx)
-{
- idn_result_t r;
-
- assert(ctx != NULL);
-
- TRACE(("idn_resconf_setdefaults()\n"));
-
- resetconf(ctx);
- r = idn_delimitermap_create(&ctx->delimiter_mapper);
- if (r != idn_success) {
- ERROR(("libidnkit: cannot create delimiter mapper, %s\n",
- idn_result_tostring(r)));
- return (r);
- }
-
- return setdefaults_body(ctx, 0);
-}
-
-static idn_result_t
-setdefaults_body(idn_resconf_t ctx, int conf_mask) {
- idn_result_t r;
-
- TRACE(("setdefaults_body()\n"));
- assert(ctx != NULL);
-
- if (!(conf_mask & DEFAULT_CONF_NAMEPREP)) {
- TRACE(("set default nameprep\n"));
- r = idn_resconf_setnameprepversion(ctx, IDN_NAMEPREP_CURRENT);
- if (r != idn_success) {
- return (r);
- }
- }
- if (!(conf_mask & DEFAULT_CONF_IDN_ENCODING)) {
- TRACE(("set default idn encoding\n"));
- r = idn_converter_create(IDN_ENCODING_CURRENT,
- &ctx->idn_converter,
- IDN_CONVERTER_DELAYEDOPEN |
- IDN_CONVERTER_RTCHECK);
- if (r != idn_success) {
- ERROR(("libidnkit: cannot create idn converter, %s\n",
- idn_result_tostring(r)));
- return (r);
- }
- }
-
- return (idn_success);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/result.c b/contrib/idn/idnkit-1.0-src/lib/result.c
deleted file mode 100644
index ac3d27dc..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/result.c
+++ /dev/null
@@ -1,76 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: result.c,v 1.1 2003/06/04 00:26:12 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-#include <idn/result.h>
-
-static char *result_string[] = {
- "success",
- "not found",
- "invalid encoding found",
- "syntax error",
- "invalid name",
- "invalid message",
- "invalid action",
- "invalid code point",
- "label length reduced to 0 or exceeded 63 bytes",
- "buffer overflow",
- "no such entry",
- "out of memory",
- "no such file",
- "no mapping to output codeset",
- "context information required",
- "prohibited character found",
- "generic failure",
-};
-
-char *
-idn_result_tostring(idn_result_t result) {
- if (result < 0 || result > idn_failure)
- return ("unknown result code");
-
- return (result_string[result]);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/strhash.c b/contrib/idn/idnkit-1.0-src/lib/strhash.c
deleted file mode 100644
index 304953d9..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/strhash.c
+++ /dev/null
@@ -1,283 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: strhash.c,v 1.1 2003/06/04 00:26:13 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <idn/assert.h>
-#include <idn/logmacro.h>
-#include <idn/result.h>
-#include <idn/strhash.h>
-
-/*
- * Initially, the number of hash buckets is INITIAL_HASH_SIZE.
- * As the more elements are put in the hash, the number of elements
- * per bucket will exceed THRESHOLD eventually. When it happens,
- * the number of buckets will be multiplied by FACTOR.
- */
-#define INITIAL_HASH_SIZE 67
-#define FACTOR 7
-#define THRESHOLD 5
-
-#define HASH_MULT 31
-
-typedef struct strhash_entry {
- struct strhash_entry *next;
- unsigned long hash_value;
- char *key;
- void *value;
-} strhash_entry_t;
-
-struct idn__strhash {
- int nbins;
- int nelements;
- strhash_entry_t **bins;
-};
-
-static unsigned long hash_value(const char *key);
-static strhash_entry_t *find_entry(strhash_entry_t *entry, const char *key,
- unsigned long hash);
-static strhash_entry_t *new_entry(const char *key, void *value);
-static idn_result_t expand_bins(idn__strhash_t hash, int new_size);
-
-idn_result_t
-idn__strhash_create(idn__strhash_t *hashp) {
- idn__strhash_t hash;
- idn_result_t r;
-
- TRACE(("idn__strhash_create()\n"));
-
- assert(hashp != NULL);
-
- *hashp = NULL;
-
- if ((hash = malloc(sizeof(struct idn__strhash))) == NULL) {
- WARNING(("idn__strhash_create: malloc failed (hash)\n"));
- return (idn_nomemory);
- }
- hash->nbins = 0;
- hash->nelements = 0;
- hash->bins = NULL;
- if ((r = expand_bins(hash, INITIAL_HASH_SIZE)) != idn_success) {
- WARNING(("idn__strhash_create: malloc failed (bins)\n"));
- free(hash);
- return (r);
- }
-
- *hashp = hash;
-
- return (idn_success);
-}
-
-void
-idn__strhash_destroy(idn__strhash_t hash, idn__strhash_freeproc_t proc) {
- int i;
-
- assert(hash != NULL && hash->bins != NULL);
-
- for (i = 0; i < hash->nbins; i++) {
- strhash_entry_t *bin = hash->bins[i];
- strhash_entry_t *next;
-
- while (bin != NULL) {
- next = bin->next;
- if (proc != NULL)
- (*proc)(bin->value);
- free(bin);
- bin = next;
- }
- }
- free(hash->bins);
- free(hash);
-}
-
-idn_result_t
-idn__strhash_put(idn__strhash_t hash, const char *key, void *value) {
- unsigned long h, h_index;
- strhash_entry_t *entry;
-
- assert(hash != NULL && key != NULL);
-
- h = hash_value(key);
- h_index = h % hash->nbins;
-
- if ((entry = find_entry(hash->bins[h_index], key, h)) != NULL) {
- /* Entry exists. Replace the value. */
- entry->value = value;
- } else {
- /* Create new entry. */
- if ((entry = new_entry(key, value)) == NULL) {
- return (idn_nomemory);
- }
- /* Insert it to the list. */
- entry->next = hash->bins[h_index];
- hash->bins[h_index] = entry;
- hash->nelements++;
-
- if (hash->nelements > hash->nbins * THRESHOLD) {
- idn_result_t r;
- r = expand_bins(hash, hash->nbins * FACTOR);
- if (r != idn_success) {
- TRACE(("idn__strhash_put: hash table "
- "expansion failed\n"));
- }
- }
- }
-
- return (idn_success);
-}
-
-idn_result_t
-idn__strhash_get(idn__strhash_t hash, const char *key, void **valuep) {
- unsigned long h;
- strhash_entry_t *entry;
-
- assert(hash != NULL && key != NULL && valuep != NULL);
-
- h = hash_value(key);
- entry = find_entry(hash->bins[h % hash->nbins], key, h);
- if (entry == NULL)
- return (idn_noentry);
-
- *valuep = entry->value;
- return (idn_success);
-}
-
-int
-idn__strhash_exists(idn__strhash_t hash, const char *key) {
- unsigned long h;
-
- assert(hash != NULL && key != NULL);
-
- h = hash_value(key);
- return (find_entry(hash->bins[h % hash->nbins], key, h) != NULL);
-}
-
-static unsigned long
-hash_value(const char *key) {
- unsigned long h = 0;
- unsigned char *p = (unsigned char *)key;
- int c;
-
- while ((c = *p++) != '\0') {
- h = h * HASH_MULT + c;
- }
- return (h);
-}
-
-static strhash_entry_t *
-find_entry(strhash_entry_t *entry, const char *key, unsigned long hash) {
- assert(key != NULL);
-
- while (entry != NULL) {
- if (entry->hash_value == hash && strcmp(key, entry->key) == 0)
- return (entry);
- entry = entry->next;
- }
- return (NULL);
-}
-
-static strhash_entry_t *
-new_entry(const char *key, void *value) {
- strhash_entry_t *entry;
- int len;
-
- assert(key != NULL);
-
- len = strlen(key) + 1;
- if ((entry = malloc(sizeof(strhash_entry_t) + len)) == NULL) {
- return (NULL);
- }
- entry->next = NULL;
- entry->hash_value = hash_value(key);
- entry->key = (char *)(entry + 1);
- (void)strcpy(entry->key, key);
- entry->value = value;
-
- return (entry);
-}
-
-static idn_result_t
-expand_bins(idn__strhash_t hash, int new_size) {
- strhash_entry_t **old_bins, **new_bins;
- int old_size;
- int old_index, new_index;
-
- new_bins = malloc(sizeof(strhash_entry_t *) * new_size);
- if (new_bins == NULL)
- return (idn_nomemory);
-
- memset(new_bins, 0, sizeof(strhash_entry_t *) * new_size);
-
- old_bins = hash->bins;
- old_size = hash->nbins;
- for (old_index = 0; old_index < old_size; old_index++) {
- strhash_entry_t *entries = old_bins[old_index];
-
- while (entries != NULL) {
- strhash_entry_t *e = entries;
-
- /* Remove the top element from the linked list. */
- entries = entries->next;
-
- /* ..and move to the new hash. */
- new_index = e->hash_value % new_size;
- e->next = new_bins[new_index];
- new_bins[new_index] = e;
- }
- }
-
- hash->nbins = new_size;
- hash->bins = new_bins;
-
- if (old_bins != NULL)
- free(old_bins);
-
- return (idn_success);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/Makefile.in b/contrib/idn/idnkit-1.0-src/lib/tests/Makefile.in
deleted file mode 100644
index 124ccecb..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/Makefile.in
+++ /dev/null
@@ -1,304 +0,0 @@
-# $Id: Makefile.in,v 1.2 2004/07/20 07:13:39 marka Exp $
-# Copyright (c) 2000, 2002 Japan Network Information Center.
-# All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-.SUFFIXES:
-.SUFFIXES: .tsy .c
-
-top_builddir = ../..
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-CC = @CC@
-SHELL = @SHELL@
-LIBTOOL = @LIBTOOL@
-
-ICONVINC = @ICONVINC@
-ICONVLIB = @ICONVLIB@
-IDNLIB = ../libidntest.la
-IDNLITELIB = ../libidntestlite.la
-
-INCS = -I. -I$(srcdir) -I$(srcdir)/../../include -I../../include $(ICONVINC)
-DEFS =
-
-CFLAGS = $(INCS) $(DEFS) @CPPFLAGS@ @CFLAGS@
-LDFLAGS = @LDFLAGS@
-TSYFLAGS =
-
-PERL = @PERL@
-
-COMMONSRCS = testsuite.c testutil.c setenv.c
-COMMONOBJS = testsuite.lo testutil.lo setenv.lo
-BUILTSRCS = api.c api-init1.c api-init2.c api-init3.c \
- api-init4-1.c api-init4-2.c api-init4-3.c \
- api-init5-1.c api-init5-2.c api-init5-3.c \
- res.c resconf.c mapselector.c checker.c converter.c mapper.c \
- normalizer.c delimitermap.c ucs4.c nameprep.c \
- testconfig.h
-
-TESTS = api-test \
- api-init1-test \
- api-init2-test \
- api-init3-test \
- api-init4-1-test \
- api-init4-2-test \
- api-init4-3-test \
- api-init5-1-test \
- api-init5-2-test \
- api-init5-3-test \
- res-test \
- resconf-test \
- mapselector-test \
- converter-test \
- checker-test \
- mapper-test \
- normalizer-test \
- delimitermap-test \
- ucs4-test \
- nameprep-test
-
-LITETESTS = apilite-test \
- reslite-test \
- resconflite-test \
- converterlite-test
-
-.tsy.c:
- rm -f $@ $@.tmp
- $(PERL) $(srcdir)/testygen -o $@ $(TSYFLAGS) $<
- $(PERL) $(srcdir)/utffilter $@ > $@.tmp
- mv -f $@.tmp $@
-
-all:
-
-install:
-
-clean:
- rm -f *.o *.lo *.tmp core *.core *~
- rm -f $(TESTS) $(LITETESTS) $(BUILTSRCS)
- rm -f test.conf testalias.conf test.map
- rm -f iconvchk
- rm -fr .libs/
-
-distclean: clean
- rm -f Makefile
-
-@LITEONLY_TRUE@test check: test-lite
-@LITEONLY_FALSE@test check: test-nolite
-
-test-lite: $(LITETESTS)
- @for i in $(LITETESTS); do \
- echo "Run test program: $$i"; \
- ./$$i; \
- echo; \
- done
-
-test-nolite: $(TESTS) $(LITETESTS) iconvchk
- @./iconvchk
- @for i in $(TESTS) $(LITETESTS); do \
- echo "Run test program: $$i"; \
- ./$$i; \
- echo; \
- done
-
-api-test: api.lo $(IDNLIB) $(COMMONOBJS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- api.lo $(COMMONOBJS) $(IDNLIB) $(ICONVLIB)
-api.lo: api.c testconfig.h
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c api.c
-
-apilite-test: apilite.lo $(IDNLITELIB) $(COMMONOBJS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- apilite.lo $(COMMONOBJS) $(IDNLITELIB)
-apilite.lo: api.c testconfig.h
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -DWITHOUT_ICONV -o $@ \
- -c api.c
-
-api-init1-test: api-init1.lo $(IDNLIB) $(COMMONOBJS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- api-init1.lo $(COMMONOBJS) $(IDNLIB) $(ICONVLIB)
-api-init1.lo: api-init1.c testconfig.h
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c api-init1.c
-
-api-init2-test: api-init2.lo $(IDNLIB) $(COMMONOBJS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- api-init2.lo $(COMMONOBJS) $(IDNLIB) $(ICONVLIB)
-api-init2.lo: api-init2.c testconfig.h
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c api-init2.c
-
-api-init3-test: api-init3.lo $(IDNLIB) $(COMMONOBJS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- api-init3.lo $(COMMONOBJS) $(IDNLIB) $(ICONVLIB)
-api-init3.lo: api-init3.c testconfig.h
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c api-init3.c
-
-api-init4-1-test: api-init4-1.lo $(IDNLIB) $(COMMONOBJS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- api-init4-1.lo $(COMMONOBJS) $(IDNLIB) $(ICONVLIB)
-api-init4-1.lo: api-init4-1.c testconfig.h
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c api-init4-1.c
-
-api-init4-2-test: api-init4-2.lo $(IDNLIB) $(COMMONOBJS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- api-init4-2.lo $(COMMONOBJS) $(IDNLIB) $(ICONVLIB)
-api-init4-2.lo: api-init4-2.c testconfig.h
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c api-init4-2.c
-
-api-init4-3-test: api-init4-3.lo $(IDNLIB) $(COMMONOBJS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- api-init4-3.lo $(COMMONOBJS) $(IDNLIB) $(ICONVLIB)
-api-init4-3.lo: api-init4-3.c testconfig.h
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c api-init4-3.c
-
-api-init5-1-test: api-init5-1.lo $(IDNLIB) $(COMMONOBJS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- api-init5-1.lo $(COMMONOBJS) $(IDNLIB) $(ICONVLIB)
-api-init5-1.lo: api-init5-1.c testconfig.h
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c api-init5-1.c
-
-api-init5-2-test: api-init5-2.lo $(IDNLIB) $(COMMONOBJS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- api-init5-2.lo $(COMMONOBJS) $(IDNLIB) $(ICONVLIB)
-api-init5-2.lo: api-init5-2.c testconfig.h
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c api-init5-2.c
-
-api-init5-3-test: api-init5-3.lo $(IDNLIB) $(COMMONOBJS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- api-init5-3.lo $(COMMONOBJS) $(IDNLIB) $(ICONVLIB)
-api-init5-3.lo: api-init5-3.c testconfig.h
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c api-init5-3.c
-
-res-test: res.lo $(IDNLIB) $(COMMONOBJS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- res.lo $(COMMONOBJS) $(IDNLIB) $(ICONVLIB)
-res.lo: res.c testconfig.h
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c res.c
-
-reslite-test: reslite.lo $(IDNLITELIB) $(COMMONOBJS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- reslite.lo $(COMMONOBJS) $(IDNLITELIB)
-reslite.lo: res.c testconfig.h
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -DWITHOUT_ICONV -o $@ \
- -c res.c
-
-resconf-test: resconf.lo $(IDNLIB) $(COMMONOBJS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- resconf.lo $(COMMONOBJS) $(IDNLIB) $(ICONVLIB)
-resconf.lo: resconf.c testconfig.h
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c resconf.c
-
-resconflite-test: resconflite.lo $(IDNLITELIB) $(COMMONOBJS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- resconflite.lo $(COMMONOBJS) $(IDNLITELIB)
-resconflite.lo: resconf.c testconfig.h
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -DWITHOUT_ICONV -o $@ \
- -c resconf.c
-
-mapselector-test: mapselector.lo $(IDNLIB) $(COMMONOBJS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- mapselector.lo $(COMMONOBJS) $(IDNLIB) $(ICONVLIB)
-mapselector.lo: mapselector.c
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c mapselector.c
-
-converter-test: converter.lo $(IDNLIB) $(COMMONOBJS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- converter.lo $(COMMONOBJS) $(IDNLIB) $(ICONVLIB)
-converter.lo: converter.c
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c converter.c
-
-converterlite-test: converterlite.lo $(IDNLITELIB) $(COMMONOBJS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- converterlite.lo $(COMMONOBJS) $(IDNLITELIB)
-converterlite.lo: converter.c
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -DWITHOUT_ICONV -o $@ \
- -c converter.c
-
-checker-test: checker.lo $(IDNLIB) $(COMMONOBJS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- checker.lo $(COMMONOBJS) $(IDNLIB) $(ICONVLIB)
-checker.lo: checker.c
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c checker.c
-
-mapper-test: mapper.lo $(IDNLIB) $(COMMONOBJS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- mapper.lo $(COMMONOBJS) $(IDNLIB) $(ICONVLIB)
-mapper.lo: mapper.c
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c mapper.c
-
-normalizer-test: normalizer.lo $(IDNLIB) $(COMMONOBJS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- normalizer.lo $(COMMONOBJS) $(IDNLIB) $(ICONVLIB)
-normalizer.lo: normalizer.c
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c normalizer.c
-
-delimitermap-test: delimitermap.lo $(IDNLIB) $(COMMONOBJS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- delimitermap.lo $(COMMONOBJS) $(IDNLIB) $(ICONVLIB)
-delimitermap.lo: delimitermap.c
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c delimitermap.c
-
-ucs4-test: ucs4.lo $(IDNLIB) $(COMMONOBJS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- ucs4.lo $(COMMONOBJS) $(IDNLIB) $(ICONVLIB)
-ucs4.lo: ucs4.c
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c ucs4.c
-
-nameprep-test: nameprep.lo $(IDNLIB) $(COMMONOBJS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- nameprep.lo $(COMMONOBJS) $(IDNLIB) $(ICONVLIB)
-nameprep.lo: nameprep.c
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c nameprep.c
-
-testsuite.lo: testsuite.c testsuite.h
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -o $@ -c $(srcdir)/testsuite.c
-testutil.lo: testutil.c testutil.h
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -o $@ -c $(srcdir)/testutil.c
-setenv.lo: setenv.c
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -o $@ -c $(srcdir)/setenv.c
-
-testconfig.h: ../../include/config.h
- rm -f testconfig.h
- sed -n -e '/HAVE_SETENV/p' -e '/HAVE_UNSETENV/p' \
- ../../include/config.h > testconfig.h
-
-iconvchk: iconvchk.c codeset.h
- $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ \
- $(srcdir)/iconvchk.c $(IDNLIB) $(ICONVLIB)
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/api-init1.tsy b/contrib/idn/idnkit-1.0-src/lib/tests/api-init1.tsy
deleted file mode 100644
index ae9dd2b7..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/api-init1.tsy
+++ /dev/null
@@ -1,113 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: api-init1.tsy,v 1.1 2003/06/04 00:26:46 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <idn/api.h>
-#include <idn/log.h>
-
-#include "codeset.h"
-#include "setenv.h"
-#include "testutil.h"
-
-#ifndef EUCJP_ENCODING_NAME
-#define EUCJP_ENCODING_NAME "eucJP"
-#endif
-
-#define CONF_FILENAME "test.conf"
-
-//--------------------------------------------------------------------
-// Setups and Teardowns.
-//--------------------------------------------------------------------
-
-//# SETUP
-// group: init
-{
- char to[256];
- idn_result_t r;
-
- setenv("IDN_LOCAL_CODESET", "UTF-8", 1);
- unsetenv("IDN_DISABLE");
- create_conf_file(CONF_FILENAME, 0,
- "idn-encoding UTF-8",
- NULL);
-}
-
-//# TEARDOWN
-// group: init
-{
- remove(CONF_FILENAME);
-}
-
-//--------------------------------------------------------------------
-// Testcases.
-//--------------------------------------------------------------------
-
-//# TESTCASE
-// title: nameinit(0)
-// group: init
-{
- r = idn__setconffile(CONF_FILENAME);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_nameinit(0);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_encodename(IDN_ENCODE_APP, "<U+3042>", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "xn--l8j");
-
- r = idn_decodename(IDN_DECODE_APP, "xn--l8j", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "<U+3042>");
-
- r = idn_decodename2(IDN_DECODE_APP, "xn--l8j", to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "<U+3042>");
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/api-init2.tsy b/contrib/idn/idnkit-1.0-src/lib/tests/api-init2.tsy
deleted file mode 100644
index 7ce1bbf3..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/api-init2.tsy
+++ /dev/null
@@ -1,113 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: api-init2.tsy,v 1.1 2003/06/04 00:26:47 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <idn/api.h>
-#include <idn/log.h>
-
-#include "codeset.h"
-#include "setenv.h"
-#include "testutil.h"
-
-#ifndef EUCJP_ENCODING_NAME
-#define EUCJP_ENCODING_NAME "eucJP"
-#endif
-
-#define CONF_FILENAME "test.conf"
-
-//--------------------------------------------------------------------
-// Setups and Teardowns.
-//--------------------------------------------------------------------
-
-//# SETUP
-// group: init
-{
- char to[256];
- idn_result_t r;
-
- setenv("IDN_LOCAL_CODESET", "UTF-8", 1);
- unsetenv("IDN_DISABLE");
- create_conf_file(CONF_FILENAME, 0,
- "idn-encoding UTF-8",
- NULL);
-}
-
-//# TEARDOWN
-// group: init
-{
- remove(CONF_FILENAME);
-}
-
-//--------------------------------------------------------------------
-// Testcases.
-//--------------------------------------------------------------------
-
-//# TESTCASE
-// title: nameinit(1)
-// group: init
-{
- r = idn__setconffile(CONF_FILENAME);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_nameinit(1);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_encodename(IDN_ENCODE_APP, "<U+3042>", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "<U+3042>");
-
- r = idn_decodename(IDN_DECODE_APP, "xn--l8j", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "xn--l8j");
-
- r = idn_decodename2(IDN_DECODE_APP, "xn--l8j", to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "xn--l8j");
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/api-init3.tsy b/contrib/idn/idnkit-1.0-src/lib/tests/api-init3.tsy
deleted file mode 100644
index 96aa01d7..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/api-init3.tsy
+++ /dev/null
@@ -1,117 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: api-init3.tsy,v 1.1 2003/06/04 00:26:47 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <idn/api.h>
-#include <idn/log.h>
-
-#include "codeset.h"
-#include "setenv.h"
-#include "testutil.h"
-
-#ifndef EUCJP_ENCODING_NAME
-#define EUCJP_ENCODING_NAME "eucJP"
-#endif
-
-#define CONF_FILENAME "test.conf"
-
-//--------------------------------------------------------------------
-// Setups and Teardowns.
-//--------------------------------------------------------------------
-
-//# SETUP
-// group: init
-{
- char to[256];
- idn_result_t r;
-
- setenv("IDN_LOCAL_CODESET", "UTF-8", 1);
- unsetenv("IDN_DISABLE");
- create_conf_file(CONF_FILENAME, 0,
- "idn-encoding UTF-8",
- NULL);
-}
-
-//# TEARDOWN
-// group: init
-{
- remove(CONF_FILENAME);
-}
-
-//--------------------------------------------------------------------
-// Testcases.
-//--------------------------------------------------------------------
-
-//# TESTCASE
-// title: call nameinit() twice
-// group: init
-{
- r = idn__setconffile(CONF_FILENAME);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_nameinit(1);
- ASSERT_RESULT(r, idn_success);
- r = idn_nameinit(0);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_encodename(IDN_ENCODE_APP, "<U+3042>", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "<U+3042>");
-
- r = idn_decodename(IDN_DECODE_APP, "xn--l8j", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "xn--l8j");
-
- r = idn_decodename2(IDN_DECODE_APP, "xn--l8j", to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "xn--l8j");
-
- remove(CONF_FILENAME);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/api-init4-1.tsy b/contrib/idn/idnkit-1.0-src/lib/tests/api-init4-1.tsy
deleted file mode 100644
index 9212f826..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/api-init4-1.tsy
+++ /dev/null
@@ -1,96 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: api-init4-1.tsy,v 1.1 2003/06/04 00:26:47 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <idn/api.h>
-#include <idn/log.h>
-
-#include "setenv.h"
-#include "testutil.h"
-
-#define CONF_FILENAME "test.conf"
-
-//--------------------------------------------------------------------
-// Setups and Teardowns.
-//--------------------------------------------------------------------
-
-//# SETUP
-// group: init
-{
- char to[256];
- idn_result_t r;
-
- setenv("IDN_LOCAL_CODESET", "UTF-8", 1);
- unsetenv("IDN_DISABLE");
- create_conf_file(CONF_FILENAME, 0,
- "idn-encoding UTF-8",
- NULL);
-}
-
-//# TEARDOWN
-// group: init
-{
- remove(CONF_FILENAME);
-}
-
-//--------------------------------------------------------------------
-// Testcases.
-//--------------------------------------------------------------------
-
-//# TESTCASE
-// title: call encodename() without initialization
-// group: init
-{
- r = idn__setconffile(CONF_FILENAME);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_encodename(IDN_ENCODE_APP, "<U+3042>", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "xn--l8j");
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/api-init4-2.tsy b/contrib/idn/idnkit-1.0-src/lib/tests/api-init4-2.tsy
deleted file mode 100644
index 119efe2c..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/api-init4-2.tsy
+++ /dev/null
@@ -1,96 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: api-init4-2.tsy,v 1.1 2003/06/04 00:26:47 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <idn/api.h>
-#include <idn/log.h>
-
-#include "setenv.h"
-#include "testutil.h"
-
-#define CONF_FILENAME "test.conf"
-
-//--------------------------------------------------------------------
-// Setups and Teardowns.
-//--------------------------------------------------------------------
-
-//# SETUP
-// group: init
-{
- char to[256];
- idn_result_t r;
-
- setenv("IDN_LOCAL_CODESET", "UTF-8", 1);
- unsetenv("IDN_DISABLE");
- create_conf_file(CONF_FILENAME, 0,
- "idn-encoding UTF-8",
- NULL);
-}
-
-//# TEARDOWN
-// group: init
-{
- remove(CONF_FILENAME);
-}
-
-//--------------------------------------------------------------------
-// Testcases.
-//--------------------------------------------------------------------
-
-//# TESTCASE
-// title: call decodename() without initialization
-// group: init
-{
- r = idn__setconffile(CONF_FILENAME);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_decodename(IDN_DECODE_APP, "xn--l8j", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "<U+3042>");
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/api-init4-3.tsy b/contrib/idn/idnkit-1.0-src/lib/tests/api-init4-3.tsy
deleted file mode 100644
index 7423a069..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/api-init4-3.tsy
+++ /dev/null
@@ -1,102 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: api-init4-3.tsy,v 1.1 2003/06/04 00:26:47 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <idn/api.h>
-#include <idn/log.h>
-
-#include "codeset.h"
-#include "setenv.h"
-#include "testutil.h"
-
-#ifndef EUCJP_ENCODING_NAME
-#define EUCJP_ENCODING_NAME "eucJP"
-#endif
-
-#define CONF_FILENAME "test.conf"
-
-//--------------------------------------------------------------------
-// Setups and Teardowns.
-//--------------------------------------------------------------------
-
-//# SETUP
-// group: init
-{
- char to[256];
- idn_result_t r;
-
- setenv("IDN_LOCAL_CODESET", "UTF-8", 1);
- unsetenv("IDN_DISABLE");
- create_conf_file(CONF_FILENAME, 0,
- "idn-encoding UTF-8",
- NULL);
-}
-
-//# TEARDOWN
-// group: init
-{
- remove(CONF_FILENAME);
-}
-
-//--------------------------------------------------------------------
-// Testcases.
-//--------------------------------------------------------------------
-
-//# TESTCASE
-// title: call decodename2() without initialization
-// group: init
-{
- r = idn__setconffile(CONF_FILENAME);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_decodename2(IDN_DECODE_APP, "xn--l8j", to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "<U+3042>");
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/api-init5-1.tsy b/contrib/idn/idnkit-1.0-src/lib/tests/api-init5-1.tsy
deleted file mode 100644
index 3399f912..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/api-init5-1.tsy
+++ /dev/null
@@ -1,102 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: api-init5-1.tsy,v 1.1 2003/06/04 00:26:48 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <idn/api.h>
-#include <idn/log.h>
-
-#include "setenv.h"
-#include "testutil.h"
-
-#define CONF_FILENAME "test.conf"
-
-//--------------------------------------------------------------------
-// Setups and Teardowns.
-//--------------------------------------------------------------------
-
-//# SETUP
-// group: init
-{
- char to[256];
- idn_result_t r;
-
- setenv("IDN_LOCAL_CODESET", "UTF-8", 1);
- unsetenv("IDN_DISABLE");
- create_conf_file(CONF_FILENAME, 0,
- "idn-encoding UTF-8",
- NULL);
-}
-
-//# TEARDOWN
-// group: init
-{
- remove(CONF_FILENAME);
-}
-
-//--------------------------------------------------------------------
-// Testcases.
-//--------------------------------------------------------------------
-
-//# TESTCASE
-// title: call encodename() and nameinit()
-// group: init
-{
- r = idn__setconffile(CONF_FILENAME);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_encodename(IDN_ENCODE_APP, "aaa", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
-
- r = idn_nameinit(1);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_encodename(IDN_ENCODE_APP, "<U+3042>", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "xn--l8j");
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/api-init5-2.tsy b/contrib/idn/idnkit-1.0-src/lib/tests/api-init5-2.tsy
deleted file mode 100644
index f45f072a..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/api-init5-2.tsy
+++ /dev/null
@@ -1,102 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: api-init5-2.tsy,v 1.1 2003/06/04 00:26:48 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <idn/api.h>
-#include <idn/log.h>
-
-#include "setenv.h"
-#include "testutil.h"
-
-#define CONF_FILENAME "test.conf"
-
-//--------------------------------------------------------------------
-// Setups and Teardowns.
-//--------------------------------------------------------------------
-
-//# SETUP
-// group: init
-{
- char to[256];
- idn_result_t r;
-
- setenv("IDN_LOCAL_CODESET", "UTF-8", 1);
- unsetenv("IDN_DISABLE");
- create_conf_file(CONF_FILENAME, 0,
- "idn-encoding UTF-8",
- NULL);
-}
-
-//# TEARDOWN
-// group: init
-{
- remove(CONF_FILENAME);
-}
-
-//--------------------------------------------------------------------
-// Testcases.
-//--------------------------------------------------------------------
-
-//# TESTCASE
-// title: call decodename() and nameinit()
-// group: init
-{
- r = idn__setconffile(CONF_FILENAME);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_decodename(IDN_DECODE_APP, "aaa", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
-
- r = idn_nameinit(1);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_decodename(IDN_DECODE_APP, "xn--l8j", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "<U+3042>");
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/api-init5-3.tsy b/contrib/idn/idnkit-1.0-src/lib/tests/api-init5-3.tsy
deleted file mode 100644
index 89402493..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/api-init5-3.tsy
+++ /dev/null
@@ -1,109 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: api-init5-3.tsy,v 1.1 2003/06/04 00:26:48 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <idn/api.h>
-#include <idn/log.h>
-
-#include "codeset.h"
-#include "setenv.h"
-#include "testutil.h"
-
-#ifndef EUCJP_ENCODING_NAME
-#define EUCJP_ENCODING_NAME "eucJP"
-#endif
-
-#define CONF_FILENAME "test.conf"
-
-//--------------------------------------------------------------------
-// Setups and Teardowns.
-//--------------------------------------------------------------------
-
-//# SETUP
-// group: init
-{
- char to[256];
- idn_result_t r;
-
- setenv("IDN_LOCAL_CODESET", "UTF-8", 1);
- unsetenv("IDN_DISABLE");
- create_conf_file(CONF_FILENAME, 0,
- "idn-encoding UTF-8",
- NULL);
-}
-
-//# TEARDOWN
-// group: init
-{
- remove(CONF_FILENAME);
-}
-
-//--------------------------------------------------------------------
-// Testcases.
-//--------------------------------------------------------------------
-
-//# TESTCASE
-// title: call decodename2() and nameinit()
-// group: init
-{
- r = idn__setconffile(CONF_FILENAME);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_decodename2(IDN_DECODE_APP, "aaa", to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_nameinit(1);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_decodename2(IDN_DECODE_APP, "xn--l8j", to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "<U+3042>");
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/api.tsy b/contrib/idn/idnkit-1.0-src/lib/tests/api.tsy
deleted file mode 100644
index 356c1771..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/api.tsy
+++ /dev/null
@@ -1,1009 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: api.tsy,v 1.1 2003/06/04 00:26:50 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <idn/api.h>
-#include <idn/log.h>
-
-#include "codeset.h"
-#include "setenv.h"
-
-#ifndef EUCJP_ENCODING_NAME
-#define EUCJP_ENCODING_NAME "eucJP"
-#endif
-
-/*
- * U+304B: hiragana letter KA
- * U+3099: combining katakana-hiragana voiced sound mark
- *
- * map("U+304B U+3099") -> "U+304C"
- *
- * U+304C: hiragana letter GA
- */
-#define UTF8_NAME "A<U+304B><U+3099>"
-#define UTF8_REVNAME "a<U+304C>"
-
-/*
- * A4AC: hiragana letter GA (in EUC-JP)
- */
-#define EUCJP_NAME "\xa4\xac"
-#define EUCJP_REVNAME "\xa4\xac"
-
-/*
- * Conversion result of "U+304B U+3099 A"
- */
-#define PUNYCODE_NAME "xn--a-i8t"
-
-/*
- * Conversion result of "A U+304B U+3099" (in EUC-JP).
- */
-#define AUX_EUCJP_NAME "xn--a-i\xa3\xb8t"
-
-
-//--------------------------------------------------------------------
-// Setups and Teardowns.
-//--------------------------------------------------------------------
-
-//# SETUP
-// group: generic-conversion
-//--
-// Initialize the `api' module.
-// Set local encoding to `UTF-8'.
-{
- char to[256];
- idn_result_t r;
-
- setenv("IDN_LOCAL_CODESET", "UTF-8", 1);
- unsetenv("IDN_DISABLE");
- idn_nameinit(0);
-}
-
-//# SETUP
-// group: quiet
-//--
-// Set log level to `fatal' to supress log messages.
-{
- int saved_log_level;
-
- saved_log_level = idn_log_getlevel();
- idn_log_setlevel(idn_log_level_fatal);
-}
-
-//# TEARDOWN
-// group: quiet
-//--
-// Restore log level.
-{
- idn_log_setlevel(saved_log_level);
-}
-
-//--------------------------------------------------------------------
-// Testcases.
-//--------------------------------------------------------------------
-
-//# TESTCASE
-// title: basic conversion by encodename()
-// group: generic-conversion
-{
- r = idn_encodename(IDN_ENCODE_APP, UTF8_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, PUNYCODE_NAME);
-}
-
-//# TESTCASE
-// title: basic conversion by decodename()
-// group: generic-conversion
-{
- r = idn_decodename(IDN_DECODE_APP, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_REVNAME);
-}
-
-//# TESTCASE
-// title: basic conversion by decodename2()
-// group: generic-conversion
-{
- r = idn_decodename2(IDN_DECODE_APP, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
-#ifdef WITHOUT_ICONV
- ASSERT_RESULT(r, idn_failure);
-#else
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_REVNAME);
-#endif
-}
-
-//# TESTCASE
-// title: call decodename2() with auxencoding=NULL
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_decodename2(IDN_DECODE_APP, PUNYCODE_NAME, to, sizeof(to),
- NULL);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_REVNAME);
-#endif
-}
-
-//# TESTCASE
-// title: call encodename() with actions=0
-// group: generic-conversion
-{
- r = idn_encodename(0, UTF8_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_NAME);
-}
-
-//# TESTCASE
-// title: call decodename() with actions=0
-// group: generic-conversion
-{
- r = idn_decodename(0, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, PUNYCODE_NAME);
-}
-
-//# TESTCASE
-// title: call decodename2() with actions=0
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_decodename2(0, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, AUX_EUCJP_NAME);
-#endif
-}
-
-//# TESTCASE
-// title: call encodename() with actions=rtcheck
-// group: generic-conversion quiet
-{
- r = idn_encodename(IDN_RTCHECK, EUCJP_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-}
-
-//# TESTCASE
-// title: call encodename() with actions=decode-query
-// group: generic-conversion quiet
-{
- r = idn_encodename(IDN_DECODE_QUERY, EUCJP_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-}
-
-//# TESTCASE
-// title: call encodename() with actions=decode-app
-// group: generic-conversion quiet
-{
- r = idn_encodename(IDN_DECODE_APP, EUCJP_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-}
-
-//# TESTCASE
-// title: call encodename() with actions=decode-stored
-// group: generic-conversion quiet
-{
- r = idn_encodename(IDN_DECODE_STORED, EUCJP_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-}
-
-//# TESTCASE
-// title: call encodename() with actions=(1<<31)
-// group: generic-conversion quiet
-{
- r = idn_encodename(1 << 31, EUCJP_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-}
-
-//# TESTCASE
-// title: call decodename() with actions=localmap
-// group: generic-conversion quiet
-{
- r = idn_decodename(IDN_LOCALMAP, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-}
-
-//# TESTCASE
-// title: call decodename2() with actions=localmap
-// group: generic-conversion quiet
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_decodename2(IDN_LOCALMAP, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_invalid_action);
-#endif
-}
-
-//# TESTCASE
-// title: call decodename() with actions=lencheck
-// group: generic-conversion quiet
-{
- r = idn_decodename(IDN_LENCHECK, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-}
-
-//# TESTCASE
-// title: call decodename2() with actions=lencheck
-// group: generic-conversion quiet
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_decodename2(IDN_LENCHECK, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_invalid_action);
-#endif
-}
-
-//# TESTCASE
-// title: call decodename() with actions=encode-query
-// group: generic-conversion quiet
-{
- r = idn_decodename(IDN_ENCODE_QUERY, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-}
-
-//# TESTCASE
-// title: call decodename2() with actions=encode-query
-// group: generic-conversion quiet
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_decodename2(IDN_ENCODE_QUERY, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_invalid_action);
-#endif
-}
-
-//# TESTCASE
-// title: call decodename() with actions=encode-app
-// group: generic-conversion quiet
-{
- r = idn_decodename(IDN_ENCODE_APP, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-}
-
-//# TESTCASE
-// title: call decodename2() with actions=encode-app
-// group: generic-conversion quiet
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_decodename2(IDN_ENCODE_APP, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_invalid_action);
-#endif
-}
-
-//# TESTCASE
-// title: call decodename() with actions=encode-stored
-// group: generic-conversion quiet
-{
- r = idn_decodename(IDN_ENCODE_STORED, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-}
-
-//# TESTCASE
-// title: call decodename2() with actions=encode-stored
-// group: generic-conversion quiet
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_decodename2(IDN_ENCODE_STORED, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_invalid_action);
-#endif
-}
-
-//# TESTCASE
-// title: call decodename() with actions=(1<<31)
-// group: generic-conversion quiet
-{
- r = idn_decodename(1 << 31, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-}
-
-//# TESTCASE
-// title: call decodename2() with actions=(1<<31)
-// group: generic-conversion quiet
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_decodename2(1 << 31, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_invalid_action);
-#endif
-}
-
-//# TESTCASE
-// title: call encodename() with actions=localconv
-// group: generic-conversion quiet
-{
-#ifndef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_encodename(IDN_LOCALCONV, UTF8_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-#endif
-}
-
-//# TESTCASE
-// title: call decodename() with actions=localconv
-// group: generic-conversion quiet
-{
-#ifndef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_decodename(IDN_LOCALCONV, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-#endif
-}
-
-//# TESTCASE
-// title: call decodename2() with actions=localconv
-// group: generic-conversion
-{
-#ifndef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_decodename2(IDN_LOCALCONV, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_failure);
-#endif
-}
-
-//# TESTCASE
-// title: call enable(0) and then encodename()
-// group: generic-conversion
-{
- idn_enable(0);
- r = idn_encodename(IDN_ENCODE_APP, UTF8_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_NAME);
-}
-
-//# TESTCASE
-// title: call decodename() when IDN_DISABLE is defined
-// group: generic-conversion
-{
- idn_enable(0);
- r = idn_decodename(IDN_DECODE_APP, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, PUNYCODE_NAME);
-}
-
-//# TESTCASE
-// title: call decodename() when IDN_DISABLE is defined
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- idn_enable(0);
- r = idn_decodename2(IDN_DECODE_APP, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, AUX_EUCJP_NAME);
-#endif
-}
-
-//# TESTCASE
-// title: call enable(0) and then encodename()
-// group: generic-conversion
-{
- idn_enable(0);
- r = idn_encodename(IDN_ENCODE_APP, UTF8_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_NAME);
-}
-
-//# TESTCASE
-// title: call enable(0) and then decodename()
-// group: generic-conversion
-{
- idn_enable(0);
- r = idn_decodename(IDN_DECODE_APP, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, PUNYCODE_NAME);
-}
-
-//# TESTCASE
-// title: call enable(0) and then decodename2()
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- idn_enable(0);
- r = idn_decodename2(IDN_DECODE_APP, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, AUX_EUCJP_NAME);
-#endif
-}
-
-//# TESTCASE
-// title: set IDN_DISABLE and call encodename()
-// group: generic-conversion
-{
- setenv("IDN_DISABLE", "1", 1);
- r = idn_encodename(IDN_ENCODE_APP, UTF8_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_NAME);
-}
-
-//# TESTCASE
-// title: set IDN_DISABLE and call decodename()
-// group: generic-conversion
-{
- setenv("IDN_DISABLE", "1", 1);
- r = idn_decodename(IDN_DECODE_APP, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, PUNYCODE_NAME);
-}
-
-//# TESTCASE
-// title: set IDN_DISABLE and call decodename2()
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- setenv("IDN_DISABLE", "1", 1);
- r = idn_decodename2(IDN_DECODE_APP, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, AUX_EUCJP_NAME);
-#endif
-}
-
-//# TESTCASE
-// title: set IDN_DISABLE, and then call enable(1) and encodename()
-// group: generic-conversion
-{
- setenv("IDN_DISABLE", "1", 1);
- idn_enable(1);
- r = idn_encodename(IDN_ENCODE_APP, UTF8_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, PUNYCODE_NAME);
-}
-
-//# TESTCASE
-// title: set IDN_DISABLE, and then call enable(1) and decodename()
-// group: generic-conversion
-{
- setenv("IDN_DISABLE", "1", 1);
- idn_enable(1);
- r = idn_decodename(IDN_DECODE_APP, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_REVNAME);
-}
-
-//# TESTCASE
-// title: set IDN_DISABLE, and then call enable(1) and decodename2()
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- setenv("IDN_DISABLE", "1", 1);
- idn_enable(1);
- r = idn_decodename2(IDN_DECODE_APP, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_REVNAME);
-#endif
-}
-
-//# TESTCASE
-// title: overrun test for arg `to' of encodename()
-// group: generic-conversion
-{
- /* Normal case */
- r = idn_encodename(IDN_ENCODE_APP, UTF8_NAME, to,
- strlen(PUNYCODE_NAME) + 1);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, PUNYCODE_NAME);
-
- r = idn_encodename(IDN_ENCODE_APP, UTF8_NAME, to,
- strlen(PUNYCODE_NAME));
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- /* enable(0) case */
- idn_enable(0);
- r = idn_encodename(IDN_ENCODE_APP, UTF8_NAME, to,
- strlen(UTF8_NAME) + 1);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_NAME);
-
- r = idn_encodename(IDN_ENCODE_APP, UTF8_NAME, to,
- strlen(UTF8_NAME));
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- /* actions=0 case */
- idn_enable(1);
- r = idn_encodename(0, UTF8_NAME, to, strlen(UTF8_NAME) + 1);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_NAME);
-
- r = idn_encodename(0, UTF8_NAME, to, strlen(UTF8_NAME));
- ASSERT_RESULT(r, idn_buffer_overflow);
-}
-
-//# TESTCASE
-// title: overrun test for arg `to' of decodename()
-// group: generic-conversion
-{
- /* Normal case */
- r = idn_decodename(IDN_DECODE_APP, PUNYCODE_NAME, to,
- strlen(UTF8_REVNAME) + 1);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_REVNAME);
-
- r = idn_decodename(IDN_DECODE_APP, PUNYCODE_NAME, to,
- strlen(UTF8_REVNAME));
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- /* idn_enable(0) case */
- idn_enable(0);
- r = idn_decodename(IDN_DECODE_APP, PUNYCODE_NAME, to,
- strlen(PUNYCODE_NAME) + 1);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, PUNYCODE_NAME);
-
- r = idn_decodename(IDN_DECODE_APP, PUNYCODE_NAME, to,
- strlen(PUNYCODE_NAME));
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- /* actions=0 case */
- idn_enable(1);
- r = idn_decodename(0, PUNYCODE_NAME, to, strlen(PUNYCODE_NAME) + 1);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, PUNYCODE_NAME);
-
- r = idn_decodename(0, PUNYCODE_NAME, to, strlen(PUNYCODE_NAME));
- ASSERT_RESULT(r, idn_buffer_overflow);
-}
-
-//# TESTCASE
-// title: overrun test for arg `to' of decodename2()
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- /* Normal case */
- r = idn_decodename2(IDN_DECODE_APP, AUX_EUCJP_NAME, to,
- strlen(UTF8_REVNAME) + 1, EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_REVNAME);
-
- r = idn_decodename2(IDN_DECODE_APP, AUX_EUCJP_NAME, to,
- strlen(UTF8_REVNAME), EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- /* idn_enable(0) case */
- idn_enable(0);
- r = idn_decodename2(IDN_DECODE_APP, AUX_EUCJP_NAME, to,
- strlen(AUX_EUCJP_NAME) + 1, EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, AUX_EUCJP_NAME);
-
- r = idn_decodename2(IDN_DECODE_APP, AUX_EUCJP_NAME, to,
- strlen(AUX_EUCJP_NAME), EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- /* actions=0 case */
- idn_enable(1);
- r = idn_decodename2(0, AUX_EUCJP_NAME, to, strlen(AUX_EUCJP_NAME) + 1,
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, AUX_EUCJP_NAME);
-
- r = idn_decodename2(0, AUX_EUCJP_NAME, to, strlen(AUX_EUCJP_NAME),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_buffer_overflow);
-
-#endif
-}
-
-//# TESTCASE
-// title: call encodename() with tolen=0
-// group: generic-conversion
-{
- r = idn_encodename(IDN_ENCODE_APP, UTF8_NAME, to, 0);
- ASSERT_RESULT(r, idn_buffer_overflow);
-}
-
-//# TESTCASE
-// title: call decodename() with tolen=0
-// group: generic-conversion
-{
- r = idn_decodename(IDN_DECODE_APP, PUNYCODE_NAME, to, 0);
- ASSERT_RESULT(r, idn_buffer_overflow);
-}
-
-//# TESTCASE
-// title: call decodename2() with tolen=0
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_decodename2(IDN_DECODE_APP, AUX_EUCJP_NAME, to, 0,
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_buffer_overflow);
-#endif
-}
-
-//# TESTCASE
-// title: convert an empty string using encodename()
-// group: generic-conversion
-{
- r = idn_encodename(IDN_ENCODE_APP, "", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "");
-}
-
-//# TESTCASE
-// title: convert an empty string using decodename()
-// group: generic-conversion
-{
- r = idn_decodename(IDN_DECODE_APP, "", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "");
-}
-
-//# TESTCASE
-// title: convert an empty string using decodename2()
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_decodename2(IDN_DECODE_APP, "", to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "");
-#endif
-}
-
-//# TESTCASE
-// title: prohcheck by encodename()
-// group: generic-conversion
-{
- /* U+1680: prohibited character */
- r = idn_encodename(IDN_PROHCHECK, "<U+1680>", to, sizeof(to));
- ASSERT_RESULT(r, idn_prohibited);
-}
-
-//# TESTCASE
-// title: unascheck by encodename()
-// group: generic-conversion
-{
- /* U+0221: unassigned codepoint */
- r = idn_encodename(IDN_UNASCHECK, "<U+0221>", to, sizeof(to));
- ASSERT_RESULT(r, idn_prohibited);
-}
-
-//# TESTCASE
-// title: bidicheck by encodename()
-// group: generic-conversion
-{
- /* U+05D0: bidirectional property is "R" */
- /* `a': bidirectional property is "L" */
- /* `0', `-': bidirectional property is "N" */
- r = idn_encodename(IDN_BIDICHECK, "<U+05D0>", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
-
- r = idn_encodename(IDN_BIDICHECK, "<U+05D0><U+05D0>",
- to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
-
- r = idn_encodename(IDN_BIDICHECK, "<U+05D0><U+05D0>-a",
- to, sizeof(to));
- ASSERT_RESULT(r, idn_prohibited);
-
- r = idn_encodename(IDN_BIDICHECK, "<U+05D0>-a-<U+05D0>",
- to, sizeof(to));
- ASSERT_RESULT(r, idn_prohibited);
-
- r = idn_encodename(IDN_BIDICHECK, "a-<U+05D0><U+05D0>",
- to, sizeof(to));
- ASSERT_RESULT(r, idn_prohibited);
-
- r = idn_encodename(IDN_BIDICHECK, "<U+05D0><U+05D0>-0",
- to, sizeof(to));
- ASSERT_RESULT(r, idn_prohibited);
-
- r = idn_encodename(IDN_BIDICHECK, "<U+05D0>-0-<U+05D0>",
- to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
-
- r = idn_encodename(IDN_BIDICHECK, "0-<U+05D0><U+05D0>",
- to, sizeof(to));
- ASSERT_RESULT(r, idn_prohibited);
-}
-
-//# TESTCASE
-// title: asccheck by encodename()
-// group: generic-conversion
-{
- r = idn_encodename(IDN_ASCCHECK, "-name", to, sizeof(to));
- ASSERT_RESULT(r, idn_prohibited);
-
- r = idn_encodename(IDN_ASCCHECK, "name-", to, sizeof(to));
- ASSERT_RESULT(r, idn_prohibited);
-
- r = idn_encodename(IDN_ASCCHECK, "n ame", to, sizeof(to));
- ASSERT_RESULT(r, idn_prohibited);
-}
-
-//# TESTCASE
-// title: lencheck by encodename()
-// group: generic-conversion
-{
- r = idn_encodename(IDN_LENCHECK,
- "123456789-123456789-123456789-123456789-"
- "123456789-123456789-123", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
-
- r = idn_encodename(IDN_LENCHECK,
- "123456789-123456789-123456789-123456789-"
- "123456789-123456789-1234", to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_length);
-
- r = idn_encodename(IDN_LENCHECK, "a..b", to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_length);
-}
-
-//# TESTCASE
-// title: rtcheck non-prohchecked label by decodename()
-// group: generic-conversion
-{
- /* "xn--6ue" -> "U+1680" (prohibited character) */
- r = idn_decodename(IDN_RTCHECK, "xn--6ue", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "xn--6ue");
-}
-
-//# TESTCASE
-// title: rtcheck non-unaschecked label by decodename()
-// group: generic-conversion
-{
- /* "xn--6la" -> "U+0221" (unassigned codepoint) */
- r = idn_decodename(IDN_IDNCONV | IDN_RTCHECK | IDN_UNASCHECK,
- "xn--6la", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "xn--6la");
-}
-
-//# TESTCASE
-// title: rtcheck non-ascchecked label by decodename()
-// group: generic-conversion
-{
- /* "xn----x7t" -> "- U+3042" */
- r = idn_decodename(IDN_IDNCONV | IDN_RTCHECK | IDN_ASCCHECK,
- "xn----x7t", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "xn----x7t");
-
- /* "xn----w7t" -> "U+3042 -" */
- r = idn_decodename(IDN_IDNCONV | IDN_RTCHECK | IDN_ASCCHECK,
- "xn----w7t", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "xn----w7t");
-}
-
-//# TESTCASE
-// title: rtcheck non-lenchecked label by decodename()
-// group: generic-conversion
-{
- /* `s1' has 63 characters */
- const char *s1 =
- "xn--l8jaa5522a8sj38bzugvvblo3y90fjzgvxlmxscifws3d43odzaq6aj340b";
-
- const char *s1rev =
- "<U+9752><U+68EE><U+5CA9><U+624B><U+5BAE><U+57CE><U+79CB><U+7530>"
- "<U+5C71><U+5F62><U+798F><U+5CF6><U+6771><U+4EAC><U+795E><U+5948>"
- "<U+5DDD><U+3042><U+3042><U+3042>";
-
- /* `s2' has 64 characters */
- const char *s2 =
- "xn--a-w7ta6522a8sj38bzugvvblo3y90fjzgvxlmxscifws3d43odzaq6aj340b";
-
- /* `s3' has an empty label */
- const char *s3 = "a..b";
-
- r = idn_decodename(IDN_IDNCONV | IDN_RTCHECK, s1, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, s1rev);
-
- r = idn_decodename(IDN_IDNCONV | IDN_RTCHECK, s2, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, s2);
-
- r = idn_decodename(IDN_IDNCONV | IDN_RTCHECK, s3, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, s3);
-}
-
-//# TESTCASE
-// title: rtcheck non-prohchecked label by decodename2()
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- /* "xn--6ue" -> "U+1680" (prohibited character) */
- r = idn_decodename2(IDN_RTCHECK, "xn--6ue", to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "xn--6ue");
-#endif
-}
-
-//# TESTCASE
-// title: rtcheck non-unaschecked label by decodename2()
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- /* "xn--6la" -> "U+0221" (unassigned codepoint) */
- r = idn_decodename2(IDN_IDNCONV | IDN_RTCHECK | IDN_UNASCHECK,
- "xn--6la", to, sizeof(to), EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "xn--6la");
-#endif
-}
-
-//# TESTCASE
-// title: rtcheck non-ascchecked label by decodename2()
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- /* "xn----x7t" -> "- U+3042" */
- r = idn_decodename2(IDN_IDNCONV | IDN_RTCHECK | IDN_ASCCHECK,
- "xn----x7t", to, sizeof(to), EUCJP_ENCODING_NAME);
-
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "xn----x7t");
-
- /* "xn----w7t" -> "U+3042 -" */
- r = idn_decodename2(IDN_IDNCONV | IDN_RTCHECK | IDN_ASCCHECK,
- "xn----w7t", to, sizeof(to), EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "xn----w7t");
-#endif
-}
-
-//# TESTCASE
-// title: rtcheck non-lenchecked label by decodename2()
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- /* `s1' has 63 characters */
- const char *s1 =
- "xn--l8jaa5522a8sj38bzugvvblo3y90fjzgvxlmxscifws3d43odzaq6aj340b";
-
- const char *s1rev =
- "<U+9752><U+68EE><U+5CA9><U+624B><U+5BAE><U+57CE><U+79CB><U+7530>"
- "<U+5C71><U+5F62><U+798F><U+5CF6><U+6771><U+4EAC><U+795E><U+5948>"
- "<U+5DDD><U+3042><U+3042><U+3042>";
-
- /* `s2' has 64 characters */
- const char *s2 =
- "xn--a-w7ta6522a8sj38bzugvvblo3y90fjzgvxlmxscifws3d43odzaq6aj340b";
-
- /* `s3' has an empty label */
- const char *s3 = "a..b";
-
- r = idn_decodename2(IDN_IDNCONV | IDN_RTCHECK, s1, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, s1rev);
-
- r = idn_decodename2(IDN_IDNCONV | IDN_RTCHECK, s2, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, s2);
-
- r = idn_decodename(IDN_IDNCONV | IDN_RTCHECK, s3, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, s3);
-#endif
-}
-
-//# TESTCASE
-// title: pass broken string as `from' to encodename()
-// group: generic-conversion quiet
-{
- /* "\xe3\x21" is not valid UTF-8 string */
- r = idn_encodename(IDN_ENCODE_APP, "\xe3\x21", to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_encoding);
-}
-
-//# TESTCASE
-// title: pass broken string as `from' to decodename()
-// group: generic-conversion quiet
-{
- /* "\xe3\x21" is not valid UTF-8 string */
- r = idn_decodename(IDN_DECODE_APP, "\xe3\x21", to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_encoding);
-}
-
-//# TESTCASE
-// title: pass broken string as `from' to decodename2()
-// group: generic-conversion quiet
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- /* "\xa4\x21" is not valid EUC-JP string */
- r = idn_decodename2(IDN_DECODE_APP, "\xa4\x21", to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_invalid_encoding);
-#endif
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/checker.tsy b/contrib/idn/idnkit-1.0-src/lib/tests/checker.tsy
deleted file mode 100644
index 13a300ce..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/checker.tsy
+++ /dev/null
@@ -1,610 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: checker.tsy,v 1.1 2003/06/04 00:26:51 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <idn/checker.h>
-#include <idn/log.h>
-#include <idn/ucs4.h>
-#include "testutil.h"
-
-#define SIZEOFUCS4(x) (sizeof(x) / sizeof(unsigned long))
-
-#define UCS4_NAME_STR "U+304C" /* hiragana letter ga */
-#define UCS4_NAME 0x304C
-
-#define BUF_SIZE 128
-#define ARRAY_SIZE 9
-
-#define CONF_FILENAME "test.map"
-
-#define LINEBUF_SIZE 2001
-
-/*
- * Sample strings for `from' argument of normalize(),
- * and its expected outputs.
- */
-const unsigned long from[4] = {
- UCS4_NAME,
- 0x00A0, /* no-break space: prohibited character */
- 0x0221, /* unassigned character */
- 0x0000
-};
-
-
-#define FROM_UCS4NAME_OFFSET 0
-#define FROM_PROH_OFFSET 1
-#define FROM_UNAS_OFFSET 2
-
-const unsigned long from2[4] = {
- UCS4_NAME,
- 0x0221, /* unassigned character */
- 0x00A0, /* no-break space: prohibited character */
- 0x0000
-};
-
-#define FROM2_UCS4NAME_OFFSET 0
-#define FROM2_PROH_OFFSET 2
-#define FROM2_UNAS_OFFSET 1
-
-static const unsigned long bidi_from[4] = {
- 0x05BE, /* hebrew punctuation maqaf */
- 0x0041, /* latin capital letter a */
- 0xFEFC, /* arabic ligature lam with alef final form */
- 0x0000
-};
-#define BIDIFROM_OFFSET 1
-
-idn_result_t
-test_createproc(const char *parameter, void **ctxp)
-{
- return (idn_success);
-}
-
-void
-test_destroyproc(void *ctx)
-{
-}
-
-#define FOUNDPTR_OFFSET 2
-idn_result_t
-test_lookupproc(void *ctx, const unsigned long *ucs4,
- const unsigned long **found)
-{
- *found = ucs4 + FOUNDPTR_OFFSET;
- return (idn_success);
-}
-
-//--------------------------------------------------------------------
-// Setups and Teardowns.
-//--------------------------------------------------------------------
-
-//# SETUP
-// group: generic
-//--
-// Initialize the module and create context.
-{
- idn_result_t r;
- idn_checker_t ctx = NULL;
- char name[BUF_SIZE];
-
- r = idn_checker_initialize();
- ASSERT_RESULT(r, idn_success);
- r = idn_checker_create(&ctx);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TEARDOWN
-// group: generic
-//--
-// Destroy context.
-{
- if (ctx != NULL)
- idn_checker_destroy(ctx);
-}
-
-//# SETUP
-// group: lookup
-//--
-// Initialize the module and create context.
-{
- idn_result_t r;
- idn_checker_t ctx = NULL;
- char name[BUF_SIZE];
- const unsigned long *ptr;
-
- r = idn_checker_initialize();
- ASSERT_RESULT(r, idn_success);
- r = idn_checker_create(&ctx);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TEARDOWN
-// group: lookup
-//--
-// Destroy context.
-{
- if (ctx != NULL)
- idn_checker_destroy(ctx);
-}
-
-//# SETUP
-// group: addall
-//--
-// Initialize the module and create context.
-{
- idn_result_t r;
- idn_checker_t ctx = NULL;
- char *names[ARRAY_SIZE];
- int i;
- const unsigned long *ptr;
-
- for (i = 0; i < ARRAY_SIZE; i++) {
- names[i] = malloc(BUF_SIZE);
- if (names[i] == NULL) {
- ASSERT("malloc failed\n");
- }
- }
-
- r = idn_checker_initialize();
- ASSERT_RESULT(r, idn_success);
- r = idn_checker_create(&ctx);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TEARDOWN
-// group: addall
-//--
-// Destroy context and free some blocks.
-{
- if (ctx != NULL)
- idn_checker_destroy(ctx);
- for (i = 0; i < ARRAY_SIZE; i++) {
- free(names[i]);
- }
-}
-
-//# SETUP
-// group: quiet
-//--
-// Set log level to `fatal' to supress log messages.
-{
- int saved_log_level;
-
- saved_log_level = idn_log_getlevel();
- idn_log_setlevel(idn_log_level_fatal);
-}
-
-//# TEARDOWN
-// group: quiet
-//--
-// Restore log level.
-{
- idn_log_setlevel(saved_log_level);
-}
-
-//--------------------------------------------------------------------
-// Testcases.
-//--------------------------------------------------------------------
-
-//# TESTCASE
-// title: idn_checker_add() - boundary condition
-// group: generic quiet
-{
- r = idn_checker_add(ctx, "");
- ASSERT_RESULT(r, idn_invalid_name);
-}
-
-//# TESTCASE
-// title: idn_checker_add() - builtin schemes, prohibit
-// group: generic quiet
-{
- sprintf(name, "%s%s", IDN_CHECKER_PROHIBIT_PREFIX, "RFC3491");
- r = idn_checker_add(ctx, name);
- ASSERT_RESULT(r, idn_success);
-
- sprintf(name, "%s%s", IDN_CHECKER_PROHIBIT_PREFIX, "nameprep-01");
- r = idn_checker_add(ctx, name);
- ASSERT_RESULT(r, idn_invalid_name);
-}
-
-//# TESTCASE
-// title: idn_checker_add() - builtin schemes, unassigned
-// group: generic quiet
-{
- sprintf(name, "%s%s", IDN_CHECKER_UNASSIGNED_PREFIX, "RFC3491");
- r = idn_checker_add(ctx, name);
- ASSERT_RESULT(r, idn_success);
-
- sprintf(name, "%s%s", IDN_CHECKER_UNASSIGNED_PREFIX, "nameprep-01");
- r = idn_checker_add(ctx, name);
- ASSERT_RESULT(r, idn_invalid_name);
-}
-
-//# TESTCASE
-// title: idn_checker_add() - builtin schemes, bidi
-// group: generic quiet
-{
- sprintf(name, "%s%s", IDN_CHECKER_BIDI_PREFIX, "RFC3491");
- r = idn_checker_add(ctx, name);
- ASSERT_RESULT(r, idn_success);
-
- sprintf(name, "%s%s", IDN_CHECKER_BIDI_PREFIX, "nameprep-01");
- r = idn_checker_add(ctx, name);
- ASSERT_RESULT(r, idn_invalid_name);
-}
-
-//# TESTCASE
-// title: idn_checker_add() - file - boundary condition
-// group: generic quiet
-{
- sprintf(name, "%sfileset:%s", IDN_CHECKER_UNASSIGNED_PREFIX, "");
- r = idn_checker_add(ctx, name);
- ASSERT_RESULT(r, idn_nofile);
- sprintf(name, "%sfileset:%s", IDN_CHECKER_PROHIBIT_PREFIX, "");
- r = idn_checker_add(ctx, name);
- ASSERT_RESULT(r, idn_nofile);
- sprintf(name, "%sfileset:%s", IDN_CHECKER_BIDI_PREFIX, "");
- r = idn_checker_add(ctx, name);
- ASSERT_RESULT(r, idn_invalid_name);
-}
-
-//# TESTCASE
-// title: idn_checker_add() - file - long line
-// group: generic quiet
-{
- char line[LINEBUF_SIZE];
- const char *first_entry = "304C;";
- const char *other_entry = " 304D";
- int i;
- int len;
-
- memcpy(line, first_entry, strlen(first_entry));
- len = strlen(other_entry);
- for (i = len; i < LINEBUF_SIZE - len; i += len) {
- memcpy(line + i, other_entry, len);
- }
- *(line + i) = '\0';
-
- create_conf_file(CONF_FILENAME, 0, line, NULL);
- sprintf(name, "%sfileset:%s", IDN_CHECKER_UNASSIGNED_PREFIX,
- CONF_FILENAME);
- r = idn_checker_add(ctx, name);
- ASSERT_RESULT(r, idn_invalid_syntax);
- sprintf(name, "%sfileset:%s", IDN_CHECKER_PROHIBIT_PREFIX,
- CONF_FILENAME);
- r = idn_checker_add(ctx, name);
- ASSERT_RESULT(r, idn_invalid_syntax);
-}
-
-//# TESTCASE
-// title: idn_checker_add() - file, prohibit
-// group: lookup
-{
- create_conf_file(CONF_FILENAME, 0,
- UCS4_NAME_STR,
- NULL);
- sprintf(name, "%sfileset:%s", IDN_CHECKER_PROHIBIT_PREFIX,
- CONF_FILENAME);
- r = idn_checker_add(ctx, name);
- ASSERT_RESULT(r, idn_success);
- r = idn_checker_lookup(ctx, from, &ptr);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(ptr, from + FROM_UCS4NAME_OFFSET);
- r = idn_checker_lookup(ctx, from2, &ptr);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(ptr, from2 + FROM2_UCS4NAME_OFFSET);
-}
-
-//# TESTCASE
-// title: idn_checker_add() - file, unassigned
-// group: lookup
-{
- create_conf_file(CONF_FILENAME, 0,
- UCS4_NAME_STR,
- NULL);
- sprintf(name, "%sfileset:%s", IDN_CHECKER_UNASSIGNED_PREFIX,
- CONF_FILENAME);
- r = idn_checker_add(ctx, name);
- ASSERT_RESULT(r, idn_success);
- r = idn_checker_lookup(ctx, from, &ptr);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(ptr, from + FROM_UCS4NAME_OFFSET);
- r = idn_checker_lookup(ctx, from2, &ptr);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(ptr, from2 + FROM2_UCS4NAME_OFFSET);
-}
-
-//# TESTCASE
-// title: idn_checker_add() - file, bidi
-// group: lookup quiet
-{
- create_conf_file(CONF_FILENAME, 0,
- UCS4_NAME_STR,
- NULL);
- sprintf(name, "%sfileset:%s", IDN_CHECKER_BIDI_PREFIX,
- CONF_FILENAME);
- r = idn_checker_add(ctx, name);
- ASSERT_RESULT(r, idn_invalid_name);
-}
-
-//# TESTCASE
-// title: idn_checker_addall() - boundary condition - scheme name
-// group: addall quiet
-{
- sprintf(names[0], "%s%s", IDN_CHECKER_PROHIBIT_PREFIX, "RFC3491");
- sprintf(names[1], "%s%s", IDN_CHECKER_UNASSIGNED_PREFIX, "RFC3491");
- sprintf(names[2], "%s%s", IDN_CHECKER_BIDI_PREFIX, "RFC3491");
- sprintf(names[3], "%s%s", IDN_CHECKER_BIDI_PREFIX, "");
- r = idn_checker_addall(ctx, (const char **)names, 4);
- ASSERT_RESULT(r, idn_invalid_name);
-}
-
-//# TESTCASE
-// title: idn_checker_addall() - boundary condition - nschemes = 0
-// group: addall quiet
-{
- sprintf(names[0], "%s%s", IDN_CHECKER_PROHIBIT_PREFIX, "nameprep-01");
- sprintf(names[1], "%s%s", IDN_CHECKER_UNASSIGNED_PREFIX, "nameprep-01");
- sprintf(names[2], "%s%s", IDN_CHECKER_BIDI_PREFIX, "");
- sprintf(names[3], "%s%s", IDN_CHECKER_BIDI_PREFIX, "nameprep-01");
- r = idn_checker_addall(ctx, (const char **)names, 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_checker_lookup(ctx, from, &ptr);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(ptr, NULL);
-}
-
-//# TESTCASE
-// title: idn_checker_addall() - add a lot of schemes #1
-// group: addall
-{
- sprintf(names[0], "%s%s", IDN_CHECKER_PROHIBIT_PREFIX, "RFC3491");
- sprintf(names[1], "%s%s", IDN_CHECKER_UNASSIGNED_PREFIX, "RFC3491");
- sprintf(names[2], "%s%s", IDN_CHECKER_BIDI_PREFIX, "RFC3491");
- sprintf(names[3], "%s%s", IDN_CHECKER_PROHIBIT_PREFIX, "RFC3491");
- sprintf(names[4], "%s%s", IDN_CHECKER_UNASSIGNED_PREFIX, "RFC3491");
- sprintf(names[5], "%s%s", IDN_CHECKER_BIDI_PREFIX, "RFC3491");
- sprintf(names[6], "%s%s", IDN_CHECKER_PROHIBIT_PREFIX, "RFC3491");
- sprintf(names[7], "%s%s", IDN_CHECKER_UNASSIGNED_PREFIX, "RFC3491");
- sprintf(names[8], "%s%s", IDN_CHECKER_BIDI_PREFIX, "RFC3491");
-
- r = idn_checker_addall(ctx, (const char **)names, 9);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_checker_lookup(ctx, from, &ptr);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(ptr, from + FROM_PROH_OFFSET);
-
- r = idn_checker_lookup(ctx, from2, &ptr);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(ptr, from2 + FROM2_PROH_OFFSET);
-
- r = idn_checker_lookup(ctx, bidi_from, &ptr);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(ptr, bidi_from + BIDIFROM_OFFSET);
-}
-
-//# TESTCASE
-// title: idn_checker_addall() - add a lot of schemes #2
-// group: addall
-{
- sprintf(names[0], "%s%s", IDN_CHECKER_BIDI_PREFIX, "RFC3491");
- sprintf(names[1], "%s%s", IDN_CHECKER_UNASSIGNED_PREFIX, "RFC3491");
- sprintf(names[2], "%s%s", IDN_CHECKER_PROHIBIT_PREFIX, "RFC3491");
- sprintf(names[3], "%s%s", IDN_CHECKER_BIDI_PREFIX, "RFC3491");
- sprintf(names[4], "%s%s", IDN_CHECKER_UNASSIGNED_PREFIX, "RFC3491");
- sprintf(names[5], "%s%s", IDN_CHECKER_PROHIBIT_PREFIX, "RFC3491");
- sprintf(names[6], "%s%s", IDN_CHECKER_BIDI_PREFIX, "RFC3491");
- sprintf(names[7], "%s%s", IDN_CHECKER_UNASSIGNED_PREFIX, "RFC3491");
- sprintf(names[8], "%s%s", IDN_CHECKER_PROHIBIT_PREFIX, "RFC3491");
-
- r = idn_checker_addall(ctx, (const char **)names, 9);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_checker_lookup(ctx, from, &ptr);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(ptr, from + FROM_UNAS_OFFSET);
-
- r = idn_checker_lookup(ctx, from2, &ptr);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(ptr, from2 + FROM2_UNAS_OFFSET);
-
- r = idn_checker_lookup(ctx, bidi_from, &ptr);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(ptr, bidi_from + BIDIFROM_OFFSET);
-}
-
-//# TESTCASE
-// title: idn_checker_addall() - add same scheme repetedly
-// group: addall
-{
- int i;
-
- sprintf(names[0], "%s%s", IDN_CHECKER_PROHIBIT_PREFIX, "RFC3491");
- for (i = 1; i < ARRAY_SIZE; i++) {
- strcpy(names[i], names[0]);
- }
- r = idn_checker_addall(ctx, (const char **)names, ARRAY_SIZE);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_checker_lookup(ctx, from, &ptr);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(ptr, from + FROM_PROH_OFFSET);
-
- r = idn_checker_lookup(ctx, from2, &ptr);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(ptr, from2 + FROM2_PROH_OFFSET);
-}
-
-//# TESTCASE
-// title: idn_checker_lookup() - builtin schemes - RFC3491 prohibit
-// group: lookup
-{
- sprintf(name, "%s%s", IDN_CHECKER_PROHIBIT_PREFIX, "RFC3491");
-
- r = idn_checker_add(ctx, name);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_checker_lookup(ctx, from, &ptr);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(ptr, from + FROM_PROH_OFFSET);
-
- r = idn_checker_lookup(ctx, from2, &ptr);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(ptr, from2 + FROM2_PROH_OFFSET);
-}
-
-//# TESTCASE
-// title: idn_checker_lookup() - builtin schemes - RFC3491 unassigned
-// group: lookup
-{
- sprintf(name, "%s%s", IDN_CHECKER_UNASSIGNED_PREFIX, "RFC3491");
-
- r = idn_checker_add(ctx, name);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_checker_lookup(ctx, from, &ptr);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(ptr, from + FROM_UNAS_OFFSET);
-
- r = idn_checker_lookup(ctx, from2, &ptr);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(ptr, from2 + FROM2_UNAS_OFFSET);
-}
-
-//# TESTCASE
-// title: idn_checker_lookup() - builtin schemes - RFC3491 bidi
-// group: lookup
-{
- sprintf(name, "%s%s", IDN_CHECKER_BIDI_PREFIX, "RFC3491");
-
- r = idn_checker_add(ctx, name);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_checker_lookup(ctx, bidi_from, &ptr);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(ptr, bidi_from + BIDIFROM_OFFSET);
-
- r = idn_checker_lookup(ctx, from, &ptr);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(ptr, NULL);
-
- r = idn_checker_lookup(ctx, from2, &ptr);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(ptr, NULL);
-}
-
-//# TESTCASE
-// title: idn_checker_lookup() - context without procedure
-// group: lookup
-{
- r = idn_checker_lookup(ctx, from, &ptr);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(ptr, NULL);
-}
-
-//# TESTCASE
-// title: idn_checker_lookup() - string in ascii
-// group: lookup
-{
- char *ascii_str = "test";
- unsigned long ucs4_str[5];
-
- r = idn_ucs4_utf8toucs4(ascii_str, ucs4_str, SIZEOFUCS4(ucs4_str));
-
- sprintf(name, "%s%s", IDN_CHECKER_PROHIBIT_PREFIX, "RFC3491");
- r = idn_checker_add(ctx, name);
- ASSERT_RESULT(r, idn_success);
- sprintf(name, "%s%s", IDN_CHECKER_UNASSIGNED_PREFIX, "RFC3491");
- r = idn_checker_add(ctx, name);
- ASSERT_RESULT(r, idn_success);
- sprintf(name, "%s%s", IDN_CHECKER_BIDI_PREFIX, "RFC3491");
- r = idn_checker_add(ctx, name);
- ASSERT_RESULT(r, idn_success);
- r = idn_checker_lookup(ctx, ucs4_str, &ptr);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(ptr, NULL);
-}
-
-//# TESTCASE
-// title: idn_checker_destroy(), idn_checker_incrref()
-// group:
-{
- idn_result_t r;
- idn_checker_t ctx = NULL;
-
- r = idn_checker_initialize();
- ASSERT_RESULT(r, idn_success);
- r = idn_checker_create(&ctx);
- ASSERT_RESULT(r, idn_success);
- idn_checker_incrref(ctx);
- idn_checker_destroy(ctx);
- idn_checker_destroy(ctx);
-}
-
-//# TESTCASE
-// title: idn_checker_register()
-// group: generic
-{
- const unsigned long *ptr = NULL;
-
- r = idn_checker_register("test",
- test_createproc,
- test_destroyproc,
- test_lookupproc);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_checker_add(ctx, "test");
- ASSERT_RESULT(r, idn_success);
-
- r = idn_checker_lookup(ctx, from, &ptr);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(ptr, from + FOUNDPTR_OFFSET);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/codeset.h b/contrib/idn/idnkit-1.0-src/lib/tests/codeset.h
deleted file mode 100644
index 263a7ea3..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/codeset.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* $Id: codeset.h,v 1.1 2003/06/04 00:26:51 marka Exp $ */
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef CODESET_H
-#define CODESET_H
-
-/*
- * Character encoding name that iconv() recognizes as Japanese EUC.
- *
- * Please edit the cpp macro definition if iconv() on the system doesn't
- * recognize "EUC-JP".
- *
- * NOTE:
- * Konstantin Chuguev's iconv-2.0 doesn't accept "eucJP", but "euc-jp".
- */
-#define EUCJP_ENCODING_NAME "eucJP"
-
-
-/*
- * Character encoding name that iconv() recognizes as Japanese Shift JIS.
- *
- * Please edit the cpp macro definition if iconv() on the system doesn't
- * recognize "SJIS".
- *
- * NOTE:
- * Konstantin Chuguev's iconv-2.0 doesn't accept "SJIS", but "Shift_JIS".
- */
-#define SJIS_ENCODING_NAME "SJIS"
-
-#endif /* CODESET_H */
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/converter.tsy b/contrib/idn/idnkit-1.0-src/lib/tests/converter.tsy
deleted file mode 100644
index bbefc38d..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/converter.tsy
+++ /dev/null
@@ -1,822 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: converter.tsy,v 1.1 2003/06/04 00:26:53 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <idn/converter.h>
-#include <idn/log.h>
-
-#include "codeset.h"
-#include "testutil.h"
-
-
-#ifndef IDN_PUNYCODE_ENCODING_NAME
-#define IDN_PUNYCODE_ENCODING_NAME "Punycode"
-#endif
-
-#ifndef IDN_UTF8_ENCODING_NAME
-#define IDN_UTF8_ENCODING_NAME "UTF-8" /* by IANA */
-#endif
-
-#ifndef EUCJP_ENCODING_NAME
-#define EUCJP_ENCODING_NAME "eucJP"
-#endif
-
-#ifndef SJIS_ENCODING_NAME
-#define SJIS_ENCODING_NAME "SJIS"
-#endif
-
-#define CONF_FILENAME "testalias.conf"
-#define LINEBUF_SIZE 2001
-
-#define SIZEOFUCS4(x) (sizeof(x) / sizeof(unsigned long))
-
-/*
- * U+1820: mongorian letter a
- */
-#define UCS4_INVALID_NAME_FOR_EUCJP 0x1820
-
-/*
- * A4AC: hiragana letter GA (in EUC-JP)
- */
-#define EUCJP_NAME "\xa4\xac"
-#define EUCJP_NAME_SIZE 3
-
-/*
- * U+304C: hiragana letter GA
- */
-#define UCS4_NAME 0x304C
-
-/*
- * Conversion result of "U+304C"
- */
-#define PUNYCODE_NAME "xn--v8j"
-#define PUNYCODE_NAME_SIZE 8
-
-#define BUF_SIZE 128
-
-idn_result_t
-idn_test_encode(idn_converter_t ctx, void *privdata,
- const unsigned long *from, char *to, size_t tolen)
-{
- idn_result_t r;
-
- if (tolen >= EUCJP_NAME_SIZE) {
- strcpy(to, EUCJP_NAME);
- r = idn_success;
- } else {
- r = idn_buffer_overflow;
- }
- return (r);
-
-}
-
-idn_result_t
-idn_test_decode(idn_converter_t ctx, void *privdata,
- const char *from, unsigned long *to, size_t tolen)
-{
- idn_result_t r;
-
- if (tolen >= 2) {
- to[0] = UCS4_NAME;
- to[1] = 0x0000;
- r = idn_success;
- } else {
- r = idn_buffer_overflow;
- }
- return (r);
-}
-
-
-//--------------------------------------------------------------------
-// Setups and Teardowns.
-//--------------------------------------------------------------------
-
-//# SETUP
-// group: noinit
-//--
-// Do nothing
-{
- idn_result_t r;
-}
-
-//# SETUP
-// group: generic
-//--
-// Initialize the module.
-{
- idn_result_t r;
- idn_converter_t ctx = NULL;
- const char *name;
-
- r = idn_converter_initialize();
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_resetalias();
- ASSERT_RESULT(r, idn_success);
-}
-
-//# SETUP
-// group: localencoding
-//--
-// Initialize the module and load alias file.
-{
- idn_result_t r;
- idn_converter_t ctx = NULL;
- const char *name;
-
- r = idn_converter_initialize();
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_resetalias();
- ASSERT_RESULT(r, idn_success);
- create_conf_file(CONF_FILENAME, 0,
- "*.KOI8-R KOI8-R",
- "*.ISO_8859-1 ISO-8859-1",
- "*.ISO_8859-2 ISO-8859-1",
- "*.UTF-8 UTF-8",
- "ja_JP.EUC eucJP",
- "japanese eucJP",
- NULL);
- r = idn_converter_aliasfile(CONF_FILENAME);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TEARDOWN
-// group: localencoding
-//--
-// reset alias information.
-{
- idn_converter_resetalias();
-}
-
-//# SETUP
-// group: conversion
-//--
-// Initialize the module and create contexts.
-{
- idn_result_t r;
- idn_converter_t punycode_ctx = NULL;
- idn_converter_t utf8_ctx = NULL;
-#ifndef WITHOUT_ICONV
- idn_converter_t eucjp_ctx = NULL;
-#endif
-
- r = idn_converter_initialize();
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_create(IDN_PUNYCODE_ENCODING_NAME, &punycode_ctx,
- 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_create(IDN_UTF8_ENCODING_NAME, &utf8_ctx,
- IDN_CONVERTER_DELAYEDOPEN);
- ASSERT_RESULT(r, idn_success);
-#ifndef WITHOUT_ICONV
- r = idn_converter_create(EUCJP_ENCODING_NAME, &eucjp_ctx,
- IDN_CONVERTER_DELAYEDOPEN);
- ASSERT_RESULT(r, idn_success);
-#endif
-}
-
-//# TEARDOWN
-// group: conversion
-//--
-// Destroy contexts.
-{
- if (punycode_ctx != NULL) {
- idn_converter_destroy(punycode_ctx);
- }
- if (utf8_ctx != NULL) {
- idn_converter_destroy(utf8_ctx);
- }
-#ifndef WITHOUT_ICONV
- if (eucjp_ctx != NULL) {
- idn_converter_destroy(eucjp_ctx);
- }
-#endif
-}
-
-//# SETUP
-// group: quiet
-//--
-// Set log level to `fatal' to supress log messages.
-{
- int saved_log_level;
-
- saved_log_level = idn_log_getlevel();
- idn_log_setlevel(idn_log_level_fatal);
-}
-
-//# TEARDOWN
-// group: quiet
-//--
-// Restore log level.
-{
- idn_log_setlevel(saved_log_level);
-}
-
-//--------------------------------------------------------------------
-// Testcases.
-//--------------------------------------------------------------------
-
-//# TESTCASE
-// title: idn_converter_addalias() test - without initialization
-// group: noinit quiet
-{
- r = idn_converter_addalias("a", "b", 0);
- ASSERT_RESULT(r, idn_failure);
-}
-
-//# TESTCASE
-// title: idn_converter_aliasfile() - without initialization
-// group: noinit quiet
-{
- r = idn_converter_aliasfile("a");
- ASSERT_RESULT(r, idn_failure);
-}
-
-//# TESTCASE
-// title: idn_converter_resetalias() - without initialization
-// group: noinit quiet
-{
- r = idn_converter_resetalias();
- ASSERT_RESULT(r, idn_failure);
-}
-
-//# TESTCASE
-// title: idn_converter_getrealname() - without initialization
-// group: noinit quiet
-{
- const char *name;
-
- name = idn_converter_getrealname("test");
- ASSERT_STRING(name, "test");
-}
-
-//# TESTCASE
-// title: idn_converter_create()
-// group: generic quiet
-{
-#ifdef WITHOUT_ICONV
- r = idn_converter_addalias("*pc", "Punycode", 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("*ej", EUCJP_ENCODING_NAME, 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("*sj", SJIS_ENCODING_NAME, 0);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_converter_create("abcsj", &ctx, 0);
- ASSERT_RESULT(r, idn_invalid_name);
-
- r = idn_converter_create("notresolved", &ctx, 0);
- ASSERT_RESULT(r, idn_invalid_name);
- r = idn_converter_create("notresolved", &ctx,
- IDN_CONVERTER_DELAYEDOPEN);
- ASSERT_RESULT(r, idn_invalid_name);
-#else
- r = idn_converter_addalias("*pc", IDN_PUNYCODE_ENCODING_NAME, 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("*ej", EUCJP_ENCODING_NAME, 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("*sj", SJIS_ENCODING_NAME, 0);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_converter_create("abcsj", &ctx, 0);
- ASSERT_RESULT(r, idn_success);
- idn_converter_destroy(ctx);
-
- r = idn_converter_create("notresolved", &ctx, 0);
- ASSERT_RESULT(r, idn_invalid_name);
- r = idn_converter_create("notresolved", &ctx,
- IDN_CONVERTER_DELAYEDOPEN);
- ASSERT_RESULT(r, idn_success);
- {
- unsigned long ucs4_to[BUF_SIZE];
-
- r = idn_converter_convtoucs4(ctx, "a", ucs4_to, BUF_SIZE);
- ASSERT_RESULT(r, idn_invalid_name);
- idn_converter_destroy(ctx);
- }
-#endif /* WITHOUT_ICONV */
-}
-
-//# TESTCASE
-// title: idn_converter_addalias() - #1
-// group: generic
-{
- r = idn_converter_addalias("test", "result-a", 0);
- ASSERT_RESULT(r, idn_success);
- name = idn_converter_getrealname("test");
- ASSERT_STRING(name, "result-a");
-}
-
-//# TESTCASE
-// title: idn_converter_addalias() - #2
-// group: generic
-{
- r = idn_converter_addalias("test", "result-b", 1);
- ASSERT_RESULT(r, idn_success);
- name = idn_converter_getrealname("test");
- ASSERT_STRING(name, "result-b");
-}
-
-//# TESTCASE
-// title: idn_converter_addalias() - #3
-// group: generic
-{
- r = idn_converter_addalias("test", "result-a", 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-b", 0);
- ASSERT_RESULT(r, idn_success);
- name = idn_converter_getrealname("test");
- ASSERT_STRING(name, "result-a");
-}
-
-//# TESTCASE
-// title: idn_converter_addalias() - #4
-// group: generic
-{
- r = idn_converter_addalias("test", "result-a", 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-b", 1);
- ASSERT_RESULT(r, idn_success);
- name = idn_converter_getrealname("test");
- ASSERT_STRING(name, "result-b");
-}
-
-//# TESTCASE
-// title: idn_converter_addalias() - #5
-// group: generic
-{
- r = idn_converter_addalias("test", "result-a", 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-b", 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-c", 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-d", 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-e", 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-f", 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-g", 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-h", 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-i", 0);
- ASSERT_RESULT(r, idn_success);
- name = idn_converter_getrealname("test");
- ASSERT_STRING(name, "result-a");
-}
-
-//# TESTCASE
-// title: idn_converter_addalias() - #6
-// group: generic
-{
- r = idn_converter_addalias("test", "result-a", 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-b", 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-c", 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-d", 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-e", 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-f", 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-g", 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-h", 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-i", 1);
- ASSERT_RESULT(r, idn_success);
- name = idn_converter_getrealname("test");
- ASSERT_STRING(name, "result-i");
-}
-
-//# TESTCASE
-// title: idn_converter_addalias() - null character
-// group: generic
-{
- r = idn_converter_addalias("", "result", 0);
- ASSERT_RESULT(r, idn_invalid_syntax);
- r = idn_converter_addalias("test", "", 0);
- ASSERT_RESULT(r, idn_invalid_syntax);
- r = idn_converter_addalias("", "", 0);
- ASSERT_RESULT(r, idn_invalid_syntax);
-}
-
-//# TESTCASE
-// title: idn_converter_resetalias() - no alias added
-// group: generic
-{
- r = idn_converter_resetalias();
- ASSERT_RESULT(r, idn_success);
- name = idn_converter_getrealname("test");
- ASSERT_STRING(name, "test");
-
-}
-
-//# TESTCASE
-// title: idn_converter_resetalias() - one alias added
-// group: generic
-{
- r = idn_converter_addalias("test", "result-a", 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_resetalias();
- ASSERT_RESULT(r, idn_success);
- name = idn_converter_getrealname("test");
- ASSERT_STRING(name, "test");
-
-}
-
-//# TESTCASE
-// title: idn_converter_resetalias() - many aliases added
-// group: generic
-{
- r = idn_converter_addalias("test", "result-a", 1);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-b", 1);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-c", 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-d", 1);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-e", 1);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-f", 1);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-g", 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-h", 0);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_addalias("test", "result-i", 1);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_resetalias();
- ASSERT_RESULT(r, idn_success);
- name = idn_converter_getrealname("test");
- ASSERT_STRING(name, "test");
-}
-
-//# TESTCASE
-// title: idn_converter_aliasfile() - boundary condition
-// group: generic quiet
-{
- r = idn_converter_aliasfile("");
- ASSERT_RESULT(r, idn_nofile);
-
- r = idn_converter_aliasfile("idnalias-not-found.conf");
- ASSERT_RESULT(r, idn_nofile);
-}
-
-//# TESTCASE
-// title: idn_converter_aliasfile() - long line
-// group: generic quiet
-{
- char line[LINEBUF_SIZE];
- const char *entry = "aaaaaaaaaa";
- int i;
- int len;
-
- len = strlen(entry);
- for (i = 0; i < LINEBUF_SIZE - len; i += len) {
- memcpy(line + i, entry, len);
- }
- *(line + (LINEBUF_SIZE / 2)) = ' ';
- *(line + i) = '\0';
- create_conf_file(CONF_FILENAME, 0, line, NULL);
- r = idn_converter_aliasfile(CONF_FILENAME);
- ASSERT_RESULT(r, idn_invalid_syntax);
-}
-
-//# TESTCASE
-// title: idn_converter_aliasfile() - no new line at end of file
-// group: generic quiet
-{
- create_conf_file(CONF_FILENAME, CONF_NO_EOF_NEWLINE,
- "*.ISO_8859-1 ISO-8859-1",
- "*.ISO_8859-2 ISO-8859-1",
- "*.SJIS Shift_JIS",
- "*.Shift_JIS Shift_JIS",
- "ja_JP.EUC eucJP",
- "japanese eucJP",
- NULL);
- r = idn_converter_aliasfile(CONF_FILENAME);
- ASSERT_RESULT(r, idn_success);
- name = idn_converter_getrealname("japanese");
- ASSERT_STRING(name, "eucJP");
-
-}
-
-//# TESTCASE
-// title: idn_converter_aliasfile() - invalid entries
-// group: generic quiet
-{
- create_conf_file(CONF_FILENAME, 0,
- "*.ISO_8859-1 ISO-8859-1",
- "*.ISO_8859-2 ISO-8859-1",
- "*.SJIS",
- "*.Shift_JIS",
- "ja_JP.EUC eucJP",
- "japanese eucJP",
- NULL);
- r = idn_converter_aliasfile(CONF_FILENAME);
- ASSERT_RESULT(r, idn_invalid_syntax);
-}
-
-//# TESTCASE
-// title: idn_converter_aliasfile() - more then two items in one line
-// group: generic quiet
-{
- create_conf_file(CONF_FILENAME, 0,
- "*.ISO_8859-1 ISO-8859-1",
- "*.ISO_8859-2 ISO-8859-1",
- "*.SJIS Shift_JIS ko_KR.EUC",
- "*.Shift_JIS Shift_JIS",
- "*.big5 Big5 *.big5 *.big5",
- "ja_JP.EUC eucJP",
- "japanese eucJP",
- NULL);
- r = idn_converter_aliasfile(CONF_FILENAME);
- ASSERT_RESULT(r, idn_success);
- name = idn_converter_getrealname("japanese");
- ASSERT_STRING(name, "eucJP");
-}
-
-//# TESTCASE
-// title: idn_converter_localencoding() - #1
-// group: localencoding
-{
- r = idn_converter_create("test.UTF-8", &ctx,
- IDN_CONVERTER_DELAYEDOPEN);
- ASSERT_RESULT(r, idn_success);
- name = idn_converter_localencoding(ctx);
- ASSERT_STRING(name, "UTF-8");
- idn_converter_destroy(ctx);
-}
-
-//# TESTCASE
-// title: idn_converter_localencoding() - #2
-// group: localencoding
-{
- r = idn_converter_create("test.KOI8-R", &ctx,
- IDN_CONVERTER_DELAYEDOPEN);
-#ifdef WITHOUT_ICONV
- ASSERT_RESULT(r, idn_invalid_name);
-#else
- ASSERT_RESULT(r, idn_success);
- name = idn_converter_localencoding(ctx);
- ASSERT_STRING(name, "KOI8-R");
- idn_converter_destroy(ctx);
-#endif
-}
-
-//# TESTCASE
-// title: idn_converter_localencoding() - #3
-// group: localencoding
-{
- r = idn_converter_create("unresolvedname", &ctx,
- IDN_CONVERTER_DELAYEDOPEN);
-#ifdef WITHOUT_ICONV
- ASSERT_RESULT(r, idn_invalid_name);
-#else
- ASSERT_RESULT(r, idn_success);
- name = idn_converter_localencoding(ctx);
- ASSERT_STRING(name, "unresolvedname");
- idn_converter_destroy(ctx);
-#endif
-}
-
-//# TESTCASE
-// title: idn_converter_encodingtype()
-// group: conversion
-{
- ASSERT_INT(idn_converter_encodingtype(punycode_ctx),
- IDN_ACE_STRICTCASE);
- ASSERT_INT(idn_converter_encodingtype(utf8_ctx),
- IDN_NONACE);
-#ifndef WITHOUT_ICONV
- ASSERT_INT(idn_converter_encodingtype(eucjp_ctx),
- IDN_NONACE);
-#endif
-}
-
-//# TESTCASE
-// title: idn_converter_isasciicompatible()
-// group: conversion
-{
- ASSERT_INT(idn_converter_isasciicompatible(punycode_ctx), 1);
- ASSERT_INT(idn_converter_isasciicompatible(utf8_ctx), 0);
-#ifndef WITHOUT_ICONV
- ASSERT_INT(idn_converter_isasciicompatible(eucjp_ctx), 0);
-#endif
-}
-
-//# TESTCASE
-// title: idn_converter_convfromucs4()
-// group: conversion quiet
-{
- unsigned long from_nullchar = 0x0000;
- unsigned long from[2] = { UCS4_NAME, 0x0000 };
- char to[1];
- char to_punycode[PUNYCODE_NAME_SIZE];
-#ifndef WITHOUT_ICONV
- char to_eucjp[EUCJP_NAME_SIZE];
-#endif
-
- r = idn_converter_convfromucs4(punycode_ctx, &from_nullchar, to, 0);
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- r = idn_converter_convfromucs4(punycode_ctx, &from_nullchar, to, 1);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "");
-
- r = idn_converter_convfromucs4(punycode_ctx, from, to_punycode, 0);
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- r = idn_converter_convfromucs4(punycode_ctx, from, to_punycode,
- PUNYCODE_NAME_SIZE - 1);
- ASSERT_RESULT(r, idn_buffer_overflow);
- r = idn_converter_convfromucs4(punycode_ctx, from, to_punycode,
- PUNYCODE_NAME_SIZE);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to_punycode, PUNYCODE_NAME);
-
-#ifndef WITHOUT_ICONV
- r = idn_converter_convfromucs4(eucjp_ctx, &from_nullchar, to, 0);
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- r = idn_converter_convfromucs4(eucjp_ctx, &from_nullchar, to, 1);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "");
-
- r = idn_converter_convfromucs4(eucjp_ctx, from, to_eucjp, 0);
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- r = idn_converter_convfromucs4(eucjp_ctx, from, to_eucjp,
- EUCJP_NAME_SIZE - 1);
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- r = idn_converter_convfromucs4(eucjp_ctx, from, to_eucjp,
- EUCJP_NAME_SIZE);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to_eucjp, EUCJP_NAME);
-
- from[0] = 0x80000000;
- r = idn_converter_convfromucs4(eucjp_ctx, from, to_eucjp,
- EUCJP_NAME_SIZE);
- ASSERT_RESULT(r, idn_invalid_encoding);
-
- from[0] = UCS4_INVALID_NAME_FOR_EUCJP;
- r = idn_converter_convfromucs4(eucjp_ctx, from, to_eucjp,
- EUCJP_NAME_SIZE);
- ASSERT_RESULT(r, idn_nomapping);
-#endif
-}
-
-//# TESTCASE
-// title: idn_converter_convtoucs4()
-// group: conversion
-{
- unsigned long to_nullchar = 0x0000;
- unsigned long to[1];
- unsigned long punycode_to[2];
-#ifndef WITHOUT_ICONV
- unsigned long eucjp_to[2];
-#endif
- unsigned long ucs4_name[2] = { UCS4_NAME, 0x0000 };
-
- r = idn_converter_convtoucs4(punycode_ctx, "", to, 0);
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- r = idn_converter_convtoucs4(punycode_ctx, "", to, 1);
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, &to_nullchar);
-
- r = idn_converter_convtoucs4(punycode_ctx, PUNYCODE_NAME,
- punycode_to, 0);
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- r = idn_converter_convtoucs4(punycode_ctx, PUNYCODE_NAME,
- punycode_to, 1);
- ASSERT_RESULT(r, idn_buffer_overflow);
- r = idn_converter_convtoucs4(punycode_ctx, PUNYCODE_NAME, punycode_to,
- 2);
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING_THRU(punycode_to, ucs4_name);
-
-#ifndef WITHOUT_ICONV
- r = idn_converter_convtoucs4(eucjp_ctx, "", to, 0);
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- r = idn_converter_convtoucs4(eucjp_ctx, "", to, 1);
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, &to_nullchar);
-
- r = idn_converter_convtoucs4(eucjp_ctx, EUCJP_NAME, eucjp_to, 0);
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- r = idn_converter_convtoucs4(eucjp_ctx, EUCJP_NAME, eucjp_to, 1);
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- r = idn_converter_convtoucs4(eucjp_ctx, EUCJP_NAME, eucjp_to, 2);
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, &to_nullchar);
-
- r = idn_converter_convtoucs4(eucjp_ctx, "\xFF\xFF", eucjp_to, 2);
- ASSERT_RESULT(r, idn_invalid_encoding);
-#endif
-}
-
-//# TESTCASE
-// title: idn_converter_destroy(), idn_converter_incrref()
-// group: generic
-{
- idn_converter_t ctx2;
-
- r = idn_converter_create(IDN_UTF8_ENCODING_NAME, &ctx, 0);
- ASSERT_RESULT(r, idn_success);
- idn_converter_destroy(ctx);
-
- r = idn_converter_create(IDN_UTF8_ENCODING_NAME, &ctx2, 0);
- ASSERT_RESULT(r, idn_success);
- idn_converter_incrref(ctx2);
- ASSERT_RESULT(r, idn_success);
- idn_converter_destroy(ctx2);
- idn_converter_destroy(ctx2);
-}
-
-//# TESTCASE
-// title: idn_converter_register()
-// group: generic
-{
- char eucjp_to[3];
- unsigned long ucs4_to[2];
- unsigned long ucs4_name[2] = { UCS4_NAME, 0x0000 };
-
- r = idn_converter_register("test",
- NULL,
- NULL,
- idn_test_encode,
- idn_test_decode,
- NULL,
- IDN_ACE_STRICTCASE);
- ASSERT_RESULT(r, idn_success);
- r = idn_converter_create("test", &ctx, 0);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_converter_convfromucs4(ctx, ucs4_name, eucjp_to, sizeof(eucjp_to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(eucjp_to, EUCJP_NAME);
-
- r = idn_converter_convtoucs4(ctx, "", ucs4_to, SIZEOFUCS4(ucs4_to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(ucs4_to, ucs4_name);
-
- idn_converter_destroy(ctx);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/delimitermap.tsy b/contrib/idn/idnkit-1.0-src/lib/tests/delimitermap.tsy
deleted file mode 100644
index 3189f6ff..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/delimitermap.tsy
+++ /dev/null
@@ -1,257 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: delimitermap.tsy,v 1.1 2003/06/04 00:26:53 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <idn/delimitermap.h>
-#include <idn/ucs4.h>
-#include <idn/log.h>
-#include "testutil.h"
-
-/*
- * Codepoions to test the add() function.
- */
-#define ADDITIONAL_DELIMITER0 0xe0
-#define ADDITIONAL_DELIMITER1 0xe1
-
-/*
- * Sample string for `from' argument of map(),
- * and its expected outputs.
- */
-static const unsigned long from[] = {
- 0x002e, /* full stop */
- 0x3002, /* ideographic full stop */
- 0xff0e, /* fullwidth full stop */
- 0xff61, /* halfwidth ideographic full stop */
- ADDITIONAL_DELIMITER0,
- ADDITIONAL_DELIMITER1,
- 0x0000
-};
-
-static const unsigned long expected_default[] = {
- 0x002e, /* full stop */
- 0x002e, /* full stop */
- 0x002e, /* full stop */
- 0x002e, /* full stop */
- ADDITIONAL_DELIMITER0,
- ADDITIONAL_DELIMITER1,
- 0x0000
-};
-
-static const unsigned long expected_add[] = {
- 0x002e, /* full stop */
- 0x002e, /* full stop */
- 0x002e, /* full stop */
- 0x002e, /* full stop */
- 0x002e, /* full stop */
- ADDITIONAL_DELIMITER1,
- 0x0000
-};
-
-static const unsigned long expected_addall[] = {
- 0x002e, /* full stop */
- 0x002e, /* full stop */
- 0x002e, /* full stop */
- 0x002e, /* full stop */
- 0x002e, /* full stop */
- 0x002e, /* full stop */
- 0x0000
-};
-
-//--------------------------------------------------------------------
-// Setups and Teardowns.
-//--------------------------------------------------------------------
-
-//# SETUP
-// group: generic-init
-{
- idn_result_t r;
- idn_delimitermap_t ctx;
- unsigned long to[256];
-
- r = idn_delimitermap_create(&ctx);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TEARDOWN
-// group: generic-init
-{
- if (ctx != NULL)
- idn_delimitermap_destroy(ctx);
-}
-
-//# SETUP
-// group: quiet
-{
- int saved_log_level;
-
- saved_log_level = idn_log_getlevel();
- idn_log_setlevel(idn_log_level_fatal);
-}
-
-//# TEARDOWN
-// group: quiet
-{
- idn_log_setlevel(saved_log_level);
-}
-
-//--------------------------------------------------------------------
-// Testcases.
-//--------------------------------------------------------------------
-
-//# TESTCASE
-// title: call create()
-// group: generic-init
-{
-}
-
-//# TESTCASE
-// title: call map() without additional delimiters
-// group: generic-init
-{
- r = idn_delimitermap_map(ctx, from, to, sizeof(to) / sizeof(*to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, expected_default);
-}
-
-//# TESTCASE
-// title: call add() and map()
-// group: generic-init
-{
- r = idn_delimitermap_add(ctx, ADDITIONAL_DELIMITER0);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_delimitermap_map(ctx, from, to, sizeof(to) / sizeof(*to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, expected_add);
-}
-
-//# TESTCASE
-// title: call addall()
-// group: generic-init
-{
- unsigned long delimiters[2];
-
- delimiters[0] = ADDITIONAL_DELIMITER0;
- delimiters[1] = ADDITIONAL_DELIMITER1;
- r = idn_delimitermap_addall(ctx, delimiters, 2);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_delimitermap_map(ctx, from, to, sizeof(to) / sizeof(*to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, expected_addall);
-}
-
-//# TESTCASE
-// title: call addall() with nnames=0
-// group: generic-init
-{
- unsigned long delimiters[2];
-
- r = idn_delimitermap_addall(ctx, delimiters, 0);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_delimitermap_map(ctx, from, to, sizeof(to) / sizeof(*to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, expected_default);
-}
-
-//# TESTCASE
-// title: call add() with invalid codepoint
-// group: generic-init quiet
-{
- r = idn_delimitermap_add(ctx, 0x0000); /* NUL */
- ASSERT_RESULT(r, idn_invalid_codepoint);
-
- r = idn_delimitermap_add(ctx, 0xd800); /* surrogate */
- ASSERT_RESULT(r, idn_invalid_codepoint);
-
- r = idn_delimitermap_add(ctx, 0x110000); /* out of range */
- ASSERT_RESULT(r, idn_invalid_codepoint);
-}
-
-//# TESTCASE
-// title: call addall() with invalid codepoint
-// group: generic-init quiet
-{
- unsigned long delimiters[1];
-
- delimiters[0] = 0x0000; /* NUL */
- r = idn_delimitermap_addall(ctx, delimiters, 1);
- ASSERT_RESULT(r, idn_invalid_codepoint);
-
- delimiters[0] = 0xd800; /* surrogate */
- r = idn_delimitermap_addall(ctx, delimiters, 1);
- ASSERT_RESULT(r, idn_invalid_codepoint);
-
- delimiters[0] = 0x110000; /* out of range */
- r = idn_delimitermap_addall(ctx, delimiters, 1);
- ASSERT_RESULT(r, idn_invalid_codepoint);
-}
-
-//# TESTCASE
-// title: overrun test for arg `to' of map()
-// group: generic-init
-{
- r = idn_delimitermap_map(ctx, from, to,
- idn_ucs4_strlen(expected_default) + 1);
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, expected_default);
- r = idn_delimitermap_map(ctx, from, to,
- idn_ucs4_strlen(expected_default));
- ASSERT_RESULT(r, idn_buffer_overflow);
-}
-
-//# TESTCASE
-// title: call map() with tolen=0
-// group: generic-init
-{
- r = idn_delimitermap_map(ctx, from, to, 0);
- ASSERT_RESULT(r, idn_buffer_overflow);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/iconvchk.c b/contrib/idn/idnkit-1.0-src/lib/tests/iconvchk.c
deleted file mode 100644
index 73ec8d2f..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/iconvchk.c
+++ /dev/null
@@ -1,132 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: iconvchk.c,v 1.1 2003/06/04 00:26:54 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <idn/api.h>
-#include <idn/converter.h>
-#include <idn/result.h>
-
-#include "codeset.h"
-
-#define IDN_UTF8_ENCODING_NAME "UTF-8"
-
-void
-eucjp_check(void)
-{
- idn_result_t r;
- idn_converter_t eucjp_ctx = NULL;
-
- r = idn_nameinit(0);
- if (r != idn_success) {
- fprintf(stderr, "idn_nameinit(): failed\n");
- exit (1);
- }
-
- r = idn_converter_create(EUCJP_ENCODING_NAME, &eucjp_ctx, 0);
-
- if (eucjp_ctx != NULL) {
- idn_converter_destroy(eucjp_ctx);
- }
-
- if (r != idn_success) {
- if (r == idn_invalid_name) {
- fprintf(stderr, \
- "\"%s\" is invalid codeset name, edit codeset.h\n", \
- EUCJP_ENCODING_NAME);
- exit (1);
- } else {
- fprintf(stderr, \
- "idn_converter_create() failed with error \"%s\"\n", \
- idn_result_tostring(r));
- exit (1);
- }
- }
-}
-
-void
-sjis_check(void)
-{
- idn_result_t r;
- idn_converter_t sjis_ctx = NULL;
-
- r = idn_nameinit(0);
- if (r != idn_success) {
- fprintf(stderr, "idn_nameinit(): failed\n");
- exit (1);
- }
-
- r = idn_converter_create(SJIS_ENCODING_NAME, &sjis_ctx, 0);
-
- if (sjis_ctx != NULL) {
- idn_converter_destroy(sjis_ctx);
- }
-
- if (r != idn_success) {
- if (r == idn_invalid_name) {
- fprintf(stderr, \
- "\"%s\" is invalid codeset name, edit codeset.h\n", \
- SJIS_ENCODING_NAME);
- exit (1);
- } else {
- fprintf(stderr, \
- "idn_converter_create() failed with error \"%s\"\n", \
- idn_result_tostring(r));
- exit (1);
- }
- }
-}
-
-int
-main (int ac, char **av)
-{
- eucjp_check();
- sjis_check();
-
- exit (0);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/mapper.tsy b/contrib/idn/idnkit-1.0-src/lib/tests/mapper.tsy
deleted file mode 100644
index 22ed604b..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/mapper.tsy
+++ /dev/null
@@ -1,497 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: mapper.tsy,v 1.1 2003/06/04 00:26:54 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <idn/mapper.h>
-#include <idn/log.h>
-#include <idn/ucs4.h>
-#include "testutil.h"
-
-#define SIZEOFUCS4(x) (sizeof(x) / sizeof(unsigned long))
-
-#define UCS4_NAME_STR "U+304C" /* hiragana letter ga */
-#define UCS4_NAME 0x304C
-
-#define BUF_SIZE 128
-#define ARRAY_SIZE 9
-#define CONF_FILENAME "test.map"
-
-#define LINEBUF_SIZE 2001
-
-/*
- * Sample string for `from' argument of map(),
- * and its expected outputs.
- */
-static const unsigned long from[] = {
- 0x0041, /* latin capital letter a */
- 0x0042, /* latin capital letter b */
- UCS4_NAME,
- 0x0000
-};
-
-static const unsigned long expected_default[] = {
- 0x0061, /* latin small letter a */
- 0x0062, /* latin small letter b */
- UCS4_NAME,
- 0x0000
-};
-
-idn_result_t
-test_create(const char *parameter, void **ctxp)
-{
- return (idn_success);
-}
-
-void
-test_destroy(void *ctxp)
-{
-}
-
-idn_result_t
-test_map(void *ctx, const unsigned long *from, unsigned long *to,
- size_t tolen)
-{
- if (tolen > idn_ucs4_strlen(from)) {
- idn_ucs4_strcpy(to, from);
- } else {
- return (idn_buffer_overflow);
- }
-
- return (idn_success);
-}
-
-//--------------------------------------------------------------------
-// Setups and Teardowns.
-//--------------------------------------------------------------------
-
-//# SETUP
-// group: noinit
-//--
-// Do nothing
-{
- idn_result_t r;
- const char *name;
-}
-
-//# SETUP
-// group: generic
-//--
-// Initialize the module and create context.
-{
- idn_result_t r;
- idn_mapper_t ctx = NULL;
-
- r = idn_mapper_initialize();
- ASSERT_RESULT(r, idn_success);
- r = idn_mapper_create(&ctx);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TEARDOWN
-// group: generic
-//--
-// Destroy context.
-{
- idn_mapper_destroy(ctx);
-}
-
-//# SETUP
-// group: addall
-//--
-// Initialize the module and create context.
-{
- idn_result_t r;
- idn_mapper_t ctx = NULL;
- char *names[ARRAY_SIZE];
- int i;
- unsigned long to[4];
-
- for (i = 0; i < ARRAY_SIZE; i++) {
- names[i] = malloc(BUF_SIZE);
- if (names[i] == NULL) {
- ASSERT("malloc failed\n");
- }
- }
-
- r = idn_mapper_initialize();
- ASSERT_RESULT(r, idn_success);
- r = idn_mapper_create(&ctx);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TEARDOWN
-// group: addall
-//--
-// Destroy context and free some blocks.
-{
- idn_mapper_destroy(ctx);
- for (i = 0; i < ARRAY_SIZE; i++) {
- free(names[i]);
- }
-}
-
-//# SETUP
-// group: quiet
-//--
-// Set log level to `fatal' to supress log messages.
-{
- int saved_log_level;
-
- saved_log_level = idn_log_getlevel();
- idn_log_setlevel(idn_log_level_fatal);
-}
-
-//# TEARDOWN
-// group: quiet
-//--
-// Restore log level.
-{
- idn_log_setlevel(saved_log_level);
-}
-
-//--------------------------------------------------------------------
-// Testcases.
-//--------------------------------------------------------------------
-
-//# TESTCASE
-// title: idn_mapper_add() - boundary condition
-// group: generic quiet
-{
- r = idn_mapper_add(ctx, "");
- ASSERT_RESULT(r, idn_invalid_name);
-}
-
-//# TESTCASE
-// title: idn_mapper_add() - builtin schemes
-// group: generic quiet
-{
- r = idn_mapper_add(ctx, "RFC3491");
- ASSERT_RESULT(r, idn_success);
-
- r = idn_mapper_add(ctx, "nameprep-01");
- ASSERT_RESULT(r, idn_invalid_name);
-}
-
-//# TESTCASE
-// title: idn_mapper_add() - boundary condition
-// group: generic quiet
-{
- r = idn_mapper_add(ctx, "");
- ASSERT_RESULT(r, idn_invalid_name);
- r = idn_mapper_add(ctx, "filemap:");
- ASSERT_RESULT(r, idn_nofile);
- r = idn_mapper_add(ctx, "filemap:notfound.map");
- ASSERT_RESULT(r, idn_nofile);
-}
-
-//# TESTCASE
-// title: idn_mapper_add() - file
-// group: generic quiet
-{
- char name[BUF_SIZE];
- unsigned long to[4];
-
- create_conf_file(CONF_FILENAME, 0,
- "0041; 0061;",
- "0042; 0062;",
- NULL);
- sprintf(name, "filemap:%s", CONF_FILENAME);
-
- r = idn_mapper_add(ctx, name);
- ASSERT_RESULT(r, idn_success);
- r = idn_mapper_map(ctx, from, to, SIZEOFUCS4(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, expected_default);
-}
-
-//# TESTCASE
-// title: idn_mapper_add() - file - long line
-// group: generic quiet
-{
- char line[LINEBUF_SIZE];
- char name[BUF_SIZE];
- const char *first_entry = "0041;";
- const char *other_entry = " 0061";
- int i;
- int len;
-
- memcpy(line, first_entry, strlen(first_entry));
- len = strlen(other_entry);
- for (i = len; i < LINEBUF_SIZE - len; i += len) {
- memcpy(line + i, other_entry, len);
- }
- *(line + i) = '\0';
-
- create_conf_file(CONF_FILENAME, 0, line, NULL);
- sprintf(name, "filemap:%s", CONF_FILENAME);
- r = idn_mapper_add(ctx, name);
- ASSERT_RESULT(r, idn_invalid_syntax);
-}
-
-//# TESTCASE
-// title: idn_mapper_add() - file - no new line at end of file
-// group: generic quiet
-{
- char name[BUF_SIZE];
- unsigned long to[4];
-
- create_conf_file(CONF_FILENAME, CONF_NO_EOF_NEWLINE,
- "0041; 0061;",
- "0042; 0062;",
- NULL);
- sprintf(name, "filemap:%s", CONF_FILENAME);
- r = idn_mapper_add(ctx, name);
- ASSERT_RESULT(r, idn_success);
- r = idn_mapper_map(ctx, from, to, SIZEOFUCS4(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, expected_default);
-}
-
-//# TESTCASE
-// title: idn_mapper_add() - file - one item in one line #1
-// group: generic quiet
-{
- char name[BUF_SIZE];
- unsigned long to[3];
- unsigned long expected[] = {
- 0x0061,
- UCS4_NAME,
- 0x0000
- };
-
- create_conf_file(CONF_FILENAME, 0,
- "0041; 0061;",
- "0042;",
- NULL);
- sprintf(name, "filemap:%s", CONF_FILENAME);
- r = idn_mapper_add(ctx, name);
- ASSERT_RESULT(r, idn_success);
- r = idn_mapper_map(ctx, from, to, SIZEOFUCS4(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, expected);
-}
-
-//# TESTCASE
-// title: idn_mapper_add() - file - one item in one line #2
-// group: generic quiet
-{
- char name[BUF_SIZE];
- unsigned long to[3];
- unsigned long expected[] = {
- 0x0061,
- UCS4_NAME,
- 0x0000
- };
-
- create_conf_file(CONF_FILENAME, 0,
- "0041; 0061;",
- "0042; ;",
- NULL);
- sprintf(name, "filemap:%s", CONF_FILENAME);
- r = idn_mapper_add(ctx, name);
- ASSERT_RESULT(r, idn_success);
- r = idn_mapper_map(ctx, from, to, SIZEOFUCS4(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, expected);
-}
-
-//# TESTCASE
-// title: idn_mapper_add() - file - more then two items in one line #1
-// group: generic quiet
-{
- char name[BUF_SIZE];
- unsigned long to[4];
-
- create_conf_file(CONF_FILENAME, 0,
- "0041; 0061; 0062;",
- "0042; 0062; 0063;",
- NULL);
- sprintf(name, "filemap:%s", CONF_FILENAME);
- r = idn_mapper_add(ctx, name);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_mapper_map(ctx, from, to, SIZEOFUCS4(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, expected_default);
-}
-
-//# TESTCASE
-// title: idn_mapper_add() - file - more then two items in one line #2
-// group: generic quiet
-{
- char name[BUF_SIZE];
- unsigned long to[6];
- unsigned long expected_to[] = {
- 0x0061,
- 0x0062,
- 0x0062,
- 0x0063,
- UCS4_NAME,
- 0x0000
- };
-
- create_conf_file(CONF_FILENAME, 0,
- "0041; 0061 0062;",
- "0042; 0062 0063;",
- NULL);
- sprintf(name, "filemap:%s", CONF_FILENAME);
- r = idn_mapper_add(ctx, name);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_mapper_map(ctx, from, to, SIZEOFUCS4(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, expected_to);
-}
-
-//# TESTCASE
-// title: idn_mapper_add() - file - more then two items in one line #3
-// group: generic quiet
-{
- char name[BUF_SIZE];
- unsigned long to[3];
-
- create_conf_file(CONF_FILENAME, 0,
- "0041 0042; 0063;",
- NULL);
- sprintf(name, "filemap:%s", CONF_FILENAME);
- r = idn_mapper_add(ctx, name);
- ASSERT_RESULT(r, idn_invalid_syntax);
-}
-
-//# TESTCASE
-// title: idn_mapper_addall() - add all builtin schemes
-// group: addall quiet
-{
- strcpy(names[0], "RFC3491");
- strcpy(names[1], "RFC3491");
- strcpy(names[2], "RFC3491");
- strcpy(names[3], "RFC3491");
- strcpy(names[4], "RFC3491");
- strcpy(names[5], "RFC3491");
- strcpy(names[6], "RFC3491");
- strcpy(names[7], "RFC3491");
- strcpy(names[8], "RFC3491");
-
- r = idn_mapper_addall(ctx, (const char **)names, 9);
- ASSERT_RESULT(r, idn_success);
- r = idn_mapper_map(ctx, from, to, SIZEOFUCS4(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, expected_default);
-}
-
-//# TESTCASE
-// title: idn_mapper_addall() - add same scheme repetedly
-// group: addall quiet
-{
- for (i = 0; i < ARRAY_SIZE; i++) {
- strcpy(names[i], "RFC3491");
- }
- r = idn_mapper_addall(ctx, (const char **)names, 3);
- ASSERT_RESULT(r, idn_success);
- r = idn_mapper_map(ctx, from, to, SIZEOFUCS4(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, expected_default);
-}
-
-//# TESTCASE
-// title: idn_mapper_map() - builtin schemes check - RFC3491
-// group: generic quiet
-{
- unsigned long to[4];
-
- r = idn_mapper_add(ctx, "RFC3491");
- ASSERT_RESULT(r, idn_success);
- r = idn_mapper_map(ctx, from, to, SIZEOFUCS4(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, expected_default);
-}
-
-//# TESTCASE
-// title: idn_mapper_map() - context without procedure
-// group: generic
-{
- unsigned long to[4];
-
- r = idn_mapper_map(ctx, from, to, SIZEOFUCS4(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, from);
-}
-
-//# TESTCASE
-// title: idn_mapper_destroy(), idn_mapper_incrref()
-// group:
-{
- idn_result_t r;
- idn_mapper_t ctx = NULL;
-
- r = idn_mapper_initialize();
- ASSERT_RESULT(r, idn_success);
- r = idn_mapper_create(&ctx);
- ASSERT_RESULT(r, idn_success);
- idn_mapper_incrref(ctx);
- idn_mapper_destroy(ctx);
- idn_mapper_destroy(ctx);
-}
-
-//# TESTCASE
-// title: idn_mapper_register()
-// group: generic quiet
-{
- unsigned long to[10];
-
- r = idn_mapper_register("test", test_create, test_destroy, test_map);
- ASSERT_RESULT(r, idn_success);
- r = idn_mapper_add(ctx, "test");
- ASSERT_RESULT(r, idn_success);
-
- r = idn_mapper_map(ctx, from, to, SIZEOFUCS4(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, from);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/mapselector.tsy b/contrib/idn/idnkit-1.0-src/lib/tests/mapselector.tsy
deleted file mode 100644
index 3acfc5e7..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/mapselector.tsy
+++ /dev/null
@@ -1,592 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: mapselector.tsy,v 1.1 2003/06/04 00:26:55 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <idn/mapselector.h>
-#include <idn/ucs4.h>
-#include <idn/log.h>
-
-#include "testutil.h"
-
-#define CONF_FILENAME "test.conf"
-#define MAP_FILENAME "test.map"
-
-/*
- * Sample TLDs.
- */
-static const char *utf8_tlds_jp[] = {"jp", ".jp", "JP", ".JP"};
-static const char *utf8_tlds_tw[] = {"tw", ".tw", "TW", ".TW"};
-
-static const unsigned long ucs4_tlds_jp[][4] = {{'j', 'p', '\0', '\0'},
- {'.', 'j', 'p', '\0'},
- {'J', 'P', '\0', '\0'},
- {'.', 'J', 'P', '\0'}};
-
-static const unsigned long ucs4_tlds_tw[][4] = {{'t', 'w', '\0', '\0'},
- {'.', 't', 'w', '\0'},
- {'T', 'W', '\0', '\0'},
- {'.', 'T', 'W', '\0'}};
-
-/* How many elements in `utf8_tlds_{jp|tw}[]' and `ucs4_tlds_{jp|tw}[]'. */
-#define TLD_NVARIANTS 4
-
-/*
- * Sample input string for mapping. (UCS4)
- */
-static const unsigned long in_string[] = {0x00C0, 0x2212, 0};
-
-/*
- * Sample mapping results of IN_STRING.
- *
- * OUT_STRING_FILEMAP is the result of file-mapping (U+2212 -> U+002D).
- * OUT_STRING_NAMEPREP is the result of the latest nameprep
- * OUT_STRING_BOTH is the result of both file-mapping and nameprep.
- */
-static const unsigned long out_string_filemap[] = {0x00C0, 0x002D, 0};
-static const unsigned long out_string_nameprep[] = {0x00E0, 0x2212, 0};
-static const unsigned long out_string_both[] = {0x00E0, 0x002D, 0};
-
-#define MAP_FILENAME "test.map"
-
-//--------------------------------------------------------------------
-// Setups and Teardowns.
-//--------------------------------------------------------------------
-
-//# SETUP
-// group: generic-init
-{
- idn_result_t r;
- idn_mapselector_t ctxs[TLD_NVARIANTS];
- unsigned long to[256];
-
- {
- int i;
- for (i = 0; i < TLD_NVARIANTS; i++)
- ctxs[i] = NULL;
- }
-
- r = idn_mapselector_initialize();
- ASSERT_RESULT(r, idn_success);
-
- {
- int i;
- for (i = 0; i < TLD_NVARIANTS; i++) {
- r = idn_mapselector_create(&ctxs[i]);
- ASSERT_RESULT(r, idn_success);
- }
- }
-}
-
-//# TEARDOWN
-// group: generic-init
-{
- {
- int i;
-
- for (i = 0; i < TLD_NVARIANTS; i++) {
- if (ctxs[i] != NULL)
- idn_mapselector_destroy(ctxs[i]);
- remove(CONF_FILENAME);
- }
- }
-}
-
-//# SETUP
-// group: quiet
-{
- int saved_log_level;
-
- saved_log_level = idn_log_getlevel();
- idn_log_setlevel(idn_log_level_fatal);
-}
-
-//# TEARDOWN
-// group: quiet
-{
- idn_log_setlevel(saved_log_level);
-}
-
-//# SETUP
-// group: generic-filemap
-{
- create_conf_file(MAP_FILENAME, 0,
- "U+2212; U+002D",
- NULL);
-}
-
-//# TEARDOWN
-// group: generic-filemap
-{
- remove(MAP_FILENAME);
-}
-
-//--------------------------------------------------------------------
-// Testcases.
-//--------------------------------------------------------------------
-
-//# TESTCASE
-// title: call initialize() twice.
-//
-{
- idn_result_t r;
-
- r = idn_mapselector_initialize();
- ASSERT_RESULT(r, idn_success);
-
- r = idn_mapselector_initialize();
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TESTCASE
-// title: call create()
-{
- idn_result_t r;
- idn_mapselector_t ctx;
-
- r = idn_mapselector_initialize();
- ASSERT_RESULT(r, idn_success);
-
- r = idn_mapselector_create(&ctx);
- ASSERT_RESULT(r, idn_success);
-
- idn_mapselector_destroy(ctx);
-}
-
-//# TESTCASE
-// title: call add(filemap) and map()
-// group: generic-init generic-filemap
-{
- int i, j;
-
- for (i = 0; i < TLD_NVARIANTS; i++) {
- r = idn_mapselector_add(ctxs[i], utf8_tlds_jp[i],
- "filemap:" MAP_FILENAME);
- ASSERT_RESULT(r, idn_success);
- }
-
- for (i = 0; i < TLD_NVARIANTS; i++) {
- for (j = 0; j < TLD_NVARIANTS; j++) {
- r = idn_mapselector_map(ctxs[i], in_string,
- utf8_tlds_jp[j], to,
- sizeof(to) / sizeof(*to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, out_string_filemap);
-
- r = idn_mapselector_map(ctxs[i], in_string,
- utf8_tlds_tw[j], to,
- sizeof(to) / sizeof(*to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, in_string);
- }
- }
-}
-
-//# TESTCASE
-// title: call add(nameprep) and map()
-// group: generic-init generic-filemap
-{
- int i, j;
-
- for (i = 0; i < TLD_NVARIANTS; i++) {
- r = idn_mapselector_add(ctxs[i], utf8_tlds_jp[i],
- IDN_NAMEPREP_CURRENT);
- ASSERT_RESULT(r, idn_success);
- }
-
- for (i = 0; i < TLD_NVARIANTS; i++) {
- for (j = 0; j < TLD_NVARIANTS; j++) {
- r = idn_mapselector_map(ctxs[i], in_string,
- utf8_tlds_jp[j], to,
- sizeof(to) / sizeof(*to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, out_string_nameprep);
-
- r = idn_mapselector_map(ctxs[i], in_string,
- utf8_tlds_tw[j], to,
- sizeof(to) / sizeof(*to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, in_string);
- }
- }
-}
-
-//# TESTCASE
-// title: call add(filemap) and map2()
-// group: generic-init generic-filemap
-{
- int i, j;
-
- for (i = 0; i < TLD_NVARIANTS; i++) {
- r = idn_mapselector_add(ctxs[i], utf8_tlds_jp[i],
- "filemap:" MAP_FILENAME);
- ASSERT_RESULT(r, idn_success);
- }
-
- for (i = 0; i < TLD_NVARIANTS; i++) {
- for (j = 0; j < TLD_NVARIANTS; j++) {
- r = idn_mapselector_map2(ctxs[i], in_string,
- ucs4_tlds_jp[j], to,
- sizeof(to) / sizeof(*to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, out_string_filemap);
-
- r = idn_mapselector_map2(ctxs[i], in_string,
- ucs4_tlds_tw[j], to,
- sizeof(to) / sizeof(*to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, in_string);
- }
- }
-}
-
-//# TESTCASE
-// title: call add(nameprep) and map2()
-// group: generic-init generic-filemap
-{
- int i, j;
-
- for (i = 0; i < TLD_NVARIANTS; i++) {
- r = idn_mapselector_add(ctxs[i], utf8_tlds_jp[i],
- IDN_NAMEPREP_CURRENT);
- ASSERT_RESULT(r, idn_success);
- }
-
- for (i = 0; i < TLD_NVARIANTS; i++) {
- for (j = 0; j < TLD_NVARIANTS; j++) {
- r = idn_mapselector_map2(ctxs[i], in_string,
- ucs4_tlds_jp[j], to,
- sizeof(to) / sizeof(*to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, out_string_nameprep);
-
- r = idn_mapselector_map2(ctxs[i], in_string,
- ucs4_tlds_tw[j], to,
- sizeof(to) / sizeof(*to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, in_string);
- }
- }
-}
-
-//# TESTCASE
-// title: call add(filemap) and map()
-// group: generic-init generic-filemap
-{
- int i, j;
-
- for (i = 0; i < TLD_NVARIANTS; i++) {
- r = idn_mapselector_add(ctxs[i], utf8_tlds_jp[i],
- "filemap:" MAP_FILENAME);
- ASSERT_RESULT(r, idn_success);
- }
-
- for (i = 0; i < TLD_NVARIANTS; i++) {
- for (j = 0; j < TLD_NVARIANTS; j++) {
- r = idn_mapselector_map(ctxs[i], in_string,
- utf8_tlds_jp[j], to,
- sizeof(to) / sizeof(*to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, out_string_filemap);
-
- r = idn_mapselector_map(ctxs[i], in_string,
- utf8_tlds_tw[j], to,
- sizeof(to) / sizeof(*to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, in_string);
- }
- }
-}
-
-//# TESTCASE
-// title: call add(nameprep) and map()
-// group: generic-init generic-filemap
-{
- int i, j;
-
- for (i = 0; i < TLD_NVARIANTS; i++) {
- r = idn_mapselector_add(ctxs[i], utf8_tlds_jp[i],
- IDN_NAMEPREP_CURRENT);
- ASSERT_RESULT(r, idn_success);
- }
-
- for (i = 0; i < TLD_NVARIANTS; i++) {
- for (j = 0; j < TLD_NVARIANTS; j++) {
- r = idn_mapselector_map(ctxs[i], in_string,
- utf8_tlds_jp[j], to,
- sizeof(to) / sizeof(*to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, out_string_nameprep);
-
- r = idn_mapselector_map(ctxs[i], in_string,
- utf8_tlds_tw[j], to,
- sizeof(to) / sizeof(*to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, in_string);
- }
- }
-}
-
-//# TESTCASE
-// title: call addall()
-// group: generic-init generic-filemap
-{
- static const char *names[] = {
- "filemap:" MAP_FILENAME,
- IDN_NAMEPREP_CURRENT
- };
- int i, j;
-
- for (i = 0; i < TLD_NVARIANTS; i++) {
- r = idn_mapselector_addall(ctxs[i], utf8_tlds_jp[i], names,
- sizeof(names) / sizeof(*names));
- ASSERT_RESULT(r, idn_success);
- }
-
- for (i = 0; i < TLD_NVARIANTS; i++) {
- for (j = 0; j < TLD_NVARIANTS; j++) {
- r = idn_mapselector_map2(ctxs[i], in_string,
- ucs4_tlds_jp[j], to,
- sizeof(to) / sizeof(*to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, out_string_both);
-
- r = idn_mapselector_map2(ctxs[i], in_string,
- ucs4_tlds_tw[j], to,
- sizeof(to) / sizeof(*to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, in_string);
- }
- }
-}
-
-//# TESTCASE
-// title: call addall() with nnames=0
-// group: generic-init
-{
- static const char *names[] = {IDN_NAMEPREP_CURRENT};
-
- r = idn_mapselector_addall(ctxs[0], ".", names, 0);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TESTCASE
-// title: call add() with empty tld
-// group: generic-init
-{
- r = idn_mapselector_add(ctxs[0], "", IDN_NAMEPREP_CURRENT);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TESTCASE
-// title: call addall() with empty tld
-// group: generic-init
-{
- static const char *names[] = {IDN_NAMEPREP_CURRENT};
-
- r = idn_mapselector_addall(ctxs[0], "", names, 1);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TESTCASE
-// title: call add() with too long tld
-// group: generic-init quiet
-{
- r = idn_mapselector_add(ctxs[0],
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "ABCDEFGHIJK",
- IDN_NAMEPREP_CURRENT);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_mapselector_add(ctxs[0],
- "."
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "ABCDEFGHIJK",
- IDN_NAMEPREP_CURRENT);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_mapselector_add(ctxs[0],
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "ABCDEFGHIJKL",
- IDN_NAMEPREP_CURRENT);
- ASSERT_RESULT(r, idn_invalid_name);
-
- r = idn_mapselector_add(ctxs[0],
- "."
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "ABCDEFGHIJKL",
- IDN_NAMEPREP_CURRENT);
- ASSERT_RESULT(r, idn_invalid_name);
-}
-
-//# TESTCASE
-// title: call addall() with too long tld
-// group: generic-init quiet
-{
- static const char *names[] = {IDN_NAMEPREP_CURRENT};
-
- r = idn_mapselector_addall(ctxs[0],
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "ABCDEFGHIJK",
- names, 1);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_mapselector_addall(ctxs[0],
- "."
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "ABCDEFGHIJK",
- names, 1);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_mapselector_addall(ctxs[0],
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "ABCDEFGHIJKL",
- names, 1);
- ASSERT_RESULT(r, idn_invalid_name);
-
- r = idn_mapselector_addall(ctxs[0],
- "."
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "ABCDEFGHIJKL",
- names, 1);
- ASSERT_RESULT(r, idn_invalid_name);
-}
-
-//# TESTCASE
-// title: overrun test for arg `to' of map()
-// group: generic-init
-{
- r = idn_mapselector_add(ctxs[0], utf8_tlds_jp[0],
- IDN_NAMEPREP_CURRENT);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_mapselector_map(ctxs[0], in_string, utf8_tlds_jp[0], to,
- idn_ucs4_strlen(out_string_nameprep) + 1);
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, out_string_nameprep);
-
- r = idn_mapselector_map(ctxs[0], in_string, utf8_tlds_tw[0], to,
- idn_ucs4_strlen(in_string) + 1);
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, in_string);
-
- r = idn_mapselector_map(ctxs[0], in_string, utf8_tlds_jp[0], to,
- idn_ucs4_strlen(out_string_nameprep));
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- r = idn_mapselector_map(ctxs[0], in_string, utf8_tlds_tw[0], to,
- idn_ucs4_strlen(in_string));
- ASSERT_RESULT(r, idn_buffer_overflow);
-}
-
-//# TESTCASE
-// title: overrun test for arg `to' of map2()
-// group: generic-init
-{
- r = idn_mapselector_add(ctxs[0], utf8_tlds_jp[0],
- IDN_NAMEPREP_CURRENT);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_mapselector_map2(ctxs[0], in_string, ucs4_tlds_jp[0], to,
- idn_ucs4_strlen(out_string_nameprep) + 1);
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, out_string_nameprep);
-
- r = idn_mapselector_map2(ctxs[0], in_string, ucs4_tlds_tw[0], to,
- idn_ucs4_strlen(in_string) + 1);
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, in_string);
-
- r = idn_mapselector_map2(ctxs[0], in_string, ucs4_tlds_jp[0], to,
- idn_ucs4_strlen(out_string_nameprep));
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- r = idn_mapselector_map2(ctxs[0], in_string, ucs4_tlds_tw[0], to,
- idn_ucs4_strlen(in_string));
- ASSERT_RESULT(r, idn_buffer_overflow);
-}
-
-//# TESTCASE
-// title: call map() with tolen=0
-// group: generic-init
-{
- r = idn_mapselector_add(ctxs[0], utf8_tlds_jp[0],
- IDN_NAMEPREP_CURRENT);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_mapselector_map(ctxs[0], in_string, utf8_tlds_jp[0], to, 0);
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- r = idn_mapselector_map(ctxs[0], in_string, utf8_tlds_tw[0], to, 0);
- ASSERT_RESULT(r, idn_buffer_overflow);
-}
-
-//# TESTCASE
-// title: call map2() with tolen=0
-// group: generic-init
-{
- r = idn_mapselector_add(ctxs[0], utf8_tlds_jp[0],
- IDN_NAMEPREP_CURRENT);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_mapselector_map2(ctxs[0], in_string, ucs4_tlds_jp[0], to, 0);
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- r = idn_mapselector_map2(ctxs[0], in_string, ucs4_tlds_tw[0], to, 0);
- ASSERT_RESULT(r, idn_buffer_overflow);
-}
-
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/nameprep.tsy b/contrib/idn/idnkit-1.0-src/lib/tests/nameprep.tsy
deleted file mode 100644
index c1b73ba0..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/nameprep.tsy
+++ /dev/null
@@ -1,340 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: nameprep.tsy,v 1.1 2003/06/04 00:26:56 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <idn/nameprep.h>
-#include <idn/log.h>
-#include "testutil.h"
-
-#define UCS4_NAME 0x304C /* hiragana letter ga */
-#define BUF_SIZE 4
-/*
- * Sample string for `from' argument for map(),
- * and its expected outputs.
- */
-static const unsigned long map_from[] = {
- 0x0041, /* latin capital letter a */
- 0x0042, /* latin capital letter b */
- UCS4_NAME,
- 0x0000
-};
-
-static const unsigned long map_expected[] = {
- 0x0061, /* latin small letter a */
- 0x0062, /* latin small letter b */
- UCS4_NAME,
- 0x0000
-};
-
-/*
- * Sample string for `from' argument for isprohibited().
- */
-static const unsigned long check_from[4] = {
- UCS4_NAME,
- 0x00A0, /* no-break space: prohibited character */
- 0x0221, /* unassigned character */
- 0x0000
-};
-
-#define FROM_UCS4NAME_OFFSET 0
-#define FROM_PROH_OFFSET 1
-#define FROM_UNAS_OFFSET 2
-
-/*
- * Sample string for `from' argument for isunassigned().
- */
-static const unsigned long check_from2[4] = {
- UCS4_NAME,
- 0x0221, /* unassigned character */
- 0x00A0, /* no-break space: prohibited character */
- 0x0000
-};
-
-#define FROM2_UCS4NAME_OFFSET 0
-#define FROM2_PROH_OFFSET 2
-#define FROM2_UNAS_OFFSET 1
-
-/*
- * Sample string for `from' argument for isvalidbidi().
- * (It is not a valid bidi label.)
- */
-static const unsigned long bidi_from[4] = {
- 0x05BE, /* hebrew punctuation maqaf */
- 0x0041, /* latin capital letter a */
- 0xFEFC, /* arabic ligature lam with alef final form */
- 0x0000
-};
-#define BIDIFROM_OFFSET 1
-
-/*
- * Empty string.
- */
-static const unsigned long ucs4_nullstr[] = {
- 0x0000
-};
-
-//--------------------------------------------------------------------
-// Setups and Teardowns.
-//--------------------------------------------------------------------
-
-//# SETUP
-// group: generic
-//--
-// Nothing happens.
-{
- idn_result_t r;
- idn_nameprep_t handle = NULL;
-
-}
-
-//# SETUP
-// group: check
-//--
-// Initialize the module and create contexts.
-{
- idn_result_t r;
- idn_nameprep_t handle11 = NULL;
-
- r = idn_nameprep_create("RFC3491", &handle11);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TEARDOWN
-// group: check
-//--
-// Destroy contexts.
-{
- if (handle11 != NULL) {
- idn_nameprep_destroy(handle11);
- }
-}
-
-//# SETUP
-// group: quiet
-//--
-// Set log level to `fatal' to supress log messages.
-{
- int saved_log_level;
-
- saved_log_level = idn_log_getlevel();
- idn_log_setlevel(idn_log_level_fatal);
-}
-
-//# TEARDOWN
-// group: quiet
-//--
-// Restore log level.
-{
- idn_log_setlevel(saved_log_level);
-}
-
-//--------------------------------------------------------------------
-// Testcases.
-//--------------------------------------------------------------------
-
-//# TESTCASE
-// title: idn_nameprep_create() - boundary condition
-// group: generic quiet
-{
- r = idn_nameprep_create("", &handle);
- ASSERT_RESULT(r, idn_notfound);
-}
-
-//# TESTCASE
-// title: idn_nameprep_create() - version is NULL (current nameprep)
-// group: generic quiet
-{
- unsigned long to[BUF_SIZE];
- const unsigned long *found;
-
- r = idn_nameprep_create(NULL, &handle);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_nameprep_map(handle, map_from, to, BUF_SIZE);
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, map_expected);
-
- r = idn_nameprep_isunassigned(handle, check_from, &found);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(found, check_from + FROM_UNAS_OFFSET);
-
- r = idn_nameprep_isprohibited(handle, check_from, &found);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(found, check_from + FROM_PROH_OFFSET);
-
- r = idn_nameprep_isvalidbidi(handle, bidi_from, &found);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(found, bidi_from + BIDIFROM_OFFSET);
-
- idn_nameprep_destroy(handle);
-}
-
-//# TESTCASE
-// title: idn_nameprep_create() - nameprep-01
-// group: generic quiet
-{
- r = idn_nameprep_create("nameprep-01", &handle);
- ASSERT_RESULT(r, idn_notfound);
-}
-
-//# TESTCASE
-// title: idn_nameprep_create() - RFC3491
-// group: generic
-{
- r = idn_nameprep_create("RFC3491", &handle);
- ASSERT_RESULT(r, idn_success);
- idn_nameprep_destroy(handle);
-}
-
-//# TESTCASE
-// title: idn_nameprep_map() - boundary condition
-// group: check
-{
- unsigned long to[BUF_SIZE];
-
- r = idn_nameprep_map(handle11, ucs4_nullstr, to, 0);
- ASSERT_RESULT(r, idn_buffer_overflow);
- r = idn_nameprep_map(handle11, ucs4_nullstr, to, 1);
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, ucs4_nullstr);
-}
-
-//# TESTCASE
-// title: idn_nameprep_map() - RFC3491
-// group: check
-{
- unsigned long to[BUF_SIZE];
-
- r = idn_nameprep_map(handle11, map_from, to, 0);
- ASSERT_RESULT(r, idn_buffer_overflow);
- r = idn_nameprep_map(handle11, map_from, to, BUF_SIZE - 1);
- ASSERT_RESULT(r, idn_buffer_overflow);
- r = idn_nameprep_map(handle11, map_from, to, BUF_SIZE);
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, map_expected);
-}
-
-//# TESTCASE
-// title: idn_nameprep_isunassigned() - boundary condition
-// group: check
-{
- const unsigned long *found;
-
- r = idn_nameprep_isunassigned(handle11, ucs4_nullstr, &found);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(found, NULL);
-}
-
-//# TESTCASE
-// title: idn_nameprep_isunassigned() - RFC3491
-// group: check
-{
- const unsigned long *found;
-
- r = idn_nameprep_isunassigned(handle11, check_from, &found);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(found, check_from + FROM_UNAS_OFFSET);
-
- r = idn_nameprep_isunassigned(handle11, check_from2, &found);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(found, check_from2 + FROM2_UNAS_OFFSET);
-}
-
-//# TESTCASE
-// title: idn_nameprep_isprohibited() - boundary condition
-// group: check
-{
- const unsigned long *found;
-
- r = idn_nameprep_isprohibited(handle11, ucs4_nullstr, &found);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(found, NULL);
-}
-
-//# TESTCASE
-// title: idn_nameprep_isprohibited() - RFC3491
-// group: check
-{
- const unsigned long *found;
-
- r = idn_nameprep_isprohibited(handle11, check_from, &found);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(found, check_from + FROM_PROH_OFFSET);
-
- r = idn_nameprep_isprohibited(handle11, check_from2, &found);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(found, check_from2 + FROM2_PROH_OFFSET);
-}
-
-//# TESTCASE
-// title: idn_nameprep_isvalidbidi() - boundary condition
-// group: check
-{
- const unsigned long *found;
-
- r = idn_nameprep_isvalidbidi(handle11, ucs4_nullstr, &found);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(found, NULL);
-}
-
-//# TESTCASE
-// title: idn_nameprep_isvalidbidi() - RFC3491
-// group: check
-{
- const unsigned long *found;
-
- r = idn_nameprep_isvalidbidi(handle11, bidi_from, &found);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(found, bidi_from + BIDIFROM_OFFSET);
-
- r = idn_nameprep_isvalidbidi(handle11, check_from2, &found);
- ASSERT_RESULT(r, idn_success);
- ASSERT_PTR(found, NULL);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/normalizer.tsy b/contrib/idn/idnkit-1.0-src/lib/tests/normalizer.tsy
deleted file mode 100644
index 754790f8..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/normalizer.tsy
+++ /dev/null
@@ -1,346 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: normalizer.tsy,v 1.1 2003/06/04 00:26:57 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <idn/normalizer.h>
-#include <idn/log.h>
-#include <idn/ucs4.h>
-
-#define BUF_SIZE 64
-#define TOBUF_SIZE 4
-#define ARRAY_SIZE 20
-#define CONF_FILENAME "test.map"
-
-/*
- * Sample string for `from' argument of normalize(),
- * and its expected outputs.
- */
-static const unsigned long from[4] = {
- 0x304B, /* hiragana letter ka */
- 0x3099, /* combining katakana-hiragana voiced sound mark */
- 0x32D0, /* circled katakana a */
- 0x0000
-};
-
-static const unsigned long normalized_kc_str[3] = {
- 0x304C, /* hiragana letter ga */
- 0x30A2, /* katakana letter a */
- 0x0000
-};
-
-static const unsigned long normalized_c_str[3] = {
- 0x304C, /* hiragana letter ga */
- 0x32D0, /* circled katakana a */
- 0x0000
-};
-
-idn_result_t
-test_proc(const unsigned long *from, unsigned long *to, size_t tolen)
-{
- if (tolen > idn_ucs4_strlen(from)) {
- idn_ucs4_strcpy(to, from);
- } else {
- return (idn_buffer_overflow);
- }
-
- return (idn_success);
-}
-
-//--------------------------------------------------------------------
-// Setups and Teardowns.
-//--------------------------------------------------------------------
-
-//# SETUP
-// group: noinit
-//--
-// Do nothing
-{
- idn_result_t r;
- const char *name;
-}
-
-//# SETUP
-// group: generic
-//--
-// Initialize the module and create context.
-{
- idn_result_t r;
- idn_normalizer_t ctx = NULL;
-
- r = idn_normalizer_initialize();
- ASSERT_RESULT(r, idn_success);
- r = idn_normalizer_create(&ctx);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TEARDOWN
-// group: generic
-//--
-// Destroy context.
-{
- idn_normalizer_destroy(ctx);
-}
-
-//# SETUP
-// group: addall
-//--
-// Initialize the module and create context.
-{
- idn_result_t r;
- idn_normalizer_t ctx = NULL;
- char *names[ARRAY_SIZE];
- int i;
-
- for (i = 0; i < ARRAY_SIZE; i++) {
- names[i] = malloc(BUF_SIZE);
- if (names[i] == NULL) {
- ASSERT("malloc failed\n");
- }
- }
-
- strcpy(names[0], "RFC3491");
- strcpy(names[1], "unicode-form-kc");
- strcpy(names[2], "unicode-form-kc/3.2.0");
- strcpy(names[3], "RFC3491");
- strcpy(names[4], "unicode-form-kc");
- strcpy(names[5], "unicode-form-kc/3.2.0");
- strcpy(names[6], "RFC3491");
- strcpy(names[7], "unicode-form-kc");
- strcpy(names[8], "unicode-form-kc/3.2.0");
- strcpy(names[9], "RFC3491");
- strcpy(names[10], "unicode-form-kc");
- strcpy(names[11], "unicode-form-kc/3.2.0");
- strcpy(names[12], "RFC3491");
- strcpy(names[13], "unicode-form-kc");
- strcpy(names[14], "unicode-form-kc/3.2.0");
- strcpy(names[15], "RFC3491");
- strcpy(names[16], "unicode-form-kc");
- strcpy(names[17], "unicode-form-kc/3.2.0");
- strcpy(names[18], "RFC3491");
- strcpy(names[19], "unicode-form-kc");
-
- r = idn_normalizer_initialize();
- ASSERT_RESULT(r, idn_success);
- r = idn_normalizer_create(&ctx);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TEARDOWN
-// group: addall
-//--
-// Destroy context.
-{
- idn_normalizer_destroy(ctx);
- for (i = 0; i < ARRAY_SIZE; i++) {
- free(names[i]);
- }
-}
-
-//# SETUP
-// group: quiet
-//--
-// Set log level to `fatal' to supress log messages.
-{
- int saved_log_level;
-
- saved_log_level = idn_log_getlevel();
- idn_log_setlevel(idn_log_level_fatal);
-}
-
-//# TEARDOWN
-// group: quiet
-//--
-// Restore log level.
-{
- idn_log_setlevel(saved_log_level);
-}
-
-//--------------------------------------------------------------------
-// Testcases.
-//--------------------------------------------------------------------
-
-//# TESTCASE
-// title: idn_normalizer_add() - boundary condition
-// group: generic quiet
-{
- r = idn_normalizer_add(ctx, "");
- ASSERT_RESULT(r, idn_invalid_name);
-}
-
-//# TESTCASE
-// title: idn_normalizer_add() - builtin schemes
-// group: generic quiet
-{
- r = idn_normalizer_add(ctx, "RFC3491");
- ASSERT_RESULT(r, idn_success);
- r = idn_normalizer_add(ctx, "unicode-form-kc");
- ASSERT_RESULT(r, idn_success);
- r = idn_normalizer_add(ctx, "unicode-form-kc/3.2.0");
- ASSERT_RESULT(r, idn_success);
-
- r = idn_normalizer_add(ctx, "nameprep-01");
- ASSERT_RESULT(r, idn_invalid_name);
-}
-
-//# TESTCASE
-// title: idn_normalizer_addall() - boundary condition
-// group: addall quiet
-{
- strcpy(names[3], "");
- r = idn_normalizer_addall(ctx, (const char **)names, ARRAY_SIZE);
- ASSERT_RESULT(r, idn_invalid_name);
-}
-
-//# TESTCASE
-// title: idn_normalizer_addall() - nschemes is 0
-// group: addall quiet
-{
- r = idn_normalizer_addall(ctx, (const char **)names, 0);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TESTCASE
-// title: idn_normalizer_addall() - add a lot of schemes
-// group: addall quiet
-{
- unsigned long to[TOBUF_SIZE];
-
- r = idn_normalizer_addall(ctx, (const char **)names, ARRAY_SIZE);
- ASSERT_RESULT(r, idn_success);
- r = idn_normalizer_normalize(ctx, from, to, TOBUF_SIZE);
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, normalized_kc_str);
-}
-
-//# TESTCASE
-// title: idn_normalizer_addall() - add same scheme repetedly
-// group: addall quiet
-{
- int i;
- unsigned long to[TOBUF_SIZE];
-
- for (i = 0; i < ARRAY_SIZE; i++) {
- strcpy(names[i], "RFC3491");
- }
- r = idn_normalizer_addall(ctx, (const char **)names, ARRAY_SIZE);
- ASSERT_RESULT(r, idn_success);
- r = idn_normalizer_normalize(ctx, from, to, TOBUF_SIZE);
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, normalized_kc_str);
-}
-
-//# TESTCASE
-// title: idn_normalizer_normalize() - schemes check - RFC3491
-// group: generic quiet
-{
- unsigned long to[TOBUF_SIZE];
-
- r = idn_normalizer_add(ctx, "RFC3491");
- ASSERT_RESULT(r, idn_success);
- r = idn_normalizer_normalize(ctx, from, to, TOBUF_SIZE);
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, normalized_kc_str);
-}
-
-//# TESTCASE
-// title: idn_normalizer_normalize() - schemes check - unicode-form-kc/3.2.0
-// group: generic quiet
-{
- unsigned long to[TOBUF_SIZE];
-
- r = idn_normalizer_add(ctx, "unicode-form-kc/3.2.0");
- ASSERT_RESULT(r, idn_success);
- r = idn_normalizer_normalize(ctx, from, to, TOBUF_SIZE);
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, normalized_kc_str);
-}
-
-//# TESTCASE
-// title: idn_normalizer_normalize() - context without procedure
-// group: generic quiet
-{
- unsigned long to[TOBUF_SIZE];
-
- r = idn_normalizer_normalize(ctx, from, to, TOBUF_SIZE);
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, from);
-}
-
-//# TESTCASE
-// title: idn_normalizer_destroy(), idn_normalizer_incrref()
-// group:
-{
- idn_result_t r;
- idn_normalizer_t ctx = NULL;
-
- r = idn_normalizer_initialize();
- ASSERT_RESULT(r, idn_success);
- r = idn_normalizer_create(&ctx);
- ASSERT_RESULT(r, idn_success);
- idn_normalizer_incrref(ctx);
- idn_normalizer_destroy(ctx);
- idn_normalizer_destroy(ctx);
-}
-
-//# TESTCASE
-// title: idn_normalizer_register()
-// group: generic quiet
-{
- unsigned long to[TOBUF_SIZE];
-
- r = idn_normalizer_register("test", test_proc);
- ASSERT_RESULT(r, idn_success);
- r = idn_normalizer_add(ctx, "test");
- ASSERT_RESULT(r, idn_success);
-
- r = idn_normalizer_normalize(ctx, from, to, TOBUF_SIZE);
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, from);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/res.tsy b/contrib/idn/idnkit-1.0-src/lib/tests/res.tsy
deleted file mode 100644
index afb888cd..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/res.tsy
+++ /dev/null
@@ -1,1026 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: res.tsy,v 1.1 2003/06/04 00:26:59 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <idn/res.h>
-#include <idn/log.h>
-
-#include "codeset.h"
-#include "setenv.h"
-
-#ifndef EUCJP_ENCODING_NAME
-#define EUCJP_ENCODING_NAME "eucJP"
-#endif
-
-/*
- * U+304B: hiragana letter KA
- * U+3099: combining katakana-hiragana voiced sound mark
- *
- * map("U+304B U+3099") -> "U+304C"
- *
- * U+304C: hiragana letter GA
- */
-#define UTF8_NAME "A<U+304B><U+3099>"
-#define UTF8_REVNAME "a<U+304C>"
-
-/*
- * A4AC: hiragana letter GA (in EUC-JP)
- */
-#define EUCJP_NAME "\xa4\xac"
-#define EUCJP_REVNAME "\xa4\xac"
-
-/*
- * Conversion result of "U+304B U+3099 A"
- */
-#define PUNYCODE_NAME "xn--a-i8t"
-
-/*
- * Conversion result of "A U+304B U+3099" (in EUC-JP).
- */
-#define AUX_EUCJP_NAME "xn--a-i\xa3\xb8t"
-
-//--------------------------------------------------------------------
-// Setups and Teardowns.
-//--------------------------------------------------------------------
-
-//# SETUP
-// group: generic-conversion
-//--
-// Initialize the `resconf' context.
-// Set local encoding to `UTF-8'.
-{
- char to[256];
- idn_result_t r;
- idn_resconf_t ctx;
-
- setenv("IDN_LOCAL_CODESET", "UTF-8", 1);
- unsetenv("IDN_DISABLE");
-
- r = idn_resconf_initialize();
- ASSERT_RESULT(r, idn_success);
-
- r = idn_resconf_create(&ctx);
- ASSERT_RESULT(r, idn_success);
-
- r = idn_resconf_setdefaults(ctx);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TEARDOWN
-// group: generic-conversion
-{
- idn_resconf_destroy(ctx);
-}
-
-//# SETUP
-// group: quiet
-//--
-// Set log level to `fatal' to supress log messages.
-{
- int saved_log_level;
-
- saved_log_level = idn_log_getlevel();
- idn_log_setlevel(idn_log_level_fatal);
-}
-
-//# TEARDOWN
-// group: quiet
-//--
-// Restore log level.
-{
- idn_log_setlevel(saved_log_level);
-}
-
-//--------------------------------------------------------------------
-// Testcases.
-//--------------------------------------------------------------------
-
-//# TESTCASE
-// title: basic conversion by encodename()
-// group: generic-conversion
-{
- r = idn_res_encodename(ctx, IDN_ENCODE_APP, UTF8_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, PUNYCODE_NAME);
-}
-
-//# TESTCASE
-// title: basic conversion by decodename()
-// group: generic-conversion
-{
- r = idn_res_decodename(ctx, IDN_DECODE_APP, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_REVNAME);
-}
-
-//# TESTCASE
-// title: basic conversion by decodename2()
-// group: generic-conversion
-{
- r = idn_res_decodename2(ctx, IDN_DECODE_APP, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
-#ifdef WITHOUT_ICONV
- ASSERT_RESULT(r, idn_failure);
-#else
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_REVNAME);
-#endif
-}
-
-//# TESTCASE
-// title: call decodename2() with auxencoding=NULL
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_res_decodename2(ctx, IDN_DECODE_APP, PUNYCODE_NAME, to, sizeof(to),
- NULL);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_REVNAME);
-#endif
-}
-
-//# TESTCASE
-// title: call encodename() with actions=0
-// group: generic-conversion
-{
- r = idn_res_encodename(ctx, 0, UTF8_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_NAME);
-}
-
-//# TESTCASE
-// title: call decodename() with actions=0
-// group: generic-conversion
-{
- r = idn_res_decodename(ctx, 0, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, PUNYCODE_NAME);
-}
-
-//# TESTCASE
-// title: call decodename2() with actions=0
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_res_decodename2(ctx, 0, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, AUX_EUCJP_NAME);
-#endif
-}
-
-//# TESTCASE
-// title: call encodename() with actions=rtcheck
-// group: generic-conversion quiet
-{
- r = idn_res_encodename(ctx, IDN_RTCHECK, EUCJP_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-}
-
-//# TESTCASE
-// title: call encodename() with actions=decode-query
-// group: generic-conversion quiet
-{
- r = idn_res_encodename(ctx, IDN_DECODE_QUERY, EUCJP_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-}
-
-//# TESTCASE
-// title: call encodename() with actions=decode-app
-// group: generic-conversion quiet
-{
- r = idn_res_encodename(ctx, IDN_DECODE_APP, EUCJP_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-}
-
-//# TESTCASE
-// title: call encodename() with actions=decode-stored
-// group: generic-conversion quiet
-{
- r = idn_res_encodename(ctx, IDN_DECODE_STORED, EUCJP_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-}
-
-//# TESTCASE
-// title: call encodename() with actions=(1<<31)
-// group: generic-conversion quiet
-{
- r = idn_res_encodename(ctx, 1 << 31, EUCJP_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-}
-
-//# TESTCASE
-// title: call decodename() with actions=localmap
-// group: generic-conversion quiet
-{
- r = idn_res_decodename(ctx, IDN_LOCALMAP, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-}
-
-//# TESTCASE
-// title: call decodename2() with actions=localmap
-// group: generic-conversion quiet
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_res_decodename2(ctx, IDN_LOCALMAP, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_invalid_action);
-#endif
-}
-
-//# TESTCASE
-// title: call decodename() with actions=lencheck
-// group: generic-conversion quiet
-{
- r = idn_res_decodename(ctx, IDN_LENCHECK, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-}
-
-//# TESTCASE
-// title: call decodename2() with actions=lencheck
-// group: generic-conversion quiet
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_res_decodename2(ctx, IDN_LENCHECK, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_invalid_action);
-#endif
-}
-
-//# TESTCASE
-// title: call decodename() with actions=encode-query
-// group: generic-conversion quiet
-{
- r = idn_res_decodename(ctx, IDN_ENCODE_QUERY, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-}
-
-//# TESTCASE
-// title: call decodename2() with actions=encode-query
-// group: generic-conversion quiet
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_res_decodename2(ctx, IDN_ENCODE_QUERY, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_invalid_action);
-#endif
-}
-
-//# TESTCASE
-// title: call decodename() with actions=encode-app
-// group: generic-conversion quiet
-{
- r = idn_res_decodename(ctx, IDN_ENCODE_APP, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-}
-
-//# TESTCASE
-// title: call decodename2() with actions=encode-app
-// group: generic-conversion quiet
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_res_decodename2(ctx, IDN_ENCODE_APP, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_invalid_action);
-#endif
-}
-
-//# TESTCASE
-// title: call decodename() with actions=encode-stored
-// group: generic-conversion quiet
-{
- r = idn_res_decodename(ctx, IDN_ENCODE_STORED, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-}
-
-//# TESTCASE
-// title: call decodename2() with actions=encode-stored
-// group: generic-conversion quiet
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_res_decodename2(ctx, IDN_ENCODE_STORED, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_invalid_action);
-#endif
-}
-
-//# TESTCASE
-// title: call decodename() with actions=(1<<31)
-// group: generic-conversion quiet
-{
- r = idn_res_decodename(ctx, 1 << 31, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-}
-
-//# TESTCASE
-// title: call decodename2() with actions=(1<<31)
-// group: generic-conversion quiet
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_res_decodename2(ctx, 1 << 31, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_invalid_action);
-#endif
-}
-
-//# TESTCASE
-// title: call encodename() with actions=localconv
-// group: generic-conversion quiet
-{
-#ifndef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_res_encodename(ctx, IDN_LOCALCONV, UTF8_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-#endif
-}
-
-//# TESTCASE
-// title: call decodename() with actions=localconv
-// group: generic-conversion quiet
-{
-#ifndef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_res_decodename(ctx, IDN_LOCALCONV, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_action);
-#endif
-}
-
-//# TESTCASE
-// title: call decodename2() with actions=localconv
-// group: generic-conversion
-{
-#ifndef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_res_decodename2(ctx, IDN_LOCALCONV, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_failure);
-#endif
-}
-
-//# TESTCASE
-// title: call enable(0) and then encodename()
-// group: generic-conversion
-{
- idn_res_enable(0);
- r = idn_res_encodename(ctx, IDN_ENCODE_APP, UTF8_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_NAME);
-}
-
-//# TESTCASE
-// title: call decodename() when IDN_DISABLE is defined
-// group: generic-conversion
-{
- idn_res_enable(0);
- r = idn_res_decodename(ctx, IDN_DECODE_APP, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, PUNYCODE_NAME);
-}
-
-//# TESTCASE
-// title: call decodename() when IDN_DISABLE is defined
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- idn_res_enable(0);
- r = idn_res_decodename2(ctx, IDN_DECODE_APP, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, AUX_EUCJP_NAME);
-#endif
-}
-
-//# TESTCASE
-// title: call enable(0) and then encodename()
-// group: generic-conversion
-{
- idn_res_enable(0);
- r = idn_res_encodename(ctx, IDN_ENCODE_APP, UTF8_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_NAME);
-}
-
-//# TESTCASE
-// title: call enable(0) and then decodename()
-// group: generic-conversion
-{
- idn_res_enable(0);
- r = idn_res_decodename(ctx, IDN_DECODE_APP, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, PUNYCODE_NAME);
-}
-
-//# TESTCASE
-// title: call enable(0) and then decodename2()
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- idn_res_enable(0);
- r = idn_res_decodename2(ctx, IDN_DECODE_APP, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, AUX_EUCJP_NAME);
-#endif
-}
-
-//# TESTCASE
-// title: set IDN_DISABLE and call encodename()
-// group: generic-conversion
-{
- setenv("IDN_DISABLE", "1", 1);
- r = idn_res_encodename(ctx, IDN_ENCODE_APP, UTF8_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_NAME);
-}
-
-//# TESTCASE
-// title: set IDN_DISABLE and call decodename()
-// group: generic-conversion
-{
- setenv("IDN_DISABLE", "1", 1);
- r = idn_res_decodename(ctx, IDN_DECODE_APP, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, PUNYCODE_NAME);
-}
-
-//# TESTCASE
-// title: set IDN_DISABLE and call decodename2()
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- setenv("IDN_DISABLE", "1", 1);
- r = idn_res_decodename2(ctx, IDN_DECODE_APP, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, AUX_EUCJP_NAME);
-#endif
-}
-
-//# TESTCASE
-// title: set IDN_DISABLE, and then call enable(1) and encodename()
-// group: generic-conversion
-{
- setenv("IDN_DISABLE", "1", 1);
- idn_res_enable(1);
- r = idn_res_encodename(ctx, IDN_ENCODE_APP, UTF8_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, PUNYCODE_NAME);
-}
-
-//# TESTCASE
-// title: set IDN_DISABLE, and then call enable(1) and decodename()
-// group: generic-conversion
-{
- setenv("IDN_DISABLE", "1", 1);
- idn_res_enable(1);
- r = idn_res_decodename(ctx, IDN_DECODE_APP, PUNYCODE_NAME, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_REVNAME);
-}
-
-//# TESTCASE
-// title: set IDN_DISABLE, and then call enable(1) and decodename2()
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- setenv("IDN_DISABLE", "1", 1);
- idn_res_enable(1);
- r = idn_res_decodename2(ctx, IDN_DECODE_APP, AUX_EUCJP_NAME, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_REVNAME);
-#endif
-}
-
-//# TESTCASE
-// title: overrun test for arg `to' of encodename()
-// group: generic-conversion
-{
- /* Normal case */
- r = idn_res_encodename(ctx, IDN_ENCODE_APP, UTF8_NAME, to,
- strlen(PUNYCODE_NAME) + 1);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, PUNYCODE_NAME);
-
- r = idn_res_encodename(ctx, IDN_ENCODE_APP, UTF8_NAME, to,
- strlen(PUNYCODE_NAME));
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- /* enable(0) case */
- idn_res_enable(0);
- r = idn_res_encodename(ctx, IDN_ENCODE_APP, UTF8_NAME, to,
- strlen(UTF8_NAME) + 1);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_NAME);
-
- r = idn_res_encodename(ctx, IDN_ENCODE_APP, UTF8_NAME, to,
- strlen(UTF8_NAME));
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- /* actions=0 case */
- idn_res_enable(1);
- r = idn_res_encodename(ctx, 0, UTF8_NAME, to, strlen(UTF8_NAME) + 1);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_NAME);
-
- r = idn_res_encodename(ctx, 0, UTF8_NAME, to, strlen(UTF8_NAME));
- ASSERT_RESULT(r, idn_buffer_overflow);
-}
-
-//# TESTCASE
-// title: overrun test for arg `to' of decodename()
-// group: generic-conversion
-{
- /* Normal case */
- r = idn_res_decodename(ctx, IDN_DECODE_APP, PUNYCODE_NAME, to,
- strlen(UTF8_REVNAME) + 1);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_REVNAME);
-
- r = idn_res_decodename(ctx, IDN_DECODE_APP, PUNYCODE_NAME, to,
- strlen(UTF8_REVNAME));
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- /* idn_res_enable(0) case */
- idn_res_enable(0);
- r = idn_res_decodename(ctx, IDN_DECODE_APP, PUNYCODE_NAME, to,
- strlen(PUNYCODE_NAME) + 1);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, PUNYCODE_NAME);
-
- r = idn_res_decodename(ctx, IDN_DECODE_APP, PUNYCODE_NAME, to,
- strlen(PUNYCODE_NAME));
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- /* actions=0 case */
- idn_res_enable(1);
- r = idn_res_decodename(ctx, 0, PUNYCODE_NAME, to,
- strlen(PUNYCODE_NAME) + 1);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, PUNYCODE_NAME);
-
- r = idn_res_decodename(ctx, 0, PUNYCODE_NAME, to,
- strlen(PUNYCODE_NAME));
- ASSERT_RESULT(r, idn_buffer_overflow);
-}
-
-//# TESTCASE
-// title: overrun test for arg `to' of decodename2()
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- /* Normal case */
- r = idn_res_decodename2(ctx, IDN_DECODE_APP, AUX_EUCJP_NAME, to,
- strlen(UTF8_REVNAME) + 1, EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, UTF8_REVNAME);
-
- r = idn_res_decodename2(ctx, IDN_DECODE_APP, AUX_EUCJP_NAME, to,
- strlen(UTF8_REVNAME), EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- /* idn_res_enable(0) case */
- idn_res_enable(0);
- r = idn_res_decodename2(ctx, IDN_DECODE_APP, AUX_EUCJP_NAME, to,
- strlen(AUX_EUCJP_NAME) + 1, EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, AUX_EUCJP_NAME);
-
- r = idn_res_decodename2(ctx, IDN_DECODE_APP, AUX_EUCJP_NAME, to,
- strlen(AUX_EUCJP_NAME), EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- /* actions=0 case */
- idn_res_enable(1);
- r = idn_res_decodename2(ctx, 0, AUX_EUCJP_NAME, to,
- strlen(AUX_EUCJP_NAME) + 1, EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, AUX_EUCJP_NAME);
-
- r = idn_res_decodename2(ctx, 0, AUX_EUCJP_NAME, to,
- strlen(AUX_EUCJP_NAME), EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_buffer_overflow);
-
-#endif
-}
-
-//# TESTCASE
-// title: call encodename() with tolen=0
-// group: generic-conversion
-{
- r = idn_res_encodename(ctx, IDN_ENCODE_APP, UTF8_NAME, to, 0);
- ASSERT_RESULT(r, idn_buffer_overflow);
-}
-
-//# TESTCASE
-// title: call decodename() with tolen=0
-// group: generic-conversion
-{
- r = idn_res_decodename(ctx, IDN_DECODE_APP, PUNYCODE_NAME, to, 0);
- ASSERT_RESULT(r, idn_buffer_overflow);
-}
-
-//# TESTCASE
-// title: call decodename2() with tolen=0
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_res_decodename2(ctx, IDN_DECODE_APP, AUX_EUCJP_NAME, to, 0,
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_buffer_overflow);
-#endif
-}
-
-//# TESTCASE
-// title: convert an empty string using encodename()
-// group: generic-conversion
-{
- r = idn_res_encodename(ctx, IDN_ENCODE_APP, "", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "");
-}
-
-//# TESTCASE
-// title: convert an empty string using decodename()
-// group: generic-conversion
-{
- r = idn_res_decodename(ctx, IDN_DECODE_APP, "", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "");
-}
-
-//# TESTCASE
-// title: convert an empty string using decodename2()
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- r = idn_res_decodename2(ctx, IDN_DECODE_APP, "", to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "");
-#endif
-}
-
-//# TESTCASE
-// title: prohcheck by encodename()
-// group: generic-conversion
-{
- /* U+1680: prohibited character */
- r = idn_res_encodename(ctx, IDN_PROHCHECK, "<U+1680>", to, sizeof(to));
- ASSERT_RESULT(r, idn_prohibited);
-}
-
-//# TESTCASE
-// title: unascheck by encodename()
-// group: generic-conversion
-{
- /* U+0221: unassigned codepoint */
- r = idn_res_encodename(ctx, IDN_UNASCHECK, "<U+0221>", to, sizeof(to));
- ASSERT_RESULT(r, idn_prohibited);
-}
-
-//# TESTCASE
-// title: bidicheck by encodename()
-// group: generic-conversion
-{
- /* U+05D0: bidirectional property is "R" */
- /* `a': bidirectional property is "L" */
- /* `0', `-': bidirectional property is "N" */
- r = idn_res_encodename(ctx, IDN_BIDICHECK, "<U+05D0>", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
-
- r = idn_res_encodename(ctx, IDN_BIDICHECK, "<U+05D0><U+05D0>",
- to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
-
- r = idn_res_encodename(ctx, IDN_BIDICHECK, "<U+05D0><U+05D0>-a",
- to, sizeof(to));
- ASSERT_RESULT(r, idn_prohibited);
-
- r = idn_res_encodename(ctx, IDN_BIDICHECK, "<U+05D0>-a-<U+05D0>",
- to, sizeof(to));
- ASSERT_RESULT(r, idn_prohibited);
-
- r = idn_res_encodename(ctx, IDN_BIDICHECK, "a-<U+05D0><U+05D0>",
- to, sizeof(to));
- ASSERT_RESULT(r, idn_prohibited);
-
- r = idn_res_encodename(ctx, IDN_BIDICHECK, "<U+05D0><U+05D0>-0",
- to, sizeof(to));
- ASSERT_RESULT(r, idn_prohibited);
-
- r = idn_res_encodename(ctx, IDN_BIDICHECK, "<U+05D0>-0-<U+05D0>",
- to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
-
- r = idn_res_encodename(ctx, IDN_BIDICHECK, "0-<U+05D0><U+05D0>",
- to, sizeof(to));
- ASSERT_RESULT(r, idn_prohibited);
-}
-
-//# TESTCASE
-// title: asccheck by encodename()
-// group: generic-conversion
-{
- r = idn_res_encodename(ctx, IDN_ASCCHECK, "-name", to, sizeof(to));
- ASSERT_RESULT(r, idn_prohibited);
-
- r = idn_res_encodename(ctx, IDN_ASCCHECK, "name-", to, sizeof(to));
- ASSERT_RESULT(r, idn_prohibited);
-
- r = idn_res_encodename(ctx, IDN_ASCCHECK, "n ame", to, sizeof(to));
- ASSERT_RESULT(r, idn_prohibited);
-}
-
-//# TESTCASE
-// title: lencheck by encodename()
-// group: generic-conversion
-{
- r = idn_res_encodename(ctx, IDN_LENCHECK,
- "123456789-123456789-123456789-123456789-"
- "123456789-123456789-123", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
-
- r = idn_res_encodename(ctx, IDN_LENCHECK,
- "123456789-123456789-123456789-123456789-"
- "123456789-123456789-1234", to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_length);
-
- r = idn_res_encodename(ctx, IDN_LENCHECK, "a..b", to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_length);
-}
-
-//# TESTCASE
-// title: rtcheck non-prohchecked label by decodename()
-// group: generic-conversion
-{
- /* "xn--6ue" -> "U+1680" (prohibited character) */
- r = idn_res_decodename(ctx, IDN_RTCHECK, "xn--6ue", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "xn--6ue");
-}
-
-//# TESTCASE
-// title: rtcheck non-unaschecked label by decodename()
-// group: generic-conversion
-{
- /* "xn--6la" -> "U+0221" (unassigned codepoint) */
- r = idn_res_decodename(ctx, IDN_IDNCONV | IDN_RTCHECK | IDN_UNASCHECK,
- "xn--6la", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "xn--6la");
-}
-
-//# TESTCASE
-// title: rtcheck non-ascchecked label by decodename()
-// group: generic-conversion
-{
- /* "xn----x7t" -> "- U+3042" */
- r = idn_res_decodename(ctx, IDN_IDNCONV | IDN_RTCHECK | IDN_ASCCHECK,
- "xn----x7t", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "xn----x7t");
-
- /* "xn----w7t" -> "U+3042 -" */
- r = idn_res_decodename(ctx, IDN_IDNCONV | IDN_RTCHECK | IDN_ASCCHECK,
- "xn----w7t", to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "xn----w7t");
-}
-
-//# TESTCASE
-// title: rtcheck non-lenchecked label by decodename()
-// group: generic-conversion
-{
- /* `s1' has 63 characters */
- const char *s1 =
- "xn--l8jaa5522a8sj38bzugvvblo3y90fjzgvxlmxscifws3d43odzaq6aj340b";
-
- const char *s1rev =
- "<U+9752><U+68EE><U+5CA9><U+624B><U+5BAE><U+57CE><U+79CB><U+7530>"
- "<U+5C71><U+5F62><U+798F><U+5CF6><U+6771><U+4EAC><U+795E><U+5948>"
- "<U+5DDD><U+3042><U+3042><U+3042>";
-
- /* `s2' has 64 characters */
- const char *s2 =
- "xn--a-w7ta6522a8sj38bzugvvblo3y90fjzgvxlmxscifws3d43odzaq6aj340b";
-
- /* `s3' has an empty label */
- const char *s3 = "a..b";
-
- r = idn_res_decodename(ctx, IDN_IDNCONV | IDN_RTCHECK, s1, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, s1rev);
-
- r = idn_res_decodename(ctx, IDN_IDNCONV | IDN_RTCHECK, s2, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, s2);
-
- r = idn_res_decodename(ctx, IDN_IDNCONV | IDN_RTCHECK, s3, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, s3);
-}
-
-//# TESTCASE
-// title: rtcheck non-prohchecked label by decodename2()
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- /* "xn--6ue" -> "U+1680" (prohibited character) */
- r = idn_res_decodename2(ctx, IDN_RTCHECK, "xn--6ue", to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "xn--6ue");
-#endif
-}
-
-//# TESTCASE
-// title: rtcheck non-unaschecked label by decodename2()
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- /* "xn--6la" -> "U+0221" (unassigned codepoint) */
- r = idn_res_decodename2(ctx, IDN_IDNCONV | IDN_RTCHECK | IDN_UNASCHECK,
- "xn--6la", to, sizeof(to), EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "xn--6la");
-#endif
-}
-
-//# TESTCASE
-// title: rtcheck non-ascchecked label by decodename2()
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- /* "xn----x7t" -> "- U+3042" */
- r = idn_res_decodename2(ctx, IDN_IDNCONV | IDN_RTCHECK | IDN_ASCCHECK,
- "xn----x7t", to, sizeof(to), EUCJP_ENCODING_NAME);
-
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "xn----x7t");
-
- /* "xn----w7t" -> "U+3042 -" */
- r = idn_res_decodename2(ctx, IDN_IDNCONV | IDN_RTCHECK | IDN_ASCCHECK,
- "xn----w7t", to, sizeof(to), EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "xn----w7t");
-#endif
-}
-
-//# TESTCASE
-// title: rtcheck non-lenchecked label by decodename2()
-// group: generic-conversion
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- /* `s1' has 63 characters */
- const char *s1 =
- "xn--l8jaa5522a8sj38bzugvvblo3y90fjzgvxlmxscifws3d43odzaq6aj340b";
-
- const char *s1rev =
- "<U+9752><U+68EE><U+5CA9><U+624B><U+5BAE><U+57CE><U+79CB><U+7530>"
- "<U+5C71><U+5F62><U+798F><U+5CF6><U+6771><U+4EAC><U+795E><U+5948>"
- "<U+5DDD><U+3042><U+3042><U+3042>";
-
- /* `s2' has 64 characters */
- const char *s2 =
- "xn--a-w7ta6522a8sj38bzugvvblo3y90fjzgvxlmxscifws3d43odzaq6aj340b";
-
- /* `s3' has an empty label */
- const char *s3 = "a..b";
-
- r = idn_res_decodename2(ctx, IDN_IDNCONV | IDN_RTCHECK, s1, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, s1rev);
-
- r = idn_res_decodename2(ctx, IDN_IDNCONV | IDN_RTCHECK, s2, to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, s2);
-
- r = idn_res_decodename(ctx, IDN_IDNCONV | IDN_RTCHECK, s3, to, sizeof(to));
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, s3);
-#endif
-}
-
-//# TESTCASE
-// title: pass broken string as `from' to encodename()
-// group: generic-conversion quiet
-{
- /* "\xe3\x21" is not valid UTF-8 string */
- r = idn_res_encodename(ctx, IDN_ENCODE_APP, "\xe3\x21", to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_encoding);
-}
-
-//# TESTCASE
-// title: pass broken string as `from' to decodename()
-// group: generic-conversion quiet
-{
- /* "\xe3\x21" is not valid UTF-8 string */
- r = idn_res_decodename(ctx, IDN_DECODE_APP, "\xe3\x21", to, sizeof(to));
- ASSERT_RESULT(r, idn_invalid_encoding);
-}
-
-//# TESTCASE
-// title: pass broken string as `from' to decodename2()
-// group: generic-conversion quiet
-{
-#ifdef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- /* "\xa4\x21" is not valid EUC-JP string */
- r = idn_res_decodename2(ctx, IDN_DECODE_APP, "\xa4\x21", to, sizeof(to),
- EUCJP_ENCODING_NAME);
- ASSERT_RESULT(r, idn_invalid_encoding);
-#endif
-}
-
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/resconf.tsy b/contrib/idn/idnkit-1.0-src/lib/tests/resconf.tsy
deleted file mode 100644
index 0537ac0a..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/resconf.tsy
+++ /dev/null
@@ -1,1026 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: resconf.tsy,v 1.1 2003/06/04 00:27:00 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <idn/resconf.h>
-#include <idn/converter.h>
-#include <idn/log.h>
-
-#include "setenv.h"
-#include "testutil.h"
-
-#define CONF_FILENAME "test.conf"
-#define MAP_FILENAME "test.map"
-
-//--------------------------------------------------------------------
-// Setups and Teardowns.
-//--------------------------------------------------------------------
-
-//# SETUP
-// group: generic-init
-{
- idn_result_t r;
- idn_resconf_t ctx = NULL;
-
- setenv("IDN_LOCAL_CODESET", "UTF-8", 1);
-
- r = idn_resconf_initialize();
- ASSERT_RESULT(r, idn_success);
-
- r = idn_resconf_create(&ctx);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TEARDOWN
-// group: generic-init
-{
- if (ctx != NULL)
- idn_resconf_destroy(ctx);
- remove(CONF_FILENAME);
- remove(MAP_FILENAME);
-}
-
-//# SETUP
-// group: set-defaults
-{
- r = idn_resconf_setdefaults(ctx);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TEARDOWN
-// group: set-defaults
-{
-}
-
-//# SETUP
-// group: quiet
-{
- int saved_log_level;
-
- saved_log_level = idn_log_getlevel();
- idn_log_setlevel(idn_log_level_fatal);
-}
-
-//# TEARDOWN
-// group: quiet
-{
- idn_log_setlevel(saved_log_level);
-}
-
-//# SETUP
-// group: delimitermap_ctx
-{
- idn_delimitermap_t delimitermap_ctx1 = NULL;
- idn_delimitermap_t delimitermap_ctx2 = NULL;
-}
-
-//# TEARDOWN
-// group: delimitermap_ctx
-{
- if (delimitermap_ctx1 != NULL)
- idn_delimitermap_destroy(delimitermap_ctx1);
- if (delimitermap_ctx2 != NULL)
- idn_delimitermap_destroy(delimitermap_ctx2);
-}
-
-//# SETUP
-// group: idnconverter_ctx
-{
- idn_converter_t idnconverter_ctx1 = NULL;
- idn_converter_t idnconverter_ctx2 = NULL;
-}
-
-//# TEARDOWN
-// group: idnconverter_ctx
-{
- if (idnconverter_ctx1 != NULL)
- idn_converter_destroy(idnconverter_ctx1);
- if (idnconverter_ctx2 != NULL)
- idn_converter_destroy(idnconverter_ctx2);
-}
-
-//# SETUP
-// group: localconverter_ctx
-{
- idn_converter_t localconverter_ctx1 = NULL;
- idn_converter_t localconverter_ctx2 = NULL;
-}
-
-//# TEARDOWN
-// group: localconverter_ctx
-{
- if (localconverter_ctx1 != NULL)
- idn_converter_destroy(localconverter_ctx1);
- if (localconverter_ctx2 != NULL)
- idn_converter_destroy(localconverter_ctx2);
-}
-
-//# SETUP
-// group: auxidnconverter_ctx
-{
- idn_converter_t auxidnconverter_ctx1 = NULL;
- idn_converter_t auxidnconverter_ctx2 = NULL;
-}
-
-//# TEARDOWN
-// group: auxidnconverter_ctx
-{
- if (auxidnconverter_ctx1 != NULL)
- idn_converter_destroy(auxidnconverter_ctx1);
- if (auxidnconverter_ctx2 != NULL)
- idn_converter_destroy(auxidnconverter_ctx2);
-}
-
-//# SETUP
-// group: mapselector_ctx
-{
- idn_mapselector_t mapselector_ctx1 = NULL;
- idn_mapselector_t mapselector_ctx2 = NULL;
-}
-
-//# TEARDOWN
-// group: mapselector_ctx
-{
- if (mapselector_ctx1 != NULL)
- idn_mapselector_destroy(mapselector_ctx1);
- if (mapselector_ctx2 != NULL)
- idn_mapselector_destroy(mapselector_ctx2);
-}
-
-//# SETUP
-// group: mapper_ctx
-{
- idn_mapper_t mapper_ctx1 = NULL;
- idn_mapper_t mapper_ctx2 = NULL;
-}
-
-//# TEARDOWN
-// group: mapper_ctx
-{
- if (mapper_ctx1 != NULL)
- idn_mapper_destroy(mapper_ctx1);
- if (mapper_ctx2 != NULL)
- idn_mapper_destroy(mapper_ctx2);
-}
-
-//# SETUP
-// group: normalizer_ctx
-{
- idn_normalizer_t normalizer_ctx1 = NULL;
- idn_normalizer_t normalizer_ctx2 = NULL;
-}
-
-//# TEARDOWN
-// group: normalizer_ctx
-{
- if (normalizer_ctx1 != NULL)
- idn_normalizer_destroy(normalizer_ctx1);
- if (normalizer_ctx2 != NULL)
- idn_normalizer_destroy(normalizer_ctx2);
-}
-
-//# SETUP
-// group: prohibitchecker_ctx
-{
- idn_checker_t prohibitchecker_ctx1 = NULL;
- idn_checker_t prohibitchecker_ctx2 = NULL;
-}
-
-//# TEARDOWN
-// group: prohibitchecker_ctx
-{
- if (prohibitchecker_ctx1 != NULL)
- idn_checker_destroy(prohibitchecker_ctx1);
- if (prohibitchecker_ctx2 != NULL)
- idn_checker_destroy(prohibitchecker_ctx2);
-}
-
-//# SETUP
-// group: unassignedchecker_ctx
-{
- idn_checker_t unassignedchecker_ctx1 = NULL;
- idn_checker_t unassignedchecker_ctx2 = NULL;
-}
-
-//# TEARDOWN
-// group: unassignedchecker_ctx
-{
- if (unassignedchecker_ctx1 != NULL)
- idn_checker_destroy(unassignedchecker_ctx1);
- if (unassignedchecker_ctx2 != NULL)
- idn_checker_destroy(unassignedchecker_ctx2);
-}
-
-//# SETUP
-// group: bidichecker_ctx
-{
- idn_checker_t bidichecker_ctx1 = NULL;
- idn_checker_t bidichecker_ctx2 = NULL;
-}
-
-//# TEARDOWN
-// group: bidichecker_ctx
-{
- if (bidichecker_ctx1 != NULL)
- idn_checker_destroy(bidichecker_ctx1);
- if (bidichecker_ctx2 != NULL)
- idn_checker_destroy(bidichecker_ctx2);
-}
-
-//--------------------------------------------------------------------
-// Testcases.
-//--------------------------------------------------------------------
-
-//# TESTCASE
-// title: call create() without initialization.
-//--
-// This must be the first test case.
-{
- idn_result_t r;
- idn_resconf_t ctx = NULL;
-
- r = idn_resconf_create(&ctx);
- ASSERT_RESULT(r, idn_failure);
-
- if (ctx != NULL)
- idn_resconf_destroy(ctx);
-}
-
-//# TESTCASE
-// title: call initialize() twice.
-//
-{
- idn_result_t r;
-
- r = idn_resconf_initialize();
- ASSERT_RESULT(r, idn_success);
-
- r = idn_resconf_initialize();
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TESTCASE
-// title: call create()
-{
- idn_result_t r;
- idn_resconf_t ctx;
-
- r = idn_resconf_initialize();
- ASSERT_RESULT(r, idn_success);
-
- r = idn_resconf_create(&ctx);
- ASSERT_RESULT(r, idn_success);
-
- if (ctx != NULL)
- idn_resconf_destroy(ctx);
-}
-
-//# TESTCASE
-// title: load file (idn-encoding)
-// group: generic-init
-{
- const char *idn_encoding;
-
- create_conf_file(CONF_FILENAME, 0,
- "idn-encoding Punycode",
- NULL);
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TESTCASE
-// title: load file (nameprep)
-// group: generic-init
-{
- const char *idn_encoding;
-
- create_conf_file(CONF_FILENAME, 0,
- "nameprep " IDN_NAMEPREP_CURRENT,
- NULL);
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TESTCASE
-// title: load file (idn-encoding & nameprep)
-// group: generic-init
-{
- const char *idn_encoding;
-
- create_conf_file(CONF_FILENAME, 0,
- "idn-encoding Punycode",
- "nameprep " IDN_NAMEPREP_CURRENT,
- NULL);
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TESTCASE
-// title: load file (empty)
-// group: generic-init
-{
- const char *idn_encoding;
-
- create_conf_file(CONF_FILENAME, 0,
- NULL);
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TESTCASE
-// title: load file (local-map filemap)
-// group: generic-init
-{
- const char *idn_encoding;
-
- create_conf_file(CONF_FILENAME, 0,
- "local-map .jp filemap:" MAP_FILENAME,
- NULL);
- create_conf_file(MAP_FILENAME, 0,
- "2212; FF0D",
- NULL);
-
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TESTCASE
-// title: load file (local-map nameprep)
-// group: generic-init
-{
- const char *idn_encoding;
-
- create_conf_file(CONF_FILENAME, 0,
- "local-map .jp " IDN_NAMEPREP_CURRENT,
- NULL);
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TESTCASE
-// title: set defaults
-// group: generic-init set-defaults
-{
-}
-
-//# TESTCASE
-// title: load file (no file)
-// group: generic-init
-{
- r = idn_resconf_loadfile(ctx, "no-such-file");
- ASSERT_RESULT(r, idn_nofile);
-}
-
-//# TESTCASE
-// title: load file (empty file name)
-// group: generic-init
-{
- r = idn_resconf_loadfile(ctx, "");
- ASSERT_RESULT(r, idn_nofile);
-}
-
-//# TESTCASE
-// title: load file (unknown command)
-// group: generic-init quiet
-{
- create_conf_file(CONF_FILENAME, 0,
- "unknown-command " IDN_NAMEPREP_CURRENT,
- NULL);
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_invalid_syntax);
-}
-
-//# TESTCASE
-// title: load file (no newline at the end of file)
-// group: generic-init quiet
-{
- create_conf_file(CONF_FILENAME, CONF_NO_EOF_NEWLINE,
- "nameprep " IDN_NAMEPREP_CURRENT,
- NULL);
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TESTCASE
-// title: load file (too long line)
-// group: generic-init quiet
-{
- char arg[1024];
- char *line;
-
- /* arg = "local-map . ////..." */
- memset(arg, '/', sizeof(arg));
- arg[sizeof(arg) - 1] = '\0';
- line = "local-map . ";
- memcpy(arg, line, strlen(line));
-
- create_conf_file(CONF_FILENAME, 0, arg, NULL);
-
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_invalid_syntax);
-}
-
-//# TESTCASE
-// title: load file (empty file)
-// group: generic-init
-{
- create_conf_file(CONF_FILENAME, 0, "", NULL);
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TESTCASE
-// title: load file (invalid parameter for idn-encoding)
-// group: generic-init quiet
-{
-#ifndef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- create_conf_file(CONF_FILENAME, 0,
- "idn-encoding invalid-encoding-name",
- NULL);
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_invalid_name);
-#endif
-}
-
-//# TESTCASE
-// title: load file (define idn-encoding twice)
-// group: generic-init quiet
-{
-#ifndef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- create_conf_file(CONF_FILENAME, CONF_NO_EOF_NEWLINE,
- "idn-encoding Punycode",
- "idn-encoding Punycode",
- NULL);
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_invalid_syntax);
-#endif
-}
-
-//# TESTCASE
-// title: load file (invalid parameter for nameprep)
-// group: generic-init quiet
-{
- create_conf_file(CONF_FILENAME, 0,
- "nameprep invalid-version",
- NULL);
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_invalid_name);
-}
-
-//# TESTCASE
-// title: load file (define nameprep twice)
-// group: generic-init quiet
-{
-#ifndef WITHOUT_ICONV
- SKIP_TESTCASE;
-#else
- create_conf_file(CONF_FILENAME, CONF_NO_EOF_NEWLINE,
- "nameprep " IDN_NAMEPREP_CURRENT,
- "nameprep " IDN_NAMEPREP_CURRENT,
- NULL);
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_invalid_syntax);
-#endif
-}
-
-//# TESTCASE
-// title: load file (invalid parameter for local-map)
-// group: generic-init quiet
-{
- create_conf_file(CONF_FILENAME, 0,
- "local-map .jp :",
- NULL);
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_invalid_name);
-
- create_conf_file(CONF_FILENAME, 0,
- "local-map .jp invalid:/dev/null",
- NULL);
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_invalid_name);
-
- create_conf_file(CONF_FILENAME, 0,
- "local-map .jp filemap",
- NULL);
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_nofile);
-
- create_conf_file(CONF_FILENAME, 0,
- "local-map .jp filemap:",
- NULL);
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_nofile);
-
- create_conf_file(CONF_FILENAME, 0,
- "local-map .jp filemap:no-such-file",
- NULL);
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_nofile);
-
- create_conf_file(CONF_FILENAME, 0,
- "local-map "
- "abcdefghijklmnopqrstuvwxyz0123"
- "abcdefghijklmnopqrstuvwxyz0123"
- "4567 "
- IDN_NAMEPREP_CURRENT,
- NULL);
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_invalid_name);
-}
-
-//# TESTCASE
-// title: load file (pass wrong number of parameters to idn-encoding)
-// group: generic-init quiet
-{
- create_conf_file(CONF_FILENAME, 0,
- "idn-encoding ",
- NULL);
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_invalid_syntax);
-
- create_conf_file(CONF_FILENAME, 0,
- "idn-encoding Punycode ?",
- NULL);
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_invalid_syntax);
-}
-
-//# TESTCASE
-// title: load file (pass wrong number of parameters to nameprep)
-// group: generic-init quiet
-{
- create_conf_file(CONF_FILENAME, 0,
- "nameprep ",
- NULL);
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_invalid_syntax);
-
- create_conf_file(CONF_FILENAME, 0,
- "nameprep " IDN_NAMEPREP_CURRENT " ?",
- NULL);
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_invalid_syntax);
-}
-
-//# TESTCASE
-// title: load file (pass wrong number of parameters to local-map)
-// group: generic-init quiet
-{
- create_conf_file(CONF_FILENAME, 0,
- "local-map ",
- NULL);
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_invalid_syntax);
-
- create_conf_file(CONF_FILENAME, 0,
- "local-map .jp ",
- NULL);
- r = idn_resconf_loadfile(ctx, CONF_FILENAME);
- ASSERT_RESULT(r, idn_invalid_syntax);
-}
-
-//# TESTCASE
-// title: getdelimitermap
-// group: generic-init set-defaults delimitermap_ctx
-{
- delimitermap_ctx1 = idn_resconf_getdelimitermap(ctx);
- ASSERT_PTR_NE(delimitermap_ctx1, NULL);
-}
-
-//# TESTCASE
-// title: setdelimitermap
-// group: generic-init set-defaults delimitermap_ctx
-{
- r = idn_delimitermap_create(&delimitermap_ctx1);
- ASSERT_RESULT(r, idn_success);
-
- /* set delimitermap context. */
- idn_resconf_setdelimitermap(ctx, delimitermap_ctx1);
- delimitermap_ctx2 = idn_resconf_getdelimitermap(ctx);
- ASSERT_PTR(delimitermap_ctx2, delimitermap_ctx1);
- idn_delimitermap_destroy(delimitermap_ctx2);
-
- /* set NULL as delimitermap context */
- idn_resconf_setdelimitermap(ctx, NULL);
- delimitermap_ctx2 = idn_resconf_getdelimitermap(ctx);
- ASSERT_PTR(delimitermap_ctx2, NULL);
-}
-
-//# TESTCASE
-// title: addalldelimitermapucs
-// group: generic-init set-defaults
-{
- static unsigned long v[] = {0x002C, 0x3001, 0xFF0C};
- int nv = sizeof(v) / sizeof(*v);
-
- r = idn_resconf_addalldelimitermapucs(ctx, v, nv);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TESTCASE
-// title: getidnconverter
-// group: generic-init set-defaults idnconverter_ctx
-{
- idnconverter_ctx1 = idn_resconf_getidnconverter(ctx);
- ASSERT_PTR_NE(idnconverter_ctx1, NULL);
-}
-
-//# TESTCASE
-// title: setidnconverter
-// group: generic-init set-defaults idnconverter_ctx
-{
- r = idn_converter_create("Punycode", &idnconverter_ctx1, 0);
- ASSERT_RESULT(r, idn_success);
-
- /* set idnconverter context. */
- idn_resconf_setidnconverter(ctx, idnconverter_ctx1);
- idnconverter_ctx2 = idn_resconf_getidnconverter(ctx);
- ASSERT_PTR(idnconverter_ctx2, idnconverter_ctx1);
- idn_converter_destroy(idnconverter_ctx2);
-
- /* set NULL as idnconverter context */
- idn_resconf_setidnconverter(ctx, NULL);
- idnconverter_ctx2 = idn_resconf_getidnconverter(ctx);
- ASSERT_PTR(idnconverter_ctx2, NULL);
-}
-
-//# TESTCASE
-// title: getlocalconverter
-// group: generic-init set-defaults localconverter_ctx
-{
- localconverter_ctx1 = idn_resconf_getlocalconverter(ctx);
-#ifdef WITHOUT_ICONV
- ASSERT_PTR(localconverter_ctx1, NULL);
-#else
- ASSERT_PTR_NE(localconverter_ctx1, NULL);
-#endif
-}
-
-//# TESTCASE
-// title: setlocalconverter
-// group: generic-init set-defaults localconverter_ctx
-{
- r = idn_converter_create("UTF-8", &localconverter_ctx1, 0);
- ASSERT_RESULT(r, idn_success);
-
- /* set localconverter context. */
- idn_resconf_setlocalconverter(ctx, localconverter_ctx1);
- localconverter_ctx2 = idn_resconf_getlocalconverter(ctx);
-#ifdef WITHOUT_ICONV
- ASSERT_PTR(localconverter_ctx2, NULL);
-#else
- ASSERT_PTR(localconverter_ctx2, localconverter_ctx1);
- idn_converter_destroy(localconverter_ctx2);
-#endif
-
- /* set NULL as localconverter context */
- idn_resconf_setlocalconverter(ctx, NULL);
- localconverter_ctx2 = idn_resconf_getlocalconverter(ctx);
-#ifdef WITHOUT_ICONV
- ASSERT_PTR(localconverter_ctx2, NULL);
-#else
- ASSERT_PTR_NE(localconverter_ctx2, NULL);
-#endif
-}
-
-//# TESTCASE
-// title: getauxidnconverter
-// group: generic-init set-defaults auxidnconverter_ctx
-{
- auxidnconverter_ctx1 = idn_resconf_getauxidnconverter(ctx);
- ASSERT_PTR(auxidnconverter_ctx1, NULL);
-}
-
-//# TESTCASE
-// title: setauxidnconverter
-// group: generic-init set-defaults auxidnconverter_ctx
-{
- r = idn_converter_create("Punycode", &auxidnconverter_ctx1, 0);
- ASSERT_RESULT(r, idn_success);
-
- /* set auxidnconverter context. */
- idn_resconf_setauxidnconverter(ctx, auxidnconverter_ctx1);
- auxidnconverter_ctx2 = idn_resconf_getauxidnconverter(ctx);
- ASSERT_PTR(auxidnconverter_ctx2, auxidnconverter_ctx1);
- idn_converter_destroy(auxidnconverter_ctx2);
-
- /* set NULL as auxidnconverter context */
- idn_resconf_setauxidnconverter(ctx, NULL);
- auxidnconverter_ctx2 = idn_resconf_getauxidnconverter(ctx);
- ASSERT_PTR(auxidnconverter_ctx2, NULL);
-}
-
-//# TESTCASE
-// title: getlocalmapselector
-// group: generic-init set-defaults mapselector_ctx
-{
- mapselector_ctx1 = idn_resconf_getlocalmapselector(ctx);
- ASSERT_PTR(mapselector_ctx1, NULL);
-}
-
-//# TESTCASE
-// title: setlocalmapselector
-// group: generic-init set-defaults mapselector_ctx
-{
- r = idn_mapselector_create(&mapselector_ctx1);
- ASSERT_RESULT(r, idn_success);
-
- /* set localmapselector context. */
- idn_resconf_setlocalmapselector(ctx, mapselector_ctx1);
- mapselector_ctx2 = idn_resconf_getlocalmapselector(ctx);
- ASSERT_PTR(mapselector_ctx2, mapselector_ctx1);
- idn_mapselector_destroy(mapselector_ctx2);
-
- /* set NULL as localmapselector context */
- idn_resconf_setlocalmapselector(ctx, NULL);
- mapselector_ctx2 = idn_resconf_getlocalmapselector(ctx);
- ASSERT_PTR(mapselector_ctx2, NULL);
-}
-
-//# TESTCASE
-// title: addalllocalmapselectornames
-// group: generic-init set-defaults
-{
- static const char *names[] = {
- "filemap:" MAP_FILENAME,
- "filemap:" MAP_FILENAME,
- "filemap:" MAP_FILENAME
- };
- int nnames = sizeof(names) / sizeof(*names);
-
- create_conf_file(MAP_FILENAME, 0,
- "2212; FF0D",
- NULL);
- r = idn_resconf_addalllocalmapselectornames(ctx, ".jp", names, nnames);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TESTCASE
-// title: getmapper
-// group: generic-init set-defaults mapper_ctx
-{
- mapper_ctx1 = idn_resconf_getmapper(ctx);
- ASSERT_PTR_NE(mapper_ctx1, NULL);
-}
-
-//# TESTCASE
-// title: setmapper
-// group: generic-init set-defaults mapper_ctx
-{
- r = idn_mapper_create(&mapper_ctx1);
- ASSERT_RESULT(r, idn_success);
-
- /* set mapper context. */
- idn_resconf_setmapper(ctx, mapper_ctx1);
- mapper_ctx2 = idn_resconf_getmapper(ctx);
- ASSERT_PTR(mapper_ctx2, mapper_ctx1);
- idn_mapper_destroy(mapper_ctx2);
-
- /* set NULL as mapper context */
- idn_resconf_setmapper(ctx, NULL);
- mapper_ctx2 = idn_resconf_getmapper(ctx);
- ASSERT_PTR(mapper_ctx2, NULL);
-}
-
-//# TESTCASE
-// title: addallmappernames
-// group: generic-init set-defaults
-{
- static const char *names[] = {
- IDN_NAMEPREP_CURRENT,
- IDN_NAMEPREP_CURRENT,
- IDN_NAMEPREP_CURRENT
- };
- int nnames = sizeof(names) / sizeof(*names);
-
- r = idn_resconf_addallmappernames(ctx, names, nnames);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TESTCASE
-// title: getnormalizer
-// group: generic-init set-defaults normalizer_ctx
-{
- normalizer_ctx1 = idn_resconf_getnormalizer(ctx);
- ASSERT_PTR_NE(normalizer_ctx1, NULL);
-}
-
-//# TESTCASE
-// title: setnormalizer
-// group: generic-init set-defaults normalizer_ctx
-{
- r = idn_normalizer_create(&normalizer_ctx1);
- ASSERT_RESULT(r, idn_success);
-
- /* set normalizer context. */
- idn_resconf_setnormalizer(ctx, normalizer_ctx1);
- normalizer_ctx2 = idn_resconf_getnormalizer(ctx);
- ASSERT_PTR(normalizer_ctx2, normalizer_ctx1);
- idn_normalizer_destroy(normalizer_ctx2);
-
- /* set NULL as normalizer context */
- idn_resconf_setnormalizer(ctx, NULL);
- normalizer_ctx2 = idn_resconf_getnormalizer(ctx);
- ASSERT_PTR(normalizer_ctx2, NULL);
-}
-
-//# TESTCASE
-// title: addallnormalizernames
-// group: generic-init set-defaults
-{
- static const char *names[] = {
- IDN_NAMEPREP_CURRENT,
- IDN_NAMEPREP_CURRENT,
- IDN_NAMEPREP_CURRENT
- };
- int nnames = sizeof(names) / sizeof(*names);
-
- r = idn_resconf_addallnormalizernames(ctx, names, nnames);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TESTCASE
-// title: getprohibitchecker
-// group: generic-init set-defaults prohibitchecker_ctx
-{
- prohibitchecker_ctx1 = idn_resconf_getprohibitchecker(ctx);
- ASSERT_PTR_NE(prohibitchecker_ctx1, NULL);
-}
-
-//# TESTCASE
-// title: setprohibitchecker
-// group: generic-init set-defaults prohibitchecker_ctx
-{
- r = idn_checker_create(&prohibitchecker_ctx1);
- ASSERT_RESULT(r, idn_success);
-
- /* set checker context. */
- idn_resconf_setprohibitchecker(ctx, prohibitchecker_ctx1);
- prohibitchecker_ctx2 = idn_resconf_getprohibitchecker(ctx);
- ASSERT_PTR(prohibitchecker_ctx2, prohibitchecker_ctx1);
- idn_checker_destroy(prohibitchecker_ctx2);
-
- /* set NULL as checker context */
- idn_resconf_setprohibitchecker(ctx, NULL);
- prohibitchecker_ctx2 = idn_resconf_getprohibitchecker(ctx);
- ASSERT_PTR(prohibitchecker_ctx2, NULL);
-}
-
-//# TESTCASE
-// title: addallprohibitcheckernames
-// group: generic-init set-defaults
-{
- static const char *names[] = {
- IDN_NAMEPREP_CURRENT,
- IDN_NAMEPREP_CURRENT,
- IDN_NAMEPREP_CURRENT
- };
- int nnames = sizeof(names) / sizeof(*names);
-
- r = idn_resconf_addallprohibitcheckernames(ctx, names, nnames);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TESTCASE
-// title: getunassignedchecker
-// group: generic-init set-defaults unassignedchecker_ctx
-{
- unassignedchecker_ctx1 = idn_resconf_getunassignedchecker(ctx);
- ASSERT_PTR_NE(unassignedchecker_ctx1, NULL);
-}
-
-//# TESTCASE
-// title: setunassignedchecker
-// group: generic-init set-defaults unassignedchecker_ctx
-{
- r = idn_checker_create(&unassignedchecker_ctx1);
- ASSERT_RESULT(r, idn_success);
-
- /* set checker context. */
- idn_resconf_setunassignedchecker(ctx, unassignedchecker_ctx1);
- unassignedchecker_ctx2 = idn_resconf_getunassignedchecker(ctx);
- ASSERT_PTR(unassignedchecker_ctx2, unassignedchecker_ctx1);
- idn_checker_destroy(unassignedchecker_ctx2);
-
- /* set NULL as checker context */
- idn_resconf_setunassignedchecker(ctx, NULL);
- unassignedchecker_ctx2 = idn_resconf_getunassignedchecker(ctx);
- ASSERT_PTR(unassignedchecker_ctx2, NULL);
-}
-
-//# TESTCASE
-// title: addallunassignedcheckernames
-// group: generic-init set-defaults
-{
- static const char *names[] = {
- IDN_NAMEPREP_CURRENT,
- IDN_NAMEPREP_CURRENT,
- IDN_NAMEPREP_CURRENT
- };
- int nnames = sizeof(names) / sizeof(*names);
-
- r = idn_resconf_addallunassignedcheckernames(ctx, names, nnames);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TESTCASE
-// title: getbidichecker
-// group: generic-init set-defaults bidichecker_ctx
-{
- bidichecker_ctx1 = idn_resconf_getbidichecker(ctx);
- ASSERT_PTR_NE(bidichecker_ctx1, NULL);
-}
-
-//# TESTCASE
-// title: setbidichecker
-// group: generic-init set-defaults bidichecker_ctx
-{
- r = idn_checker_create(&bidichecker_ctx1);
- ASSERT_RESULT(r, idn_success);
-
- /* set checker context. */
- idn_resconf_setbidichecker(ctx, bidichecker_ctx1);
- bidichecker_ctx2 = idn_resconf_getbidichecker(ctx);
- ASSERT_PTR(bidichecker_ctx2, bidichecker_ctx1);
- idn_checker_destroy(bidichecker_ctx2);
-
- /* set NULL as checker context */
- idn_resconf_setbidichecker(ctx, NULL);
- bidichecker_ctx2 = idn_resconf_getbidichecker(ctx);
- ASSERT_PTR(bidichecker_ctx2, NULL);
-}
-
-//# TESTCASE
-// title: addallbidicheckernames
-// group: generic-init set-defaults
-{
- static const char *names[] = {
- IDN_NAMEPREP_CURRENT,
- IDN_NAMEPREP_CURRENT,
- IDN_NAMEPREP_CURRENT
- };
- int nnames = sizeof(names) / sizeof(*names);
-
- r = idn_resconf_addallbidicheckernames(ctx, names, nnames);
- ASSERT_RESULT(r, idn_success);
-}
-
-//# TESTCASE
-// title: setnameprepversion
-// group: generic-init set-defaults
-{
- idn_resconf_setnameprepversion(ctx, IDN_NAMEPREP_CURRENT);
- ASSERT_RESULT(r, idn_success);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/setenv.c b/contrib/idn/idnkit-1.0-src/lib/tests/setenv.c
deleted file mode 100644
index 4d571e1d..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/setenv.c
+++ /dev/null
@@ -1,134 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: setenv.c,v 1.1 2003/06/04 00:27:01 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <stddef.h>
-#include <string.h>
-
-/*
- * We don't include <stdlib.h> here.
- * Also <stdlib.h> may declare `environ' and its type might be different
- * from ours.
- */
-extern char **environ;
-
-typedef struct myenv myenv_t;
-
-struct myenv {
- char *pointer;
- myenv_t *next;
- myenv_t *prev;
-};
-
-static myenv_t *myenvs = NULL;
-
-void
-myunsetenv(const char *name) {
- char **e;
- myenv_t *mye;
- size_t namelen;
- extern void free(void *);
-
- namelen = strlen(name);
- for (e = environ; *e != NULL; e++) {
- if (strncmp(*e, name, namelen) == 0 && (*e)[namelen] == '=')
- break;
- }
- if (*e == NULL)
- return;
-
- for (mye = myenvs; mye != NULL; mye = mye->next) {
- if (mye->pointer == *e) {
- if (mye->next != NULL)
- mye->next->prev = mye->prev;
- if (mye->prev != NULL)
- mye->prev->next = mye->next;
- if (mye->next == NULL && mye->prev == NULL)
- myenvs = NULL;
- free(mye);
- free(*e);
- break;
- }
- }
-
- for ( ; *e != NULL; e++)
- *e = *(e + 1);
-}
-
-#include <stdlib.h>
-
-int
-mysetenv(const char *name, const char *value, int overwrite) {
- myenv_t *mye;
- char *buffer;
- int result;
-
- if (getenv(name) != NULL && !overwrite)
- return 0;
-
- buffer = (char *) malloc(strlen(name) + strlen(value) + 2);
- if (buffer == NULL)
- return -1;
- strcpy(buffer, name);
- strcat(buffer, "=");
- strcat(buffer, value);
-
- myunsetenv(name);
-
- mye = (myenv_t *) malloc(sizeof(myenv_t));
- if (mye == NULL)
- return -1;
- mye->pointer = buffer;
- mye->next = myenvs;
- mye->prev = NULL;
- if (myenvs != NULL)
- myenvs->prev = mye;
- myenvs = mye;
-
- result = putenv(buffer);
-
- return result;
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/setenv.h b/contrib/idn/idnkit-1.0-src/lib/tests/setenv.h
deleted file mode 100644
index 81eaaa60..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/setenv.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* $Id: setenv.h,v 1.1 2003/06/04 00:27:01 marka Exp $ */
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_SETENV_H
-#define IDN_SETENV_H
-
-#include "testconfig.h"
-
-#ifndef HAVE_SETENV
-#define unsetenv(a1) myunsetenv(a1)
-#endif
-
-#ifndef HAVE_SETENV
-#define setenv(a1, a2, a3) mysetenv(a1, a2, a3)
-#endif
-
-void myunsetenv(const char *name);
-int mysetenv(const char *name, const char *value, int overwrite);
-
-#endif /* IDN_SETENV_H */
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/testsuite.c b/contrib/idn/idnkit-1.0-src/lib/tests/testsuite.c
deleted file mode 100644
index 14b202fc..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/testsuite.c
+++ /dev/null
@@ -1,578 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-#include <idn/result.h>
-#include <idn/ucs4.h>
-#include <testsuite.h>
-
-typedef struct idn_testcase *idn_testcase_t;
-
-struct idn_testcase {
- char *title;
- idn_testsuite_testproc_t proc;
-};
-
-struct idn_testsuite {
- idn_testcase_t testcases;
- int ntestcases;
- int testcase_size;
-
- int npassed;
- int nfailed;
- int nskipped;
- idn_testcase_t current_testcase;
- idn_teststatus_t current_status;
-
- idn_testsuite_msgproc_t msgproc;
- int verbose;
-};
-
-#define INITIAL_TESTCASE_SIZE 16
-#define INITIAL_SETUP_SIZE 4
-#define INITIAL_TEARDOWN_SIZE 4
-
-static void run_internal(idn_testsuite_t ctx, char *titles[]);
-static char *make_hex_string(const char *string);
-static char *make_hex_ucs4string(const unsigned long *string);
-static void put_failure_message(idn_testsuite_t ctx, const char *msg,
- const char *file, int lineno);
-static void idn_testsuite_msgtostderr(const char *msg);
-
-int
-idn_testsuite_create(idn_testsuite_t *ctxp) {
- idn_testsuite_t ctx = NULL;
-
- assert(ctxp != NULL);
-
- ctx = (idn_testsuite_t) malloc(sizeof(struct idn_testsuite));
- if (ctx == NULL)
- goto error;
-
- ctx->testcases = NULL;
- ctx->ntestcases = 0;
- ctx->testcase_size = 0;
- ctx->npassed = 0;
- ctx->nfailed = 0;
- ctx->nskipped = 0;
- ctx->current_testcase = NULL;
- ctx->current_status = idn_teststatus_pass;
- ctx->msgproc = NULL;
- ctx->verbose = 0;
-
- ctx->testcases = (idn_testcase_t) malloc(sizeof(struct idn_testcase)
- * INITIAL_TESTCASE_SIZE);
- if (ctx->testcases == NULL)
- goto error;
- ctx->testcase_size = INITIAL_TESTCASE_SIZE;
-
- *ctxp = ctx;
- return (1);
-
-error:
- if (ctx != NULL)
- free(ctx->testcases);
- free(ctx);
- return (0);
-}
-
-void
-idn_testsuite_destroy(idn_testsuite_t ctx) {
- int i;
-
- assert(ctx != NULL);
-
- for (i = 0; i < ctx->ntestcases; i++)
- free(ctx->testcases[i].title);
-
- free(ctx->testcases);
- free(ctx);
-}
-
-int
-idn_testsuite_addtestcase(idn_testsuite_t ctx, const char *title,
- idn_testsuite_testproc_t proc) {
- char *dup_title = NULL;
- idn_testcase_t new_buffer = NULL;
- idn_testcase_t new_testcase;
- int new_size;
-
- assert(ctx != NULL && title != NULL && proc != NULL);
-
- dup_title = (char *)malloc(strlen(title) + 1);
- if (dup_title == NULL)
- goto error;
- strcpy(dup_title, title);
-
- if (ctx->ntestcases == ctx->testcase_size) {
- new_size = ctx->testcase_size + INITIAL_TESTCASE_SIZE;
- new_buffer = (idn_testcase_t)
- realloc(ctx->testcases,
- sizeof(struct idn_testcase) * new_size);
- if (new_buffer == NULL)
- goto error;
- ctx->testcases = new_buffer;
- ctx->testcase_size = new_size;
- }
-
- new_testcase = ctx->testcases + ctx->ntestcases;
- new_testcase->title = dup_title;
- new_testcase->proc = proc;
- ctx->ntestcases++;
- return (1);
-
-error:
- free(dup_title);
- free(new_buffer);
- return (0);
-}
-
-int
-idn_testsuite_ntestcases(idn_testsuite_t ctx) {
- assert(ctx != NULL);
- return (ctx->ntestcases);
-}
-
-void
-idn_testsuite_setverbose(idn_testsuite_t ctx) {
- assert(ctx != NULL);
- ctx->verbose = 1;
-}
-
-void
-idn_testsuite_unsetverbose(idn_testsuite_t ctx) {
- assert(ctx != NULL);
- ctx->verbose = 0;
-}
-
-static void
-run_internal(idn_testsuite_t ctx, char *titles[]) {
- int i, j;
- int run_testcase;
- const char *status;
-
- assert(ctx != NULL);
-
- ctx->npassed = 0;
- ctx->nfailed = 0;
- ctx->nskipped = 0;
-
- for (i = 0; i < ctx->ntestcases; i++) {
- ctx->current_testcase = ctx->testcases + i;
- ctx->current_status = idn_teststatus_pass;
-
- if (titles == NULL)
- run_testcase = 1;
- else {
- run_testcase = 0;
- for (j = 0; titles[j] != NULL; j++) {
- if (strcmp(ctx->current_testcase->title,
- titles[j]) == 0) {
- run_testcase = 1;
- break;
- }
- }
- }
-
- if (!run_testcase) {
- ctx->nskipped++;
- continue;
- }
- if (ctx->verbose) {
- fprintf(stderr, "start testcase %d: %s\n", i + 1,
- ctx->testcases[i].title);
- }
- (ctx->testcases[i].proc)(ctx);
- status = idn_teststatus_tostring(ctx->current_status);
- if (ctx->verbose) {
- fprintf(stderr, "end testcase %d: %s\n", i + 1,
- status);
- }
-
- switch (ctx->current_status) {
- case idn_teststatus_pass:
- ctx->npassed++;
- break;
- case idn_teststatus_fail:
- ctx->nfailed++;
- break;
- case idn_teststatus_skip:
- ctx->nskipped++;
- break;
- }
- }
-}
-
-void
-idn_testsuite_runall(idn_testsuite_t ctx) {
- assert(ctx != NULL);
- run_internal(ctx, NULL);
-}
-
-void
-idn_testsuite_run(idn_testsuite_t ctx, char *titles[]) {
- assert(ctx != NULL && titles != NULL);
- run_internal(ctx, titles);
-}
-
-int
-idn_testsuite_npassed(idn_testsuite_t ctx) {
- assert(ctx != NULL);
- return (ctx->npassed);
-}
-
-int
-idn_testsuite_nfailed(idn_testsuite_t ctx) {
- assert(ctx != NULL);
- return (ctx->nfailed);
-}
-
-int
-idn_testsuite_nskipped(idn_testsuite_t ctx) {
- assert(ctx != NULL);
- return (ctx->nskipped);
-}
-
-idn_teststatus_t
-idn_testsuite_getstatus(idn_testsuite_t ctx) {
- assert(ctx != NULL);
- return (ctx->current_status);
-}
-
-void
-idn_testsuite_setstatus(idn_testsuite_t ctx, idn_teststatus_t status) {
- assert(ctx != NULL);
- assert(status == idn_teststatus_pass ||
- status == idn_teststatus_fail ||
- status == idn_teststatus_skip);
-
- ctx->current_status = status;
-}
-
-const char *
-idn_teststatus_tostring(idn_teststatus_t status) {
- assert(status == idn_teststatus_pass ||
- status == idn_teststatus_fail ||
- status == idn_teststatus_skip);
-
- switch (status) {
- case idn_teststatus_pass:
- return "pass";
- break;
- case idn_teststatus_fail:
- return "failed";
- break;
- case idn_teststatus_skip:
- return "skipped";
- break;
- }
-
- return "unknown";
-}
-
-void
-idn_testsuite_assert(idn_testsuite_t ctx, const char *msg,
- const char *file, int lineno) {
- assert(ctx != NULL && msg != NULL && file != NULL);
-
- if (idn_testsuite_getstatus(ctx) != idn_teststatus_pass)
- return;
- idn_testsuite_setstatus(ctx, idn_teststatus_fail);
- put_failure_message(ctx, msg, file, lineno);
-}
-
-void
-idn_testsuite_assertint(idn_testsuite_t ctx, int gotten, int expected,
- const char *file, int lineno) {
- char msg[256]; /* large enough */
-
- assert(ctx != NULL && file != NULL);
-
- if (idn_testsuite_getstatus(ctx) != idn_teststatus_pass)
- return;
- if (expected == gotten)
- return;
- idn_testsuite_setstatus(ctx, idn_teststatus_fail);
-
- sprintf(msg, "`%d' expected, but got `%d'", expected, gotten);
- put_failure_message(ctx, msg, file, lineno);
-}
-
-void
-idn_testsuite_assertstring(idn_testsuite_t ctx,
- const char *gotten, const char *expected,
- const char *file, int lineno) {
- char *expected_hex = NULL;
- char *gotten_hex = NULL;
- char *msg;
-
- assert(ctx != NULL && gotten != NULL && expected != NULL &&
- file != NULL);
-
- if (idn_testsuite_getstatus(ctx) != idn_teststatus_pass)
- return;
- if (strcmp(expected, gotten) == 0)
- return;
- idn_testsuite_setstatus(ctx, idn_teststatus_fail);
-
- msg = (char *)malloc(strlen(expected) * 4 + strlen(gotten) * 4 + 32);
- expected_hex = make_hex_string(expected);
- gotten_hex = make_hex_string(gotten);
- if (msg == NULL || expected_hex == NULL || gotten_hex == NULL) {
- msg = "";
- } else {
- sprintf(msg, "`%s' expected, but got `%s'",
- expected_hex, gotten_hex);
- }
-
- put_failure_message(ctx, msg, file, lineno);
-
- free(msg);
- free(expected_hex);
- free(gotten_hex);
-}
-
-void
-idn_testsuite_assertptr(idn_testsuite_t ctx, const void *gotten,
- const void *expected, const char *file, int lineno) {
- char *msg;
-
- assert(ctx != NULL && file != NULL);
-
- if (idn_testsuite_getstatus(ctx) != idn_teststatus_pass)
- return;
- if (expected == gotten)
- return;
- idn_testsuite_setstatus(ctx, idn_teststatus_fail);
-
- if (expected == NULL)
- msg = "NULL expected, but got non-NULL";
- else if (gotten == NULL)
- msg = "non-NULL expected, but got NULL";
- else
- msg = "expected pointer != gotten pointer";
- put_failure_message(ctx, msg, file, lineno);
-}
-
-void
-idn_testsuite_assertptrne(idn_testsuite_t ctx,
- const void *gotten, const void *unexpected,
- const char *file, int lineno) {
- char *msg;
-
- assert(ctx != NULL && file != NULL);
-
- if (idn_testsuite_getstatus(ctx) != idn_teststatus_pass)
- return;
- if (unexpected != gotten)
- return;
- idn_testsuite_setstatus(ctx, idn_teststatus_fail);
-
- if (unexpected == NULL)
- msg = "non-NULL unexpected, but got NULL";
- else if (gotten == NULL)
- msg = "non-NULL expected, but got NULL";
- else
- msg = "expected pointer == gotten pointer";
- put_failure_message(ctx, msg, file, lineno);
-}
-
-void
-idn_testsuite_assertresult(idn_testsuite_t ctx,
- idn_result_t gotten, idn_result_t expected,
- const char *file, int lineno) {
- char msg[256]; /* large enough */
-
- assert(ctx != NULL && file != NULL);
-
- if (idn_testsuite_getstatus(ctx) != idn_teststatus_pass)
- return;
- if (expected == gotten)
- return;
- idn_testsuite_setstatus(ctx, idn_teststatus_fail);
-
- sprintf(msg, "`%s' expected, but got `%s'",
- idn_result_tostring(expected), idn_result_tostring(gotten));
- put_failure_message(ctx, msg, file, lineno);
-}
-
-void
-idn_testsuite_assertucs4string(idn_testsuite_t ctx,
- const unsigned long *gotten,
- const unsigned long *expected,
- const char *file, int lineno) {
- char *expected_hex = NULL;
- char *gotten_hex = NULL;
- char *msg;
-
- assert(ctx != NULL && gotten != NULL && expected != NULL &&
- file != NULL);
-
- if (idn_testsuite_getstatus(ctx) != idn_teststatus_pass)
- return;
- if (idn_ucs4_strcmp(expected, gotten) == 0)
- return;
- idn_testsuite_setstatus(ctx, idn_teststatus_fail);
-
- msg = (char *)malloc(idn_ucs4_strlen(expected) * 8 +
- idn_ucs4_strlen(gotten) * 8 + 32);
- expected_hex = make_hex_ucs4string(expected);
- gotten_hex = make_hex_ucs4string(gotten);
- if (msg == NULL || expected_hex == NULL || gotten_hex == NULL) {
- msg = "";
- } else {
- sprintf(msg, "`%s' expected, but got `%s'",
- expected_hex, gotten_hex);
- }
-
- put_failure_message(ctx, msg, file, lineno);
-
- free(msg);
- free(expected_hex);
- free(gotten_hex);
-}
-
-static char *
-make_hex_string(const char *string) {
- static const char hex[] = {"0123456789abcdef"};
- char *hex_string;
- const char *src;
- char *dst;
-
- hex_string = (char *)malloc((strlen(string)) * 4 + 1);
- if (hex_string == NULL)
- return NULL;
-
- for (src = string, dst = hex_string; *src != '\0'; src++) {
- if (0x20 <= *src && *src <= 0x7e && *src != '\\') {
- *dst++ = *src;
- } else {
- *dst++ = '\\';
- *dst++ = 'x';
- *dst++ = hex[*(const unsigned char *)src >> 4];
- *dst++ = hex[*src & 0x0f];
- }
- }
- *dst = '\0';
-
- return hex_string;
-}
-
-#define UCS4_MAX 0x10fffffUL
-
-static char *
-make_hex_ucs4string(const unsigned long *string) {
- static const char hex[] = {"0123456789abcdef"};
- char *hex_string;
- const unsigned long *src;
- char *dst;
-
- hex_string = (char *)malloc((idn_ucs4_strlen(string)) * 8 + 1);
- if (hex_string == NULL)
- return NULL;
-
- for (src = string, dst = hex_string; *src != '\0'; src++) {
- if (0x20 <= *src && *src <= 0x7e && *src != '\\') {
- *dst++ = *src;
- } else if (*src <= UCS4_MAX) {
- *dst++ = '\\';
- *dst++ = 'u';
- if (*src >= 0x100000) {
- *dst++ = hex[(*src >> 20) & 0x0f];
- }
- if (*src >= 0x10000) {
- *dst++ = hex[(*src >> 16) & 0x0f];
- }
- *dst++ = hex[(*src >> 12) & 0x0f];
- *dst++ = hex[(*src >> 8) & 0x0f];
- *dst++ = hex[(*src >> 4) & 0x0f];
- *dst++ = hex[*src & 0x0f];
- } else {
- *dst++ = '\\';
- *dst++ = 'u';
- *dst++ = '?';
- *dst++ = '?';
- *dst++ = '?';
- *dst++ = '?';
- }
- }
- *dst = '\0';
-
- return hex_string;
-}
-
-static void
-put_failure_message(idn_testsuite_t ctx, const char *msg, const char *file,
- int lineno) {
- idn_testsuite_msgproc_t proc;
- char buffer[256];
- const char *title;
-
- proc = (ctx->msgproc == NULL) ?
- idn_testsuite_msgtostderr : ctx->msgproc;
- title = (ctx->current_testcase != NULL &&
- ctx->current_testcase->title != NULL) ?
- ctx->current_testcase->title : "anonymous";
-
- sprintf(buffer, "%.100s: In test `%.100s':", file, title);
- (*proc)(buffer);
-
- sprintf(buffer, "%.100s:%d: failed (%.100s)", file, lineno, msg);
- (*proc)(buffer);
-}
-
-
-static void
-idn_testsuite_msgtostderr(const char *msg) {
- fputs(msg, stderr);
- fputc('\n', stderr);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/testsuite.h b/contrib/idn/idnkit-1.0-src/lib/tests/testsuite.h
deleted file mode 100644
index 49cff43a..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/testsuite.h
+++ /dev/null
@@ -1,276 +0,0 @@
-/* $Id: testsuite.h,v 1.1 2003/06/04 00:27:03 marka Exp $ */
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_TESTSUITE_H
-#define IDN_TESTSUITE_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Result codes for test case.
- */
-typedef enum {
- idn_teststatus_pass,
- idn_teststatus_fail,
- idn_teststatus_skip
-} idn_teststatus_t;
-
-/*
- * Testsuite manager type (opaque).
- */
-typedef struct idn_testsuite *idn_testsuite_t;
-
-/*
- * Testcase function type.
- */
-typedef void (*idn_testsuite_testproc_t)(idn_testsuite_t ctx);
-
-/*
- * Message handler type.
- */
-typedef void (*idn_testsuite_msgproc_t)(const char *msg);
-
-/*
- * Create a testsuite manager context.
- *
- * Create an empty context and store it in '*ctxp'.
- * Return 1 on success. Return 0 if memory is exhausted.
- */
-extern int
-idn_testsuite_create(idn_testsuite_t *ctxp);
-
-/*
- * Destory the testsuite manager context.
- *
- * Destroy the context created by idn_testsuite_create(), and release
- * memory allocated to the context.
- */
-extern void
-idn_testsuite_destroy(idn_testsuite_t ctx);
-
-/*
- * Add a test case to the `group' test group.
- * Return 1 on success. Return 0 if memory is exhausted.
- */
-extern int
-idn_testsuite_addtestcase(idn_testsuite_t ctx, const char *title,
- idn_testsuite_testproc_t proc);
-
-/*
- * Return the number of test cases registered in the context.
- */
-extern int
-idn_testsuite_ntestcases(idn_testsuite_t ctx);
-
-/*
- * Run test cases registered in the context.
- */
-extern void
-idn_testsuite_runall(idn_testsuite_t ctx);
-extern void
-idn_testsuite_run(idn_testsuite_t ctx, char *titles[]);
-
-/*
- * Return the string description of `status'.
- */
-extern const char *
-idn_teststatus_tostring(idn_teststatus_t status);
-
-/*
- * Return the number of passed/failed/skipped test cases.
- */
-extern int
-idn_testsuite_npassed(idn_testsuite_t ctx);
-extern int
-idn_testsuite_nfailed(idn_testsuite_t ctx);
-extern int
-idn_testsuite_nskipped(idn_testsuite_t ctx);
-
-/*
- * Set/Get status of the test case running currently.
- *
- * These functions must be called by test case function.
- */
-extern idn_teststatus_t
-idn_testsuite_getstatus(idn_testsuite_t ctx);
-extern void
-idn_testsuite_setstatus(idn_testsuite_t ctx, idn_teststatus_t status);
-
-/*
- * Enable/Disable verbose mode.
- */
-extern void
-idn_testsuite_setverbose(idn_testsuite_t ctx);
-extern void
-idn_testsuite_unsetverbose(idn_testsuite_t ctx);
-
-/*
- * Generic assertion with message
- */
-extern void
-idn_testsuite_assert(idn_testsuite_t ctx, const char *msg,
- const char *file, int lineno);
-
-#define ASSERT_THRU(msg) \
- idn_testsuite_assert(ctx__, msg, __FILE__, __LINE__)
-#define ASSERT(msg) \
- do { \
- ASSERT_THRU(msg); \
- if (idn_testsuite_getstatus(ctx__) != idn_teststatus_pass) \
- goto EXIT__; \
- } while (0)
-
-/*
- * Assertion function and macro to compare two `int' values.
- * The assertion passes if `gotten' is equal to `expected'.
- */
-extern void
-idn_testsuite_assertint(idn_testsuite_t ctx, int gotten, int expected,
- const char *file, int lineno);
-
-#define ASSERT_INT(gotten, expected) \
- do { \
- idn_testsuite_assertint(ctx__, gotten, expected, __FILE__, __LINE__); \
- if (idn_testsuite_getstatus(ctx__) != idn_teststatus_pass) \
- goto EXIT__; \
- } while (0)
-
-/*
- * Assertion function and macro to compare two strings.
- * The assertion passes if `gotten' is lexically equal to `expected'.
- */
-extern void
-idn_testsuite_assertstring(idn_testsuite_t ctx, const char *gotten,
- const char *expected, const char *file, int lineno);
-
-#define ASSERT_STRING(gotten, expected) \
- do { \
- idn_testsuite_assertstring(ctx__, gotten, expected, __FILE__, __LINE__); \
- if (idn_testsuite_getstatus(ctx__) != idn_teststatus_pass) \
- goto EXIT__; \
- } while (0)
-
-/*
- * Assertion function and macro to compare two pointers.
- * The assertion passes if `gotten' is equal to `expected'.
- */
-extern void
-idn_testsuite_assertptr(idn_testsuite_t ctx, const void *gotten,
- const void *expected, const char *file, int lineno);
-
-#define ASSERT_PTR(gotten, expected) \
- do { \
- idn_testsuite_assertptr(ctx__, gotten, expected, __FILE__, __LINE__); \
- if (idn_testsuite_getstatus(ctx__) != idn_teststatus_pass) \
- goto EXIT__; \
- } while (0)
-
-/*
- * Assertion function and macro to compare two pointers.
- * The assertion passes if `gotten' is NOT equal to `expected'.
- */
-extern void
-idn_testsuite_assertptrne(idn_testsuite_t ctx,
- const void *gotten, const void *unexpected,
- const char *file, int lineno);
-
-#define ASSERT_PTR_NE(gotten, unexpected) \
- do { \
- idn_testsuite_assertptrne(ctx__, gotten, unexpected, __FILE__, __LINE__); \
- if (idn_testsuite_getstatus(ctx__) != idn_teststatus_pass) \
- goto EXIT__; \
- } while (0)
-
-/*
- * Assertion function and macro to compare two `idn_result_t' values.
- * The assertion passes if `gotten' is equal to `expected'.
- */
-extern void
-idn_testsuite_assertresult(idn_testsuite_t ctx,
- idn_result_t gotten, idn_result_t expected,
- const char *file, int lineno);
-
-#define ASSERT_RESULT(gotten, expected) \
- do { \
- idn_testsuite_assertresult(ctx__, gotten, expected, __FILE__, __LINE__); \
- if (idn_testsuite_getstatus(ctx__) != idn_teststatus_pass) \
- goto EXIT__; \
- } while (0)
-
-/*
- * Assertion function and macro to compare two UCS4 strings.
- * The assertion passes if `gotten' is lexically equal to `expected'.
- */
-extern void
-idn_testsuite_assertucs4string(idn_testsuite_t ctx,
- const unsigned long *gotten,
- const unsigned long *expected,
- const char *file,
- int lineno);
-
-#define ASSERT_UCS4STRING_THRU(gotten, expected) \
- idn_testsuite_assertucs4string(ctx__, gotten, expected, __FILE__, __LINE__)
-#define ASSERT_UCS4STRING(gotten, expected) \
- do { \
- ASSERT_UCS4STRING_THRU(gotten, expected); \
- if (idn_testsuite_getstatus(ctx__) != idn_teststatus_pass) \
- goto EXIT__; \
- } while (0)
-
-/*
- * Shorthands.
- */
-#define SKIP_TESTCASE \
- do { \
- idn_testsuite_setstatus(ctx__, idn_teststatus_skip); \
- goto EXIT__; \
- } while (0)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IDN_TESTSUITE_H */
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/testutil.c b/contrib/idn/idnkit-1.0-src/lib/tests/testutil.c
deleted file mode 100644
index 9fd17892..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/testutil.c
+++ /dev/null
@@ -1,83 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: testutil.c,v 1.1 2003/06/04 00:27:03 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include "testutil.h"
-
-int
-create_conf_file(const char *filename, unsigned int flags, ...) {
- FILE *file;
- va_list ap;
- const char *arg;
- int arg_index;
-
- file = fopen(filename, "w");
- if (file == NULL) {
- fprintf(stderr, "failed to create config file `%s'\n",
- filename);
- return 0;
- }
-
- arg_index = 0;
- va_start(ap, flags);
- for (;;) {
- arg = va_arg(ap, const char *);
- if (arg == NULL)
- break;
- if (arg_index++ > 0)
- fputc('\n', file);
- fputs(arg, file);
- }
- if (!(flags & CONF_NO_EOF_NEWLINE) && arg_index > 0)
- fputc('\n', file);
-
- fclose(file);
- return 1;
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/testutil.h b/contrib/idn/idnkit-1.0-src/lib/tests/testutil.h
deleted file mode 100644
index 8c2af7a8..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/testutil.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* $Id: testutil.h,v 1.1 2003/06/04 00:27:03 marka Exp $ */
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_TESTUTIL_H
-#define IDN_TESTUTIL_H 1
-
-/*
- * Option flags for create_conf_file().
- *
- * CONF_NO_EOF_NEWLINE -- Don't put newline character
- * at the end of file.
- */
-#define CONF_NO_EOF_NEWLINE 0x0001
-
-/*
- * Create a configuration file.
- *
- * Write strings specified as variable length arguments (`...') to
- * `filename'. Note that the arguments must be terminated with `NULL'.
- *
- * In the created config file, each string in the variable length
- * arguments becomes a line. In other words, newline characters are
- * added automatically.
- *
- * This function returns 1 upon success, 0 otherwise.
- */
-int
-create_conf_file(const char *filename, unsigned int flags, ...);
-
-#endif /* IDN_TESTUTIL_H */
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/testygen b/contrib/idn/idnkit-1.0-src/lib/tests/testygen
deleted file mode 100755
index 5d2f9ca5..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/testygen
+++ /dev/null
@@ -1,557 +0,0 @@
-#! /usr/bin/perl -w
-#
-# Copyright (c) 2002 Japan Network Information Center.
-# All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-#
-use FileHandle;
-use Getopt::Std;
-
-#
-# Parsing status.
-#
-my $STATUS_HEADER = 0;
-my $STATUS_HEADER_COMMENT = 1;
-my $STATUS_SEPARATOR = 2;
-my $STATUS_BODY = 3;
-my $STATUS_GLOBAL = 4;
-my $STATUS_GLOBAL_COMMENT = 5;
-my $STATUS_PREAMBLE = 6;
-
-my $LINENO_MARK = "<LINENO>";
-
-#
-# Create a new testsuite context.
-#
-sub new_testsuite {
- return {'ntests' => 0,
- 'setups' => {},
- 'teardowns' => {},
- 'tests' => [],
- 'titles' => [],
- 'preambles' => ''};
-}
-
-#
-# Read `$file' and put the result into `$testsutie'.
-#
-sub parse_file {
- my ($testsuite, $file, $lineinfo) = @_;
- my $parser = {'type' => '',
- 'group' => '',
- 'title' => '',
- 'status' => $STATUS_PREAMBLE,
- 'error' => '',
- 'file' => $file,
- 'lineno' => 0,
- 'lineinfo' => $lineinfo};
-
- my $handle = FileHandle->new($file, 'r');
- if (!defined($handle)) {
- die "failed to open the file, $!: $file\n";
- }
-
- my ($result, $line);
- for (;;) {
- $line = $handle->getline();
- last if (!defined($line));
-
- chomp($line);
- $line .= "\n";
- $parser->{lineno}++;
- $result = parse_line($testsuite, $parser, $line);
- if (!$result) {
- die sprintf("%s, at line %d\n",
- $parser->{error}, $parser->{lineno});
- }
- }
-
- if ($parser->{status} != $STATUS_GLOBAL) {
- die "unexpected EOF, at line $.\n";
- }
-
- $handle->close();
-}
-
-sub parse_line {
- my ($testsuite, $parser, $line) = @_;
- my $result = 1;
-
- if ($parser->{status} == $STATUS_HEADER) {
- if ($line =~ /^\/\/--/) {
- $parser->{status} = $STATUS_HEADER_COMMENT;
- } elsif ($line =~ /^\/\//) {
- $result = parse_header($testsuite, $parser, $line);
- } elsif ($line =~ /^\s*$/) {
- $parser->{status} = $STATUS_SEPARATOR;
- $result = parse_endheader($testsuite, $parser, $line);
- } elsif ($line =~ /^\{\s*$/) {
- $parser->{status} = $STATUS_BODY;
- $result = parse_endheader($testsuite, $parser, $line)
- && parse_startbody($testsuite, $parser, $line);
- } else {
- $parser->{error} = 'syntax error';
- $result = 0;
- }
-
- } elsif ($parser->{status} == $STATUS_HEADER_COMMENT) {
- if ($line =~ /^\/\//) {
- # nothing to be done.
- } elsif ($line =~ /^\s*$/) {
- $parser->{status} = $STATUS_SEPARATOR;
- $result = parse_endheader($testsuite, $parser, $line);
- } elsif ($line =~ /^\{\s*$/) {
- $parser->{status} = $STATUS_BODY;
- $result = parse_endheader($testsuite, $parser, $line)
- && parse_startbody($testsuite, $parser, $line);
- } else {
- $parser->{error} = 'syntax error';
- $result = 0;
- }
-
- } elsif ($parser->{status} == $STATUS_SEPARATOR) {
- if ($line =~ /^\s*$/) {
- # nothing to be done.
- } elsif ($line =~ /^\{\s*$/) {
- $parser->{status} = $STATUS_BODY;
- $result = parse_startbody($testsuite, $parser, $line);
- } else {
- $parser->{error} = 'syntax error';
- $result = 0;
- }
-
- } elsif ($parser->{status} == $STATUS_BODY) {
- if ($line =~ /^\}\s*$/) {
- $parser->{status} = $STATUS_GLOBAL;
- $result = parse_endbody($testsuite, $parser, $line);
- } else {
- $result = parse_body($testsuite, $parser, $line);
- }
-
- } elsif ($parser->{status} == $STATUS_GLOBAL) {
- if ($line =~ /^\/\/\#/) {
- $parser->{status} = $STATUS_HEADER;
- $result = parse_startheader($testsuite, $parser, $line);
- } elsif ($line =~ /^\/\/--/) {
- $parser->{status} = $STATUS_GLOBAL_COMMENT;
- } elsif ($line =~ /^\s*$/) {
- # nothing to be done.
- } else {
- $parser->{error} = 'syntax error';
- $result = 0;
- }
-
- } elsif ($parser->{status} == $STATUS_GLOBAL_COMMENT) {
- if ($line =~ /^\/\//) {
- # nothing to be done.
- } elsif ($line =~ /^\s*$/) {
- $parser->{status} = $STATUS_GLOBAL;
- } else {
- $parser->{error} = 'syntax error';
- $result = 0;
- }
-
- } elsif ($parser->{status} == $STATUS_PREAMBLE) {
- if ($line =~ /^\/\/\#/) {
- $parser->{status} = $STATUS_HEADER;
- $result = parse_startheader($testsuite, $parser, $line);
- } elsif ($line =~ /^\/\/--/) {
- $parser->{status} = $STATUS_GLOBAL_COMMENT;
- } else {
- $result = parse_preamble($testsuite, $parser, $line);
- }
-
- } else {
- $parser->{error} = 'syntax error';
- $result = 0;
- }
-
- return $result;
-}
-
-sub parse_startheader {
- my ($testsuite, $parser, $line) = @_;
-
- if ($line =~ /^\/\/\#\s*(SETUP|TEARDOWN|TESTCASE)\s*$/) {
- $parser->{type} = $1;
- $parser->{group} = '';
- $parser->{title} = '';
- } else {
- $parser->{error} = 'invalid test-header format';
- return 0;
- }
-
-
- return 1;
-}
-
-sub parse_header {
- my ($testsuite, $parser, $line) = @_;
-
- my $field = $line;
- $field =~ s/^\/\/\s*//;
- $field =~ s/^(\S+):\s*/$1:/;
- $field =~ s/\s+$//;
-
- return 1 if ($field eq '');
-
- if ($field =~ /^group:(.*)$/) {
- my $group = $1;
-
- if ($parser->{group} ne '') {
- $parser->{error} = "group defined twice in a header";
- return 0;
- }
- if ($parser->{type} eq 'SETUP') {
- if ($group !~ /^[0-9A-Za-z_\-]+$/) {
- $parser->{error} = "invalid group name";
- return 0;
- }
- if (defined($testsuite->{setups}->{$group})) {
- $parser->{error} = sprintf("SETUP \`%s' redefined", $group);
- return 0;
- }
- } elsif ($parser->{type} eq 'TEARDOWN') {
- if ($group !~ /^[0-9A-Za-z_\-]+$/) {
- $parser->{error} = "invalid group name";
- return 0;
- }
- if (defined($testsuite->{teardowns}->{$group})) {
- $parser->{error} = sprintf("TEARDOWN \`%s' redefined", $group);
- return 0;
- }
- } else {
- foreach my $i (split(/[ \t]+/, $group)) {
- if ($i !~ /^[0-9A-Za-z_\-]+$/) {
- $parser->{error} = "invalid group name \`$i'";
- return 0;
- }
- if (!defined($testsuite->{setups}->{$i})
- && !defined($testsuite->{teardowns}->{$i})) {
- $parser->{error} = sprintf("group \'%s' not defined", $i);
- return 0;
- }
- }
- }
- $parser->{group} = $group;
-
- } elsif ($field =~ /^title:(.*)$/) {
- my $title = $1;
-
- if ($parser->{title} ne '') {
- $parser->{error} = "title defined twice in a header";
- return 0;
- }
- if ($title =~ /[\x00-\x1f\x7f-\xff\"\\]/ || $title eq '') {
- $parser->{error} = "invalid title";
- return 0;
- }
- if ($parser->{type} ne 'TESTCASE') {
- $parser->{error} = sprintf("title for %s is not permitted",
- $parser->{type});
- return 0;
- }
- $parser->{title} = $title;
-
- } else {
- $parser->{error} = "invalid test-header field";
- return 0;
- }
-
- return 1;
-}
-
-sub parse_endheader {
- my ($testsuite, $parser, $line) = @_;
-
- if ($parser->{type} ne 'TESTCASE' && $parser->{group} eq '') {
- $parser->{error} = "missing \`group' in the header";
- return 0;
- }
-
- if ($parser->{type} eq 'TESTCASE' && $parser->{title} eq '') {
- $parser->{error} = "missing \`title' in the header";
- return 0;
- }
-
- return 1;
-}
-
-sub parse_startbody {
- my ($testsuite, $parser, $line) = @_;
- my $group = $parser->{group};
-
- if ($parser->{type} eq 'SETUP') {
- if ($parser->{lineinfo}) {
- $testsuite->{setups}->{$group} =
- generate_line_info($parser->{lineno} + 1, $parser->{file});
- }
- } elsif ($parser->{type} eq 'TEARDOWN') {
- if ($parser->{lineinfo}) {
- $testsuite->{teardowns}->{$group} =
- generate_line_info($parser->{lineno} + 1, $parser->{file});
- }
- } else {
- $testsuite->{ntests}++;
- push(@{$testsuite->{tests}}, '');
- push(@{$testsuite->{titles}}, $parser->{title});
-
- $testsuite->{tests}->[-1] .= "\n";
- $testsuite->{tests}->[-1] .= "$LINENO_MARK\n";
- $testsuite->{tests}->[-1] .=
- sprintf("static void\ntestcase\%d(idn_testsuite_t ctx__) {\n",
- $testsuite->{ntests});
-
- my (@group_names) = split(/[ \t]+/, $group);
- for (my $i = 0; $i < @group_names; $i++) {
- if (defined($testsuite->{setups}->{$group_names[$i]})) {
- $testsuite->{tests}->[-1] .= "\t\{\n";
- $testsuite->{tests}->[-1] .= "#undef EXIT__\n";
- $testsuite->{tests}->[-1] .= "#define EXIT__ exit${i}__\n";
- $testsuite->{tests}->[-1] .=
- $testsuite->{setups}->{$group_names[$i]};
- }
- }
- $testsuite->{tests}->[-1] .= "$LINENO_MARK\n";
- $testsuite->{tests}->[-1] .= "\t\{\n";
- $testsuite->{tests}->[-1] .= "#undef EXIT__\n";
- $testsuite->{tests}->[-1] .= "#define EXIT__ exit__\n";
- if ($parser->{lineinfo}) {
- $testsuite->{tests}->[-1] .=
- generate_line_info($parser->{lineno} + 1, $parser->{file});
- }
- }
-
- return 1;
-}
-
-sub parse_body {
- my ($testsuite, $parser, $line) = @_;
- my ($group) = $parser->{group};
-
- if ($parser->{type} eq 'SETUP') {
- $testsuite->{setups}->{$group} .= $line;
- } elsif ($parser->{type} eq 'TEARDOWN') {
- $testsuite->{teardowns}->{$group} .= $line;
- } else {
- $testsuite->{tests}->[-1] .= $line;
- }
-
- return 1;
-}
-
-sub parse_endbody {
- my ($testsuite, $parser, $line) = @_;
- my ($group) = $parser->{group};
-
- if ($parser->{type} eq 'TESTCASE') {
- $testsuite->{tests}->[-1] .= "$LINENO_MARK\n";
- $testsuite->{tests}->[-1] .= "\t\}\n";
- $testsuite->{tests}->[-1] .= " exit__:\n";
- $testsuite->{tests}->[-1] .= "\t;\n";
-
- my (@group_names) = split(/[ \t]+/, $group);
- for (my $i = @group_names - 1; $i >= 0; $i--) {
- $testsuite->{tests}->[-1] .= " exit${i}__:\n";
- $testsuite->{tests}->[-1] .= "\t;\n";
- if (defined($testsuite->{teardowns}->{$group_names[$i]})) {
- $testsuite->{tests}->[-1] .=
- $testsuite->{teardowns}->{$group_names[$i]};
- }
- $testsuite->{tests}->[-1] .= "$LINENO_MARK\n";
- $testsuite->{tests}->[-1] .= "\t\}\n";
- }
-
- $testsuite->{tests}->[-1] .= "}\n";
- }
-
- return 1;
-}
-
-sub parse_preamble {
- my ($testsuite, $parser, $line) = @_;
-
- if ($parser->{lineinfo} && $parser->{lineno} == 1) {
- $testsuite->{preambles} .= generate_line_info(1, $parser->{file});
- }
- $testsuite->{preambles} .= $line;
- return 1;
-}
-
-sub generate_line_info {
- my ($lineno, $file) = @_;
- return "#line $lineno \"$file\"\n";
-}
-
-#
-# Output `$testsuite' as source codes of C.
-#
-sub output_tests {
- my ($testsuite, $file, $lineinfo) = @_;
-
- my $generator = {
- 'file' => $file,
- 'lineno' => 0
- };
-
- my $handle = FileHandle->new($file, 'w');
- if (!defined($handle)) {
- die "failed to open the file, $!: $file\n";
- }
-
- my $preamble_header =
- "/* This file is automatically generated by testygen. */\n\n"
- . "#define TESTYGEN 1\n"
- . "\n";
- output_lines($preamble_header, $generator, $handle, $lineinfo);
-
- output_lines($testsuite->{preambles}, $generator, $handle, $lineinfo);
-
- my $preamble_footer =
- "\n"
- . "$LINENO_MARK\n"
- . "#include \"testsuite.h\"\n"
- . "\n";
- output_lines($preamble_footer, $generator, $handle, $lineinfo);
-
-
- for (my $i = 0; $i < $testsuite->{ntests}; $i++) {
- output_lines($testsuite->{tests}->[$i], $generator, $handle,
- $lineinfo);
- }
-
- my $main_header =
- "\n"
- . "$LINENO_MARK\n"
- . "int\n"
- . "main(int argc, char *argv[]) {\n"
- . "\tidn_testsuite_t ctx;\n"
- . "\tconst char *title;\n"
- . "\n"
- . "\tidn_testsuite_create(&ctx);\n";
- output_lines($main_header, $generator, $handle, $lineinfo);
-
- for (my $i = 0; $i < $testsuite->{ntests}; $i++) {
- my $title = $testsuite->{titles}->[$i];
- my $proc = sprintf("testcase%d", $i + 1);
- output_lines("\tidn_testsuite_addtestcase(ctx, \"$title\", $proc);\n",
- $generator, $handle, $lineinfo);
- }
-
- my $main_footer =
- "\n"
- . "\tif (argc > 1 && strcmp(argv[1], \"-v\") == 0) {\n"
- . "\t idn_testsuite_setverbose(ctx);\n"
- . "\t argc--;\n"
- . "\t argv++;\n"
- . "\t}\n"
- . "\tif (argc == 1)\n"
- . "\t idn_testsuite_runall(ctx);\n"
- . "\telse\n"
- . "\t idn_testsuite_run(ctx, argv + 1);\n"
- . "\n"
- . "\tprintf(\"passed=%d, failed=%d, total=%d\\n\",\n"
- . "\t idn_testsuite_npassed(ctx),\n"
- . "\t idn_testsuite_nfailed(ctx),\n"
- . "\t idn_testsuite_ntestcases(ctx) - idn_testsuite_nskipped(ctx));\n"
- . "\n"
- . "\tidn_testsuite_destroy(ctx);\n"
- . "\treturn (0);\n"
- . "\}\n";
- output_lines($main_footer, $generator, $handle, $lineinfo);
-
- $handle->close();
-}
-
-sub output_lines {
- my ($lines, $generator, $handle, $lineinfo) = @_;
- my ($line);
-
- chomp($lines);
- $lines .= "\n";
-
- while ($lines ne '') {
- $lines =~ s/^([^\n]*)\n//;
- $line = $1;
- $generator->{lineno}++;
- if ($line eq $LINENO_MARK) {
- if ($lineinfo) {
- $handle->printf("#line %d \"%s\"\n", $generator->{lineno} + 1,
- $generator->{file});
- }
- } else {
- $handle->print("$line\n");
- }
- }
-}
-
-sub output_usage {
- warn "$0: [-o output-file] input-file\n";
-}
-
-#
-# main.
-#
-my (%options);
-
-if (!getopts('Lo:', \%options)) {
- output_usage;
- exit(1);
-}
-if (@ARGV != 1) {
- output_usage;
- exit(1);
-}
-
-my ($in_file) = $ARGV[0];
-my ($out_file);
-if (!defined($options{o})) {
- $out_file = $in_file;
- $out_file .= '\.tsy' if ($out_file !~ /\.tsy$/);
- $out_file =~ s/\.tsy$/\.c/;
-} else {
- $out_file = $options{o};
-}
-
-my $testsuite = new_testsuite();
-parse_file($testsuite, $in_file, !$options{L});
-output_tests($testsuite, $out_file, !$options{L});
-
-exit(0);
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/ucs4.tsy b/contrib/idn/idnkit-1.0-src/lib/tests/ucs4.tsy
deleted file mode 100644
index ba33db3c..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/ucs4.tsy
+++ /dev/null
@@ -1,257 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: ucs4.tsy,v 1.1 2003/06/04 00:27:04 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <idn/ucs4.h>
-#include <idn/log.h>
-#include "testutil.h"
-
-/*
- * Sample UTF8 and UCS4 strings.
- */
-static const char *utf8_string =
- "\x7f" /* 0x0000007f */
- "\xdf\xbf" /* 0x000007ff */
- "\xef\xbf\xbf" /* 0x0000ffff */
- "\xf7\xbf\xbf\xbf" /* 0x001fffff */
- "\xfb\xbf\xbf\xbf\xbf" /* 0x03ffffff */
- "\xfd\xbf\xbf\xbf\xbf\xbf"; /* 0x7fffffff */
-
-static const unsigned long ucs4_string[] = {
- 0x0000007f,
- 0x000007ff,
- 0x0000ffff,
- 0x001fffff,
- 0x03ffffff,
- 0x7fffffff,
- 0x00000000
-};
-
-//--------------------------------------------------------------------
-// Setups and Teardowns.
-//--------------------------------------------------------------------
-
-//# SETUP
-// group: utf8-init
-{
- unsigned long to[256];
- size_t tolen = 256;
- idn_result_t r;
-}
-
-//# SETUP
-// group: ucs4-init
-{
- char to[256];
- size_t tolen = 256;
- idn_result_t r;
-}
-
-//# SETUP
-// group: quiet
-{
- int saved_log_level;
-
- saved_log_level = idn_log_getlevel();
- idn_log_setlevel(idn_log_level_fatal);
-}
-
-//# TEARDOWN
-// group: quiet
-{
- idn_log_setlevel(saved_log_level);
-}
-
-//--------------------------------------------------------------------
-// Testcases.
-//--------------------------------------------------------------------
-
-//# TESTCASE
-// title: call utf8toucs4()
-// group: utf8-init
-{
- r = idn_ucs4_utf8toucs4(utf8_string, to, tolen);
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, ucs4_string);
-}
-
-//# TESTCASE
-// title: call ucs4toutf8()
-// group: ucs4-init
-{
- r = idn_ucs4_ucs4toutf8(ucs4_string, to, tolen);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, utf8_string);
-}
-
-//# TESTCASE
-// title: call utf8toucs4() with empty from
-// group: utf8-init
-{
- static unsigned long empty_ucs4_string[] = {0};
-
- r = idn_ucs4_utf8toucs4("", to, tolen);
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, empty_ucs4_string);
-}
-
-//# TESTCASE
-// title: call ucs4toutf8() with empty from
-// group: ucs4-init
-{
- static unsigned long empty_ucs4_string[] = {0};
-
- r = idn_ucs4_ucs4toutf8(empty_ucs4_string, to, tolen);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, "");
-}
-
-//# TESTCASE
-// title: call utf8toucs4() with broken string
-// group: utf8-init quiet
-{
- /* "\xfe" as the 1st byte is out of range. */
- r = idn_ucs4_utf8toucs4("\xfe\xbf\xbf\xbf\xbf\xbf\xbf", to, tolen);
- ASSERT_RESULT(r, idn_invalid_encoding);
-
- /* "\x7f" as the 2nd byte is out of range. */
- r = idn_ucs4_utf8toucs4("\xdf\x7f", to, tolen);
- ASSERT_RESULT(r, idn_invalid_encoding);
-
- /* "\xc0" as the 2nd byte is out of range. */
- r = idn_ucs4_utf8toucs4("\xdf\xc0", to, tolen);
- ASSERT_RESULT(r, idn_invalid_encoding);
-
- /* "\x7f" as the 3rd byte is out of range. */
- r = idn_ucs4_utf8toucs4("\xef\xbf\x7f", to, tolen);
- ASSERT_RESULT(r, idn_invalid_encoding);
-
- /* "\xc0" as the 3rd byte is out of range. */
- r = idn_ucs4_utf8toucs4("\xef\xbf\xc0", to, tolen);
- ASSERT_RESULT(r, idn_invalid_encoding);
-
- /* "\x7f" as the 4th byte is out of range. */
- r = idn_ucs4_utf8toucs4("\xf7\xbf\xbf\x7f", to, tolen);
- ASSERT_RESULT(r, idn_invalid_encoding);
-
- /* "\xc0" as the 4th byte is out of range. */
- r = idn_ucs4_utf8toucs4("\xf7\xbf\xbf\xc0", to, tolen);
- ASSERT_RESULT(r, idn_invalid_encoding);
-
- /* "\x7f" as the 5th byte is out of range. */
- r = idn_ucs4_utf8toucs4("\xfb\xbf\xbf\xbf\x7f", to, tolen);
- ASSERT_RESULT(r, idn_invalid_encoding);
-
- /* "\xc0" as the 5th byte is out of range. */
- r = idn_ucs4_utf8toucs4("\xfb\xbf\xbf\xbf\xc0", to, tolen);
- ASSERT_RESULT(r, idn_invalid_encoding);
-
- /* "\x7f" as the 6th byte is out of range. */
- r = idn_ucs4_utf8toucs4("\xfd\xbf\xbf\xbf\xbf\x7f", to, tolen);
- ASSERT_RESULT(r, idn_invalid_encoding);
-
- /* "\xc0" as the 6th byte is out of range. */
- r = idn_ucs4_utf8toucs4("\xfd\xbf\xbf\xbf\xbf\xc0", to, tolen);
- ASSERT_RESULT(r, idn_invalid_encoding);
-
- /* `from' contains surrogate pair */
- r = idn_ucs4_utf8toucs4("\xed\xa0\x80\xed\xbf\xbf", to, tolen);
- ASSERT_RESULT(r, idn_invalid_encoding);
-}
-
-//# TESTCASE
-// title: call ucs4toutf8() with broken string
-// group: ucs4-init quiet
-{
- static unsigned long invalid_ucs4_string0[] = {0x80000000, 0};
- static unsigned long invalid_ucs4_string1[] = {0xd800, 0xdfff, 0};
-
- /* 0x80000000 is out of range */
- r = idn_ucs4_ucs4toutf8(invalid_ucs4_string0, to, tolen);
- ASSERT_RESULT(r, idn_invalid_encoding);
-
- /* `from' contains surrogate pair */
- r = idn_ucs4_ucs4toutf8(invalid_ucs4_string1, to, tolen);
- ASSERT_RESULT(r, idn_invalid_encoding);
-}
-
-//# TESTCASE
-// title: buffer overrun test for utf8toucs4()
-// group: utf8-init
-{
- r = idn_ucs4_utf8toucs4(utf8_string, to,
- idn_ucs4_strlen(ucs4_string) + 1);
- ASSERT_RESULT(r, idn_success);
- ASSERT_UCS4STRING(to, ucs4_string);
-
- r = idn_ucs4_utf8toucs4(utf8_string, to,
- idn_ucs4_strlen(ucs4_string));
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- r = idn_ucs4_utf8toucs4(utf8_string, to, 0);
- ASSERT_RESULT(r, idn_buffer_overflow);
-}
-
-//# TESTCASE
-// title: buffer overrun test for ucs4toutf8()
-// group: ucs4-init
-{
- r = idn_ucs4_ucs4toutf8(ucs4_string, to, strlen(utf8_string) + 1);
- ASSERT_RESULT(r, idn_success);
- ASSERT_STRING(to, utf8_string);
-
- r = idn_ucs4_ucs4toutf8(ucs4_string, to, strlen(utf8_string));
- ASSERT_RESULT(r, idn_buffer_overflow);
-
- r = idn_ucs4_ucs4toutf8(ucs4_string, to, 0);
- ASSERT_RESULT(r, idn_buffer_overflow);
-}
-
diff --git a/contrib/idn/idnkit-1.0-src/lib/tests/utffilter b/contrib/idn/idnkit-1.0-src/lib/tests/utffilter
deleted file mode 100755
index cebd4dce..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/tests/utffilter
+++ /dev/null
@@ -1,82 +0,0 @@
-#! /usr/bin/perl -wp
-#
-# Copyright (c) 2002 Japan Network Information Center.
-# All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-#
-
-sub to_utf8 ($) {
- my ($utf32) = hex($_[0]);
- my ($mask, $length);
-
- if ($utf32 < 0x80) {
- $mask = 0;
- $length = 1;
- } elsif ($utf32 < 0x800) {
- $mask = 0xc0;
- $length = 2;
- } elsif ($utf32 < 0x10000) {
- $mask = 0xe0;
- $length = 3;
- } elsif ($utf32 < 0x200000) {
- $mask = 0xf0;
- $length = 4;
- } elsif ($utf32 < 0x4000000) {
- $mask = 0xf8;
- $length = 5;
- } elsif ($utf32 < 0x80000000) {
- $mask = 0xfc;
- $length = 6;
- } else {
- return '';
- }
-
- my ($result, $offset);
- $offset = 6 * ($length - 1);
- $result .= sprintf('\\x%02x', ($utf32 >> $offset) | $mask);
- while ($offset > 0) {
- $offset -= 6;
- $result .= sprintf('\\x%02x', (($utf32 >> $offset) & 0x3f) | 0x80);
- }
-
- return $result;
-}
-
-s/<U\+([0-9A-Fa-f]+)>/&to_utf8($1)/eg;
diff --git a/contrib/idn/idnkit-1.0-src/lib/ucs4.c b/contrib/idn/idnkit-1.0-src/lib/ucs4.c
deleted file mode 100644
index 1d7aea14..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/ucs4.c
+++ /dev/null
@@ -1,461 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: ucs4.c,v 1.1 2003/06/04 00:26:14 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2001 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <idn/assert.h>
-#include <idn/result.h>
-#include <idn/logmacro.h>
-#include <idn/util.h>
-#include <idn/ucs4.h>
-#include <idn/debug.h>
-
-/*
- * Unicode surrogate pair.
- */
-#define IS_SURROGATE_HIGH(v) (0xd800 <= (v) && (v) <= 0xdbff)
-#define IS_SURROGATE_LOW(v) (0xdc00 <= (v) && (v) <= 0xdfff)
-#define SURROGATE_HIGH(v) (SURROGATE_H_OFF + (((v) - 0x10000) >> 10))
-#define SURROGATE_LOW(v) (SURROGATE_L_OFF + ((v) & 0x3ff))
-#define SURROGATE_BASE 0x10000
-#define SURROGATE_H_OFF 0xd800
-#define SURROGATE_L_OFF 0xdc00
-#define COMBINE_SURROGATE(h, l) \
- (SURROGATE_BASE + (((h)-SURROGATE_H_OFF)<<10) + ((l)-SURROGATE_L_OFF))
-
-/*
- * ASCII ctype macros.
- * Note that these macros evaluate the argument multiple times. Be careful.
- */
-#define ASCII_TOUPPER(c) \
- (('a' <= (c) && (c) <= 'z') ? ((c) - 'a' + 'A') : (c))
-#define ASCII_TOLOWER(c) \
- (('A' <= (c) && (c) <= 'Z') ? ((c) - 'A' + 'a') : (c))
-
-idn_result_t
-idn_ucs4_ucs4toutf16(const unsigned long *ucs4, unsigned short *utf16,
- size_t tolen) {
- unsigned short *utf16p = utf16;
- unsigned long v;
- idn_result_t r;
-
- TRACE(("idn_ucs4_ucs4toutf16(ucs4=\"%s\", tolen=%d)\n",
- idn__debug_ucs4xstring(ucs4, 50), (int)tolen));
-
- while (*ucs4 != '\0') {
- v = *ucs4++;
-
- if (IS_SURROGATE_LOW(v) || IS_SURROGATE_HIGH(v)) {
- WARNING(("idn_ucs4_ucs4toutf16: UCS4 string contains "
- "surrogate pair\n"));
- r = idn_invalid_encoding;
- goto ret;
- } else if (v > 0xffff) {
- /* Convert to surrogate pair */
- if (v >= 0x110000) {
- r = idn_invalid_encoding;
- goto ret;
- }
- if (tolen < 2) {
- r = idn_buffer_overflow;
- goto ret;
- }
- *utf16p++ = SURROGATE_HIGH(v);
- *utf16p++ = SURROGATE_LOW(v);
- tolen -= 2;
- } else {
- if (tolen < 1) {
- r = idn_buffer_overflow;
- goto ret;
- }
- *utf16p++ = v;
- tolen--;
- }
- }
-
- if (tolen < 1) {
- r = idn_buffer_overflow;
- goto ret;
- }
- *utf16p = '\0';
-
- r = idn_success;
-ret:
- if (r == idn_success) {
- TRACE(("idn_ucs4_ucs4toutf16(): success (utf16=\"%s\")\n",
- idn__debug_utf16xstring(utf16, 50)));
- } else {
- TRACE(("idn_ucs4_ucs4toutf16(): %s\n",
- idn_result_tostring(r)));
- }
- return (r);
-}
-
-idn_result_t
-idn_ucs4_utf16toucs4(const unsigned short *utf16, unsigned long *ucs4,
- size_t tolen) {
- unsigned long *ucs4p = ucs4;
- unsigned short v0, v1;
- idn_result_t r;
-
- TRACE(("idn_ucs4_utf16toucs4(utf16=\"%s\", tolen=%d)\n",
- idn__debug_utf16xstring(utf16, 50), (int)tolen));
-
- while (*utf16 != '\0') {
- v0 = *utf16;
-
- if (tolen < 1) {
- r = idn_buffer_overflow;
- goto ret;
- }
-
- if (IS_SURROGATE_HIGH(v0)) {
- v1 = *(utf16 + 1);
- if (!IS_SURROGATE_LOW(v1)) {
- WARNING(("idn_ucs4_utf16toucs4: "
- "corrupted surrogate pair\n"));
- r = idn_invalid_encoding;
- goto ret;
- }
- *ucs4p++ = COMBINE_SURROGATE(v0, v1);
- tolen--;
- utf16 += 2;
-
- } else {
- *ucs4p++ = v0;
- tolen--;
- utf16++;
-
- }
- }
-
- if (tolen < 1) {
- r = idn_buffer_overflow;
- goto ret;
- }
- *ucs4p = '\0';
-
- r = idn_success;
-ret:
- if (r == idn_success) {
- TRACE(("idn_ucs4_utf16toucs4(): success (ucs4=\"%s\")\n",
- idn__debug_ucs4xstring(ucs4, 50)));
- } else {
- TRACE(("idn_ucs4_utf16toucs4(): %s\n",
- idn_result_tostring(r)));
- }
- return (r);
-}
-
-idn_result_t
-idn_ucs4_utf8toucs4(const char *utf8, unsigned long *ucs4, size_t tolen) {
- const unsigned char *utf8p = (const unsigned char *)utf8;
- unsigned long *ucs4p = ucs4;
- unsigned long v, min;
- unsigned char c;
- int width;
- int i;
- idn_result_t r;
-
- TRACE(("idn_ucs4_utf8toucs4(utf8=\"%s\", tolen=%d)\n",
- idn__debug_xstring(utf8, 50), (int)tolen));
-
- while(*utf8p != '\0') {
- c = *utf8p++;
- if (c < 0x80) {
- v = c;
- min = 0;
- width = 1;
- } else if (c < 0xc0) {
- WARNING(("idn_ucs4_utf8toucs4: invalid character\n"));
- r = idn_invalid_encoding;
- goto ret;
- } else if (c < 0xe0) {
- v = c & 0x1f;
- min = 0x80;
- width = 2;
- } else if (c < 0xf0) {
- v = c & 0x0f;
- min = 0x800;
- width = 3;
- } else if (c < 0xf8) {
- v = c & 0x07;
- min = 0x10000;
- width = 4;
- } else if (c < 0xfc) {
- v = c & 0x03;
- min = 0x200000;
- width = 5;
- } else if (c < 0xfe) {
- v = c & 0x01;
- min = 0x4000000;
- width = 6;
- } else {
- WARNING(("idn_ucs4_utf8toucs4: invalid character\n"));
- r = idn_invalid_encoding;
- goto ret;
- }
-
- for (i = width - 1; i > 0; i--) {
- c = *utf8p++;
- if (c < 0x80 || 0xc0 <= c) {
- WARNING(("idn_ucs4_utf8toucs4: "
- "invalid character\n"));
- r = idn_invalid_encoding;
- goto ret;
- }
- v = (v << 6) | (c & 0x3f);
- }
-
- if (v < min) {
- WARNING(("idn_ucs4_utf8toucs4: invalid character\n"));
- r = idn_invalid_encoding;
- goto ret;
- }
- if (IS_SURROGATE_LOW(v) || IS_SURROGATE_HIGH(v)) {
- WARNING(("idn_ucs4_utf8toucs4: UTF-8 string contains "
- "surrogate pair\n"));
- r = idn_invalid_encoding;
- goto ret;
- }
- if (tolen < 1) {
- r = idn_buffer_overflow;
- goto ret;
- }
- tolen--;
- *ucs4p++ = v;
- }
-
- if (tolen < 1) {
- r = idn_buffer_overflow;
- goto ret;
- }
- *ucs4p = '\0';
-
- r = idn_success;
-ret:
- if (r == idn_success) {
- TRACE(("idn_ucs4_utf8toucs4(): success (ucs4=\"%s\")\n",
- idn__debug_ucs4xstring(ucs4, 50)));
- } else {
- TRACE(("idn_ucs4_utf8toucs4(): %s\n",
- idn_result_tostring(r)));
- }
- return (r);
-}
-
-idn_result_t
-idn_ucs4_ucs4toutf8(const unsigned long *ucs4, char *utf8, size_t tolen) {
- unsigned char *utf8p = (unsigned char *)utf8;
- unsigned long v;
- int width;
- int mask;
- int offset;
- idn_result_t r;
-
- TRACE(("idn_ucs4_ucs4toutf8(ucs4=\"%s\", tolen=%d)\n",
- idn__debug_ucs4xstring(ucs4, 50), (int)tolen));
-
- while (*ucs4 != '\0') {
- v = *ucs4++;
- if (IS_SURROGATE_LOW(v) || IS_SURROGATE_HIGH(v)) {
- WARNING(("idn_ucs4_ucs4toutf8: UCS4 string contains "
- "surrogate pair\n"));
- r = idn_invalid_encoding;
- goto ret;
- }
- if (v < 0x80) {
- mask = 0;
- width = 1;
- } else if (v < 0x800) {
- mask = 0xc0;
- width = 2;
- } else if (v < 0x10000) {
- mask = 0xe0;
- width = 3;
- } else if (v < 0x200000) {
- mask = 0xf0;
- width = 4;
- } else if (v < 0x4000000) {
- mask = 0xf8;
- width = 5;
- } else if (v < 0x80000000) {
- mask = 0xfc;
- width = 6;
- } else {
- WARNING(("idn_ucs4_ucs4toutf8: invalid character\n"));
- r = idn_invalid_encoding;
- goto ret;
- }
-
- if (tolen < width) {
- r = idn_buffer_overflow;
- goto ret;
- }
- offset = 6 * (width - 1);
- *utf8p++ = (v >> offset) | mask;
- mask = 0x80;
- while (offset > 0) {
- offset -= 6;
- *utf8p++ = ((v >> offset) & 0x3f) | mask;
- }
- tolen -= width;
- }
-
- if (tolen < 1) {
- r = idn_buffer_overflow;
- goto ret;
- }
- *utf8p = '\0';
-
- r = idn_success;
-ret:
- if (r == idn_success) {
- TRACE(("idn_ucs4_ucs4toutf8(): success (utf8=\"%s\")\n",
- idn__debug_xstring(utf8, 50)));
- } else {
- TRACE(("idn_ucs4_ucs4toutf8(): %s\n",
- idn_result_tostring(r)));
- }
- return (r);
-}
-
-size_t
-idn_ucs4_strlen(const unsigned long *ucs4) {
- size_t len;
-
- for (len = 0; *ucs4 != '\0'; ucs4++, len++)
- /* nothing to do */ ;
-
- return (len);
-}
-
-unsigned long *
-idn_ucs4_strcpy(unsigned long *to, const unsigned long *from) {
- unsigned long *result = to;
-
- while (*from != '\0')
- *to++ = *from++;
- *to = '\0';
-
- return (result);
-}
-
-unsigned long *
-idn_ucs4_strcat(unsigned long *to, const unsigned long *from) {
- unsigned long *result = to;
-
- while (*to != '\0')
- to++;
-
- while (*from != '\0')
- *to++ = *from++;
- *to = '\0';
-
- return (result);
-}
-
-int
-idn_ucs4_strcmp(const unsigned long *str1, const unsigned long *str2) {
- while (*str1 != '\0') {
- if (*str1 > *str2)
- return (1);
- else if (*str1 < *str2)
- return (-1);
- str1++;
- str2++;
- }
-
- if (*str1 > *str2)
- return (1);
- else if (*str1 < *str2)
- return (-1);
-
- return (0);
-}
-
-int
-idn_ucs4_strcasecmp(const unsigned long *str1, const unsigned long *str2) {
- unsigned long c1, c2;
-
- while (*str1 != '\0') {
- c1 = ASCII_TOLOWER(*str1);
- c2 = ASCII_TOLOWER(*str2);
- if (c1 > c2)
- return (1);
- else if (c1 < c2)
- return (-1);
- str1++;
- str2++;
- }
-
- c1 = ASCII_TOLOWER(*str1);
- c2 = ASCII_TOLOWER(*str2);
- if (c1 > c2)
- return (1);
- else if (c1 < c2)
- return (-1);
-
- return (0);
-}
-
-
-unsigned long *
-idn_ucs4_strdup(const unsigned long *str) {
- size_t length = idn_ucs4_strlen(str);
- unsigned long *dupstr;
-
- dupstr = (unsigned long *)malloc(sizeof(*str) * (length + 1));
- if (dupstr == NULL)
- return NULL;
- memcpy(dupstr, str, sizeof(*str) * (length + 1));
-
- return dupstr;
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/ucsmap.c b/contrib/idn/idnkit-1.0-src/lib/ucsmap.c
deleted file mode 100644
index 81e58a9c..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/ucsmap.c
+++ /dev/null
@@ -1,380 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: ucsmap.c,v 1.1 2003/06/04 00:26:14 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2001 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <idn/result.h>
-#include <idn/assert.h>
-#include <idn/log.h>
-#include <idn/logmacro.h>
-#include <idn/ucsmap.h>
-
-#define INIT_SIZE 50
-#define DEFAULT_BUF_SIZE 500
-#define UCSMAP_HASH_SIZE 103
-#define MAX_MAPLEN 0xffff
-
-/*
- * This module implements UCS 1-to-N mapping.
- * To speed up mapping table lookup, a combination of hash and
- * binary search is used.
- */
-
-/*
- * Mapping entry.
- * Entries are sorted by its hash index and code point.
- */
-typedef struct {
- short hidx; /* hash index */
- unsigned short len; /* length of mapped sequence */
- unsigned long ucs; /* code point to be mapped */
- unsigned long *map; /* mapped sequence of code points */
-} ucsmap_entry_t;
-
-/*
- * Hash table entry.
- * Since the entries pointed by ucsmap_hash_t.entry are sorted,
- * binary search can be used.
- */
-typedef struct {
- ucsmap_entry_t *entry; /* sorted by code point */
- int n; /* length of 'entry' */
-} ucsmap_hash_t;
-
-/*
- * UCS character buffer for storing target character sequence.
- */
-typedef struct ucsmap_buf {
- struct ucsmap_buf *next;
- unsigned long buf[1]; /* actually a variable length array */
-} ucsmap_buf_t;
-
-/*
- * Mapping object.
- */
-typedef struct idn_ucsmap {
- ucsmap_hash_t hash[UCSMAP_HASH_SIZE];
- ucsmap_entry_t *entries; /* array of entries */
- size_t entry_size; /* allocated size */
- size_t nentries; /* # of entries in use */
- ucsmap_buf_t *mapdata; /* list of character buffers */
- size_t mapdata_size; /* allocated size of current buffer */
- size_t mapdata_used; /* # of chars in use */
- int fixed; /* already fixed? */
- int refcnt; /* reference count */
-} ucsmap_t;
-
-static int ucsmap_hash(unsigned long v);
-static unsigned long *save_mapped_sequence(idn_ucsmap_t ctx,
- unsigned long *map,
- size_t maplen);
-static void free_mapbuf(ucsmap_buf_t *buf);
-static int comp_entry(const void *v1, const void *v2);
-
-idn_result_t
-idn_ucsmap_create(idn_ucsmap_t *ctxp) {
- idn_ucsmap_t ctx;
-
- assert(ctxp != NULL);
-
- TRACE(("idn_ucsmap_create()\n"));
-
- if ((ctx = malloc(sizeof(*ctx))) == NULL) {
- WARNING(("idn_ucsmap_create: malloc failed\n"));
- return (idn_nomemory);
- }
-
- ctx->entry_size = 0;
- ctx->nentries = 0;
- ctx->entries = NULL;
- ctx->mapdata = NULL;
- ctx->mapdata_size = 0;
- ctx->mapdata_used = 0;
- ctx->fixed = 0;
- ctx->refcnt = 1;
- *ctxp = ctx;
- return (idn_success);
-}
-
-void
-idn_ucsmap_destroy(idn_ucsmap_t ctx) {
- assert(ctx != NULL && ctx->refcnt > 0);
-
- TRACE(("idn_ucsmap_destroy()\n"));
-
- if (--ctx->refcnt == 0) {
- if (ctx->entries != NULL)
- free(ctx->entries);
- if (ctx->mapdata != NULL)
- free_mapbuf(ctx->mapdata);
- free(ctx);
- }
-}
-
-void
-idn_ucsmap_incrref(idn_ucsmap_t ctx) {
- assert(ctx != NULL && ctx->refcnt > 0);
-
- ctx->refcnt++;
-}
-
-idn_result_t
-idn_ucsmap_add(idn_ucsmap_t ctx, unsigned long ucs,
- unsigned long *map, size_t maplen)
-{
- ucsmap_entry_t *e;
- ucsmap_entry_t *newbuf;
-
- assert(ctx != NULL && ctx->refcnt > 0);
-
- TRACE(("idn_ucsmap_add(ucs=U+%lX, maplen=%u)\n", ucs, maplen));
-
- /* Make sure it is not fixed yet. */
- if (ctx->fixed) {
- WARNING(("idn_ucsmap_add: attempt to add to fixed map\n"));
- return (idn_failure);
- }
-
- if (maplen > MAX_MAPLEN) {
- WARNING(("idn_ucsmap_add: maplen too large (> %d)\n",
- MAX_MAPLEN));
- return (idn_failure);
- }
-
- /* Append an entry. */
- if (ctx->nentries >= ctx->entry_size) {
- if (ctx->entry_size == 0)
- ctx->entry_size = INIT_SIZE;
- else
- ctx->entry_size *= 2;
- newbuf = realloc(ctx->entries, sizeof(*e) * ctx->entry_size);
- if (newbuf == NULL)
- return (idn_nomemory);
- ctx->entries = newbuf;
- }
- e = &ctx->entries[ctx->nentries];
- e->hidx = ucsmap_hash(ucs);
- e->len = maplen;
- e->ucs = ucs;
- if (maplen > 0) {
- /* Save mapped sequence in the buffer. */
- e->map = save_mapped_sequence(ctx, map, maplen);
- if (e->map == NULL)
- return (idn_nomemory);
- } else {
- /*
- * Zero 'maplen' is perfectly valid meaning one-to-zero
- * mapping.
- */
- e->map = NULL;
- }
- ctx->nentries++;
-
- return (idn_success);
-}
-
-void
-idn_ucsmap_fix(idn_ucsmap_t ctx) {
- ucsmap_entry_t *e;
- int last_hidx;
- int i;
-
- assert(ctx != NULL && ctx->refcnt > 0);
-
- TRACE(("idn_ucsmap_fix()\n"));
-
- if (ctx->fixed)
- return;
-
- ctx->fixed = 1;
-
- /* Initialize hash. */
- for (i = 0; i < UCSMAP_HASH_SIZE; i++) {
- ctx->hash[i].entry = NULL;
- ctx->hash[i].n = 0;
- }
-
- if (ctx->nentries == 0)
- return;
-
- /* Sort entries by the hash value and code point. */
- qsort(ctx->entries, ctx->nentries, sizeof(ucsmap_entry_t), comp_entry);
-
- /*
- * Now the entries are sorted by their hash value, and
- * sorted by its code point among the ones with the same hash value.
- */
-
- /* Build hash table. */
- last_hidx = -1;
- for (i = 0, e = ctx->entries; i < ctx->nentries; i++, e++) {
- if (e->hidx != last_hidx) {
- ctx->hash[e->hidx].entry = e;
- last_hidx = e->hidx;
- }
- ctx->hash[last_hidx].n++;
- }
-}
-
-idn_result_t
-idn_ucsmap_map(idn_ucsmap_t ctx, unsigned long v, unsigned long *to,
- size_t tolen, size_t *maplenp) {
- int hash;
- ucsmap_entry_t *e;
- int n;
- int hi, lo, mid;
-
- assert(ctx != NULL && ctx->refcnt > 0 && to != NULL &&
- maplenp != NULL);
-
- TRACE(("idn_ucsmap_map(v=U+%lX)\n", v));
-
- if (!ctx->fixed) {
- WARNING(("idn_ucsmap_map: not fixed yet\n"));
- return (idn_failure);
- }
-
- /* First, look up hash table. */
- hash = ucsmap_hash(v);
- if ((n = ctx->hash[hash].n) == 0)
- goto nomap;
-
- /* Then do binary search. */
- e = ctx->hash[hash].entry;
- lo = 0;
- hi = n - 1;
- while (lo <= hi) {
- mid = (lo + hi) / 2;
- if (v < e[mid].ucs)
- hi = mid - 1;
- else if (v > e[mid].ucs)
- lo = mid + 1;
- else {
- /* Found. */
- if (tolen < e[mid].len)
- return (idn_buffer_overflow);
- memcpy(to, e[mid].map, sizeof(*to) * e[mid].len);
- *maplenp = e[mid].len;
- return (idn_success);
- }
- }
-
- /*
- * Not found. Put the original character to 'to'
- * just for convenience.
- */
- nomap:
- if (tolen < 1)
- return (idn_buffer_overflow);
- *to = v;
- *maplenp = 1;
- return (idn_nomapping);
-}
-
-static int
-ucsmap_hash(unsigned long v) {
- return (v % UCSMAP_HASH_SIZE);
-}
-
-static unsigned long *
-save_mapped_sequence(idn_ucsmap_t ctx, unsigned long *map, size_t maplen) {
- ucsmap_buf_t *buf;
- unsigned long *p;
- size_t allocsize;
-
- /*
- * If the current buffer (the first one in the ctx->mapdata list)
- * has enough space, use it. Otherwise, allocate a new buffer and
- * insert it at the beginning of the list.
- */
- if (ctx->mapdata_used + maplen > ctx->mapdata_size) {
- if (maplen > DEFAULT_BUF_SIZE)
- allocsize = maplen * 2;
- else
- allocsize = DEFAULT_BUF_SIZE;
- buf = malloc(sizeof(ucsmap_hash_t) +
- sizeof(unsigned long) * allocsize);
- if (buf == NULL)
- return (NULL);
- buf->next = ctx->mapdata;
- ctx->mapdata = buf;
- ctx->mapdata_size = allocsize;
- ctx->mapdata_used = 0;
- }
- p = ctx->mapdata->buf + ctx->mapdata_used;
- memcpy(p, map, sizeof(unsigned long) * maplen);
- ctx->mapdata_used += maplen;
- return (p);
-}
-
-static void
-free_mapbuf(ucsmap_buf_t *buf) {
- while (buf != NULL) {
- ucsmap_buf_t *next = buf->next;
- free(buf);
- buf = next;
- }
-}
-
-static int
-comp_entry(const void *v1, const void *v2) {
- const ucsmap_entry_t *e1 = v1;
- const ucsmap_entry_t *e2 = v2;
-
- if (e1->hidx < e2->hidx)
- return (-1);
- else if (e1->hidx > e2->hidx)
- return (1);
- else if (e1->ucs < e2->ucs)
- return (-1);
- else if (e1->ucs > e2->ucs)
- return (1);
- else
- return (0);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/ucsset.c b/contrib/idn/idnkit-1.0-src/lib/ucsset.c
deleted file mode 100644
index 09183211..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/ucsset.c
+++ /dev/null
@@ -1,368 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: ucsset.c,v 1.1 2003/06/04 00:26:15 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2001 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <idn/result.h>
-#include <idn/assert.h>
-#include <idn/logmacro.h>
-#include <idn/ucsset.h>
-
-#define UCS_MAX 0x80000000UL
-
-#define INIT_SIZE 50
-
-/*
- * Code point range.
- *
- * The set of code points is represented by an array of code point ranges.
- * In the building phase, specified ranges by 'idn_ucsset_add' or
- * 'idn_ucsset_addrange' are simply appended to the array.
- * And 'idn_ucsset_fix' sorts the array by the code point value, and also
- * merges any intersecting ranges. Since the array is sorted, a binary
- * search can be used for looking up.
- */
-typedef struct {
- unsigned long from;
- unsigned long to;
-} range_t;
-
-/*
- * Code point segment.
- *
- * To speed up searching further, the entire region of UCS-4 code points
- * (U+0000 - U+7FFFFFFF) are divided into segments. For each segment,
- * the first and last element of the range array corresponding to the
- * segment are computed by 'idn_ucsset_fix'. This narrows down the
- * (initial) search range.
- */
-typedef struct {
- int range_start; /* index of ucsset.ranges */
- int range_end; /* ditto */
-} segment_t;
-
-/*
- * Code point to segment index conversion.
- *
- * Below is the function that maps a code point to the corresponding segment.
- * The mapping is non-uniform, so that BMP, the following 16 planes that
- * comprise Unicode code points together with BMP, and other planes
- * have different granularity.
- */
-#define SEG_THLD1 0x10000 /* BMP */
-#define SEG_THLD2 0x110000 /* Unicode (BMP+16planes) */
-#define SEG_SFT1 10 /* BMP: 1K code points/segment */
-#define SEG_SFT2 14 /* following 16 planes: 16K cp/seg */
-#define SEG_SFT3 24 /* rest: 16M cp/seg */
-#define SEG_OFF1 (SEG_THLD1 >> SEG_SFT1)
-#define SEG_OFF2 (((SEG_THLD2 - SEG_THLD1) >> SEG_SFT2) + SEG_OFF1)
-#define SEG_INDEX(v) \
- (((v) < SEG_THLD1) ? ((v) >> SEG_SFT1) : \
- ((v) < SEG_THLD2) ? ((((v) - SEG_THLD1) >> SEG_SFT2) + SEG_OFF1) : \
- ((((v) - SEG_THLD2) >> SEG_SFT3) + SEG_OFF2))
-#define SEG_LEN (SEG_INDEX(UCS_MAX - 1) + 1)
-
-/*
- * Representation of set of UCS code points.
- */
-typedef struct idn_ucsset {
- segment_t segments[SEG_LEN];
- int fixed;
- int size; /* allocated size of 'ranges' */
- int nranges; /* num of ranges */
- range_t *ranges;
- int refcnt; /* reference count */
-} ucsset;
-
-static idn_result_t addrange(idn_ucsset_t ctx, unsigned long from,
- unsigned long to, char *func_name);
-static int comp_range(const void *v1, const void *v2);
-
-idn_result_t
-idn_ucsset_create(idn_ucsset_t *ctx) {
- idn_ucsset_t bm;
-
- assert(ctx != NULL);
-
- TRACE(("idn_ucsset_create()\n"));
-
- if ((bm = malloc(sizeof(ucsset))) == NULL) {
- WARNING(("idn_ucsset_create: malloc failed\n"));
- return idn_nomemory;
- }
- bm->size = bm->nranges = 0;
- bm->ranges = NULL;
- bm->fixed = 0;
- bm->refcnt = 1;
- *ctx = bm;
- return (idn_success);
-}
-
-void
-idn_ucsset_destroy(idn_ucsset_t ctx) {
- assert(ctx != NULL && ctx->refcnt > 0);
-
- TRACE(("idn_ucsset_destroy()\n"));
-
- if (--ctx->refcnt == 0) {
- if (ctx->ranges != NULL)
- free(ctx->ranges);
- free(ctx);
- }
-}
-
-void
-idn_ucsset_incrref(idn_ucsset_t ctx) {
- assert(ctx != NULL && ctx->refcnt > 0);
-
- TRACE(("idn_ucsset_incrref()\n"));
-
- ctx->refcnt++;
-}
-
-idn_result_t
-idn_ucsset_add(idn_ucsset_t ctx, unsigned long v) {
- assert(ctx != NULL && ctx->refcnt > 0);
-
- TRACE(("idn_ucsset_add(v=U+%lX)\n", v));
-
- return (addrange(ctx, v, v, "idn_ucsset_add"));
-}
-
-idn_result_t
-idn_ucsset_addrange(idn_ucsset_t ctx, unsigned long from,
- unsigned long to)
-{
- assert(ctx != NULL && ctx->refcnt > 0);
-
- TRACE(("idn_ucsset_addrange(from=U+%lX, to=U+%lX)\n",
- from, to));
-
- return (addrange(ctx, from, to, "idn_ucsset_addrange"));
-}
-
-void
-idn_ucsset_fix(idn_ucsset_t ctx) {
- int nranges;
- range_t *ranges;
- segment_t *segments;
- int i, j;
-
- assert(ctx != NULL && ctx->refcnt > 0);
-
- TRACE(("idn_ucsset_fix()\n"));
-
- nranges = ctx->nranges;
- ranges = ctx->ranges;
- segments = ctx->segments;
-
- if (ctx->fixed)
- return;
-
- ctx->fixed = 1;
-
- /* Initialize segment array */
- for (i = 0; i < SEG_LEN; i++) {
- segments[i].range_start = -1;
- segments[i].range_end = -1;
- }
-
- /* If the set is empty, there's nothing to be done. */
- if (nranges == 0)
- return;
-
- /* Sort ranges. */
- qsort(ranges, nranges, sizeof(range_t), comp_range);
-
- /* Merge overlapped/continuous ranges. */
- for (i = 0, j = 1; j < nranges; j++) {
- if (ranges[i].to + 1 >= ranges[j].from) {
- /* can be merged */
- if (ranges[i].to < ranges[j].to) {
- ranges[i].to = ranges[j].to;
- }
- } else {
- i++;
- if (i < j)
- ranges[i] = ranges[j];
- }
- }
- /* 'i' points the last range in the array. */
- ctx->nranges = nranges = ++i;
-
- /* Create segment array. */
- for (i = 0; i < nranges; i++) {
- int fidx = SEG_INDEX(ranges[i].from);
- int tidx = SEG_INDEX(ranges[i].to);
-
- for (j = fidx; j <= tidx; j++) {
- if (segments[j].range_start < 0)
- segments[j].range_start = i;
- segments[j].range_end = i;
- }
- }
-
-#if 0
- /*
- * Does the standard guarantee realloc() always succeeds
- * when shrinking?
- */
- /* Shrink malloc'ed space if possible. */
- ctx->ranges = realloc(ctx->ranges, ctx->nranges * sizeof(range_t));
-#endif
-}
-
-idn_result_t
-idn_ucsset_lookup(idn_ucsset_t ctx, unsigned long v, int *found) {
- int idx;
- segment_t *segments;
-
- assert(ctx != NULL && ctx->refcnt > 0 && found != NULL);
-
- TRACE(("idn_ucsset_lookup(v=U+%lX)\n", v));
-
- /* Make sure it is fixed. */
- if (!ctx->fixed) {
- WARNING(("idn_ucsset_lookup: not fixed yet\n"));
- return (idn_failure);
- }
-
- /* Check the given code point. */
- if (v >= UCS_MAX)
- return (idn_invalid_codepoint);
-
- /* Get the segment 'v' belongs to. */
- segments = ctx->segments;
- idx = SEG_INDEX(v);
-
- /* Do binary search. */
- *found = 0;
- if (segments[idx].range_start >= 0) {
- int lo = segments[idx].range_start;
- int hi = segments[idx].range_end;
- range_t *ranges = ctx->ranges;
-
- while (lo <= hi) {
- int mid = (lo + hi) / 2;
- if (v < ranges[mid].from) {
- hi = mid - 1;
- } else if (v > ranges[mid].to) {
- lo = mid + 1;
- } else {
- *found = 1;
- break;
- }
- }
- }
- return (idn_success);
-}
-
-static idn_result_t
-addrange(idn_ucsset_t ctx, unsigned long from, unsigned long to,
- char *func_name)
-{
- range_t *newbuf;
-
- /* Check the given code points. */
- if (from > UCS_MAX) {
- WARNING(("%s: code point out of range (U+%lX)\n",
- func_name, from));
- return (idn_invalid_codepoint);
- } else if (to > UCS_MAX) {
- WARNING(("%s: code point out of range (U+%lX)\n",
- func_name, to));
- return (idn_invalid_codepoint);
- } else if (from > to) {
- WARNING(("%s: invalid range spec (U+%lX-U+%lX)\n",
- func_name, from, to));
- return (idn_invalid_codepoint);
- }
-
- /* Make sure it is not fixed yet. */
- if (ctx->fixed) {
- WARNING(("%s: attempt to add to already fixed object\n",
- func_name));
- return (idn_failure);
- }
-
- /* Append the specified range to the 'ranges' array. */
- if (ctx->nranges >= ctx->size) {
- /* Make it bigger. */
- if (ctx->size == 0)
- ctx->size = INIT_SIZE;
- else
- ctx->size *= 2;
- newbuf = realloc(ctx->ranges, ctx->size * sizeof(range_t));
- if (newbuf == NULL)
- return (idn_nomemory);
- ctx->ranges = newbuf;
- }
- ctx->ranges[ctx->nranges].from = from;
- ctx->ranges[ctx->nranges].to = to;
- ctx->nranges++;
-
- return (idn_success);
-}
-
-static int
-comp_range(const void *v1, const void *v2) {
- /*
- * Range comparation function suitable for qsort().
- */
- const range_t *r1 = v1;
- const range_t *r2 = v2;
-
- if (r1->from < r2->from)
- return (-1);
- else if (r1->from > r2->from)
- return (1);
- else
- return (0);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/unicode.c b/contrib/idn/idnkit-1.0-src/lib/unicode.c
deleted file mode 100644
index ecd76125..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/unicode.c
+++ /dev/null
@@ -1,309 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: unicode.c,v 1.1 2003/06/04 00:26:16 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2000,2001,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <idn/result.h>
-#include <idn/logmacro.h>
-#include <idn/assert.h>
-#include <idn/unicode.h>
-
-#define UNICODE_CURRENT "3.2.0"
-
-#define UCS_MAX 0x10ffff
-#define END_BIT 0x80000000
-
-/*
- * Some constants for Hangul decomposition/composition.
- */
-#define SBase 0xac00
-#define LBase 0x1100
-#define VBase 0x1161
-#define TBase 0x11a7
-#define LCount 19
-#define VCount 21
-#define TCount 28
-#define SLast (SBase + LCount * VCount * TCount)
-
-/*
- * Symbol composition macro.
- */
-#define compose_sym(a, b) compose_symX(a, b)
-#define compose_symX(a, b) a ## b
-
-struct composition {
- unsigned long c2; /* 2nd character */
- unsigned long comp; /* composed character */
-};
-
-#include "unicodedata_320.c"
-#define VERSION v320
-#include "unicode_template.c"
-#undef VERSION
-
-typedef int (*unicode_canonclassproc)(unsigned long v);
-typedef int (*unicode_decomposeproc)(unsigned long c,
- const unsigned long **seqp);
-typedef int (*unicode_composeproc)(unsigned long c,
- const struct composition **compp);
-
-static struct idn__unicode_ops {
- char *version;
- unicode_canonclassproc canonclass_proc;
- unicode_decomposeproc decompose_proc;
- unicode_composeproc compose_proc;
-} unicode_versions[] = {
-#define MAKE_UNICODE_HANDLE(version, suffix) \
- { version, \
- compose_sym(canonclass_, suffix), \
- compose_sym(decompose_, suffix), \
- compose_sym(compose_, suffix) }
- MAKE_UNICODE_HANDLE("3.2.0", v320),
- { NULL },
-#undef MAKE_UNICODE_HANDLE
-};
-
-idn_result_t
-idn__unicode_create(const char *version,
- idn__unicode_version_t *versionp) {
- idn__unicode_version_t v;
-
- assert(versionp != NULL);
- TRACE(("idn__unicode_create(version=%-.50s)\n",
- version == NULL ? "<NULL>" : version));
-
- if (version == NULL)
- version = UNICODE_CURRENT;
-
- for (v = unicode_versions; v->version != NULL; v++) {
- if (strcmp(v->version, version) == 0) {
- *versionp = v;
- return (idn_success);
- }
- }
- return (idn_notfound);
-}
-
-void
-idn__unicode_destroy(idn__unicode_version_t version) {
- assert(version != NULL);
- TRACE(("idn__unicode_destroy()\n"));
- /* Nothing to do */
-}
-
-int
-idn__unicode_canonicalclass(idn__unicode_version_t version, unsigned long c) {
- if (c > UCS_MAX)
- return (0);
-
- return (*version->canonclass_proc)(c);
-}
-
-idn_result_t
-idn__unicode_decompose(idn__unicode_version_t version,
- int compat, unsigned long *v, size_t vlen,
- unsigned long c, int *decomp_lenp) {
- unsigned long *vorg = v;
- int seqidx;
- const unsigned long *seq;
-
- assert(v != NULL && vlen >= 0 && decomp_lenp != NULL);
-
- if (c > UCS_MAX)
- return (idn_notfound);
-
- /*
- * First, check for Hangul.
- */
- if (SBase <= c && c < SLast) {
- int idx, t_offset, v_offset, l_offset;
-
- idx = c - SBase;
- t_offset = idx % TCount;
- idx /= TCount;
- v_offset = idx % VCount;
- l_offset = idx / VCount;
- if ((t_offset == 0 && vlen < 2) || (t_offset > 0 && vlen < 3))
- return (idn_buffer_overflow);
- *v++ = LBase + l_offset;
- *v++ = VBase + v_offset;
- if (t_offset > 0)
- *v++ = TBase + t_offset;
- *decomp_lenp = v - vorg;
- return (idn_success);
- }
-
- /*
- * Look up decomposition table. If no decomposition is defined
- * or if it is a compatibility decomosition when canonical
- * decomposition requested, return 'idn_notfound'.
- */
- seqidx = (*version->decompose_proc)(c, &seq);
- if (seqidx == 0 || (compat == 0 && (seqidx & DECOMP_COMPAT) != 0))
- return (idn_notfound);
-
- /*
- * Copy the decomposed sequence. The end of the sequence are
- * marked with END_BIT.
- */
- do {
- unsigned long c;
- int dlen;
- idn_result_t r;
-
- c = *seq & ~END_BIT;
-
- /* Decompose recursively. */
- r = idn__unicode_decompose(version, compat, v, vlen, c, &dlen);
- if (r == idn_success) {
- v += dlen;
- vlen -= dlen;
- } else if (r == idn_notfound) {
- if (vlen < 1)
- return (idn_buffer_overflow);
- *v++ = c;
- vlen--;
- } else {
- return (r);
- }
-
- } while ((*seq++ & END_BIT) == 0);
-
- *decomp_lenp = v - vorg;
-
- return (idn_success);
-}
-
-int
-idn__unicode_iscompositecandidate(idn__unicode_version_t version,
- unsigned long c) {
- const struct composition *dummy;
-
- if (c > UCS_MAX)
- return (0);
-
- /* Check for Hangul */
- if ((LBase <= c && c < LBase + LCount) || (SBase <= c && c < SLast))
- return (1);
-
- /*
- * Look up composition table. If there are no composition
- * that begins with the given character, it is not a
- * composition candidate.
- */
- if ((*version->compose_proc)(c, &dummy) == 0)
- return (0);
- else
- return (1);
-}
-
-idn_result_t
-idn__unicode_compose(idn__unicode_version_t version, unsigned long c1,
- unsigned long c2, unsigned long *compp) {
- int n;
- int lo, hi;
- const struct composition *cseq;
-
- assert(compp != NULL);
-
- if (c1 > UCS_MAX || c2 > UCS_MAX)
- return (idn_notfound);
-
- /*
- * Check for Hangul.
- */
- if (LBase <= c1 && c1 < LBase + LCount &&
- VBase <= c2 && c2 < VBase + VCount) {
- /*
- * Hangul L and V.
- */
- *compp = SBase +
- ((c1 - LBase) * VCount + (c2 - VBase)) * TCount;
- return (idn_success);
- } else if (SBase <= c1 && c1 < SLast &&
- TBase <= c2 && c2 < TBase + TCount &&
- (c1 - SBase) % TCount == 0) {
- /*
- * Hangul LV and T.
- */
- *compp = c1 + (c2 - TBase);
- return (idn_success);
- }
-
- /*
- * Look up composition table. If the result is 0, no composition
- * is defined. Otherwise, upper 16bits of the result contains
- * the number of composition that begins with 'c1', and the lower
- * 16bits is the offset in 'compose_seq'.
- */
- if ((n = (*version->compose_proc)(c1, &cseq)) == 0)
- return (idn_notfound);
-
- /*
- * The composite sequences are sorted by the 2nd character 'c2'.
- * So we can use binary search.
- */
- lo = 0;
- hi = n - 1;
- while (lo <= hi) {
- int mid = (lo + hi) / 2;
-
- if (cseq[mid].c2 < c2) {
- lo = mid + 1;
- } else if (cseq[mid].c2 > c2) {
- hi = mid - 1;
- } else {
- *compp = cseq[mid].comp;
- return (idn_success);
- }
- }
- return (idn_notfound);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/unicode_template.c b/contrib/idn/idnkit-1.0-src/lib/unicode_template.c
deleted file mode 100644
index 87a36075..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/unicode_template.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/* $Id: unicode_template.c,v 1.1 2003/06/04 00:26:16 marka Exp $ */
-
-/*
- * Copyright (c) 2000,2001 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef UNICODE_TEMPLATE_INIT
-#define UNICODE_TEMPLATE_INIT
-
-/*
- * Macro for multi-level index table.
- */
-#define LOOKUPTBL(vprefix, mprefix, v) \
- DMAP(vprefix)[\
- IMAP(vprefix)[\
- IMAP(vprefix)[IDX0(mprefix, v)] + IDX1(mprefix, v)\
- ]\
- ].tbl[IDX2(mprefix, v)]
-
-#define IDX0(mprefix, v) IDX_0(v, BITS1(mprefix), BITS2(mprefix))
-#define IDX1(mprefix, v) IDX_1(v, BITS1(mprefix), BITS2(mprefix))
-#define IDX2(mprefix, v) IDX_2(v, BITS1(mprefix), BITS2(mprefix))
-
-#define IDX_0(v, bits1, bits2) ((v) >> ((bits1) + (bits2)))
-#define IDX_1(v, bits1, bits2) (((v) >> (bits2)) & ((1 << (bits1)) - 1))
-#define IDX_2(v, bits1, bits2) ((v) & ((1 << (bits2)) - 1))
-
-#define BITS1(mprefix) mprefix ## _BITS_1
-#define BITS2(mprefix) mprefix ## _BITS_2
-
-#define IMAP(vprefix) concat4(VERSION, _, vprefix, _imap)
-#define DMAP(vprefix) concat4(VERSION, _, vprefix, _table)
-#define SEQ(vprefix) concat4(VERSION, _, vprefix, _seq)
-#define concat4(a,b,c,d) concat4X(a, b, c, d)
-#define concat4X(a,b,c,d) a ## b ## c ## d
-
-#endif /* UNICODE_TEMPLATE_INIT */
-
-static int
-compose_sym(canonclass_, VERSION) (unsigned long c) {
- /* Look up canonicalclass table. */
- return (LOOKUPTBL(canon_class, CANON_CLASS, c));
-}
-
-static int
-compose_sym(decompose_, VERSION) (unsigned long c, const unsigned long **seqp)
-{
- /* Look up decomposition table. */
- int seqidx = LOOKUPTBL(decompose, DECOMP, c);
- *seqp = SEQ(decompose) + (seqidx & ~DECOMP_COMPAT);
- return (seqidx);
-}
-
-static int
-compose_sym(compose_, VERSION) (unsigned long c,
- const struct composition **compp)
-{
- /* Look up composition table. */
- int seqidx = LOOKUPTBL(compose, CANON_COMPOSE, c);
- *compp = SEQ(compose) + (seqidx & 0xffff);
- return (seqidx >> 16);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/unicodedata_320.c b/contrib/idn/idnkit-1.0-src/lib/unicodedata_320.c
deleted file mode 100644
index 5e321a9f..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/unicodedata_320.c
+++ /dev/null
@@ -1,7916 +0,0 @@
-/* $Id: unicodedata_320.c,v 1.1 2003/06/04 00:26:43 marka Exp $ */
-/* $-Id: generate_normalize_data.pl,v 1.8 2001/10/31 08:51:30 m-kasahr Exp -$ */
-/*
- * Do not edit this file!
- * This file is generated from UnicodeData.txt, CompositionExclusions-1.txt,
- * SpecialCasing.txt and CaseFolding.txt.
- */
-
-
-/*
- * Canonical Class
- */
-
-#define CANON_CLASS_BITS_0 9
-#define CANON_CLASS_BITS_1 7
-#define CANON_CLASS_BITS_2 5
-
-static const unsigned short v320_canon_class_imap[] = {
- 272, 400, 528, 656, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 912,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 1040, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 2, 3, 4, 0, 0, 0, 0,
- 0, 0, 0, 0, 5, 0, 0, 0,
- 0, 0, 0, 0, 6, 7, 8, 0,
- 0, 0, 9, 10, 0, 0, 11, 12,
- 13, 14, 15, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 16, 17, 0, 0, 16, 18, 0,
- 0, 16, 18, 0, 0, 16, 18, 0,
- 0, 16, 18, 0, 0, 0, 18, 0,
- 0, 0, 19, 0, 0, 0, 18, 0,
- 0, 0, 18, 0, 0, 0, 20, 0,
- 0, 21, 22, 0, 0, 23, 24, 0,
- 25, 26, 0, 27, 28, 0, 29, 0,
- 0, 30, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 31, 31, 0, 0, 0, 0, 32, 0,
- 0, 0, 0, 0, 0, 33, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 34, 35,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 36, 0, 0, 37, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 38, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 39, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 40, 41, 42, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const struct {
- unsigned char tbl[32];
-} v320_canon_class_table[] = {
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
- 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 232,
- 220, 220, 220, 220, 232, 216, 220, 220, 220, 220,
- }},
- {{
- 220, 202, 202, 220, 220, 220, 220, 202, 202, 220, 220,
- 220, 220, 220, 220, 220, 220, 220, 220, 220, 1, 1,
- 1, 1, 1, 220, 220, 220, 220, 230, 230, 230,
- }},
- {{
- 230, 230, 230, 230, 230, 240, 230, 220, 220, 220, 230,
- 230, 230, 220, 220, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 234, 234, 233, 230, 230, 230, 230, 230, 230, 230, 230,
- 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 230, 230, 230, 230, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 220, 230, 230, 230, 230,
- 220, 230, 230, 230, 222, 220, 230, 230, 230, 230,
- }},
- {{
- 230, 230, 0, 220, 220, 220, 220, 220, 230, 230, 220,
- 230, 230, 222, 228, 230, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 0, 20, 21, 22, 0, 23,
- }},
- {{
- 0, 24, 25, 0, 230, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 27, 28, 29, 30, 31, 32, 33, 34, 230, 230, 220,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 230, 230, 230, 230, 230, 230, 230, 0, 0, 230,
- }},
- {{
- 230, 230, 230, 220, 230, 0, 0, 230, 230, 0, 220,
- 230, 230, 220, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 230, 220, 230, 230, 220, 230,
- 230, 220, 220, 220, 230, 220, 220, 230, 220, 230,
- }},
- {{
- 230, 230, 220, 230, 220, 230, 220, 230, 220, 230, 230,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 9, 0, 0, 0, 230, 220, 230, 230, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 84,
- 91, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 103, 103, 9, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107,
- 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 118, 118, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 122, 122, 122,
- 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 220, 220, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220,
- 0, 220, 0, 216, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 129, 130, 0, 132, 0,
- 0, 0, 0, 0, 130, 130, 130, 130, 0, 0,
- }},
- {{
- 130, 0, 230, 230, 9, 0, 230, 230, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 7, 0, 9, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 230, 230, 1, 1, 230, 230,
- 230, 230, 1, 1, 1, 230, 230, 0, 0, 0,
- }},
- {{
- 0, 230, 0, 0, 0, 1, 1, 230, 220, 230, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218,
- 228, 232, 222, 224, 224, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 8, 8, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 26, 0,
- }},
- {{
- 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 216, 216, 1, 1, 1, 0,
- 0, 0, 226, 216, 216, 216, 216, 216, 0, 0, 0,
- 0, 0, 0, 0, 0, 220, 220, 220, 220, 220,
- }},
- {{
- 220, 220, 220, 0, 0, 230, 230, 230, 230, 230, 220,
- 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230,
- 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
-};
-
-/*
- * Canonical Composition
- */
-
-#define CANON_COMPOSE_BITS_0 9
-#define CANON_COMPOSE_BITS_1 7
-#define CANON_COMPOSE_BITS_2 5
-
-static const unsigned short v320_compose_imap[] = {
- 272, 400, 528, 656, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 0, 1, 2, 3, 0, 4, 5, 6,
- 7, 0, 8, 9, 0, 10, 0, 11,
- 0, 12, 0, 0, 13, 0, 0, 0,
- 0, 0, 0, 0, 14, 15, 16, 0,
- 17, 18, 19, 20, 0, 0, 21, 22,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 23, 24, 0, 0, 0, 25, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 26, 0, 0, 0, 0, 27, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 28, 0, 29, 0, 30, 0,
- 0, 0, 31, 0, 0, 32, 33, 0,
- 0, 0, 34, 0, 0, 0, 35, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 36, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 37, 38, 39, 0, 40, 41, 0,
- 42, 43, 44, 45, 0, 46, 47, 48,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 49, 0, 50, 0,
- 51, 52, 53, 54, 55, 56, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 57, 58, 59, 60, 61, 62,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const struct {
- unsigned long tbl[32];
-} v320_compose_table[] = {
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 65537, 65538, 65539, 0,
- }},
- {{
- 0, 1048580, 196628, 327703, 393244, 1114146, 65587,
- 458804, 458811, 983106, 65617, 327762, 393303, 196701,
- 589920, 1048681, 131193, 0, 524411, 458883, 458890,
- 1245329, 131236, 393382, 131244, 589998, 393399, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 1048765, 196813, 327888, 393429, 1114331, 65772,
- 458989, 524532, 917756, 131338, 327948, 393489, 196887,
- 590106, 1048867, 131379, 0, 524597, 459069, 524612,
- 1245516, 131423, 459105, 131432, 655722, 393588, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 0, 196986, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 262525, 0, 65921, 65922, 131459,
- 65925, 0, 0, 262534, 0, 0, 0,
- 0, 65930, 0, 0, 0, 0, 262539,
- 197007, 65938, 0, 65939, 0, 0, 0,
- 262548, 0, 0, 0,
- }},
- {{
- 0, 0, 262552, 0, 65948, 65949, 131486,
- 65952, 0, 0, 262561, 0, 0, 0,
- 0, 65957, 0, 0, 0, 0, 262566,
- 197034, 65965, 0, 65966, 0, 0, 0,
- 262575, 0, 0, 0,
- }},
- {{
- 0, 0, 262579, 262583, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 131515, 131517, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 131519, 131521,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 65987, 65988,
- 0, 0, 0, 0,
- }},
- {{
- 65989, 65990, 0, 0, 0, 0, 0,
- 0, 65991, 65992, 65993, 65994, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 65995,
- }},
- {{
- 328140, 328145, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 328150, 328155, 0, 0, 0, 0,
- 0, 0, 66016, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 66017, 66018, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 66019,
- 66020, 66021, 66022, 0, 0, 0, 0,
- 66023, 66024, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 66025, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 459242, 0, 0, 0,
- 262641, 0, 328181, 0, 459258, 0, 0,
- 0, 0, 0, 262657,
- }},
- {{
- 0, 66053, 0, 0, 0, 393734, 0,
- 0, 0, 328204, 0, 0, 66065, 0,
- 66066, 0, 0, 524819, 0, 0, 0,
- 262683, 0, 393759, 0, 524837, 0, 0,
- 0, 0, 0, 262701,
- }},
- {{
- 0, 131633, 0, 0, 0, 524851, 0,
- 0, 0, 393787, 197185, 197188, 0, 0,
- 66119, 0, 0, 0, 131656, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 66122,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 131659, 0, 0, 66125, 0,
- 197198, 131665, 66131, 262740, 0, 66136, 0,
- 0, 0, 66137, 0,
- }},
- {{
- 0, 0, 0, 262746, 0, 0, 0,
- 66142, 0, 0, 0, 66143, 0, 66144,
- 0, 0, 131681, 0, 0, 66147, 0,
- 197220, 131687, 66153, 262762, 0, 66158, 0,
- 0, 0, 66159, 0,
- }},
- {{
- 0, 0, 0, 262768, 0, 0, 0,
- 66164, 0, 0, 0, 66165, 0, 66166,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 66167, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 66168,
- 66169, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 66170, 66171, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 0, 66172, 66173, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 197246, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 0, 66177, 0, 66178, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 66179, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 66180, 0, 0,
- 66181, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 0, 66182, 0, 0, 0, 0, 0,
- 0, 0, 66183, 0, 0, 66184, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 131721, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 197259, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 66190, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 131727,
- 66193, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 66194,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 66195,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 197268,
- 0, 0, 0, 66199, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 131736,
- 66202, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 197275, 0, 0,
- 66206, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 66207, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 66208, 66209, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 66210, 66211,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 66212, 66213, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 131750, 131752, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 66218, 66219, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 66220, 66221,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 262830, 262834, 66230, 66231, 66232, 66233, 66234,
- 66235, 262844, 262848, 66244, 66245, 66246, 66247,
- 66248, 66249, 131786, 131788, 0, 0, 0,
- 0, 0, 0, 131790, 131792, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 262866, 262870, 66266, 66267, 66268, 66269, 66270,
- 66271, 262880, 262884, 66280, 66281, 66282, 66283,
- 66284, 66285, 197358, 197361, 0, 0, 0,
- 0, 0, 0, 197364, 197367, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 131834, 131836, 0, 0, 0, 0, 0,
- 0, 131838, 131840, 0, 0, 0, 0,
- 0, 0, 197378, 197381, 0, 0, 0,
- 0, 0, 0, 0, 197384, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 262923, 262927, 66323, 66324, 66325, 66326, 66327,
- 66328, 262937, 262941, 66337, 66338, 66339, 66340,
- 66341, 66342, 66343, 0, 0, 0, 66344,
- 0, 0, 0, 0, 0, 0, 0,
- 66345, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 66346, 0, 0, 0, 0, 0,
- 0, 0, 0, 197419,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 66350,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 66351, 0, 0, 0, 0, 0,
- 0, 0, 197424, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 66355, 0, 66356, 0, 66357,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 66358, 0, 66359, 0, 66360,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 66361, 0, 0, 0,
- 0, 66362, 0, 0, 66363, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 66364, 0, 66365, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 66366, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 66367, 0, 66368, 0,
- 0, 66369, 0, 0, 0, 0, 66370,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 66371, 0, 0, 66372, 66373, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 66374, 66375, 0,
- 0, 66376, 66377, 0, 0, 66378, 66379,
- 66380, 66381, 0, 0,
- }},
- {{
- 0, 0, 66382, 66383, 0, 0, 66384,
- 66385, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 66386, 66387, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 66388, 0, 0, 0, 0,
- 0, 66389, 66390, 0, 66391, 0, 0,
- 0, 0, 0, 0, 66392, 66393, 66394,
- 66395, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 66396,
- 0, 0, 0, 0, 66397, 0, 66398,
- 0, 66399, 0, 66400, 0, 66401, 0,
- 66402, 0, 66403, 0, 66404, 0, 66405,
- 0, 66406, 0, 66407,
- }},
- {{
- 0, 66408, 0, 0, 66409, 0, 66410,
- 0, 66411, 0, 0, 0, 0, 0,
- 0, 131948, 0, 0, 131950, 0, 0,
- 131952, 0, 0, 131954, 0, 0, 131956,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 66422, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 66423,
- 0, 0, 0, 0, 66424, 0, 66425,
- 0, 66426, 0, 66427, 0, 66428, 0,
- 66429, 0, 66430, 0, 66431, 0, 66432,
- 0, 66433, 0, 66434,
- }},
- {{
- 0, 66435, 0, 0, 66436, 0, 66437,
- 0, 66438, 0, 0, 0, 0, 0,
- 0, 131975, 0, 0, 131977, 0, 0,
- 131979, 0, 0, 131981, 0, 0, 131983,
- 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 66449, 66450, 66451, 66452, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 66453, 0, 0,
- }},
-};
-
-static const struct composition v320_compose_seq[] = {
- { 0x00000000, 0x00000000 }, { 0x00000338, 0x0000226e },
- { 0x00000338, 0x00002260 }, { 0x00000338, 0x0000226f },
- { 0x00000300, 0x000000c0 }, { 0x00000301, 0x000000c1 },
- { 0x00000302, 0x000000c2 }, { 0x00000303, 0x000000c3 },
- { 0x00000304, 0x00000100 }, { 0x00000306, 0x00000102 },
- { 0x00000307, 0x00000226 }, { 0x00000308, 0x000000c4 },
- { 0x00000309, 0x00001ea2 }, { 0x0000030a, 0x000000c5 },
- { 0x0000030c, 0x000001cd }, { 0x0000030f, 0x00000200 },
- { 0x00000311, 0x00000202 }, { 0x00000323, 0x00001ea0 },
- { 0x00000325, 0x00001e00 }, { 0x00000328, 0x00000104 },
- { 0x00000307, 0x00001e02 }, { 0x00000323, 0x00001e04 },
- { 0x00000331, 0x00001e06 }, { 0x00000301, 0x00000106 },
- { 0x00000302, 0x00000108 }, { 0x00000307, 0x0000010a },
- { 0x0000030c, 0x0000010c }, { 0x00000327, 0x000000c7 },
- { 0x00000307, 0x00001e0a }, { 0x0000030c, 0x0000010e },
- { 0x00000323, 0x00001e0c }, { 0x00000327, 0x00001e10 },
- { 0x0000032d, 0x00001e12 }, { 0x00000331, 0x00001e0e },
- { 0x00000300, 0x000000c8 }, { 0x00000301, 0x000000c9 },
- { 0x00000302, 0x000000ca }, { 0x00000303, 0x00001ebc },
- { 0x00000304, 0x00000112 }, { 0x00000306, 0x00000114 },
- { 0x00000307, 0x00000116 }, { 0x00000308, 0x000000cb },
- { 0x00000309, 0x00001eba }, { 0x0000030c, 0x0000011a },
- { 0x0000030f, 0x00000204 }, { 0x00000311, 0x00000206 },
- { 0x00000323, 0x00001eb8 }, { 0x00000327, 0x00000228 },
- { 0x00000328, 0x00000118 }, { 0x0000032d, 0x00001e18 },
- { 0x00000330, 0x00001e1a }, { 0x00000307, 0x00001e1e },
- { 0x00000301, 0x000001f4 }, { 0x00000302, 0x0000011c },
- { 0x00000304, 0x00001e20 }, { 0x00000306, 0x0000011e },
- { 0x00000307, 0x00000120 }, { 0x0000030c, 0x000001e6 },
- { 0x00000327, 0x00000122 }, { 0x00000302, 0x00000124 },
- { 0x00000307, 0x00001e22 }, { 0x00000308, 0x00001e26 },
- { 0x0000030c, 0x0000021e }, { 0x00000323, 0x00001e24 },
- { 0x00000327, 0x00001e28 }, { 0x0000032e, 0x00001e2a },
- { 0x00000300, 0x000000cc }, { 0x00000301, 0x000000cd },
- { 0x00000302, 0x000000ce }, { 0x00000303, 0x00000128 },
- { 0x00000304, 0x0000012a }, { 0x00000306, 0x0000012c },
- { 0x00000307, 0x00000130 }, { 0x00000308, 0x000000cf },
- { 0x00000309, 0x00001ec8 }, { 0x0000030c, 0x000001cf },
- { 0x0000030f, 0x00000208 }, { 0x00000311, 0x0000020a },
- { 0x00000323, 0x00001eca }, { 0x00000328, 0x0000012e },
- { 0x00000330, 0x00001e2c }, { 0x00000302, 0x00000134 },
- { 0x00000301, 0x00001e30 }, { 0x0000030c, 0x000001e8 },
- { 0x00000323, 0x00001e32 }, { 0x00000327, 0x00000136 },
- { 0x00000331, 0x00001e34 }, { 0x00000301, 0x00000139 },
- { 0x0000030c, 0x0000013d }, { 0x00000323, 0x00001e36 },
- { 0x00000327, 0x0000013b }, { 0x0000032d, 0x00001e3c },
- { 0x00000331, 0x00001e3a }, { 0x00000301, 0x00001e3e },
- { 0x00000307, 0x00001e40 }, { 0x00000323, 0x00001e42 },
- { 0x00000300, 0x000001f8 }, { 0x00000301, 0x00000143 },
- { 0x00000303, 0x000000d1 }, { 0x00000307, 0x00001e44 },
- { 0x0000030c, 0x00000147 }, { 0x00000323, 0x00001e46 },
- { 0x00000327, 0x00000145 }, { 0x0000032d, 0x00001e4a },
- { 0x00000331, 0x00001e48 }, { 0x00000300, 0x000000d2 },
- { 0x00000301, 0x000000d3 }, { 0x00000302, 0x000000d4 },
- { 0x00000303, 0x000000d5 }, { 0x00000304, 0x0000014c },
- { 0x00000306, 0x0000014e }, { 0x00000307, 0x0000022e },
- { 0x00000308, 0x000000d6 }, { 0x00000309, 0x00001ece },
- { 0x0000030b, 0x00000150 }, { 0x0000030c, 0x000001d1 },
- { 0x0000030f, 0x0000020c }, { 0x00000311, 0x0000020e },
- { 0x0000031b, 0x000001a0 }, { 0x00000323, 0x00001ecc },
- { 0x00000328, 0x000001ea }, { 0x00000301, 0x00001e54 },
- { 0x00000307, 0x00001e56 }, { 0x00000301, 0x00000154 },
- { 0x00000307, 0x00001e58 }, { 0x0000030c, 0x00000158 },
- { 0x0000030f, 0x00000210 }, { 0x00000311, 0x00000212 },
- { 0x00000323, 0x00001e5a }, { 0x00000327, 0x00000156 },
- { 0x00000331, 0x00001e5e }, { 0x00000301, 0x0000015a },
- { 0x00000302, 0x0000015c }, { 0x00000307, 0x00001e60 },
- { 0x0000030c, 0x00000160 }, { 0x00000323, 0x00001e62 },
- { 0x00000326, 0x00000218 }, { 0x00000327, 0x0000015e },
- { 0x00000307, 0x00001e6a }, { 0x0000030c, 0x00000164 },
- { 0x00000323, 0x00001e6c }, { 0x00000326, 0x0000021a },
- { 0x00000327, 0x00000162 }, { 0x0000032d, 0x00001e70 },
- { 0x00000331, 0x00001e6e }, { 0x00000300, 0x000000d9 },
- { 0x00000301, 0x000000da }, { 0x00000302, 0x000000db },
- { 0x00000303, 0x00000168 }, { 0x00000304, 0x0000016a },
- { 0x00000306, 0x0000016c }, { 0x00000308, 0x000000dc },
- { 0x00000309, 0x00001ee6 }, { 0x0000030a, 0x0000016e },
- { 0x0000030b, 0x00000170 }, { 0x0000030c, 0x000001d3 },
- { 0x0000030f, 0x00000214 }, { 0x00000311, 0x00000216 },
- { 0x0000031b, 0x000001af }, { 0x00000323, 0x00001ee4 },
- { 0x00000324, 0x00001e72 }, { 0x00000328, 0x00000172 },
- { 0x0000032d, 0x00001e76 }, { 0x00000330, 0x00001e74 },
- { 0x00000303, 0x00001e7c }, { 0x00000323, 0x00001e7e },
- { 0x00000300, 0x00001e80 }, { 0x00000301, 0x00001e82 },
- { 0x00000302, 0x00000174 }, { 0x00000307, 0x00001e86 },
- { 0x00000308, 0x00001e84 }, { 0x00000323, 0x00001e88 },
- { 0x00000307, 0x00001e8a }, { 0x00000308, 0x00001e8c },
- { 0x00000300, 0x00001ef2 }, { 0x00000301, 0x000000dd },
- { 0x00000302, 0x00000176 }, { 0x00000303, 0x00001ef8 },
- { 0x00000304, 0x00000232 }, { 0x00000307, 0x00001e8e },
- { 0x00000308, 0x00000178 }, { 0x00000309, 0x00001ef6 },
- { 0x00000323, 0x00001ef4 }, { 0x00000301, 0x00000179 },
- { 0x00000302, 0x00001e90 }, { 0x00000307, 0x0000017b },
- { 0x0000030c, 0x0000017d }, { 0x00000323, 0x00001e92 },
- { 0x00000331, 0x00001e94 }, { 0x00000300, 0x000000e0 },
- { 0x00000301, 0x000000e1 }, { 0x00000302, 0x000000e2 },
- { 0x00000303, 0x000000e3 }, { 0x00000304, 0x00000101 },
- { 0x00000306, 0x00000103 }, { 0x00000307, 0x00000227 },
- { 0x00000308, 0x000000e4 }, { 0x00000309, 0x00001ea3 },
- { 0x0000030a, 0x000000e5 }, { 0x0000030c, 0x000001ce },
- { 0x0000030f, 0x00000201 }, { 0x00000311, 0x00000203 },
- { 0x00000323, 0x00001ea1 }, { 0x00000325, 0x00001e01 },
- { 0x00000328, 0x00000105 }, { 0x00000307, 0x00001e03 },
- { 0x00000323, 0x00001e05 }, { 0x00000331, 0x00001e07 },
- { 0x00000301, 0x00000107 }, { 0x00000302, 0x00000109 },
- { 0x00000307, 0x0000010b }, { 0x0000030c, 0x0000010d },
- { 0x00000327, 0x000000e7 }, { 0x00000307, 0x00001e0b },
- { 0x0000030c, 0x0000010f }, { 0x00000323, 0x00001e0d },
- { 0x00000327, 0x00001e11 }, { 0x0000032d, 0x00001e13 },
- { 0x00000331, 0x00001e0f }, { 0x00000300, 0x000000e8 },
- { 0x00000301, 0x000000e9 }, { 0x00000302, 0x000000ea },
- { 0x00000303, 0x00001ebd }, { 0x00000304, 0x00000113 },
- { 0x00000306, 0x00000115 }, { 0x00000307, 0x00000117 },
- { 0x00000308, 0x000000eb }, { 0x00000309, 0x00001ebb },
- { 0x0000030c, 0x0000011b }, { 0x0000030f, 0x00000205 },
- { 0x00000311, 0x00000207 }, { 0x00000323, 0x00001eb9 },
- { 0x00000327, 0x00000229 }, { 0x00000328, 0x00000119 },
- { 0x0000032d, 0x00001e19 }, { 0x00000330, 0x00001e1b },
- { 0x00000307, 0x00001e1f }, { 0x00000301, 0x000001f5 },
- { 0x00000302, 0x0000011d }, { 0x00000304, 0x00001e21 },
- { 0x00000306, 0x0000011f }, { 0x00000307, 0x00000121 },
- { 0x0000030c, 0x000001e7 }, { 0x00000327, 0x00000123 },
- { 0x00000302, 0x00000125 }, { 0x00000307, 0x00001e23 },
- { 0x00000308, 0x00001e27 }, { 0x0000030c, 0x0000021f },
- { 0x00000323, 0x00001e25 }, { 0x00000327, 0x00001e29 },
- { 0x0000032e, 0x00001e2b }, { 0x00000331, 0x00001e96 },
- { 0x00000300, 0x000000ec }, { 0x00000301, 0x000000ed },
- { 0x00000302, 0x000000ee }, { 0x00000303, 0x00000129 },
- { 0x00000304, 0x0000012b }, { 0x00000306, 0x0000012d },
- { 0x00000308, 0x000000ef }, { 0x00000309, 0x00001ec9 },
- { 0x0000030c, 0x000001d0 }, { 0x0000030f, 0x00000209 },
- { 0x00000311, 0x0000020b }, { 0x00000323, 0x00001ecb },
- { 0x00000328, 0x0000012f }, { 0x00000330, 0x00001e2d },
- { 0x00000302, 0x00000135 }, { 0x0000030c, 0x000001f0 },
- { 0x00000301, 0x00001e31 }, { 0x0000030c, 0x000001e9 },
- { 0x00000323, 0x00001e33 }, { 0x00000327, 0x00000137 },
- { 0x00000331, 0x00001e35 }, { 0x00000301, 0x0000013a },
- { 0x0000030c, 0x0000013e }, { 0x00000323, 0x00001e37 },
- { 0x00000327, 0x0000013c }, { 0x0000032d, 0x00001e3d },
- { 0x00000331, 0x00001e3b }, { 0x00000301, 0x00001e3f },
- { 0x00000307, 0x00001e41 }, { 0x00000323, 0x00001e43 },
- { 0x00000300, 0x000001f9 }, { 0x00000301, 0x00000144 },
- { 0x00000303, 0x000000f1 }, { 0x00000307, 0x00001e45 },
- { 0x0000030c, 0x00000148 }, { 0x00000323, 0x00001e47 },
- { 0x00000327, 0x00000146 }, { 0x0000032d, 0x00001e4b },
- { 0x00000331, 0x00001e49 }, { 0x00000300, 0x000000f2 },
- { 0x00000301, 0x000000f3 }, { 0x00000302, 0x000000f4 },
- { 0x00000303, 0x000000f5 }, { 0x00000304, 0x0000014d },
- { 0x00000306, 0x0000014f }, { 0x00000307, 0x0000022f },
- { 0x00000308, 0x000000f6 }, { 0x00000309, 0x00001ecf },
- { 0x0000030b, 0x00000151 }, { 0x0000030c, 0x000001d2 },
- { 0x0000030f, 0x0000020d }, { 0x00000311, 0x0000020f },
- { 0x0000031b, 0x000001a1 }, { 0x00000323, 0x00001ecd },
- { 0x00000328, 0x000001eb }, { 0x00000301, 0x00001e55 },
- { 0x00000307, 0x00001e57 }, { 0x00000301, 0x00000155 },
- { 0x00000307, 0x00001e59 }, { 0x0000030c, 0x00000159 },
- { 0x0000030f, 0x00000211 }, { 0x00000311, 0x00000213 },
- { 0x00000323, 0x00001e5b }, { 0x00000327, 0x00000157 },
- { 0x00000331, 0x00001e5f }, { 0x00000301, 0x0000015b },
- { 0x00000302, 0x0000015d }, { 0x00000307, 0x00001e61 },
- { 0x0000030c, 0x00000161 }, { 0x00000323, 0x00001e63 },
- { 0x00000326, 0x00000219 }, { 0x00000327, 0x0000015f },
- { 0x00000307, 0x00001e6b }, { 0x00000308, 0x00001e97 },
- { 0x0000030c, 0x00000165 }, { 0x00000323, 0x00001e6d },
- { 0x00000326, 0x0000021b }, { 0x00000327, 0x00000163 },
- { 0x0000032d, 0x00001e71 }, { 0x00000331, 0x00001e6f },
- { 0x00000300, 0x000000f9 }, { 0x00000301, 0x000000fa },
- { 0x00000302, 0x000000fb }, { 0x00000303, 0x00000169 },
- { 0x00000304, 0x0000016b }, { 0x00000306, 0x0000016d },
- { 0x00000308, 0x000000fc }, { 0x00000309, 0x00001ee7 },
- { 0x0000030a, 0x0000016f }, { 0x0000030b, 0x00000171 },
- { 0x0000030c, 0x000001d4 }, { 0x0000030f, 0x00000215 },
- { 0x00000311, 0x00000217 }, { 0x0000031b, 0x000001b0 },
- { 0x00000323, 0x00001ee5 }, { 0x00000324, 0x00001e73 },
- { 0x00000328, 0x00000173 }, { 0x0000032d, 0x00001e77 },
- { 0x00000330, 0x00001e75 }, { 0x00000303, 0x00001e7d },
- { 0x00000323, 0x00001e7f }, { 0x00000300, 0x00001e81 },
- { 0x00000301, 0x00001e83 }, { 0x00000302, 0x00000175 },
- { 0x00000307, 0x00001e87 }, { 0x00000308, 0x00001e85 },
- { 0x0000030a, 0x00001e98 }, { 0x00000323, 0x00001e89 },
- { 0x00000307, 0x00001e8b }, { 0x00000308, 0x00001e8d },
- { 0x00000300, 0x00001ef3 }, { 0x00000301, 0x000000fd },
- { 0x00000302, 0x00000177 }, { 0x00000303, 0x00001ef9 },
- { 0x00000304, 0x00000233 }, { 0x00000307, 0x00001e8f },
- { 0x00000308, 0x000000ff }, { 0x00000309, 0x00001ef7 },
- { 0x0000030a, 0x00001e99 }, { 0x00000323, 0x00001ef5 },
- { 0x00000301, 0x0000017a }, { 0x00000302, 0x00001e91 },
- { 0x00000307, 0x0000017c }, { 0x0000030c, 0x0000017e },
- { 0x00000323, 0x00001e93 }, { 0x00000331, 0x00001e95 },
- { 0x00000300, 0x00001fed }, { 0x00000301, 0x00000385 },
- { 0x00000342, 0x00001fc1 }, { 0x00000300, 0x00001ea6 },
- { 0x00000301, 0x00001ea4 }, { 0x00000303, 0x00001eaa },
- { 0x00000309, 0x00001ea8 }, { 0x00000304, 0x000001de },
- { 0x00000301, 0x000001fa }, { 0x00000301, 0x000001fc },
- { 0x00000304, 0x000001e2 }, { 0x00000301, 0x00001e08 },
- { 0x00000300, 0x00001ec0 }, { 0x00000301, 0x00001ebe },
- { 0x00000303, 0x00001ec4 }, { 0x00000309, 0x00001ec2 },
- { 0x00000301, 0x00001e2e }, { 0x00000300, 0x00001ed2 },
- { 0x00000301, 0x00001ed0 }, { 0x00000303, 0x00001ed6 },
- { 0x00000309, 0x00001ed4 }, { 0x00000301, 0x00001e4c },
- { 0x00000304, 0x0000022c }, { 0x00000308, 0x00001e4e },
- { 0x00000304, 0x0000022a }, { 0x00000301, 0x000001fe },
- { 0x00000300, 0x000001db }, { 0x00000301, 0x000001d7 },
- { 0x00000304, 0x000001d5 }, { 0x0000030c, 0x000001d9 },
- { 0x00000300, 0x00001ea7 }, { 0x00000301, 0x00001ea5 },
- { 0x00000303, 0x00001eab }, { 0x00000309, 0x00001ea9 },
- { 0x00000304, 0x000001df }, { 0x00000301, 0x000001fb },
- { 0x00000301, 0x000001fd }, { 0x00000304, 0x000001e3 },
- { 0x00000301, 0x00001e09 }, { 0x00000300, 0x00001ec1 },
- { 0x00000301, 0x00001ebf }, { 0x00000303, 0x00001ec5 },
- { 0x00000309, 0x00001ec3 }, { 0x00000301, 0x00001e2f },
- { 0x00000300, 0x00001ed3 }, { 0x00000301, 0x00001ed1 },
- { 0x00000303, 0x00001ed7 }, { 0x00000309, 0x00001ed5 },
- { 0x00000301, 0x00001e4d }, { 0x00000304, 0x0000022d },
- { 0x00000308, 0x00001e4f }, { 0x00000304, 0x0000022b },
- { 0x00000301, 0x000001ff }, { 0x00000300, 0x000001dc },
- { 0x00000301, 0x000001d8 }, { 0x00000304, 0x000001d6 },
- { 0x0000030c, 0x000001da }, { 0x00000300, 0x00001eb0 },
- { 0x00000301, 0x00001eae }, { 0x00000303, 0x00001eb4 },
- { 0x00000309, 0x00001eb2 }, { 0x00000300, 0x00001eb1 },
- { 0x00000301, 0x00001eaf }, { 0x00000303, 0x00001eb5 },
- { 0x00000309, 0x00001eb3 }, { 0x00000300, 0x00001e14 },
- { 0x00000301, 0x00001e16 }, { 0x00000300, 0x00001e15 },
- { 0x00000301, 0x00001e17 }, { 0x00000300, 0x00001e50 },
- { 0x00000301, 0x00001e52 }, { 0x00000300, 0x00001e51 },
- { 0x00000301, 0x00001e53 }, { 0x00000307, 0x00001e64 },
- { 0x00000307, 0x00001e65 }, { 0x00000307, 0x00001e66 },
- { 0x00000307, 0x00001e67 }, { 0x00000301, 0x00001e78 },
- { 0x00000301, 0x00001e79 }, { 0x00000308, 0x00001e7a },
- { 0x00000308, 0x00001e7b }, { 0x00000307, 0x00001e9b },
- { 0x00000300, 0x00001edc }, { 0x00000301, 0x00001eda },
- { 0x00000303, 0x00001ee0 }, { 0x00000309, 0x00001ede },
- { 0x00000323, 0x00001ee2 }, { 0x00000300, 0x00001edd },
- { 0x00000301, 0x00001edb }, { 0x00000303, 0x00001ee1 },
- { 0x00000309, 0x00001edf }, { 0x00000323, 0x00001ee3 },
- { 0x00000300, 0x00001eea }, { 0x00000301, 0x00001ee8 },
- { 0x00000303, 0x00001eee }, { 0x00000309, 0x00001eec },
- { 0x00000323, 0x00001ef0 }, { 0x00000300, 0x00001eeb },
- { 0x00000301, 0x00001ee9 }, { 0x00000303, 0x00001eef },
- { 0x00000309, 0x00001eed }, { 0x00000323, 0x00001ef1 },
- { 0x0000030c, 0x000001ee }, { 0x00000304, 0x000001ec },
- { 0x00000304, 0x000001ed }, { 0x00000304, 0x000001e0 },
- { 0x00000304, 0x000001e1 }, { 0x00000306, 0x00001e1c },
- { 0x00000306, 0x00001e1d }, { 0x00000304, 0x00000230 },
- { 0x00000304, 0x00000231 }, { 0x0000030c, 0x000001ef },
- { 0x00000300, 0x00001fba }, { 0x00000301, 0x00000386 },
- { 0x00000304, 0x00001fb9 }, { 0x00000306, 0x00001fb8 },
- { 0x00000313, 0x00001f08 }, { 0x00000314, 0x00001f09 },
- { 0x00000345, 0x00001fbc }, { 0x00000300, 0x00001fc8 },
- { 0x00000301, 0x00000388 }, { 0x00000313, 0x00001f18 },
- { 0x00000314, 0x00001f19 }, { 0x00000300, 0x00001fca },
- { 0x00000301, 0x00000389 }, { 0x00000313, 0x00001f28 },
- { 0x00000314, 0x00001f29 }, { 0x00000345, 0x00001fcc },
- { 0x00000300, 0x00001fda }, { 0x00000301, 0x0000038a },
- { 0x00000304, 0x00001fd9 }, { 0x00000306, 0x00001fd8 },
- { 0x00000308, 0x000003aa }, { 0x00000313, 0x00001f38 },
- { 0x00000314, 0x00001f39 }, { 0x00000300, 0x00001ff8 },
- { 0x00000301, 0x0000038c }, { 0x00000313, 0x00001f48 },
- { 0x00000314, 0x00001f49 }, { 0x00000314, 0x00001fec },
- { 0x00000300, 0x00001fea }, { 0x00000301, 0x0000038e },
- { 0x00000304, 0x00001fe9 }, { 0x00000306, 0x00001fe8 },
- { 0x00000308, 0x000003ab }, { 0x00000314, 0x00001f59 },
- { 0x00000300, 0x00001ffa }, { 0x00000301, 0x0000038f },
- { 0x00000313, 0x00001f68 }, { 0x00000314, 0x00001f69 },
- { 0x00000345, 0x00001ffc }, { 0x00000345, 0x00001fb4 },
- { 0x00000345, 0x00001fc4 }, { 0x00000300, 0x00001f70 },
- { 0x00000301, 0x000003ac }, { 0x00000304, 0x00001fb1 },
- { 0x00000306, 0x00001fb0 }, { 0x00000313, 0x00001f00 },
- { 0x00000314, 0x00001f01 }, { 0x00000342, 0x00001fb6 },
- { 0x00000345, 0x00001fb3 }, { 0x00000300, 0x00001f72 },
- { 0x00000301, 0x000003ad }, { 0x00000313, 0x00001f10 },
- { 0x00000314, 0x00001f11 }, { 0x00000300, 0x00001f74 },
- { 0x00000301, 0x000003ae }, { 0x00000313, 0x00001f20 },
- { 0x00000314, 0x00001f21 }, { 0x00000342, 0x00001fc6 },
- { 0x00000345, 0x00001fc3 }, { 0x00000300, 0x00001f76 },
- { 0x00000301, 0x000003af }, { 0x00000304, 0x00001fd1 },
- { 0x00000306, 0x00001fd0 }, { 0x00000308, 0x000003ca },
- { 0x00000313, 0x00001f30 }, { 0x00000314, 0x00001f31 },
- { 0x00000342, 0x00001fd6 }, { 0x00000300, 0x00001f78 },
- { 0x00000301, 0x000003cc }, { 0x00000313, 0x00001f40 },
- { 0x00000314, 0x00001f41 }, { 0x00000313, 0x00001fe4 },
- { 0x00000314, 0x00001fe5 }, { 0x00000300, 0x00001f7a },
- { 0x00000301, 0x000003cd }, { 0x00000304, 0x00001fe1 },
- { 0x00000306, 0x00001fe0 }, { 0x00000308, 0x000003cb },
- { 0x00000313, 0x00001f50 }, { 0x00000314, 0x00001f51 },
- { 0x00000342, 0x00001fe6 }, { 0x00000300, 0x00001f7c },
- { 0x00000301, 0x000003ce }, { 0x00000313, 0x00001f60 },
- { 0x00000314, 0x00001f61 }, { 0x00000342, 0x00001ff6 },
- { 0x00000345, 0x00001ff3 }, { 0x00000300, 0x00001fd2 },
- { 0x00000301, 0x00000390 }, { 0x00000342, 0x00001fd7 },
- { 0x00000300, 0x00001fe2 }, { 0x00000301, 0x000003b0 },
- { 0x00000342, 0x00001fe7 }, { 0x00000345, 0x00001ff4 },
- { 0x00000301, 0x000003d3 }, { 0x00000308, 0x000003d4 },
- { 0x00000308, 0x00000407 }, { 0x00000306, 0x000004d0 },
- { 0x00000308, 0x000004d2 }, { 0x00000301, 0x00000403 },
- { 0x00000300, 0x00000400 }, { 0x00000306, 0x000004d6 },
- { 0x00000308, 0x00000401 }, { 0x00000306, 0x000004c1 },
- { 0x00000308, 0x000004dc }, { 0x00000308, 0x000004de },
- { 0x00000300, 0x0000040d }, { 0x00000304, 0x000004e2 },
- { 0x00000306, 0x00000419 }, { 0x00000308, 0x000004e4 },
- { 0x00000301, 0x0000040c }, { 0x00000308, 0x000004e6 },
- { 0x00000304, 0x000004ee }, { 0x00000306, 0x0000040e },
- { 0x00000308, 0x000004f0 }, { 0x0000030b, 0x000004f2 },
- { 0x00000308, 0x000004f4 }, { 0x00000308, 0x000004f8 },
- { 0x00000308, 0x000004ec }, { 0x00000306, 0x000004d1 },
- { 0x00000308, 0x000004d3 }, { 0x00000301, 0x00000453 },
- { 0x00000300, 0x00000450 }, { 0x00000306, 0x000004d7 },
- { 0x00000308, 0x00000451 }, { 0x00000306, 0x000004c2 },
- { 0x00000308, 0x000004dd }, { 0x00000308, 0x000004df },
- { 0x00000300, 0x0000045d }, { 0x00000304, 0x000004e3 },
- { 0x00000306, 0x00000439 }, { 0x00000308, 0x000004e5 },
- { 0x00000301, 0x0000045c }, { 0x00000308, 0x000004e7 },
- { 0x00000304, 0x000004ef }, { 0x00000306, 0x0000045e },
- { 0x00000308, 0x000004f1 }, { 0x0000030b, 0x000004f3 },
- { 0x00000308, 0x000004f5 }, { 0x00000308, 0x000004f9 },
- { 0x00000308, 0x000004ed }, { 0x00000308, 0x00000457 },
- { 0x0000030f, 0x00000476 }, { 0x0000030f, 0x00000477 },
- { 0x00000308, 0x000004da }, { 0x00000308, 0x000004db },
- { 0x00000308, 0x000004ea }, { 0x00000308, 0x000004eb },
- { 0x00000653, 0x00000622 }, { 0x00000654, 0x00000623 },
- { 0x00000655, 0x00000625 }, { 0x00000654, 0x00000624 },
- { 0x00000654, 0x00000626 }, { 0x00000654, 0x000006c2 },
- { 0x00000654, 0x000006d3 }, { 0x00000654, 0x000006c0 },
- { 0x0000093c, 0x00000929 }, { 0x0000093c, 0x00000931 },
- { 0x0000093c, 0x00000934 }, { 0x000009be, 0x000009cb },
- { 0x000009d7, 0x000009cc }, { 0x00000b3e, 0x00000b4b },
- { 0x00000b56, 0x00000b48 }, { 0x00000b57, 0x00000b4c },
- { 0x00000bd7, 0x00000b94 }, { 0x00000bbe, 0x00000bca },
- { 0x00000bd7, 0x00000bcc }, { 0x00000bbe, 0x00000bcb },
- { 0x00000c56, 0x00000c48 }, { 0x00000cd5, 0x00000cc0 },
- { 0x00000cc2, 0x00000cca }, { 0x00000cd5, 0x00000cc7 },
- { 0x00000cd6, 0x00000cc8 }, { 0x00000cd5, 0x00000ccb },
- { 0x00000d3e, 0x00000d4a }, { 0x00000d57, 0x00000d4c },
- { 0x00000d3e, 0x00000d4b }, { 0x00000dca, 0x00000dda },
- { 0x00000dcf, 0x00000ddc }, { 0x00000ddf, 0x00000dde },
- { 0x00000dca, 0x00000ddd }, { 0x0000102e, 0x00001026 },
- { 0x00000304, 0x00001e38 }, { 0x00000304, 0x00001e39 },
- { 0x00000304, 0x00001e5c }, { 0x00000304, 0x00001e5d },
- { 0x00000307, 0x00001e68 }, { 0x00000307, 0x00001e69 },
- { 0x00000302, 0x00001eac }, { 0x00000306, 0x00001eb6 },
- { 0x00000302, 0x00001ead }, { 0x00000306, 0x00001eb7 },
- { 0x00000302, 0x00001ec6 }, { 0x00000302, 0x00001ec7 },
- { 0x00000302, 0x00001ed8 }, { 0x00000302, 0x00001ed9 },
- { 0x00000300, 0x00001f02 }, { 0x00000301, 0x00001f04 },
- { 0x00000342, 0x00001f06 }, { 0x00000345, 0x00001f80 },
- { 0x00000300, 0x00001f03 }, { 0x00000301, 0x00001f05 },
- { 0x00000342, 0x00001f07 }, { 0x00000345, 0x00001f81 },
- { 0x00000345, 0x00001f82 }, { 0x00000345, 0x00001f83 },
- { 0x00000345, 0x00001f84 }, { 0x00000345, 0x00001f85 },
- { 0x00000345, 0x00001f86 }, { 0x00000345, 0x00001f87 },
- { 0x00000300, 0x00001f0a }, { 0x00000301, 0x00001f0c },
- { 0x00000342, 0x00001f0e }, { 0x00000345, 0x00001f88 },
- { 0x00000300, 0x00001f0b }, { 0x00000301, 0x00001f0d },
- { 0x00000342, 0x00001f0f }, { 0x00000345, 0x00001f89 },
- { 0x00000345, 0x00001f8a }, { 0x00000345, 0x00001f8b },
- { 0x00000345, 0x00001f8c }, { 0x00000345, 0x00001f8d },
- { 0x00000345, 0x00001f8e }, { 0x00000345, 0x00001f8f },
- { 0x00000300, 0x00001f12 }, { 0x00000301, 0x00001f14 },
- { 0x00000300, 0x00001f13 }, { 0x00000301, 0x00001f15 },
- { 0x00000300, 0x00001f1a }, { 0x00000301, 0x00001f1c },
- { 0x00000300, 0x00001f1b }, { 0x00000301, 0x00001f1d },
- { 0x00000300, 0x00001f22 }, { 0x00000301, 0x00001f24 },
- { 0x00000342, 0x00001f26 }, { 0x00000345, 0x00001f90 },
- { 0x00000300, 0x00001f23 }, { 0x00000301, 0x00001f25 },
- { 0x00000342, 0x00001f27 }, { 0x00000345, 0x00001f91 },
- { 0x00000345, 0x00001f92 }, { 0x00000345, 0x00001f93 },
- { 0x00000345, 0x00001f94 }, { 0x00000345, 0x00001f95 },
- { 0x00000345, 0x00001f96 }, { 0x00000345, 0x00001f97 },
- { 0x00000300, 0x00001f2a }, { 0x00000301, 0x00001f2c },
- { 0x00000342, 0x00001f2e }, { 0x00000345, 0x00001f98 },
- { 0x00000300, 0x00001f2b }, { 0x00000301, 0x00001f2d },
- { 0x00000342, 0x00001f2f }, { 0x00000345, 0x00001f99 },
- { 0x00000345, 0x00001f9a }, { 0x00000345, 0x00001f9b },
- { 0x00000345, 0x00001f9c }, { 0x00000345, 0x00001f9d },
- { 0x00000345, 0x00001f9e }, { 0x00000345, 0x00001f9f },
- { 0x00000300, 0x00001f32 }, { 0x00000301, 0x00001f34 },
- { 0x00000342, 0x00001f36 }, { 0x00000300, 0x00001f33 },
- { 0x00000301, 0x00001f35 }, { 0x00000342, 0x00001f37 },
- { 0x00000300, 0x00001f3a }, { 0x00000301, 0x00001f3c },
- { 0x00000342, 0x00001f3e }, { 0x00000300, 0x00001f3b },
- { 0x00000301, 0x00001f3d }, { 0x00000342, 0x00001f3f },
- { 0x00000300, 0x00001f42 }, { 0x00000301, 0x00001f44 },
- { 0x00000300, 0x00001f43 }, { 0x00000301, 0x00001f45 },
- { 0x00000300, 0x00001f4a }, { 0x00000301, 0x00001f4c },
- { 0x00000300, 0x00001f4b }, { 0x00000301, 0x00001f4d },
- { 0x00000300, 0x00001f52 }, { 0x00000301, 0x00001f54 },
- { 0x00000342, 0x00001f56 }, { 0x00000300, 0x00001f53 },
- { 0x00000301, 0x00001f55 }, { 0x00000342, 0x00001f57 },
- { 0x00000300, 0x00001f5b }, { 0x00000301, 0x00001f5d },
- { 0x00000342, 0x00001f5f }, { 0x00000300, 0x00001f62 },
- { 0x00000301, 0x00001f64 }, { 0x00000342, 0x00001f66 },
- { 0x00000345, 0x00001fa0 }, { 0x00000300, 0x00001f63 },
- { 0x00000301, 0x00001f65 }, { 0x00000342, 0x00001f67 },
- { 0x00000345, 0x00001fa1 }, { 0x00000345, 0x00001fa2 },
- { 0x00000345, 0x00001fa3 }, { 0x00000345, 0x00001fa4 },
- { 0x00000345, 0x00001fa5 }, { 0x00000345, 0x00001fa6 },
- { 0x00000345, 0x00001fa7 }, { 0x00000300, 0x00001f6a },
- { 0x00000301, 0x00001f6c }, { 0x00000342, 0x00001f6e },
- { 0x00000345, 0x00001fa8 }, { 0x00000300, 0x00001f6b },
- { 0x00000301, 0x00001f6d }, { 0x00000342, 0x00001f6f },
- { 0x00000345, 0x00001fa9 }, { 0x00000345, 0x00001faa },
- { 0x00000345, 0x00001fab }, { 0x00000345, 0x00001fac },
- { 0x00000345, 0x00001fad }, { 0x00000345, 0x00001fae },
- { 0x00000345, 0x00001faf }, { 0x00000345, 0x00001fb2 },
- { 0x00000345, 0x00001fc2 }, { 0x00000345, 0x00001ff2 },
- { 0x00000345, 0x00001fb7 }, { 0x00000300, 0x00001fcd },
- { 0x00000301, 0x00001fce }, { 0x00000342, 0x00001fcf },
- { 0x00000345, 0x00001fc7 }, { 0x00000345, 0x00001ff7 },
- { 0x00000300, 0x00001fdd }, { 0x00000301, 0x00001fde },
- { 0x00000342, 0x00001fdf }, { 0x00000338, 0x0000219a },
- { 0x00000338, 0x0000219b }, { 0x00000338, 0x000021ae },
- { 0x00000338, 0x000021cd }, { 0x00000338, 0x000021cf },
- { 0x00000338, 0x000021ce }, { 0x00000338, 0x00002204 },
- { 0x00000338, 0x00002209 }, { 0x00000338, 0x0000220c },
- { 0x00000338, 0x00002224 }, { 0x00000338, 0x00002226 },
- { 0x00000338, 0x00002241 }, { 0x00000338, 0x00002244 },
- { 0x00000338, 0x00002247 }, { 0x00000338, 0x00002249 },
- { 0x00000338, 0x0000226d }, { 0x00000338, 0x00002262 },
- { 0x00000338, 0x00002270 }, { 0x00000338, 0x00002271 },
- { 0x00000338, 0x00002274 }, { 0x00000338, 0x00002275 },
- { 0x00000338, 0x00002278 }, { 0x00000338, 0x00002279 },
- { 0x00000338, 0x00002280 }, { 0x00000338, 0x00002281 },
- { 0x00000338, 0x000022e0 }, { 0x00000338, 0x000022e1 },
- { 0x00000338, 0x00002284 }, { 0x00000338, 0x00002285 },
- { 0x00000338, 0x00002288 }, { 0x00000338, 0x00002289 },
- { 0x00000338, 0x000022e2 }, { 0x00000338, 0x000022e3 },
- { 0x00000338, 0x000022ac }, { 0x00000338, 0x000022ad },
- { 0x00000338, 0x000022ae }, { 0x00000338, 0x000022af },
- { 0x00000338, 0x000022ea }, { 0x00000338, 0x000022eb },
- { 0x00000338, 0x000022ec }, { 0x00000338, 0x000022ed },
- { 0x00003099, 0x00003094 }, { 0x00003099, 0x0000304c },
- { 0x00003099, 0x0000304e }, { 0x00003099, 0x00003050 },
- { 0x00003099, 0x00003052 }, { 0x00003099, 0x00003054 },
- { 0x00003099, 0x00003056 }, { 0x00003099, 0x00003058 },
- { 0x00003099, 0x0000305a }, { 0x00003099, 0x0000305c },
- { 0x00003099, 0x0000305e }, { 0x00003099, 0x00003060 },
- { 0x00003099, 0x00003062 }, { 0x00003099, 0x00003065 },
- { 0x00003099, 0x00003067 }, { 0x00003099, 0x00003069 },
- { 0x00003099, 0x00003070 }, { 0x0000309a, 0x00003071 },
- { 0x00003099, 0x00003073 }, { 0x0000309a, 0x00003074 },
- { 0x00003099, 0x00003076 }, { 0x0000309a, 0x00003077 },
- { 0x00003099, 0x00003079 }, { 0x0000309a, 0x0000307a },
- { 0x00003099, 0x0000307c }, { 0x0000309a, 0x0000307d },
- { 0x00003099, 0x0000309e }, { 0x00003099, 0x000030f4 },
- { 0x00003099, 0x000030ac }, { 0x00003099, 0x000030ae },
- { 0x00003099, 0x000030b0 }, { 0x00003099, 0x000030b2 },
- { 0x00003099, 0x000030b4 }, { 0x00003099, 0x000030b6 },
- { 0x00003099, 0x000030b8 }, { 0x00003099, 0x000030ba },
- { 0x00003099, 0x000030bc }, { 0x00003099, 0x000030be },
- { 0x00003099, 0x000030c0 }, { 0x00003099, 0x000030c2 },
- { 0x00003099, 0x000030c5 }, { 0x00003099, 0x000030c7 },
- { 0x00003099, 0x000030c9 }, { 0x00003099, 0x000030d0 },
- { 0x0000309a, 0x000030d1 }, { 0x00003099, 0x000030d3 },
- { 0x0000309a, 0x000030d4 }, { 0x00003099, 0x000030d6 },
- { 0x0000309a, 0x000030d7 }, { 0x00003099, 0x000030d9 },
- { 0x0000309a, 0x000030da }, { 0x00003099, 0x000030dc },
- { 0x0000309a, 0x000030dd }, { 0x00003099, 0x000030f7 },
- { 0x00003099, 0x000030f8 }, { 0x00003099, 0x000030f9 },
- { 0x00003099, 0x000030fa }, { 0x00003099, 0x000030fe },
-};
-
-
-/*
- * Canonical/Compatibility Decomposition
- */
-
-#define DECOMP_BITS_0 9
-#define DECOMP_BITS_1 7
-#define DECOMP_BITS_2 5
-#define DECOMP_COMPAT 32768
-
-static const unsigned short v320_decompose_imap[] = {
- 272, 400, 528, 656, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 912,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 1040, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 1168,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 0, 0, 0, 0, 0, 1, 2, 3,
- 4, 5, 6, 7, 0, 8, 9, 10,
- 11, 12, 0, 0, 0, 13, 14, 15,
- 0, 0, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 0, 0, 26, 27,
- 0, 0, 0, 0, 28, 0, 0, 0,
- 0, 29, 0, 30, 0, 0, 31, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 32, 33, 0, 0, 0, 34, 0,
- 0, 35, 36, 0, 0, 0, 0, 0,
- 0, 0, 37, 0, 38, 0, 39, 0,
- 0, 0, 40, 0, 0, 0, 41, 0,
- 0, 0, 42, 0, 0, 0, 43, 0,
- 0, 44, 0, 0, 0, 45, 46, 0,
- 47, 0, 48, 49, 50, 51, 0, 0,
- 0, 52, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 53, 54, 55, 56, 57, 58, 59, 60,
- 61, 62, 63, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 0, 0,
- 75, 76, 77, 78, 79, 80, 81, 0,
- 82, 83, 84, 85, 86, 87, 0, 88,
- 0, 89, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 90, 91, 92, 93, 94,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 95, 0, 0, 96, 0, 0, 97, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 98, 0, 0, 99,
- 100, 101, 102, 103, 104, 105, 106, 0,
- 107, 108, 109, 110, 111, 112, 113, 114,
- 0, 115, 116, 117, 118, 0, 0, 0,
- 119, 120, 121, 122, 123, 124, 125, 126,
- 127, 128, 129, 130, 131, 132, 133, 134,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 135, 136, 137, 138, 139, 140, 141, 142,
- 143, 144, 145, 146, 0, 0, 0, 0,
- 147, 148, 149, 150, 151, 152, 153, 154,
- 155, 156, 157, 158, 159, 160, 161, 162,
- 163, 164, 165, 166, 167, 168, 169, 170,
- 0, 171, 172, 173, 174, 175, 176, 177,
- 178, 179, 180, 181, 182, 183, 184, 185,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 186, 187, 0, 188, 189, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 190, 191, 192, 193, 194, 195, 196, 197,
- 198, 199, 200, 201, 202, 203, 204, 205,
- 206, 207, 208, 209, 210, 211, 212, 213,
- 214, 215, 216, 217, 218, 219, 220, 221,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 222, 223, 224, 225, 226, 227, 228, 229,
- 230, 231, 232, 233, 234, 235, 236, 237,
- 238, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const struct {
- unsigned short tbl[32];
-} v320_decompose_table[] = {
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 32769, 0, 0, 0, 0, 0, 0, 0,
- 32770, 0, 32772, 0, 0, 0, 0, 32773,
- 0, 0, 32775, 32776, 32777, 32779, 0, 0,
- 32780, 32782, 32783, 0, 32784, 32787, 32790, 0,
- }},
- {{
- 25, 27, 29, 31, 33, 35, 0, 37,
- 39, 41, 43, 45, 47, 49, 51, 53,
- 0, 55, 57, 59, 61, 63, 65, 0,
- 0, 67, 69, 71, 73, 75, 0, 0,
- }},
- {{
- 77, 79, 81, 83, 85, 87, 0, 89,
- 91, 93, 95, 97, 99, 101, 103, 105,
- 0, 107, 109, 111, 113, 115, 117, 0,
- 0, 119, 121, 123, 125, 127, 0, 129,
- }},
- {{
- 131, 133, 135, 137, 139, 141, 143, 145,
- 147, 149, 151, 153, 155, 157, 159, 161,
- 0, 0, 163, 165, 167, 169, 171, 173,
- 175, 177, 179, 181, 183, 185, 187, 189,
- }},
- {{
- 191, 193, 195, 197, 199, 201, 0, 0,
- 203, 205, 207, 209, 211, 213, 215, 217,
- 219, 0, 32989, 32991, 225, 227, 229, 231,
- 0, 233, 235, 237, 239, 241, 243, 33013,
- }},
- {{
- 33015, 0, 0, 249, 251, 253, 255, 257,
- 259, 33029, 0, 0, 263, 265, 267, 269,
- 271, 273, 0, 0, 275, 277, 279, 281,
- 283, 285, 287, 289, 291, 293, 295, 297,
- }},
- {{
- 299, 301, 303, 305, 307, 309, 0, 0,
- 311, 313, 315, 317, 319, 321, 323, 325,
- 327, 329, 331, 333, 335, 337, 339, 341,
- 343, 345, 347, 349, 351, 353, 355, 33125,
- }},
- {{
- 358, 360, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 362,
- 364, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 33134, 33136, 33138, 33140,
- 33142, 33144, 33146, 33148, 33150, 384, 386, 388,
- 390, 392, 394, 396, 398, 400, 402, 404,
- 406, 408, 410, 412, 414, 0, 416, 418,
- }},
- {{
- 420, 422, 424, 426, 0, 0, 428, 430,
- 432, 434, 436, 438, 440, 442, 444, 446,
- 448, 33218, 33220, 33222, 456, 458, 0, 0,
- 460, 462, 464, 466, 468, 470, 472, 474,
- }},
- {{
- 476, 478, 480, 482, 484, 486, 488, 490,
- 492, 494, 496, 498, 500, 502, 504, 506,
- 508, 510, 512, 514, 516, 518, 520, 522,
- 524, 526, 528, 530, 0, 0, 532, 534,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 536, 538,
- 540, 542, 544, 546, 548, 550, 552, 554,
- 556, 558, 560, 562, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 33332, 33333, 33334, 33335, 33336, 33337, 33338, 33339,
- 33340, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 33341, 33343, 33345, 33347, 33349, 33351, 0, 0,
- }},
- {{
- 33353, 33354, 33355, 33356, 33357, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 590, 591, 0, 592, 593, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 595, 0, 0, 0,
- 0, 0, 33364, 0, 0, 0, 598, 0,
- }},
- {{
- 0, 0, 0, 0, 33367, 601, 603, 605,
- 606, 608, 610, 0, 612, 0, 614, 616,
- 618, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 620, 622, 624, 626, 628, 630,
- 632, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 634, 636, 638, 640, 642, 0,
- 33412, 33413, 33414, 647, 649, 33419, 33420, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 33421, 33422, 33423, 0, 33424, 33425, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 658, 660, 0, 662, 0, 0, 0, 664,
- 0, 0, 0, 0, 666, 668, 670, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 672, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 674, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 676, 678, 0, 680, 0, 0, 0, 682,
- 0, 0, 0, 0, 684, 686, 688, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 690, 692,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 694, 696, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 698, 700, 702, 704, 0, 0, 706, 708,
- 0, 0, 710, 712, 714, 716, 718, 720,
- }},
- {{
- 0, 0, 722, 724, 726, 728, 730, 732,
- 0, 0, 734, 736, 738, 740, 742, 744,
- 746, 748, 750, 752, 754, 756, 0, 0,
- 758, 760, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 33530,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 764, 766, 768, 770, 772, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 33542, 33544, 33546,
- 33548, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 782, 0, 784, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 786, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 788, 0, 0, 0, 0, 0, 0,
- 0, 790, 0, 0, 792, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 794, 796, 798, 800, 802, 804, 806, 808,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 810, 812, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 814, 816, 0, 818,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 820, 0, 0, 822, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 824, 826, 828, 0, 0, 830, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 832, 0, 0, 834, 836, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 838, 840, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 842, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 844, 846, 848, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 850, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 852, 0, 0, 0, 0, 0, 0, 854,
- 856, 0, 858, 860, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 862, 864, 866, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 868, 0, 870, 872, 874, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 33644, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 33646, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 33648, 33650, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 33652, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 885, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 887, 0, 0,
- 0, 0, 889, 0, 0, 0, 0, 891,
- 0, 0, 0, 0, 893, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 895, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 897, 0, 899, 901, 33671,
- 905, 33675, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 909, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 911, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 913, 0, 0,
- }},
- {{
- 0, 0, 915, 0, 0, 0, 0, 917,
- 0, 0, 0, 0, 919, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 921, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 923, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 925, 927, 929, 931, 933, 935, 937, 939,
- 941, 943, 945, 947, 949, 951, 953, 955,
- 957, 959, 961, 963, 965, 967, 969, 971,
- 973, 975, 977, 979, 981, 983, 985, 987,
- }},
- {{
- 989, 991, 993, 995, 997, 999, 1001, 1003,
- 1005, 1007, 1009, 1011, 1013, 1015, 1017, 1019,
- 1021, 1023, 1025, 1027, 1029, 1031, 1033, 1035,
- 1037, 1039, 1041, 1043, 1045, 1047, 1049, 1051,
- }},
- {{
- 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067,
- 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083,
- 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099,
- 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1115,
- }},
- {{
- 1117, 1119, 1121, 1123, 1125, 1127, 1129, 1131,
- 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147,
- 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1163,
- 1165, 1167, 1169, 1171, 1173, 1175, 1177, 1179,
- }},
- {{
- 1181, 1183, 1185, 1187, 1189, 1191, 1193, 1195,
- 1197, 1199, 1201, 1203, 1205, 1207, 1209, 1211,
- 1213, 1215, 1217, 1219, 1221, 1223, 1225, 1227,
- 1229, 1231, 34001, 1235, 0, 0, 0, 0,
- }},
- {{
- 1237, 1239, 1241, 1243, 1245, 1247, 1249, 1251,
- 1253, 1255, 1257, 1259, 1261, 1263, 1265, 1267,
- 1269, 1271, 1273, 1275, 1277, 1279, 1281, 1283,
- 1285, 1287, 1289, 1291, 1293, 1295, 1297, 1299,
- }},
- {{
- 1301, 1303, 1305, 1307, 1309, 1311, 1313, 1315,
- 1317, 1319, 1321, 1323, 1325, 1327, 1329, 1331,
- 1333, 1335, 1337, 1339, 1341, 1343, 1345, 1347,
- 1349, 1351, 1353, 1355, 1357, 1359, 1361, 1363,
- }},
- {{
- 1365, 1367, 1369, 1371, 1373, 1375, 1377, 1379,
- 1381, 1383, 1385, 1387, 1389, 1391, 1393, 1395,
- 1397, 1399, 1401, 1403, 1405, 1407, 1409, 1411,
- 1413, 1415, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 1417, 1419, 1421, 1423, 1425, 1427, 1429, 1431,
- 1433, 1435, 1437, 1439, 1441, 1443, 1445, 1447,
- 1449, 1451, 1453, 1455, 1457, 1459, 0, 0,
- 1461, 1463, 1465, 1467, 1469, 1471, 0, 0,
- }},
- {{
- 1473, 1475, 1477, 1479, 1481, 1483, 1485, 1487,
- 1489, 1491, 1493, 1495, 1497, 1499, 1501, 1503,
- 1505, 1507, 1509, 1511, 1513, 1515, 1517, 1519,
- 1521, 1523, 1525, 1527, 1529, 1531, 1533, 1535,
- }},
- {{
- 1537, 1539, 1541, 1543, 1545, 1547, 0, 0,
- 1549, 1551, 1553, 1555, 1557, 1559, 0, 0,
- 1561, 1563, 1565, 1567, 1569, 1571, 1573, 1575,
- 0, 1577, 0, 1579, 0, 1581, 0, 1583,
- }},
- {{
- 1585, 1587, 1589, 1591, 1593, 1595, 1597, 1599,
- 1601, 1603, 1605, 1607, 1609, 1611, 1613, 1615,
- 1617, 1619, 1620, 1622, 1623, 1625, 1626, 1628,
- 1629, 1631, 1632, 1634, 1635, 1637, 0, 0,
- }},
- {{
- 1638, 1640, 1642, 1644, 1646, 1648, 1650, 1652,
- 1654, 1656, 1658, 1660, 1662, 1664, 1666, 1668,
- 1670, 1672, 1674, 1676, 1678, 1680, 1682, 1684,
- 1686, 1688, 1690, 1692, 1694, 1696, 1698, 1700,
- }},
- {{
- 1702, 1704, 1706, 1708, 1710, 1712, 1714, 1716,
- 1718, 1720, 1722, 1724, 1726, 1728, 1730, 1732,
- 1734, 1736, 1738, 1740, 1742, 0, 1744, 1746,
- 1748, 1750, 1752, 1754, 1755, 34525, 1759, 34528,
- }},
- {{
- 34530, 1764, 1766, 1768, 1770, 0, 1772, 1774,
- 1776, 1778, 1779, 1781, 1782, 1784, 1786, 1788,
- 1790, 1792, 1794, 1796, 0, 0, 1797, 1799,
- 1801, 1803, 1805, 1807, 0, 1808, 1810, 1812,
- }},
- {{
- 1814, 1816, 1818, 1820, 1821, 1823, 1825, 1827,
- 1829, 1831, 1833, 1835, 1836, 1838, 1840, 1841,
- 0, 0, 1842, 1844, 1846, 0, 1848, 1850,
- 1852, 1854, 1855, 1857, 1858, 1860, 34629, 0,
- }},
- {{
- 1863, 1864, 34633, 34634, 34635, 34636, 34637, 34638,
- 34639, 34640, 34641, 0, 0, 0, 0, 0,
- 0, 34642, 0, 0, 0, 0, 0, 34643,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 34645, 34646, 34648, 0,
- 0, 0, 0, 0, 0, 0, 0, 34651,
- 0, 0, 0, 34652, 34654, 0, 34657, 34659,
- 0, 0, 0, 0, 34662, 0, 34664, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 34666,
- 34668, 34670, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 34672,
- 0, 0, 0, 0, 0, 0, 0, 34676,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 34677, 34678, 0, 0, 34679, 34680, 34681, 34682,
- 34683, 34684, 34685, 34686, 34687, 34688, 34689, 34690,
- }},
- {{
- 34691, 34692, 34693, 34694, 34695, 34696, 34697, 34698,
- 34699, 34700, 34701, 34702, 34703, 34704, 34705, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 34706, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 34708, 34711, 34714, 34715, 0, 34717, 34720, 34723,
- 0, 34724, 34726, 34727, 34728, 34729, 34730, 34731,
- 34732, 34733, 34734, 34735, 0, 34736, 34737, 0,
- 0, 34739, 34740, 34741, 34742, 34743, 0, 0,
- }},
- {{
- 34744, 34746, 34749, 0, 34751, 0, 1984, 0,
- 34753, 0, 1986, 1987, 34756, 34757, 0, 34758,
- 34759, 34760, 0, 34761, 34762, 34763, 34764, 34765,
- 34766, 34767, 0, 0, 0, 34768, 34769, 34770,
- }},
- {{
- 34771, 0, 0, 0, 0, 34772, 34773, 34774,
- 34775, 34776, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 34777, 34780, 34783, 34786, 34789,
- 34792, 34795, 34798, 34801, 34804, 34807, 34810, 34813,
- }},
- {{
- 34815, 34816, 34818, 34821, 34823, 34824, 34826, 34829,
- 34833, 34835, 34836, 34838, 34841, 34842, 34843, 34844,
- 34845, 34846, 34848, 34851, 34853, 34854, 34856, 34859,
- 34863, 34865, 34866, 34868, 34871, 34872, 34873, 34874,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2107, 2109, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2111, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2113, 2115, 2117,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 2119, 0, 0, 0,
- 0, 2121, 0, 0, 2123, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 2125, 0, 2127, 0,
- 0, 0, 0, 0, 34897, 34899, 0, 34902,
- 34904, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 2139, 0, 0, 2141, 0, 0, 2143,
- 0, 2145, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2147, 0, 2149, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2151, 2153, 2155,
- 2157, 2159, 0, 0, 2161, 2163, 0, 0,
- 2165, 2167, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2169, 2171, 0, 0, 2173, 2175, 0, 0,
- 2177, 2179, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2181, 2183, 2185, 2187,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2189, 2191, 2193, 2195, 0, 0, 0, 0,
- 0, 0, 2197, 2199, 2201, 2203, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2205, 2206, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 34975, 34976, 34977, 34978, 34979, 34980, 34981, 34982,
- 34983, 34984, 34986, 34988, 34990, 34992, 34994, 34996,
- 34998, 35000, 35002, 35004, 35006, 35009, 35012, 35015,
- 35018, 35021, 35024, 35027, 35030, 35033, 35037, 35041,
- }},
- {{
- 35045, 35049, 35053, 35057, 35061, 35065, 35069, 35073,
- 35077, 35079, 35081, 35083, 35085, 35087, 35089, 35091,
- 35093, 35095, 35098, 35101, 35104, 35107, 35110, 35113,
- 35116, 35119, 35122, 35125, 35128, 35131, 35134, 35137,
- }},
- {{
- 35140, 35143, 35146, 35149, 35152, 35155, 35158, 35161,
- 35164, 35167, 35170, 35173, 35176, 35179, 35182, 35185,
- 35188, 35191, 35194, 35197, 35200, 35203, 35206, 35207,
- 35208, 35209, 35210, 35211, 35212, 35213, 35214, 35215,
- }},
- {{
- 35216, 35217, 35218, 35219, 35220, 35221, 35222, 35223,
- 35224, 35225, 35226, 35227, 35228, 35229, 35230, 35231,
- 35232, 35233, 35234, 35235, 35236, 35237, 35238, 35239,
- 35240, 35241, 35242, 35243, 35244, 35245, 35246, 35247,
- }},
- {{
- 35248, 35249, 35250, 35251, 35252, 35253, 35254, 35255,
- 35256, 35257, 35258, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 35259, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 35263, 35266, 35268, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2503, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 35273,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 35274, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 35275, 35276, 35277, 35278, 35279, 35280, 35281, 35282,
- 35283, 35284, 35285, 35286, 35287, 35288, 35289, 35290,
- 35291, 35292, 35293, 35294, 35295, 35296, 35297, 35298,
- 35299, 35300, 35301, 35302, 35303, 35304, 35305, 35306,
- }},
- {{
- 35307, 35308, 35309, 35310, 35311, 35312, 35313, 35314,
- 35315, 35316, 35317, 35318, 35319, 35320, 35321, 35322,
- 35323, 35324, 35325, 35326, 35327, 35328, 35329, 35330,
- 35331, 35332, 35333, 35334, 35335, 35336, 35337, 35338,
- }},
- {{
- 35339, 35340, 35341, 35342, 35343, 35344, 35345, 35346,
- 35347, 35348, 35349, 35350, 35351, 35352, 35353, 35354,
- 35355, 35356, 35357, 35358, 35359, 35360, 35361, 35362,
- 35363, 35364, 35365, 35366, 35367, 35368, 35369, 35370,
- }},
- {{
- 35371, 35372, 35373, 35374, 35375, 35376, 35377, 35378,
- 35379, 35380, 35381, 35382, 35383, 35384, 35385, 35386,
- 35387, 35388, 35389, 35390, 35391, 35392, 35393, 35394,
- 35395, 35396, 35397, 35398, 35399, 35400, 35401, 35402,
- }},
- {{
- 35403, 35404, 35405, 35406, 35407, 35408, 35409, 35410,
- 35411, 35412, 35413, 35414, 35415, 35416, 35417, 35418,
- 35419, 35420, 35421, 35422, 35423, 35424, 35425, 35426,
- 35427, 35428, 35429, 35430, 35431, 35432, 35433, 35434,
- }},
- {{
- 35435, 35436, 35437, 35438, 35439, 35440, 35441, 35442,
- 35443, 35444, 35445, 35446, 35447, 35448, 35449, 35450,
- 35451, 35452, 35453, 35454, 35455, 35456, 35457, 35458,
- 35459, 35460, 35461, 35462, 35463, 35464, 35465, 35466,
- }},
- {{
- 35467, 35468, 35469, 35470, 35471, 35472, 35473, 35474,
- 35475, 35476, 35477, 35478, 35479, 35480, 35481, 35482,
- 35483, 35484, 35485, 35486, 35487, 35488, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 35489, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 35490, 0,
- 35491, 35492, 35493, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2726, 0, 2728, 0,
- 2730, 0, 2732, 0, 2734, 0, 2736, 0,
- 2738, 0, 2740, 0, 2742, 0, 2744, 0,
- }},
- {{
- 2746, 0, 2748, 0, 0, 2750, 0, 2752,
- 0, 2754, 0, 0, 0, 0, 0, 0,
- 2756, 2758, 0, 2760, 2762, 0, 2764, 2766,
- 0, 2768, 2770, 0, 2772, 2774, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2776, 0, 0, 0,
- 0, 0, 0, 35546, 35548, 0, 2782, 35552,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2786, 0, 2788, 0,
- 2790, 0, 2792, 0, 2794, 0, 2796, 0,
- 2798, 0, 2800, 0, 2802, 0, 2804, 0,
- }},
- {{
- 2806, 0, 2808, 0, 0, 2810, 0, 2812,
- 0, 2814, 0, 0, 0, 0, 0, 0,
- 2816, 2818, 0, 2820, 2822, 0, 2824, 2826,
- 0, 2828, 2830, 0, 2832, 2834, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2836, 0, 0, 2838,
- 2840, 2842, 2844, 0, 0, 0, 2846, 35616,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 35618, 35619, 35620, 35621, 35622, 35623, 35624,
- 35625, 35626, 35627, 35628, 35629, 35630, 35631, 35632,
- }},
- {{
- 35633, 35634, 35635, 35636, 35637, 35638, 35639, 35640,
- 35641, 35642, 35643, 35644, 35645, 35646, 35647, 35648,
- 35649, 35650, 35651, 35652, 35653, 35654, 35655, 35656,
- 35657, 35658, 35659, 35660, 35661, 35662, 35663, 35664,
- }},
- {{
- 35665, 35666, 35667, 35668, 35669, 35670, 35671, 35672,
- 35673, 35674, 35675, 35676, 35677, 35678, 35679, 35680,
- 35681, 35682, 35683, 35684, 35685, 35686, 35687, 35688,
- 35689, 35690, 35691, 35692, 35693, 35694, 35695, 35696,
- }},
- {{
- 35697, 35698, 35699, 35700, 35701, 35702, 35703, 35704,
- 35705, 35706, 35707, 35708, 35709, 35710, 35711, 0,
- 0, 0, 35712, 35713, 35714, 35715, 35716, 35717,
- 35718, 35719, 35720, 35721, 35722, 35723, 35724, 35725,
- }},
- {{
- 35726, 35729, 35732, 35735, 35738, 35741, 35744, 35747,
- 35750, 35753, 35756, 35759, 35762, 35765, 35768, 35772,
- 35776, 35780, 35784, 35788, 35792, 35796, 35800, 35804,
- 35808, 35812, 35816, 35820, 35824, 0, 0, 0,
- }},
- {{
- 35828, 35831, 35834, 35837, 35840, 35843, 35846, 35849,
- 35852, 35855, 35858, 35861, 35864, 35867, 35870, 35873,
- 35876, 35879, 35882, 35885, 35888, 35891, 35894, 35897,
- 35900, 35903, 35906, 35909, 35912, 35915, 35918, 35921,
- }},
- {{
- 35924, 35927, 35930, 35933, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 35936, 35938, 35940, 35942, 35944, 35946, 35948,
- 35950, 35952, 35954, 35956, 35958, 35960, 35962, 35964,
- }},
- {{
- 35966, 35967, 35968, 35969, 35970, 35971, 35972, 35973,
- 35974, 35975, 35976, 35977, 35978, 35979, 35980, 35982,
- 35984, 35986, 35988, 35990, 35992, 35994, 35996, 35998,
- 36000, 36002, 36004, 36006, 0, 0, 0, 0,
- }},
- {{
- 36008, 36009, 36010, 36011, 36012, 36013, 36014, 36015,
- 36016, 36017, 36018, 36019, 36020, 36021, 36022, 36023,
- 36024, 36025, 36026, 36027, 36028, 36029, 36030, 36031,
- 36032, 36033, 36034, 36035, 36036, 36037, 36038, 36039,
- }},
- {{
- 36040, 36041, 36042, 36043, 36044, 36045, 36046, 36047,
- 36048, 36049, 36050, 36051, 36052, 36053, 36054, 36055,
- 36056, 36057, 36059, 36061, 36063, 36065, 36067, 36069,
- 36071, 36073, 36075, 36077, 36079, 36081, 36083, 36085,
- }},
- {{
- 36087, 36089, 36091, 36093, 36095, 36097, 36099, 36101,
- 36103, 36105, 36108, 36111, 0, 0, 0, 0,
- 36114, 36115, 36116, 36117, 36118, 36119, 36120, 36121,
- 36122, 36123, 36124, 36125, 36126, 36127, 36128, 36129,
- }},
- {{
- 36130, 36131, 36132, 36133, 36134, 36135, 36136, 36137,
- 36138, 36139, 36140, 36141, 36142, 36143, 36144, 36145,
- 36146, 36147, 36148, 36149, 36150, 36151, 36152, 36153,
- 36154, 36155, 36156, 36157, 36158, 36159, 36160, 0,
- }},
- {{
- 36161, 36165, 36169, 36173, 36176, 36180, 36183, 36186,
- 36191, 36195, 36198, 36201, 36204, 36208, 36212, 36215,
- 36218, 36220, 36223, 36227, 36231, 36233, 36238, 36244,
- 36249, 36252, 36257, 36262, 36266, 36269, 36272, 36275,
- }},
- {{
- 36279, 36284, 36288, 36291, 36294, 36297, 36299, 36301,
- 36303, 36305, 36308, 36311, 36316, 36319, 36323, 36328,
- 36331, 36333, 36335, 36340, 36344, 36349, 36352, 36357,
- 36359, 36362, 36365, 36368, 36371, 36374, 36378, 36381,
- }},
- {{
- 36383, 36386, 36389, 36392, 36396, 36399, 36402, 36405,
- 36410, 36414, 36416, 36421, 36423, 36427, 36431, 36434,
- 36437, 36440, 36444, 36446, 36449, 36453, 36455, 36460,
- 36463, 36465, 36467, 36469, 36471, 36473, 36475, 36477,
- }},
- {{
- 36479, 36481, 36483, 36486, 36489, 36492, 36495, 36498,
- 36501, 36504, 36507, 36510, 36513, 36516, 36519, 36522,
- 36525, 36528, 36531, 36533, 36535, 36538, 36540, 0,
- 0, 0, 0, 36542, 36544, 36546, 36548, 36550,
- }},
- {{
- 36554, 36556, 36558, 36560, 36562, 36564, 36566, 36568,
- 36570, 36573, 36577, 36579, 36581, 36583, 36585, 36587,
- 36589, 36591, 36594, 36597, 36600, 36603, 36605, 36607,
- 36609, 36611, 36613, 36615, 36617, 36619, 36621, 36623,
- }},
- {{
- 36626, 36629, 36631, 36634, 36637, 36640, 36642, 36645,
- 36648, 36652, 36654, 36657, 36660, 36663, 36666, 36671,
- 36677, 36679, 36681, 36683, 36685, 36687, 36689, 36691,
- 36693, 36695, 36697, 36699, 36701, 36703, 36705, 36707,
- }},
- {{
- 36709, 36711, 36713, 36717, 36719, 36721, 36723, 36727,
- 36730, 36732, 36734, 36736, 36738, 36740, 36742, 36744,
- 36746, 36748, 36750, 36753, 36755, 36757, 36760, 36763,
- 36765, 36769, 36772, 36774, 36776, 36778, 0, 0,
- }},
- {{
- 36780, 36782, 36784, 36786, 36788, 36790, 36792, 36794,
- 36796, 36798, 36801, 36804, 36807, 36810, 36813, 36816,
- 36819, 36822, 36825, 36828, 36831, 36834, 36837, 36840,
- 36843, 36846, 36849, 36852, 36855, 36858, 36861, 0,
- }},
- {{
- 4096, 4097, 4098, 4099, 4100, 4101, 4102, 4103,
- 4104, 4105, 4106, 4107, 4108, 4109, 4110, 4111,
- 4112, 4113, 4114, 4115, 4116, 4117, 4118, 4119,
- 4120, 4121, 4122, 4123, 4124, 4125, 4126, 4127,
- }},
- {{
- 4128, 4129, 4130, 4131, 4132, 4133, 4134, 4135,
- 4136, 4137, 4138, 4139, 4140, 4141, 4142, 4143,
- 4144, 4145, 4146, 4147, 4148, 4149, 4150, 4151,
- 4152, 4153, 4154, 4155, 4156, 4157, 4158, 4159,
- }},
- {{
- 4160, 4161, 4162, 4163, 4164, 4165, 4166, 4167,
- 4168, 4169, 4170, 4171, 4172, 4173, 4174, 4175,
- 4176, 4177, 4178, 4179, 4180, 4181, 4182, 4183,
- 4184, 4185, 4186, 4187, 4188, 4189, 4190, 4191,
- }},
- {{
- 4192, 4193, 4194, 4195, 4196, 4197, 4198, 4199,
- 4200, 4201, 4202, 4203, 4204, 4205, 4206, 4207,
- 4208, 4209, 4210, 4211, 4212, 4213, 4214, 4215,
- 4216, 4217, 4218, 4219, 4220, 4221, 4222, 4223,
- }},
- {{
- 4224, 4225, 4226, 4227, 4228, 4229, 4230, 4231,
- 4232, 4233, 4234, 4235, 4236, 4237, 4238, 4239,
- 4240, 4241, 4242, 4243, 4244, 4245, 4246, 4247,
- 4248, 4249, 4250, 4251, 4252, 4253, 4254, 4255,
- }},
- {{
- 4256, 4257, 4258, 4259, 4260, 4261, 4262, 4263,
- 4264, 4265, 4266, 4267, 4268, 4269, 4270, 4271,
- 4272, 4273, 4274, 4275, 4276, 4277, 4278, 4279,
- 4280, 4281, 4282, 4283, 4284, 4285, 4286, 4287,
- }},
- {{
- 4288, 4289, 4290, 4291, 4292, 4293, 4294, 4295,
- 4296, 4297, 4298, 4299, 4300, 4301, 4302, 4303,
- 4304, 4305, 4306, 4307, 4308, 4309, 4310, 4311,
- 4312, 4313, 4314, 4315, 4316, 4317, 4318, 4319,
- }},
- {{
- 4320, 4321, 4322, 4323, 4324, 4325, 4326, 4327,
- 4328, 4329, 4330, 4331, 4332, 4333, 4334, 4335,
- 4336, 4337, 4338, 4339, 4340, 4341, 4342, 4343,
- 4344, 4345, 4346, 4347, 4348, 4349, 4350, 4351,
- }},
- {{
- 4352, 4353, 4354, 4355, 4356, 4357, 4358, 4359,
- 4360, 4361, 4362, 4363, 4364, 4365, 0, 0,
- 4366, 0, 4367, 0, 0, 4368, 4369, 4370,
- 4371, 4372, 4373, 4374, 4375, 4376, 4377, 0,
- }},
- {{
- 4378, 0, 4379, 0, 0, 4380, 4381, 0,
- 0, 0, 4382, 4383, 4384, 4385, 0, 0,
- 4386, 4387, 4388, 4389, 4390, 4391, 4392, 4393,
- 4394, 4395, 4396, 4397, 4398, 4399, 4400, 4401,
- }},
- {{
- 4402, 4403, 4404, 4405, 4406, 4407, 4408, 4409,
- 4410, 4411, 4412, 4413, 4414, 4415, 4416, 4417,
- 4418, 4419, 4420, 4421, 4422, 4423, 4424, 4425,
- 4426, 4427, 4428, 4429, 4430, 4431, 4432, 4433,
- }},
- {{
- 4434, 4435, 4436, 4437, 4438, 4439, 4440, 4441,
- 4442, 4443, 4444, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 37213, 37215, 37217, 37219, 37222, 37225, 37227, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 37229, 37231, 37233, 37235, 37237,
- 0, 0, 0, 0, 0, 4471, 0, 4473,
- }},
- {{
- 37243, 37244, 37245, 37246, 37247, 37248, 37249, 37250,
- 37251, 37252, 4485, 4487, 4489, 4491, 4493, 4495,
- 4497, 4499, 4501, 4503, 4505, 4507, 4509, 0,
- 4511, 4513, 4515, 4517, 4519, 0, 4521, 0,
- }},
- {{
- 4523, 4525, 0, 4527, 4529, 0, 4531, 4533,
- 4535, 4537, 4539, 4541, 4543, 4545, 4547, 37317,
- 37319, 37320, 37321, 37322, 37323, 37324, 37325, 37326,
- 37327, 37328, 37329, 37330, 37331, 37332, 37333, 37334,
- }},
- {{
- 37335, 37336, 37337, 37338, 37339, 37340, 37341, 37342,
- 37343, 37344, 37345, 37346, 37347, 37348, 37349, 37350,
- 37351, 37352, 37353, 37354, 37355, 37356, 37357, 37358,
- 37359, 37360, 37361, 37362, 37363, 37364, 37365, 37366,
- }},
- {{
- 37367, 37368, 37369, 37370, 37371, 37372, 37373, 37374,
- 37375, 37376, 37377, 37378, 37379, 37380, 37381, 37382,
- 37383, 37384, 37385, 37386, 37387, 37388, 37389, 37390,
- 37391, 37392, 37393, 37394, 37395, 37396, 37397, 37398,
- }},
- {{
- 37399, 37400, 37401, 37402, 37403, 37404, 37405, 37406,
- 37407, 37408, 37409, 37410, 37411, 37412, 37413, 37414,
- 37415, 37416, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 37417, 37418, 37419, 37420, 37421,
- 37422, 37423, 37424, 37425, 37426, 37427, 37428, 37429,
- }},
- {{
- 37430, 37431, 37432, 37433, 37434, 37435, 37436, 37437,
- 37438, 37439, 37440, 37442, 37444, 37446, 37448, 37450,
- 37452, 37454, 37456, 37458, 37460, 37462, 37464, 37466,
- 37468, 37470, 37472, 37474, 37476, 37477, 37478, 37479,
- }},
- {{
- 37480, 37482, 37484, 37486, 37488, 37490, 37492, 37494,
- 37496, 37498, 37500, 37502, 37504, 37506, 37508, 37510,
- 37512, 37514, 37516, 37518, 37520, 37522, 37524, 37526,
- 37528, 37530, 37532, 37534, 37536, 37538, 37540, 37542,
- }},
- {{
- 37544, 37546, 37548, 37550, 37552, 37554, 37556, 37558,
- 37560, 37562, 37564, 37566, 37568, 37570, 37572, 37574,
- 37576, 37578, 37580, 37582, 37584, 37586, 37588, 37590,
- 37592, 37594, 37596, 37598, 37600, 37602, 37604, 37606,
- }},
- {{
- 37608, 37610, 37612, 37614, 37616, 37618, 37620, 37622,
- 37624, 37626, 37628, 37630, 37632, 37634, 37636, 37638,
- 37640, 37642, 37644, 37646, 37648, 37650, 37652, 37654,
- 37656, 37658, 37660, 37662, 37664, 37666, 37668, 37671,
- }},
- {{
- 37674, 37677, 37680, 37683, 37686, 37688, 37690, 37692,
- 37694, 37696, 37698, 37700, 37702, 37704, 37706, 37708,
- 37710, 37712, 37714, 37716, 37718, 37720, 37722, 37724,
- 37726, 37728, 37730, 37732, 37734, 37736, 37738, 37740,
- }},
- {{
- 37742, 37744, 37746, 37748, 37750, 37752, 37754, 37756,
- 37758, 37760, 37762, 37764, 37766, 37768, 37770, 37772,
- 37774, 37776, 37778, 37780, 37782, 37784, 37786, 37788,
- 37790, 37792, 37794, 37796, 37798, 37800, 37802, 37804,
- }},
- {{
- 37806, 37808, 37810, 37812, 37814, 37816, 37818, 37820,
- 37822, 37824, 37826, 37828, 37830, 37832, 37834, 37836,
- 37838, 37840, 37842, 37844, 37846, 37848, 37850, 37852,
- 37854, 37856, 37858, 37860, 37862, 37864, 37866, 37868,
- }},
- {{
- 37870, 37872, 37874, 37876, 37878, 37880, 37882, 37884,
- 37886, 37888, 37890, 37892, 37894, 37896, 37898, 37900,
- 37902, 37904, 37906, 37908, 37910, 37912, 37914, 37916,
- 37918, 37920, 37922, 37924, 37926, 37928, 37930, 37932,
- }},
- {{
- 37934, 37936, 37938, 37940, 37942, 37944, 37946, 37948,
- 37950, 37952, 37954, 37956, 37958, 37960, 37962, 37964,
- 37966, 37968, 37970, 37973, 37976, 37979, 37981, 37983,
- 37985, 37987, 37989, 37991, 37993, 37995, 37997, 37999,
- }},
- {{
- 38001, 38003, 38005, 38007, 38009, 38011, 38013, 38015,
- 38017, 38019, 38021, 38023, 38025, 38027, 38029, 38031,
- 38033, 38035, 38037, 38039, 38041, 38043, 38045, 38047,
- 38049, 38051, 38053, 38055, 38057, 38059, 38061, 38063,
- }},
- {{
- 38065, 38067, 38069, 38071, 38073, 38075, 38077, 38079,
- 38081, 38083, 38085, 38087, 38089, 38091, 38093, 38095,
- 38097, 38099, 38101, 38103, 38105, 38107, 38109, 38111,
- 38113, 38115, 38117, 38119, 38121, 38123, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 38125, 38128, 38131, 38134, 38137, 38140, 38143, 38146,
- 38149, 38152, 38155, 38158, 38161, 38164, 38167, 38170,
- }},
- {{
- 38173, 38176, 38179, 38182, 38185, 38188, 38191, 38194,
- 38197, 38200, 38203, 38206, 38209, 38212, 38215, 38218,
- 38221, 38224, 38227, 38230, 38233, 38236, 38239, 38242,
- 38245, 38248, 38251, 38254, 38257, 38260, 38263, 38266,
- }},
- {{
- 38269, 38272, 38275, 38278, 38281, 38284, 38287, 38290,
- 38293, 38296, 38299, 38302, 38305, 38308, 38311, 38314,
- 0, 0, 38317, 38320, 38323, 38326, 38329, 38332,
- 38335, 38338, 38341, 38344, 38347, 38350, 38353, 38356,
- }},
- {{
- 38359, 38362, 38365, 38368, 38371, 38374, 38377, 38380,
- 38383, 38386, 38389, 38392, 38395, 38398, 38401, 38404,
- 38407, 38410, 38413, 38416, 38419, 38422, 38425, 38428,
- 38431, 38434, 38437, 38440, 38443, 38446, 38449, 38452,
- }},
- {{
- 38455, 38458, 38461, 38464, 38467, 38470, 38473, 38476,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 38479, 38482, 38485, 38489, 38493, 38497, 38501, 38505,
- 38509, 38513, 38516, 38534, 38542, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 38546, 38547, 38548, 38549, 38550, 38551, 38552, 38553,
- 38554, 38555, 38556, 38557, 38558, 38559, 38560, 38561,
- }},
- {{
- 38562, 38563, 38564, 38565, 38566, 0, 0, 0,
- 0, 38567, 38568, 38569, 38570, 38571, 38572, 38573,
- 38574, 38575, 38576, 0, 38577, 38578, 38579, 38580,
- 38581, 38582, 38583, 38584, 38585, 38586, 38587, 38588,
- }},
- {{
- 38589, 38590, 38591, 38592, 38593, 38594, 38595, 0,
- 38596, 38597, 38598, 38599, 0, 0, 0, 0,
- 38600, 38602, 38604, 0, 38606, 0, 38608, 38610,
- 38612, 38614, 38616, 38618, 38620, 38622, 38624, 38626,
- }},
- {{
- 38628, 38629, 38630, 38631, 38632, 38633, 38634, 38635,
- 38636, 38637, 38638, 38639, 38640, 38641, 38642, 38643,
- 38644, 38645, 38646, 38647, 38648, 38649, 38650, 38651,
- 38652, 38653, 38654, 38655, 38656, 38657, 38658, 38659,
- }},
- {{
- 38660, 38661, 38662, 38663, 38664, 38665, 38666, 38667,
- 38668, 38669, 38670, 38671, 38672, 38673, 38674, 38675,
- 38676, 38677, 38678, 38679, 38680, 38681, 38682, 38683,
- 38684, 38685, 38686, 38687, 38688, 38689, 38690, 38691,
- }},
- {{
- 38692, 38693, 38694, 38695, 38696, 38697, 38698, 38699,
- 38700, 38701, 38702, 38703, 38704, 38705, 38706, 38707,
- 38708, 38709, 38710, 38711, 38712, 38713, 38714, 38715,
- 38716, 38717, 38718, 38719, 38720, 38721, 38722, 38723,
- }},
- {{
- 38724, 38725, 38726, 38727, 38728, 38729, 38730, 38731,
- 38732, 38733, 38734, 38735, 38736, 38737, 38738, 38739,
- 38740, 38741, 38742, 38743, 38744, 38745, 38747, 38749,
- 38751, 38753, 38755, 38757, 38759, 0, 0, 0,
- }},
- {{
- 0, 38761, 38762, 38763, 38764, 38765, 38766, 38767,
- 38768, 38769, 38770, 38771, 38772, 38773, 38774, 38775,
- 38776, 38777, 38778, 38779, 38780, 38781, 38782, 38783,
- 38784, 38785, 38786, 38787, 38788, 38789, 38790, 38791,
- }},
- {{
- 38792, 38793, 38794, 38795, 38796, 38797, 38798, 38799,
- 38800, 38801, 38802, 38803, 38804, 38805, 38806, 38807,
- 38808, 38809, 38810, 38811, 38812, 38813, 38814, 38815,
- 38816, 38817, 38818, 38819, 38820, 38821, 38822, 38823,
- }},
- {{
- 38824, 38825, 38826, 38827, 38828, 38829, 38830, 38831,
- 38832, 38833, 38834, 38835, 38836, 38837, 38838, 38839,
- 38840, 38841, 38842, 38843, 38844, 38845, 38846, 38847,
- 38848, 38849, 38850, 38851, 38852, 38853, 38854, 38855,
- }},
- {{
- 38856, 38857, 38858, 38859, 38860, 38861, 38862, 38863,
- 38864, 38865, 38866, 38867, 38868, 38869, 38870, 38871,
- 38872, 38873, 38874, 38875, 38876, 38877, 38878, 38879,
- 38880, 38881, 38882, 38883, 38884, 38885, 38886, 38887,
- }},
- {{
- 38888, 38889, 38890, 38891, 38892, 38893, 38894, 38895,
- 38896, 38897, 38898, 38899, 38900, 38901, 38902, 38903,
- 38904, 38905, 38906, 38907, 38908, 38909, 38910, 38911,
- 38912, 38913, 38914, 38915, 38916, 38917, 38918, 38919,
- }},
- {{
- 38920, 38921, 38922, 38923, 38924, 38925, 38926, 38927,
- 38928, 38929, 38930, 38931, 38932, 38933, 38934, 38935,
- 38936, 38937, 38938, 38939, 38940, 38941, 38942, 38943,
- 38944, 38945, 38946, 38947, 38948, 38949, 38950, 0,
- }},
- {{
- 0, 0, 38951, 38952, 38953, 38954, 38955, 38956,
- 0, 0, 38957, 38958, 38959, 38960, 38961, 38962,
- 0, 0, 38963, 38964, 38965, 38966, 38967, 38968,
- 0, 0, 38969, 38970, 38971, 0, 0, 0,
- }},
- {{
- 38972, 38973, 38974, 38975, 38976, 38977, 38978, 0,
- 38979, 38980, 38981, 38982, 38983, 38984, 38985, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 6218, 6220,
- }},
- {{
- 6222, 6224, 6226, 6228, 6230, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 6232, 6234, 6236, 6238, 6240,
- }},
- {{
- 6242, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 39012, 39013, 39014, 39015, 39016, 39017, 39018, 39019,
- 39020, 39021, 39022, 39023, 39024, 39025, 39026, 39027,
- 39028, 39029, 39030, 39031, 39032, 39033, 39034, 39035,
- 39036, 39037, 39038, 39039, 39040, 39041, 39042, 39043,
- }},
- {{
- 39044, 39045, 39046, 39047, 39048, 39049, 39050, 39051,
- 39052, 39053, 39054, 39055, 39056, 39057, 39058, 39059,
- 39060, 39061, 39062, 39063, 39064, 39065, 39066, 39067,
- 39068, 39069, 39070, 39071, 39072, 39073, 39074, 39075,
- }},
- {{
- 39076, 39077, 39078, 39079, 39080, 39081, 39082, 39083,
- 39084, 39085, 39086, 39087, 39088, 39089, 39090, 39091,
- 39092, 39093, 39094, 39095, 39096, 0, 39097, 39098,
- 39099, 39100, 39101, 39102, 39103, 39104, 39105, 39106,
- }},
- {{
- 39107, 39108, 39109, 39110, 39111, 39112, 39113, 39114,
- 39115, 39116, 39117, 39118, 39119, 39120, 39121, 39122,
- 39123, 39124, 39125, 39126, 39127, 39128, 39129, 39130,
- 39131, 39132, 39133, 39134, 39135, 39136, 39137, 39138,
- }},
- {{
- 39139, 39140, 39141, 39142, 39143, 39144, 39145, 39146,
- 39147, 39148, 39149, 39150, 39151, 39152, 39153, 39154,
- 39155, 39156, 39157, 39158, 39159, 39160, 39161, 39162,
- 39163, 39164, 39165, 39166, 39167, 0, 39168, 39169,
- }},
- {{
- 0, 0, 39170, 0, 0, 39171, 39172, 0,
- 0, 39173, 39174, 39175, 39176, 0, 39177, 39178,
- 39179, 39180, 39181, 39182, 39183, 39184, 39185, 39186,
- 39187, 39188, 0, 39189, 0, 39190, 39191, 39192,
- }},
- {{
- 39193, 0, 39194, 39195, 0, 39196, 39197, 39198,
- 39199, 39200, 39201, 39202, 39203, 39204, 39205, 39206,
- 39207, 39208, 39209, 39210, 39211, 39212, 39213, 39214,
- 39215, 39216, 39217, 39218, 39219, 39220, 39221, 39222,
- }},
- {{
- 39223, 39224, 39225, 39226, 39227, 39228, 39229, 39230,
- 39231, 39232, 39233, 39234, 39235, 39236, 39237, 39238,
- 39239, 39240, 39241, 39242, 39243, 39244, 39245, 39246,
- 39247, 39248, 39249, 39250, 39251, 39252, 39253, 39254,
- }},
- {{
- 39255, 39256, 39257, 39258, 39259, 39260, 0, 39261,
- 39262, 39263, 39264, 0, 0, 39265, 39266, 39267,
- 39268, 39269, 39270, 39271, 39272, 0, 39273, 39274,
- 39275, 39276, 39277, 39278, 39279, 0, 39280, 39281,
- }},
- {{
- 39282, 39283, 39284, 39285, 39286, 39287, 39288, 39289,
- 39290, 39291, 39292, 39293, 39294, 39295, 39296, 39297,
- 39298, 39299, 39300, 39301, 39302, 39303, 39304, 39305,
- 39306, 39307, 0, 39308, 39309, 39310, 39311, 0,
- }},
- {{
- 39312, 39313, 39314, 39315, 39316, 0, 39317, 0,
- 0, 0, 39318, 39319, 39320, 39321, 39322, 39323,
- 39324, 0, 39325, 39326, 39327, 39328, 39329, 39330,
- 39331, 39332, 39333, 39334, 39335, 39336, 39337, 39338,
- }},
- {{
- 39339, 39340, 39341, 39342, 39343, 39344, 39345, 39346,
- 39347, 39348, 39349, 39350, 39351, 39352, 39353, 39354,
- 39355, 39356, 39357, 39358, 39359, 39360, 39361, 39362,
- 39363, 39364, 39365, 39366, 39367, 39368, 39369, 39370,
- }},
- {{
- 39371, 39372, 39373, 39374, 39375, 39376, 39377, 39378,
- 39379, 39380, 39381, 39382, 39383, 39384, 39385, 39386,
- 39387, 39388, 39389, 39390, 39391, 39392, 39393, 39394,
- 39395, 39396, 39397, 39398, 39399, 39400, 39401, 39402,
- }},
- {{
- 39403, 39404, 39405, 39406, 39407, 39408, 39409, 39410,
- 39411, 39412, 39413, 39414, 39415, 39416, 39417, 39418,
- 39419, 39420, 39421, 39422, 39423, 39424, 39425, 39426,
- 39427, 39428, 39429, 39430, 39431, 39432, 39433, 39434,
- }},
- {{
- 39435, 39436, 39437, 39438, 39439, 39440, 39441, 39442,
- 39443, 39444, 39445, 39446, 39447, 39448, 39449, 39450,
- 39451, 39452, 39453, 39454, 39455, 39456, 39457, 39458,
- 39459, 39460, 39461, 39462, 39463, 39464, 39465, 39466,
- }},
- {{
- 39467, 39468, 39469, 39470, 39471, 39472, 39473, 39474,
- 39475, 39476, 39477, 39478, 39479, 39480, 39481, 39482,
- 39483, 39484, 39485, 39486, 39487, 39488, 39489, 39490,
- 39491, 39492, 39493, 39494, 39495, 39496, 39497, 39498,
- }},
- {{
- 39499, 39500, 39501, 39502, 39503, 39504, 39505, 39506,
- 39507, 39508, 39509, 39510, 39511, 39512, 39513, 39514,
- 39515, 39516, 39517, 39518, 39519, 39520, 39521, 39522,
- 39523, 39524, 39525, 39526, 39527, 39528, 39529, 39530,
- }},
- {{
- 39531, 39532, 39533, 39534, 39535, 39536, 39537, 39538,
- 39539, 39540, 39541, 39542, 39543, 39544, 39545, 39546,
- 39547, 39548, 39549, 39550, 39551, 39552, 39553, 39554,
- 39555, 39556, 39557, 39558, 39559, 39560, 39561, 39562,
- }},
- {{
- 39563, 39564, 39565, 39566, 39567, 39568, 39569, 39570,
- 39571, 39572, 39573, 39574, 39575, 39576, 39577, 39578,
- 39579, 39580, 39581, 39582, 39583, 39584, 39585, 39586,
- 39587, 39588, 39589, 39590, 39591, 39592, 39593, 39594,
- }},
- {{
- 39595, 39596, 39597, 39598, 39599, 39600, 39601, 39602,
- 39603, 39604, 39605, 39606, 39607, 39608, 39609, 39610,
- 39611, 39612, 39613, 39614, 39615, 39616, 39617, 39618,
- 39619, 39620, 39621, 39622, 39623, 39624, 39625, 39626,
- }},
- {{
- 39627, 39628, 39629, 39630, 39631, 39632, 39633, 39634,
- 39635, 39636, 39637, 39638, 39639, 39640, 39641, 39642,
- 39643, 39644, 39645, 39646, 39647, 39648, 39649, 39650,
- 39651, 39652, 39653, 39654, 39655, 39656, 39657, 39658,
- }},
- {{
- 39659, 39660, 39661, 39662, 0, 0, 0, 0,
- 39663, 39664, 39665, 39666, 39667, 39668, 39669, 39670,
- 39671, 39672, 39673, 39674, 39675, 39676, 39677, 39678,
- 39679, 39680, 39681, 39682, 39683, 39684, 39685, 39686,
- }},
- {{
- 39687, 39688, 39689, 39690, 39691, 39692, 39693, 39694,
- 39695, 39696, 39697, 39698, 39699, 39700, 39701, 39702,
- 39703, 39704, 39705, 39706, 39707, 39708, 39709, 39710,
- 39711, 39712, 39713, 39714, 39715, 39716, 39717, 39718,
- }},
- {{
- 39719, 39720, 39721, 39722, 39723, 39724, 39725, 39726,
- 39727, 39728, 39729, 39730, 39731, 39732, 39733, 39734,
- 39735, 39736, 39737, 39738, 39739, 39740, 39741, 39742,
- 39743, 39744, 39745, 39746, 39747, 39748, 39749, 39750,
- }},
- {{
- 39751, 39752, 39753, 39754, 39755, 39756, 39757, 39758,
- 39759, 39760, 39761, 39762, 39763, 39764, 39765, 39766,
- 39767, 39768, 39769, 39770, 39771, 39772, 39773, 39774,
- 39775, 39776, 39777, 39778, 39779, 39780, 39781, 39782,
- }},
- {{
- 39783, 39784, 39785, 39786, 39787, 39788, 39789, 39790,
- 39791, 39792, 39793, 39794, 39795, 39796, 39797, 39798,
- 39799, 39800, 39801, 39802, 39803, 39804, 39805, 39806,
- 39807, 39808, 39809, 39810, 39811, 39812, 39813, 39814,
- }},
- {{
- 39815, 39816, 39817, 39818, 39819, 39820, 39821, 39822,
- 39823, 39824, 39825, 39826, 39827, 39828, 39829, 39830,
- 39831, 39832, 39833, 39834, 39835, 39836, 39837, 39838,
- 39839, 39840, 39841, 39842, 39843, 39844, 39845, 39846,
- }},
- {{
- 39847, 39848, 39849, 39850, 39851, 39852, 39853, 39854,
- 39855, 39856, 39857, 39858, 39859, 39860, 39861, 39862,
- 39863, 39864, 39865, 39866, 39867, 39868, 39869, 39870,
- 39871, 39872, 39873, 39874, 39875, 39876, 39877, 39878,
- }},
- {{
- 39879, 39880, 39881, 39882, 39883, 39884, 39885, 39886,
- 39887, 39888, 39889, 39890, 39891, 39892, 39893, 39894,
- 39895, 39896, 39897, 39898, 39899, 39900, 39901, 39902,
- 39903, 39904, 39905, 39906, 39907, 39908, 39909, 39910,
- }},
- {{
- 39911, 39912, 39913, 39914, 39915, 39916, 39917, 39918,
- 39919, 39920, 39921, 39922, 39923, 39924, 39925, 39926,
- 39927, 39928, 39929, 39930, 39931, 39932, 39933, 39934,
- 39935, 39936, 39937, 39938, 39939, 39940, 39941, 39942,
- }},
- {{
- 39943, 39944, 39945, 39946, 39947, 39948, 39949, 39950,
- 39951, 39952, 0, 0, 0, 0, 39953, 39954,
- 39955, 39956, 39957, 39958, 39959, 39960, 39961, 39962,
- 39963, 39964, 39965, 39966, 39967, 39968, 39969, 39970,
- }},
- {{
- 39971, 39972, 39973, 39974, 39975, 39976, 39977, 39978,
- 39979, 39980, 39981, 39982, 39983, 39984, 39985, 39986,
- 39987, 39988, 39989, 39990, 39991, 39992, 39993, 39994,
- 39995, 39996, 39997, 39998, 39999, 40000, 40001, 40002,
- }},
- {{
- 7235, 7236, 7237, 7238, 7239, 7240, 7241, 7242,
- 7243, 7244, 7245, 7246, 7247, 7248, 7249, 7250,
- 7251, 7252, 7253, 7254, 7255, 7256, 7257, 7258,
- 7259, 7260, 7261, 7262, 7263, 7264, 7265, 7266,
- }},
- {{
- 7267, 7268, 7269, 7270, 7271, 7272, 7273, 7274,
- 7275, 7276, 7277, 7278, 7279, 7280, 7281, 7282,
- 7283, 7284, 7285, 7286, 7287, 7288, 7289, 7290,
- 7291, 7292, 7293, 7294, 7295, 7296, 7297, 7298,
- }},
- {{
- 7299, 7300, 7301, 7302, 7303, 7304, 7305, 7306,
- 7307, 7308, 7309, 7310, 7311, 7312, 7313, 7314,
- 7315, 7316, 7317, 7318, 7319, 7320, 7321, 7322,
- 7323, 7324, 7325, 7326, 7327, 7328, 7329, 7330,
- }},
- {{
- 7331, 7332, 7333, 7334, 7335, 7336, 7337, 7338,
- 7339, 7340, 7341, 7342, 7343, 7344, 7345, 7346,
- 7347, 7348, 7349, 7350, 7351, 7352, 7353, 7354,
- 7355, 7356, 7357, 7358, 7359, 7360, 7361, 7362,
- }},
- {{
- 7363, 7364, 7365, 7366, 7367, 7368, 7369, 7370,
- 7371, 7372, 7373, 7374, 7375, 7376, 7377, 7378,
- 7379, 7380, 7381, 7382, 7383, 7384, 7385, 7386,
- 7387, 7388, 7389, 7390, 7391, 7392, 7393, 7394,
- }},
- {{
- 7395, 7396, 7397, 7398, 7399, 7400, 7401, 7402,
- 7403, 7404, 7405, 7406, 7407, 7408, 7409, 7410,
- 7411, 7412, 7413, 7414, 7415, 7416, 7417, 7418,
- 7419, 7420, 7421, 7422, 7423, 7424, 7425, 7426,
- }},
- {{
- 7427, 7428, 7429, 7430, 7431, 7432, 7433, 7434,
- 7435, 7436, 7437, 7438, 7439, 7440, 7441, 7442,
- 7443, 7444, 7445, 7446, 7447, 7448, 7449, 7450,
- 7451, 7452, 7453, 7454, 7455, 7456, 7457, 7458,
- }},
- {{
- 7459, 7460, 7461, 7462, 7463, 7464, 7465, 7466,
- 7467, 7468, 7469, 7470, 7471, 7472, 7473, 7474,
- 7475, 7476, 7477, 7478, 7479, 7480, 7481, 7482,
- 7483, 7484, 7485, 7486, 7487, 7488, 7489, 7490,
- }},
- {{
- 7491, 7492, 7493, 7494, 7495, 7496, 7497, 7498,
- 7499, 7500, 7501, 7502, 7503, 7504, 7505, 7506,
- 7507, 7508, 7509, 7510, 7511, 7512, 7513, 7514,
- 7515, 7516, 7517, 7518, 7519, 7520, 7521, 7522,
- }},
- {{
- 7523, 7524, 7525, 7526, 7527, 7528, 7529, 7530,
- 7531, 7532, 7533, 7534, 7535, 7536, 7537, 7538,
- 7539, 7540, 7541, 7542, 7543, 7544, 7545, 7546,
- 7547, 7548, 7549, 7550, 7551, 7552, 7553, 7554,
- }},
- {{
- 7555, 7556, 7557, 7558, 7559, 7560, 7561, 7562,
- 7563, 7564, 7565, 7566, 7567, 7568, 7569, 7570,
- 7571, 7572, 7573, 7574, 7575, 7576, 7577, 7578,
- 7579, 7580, 7581, 7582, 7583, 7584, 7585, 7586,
- }},
- {{
- 7587, 7588, 7589, 7590, 7591, 7592, 7593, 7594,
- 7595, 7596, 7597, 7598, 7599, 7600, 7601, 7602,
- 7603, 7604, 7605, 7606, 7607, 7608, 7609, 7610,
- 7611, 7612, 7613, 7614, 7615, 7616, 7617, 7618,
- }},
- {{
- 7619, 7620, 7621, 7622, 7623, 7624, 7625, 7626,
- 7627, 7628, 7629, 7630, 7631, 7632, 7633, 7634,
- 7635, 7636, 7637, 7638, 7639, 7640, 7641, 7642,
- 7643, 7644, 7645, 7646, 7647, 7648, 7649, 7650,
- }},
- {{
- 7651, 7652, 7653, 7654, 7655, 7656, 7657, 7658,
- 7659, 7660, 7661, 7662, 7663, 7664, 7665, 7666,
- 7667, 7668, 7669, 7670, 7671, 7672, 7673, 7674,
- 7675, 7676, 7677, 7678, 7679, 7680, 7681, 7682,
- }},
- {{
- 7683, 7684, 7685, 7686, 7687, 7688, 7689, 7690,
- 7691, 7692, 7693, 7694, 7695, 7696, 7697, 7698,
- 7699, 7700, 7701, 7702, 7703, 7704, 7705, 7706,
- 7707, 7708, 7709, 7710, 7711, 7712, 7713, 7714,
- }},
- {{
- 7715, 7716, 7717, 7718, 7719, 7720, 7721, 7722,
- 7723, 7724, 7725, 7726, 7727, 7728, 7729, 7730,
- 7731, 7732, 7733, 7734, 7735, 7736, 7737, 7738,
- 7739, 7740, 7741, 7742, 7743, 7744, 7745, 7746,
- }},
- {{
- 7747, 7748, 7749, 7750, 7751, 7752, 7753, 7754,
- 7755, 7756, 7757, 7758, 7759, 7760, 7761, 7762,
- 7763, 7764, 7765, 7766, 7767, 7768, 7769, 7770,
- 7771, 7772, 7773, 7774, 7775, 7776, 0, 0,
- }},
-};
-static const unsigned long v320_decompose_seq[] = {
- 0x00000000, 0x80000020, 0x00000020, 0x80000308,
- 0x80000061, 0x00000020, 0x80000304, 0x80000032,
- 0x80000033, 0x00000020, 0x80000301, 0x800003bc,
- 0x00000020, 0x80000327, 0x80000031, 0x8000006f,
- 0x00000031, 0x00002044, 0x80000034, 0x00000031,
- 0x00002044, 0x80000032, 0x00000033, 0x00002044,
- 0x80000034, 0x00000041, 0x80000300, 0x00000041,
- 0x80000301, 0x00000041, 0x80000302, 0x00000041,
- 0x80000303, 0x00000041, 0x80000308, 0x00000041,
- 0x8000030a, 0x00000043, 0x80000327, 0x00000045,
- 0x80000300, 0x00000045, 0x80000301, 0x00000045,
- 0x80000302, 0x00000045, 0x80000308, 0x00000049,
- 0x80000300, 0x00000049, 0x80000301, 0x00000049,
- 0x80000302, 0x00000049, 0x80000308, 0x0000004e,
- 0x80000303, 0x0000004f, 0x80000300, 0x0000004f,
- 0x80000301, 0x0000004f, 0x80000302, 0x0000004f,
- 0x80000303, 0x0000004f, 0x80000308, 0x00000055,
- 0x80000300, 0x00000055, 0x80000301, 0x00000055,
- 0x80000302, 0x00000055, 0x80000308, 0x00000059,
- 0x80000301, 0x00000061, 0x80000300, 0x00000061,
- 0x80000301, 0x00000061, 0x80000302, 0x00000061,
- 0x80000303, 0x00000061, 0x80000308, 0x00000061,
- 0x8000030a, 0x00000063, 0x80000327, 0x00000065,
- 0x80000300, 0x00000065, 0x80000301, 0x00000065,
- 0x80000302, 0x00000065, 0x80000308, 0x00000069,
- 0x80000300, 0x00000069, 0x80000301, 0x00000069,
- 0x80000302, 0x00000069, 0x80000308, 0x0000006e,
- 0x80000303, 0x0000006f, 0x80000300, 0x0000006f,
- 0x80000301, 0x0000006f, 0x80000302, 0x0000006f,
- 0x80000303, 0x0000006f, 0x80000308, 0x00000075,
- 0x80000300, 0x00000075, 0x80000301, 0x00000075,
- 0x80000302, 0x00000075, 0x80000308, 0x00000079,
- 0x80000301, 0x00000079, 0x80000308, 0x00000041,
- 0x80000304, 0x00000061, 0x80000304, 0x00000041,
- 0x80000306, 0x00000061, 0x80000306, 0x00000041,
- 0x80000328, 0x00000061, 0x80000328, 0x00000043,
- 0x80000301, 0x00000063, 0x80000301, 0x00000043,
- 0x80000302, 0x00000063, 0x80000302, 0x00000043,
- 0x80000307, 0x00000063, 0x80000307, 0x00000043,
- 0x8000030c, 0x00000063, 0x8000030c, 0x00000044,
- 0x8000030c, 0x00000064, 0x8000030c, 0x00000045,
- 0x80000304, 0x00000065, 0x80000304, 0x00000045,
- 0x80000306, 0x00000065, 0x80000306, 0x00000045,
- 0x80000307, 0x00000065, 0x80000307, 0x00000045,
- 0x80000328, 0x00000065, 0x80000328, 0x00000045,
- 0x8000030c, 0x00000065, 0x8000030c, 0x00000047,
- 0x80000302, 0x00000067, 0x80000302, 0x00000047,
- 0x80000306, 0x00000067, 0x80000306, 0x00000047,
- 0x80000307, 0x00000067, 0x80000307, 0x00000047,
- 0x80000327, 0x00000067, 0x80000327, 0x00000048,
- 0x80000302, 0x00000068, 0x80000302, 0x00000049,
- 0x80000303, 0x00000069, 0x80000303, 0x00000049,
- 0x80000304, 0x00000069, 0x80000304, 0x00000049,
- 0x80000306, 0x00000069, 0x80000306, 0x00000049,
- 0x80000328, 0x00000069, 0x80000328, 0x00000049,
- 0x80000307, 0x00000049, 0x8000004a, 0x00000069,
- 0x8000006a, 0x0000004a, 0x80000302, 0x0000006a,
- 0x80000302, 0x0000004b, 0x80000327, 0x0000006b,
- 0x80000327, 0x0000004c, 0x80000301, 0x0000006c,
- 0x80000301, 0x0000004c, 0x80000327, 0x0000006c,
- 0x80000327, 0x0000004c, 0x8000030c, 0x0000006c,
- 0x8000030c, 0x0000004c, 0x800000b7, 0x0000006c,
- 0x800000b7, 0x0000004e, 0x80000301, 0x0000006e,
- 0x80000301, 0x0000004e, 0x80000327, 0x0000006e,
- 0x80000327, 0x0000004e, 0x8000030c, 0x0000006e,
- 0x8000030c, 0x000002bc, 0x8000006e, 0x0000004f,
- 0x80000304, 0x0000006f, 0x80000304, 0x0000004f,
- 0x80000306, 0x0000006f, 0x80000306, 0x0000004f,
- 0x8000030b, 0x0000006f, 0x8000030b, 0x00000052,
- 0x80000301, 0x00000072, 0x80000301, 0x00000052,
- 0x80000327, 0x00000072, 0x80000327, 0x00000052,
- 0x8000030c, 0x00000072, 0x8000030c, 0x00000053,
- 0x80000301, 0x00000073, 0x80000301, 0x00000053,
- 0x80000302, 0x00000073, 0x80000302, 0x00000053,
- 0x80000327, 0x00000073, 0x80000327, 0x00000053,
- 0x8000030c, 0x00000073, 0x8000030c, 0x00000054,
- 0x80000327, 0x00000074, 0x80000327, 0x00000054,
- 0x8000030c, 0x00000074, 0x8000030c, 0x00000055,
- 0x80000303, 0x00000075, 0x80000303, 0x00000055,
- 0x80000304, 0x00000075, 0x80000304, 0x00000055,
- 0x80000306, 0x00000075, 0x80000306, 0x00000055,
- 0x8000030a, 0x00000075, 0x8000030a, 0x00000055,
- 0x8000030b, 0x00000075, 0x8000030b, 0x00000055,
- 0x80000328, 0x00000075, 0x80000328, 0x00000057,
- 0x80000302, 0x00000077, 0x80000302, 0x00000059,
- 0x80000302, 0x00000079, 0x80000302, 0x00000059,
- 0x80000308, 0x0000005a, 0x80000301, 0x0000007a,
- 0x80000301, 0x0000005a, 0x80000307, 0x0000007a,
- 0x80000307, 0x0000005a, 0x8000030c, 0x0000007a,
- 0x8000030c, 0x80000073, 0x0000004f, 0x8000031b,
- 0x0000006f, 0x8000031b, 0x00000055, 0x8000031b,
- 0x00000075, 0x8000031b, 0x00000044, 0x8000017d,
- 0x00000044, 0x8000017e, 0x00000064, 0x8000017e,
- 0x0000004c, 0x8000004a, 0x0000004c, 0x8000006a,
- 0x0000006c, 0x8000006a, 0x0000004e, 0x8000004a,
- 0x0000004e, 0x8000006a, 0x0000006e, 0x8000006a,
- 0x00000041, 0x8000030c, 0x00000061, 0x8000030c,
- 0x00000049, 0x8000030c, 0x00000069, 0x8000030c,
- 0x0000004f, 0x8000030c, 0x0000006f, 0x8000030c,
- 0x00000055, 0x8000030c, 0x00000075, 0x8000030c,
- 0x000000dc, 0x80000304, 0x000000fc, 0x80000304,
- 0x000000dc, 0x80000301, 0x000000fc, 0x80000301,
- 0x000000dc, 0x8000030c, 0x000000fc, 0x8000030c,
- 0x000000dc, 0x80000300, 0x000000fc, 0x80000300,
- 0x000000c4, 0x80000304, 0x000000e4, 0x80000304,
- 0x00000226, 0x80000304, 0x00000227, 0x80000304,
- 0x000000c6, 0x80000304, 0x000000e6, 0x80000304,
- 0x00000047, 0x8000030c, 0x00000067, 0x8000030c,
- 0x0000004b, 0x8000030c, 0x0000006b, 0x8000030c,
- 0x0000004f, 0x80000328, 0x0000006f, 0x80000328,
- 0x000001ea, 0x80000304, 0x000001eb, 0x80000304,
- 0x000001b7, 0x8000030c, 0x00000292, 0x8000030c,
- 0x0000006a, 0x8000030c, 0x00000044, 0x8000005a,
- 0x00000044, 0x8000007a, 0x00000064, 0x8000007a,
- 0x00000047, 0x80000301, 0x00000067, 0x80000301,
- 0x0000004e, 0x80000300, 0x0000006e, 0x80000300,
- 0x000000c5, 0x80000301, 0x000000e5, 0x80000301,
- 0x000000c6, 0x80000301, 0x000000e6, 0x80000301,
- 0x000000d8, 0x80000301, 0x000000f8, 0x80000301,
- 0x00000041, 0x8000030f, 0x00000061, 0x8000030f,
- 0x00000041, 0x80000311, 0x00000061, 0x80000311,
- 0x00000045, 0x8000030f, 0x00000065, 0x8000030f,
- 0x00000045, 0x80000311, 0x00000065, 0x80000311,
- 0x00000049, 0x8000030f, 0x00000069, 0x8000030f,
- 0x00000049, 0x80000311, 0x00000069, 0x80000311,
- 0x0000004f, 0x8000030f, 0x0000006f, 0x8000030f,
- 0x0000004f, 0x80000311, 0x0000006f, 0x80000311,
- 0x00000052, 0x8000030f, 0x00000072, 0x8000030f,
- 0x00000052, 0x80000311, 0x00000072, 0x80000311,
- 0x00000055, 0x8000030f, 0x00000075, 0x8000030f,
- 0x00000055, 0x80000311, 0x00000075, 0x80000311,
- 0x00000053, 0x80000326, 0x00000073, 0x80000326,
- 0x00000054, 0x80000326, 0x00000074, 0x80000326,
- 0x00000048, 0x8000030c, 0x00000068, 0x8000030c,
- 0x00000041, 0x80000307, 0x00000061, 0x80000307,
- 0x00000045, 0x80000327, 0x00000065, 0x80000327,
- 0x000000d6, 0x80000304, 0x000000f6, 0x80000304,
- 0x000000d5, 0x80000304, 0x000000f5, 0x80000304,
- 0x0000004f, 0x80000307, 0x0000006f, 0x80000307,
- 0x0000022e, 0x80000304, 0x0000022f, 0x80000304,
- 0x00000059, 0x80000304, 0x00000079, 0x80000304,
- 0x80000068, 0x80000266, 0x8000006a, 0x80000072,
- 0x80000279, 0x8000027b, 0x80000281, 0x80000077,
- 0x80000079, 0x00000020, 0x80000306, 0x00000020,
- 0x80000307, 0x00000020, 0x8000030a, 0x00000020,
- 0x80000328, 0x00000020, 0x80000303, 0x00000020,
- 0x8000030b, 0x80000263, 0x8000006c, 0x80000073,
- 0x80000078, 0x80000295, 0x80000300, 0x80000301,
- 0x80000313, 0x00000308, 0x80000301, 0x800002b9,
- 0x00000020, 0x80000345, 0x8000003b, 0x00000020,
- 0x80000301, 0x000000a8, 0x80000301, 0x00000391,
- 0x80000301, 0x800000b7, 0x00000395, 0x80000301,
- 0x00000397, 0x80000301, 0x00000399, 0x80000301,
- 0x0000039f, 0x80000301, 0x000003a5, 0x80000301,
- 0x000003a9, 0x80000301, 0x000003ca, 0x80000301,
- 0x00000399, 0x80000308, 0x000003a5, 0x80000308,
- 0x000003b1, 0x80000301, 0x000003b5, 0x80000301,
- 0x000003b7, 0x80000301, 0x000003b9, 0x80000301,
- 0x000003cb, 0x80000301, 0x000003b9, 0x80000308,
- 0x000003c5, 0x80000308, 0x000003bf, 0x80000301,
- 0x000003c5, 0x80000301, 0x000003c9, 0x80000301,
- 0x800003b2, 0x800003b8, 0x800003a5, 0x000003d2,
- 0x80000301, 0x000003d2, 0x80000308, 0x800003c6,
- 0x800003c0, 0x800003ba, 0x800003c1, 0x800003c2,
- 0x80000398, 0x800003b5, 0x00000415, 0x80000300,
- 0x00000415, 0x80000308, 0x00000413, 0x80000301,
- 0x00000406, 0x80000308, 0x0000041a, 0x80000301,
- 0x00000418, 0x80000300, 0x00000423, 0x80000306,
- 0x00000418, 0x80000306, 0x00000438, 0x80000306,
- 0x00000435, 0x80000300, 0x00000435, 0x80000308,
- 0x00000433, 0x80000301, 0x00000456, 0x80000308,
- 0x0000043a, 0x80000301, 0x00000438, 0x80000300,
- 0x00000443, 0x80000306, 0x00000474, 0x8000030f,
- 0x00000475, 0x8000030f, 0x00000416, 0x80000306,
- 0x00000436, 0x80000306, 0x00000410, 0x80000306,
- 0x00000430, 0x80000306, 0x00000410, 0x80000308,
- 0x00000430, 0x80000308, 0x00000415, 0x80000306,
- 0x00000435, 0x80000306, 0x000004d8, 0x80000308,
- 0x000004d9, 0x80000308, 0x00000416, 0x80000308,
- 0x00000436, 0x80000308, 0x00000417, 0x80000308,
- 0x00000437, 0x80000308, 0x00000418, 0x80000304,
- 0x00000438, 0x80000304, 0x00000418, 0x80000308,
- 0x00000438, 0x80000308, 0x0000041e, 0x80000308,
- 0x0000043e, 0x80000308, 0x000004e8, 0x80000308,
- 0x000004e9, 0x80000308, 0x0000042d, 0x80000308,
- 0x0000044d, 0x80000308, 0x00000423, 0x80000304,
- 0x00000443, 0x80000304, 0x00000423, 0x80000308,
- 0x00000443, 0x80000308, 0x00000423, 0x8000030b,
- 0x00000443, 0x8000030b, 0x00000427, 0x80000308,
- 0x00000447, 0x80000308, 0x0000042b, 0x80000308,
- 0x0000044b, 0x80000308, 0x00000565, 0x80000582,
- 0x00000627, 0x80000653, 0x00000627, 0x80000654,
- 0x00000648, 0x80000654, 0x00000627, 0x80000655,
- 0x0000064a, 0x80000654, 0x00000627, 0x80000674,
- 0x00000648, 0x80000674, 0x000006c7, 0x80000674,
- 0x0000064a, 0x80000674, 0x000006d5, 0x80000654,
- 0x000006c1, 0x80000654, 0x000006d2, 0x80000654,
- 0x00000928, 0x8000093c, 0x00000930, 0x8000093c,
- 0x00000933, 0x8000093c, 0x00000915, 0x8000093c,
- 0x00000916, 0x8000093c, 0x00000917, 0x8000093c,
- 0x0000091c, 0x8000093c, 0x00000921, 0x8000093c,
- 0x00000922, 0x8000093c, 0x0000092b, 0x8000093c,
- 0x0000092f, 0x8000093c, 0x000009c7, 0x800009be,
- 0x000009c7, 0x800009d7, 0x000009a1, 0x800009bc,
- 0x000009a2, 0x800009bc, 0x000009af, 0x800009bc,
- 0x00000a32, 0x80000a3c, 0x00000a38, 0x80000a3c,
- 0x00000a16, 0x80000a3c, 0x00000a17, 0x80000a3c,
- 0x00000a1c, 0x80000a3c, 0x00000a2b, 0x80000a3c,
- 0x00000b47, 0x80000b56, 0x00000b47, 0x80000b3e,
- 0x00000b47, 0x80000b57, 0x00000b21, 0x80000b3c,
- 0x00000b22, 0x80000b3c, 0x00000b92, 0x80000bd7,
- 0x00000bc6, 0x80000bbe, 0x00000bc7, 0x80000bbe,
- 0x00000bc6, 0x80000bd7, 0x00000c46, 0x80000c56,
- 0x00000cbf, 0x80000cd5, 0x00000cc6, 0x80000cd5,
- 0x00000cc6, 0x80000cd6, 0x00000cc6, 0x80000cc2,
- 0x00000cca, 0x80000cd5, 0x00000d46, 0x80000d3e,
- 0x00000d47, 0x80000d3e, 0x00000d46, 0x80000d57,
- 0x00000dd9, 0x80000dca, 0x00000dd9, 0x80000dcf,
- 0x00000ddc, 0x80000dca, 0x00000dd9, 0x80000ddf,
- 0x00000e4d, 0x80000e32, 0x00000ecd, 0x80000eb2,
- 0x00000eab, 0x80000e99, 0x00000eab, 0x80000ea1,
- 0x80000f0b, 0x00000f42, 0x80000fb7, 0x00000f4c,
- 0x80000fb7, 0x00000f51, 0x80000fb7, 0x00000f56,
- 0x80000fb7, 0x00000f5b, 0x80000fb7, 0x00000f40,
- 0x80000fb5, 0x00000f71, 0x80000f72, 0x00000f71,
- 0x80000f74, 0x00000fb2, 0x80000f80, 0x00000fb2,
- 0x80000f81, 0x00000fb3, 0x80000f80, 0x00000fb3,
- 0x80000f81, 0x00000f71, 0x80000f80, 0x00000f92,
- 0x80000fb7, 0x00000f9c, 0x80000fb7, 0x00000fa1,
- 0x80000fb7, 0x00000fa6, 0x80000fb7, 0x00000fab,
- 0x80000fb7, 0x00000f90, 0x80000fb5, 0x00001025,
- 0x8000102e, 0x00000041, 0x80000325, 0x00000061,
- 0x80000325, 0x00000042, 0x80000307, 0x00000062,
- 0x80000307, 0x00000042, 0x80000323, 0x00000062,
- 0x80000323, 0x00000042, 0x80000331, 0x00000062,
- 0x80000331, 0x000000c7, 0x80000301, 0x000000e7,
- 0x80000301, 0x00000044, 0x80000307, 0x00000064,
- 0x80000307, 0x00000044, 0x80000323, 0x00000064,
- 0x80000323, 0x00000044, 0x80000331, 0x00000064,
- 0x80000331, 0x00000044, 0x80000327, 0x00000064,
- 0x80000327, 0x00000044, 0x8000032d, 0x00000064,
- 0x8000032d, 0x00000112, 0x80000300, 0x00000113,
- 0x80000300, 0x00000112, 0x80000301, 0x00000113,
- 0x80000301, 0x00000045, 0x8000032d, 0x00000065,
- 0x8000032d, 0x00000045, 0x80000330, 0x00000065,
- 0x80000330, 0x00000228, 0x80000306, 0x00000229,
- 0x80000306, 0x00000046, 0x80000307, 0x00000066,
- 0x80000307, 0x00000047, 0x80000304, 0x00000067,
- 0x80000304, 0x00000048, 0x80000307, 0x00000068,
- 0x80000307, 0x00000048, 0x80000323, 0x00000068,
- 0x80000323, 0x00000048, 0x80000308, 0x00000068,
- 0x80000308, 0x00000048, 0x80000327, 0x00000068,
- 0x80000327, 0x00000048, 0x8000032e, 0x00000068,
- 0x8000032e, 0x00000049, 0x80000330, 0x00000069,
- 0x80000330, 0x000000cf, 0x80000301, 0x000000ef,
- 0x80000301, 0x0000004b, 0x80000301, 0x0000006b,
- 0x80000301, 0x0000004b, 0x80000323, 0x0000006b,
- 0x80000323, 0x0000004b, 0x80000331, 0x0000006b,
- 0x80000331, 0x0000004c, 0x80000323, 0x0000006c,
- 0x80000323, 0x00001e36, 0x80000304, 0x00001e37,
- 0x80000304, 0x0000004c, 0x80000331, 0x0000006c,
- 0x80000331, 0x0000004c, 0x8000032d, 0x0000006c,
- 0x8000032d, 0x0000004d, 0x80000301, 0x0000006d,
- 0x80000301, 0x0000004d, 0x80000307, 0x0000006d,
- 0x80000307, 0x0000004d, 0x80000323, 0x0000006d,
- 0x80000323, 0x0000004e, 0x80000307, 0x0000006e,
- 0x80000307, 0x0000004e, 0x80000323, 0x0000006e,
- 0x80000323, 0x0000004e, 0x80000331, 0x0000006e,
- 0x80000331, 0x0000004e, 0x8000032d, 0x0000006e,
- 0x8000032d, 0x000000d5, 0x80000301, 0x000000f5,
- 0x80000301, 0x000000d5, 0x80000308, 0x000000f5,
- 0x80000308, 0x0000014c, 0x80000300, 0x0000014d,
- 0x80000300, 0x0000014c, 0x80000301, 0x0000014d,
- 0x80000301, 0x00000050, 0x80000301, 0x00000070,
- 0x80000301, 0x00000050, 0x80000307, 0x00000070,
- 0x80000307, 0x00000052, 0x80000307, 0x00000072,
- 0x80000307, 0x00000052, 0x80000323, 0x00000072,
- 0x80000323, 0x00001e5a, 0x80000304, 0x00001e5b,
- 0x80000304, 0x00000052, 0x80000331, 0x00000072,
- 0x80000331, 0x00000053, 0x80000307, 0x00000073,
- 0x80000307, 0x00000053, 0x80000323, 0x00000073,
- 0x80000323, 0x0000015a, 0x80000307, 0x0000015b,
- 0x80000307, 0x00000160, 0x80000307, 0x00000161,
- 0x80000307, 0x00001e62, 0x80000307, 0x00001e63,
- 0x80000307, 0x00000054, 0x80000307, 0x00000074,
- 0x80000307, 0x00000054, 0x80000323, 0x00000074,
- 0x80000323, 0x00000054, 0x80000331, 0x00000074,
- 0x80000331, 0x00000054, 0x8000032d, 0x00000074,
- 0x8000032d, 0x00000055, 0x80000324, 0x00000075,
- 0x80000324, 0x00000055, 0x80000330, 0x00000075,
- 0x80000330, 0x00000055, 0x8000032d, 0x00000075,
- 0x8000032d, 0x00000168, 0x80000301, 0x00000169,
- 0x80000301, 0x0000016a, 0x80000308, 0x0000016b,
- 0x80000308, 0x00000056, 0x80000303, 0x00000076,
- 0x80000303, 0x00000056, 0x80000323, 0x00000076,
- 0x80000323, 0x00000057, 0x80000300, 0x00000077,
- 0x80000300, 0x00000057, 0x80000301, 0x00000077,
- 0x80000301, 0x00000057, 0x80000308, 0x00000077,
- 0x80000308, 0x00000057, 0x80000307, 0x00000077,
- 0x80000307, 0x00000057, 0x80000323, 0x00000077,
- 0x80000323, 0x00000058, 0x80000307, 0x00000078,
- 0x80000307, 0x00000058, 0x80000308, 0x00000078,
- 0x80000308, 0x00000059, 0x80000307, 0x00000079,
- 0x80000307, 0x0000005a, 0x80000302, 0x0000007a,
- 0x80000302, 0x0000005a, 0x80000323, 0x0000007a,
- 0x80000323, 0x0000005a, 0x80000331, 0x0000007a,
- 0x80000331, 0x00000068, 0x80000331, 0x00000074,
- 0x80000308, 0x00000077, 0x8000030a, 0x00000079,
- 0x8000030a, 0x00000061, 0x800002be, 0x0000017f,
- 0x80000307, 0x00000041, 0x80000323, 0x00000061,
- 0x80000323, 0x00000041, 0x80000309, 0x00000061,
- 0x80000309, 0x000000c2, 0x80000301, 0x000000e2,
- 0x80000301, 0x000000c2, 0x80000300, 0x000000e2,
- 0x80000300, 0x000000c2, 0x80000309, 0x000000e2,
- 0x80000309, 0x000000c2, 0x80000303, 0x000000e2,
- 0x80000303, 0x00001ea0, 0x80000302, 0x00001ea1,
- 0x80000302, 0x00000102, 0x80000301, 0x00000103,
- 0x80000301, 0x00000102, 0x80000300, 0x00000103,
- 0x80000300, 0x00000102, 0x80000309, 0x00000103,
- 0x80000309, 0x00000102, 0x80000303, 0x00000103,
- 0x80000303, 0x00001ea0, 0x80000306, 0x00001ea1,
- 0x80000306, 0x00000045, 0x80000323, 0x00000065,
- 0x80000323, 0x00000045, 0x80000309, 0x00000065,
- 0x80000309, 0x00000045, 0x80000303, 0x00000065,
- 0x80000303, 0x000000ca, 0x80000301, 0x000000ea,
- 0x80000301, 0x000000ca, 0x80000300, 0x000000ea,
- 0x80000300, 0x000000ca, 0x80000309, 0x000000ea,
- 0x80000309, 0x000000ca, 0x80000303, 0x000000ea,
- 0x80000303, 0x00001eb8, 0x80000302, 0x00001eb9,
- 0x80000302, 0x00000049, 0x80000309, 0x00000069,
- 0x80000309, 0x00000049, 0x80000323, 0x00000069,
- 0x80000323, 0x0000004f, 0x80000323, 0x0000006f,
- 0x80000323, 0x0000004f, 0x80000309, 0x0000006f,
- 0x80000309, 0x000000d4, 0x80000301, 0x000000f4,
- 0x80000301, 0x000000d4, 0x80000300, 0x000000f4,
- 0x80000300, 0x000000d4, 0x80000309, 0x000000f4,
- 0x80000309, 0x000000d4, 0x80000303, 0x000000f4,
- 0x80000303, 0x00001ecc, 0x80000302, 0x00001ecd,
- 0x80000302, 0x000001a0, 0x80000301, 0x000001a1,
- 0x80000301, 0x000001a0, 0x80000300, 0x000001a1,
- 0x80000300, 0x000001a0, 0x80000309, 0x000001a1,
- 0x80000309, 0x000001a0, 0x80000303, 0x000001a1,
- 0x80000303, 0x000001a0, 0x80000323, 0x000001a1,
- 0x80000323, 0x00000055, 0x80000323, 0x00000075,
- 0x80000323, 0x00000055, 0x80000309, 0x00000075,
- 0x80000309, 0x000001af, 0x80000301, 0x000001b0,
- 0x80000301, 0x000001af, 0x80000300, 0x000001b0,
- 0x80000300, 0x000001af, 0x80000309, 0x000001b0,
- 0x80000309, 0x000001af, 0x80000303, 0x000001b0,
- 0x80000303, 0x000001af, 0x80000323, 0x000001b0,
- 0x80000323, 0x00000059, 0x80000300, 0x00000079,
- 0x80000300, 0x00000059, 0x80000323, 0x00000079,
- 0x80000323, 0x00000059, 0x80000309, 0x00000079,
- 0x80000309, 0x00000059, 0x80000303, 0x00000079,
- 0x80000303, 0x000003b1, 0x80000313, 0x000003b1,
- 0x80000314, 0x00001f00, 0x80000300, 0x00001f01,
- 0x80000300, 0x00001f00, 0x80000301, 0x00001f01,
- 0x80000301, 0x00001f00, 0x80000342, 0x00001f01,
- 0x80000342, 0x00000391, 0x80000313, 0x00000391,
- 0x80000314, 0x00001f08, 0x80000300, 0x00001f09,
- 0x80000300, 0x00001f08, 0x80000301, 0x00001f09,
- 0x80000301, 0x00001f08, 0x80000342, 0x00001f09,
- 0x80000342, 0x000003b5, 0x80000313, 0x000003b5,
- 0x80000314, 0x00001f10, 0x80000300, 0x00001f11,
- 0x80000300, 0x00001f10, 0x80000301, 0x00001f11,
- 0x80000301, 0x00000395, 0x80000313, 0x00000395,
- 0x80000314, 0x00001f18, 0x80000300, 0x00001f19,
- 0x80000300, 0x00001f18, 0x80000301, 0x00001f19,
- 0x80000301, 0x000003b7, 0x80000313, 0x000003b7,
- 0x80000314, 0x00001f20, 0x80000300, 0x00001f21,
- 0x80000300, 0x00001f20, 0x80000301, 0x00001f21,
- 0x80000301, 0x00001f20, 0x80000342, 0x00001f21,
- 0x80000342, 0x00000397, 0x80000313, 0x00000397,
- 0x80000314, 0x00001f28, 0x80000300, 0x00001f29,
- 0x80000300, 0x00001f28, 0x80000301, 0x00001f29,
- 0x80000301, 0x00001f28, 0x80000342, 0x00001f29,
- 0x80000342, 0x000003b9, 0x80000313, 0x000003b9,
- 0x80000314, 0x00001f30, 0x80000300, 0x00001f31,
- 0x80000300, 0x00001f30, 0x80000301, 0x00001f31,
- 0x80000301, 0x00001f30, 0x80000342, 0x00001f31,
- 0x80000342, 0x00000399, 0x80000313, 0x00000399,
- 0x80000314, 0x00001f38, 0x80000300, 0x00001f39,
- 0x80000300, 0x00001f38, 0x80000301, 0x00001f39,
- 0x80000301, 0x00001f38, 0x80000342, 0x00001f39,
- 0x80000342, 0x000003bf, 0x80000313, 0x000003bf,
- 0x80000314, 0x00001f40, 0x80000300, 0x00001f41,
- 0x80000300, 0x00001f40, 0x80000301, 0x00001f41,
- 0x80000301, 0x0000039f, 0x80000313, 0x0000039f,
- 0x80000314, 0x00001f48, 0x80000300, 0x00001f49,
- 0x80000300, 0x00001f48, 0x80000301, 0x00001f49,
- 0x80000301, 0x000003c5, 0x80000313, 0x000003c5,
- 0x80000314, 0x00001f50, 0x80000300, 0x00001f51,
- 0x80000300, 0x00001f50, 0x80000301, 0x00001f51,
- 0x80000301, 0x00001f50, 0x80000342, 0x00001f51,
- 0x80000342, 0x000003a5, 0x80000314, 0x00001f59,
- 0x80000300, 0x00001f59, 0x80000301, 0x00001f59,
- 0x80000342, 0x000003c9, 0x80000313, 0x000003c9,
- 0x80000314, 0x00001f60, 0x80000300, 0x00001f61,
- 0x80000300, 0x00001f60, 0x80000301, 0x00001f61,
- 0x80000301, 0x00001f60, 0x80000342, 0x00001f61,
- 0x80000342, 0x000003a9, 0x80000313, 0x000003a9,
- 0x80000314, 0x00001f68, 0x80000300, 0x00001f69,
- 0x80000300, 0x00001f68, 0x80000301, 0x00001f69,
- 0x80000301, 0x00001f68, 0x80000342, 0x00001f69,
- 0x80000342, 0x000003b1, 0x80000300, 0x800003ac,
- 0x000003b5, 0x80000300, 0x800003ad, 0x000003b7,
- 0x80000300, 0x800003ae, 0x000003b9, 0x80000300,
- 0x800003af, 0x000003bf, 0x80000300, 0x800003cc,
- 0x000003c5, 0x80000300, 0x800003cd, 0x000003c9,
- 0x80000300, 0x800003ce, 0x00001f00, 0x80000345,
- 0x00001f01, 0x80000345, 0x00001f02, 0x80000345,
- 0x00001f03, 0x80000345, 0x00001f04, 0x80000345,
- 0x00001f05, 0x80000345, 0x00001f06, 0x80000345,
- 0x00001f07, 0x80000345, 0x00001f08, 0x80000345,
- 0x00001f09, 0x80000345, 0x00001f0a, 0x80000345,
- 0x00001f0b, 0x80000345, 0x00001f0c, 0x80000345,
- 0x00001f0d, 0x80000345, 0x00001f0e, 0x80000345,
- 0x00001f0f, 0x80000345, 0x00001f20, 0x80000345,
- 0x00001f21, 0x80000345, 0x00001f22, 0x80000345,
- 0x00001f23, 0x80000345, 0x00001f24, 0x80000345,
- 0x00001f25, 0x80000345, 0x00001f26, 0x80000345,
- 0x00001f27, 0x80000345, 0x00001f28, 0x80000345,
- 0x00001f29, 0x80000345, 0x00001f2a, 0x80000345,
- 0x00001f2b, 0x80000345, 0x00001f2c, 0x80000345,
- 0x00001f2d, 0x80000345, 0x00001f2e, 0x80000345,
- 0x00001f2f, 0x80000345, 0x00001f60, 0x80000345,
- 0x00001f61, 0x80000345, 0x00001f62, 0x80000345,
- 0x00001f63, 0x80000345, 0x00001f64, 0x80000345,
- 0x00001f65, 0x80000345, 0x00001f66, 0x80000345,
- 0x00001f67, 0x80000345, 0x00001f68, 0x80000345,
- 0x00001f69, 0x80000345, 0x00001f6a, 0x80000345,
- 0x00001f6b, 0x80000345, 0x00001f6c, 0x80000345,
- 0x00001f6d, 0x80000345, 0x00001f6e, 0x80000345,
- 0x00001f6f, 0x80000345, 0x000003b1, 0x80000306,
- 0x000003b1, 0x80000304, 0x00001f70, 0x80000345,
- 0x000003b1, 0x80000345, 0x000003ac, 0x80000345,
- 0x000003b1, 0x80000342, 0x00001fb6, 0x80000345,
- 0x00000391, 0x80000306, 0x00000391, 0x80000304,
- 0x00000391, 0x80000300, 0x80000386, 0x00000391,
- 0x80000345, 0x00000020, 0x80000313, 0x800003b9,
- 0x00000020, 0x80000313, 0x00000020, 0x80000342,
- 0x000000a8, 0x80000342, 0x00001f74, 0x80000345,
- 0x000003b7, 0x80000345, 0x000003ae, 0x80000345,
- 0x000003b7, 0x80000342, 0x00001fc6, 0x80000345,
- 0x00000395, 0x80000300, 0x80000388, 0x00000397,
- 0x80000300, 0x80000389, 0x00000397, 0x80000345,
- 0x00001fbf, 0x80000300, 0x00001fbf, 0x80000301,
- 0x00001fbf, 0x80000342, 0x000003b9, 0x80000306,
- 0x000003b9, 0x80000304, 0x000003ca, 0x80000300,
- 0x80000390, 0x000003b9, 0x80000342, 0x000003ca,
- 0x80000342, 0x00000399, 0x80000306, 0x00000399,
- 0x80000304, 0x00000399, 0x80000300, 0x8000038a,
- 0x00001ffe, 0x80000300, 0x00001ffe, 0x80000301,
- 0x00001ffe, 0x80000342, 0x000003c5, 0x80000306,
- 0x000003c5, 0x80000304, 0x000003cb, 0x80000300,
- 0x800003b0, 0x000003c1, 0x80000313, 0x000003c1,
- 0x80000314, 0x000003c5, 0x80000342, 0x000003cb,
- 0x80000342, 0x000003a5, 0x80000306, 0x000003a5,
- 0x80000304, 0x000003a5, 0x80000300, 0x8000038e,
- 0x000003a1, 0x80000314, 0x000000a8, 0x80000300,
- 0x80000385, 0x80000060, 0x00001f7c, 0x80000345,
- 0x000003c9, 0x80000345, 0x000003ce, 0x80000345,
- 0x000003c9, 0x80000342, 0x00001ff6, 0x80000345,
- 0x0000039f, 0x80000300, 0x8000038c, 0x000003a9,
- 0x80000300, 0x8000038f, 0x000003a9, 0x80000345,
- 0x800000b4, 0x00000020, 0x80000314, 0x80002002,
- 0x80002003, 0x80000020, 0x80000020, 0x80000020,
- 0x80000020, 0x80000020, 0x80000020, 0x80000020,
- 0x80000020, 0x80000020, 0x80002010, 0x00000020,
- 0x80000333, 0x8000002e, 0x0000002e, 0x8000002e,
- 0x0000002e, 0x0000002e, 0x8000002e, 0x80000020,
- 0x00002032, 0x80002032, 0x00002032, 0x00002032,
- 0x80002032, 0x00002035, 0x80002035, 0x00002035,
- 0x00002035, 0x80002035, 0x00000021, 0x80000021,
- 0x00000020, 0x80000305, 0x0000003f, 0x8000003f,
- 0x0000003f, 0x80000021, 0x00000021, 0x8000003f,
- 0x00002032, 0x00002032, 0x00002032, 0x80002032,
- 0x80000020, 0x80000030, 0x80000069, 0x80000034,
- 0x80000035, 0x80000036, 0x80000037, 0x80000038,
- 0x80000039, 0x8000002b, 0x80002212, 0x8000003d,
- 0x80000028, 0x80000029, 0x8000006e, 0x80000030,
- 0x80000031, 0x80000032, 0x80000033, 0x80000034,
- 0x80000035, 0x80000036, 0x80000037, 0x80000038,
- 0x80000039, 0x8000002b, 0x80002212, 0x8000003d,
- 0x80000028, 0x80000029, 0x00000052, 0x80000073,
- 0x00000061, 0x0000002f, 0x80000063, 0x00000061,
- 0x0000002f, 0x80000073, 0x80000043, 0x000000b0,
- 0x80000043, 0x00000063, 0x0000002f, 0x8000006f,
- 0x00000063, 0x0000002f, 0x80000075, 0x80000190,
- 0x000000b0, 0x80000046, 0x80000067, 0x80000048,
- 0x80000048, 0x80000048, 0x80000068, 0x80000127,
- 0x80000049, 0x80000049, 0x8000004c, 0x8000006c,
- 0x8000004e, 0x0000004e, 0x8000006f, 0x80000050,
- 0x80000051, 0x80000052, 0x80000052, 0x80000052,
- 0x00000053, 0x8000004d, 0x00000054, 0x00000045,
- 0x8000004c, 0x00000054, 0x8000004d, 0x8000005a,
- 0x800003a9, 0x8000005a, 0x8000004b, 0x800000c5,
- 0x80000042, 0x80000043, 0x80000065, 0x80000045,
- 0x80000046, 0x8000004d, 0x8000006f, 0x800005d0,
- 0x800005d1, 0x800005d2, 0x800005d3, 0x80000069,
- 0x800003b3, 0x80000393, 0x800003a0, 0x80002211,
- 0x80000044, 0x80000064, 0x80000065, 0x80000069,
- 0x8000006a, 0x00000031, 0x00002044, 0x80000033,
- 0x00000032, 0x00002044, 0x80000033, 0x00000031,
- 0x00002044, 0x80000035, 0x00000032, 0x00002044,
- 0x80000035, 0x00000033, 0x00002044, 0x80000035,
- 0x00000034, 0x00002044, 0x80000035, 0x00000031,
- 0x00002044, 0x80000036, 0x00000035, 0x00002044,
- 0x80000036, 0x00000031, 0x00002044, 0x80000038,
- 0x00000033, 0x00002044, 0x80000038, 0x00000035,
- 0x00002044, 0x80000038, 0x00000037, 0x00002044,
- 0x80000038, 0x00000031, 0x80002044, 0x80000049,
- 0x00000049, 0x80000049, 0x00000049, 0x00000049,
- 0x80000049, 0x00000049, 0x80000056, 0x80000056,
- 0x00000056, 0x80000049, 0x00000056, 0x00000049,
- 0x80000049, 0x00000056, 0x00000049, 0x00000049,
- 0x80000049, 0x00000049, 0x80000058, 0x80000058,
- 0x00000058, 0x80000049, 0x00000058, 0x00000049,
- 0x80000049, 0x8000004c, 0x80000043, 0x80000044,
- 0x8000004d, 0x80000069, 0x00000069, 0x80000069,
- 0x00000069, 0x00000069, 0x80000069, 0x00000069,
- 0x80000076, 0x80000076, 0x00000076, 0x80000069,
- 0x00000076, 0x00000069, 0x80000069, 0x00000076,
- 0x00000069, 0x00000069, 0x80000069, 0x00000069,
- 0x80000078, 0x80000078, 0x00000078, 0x80000069,
- 0x00000078, 0x00000069, 0x80000069, 0x8000006c,
- 0x80000063, 0x80000064, 0x8000006d, 0x00002190,
- 0x80000338, 0x00002192, 0x80000338, 0x00002194,
- 0x80000338, 0x000021d0, 0x80000338, 0x000021d4,
- 0x80000338, 0x000021d2, 0x80000338, 0x00002203,
- 0x80000338, 0x00002208, 0x80000338, 0x0000220b,
- 0x80000338, 0x00002223, 0x80000338, 0x00002225,
- 0x80000338, 0x0000222b, 0x8000222b, 0x0000222b,
- 0x0000222b, 0x8000222b, 0x0000222e, 0x8000222e,
- 0x0000222e, 0x0000222e, 0x8000222e, 0x0000223c,
- 0x80000338, 0x00002243, 0x80000338, 0x00002245,
- 0x80000338, 0x00002248, 0x80000338, 0x0000003d,
- 0x80000338, 0x00002261, 0x80000338, 0x0000224d,
- 0x80000338, 0x0000003c, 0x80000338, 0x0000003e,
- 0x80000338, 0x00002264, 0x80000338, 0x00002265,
- 0x80000338, 0x00002272, 0x80000338, 0x00002273,
- 0x80000338, 0x00002276, 0x80000338, 0x00002277,
- 0x80000338, 0x0000227a, 0x80000338, 0x0000227b,
- 0x80000338, 0x00002282, 0x80000338, 0x00002283,
- 0x80000338, 0x00002286, 0x80000338, 0x00002287,
- 0x80000338, 0x000022a2, 0x80000338, 0x000022a8,
- 0x80000338, 0x000022a9, 0x80000338, 0x000022ab,
- 0x80000338, 0x0000227c, 0x80000338, 0x0000227d,
- 0x80000338, 0x00002291, 0x80000338, 0x00002292,
- 0x80000338, 0x000022b2, 0x80000338, 0x000022b3,
- 0x80000338, 0x000022b4, 0x80000338, 0x000022b5,
- 0x80000338, 0x80003008, 0x80003009, 0x80000031,
- 0x80000032, 0x80000033, 0x80000034, 0x80000035,
- 0x80000036, 0x80000037, 0x80000038, 0x80000039,
- 0x00000031, 0x80000030, 0x00000031, 0x80000031,
- 0x00000031, 0x80000032, 0x00000031, 0x80000033,
- 0x00000031, 0x80000034, 0x00000031, 0x80000035,
- 0x00000031, 0x80000036, 0x00000031, 0x80000037,
- 0x00000031, 0x80000038, 0x00000031, 0x80000039,
- 0x00000032, 0x80000030, 0x00000028, 0x00000031,
- 0x80000029, 0x00000028, 0x00000032, 0x80000029,
- 0x00000028, 0x00000033, 0x80000029, 0x00000028,
- 0x00000034, 0x80000029, 0x00000028, 0x00000035,
- 0x80000029, 0x00000028, 0x00000036, 0x80000029,
- 0x00000028, 0x00000037, 0x80000029, 0x00000028,
- 0x00000038, 0x80000029, 0x00000028, 0x00000039,
- 0x80000029, 0x00000028, 0x00000031, 0x00000030,
- 0x80000029, 0x00000028, 0x00000031, 0x00000031,
- 0x80000029, 0x00000028, 0x00000031, 0x00000032,
- 0x80000029, 0x00000028, 0x00000031, 0x00000033,
- 0x80000029, 0x00000028, 0x00000031, 0x00000034,
- 0x80000029, 0x00000028, 0x00000031, 0x00000035,
- 0x80000029, 0x00000028, 0x00000031, 0x00000036,
- 0x80000029, 0x00000028, 0x00000031, 0x00000037,
- 0x80000029, 0x00000028, 0x00000031, 0x00000038,
- 0x80000029, 0x00000028, 0x00000031, 0x00000039,
- 0x80000029, 0x00000028, 0x00000032, 0x00000030,
- 0x80000029, 0x00000031, 0x8000002e, 0x00000032,
- 0x8000002e, 0x00000033, 0x8000002e, 0x00000034,
- 0x8000002e, 0x00000035, 0x8000002e, 0x00000036,
- 0x8000002e, 0x00000037, 0x8000002e, 0x00000038,
- 0x8000002e, 0x00000039, 0x8000002e, 0x00000031,
- 0x00000030, 0x8000002e, 0x00000031, 0x00000031,
- 0x8000002e, 0x00000031, 0x00000032, 0x8000002e,
- 0x00000031, 0x00000033, 0x8000002e, 0x00000031,
- 0x00000034, 0x8000002e, 0x00000031, 0x00000035,
- 0x8000002e, 0x00000031, 0x00000036, 0x8000002e,
- 0x00000031, 0x00000037, 0x8000002e, 0x00000031,
- 0x00000038, 0x8000002e, 0x00000031, 0x00000039,
- 0x8000002e, 0x00000032, 0x00000030, 0x8000002e,
- 0x00000028, 0x00000061, 0x80000029, 0x00000028,
- 0x00000062, 0x80000029, 0x00000028, 0x00000063,
- 0x80000029, 0x00000028, 0x00000064, 0x80000029,
- 0x00000028, 0x00000065, 0x80000029, 0x00000028,
- 0x00000066, 0x80000029, 0x00000028, 0x00000067,
- 0x80000029, 0x00000028, 0x00000068, 0x80000029,
- 0x00000028, 0x00000069, 0x80000029, 0x00000028,
- 0x0000006a, 0x80000029, 0x00000028, 0x0000006b,
- 0x80000029, 0x00000028, 0x0000006c, 0x80000029,
- 0x00000028, 0x0000006d, 0x80000029, 0x00000028,
- 0x0000006e, 0x80000029, 0x00000028, 0x0000006f,
- 0x80000029, 0x00000028, 0x00000070, 0x80000029,
- 0x00000028, 0x00000071, 0x80000029, 0x00000028,
- 0x00000072, 0x80000029, 0x00000028, 0x00000073,
- 0x80000029, 0x00000028, 0x00000074, 0x80000029,
- 0x00000028, 0x00000075, 0x80000029, 0x00000028,
- 0x00000076, 0x80000029, 0x00000028, 0x00000077,
- 0x80000029, 0x00000028, 0x00000078, 0x80000029,
- 0x00000028, 0x00000079, 0x80000029, 0x00000028,
- 0x0000007a, 0x80000029, 0x80000041, 0x80000042,
- 0x80000043, 0x80000044, 0x80000045, 0x80000046,
- 0x80000047, 0x80000048, 0x80000049, 0x8000004a,
- 0x8000004b, 0x8000004c, 0x8000004d, 0x8000004e,
- 0x8000004f, 0x80000050, 0x80000051, 0x80000052,
- 0x80000053, 0x80000054, 0x80000055, 0x80000056,
- 0x80000057, 0x80000058, 0x80000059, 0x8000005a,
- 0x80000061, 0x80000062, 0x80000063, 0x80000064,
- 0x80000065, 0x80000066, 0x80000067, 0x80000068,
- 0x80000069, 0x8000006a, 0x8000006b, 0x8000006c,
- 0x8000006d, 0x8000006e, 0x8000006f, 0x80000070,
- 0x80000071, 0x80000072, 0x80000073, 0x80000074,
- 0x80000075, 0x80000076, 0x80000077, 0x80000078,
- 0x80000079, 0x8000007a, 0x80000030, 0x0000222b,
- 0x0000222b, 0x0000222b, 0x8000222b, 0x0000003a,
- 0x0000003a, 0x8000003d, 0x0000003d, 0x8000003d,
- 0x0000003d, 0x0000003d, 0x8000003d, 0x00002add,
- 0x80000338, 0x80006bcd, 0x80009f9f, 0x80004e00,
- 0x80004e28, 0x80004e36, 0x80004e3f, 0x80004e59,
- 0x80004e85, 0x80004e8c, 0x80004ea0, 0x80004eba,
- 0x8000513f, 0x80005165, 0x8000516b, 0x80005182,
- 0x80005196, 0x800051ab, 0x800051e0, 0x800051f5,
- 0x80005200, 0x8000529b, 0x800052f9, 0x80005315,
- 0x8000531a, 0x80005338, 0x80005341, 0x8000535c,
- 0x80005369, 0x80005382, 0x800053b6, 0x800053c8,
- 0x800053e3, 0x800056d7, 0x8000571f, 0x800058eb,
- 0x80005902, 0x8000590a, 0x80005915, 0x80005927,
- 0x80005973, 0x80005b50, 0x80005b80, 0x80005bf8,
- 0x80005c0f, 0x80005c22, 0x80005c38, 0x80005c6e,
- 0x80005c71, 0x80005ddb, 0x80005de5, 0x80005df1,
- 0x80005dfe, 0x80005e72, 0x80005e7a, 0x80005e7f,
- 0x80005ef4, 0x80005efe, 0x80005f0b, 0x80005f13,
- 0x80005f50, 0x80005f61, 0x80005f73, 0x80005fc3,
- 0x80006208, 0x80006236, 0x8000624b, 0x8000652f,
- 0x80006534, 0x80006587, 0x80006597, 0x800065a4,
- 0x800065b9, 0x800065e0, 0x800065e5, 0x800066f0,
- 0x80006708, 0x80006728, 0x80006b20, 0x80006b62,
- 0x80006b79, 0x80006bb3, 0x80006bcb, 0x80006bd4,
- 0x80006bdb, 0x80006c0f, 0x80006c14, 0x80006c34,
- 0x8000706b, 0x8000722a, 0x80007236, 0x8000723b,
- 0x8000723f, 0x80007247, 0x80007259, 0x8000725b,
- 0x800072ac, 0x80007384, 0x80007389, 0x800074dc,
- 0x800074e6, 0x80007518, 0x8000751f, 0x80007528,
- 0x80007530, 0x8000758b, 0x80007592, 0x80007676,
- 0x8000767d, 0x800076ae, 0x800076bf, 0x800076ee,
- 0x800077db, 0x800077e2, 0x800077f3, 0x8000793a,
- 0x800079b8, 0x800079be, 0x80007a74, 0x80007acb,
- 0x80007af9, 0x80007c73, 0x80007cf8, 0x80007f36,
- 0x80007f51, 0x80007f8a, 0x80007fbd, 0x80008001,
- 0x8000800c, 0x80008012, 0x80008033, 0x8000807f,
- 0x80008089, 0x800081e3, 0x800081ea, 0x800081f3,
- 0x800081fc, 0x8000820c, 0x8000821b, 0x8000821f,
- 0x8000826e, 0x80008272, 0x80008278, 0x8000864d,
- 0x8000866b, 0x80008840, 0x8000884c, 0x80008863,
- 0x8000897e, 0x8000898b, 0x800089d2, 0x80008a00,
- 0x80008c37, 0x80008c46, 0x80008c55, 0x80008c78,
- 0x80008c9d, 0x80008d64, 0x80008d70, 0x80008db3,
- 0x80008eab, 0x80008eca, 0x80008f9b, 0x80008fb0,
- 0x80008fb5, 0x80009091, 0x80009149, 0x800091c6,
- 0x800091cc, 0x800091d1, 0x80009577, 0x80009580,
- 0x8000961c, 0x800096b6, 0x800096b9, 0x800096e8,
- 0x80009751, 0x8000975e, 0x80009762, 0x80009769,
- 0x800097cb, 0x800097ed, 0x800097f3, 0x80009801,
- 0x800098a8, 0x800098db, 0x800098df, 0x80009996,
- 0x80009999, 0x800099ac, 0x80009aa8, 0x80009ad8,
- 0x80009adf, 0x80009b25, 0x80009b2f, 0x80009b32,
- 0x80009b3c, 0x80009b5a, 0x80009ce5, 0x80009e75,
- 0x80009e7f, 0x80009ea5, 0x80009ebb, 0x80009ec3,
- 0x80009ecd, 0x80009ed1, 0x80009ef9, 0x80009efd,
- 0x80009f0e, 0x80009f13, 0x80009f20, 0x80009f3b,
- 0x80009f4a, 0x80009f52, 0x80009f8d, 0x80009f9c,
- 0x80009fa0, 0x80000020, 0x80003012, 0x80005341,
- 0x80005344, 0x80005345, 0x0000304b, 0x80003099,
- 0x0000304d, 0x80003099, 0x0000304f, 0x80003099,
- 0x00003051, 0x80003099, 0x00003053, 0x80003099,
- 0x00003055, 0x80003099, 0x00003057, 0x80003099,
- 0x00003059, 0x80003099, 0x0000305b, 0x80003099,
- 0x0000305d, 0x80003099, 0x0000305f, 0x80003099,
- 0x00003061, 0x80003099, 0x00003064, 0x80003099,
- 0x00003066, 0x80003099, 0x00003068, 0x80003099,
- 0x0000306f, 0x80003099, 0x0000306f, 0x8000309a,
- 0x00003072, 0x80003099, 0x00003072, 0x8000309a,
- 0x00003075, 0x80003099, 0x00003075, 0x8000309a,
- 0x00003078, 0x80003099, 0x00003078, 0x8000309a,
- 0x0000307b, 0x80003099, 0x0000307b, 0x8000309a,
- 0x00003046, 0x80003099, 0x00000020, 0x80003099,
- 0x00000020, 0x8000309a, 0x0000309d, 0x80003099,
- 0x00003088, 0x8000308a, 0x000030ab, 0x80003099,
- 0x000030ad, 0x80003099, 0x000030af, 0x80003099,
- 0x000030b1, 0x80003099, 0x000030b3, 0x80003099,
- 0x000030b5, 0x80003099, 0x000030b7, 0x80003099,
- 0x000030b9, 0x80003099, 0x000030bb, 0x80003099,
- 0x000030bd, 0x80003099, 0x000030bf, 0x80003099,
- 0x000030c1, 0x80003099, 0x000030c4, 0x80003099,
- 0x000030c6, 0x80003099, 0x000030c8, 0x80003099,
- 0x000030cf, 0x80003099, 0x000030cf, 0x8000309a,
- 0x000030d2, 0x80003099, 0x000030d2, 0x8000309a,
- 0x000030d5, 0x80003099, 0x000030d5, 0x8000309a,
- 0x000030d8, 0x80003099, 0x000030d8, 0x8000309a,
- 0x000030db, 0x80003099, 0x000030db, 0x8000309a,
- 0x000030a6, 0x80003099, 0x000030ef, 0x80003099,
- 0x000030f0, 0x80003099, 0x000030f1, 0x80003099,
- 0x000030f2, 0x80003099, 0x000030fd, 0x80003099,
- 0x000030b3, 0x800030c8, 0x80001100, 0x80001101,
- 0x800011aa, 0x80001102, 0x800011ac, 0x800011ad,
- 0x80001103, 0x80001104, 0x80001105, 0x800011b0,
- 0x800011b1, 0x800011b2, 0x800011b3, 0x800011b4,
- 0x800011b5, 0x8000111a, 0x80001106, 0x80001107,
- 0x80001108, 0x80001121, 0x80001109, 0x8000110a,
- 0x8000110b, 0x8000110c, 0x8000110d, 0x8000110e,
- 0x8000110f, 0x80001110, 0x80001111, 0x80001112,
- 0x80001161, 0x80001162, 0x80001163, 0x80001164,
- 0x80001165, 0x80001166, 0x80001167, 0x80001168,
- 0x80001169, 0x8000116a, 0x8000116b, 0x8000116c,
- 0x8000116d, 0x8000116e, 0x8000116f, 0x80001170,
- 0x80001171, 0x80001172, 0x80001173, 0x80001174,
- 0x80001175, 0x80001160, 0x80001114, 0x80001115,
- 0x800011c7, 0x800011c8, 0x800011cc, 0x800011ce,
- 0x800011d3, 0x800011d7, 0x800011d9, 0x8000111c,
- 0x800011dd, 0x800011df, 0x8000111d, 0x8000111e,
- 0x80001120, 0x80001122, 0x80001123, 0x80001127,
- 0x80001129, 0x8000112b, 0x8000112c, 0x8000112d,
- 0x8000112e, 0x8000112f, 0x80001132, 0x80001136,
- 0x80001140, 0x80001147, 0x8000114c, 0x800011f1,
- 0x800011f2, 0x80001157, 0x80001158, 0x80001159,
- 0x80001184, 0x80001185, 0x80001188, 0x80001191,
- 0x80001192, 0x80001194, 0x8000119e, 0x800011a1,
- 0x80004e00, 0x80004e8c, 0x80004e09, 0x800056db,
- 0x80004e0a, 0x80004e2d, 0x80004e0b, 0x80007532,
- 0x80004e59, 0x80004e19, 0x80004e01, 0x80005929,
- 0x80005730, 0x80004eba, 0x00000028, 0x00001100,
- 0x80000029, 0x00000028, 0x00001102, 0x80000029,
- 0x00000028, 0x00001103, 0x80000029, 0x00000028,
- 0x00001105, 0x80000029, 0x00000028, 0x00001106,
- 0x80000029, 0x00000028, 0x00001107, 0x80000029,
- 0x00000028, 0x00001109, 0x80000029, 0x00000028,
- 0x0000110b, 0x80000029, 0x00000028, 0x0000110c,
- 0x80000029, 0x00000028, 0x0000110e, 0x80000029,
- 0x00000028, 0x0000110f, 0x80000029, 0x00000028,
- 0x00001110, 0x80000029, 0x00000028, 0x00001111,
- 0x80000029, 0x00000028, 0x00001112, 0x80000029,
- 0x00000028, 0x00001100, 0x00001161, 0x80000029,
- 0x00000028, 0x00001102, 0x00001161, 0x80000029,
- 0x00000028, 0x00001103, 0x00001161, 0x80000029,
- 0x00000028, 0x00001105, 0x00001161, 0x80000029,
- 0x00000028, 0x00001106, 0x00001161, 0x80000029,
- 0x00000028, 0x00001107, 0x00001161, 0x80000029,
- 0x00000028, 0x00001109, 0x00001161, 0x80000029,
- 0x00000028, 0x0000110b, 0x00001161, 0x80000029,
- 0x00000028, 0x0000110c, 0x00001161, 0x80000029,
- 0x00000028, 0x0000110e, 0x00001161, 0x80000029,
- 0x00000028, 0x0000110f, 0x00001161, 0x80000029,
- 0x00000028, 0x00001110, 0x00001161, 0x80000029,
- 0x00000028, 0x00001111, 0x00001161, 0x80000029,
- 0x00000028, 0x00001112, 0x00001161, 0x80000029,
- 0x00000028, 0x0000110c, 0x0000116e, 0x80000029,
- 0x00000028, 0x00004e00, 0x80000029, 0x00000028,
- 0x00004e8c, 0x80000029, 0x00000028, 0x00004e09,
- 0x80000029, 0x00000028, 0x000056db, 0x80000029,
- 0x00000028, 0x00004e94, 0x80000029, 0x00000028,
- 0x0000516d, 0x80000029, 0x00000028, 0x00004e03,
- 0x80000029, 0x00000028, 0x0000516b, 0x80000029,
- 0x00000028, 0x00004e5d, 0x80000029, 0x00000028,
- 0x00005341, 0x80000029, 0x00000028, 0x00006708,
- 0x80000029, 0x00000028, 0x0000706b, 0x80000029,
- 0x00000028, 0x00006c34, 0x80000029, 0x00000028,
- 0x00006728, 0x80000029, 0x00000028, 0x000091d1,
- 0x80000029, 0x00000028, 0x0000571f, 0x80000029,
- 0x00000028, 0x000065e5, 0x80000029, 0x00000028,
- 0x0000682a, 0x80000029, 0x00000028, 0x00006709,
- 0x80000029, 0x00000028, 0x0000793e, 0x80000029,
- 0x00000028, 0x0000540d, 0x80000029, 0x00000028,
- 0x00007279, 0x80000029, 0x00000028, 0x00008ca1,
- 0x80000029, 0x00000028, 0x0000795d, 0x80000029,
- 0x00000028, 0x000052b4, 0x80000029, 0x00000028,
- 0x00004ee3, 0x80000029, 0x00000028, 0x0000547c,
- 0x80000029, 0x00000028, 0x00005b66, 0x80000029,
- 0x00000028, 0x000076e3, 0x80000029, 0x00000028,
- 0x00004f01, 0x80000029, 0x00000028, 0x00008cc7,
- 0x80000029, 0x00000028, 0x00005354, 0x80000029,
- 0x00000028, 0x0000796d, 0x80000029, 0x00000028,
- 0x00004f11, 0x80000029, 0x00000028, 0x000081ea,
- 0x80000029, 0x00000028, 0x000081f3, 0x80000029,
- 0x00000032, 0x80000031, 0x00000032, 0x80000032,
- 0x00000032, 0x80000033, 0x00000032, 0x80000034,
- 0x00000032, 0x80000035, 0x00000032, 0x80000036,
- 0x00000032, 0x80000037, 0x00000032, 0x80000038,
- 0x00000032, 0x80000039, 0x00000033, 0x80000030,
- 0x00000033, 0x80000031, 0x00000033, 0x80000032,
- 0x00000033, 0x80000033, 0x00000033, 0x80000034,
- 0x00000033, 0x80000035, 0x80001100, 0x80001102,
- 0x80001103, 0x80001105, 0x80001106, 0x80001107,
- 0x80001109, 0x8000110b, 0x8000110c, 0x8000110e,
- 0x8000110f, 0x80001110, 0x80001111, 0x80001112,
- 0x00001100, 0x80001161, 0x00001102, 0x80001161,
- 0x00001103, 0x80001161, 0x00001105, 0x80001161,
- 0x00001106, 0x80001161, 0x00001107, 0x80001161,
- 0x00001109, 0x80001161, 0x0000110b, 0x80001161,
- 0x0000110c, 0x80001161, 0x0000110e, 0x80001161,
- 0x0000110f, 0x80001161, 0x00001110, 0x80001161,
- 0x00001111, 0x80001161, 0x00001112, 0x80001161,
- 0x80004e00, 0x80004e8c, 0x80004e09, 0x800056db,
- 0x80004e94, 0x8000516d, 0x80004e03, 0x8000516b,
- 0x80004e5d, 0x80005341, 0x80006708, 0x8000706b,
- 0x80006c34, 0x80006728, 0x800091d1, 0x8000571f,
- 0x800065e5, 0x8000682a, 0x80006709, 0x8000793e,
- 0x8000540d, 0x80007279, 0x80008ca1, 0x8000795d,
- 0x800052b4, 0x800079d8, 0x80007537, 0x80005973,
- 0x80009069, 0x8000512a, 0x80005370, 0x80006ce8,
- 0x80009805, 0x80004f11, 0x80005199, 0x80006b63,
- 0x80004e0a, 0x80004e2d, 0x80004e0b, 0x80005de6,
- 0x800053f3, 0x8000533b, 0x80005b97, 0x80005b66,
- 0x800076e3, 0x80004f01, 0x80008cc7, 0x80005354,
- 0x8000591c, 0x00000033, 0x80000036, 0x00000033,
- 0x80000037, 0x00000033, 0x80000038, 0x00000033,
- 0x80000039, 0x00000034, 0x80000030, 0x00000034,
- 0x80000031, 0x00000034, 0x80000032, 0x00000034,
- 0x80000033, 0x00000034, 0x80000034, 0x00000034,
- 0x80000035, 0x00000034, 0x80000036, 0x00000034,
- 0x80000037, 0x00000034, 0x80000038, 0x00000034,
- 0x80000039, 0x00000035, 0x80000030, 0x00000031,
- 0x80006708, 0x00000032, 0x80006708, 0x00000033,
- 0x80006708, 0x00000034, 0x80006708, 0x00000035,
- 0x80006708, 0x00000036, 0x80006708, 0x00000037,
- 0x80006708, 0x00000038, 0x80006708, 0x00000039,
- 0x80006708, 0x00000031, 0x00000030, 0x80006708,
- 0x00000031, 0x00000031, 0x80006708, 0x00000031,
- 0x00000032, 0x80006708, 0x800030a2, 0x800030a4,
- 0x800030a6, 0x800030a8, 0x800030aa, 0x800030ab,
- 0x800030ad, 0x800030af, 0x800030b1, 0x800030b3,
- 0x800030b5, 0x800030b7, 0x800030b9, 0x800030bb,
- 0x800030bd, 0x800030bf, 0x800030c1, 0x800030c4,
- 0x800030c6, 0x800030c8, 0x800030ca, 0x800030cb,
- 0x800030cc, 0x800030cd, 0x800030ce, 0x800030cf,
- 0x800030d2, 0x800030d5, 0x800030d8, 0x800030db,
- 0x800030de, 0x800030df, 0x800030e0, 0x800030e1,
- 0x800030e2, 0x800030e4, 0x800030e6, 0x800030e8,
- 0x800030e9, 0x800030ea, 0x800030eb, 0x800030ec,
- 0x800030ed, 0x800030ef, 0x800030f0, 0x800030f1,
- 0x800030f2, 0x000030a2, 0x000030d1, 0x000030fc,
- 0x800030c8, 0x000030a2, 0x000030eb, 0x000030d5,
- 0x800030a1, 0x000030a2, 0x000030f3, 0x000030da,
- 0x800030a2, 0x000030a2, 0x000030fc, 0x800030eb,
- 0x000030a4, 0x000030cb, 0x000030f3, 0x800030b0,
- 0x000030a4, 0x000030f3, 0x800030c1, 0x000030a6,
- 0x000030a9, 0x800030f3, 0x000030a8, 0x000030b9,
- 0x000030af, 0x000030fc, 0x800030c9, 0x000030a8,
- 0x000030fc, 0x000030ab, 0x800030fc, 0x000030aa,
- 0x000030f3, 0x800030b9, 0x000030aa, 0x000030fc,
- 0x800030e0, 0x000030ab, 0x000030a4, 0x800030ea,
- 0x000030ab, 0x000030e9, 0x000030c3, 0x800030c8,
- 0x000030ab, 0x000030ed, 0x000030ea, 0x800030fc,
- 0x000030ac, 0x000030ed, 0x800030f3, 0x000030ac,
- 0x000030f3, 0x800030de, 0x000030ae, 0x800030ac,
- 0x000030ae, 0x000030cb, 0x800030fc, 0x000030ad,
- 0x000030e5, 0x000030ea, 0x800030fc, 0x000030ae,
- 0x000030eb, 0x000030c0, 0x800030fc, 0x000030ad,
- 0x800030ed, 0x000030ad, 0x000030ed, 0x000030b0,
- 0x000030e9, 0x800030e0, 0x000030ad, 0x000030ed,
- 0x000030e1, 0x000030fc, 0x000030c8, 0x800030eb,
- 0x000030ad, 0x000030ed, 0x000030ef, 0x000030c3,
- 0x800030c8, 0x000030b0, 0x000030e9, 0x800030e0,
- 0x000030b0, 0x000030e9, 0x000030e0, 0x000030c8,
- 0x800030f3, 0x000030af, 0x000030eb, 0x000030bc,
- 0x000030a4, 0x800030ed, 0x000030af, 0x000030ed,
- 0x000030fc, 0x800030cd, 0x000030b1, 0x000030fc,
- 0x800030b9, 0x000030b3, 0x000030eb, 0x800030ca,
- 0x000030b3, 0x000030fc, 0x800030dd, 0x000030b5,
- 0x000030a4, 0x000030af, 0x800030eb, 0x000030b5,
- 0x000030f3, 0x000030c1, 0x000030fc, 0x800030e0,
- 0x000030b7, 0x000030ea, 0x000030f3, 0x800030b0,
- 0x000030bb, 0x000030f3, 0x800030c1, 0x000030bb,
- 0x000030f3, 0x800030c8, 0x000030c0, 0x000030fc,
- 0x800030b9, 0x000030c7, 0x800030b7, 0x000030c9,
- 0x800030eb, 0x000030c8, 0x800030f3, 0x000030ca,
- 0x800030ce, 0x000030ce, 0x000030c3, 0x800030c8,
- 0x000030cf, 0x000030a4, 0x800030c4, 0x000030d1,
- 0x000030fc, 0x000030bb, 0x000030f3, 0x800030c8,
- 0x000030d1, 0x000030fc, 0x800030c4, 0x000030d0,
- 0x000030fc, 0x000030ec, 0x800030eb, 0x000030d4,
- 0x000030a2, 0x000030b9, 0x000030c8, 0x800030eb,
- 0x000030d4, 0x000030af, 0x800030eb, 0x000030d4,
- 0x800030b3, 0x000030d3, 0x800030eb, 0x000030d5,
- 0x000030a1, 0x000030e9, 0x000030c3, 0x800030c9,
- 0x000030d5, 0x000030a3, 0x000030fc, 0x800030c8,
- 0x000030d6, 0x000030c3, 0x000030b7, 0x000030a7,
- 0x800030eb, 0x000030d5, 0x000030e9, 0x800030f3,
- 0x000030d8, 0x000030af, 0x000030bf, 0x000030fc,
- 0x800030eb, 0x000030da, 0x800030bd, 0x000030da,
- 0x000030cb, 0x800030d2, 0x000030d8, 0x000030eb,
- 0x800030c4, 0x000030da, 0x000030f3, 0x800030b9,
- 0x000030da, 0x000030fc, 0x800030b8, 0x000030d9,
- 0x000030fc, 0x800030bf, 0x000030dd, 0x000030a4,
- 0x000030f3, 0x800030c8, 0x000030dc, 0x000030eb,
- 0x800030c8, 0x000030db, 0x800030f3, 0x000030dd,
- 0x000030f3, 0x800030c9, 0x000030db, 0x000030fc,
- 0x800030eb, 0x000030db, 0x000030fc, 0x800030f3,
- 0x000030de, 0x000030a4, 0x000030af, 0x800030ed,
- 0x000030de, 0x000030a4, 0x800030eb, 0x000030de,
- 0x000030c3, 0x800030cf, 0x000030de, 0x000030eb,
- 0x800030af, 0x000030de, 0x000030f3, 0x000030b7,
- 0x000030e7, 0x800030f3, 0x000030df, 0x000030af,
- 0x000030ed, 0x800030f3, 0x000030df, 0x800030ea,
- 0x000030df, 0x000030ea, 0x000030d0, 0x000030fc,
- 0x800030eb, 0x000030e1, 0x800030ac, 0x000030e1,
- 0x000030ac, 0x000030c8, 0x800030f3, 0x000030e1,
- 0x000030fc, 0x000030c8, 0x800030eb, 0x000030e4,
- 0x000030fc, 0x800030c9, 0x000030e4, 0x000030fc,
- 0x800030eb, 0x000030e6, 0x000030a2, 0x800030f3,
- 0x000030ea, 0x000030c3, 0x000030c8, 0x800030eb,
- 0x000030ea, 0x800030e9, 0x000030eb, 0x000030d4,
- 0x800030fc, 0x000030eb, 0x000030fc, 0x000030d6,
- 0x800030eb, 0x000030ec, 0x800030e0, 0x000030ec,
- 0x000030f3, 0x000030c8, 0x000030b2, 0x800030f3,
- 0x000030ef, 0x000030c3, 0x800030c8, 0x00000030,
- 0x800070b9, 0x00000031, 0x800070b9, 0x00000032,
- 0x800070b9, 0x00000033, 0x800070b9, 0x00000034,
- 0x800070b9, 0x00000035, 0x800070b9, 0x00000036,
- 0x800070b9, 0x00000037, 0x800070b9, 0x00000038,
- 0x800070b9, 0x00000039, 0x800070b9, 0x00000031,
- 0x00000030, 0x800070b9, 0x00000031, 0x00000031,
- 0x800070b9, 0x00000031, 0x00000032, 0x800070b9,
- 0x00000031, 0x00000033, 0x800070b9, 0x00000031,
- 0x00000034, 0x800070b9, 0x00000031, 0x00000035,
- 0x800070b9, 0x00000031, 0x00000036, 0x800070b9,
- 0x00000031, 0x00000037, 0x800070b9, 0x00000031,
- 0x00000038, 0x800070b9, 0x00000031, 0x00000039,
- 0x800070b9, 0x00000032, 0x00000030, 0x800070b9,
- 0x00000032, 0x00000031, 0x800070b9, 0x00000032,
- 0x00000032, 0x800070b9, 0x00000032, 0x00000033,
- 0x800070b9, 0x00000032, 0x00000034, 0x800070b9,
- 0x00000068, 0x00000050, 0x80000061, 0x00000064,
- 0x80000061, 0x00000041, 0x80000055, 0x00000062,
- 0x00000061, 0x80000072, 0x0000006f, 0x80000056,
- 0x00000070, 0x80000063, 0x00005e73, 0x80006210,
- 0x0000662d, 0x8000548c, 0x00005927, 0x80006b63,
- 0x0000660e, 0x80006cbb, 0x0000682a, 0x00005f0f,
- 0x00004f1a, 0x8000793e, 0x00000070, 0x80000041,
- 0x0000006e, 0x80000041, 0x000003bc, 0x80000041,
- 0x0000006d, 0x80000041, 0x0000006b, 0x80000041,
- 0x0000004b, 0x80000042, 0x0000004d, 0x80000042,
- 0x00000047, 0x80000042, 0x00000063, 0x00000061,
- 0x8000006c, 0x0000006b, 0x00000063, 0x00000061,
- 0x8000006c, 0x00000070, 0x80000046, 0x0000006e,
- 0x80000046, 0x000003bc, 0x80000046, 0x000003bc,
- 0x80000067, 0x0000006d, 0x80000067, 0x0000006b,
- 0x80000067, 0x00000048, 0x8000007a, 0x0000006b,
- 0x00000048, 0x8000007a, 0x0000004d, 0x00000048,
- 0x8000007a, 0x00000047, 0x00000048, 0x8000007a,
- 0x00000054, 0x00000048, 0x8000007a, 0x000003bc,
- 0x80002113, 0x0000006d, 0x80002113, 0x00000064,
- 0x80002113, 0x0000006b, 0x80002113, 0x00000066,
- 0x8000006d, 0x0000006e, 0x8000006d, 0x000003bc,
- 0x8000006d, 0x0000006d, 0x8000006d, 0x00000063,
- 0x8000006d, 0x0000006b, 0x8000006d, 0x0000006d,
- 0x0000006d, 0x800000b2, 0x00000063, 0x0000006d,
- 0x800000b2, 0x0000006d, 0x800000b2, 0x0000006b,
- 0x0000006d, 0x800000b2, 0x0000006d, 0x0000006d,
- 0x800000b3, 0x00000063, 0x0000006d, 0x800000b3,
- 0x0000006d, 0x800000b3, 0x0000006b, 0x0000006d,
- 0x800000b3, 0x0000006d, 0x00002215, 0x80000073,
- 0x0000006d, 0x00002215, 0x00000073, 0x800000b2,
- 0x00000050, 0x80000061, 0x0000006b, 0x00000050,
- 0x80000061, 0x0000004d, 0x00000050, 0x80000061,
- 0x00000047, 0x00000050, 0x80000061, 0x00000072,
- 0x00000061, 0x80000064, 0x00000072, 0x00000061,
- 0x00000064, 0x00002215, 0x80000073, 0x00000072,
- 0x00000061, 0x00000064, 0x00002215, 0x00000073,
- 0x800000b2, 0x00000070, 0x80000073, 0x0000006e,
- 0x80000073, 0x000003bc, 0x80000073, 0x0000006d,
- 0x80000073, 0x00000070, 0x80000056, 0x0000006e,
- 0x80000056, 0x000003bc, 0x80000056, 0x0000006d,
- 0x80000056, 0x0000006b, 0x80000056, 0x0000004d,
- 0x80000056, 0x00000070, 0x80000057, 0x0000006e,
- 0x80000057, 0x000003bc, 0x80000057, 0x0000006d,
- 0x80000057, 0x0000006b, 0x80000057, 0x0000004d,
- 0x80000057, 0x0000006b, 0x800003a9, 0x0000004d,
- 0x800003a9, 0x00000061, 0x0000002e, 0x0000006d,
- 0x8000002e, 0x00000042, 0x80000071, 0x00000063,
- 0x80000063, 0x00000063, 0x80000064, 0x00000043,
- 0x00002215, 0x0000006b, 0x80000067, 0x00000043,
- 0x0000006f, 0x8000002e, 0x00000064, 0x80000042,
- 0x00000047, 0x80000079, 0x00000068, 0x80000061,
- 0x00000048, 0x80000050, 0x00000069, 0x8000006e,
- 0x0000004b, 0x8000004b, 0x0000004b, 0x8000004d,
- 0x0000006b, 0x80000074, 0x0000006c, 0x8000006d,
- 0x0000006c, 0x8000006e, 0x0000006c, 0x0000006f,
- 0x80000067, 0x0000006c, 0x80000078, 0x0000006d,
- 0x80000062, 0x0000006d, 0x00000069, 0x8000006c,
- 0x0000006d, 0x0000006f, 0x8000006c, 0x00000050,
- 0x80000048, 0x00000070, 0x0000002e, 0x0000006d,
- 0x8000002e, 0x00000050, 0x00000050, 0x8000004d,
- 0x00000050, 0x80000052, 0x00000073, 0x80000072,
- 0x00000053, 0x80000076, 0x00000057, 0x80000062,
- 0x00000031, 0x800065e5, 0x00000032, 0x800065e5,
- 0x00000033, 0x800065e5, 0x00000034, 0x800065e5,
- 0x00000035, 0x800065e5, 0x00000036, 0x800065e5,
- 0x00000037, 0x800065e5, 0x00000038, 0x800065e5,
- 0x00000039, 0x800065e5, 0x00000031, 0x00000030,
- 0x800065e5, 0x00000031, 0x00000031, 0x800065e5,
- 0x00000031, 0x00000032, 0x800065e5, 0x00000031,
- 0x00000033, 0x800065e5, 0x00000031, 0x00000034,
- 0x800065e5, 0x00000031, 0x00000035, 0x800065e5,
- 0x00000031, 0x00000036, 0x800065e5, 0x00000031,
- 0x00000037, 0x800065e5, 0x00000031, 0x00000038,
- 0x800065e5, 0x00000031, 0x00000039, 0x800065e5,
- 0x00000032, 0x00000030, 0x800065e5, 0x00000032,
- 0x00000031, 0x800065e5, 0x00000032, 0x00000032,
- 0x800065e5, 0x00000032, 0x00000033, 0x800065e5,
- 0x00000032, 0x00000034, 0x800065e5, 0x00000032,
- 0x00000035, 0x800065e5, 0x00000032, 0x00000036,
- 0x800065e5, 0x00000032, 0x00000037, 0x800065e5,
- 0x00000032, 0x00000038, 0x800065e5, 0x00000032,
- 0x00000039, 0x800065e5, 0x00000033, 0x00000030,
- 0x800065e5, 0x00000033, 0x00000031, 0x800065e5,
- 0x80008c48, 0x800066f4, 0x80008eca, 0x80008cc8,
- 0x80006ed1, 0x80004e32, 0x800053e5, 0x80009f9c,
- 0x80009f9c, 0x80005951, 0x800091d1, 0x80005587,
- 0x80005948, 0x800061f6, 0x80007669, 0x80007f85,
- 0x8000863f, 0x800087ba, 0x800088f8, 0x8000908f,
- 0x80006a02, 0x80006d1b, 0x800070d9, 0x800073de,
- 0x8000843d, 0x8000916a, 0x800099f1, 0x80004e82,
- 0x80005375, 0x80006b04, 0x8000721b, 0x8000862d,
- 0x80009e1e, 0x80005d50, 0x80006feb, 0x800085cd,
- 0x80008964, 0x800062c9, 0x800081d8, 0x8000881f,
- 0x80005eca, 0x80006717, 0x80006d6a, 0x800072fc,
- 0x800090ce, 0x80004f86, 0x800051b7, 0x800052de,
- 0x800064c4, 0x80006ad3, 0x80007210, 0x800076e7,
- 0x80008001, 0x80008606, 0x8000865c, 0x80008def,
- 0x80009732, 0x80009b6f, 0x80009dfa, 0x8000788c,
- 0x8000797f, 0x80007da0, 0x800083c9, 0x80009304,
- 0x80009e7f, 0x80008ad6, 0x800058df, 0x80005f04,
- 0x80007c60, 0x8000807e, 0x80007262, 0x800078ca,
- 0x80008cc2, 0x800096f7, 0x800058d8, 0x80005c62,
- 0x80006a13, 0x80006dda, 0x80006f0f, 0x80007d2f,
- 0x80007e37, 0x8000964b, 0x800052d2, 0x8000808b,
- 0x800051dc, 0x800051cc, 0x80007a1c, 0x80007dbe,
- 0x800083f1, 0x80009675, 0x80008b80, 0x800062cf,
- 0x80006a02, 0x80008afe, 0x80004e39, 0x80005be7,
- 0x80006012, 0x80007387, 0x80007570, 0x80005317,
- 0x800078fb, 0x80004fbf, 0x80005fa9, 0x80004e0d,
- 0x80006ccc, 0x80006578, 0x80007d22, 0x800053c3,
- 0x8000585e, 0x80007701, 0x80008449, 0x80008aaa,
- 0x80006bba, 0x80008fb0, 0x80006c88, 0x800062fe,
- 0x800082e5, 0x800063a0, 0x80007565, 0x80004eae,
- 0x80005169, 0x800051c9, 0x80006881, 0x80007ce7,
- 0x8000826f, 0x80008ad2, 0x800091cf, 0x800052f5,
- 0x80005442, 0x80005973, 0x80005eec, 0x800065c5,
- 0x80006ffe, 0x8000792a, 0x800095ad, 0x80009a6a,
- 0x80009e97, 0x80009ece, 0x8000529b, 0x800066c6,
- 0x80006b77, 0x80008f62, 0x80005e74, 0x80006190,
- 0x80006200, 0x8000649a, 0x80006f23, 0x80007149,
- 0x80007489, 0x800079ca, 0x80007df4, 0x8000806f,
- 0x80008f26, 0x800084ee, 0x80009023, 0x8000934a,
- 0x80005217, 0x800052a3, 0x800054bd, 0x800070c8,
- 0x800088c2, 0x80008aaa, 0x80005ec9, 0x80005ff5,
- 0x8000637b, 0x80006bae, 0x80007c3e, 0x80007375,
- 0x80004ee4, 0x800056f9, 0x80005be7, 0x80005dba,
- 0x8000601c, 0x800073b2, 0x80007469, 0x80007f9a,
- 0x80008046, 0x80009234, 0x800096f6, 0x80009748,
- 0x80009818, 0x80004f8b, 0x800079ae, 0x800091b4,
- 0x800096b8, 0x800060e1, 0x80004e86, 0x800050da,
- 0x80005bee, 0x80005c3f, 0x80006599, 0x80006a02,
- 0x800071ce, 0x80007642, 0x800084fc, 0x8000907c,
- 0x80009f8d, 0x80006688, 0x8000962e, 0x80005289,
- 0x8000677b, 0x800067f3, 0x80006d41, 0x80006e9c,
- 0x80007409, 0x80007559, 0x8000786b, 0x80007d10,
- 0x8000985e, 0x8000516d, 0x8000622e, 0x80009678,
- 0x8000502b, 0x80005d19, 0x80006dea, 0x80008f2a,
- 0x80005f8b, 0x80006144, 0x80006817, 0x80007387,
- 0x80009686, 0x80005229, 0x8000540f, 0x80005c65,
- 0x80006613, 0x8000674e, 0x800068a8, 0x80006ce5,
- 0x80007406, 0x800075e2, 0x80007f79, 0x800088cf,
- 0x800088e1, 0x800091cc, 0x800096e2, 0x8000533f,
- 0x80006eba, 0x8000541d, 0x800071d0, 0x80007498,
- 0x800085fa, 0x800096a3, 0x80009c57, 0x80009e9f,
- 0x80006797, 0x80006dcb, 0x800081e8, 0x80007acb,
- 0x80007b20, 0x80007c92, 0x800072c0, 0x80007099,
- 0x80008b58, 0x80004ec0, 0x80008336, 0x8000523a,
- 0x80005207, 0x80005ea6, 0x800062d3, 0x80007cd6,
- 0x80005b85, 0x80006d1e, 0x800066b4, 0x80008f3b,
- 0x8000884c, 0x8000964d, 0x8000898b, 0x80005ed3,
- 0x80005140, 0x800055c0, 0x8000585a, 0x80006674,
- 0x800051de, 0x8000732a, 0x800076ca, 0x8000793c,
- 0x8000795e, 0x80007965, 0x8000798f, 0x80009756,
- 0x80007cbe, 0x80007fbd, 0x80008612, 0x80008af8,
- 0x80009038, 0x800090fd, 0x800098ef, 0x800098fc,
- 0x80009928, 0x80009db4, 0x80004fae, 0x800050e7,
- 0x8000514d, 0x800052c9, 0x800052e4, 0x80005351,
- 0x8000559d, 0x80005606, 0x80005668, 0x80005840,
- 0x800058a8, 0x80005c64, 0x80005c6e, 0x80006094,
- 0x80006168, 0x8000618e, 0x800061f2, 0x8000654f,
- 0x800065e2, 0x80006691, 0x80006885, 0x80006d77,
- 0x80006e1a, 0x80006f22, 0x8000716e, 0x8000722b,
- 0x80007422, 0x80007891, 0x8000793e, 0x80007949,
- 0x80007948, 0x80007950, 0x80007956, 0x8000795d,
- 0x8000798d, 0x8000798e, 0x80007a40, 0x80007a81,
- 0x80007bc0, 0x80007df4, 0x80007e09, 0x80007e41,
- 0x80007f72, 0x80008005, 0x800081ed, 0x80008279,
- 0x80008279, 0x80008457, 0x80008910, 0x80008996,
- 0x80008b01, 0x80008b39, 0x80008cd3, 0x80008d08,
- 0x80008fb6, 0x80009038, 0x800096e3, 0x800097ff,
- 0x8000983b, 0x00000066, 0x80000066, 0x00000066,
- 0x80000069, 0x00000066, 0x8000006c, 0x00000066,
- 0x00000066, 0x80000069, 0x00000066, 0x00000066,
- 0x8000006c, 0x0000017f, 0x80000074, 0x00000073,
- 0x80000074, 0x00000574, 0x80000576, 0x00000574,
- 0x80000565, 0x00000574, 0x8000056b, 0x0000057e,
- 0x80000576, 0x00000574, 0x8000056d, 0x000005d9,
- 0x800005b4, 0x000005f2, 0x800005b7, 0x800005e2,
- 0x800005d0, 0x800005d3, 0x800005d4, 0x800005db,
- 0x800005dc, 0x800005dd, 0x800005e8, 0x800005ea,
- 0x8000002b, 0x000005e9, 0x800005c1, 0x000005e9,
- 0x800005c2, 0x0000fb49, 0x800005c1, 0x0000fb49,
- 0x800005c2, 0x000005d0, 0x800005b7, 0x000005d0,
- 0x800005b8, 0x000005d0, 0x800005bc, 0x000005d1,
- 0x800005bc, 0x000005d2, 0x800005bc, 0x000005d3,
- 0x800005bc, 0x000005d4, 0x800005bc, 0x000005d5,
- 0x800005bc, 0x000005d6, 0x800005bc, 0x000005d8,
- 0x800005bc, 0x000005d9, 0x800005bc, 0x000005da,
- 0x800005bc, 0x000005db, 0x800005bc, 0x000005dc,
- 0x800005bc, 0x000005de, 0x800005bc, 0x000005e0,
- 0x800005bc, 0x000005e1, 0x800005bc, 0x000005e3,
- 0x800005bc, 0x000005e4, 0x800005bc, 0x000005e6,
- 0x800005bc, 0x000005e7, 0x800005bc, 0x000005e8,
- 0x800005bc, 0x000005e9, 0x800005bc, 0x000005ea,
- 0x800005bc, 0x000005d5, 0x800005b9, 0x000005d1,
- 0x800005bf, 0x000005db, 0x800005bf, 0x000005e4,
- 0x800005bf, 0x000005d0, 0x800005dc, 0x80000671,
- 0x80000671, 0x8000067b, 0x8000067b, 0x8000067b,
- 0x8000067b, 0x8000067e, 0x8000067e, 0x8000067e,
- 0x8000067e, 0x80000680, 0x80000680, 0x80000680,
- 0x80000680, 0x8000067a, 0x8000067a, 0x8000067a,
- 0x8000067a, 0x8000067f, 0x8000067f, 0x8000067f,
- 0x8000067f, 0x80000679, 0x80000679, 0x80000679,
- 0x80000679, 0x800006a4, 0x800006a4, 0x800006a4,
- 0x800006a4, 0x800006a6, 0x800006a6, 0x800006a6,
- 0x800006a6, 0x80000684, 0x80000684, 0x80000684,
- 0x80000684, 0x80000683, 0x80000683, 0x80000683,
- 0x80000683, 0x80000686, 0x80000686, 0x80000686,
- 0x80000686, 0x80000687, 0x80000687, 0x80000687,
- 0x80000687, 0x8000068d, 0x8000068d, 0x8000068c,
- 0x8000068c, 0x8000068e, 0x8000068e, 0x80000688,
- 0x80000688, 0x80000698, 0x80000698, 0x80000691,
- 0x80000691, 0x800006a9, 0x800006a9, 0x800006a9,
- 0x800006a9, 0x800006af, 0x800006af, 0x800006af,
- 0x800006af, 0x800006b3, 0x800006b3, 0x800006b3,
- 0x800006b3, 0x800006b1, 0x800006b1, 0x800006b1,
- 0x800006b1, 0x800006ba, 0x800006ba, 0x800006bb,
- 0x800006bb, 0x800006bb, 0x800006bb, 0x800006c0,
- 0x800006c0, 0x800006c1, 0x800006c1, 0x800006c1,
- 0x800006c1, 0x800006be, 0x800006be, 0x800006be,
- 0x800006be, 0x800006d2, 0x800006d2, 0x800006d3,
- 0x800006d3, 0x800006ad, 0x800006ad, 0x800006ad,
- 0x800006ad, 0x800006c7, 0x800006c7, 0x800006c6,
- 0x800006c6, 0x800006c8, 0x800006c8, 0x80000677,
- 0x800006cb, 0x800006cb, 0x800006c5, 0x800006c5,
- 0x800006c9, 0x800006c9, 0x800006d0, 0x800006d0,
- 0x800006d0, 0x800006d0, 0x80000649, 0x80000649,
- 0x00000626, 0x80000627, 0x00000626, 0x80000627,
- 0x00000626, 0x800006d5, 0x00000626, 0x800006d5,
- 0x00000626, 0x80000648, 0x00000626, 0x80000648,
- 0x00000626, 0x800006c7, 0x00000626, 0x800006c7,
- 0x00000626, 0x800006c6, 0x00000626, 0x800006c6,
- 0x00000626, 0x800006c8, 0x00000626, 0x800006c8,
- 0x00000626, 0x800006d0, 0x00000626, 0x800006d0,
- 0x00000626, 0x800006d0, 0x00000626, 0x80000649,
- 0x00000626, 0x80000649, 0x00000626, 0x80000649,
- 0x800006cc, 0x800006cc, 0x800006cc, 0x800006cc,
- 0x00000626, 0x8000062c, 0x00000626, 0x8000062d,
- 0x00000626, 0x80000645, 0x00000626, 0x80000649,
- 0x00000626, 0x8000064a, 0x00000628, 0x8000062c,
- 0x00000628, 0x8000062d, 0x00000628, 0x8000062e,
- 0x00000628, 0x80000645, 0x00000628, 0x80000649,
- 0x00000628, 0x8000064a, 0x0000062a, 0x8000062c,
- 0x0000062a, 0x8000062d, 0x0000062a, 0x8000062e,
- 0x0000062a, 0x80000645, 0x0000062a, 0x80000649,
- 0x0000062a, 0x8000064a, 0x0000062b, 0x8000062c,
- 0x0000062b, 0x80000645, 0x0000062b, 0x80000649,
- 0x0000062b, 0x8000064a, 0x0000062c, 0x8000062d,
- 0x0000062c, 0x80000645, 0x0000062d, 0x8000062c,
- 0x0000062d, 0x80000645, 0x0000062e, 0x8000062c,
- 0x0000062e, 0x8000062d, 0x0000062e, 0x80000645,
- 0x00000633, 0x8000062c, 0x00000633, 0x8000062d,
- 0x00000633, 0x8000062e, 0x00000633, 0x80000645,
- 0x00000635, 0x8000062d, 0x00000635, 0x80000645,
- 0x00000636, 0x8000062c, 0x00000636, 0x8000062d,
- 0x00000636, 0x8000062e, 0x00000636, 0x80000645,
- 0x00000637, 0x8000062d, 0x00000637, 0x80000645,
- 0x00000638, 0x80000645, 0x00000639, 0x8000062c,
- 0x00000639, 0x80000645, 0x0000063a, 0x8000062c,
- 0x0000063a, 0x80000645, 0x00000641, 0x8000062c,
- 0x00000641, 0x8000062d, 0x00000641, 0x8000062e,
- 0x00000641, 0x80000645, 0x00000641, 0x80000649,
- 0x00000641, 0x8000064a, 0x00000642, 0x8000062d,
- 0x00000642, 0x80000645, 0x00000642, 0x80000649,
- 0x00000642, 0x8000064a, 0x00000643, 0x80000627,
- 0x00000643, 0x8000062c, 0x00000643, 0x8000062d,
- 0x00000643, 0x8000062e, 0x00000643, 0x80000644,
- 0x00000643, 0x80000645, 0x00000643, 0x80000649,
- 0x00000643, 0x8000064a, 0x00000644, 0x8000062c,
- 0x00000644, 0x8000062d, 0x00000644, 0x8000062e,
- 0x00000644, 0x80000645, 0x00000644, 0x80000649,
- 0x00000644, 0x8000064a, 0x00000645, 0x8000062c,
- 0x00000645, 0x8000062d, 0x00000645, 0x8000062e,
- 0x00000645, 0x80000645, 0x00000645, 0x80000649,
- 0x00000645, 0x8000064a, 0x00000646, 0x8000062c,
- 0x00000646, 0x8000062d, 0x00000646, 0x8000062e,
- 0x00000646, 0x80000645, 0x00000646, 0x80000649,
- 0x00000646, 0x8000064a, 0x00000647, 0x8000062c,
- 0x00000647, 0x80000645, 0x00000647, 0x80000649,
- 0x00000647, 0x8000064a, 0x0000064a, 0x8000062c,
- 0x0000064a, 0x8000062d, 0x0000064a, 0x8000062e,
- 0x0000064a, 0x80000645, 0x0000064a, 0x80000649,
- 0x0000064a, 0x8000064a, 0x00000630, 0x80000670,
- 0x00000631, 0x80000670, 0x00000649, 0x80000670,
- 0x00000020, 0x0000064c, 0x80000651, 0x00000020,
- 0x0000064d, 0x80000651, 0x00000020, 0x0000064e,
- 0x80000651, 0x00000020, 0x0000064f, 0x80000651,
- 0x00000020, 0x00000650, 0x80000651, 0x00000020,
- 0x00000651, 0x80000670, 0x00000626, 0x80000631,
- 0x00000626, 0x80000632, 0x00000626, 0x80000645,
- 0x00000626, 0x80000646, 0x00000626, 0x80000649,
- 0x00000626, 0x8000064a, 0x00000628, 0x80000631,
- 0x00000628, 0x80000632, 0x00000628, 0x80000645,
- 0x00000628, 0x80000646, 0x00000628, 0x80000649,
- 0x00000628, 0x8000064a, 0x0000062a, 0x80000631,
- 0x0000062a, 0x80000632, 0x0000062a, 0x80000645,
- 0x0000062a, 0x80000646, 0x0000062a, 0x80000649,
- 0x0000062a, 0x8000064a, 0x0000062b, 0x80000631,
- 0x0000062b, 0x80000632, 0x0000062b, 0x80000645,
- 0x0000062b, 0x80000646, 0x0000062b, 0x80000649,
- 0x0000062b, 0x8000064a, 0x00000641, 0x80000649,
- 0x00000641, 0x8000064a, 0x00000642, 0x80000649,
- 0x00000642, 0x8000064a, 0x00000643, 0x80000627,
- 0x00000643, 0x80000644, 0x00000643, 0x80000645,
- 0x00000643, 0x80000649, 0x00000643, 0x8000064a,
- 0x00000644, 0x80000645, 0x00000644, 0x80000649,
- 0x00000644, 0x8000064a, 0x00000645, 0x80000627,
- 0x00000645, 0x80000645, 0x00000646, 0x80000631,
- 0x00000646, 0x80000632, 0x00000646, 0x80000645,
- 0x00000646, 0x80000646, 0x00000646, 0x80000649,
- 0x00000646, 0x8000064a, 0x00000649, 0x80000670,
- 0x0000064a, 0x80000631, 0x0000064a, 0x80000632,
- 0x0000064a, 0x80000645, 0x0000064a, 0x80000646,
- 0x0000064a, 0x80000649, 0x0000064a, 0x8000064a,
- 0x00000626, 0x8000062c, 0x00000626, 0x8000062d,
- 0x00000626, 0x8000062e, 0x00000626, 0x80000645,
- 0x00000626, 0x80000647, 0x00000628, 0x8000062c,
- 0x00000628, 0x8000062d, 0x00000628, 0x8000062e,
- 0x00000628, 0x80000645, 0x00000628, 0x80000647,
- 0x0000062a, 0x8000062c, 0x0000062a, 0x8000062d,
- 0x0000062a, 0x8000062e, 0x0000062a, 0x80000645,
- 0x0000062a, 0x80000647, 0x0000062b, 0x80000645,
- 0x0000062c, 0x8000062d, 0x0000062c, 0x80000645,
- 0x0000062d, 0x8000062c, 0x0000062d, 0x80000645,
- 0x0000062e, 0x8000062c, 0x0000062e, 0x80000645,
- 0x00000633, 0x8000062c, 0x00000633, 0x8000062d,
- 0x00000633, 0x8000062e, 0x00000633, 0x80000645,
- 0x00000635, 0x8000062d, 0x00000635, 0x8000062e,
- 0x00000635, 0x80000645, 0x00000636, 0x8000062c,
- 0x00000636, 0x8000062d, 0x00000636, 0x8000062e,
- 0x00000636, 0x80000645, 0x00000637, 0x8000062d,
- 0x00000638, 0x80000645, 0x00000639, 0x8000062c,
- 0x00000639, 0x80000645, 0x0000063a, 0x8000062c,
- 0x0000063a, 0x80000645, 0x00000641, 0x8000062c,
- 0x00000641, 0x8000062d, 0x00000641, 0x8000062e,
- 0x00000641, 0x80000645, 0x00000642, 0x8000062d,
- 0x00000642, 0x80000645, 0x00000643, 0x8000062c,
- 0x00000643, 0x8000062d, 0x00000643, 0x8000062e,
- 0x00000643, 0x80000644, 0x00000643, 0x80000645,
- 0x00000644, 0x8000062c, 0x00000644, 0x8000062d,
- 0x00000644, 0x8000062e, 0x00000644, 0x80000645,
- 0x00000644, 0x80000647, 0x00000645, 0x8000062c,
- 0x00000645, 0x8000062d, 0x00000645, 0x8000062e,
- 0x00000645, 0x80000645, 0x00000646, 0x8000062c,
- 0x00000646, 0x8000062d, 0x00000646, 0x8000062e,
- 0x00000646, 0x80000645, 0x00000646, 0x80000647,
- 0x00000647, 0x8000062c, 0x00000647, 0x80000645,
- 0x00000647, 0x80000670, 0x0000064a, 0x8000062c,
- 0x0000064a, 0x8000062d, 0x0000064a, 0x8000062e,
- 0x0000064a, 0x80000645, 0x0000064a, 0x80000647,
- 0x00000626, 0x80000645, 0x00000626, 0x80000647,
- 0x00000628, 0x80000645, 0x00000628, 0x80000647,
- 0x0000062a, 0x80000645, 0x0000062a, 0x80000647,
- 0x0000062b, 0x80000645, 0x0000062b, 0x80000647,
- 0x00000633, 0x80000645, 0x00000633, 0x80000647,
- 0x00000634, 0x80000645, 0x00000634, 0x80000647,
- 0x00000643, 0x80000644, 0x00000643, 0x80000645,
- 0x00000644, 0x80000645, 0x00000646, 0x80000645,
- 0x00000646, 0x80000647, 0x0000064a, 0x80000645,
- 0x0000064a, 0x80000647, 0x00000640, 0x0000064e,
- 0x80000651, 0x00000640, 0x0000064f, 0x80000651,
- 0x00000640, 0x00000650, 0x80000651, 0x00000637,
- 0x80000649, 0x00000637, 0x8000064a, 0x00000639,
- 0x80000649, 0x00000639, 0x8000064a, 0x0000063a,
- 0x80000649, 0x0000063a, 0x8000064a, 0x00000633,
- 0x80000649, 0x00000633, 0x8000064a, 0x00000634,
- 0x80000649, 0x00000634, 0x8000064a, 0x0000062d,
- 0x80000649, 0x0000062d, 0x8000064a, 0x0000062c,
- 0x80000649, 0x0000062c, 0x8000064a, 0x0000062e,
- 0x80000649, 0x0000062e, 0x8000064a, 0x00000635,
- 0x80000649, 0x00000635, 0x8000064a, 0x00000636,
- 0x80000649, 0x00000636, 0x8000064a, 0x00000634,
- 0x8000062c, 0x00000634, 0x8000062d, 0x00000634,
- 0x8000062e, 0x00000634, 0x80000645, 0x00000634,
- 0x80000631, 0x00000633, 0x80000631, 0x00000635,
- 0x80000631, 0x00000636, 0x80000631, 0x00000637,
- 0x80000649, 0x00000637, 0x8000064a, 0x00000639,
- 0x80000649, 0x00000639, 0x8000064a, 0x0000063a,
- 0x80000649, 0x0000063a, 0x8000064a, 0x00000633,
- 0x80000649, 0x00000633, 0x8000064a, 0x00000634,
- 0x80000649, 0x00000634, 0x8000064a, 0x0000062d,
- 0x80000649, 0x0000062d, 0x8000064a, 0x0000062c,
- 0x80000649, 0x0000062c, 0x8000064a, 0x0000062e,
- 0x80000649, 0x0000062e, 0x8000064a, 0x00000635,
- 0x80000649, 0x00000635, 0x8000064a, 0x00000636,
- 0x80000649, 0x00000636, 0x8000064a, 0x00000634,
- 0x8000062c, 0x00000634, 0x8000062d, 0x00000634,
- 0x8000062e, 0x00000634, 0x80000645, 0x00000634,
- 0x80000631, 0x00000633, 0x80000631, 0x00000635,
- 0x80000631, 0x00000636, 0x80000631, 0x00000634,
- 0x8000062c, 0x00000634, 0x8000062d, 0x00000634,
- 0x8000062e, 0x00000634, 0x80000645, 0x00000633,
- 0x80000647, 0x00000634, 0x80000647, 0x00000637,
- 0x80000645, 0x00000633, 0x8000062c, 0x00000633,
- 0x8000062d, 0x00000633, 0x8000062e, 0x00000634,
- 0x8000062c, 0x00000634, 0x8000062d, 0x00000634,
- 0x8000062e, 0x00000637, 0x80000645, 0x00000638,
- 0x80000645, 0x00000627, 0x8000064b, 0x00000627,
- 0x8000064b, 0x0000062a, 0x0000062c, 0x80000645,
- 0x0000062a, 0x0000062d, 0x8000062c, 0x0000062a,
- 0x0000062d, 0x8000062c, 0x0000062a, 0x0000062d,
- 0x80000645, 0x0000062a, 0x0000062e, 0x80000645,
- 0x0000062a, 0x00000645, 0x8000062c, 0x0000062a,
- 0x00000645, 0x8000062d, 0x0000062a, 0x00000645,
- 0x8000062e, 0x0000062c, 0x00000645, 0x8000062d,
- 0x0000062c, 0x00000645, 0x8000062d, 0x0000062d,
- 0x00000645, 0x8000064a, 0x0000062d, 0x00000645,
- 0x80000649, 0x00000633, 0x0000062d, 0x8000062c,
- 0x00000633, 0x0000062c, 0x8000062d, 0x00000633,
- 0x0000062c, 0x80000649, 0x00000633, 0x00000645,
- 0x8000062d, 0x00000633, 0x00000645, 0x8000062d,
- 0x00000633, 0x00000645, 0x8000062c, 0x00000633,
- 0x00000645, 0x80000645, 0x00000633, 0x00000645,
- 0x80000645, 0x00000635, 0x0000062d, 0x8000062d,
- 0x00000635, 0x0000062d, 0x8000062d, 0x00000635,
- 0x00000645, 0x80000645, 0x00000634, 0x0000062d,
- 0x80000645, 0x00000634, 0x0000062d, 0x80000645,
- 0x00000634, 0x0000062c, 0x8000064a, 0x00000634,
- 0x00000645, 0x8000062e, 0x00000634, 0x00000645,
- 0x8000062e, 0x00000634, 0x00000645, 0x80000645,
- 0x00000634, 0x00000645, 0x80000645, 0x00000636,
- 0x0000062d, 0x80000649, 0x00000636, 0x0000062e,
- 0x80000645, 0x00000636, 0x0000062e, 0x80000645,
- 0x00000637, 0x00000645, 0x8000062d, 0x00000637,
- 0x00000645, 0x8000062d, 0x00000637, 0x00000645,
- 0x80000645, 0x00000637, 0x00000645, 0x8000064a,
- 0x00000639, 0x0000062c, 0x80000645, 0x00000639,
- 0x00000645, 0x80000645, 0x00000639, 0x00000645,
- 0x80000645, 0x00000639, 0x00000645, 0x80000649,
- 0x0000063a, 0x00000645, 0x80000645, 0x0000063a,
- 0x00000645, 0x8000064a, 0x0000063a, 0x00000645,
- 0x80000649, 0x00000641, 0x0000062e, 0x80000645,
- 0x00000641, 0x0000062e, 0x80000645, 0x00000642,
- 0x00000645, 0x8000062d, 0x00000642, 0x00000645,
- 0x80000645, 0x00000644, 0x0000062d, 0x80000645,
- 0x00000644, 0x0000062d, 0x8000064a, 0x00000644,
- 0x0000062d, 0x80000649, 0x00000644, 0x0000062c,
- 0x8000062c, 0x00000644, 0x0000062c, 0x8000062c,
- 0x00000644, 0x0000062e, 0x80000645, 0x00000644,
- 0x0000062e, 0x80000645, 0x00000644, 0x00000645,
- 0x8000062d, 0x00000644, 0x00000645, 0x8000062d,
- 0x00000645, 0x0000062d, 0x8000062c, 0x00000645,
- 0x0000062d, 0x80000645, 0x00000645, 0x0000062d,
- 0x8000064a, 0x00000645, 0x0000062c, 0x8000062d,
- 0x00000645, 0x0000062c, 0x80000645, 0x00000645,
- 0x0000062e, 0x8000062c, 0x00000645, 0x0000062e,
- 0x80000645, 0x00000645, 0x0000062c, 0x8000062e,
- 0x00000647, 0x00000645, 0x8000062c, 0x00000647,
- 0x00000645, 0x80000645, 0x00000646, 0x0000062d,
- 0x80000645, 0x00000646, 0x0000062d, 0x80000649,
- 0x00000646, 0x0000062c, 0x80000645, 0x00000646,
- 0x0000062c, 0x80000645, 0x00000646, 0x0000062c,
- 0x80000649, 0x00000646, 0x00000645, 0x8000064a,
- 0x00000646, 0x00000645, 0x80000649, 0x0000064a,
- 0x00000645, 0x80000645, 0x0000064a, 0x00000645,
- 0x80000645, 0x00000628, 0x0000062e, 0x8000064a,
- 0x0000062a, 0x0000062c, 0x8000064a, 0x0000062a,
- 0x0000062c, 0x80000649, 0x0000062a, 0x0000062e,
- 0x8000064a, 0x0000062a, 0x0000062e, 0x80000649,
- 0x0000062a, 0x00000645, 0x8000064a, 0x0000062a,
- 0x00000645, 0x80000649, 0x0000062c, 0x00000645,
- 0x8000064a, 0x0000062c, 0x0000062d, 0x80000649,
- 0x0000062c, 0x00000645, 0x80000649, 0x00000633,
- 0x0000062e, 0x80000649, 0x00000635, 0x0000062d,
- 0x8000064a, 0x00000634, 0x0000062d, 0x8000064a,
- 0x00000636, 0x0000062d, 0x8000064a, 0x00000644,
- 0x0000062c, 0x8000064a, 0x00000644, 0x00000645,
- 0x8000064a, 0x0000064a, 0x0000062d, 0x8000064a,
- 0x0000064a, 0x0000062c, 0x8000064a, 0x0000064a,
- 0x00000645, 0x8000064a, 0x00000645, 0x00000645,
- 0x8000064a, 0x00000642, 0x00000645, 0x8000064a,
- 0x00000646, 0x0000062d, 0x8000064a, 0x00000642,
- 0x00000645, 0x8000062d, 0x00000644, 0x0000062d,
- 0x80000645, 0x00000639, 0x00000645, 0x8000064a,
- 0x00000643, 0x00000645, 0x8000064a, 0x00000646,
- 0x0000062c, 0x8000062d, 0x00000645, 0x0000062e,
- 0x8000064a, 0x00000644, 0x0000062c, 0x80000645,
- 0x00000643, 0x00000645, 0x80000645, 0x00000644,
- 0x0000062c, 0x80000645, 0x00000646, 0x0000062c,
- 0x8000062d, 0x0000062c, 0x0000062d, 0x8000064a,
- 0x0000062d, 0x0000062c, 0x8000064a, 0x00000645,
- 0x0000062c, 0x8000064a, 0x00000641, 0x00000645,
- 0x8000064a, 0x00000628, 0x0000062d, 0x8000064a,
- 0x00000643, 0x00000645, 0x80000645, 0x00000639,
- 0x0000062c, 0x80000645, 0x00000635, 0x00000645,
- 0x80000645, 0x00000633, 0x0000062e, 0x8000064a,
- 0x00000646, 0x0000062c, 0x8000064a, 0x00000635,
- 0x00000644, 0x800006d2, 0x00000642, 0x00000644,
- 0x800006d2, 0x00000627, 0x00000644, 0x00000644,
- 0x80000647, 0x00000627, 0x00000643, 0x00000628,
- 0x80000631, 0x00000645, 0x0000062d, 0x00000645,
- 0x8000062f, 0x00000635, 0x00000644, 0x00000639,
- 0x80000645, 0x00000631, 0x00000633, 0x00000648,
- 0x80000644, 0x00000639, 0x00000644, 0x0000064a,
- 0x80000647, 0x00000648, 0x00000633, 0x00000644,
- 0x80000645, 0x00000635, 0x00000644, 0x80000649,
- 0x00000635, 0x00000644, 0x00000649, 0x00000020,
- 0x00000627, 0x00000644, 0x00000644, 0x00000647,
- 0x00000020, 0x00000639, 0x00000644, 0x0000064a,
- 0x00000647, 0x00000020, 0x00000648, 0x00000633,
- 0x00000644, 0x80000645, 0x0000062c, 0x00000644,
- 0x00000020, 0x0000062c, 0x00000644, 0x00000627,
- 0x00000644, 0x80000647, 0x00000631, 0x000006cc,
- 0x00000627, 0x80000644, 0x80002025, 0x80002014,
- 0x80002013, 0x8000005f, 0x8000005f, 0x80000028,
- 0x80000029, 0x8000007b, 0x8000007d, 0x80003014,
- 0x80003015, 0x80003010, 0x80003011, 0x8000300a,
- 0x8000300b, 0x80003008, 0x80003009, 0x8000300c,
- 0x8000300d, 0x8000300e, 0x8000300f, 0x8000203e,
- 0x8000203e, 0x8000203e, 0x8000203e, 0x8000005f,
- 0x8000005f, 0x8000005f, 0x8000002c, 0x80003001,
- 0x8000002e, 0x8000003b, 0x8000003a, 0x8000003f,
- 0x80000021, 0x80002014, 0x80000028, 0x80000029,
- 0x8000007b, 0x8000007d, 0x80003014, 0x80003015,
- 0x80000023, 0x80000026, 0x8000002a, 0x8000002b,
- 0x8000002d, 0x8000003c, 0x8000003e, 0x8000003d,
- 0x8000005c, 0x80000024, 0x80000025, 0x80000040,
- 0x00000020, 0x8000064b, 0x00000640, 0x8000064b,
- 0x00000020, 0x8000064c, 0x00000020, 0x8000064d,
- 0x00000020, 0x8000064e, 0x00000640, 0x8000064e,
- 0x00000020, 0x8000064f, 0x00000640, 0x8000064f,
- 0x00000020, 0x80000650, 0x00000640, 0x80000650,
- 0x00000020, 0x80000651, 0x00000640, 0x80000651,
- 0x00000020, 0x80000652, 0x00000640, 0x80000652,
- 0x80000621, 0x80000622, 0x80000622, 0x80000623,
- 0x80000623, 0x80000624, 0x80000624, 0x80000625,
- 0x80000625, 0x80000626, 0x80000626, 0x80000626,
- 0x80000626, 0x80000627, 0x80000627, 0x80000628,
- 0x80000628, 0x80000628, 0x80000628, 0x80000629,
- 0x80000629, 0x8000062a, 0x8000062a, 0x8000062a,
- 0x8000062a, 0x8000062b, 0x8000062b, 0x8000062b,
- 0x8000062b, 0x8000062c, 0x8000062c, 0x8000062c,
- 0x8000062c, 0x8000062d, 0x8000062d, 0x8000062d,
- 0x8000062d, 0x8000062e, 0x8000062e, 0x8000062e,
- 0x8000062e, 0x8000062f, 0x8000062f, 0x80000630,
- 0x80000630, 0x80000631, 0x80000631, 0x80000632,
- 0x80000632, 0x80000633, 0x80000633, 0x80000633,
- 0x80000633, 0x80000634, 0x80000634, 0x80000634,
- 0x80000634, 0x80000635, 0x80000635, 0x80000635,
- 0x80000635, 0x80000636, 0x80000636, 0x80000636,
- 0x80000636, 0x80000637, 0x80000637, 0x80000637,
- 0x80000637, 0x80000638, 0x80000638, 0x80000638,
- 0x80000638, 0x80000639, 0x80000639, 0x80000639,
- 0x80000639, 0x8000063a, 0x8000063a, 0x8000063a,
- 0x8000063a, 0x80000641, 0x80000641, 0x80000641,
- 0x80000641, 0x80000642, 0x80000642, 0x80000642,
- 0x80000642, 0x80000643, 0x80000643, 0x80000643,
- 0x80000643, 0x80000644, 0x80000644, 0x80000644,
- 0x80000644, 0x80000645, 0x80000645, 0x80000645,
- 0x80000645, 0x80000646, 0x80000646, 0x80000646,
- 0x80000646, 0x80000647, 0x80000647, 0x80000647,
- 0x80000647, 0x80000648, 0x80000648, 0x80000649,
- 0x80000649, 0x8000064a, 0x8000064a, 0x8000064a,
- 0x8000064a, 0x00000644, 0x80000622, 0x00000644,
- 0x80000622, 0x00000644, 0x80000623, 0x00000644,
- 0x80000623, 0x00000644, 0x80000625, 0x00000644,
- 0x80000625, 0x00000644, 0x80000627, 0x00000644,
- 0x80000627, 0x80000021, 0x80000022, 0x80000023,
- 0x80000024, 0x80000025, 0x80000026, 0x80000027,
- 0x80000028, 0x80000029, 0x8000002a, 0x8000002b,
- 0x8000002c, 0x8000002d, 0x8000002e, 0x8000002f,
- 0x80000030, 0x80000031, 0x80000032, 0x80000033,
- 0x80000034, 0x80000035, 0x80000036, 0x80000037,
- 0x80000038, 0x80000039, 0x8000003a, 0x8000003b,
- 0x8000003c, 0x8000003d, 0x8000003e, 0x8000003f,
- 0x80000040, 0x80000041, 0x80000042, 0x80000043,
- 0x80000044, 0x80000045, 0x80000046, 0x80000047,
- 0x80000048, 0x80000049, 0x8000004a, 0x8000004b,
- 0x8000004c, 0x8000004d, 0x8000004e, 0x8000004f,
- 0x80000050, 0x80000051, 0x80000052, 0x80000053,
- 0x80000054, 0x80000055, 0x80000056, 0x80000057,
- 0x80000058, 0x80000059, 0x8000005a, 0x8000005b,
- 0x8000005c, 0x8000005d, 0x8000005e, 0x8000005f,
- 0x80000060, 0x80000061, 0x80000062, 0x80000063,
- 0x80000064, 0x80000065, 0x80000066, 0x80000067,
- 0x80000068, 0x80000069, 0x8000006a, 0x8000006b,
- 0x8000006c, 0x8000006d, 0x8000006e, 0x8000006f,
- 0x80000070, 0x80000071, 0x80000072, 0x80000073,
- 0x80000074, 0x80000075, 0x80000076, 0x80000077,
- 0x80000078, 0x80000079, 0x8000007a, 0x8000007b,
- 0x8000007c, 0x8000007d, 0x8000007e, 0x80002985,
- 0x80002986, 0x80003002, 0x8000300c, 0x8000300d,
- 0x80003001, 0x800030fb, 0x800030f2, 0x800030a1,
- 0x800030a3, 0x800030a5, 0x800030a7, 0x800030a9,
- 0x800030e3, 0x800030e5, 0x800030e7, 0x800030c3,
- 0x800030fc, 0x800030a2, 0x800030a4, 0x800030a6,
- 0x800030a8, 0x800030aa, 0x800030ab, 0x800030ad,
- 0x800030af, 0x800030b1, 0x800030b3, 0x800030b5,
- 0x800030b7, 0x800030b9, 0x800030bb, 0x800030bd,
- 0x800030bf, 0x800030c1, 0x800030c4, 0x800030c6,
- 0x800030c8, 0x800030ca, 0x800030cb, 0x800030cc,
- 0x800030cd, 0x800030ce, 0x800030cf, 0x800030d2,
- 0x800030d5, 0x800030d8, 0x800030db, 0x800030de,
- 0x800030df, 0x800030e0, 0x800030e1, 0x800030e2,
- 0x800030e4, 0x800030e6, 0x800030e8, 0x800030e9,
- 0x800030ea, 0x800030eb, 0x800030ec, 0x800030ed,
- 0x800030ef, 0x800030f3, 0x80003099, 0x8000309a,
- 0x80003164, 0x80003131, 0x80003132, 0x80003133,
- 0x80003134, 0x80003135, 0x80003136, 0x80003137,
- 0x80003138, 0x80003139, 0x8000313a, 0x8000313b,
- 0x8000313c, 0x8000313d, 0x8000313e, 0x8000313f,
- 0x80003140, 0x80003141, 0x80003142, 0x80003143,
- 0x80003144, 0x80003145, 0x80003146, 0x80003147,
- 0x80003148, 0x80003149, 0x8000314a, 0x8000314b,
- 0x8000314c, 0x8000314d, 0x8000314e, 0x8000314f,
- 0x80003150, 0x80003151, 0x80003152, 0x80003153,
- 0x80003154, 0x80003155, 0x80003156, 0x80003157,
- 0x80003158, 0x80003159, 0x8000315a, 0x8000315b,
- 0x8000315c, 0x8000315d, 0x8000315e, 0x8000315f,
- 0x80003160, 0x80003161, 0x80003162, 0x80003163,
- 0x800000a2, 0x800000a3, 0x800000ac, 0x800000af,
- 0x800000a6, 0x800000a5, 0x800020a9, 0x80002502,
- 0x80002190, 0x80002191, 0x80002192, 0x80002193,
- 0x800025a0, 0x800025cb, 0x0001d157, 0x8001d165,
- 0x0001d158, 0x8001d165, 0x0001d15f, 0x8001d16e,
- 0x0001d15f, 0x8001d16f, 0x0001d15f, 0x8001d170,
- 0x0001d15f, 0x8001d171, 0x0001d15f, 0x8001d172,
- 0x0001d1b9, 0x8001d165, 0x0001d1ba, 0x8001d165,
- 0x0001d1bb, 0x8001d16e, 0x0001d1bc, 0x8001d16e,
- 0x0001d1bb, 0x8001d16f, 0x0001d1bc, 0x8001d16f,
- 0x80000041, 0x80000042, 0x80000043, 0x80000044,
- 0x80000045, 0x80000046, 0x80000047, 0x80000048,
- 0x80000049, 0x8000004a, 0x8000004b, 0x8000004c,
- 0x8000004d, 0x8000004e, 0x8000004f, 0x80000050,
- 0x80000051, 0x80000052, 0x80000053, 0x80000054,
- 0x80000055, 0x80000056, 0x80000057, 0x80000058,
- 0x80000059, 0x8000005a, 0x80000061, 0x80000062,
- 0x80000063, 0x80000064, 0x80000065, 0x80000066,
- 0x80000067, 0x80000068, 0x80000069, 0x8000006a,
- 0x8000006b, 0x8000006c, 0x8000006d, 0x8000006e,
- 0x8000006f, 0x80000070, 0x80000071, 0x80000072,
- 0x80000073, 0x80000074, 0x80000075, 0x80000076,
- 0x80000077, 0x80000078, 0x80000079, 0x8000007a,
- 0x80000041, 0x80000042, 0x80000043, 0x80000044,
- 0x80000045, 0x80000046, 0x80000047, 0x80000048,
- 0x80000049, 0x8000004a, 0x8000004b, 0x8000004c,
- 0x8000004d, 0x8000004e, 0x8000004f, 0x80000050,
- 0x80000051, 0x80000052, 0x80000053, 0x80000054,
- 0x80000055, 0x80000056, 0x80000057, 0x80000058,
- 0x80000059, 0x8000005a, 0x80000061, 0x80000062,
- 0x80000063, 0x80000064, 0x80000065, 0x80000066,
- 0x80000067, 0x80000069, 0x8000006a, 0x8000006b,
- 0x8000006c, 0x8000006d, 0x8000006e, 0x8000006f,
- 0x80000070, 0x80000071, 0x80000072, 0x80000073,
- 0x80000074, 0x80000075, 0x80000076, 0x80000077,
- 0x80000078, 0x80000079, 0x8000007a, 0x80000041,
- 0x80000042, 0x80000043, 0x80000044, 0x80000045,
- 0x80000046, 0x80000047, 0x80000048, 0x80000049,
- 0x8000004a, 0x8000004b, 0x8000004c, 0x8000004d,
- 0x8000004e, 0x8000004f, 0x80000050, 0x80000051,
- 0x80000052, 0x80000053, 0x80000054, 0x80000055,
- 0x80000056, 0x80000057, 0x80000058, 0x80000059,
- 0x8000005a, 0x80000061, 0x80000062, 0x80000063,
- 0x80000064, 0x80000065, 0x80000066, 0x80000067,
- 0x80000068, 0x80000069, 0x8000006a, 0x8000006b,
- 0x8000006c, 0x8000006d, 0x8000006e, 0x8000006f,
- 0x80000070, 0x80000071, 0x80000072, 0x80000073,
- 0x80000074, 0x80000075, 0x80000076, 0x80000077,
- 0x80000078, 0x80000079, 0x8000007a, 0x80000041,
- 0x80000043, 0x80000044, 0x80000047, 0x8000004a,
- 0x8000004b, 0x8000004e, 0x8000004f, 0x80000050,
- 0x80000051, 0x80000053, 0x80000054, 0x80000055,
- 0x80000056, 0x80000057, 0x80000058, 0x80000059,
- 0x8000005a, 0x80000061, 0x80000062, 0x80000063,
- 0x80000064, 0x80000066, 0x80000068, 0x80000069,
- 0x8000006a, 0x8000006b, 0x8000006d, 0x8000006e,
- 0x80000070, 0x80000071, 0x80000072, 0x80000073,
- 0x80000074, 0x80000075, 0x80000076, 0x80000077,
- 0x80000078, 0x80000079, 0x8000007a, 0x80000041,
- 0x80000042, 0x80000043, 0x80000044, 0x80000045,
- 0x80000046, 0x80000047, 0x80000048, 0x80000049,
- 0x8000004a, 0x8000004b, 0x8000004c, 0x8000004d,
- 0x8000004e, 0x8000004f, 0x80000050, 0x80000051,
- 0x80000052, 0x80000053, 0x80000054, 0x80000055,
- 0x80000056, 0x80000057, 0x80000058, 0x80000059,
- 0x8000005a, 0x80000061, 0x80000062, 0x80000063,
- 0x80000064, 0x80000065, 0x80000066, 0x80000067,
- 0x80000068, 0x80000069, 0x8000006a, 0x8000006b,
- 0x8000006c, 0x8000006d, 0x8000006e, 0x8000006f,
- 0x80000070, 0x80000071, 0x80000072, 0x80000073,
- 0x80000074, 0x80000075, 0x80000076, 0x80000077,
- 0x80000078, 0x80000079, 0x8000007a, 0x80000041,
- 0x80000042, 0x80000044, 0x80000045, 0x80000046,
- 0x80000047, 0x8000004a, 0x8000004b, 0x8000004c,
- 0x8000004d, 0x8000004e, 0x8000004f, 0x80000050,
- 0x80000051, 0x80000053, 0x80000054, 0x80000055,
- 0x80000056, 0x80000057, 0x80000058, 0x80000059,
- 0x80000061, 0x80000062, 0x80000063, 0x80000064,
- 0x80000065, 0x80000066, 0x80000067, 0x80000068,
- 0x80000069, 0x8000006a, 0x8000006b, 0x8000006c,
- 0x8000006d, 0x8000006e, 0x8000006f, 0x80000070,
- 0x80000071, 0x80000072, 0x80000073, 0x80000074,
- 0x80000075, 0x80000076, 0x80000077, 0x80000078,
- 0x80000079, 0x8000007a, 0x80000041, 0x80000042,
- 0x80000044, 0x80000045, 0x80000046, 0x80000047,
- 0x80000049, 0x8000004a, 0x8000004b, 0x8000004c,
- 0x8000004d, 0x8000004f, 0x80000053, 0x80000054,
- 0x80000055, 0x80000056, 0x80000057, 0x80000058,
- 0x80000059, 0x80000061, 0x80000062, 0x80000063,
- 0x80000064, 0x80000065, 0x80000066, 0x80000067,
- 0x80000068, 0x80000069, 0x8000006a, 0x8000006b,
- 0x8000006c, 0x8000006d, 0x8000006e, 0x8000006f,
- 0x80000070, 0x80000071, 0x80000072, 0x80000073,
- 0x80000074, 0x80000075, 0x80000076, 0x80000077,
- 0x80000078, 0x80000079, 0x8000007a, 0x80000041,
- 0x80000042, 0x80000043, 0x80000044, 0x80000045,
- 0x80000046, 0x80000047, 0x80000048, 0x80000049,
- 0x8000004a, 0x8000004b, 0x8000004c, 0x8000004d,
- 0x8000004e, 0x8000004f, 0x80000050, 0x80000051,
- 0x80000052, 0x80000053, 0x80000054, 0x80000055,
- 0x80000056, 0x80000057, 0x80000058, 0x80000059,
- 0x8000005a, 0x80000061, 0x80000062, 0x80000063,
- 0x80000064, 0x80000065, 0x80000066, 0x80000067,
- 0x80000068, 0x80000069, 0x8000006a, 0x8000006b,
- 0x8000006c, 0x8000006d, 0x8000006e, 0x8000006f,
- 0x80000070, 0x80000071, 0x80000072, 0x80000073,
- 0x80000074, 0x80000075, 0x80000076, 0x80000077,
- 0x80000078, 0x80000079, 0x8000007a, 0x80000041,
- 0x80000042, 0x80000043, 0x80000044, 0x80000045,
- 0x80000046, 0x80000047, 0x80000048, 0x80000049,
- 0x8000004a, 0x8000004b, 0x8000004c, 0x8000004d,
- 0x8000004e, 0x8000004f, 0x80000050, 0x80000051,
- 0x80000052, 0x80000053, 0x80000054, 0x80000055,
- 0x80000056, 0x80000057, 0x80000058, 0x80000059,
- 0x8000005a, 0x80000061, 0x80000062, 0x80000063,
- 0x80000064, 0x80000065, 0x80000066, 0x80000067,
- 0x80000068, 0x80000069, 0x8000006a, 0x8000006b,
- 0x8000006c, 0x8000006d, 0x8000006e, 0x8000006f,
- 0x80000070, 0x80000071, 0x80000072, 0x80000073,
- 0x80000074, 0x80000075, 0x80000076, 0x80000077,
- 0x80000078, 0x80000079, 0x8000007a, 0x80000041,
- 0x80000042, 0x80000043, 0x80000044, 0x80000045,
- 0x80000046, 0x80000047, 0x80000048, 0x80000049,
- 0x8000004a, 0x8000004b, 0x8000004c, 0x8000004d,
- 0x8000004e, 0x8000004f, 0x80000050, 0x80000051,
- 0x80000052, 0x80000053, 0x80000054, 0x80000055,
- 0x80000056, 0x80000057, 0x80000058, 0x80000059,
- 0x8000005a, 0x80000061, 0x80000062, 0x80000063,
- 0x80000064, 0x80000065, 0x80000066, 0x80000067,
- 0x80000068, 0x80000069, 0x8000006a, 0x8000006b,
- 0x8000006c, 0x8000006d, 0x8000006e, 0x8000006f,
- 0x80000070, 0x80000071, 0x80000072, 0x80000073,
- 0x80000074, 0x80000075, 0x80000076, 0x80000077,
- 0x80000078, 0x80000079, 0x8000007a, 0x80000041,
- 0x80000042, 0x80000043, 0x80000044, 0x80000045,
- 0x80000046, 0x80000047, 0x80000048, 0x80000049,
- 0x8000004a, 0x8000004b, 0x8000004c, 0x8000004d,
- 0x8000004e, 0x8000004f, 0x80000050, 0x80000051,
- 0x80000052, 0x80000053, 0x80000054, 0x80000055,
- 0x80000056, 0x80000057, 0x80000058, 0x80000059,
- 0x8000005a, 0x80000061, 0x80000062, 0x80000063,
- 0x80000064, 0x80000065, 0x80000066, 0x80000067,
- 0x80000068, 0x80000069, 0x8000006a, 0x8000006b,
- 0x8000006c, 0x8000006d, 0x8000006e, 0x8000006f,
- 0x80000070, 0x80000071, 0x80000072, 0x80000073,
- 0x80000074, 0x80000075, 0x80000076, 0x80000077,
- 0x80000078, 0x80000079, 0x8000007a, 0x80000041,
- 0x80000042, 0x80000043, 0x80000044, 0x80000045,
- 0x80000046, 0x80000047, 0x80000048, 0x80000049,
- 0x8000004a, 0x8000004b, 0x8000004c, 0x8000004d,
- 0x8000004e, 0x8000004f, 0x80000050, 0x80000051,
- 0x80000052, 0x80000053, 0x80000054, 0x80000055,
- 0x80000056, 0x80000057, 0x80000058, 0x80000059,
- 0x8000005a, 0x80000061, 0x80000062, 0x80000063,
- 0x80000064, 0x80000065, 0x80000066, 0x80000067,
- 0x80000068, 0x80000069, 0x8000006a, 0x8000006b,
- 0x8000006c, 0x8000006d, 0x8000006e, 0x8000006f,
- 0x80000070, 0x80000071, 0x80000072, 0x80000073,
- 0x80000074, 0x80000075, 0x80000076, 0x80000077,
- 0x80000078, 0x80000079, 0x8000007a, 0x80000041,
- 0x80000042, 0x80000043, 0x80000044, 0x80000045,
- 0x80000046, 0x80000047, 0x80000048, 0x80000049,
- 0x8000004a, 0x8000004b, 0x8000004c, 0x8000004d,
- 0x8000004e, 0x8000004f, 0x80000050, 0x80000051,
- 0x80000052, 0x80000053, 0x80000054, 0x80000055,
- 0x80000056, 0x80000057, 0x80000058, 0x80000059,
- 0x8000005a, 0x80000061, 0x80000062, 0x80000063,
- 0x80000064, 0x80000065, 0x80000066, 0x80000067,
- 0x80000068, 0x80000069, 0x8000006a, 0x8000006b,
- 0x8000006c, 0x8000006d, 0x8000006e, 0x8000006f,
- 0x80000070, 0x80000071, 0x80000072, 0x80000073,
- 0x80000074, 0x80000075, 0x80000076, 0x80000077,
- 0x80000078, 0x80000079, 0x8000007a, 0x80000391,
- 0x80000392, 0x80000393, 0x80000394, 0x80000395,
- 0x80000396, 0x80000397, 0x80000398, 0x80000399,
- 0x8000039a, 0x8000039b, 0x8000039c, 0x8000039d,
- 0x8000039e, 0x8000039f, 0x800003a0, 0x800003a1,
- 0x800003f4, 0x800003a3, 0x800003a4, 0x800003a5,
- 0x800003a6, 0x800003a7, 0x800003a8, 0x800003a9,
- 0x80002207, 0x800003b1, 0x800003b2, 0x800003b3,
- 0x800003b4, 0x800003b5, 0x800003b6, 0x800003b7,
- 0x800003b8, 0x800003b9, 0x800003ba, 0x800003bb,
- 0x800003bc, 0x800003bd, 0x800003be, 0x800003bf,
- 0x800003c0, 0x800003c1, 0x800003c2, 0x800003c3,
- 0x800003c4, 0x800003c5, 0x800003c6, 0x800003c7,
- 0x800003c8, 0x800003c9, 0x80002202, 0x800003f5,
- 0x800003d1, 0x800003f0, 0x800003d5, 0x800003f1,
- 0x800003d6, 0x80000391, 0x80000392, 0x80000393,
- 0x80000394, 0x80000395, 0x80000396, 0x80000397,
- 0x80000398, 0x80000399, 0x8000039a, 0x8000039b,
- 0x8000039c, 0x8000039d, 0x8000039e, 0x8000039f,
- 0x800003a0, 0x800003a1, 0x800003f4, 0x800003a3,
- 0x800003a4, 0x800003a5, 0x800003a6, 0x800003a7,
- 0x800003a8, 0x800003a9, 0x80002207, 0x800003b1,
- 0x800003b2, 0x800003b3, 0x800003b4, 0x800003b5,
- 0x800003b6, 0x800003b7, 0x800003b8, 0x800003b9,
- 0x800003ba, 0x800003bb, 0x800003bc, 0x800003bd,
- 0x800003be, 0x800003bf, 0x800003c0, 0x800003c1,
- 0x800003c2, 0x800003c3, 0x800003c4, 0x800003c5,
- 0x800003c6, 0x800003c7, 0x800003c8, 0x800003c9,
- 0x80002202, 0x800003f5, 0x800003d1, 0x800003f0,
- 0x800003d5, 0x800003f1, 0x800003d6, 0x80000391,
- 0x80000392, 0x80000393, 0x80000394, 0x80000395,
- 0x80000396, 0x80000397, 0x80000398, 0x80000399,
- 0x8000039a, 0x8000039b, 0x8000039c, 0x8000039d,
- 0x8000039e, 0x8000039f, 0x800003a0, 0x800003a1,
- 0x800003f4, 0x800003a3, 0x800003a4, 0x800003a5,
- 0x800003a6, 0x800003a7, 0x800003a8, 0x800003a9,
- 0x80002207, 0x800003b1, 0x800003b2, 0x800003b3,
- 0x800003b4, 0x800003b5, 0x800003b6, 0x800003b7,
- 0x800003b8, 0x800003b9, 0x800003ba, 0x800003bb,
- 0x800003bc, 0x800003bd, 0x800003be, 0x800003bf,
- 0x800003c0, 0x800003c1, 0x800003c2, 0x800003c3,
- 0x800003c4, 0x800003c5, 0x800003c6, 0x800003c7,
- 0x800003c8, 0x800003c9, 0x80002202, 0x800003f5,
- 0x800003d1, 0x800003f0, 0x800003d5, 0x800003f1,
- 0x800003d6, 0x80000391, 0x80000392, 0x80000393,
- 0x80000394, 0x80000395, 0x80000396, 0x80000397,
- 0x80000398, 0x80000399, 0x8000039a, 0x8000039b,
- 0x8000039c, 0x8000039d, 0x8000039e, 0x8000039f,
- 0x800003a0, 0x800003a1, 0x800003f4, 0x800003a3,
- 0x800003a4, 0x800003a5, 0x800003a6, 0x800003a7,
- 0x800003a8, 0x800003a9, 0x80002207, 0x800003b1,
- 0x800003b2, 0x800003b3, 0x800003b4, 0x800003b5,
- 0x800003b6, 0x800003b7, 0x800003b8, 0x800003b9,
- 0x800003ba, 0x800003bb, 0x800003bc, 0x800003bd,
- 0x800003be, 0x800003bf, 0x800003c0, 0x800003c1,
- 0x800003c2, 0x800003c3, 0x800003c4, 0x800003c5,
- 0x800003c6, 0x800003c7, 0x800003c8, 0x800003c9,
- 0x80002202, 0x800003f5, 0x800003d1, 0x800003f0,
- 0x800003d5, 0x800003f1, 0x800003d6, 0x80000391,
- 0x80000392, 0x80000393, 0x80000394, 0x80000395,
- 0x80000396, 0x80000397, 0x80000398, 0x80000399,
- 0x8000039a, 0x8000039b, 0x8000039c, 0x8000039d,
- 0x8000039e, 0x8000039f, 0x800003a0, 0x800003a1,
- 0x800003f4, 0x800003a3, 0x800003a4, 0x800003a5,
- 0x800003a6, 0x800003a7, 0x800003a8, 0x800003a9,
- 0x80002207, 0x800003b1, 0x800003b2, 0x800003b3,
- 0x800003b4, 0x800003b5, 0x800003b6, 0x800003b7,
- 0x800003b8, 0x800003b9, 0x800003ba, 0x800003bb,
- 0x800003bc, 0x800003bd, 0x800003be, 0x800003bf,
- 0x800003c0, 0x800003c1, 0x800003c2, 0x800003c3,
- 0x800003c4, 0x800003c5, 0x800003c6, 0x800003c7,
- 0x800003c8, 0x800003c9, 0x80002202, 0x800003f5,
- 0x800003d1, 0x800003f0, 0x800003d5, 0x800003f1,
- 0x800003d6, 0x80000030, 0x80000031, 0x80000032,
- 0x80000033, 0x80000034, 0x80000035, 0x80000036,
- 0x80000037, 0x80000038, 0x80000039, 0x80000030,
- 0x80000031, 0x80000032, 0x80000033, 0x80000034,
- 0x80000035, 0x80000036, 0x80000037, 0x80000038,
- 0x80000039, 0x80000030, 0x80000031, 0x80000032,
- 0x80000033, 0x80000034, 0x80000035, 0x80000036,
- 0x80000037, 0x80000038, 0x80000039, 0x80000030,
- 0x80000031, 0x80000032, 0x80000033, 0x80000034,
- 0x80000035, 0x80000036, 0x80000037, 0x80000038,
- 0x80000039, 0x80000030, 0x80000031, 0x80000032,
- 0x80000033, 0x80000034, 0x80000035, 0x80000036,
- 0x80000037, 0x80000038, 0x80000039, 0x80004e3d,
- 0x80004e38, 0x80004e41, 0x80020122, 0x80004f60,
- 0x80004fae, 0x80004fbb, 0x80005002, 0x8000507a,
- 0x80005099, 0x800050e7, 0x800050cf, 0x8000349e,
- 0x8002063a, 0x8000514d, 0x80005154, 0x80005164,
- 0x80005177, 0x8002051c, 0x800034b9, 0x80005167,
- 0x8000518d, 0x8002054b, 0x80005197, 0x800051a4,
- 0x80004ecc, 0x800051ac, 0x800051b5, 0x800291df,
- 0x800051f5, 0x80005203, 0x800034df, 0x8000523b,
- 0x80005246, 0x80005272, 0x80005277, 0x80003515,
- 0x800052c7, 0x800052c9, 0x800052e4, 0x800052fa,
- 0x80005305, 0x80005306, 0x80005317, 0x80005349,
- 0x80005351, 0x8000535a, 0x80005373, 0x8000537d,
- 0x8000537f, 0x8000537f, 0x8000537f, 0x80020a2c,
- 0x80007070, 0x800053ca, 0x800053df, 0x80020b63,
- 0x800053eb, 0x800053f1, 0x80005406, 0x8000549e,
- 0x80005438, 0x80005448, 0x80005468, 0x800054a2,
- 0x800054f6, 0x80005510, 0x80005553, 0x80005563,
- 0x80005584, 0x80005584, 0x80005599, 0x800055ab,
- 0x800055b3, 0x800055c2, 0x80005716, 0x80005606,
- 0x80005717, 0x80005651, 0x80005674, 0x80005207,
- 0x800058ee, 0x800057ce, 0x800057f4, 0x8000580d,
- 0x8000578b, 0x80005832, 0x80005831, 0x800058ac,
- 0x800214e4, 0x800058f2, 0x800058f7, 0x80005906,
- 0x8000591a, 0x80005922, 0x80005962, 0x800216a8,
- 0x800216ea, 0x800059ec, 0x80005a1b, 0x80005a27,
- 0x800059d8, 0x80005a66, 0x800036ee, 0x8002136a,
- 0x80005b08, 0x80005b3e, 0x80005b3e, 0x800219c8,
- 0x80005bc3, 0x80005bd8, 0x80005be7, 0x80005bf3,
- 0x80021b18, 0x80005bff, 0x80005c06, 0x80005f33,
- 0x80005c22, 0x80003781, 0x80005c60, 0x80005c6e,
- 0x80005cc0, 0x80005c8d, 0x80021de4, 0x80005d43,
- 0x80021de6, 0x80005d6e, 0x80005d6b, 0x80005d7c,
- 0x80005de1, 0x80005de2, 0x8000382f, 0x80005dfd,
- 0x80005e28, 0x80005e3d, 0x80005e69, 0x80003862,
- 0x80022183, 0x8000387c, 0x80005eb0, 0x80005eb3,
- 0x80005eb6, 0x80005eca, 0x8002a392, 0x80005efe,
- 0x80022331, 0x80022331, 0x80008201, 0x80005f22,
- 0x80005f22, 0x800038c7, 0x800232b8, 0x800261da,
- 0x80005f62, 0x80005f6b, 0x800038e3, 0x80005f9a,
- 0x80005fcd, 0x80005fd7, 0x80005ff9, 0x80006081,
- 0x8000393a, 0x8000391c, 0x80006094, 0x800226d4,
- 0x800060c7, 0x80006148, 0x8000614c, 0x8000614e,
- 0x8000614c, 0x8000617a, 0x8000618e, 0x800061b2,
- 0x800061a4, 0x800061af, 0x800061de, 0x800061f2,
- 0x800061f6, 0x80006210, 0x8000621b, 0x8000625d,
- 0x800062b1, 0x800062d4, 0x80006350, 0x80022b0c,
- 0x8000633d, 0x800062fc, 0x80006368, 0x80006383,
- 0x800063e4, 0x80022bf1, 0x80006422, 0x800063c5,
- 0x800063a9, 0x80003a2e, 0x80006469, 0x8000647e,
- 0x8000649d, 0x80006477, 0x80003a6c, 0x8000654f,
- 0x8000656c, 0x8002300a, 0x800065e3, 0x800066f8,
- 0x80006649, 0x80003b19, 0x80006691, 0x80003b08,
- 0x80003ae4, 0x80005192, 0x80005195, 0x80006700,
- 0x8000669c, 0x800080ad, 0x800043d9, 0x80006717,
- 0x8000671b, 0x80006721, 0x8000675e, 0x80006753,
- 0x800233c3, 0x80003b49, 0x800067fa, 0x80006785,
- 0x80006852, 0x80006885, 0x8002346d, 0x8000688e,
- 0x8000681f, 0x80006914, 0x80003b9d, 0x80006942,
- 0x800069a3, 0x800069ea, 0x80006aa8, 0x800236a3,
- 0x80006adb, 0x80003c18, 0x80006b21, 0x800238a7,
- 0x80006b54, 0x80003c4e, 0x80006b72, 0x80006b9f,
- 0x80006bba, 0x80006bbb, 0x80023a8d, 0x80021d0b,
- 0x80023afa, 0x80006c4e, 0x80023cbc, 0x80006cbf,
- 0x80006ccd, 0x80006c67, 0x80006d16, 0x80006d3e,
- 0x80006d77, 0x80006d41, 0x80006d69, 0x80006d78,
- 0x80006d85, 0x80023d1e, 0x80006d34, 0x80006e2f,
- 0x80006e6e, 0x80003d33, 0x80006ecb, 0x80006ec7,
- 0x80023ed1, 0x80006df9, 0x80006f6e, 0x80023f5e,
- 0x80023f8e, 0x80006fc6, 0x80007039, 0x8000701e,
- 0x8000701b, 0x80003d96, 0x8000704a, 0x8000707d,
- 0x80007077, 0x800070ad, 0x80020525, 0x80007145,
- 0x80024263, 0x8000719c, 0x800043ab, 0x80007228,
- 0x80007235, 0x80007250, 0x80024608, 0x80007280,
- 0x80007295, 0x80024735, 0x80024814, 0x8000737a,
- 0x8000738b, 0x80003eac, 0x800073a5, 0x80003eb8,
- 0x80003eb8, 0x80007447, 0x8000745c, 0x80007471,
- 0x80007485, 0x800074ca, 0x80003f1b, 0x80007524,
- 0x80024c36, 0x8000753e, 0x80024c92, 0x80007570,
- 0x8002219f, 0x80007610, 0x80024fa1, 0x80024fb8,
- 0x80025044, 0x80003ffc, 0x80004008, 0x800076f4,
- 0x800250f3, 0x800250f2, 0x80025119, 0x80025133,
- 0x8000771e, 0x8000771f, 0x8000771f, 0x8000774a,
- 0x80004039, 0x8000778b, 0x80004046, 0x80004096,
- 0x8002541d, 0x8000784e, 0x8000788c, 0x800078cc,
- 0x800040e3, 0x80025626, 0x80007956, 0x8002569a,
- 0x800256c5, 0x8000798f, 0x800079eb, 0x8000412f,
- 0x80007a40, 0x80007a4a, 0x80007a4f, 0x8002597c,
- 0x80025aa7, 0x80025aa7, 0x80007aae, 0x80004202,
- 0x80025bab, 0x80007bc6, 0x80007bc9, 0x80004227,
- 0x80025c80, 0x80007cd2, 0x800042a0, 0x80007ce8,
- 0x80007ce3, 0x80007d00, 0x80025f86, 0x80007d63,
- 0x80004301, 0x80007dc7, 0x80007e02, 0x80007e45,
- 0x80004334, 0x80026228, 0x80026247, 0x80004359,
- 0x800262d9, 0x80007f7a, 0x8002633e, 0x80007f95,
- 0x80007ffa, 0x80008005, 0x800264da, 0x80026523,
- 0x80008060, 0x800265a8, 0x80008070, 0x8002335f,
- 0x800043d5, 0x800080b2, 0x80008103, 0x8000440b,
- 0x8000813e, 0x80005ab5, 0x800267a7, 0x800267b5,
- 0x80023393, 0x8002339c, 0x80008201, 0x80008204,
- 0x80008f9e, 0x8000446b, 0x80008291, 0x8000828b,
- 0x8000829d, 0x800052b3, 0x800082b1, 0x800082b3,
- 0x800082bd, 0x800082e6, 0x80026b3c, 0x800082e5,
- 0x8000831d, 0x80008363, 0x800083ad, 0x80008323,
- 0x800083bd, 0x800083e7, 0x80008457, 0x80008353,
- 0x800083ca, 0x800083cc, 0x800083dc, 0x80026c36,
- 0x80026d6b, 0x80026cd5, 0x8000452b, 0x800084f1,
- 0x800084f3, 0x80008516, 0x800273ca, 0x80008564,
- 0x80026f2c, 0x8000455d, 0x80004561, 0x80026fb1,
- 0x800270d2, 0x8000456b, 0x80008650, 0x8000865c,
- 0x80008667, 0x80008669, 0x800086a9, 0x80008688,
- 0x8000870e, 0x800086e2, 0x80008779, 0x80008728,
- 0x8000876b, 0x80008786, 0x80004d57, 0x800087e1,
- 0x80008801, 0x800045f9, 0x80008860, 0x80008863,
- 0x80027667, 0x800088d7, 0x800088de, 0x80004635,
- 0x800088fa, 0x800034bb, 0x800278ae, 0x80027966,
- 0x800046be, 0x800046c7, 0x80008aa0, 0x80008aed,
- 0x80008b8a, 0x80008c55, 0x80027ca8, 0x80008cab,
- 0x80008cc1, 0x80008d1b, 0x80008d77, 0x80027f2f,
- 0x80020804, 0x80008dcb, 0x80008dbc, 0x80008df0,
- 0x800208de, 0x80008ed4, 0x80008f38, 0x800285d2,
- 0x800285ed, 0x80009094, 0x800090f1, 0x80009111,
- 0x8002872e, 0x8000911b, 0x80009238, 0x800092d7,
- 0x800092d8, 0x8000927c, 0x800093f9, 0x80009415,
- 0x80028bfa, 0x8000958b, 0x80004995, 0x800095b7,
- 0x80028d77, 0x800049e6, 0x800096c3, 0x80005db2,
- 0x80009723, 0x80029145, 0x8002921a, 0x80004a6e,
- 0x80004a76, 0x800097e0, 0x8002940a, 0x80004ab2,
- 0x80029496, 0x8000980b, 0x8000980b, 0x80009829,
- 0x800295b6, 0x800098e2, 0x80004b33, 0x80009929,
- 0x800099a7, 0x800099c2, 0x800099fe, 0x80004bce,
- 0x80029b30, 0x80009b12, 0x80009c40, 0x80009cfd,
- 0x80004cce, 0x80004ced, 0x80009d67, 0x8002a0ce,
- 0x80004cf8, 0x8002a105, 0x8002a20e, 0x8002a291,
- 0x80009ebb, 0x80004d56, 0x80009ef9, 0x80009efe,
- 0x80009f05, 0x80009f0f, 0x80009f16, 0x80009f3b,
- 0x8002a600,
-};
-
-
-/*
- * Lowercase <-> Uppercase mapping
- */
-
-/*
- * Flags for special case mapping.
- */
-#define CMF_FINAL 1
-#define CMF_NONFINAL 2
-#define CMF_LAST 16
-#define CMF_CTXDEP (CMF_FINAL|CMF_NONFINAL)
-
-#define CASEMAP_BITS_0 9
-#define CASEMAP_BITS_1 7
-#define CASEMAP_BITS_2 5
-
-static const unsigned short v320_toupper_imap[] = {
- 272, 400, 528, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 784,
- 912, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 0, 0, 0, 1, 0, 2, 3, 4,
- 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 0, 0, 0,
- 0, 0, 18, 0, 19, 20, 21, 22,
- 0, 23, 24, 25, 26, 27, 28, 29,
- 30, 0, 0, 31, 32, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 49, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 50, 51,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 52, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 53, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 54, 55, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const struct {
- unsigned short tbl[32];
-} v320_toupper_table[] = {
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19,
- 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41,
- 43, 45, 47, 49, 51, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 55,
- }},
- {{
- 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78,
- 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100,
- 102, 0, 104, 106, 108, 110, 112, 114, 116, 118,
- }},
- {{
- 0, 120, 0, 122, 0, 124, 0, 126, 0, 128, 0,
- 130, 0, 132, 0, 134, 0, 136, 0, 138, 0, 140,
- 0, 142, 0, 144, 0, 146, 0, 148, 0, 150,
- }},
- {{
- 0, 152, 0, 154, 0, 156, 0, 158, 0, 160, 0,
- 162, 0, 164, 0, 166, 0, 168, 0, 170, 0, 172,
- 0, 174, 0, 0, 176, 0, 178, 0, 180, 0,
- }},
- {{
- 182, 0, 184, 0, 186, 0, 188, 0, 190, 192, 0,
- 195, 0, 197, 0, 199, 0, 201, 0, 203, 0, 205,
- 0, 207, 0, 209, 0, 211, 0, 213, 0, 215,
- }},
- {{
- 0, 217, 0, 219, 0, 221, 0, 223, 0, 225, 0,
- 227, 0, 229, 0, 231, 0, 233, 0, 235, 0, 237,
- 0, 239, 0, 0, 241, 0, 243, 0, 245, 247,
- }},
- {{
- 0, 0, 0, 249, 0, 251, 0, 0, 253, 0, 0,
- 0, 255, 0, 0, 0, 0, 0, 257, 0, 0, 259,
- 0, 0, 0, 261, 0, 0, 0, 0, 263, 0,
- }},
- {{
- 0, 265, 0, 267, 0, 269, 0, 0, 271, 0, 0,
- 0, 0, 273, 0, 0, 275, 0, 0, 0, 277, 0,
- 279, 0, 0, 281, 0, 0, 0, 283, 0, 285,
- }},
- {{
- 0, 0, 0, 0, 0, 287, 289, 0, 291, 293, 0,
- 295, 297, 0, 299, 0, 301, 0, 303, 0, 305, 0,
- 307, 0, 309, 0, 311, 0, 313, 315, 0, 317,
- }},
- {{
- 0, 319, 0, 321, 0, 323, 0, 325, 0, 327, 0,
- 329, 0, 331, 0, 333, 335, 0, 338, 340, 0, 342,
- 0, 0, 0, 344, 0, 346, 0, 348, 0, 350,
- }},
- {{
- 0, 352, 0, 354, 0, 356, 0, 358, 0, 360, 0,
- 362, 0, 364, 0, 366, 0, 368, 0, 370, 0, 372,
- 0, 374, 0, 376, 0, 378, 0, 380, 0, 382,
- }},
- {{
- 0, 0, 0, 384, 0, 386, 0, 388, 0, 390, 0,
- 392, 0, 394, 0, 396, 0, 398, 0, 400, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 402, 404, 0,
- 406, 408, 0, 410, 0, 412, 0, 0, 0, 0,
- }},
- {{
- 414, 0, 0, 416, 0, 0, 0, 0, 418, 420, 0,
- 0, 0, 0, 0, 422, 0, 0, 424, 0, 0, 426,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 428, 0, 0, 430, 0, 0, 0, 0, 432, 0, 434,
- 436, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 446, 448, 450, 452, 454, 458, 460, 462, 464, 466,
- 468, 470, 472, 474, 476, 478, 480, 482, 484, 486,
- }},
- {{
- 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508,
- 510, 512, 514, 516, 0, 518, 520, 0, 0, 0, 522,
- 524, 0, 0, 526, 0, 528, 0, 530, 0, 532,
- }},
- {{
- 0, 534, 0, 536, 0, 538, 0, 540, 0, 542, 0,
- 544, 0, 546, 0, 548, 550, 552, 554, 0, 0, 556,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 558, 560, 562, 564, 566, 568,
- 570, 572, 574, 576, 578, 580, 582, 584, 586, 588,
- }},
- {{
- 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610,
- 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632,
- 634, 636, 638, 640, 642, 644, 646, 648, 650, 652,
- }},
- {{
- 0, 654, 0, 656, 0, 658, 0, 660, 0, 662, 0,
- 664, 0, 666, 0, 668, 0, 670, 0, 672, 0, 674,
- 0, 676, 0, 678, 0, 680, 0, 682, 0, 684,
- }},
- {{
- 0, 686, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 688, 0, 690, 0, 692, 0, 694, 0, 696, 0, 698,
- 0, 700, 0, 702, 0, 704, 0, 706, 0, 708,
- }},
- {{
- 0, 710, 0, 712, 0, 714, 0, 716, 0, 718, 0,
- 720, 0, 722, 0, 724, 0, 726, 0, 728, 0, 730,
- 0, 732, 0, 734, 0, 736, 0, 738, 0, 740,
- }},
- {{
- 0, 0, 742, 0, 744, 0, 746, 0, 748, 0, 750,
- 0, 752, 0, 754, 0, 0, 756, 0, 758, 0, 760,
- 0, 762, 0, 764, 0, 766, 0, 768, 0, 770,
- }},
- {{
- 0, 772, 0, 774, 0, 776, 0, 778, 0, 780, 0,
- 782, 0, 784, 0, 786, 0, 788, 0, 790, 0, 792,
- 0, 0, 0, 794, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 796, 0, 798, 0, 800, 0, 802, 0, 804, 0,
- 806, 0, 808, 0, 810, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830,
- 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852,
- 854, 856, 858, 860, 862, 864, 866, 868, 870, 872,
- }},
- {{
- 874, 876, 878, 880, 882, 884, 886, 888, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 891, 0, 893, 0, 895, 0, 897, 0, 899, 0,
- 901, 0, 903, 0, 905, 0, 907, 0, 909, 0, 911,
- 0, 913, 0, 915, 0, 917, 0, 919, 0, 921,
- }},
- {{
- 0, 923, 0, 925, 0, 927, 0, 929, 0, 931, 0,
- 933, 0, 935, 0, 937, 0, 939, 0, 941, 0, 943,
- 0, 945, 0, 947, 0, 949, 0, 951, 0, 953,
- }},
- {{
- 0, 955, 0, 957, 0, 959, 0, 961, 0, 963, 0,
- 965, 0, 967, 0, 969, 0, 971, 0, 973, 0, 975,
- 0, 977, 0, 979, 0, 981, 0, 983, 0, 985,
- }},
- {{
- 0, 987, 0, 989, 0, 991, 0, 993, 0, 995, 0,
- 997, 0, 999, 0, 1001, 0, 1003, 0, 1005, 0, 1007,
- 0, 1009, 0, 1011, 0, 1013, 0, 1015, 0, 1017,
- }},
- {{
- 0, 1019, 0, 1021, 0, 1023, 0, 1025, 0, 1027, 0,
- 1029, 0, 1031, 0, 1033, 0, 1035, 0, 1037, 0, 1039,
- 1041, 1044, 1047, 1050, 1053, 1056, 0, 0, 0, 0,
- }},
- {{
- 0, 1058, 0, 1060, 0, 1062, 0, 1064, 0, 1066, 0,
- 1068, 0, 1070, 0, 1072, 0, 1074, 0, 1076, 0, 1078,
- 0, 1080, 0, 1082, 0, 1084, 0, 1086, 0, 1088,
- }},
- {{
- 0, 1090, 0, 1092, 0, 1094, 0, 1096, 0, 1098, 0,
- 1100, 0, 1102, 0, 1104, 0, 1106, 0, 1108, 0, 1110,
- 0, 1112, 0, 1114, 0, 1116, 0, 1118, 0, 1120,
- }},
- {{
- 0, 1122, 0, 1124, 0, 1126, 0, 1128, 0, 1130, 0,
- 1132, 0, 1134, 0, 1136, 0, 1138, 0, 1140, 0, 1142,
- 0, 1144, 0, 1146, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 1148, 1150, 1152, 1154, 1156, 1158, 1160, 1162, 0, 0, 0,
- 0, 0, 0, 0, 0, 1164, 1166, 1168, 1170, 1172, 1174,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 1176, 1178, 1180, 1182, 1184, 1186, 1188, 1190, 0, 0, 0,
- 0, 0, 0, 0, 0, 1192, 1194, 1196, 1198, 1200, 1202,
- 1204, 1206, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 1208, 1210, 1212, 1214, 1216, 1218, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1220, 1223, 1225, 1229, 1231, 1235,
- 1237, 1241, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 1243, 1245, 1247, 1249, 1251, 1253, 1255, 1257, 0, 0, 0,
- 0, 0, 0, 0, 0, 1259, 1261, 1263, 1265, 1267, 1269,
- 1271, 1273, 1275, 1277, 1279, 1281, 1283, 1285, 0, 0,
- }},
- {{
- 1287, 1292, 1297, 1302, 1307, 1312, 1317, 1322, 1327, 1330, 1333,
- 1336, 1339, 1342, 1345, 1348, 1351, 1356, 1361, 1366, 1371, 1376,
- 1381, 1386, 1391, 1394, 1397, 1400, 1403, 1406, 1409, 1412,
- }},
- {{
- 1415, 1420, 1425, 1430, 1435, 1440, 1445, 1450, 1455, 1458, 1461,
- 1464, 1467, 1470, 1473, 1476, 1479, 1481, 1483, 1486, 1491, 0,
- 1494, 1497, 0, 0, 0, 0, 1501, 0, 1504, 0,
- }},
- {{
- 0, 0, 1506, 1509, 1514, 0, 1517, 1520, 0, 0, 0,
- 0, 1524, 0, 0, 0, 1527, 1529, 1531, 1535, 0, 0,
- 1539, 1542, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 1546, 1548, 1550, 1554, 1558, 1561, 1563, 1566, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1570, 1573, 1578, 0,
- 1581, 1584, 0, 0, 0, 0, 1588, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1591, 1593, 1595, 1597, 1599, 1601,
- 1603, 1605, 1607, 1609, 1611, 1613, 1615, 1617, 1619, 1621,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1623, 1625, 1627, 1629, 1631, 1633,
- 1635, 1637, 1639, 1641, 1643, 1645, 1647, 1649, 1651, 1653,
- }},
- {{
- 1655, 1657, 1659, 1661, 1663, 1665, 1667, 1669, 1671, 1673, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 1675, 1678, 1681, 1684, 1688, 1692, 1695, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1698, 1701, 1704,
- 1707, 1710, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 1713, 1715, 1717, 1719, 1721, 1723, 1725, 1727, 1729, 1731,
- 1733, 1735, 1737, 1739, 1741, 1743, 1745, 1747, 1749, 1751, 1753,
- 1755, 1757, 1759, 1761, 1763, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 1765, 1767, 1769,
- 1771, 1773, 1775, 1777, 1779, 1781, 1783, 1785, 1787, 1789, 1791,
- 1793, 1795, 1797, 1799, 1801, 1803, 1805, 1807, 1809, 1811,
- }},
- {{
- 1813, 1815, 1817, 1819, 1821, 1823, 1825, 1827, 1829, 1831, 1833,
- 1835, 1837, 1839, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
-};
-static const unsigned short v320_tolower_imap[] = {
- 272, 400, 528, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 784,
- 912, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 0, 0, 1, 0, 0, 0, 2, 0,
- 3, 4, 5, 6, 7, 8, 9, 10,
- 11, 12, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 13, 14, 15, 16,
- 17, 18, 0, 19, 20, 21, 22, 23,
- 24, 25, 26, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 42,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 43, 0, 44, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 45, 46, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 47, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 48, 49, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const struct {
- unsigned short tbl[32];
-} v320_tolower_table[] = {
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19,
- 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41,
- 43, 45, 47, 49, 51, 0, 0, 0, 0, 0,
- }},
- {{
- 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73,
- 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
- 97, 0, 99, 101, 103, 105, 107, 109, 111, 0,
- }},
- {{
- 113, 0, 115, 0, 117, 0, 119, 0, 121, 0, 123,
- 0, 125, 0, 127, 0, 129, 0, 131, 0, 133, 0,
- 135, 0, 137, 0, 139, 0, 141, 0, 143, 0,
- }},
- {{
- 145, 0, 147, 0, 149, 0, 151, 0, 153, 0, 155,
- 0, 157, 0, 159, 0, 161, 0, 165, 0, 167, 0,
- 169, 0, 0, 171, 0, 173, 0, 175, 0, 177,
- }},
- {{
- 0, 179, 0, 181, 0, 183, 0, 185, 0, 0, 187,
- 0, 189, 0, 191, 0, 193, 0, 195, 0, 197, 0,
- 199, 0, 201, 0, 203, 0, 205, 0, 207, 0,
- }},
- {{
- 209, 0, 211, 0, 213, 0, 215, 0, 217, 0, 219,
- 0, 221, 0, 223, 0, 225, 0, 227, 0, 229, 0,
- 231, 0, 233, 235, 0, 237, 0, 239, 0, 0,
- }},
- {{
- 0, 241, 243, 0, 245, 0, 247, 249, 0, 251, 253,
- 255, 0, 0, 257, 259, 261, 263, 0, 265, 267, 0,
- 269, 271, 273, 0, 0, 0, 275, 277, 0, 279,
- }},
- {{
- 281, 0, 283, 0, 285, 0, 287, 289, 0, 291, 0,
- 0, 293, 0, 295, 297, 0, 299, 301, 303, 0, 305,
- 0, 307, 309, 0, 0, 0, 311, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 313, 315, 0, 317, 319, 0, 321,
- 323, 0, 325, 0, 327, 0, 329, 0, 331, 0, 333,
- 0, 335, 0, 337, 0, 339, 0, 0, 341, 0,
- }},
- {{
- 343, 0, 345, 0, 347, 0, 349, 0, 351, 0, 353,
- 0, 355, 0, 357, 0, 0, 359, 361, 0, 363, 0,
- 365, 367, 369, 0, 371, 0, 373, 0, 375, 0,
- }},
- {{
- 377, 0, 379, 0, 381, 0, 383, 0, 385, 0, 387,
- 0, 389, 0, 391, 0, 393, 0, 395, 0, 397, 0,
- 399, 0, 401, 0, 403, 0, 405, 0, 407, 0,
- }},
- {{
- 409, 0, 411, 0, 413, 0, 415, 0, 417, 0, 419,
- 0, 421, 0, 423, 0, 425, 0, 427, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 429, 0, 431, 433, 435,
- 0, 437, 0, 439, 441, 0, 443, 445, 447, 449, 451,
- 453, 455, 457, 459, 461, 463, 465, 467, 469, 471,
- }},
- {{
- 473, 475, 0, 477, 479, 481, 483, 485, 487, 489, 491,
- 493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 495, 0, 497, 0, 499, 0, 501, 0,
- }},
- {{
- 503, 0, 505, 0, 507, 0, 509, 0, 511, 0, 513,
- 0, 515, 0, 517, 0, 0, 0, 0, 0, 519, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 521, 523, 525, 527, 529, 531, 533, 535, 537, 539, 541,
- 543, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563,
- 565, 567, 569, 571, 573, 575, 577, 579, 581, 583,
- }},
- {{
- 585, 587, 589, 591, 593, 595, 597, 599, 601, 603, 605,
- 607, 609, 611, 613, 615, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 617, 0, 619, 0, 621, 0, 623, 0, 625, 0, 627,
- 0, 629, 0, 631, 0, 633, 0, 635, 0, 637, 0,
- 639, 0, 641, 0, 643, 0, 645, 0, 647, 0,
- }},
- {{
- 649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651,
- 0, 653, 0, 655, 0, 657, 0, 659, 0, 661, 0,
- 663, 0, 665, 0, 667, 0, 669, 0, 671, 0,
- }},
- {{
- 673, 0, 675, 0, 677, 0, 679, 0, 681, 0, 683,
- 0, 685, 0, 687, 0, 689, 0, 691, 0, 693, 0,
- 695, 0, 697, 0, 699, 0, 701, 0, 703, 0,
- }},
- {{
- 0, 705, 0, 707, 0, 709, 0, 711, 0, 713, 0,
- 715, 0, 717, 0, 0, 719, 0, 721, 0, 723, 0,
- 725, 0, 727, 0, 729, 0, 731, 0, 733, 0,
- }},
- {{
- 735, 0, 737, 0, 739, 0, 741, 0, 743, 0, 745,
- 0, 747, 0, 749, 0, 751, 0, 753, 0, 755, 0,
- 0, 0, 757, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 759, 0, 761, 0, 763, 0, 765, 0, 767, 0, 769,
- 0, 771, 0, 773, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 775, 777, 779, 781, 783,
- 785, 787, 789, 791, 793, 795, 797, 799, 801, 803,
- }},
- {{
- 805, 807, 809, 811, 813, 815, 817, 819, 821, 823, 825,
- 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847,
- 849, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 851, 0, 853, 0, 855, 0, 857, 0, 859, 0, 861,
- 0, 863, 0, 865, 0, 867, 0, 869, 0, 871, 0,
- 873, 0, 875, 0, 877, 0, 879, 0, 881, 0,
- }},
- {{
- 883, 0, 885, 0, 887, 0, 889, 0, 891, 0, 893,
- 0, 895, 0, 897, 0, 899, 0, 901, 0, 903, 0,
- 905, 0, 907, 0, 909, 0, 911, 0, 913, 0,
- }},
- {{
- 915, 0, 917, 0, 919, 0, 921, 0, 923, 0, 925,
- 0, 927, 0, 929, 0, 931, 0, 933, 0, 935, 0,
- 937, 0, 939, 0, 941, 0, 943, 0, 945, 0,
- }},
- {{
- 947, 0, 949, 0, 951, 0, 953, 0, 955, 0, 957,
- 0, 959, 0, 961, 0, 963, 0, 965, 0, 967, 0,
- 969, 0, 971, 0, 973, 0, 975, 0, 977, 0,
- }},
- {{
- 979, 0, 981, 0, 983, 0, 985, 0, 987, 0, 989,
- 0, 991, 0, 993, 0, 995, 0, 997, 0, 999, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 1001, 0, 1003, 0, 1005, 0, 1007, 0, 1009, 0, 1011,
- 0, 1013, 0, 1015, 0, 1017, 0, 1019, 0, 1021, 0,
- 1023, 0, 1025, 0, 1027, 0, 1029, 0, 1031, 0,
- }},
- {{
- 1033, 0, 1035, 0, 1037, 0, 1039, 0, 1041, 0, 1043,
- 0, 1045, 0, 1047, 0, 1049, 0, 1051, 0, 1053, 0,
- 1055, 0, 1057, 0, 1059, 0, 1061, 0, 1063, 0,
- }},
- {{
- 1065, 0, 1067, 0, 1069, 0, 1071, 0, 1073, 0, 1075,
- 0, 1077, 0, 1079, 0, 1081, 0, 1083, 0, 1085, 0,
- 1087, 0, 1089, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 1091, 1093, 1095,
- 1097, 1099, 1101, 1103, 1105, 0, 0, 0, 0, 0, 0,
- 0, 0, 1107, 1109, 1111, 1113, 1115, 1117, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 1119, 1121, 1123,
- 1125, 1127, 1129, 1131, 1133, 0, 0, 0, 0, 0, 0,
- 0, 0, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 1151, 1153, 1155,
- 1157, 1159, 1161, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1163, 0, 1165, 0, 1167, 0, 1169,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 1171, 1173, 1175,
- 1177, 1179, 1181, 1183, 1185, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 1187, 1191, 1195,
- 1199, 1203, 1207, 1211, 1215, 0, 0, 0, 0, 0, 0,
- 0, 0, 1219, 1223, 1227, 1231, 1235, 1239, 1243, 1247,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 1251, 1255, 1259,
- 1263, 1267, 1271, 1275, 1279, 0, 0, 0, 0, 0, 0,
- 0, 0, 1283, 1285, 1287, 1289, 1291, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 1295, 1297, 1299,
- 1301, 1303, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1307, 1309, 1311, 1313, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 1315, 1317, 1319,
- 1321, 1323, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1325, 1327, 1329, 1331, 1333, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 1337, 0, 0, 0, 1339,
- 1341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 1343, 1345, 1347, 1349, 1351, 1353, 1355, 1357, 1359, 1361, 1363,
- 1365, 1367, 1369, 1371, 1373, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1375, 1377, 1379, 1381, 1383, 1385, 1387, 1389, 1391, 1393,
- }},
- {{
- 1395, 1397, 1399, 1401, 1403, 1405, 1407, 1409, 1411, 1413, 1415,
- 1417, 1419, 1421, 1423, 1425, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 1427, 1429, 1431, 1433, 1435, 1437, 1439, 1441, 1443, 1445,
- 1447, 1449, 1451, 1453, 1455, 1457, 1459, 1461, 1463, 1465, 1467,
- 1469, 1471, 1473, 1475, 1477, 0, 0, 0, 0, 0,
- }},
- {{
- 1479, 1481, 1483, 1485, 1487, 1489, 1491, 1493, 1495, 1497, 1499,
- 1501, 1503, 1505, 1507, 1509, 1511, 1513, 1515, 1517, 1519, 1521,
- 1523, 1525, 1527, 1529, 1531, 1533, 1535, 1537, 1539, 1541,
- }},
- {{
- 1543, 1545, 1547, 1549, 1551, 1553, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
-};
-static const unsigned long v320_toupper_seq[] = {
- 0x00000000, 0x00000010, 0x80000041, 0x00000010,
- 0x80000042, 0x00000010, 0x80000043, 0x00000010,
- 0x80000044, 0x00000010, 0x80000045, 0x00000010,
- 0x80000046, 0x00000010, 0x80000047, 0x00000010,
- 0x80000048, 0x00000010, 0x80000049, 0x00000010,
- 0x8000004a, 0x00000010, 0x8000004b, 0x00000010,
- 0x8000004c, 0x00000010, 0x8000004d, 0x00000010,
- 0x8000004e, 0x00000010, 0x8000004f, 0x00000010,
- 0x80000050, 0x00000010, 0x80000051, 0x00000010,
- 0x80000052, 0x00000010, 0x80000053, 0x00000010,
- 0x80000054, 0x00000010, 0x80000055, 0x00000010,
- 0x80000056, 0x00000010, 0x80000057, 0x00000010,
- 0x80000058, 0x00000010, 0x80000059, 0x00000010,
- 0x8000005a, 0x00000010, 0x8000039c, 0x00000010,
- 0x00000053, 0x80000053, 0x00000010, 0x800000c0,
- 0x00000010, 0x800000c1, 0x00000010, 0x800000c2,
- 0x00000010, 0x800000c3, 0x00000010, 0x800000c4,
- 0x00000010, 0x800000c5, 0x00000010, 0x800000c6,
- 0x00000010, 0x800000c7, 0x00000010, 0x800000c8,
- 0x00000010, 0x800000c9, 0x00000010, 0x800000ca,
- 0x00000010, 0x800000cb, 0x00000010, 0x800000cc,
- 0x00000010, 0x800000cd, 0x00000010, 0x800000ce,
- 0x00000010, 0x800000cf, 0x00000010, 0x800000d0,
- 0x00000010, 0x800000d1, 0x00000010, 0x800000d2,
- 0x00000010, 0x800000d3, 0x00000010, 0x800000d4,
- 0x00000010, 0x800000d5, 0x00000010, 0x800000d6,
- 0x00000010, 0x800000d8, 0x00000010, 0x800000d9,
- 0x00000010, 0x800000da, 0x00000010, 0x800000db,
- 0x00000010, 0x800000dc, 0x00000010, 0x800000dd,
- 0x00000010, 0x800000de, 0x00000010, 0x80000178,
- 0x00000010, 0x80000100, 0x00000010, 0x80000102,
- 0x00000010, 0x80000104, 0x00000010, 0x80000106,
- 0x00000010, 0x80000108, 0x00000010, 0x8000010a,
- 0x00000010, 0x8000010c, 0x00000010, 0x8000010e,
- 0x00000010, 0x80000110, 0x00000010, 0x80000112,
- 0x00000010, 0x80000114, 0x00000010, 0x80000116,
- 0x00000010, 0x80000118, 0x00000010, 0x8000011a,
- 0x00000010, 0x8000011c, 0x00000010, 0x8000011e,
- 0x00000010, 0x80000120, 0x00000010, 0x80000122,
- 0x00000010, 0x80000124, 0x00000010, 0x80000126,
- 0x00000010, 0x80000128, 0x00000010, 0x8000012a,
- 0x00000010, 0x8000012c, 0x00000010, 0x8000012e,
- 0x00000010, 0x80000049, 0x00000010, 0x80000132,
- 0x00000010, 0x80000134, 0x00000010, 0x80000136,
- 0x00000010, 0x80000139, 0x00000010, 0x8000013b,
- 0x00000010, 0x8000013d, 0x00000010, 0x8000013f,
- 0x00000010, 0x80000141, 0x00000010, 0x80000143,
- 0x00000010, 0x80000145, 0x00000010, 0x80000147,
- 0x00000010, 0x000002bc, 0x8000004e, 0x00000010,
- 0x8000014a, 0x00000010, 0x8000014c, 0x00000010,
- 0x8000014e, 0x00000010, 0x80000150, 0x00000010,
- 0x80000152, 0x00000010, 0x80000154, 0x00000010,
- 0x80000156, 0x00000010, 0x80000158, 0x00000010,
- 0x8000015a, 0x00000010, 0x8000015c, 0x00000010,
- 0x8000015e, 0x00000010, 0x80000160, 0x00000010,
- 0x80000162, 0x00000010, 0x80000164, 0x00000010,
- 0x80000166, 0x00000010, 0x80000168, 0x00000010,
- 0x8000016a, 0x00000010, 0x8000016c, 0x00000010,
- 0x8000016e, 0x00000010, 0x80000170, 0x00000010,
- 0x80000172, 0x00000010, 0x80000174, 0x00000010,
- 0x80000176, 0x00000010, 0x80000179, 0x00000010,
- 0x8000017b, 0x00000010, 0x8000017d, 0x00000010,
- 0x80000053, 0x00000010, 0x80000182, 0x00000010,
- 0x80000184, 0x00000010, 0x80000187, 0x00000010,
- 0x8000018b, 0x00000010, 0x80000191, 0x00000010,
- 0x800001f6, 0x00000010, 0x80000198, 0x00000010,
- 0x80000220, 0x00000010, 0x800001a0, 0x00000010,
- 0x800001a2, 0x00000010, 0x800001a4, 0x00000010,
- 0x800001a7, 0x00000010, 0x800001ac, 0x00000010,
- 0x800001af, 0x00000010, 0x800001b3, 0x00000010,
- 0x800001b5, 0x00000010, 0x800001b8, 0x00000010,
- 0x800001bc, 0x00000010, 0x800001f7, 0x00000010,
- 0x800001c4, 0x00000010, 0x800001c4, 0x00000010,
- 0x800001c7, 0x00000010, 0x800001c7, 0x00000010,
- 0x800001ca, 0x00000010, 0x800001ca, 0x00000010,
- 0x800001cd, 0x00000010, 0x800001cf, 0x00000010,
- 0x800001d1, 0x00000010, 0x800001d3, 0x00000010,
- 0x800001d5, 0x00000010, 0x800001d7, 0x00000010,
- 0x800001d9, 0x00000010, 0x800001db, 0x00000010,
- 0x8000018e, 0x00000010, 0x800001de, 0x00000010,
- 0x800001e0, 0x00000010, 0x800001e2, 0x00000010,
- 0x800001e4, 0x00000010, 0x800001e6, 0x00000010,
- 0x800001e8, 0x00000010, 0x800001ea, 0x00000010,
- 0x800001ec, 0x00000010, 0x800001ee, 0x00000010,
- 0x0000004a, 0x8000030c, 0x00000010, 0x800001f1,
- 0x00000010, 0x800001f1, 0x00000010, 0x800001f4,
- 0x00000010, 0x800001f8, 0x00000010, 0x800001fa,
- 0x00000010, 0x800001fc, 0x00000010, 0x800001fe,
- 0x00000010, 0x80000200, 0x00000010, 0x80000202,
- 0x00000010, 0x80000204, 0x00000010, 0x80000206,
- 0x00000010, 0x80000208, 0x00000010, 0x8000020a,
- 0x00000010, 0x8000020c, 0x00000010, 0x8000020e,
- 0x00000010, 0x80000210, 0x00000010, 0x80000212,
- 0x00000010, 0x80000214, 0x00000010, 0x80000216,
- 0x00000010, 0x80000218, 0x00000010, 0x8000021a,
- 0x00000010, 0x8000021c, 0x00000010, 0x8000021e,
- 0x00000010, 0x80000222, 0x00000010, 0x80000224,
- 0x00000010, 0x80000226, 0x00000010, 0x80000228,
- 0x00000010, 0x8000022a, 0x00000010, 0x8000022c,
- 0x00000010, 0x8000022e, 0x00000010, 0x80000230,
- 0x00000010, 0x80000232, 0x00000010, 0x80000181,
- 0x00000010, 0x80000186, 0x00000010, 0x80000189,
- 0x00000010, 0x8000018a, 0x00000010, 0x8000018f,
- 0x00000010, 0x80000190, 0x00000010, 0x80000193,
- 0x00000010, 0x80000194, 0x00000010, 0x80000197,
- 0x00000010, 0x80000196, 0x00000010, 0x8000019c,
- 0x00000010, 0x8000019d, 0x00000010, 0x8000019f,
- 0x00000010, 0x800001a6, 0x00000010, 0x800001a9,
- 0x00000010, 0x800001ae, 0x00000010, 0x800001b1,
- 0x00000010, 0x800001b2, 0x00000010, 0x800001b7,
- 0x00000010, 0x80000399, 0x00000010, 0x00000399,
- 0x00000308, 0x80000301, 0x00000010, 0x80000386,
- 0x00000010, 0x80000388, 0x00000010, 0x80000389,
- 0x00000010, 0x8000038a, 0x00000010, 0x000003a5,
- 0x00000308, 0x80000301, 0x00000010, 0x80000391,
- 0x00000010, 0x80000392, 0x00000010, 0x80000393,
- 0x00000010, 0x80000394, 0x00000010, 0x80000395,
- 0x00000010, 0x80000396, 0x00000010, 0x80000397,
- 0x00000010, 0x80000398, 0x00000010, 0x80000399,
- 0x00000010, 0x8000039a, 0x00000010, 0x8000039b,
- 0x00000010, 0x8000039c, 0x00000010, 0x8000039d,
- 0x00000010, 0x8000039e, 0x00000010, 0x8000039f,
- 0x00000010, 0x800003a0, 0x00000010, 0x800003a1,
- 0x00000010, 0x800003a3, 0x00000010, 0x800003a3,
- 0x00000010, 0x800003a4, 0x00000010, 0x800003a5,
- 0x00000010, 0x800003a6, 0x00000010, 0x800003a7,
- 0x00000010, 0x800003a8, 0x00000010, 0x800003a9,
- 0x00000010, 0x800003aa, 0x00000010, 0x800003ab,
- 0x00000010, 0x8000038c, 0x00000010, 0x8000038e,
- 0x00000010, 0x8000038f, 0x00000010, 0x80000392,
- 0x00000010, 0x80000398, 0x00000010, 0x800003a6,
- 0x00000010, 0x800003a0, 0x00000010, 0x800003d8,
- 0x00000010, 0x800003da, 0x00000010, 0x800003dc,
- 0x00000010, 0x800003de, 0x00000010, 0x800003e0,
- 0x00000010, 0x800003e2, 0x00000010, 0x800003e4,
- 0x00000010, 0x800003e6, 0x00000010, 0x800003e8,
- 0x00000010, 0x800003ea, 0x00000010, 0x800003ec,
- 0x00000010, 0x800003ee, 0x00000010, 0x8000039a,
- 0x00000010, 0x800003a1, 0x00000010, 0x800003a3,
- 0x00000010, 0x80000395, 0x00000010, 0x80000410,
- 0x00000010, 0x80000411, 0x00000010, 0x80000412,
- 0x00000010, 0x80000413, 0x00000010, 0x80000414,
- 0x00000010, 0x80000415, 0x00000010, 0x80000416,
- 0x00000010, 0x80000417, 0x00000010, 0x80000418,
- 0x00000010, 0x80000419, 0x00000010, 0x8000041a,
- 0x00000010, 0x8000041b, 0x00000010, 0x8000041c,
- 0x00000010, 0x8000041d, 0x00000010, 0x8000041e,
- 0x00000010, 0x8000041f, 0x00000010, 0x80000420,
- 0x00000010, 0x80000421, 0x00000010, 0x80000422,
- 0x00000010, 0x80000423, 0x00000010, 0x80000424,
- 0x00000010, 0x80000425, 0x00000010, 0x80000426,
- 0x00000010, 0x80000427, 0x00000010, 0x80000428,
- 0x00000010, 0x80000429, 0x00000010, 0x8000042a,
- 0x00000010, 0x8000042b, 0x00000010, 0x8000042c,
- 0x00000010, 0x8000042d, 0x00000010, 0x8000042e,
- 0x00000010, 0x8000042f, 0x00000010, 0x80000400,
- 0x00000010, 0x80000401, 0x00000010, 0x80000402,
- 0x00000010, 0x80000403, 0x00000010, 0x80000404,
- 0x00000010, 0x80000405, 0x00000010, 0x80000406,
- 0x00000010, 0x80000407, 0x00000010, 0x80000408,
- 0x00000010, 0x80000409, 0x00000010, 0x8000040a,
- 0x00000010, 0x8000040b, 0x00000010, 0x8000040c,
- 0x00000010, 0x8000040d, 0x00000010, 0x8000040e,
- 0x00000010, 0x8000040f, 0x00000010, 0x80000460,
- 0x00000010, 0x80000462, 0x00000010, 0x80000464,
- 0x00000010, 0x80000466, 0x00000010, 0x80000468,
- 0x00000010, 0x8000046a, 0x00000010, 0x8000046c,
- 0x00000010, 0x8000046e, 0x00000010, 0x80000470,
- 0x00000010, 0x80000472, 0x00000010, 0x80000474,
- 0x00000010, 0x80000476, 0x00000010, 0x80000478,
- 0x00000010, 0x8000047a, 0x00000010, 0x8000047c,
- 0x00000010, 0x8000047e, 0x00000010, 0x80000480,
- 0x00000010, 0x8000048a, 0x00000010, 0x8000048c,
- 0x00000010, 0x8000048e, 0x00000010, 0x80000490,
- 0x00000010, 0x80000492, 0x00000010, 0x80000494,
- 0x00000010, 0x80000496, 0x00000010, 0x80000498,
- 0x00000010, 0x8000049a, 0x00000010, 0x8000049c,
- 0x00000010, 0x8000049e, 0x00000010, 0x800004a0,
- 0x00000010, 0x800004a2, 0x00000010, 0x800004a4,
- 0x00000010, 0x800004a6, 0x00000010, 0x800004a8,
- 0x00000010, 0x800004aa, 0x00000010, 0x800004ac,
- 0x00000010, 0x800004ae, 0x00000010, 0x800004b0,
- 0x00000010, 0x800004b2, 0x00000010, 0x800004b4,
- 0x00000010, 0x800004b6, 0x00000010, 0x800004b8,
- 0x00000010, 0x800004ba, 0x00000010, 0x800004bc,
- 0x00000010, 0x800004be, 0x00000010, 0x800004c1,
- 0x00000010, 0x800004c3, 0x00000010, 0x800004c5,
- 0x00000010, 0x800004c7, 0x00000010, 0x800004c9,
- 0x00000010, 0x800004cb, 0x00000010, 0x800004cd,
- 0x00000010, 0x800004d0, 0x00000010, 0x800004d2,
- 0x00000010, 0x800004d4, 0x00000010, 0x800004d6,
- 0x00000010, 0x800004d8, 0x00000010, 0x800004da,
- 0x00000010, 0x800004dc, 0x00000010, 0x800004de,
- 0x00000010, 0x800004e0, 0x00000010, 0x800004e2,
- 0x00000010, 0x800004e4, 0x00000010, 0x800004e6,
- 0x00000010, 0x800004e8, 0x00000010, 0x800004ea,
- 0x00000010, 0x800004ec, 0x00000010, 0x800004ee,
- 0x00000010, 0x800004f0, 0x00000010, 0x800004f2,
- 0x00000010, 0x800004f4, 0x00000010, 0x800004f8,
- 0x00000010, 0x80000500, 0x00000010, 0x80000502,
- 0x00000010, 0x80000504, 0x00000010, 0x80000506,
- 0x00000010, 0x80000508, 0x00000010, 0x8000050a,
- 0x00000010, 0x8000050c, 0x00000010, 0x8000050e,
- 0x00000010, 0x80000531, 0x00000010, 0x80000532,
- 0x00000010, 0x80000533, 0x00000010, 0x80000534,
- 0x00000010, 0x80000535, 0x00000010, 0x80000536,
- 0x00000010, 0x80000537, 0x00000010, 0x80000538,
- 0x00000010, 0x80000539, 0x00000010, 0x8000053a,
- 0x00000010, 0x8000053b, 0x00000010, 0x8000053c,
- 0x00000010, 0x8000053d, 0x00000010, 0x8000053e,
- 0x00000010, 0x8000053f, 0x00000010, 0x80000540,
- 0x00000010, 0x80000541, 0x00000010, 0x80000542,
- 0x00000010, 0x80000543, 0x00000010, 0x80000544,
- 0x00000010, 0x80000545, 0x00000010, 0x80000546,
- 0x00000010, 0x80000547, 0x00000010, 0x80000548,
- 0x00000010, 0x80000549, 0x00000010, 0x8000054a,
- 0x00000010, 0x8000054b, 0x00000010, 0x8000054c,
- 0x00000010, 0x8000054d, 0x00000010, 0x8000054e,
- 0x00000010, 0x8000054f, 0x00000010, 0x80000550,
- 0x00000010, 0x80000551, 0x00000010, 0x80000552,
- 0x00000010, 0x80000553, 0x00000010, 0x80000554,
- 0x00000010, 0x80000555, 0x00000010, 0x80000556,
- 0x00000010, 0x00000535, 0x80000552, 0x00000010,
- 0x80001e00, 0x00000010, 0x80001e02, 0x00000010,
- 0x80001e04, 0x00000010, 0x80001e06, 0x00000010,
- 0x80001e08, 0x00000010, 0x80001e0a, 0x00000010,
- 0x80001e0c, 0x00000010, 0x80001e0e, 0x00000010,
- 0x80001e10, 0x00000010, 0x80001e12, 0x00000010,
- 0x80001e14, 0x00000010, 0x80001e16, 0x00000010,
- 0x80001e18, 0x00000010, 0x80001e1a, 0x00000010,
- 0x80001e1c, 0x00000010, 0x80001e1e, 0x00000010,
- 0x80001e20, 0x00000010, 0x80001e22, 0x00000010,
- 0x80001e24, 0x00000010, 0x80001e26, 0x00000010,
- 0x80001e28, 0x00000010, 0x80001e2a, 0x00000010,
- 0x80001e2c, 0x00000010, 0x80001e2e, 0x00000010,
- 0x80001e30, 0x00000010, 0x80001e32, 0x00000010,
- 0x80001e34, 0x00000010, 0x80001e36, 0x00000010,
- 0x80001e38, 0x00000010, 0x80001e3a, 0x00000010,
- 0x80001e3c, 0x00000010, 0x80001e3e, 0x00000010,
- 0x80001e40, 0x00000010, 0x80001e42, 0x00000010,
- 0x80001e44, 0x00000010, 0x80001e46, 0x00000010,
- 0x80001e48, 0x00000010, 0x80001e4a, 0x00000010,
- 0x80001e4c, 0x00000010, 0x80001e4e, 0x00000010,
- 0x80001e50, 0x00000010, 0x80001e52, 0x00000010,
- 0x80001e54, 0x00000010, 0x80001e56, 0x00000010,
- 0x80001e58, 0x00000010, 0x80001e5a, 0x00000010,
- 0x80001e5c, 0x00000010, 0x80001e5e, 0x00000010,
- 0x80001e60, 0x00000010, 0x80001e62, 0x00000010,
- 0x80001e64, 0x00000010, 0x80001e66, 0x00000010,
- 0x80001e68, 0x00000010, 0x80001e6a, 0x00000010,
- 0x80001e6c, 0x00000010, 0x80001e6e, 0x00000010,
- 0x80001e70, 0x00000010, 0x80001e72, 0x00000010,
- 0x80001e74, 0x00000010, 0x80001e76, 0x00000010,
- 0x80001e78, 0x00000010, 0x80001e7a, 0x00000010,
- 0x80001e7c, 0x00000010, 0x80001e7e, 0x00000010,
- 0x80001e80, 0x00000010, 0x80001e82, 0x00000010,
- 0x80001e84, 0x00000010, 0x80001e86, 0x00000010,
- 0x80001e88, 0x00000010, 0x80001e8a, 0x00000010,
- 0x80001e8c, 0x00000010, 0x80001e8e, 0x00000010,
- 0x80001e90, 0x00000010, 0x80001e92, 0x00000010,
- 0x80001e94, 0x00000010, 0x00000048, 0x80000331,
- 0x00000010, 0x00000054, 0x80000308, 0x00000010,
- 0x00000057, 0x8000030a, 0x00000010, 0x00000059,
- 0x8000030a, 0x00000010, 0x00000041, 0x800002be,
- 0x00000010, 0x80001e60, 0x00000010, 0x80001ea0,
- 0x00000010, 0x80001ea2, 0x00000010, 0x80001ea4,
- 0x00000010, 0x80001ea6, 0x00000010, 0x80001ea8,
- 0x00000010, 0x80001eaa, 0x00000010, 0x80001eac,
- 0x00000010, 0x80001eae, 0x00000010, 0x80001eb0,
- 0x00000010, 0x80001eb2, 0x00000010, 0x80001eb4,
- 0x00000010, 0x80001eb6, 0x00000010, 0x80001eb8,
- 0x00000010, 0x80001eba, 0x00000010, 0x80001ebc,
- 0x00000010, 0x80001ebe, 0x00000010, 0x80001ec0,
- 0x00000010, 0x80001ec2, 0x00000010, 0x80001ec4,
- 0x00000010, 0x80001ec6, 0x00000010, 0x80001ec8,
- 0x00000010, 0x80001eca, 0x00000010, 0x80001ecc,
- 0x00000010, 0x80001ece, 0x00000010, 0x80001ed0,
- 0x00000010, 0x80001ed2, 0x00000010, 0x80001ed4,
- 0x00000010, 0x80001ed6, 0x00000010, 0x80001ed8,
- 0x00000010, 0x80001eda, 0x00000010, 0x80001edc,
- 0x00000010, 0x80001ede, 0x00000010, 0x80001ee0,
- 0x00000010, 0x80001ee2, 0x00000010, 0x80001ee4,
- 0x00000010, 0x80001ee6, 0x00000010, 0x80001ee8,
- 0x00000010, 0x80001eea, 0x00000010, 0x80001eec,
- 0x00000010, 0x80001eee, 0x00000010, 0x80001ef0,
- 0x00000010, 0x80001ef2, 0x00000010, 0x80001ef4,
- 0x00000010, 0x80001ef6, 0x00000010, 0x80001ef8,
- 0x00000010, 0x80001f08, 0x00000010, 0x80001f09,
- 0x00000010, 0x80001f0a, 0x00000010, 0x80001f0b,
- 0x00000010, 0x80001f0c, 0x00000010, 0x80001f0d,
- 0x00000010, 0x80001f0e, 0x00000010, 0x80001f0f,
- 0x00000010, 0x80001f18, 0x00000010, 0x80001f19,
- 0x00000010, 0x80001f1a, 0x00000010, 0x80001f1b,
- 0x00000010, 0x80001f1c, 0x00000010, 0x80001f1d,
- 0x00000010, 0x80001f28, 0x00000010, 0x80001f29,
- 0x00000010, 0x80001f2a, 0x00000010, 0x80001f2b,
- 0x00000010, 0x80001f2c, 0x00000010, 0x80001f2d,
- 0x00000010, 0x80001f2e, 0x00000010, 0x80001f2f,
- 0x00000010, 0x80001f38, 0x00000010, 0x80001f39,
- 0x00000010, 0x80001f3a, 0x00000010, 0x80001f3b,
- 0x00000010, 0x80001f3c, 0x00000010, 0x80001f3d,
- 0x00000010, 0x80001f3e, 0x00000010, 0x80001f3f,
- 0x00000010, 0x80001f48, 0x00000010, 0x80001f49,
- 0x00000010, 0x80001f4a, 0x00000010, 0x80001f4b,
- 0x00000010, 0x80001f4c, 0x00000010, 0x80001f4d,
- 0x00000010, 0x000003a5, 0x80000313, 0x00000010,
- 0x80001f59, 0x00000010, 0x000003a5, 0x00000313,
- 0x80000300, 0x00000010, 0x80001f5b, 0x00000010,
- 0x000003a5, 0x00000313, 0x80000301, 0x00000010,
- 0x80001f5d, 0x00000010, 0x000003a5, 0x00000313,
- 0x80000342, 0x00000010, 0x80001f5f, 0x00000010,
- 0x80001f68, 0x00000010, 0x80001f69, 0x00000010,
- 0x80001f6a, 0x00000010, 0x80001f6b, 0x00000010,
- 0x80001f6c, 0x00000010, 0x80001f6d, 0x00000010,
- 0x80001f6e, 0x00000010, 0x80001f6f, 0x00000010,
- 0x80001fba, 0x00000010, 0x80001fbb, 0x00000010,
- 0x80001fc8, 0x00000010, 0x80001fc9, 0x00000010,
- 0x80001fca, 0x00000010, 0x80001fcb, 0x00000010,
- 0x80001fda, 0x00000010, 0x80001fdb, 0x00000010,
- 0x80001ff8, 0x00000010, 0x80001ff9, 0x00000010,
- 0x80001fea, 0x00000010, 0x80001feb, 0x00000010,
- 0x80001ffa, 0x00000010, 0x80001ffb, 0x00000000,
- 0x00001f08, 0x80000399, 0x00000010, 0x80001f88,
- 0x00000000, 0x00001f09, 0x80000399, 0x00000010,
- 0x80001f89, 0x00000000, 0x00001f0a, 0x80000399,
- 0x00000010, 0x80001f8a, 0x00000000, 0x00001f0b,
- 0x80000399, 0x00000010, 0x80001f8b, 0x00000000,
- 0x00001f0c, 0x80000399, 0x00000010, 0x80001f8c,
- 0x00000000, 0x00001f0d, 0x80000399, 0x00000010,
- 0x80001f8d, 0x00000000, 0x00001f0e, 0x80000399,
- 0x00000010, 0x80001f8e, 0x00000000, 0x00001f0f,
- 0x80000399, 0x00000010, 0x80001f8f, 0x00000010,
- 0x00001f08, 0x80000399, 0x00000010, 0x00001f09,
- 0x80000399, 0x00000010, 0x00001f0a, 0x80000399,
- 0x00000010, 0x00001f0b, 0x80000399, 0x00000010,
- 0x00001f0c, 0x80000399, 0x00000010, 0x00001f0d,
- 0x80000399, 0x00000010, 0x00001f0e, 0x80000399,
- 0x00000010, 0x00001f0f, 0x80000399, 0x00000000,
- 0x00001f28, 0x80000399, 0x00000010, 0x80001f98,
- 0x00000000, 0x00001f29, 0x80000399, 0x00000010,
- 0x80001f99, 0x00000000, 0x00001f2a, 0x80000399,
- 0x00000010, 0x80001f9a, 0x00000000, 0x00001f2b,
- 0x80000399, 0x00000010, 0x80001f9b, 0x00000000,
- 0x00001f2c, 0x80000399, 0x00000010, 0x80001f9c,
- 0x00000000, 0x00001f2d, 0x80000399, 0x00000010,
- 0x80001f9d, 0x00000000, 0x00001f2e, 0x80000399,
- 0x00000010, 0x80001f9e, 0x00000000, 0x00001f2f,
- 0x80000399, 0x00000010, 0x80001f9f, 0x00000010,
- 0x00001f28, 0x80000399, 0x00000010, 0x00001f29,
- 0x80000399, 0x00000010, 0x00001f2a, 0x80000399,
- 0x00000010, 0x00001f2b, 0x80000399, 0x00000010,
- 0x00001f2c, 0x80000399, 0x00000010, 0x00001f2d,
- 0x80000399, 0x00000010, 0x00001f2e, 0x80000399,
- 0x00000010, 0x00001f2f, 0x80000399, 0x00000000,
- 0x00001f68, 0x80000399, 0x00000010, 0x80001fa8,
- 0x00000000, 0x00001f69, 0x80000399, 0x00000010,
- 0x80001fa9, 0x00000000, 0x00001f6a, 0x80000399,
- 0x00000010, 0x80001faa, 0x00000000, 0x00001f6b,
- 0x80000399, 0x00000010, 0x80001fab, 0x00000000,
- 0x00001f6c, 0x80000399, 0x00000010, 0x80001fac,
- 0x00000000, 0x00001f6d, 0x80000399, 0x00000010,
- 0x80001fad, 0x00000000, 0x00001f6e, 0x80000399,
- 0x00000010, 0x80001fae, 0x00000000, 0x00001f6f,
- 0x80000399, 0x00000010, 0x80001faf, 0x00000010,
- 0x00001f68, 0x80000399, 0x00000010, 0x00001f69,
- 0x80000399, 0x00000010, 0x00001f6a, 0x80000399,
- 0x00000010, 0x00001f6b, 0x80000399, 0x00000010,
- 0x00001f6c, 0x80000399, 0x00000010, 0x00001f6d,
- 0x80000399, 0x00000010, 0x00001f6e, 0x80000399,
- 0x00000010, 0x00001f6f, 0x80000399, 0x00000010,
- 0x80001fb8, 0x00000010, 0x80001fb9, 0x00000010,
- 0x00001fba, 0x80000399, 0x00000000, 0x00000391,
- 0x80000399, 0x00000010, 0x80001fbc, 0x00000010,
- 0x00000386, 0x80000399, 0x00000010, 0x00000391,
- 0x80000342, 0x00000010, 0x00000391, 0x00000342,
- 0x80000399, 0x00000010, 0x00000391, 0x80000399,
- 0x00000010, 0x80000399, 0x00000010, 0x00001fca,
- 0x80000399, 0x00000000, 0x00000397, 0x80000399,
- 0x00000010, 0x80001fcc, 0x00000010, 0x00000389,
- 0x80000399, 0x00000010, 0x00000397, 0x80000342,
- 0x00000010, 0x00000397, 0x00000342, 0x80000399,
- 0x00000010, 0x00000397, 0x80000399, 0x00000010,
- 0x80001fd8, 0x00000010, 0x80001fd9, 0x00000010,
- 0x00000399, 0x00000308, 0x80000300, 0x00000010,
- 0x00000399, 0x00000308, 0x80000301, 0x00000010,
- 0x00000399, 0x80000342, 0x00000010, 0x00000399,
- 0x00000308, 0x80000342, 0x00000010, 0x80001fe8,
- 0x00000010, 0x80001fe9, 0x00000010, 0x000003a5,
- 0x00000308, 0x80000300, 0x00000010, 0x000003a5,
- 0x00000308, 0x80000301, 0x00000010, 0x000003a1,
- 0x80000313, 0x00000010, 0x80001fec, 0x00000010,
- 0x000003a5, 0x80000342, 0x00000010, 0x000003a5,
- 0x00000308, 0x80000342, 0x00000010, 0x00001ffa,
- 0x80000399, 0x00000000, 0x000003a9, 0x80000399,
- 0x00000010, 0x80001ffc, 0x00000010, 0x0000038f,
- 0x80000399, 0x00000010, 0x000003a9, 0x80000342,
- 0x00000010, 0x000003a9, 0x00000342, 0x80000399,
- 0x00000010, 0x000003a9, 0x80000399, 0x00000010,
- 0x80002160, 0x00000010, 0x80002161, 0x00000010,
- 0x80002162, 0x00000010, 0x80002163, 0x00000010,
- 0x80002164, 0x00000010, 0x80002165, 0x00000010,
- 0x80002166, 0x00000010, 0x80002167, 0x00000010,
- 0x80002168, 0x00000010, 0x80002169, 0x00000010,
- 0x8000216a, 0x00000010, 0x8000216b, 0x00000010,
- 0x8000216c, 0x00000010, 0x8000216d, 0x00000010,
- 0x8000216e, 0x00000010, 0x8000216f, 0x00000010,
- 0x800024b6, 0x00000010, 0x800024b7, 0x00000010,
- 0x800024b8, 0x00000010, 0x800024b9, 0x00000010,
- 0x800024ba, 0x00000010, 0x800024bb, 0x00000010,
- 0x800024bc, 0x00000010, 0x800024bd, 0x00000010,
- 0x800024be, 0x00000010, 0x800024bf, 0x00000010,
- 0x800024c0, 0x00000010, 0x800024c1, 0x00000010,
- 0x800024c2, 0x00000010, 0x800024c3, 0x00000010,
- 0x800024c4, 0x00000010, 0x800024c5, 0x00000010,
- 0x800024c6, 0x00000010, 0x800024c7, 0x00000010,
- 0x800024c8, 0x00000010, 0x800024c9, 0x00000010,
- 0x800024ca, 0x00000010, 0x800024cb, 0x00000010,
- 0x800024cc, 0x00000010, 0x800024cd, 0x00000010,
- 0x800024ce, 0x00000010, 0x800024cf, 0x00000010,
- 0x00000046, 0x80000046, 0x00000010, 0x00000046,
- 0x80000049, 0x00000010, 0x00000046, 0x8000004c,
- 0x00000010, 0x00000046, 0x00000046, 0x80000049,
- 0x00000010, 0x00000046, 0x00000046, 0x8000004c,
- 0x00000010, 0x00000053, 0x80000054, 0x00000010,
- 0x00000053, 0x80000054, 0x00000010, 0x00000544,
- 0x80000546, 0x00000010, 0x00000544, 0x80000535,
- 0x00000010, 0x00000544, 0x8000053b, 0x00000010,
- 0x0000054e, 0x80000546, 0x00000010, 0x00000544,
- 0x8000053d, 0x00000010, 0x8000ff21, 0x00000010,
- 0x8000ff22, 0x00000010, 0x8000ff23, 0x00000010,
- 0x8000ff24, 0x00000010, 0x8000ff25, 0x00000010,
- 0x8000ff26, 0x00000010, 0x8000ff27, 0x00000010,
- 0x8000ff28, 0x00000010, 0x8000ff29, 0x00000010,
- 0x8000ff2a, 0x00000010, 0x8000ff2b, 0x00000010,
- 0x8000ff2c, 0x00000010, 0x8000ff2d, 0x00000010,
- 0x8000ff2e, 0x00000010, 0x8000ff2f, 0x00000010,
- 0x8000ff30, 0x00000010, 0x8000ff31, 0x00000010,
- 0x8000ff32, 0x00000010, 0x8000ff33, 0x00000010,
- 0x8000ff34, 0x00000010, 0x8000ff35, 0x00000010,
- 0x8000ff36, 0x00000010, 0x8000ff37, 0x00000010,
- 0x8000ff38, 0x00000010, 0x8000ff39, 0x00000010,
- 0x8000ff3a, 0x00000010, 0x80010400, 0x00000010,
- 0x80010401, 0x00000010, 0x80010402, 0x00000010,
- 0x80010403, 0x00000010, 0x80010404, 0x00000010,
- 0x80010405, 0x00000010, 0x80010406, 0x00000010,
- 0x80010407, 0x00000010, 0x80010408, 0x00000010,
- 0x80010409, 0x00000010, 0x8001040a, 0x00000010,
- 0x8001040b, 0x00000010, 0x8001040c, 0x00000010,
- 0x8001040d, 0x00000010, 0x8001040e, 0x00000010,
- 0x8001040f, 0x00000010, 0x80010410, 0x00000010,
- 0x80010411, 0x00000010, 0x80010412, 0x00000010,
- 0x80010413, 0x00000010, 0x80010414, 0x00000010,
- 0x80010415, 0x00000010, 0x80010416, 0x00000010,
- 0x80010417, 0x00000010, 0x80010418, 0x00000010,
- 0x80010419, 0x00000010, 0x8001041a, 0x00000010,
- 0x8001041b, 0x00000010, 0x8001041c, 0x00000010,
- 0x8001041d, 0x00000010, 0x8001041e, 0x00000010,
- 0x8001041f, 0x00000010, 0x80010420, 0x00000010,
- 0x80010421, 0x00000010, 0x80010422, 0x00000010,
- 0x80010423, 0x00000010, 0x80010424, 0x00000010,
- 0x80010425,
-};
-
-static const unsigned long v320_tolower_seq[] = {
- 0x00000000, 0x00000010, 0x80000061, 0x00000010,
- 0x80000062, 0x00000010, 0x80000063, 0x00000010,
- 0x80000064, 0x00000010, 0x80000065, 0x00000010,
- 0x80000066, 0x00000010, 0x80000067, 0x00000010,
- 0x80000068, 0x00000010, 0x80000069, 0x00000010,
- 0x8000006a, 0x00000010, 0x8000006b, 0x00000010,
- 0x8000006c, 0x00000010, 0x8000006d, 0x00000010,
- 0x8000006e, 0x00000010, 0x8000006f, 0x00000010,
- 0x80000070, 0x00000010, 0x80000071, 0x00000010,
- 0x80000072, 0x00000010, 0x80000073, 0x00000010,
- 0x80000074, 0x00000010, 0x80000075, 0x00000010,
- 0x80000076, 0x00000010, 0x80000077, 0x00000010,
- 0x80000078, 0x00000010, 0x80000079, 0x00000010,
- 0x8000007a, 0x00000010, 0x800000e0, 0x00000010,
- 0x800000e1, 0x00000010, 0x800000e2, 0x00000010,
- 0x800000e3, 0x00000010, 0x800000e4, 0x00000010,
- 0x800000e5, 0x00000010, 0x800000e6, 0x00000010,
- 0x800000e7, 0x00000010, 0x800000e8, 0x00000010,
- 0x800000e9, 0x00000010, 0x800000ea, 0x00000010,
- 0x800000eb, 0x00000010, 0x800000ec, 0x00000010,
- 0x800000ed, 0x00000010, 0x800000ee, 0x00000010,
- 0x800000ef, 0x00000010, 0x800000f0, 0x00000010,
- 0x800000f1, 0x00000010, 0x800000f2, 0x00000010,
- 0x800000f3, 0x00000010, 0x800000f4, 0x00000010,
- 0x800000f5, 0x00000010, 0x800000f6, 0x00000010,
- 0x800000f8, 0x00000010, 0x800000f9, 0x00000010,
- 0x800000fa, 0x00000010, 0x800000fb, 0x00000010,
- 0x800000fc, 0x00000010, 0x800000fd, 0x00000010,
- 0x800000fe, 0x00000010, 0x80000101, 0x00000010,
- 0x80000103, 0x00000010, 0x80000105, 0x00000010,
- 0x80000107, 0x00000010, 0x80000109, 0x00000010,
- 0x8000010b, 0x00000010, 0x8000010d, 0x00000010,
- 0x8000010f, 0x00000010, 0x80000111, 0x00000010,
- 0x80000113, 0x00000010, 0x80000115, 0x00000010,
- 0x80000117, 0x00000010, 0x80000119, 0x00000010,
- 0x8000011b, 0x00000010, 0x8000011d, 0x00000010,
- 0x8000011f, 0x00000010, 0x80000121, 0x00000010,
- 0x80000123, 0x00000010, 0x80000125, 0x00000010,
- 0x80000127, 0x00000010, 0x80000129, 0x00000010,
- 0x8000012b, 0x00000010, 0x8000012d, 0x00000010,
- 0x8000012f, 0x00000000, 0x80000069, 0x00000010,
- 0x80000069, 0x00000010, 0x80000133, 0x00000010,
- 0x80000135, 0x00000010, 0x80000137, 0x00000010,
- 0x8000013a, 0x00000010, 0x8000013c, 0x00000010,
- 0x8000013e, 0x00000010, 0x80000140, 0x00000010,
- 0x80000142, 0x00000010, 0x80000144, 0x00000010,
- 0x80000146, 0x00000010, 0x80000148, 0x00000010,
- 0x8000014b, 0x00000010, 0x8000014d, 0x00000010,
- 0x8000014f, 0x00000010, 0x80000151, 0x00000010,
- 0x80000153, 0x00000010, 0x80000155, 0x00000010,
- 0x80000157, 0x00000010, 0x80000159, 0x00000010,
- 0x8000015b, 0x00000010, 0x8000015d, 0x00000010,
- 0x8000015f, 0x00000010, 0x80000161, 0x00000010,
- 0x80000163, 0x00000010, 0x80000165, 0x00000010,
- 0x80000167, 0x00000010, 0x80000169, 0x00000010,
- 0x8000016b, 0x00000010, 0x8000016d, 0x00000010,
- 0x8000016f, 0x00000010, 0x80000171, 0x00000010,
- 0x80000173, 0x00000010, 0x80000175, 0x00000010,
- 0x80000177, 0x00000010, 0x800000ff, 0x00000010,
- 0x8000017a, 0x00000010, 0x8000017c, 0x00000010,
- 0x8000017e, 0x00000010, 0x80000253, 0x00000010,
- 0x80000183, 0x00000010, 0x80000185, 0x00000010,
- 0x80000254, 0x00000010, 0x80000188, 0x00000010,
- 0x80000256, 0x00000010, 0x80000257, 0x00000010,
- 0x8000018c, 0x00000010, 0x800001dd, 0x00000010,
- 0x80000259, 0x00000010, 0x8000025b, 0x00000010,
- 0x80000192, 0x00000010, 0x80000260, 0x00000010,
- 0x80000263, 0x00000010, 0x80000269, 0x00000010,
- 0x80000268, 0x00000010, 0x80000199, 0x00000010,
- 0x8000026f, 0x00000010, 0x80000272, 0x00000010,
- 0x80000275, 0x00000010, 0x800001a1, 0x00000010,
- 0x800001a3, 0x00000010, 0x800001a5, 0x00000010,
- 0x80000280, 0x00000010, 0x800001a8, 0x00000010,
- 0x80000283, 0x00000010, 0x800001ad, 0x00000010,
- 0x80000288, 0x00000010, 0x800001b0, 0x00000010,
- 0x8000028a, 0x00000010, 0x8000028b, 0x00000010,
- 0x800001b4, 0x00000010, 0x800001b6, 0x00000010,
- 0x80000292, 0x00000010, 0x800001b9, 0x00000010,
- 0x800001bd, 0x00000010, 0x800001c6, 0x00000010,
- 0x800001c6, 0x00000010, 0x800001c9, 0x00000010,
- 0x800001c9, 0x00000010, 0x800001cc, 0x00000010,
- 0x800001cc, 0x00000010, 0x800001ce, 0x00000010,
- 0x800001d0, 0x00000010, 0x800001d2, 0x00000010,
- 0x800001d4, 0x00000010, 0x800001d6, 0x00000010,
- 0x800001d8, 0x00000010, 0x800001da, 0x00000010,
- 0x800001dc, 0x00000010, 0x800001df, 0x00000010,
- 0x800001e1, 0x00000010, 0x800001e3, 0x00000010,
- 0x800001e5, 0x00000010, 0x800001e7, 0x00000010,
- 0x800001e9, 0x00000010, 0x800001eb, 0x00000010,
- 0x800001ed, 0x00000010, 0x800001ef, 0x00000010,
- 0x800001f3, 0x00000010, 0x800001f3, 0x00000010,
- 0x800001f5, 0x00000010, 0x80000195, 0x00000010,
- 0x800001bf, 0x00000010, 0x800001f9, 0x00000010,
- 0x800001fb, 0x00000010, 0x800001fd, 0x00000010,
- 0x800001ff, 0x00000010, 0x80000201, 0x00000010,
- 0x80000203, 0x00000010, 0x80000205, 0x00000010,
- 0x80000207, 0x00000010, 0x80000209, 0x00000010,
- 0x8000020b, 0x00000010, 0x8000020d, 0x00000010,
- 0x8000020f, 0x00000010, 0x80000211, 0x00000010,
- 0x80000213, 0x00000010, 0x80000215, 0x00000010,
- 0x80000217, 0x00000010, 0x80000219, 0x00000010,
- 0x8000021b, 0x00000010, 0x8000021d, 0x00000010,
- 0x8000021f, 0x00000010, 0x8000019e, 0x00000010,
- 0x80000223, 0x00000010, 0x80000225, 0x00000010,
- 0x80000227, 0x00000010, 0x80000229, 0x00000010,
- 0x8000022b, 0x00000010, 0x8000022d, 0x00000010,
- 0x8000022f, 0x00000010, 0x80000231, 0x00000010,
- 0x80000233, 0x00000010, 0x800003ac, 0x00000010,
- 0x800003ad, 0x00000010, 0x800003ae, 0x00000010,
- 0x800003af, 0x00000010, 0x800003cc, 0x00000010,
- 0x800003cd, 0x00000010, 0x800003ce, 0x00000010,
- 0x800003b1, 0x00000010, 0x800003b2, 0x00000010,
- 0x800003b3, 0x00000010, 0x800003b4, 0x00000010,
- 0x800003b5, 0x00000010, 0x800003b6, 0x00000010,
- 0x800003b7, 0x00000010, 0x800003b8, 0x00000010,
- 0x800003b9, 0x00000010, 0x800003ba, 0x00000010,
- 0x800003bb, 0x00000010, 0x800003bc, 0x00000010,
- 0x800003bd, 0x00000010, 0x800003be, 0x00000010,
- 0x800003bf, 0x00000010, 0x800003c0, 0x00000010,
- 0x800003c1, 0x00000010, 0x800003c3, 0x00000010,
- 0x800003c4, 0x00000010, 0x800003c5, 0x00000010,
- 0x800003c6, 0x00000010, 0x800003c7, 0x00000010,
- 0x800003c8, 0x00000010, 0x800003c9, 0x00000010,
- 0x800003ca, 0x00000010, 0x800003cb, 0x00000010,
- 0x800003d9, 0x00000010, 0x800003db, 0x00000010,
- 0x800003dd, 0x00000010, 0x800003df, 0x00000010,
- 0x800003e1, 0x00000010, 0x800003e3, 0x00000010,
- 0x800003e5, 0x00000010, 0x800003e7, 0x00000010,
- 0x800003e9, 0x00000010, 0x800003eb, 0x00000010,
- 0x800003ed, 0x00000010, 0x800003ef, 0x00000010,
- 0x800003b8, 0x00000010, 0x80000450, 0x00000010,
- 0x80000451, 0x00000010, 0x80000452, 0x00000010,
- 0x80000453, 0x00000010, 0x80000454, 0x00000010,
- 0x80000455, 0x00000010, 0x80000456, 0x00000010,
- 0x80000457, 0x00000010, 0x80000458, 0x00000010,
- 0x80000459, 0x00000010, 0x8000045a, 0x00000010,
- 0x8000045b, 0x00000010, 0x8000045c, 0x00000010,
- 0x8000045d, 0x00000010, 0x8000045e, 0x00000010,
- 0x8000045f, 0x00000010, 0x80000430, 0x00000010,
- 0x80000431, 0x00000010, 0x80000432, 0x00000010,
- 0x80000433, 0x00000010, 0x80000434, 0x00000010,
- 0x80000435, 0x00000010, 0x80000436, 0x00000010,
- 0x80000437, 0x00000010, 0x80000438, 0x00000010,
- 0x80000439, 0x00000010, 0x8000043a, 0x00000010,
- 0x8000043b, 0x00000010, 0x8000043c, 0x00000010,
- 0x8000043d, 0x00000010, 0x8000043e, 0x00000010,
- 0x8000043f, 0x00000010, 0x80000440, 0x00000010,
- 0x80000441, 0x00000010, 0x80000442, 0x00000010,
- 0x80000443, 0x00000010, 0x80000444, 0x00000010,
- 0x80000445, 0x00000010, 0x80000446, 0x00000010,
- 0x80000447, 0x00000010, 0x80000448, 0x00000010,
- 0x80000449, 0x00000010, 0x8000044a, 0x00000010,
- 0x8000044b, 0x00000010, 0x8000044c, 0x00000010,
- 0x8000044d, 0x00000010, 0x8000044e, 0x00000010,
- 0x8000044f, 0x00000010, 0x80000461, 0x00000010,
- 0x80000463, 0x00000010, 0x80000465, 0x00000010,
- 0x80000467, 0x00000010, 0x80000469, 0x00000010,
- 0x8000046b, 0x00000010, 0x8000046d, 0x00000010,
- 0x8000046f, 0x00000010, 0x80000471, 0x00000010,
- 0x80000473, 0x00000010, 0x80000475, 0x00000010,
- 0x80000477, 0x00000010, 0x80000479, 0x00000010,
- 0x8000047b, 0x00000010, 0x8000047d, 0x00000010,
- 0x8000047f, 0x00000010, 0x80000481, 0x00000010,
- 0x8000048b, 0x00000010, 0x8000048d, 0x00000010,
- 0x8000048f, 0x00000010, 0x80000491, 0x00000010,
- 0x80000493, 0x00000010, 0x80000495, 0x00000010,
- 0x80000497, 0x00000010, 0x80000499, 0x00000010,
- 0x8000049b, 0x00000010, 0x8000049d, 0x00000010,
- 0x8000049f, 0x00000010, 0x800004a1, 0x00000010,
- 0x800004a3, 0x00000010, 0x800004a5, 0x00000010,
- 0x800004a7, 0x00000010, 0x800004a9, 0x00000010,
- 0x800004ab, 0x00000010, 0x800004ad, 0x00000010,
- 0x800004af, 0x00000010, 0x800004b1, 0x00000010,
- 0x800004b3, 0x00000010, 0x800004b5, 0x00000010,
- 0x800004b7, 0x00000010, 0x800004b9, 0x00000010,
- 0x800004bb, 0x00000010, 0x800004bd, 0x00000010,
- 0x800004bf, 0x00000010, 0x800004c2, 0x00000010,
- 0x800004c4, 0x00000010, 0x800004c6, 0x00000010,
- 0x800004c8, 0x00000010, 0x800004ca, 0x00000010,
- 0x800004cc, 0x00000010, 0x800004ce, 0x00000010,
- 0x800004d1, 0x00000010, 0x800004d3, 0x00000010,
- 0x800004d5, 0x00000010, 0x800004d7, 0x00000010,
- 0x800004d9, 0x00000010, 0x800004db, 0x00000010,
- 0x800004dd, 0x00000010, 0x800004df, 0x00000010,
- 0x800004e1, 0x00000010, 0x800004e3, 0x00000010,
- 0x800004e5, 0x00000010, 0x800004e7, 0x00000010,
- 0x800004e9, 0x00000010, 0x800004eb, 0x00000010,
- 0x800004ed, 0x00000010, 0x800004ef, 0x00000010,
- 0x800004f1, 0x00000010, 0x800004f3, 0x00000010,
- 0x800004f5, 0x00000010, 0x800004f9, 0x00000010,
- 0x80000501, 0x00000010, 0x80000503, 0x00000010,
- 0x80000505, 0x00000010, 0x80000507, 0x00000010,
- 0x80000509, 0x00000010, 0x8000050b, 0x00000010,
- 0x8000050d, 0x00000010, 0x8000050f, 0x00000010,
- 0x80000561, 0x00000010, 0x80000562, 0x00000010,
- 0x80000563, 0x00000010, 0x80000564, 0x00000010,
- 0x80000565, 0x00000010, 0x80000566, 0x00000010,
- 0x80000567, 0x00000010, 0x80000568, 0x00000010,
- 0x80000569, 0x00000010, 0x8000056a, 0x00000010,
- 0x8000056b, 0x00000010, 0x8000056c, 0x00000010,
- 0x8000056d, 0x00000010, 0x8000056e, 0x00000010,
- 0x8000056f, 0x00000010, 0x80000570, 0x00000010,
- 0x80000571, 0x00000010, 0x80000572, 0x00000010,
- 0x80000573, 0x00000010, 0x80000574, 0x00000010,
- 0x80000575, 0x00000010, 0x80000576, 0x00000010,
- 0x80000577, 0x00000010, 0x80000578, 0x00000010,
- 0x80000579, 0x00000010, 0x8000057a, 0x00000010,
- 0x8000057b, 0x00000010, 0x8000057c, 0x00000010,
- 0x8000057d, 0x00000010, 0x8000057e, 0x00000010,
- 0x8000057f, 0x00000010, 0x80000580, 0x00000010,
- 0x80000581, 0x00000010, 0x80000582, 0x00000010,
- 0x80000583, 0x00000010, 0x80000584, 0x00000010,
- 0x80000585, 0x00000010, 0x80000586, 0x00000010,
- 0x80001e01, 0x00000010, 0x80001e03, 0x00000010,
- 0x80001e05, 0x00000010, 0x80001e07, 0x00000010,
- 0x80001e09, 0x00000010, 0x80001e0b, 0x00000010,
- 0x80001e0d, 0x00000010, 0x80001e0f, 0x00000010,
- 0x80001e11, 0x00000010, 0x80001e13, 0x00000010,
- 0x80001e15, 0x00000010, 0x80001e17, 0x00000010,
- 0x80001e19, 0x00000010, 0x80001e1b, 0x00000010,
- 0x80001e1d, 0x00000010, 0x80001e1f, 0x00000010,
- 0x80001e21, 0x00000010, 0x80001e23, 0x00000010,
- 0x80001e25, 0x00000010, 0x80001e27, 0x00000010,
- 0x80001e29, 0x00000010, 0x80001e2b, 0x00000010,
- 0x80001e2d, 0x00000010, 0x80001e2f, 0x00000010,
- 0x80001e31, 0x00000010, 0x80001e33, 0x00000010,
- 0x80001e35, 0x00000010, 0x80001e37, 0x00000010,
- 0x80001e39, 0x00000010, 0x80001e3b, 0x00000010,
- 0x80001e3d, 0x00000010, 0x80001e3f, 0x00000010,
- 0x80001e41, 0x00000010, 0x80001e43, 0x00000010,
- 0x80001e45, 0x00000010, 0x80001e47, 0x00000010,
- 0x80001e49, 0x00000010, 0x80001e4b, 0x00000010,
- 0x80001e4d, 0x00000010, 0x80001e4f, 0x00000010,
- 0x80001e51, 0x00000010, 0x80001e53, 0x00000010,
- 0x80001e55, 0x00000010, 0x80001e57, 0x00000010,
- 0x80001e59, 0x00000010, 0x80001e5b, 0x00000010,
- 0x80001e5d, 0x00000010, 0x80001e5f, 0x00000010,
- 0x80001e61, 0x00000010, 0x80001e63, 0x00000010,
- 0x80001e65, 0x00000010, 0x80001e67, 0x00000010,
- 0x80001e69, 0x00000010, 0x80001e6b, 0x00000010,
- 0x80001e6d, 0x00000010, 0x80001e6f, 0x00000010,
- 0x80001e71, 0x00000010, 0x80001e73, 0x00000010,
- 0x80001e75, 0x00000010, 0x80001e77, 0x00000010,
- 0x80001e79, 0x00000010, 0x80001e7b, 0x00000010,
- 0x80001e7d, 0x00000010, 0x80001e7f, 0x00000010,
- 0x80001e81, 0x00000010, 0x80001e83, 0x00000010,
- 0x80001e85, 0x00000010, 0x80001e87, 0x00000010,
- 0x80001e89, 0x00000010, 0x80001e8b, 0x00000010,
- 0x80001e8d, 0x00000010, 0x80001e8f, 0x00000010,
- 0x80001e91, 0x00000010, 0x80001e93, 0x00000010,
- 0x80001e95, 0x00000010, 0x80001ea1, 0x00000010,
- 0x80001ea3, 0x00000010, 0x80001ea5, 0x00000010,
- 0x80001ea7, 0x00000010, 0x80001ea9, 0x00000010,
- 0x80001eab, 0x00000010, 0x80001ead, 0x00000010,
- 0x80001eaf, 0x00000010, 0x80001eb1, 0x00000010,
- 0x80001eb3, 0x00000010, 0x80001eb5, 0x00000010,
- 0x80001eb7, 0x00000010, 0x80001eb9, 0x00000010,
- 0x80001ebb, 0x00000010, 0x80001ebd, 0x00000010,
- 0x80001ebf, 0x00000010, 0x80001ec1, 0x00000010,
- 0x80001ec3, 0x00000010, 0x80001ec5, 0x00000010,
- 0x80001ec7, 0x00000010, 0x80001ec9, 0x00000010,
- 0x80001ecb, 0x00000010, 0x80001ecd, 0x00000010,
- 0x80001ecf, 0x00000010, 0x80001ed1, 0x00000010,
- 0x80001ed3, 0x00000010, 0x80001ed5, 0x00000010,
- 0x80001ed7, 0x00000010, 0x80001ed9, 0x00000010,
- 0x80001edb, 0x00000010, 0x80001edd, 0x00000010,
- 0x80001edf, 0x00000010, 0x80001ee1, 0x00000010,
- 0x80001ee3, 0x00000010, 0x80001ee5, 0x00000010,
- 0x80001ee7, 0x00000010, 0x80001ee9, 0x00000010,
- 0x80001eeb, 0x00000010, 0x80001eed, 0x00000010,
- 0x80001eef, 0x00000010, 0x80001ef1, 0x00000010,
- 0x80001ef3, 0x00000010, 0x80001ef5, 0x00000010,
- 0x80001ef7, 0x00000010, 0x80001ef9, 0x00000010,
- 0x80001f00, 0x00000010, 0x80001f01, 0x00000010,
- 0x80001f02, 0x00000010, 0x80001f03, 0x00000010,
- 0x80001f04, 0x00000010, 0x80001f05, 0x00000010,
- 0x80001f06, 0x00000010, 0x80001f07, 0x00000010,
- 0x80001f10, 0x00000010, 0x80001f11, 0x00000010,
- 0x80001f12, 0x00000010, 0x80001f13, 0x00000010,
- 0x80001f14, 0x00000010, 0x80001f15, 0x00000010,
- 0x80001f20, 0x00000010, 0x80001f21, 0x00000010,
- 0x80001f22, 0x00000010, 0x80001f23, 0x00000010,
- 0x80001f24, 0x00000010, 0x80001f25, 0x00000010,
- 0x80001f26, 0x00000010, 0x80001f27, 0x00000010,
- 0x80001f30, 0x00000010, 0x80001f31, 0x00000010,
- 0x80001f32, 0x00000010, 0x80001f33, 0x00000010,
- 0x80001f34, 0x00000010, 0x80001f35, 0x00000010,
- 0x80001f36, 0x00000010, 0x80001f37, 0x00000010,
- 0x80001f40, 0x00000010, 0x80001f41, 0x00000010,
- 0x80001f42, 0x00000010, 0x80001f43, 0x00000010,
- 0x80001f44, 0x00000010, 0x80001f45, 0x00000010,
- 0x80001f51, 0x00000010, 0x80001f53, 0x00000010,
- 0x80001f55, 0x00000010, 0x80001f57, 0x00000010,
- 0x80001f60, 0x00000010, 0x80001f61, 0x00000010,
- 0x80001f62, 0x00000010, 0x80001f63, 0x00000010,
- 0x80001f64, 0x00000010, 0x80001f65, 0x00000010,
- 0x80001f66, 0x00000010, 0x80001f67, 0x00000000,
- 0x80001f80, 0x00000010, 0x80001f80, 0x00000000,
- 0x80001f81, 0x00000010, 0x80001f81, 0x00000000,
- 0x80001f82, 0x00000010, 0x80001f82, 0x00000000,
- 0x80001f83, 0x00000010, 0x80001f83, 0x00000000,
- 0x80001f84, 0x00000010, 0x80001f84, 0x00000000,
- 0x80001f85, 0x00000010, 0x80001f85, 0x00000000,
- 0x80001f86, 0x00000010, 0x80001f86, 0x00000000,
- 0x80001f87, 0x00000010, 0x80001f87, 0x00000000,
- 0x80001f90, 0x00000010, 0x80001f90, 0x00000000,
- 0x80001f91, 0x00000010, 0x80001f91, 0x00000000,
- 0x80001f92, 0x00000010, 0x80001f92, 0x00000000,
- 0x80001f93, 0x00000010, 0x80001f93, 0x00000000,
- 0x80001f94, 0x00000010, 0x80001f94, 0x00000000,
- 0x80001f95, 0x00000010, 0x80001f95, 0x00000000,
- 0x80001f96, 0x00000010, 0x80001f96, 0x00000000,
- 0x80001f97, 0x00000010, 0x80001f97, 0x00000000,
- 0x80001fa0, 0x00000010, 0x80001fa0, 0x00000000,
- 0x80001fa1, 0x00000010, 0x80001fa1, 0x00000000,
- 0x80001fa2, 0x00000010, 0x80001fa2, 0x00000000,
- 0x80001fa3, 0x00000010, 0x80001fa3, 0x00000000,
- 0x80001fa4, 0x00000010, 0x80001fa4, 0x00000000,
- 0x80001fa5, 0x00000010, 0x80001fa5, 0x00000000,
- 0x80001fa6, 0x00000010, 0x80001fa6, 0x00000000,
- 0x80001fa7, 0x00000010, 0x80001fa7, 0x00000010,
- 0x80001fb0, 0x00000010, 0x80001fb1, 0x00000010,
- 0x80001f70, 0x00000010, 0x80001f71, 0x00000000,
- 0x80001fb3, 0x00000010, 0x80001fb3, 0x00000010,
- 0x80001f72, 0x00000010, 0x80001f73, 0x00000010,
- 0x80001f74, 0x00000010, 0x80001f75, 0x00000000,
- 0x80001fc3, 0x00000010, 0x80001fc3, 0x00000010,
- 0x80001fd0, 0x00000010, 0x80001fd1, 0x00000010,
- 0x80001f76, 0x00000010, 0x80001f77, 0x00000010,
- 0x80001fe0, 0x00000010, 0x80001fe1, 0x00000010,
- 0x80001f7a, 0x00000010, 0x80001f7b, 0x00000010,
- 0x80001fe5, 0x00000010, 0x80001f78, 0x00000010,
- 0x80001f79, 0x00000010, 0x80001f7c, 0x00000010,
- 0x80001f7d, 0x00000000, 0x80001ff3, 0x00000010,
- 0x80001ff3, 0x00000010, 0x800003c9, 0x00000010,
- 0x8000006b, 0x00000010, 0x800000e5, 0x00000010,
- 0x80002170, 0x00000010, 0x80002171, 0x00000010,
- 0x80002172, 0x00000010, 0x80002173, 0x00000010,
- 0x80002174, 0x00000010, 0x80002175, 0x00000010,
- 0x80002176, 0x00000010, 0x80002177, 0x00000010,
- 0x80002178, 0x00000010, 0x80002179, 0x00000010,
- 0x8000217a, 0x00000010, 0x8000217b, 0x00000010,
- 0x8000217c, 0x00000010, 0x8000217d, 0x00000010,
- 0x8000217e, 0x00000010, 0x8000217f, 0x00000010,
- 0x800024d0, 0x00000010, 0x800024d1, 0x00000010,
- 0x800024d2, 0x00000010, 0x800024d3, 0x00000010,
- 0x800024d4, 0x00000010, 0x800024d5, 0x00000010,
- 0x800024d6, 0x00000010, 0x800024d7, 0x00000010,
- 0x800024d8, 0x00000010, 0x800024d9, 0x00000010,
- 0x800024da, 0x00000010, 0x800024db, 0x00000010,
- 0x800024dc, 0x00000010, 0x800024dd, 0x00000010,
- 0x800024de, 0x00000010, 0x800024df, 0x00000010,
- 0x800024e0, 0x00000010, 0x800024e1, 0x00000010,
- 0x800024e2, 0x00000010, 0x800024e3, 0x00000010,
- 0x800024e4, 0x00000010, 0x800024e5, 0x00000010,
- 0x800024e6, 0x00000010, 0x800024e7, 0x00000010,
- 0x800024e8, 0x00000010, 0x800024e9, 0x00000010,
- 0x8000ff41, 0x00000010, 0x8000ff42, 0x00000010,
- 0x8000ff43, 0x00000010, 0x8000ff44, 0x00000010,
- 0x8000ff45, 0x00000010, 0x8000ff46, 0x00000010,
- 0x8000ff47, 0x00000010, 0x8000ff48, 0x00000010,
- 0x8000ff49, 0x00000010, 0x8000ff4a, 0x00000010,
- 0x8000ff4b, 0x00000010, 0x8000ff4c, 0x00000010,
- 0x8000ff4d, 0x00000010, 0x8000ff4e, 0x00000010,
- 0x8000ff4f, 0x00000010, 0x8000ff50, 0x00000010,
- 0x8000ff51, 0x00000010, 0x8000ff52, 0x00000010,
- 0x8000ff53, 0x00000010, 0x8000ff54, 0x00000010,
- 0x8000ff55, 0x00000010, 0x8000ff56, 0x00000010,
- 0x8000ff57, 0x00000010, 0x8000ff58, 0x00000010,
- 0x8000ff59, 0x00000010, 0x8000ff5a, 0x00000010,
- 0x80010428, 0x00000010, 0x80010429, 0x00000010,
- 0x8001042a, 0x00000010, 0x8001042b, 0x00000010,
- 0x8001042c, 0x00000010, 0x8001042d, 0x00000010,
- 0x8001042e, 0x00000010, 0x8001042f, 0x00000010,
- 0x80010430, 0x00000010, 0x80010431, 0x00000010,
- 0x80010432, 0x00000010, 0x80010433, 0x00000010,
- 0x80010434, 0x00000010, 0x80010435, 0x00000010,
- 0x80010436, 0x00000010, 0x80010437, 0x00000010,
- 0x80010438, 0x00000010, 0x80010439, 0x00000010,
- 0x8001043a, 0x00000010, 0x8001043b, 0x00000010,
- 0x8001043c, 0x00000010, 0x8001043d, 0x00000010,
- 0x8001043e, 0x00000010, 0x8001043f, 0x00000010,
- 0x80010440, 0x00000010, 0x80010441, 0x00000010,
- 0x80010442, 0x00000010, 0x80010443, 0x00000010,
- 0x80010444, 0x00000010, 0x80010445, 0x00000010,
- 0x80010446, 0x00000010, 0x80010447, 0x00000010,
- 0x80010448, 0x00000010, 0x80010449, 0x00000010,
- 0x8001044a, 0x00000010, 0x8001044b, 0x00000010,
- 0x8001044c, 0x00000010, 0x8001044d,
-};
-
-
-/*
- * Cased characters and non-spacing marks (for casemap context)
- */
-
-#define CASEMAP_CTX_BITS_0 9
-#define CASEMAP_CTX_BITS_1 7
-#define CASEMAP_CTX_BITS_2 5
-
-#define CTX_CASED 1
-#define CTX_NSM 2
-
-static const unsigned short v320_casemap_ctx_imap[] = {
- 272, 400, 528, 656, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 912,
- 1040, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 1168, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 784, 784, 784, 784,
- 0, 0, 1, 1, 0, 2, 3, 3,
- 4, 4, 4, 4, 4, 5, 6, 4,
- 4, 7, 8, 4, 4, 9, 0, 0,
- 10, 10, 11, 11, 12, 13, 14, 15,
- 4, 4, 4, 4, 16, 4, 14, 17,
- 18, 19, 20, 21, 22, 23, 24, 0,
- 0, 0, 25, 26, 0, 0, 27, 28,
- 29, 30, 31, 0, 0, 32, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 33, 34, 35, 36, 37, 34, 38, 36,
- 39, 34, 40, 41, 33, 34, 42, 0,
- 37, 43, 44, 0, 39, 0, 45, 0,
- 0, 46, 47, 0, 0, 48, 49, 0,
- 0, 0, 50, 0, 0, 0, 51, 0,
- 0, 52, 53, 0, 0, 54, 55, 0,
- 56, 57, 0, 58, 59, 60, 61, 0,
- 0, 62, 56, 0, 0, 4, 63, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 64, 64, 65, 65, 0, 66, 67, 0,
- 68, 0, 0, 0, 0, 69, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 4, 4, 4, 70, 4, 4, 71,
- 72, 4, 73, 74, 4, 75, 76, 77,
- 0, 0, 0, 78, 0, 0, 79, 80,
- 81, 82, 83, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 84, 0, 0, 85, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 86, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 11, 87, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 88, 9, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 89, 90, 91, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 4, 92, 4, 93, 94, 95, 4,
- 96, 97, 98, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 99, 100, 5,
- 92, 92, 14, 14, 101, 101, 102, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const struct {
- unsigned char tbl[32];
-} v320_casemap_ctx_table[] = {
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
- }},
- {{
- 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 1, 1, 0, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 0, 2,
- }},
- {{
- 0, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 0, 0, 2, 2, 0, 2, 2, 2, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
- }},
- {{
- 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0,
- 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 2, 2, 0, 0, 0, 0, 2, 2, 0, 0, 2, 2, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 2, 2, 2, 2, 2, 0, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2,
- }},
- {{
- 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
- }},
- {{
- 2, 0, 0, 0, 0, 0, 2, 2, 2, 0, 2, 2, 2, 2, 0, 0, 0,
- 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
- 0, 2, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,
- }},
- {{
- 2, 2, 2, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2,
- 0, 2, 0, 0, 0, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1,
- 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0,
- }},
- {{
- 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1,
- 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0,
- }},
- {{
- 0, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1,
- 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1,
- }},
- {{
- 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 2, 0,
- }},
- {{
- 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2,
- }},
- {{
- 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
- }},
- {{
- 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1,
- }},
- {{
- 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1,
- 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0,
- }},
- {{
- 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
- }},
- {{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- }},
- {{
- 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
-};
-
-/*
- * Case Folding
- */
-
-#define CASE_FOLDING_BITS_0 9
-#define CASE_FOLDING_BITS_1 7
-#define CASE_FOLDING_BITS_2 5
-
-static const unsigned short v320_case_folding_imap[] = {
- 272, 400, 528, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 784,
- 912, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 656, 656, 656, 656, 656, 656, 656, 656,
- 0, 0, 1, 0, 0, 2, 3, 0,
- 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 0, 0, 0, 0, 0, 0,
- 0, 0, 14, 0, 15, 16, 17, 18,
- 19, 20, 0, 21, 22, 23, 24, 25,
- 26, 27, 28, 0, 29, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 30, 31, 32, 33, 34, 35, 36, 37,
- 38, 39, 40, 41, 42, 43, 44, 45,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 46, 0, 47, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 48, 49, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 50, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 51, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 52, 53, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const struct {
- unsigned short tbl[32];
-} v320_case_folding_table[] = {
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11,
- 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, 27, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- 51, 0, 52, 53, 54, 55, 56, 57, 58, 59,
- }},
- {{
- 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66,
- 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0,
- 72, 0, 73, 0, 74, 0, 75, 0, 76, 0,
- }},
- {{
- 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82,
- 0, 83, 0, 84, 0, 87, 0, 88, 0, 89, 0,
- 90, 0, 0, 91, 0, 92, 0, 93, 0, 94,
- }},
- {{
- 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 101,
- 0, 102, 0, 103, 0, 104, 0, 105, 0, 106, 0,
- 107, 0, 108, 0, 109, 0, 110, 0, 111, 0,
- }},
- {{
- 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117,
- 0, 118, 0, 119, 0, 120, 0, 121, 0, 122, 0,
- 123, 0, 124, 125, 0, 126, 0, 127, 0, 128,
- }},
- {{
- 0, 129, 130, 0, 131, 0, 132, 133, 0, 134, 135,
- 136, 0, 0, 137, 138, 139, 140, 0, 141, 142, 0,
- 143, 144, 145, 0, 0, 0, 146, 147, 0, 148,
- }},
- {{
- 149, 0, 150, 0, 151, 0, 152, 153, 0, 154, 0,
- 0, 155, 0, 156, 157, 0, 158, 159, 160, 0, 161,
- 0, 162, 163, 0, 0, 0, 164, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 165, 166, 0, 167, 168, 0, 169,
- 170, 0, 171, 0, 172, 0, 173, 0, 174, 0, 175,
- 0, 176, 0, 177, 0, 178, 0, 0, 179, 0,
- }},
- {{
- 180, 0, 181, 0, 182, 0, 183, 0, 184, 0, 185,
- 0, 186, 0, 187, 0, 188, 190, 191, 0, 192, 0,
- 193, 194, 195, 0, 196, 0, 197, 0, 198, 0,
- }},
- {{
- 199, 0, 200, 0, 201, 0, 202, 0, 203, 0, 204,
- 0, 205, 0, 206, 0, 207, 0, 208, 0, 209, 0,
- 210, 0, 211, 0, 212, 0, 213, 0, 214, 0,
- }},
- {{
- 215, 0, 216, 0, 217, 0, 218, 0, 219, 0, 220,
- 0, 221, 0, 222, 0, 223, 0, 224, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 226, 0, 227, 228, 229,
- 0, 230, 0, 231, 232, 233, 236, 237, 238, 239, 240,
- 241, 242, 243, 244, 245, 246, 247, 248, 249, 250,
- }},
- {{
- 251, 252, 0, 253, 254, 255, 256, 257, 258, 259, 260,
- 261, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 266, 267, 0, 0, 0, 268,
- 269, 0, 270, 0, 271, 0, 272, 0, 273, 0,
- }},
- {{
- 274, 0, 275, 0, 276, 0, 277, 0, 278, 0, 279,
- 0, 280, 0, 281, 0, 282, 283, 284, 0, 285, 286,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
- 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
- 309, 310, 311, 312, 313, 314, 315, 316, 317, 318,
- }},
- {{
- 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329,
- 330, 331, 332, 333, 334, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 335, 0, 336, 0, 337, 0, 338, 0, 339, 0, 340,
- 0, 341, 0, 342, 0, 343, 0, 344, 0, 345, 0,
- 346, 0, 347, 0, 348, 0, 349, 0, 350, 0,
- }},
- {{
- 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352,
- 0, 353, 0, 354, 0, 355, 0, 356, 0, 357, 0,
- 358, 0, 359, 0, 360, 0, 361, 0, 362, 0,
- }},
- {{
- 363, 0, 364, 0, 365, 0, 366, 0, 367, 0, 368,
- 0, 369, 0, 370, 0, 371, 0, 372, 0, 373, 0,
- 374, 0, 375, 0, 376, 0, 377, 0, 378, 0,
- }},
- {{
- 0, 379, 0, 380, 0, 381, 0, 382, 0, 383, 0,
- 384, 0, 385, 0, 0, 386, 0, 387, 0, 388, 0,
- 389, 0, 390, 0, 391, 0, 392, 0, 393, 0,
- }},
- {{
- 394, 0, 395, 0, 396, 0, 397, 0, 398, 0, 399,
- 0, 400, 0, 401, 0, 402, 0, 403, 0, 404, 0,
- 0, 0, 405, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 406, 0, 407, 0, 408, 0, 409, 0, 410, 0, 411,
- 0, 412, 0, 413, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 414, 415, 416, 417, 418,
- 419, 420, 421, 422, 423, 424, 425, 426, 427, 428,
- }},
- {{
- 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439,
- 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450,
- 451, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 454, 0, 455, 0, 456, 0, 457, 0, 458, 0, 459,
- 0, 460, 0, 461, 0, 462, 0, 463, 0, 464, 0,
- 465, 0, 466, 0, 467, 0, 468, 0, 469, 0,
- }},
- {{
- 470, 0, 471, 0, 472, 0, 473, 0, 474, 0, 475,
- 0, 476, 0, 477, 0, 478, 0, 479, 0, 480, 0,
- 481, 0, 482, 0, 483, 0, 484, 0, 485, 0,
- }},
- {{
- 486, 0, 487, 0, 488, 0, 489, 0, 490, 0, 491,
- 0, 492, 0, 493, 0, 494, 0, 495, 0, 496, 0,
- 497, 0, 498, 0, 499, 0, 500, 0, 501, 0,
- }},
- {{
- 502, 0, 503, 0, 504, 0, 505, 0, 506, 0, 507,
- 0, 508, 0, 509, 0, 510, 0, 511, 0, 512, 0,
- 513, 0, 514, 0, 515, 0, 516, 0, 517, 0,
- }},
- {{
- 518, 0, 519, 0, 520, 0, 521, 0, 522, 0, 523,
- 0, 524, 0, 525, 0, 526, 0, 527, 0, 528, 0,
- 529, 531, 533, 535, 537, 539, 0, 0, 0, 0,
- }},
- {{
- 540, 0, 541, 0, 542, 0, 543, 0, 544, 0, 545,
- 0, 546, 0, 547, 0, 548, 0, 549, 0, 550, 0,
- 551, 0, 552, 0, 553, 0, 554, 0, 555, 0,
- }},
- {{
- 556, 0, 557, 0, 558, 0, 559, 0, 560, 0, 561,
- 0, 562, 0, 563, 0, 564, 0, 565, 0, 566, 0,
- 567, 0, 568, 0, 569, 0, 570, 0, 571, 0,
- }},
- {{
- 572, 0, 573, 0, 574, 0, 575, 0, 576, 0, 577,
- 0, 578, 0, 579, 0, 580, 0, 581, 0, 582, 0,
- 583, 0, 584, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 585, 586, 587,
- 588, 589, 590, 591, 592, 0, 0, 0, 0, 0, 0,
- 0, 0, 593, 594, 595, 596, 597, 598, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 599, 600, 601,
- 602, 603, 604, 605, 606, 0, 0, 0, 0, 0, 0,
- 0, 0, 607, 608, 609, 610, 611, 612, 613, 614,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 615, 616, 617,
- 618, 619, 620, 0, 0, 621, 0, 623, 0, 626, 0,
- 629, 0, 0, 632, 0, 633, 0, 634, 0, 635,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 636, 637, 638,
- 639, 640, 641, 642, 643, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 644, 646, 648, 650, 652, 654, 656, 658, 662, 665, 668,
- 671, 674, 677, 680, 683, 684, 686, 688, 690, 692, 694,
- 696, 698, 702, 705, 708, 711, 714, 717, 720, 723,
- }},
- {{
- 724, 726, 728, 730, 732, 734, 736, 738, 742, 745, 748,
- 751, 754, 757, 760, 763, 0, 0, 764, 766, 768, 0,
- 770, 772, 775, 776, 777, 778, 781, 0, 782, 0,
- }},
- {{
- 0, 0, 783, 785, 787, 0, 789, 791, 794, 795, 796,
- 797, 800, 0, 0, 0, 0, 0, 801, 804, 0, 0,
- 807, 809, 812, 813, 814, 815, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 816, 819, 822, 0, 824, 826, 829, 830, 831,
- 832, 833, 0, 0, 0, 0, 0, 834, 836, 838, 0,
- 840, 842, 845, 846, 847, 848, 851, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 852, 0, 0, 0, 853,
- 854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865,
- 866, 867, 868, 869, 870, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 871, 872, 873, 874, 875, 876, 877, 878, 879, 880,
- }},
- {{
- 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891,
- 892, 893, 894, 895, 896, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 897, 899, 901, 903, 906, 909, 911, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 913, 915, 917,
- 919, 921, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
- {{
- 0, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932,
- 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943,
- 944, 945, 946, 947, 948, 0, 0, 0, 0, 0,
- }},
- {{
- 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959,
- 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970,
- 971, 972, 973, 974, 975, 976, 977, 978, 979, 980,
- }},
- {{
- 981, 982, 983, 984, 985, 986, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- }},
-};
-static const unsigned long v320_case_folding_seq[] = {
- 0x00000000, 0x80000061, 0x80000062, 0x80000063,
- 0x80000064, 0x80000065, 0x80000066, 0x80000067,
- 0x80000068, 0x80000069, 0x80000131, 0x8000006a,
- 0x8000006b, 0x8000006c, 0x8000006d, 0x8000006e,
- 0x8000006f, 0x80000070, 0x80000071, 0x80000072,
- 0x80000073, 0x80000074, 0x80000075, 0x80000076,
- 0x80000077, 0x80000078, 0x80000079, 0x8000007a,
- 0x800003bc, 0x800000e0, 0x800000e1, 0x800000e2,
- 0x800000e3, 0x800000e4, 0x800000e5, 0x800000e6,
- 0x800000e7, 0x800000e8, 0x800000e9, 0x800000ea,
- 0x800000eb, 0x800000ec, 0x800000ed, 0x800000ee,
- 0x800000ef, 0x800000f0, 0x800000f1, 0x800000f2,
- 0x800000f3, 0x800000f4, 0x800000f5, 0x800000f6,
- 0x800000f8, 0x800000f9, 0x800000fa, 0x800000fb,
- 0x800000fc, 0x800000fd, 0x800000fe, 0x00000073,
- 0x80000073, 0x80000101, 0x80000103, 0x80000105,
- 0x80000107, 0x80000109, 0x8000010b, 0x8000010d,
- 0x8000010f, 0x80000111, 0x80000113, 0x80000115,
- 0x80000117, 0x80000119, 0x8000011b, 0x8000011d,
- 0x8000011f, 0x80000121, 0x80000123, 0x80000125,
- 0x80000127, 0x80000129, 0x8000012b, 0x8000012d,
- 0x8000012f, 0x00000069, 0x80000307, 0x80000069,
- 0x80000133, 0x80000135, 0x80000137, 0x8000013a,
- 0x8000013c, 0x8000013e, 0x80000140, 0x80000142,
- 0x80000144, 0x80000146, 0x80000148, 0x000002bc,
- 0x8000006e, 0x8000014b, 0x8000014d, 0x8000014f,
- 0x80000151, 0x80000153, 0x80000155, 0x80000157,
- 0x80000159, 0x8000015b, 0x8000015d, 0x8000015f,
- 0x80000161, 0x80000163, 0x80000165, 0x80000167,
- 0x80000169, 0x8000016b, 0x8000016d, 0x8000016f,
- 0x80000171, 0x80000173, 0x80000175, 0x80000177,
- 0x800000ff, 0x8000017a, 0x8000017c, 0x8000017e,
- 0x80000073, 0x80000253, 0x80000183, 0x80000185,
- 0x80000254, 0x80000188, 0x80000256, 0x80000257,
- 0x8000018c, 0x800001dd, 0x80000259, 0x8000025b,
- 0x80000192, 0x80000260, 0x80000263, 0x80000269,
- 0x80000268, 0x80000199, 0x8000026f, 0x80000272,
- 0x80000275, 0x800001a1, 0x800001a3, 0x800001a5,
- 0x80000280, 0x800001a8, 0x80000283, 0x800001ad,
- 0x80000288, 0x800001b0, 0x8000028a, 0x8000028b,
- 0x800001b4, 0x800001b6, 0x80000292, 0x800001b9,
- 0x800001bd, 0x800001c6, 0x800001c6, 0x800001c9,
- 0x800001c9, 0x800001cc, 0x800001cc, 0x800001ce,
- 0x800001d0, 0x800001d2, 0x800001d4, 0x800001d6,
- 0x800001d8, 0x800001da, 0x800001dc, 0x800001df,
- 0x800001e1, 0x800001e3, 0x800001e5, 0x800001e7,
- 0x800001e9, 0x800001eb, 0x800001ed, 0x800001ef,
- 0x0000006a, 0x8000030c, 0x800001f3, 0x800001f3,
- 0x800001f5, 0x80000195, 0x800001bf, 0x800001f9,
- 0x800001fb, 0x800001fd, 0x800001ff, 0x80000201,
- 0x80000203, 0x80000205, 0x80000207, 0x80000209,
- 0x8000020b, 0x8000020d, 0x8000020f, 0x80000211,
- 0x80000213, 0x80000215, 0x80000217, 0x80000219,
- 0x8000021b, 0x8000021d, 0x8000021f, 0x8000019e,
- 0x80000223, 0x80000225, 0x80000227, 0x80000229,
- 0x8000022b, 0x8000022d, 0x8000022f, 0x80000231,
- 0x80000233, 0x800003b9, 0x800003ac, 0x800003ad,
- 0x800003ae, 0x800003af, 0x800003cc, 0x800003cd,
- 0x800003ce, 0x000003b9, 0x00000308, 0x80000301,
- 0x800003b1, 0x800003b2, 0x800003b3, 0x800003b4,
- 0x800003b5, 0x800003b6, 0x800003b7, 0x800003b8,
- 0x800003b9, 0x800003ba, 0x800003bb, 0x800003bc,
- 0x800003bd, 0x800003be, 0x800003bf, 0x800003c0,
- 0x800003c1, 0x800003c3, 0x800003c4, 0x800003c5,
- 0x800003c6, 0x800003c7, 0x800003c8, 0x800003c9,
- 0x800003ca, 0x800003cb, 0x000003c5, 0x00000308,
- 0x80000301, 0x800003c3, 0x800003b2, 0x800003b8,
- 0x800003c6, 0x800003c0, 0x800003d9, 0x800003db,
- 0x800003dd, 0x800003df, 0x800003e1, 0x800003e3,
- 0x800003e5, 0x800003e7, 0x800003e9, 0x800003eb,
- 0x800003ed, 0x800003ef, 0x800003ba, 0x800003c1,
- 0x800003c3, 0x800003b8, 0x800003b5, 0x80000450,
- 0x80000451, 0x80000452, 0x80000453, 0x80000454,
- 0x80000455, 0x80000456, 0x80000457, 0x80000458,
- 0x80000459, 0x8000045a, 0x8000045b, 0x8000045c,
- 0x8000045d, 0x8000045e, 0x8000045f, 0x80000430,
- 0x80000431, 0x80000432, 0x80000433, 0x80000434,
- 0x80000435, 0x80000436, 0x80000437, 0x80000438,
- 0x80000439, 0x8000043a, 0x8000043b, 0x8000043c,
- 0x8000043d, 0x8000043e, 0x8000043f, 0x80000440,
- 0x80000441, 0x80000442, 0x80000443, 0x80000444,
- 0x80000445, 0x80000446, 0x80000447, 0x80000448,
- 0x80000449, 0x8000044a, 0x8000044b, 0x8000044c,
- 0x8000044d, 0x8000044e, 0x8000044f, 0x80000461,
- 0x80000463, 0x80000465, 0x80000467, 0x80000469,
- 0x8000046b, 0x8000046d, 0x8000046f, 0x80000471,
- 0x80000473, 0x80000475, 0x80000477, 0x80000479,
- 0x8000047b, 0x8000047d, 0x8000047f, 0x80000481,
- 0x8000048b, 0x8000048d, 0x8000048f, 0x80000491,
- 0x80000493, 0x80000495, 0x80000497, 0x80000499,
- 0x8000049b, 0x8000049d, 0x8000049f, 0x800004a1,
- 0x800004a3, 0x800004a5, 0x800004a7, 0x800004a9,
- 0x800004ab, 0x800004ad, 0x800004af, 0x800004b1,
- 0x800004b3, 0x800004b5, 0x800004b7, 0x800004b9,
- 0x800004bb, 0x800004bd, 0x800004bf, 0x800004c2,
- 0x800004c4, 0x800004c6, 0x800004c8, 0x800004ca,
- 0x800004cc, 0x800004ce, 0x800004d1, 0x800004d3,
- 0x800004d5, 0x800004d7, 0x800004d9, 0x800004db,
- 0x800004dd, 0x800004df, 0x800004e1, 0x800004e3,
- 0x800004e5, 0x800004e7, 0x800004e9, 0x800004eb,
- 0x800004ed, 0x800004ef, 0x800004f1, 0x800004f3,
- 0x800004f5, 0x800004f9, 0x80000501, 0x80000503,
- 0x80000505, 0x80000507, 0x80000509, 0x8000050b,
- 0x8000050d, 0x8000050f, 0x80000561, 0x80000562,
- 0x80000563, 0x80000564, 0x80000565, 0x80000566,
- 0x80000567, 0x80000568, 0x80000569, 0x8000056a,
- 0x8000056b, 0x8000056c, 0x8000056d, 0x8000056e,
- 0x8000056f, 0x80000570, 0x80000571, 0x80000572,
- 0x80000573, 0x80000574, 0x80000575, 0x80000576,
- 0x80000577, 0x80000578, 0x80000579, 0x8000057a,
- 0x8000057b, 0x8000057c, 0x8000057d, 0x8000057e,
- 0x8000057f, 0x80000580, 0x80000581, 0x80000582,
- 0x80000583, 0x80000584, 0x80000585, 0x80000586,
- 0x00000565, 0x80000582, 0x80001e01, 0x80001e03,
- 0x80001e05, 0x80001e07, 0x80001e09, 0x80001e0b,
- 0x80001e0d, 0x80001e0f, 0x80001e11, 0x80001e13,
- 0x80001e15, 0x80001e17, 0x80001e19, 0x80001e1b,
- 0x80001e1d, 0x80001e1f, 0x80001e21, 0x80001e23,
- 0x80001e25, 0x80001e27, 0x80001e29, 0x80001e2b,
- 0x80001e2d, 0x80001e2f, 0x80001e31, 0x80001e33,
- 0x80001e35, 0x80001e37, 0x80001e39, 0x80001e3b,
- 0x80001e3d, 0x80001e3f, 0x80001e41, 0x80001e43,
- 0x80001e45, 0x80001e47, 0x80001e49, 0x80001e4b,
- 0x80001e4d, 0x80001e4f, 0x80001e51, 0x80001e53,
- 0x80001e55, 0x80001e57, 0x80001e59, 0x80001e5b,
- 0x80001e5d, 0x80001e5f, 0x80001e61, 0x80001e63,
- 0x80001e65, 0x80001e67, 0x80001e69, 0x80001e6b,
- 0x80001e6d, 0x80001e6f, 0x80001e71, 0x80001e73,
- 0x80001e75, 0x80001e77, 0x80001e79, 0x80001e7b,
- 0x80001e7d, 0x80001e7f, 0x80001e81, 0x80001e83,
- 0x80001e85, 0x80001e87, 0x80001e89, 0x80001e8b,
- 0x80001e8d, 0x80001e8f, 0x80001e91, 0x80001e93,
- 0x80001e95, 0x00000068, 0x80000331, 0x00000074,
- 0x80000308, 0x00000077, 0x8000030a, 0x00000079,
- 0x8000030a, 0x00000061, 0x800002be, 0x80001e61,
- 0x80001ea1, 0x80001ea3, 0x80001ea5, 0x80001ea7,
- 0x80001ea9, 0x80001eab, 0x80001ead, 0x80001eaf,
- 0x80001eb1, 0x80001eb3, 0x80001eb5, 0x80001eb7,
- 0x80001eb9, 0x80001ebb, 0x80001ebd, 0x80001ebf,
- 0x80001ec1, 0x80001ec3, 0x80001ec5, 0x80001ec7,
- 0x80001ec9, 0x80001ecb, 0x80001ecd, 0x80001ecf,
- 0x80001ed1, 0x80001ed3, 0x80001ed5, 0x80001ed7,
- 0x80001ed9, 0x80001edb, 0x80001edd, 0x80001edf,
- 0x80001ee1, 0x80001ee3, 0x80001ee5, 0x80001ee7,
- 0x80001ee9, 0x80001eeb, 0x80001eed, 0x80001eef,
- 0x80001ef1, 0x80001ef3, 0x80001ef5, 0x80001ef7,
- 0x80001ef9, 0x80001f00, 0x80001f01, 0x80001f02,
- 0x80001f03, 0x80001f04, 0x80001f05, 0x80001f06,
- 0x80001f07, 0x80001f10, 0x80001f11, 0x80001f12,
- 0x80001f13, 0x80001f14, 0x80001f15, 0x80001f20,
- 0x80001f21, 0x80001f22, 0x80001f23, 0x80001f24,
- 0x80001f25, 0x80001f26, 0x80001f27, 0x80001f30,
- 0x80001f31, 0x80001f32, 0x80001f33, 0x80001f34,
- 0x80001f35, 0x80001f36, 0x80001f37, 0x80001f40,
- 0x80001f41, 0x80001f42, 0x80001f43, 0x80001f44,
- 0x80001f45, 0x000003c5, 0x80000313, 0x000003c5,
- 0x00000313, 0x80000300, 0x000003c5, 0x00000313,
- 0x80000301, 0x000003c5, 0x00000313, 0x80000342,
- 0x80001f51, 0x80001f53, 0x80001f55, 0x80001f57,
- 0x80001f60, 0x80001f61, 0x80001f62, 0x80001f63,
- 0x80001f64, 0x80001f65, 0x80001f66, 0x80001f67,
- 0x00001f00, 0x800003b9, 0x00001f01, 0x800003b9,
- 0x00001f02, 0x800003b9, 0x00001f03, 0x800003b9,
- 0x00001f04, 0x800003b9, 0x00001f05, 0x800003b9,
- 0x00001f06, 0x800003b9, 0x00001f07, 0x800003b9,
- 0x00001f00, 0x800003b9, 0x80001f80, 0x00001f01,
- 0x800003b9, 0x80001f81, 0x00001f02, 0x800003b9,
- 0x80001f82, 0x00001f03, 0x800003b9, 0x80001f83,
- 0x00001f04, 0x800003b9, 0x80001f84, 0x00001f05,
- 0x800003b9, 0x80001f85, 0x00001f06, 0x800003b9,
- 0x80001f86, 0x00001f07, 0x800003b9, 0x80001f87,
- 0x00001f20, 0x800003b9, 0x00001f21, 0x800003b9,
- 0x00001f22, 0x800003b9, 0x00001f23, 0x800003b9,
- 0x00001f24, 0x800003b9, 0x00001f25, 0x800003b9,
- 0x00001f26, 0x800003b9, 0x00001f27, 0x800003b9,
- 0x00001f20, 0x800003b9, 0x80001f90, 0x00001f21,
- 0x800003b9, 0x80001f91, 0x00001f22, 0x800003b9,
- 0x80001f92, 0x00001f23, 0x800003b9, 0x80001f93,
- 0x00001f24, 0x800003b9, 0x80001f94, 0x00001f25,
- 0x800003b9, 0x80001f95, 0x00001f26, 0x800003b9,
- 0x80001f96, 0x00001f27, 0x800003b9, 0x80001f97,
- 0x00001f60, 0x800003b9, 0x00001f61, 0x800003b9,
- 0x00001f62, 0x800003b9, 0x00001f63, 0x800003b9,
- 0x00001f64, 0x800003b9, 0x00001f65, 0x800003b9,
- 0x00001f66, 0x800003b9, 0x00001f67, 0x800003b9,
- 0x00001f60, 0x800003b9, 0x80001fa0, 0x00001f61,
- 0x800003b9, 0x80001fa1, 0x00001f62, 0x800003b9,
- 0x80001fa2, 0x00001f63, 0x800003b9, 0x80001fa3,
- 0x00001f64, 0x800003b9, 0x80001fa4, 0x00001f65,
- 0x800003b9, 0x80001fa5, 0x00001f66, 0x800003b9,
- 0x80001fa6, 0x00001f67, 0x800003b9, 0x80001fa7,
- 0x00001f70, 0x800003b9, 0x000003b1, 0x800003b9,
- 0x000003ac, 0x800003b9, 0x000003b1, 0x80000342,
- 0x000003b1, 0x00000342, 0x800003b9, 0x80001fb0,
- 0x80001fb1, 0x80001f70, 0x80001f71, 0x000003b1,
- 0x800003b9, 0x80001fb3, 0x800003b9, 0x00001f74,
- 0x800003b9, 0x000003b7, 0x800003b9, 0x000003ae,
- 0x800003b9, 0x000003b7, 0x80000342, 0x000003b7,
- 0x00000342, 0x800003b9, 0x80001f72, 0x80001f73,
- 0x80001f74, 0x80001f75, 0x000003b7, 0x800003b9,
- 0x80001fc3, 0x000003b9, 0x00000308, 0x80000300,
- 0x000003b9, 0x00000308, 0x80000301, 0x000003b9,
- 0x80000342, 0x000003b9, 0x00000308, 0x80000342,
- 0x80001fd0, 0x80001fd1, 0x80001f76, 0x80001f77,
- 0x000003c5, 0x00000308, 0x80000300, 0x000003c5,
- 0x00000308, 0x80000301, 0x000003c1, 0x80000313,
- 0x000003c5, 0x80000342, 0x000003c5, 0x00000308,
- 0x80000342, 0x80001fe0, 0x80001fe1, 0x80001f7a,
- 0x80001f7b, 0x80001fe5, 0x00001f7c, 0x800003b9,
- 0x000003c9, 0x800003b9, 0x000003ce, 0x800003b9,
- 0x000003c9, 0x80000342, 0x000003c9, 0x00000342,
- 0x800003b9, 0x80001f78, 0x80001f79, 0x80001f7c,
- 0x80001f7d, 0x000003c9, 0x800003b9, 0x80001ff3,
- 0x800003c9, 0x8000006b, 0x800000e5, 0x80002170,
- 0x80002171, 0x80002172, 0x80002173, 0x80002174,
- 0x80002175, 0x80002176, 0x80002177, 0x80002178,
- 0x80002179, 0x8000217a, 0x8000217b, 0x8000217c,
- 0x8000217d, 0x8000217e, 0x8000217f, 0x800024d0,
- 0x800024d1, 0x800024d2, 0x800024d3, 0x800024d4,
- 0x800024d5, 0x800024d6, 0x800024d7, 0x800024d8,
- 0x800024d9, 0x800024da, 0x800024db, 0x800024dc,
- 0x800024dd, 0x800024de, 0x800024df, 0x800024e0,
- 0x800024e1, 0x800024e2, 0x800024e3, 0x800024e4,
- 0x800024e5, 0x800024e6, 0x800024e7, 0x800024e8,
- 0x800024e9, 0x00000066, 0x80000066, 0x00000066,
- 0x80000069, 0x00000066, 0x8000006c, 0x00000066,
- 0x00000066, 0x80000069, 0x00000066, 0x00000066,
- 0x8000006c, 0x00000073, 0x80000074, 0x00000073,
- 0x80000074, 0x00000574, 0x80000576, 0x00000574,
- 0x80000565, 0x00000574, 0x8000056b, 0x0000057e,
- 0x80000576, 0x00000574, 0x8000056d, 0x8000ff41,
- 0x8000ff42, 0x8000ff43, 0x8000ff44, 0x8000ff45,
- 0x8000ff46, 0x8000ff47, 0x8000ff48, 0x8000ff49,
- 0x8000ff4a, 0x8000ff4b, 0x8000ff4c, 0x8000ff4d,
- 0x8000ff4e, 0x8000ff4f, 0x8000ff50, 0x8000ff51,
- 0x8000ff52, 0x8000ff53, 0x8000ff54, 0x8000ff55,
- 0x8000ff56, 0x8000ff57, 0x8000ff58, 0x8000ff59,
- 0x8000ff5a, 0x80010428, 0x80010429, 0x8001042a,
- 0x8001042b, 0x8001042c, 0x8001042d, 0x8001042e,
- 0x8001042f, 0x80010430, 0x80010431, 0x80010432,
- 0x80010433, 0x80010434, 0x80010435, 0x80010436,
- 0x80010437, 0x80010438, 0x80010439, 0x8001043a,
- 0x8001043b, 0x8001043c, 0x8001043d, 0x8001043e,
- 0x8001043f, 0x80010440, 0x80010441, 0x80010442,
- 0x80010443, 0x80010444, 0x80010445, 0x80010446,
- 0x80010447, 0x80010448, 0x80010449, 0x8001044a,
- 0x8001044b, 0x8001044c, 0x8001044d,
-};
-
diff --git a/contrib/idn/idnkit-1.0-src/lib/unormalize.c b/contrib/idn/idnkit-1.0-src/lib/unormalize.c
deleted file mode 100644
index e809e39f..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/unormalize.c
+++ /dev/null
@@ -1,413 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: unormalize.c,v 1.1 2003/06/04 00:26:43 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2000,2001,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <idn/result.h>
-#include <idn/assert.h>
-#include <idn/logmacro.h>
-#include <idn/ucs4.h>
-#include <idn/unicode.h>
-#include <idn/unormalize.h>
-#include <idn/debug.h>
-
-#if !defined(HAVE_MEMMOVE) && defined(HAVE_BCOPY)
-#define memmove(a,b,c) bcopy((char *)(b),(char *)(a),(int)(c))
-#endif
-
-#define WORKBUF_SIZE 128
-#define WORKBUF_SIZE_MAX 10000
-
-typedef struct {
- idn__unicode_version_t version; /* Unicode version */
- int cur; /* pointing now processing character */
- int last; /* pointing just after the last character */
- int size; /* size of UCS and CLASS array */
- unsigned long *ucs4; /* UCS-4 characters */
- int *class; /* and their canonical classes */
- unsigned long ucs4_buf[WORKBUF_SIZE]; /* local buffer */
- int class_buf[WORKBUF_SIZE]; /* ditto */
-} workbuf_t;
-
-static idn_result_t normalize(idn__unicode_version_t version,
- int do_composition, int compat,
- const unsigned long *from,
- unsigned long *to, size_t tolen);
-static idn_result_t decompose(workbuf_t *wb, unsigned long c, int compat);
-static void get_class(workbuf_t *wb);
-static void reorder(workbuf_t *wb);
-static void compose(workbuf_t *wb);
-static idn_result_t flush_before_cur(workbuf_t *wb,
- unsigned long **top, size_t *tolenp);
-static void workbuf_init(workbuf_t *wb);
-static void workbuf_free(workbuf_t *wb);
-static idn_result_t workbuf_extend(workbuf_t *wb);
-static idn_result_t workbuf_append(workbuf_t *wb, unsigned long c);
-static void workbuf_shift(workbuf_t *wb, int shift);
-static void workbuf_removevoid(workbuf_t *wb);
-
-idn_result_t
-idn__unormalize_formkc(idn__unicode_version_t version,
- const unsigned long *from, unsigned long *to,
- size_t tolen) {
- assert(version != NULL && from != NULL && to != NULL && tolen >= 0);
- TRACE(("idn__unormalize_formkc(from=\"%s\", tolen=%d)\n",
- idn__debug_ucs4xstring(from, 50), tolen));
- return (normalize(version, 1, 1, from, to, tolen));
-}
-
-static idn_result_t
-normalize(idn__unicode_version_t version, int do_composition, int compat,
- const unsigned long *from, unsigned long *to, size_t tolen) {
- workbuf_t wb;
- idn_result_t r = idn_success;
-
- /*
- * Initialize working buffer.
- */
- workbuf_init(&wb);
- wb.version = version;
-
- while (*from != '\0') {
- unsigned long c;
-
- assert(wb.cur == wb.last);
-
- /*
- * Get one character from 'from'.
- */
- c = *from++;
-
- /*
- * Decompose it.
- */
- if ((r = decompose(&wb, c, compat)) != idn_success)
- goto ret;
-
- /*
- * Get canonical class.
- */
- get_class(&wb);
-
- /*
- * Reorder & compose.
- */
- for (; wb.cur < wb.last; wb.cur++) {
- if (wb.cur == 0) {
- continue;
- } else if (wb.class[wb.cur] > 0) {
- /*
- * This is not a starter. Try reordering.
- * Note that characters up to it are
- * already in canonical order.
- */
- reorder(&wb);
- continue;
- }
-
- /*
- * This is a starter character, and there are
- * some characters before it. Those characters
- * have been reordered properly, and
- * ready for composition.
- */
- if (do_composition && wb.class[0] == 0)
- compose(&wb);
-
- /*
- * If CUR points to a starter character,
- * then process of characters before CUR are
- * already finished, because any further
- * reordering/composition for them are blocked
- * by the starter CUR points.
- */
- if (wb.cur > 0 && wb.class[wb.cur] == 0) {
- /* Flush everything before CUR. */
- r = flush_before_cur(&wb, &to, &tolen);
- if (r != idn_success)
- goto ret;
- }
- }
- }
-
- if (r == idn_success) {
- if (do_composition && wb.cur > 0 && wb.class[0] == 0) {
- /*
- * There is some characters left in WB.
- * They are ordered, but not composed yet.
- * Now CUR points just after the last character in WB,
- * and since compose() tries to compose characters
- * between top and CUR inclusive, we must make CUR
- * one character back during compose().
- */
- wb.cur--;
- compose(&wb);
- wb.cur++;
- }
- /*
- * Call this even when WB.CUR == 0, to make TO
- * NUL-terminated.
- */
- r = flush_before_cur(&wb, &to, &tolen);
- if (r != idn_success)
- goto ret;
- }
-
- if (tolen <= 0) {
- r = idn_buffer_overflow;
- goto ret;
- }
- *to = '\0';
-
-ret:
- workbuf_free(&wb);
- return (r);
-}
-
-static idn_result_t
-decompose(workbuf_t *wb, unsigned long c, int compat) {
- idn_result_t r;
- int dec_len;
-
-again:
- r = idn__unicode_decompose(wb->version, compat, wb->ucs4 + wb->last,
- wb->size - wb->last, c, &dec_len);
- switch (r) {
- case idn_success:
- wb->last += dec_len;
- return (idn_success);
- case idn_notfound:
- return (workbuf_append(wb, c));
- case idn_buffer_overflow:
- if ((r = workbuf_extend(wb)) != idn_success)
- return (r);
- if (wb->size > WORKBUF_SIZE_MAX) {
- WARNING(("idn__unormalize_form*: "
- "working buffer too large\n"));
- return (idn_nomemory);
- }
- goto again;
- default:
- return (r);
- }
- /* NOTREACHED */
-}
-
-static void
-get_class(workbuf_t *wb) {
- int i;
-
- for (i = wb->cur; i < wb->last; i++)
- wb->class[i] = idn__unicode_canonicalclass(wb->version,
- wb->ucs4[i]);
-}
-
-static void
-reorder(workbuf_t *wb) {
- unsigned long c;
- int i;
- int class;
-
- assert(wb != NULL);
-
- i = wb->cur;
- c = wb->ucs4[i];
- class = wb->class[i];
-
- while (i > 0 && wb->class[i - 1] > class) {
- wb->ucs4[i] = wb->ucs4[i - 1];
- wb->class[i] =wb->class[i - 1];
- i--;
- wb->ucs4[i] = c;
- wb->class[i] = class;
- }
-}
-
-static void
-compose(workbuf_t *wb) {
- int cur;
- unsigned long *ucs4;
- int *class;
- int last_class;
- int nvoids;
- int i;
- idn__unicode_version_t ver;
-
- assert(wb != NULL && wb->class[0] == 0);
-
- cur = wb->cur;
- ucs4 = wb->ucs4;
- class = wb->class;
- ver = wb->version;
-
- /*
- * If there are no decomposition sequence that begins with
- * the top character, composition is impossible.
- */
- if (!idn__unicode_iscompositecandidate(ver, ucs4[0]))
- return;
-
- last_class = 0;
- nvoids = 0;
- for (i = 1; i <= cur; i++) {
- unsigned long c;
- int cl = class[i];
-
- if ((last_class < cl || cl == 0) &&
- idn__unicode_compose(ver, ucs4[0], ucs4[i],
- &c) == idn_success) {
- /*
- * Replace the top character with the composed one.
- */
- ucs4[0] = c;
- class[0] = idn__unicode_canonicalclass(ver, c);
-
- class[i] = -1; /* void this character */
- nvoids++;
- } else {
- last_class = cl;
- }
- }
-
- /* Purge void characters, if any. */
- if (nvoids > 0)
- workbuf_removevoid(wb);
-}
-
-static idn_result_t
-flush_before_cur(workbuf_t *wb, unsigned long **top, size_t *tolenp) {
- if (*tolenp < wb->cur)
- return (idn_buffer_overflow);
-
- memcpy(*top, wb->ucs4, sizeof(**top) * wb->cur);
- *top += wb->cur;
- *tolenp -= wb->cur;
- workbuf_shift(wb, wb->cur);
-
- return (idn_success);
-}
-
-static void
-workbuf_init(workbuf_t *wb) {
- wb->cur = 0;
- wb->last = 0;
- wb->size = WORKBUF_SIZE;
- wb->ucs4 = wb->ucs4_buf;
- wb->class = wb->class_buf;
-}
-
-static void
-workbuf_free(workbuf_t *wb) {
- if (wb->ucs4 != wb->ucs4_buf) {
- free(wb->ucs4);
- free(wb->class);
- }
-}
-
-static idn_result_t
-workbuf_extend(workbuf_t *wb) {
- int newsize = wb->size * 3;
-
- if (wb->ucs4 == wb->ucs4_buf) {
- wb->ucs4 = malloc(sizeof(wb->ucs4[0]) * newsize);
- wb->class = malloc(sizeof(wb->class[0]) * newsize);
- } else {
- wb->ucs4 = realloc(wb->ucs4, sizeof(wb->ucs4[0]) * newsize);
- wb->class = realloc(wb->class, sizeof(wb->class[0]) * newsize);
- }
- if (wb->ucs4 == NULL || wb->class == NULL)
- return (idn_nomemory);
- else
- return (idn_success);
-}
-
-static idn_result_t
-workbuf_append(workbuf_t *wb, unsigned long c) {
- idn_result_t r;
-
- if (wb->last >= wb->size && (r = workbuf_extend(wb)) != idn_success)
- return (r);
- wb->ucs4[wb->last++] = c;
- return (idn_success);
-}
-
-static void
-workbuf_shift(workbuf_t *wb, int shift) {
- int nmove;
-
- assert(wb != NULL && wb->cur >= shift);
-
- nmove = wb->last - shift;
- (void)memmove(&wb->ucs4[0], &wb->ucs4[shift],
- nmove * sizeof(wb->ucs4[0]));
- (void)memmove(&wb->class[0], &wb->class[shift],
- nmove * sizeof(wb->class[0]));
- wb->cur -= shift;
- wb->last -= shift;
-}
-
-static void
-workbuf_removevoid(workbuf_t *wb) {
- int i, j;
- int last = wb->last;
-
- for (i = j = 0; i < last; i++) {
- if (wb->class[i] >= 0) {
- if (j < i) {
- wb->ucs4[j] = wb->ucs4[i];
- wb->class[j] = wb->class[i];
- }
- j++;
- }
- }
- wb->cur -= last - j;
- wb->last = j;
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/utf8.c b/contrib/idn/idnkit-1.0-src/lib/utf8.c
deleted file mode 100644
index a1810ccc..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/utf8.c
+++ /dev/null
@@ -1,276 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: utf8.c,v 1.1 2003/06/04 00:26:44 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stddef.h>
-
-#include <idn/assert.h>
-#include <idn/logmacro.h>
-#include <idn/utf8.h>
-#include <idn/debug.h>
-
-#define UTF8_WIDTH(c) \
- (((c) < 0x80) ? 1 : \
- ((c) < 0xc0) ? 0 : \
- ((c) < 0xe0) ? 2 : \
- ((c) < 0xf0) ? 3 : \
- ((c) < 0xf8) ? 4 : \
- ((c) < 0xfc) ? 5 : \
- ((c) < 0xfe) ? 6 : 0)
-
-#define VALID_CONT_BYTE(c) (0x80 <= (c) && (c) < 0xc0)
-
-int
-idn_utf8_mblen(const char *s) {
- int c = *(unsigned char *)s;
-
- assert(s != NULL);
-
-#if 0
- TRACE(("idn_utf8_mblen(s=<%s>)\n", idn__debug_hexstring(s, 6)));
-#endif
-
- return UTF8_WIDTH(c);
-}
-
-int
-idn_utf8_getmb(const char *s, size_t len, char *buf) {
- /* buf must be at least 7-bytes long */
- const unsigned char *p = (const unsigned char *)s;
- unsigned char *q = (unsigned char *)buf;
- int width = UTF8_WIDTH(*p);
- int w;
-
- assert(s != NULL);
-
-#if 0
- TRACE(("idn_utf8_getmb(s=<%s>,len=%d)\n",
- idn__debug_hexstring(s, 6), len));
-#endif
-
- if (width == 0 || len < width)
- return (0);
-
- /* Copy the first byte. */
- *q++ = *p++;
-
- /* .. and the rest. */
- w = width;
- while (--w > 0) {
- if (!VALID_CONT_BYTE(*p))
- return (0);
- *q++ = *p++;
- }
- return (width);
-}
-
-int
-idn_utf8_getwc(const char *s, size_t len, unsigned long *vp) {
- unsigned long v;
- unsigned long min;
- const unsigned char *p = (const unsigned char *)s;
- int c;
- int width;
- int rest;
-
- assert(s != NULL);
-
-#if 0
- TRACE(("idn_utf8_getwc(s=<%s>,len=%d)\n",
- idn__debug_hexstring(s, 10), len));
-#endif
-
- c = *p++;
- width = UTF8_WIDTH(c);
-
- switch (width) {
- case 0:
- return (0);
- case 1:
- v = c;
- min = 0;
- break;
- case 2:
- v = c & 0x1f;
- min = 0x80;
- break;
- case 3:
- v = c & 0xf;
- min = 0x800;
- break;
- case 4:
- v = c & 0x7;
- min = 0x10000;
- break;
- case 5:
- v = c & 3;
- min = 0x200000;
- break;
- case 6:
- v = c & 1;
- min = 0x4000000;
- break;
- default:
- FATAL(("idn_utf8_getint: internal error\n"));
- return (0);
- }
-
- if (len < width)
- return (0);
-
- rest = width - 1;
- while (rest-- > 0) {
- if (!VALID_CONT_BYTE(*p))
- return (0);
- v = (v << 6) | (*p & 0x3f);
- p++;
- }
-
- if (v < min)
- return (0);
-
- *vp = v;
- return (width);
-}
-
-int
-idn_utf8_putwc(char *s, size_t len, unsigned long v) {
- unsigned char *p = (unsigned char *)s;
- int mask;
- int off;
- int l;
-
- assert(s != NULL);
-
-#if 0
- TRACE(("idn_utf8_putwc(v=%lx)\n", v));
-#endif
-
- if (v < 0x80) {
- mask = 0;
- l = 1;
- } else if (v < 0x800) {
- mask = 0xc0;
- l = 2;
- } else if (v < 0x10000) {
- mask = 0xe0;
- l = 3;
- } else if (v < 0x200000) {
- mask = 0xf0;
- l = 4;
- } else if (v < 0x4000000) {
- mask = 0xf8;
- l = 5;
- } else if (v < 0x80000000) {
- mask = 0xfc;
- l = 6;
- } else {
- return (0);
- }
-
- if (len < l)
- return (0);
-
- off = 6 * (l - 1);
- *p++ = (v >> off) | mask;
- mask = 0x80;
- while (off > 0) {
- off -= 6;
- *p++ = ((v >> off) & 0x3f) | mask;
- }
- return l;
-}
-
-int
-idn_utf8_isvalidchar(const char *s) {
- unsigned long dummy;
-
- TRACE(("idn_utf8_isvalidchar(s=<%s>)\n",
- idn__debug_hexstring(s, 6)));
-
- return (idn_utf8_getwc(s, 6, &dummy) > 0);
-}
-
-int
-idn_utf8_isvalidstring(const char *s) {
- unsigned long dummy;
- int width;
-
- assert(s != NULL);
-
- TRACE(("idn_utf8_isvalidstring(s=<%s>)\n",
- idn__debug_hexstring(s, 20)));
-
- while (*s != '\0') {
- width = idn_utf8_getwc(s, 6, &dummy);
- if (width == 0)
- return (0);
- s += width;
- }
- return (1);
-}
-
-char *
-idn_utf8_findfirstbyte(const char *s, const char *known_top) {
- const unsigned char *p = (const unsigned char *)s;
- const unsigned char *t = (const unsigned char *)known_top;
-
- assert(s != NULL && known_top != NULL && known_top <= s);
-
- TRACE(("idn_utf8_findfirstbyte(s=<%s>)\n",
- idn__debug_hexstring(s, 8)));
-
- while (p >= t) {
- if (!VALID_CONT_BYTE(*p))
- break;
- p--;
- }
- if (p < t || UTF8_WIDTH(*p) == 0)
- return (NULL);
-
- return ((char *)p);
-}
diff --git a/contrib/idn/idnkit-1.0-src/lib/util.c b/contrib/idn/idnkit-1.0-src/lib/util.c
deleted file mode 100644
index f986bc4a..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/util.c
+++ /dev/null
@@ -1,162 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: util.c,v 1.1 2003/06/04 00:26:45 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2000,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#ifdef WIN32
-#include <windows.h>
-#undef ERROR
-#endif
-
-#include <stddef.h>
-
-#include <idn/assert.h>
-#include <idn/result.h>
-#include <idn/logmacro.h>
-#include <idn/util.h>
-#include <idn/ucs4.h>
-
-#ifdef WIN32
-#define IDNKEY_IDNKIT "Software\\JPNIC\\IDN"
-#endif
-
-/*
- * ASCII ctype macros.
- * Note that these macros evaluate the argument multiple times. Be careful.
- */
-#define ASCII_ISDIGIT(c) \
- ('0' <= (c) && (c) <= '9')
-#define ASCII_ISUPPER(c) \
- ('A' <= (c) && (c) <= 'Z')
-#define ASCII_ISLOWER(c) \
- ('a' <= (c) && (c) <= 'z')
-#define ASCII_ISALPHA(c) \
- (ASCII_ISUPPER(c) || ASCII_ISLOWER(c))
-#define ASCII_ISALNUM(c) \
- (ASCII_ISDIGIT(c) || ASCII_ISUPPER(c) || ASCII_ISLOWER(c))
-
-#define ASCII_TOUPPER(c) \
- (('a' <= (c) && (c) <= 'z') ? ((c) - 'a' + 'A') : (c))
-#define ASCII_TOLOWER(c) \
- (('A' <= (c) && (c) <= 'Z') ? ((c) - 'A' + 'a') : (c))
-
-int
-idn__util_asciihaveaceprefix(const char *str, const char *prefix) {
- assert(str != NULL && prefix != NULL);
-
- while (*prefix != '\0') {
- if (ASCII_TOLOWER(*str) != ASCII_TOLOWER(*prefix))
- return 0;
- str++;
- prefix++;
- }
-
- return (1);
-}
-
-int
-idn__util_ucs4haveaceprefix(const unsigned long *str, const char *prefix) {
- assert(str != NULL && prefix != NULL);
-
- while (*prefix != '\0') {
- if (ASCII_TOLOWER(*str) != ASCII_TOLOWER(*prefix))
- return 0;
- str++;
- prefix++;
- }
-
- return (1);
-}
-
-int
-idn__util_ucs4isasciirange(const unsigned long *str) {
- while (*str != '\0') {
- if (*str > 0x7f)
- return (0);
- str++;
- }
-
- return (1);
-}
-
-#ifdef WIN32
-int
-idn__util_getregistrystring(idn__util_hkey_t topkey, const char *name,
- char *str, size_t length)
-{
- HKEY top;
- LONG stat;
- HKEY hk;
- DWORD len, type;
-
- assert((topkey == idn__util_hkey_currentuser ||
- topkey == idn__util_hkey_localmachine) &&
- name != NULL && str != NULL);
-
- if (topkey == idn__util_hkey_currentuser) {
- top= HKEY_CURRENT_USER;
- } else { /* idn__util_hkey_localmachine */
- top = HKEY_LOCAL_MACHINE;
- }
-
- stat = RegOpenKeyEx(top, IDNKEY_IDNKIT, 0, KEY_READ, &hk);
- if (stat != ERROR_SUCCESS) {
- return (0);
- }
-
- len = (DWORD)length;
- stat = RegQueryValueEx(hk, (LPCTSTR)name, NULL,
- &type, (LPBYTE)str, &len);
- RegCloseKey(hk);
-
- if (stat != ERROR_SUCCESS || type != REG_SZ) {
- return (0);
- }
-
- return (1);
-}
-#endif /* WIN32 */
diff --git a/contrib/idn/idnkit-1.0-src/lib/version.c b/contrib/idn/idnkit-1.0-src/lib/version.c
deleted file mode 100644
index 0abbddec..00000000
--- a/contrib/idn/idnkit-1.0-src/lib/version.c
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: version.c,v 1.1 2003/06/04 00:26:45 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2001 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <idn/version.h>
-
-const char *
-idn_version_getstring(void) {
- return IDNKIT_VERSION;
-}
diff --git a/contrib/idn/idnkit-1.0-src/ltconfig b/contrib/idn/idnkit-1.0-src/ltconfig
deleted file mode 100755
index c1cb8c0b..00000000
--- a/contrib/idn/idnkit-1.0-src/ltconfig
+++ /dev/null
@@ -1,3114 +0,0 @@
-#! /bin/sh
-
-# ltconfig - Create a system-specific libtool.
-# Copyright (C) 1996-1999 Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# A lot of this script is taken from autoconf-2.10.
-
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-echo=echo
-if test "X$1" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
-elif test "X$1" = X--fallback-echo; then
- # Avoid inline document here, it may be left over
- :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
- # Yippee, $echo works!
- :
-else
- # Restart under the correct shell.
- exec "$SHELL" "$0" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
- # used as fallback echo
- shift
- cat <<EOF
-$*
-EOF
- exit 0
-fi
-
-# Find the correct PATH separator. Usually this is `:', but
-# DJGPP uses `;' like DOS.
-if test "X${PATH_SEPARATOR+set}" != Xset; then
- UNAME=${UNAME-`uname 2>/dev/null`}
- case X$UNAME in
- *-DOS) PATH_SEPARATOR=';' ;;
- *) PATH_SEPARATOR=':' ;;
- esac
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
-
-if test "X${echo_test_string+set}" != Xset; then
- # find a string as large as possible, as long as the shell can cope with it
- for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
- # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
- if (echo_test_string="`eval $cmd`") 2>/dev/null &&
- echo_test_string="`eval $cmd`" &&
- (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null; then
- break
- fi
- done
-fi
-
-if test "X`($echo '\t') 2>/dev/null`" != 'X\t' ||
- test "X`($echo "$echo_test_string") 2>/dev/null`" != X"$echo_test_string"; then
- # The Solaris, AIX, and Digital Unix default echo programs unquote
- # backslashes. This makes it impossible to quote backslashes using
- # echo "$something" | sed 's/\\/\\\\/g'
- #
- # So, first we look for a working echo in the user's PATH.
-
- IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
- for dir in $PATH /usr/ucb; do
- if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
- test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
- test "X`($dir/echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
- echo="$dir/echo"
- break
- fi
- done
- IFS="$save_ifs"
-
- if test "X$echo" = Xecho; then
- # We didn't find a better echo, so look for alternatives.
- if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
- test "X`(print -r "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
- # This shell has a builtin print -r that does the trick.
- echo='print -r'
- elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
- test "X$CONFIG_SHELL" != X/bin/ksh; then
- # If we have ksh, try running ltconfig again with it.
- ORIGINAL_CONFIG_SHELL="${CONFIG_SHELL-/bin/sh}"
- export ORIGINAL_CONFIG_SHELL
- CONFIG_SHELL=/bin/ksh
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$0" --no-reexec ${1+"$@"}
- else
- # Try using printf.
- echo='printf "%s\n"'
- if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
- test "X`($echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
- # Cool, printf works
- :
- elif test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' &&
- test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
- CONFIG_SHELL="$ORIGINAL_CONFIG_SHELL"
- export CONFIG_SHELL
- SHELL="$CONFIG_SHELL"
- export SHELL
- echo="$CONFIG_SHELL $0 --fallback-echo"
- elif test "X`("$CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' &&
- test "X`("$CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
- echo="$CONFIG_SHELL $0 --fallback-echo"
- else
- # maybe with a smaller string...
- prev=:
-
- for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
- if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null; then
- break
- fi
- prev="$cmd"
- done
-
- if test "$prev" != 'sed 50q "$0"'; then
- echo_test_string=`eval $prev`
- export echo_test_string
- exec "${ORIGINAL_CONFIG_SHELL}" "$0" ${1+"$@"}
- else
- # Oops. We lost completely, so just stick with echo.
- echo=echo
- fi
- fi
- fi
- fi
-fi
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e s/^X//'
-sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# The name of this program.
-progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'`
-
-# Constants:
-PROGRAM=ltconfig
-PACKAGE=libtool
-VERSION=1.3.5
-TIMESTAMP=" (1.385.2.206 2000/05/27 11:12:27)"
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-rm="rm -f"
-
-help="Try \`$progname --help' for more information."
-
-# Global variables:
-default_ofile=libtool
-can_build_shared=yes
-enable_shared=yes
-# All known linkers require a `.a' archive for static linking (except M$VC,
-# which needs '.lib').
-enable_static=yes
-enable_fast_install=yes
-enable_dlopen=unknown
-enable_win32_dll=no
-ltmain=
-silent=
-srcdir=
-ac_config_guess=
-ac_config_sub=
-host=
-nonopt=
-ofile="$default_ofile"
-verify_host=yes
-with_gcc=no
-with_gnu_ld=no
-need_locks=yes
-ac_ext=c
-objext=o
-libext=a
-exeext=
-cache_file=
-
-old_AR="$AR"
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-old_CPPFLAGS="$CPPFLAGS"
-old_LDFLAGS="$LDFLAGS"
-old_LD="$LD"
-old_LN_S="$LN_S"
-old_LIBS="$LIBS"
-old_NM="$NM"
-old_RANLIB="$RANLIB"
-old_DLLTOOL="$DLLTOOL"
-old_OBJDUMP="$OBJDUMP"
-old_AS="$AS"
-
-# Parse the command line options.
-args=
-prev=
-for option
-do
- case "$option" in
- -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
- *) optarg= ;;
- esac
-
- # If the previous option needs an argument, assign it.
- if test -n "$prev"; then
- eval "$prev=\$option"
- prev=
- continue
- fi
-
- case "$option" in
- --help) cat <<EOM
-Usage: $progname [OPTION]... [HOST [LTMAIN]]
-
-Generate a system-specific libtool script.
-
- --debug enable verbose shell tracing
- --disable-shared do not build shared libraries
- --disable-static do not build static libraries
- --disable-fast-install do not optimize for fast installation
- --enable-dlopen enable dlopen support
- --enable-win32-dll enable building dlls on win32 hosts
- --help display this help and exit
- --no-verify do not verify that HOST is a valid host type
--o, --output=FILE specify the output file [default=$default_ofile]
- --quiet same as \`--silent'
- --silent do not print informational messages
- --srcdir=DIR find \`config.guess' in DIR
- --version output version information and exit
- --with-gcc assume that the GNU C compiler will be used
- --with-gnu-ld assume that the C compiler uses the GNU linker
- --disable-lock disable file locking
- --cache-file=FILE configure cache file
-
-LTMAIN is the \`ltmain.sh' shell script fragment or \`ltmain.c' program
-that provides basic libtool functionality.
-
-HOST is the canonical host system name [default=guessed].
-EOM
- exit 0
- ;;
-
- --debug)
- echo "$progname: enabling shell trace mode"
- set -x
- ;;
-
- --disable-shared) enable_shared=no ;;
-
- --disable-static) enable_static=no ;;
-
- --disable-fast-install) enable_fast_install=no ;;
-
- --enable-dlopen) enable_dlopen=yes ;;
-
- --enable-win32-dll) enable_win32_dll=yes ;;
-
- --quiet | --silent) silent=yes ;;
-
- --srcdir) prev=srcdir ;;
- --srcdir=*) srcdir="$optarg" ;;
-
- --no-verify) verify_host=no ;;
-
- --output | -o) prev=ofile ;;
- --output=*) ofile="$optarg" ;;
-
- --version) echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"; exit 0 ;;
-
- --with-gcc) with_gcc=yes ;;
- --with-gnu-ld) with_gnu_ld=yes ;;
-
- --disable-lock) need_locks=no ;;
-
- --cache-file=*) cache_file="$optarg" ;;
-
- -*)
- echo "$progname: unrecognized option \`$option'" 1>&2
- echo "$help" 1>&2
- exit 1
- ;;
-
- *)
- if test -z "$ltmain"; then
- ltmain="$option"
- elif test -z "$host"; then
-# This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1
-# if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then
-# echo "$progname: warning \`$option' is not a valid host type" 1>&2
-# fi
- host="$option"
- else
- echo "$progname: too many arguments" 1>&2
- echo "$help" 1>&2
- exit 1
- fi ;;
- esac
-done
-
-if test -z "$ltmain"; then
- echo "$progname: you must specify a LTMAIN file" 1>&2
- echo "$help" 1>&2
- exit 1
-fi
-
-if test ! -f "$ltmain"; then
- echo "$progname: \`$ltmain' does not exist" 1>&2
- echo "$help" 1>&2
- exit 1
-fi
-
-# Quote any args containing shell metacharacters.
-ltconfig_args=
-for arg
-do
- case "$arg" in
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
- ltconfig_args="$ltconfig_args '$arg'" ;;
- *) ltconfig_args="$ltconfig_args $arg" ;;
- esac
-done
-
-# A relevant subset of AC_INIT.
-
-# File descriptor usage:
-# 0 standard input
-# 1 file creation
-# 2 errors and warnings
-# 3 some systems may open it to /dev/tty
-# 4 used on the Kubota Titan
-# 5 compiler messages saved in config.log
-# 6 checking for... messages and results
-if test "$silent" = yes; then
- exec 6>/dev/null
-else
- exec 6>&1
-fi
-exec 5>>./config.log
-
-# NLS nuisances.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
-if test "X${LC_ALL+set}" = Xset; then LC_ALL=C; export LC_ALL; fi
-if test "X${LANG+set}" = Xset; then LANG=C; export LANG; fi
-
-if test -n "$cache_file" && test -r "$cache_file"; then
- echo "loading cache $cache_file within ltconfig"
- . $cache_file
-fi
-
-if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
- # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
- if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
- ac_n= ac_c='
-' ac_t=' '
- else
- ac_n=-n ac_c= ac_t=
- fi
-else
- ac_n= ac_c='\c' ac_t=
-fi
-
-if test -z "$srcdir"; then
- # Assume the source directory is the same one as the path to LTMAIN.
- srcdir=`$echo "X$ltmain" | $Xsed -e 's%/[^/]*$%%'`
- test "$srcdir" = "$ltmain" && srcdir=.
-fi
-
-trap "$rm conftest*; exit 1" 1 2 15
-if test "$verify_host" = yes; then
- # Check for config.guess and config.sub.
- ac_aux_dir=
- for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
- if test -f $ac_dir/config.guess; then
- ac_aux_dir=$ac_dir
- break
- fi
- done
- if test -z "$ac_aux_dir"; then
- echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2
- echo "$help" 1>&2
- exit 1
- fi
- ac_config_guess=$ac_aux_dir/config.guess
- ac_config_sub=$ac_aux_dir/config.sub
-
- # Make sure we can run config.sub.
- if $SHELL $ac_config_sub sun4 >/dev/null 2>&1; then :
- else
- echo "$progname: cannot run $ac_config_sub" 1>&2
- echo "$help" 1>&2
- exit 1
- fi
-
- echo $ac_n "checking host system type""... $ac_c" 1>&6
-
- host_alias=$host
- case "$host_alias" in
- "")
- if host_alias=`$SHELL $ac_config_guess`; then :
- else
- echo "$progname: cannot guess host type; you must specify one" 1>&2
- echo "$help" 1>&2
- exit 1
- fi ;;
- esac
- host=`$SHELL $ac_config_sub $host_alias`
- echo "$ac_t$host" 1>&6
-
- # Make sure the host verified.
- test -z "$host" && exit 1
-
-elif test -z "$host"; then
- echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2
- echo "$help" 1>&2
- exit 1
-else
- host_alias=$host
-fi
-
-# Transform linux* to *-*-linux-gnu*, to support old configure scripts.
-case "$host_os" in
-linux-gnu*) ;;
-linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
-esac
-
-host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-case "$host_os" in
-aix3*)
- # AIX sometimes has problems with the GCC collect2 program. For some
- # reason, if we set the COLLECT_NAMES environment variable, the problems
- # vanish in a puff of smoke.
- if test "X${COLLECT_NAMES+set}" != Xset; then
- COLLECT_NAMES=
- export COLLECT_NAMES
- fi
- ;;
-esac
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR cru $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-# Set a sane default for `AR'.
-test -z "$AR" && AR=ar
-
-# Set a sane default for `OBJDUMP'.
-test -z "$OBJDUMP" && OBJDUMP=objdump
-
-# If RANLIB is not set, then run the test.
-if test "${RANLIB+set}" != "set"; then
- result=no
-
- echo $ac_n "checking for ranlib... $ac_c" 1>&6
- IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
- for dir in $PATH; do
- test -z "$dir" && dir=.
- if test -f $dir/ranlib || test -f $dir/ranlib$ac_exeext; then
- RANLIB="ranlib"
- result="ranlib"
- break
- fi
- done
- IFS="$save_ifs"
-
- echo "$ac_t$result" 1>&6
-fi
-
-if test -n "$RANLIB"; then
- old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
- old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
-fi
-
-# Set sane defaults for `DLLTOOL', `OBJDUMP', and `AS', used on cygwin.
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-test -z "$OBJDUMP" && OBJDUMP=objdump
-test -z "$AS" && AS=as
-
-# Check to see if we are using GCC.
-if test "$with_gcc" != yes || test -z "$CC"; then
- # If CC is not set, then try to find GCC or a usable CC.
- if test -z "$CC"; then
- echo $ac_n "checking for gcc... $ac_c" 1>&6
- IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
- for dir in $PATH; do
- test -z "$dir" && dir=.
- if test -f $dir/gcc || test -f $dir/gcc$ac_exeext; then
- CC="gcc"
- break
- fi
- done
- IFS="$save_ifs"
-
- if test -n "$CC"; then
- echo "$ac_t$CC" 1>&6
- else
- echo "$ac_t"no 1>&6
- fi
- fi
-
- # Not "gcc", so try "cc", rejecting "/usr/ucb/cc".
- if test -z "$CC"; then
- echo $ac_n "checking for cc... $ac_c" 1>&6
- IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
- cc_rejected=no
- for dir in $PATH; do
- test -z "$dir" && dir=.
- if test -f $dir/cc || test -f $dir/cc$ac_exeext; then
- if test "$dir/cc" = "/usr/ucb/cc"; then
- cc_rejected=yes
- continue
- fi
- CC="cc"
- break
- fi
- done
- IFS="$save_ifs"
- if test $cc_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $CC
- shift
- if test $# -gt 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same name, so the bogon will be chosen
- # first if we set CC to just the name; use the full file name.
- shift
- set dummy "$dir/cc" "$@"
- shift
- CC="$@"
- fi
- fi
-
- if test -n "$CC"; then
- echo "$ac_t$CC" 1>&6
- else
- echo "$ac_t"no 1>&6
- fi
-
- if test -z "$CC"; then
- echo "$progname: error: no acceptable cc found in \$PATH" 1>&2
- exit 1
- fi
- fi
-
- # Now see if the compiler is really GCC.
- with_gcc=no
- echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6
- echo "$progname:581: checking whether we are using GNU C" >&5
-
- $rm conftest.c
- cat > conftest.c <<EOF
-#ifdef __GNUC__
- yes;
-#endif
-EOF
- if { ac_try='${CC-cc} -E conftest.c'; { (eval echo $progname:589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
- with_gcc=yes
- fi
- $rm conftest.c
- echo "$ac_t$with_gcc" 1>&6
-fi
-
-# Allow CC to be a program name with arguments.
-set dummy $CC
-compiler="$2"
-
-echo $ac_n "checking for object suffix... $ac_c" 1>&6
-$rm conftest*
-echo 'int i = 1;' > conftest.c
-echo "$progname:603: checking for object suffix" >& 5
-if { (eval echo $progname:604: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; }; then
- # Append any warnings to the config.log.
- cat conftest.err 1>&5
-
- for ac_file in conftest.*; do
- case $ac_file in
- *.c) ;;
- *) objext=`echo $ac_file | sed -e s/conftest.//` ;;
- esac
- done
-else
- cat conftest.err 1>&5
- echo "$progname: failed program was:" >&5
- cat conftest.c >&5
-fi
-$rm conftest*
-echo "$ac_t$objext" 1>&6
-
-echo $ac_n "checking for executable suffix... $ac_c" 1>&6
-if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_cv_exeext="no"
- $rm conftest*
- echo 'main () { return 0; }' > conftest.c
- echo "$progname:629: checking for executable suffix" >& 5
- if { (eval echo $progname:630: \"$ac_link\") 1>&5; (eval $ac_link) 2>conftest.err; }; then
- # Append any warnings to the config.log.
- cat conftest.err 1>&5
-
- for ac_file in conftest.*; do
- case $ac_file in
- *.c | *.err | *.$objext ) ;;
- *) ac_cv_exeext=.`echo $ac_file | sed -e s/conftest.//` ;;
- esac
- done
- else
- cat conftest.err 1>&5
- echo "$progname: failed program was:" >&5
- cat conftest.c >&5
- fi
- $rm conftest*
-fi
-if test "X$ac_cv_exeext" = Xno; then
- exeext=""
-else
- exeext="$ac_cv_exeext"
-fi
-echo "$ac_t$ac_cv_exeext" 1>&6
-
-echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6
-pic_flag=
-special_shlib_compile_flags=
-wl=
-link_static_flag=
-no_builtin_flag=
-
-if test "$with_gcc" = yes; then
- wl='-Wl,'
- link_static_flag='-static'
-
- case "$host_os" in
- beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
- aix*)
- # Below there is a dirty hack to force normal static linking with -ldl
- # The problem is because libdl dynamically linked with both libc and
- # libC (AIX C++ library), which obviously doesn't included in libraries
- # list by gcc. This cause undefined symbols with -static flags.
- # This hack allows C programs to be linked with "-static -ldl", but
- # we not sure about C++ programs.
- link_static_flag="$link_static_flag ${wl}-lC"
- ;;
- cygwin* | mingw* | os2*)
- # We can build DLLs from non-PIC.
- ;;
- amigaos*)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- pic_flag='-m68020 -resident32 -malways-restore-a4'
- ;;
- sysv4*MP*)
- if test -d /usr/nec; then
- pic_flag=-Kconform_pic
- fi
- ;;
- *)
- pic_flag='-fPIC'
- ;;
- esac
-else
- # PORTME Check for PIC flags for the system compiler.
- case "$host_os" in
- aix3* | aix4*)
- # All AIX code is PIC.
- link_static_flag='-bnso -bI:/lib/syscalls.exp'
- ;;
-
- hpux9* | hpux10* | hpux11*)
- # Is there a better link_static_flag that works with the bundled CC?
- wl='-Wl,'
- link_static_flag="${wl}-a ${wl}archive"
- pic_flag='+Z'
- ;;
-
- irix5* | irix6*)
- wl='-Wl,'
- link_static_flag='-non_shared'
- # PIC (with -KPIC) is the default.
- ;;
-
- cygwin* | mingw* | os2*)
- # We can build DLLs from non-PIC.
- ;;
-
- osf3* | osf4* | osf5*)
- # All OSF/1 code is PIC.
- wl='-Wl,'
- link_static_flag='-non_shared'
- ;;
-
- sco3.2v5*)
- pic_flag='-Kpic'
- link_static_flag='-dn'
- special_shlib_compile_flags='-belf'
- ;;
-
- solaris*)
- pic_flag='-KPIC'
- link_static_flag='-Bstatic'
- wl='-Wl,'
- ;;
-
- sunos4*)
- pic_flag='-PIC'
- link_static_flag='-Bstatic'
- wl='-Qoption ld '
- ;;
-
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- pic_flag='-KPIC'
- link_static_flag='-Bstatic'
- wl='-Wl,'
- ;;
-
- uts4*)
- pic_flag='-pic'
- link_static_flag='-Bstatic'
- ;;
- sysv4*MP*)
- if test -d /usr/nec ;then
- pic_flag='-Kconform_pic'
- link_static_flag='-Bstatic'
- fi
- ;;
- *)
- can_build_shared=no
- ;;
- esac
-fi
-
-if test -n "$pic_flag"; then
- echo "$ac_t$pic_flag" 1>&6
-
- # Check to make sure the pic_flag actually works.
- echo $ac_n "checking if $compiler PIC flag $pic_flag works... $ac_c" 1>&6
- $rm conftest*
- echo "int some_variable = 0;" > conftest.c
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $pic_flag -DPIC"
- echo "$progname:776: checking if $compiler PIC flag $pic_flag works" >&5
- if { (eval echo $progname:777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.$objext; then
- # Append any warnings to the config.log.
- cat conftest.err 1>&5
-
- case "$host_os" in
- hpux9* | hpux10* | hpux11*)
- # On HP-UX, both CC and GCC only warn that PIC is supported... then they
- # create non-PIC objects. So, if there were any warnings, we assume that
- # PIC is not supported.
- if test -s conftest.err; then
- echo "$ac_t"no 1>&6
- can_build_shared=no
- pic_flag=
- else
- echo "$ac_t"yes 1>&6
- pic_flag=" $pic_flag"
- fi
- ;;
- *)
- echo "$ac_t"yes 1>&6
- pic_flag=" $pic_flag"
- ;;
- esac
- else
- # Append any errors to the config.log.
- cat conftest.err 1>&5
- can_build_shared=no
- pic_flag=
- echo "$ac_t"no 1>&6
- fi
- CFLAGS="$save_CFLAGS"
- $rm conftest*
-else
- echo "$ac_t"none 1>&6
-fi
-
-# Check to see if options -o and -c are simultaneously supported by compiler
-echo $ac_n "checking if $compiler supports -c -o file.o... $ac_c" 1>&6
-$rm -r conftest 2>/dev/null
-mkdir conftest
-cd conftest
-$rm conftest*
-echo "int some_variable = 0;" > conftest.c
-mkdir out
-# According to Tom Tromey, Ian Lance Taylor reported there are C compilers
-# that will create temporary files in the current directory regardless of
-# the output directory. Thus, making CWD read-only will cause this test
-# to fail, enabling locking or at least warning the user not to do parallel
-# builds.
-chmod -w .
-save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -o out/conftest2.o"
-echo "$progname:829: checking if $compiler supports -c -o file.o" >&5
-if { (eval echo $progname:830: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.o; then
-
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s out/conftest.err; then
- echo "$ac_t"no 1>&6
- compiler_c_o=no
- else
- echo "$ac_t"yes 1>&6
- compiler_c_o=yes
- fi
-else
- # Append any errors to the config.log.
- cat out/conftest.err 1>&5
- compiler_c_o=no
- echo "$ac_t"no 1>&6
-fi
-CFLAGS="$save_CFLAGS"
-chmod u+w .
-$rm conftest* out/*
-rmdir out
-cd ..
-rmdir conftest
-$rm -r conftest 2>/dev/null
-
-if test x"$compiler_c_o" = x"yes"; then
- # Check to see if we can write to a .lo
- echo $ac_n "checking if $compiler supports -c -o file.lo... $ac_c" 1>&6
- $rm conftest*
- echo "int some_variable = 0;" > conftest.c
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -c -o conftest.lo"
- echo "$progname:862: checking if $compiler supports -c -o file.lo" >&5
-if { (eval echo $progname:863: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.lo; then
-
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- echo "$ac_t"no 1>&6
- compiler_o_lo=no
- else
- echo "$ac_t"yes 1>&6
- compiler_o_lo=yes
- fi
- else
- # Append any errors to the config.log.
- cat conftest.err 1>&5
- compiler_o_lo=no
- echo "$ac_t"no 1>&6
- fi
- CFLAGS="$save_CFLAGS"
- $rm conftest*
-else
- compiler_o_lo=no
-fi
-
-# Check to see if we can do hard links to lock some files if needed
-hard_links="nottested"
-if test "$compiler_c_o" = no && test "$need_locks" != no; then
- # do not overwrite the value of need_locks provided by the user
- echo $ac_n "checking if we can lock with hard links... $ac_c" 1>&6
- hard_links=yes
- $rm conftest*
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- touch conftest.a
- ln conftest.a conftest.b 2>&5 || hard_links=no
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- echo "$ac_t$hard_links" 1>&6
- $rm conftest*
- if test "$hard_links" = no; then
- echo "*** WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2
- need_locks=warn
- fi
-else
- need_locks=no
-fi
-
-if test "$with_gcc" = yes; then
- # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
- echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions ... $ac_c" 1>&6
- $rm conftest*
- echo "int some_variable = 0;" > conftest.c
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.c"
- echo "$progname:914: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
- if { (eval echo $progname:915: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then
-
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- echo "$ac_t"no 1>&6
- compiler_rtti_exceptions=no
- else
- echo "$ac_t"yes 1>&6
- compiler_rtti_exceptions=yes
- fi
- else
- # Append any errors to the config.log.
- cat conftest.err 1>&5
- compiler_rtti_exceptions=no
- echo "$ac_t"no 1>&6
- fi
- CFLAGS="$save_CFLAGS"
- $rm conftest*
-
- if test "$compiler_rtti_exceptions" = "yes"; then
- no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
- else
- no_builtin_flag=' -fno-builtin'
- fi
-
-fi
-
-# Check for any special shared library compilation flags.
-if test -n "$special_shlib_compile_flags"; then
- echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2
- if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$special_shlib_compile_flags[ ]" >/dev/null; then :
- else
- echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2
- can_build_shared=no
- fi
-fi
-
-echo $ac_n "checking if $compiler static flag $link_static_flag works... $ac_c" 1>&6
-$rm conftest*
-echo 'main(){return(0);}' > conftest.c
-save_LDFLAGS="$LDFLAGS"
-LDFLAGS="$LDFLAGS $link_static_flag"
-echo "$progname:958: checking if $compiler static flag $link_static_flag works" >&5
-if { (eval echo $progname:959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- echo "$ac_t$link_static_flag" 1>&6
-else
- echo "$ac_t"none 1>&6
- link_static_flag=
-fi
-LDFLAGS="$save_LDFLAGS"
-$rm conftest*
-
-if test -z "$LN_S"; then
- # Check to see if we can use ln -s, or we need hard links.
- echo $ac_n "checking whether ln -s works... $ac_c" 1>&6
- $rm conftest.dat
- if ln -s X conftest.dat 2>/dev/null; then
- $rm conftest.dat
- LN_S="ln -s"
- else
- LN_S=ln
- fi
- if test "$LN_S" = "ln -s"; then
- echo "$ac_t"yes 1>&6
- else
- echo "$ac_t"no 1>&6
- fi
-fi
-
-# Make sure LD is an absolute path.
-if test -z "$LD"; then
- ac_prog=ld
- if test "$with_gcc" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- echo $ac_n "checking for ld used by GCC... $ac_c" 1>&6
- echo "$progname:991: checking for ld used by GCC" >&5
- ac_prog=`($CC -print-prog-name=ld) 2>&5`
- case "$ac_prog" in
- # Accept absolute paths.
- [\\/]* | [A-Za-z]:[\\/]*)
- re_direlt='/[^/][^/]*/\.\./'
- # Canonicalize the path of ld
- ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
- while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
- done
- test -z "$LD" && LD="$ac_prog"
- ;;
- "")
- # If it fails, then pretend we are not using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
- elif test "$with_gnu_ld" = yes; then
- echo $ac_n "checking for GNU ld... $ac_c" 1>&6
- echo "$progname:1015: checking for GNU ld" >&5
- else
- echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
- echo "$progname:1018: checking for non-GNU ld" >&5
- fi
-
- if test -z "$LD"; then
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some GNU ld's only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- if "$LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
- test "$with_gnu_ld" != no && break
- else
- test "$with_gnu_ld" != yes && break
- fi
- fi
- done
- IFS="$ac_save_ifs"
- fi
-
- if test -n "$LD"; then
- echo "$ac_t$LD" 1>&6
- else
- echo "$ac_t"no 1>&6
- fi
-
- if test -z "$LD"; then
- echo "$progname: error: no acceptable ld found in \$PATH" 1>&2
- exit 1
- fi
-fi
-
-# Check to see if it really is or is not GNU ld.
-echo $ac_n "checking if the linker ($LD) is GNU ld... $ac_c" 1>&6
-# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
- with_gnu_ld=yes
-else
- with_gnu_ld=no
-fi
-echo "$ac_t$with_gnu_ld" 1>&6
-
-# See if the linker supports building shared libraries.
-echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6
-
-allow_undefined_flag=
-no_undefined_flag=
-need_lib_prefix=unknown
-need_version=unknown
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-archive_cmds=
-archive_expsym_cmds=
-old_archive_from_new_cmds=
-export_dynamic_flag_spec=
-whole_archive_flag_spec=
-thread_safe_flag_spec=
-hardcode_libdir_flag_spec=
-hardcode_libdir_separator=
-hardcode_direct=no
-hardcode_minus_L=no
-hardcode_shlibpath_var=unsupported
-runpath_var=
-always_export_symbols=no
-export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
-# include_expsyms should be a list of space-separated symbols to be *always*
-# included in the symbol list
-include_expsyms=
-# exclude_expsyms can be an egrep regular expression of symbols to exclude
-# it will be wrapped by ` (' and `)$', so one must not match beginning or
-# end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-# as well as any symbol that contains `d'.
-exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
-# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
-# platforms (ab)use it in PIC code, but their linkers get confused if
-# the symbol is explicitly referenced. Since portable code cannot
-# rely on this symbol name, it's probably fine to never include it in
-# preloaded symbol tables.
-
-case "$host_os" in
-cygwin* | mingw*)
- # FIXME: the MSVC++ port hasn't been tested in a loooong time
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- if test "$with_gcc" != yes; then
- with_gnu_ld=no
- fi
- ;;
-
-esac
-
-ld_shlibs=yes
-if test "$with_gnu_ld" = yes; then
- # If archive_cmds runs LD, not CC, wlarc should be empty
- wlarc='${wl}'
-
- # See if GNU ld supports shared libraries.
- case "$host_os" in
- aix3* | aix4*)
- # On AIX, the GNU linker is very broken
- ld_shlibs=no
- cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support. If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-EOF
- ;;
-
- amigaos*)
- archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
-
- # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
- # that the semantics of dynamic libraries on AmigaOS, at least up
- # to version 4, is to share data among multiple programs linked
- # with the same dynamic library. Since this doesn't match the
- # behavior of shared libraries on other platforms, we can use
- # them.
- ld_shlibs=no
- ;;
-
- beos*)
- if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
- allow_undefined_flag=unsupported
- # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- archive_cmds='$CC -nostart $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- cygwin* | mingw*)
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- hardcode_libdir_flag_spec='-L$libdir'
- allow_undefined_flag=unsupported
- always_export_symbols=yes
-
- # Extract the symbol export list from an `--export-all' def file,
- # then regenerate the def file from the symbol export list, so that
- # the compiled dll only exports the symbol export list.
- # Be careful not to strip the DATA tag left by newer dlltools.
- export_symbols_cmds='test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
- test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
- $DLLTOOL --export-all --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --output-def $objdir/$soname-def $objdir/$soname-ltdll.$objext $libobjs $convenience~
- sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $objdir/$soname-def > $export_symbols'
-
- # If DATA tags from a recent dlltool are present, honour them!
- archive_expsym_cmds='echo EXPORTS > $objdir/$soname-def~
- _lt_hint=1;
- cat $export_symbols | while read symbol; do
- set dummy \$symbol;
- case \$# in
- 2) echo " \$2 @ \$_lt_hint ; " >> $objdir/$soname-def;;
- *) echo " \$2 @ \$_lt_hint \$3 ; " >> $objdir/$soname-def;;
- esac;
- _lt_hint=`expr 1 + \$_lt_hint`;
- done~
- test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
- test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
- $CC -Wl,--base-file,$objdir/$soname-base -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~
- $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~
- $CC -Wl,--base-file,$objdir/$soname-base $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~
- $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~
- $CC $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts'
-
- old_archive_from_new_cmds='$DLLTOOL --as=$AS --dllname $soname --def $objdir/$soname-def --output-lib $objdir/$libname.a'
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- archive_cmds='$LD -Bshareable $libobjs $deplibs $linkopts -o $lib'
- # can we support soname and/or expsyms with a.out? -oliva
- else
- archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
- solaris* | sysv5*)
- if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
- ld_shlibs=no
- cat <<EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-EOF
- elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- sunos4*)
- archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linkopts'
- wlarc=
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- *)
- if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
- esac
-
- if test "$ld_shlibs" = yes; then
- runpath_var=LD_RUN_PATH
- hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
- export_dynamic_flag_spec='${wl}--export-dynamic'
- case $host_os in
- cygwin* | mingw*)
- # dlltool doesn't understand --whole-archive et. al.
- whole_archive_flag_spec=
- ;;
- *)
- # ancient GNU ld didn't support --whole-archive et. al.
- if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
- whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- whole_archive_flag_spec=
- fi
- ;;
- esac
- fi
-else
- # PORTME fill in a description of your system's linker (not GNU ld)
- case "$host_os" in
- aix3*)
- allow_undefined_flag=unsupported
- always_export_symbols=yes
- archive_expsym_cmds='$LD -o $objdir/$soname $libobjs $deplibs $linkopts -bE:$export_symbols -T512 -H512 -bM:SRE~$AR cru $lib $objdir/$soname'
- # Note: this linker hardcodes the directories in LIBPATH if there
- # are no directories specified by -L.
- hardcode_minus_L=yes
- if test "$with_gcc" = yes && test -z "$link_static_flag"; then
- # Neither direct hardcoding nor static linking is supported with a
- # broken collect2.
- hardcode_direct=unsupported
- fi
- ;;
-
- aix4*)
- hardcode_libdir_flag_spec='${wl}-b ${wl}nolibpath ${wl}-b ${wl}libpath:$libdir:/usr/lib:/lib'
- hardcode_libdir_separator=':'
- if test "$with_gcc" = yes; then
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" && \
- strings "$collect2name" | grep resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- hardcode_direct=yes
- else
- # We have old collect2
- hardcode_direct=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- hardcode_minus_L=yes
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_libdir_separator=
- fi
- shared_flag='-shared'
- else
- shared_flag='${wl}-bM:SRE'
- hardcode_direct=yes
- fi
- allow_undefined_flag=' ${wl}-berok'
- archive_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bexpall ${wl}-bnoentry${allow_undefined_flag}'
- archive_expsym_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}'
- case "$host_os" in aix4.[01]|aix4.[01].*)
- # According to Greg Wooledge, -bexpall is only supported from AIX 4.2 on
- always_export_symbols=yes ;;
- esac
- ;;
-
- amigaos*)
- archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- # see comment about different semantics on the GNU ld section
- ld_shlibs=no
- ;;
-
- cygwin* | mingw*)
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- hardcode_libdir_flag_spec=' '
- allow_undefined_flag=unsupported
- # Tell ltmain to make .lib files, not .a files.
- libext=lib
- # FIXME: Setting linknames here is a bad hack.
- archive_cmds='$CC -o $lib $libobjs $linkopts `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
- # The linker will automatically build a .lib file if we build a DLL.
- old_archive_from_new_cmds='true'
- # FIXME: Should let the user specify the lib program.
- old_archive_cmds='lib /OUT:$oldlib$oldobjs'
- fix_srcfile_path='`cygpath -w $srcfile`'
- ;;
-
- freebsd1*)
- ld_shlibs=no
- ;;
-
- # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
- # support. Future versions do this automatically, but an explicit c++rt0.o
- # does not break anything, and helps significantly (at the cost of a little
- # extra space).
- freebsd2.2*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts /usr/lib/c++rt0.o'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
- freebsd2*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'
- hardcode_direct=yes
- hardcode_minus_L=yes
- hardcode_shlibpath_var=no
- ;;
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd*)
- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $linkopts'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- hpux9* | hpux10* | hpux11*)
- case "$host_os" in
- hpux9*) archive_cmds='$rm $objdir/$soname~$LD -b +b $install_libdir -o $objdir/$soname $libobjs $deplibs $linkopts~test $objdir/$soname = $lib || mv $objdir/$soname $lib' ;;
- *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linkopts' ;;
- esac
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator=:
- hardcode_direct=yes
- hardcode_minus_L=yes # Not in the search PATH, but as the default
- # location of the library.
- export_dynamic_flag_spec='${wl}-E'
- ;;
-
- irix5* | irix6*)
- if test "$with_gcc" = yes; then
- archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
- else
- archive_cmds='$LD -shared $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
- fi
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' # a.out
- else
- archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linkopts' # ELF
- fi
- hardcode_libdir_flag_spec='${wl}-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- openbsd*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- os2*)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- allow_undefined_flag=unsupported
- archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $objdir/$libname.def~$echo DATA >> $objdir/$libname.def~$echo " SINGLE NONSHARED" >> $objdir/$libname.def~$echo EXPORTS >> $objdir/$libname.def~emxexp $libobjs >> $objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $linkopts $objdir/$libname.def'
- old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def'
- ;;
-
- osf3*)
- if test "$with_gcc" = yes; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
- else
- allow_undefined_flag=' -expect_unresolved \*'
- archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
- fi
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- ;;
-
- osf4* | osf5*) # As osf3* with the addition of the -msym flag
- if test "$with_gcc" = yes; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
- else
- allow_undefined_flag=' -expect_unresolved \*'
- archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
- fi
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- ;;
- rhapsody*)
- archive_cmds='$CC -bundle -undefined suppress -o $lib $libobjs $deplibs $linkopts'
- hardcode_libdir_flags_spec='-L$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- sco3.2v5*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
- hardcode_shlibpath_var=no
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- ;;
-
- solaris*)
- no_undefined_flag=' -z text'
- # $CC -shared without GNU ld will not create a library from C++
- # object files and a static libstdc++, better avoid it by now
- archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts'
- archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_shlibpath_var=no
- case "$host_os" in
- solaris2.[0-5] | solaris2.[0-5].*) ;;
- *) # Supported since Solaris 2.6 (maybe 2.5.1?)
- whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
- esac
- ;;
-
- sunos4*)
- archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linkopts'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_direct=yes
- hardcode_minus_L=yes
- hardcode_shlibpath_var=no
- ;;
-
- sysv4)
- if test "x$host_vendor" = xsequent; then
- # Use $CC to link under sequent, because it throws in some extra .o
- # files that make .init and .fini sections work.
- archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $linkopts'
- else
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
- fi
- runpath_var='LD_RUN_PATH'
- hardcode_shlibpath_var=no
- hardcode_direct=no #Motorola manual says yes, but my tests say they lie
- ;;
-
- sysv4.3*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
- hardcode_shlibpath_var=no
- export_dynamic_flag_spec='-Bexport'
- ;;
-
- sysv5*)
- no_undefined_flag=' -z text'
- # $CC -shared without GNU ld will not create a library from C++
- # object files and a static libstdc++, better avoid it by now
- archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts'
- archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp'
- hardcode_libdir_flag_spec=
- hardcode_shlibpath_var=no
- runpath_var='LD_RUN_PATH'
- ;;
-
- uts4*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_shlibpath_var=no
- ;;
-
- dgux*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_shlibpath_var=no
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
- hardcode_shlibpath_var=no
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- ld_shlibs=yes
- fi
- ;;
-
- sysv4.2uw2*)
- archive_cmds='$LD -G -o $lib $libobjs $deplibs $linkopts'
- hardcode_direct=yes
- hardcode_minus_L=no
- hardcode_shlibpath_var=no
- hardcode_runpath_var=yes
- runpath_var=LD_RUN_PATH
- ;;
-
- unixware7*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
- runpath_var='LD_RUN_PATH'
- hardcode_shlibpath_var=no
- ;;
-
- *)
- ld_shlibs=no
- ;;
- esac
-fi
-echo "$ac_t$ld_shlibs" 1>&6
-test "$ld_shlibs" = no && can_build_shared=no
-
-if test -z "$NM"; then
- echo $ac_n "checking for BSD-compatible nm... $ac_c" 1>&6
- case "$NM" in
- [\\/]* | [A-Za-z]:[\\/]*) ;; # Let the user override the test with a path.
- *)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
- for ac_dir in $PATH /usr/ucb /usr/ccs/bin /bin; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext; then
- # Check to see if the nm accepts a BSD-compat flag.
- # Adding the `sed 1q' prevents false positives on HP-UX, which says:
- # nm: unknown option "B" ignored
- if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
- NM="$ac_dir/nm -B"
- break
- elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
- NM="$ac_dir/nm -p"
- break
- else
- NM=${NM="$ac_dir/nm"} # keep the first match, but
- continue # so that we can try to find one that supports BSD flags
- fi
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$NM" && NM=nm
- ;;
- esac
- echo "$ac_t$NM" 1>&6
-fi
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-echo $ac_n "checking command to parse $NM output... $ac_c" 1>&6
-
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix. What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[BCDEGRST]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
-
-# Transform the above into a raw symbol and a C symbol.
-symxfrm='\1 \2\3 \3'
-
-# Transform an extracted symbol line into a proper C declaration
-global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
-
-# Define system-specific variables.
-case "$host_os" in
-aix*)
- symcode='[BCDT]'
- ;;
-cygwin* | mingw*)
- symcode='[ABCDGISTW]'
- ;;
-hpux*) # Its linker distinguishes data from code symbols
- global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^. .* \(.*\)$/extern char \1;/p'"
- ;;
-irix*)
- symcode='[BCDEGRST]'
- ;;
-solaris*)
- symcode='[BDT]'
- ;;
-sysv4)
- symcode='[DFNSTU]'
- ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
- symcode='[ABCDGISTW]'
-fi
-
-# Try without a prefix undercore, then with it.
-for ac_symprfx in "" "_"; do
-
- # Write the raw and C identifiers.
- global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode\)[ ][ ]*\($ac_symprfx\)$sympat$/$symxfrm/p'"
-
- # Check to see that the pipe works correctly.
- pipe_works=no
- $rm conftest*
- cat > conftest.c <<EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(){}
-#ifdef __cplusplus
-}
-#endif
-main(){nm_test_var='a';nm_test_func();return(0);}
-EOF
-
- echo "$progname:1653: checking if global_symbol_pipe works" >&5
- if { (eval echo $progname:1654: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then
- # Now try to grab the symbols.
- nlist=conftest.nm
- if { echo "$progname:1657: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then
-
- # Try sorting and uniquifying the output.
- if sort "$nlist" | uniq > "$nlist"T; then
- mv -f "$nlist"T "$nlist"
- else
- rm -f "$nlist"T
- fi
-
- # Make sure that we snagged all the symbols we need.
- if egrep ' nm_test_var$' "$nlist" >/dev/null; then
- if egrep ' nm_test_func$' "$nlist" >/dev/null; then
- cat <<EOF > conftest.c
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-EOF
- # Now generate the symbol file.
- eval "$global_symbol_to_cdecl"' < "$nlist" >> conftest.c'
-
- cat <<EOF >> conftest.c
-#if defined (__STDC__) && __STDC__
-# define lt_ptr_t void *
-#else
-# define lt_ptr_t char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
- const char *name;
- lt_ptr_t address;
-}
-lt_preloaded_symbols[] =
-{
-EOF
- sed 's/^. \(.*\) \(.*\)$/ {"\2", (lt_ptr_t) \&\2},/' < "$nlist" >> conftest.c
- cat <<\EOF >> conftest.c
- {0, (lt_ptr_t) 0}
-};
-
-#ifdef __cplusplus
-}
-#endif
-EOF
- # Now try linking the two files.
- mv conftest.$objext conftstm.$objext
- save_LIBS="$LIBS"
- save_CFLAGS="$CFLAGS"
- LIBS="conftstm.$objext"
- CFLAGS="$CFLAGS$no_builtin_flag"
- if { (eval echo $progname:1709: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- pipe_works=yes
- else
- echo "$progname: failed program was:" >&5
- cat conftest.c >&5
- fi
- LIBS="$save_LIBS"
- else
- echo "cannot find nm_test_func in $nlist" >&5
- fi
- else
- echo "cannot find nm_test_var in $nlist" >&5
- fi
- else
- echo "cannot run $global_symbol_pipe" >&5
- fi
- else
- echo "$progname: failed program was:" >&5
- cat conftest.c >&5
- fi
- $rm conftest* conftst*
-
- # Do not use the global_symbol_pipe unless it works.
- if test "$pipe_works" = yes; then
- break
- else
- global_symbol_pipe=
- fi
-done
-if test "$pipe_works" = yes; then
- echo "${ac_t}ok" 1>&6
-else
- echo "${ac_t}failed" 1>&6
-fi
-
-if test -z "$global_symbol_pipe"; then
- global_symbol_to_cdecl=
-fi
-
-# Check hardcoding attributes.
-echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6
-hardcode_action=
-if test -n "$hardcode_libdir_flag_spec" || \
- test -n "$runpath_var"; then
-
- # We can hardcode non-existant directories.
- if test "$hardcode_direct" != no &&
- # If the only mechanism to avoid hardcoding is shlibpath_var, we
- # have to relink, otherwise we might link with an installed library
- # when we should be linking with a yet-to-be-installed one
- ## test "$hardcode_shlibpath_var" != no &&
- test "$hardcode_minus_L" != no; then
- # Linking always hardcodes the temporary library directory.
- hardcode_action=relink
- else
- # We can link without hardcoding, and we can hardcode nonexisting dirs.
- hardcode_action=immediate
- fi
-else
- # We cannot hardcode anything, or else we can only hardcode existing
- # directories.
- hardcode_action=unsupported
-fi
-echo "$ac_t$hardcode_action" 1>&6
-
-
-reload_flag=
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6
-# PORTME Some linkers may need a different reload flag.
-reload_flag='-r'
-echo "$ac_t$reload_flag" 1>&6
-test -n "$reload_flag" && reload_flag=" $reload_flag"
-
-# PORTME Fill in your ld.so characteristics
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-file_magic_cmd=
-file_magic_test_file=
-deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [regex]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given egrep regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6
-case "$host_os" in
-aix3*)
- version_type=linux
- library_names_spec='${libname}${release}.so$versuffix $libname.a'
- shlibpath_var=LIBPATH
-
- # AIX has no versioning support, so we append a major version to the name.
- soname_spec='${libname}${release}.so$major'
- ;;
-
-aix4*)
- version_type=linux
- # AIX has no versioning support, so currently we can not hardcode correct
- # soname into executable. Probably we can add versioning support to
- # collect2, so additional links can be useful in future.
- # We preserve .a as extension for shared libraries though AIX4.2
- # and later linker supports .so
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.a'
- shlibpath_var=LIBPATH
- deplibs_check_method=pass_all
- ;;
-
-amigaos*)
- library_names_spec='$libname.ixlibrary $libname.a'
- # Create ${libname}_ixlibrary.a entries in /sys/libs.
- finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
- ;;
-
-beos*)
- library_names_spec='${libname}.so'
- dynamic_linker="$host_os ld.so"
- shlibpath_var=LIBRARY_PATH
- deplibs_check_method=pass_all
- lt_cv_dlopen="load_add_on"
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
- ;;
-
-bsdi4*)
- version_type=linux
- need_version=no
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
- file_magic_cmd=/usr/bin/file
- file_magic_test_file=/shlib/libc.so
- sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
- sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
- export_dynamic_flag_spec=-rdynamic
- # the default ld.so.conf also contains /usr/contrib/lib and
- # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
- # libtool to hard-code these into programs
- ;;
-
-cygwin* | mingw*)
- version_type=windows
- need_version=no
- need_lib_prefix=no
- if test "$with_gcc" = yes; then
- library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.a'
- else
- library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib'
- fi
- dynamic_linker='Win32 ld.exe'
- deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
- file_magic_cmd='${OBJDUMP} -f'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- lt_cv_dlopen="LoadLibrary"
- lt_cv_dlopen_libs=
- ;;
-
-freebsd1*)
- dynamic_linker=no
- ;;
-
-freebsd*)
- objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
- version_type=freebsd-$objformat
- case "$version_type" in
- freebsd-elf*)
- deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object'
- file_magic_cmd=/usr/bin/file
- file_magic_test_file=`echo /usr/lib/libc.so*`
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
- need_version=no
- need_lib_prefix=no
- ;;
- freebsd-*)
- deplibs_check_method=unknown
- library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
- need_version=yes
- ;;
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case "$host_os" in
- freebsd2* | freebsd3.[01]* | freebsdelf3.[01]*)
- shlibpath_overrides_runpath=yes
- ;;
- *) # from 3.2 on
- shlibpath_overrides_runpath=no
- ;;
- esac
- ;;
-
-gnu*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
- soname_spec='${libname}${release}.so$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-hpux9* | hpux10* | hpux11*)
- # Give a soname corresponding to the major version so that dld.sl refuses to
- # link against other versions.
- dynamic_linker="$host_os dld.sl"
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- shlibpath_var=SHLIB_PATH
- shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
- library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
- soname_spec='${libname}${release}.sl$major'
- # HP-UX runs *really* slowly unless shared libraries are mode 555.
- postinstall_cmds='chmod 555 $lib'
- case "$host_os" in
- hpux10.20*)
- # TODO: Does this work for hpux-11 too?
- deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
- file_magic_cmd=/usr/bin/file
- file_magic_test_file=/usr/lib/libc.sl
- ;;
- esac
- ;;
-
-irix5* | irix6*)
- version_type=irix
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}.so.$major'
- library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major ${libname}${release}.so $libname.so'
- case "$host_os" in
- irix5*)
- libsuff= shlibsuff=
- # this will be overridden with pass_all, but let us keep it just in case
- deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
- ;;
- *)
- case "$LD" in # libtool.m4 will add one of these switches to LD
- *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
- *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
- *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
- *) libsuff= shlibsuff= libmagic=never-match;;
- esac
- ;;
- esac
- shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
- sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
- file_magic_cmd=/usr/bin/file
- file_magic_test_file=`echo /lib${libsuff}/libc.so*`
- deplibs_check_method='pass_all'
- ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
- dynamic_linker=no
- ;;
-
-# This must be Linux ELF.
-linux-gnu*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- deplibs_check_method=pass_all
-
- if test -f /lib/ld.so.1; then
- dynamic_linker='GNU ld.so'
- else
- # Only the GNU ld.so supports shared libraries on MkLinux.
- case "$host_cpu" in
- powerpc*) dynamic_linker=no ;;
- *) dynamic_linker='Linux ld.so' ;;
- esac
- fi
- ;;
-
-netbsd*)
- version_type=sunos
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- dynamic_linker='NetBSD (a.out) ld.so'
- else
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
- soname_spec='${libname}${release}.so$major'
- dynamic_linker='NetBSD ld.elf_so'
- fi
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-openbsd*)
- version_type=sunos
- if test "$with_gnu_ld" = yes; then
- need_lib_prefix=no
- need_version=no
- fi
- library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-os2*)
- libname_spec='$name'
- need_lib_prefix=no
- library_names_spec='$libname.dll $libname.a'
- dynamic_linker='OS/2 ld.exe'
- shlibpath_var=LIBPATH
- ;;
-
-osf3* | osf4* | osf5*)
- version_type=osf
- need_version=no
- soname_spec='${libname}${release}.so'
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
- shlibpath_var=LD_LIBRARY_PATH
- # this will be overridden with pass_all, but let us keep it just in case
- deplibs_check_method='file_magic COFF format alpha shared library'
- file_magic_cmd=/usr/bin/file
- file_magic_test_file=/shlib/libc.so
- deplibs_check_method='pass_all'
- sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
- sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
- ;;
-
-rhapsody*)
- version_type=sunos
- library_names_spec='${libname}.so'
- soname_spec='${libname}.so'
- shlibpath_var=DYLD_LIBRARY_PATH
- deplibs_check_method=pass_all
- ;;
-
-sco3.2v5*)
- version_type=osf
- soname_spec='${libname}${release}.so$major'
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-solaris*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- # ldd complains unless libraries are executable
- postinstall_cmds='chmod +x $lib'
- deplibs_check_method="file_magic ELF [0-9][0-9]-bit [LM]SB dynamic lib"
- file_magic_cmd=/usr/bin/file
- file_magic_test_file=/lib/libc.so
- ;;
-
-sunos4*)
- version_type=sunos
- library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
- finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- if test "$with_gnu_ld" = yes; then
- need_lib_prefix=no
- fi
- need_version=yes
- ;;
-
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- version_type=linux
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
- shlibpath_var=LD_LIBRARY_PATH
- case "$host_vendor" in
- sequent)
- file_magic_cmd='/bin/file'
- deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
- ;;
- ncr)
- deplibs_check_method='pass_all'
- ;;
- motorola)
- need_lib_prefix=no
- need_version=no
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
- deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
- file_magic_cmd=/usr/bin/file
- file_magic_test_file=`echo /usr/lib/libc.so*`
- ;;
- esac
- ;;
-
-uts4*)
- version_type=linux
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-dgux*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-sysv4*MP*)
- if test -d /usr/nec ;then
- version_type=linux
- library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
- soname_spec='$libname.so.$major'
- shlibpath_var=LD_LIBRARY_PATH
- fi
- ;;
-
-*)
- dynamic_linker=no
- ;;
-esac
-echo "$ac_t$dynamic_linker" 1>&6
-test "$dynamic_linker" = no && can_build_shared=no
-
-# Report the final consequences.
-echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6
-
-# Only try to build win32 dlls if AC_LIBTOOL_WIN32_DLL was used in
-# configure.in, otherwise build static only libraries.
-case "$host_os" in
-cygwin* | mingw* | os2*)
- if test x$can_build_shared = xyes; then
- test x$enable_win32_dll = xno && can_build_shared=no
- echo "checking if package supports dlls... $can_build_shared" 1>&6
- fi
-;;
-esac
-
-if test -n "$file_magic_test_file" && test -n "$file_magic_cmd"; then
- case "$deplibs_check_method" in
- "file_magic "*)
- file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
- if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
- egrep "$file_magic_regex" > /dev/null; then
- :
- else
- cat <<EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such. This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem. Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-EOF
- fi ;;
- esac
-fi
-
-echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6
-test "$can_build_shared" = "no" && enable_shared=no
-
-# On AIX, shared libraries and static libraries use the same namespace, and
-# are all built from PIC.
-case "$host_os" in
-aix3*)
- test "$enable_shared" = yes && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds~\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
- fi
- ;;
-
-aix4*)
- test "$enable_shared" = yes && enable_static=no
- ;;
-esac
-
-echo "$ac_t$enable_shared" 1>&6
-
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-
-echo "checking whether to build static libraries... $enable_static" 1>&6
-
-if test "$hardcode_action" = relink; then
- # Fast installation is not supported
- enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
- test "$enable_shared" = no; then
- # Fast installation is not necessary
- enable_fast_install=needless
-fi
-
-echo $ac_n "checking for objdir... $ac_c" 1>&6
-rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
- objdir=.libs
-else
- # MS-DOS does not allow filenames that begin with a dot.
- objdir=_libs
-fi
-rmdir .libs 2>/dev/null
-echo "$ac_t$objdir" 1>&6
-
-if test "x$enable_dlopen" != xyes; then
- enable_dlopen=unknown
- enable_dlopen_self=unknown
- enable_dlopen_self_static=unknown
-else
-if eval "test \"`echo '$''{'lt_cv_dlopen'+set}'`\" != set"; then
- lt_cv_dlopen=no lt_cv_dlopen_libs=
-echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "$progname:2248: checking for dlopen in -ldl" >&5
-ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-ldl $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2256 "ltconfig"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen();
-
-int main() {
-dlopen()
-; return 0; }
-EOF
-if { (eval echo $progname:2269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
- echo "$ac_t""no" 1>&6
-echo $ac_n "checking for dlopen""... $ac_c" 1>&6
-echo "$progname:2288: checking for dlopen" >&5
-if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2293 "ltconfig"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char dlopen(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_dlopen) || defined (__stub___dlopen)
-choke me
-#else
-dlopen();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo $progname:2318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_dlopen=yes"
-else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_dlopen=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- lt_cv_dlopen="dlopen"
-else
- echo "$ac_t""no" 1>&6
-echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6
-echo "$progname:2335: checking for dld_link in -ldld" >&5
-ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-ldld $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2343 "ltconfig"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dld_link();
-
-int main() {
-dld_link()
-; return 0; }
-EOF
-if { (eval echo $progname:2356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
-else
- echo "$ac_t""no" 1>&6
-echo $ac_n "checking for shl_load""... $ac_c" 1>&6
-echo "$progname:2375: checking for shl_load" >&5
-if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2380 "ltconfig"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char shl_load(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_shl_load) || defined (__stub___shl_load)
-choke me
-#else
-shl_load();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo $progname:2405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_shl_load=yes"
-else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_shl_load=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- lt_cv_dlopen="shl_load"
-else
- echo "$ac_t""no" 1>&6
-echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
-echo "$progname:2423: checking for shl_load in -ldld" >&5
-ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-ldld $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2431 "ltconfig"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load();
-
-int main() {
-shl_load()
-; return 0; }
-EOF
-if { (eval echo $progname:2445: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
-else
- echo "$ac_t""no" 1>&6
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-fi
-
- if test "x$lt_cv_dlopen" != xno; then
- enable_dlopen=yes
- fi
-
- case "$lt_cv_dlopen" in
- dlopen)
-for ac_hdr in dlfcn.h; do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "$progname:2488: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2493 "ltconfig"
-#include <$ac_hdr>
-int fnord = 0;
-EOF
-ac_try="$ac_compile >/dev/null 2>conftest.out"
-{ (eval echo $progname:2498: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
- if test "x$ac_cv_header_dlfcn_h" = xyes; then
- CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
- fi
- eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
- LIBS="$lt_cv_dlopen_libs $LIBS"
-
- echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6
-echo "$progname:2526: checking whether a program can dlopen itself" >&5
-if test "${lt_cv_dlopen_self+set}" = set; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test "$cross_compiling" = yes; then
- lt_cv_dlopen_self=cross
- else
- cat > conftest.c <<EOF
-#line 2534 "ltconfig"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LTDL_GLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LTDL_GLOBAL DL_GLOBAL
-# else
-# define LTDL_GLOBAL 0
-# endif
-#endif
-
-/* We may have to define LTDL_LAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LTDL_LAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LTDL_LAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LTDL_LAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LTDL_LAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LTDL_LAZY_OR_NOW DL_NOW
-# else
-# define LTDL_LAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-fnord() { int i=42;}
-main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
- if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
- if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); }
-
-EOF
-if { (eval echo $progname:2580: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
-then
- lt_cv_dlopen_self=yes
-else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- lt_cv_dlopen_self=no
-fi
-rm -fr conftest*
-fi
-
-fi
-
-echo "$ac_t""$lt_cv_dlopen_self" 1>&6
-
- if test "$lt_cv_dlopen_self" = yes; then
- LDFLAGS="$LDFLAGS $link_static_flag"
- echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6
-echo "$progname:2599: checking whether a statically linked program can dlopen itself" >&5
-if test "${lt_cv_dlopen_self_static+set}" = set; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test "$cross_compiling" = yes; then
- lt_cv_dlopen_self_static=cross
- else
- cat > conftest.c <<EOF
-#line 2607 "ltconfig"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LTDL_GLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LTDL_GLOBAL DL_GLOBAL
-# else
-# define LTDL_GLOBAL 0
-# endif
-#endif
-
-/* We may have to define LTDL_LAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LTDL_LAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LTDL_LAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LTDL_LAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LTDL_LAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LTDL_LAZY_OR_NOW DL_NOW
-# else
-# define LTDL_LAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-fnord() { int i=42;}
-main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
- if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
- if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); }
-
-EOF
-if { (eval echo $progname:2653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
-then
- lt_cv_dlopen_self_static=yes
-else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- lt_cv_dlopen_self_static=no
-fi
-rm -fr conftest*
-fi
-
-fi
-
-echo "$ac_t""$lt_cv_dlopen_self_static" 1>&6
-fi
- ;;
- esac
-
- case "$lt_cv_dlopen_self" in
- yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
- *) enable_dlopen_self=unknown ;;
- esac
-
- case "$lt_cv_dlopen_self_static" in
- yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
- *) enable_dlopen_self_static=unknown ;;
- esac
-fi
-
-# Copy echo and quote the copy, instead of the original, because it is
-# used later.
-ltecho="$echo"
-if test "X$ltecho" = "X$CONFIG_SHELL $0 --fallback-echo"; then
- ltecho="$CONFIG_SHELL \$0 --fallback-echo"
-fi
-LTSHELL="$SHELL"
-
-LTCONFIG_VERSION="$VERSION"
-
-# Only quote variables if we're using ltmain.sh.
-case "$ltmain" in
-*.sh)
- # Now quote all the things that may contain metacharacters.
- for var in ltecho old_CC old_CFLAGS old_CPPFLAGS \
- old_LD old_LDFLAGS old_LIBS \
- old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS \
- AR CC LD LN_S NM LTSHELL LTCONFIG_VERSION \
- reload_flag reload_cmds wl \
- pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
- thread_safe_flag_spec whole_archive_flag_spec libname_spec \
- library_names_spec soname_spec \
- RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
- old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds postuninstall_cmds \
- file_magic_cmd export_symbols_cmds deplibs_check_method allow_undefined_flag no_undefined_flag \
- finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
- hardcode_libdir_flag_spec hardcode_libdir_separator \
- sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
- compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
-
- case "$var" in
- reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
- old_postinstall_cmds | old_postuninstall_cmds | \
- export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
- postinstall_cmds | postuninstall_cmds | \
- finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
- # Double-quote double-evaled strings.
- eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
- ;;
- *)
- eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
- ;;
- esac
- done
-
- case "$ltecho" in
- *'\$0 --fallback-echo"')
- ltecho=`$echo "X$ltecho" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
- ;;
- esac
-
- trap "$rm \"$ofile\"; exit 1" 1 2 15
- echo "creating $ofile"
- $rm "$ofile"
- cat <<EOF > "$ofile"
-#! $SHELL
-
-# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-# NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh.
-#
-# Copyright (C) 1996-1999 Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-Xsed="sed -e s/^X//"
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
-
-### BEGIN LIBTOOL CONFIG
-EOF
- cfgfile="$ofile"
- ;;
-
-*)
- # Double-quote the variables that need it (for aesthetics).
- for var in old_CC old_CFLAGS old_CPPFLAGS \
- old_LD old_LDFLAGS old_LIBS \
- old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS; do
- eval "$var=\\\"\$var\\\""
- done
-
- # Just create a config file.
- cfgfile="$ofile.cfg"
- trap "$rm \"$cfgfile\"; exit 1" 1 2 15
- echo "creating $cfgfile"
- $rm "$cfgfile"
- cat <<EOF > "$cfgfile"
-# `$echo "$cfgfile" | sed 's%^.*/%%'` - Libtool configuration file.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-EOF
- ;;
-esac
-
-cat <<EOF >> "$cfgfile"
-# Libtool was configured as follows, on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-#
-# CC=$old_CC CFLAGS=$old_CFLAGS CPPFLAGS=$old_CPPFLAGS \\
-# LD=$old_LD LDFLAGS=$old_LDFLAGS LIBS=$old_LIBS \\
-# NM=$old_NM RANLIB=$old_RANLIB LN_S=$old_LN_S \\
-# DLLTOOL=$old_DLLTOOL OBJDUMP=$old_OBJDUMP AS=$old_AS \\
-# $0$ltconfig_args
-#
-# Compiler and other test output produced by $progname, useful for
-# debugging $progname, is in ./config.log if it exists.
-
-# The version of $progname that generated this script.
-LTCONFIG_VERSION=$LTCONFIG_VERSION
-
-# Shell to use when invoking shell scripts.
-SHELL=$LTSHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-
-# An echo program that does not interpret backslashes.
-echo=$ltecho
-
-# The archiver.
-AR=$AR
-
-# The default C compiler.
-CC=$CC
-
-# The linker used to build libraries.
-LD=$LD
-
-# Whether we need hard or soft links.
-LN_S=$LN_S
-
-# A BSD-compatible nm program.
-NM=$NM
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$reload_flag
-reload_cmds=$reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$wl
-
-# Object file suffix (normally "o").
-objext="$objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$pic_flag
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$compiler_c_o
-
-# Can we write directly to a .lo ?
-compiler_o_lo=$compiler_o_lo
-
-# Must we lock files when doing compilation ?
-need_locks=$need_locks
-
-# Do we need the lib prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Whether dlopen is supported.
-dlopen=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$link_static_flag
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$no_builtin_flag
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$export_dynamic_flag_spec
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$whole_archive_flag_spec
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$thread_safe_flag_spec
-
-# Library versioning type.
-version_type=$version_type
-
-# Format of library name prefix.
-libname_spec=$libname_spec
-
-# List of archive names. First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME.
-library_names_spec=$library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$soname_spec
-
-# Commands used to build and install an old-style archive.
-RANLIB=$RANLIB
-old_archive_cmds=$old_archive_cmds
-old_postinstall_cmds=$old_postinstall_cmds
-old_postuninstall_cmds=$old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$old_archive_from_new_cmds
-
-# Commands used to build and install a shared archive.
-archive_cmds=$archive_cmds
-archive_expsym_cmds=$archive_expsym_cmds
-postinstall_cmds=$postinstall_cmds
-postuninstall_cmds=$postuninstall_cmds
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$deplibs_check_method
-
-# Command to use when deplibs_check_method == file_magic.
-file_magic_cmd=$file_magic_cmd
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$allow_undefined_flag
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$no_undefined_flag
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$finish_eval
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration
-global_symbol_to_cdecl=$global_symbol_to_cdecl
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$hardcode_libdir_flag_spec
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$hardcode_libdir_separator
-
-# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path="$fix_srcfile_path"
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$always_export_symbols
-
-# The commands to list exported symbols.
-export_symbols_cmds=$export_symbols_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$exclude_expsyms
-
-# Symbols that must always be exported.
-include_expsyms=$include_expsyms
-
-EOF
-
-case "$ltmain" in
-*.sh)
- echo '### END LIBTOOL CONFIG' >> "$ofile"
- echo >> "$ofile"
- case "$host_os" in
- aix3*)
- cat <<\EOF >> "$ofile"
-
-# AIX sometimes has problems with the GCC collect2 program. For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
- COLLECT_NAMES=
- export COLLECT_NAMES
-fi
-EOF
- ;;
- esac
-
- # Append the ltmain.sh script.
- sed '$q' "$ltmain" >> "$ofile" || (rm -f "$ofile"; exit 1)
- # We use sed instead of cat because bash on DJGPP gets confused if
- # if finds mixed CR/LF and LF-only lines. Since sed operates in
- # text mode, it properly converts lines to CR/LF. This bash problem
- # is reportedly fixed, but why not run on old versions too?
-
- chmod +x "$ofile"
- ;;
-
-*)
- # Compile the libtool program.
- echo "FIXME: would compile $ltmain"
- ;;
-esac
-
-test -n "$cache_file" || exit 0
-
-# AC_CACHE_SAVE
-trap '' 1 2 15
-cat > confcache <<\EOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs. It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
-#
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already. You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
-#
-EOF
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(set) 2>&1 |
- case `(ac_space=' '; set | grep ac_space) 2>&1` in
- *ac_space=\ *)
- # `set' does not quote correctly, so add quotes (double-quote substitution
- # turns \\\\ into \\, and sed turns \\ into \).
- sed -n \
- -e "s/'/'\\\\''/g" \
- -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
- ;;
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
- ;;
- esac >> confcache
-if cmp -s $cache_file confcache; then
- :
-else
- if test -w $cache_file; then
- echo "updating cache $cache_file"
- cat confcache > $cache_file
- else
- echo "not updating unwritable cache $cache_file"
- fi
-fi
-rm -f confcache
-
-exit 0
-
-# Local Variables:
-# mode:shell-script
-# sh-indentation:2
-# End:
diff --git a/contrib/idn/idnkit-1.0-src/ltmain.sh b/contrib/idn/idnkit-1.0-src/ltmain.sh
deleted file mode 100644
index 766732da..00000000
--- a/contrib/idn/idnkit-1.0-src/ltmain.sh
+++ /dev/null
@@ -1,4024 +0,0 @@
-# ltmain.sh - Provide generalized library-building support services.
-# NOTE: Changing this file will not affect anything until you rerun ltconfig.
-#
-# Copyright (C) 1996-1999 Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Check that we have a working $echo.
-if test "X$1" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
-elif test "X$1" = X--fallback-echo; then
- # Avoid inline document here, it may be left over
- :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
- # Yippee, $echo works!
- :
-else
- # Restart under the correct shell, and then maybe $echo will work.
- exec $SHELL "$0" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
- # used as fallback echo
- shift
- cat <<EOF
-$*
-EOF
- exit 0
-fi
-
-# The name of this program.
-progname=`$echo "$0" | sed 's%^.*/%%'`
-modename="$progname"
-
-# Constants.
-PROGRAM=ltmain.sh
-PACKAGE=libtool
-VERSION=1.3.5
-TIMESTAMP=" (1.385.2.206 2000/05/27 11:12:27)"
-
-default_mode=
-help="Try \`$progname --help' for more information."
-magic="%%%MAGIC variable%%%"
-mkdir="mkdir"
-mv="mv -f"
-rm="rm -f"
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e 1s/^X//'
-sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
-SP2NL='tr \040 \012'
-NL2SP='tr \015\012 \040\040'
-
-# NLS nuisances.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
-# We save the old values to restore during execute mode.
-if test "${LC_ALL+set}" = set; then
- save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
-fi
-if test "${LANG+set}" = set; then
- save_LANG="$LANG"; LANG=C; export LANG
-fi
-
-if test "$LTCONFIG_VERSION" != "$VERSION"; then
- echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2
- echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
- exit 1
-fi
-
-if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
- echo "$modename: not configured to build any kind of library" 1>&2
- echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
- exit 1
-fi
-
-# Global variables.
-mode=$default_mode
-nonopt=
-prev=
-prevopt=
-run=
-show="$echo"
-show_help=
-execute_dlfiles=
-lo2o="s/\\.lo\$/.${objext}/"
-o2lo="s/\\.${objext}\$/.lo/"
-
-# Parse our command line options once, thoroughly.
-while test $# -gt 0
-do
- arg="$1"
- shift
-
- case "$arg" in
- -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
- *) optarg= ;;
- esac
-
- # If the previous option needs an argument, assign it.
- if test -n "$prev"; then
- case "$prev" in
- execute_dlfiles)
- eval "$prev=\"\$$prev \$arg\""
- ;;
- *)
- eval "$prev=\$arg"
- ;;
- esac
-
- prev=
- prevopt=
- continue
- fi
-
- # Have we seen a non-optional argument yet?
- case "$arg" in
- --help)
- show_help=yes
- ;;
-
- --version)
- echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
- exit 0
- ;;
-
- --config)
- sed -e '1,/^### BEGIN LIBTOOL CONFIG/d' -e '/^### END LIBTOOL CONFIG/,$d' $0
- exit 0
- ;;
-
- --debug)
- echo "$progname: enabling shell trace mode"
- set -x
- ;;
-
- --dry-run | -n)
- run=:
- ;;
-
- --features)
- echo "host: $host"
- if test "$build_libtool_libs" = yes; then
- echo "enable shared libraries"
- else
- echo "disable shared libraries"
- fi
- if test "$build_old_libs" = yes; then
- echo "enable static libraries"
- else
- echo "disable static libraries"
- fi
- exit 0
- ;;
-
- --finish) mode="finish" ;;
-
- --mode) prevopt="--mode" prev=mode ;;
- --mode=*) mode="$optarg" ;;
-
- --quiet | --silent)
- show=:
- ;;
-
- -dlopen)
- prevopt="-dlopen"
- prev=execute_dlfiles
- ;;
-
- -*)
- $echo "$modename: unrecognized option \`$arg'" 1>&2
- $echo "$help" 1>&2
- exit 1
- ;;
-
- *)
- nonopt="$arg"
- break
- ;;
- esac
-done
-
-if test -n "$prevopt"; then
- $echo "$modename: option \`$prevopt' requires an argument" 1>&2
- $echo "$help" 1>&2
- exit 1
-fi
-
-if test -z "$show_help"; then
-
- # Infer the operation mode.
- if test -z "$mode"; then
- case "$nonopt" in
- *cc | *++ | gcc* | *-gcc*)
- mode=link
- for arg
- do
- case "$arg" in
- -c)
- mode=compile
- break
- ;;
- esac
- done
- ;;
- *db | *dbx | *strace | *truss)
- mode=execute
- ;;
- *install*|cp|mv)
- mode=install
- ;;
- *rm)
- mode=uninstall
- ;;
- *)
- # If we have no mode, but dlfiles were specified, then do execute mode.
- test -n "$execute_dlfiles" && mode=execute
-
- # Just use the default operation mode.
- if test -z "$mode"; then
- if test -n "$nonopt"; then
- $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
- else
- $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
- fi
- fi
- ;;
- esac
- fi
-
- # Only execute mode is allowed to have -dlopen flags.
- if test -n "$execute_dlfiles" && test "$mode" != execute; then
- $echo "$modename: unrecognized option \`-dlopen'" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- # Change the help message to a mode-specific one.
- generic_help="$help"
- help="Try \`$modename --help --mode=$mode' for more information."
-
- # These modes are in order of execution frequency so that they run quickly.
- case "$mode" in
- # libtool compile mode
- compile)
- modename="$modename: compile"
- # Get the compilation command and the source file.
- base_compile=
- lastarg=
- srcfile="$nonopt"
- suppress_output=
-
- user_target=no
- for arg
- do
- # Accept any command-line options.
- case "$arg" in
- -o)
- if test "$user_target" != "no"; then
- $echo "$modename: you cannot specify \`-o' more than once" 1>&2
- exit 1
- fi
- user_target=next
- ;;
-
- -static)
- build_old_libs=yes
- continue
- ;;
- esac
-
- case "$user_target" in
- next)
- # The next one is the -o target name
- user_target=yes
- continue
- ;;
- yes)
- # We got the output file
- user_target=set
- libobj="$arg"
- continue
- ;;
- esac
-
- # Accept the current argument as the source file.
- lastarg="$srcfile"
- srcfile="$arg"
-
- # Aesthetically quote the previous argument.
-
- # Backslashify any backslashes, double quotes, and dollar signs.
- # These are the only characters that are still specially
- # interpreted inside of double-quoted scrings.
- lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
-
- # Double-quote args containing other shell metacharacters.
- # Many Bourne shells cannot handle close brackets correctly in scan
- # sets, so we specify it separately.
- case "$lastarg" in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
- lastarg="\"$lastarg\""
- ;;
- esac
-
- # Add the previous argument to base_compile.
- if test -z "$base_compile"; then
- base_compile="$lastarg"
- else
- base_compile="$base_compile $lastarg"
- fi
- done
-
- case "$user_target" in
- set)
- ;;
- no)
- # Get the name of the library object.
- libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
- ;;
- *)
- $echo "$modename: you must specify a target with \`-o'" 1>&2
- exit 1
- ;;
- esac
-
- # Recognize several different file suffixes.
- # If the user specifies -o file.o, it is replaced with file.lo
- xform='[cCFSfmso]'
- case "$libobj" in
- *.ada) xform=ada ;;
- *.adb) xform=adb ;;
- *.ads) xform=ads ;;
- *.asm) xform=asm ;;
- *.c++) xform=c++ ;;
- *.cc) xform=cc ;;
- *.cpp) xform=cpp ;;
- *.cxx) xform=cxx ;;
- *.f90) xform=f90 ;;
- *.for) xform=for ;;
- esac
-
- libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
-
- case "$libobj" in
- *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
- *)
- $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
- exit 1
- ;;
- esac
-
- if test -z "$base_compile"; then
- $echo "$modename: you must specify a compilation command" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- # Delete any leftover library objects.
- if test "$build_old_libs" = yes; then
- removelist="$obj $libobj"
- else
- removelist="$libobj"
- fi
-
- $run $rm $removelist
- trap "$run $rm $removelist; exit 1" 1 2 15
-
- # Calculate the filename of the output object if compiler does
- # not support -o with -c
- if test "$compiler_c_o" = no; then
- output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\..*$%%'`.${objext}
- lockfile="$output_obj.lock"
- removelist="$removelist $output_obj $lockfile"
- trap "$run $rm $removelist; exit 1" 1 2 15
- else
- need_locks=no
- lockfile=
- fi
-
- # Lock this critical section if it is needed
- # We use this script file to make the link, it avoids creating a new file
- if test "$need_locks" = yes; then
- until ln "$0" "$lockfile" 2>/dev/null; do
- $show "Waiting for $lockfile to be removed"
- sleep 2
- done
- elif test "$need_locks" = warn; then
- if test -f "$lockfile"; then
- echo "\
-*** ERROR, $lockfile exists and contains:
-`cat $lockfile 2>/dev/null`
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together. If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
- $run $rm $removelist
- exit 1
- fi
- echo $srcfile > "$lockfile"
- fi
-
- if test -n "$fix_srcfile_path"; then
- eval srcfile=\"$fix_srcfile_path\"
- fi
-
- # Only build a PIC object if we are building libtool libraries.
- if test "$build_libtool_libs" = yes; then
- # Without this assignment, base_compile gets emptied.
- fbsd_hideous_sh_bug=$base_compile
-
- # All platforms use -DPIC, to notify preprocessed assembler code.
- command="$base_compile $srcfile $pic_flag -DPIC"
- if test "$build_old_libs" = yes; then
- lo_libobj="$libobj"
- dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$dir" = "X$libobj"; then
- dir="$objdir"
- else
- dir="$dir/$objdir"
- fi
- libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
-
- if test -d "$dir"; then
- $show "$rm $libobj"
- $run $rm $libobj
- else
- $show "$mkdir $dir"
- $run $mkdir $dir
- status=$?
- if test $status -ne 0 && test ! -d $dir; then
- exit $status
- fi
- fi
- fi
- if test "$compiler_o_lo" = yes; then
- output_obj="$libobj"
- command="$command -o $output_obj"
- elif test "$compiler_c_o" = yes; then
- output_obj="$obj"
- command="$command -o $output_obj"
- fi
-
- $run $rm "$output_obj"
- $show "$command"
- if $run eval "$command"; then :
- else
- test -n "$output_obj" && $run $rm $removelist
- exit 1
- fi
-
- if test "$need_locks" = warn &&
- test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
- echo "\
-*** ERROR, $lockfile contains:
-`cat $lockfile 2>/dev/null`
-
-but it should contain:
-$srcfile
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together. If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
- $run $rm $removelist
- exit 1
- fi
-
- # Just move the object if needed, then go on to compile the next one
- if test x"$output_obj" != x"$libobj"; then
- $show "$mv $output_obj $libobj"
- if $run $mv $output_obj $libobj; then :
- else
- error=$?
- $run $rm $removelist
- exit $error
- fi
- fi
-
- # If we have no pic_flag, then copy the object into place and finish.
- if test -z "$pic_flag" && test "$build_old_libs" = yes; then
- # Rename the .lo from within objdir to obj
- if test -f $obj; then
- $show $rm $obj
- $run $rm $obj
- fi
-
- $show "$mv $libobj $obj"
- if $run $mv $libobj $obj; then :
- else
- error=$?
- $run $rm $removelist
- exit $error
- fi
-
- xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$obj"; then
- xdir="."
- else
- xdir="$xdir"
- fi
- baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"`
- libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
- # Now arrange that obj and lo_libobj become the same file
- $show "(cd $xdir && $LN_S $baseobj $libobj)"
- if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then
- exit 0
- else
- error=$?
- $run $rm $removelist
- exit $error
- fi
- fi
-
- # Allow error messages only from the first compilation.
- suppress_output=' >/dev/null 2>&1'
- fi
-
- # Only build a position-dependent object if we build old libraries.
- if test "$build_old_libs" = yes; then
- command="$base_compile $srcfile"
- if test "$compiler_c_o" = yes; then
- command="$command -o $obj"
- output_obj="$obj"
- fi
-
- # Suppress compiler output if we already did a PIC compilation.
- command="$command$suppress_output"
- $run $rm "$output_obj"
- $show "$command"
- if $run eval "$command"; then :
- else
- $run $rm $removelist
- exit 1
- fi
-
- if test "$need_locks" = warn &&
- test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
- echo "\
-*** ERROR, $lockfile contains:
-`cat $lockfile 2>/dev/null`
-
-but it should contain:
-$srcfile
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together. If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
- $run $rm $removelist
- exit 1
- fi
-
- # Just move the object if needed
- if test x"$output_obj" != x"$obj"; then
- $show "$mv $output_obj $obj"
- if $run $mv $output_obj $obj; then :
- else
- error=$?
- $run $rm $removelist
- exit $error
- fi
- fi
-
- # Create an invalid libtool object if no PIC, so that we do not
- # accidentally link it into a program.
- if test "$build_libtool_libs" != yes; then
- $show "echo timestamp > $libobj"
- $run eval "echo timestamp > \$libobj" || exit $?
- else
- # Move the .lo from within objdir
- $show "$mv $libobj $lo_libobj"
- if $run $mv $libobj $lo_libobj; then :
- else
- error=$?
- $run $rm $removelist
- exit $error
- fi
- fi
- fi
-
- # Unlock the critical section if it was locked
- if test "$need_locks" != no; then
- $rm "$lockfile"
- fi
-
- exit 0
- ;;
-
- # libtool link mode
- link)
- modename="$modename: link"
- case "$host" in
- *-*-cygwin* | *-*-mingw* | *-*-os2*)
- # It is impossible to link a dll without this setting, and
- # we shouldn't force the makefile maintainer to figure out
- # which system we are compiling for in order to pass an extra
- # flag for every libtool invokation.
- # allow_undefined=no
-
- # FIXME: Unfortunately, there are problems with the above when trying
- # to make a dll which has undefined symbols, in which case not
- # even a static library is built. For now, we need to specify
- # -no-undefined on the libtool link line when we can be certain
- # that all symbols are satisfied, otherwise we get a static library.
- allow_undefined=yes
-
- # This is a source program that is used to create dlls on Windows
- # Don't remove nor modify the starting and closing comments
-# /* ltdll.c starts here */
-# #define WIN32_LEAN_AND_MEAN
-# #include <windows.h>
-# #undef WIN32_LEAN_AND_MEAN
-# #include <stdio.h>
-#
-# #ifndef __CYGWIN__
-# # ifdef __CYGWIN32__
-# # define __CYGWIN__ __CYGWIN32__
-# # endif
-# #endif
-#
-# #ifdef __cplusplus
-# extern "C" {
-# #endif
-# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
-# #ifdef __cplusplus
-# }
-# #endif
-#
-# #ifdef __CYGWIN__
-# #include <cygwin/cygwin_dll.h>
-# DECLARE_CYGWIN_DLL( DllMain );
-# #endif
-# HINSTANCE __hDllInstance_base;
-#
-# BOOL APIENTRY
-# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
-# {
-# __hDllInstance_base = hInst;
-# return TRUE;
-# }
-# /* ltdll.c ends here */
- # This is a source program that is used to create import libraries
- # on Windows for dlls which lack them. Don't remove nor modify the
- # starting and closing comments
-# /* impgen.c starts here */
-# /* Copyright (C) 1999 Free Software Foundation, Inc.
-#
-# This file is part of GNU libtool.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-# */
-#
-# #include <stdio.h> /* for printf() */
-# #include <unistd.h> /* for open(), lseek(), read() */
-# #include <fcntl.h> /* for O_RDONLY, O_BINARY */
-# #include <string.h> /* for strdup() */
-#
-# static unsigned int
-# pe_get16 (fd, offset)
-# int fd;
-# int offset;
-# {
-# unsigned char b[2];
-# lseek (fd, offset, SEEK_SET);
-# read (fd, b, 2);
-# return b[0] + (b[1]<<8);
-# }
-#
-# static unsigned int
-# pe_get32 (fd, offset)
-# int fd;
-# int offset;
-# {
-# unsigned char b[4];
-# lseek (fd, offset, SEEK_SET);
-# read (fd, b, 4);
-# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
-# }
-#
-# static unsigned int
-# pe_as32 (ptr)
-# void *ptr;
-# {
-# unsigned char *b = ptr;
-# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
-# }
-#
-# int
-# main (argc, argv)
-# int argc;
-# char *argv[];
-# {
-# int dll;
-# unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
-# unsigned long export_rva, export_size, nsections, secptr, expptr;
-# unsigned long name_rvas, nexp;
-# unsigned char *expdata, *erva;
-# char *filename, *dll_name;
-#
-# filename = argv[1];
-#
-# dll = open(filename, O_RDONLY|O_BINARY);
-# if (!dll)
-# return 1;
-#
-# dll_name = filename;
-#
-# for (i=0; filename[i]; i++)
-# if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':')
-# dll_name = filename + i +1;
-#
-# pe_header_offset = pe_get32 (dll, 0x3c);
-# opthdr_ofs = pe_header_offset + 4 + 20;
-# num_entries = pe_get32 (dll, opthdr_ofs + 92);
-#
-# if (num_entries < 1) /* no exports */
-# return 1;
-#
-# export_rva = pe_get32 (dll, opthdr_ofs + 96);
-# export_size = pe_get32 (dll, opthdr_ofs + 100);
-# nsections = pe_get16 (dll, pe_header_offset + 4 +2);
-# secptr = (pe_header_offset + 4 + 20 +
-# pe_get16 (dll, pe_header_offset + 4 + 16));
-#
-# expptr = 0;
-# for (i = 0; i < nsections; i++)
-# {
-# char sname[8];
-# unsigned long secptr1 = secptr + 40 * i;
-# unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
-# unsigned long vsize = pe_get32 (dll, secptr1 + 16);
-# unsigned long fptr = pe_get32 (dll, secptr1 + 20);
-# lseek(dll, secptr1, SEEK_SET);
-# read(dll, sname, 8);
-# if (vaddr <= export_rva && vaddr+vsize > export_rva)
-# {
-# expptr = fptr + (export_rva - vaddr);
-# if (export_rva + export_size > vaddr + vsize)
-# export_size = vsize - (export_rva - vaddr);
-# break;
-# }
-# }
-#
-# expdata = (unsigned char*)malloc(export_size);
-# lseek (dll, expptr, SEEK_SET);
-# read (dll, expdata, export_size);
-# erva = expdata - export_rva;
-#
-# nexp = pe_as32 (expdata+24);
-# name_rvas = pe_as32 (expdata+32);
-#
-# printf ("EXPORTS\n");
-# for (i = 0; i<nexp; i++)
-# {
-# unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
-# printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
-# }
-#
-# return 0;
-# }
-# /* impgen.c ends here */
- ;;
- *)
- allow_undefined=yes
- ;;
- esac
- compile_command="$nonopt"
- finalize_command="$nonopt"
-
- compile_rpath=
- finalize_rpath=
- compile_shlibpath=
- finalize_shlibpath=
- convenience=
- old_convenience=
- deplibs=
- linkopts=
-
- if test -n "$shlibpath_var"; then
- # get the directories listed in $shlibpath_var
- eval lib_search_path=\`\$echo \"X \${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
- else
- lib_search_path=
- fi
- # now prepend the system-specific ones
- eval lib_search_path=\"$sys_lib_search_path_spec\$lib_search_path\"
- eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
-
- avoid_version=no
- dlfiles=
- dlprefiles=
- dlself=no
- export_dynamic=no
- export_symbols=
- export_symbols_regex=
- generated=
- libobjs=
- link_against_libtool_libs=
- ltlibs=
- module=no
- objs=
- prefer_static_libs=no
- preload=no
- prev=
- prevarg=
- release=
- rpath=
- xrpath=
- perm_rpath=
- temp_rpath=
- thread_safe=no
- vinfo=
-
- # We need to know -static, to get the right output filenames.
- for arg
- do
- case "$arg" in
- -all-static | -static)
- if test "X$arg" = "X-all-static"; then
- if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
- $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
- fi
- if test -n "$link_static_flag"; then
- dlopen_self=$dlopen_self_static
- fi
- else
- if test -z "$pic_flag" && test -n "$link_static_flag"; then
- dlopen_self=$dlopen_self_static
- fi
- fi
- build_libtool_libs=no
- build_old_libs=yes
- prefer_static_libs=yes
- break
- ;;
- esac
- done
-
- # See if our shared archives depend on static archives.
- test -n "$old_archive_from_new_cmds" && build_old_libs=yes
-
- # Go through the arguments, transforming them on the way.
- while test $# -gt 0; do
- arg="$1"
- shift
-
- # If the previous option needs an argument, assign it.
- if test -n "$prev"; then
- case "$prev" in
- output)
- compile_command="$compile_command @OUTPUT@"
- finalize_command="$finalize_command @OUTPUT@"
- ;;
- esac
-
- case "$prev" in
- dlfiles|dlprefiles)
- if test "$preload" = no; then
- # Add the symbol object into the linking commands.
- compile_command="$compile_command @SYMFILE@"
- finalize_command="$finalize_command @SYMFILE@"
- preload=yes
- fi
- case "$arg" in
- *.la | *.lo) ;; # We handle these cases below.
- force)
- if test "$dlself" = no; then
- dlself=needless
- export_dynamic=yes
- fi
- prev=
- continue
- ;;
- self)
- if test "$prev" = dlprefiles; then
- dlself=yes
- elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
- dlself=yes
- else
- dlself=needless
- export_dynamic=yes
- fi
- prev=
- continue
- ;;
- *)
- if test "$prev" = dlfiles; then
- dlfiles="$dlfiles $arg"
- else
- dlprefiles="$dlprefiles $arg"
- fi
- prev=
- ;;
- esac
- ;;
- expsyms)
- export_symbols="$arg"
- if test ! -f "$arg"; then
- $echo "$modename: symbol file \`$arg' does not exist"
- exit 1
- fi
- prev=
- continue
- ;;
- expsyms_regex)
- export_symbols_regex="$arg"
- prev=
- continue
- ;;
- release)
- release="-$arg"
- prev=
- continue
- ;;
- rpath | xrpath)
- # We need an absolute path.
- case "$arg" in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- $echo "$modename: only absolute run-paths are allowed" 1>&2
- exit 1
- ;;
- esac
- if test "$prev" = rpath; then
- case "$rpath " in
- *" $arg "*) ;;
- *) rpath="$rpath $arg" ;;
- esac
- else
- case "$xrpath " in
- *" $arg "*) ;;
- *) xrpath="$xrpath $arg" ;;
- esac
- fi
- prev=
- continue
- ;;
- *)
- eval "$prev=\"\$arg\""
- prev=
- continue
- ;;
- esac
- fi
-
- prevarg="$arg"
-
- case "$arg" in
- -all-static)
- if test -n "$link_static_flag"; then
- compile_command="$compile_command $link_static_flag"
- finalize_command="$finalize_command $link_static_flag"
- fi
- continue
- ;;
-
- -allow-undefined)
- # FIXME: remove this flag sometime in the future.
- $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
- continue
- ;;
-
- -avoid-version)
- avoid_version=yes
- continue
- ;;
-
- -dlopen)
- prev=dlfiles
- continue
- ;;
-
- -dlpreopen)
- prev=dlprefiles
- continue
- ;;
-
- -export-dynamic)
- export_dynamic=yes
- continue
- ;;
-
- -export-symbols | -export-symbols-regex)
- if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
- $echo "$modename: not more than one -exported-symbols argument allowed"
- exit 1
- fi
- if test "X$arg" = "X-export-symbols"; then
- prev=expsyms
- else
- prev=expsyms_regex
- fi
- continue
- ;;
-
- -L*)
- dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
- # We need an absolute path.
- case "$dir" in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- absdir=`cd "$dir" && pwd`
- if test -z "$absdir"; then
- $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
- $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
- absdir="$dir"
- fi
- dir="$absdir"
- ;;
- esac
- case " $deplibs " in
- *" $arg "*) ;;
- *) deplibs="$deplibs $arg";;
- esac
- case " $lib_search_path " in
- *" $dir "*) ;;
- *) lib_search_path="$lib_search_path $dir";;
- esac
- case "$host" in
- *-*-cygwin* | *-*-mingw* | *-*-os2*)
- dllsearchdir=`cd "$dir" && pwd || echo "$dir"`
- case ":$dllsearchpath:" in
- ::) dllsearchpath="$dllsearchdir";;
- *":$dllsearchdir:"*) ;;
- *) dllsearchpath="$dllsearchpath:$dllsearchdir";;
- esac
- ;;
- esac
- ;;
-
- -l*)
- if test "$arg" = "-lc"; then
- case "$host" in
- *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
- # These systems don't actually have c library (as such)
- continue
- ;;
- esac
- elif test "$arg" = "-lm"; then
- case "$host" in
- *-*-cygwin* | *-*-beos*)
- # These systems don't actually have math library (as such)
- continue
- ;;
- esac
- fi
- deplibs="$deplibs $arg"
- ;;
-
- -module)
- module=yes
- continue
- ;;
-
- -no-undefined)
- allow_undefined=no
- continue
- ;;
-
- -o) prev=output ;;
-
- -release)
- prev=release
- continue
- ;;
-
- -rpath)
- prev=rpath
- continue
- ;;
-
- -R)
- prev=xrpath
- continue
- ;;
-
- -R*)
- dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
- # We need an absolute path.
- case "$dir" in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- $echo "$modename: only absolute run-paths are allowed" 1>&2
- exit 1
- ;;
- esac
- case "$xrpath " in
- *" $dir "*) ;;
- *) xrpath="$xrpath $dir" ;;
- esac
- continue
- ;;
-
- -static)
- # If we have no pic_flag, then this is the same as -all-static.
- if test -z "$pic_flag" && test -n "$link_static_flag"; then
- compile_command="$compile_command $link_static_flag"
- finalize_command="$finalize_command $link_static_flag"
- fi
- continue
- ;;
-
- -thread-safe)
- thread_safe=yes
- continue
- ;;
-
- -version-info)
- prev=vinfo
- continue
- ;;
-
- # Some other compiler flag.
- -* | +*)
- # Unknown arguments in both finalize_command and compile_command need
- # to be aesthetically quoted because they are evaled later.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case "$arg" in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
- arg="\"$arg\""
- ;;
- esac
- ;;
-
- *.o | *.obj | *.a | *.lib)
- # A standard object.
- objs="$objs $arg"
- ;;
-
- *.lo)
- # A library object.
- if test "$prev" = dlfiles; then
- dlfiles="$dlfiles $arg"
- if test "$build_libtool_libs" = yes && test "$dlopen" = yes; then
- prev=
- continue
- else
- # If libtool objects are unsupported, then we need to preload.
- prev=dlprefiles
- fi
- fi
-
- if test "$prev" = dlprefiles; then
- # Preload the old-style object.
- dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"`
- prev=
- fi
- libobjs="$libobjs $arg"
- ;;
-
- *.la)
- # A libtool-controlled library.
-
- dlname=
- libdir=
- library_names=
- old_library=
-
- # Check to see that this really is a libtool archive.
- if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- else
- $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2
- exit 1
- fi
-
- # If the library was installed with an old release of libtool,
- # it will not redefine variable installed.
- installed=yes
-
- # Read the .la file
- # If there is no directory component, then add one.
- case "$arg" in
- */* | *\\*) . $arg ;;
- *) . ./$arg ;;
- esac
-
- # Get the name of the library we link against.
- linklib=
- for l in $old_library $library_names; do
- linklib="$l"
- done
-
- if test -z "$linklib"; then
- $echo "$modename: cannot find name of link library for \`$arg'" 1>&2
- exit 1
- fi
-
- # Find the relevant object directory and library name.
- name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'`
-
- if test "X$installed" = Xyes; then
- dir="$libdir"
- else
- dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$dir" = "X$arg"; then
- dir="$objdir"
- else
- dir="$dir/$objdir"
- fi
- fi
-
- if test -n "$dependency_libs"; then
- # Extract -R and -L from dependency_libs
- temp_deplibs=
- for deplib in $dependency_libs; do
- case "$deplib" in
- -R*) temp_xrpath=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
- case " $rpath $xrpath " in
- *" $temp_xrpath "*) ;;
- *) xrpath="$xrpath $temp_xrpath";;
- esac;;
- -L*) case "$compile_command $temp_deplibs " in
- *" $deplib "*) ;;
- *) temp_deplibs="$temp_deplibs $deplib";;
- esac
- temp_dir=`$echo "X$deplib" | $Xsed -e 's/^-L//'`
- case " $lib_search_path " in
- *" $temp_dir "*) ;;
- *) lib_search_path="$lib_search_path $temp_dir";;
- esac
- ;;
- *) temp_deplibs="$temp_deplibs $deplib";;
- esac
- done
- dependency_libs="$temp_deplibs"
- fi
-
- if test -z "$libdir"; then
- # It is a libtool convenience library, so add in its objects.
- convenience="$convenience $dir/$old_library"
- old_convenience="$old_convenience $dir/$old_library"
- deplibs="$deplibs$dependency_libs"
- compile_command="$compile_command $dir/$old_library$dependency_libs"
- finalize_command="$finalize_command $dir/$old_library$dependency_libs"
- continue
- fi
-
- # This library was specified with -dlopen.
- if test "$prev" = dlfiles; then
- dlfiles="$dlfiles $arg"
- if test -z "$dlname" || test "$dlopen" != yes || test "$build_libtool_libs" = no; then
- # If there is no dlname, no dlopen support or we're linking statically,
- # we need to preload.
- prev=dlprefiles
- else
- # We should not create a dependency on this library, but we
- # may need any libraries it requires.
- compile_command="$compile_command$dependency_libs"
- finalize_command="$finalize_command$dependency_libs"
- prev=
- continue
- fi
- fi
-
- # The library was specified with -dlpreopen.
- if test "$prev" = dlprefiles; then
- # Prefer using a static library (so that no silly _DYNAMIC symbols
- # are required to link).
- if test -n "$old_library"; then
- dlprefiles="$dlprefiles $dir/$old_library"
- else
- dlprefiles="$dlprefiles $dir/$linklib"
- fi
- prev=
- fi
-
- if test -n "$library_names" &&
- { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
- link_against_libtool_libs="$link_against_libtool_libs $arg"
- if test -n "$shlibpath_var"; then
- # Make sure the rpath contains only unique directories.
- case "$temp_rpath " in
- *" $dir "*) ;;
- *) temp_rpath="$temp_rpath $dir" ;;
- esac
- fi
-
- # We need an absolute path.
- case "$dir" in
- [\\/] | [A-Za-z]:[\\/]*) absdir="$dir" ;;
- *)
- absdir=`cd "$dir" && pwd`
- if test -z "$absdir"; then
- $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
- $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
- absdir="$dir"
- fi
- ;;
- esac
-
- # This is the magic to use -rpath.
- # Skip directories that are in the system default run-time
- # search path, unless they have been requested with -R.
- case " $sys_lib_dlsearch_path " in
- *" $absdir "*) ;;
- *)
- case "$compile_rpath " in
- *" $absdir "*) ;;
- *) compile_rpath="$compile_rpath $absdir"
- esac
- ;;
- esac
-
- case " $sys_lib_dlsearch_path " in
- *" $libdir "*) ;;
- *)
- case "$finalize_rpath " in
- *" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir"
- esac
- ;;
- esac
-
- lib_linked=yes
- case "$hardcode_action" in
- immediate | unsupported)
- if test "$hardcode_direct" = no; then
- compile_command="$compile_command $dir/$linklib"
- deplibs="$deplibs $dir/$linklib"
- case "$host" in
- *-*-cygwin* | *-*-mingw* | *-*-os2*)
- dllsearchdir=`cd "$dir" && pwd || echo "$dir"`
- if test -n "$dllsearchpath"; then
- dllsearchpath="$dllsearchpath:$dllsearchdir"
- else
- dllsearchpath="$dllsearchdir"
- fi
- ;;
- esac
- elif test "$hardcode_minus_L" = no; then
- case "$host" in
- *-*-sunos*)
- compile_shlibpath="$compile_shlibpath$dir:"
- ;;
- esac
- case "$compile_command " in
- *" -L$dir "*) ;;
- *) compile_command="$compile_command -L$dir";;
- esac
- compile_command="$compile_command -l$name"
- deplibs="$deplibs -L$dir -l$name"
- elif test "$hardcode_shlibpath_var" = no; then
- case ":$compile_shlibpath:" in
- *":$dir:"*) ;;
- *) compile_shlibpath="$compile_shlibpath$dir:";;
- esac
- compile_command="$compile_command -l$name"
- deplibs="$deplibs -l$name"
- else
- lib_linked=no
- fi
- ;;
-
- relink)
- if test "$hardcode_direct" = yes; then
- compile_command="$compile_command $absdir/$linklib"
- deplibs="$deplibs $absdir/$linklib"
- elif test "$hardcode_minus_L" = yes; then
- case "$compile_command " in
- *" -L$absdir "*) ;;
- *) compile_command="$compile_command -L$absdir";;
- esac
- compile_command="$compile_command -l$name"
- deplibs="$deplibs -L$absdir -l$name"
- elif test "$hardcode_shlibpath_var" = yes; then
- case ":$compile_shlibpath:" in
- *":$absdir:"*) ;;
- *) compile_shlibpath="$compile_shlibpath$absdir:";;
- esac
- compile_command="$compile_command -l$name"
- deplibs="$deplibs -l$name"
- else
- lib_linked=no
- fi
- ;;
-
- *)
- lib_linked=no
- ;;
- esac
-
- if test "$lib_linked" != yes; then
- $echo "$modename: configuration error: unsupported hardcode properties"
- exit 1
- fi
-
- # Finalize command for both is simple: just hardcode it.
- if test "$hardcode_direct" = yes; then
- finalize_command="$finalize_command $libdir/$linklib"
- elif test "$hardcode_minus_L" = yes; then
- case "$finalize_command " in
- *" -L$libdir "*) ;;
- *) finalize_command="$finalize_command -L$libdir";;
- esac
- finalize_command="$finalize_command -l$name"
- elif test "$hardcode_shlibpath_var" = yes; then
- case ":$finalize_shlibpath:" in
- *":$libdir:"*) ;;
- *) finalize_shlibpath="$finalize_shlibpath$libdir:";;
- esac
- finalize_command="$finalize_command -l$name"
- else
- # We cannot seem to hardcode it, guess we'll fake it.
- case "$finalize_command " in
- *" -L$dir "*) ;;
- *) finalize_command="$finalize_command -L$libdir";;
- esac
- finalize_command="$finalize_command -l$name"
- fi
- else
- # Transform directly to old archives if we don't build new libraries.
- if test -n "$pic_flag" && test -z "$old_library"; then
- $echo "$modename: cannot find static library for \`$arg'" 1>&2
- exit 1
- fi
-
- # Here we assume that one of hardcode_direct or hardcode_minus_L
- # is not unsupported. This is valid on all known static and
- # shared platforms.
- if test "$hardcode_direct" != unsupported; then
- test -n "$old_library" && linklib="$old_library"
- compile_command="$compile_command $dir/$linklib"
- finalize_command="$finalize_command $dir/$linklib"
- else
- case "$compile_command " in
- *" -L$dir "*) ;;
- *) compile_command="$compile_command -L$dir";;
- esac
- compile_command="$compile_command -l$name"
- case "$finalize_command " in
- *" -L$dir "*) ;;
- *) finalize_command="$finalize_command -L$dir";;
- esac
- finalize_command="$finalize_command -l$name"
- fi
- fi
-
- # Add in any libraries that this one depends upon.
- compile_command="$compile_command$dependency_libs"
- finalize_command="$finalize_command$dependency_libs"
- continue
- ;;
-
- # Some other compiler argument.
- *)
- # Unknown arguments in both finalize_command and compile_command need
- # to be aesthetically quoted because they are evaled later.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case "$arg" in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
- arg="\"$arg\""
- ;;
- esac
- ;;
- esac
-
- # Now actually substitute the argument into the commands.
- if test -n "$arg"; then
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- fi
- done
-
- if test -n "$prev"; then
- $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
- eval arg=\"$export_dynamic_flag_spec\"
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- fi
-
- oldlibs=
- # calculate the name of the file, without its directory
- outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
- libobjs_save="$libobjs"
-
- case "$output" in
- "")
- $echo "$modename: you must specify an output file" 1>&2
- $echo "$help" 1>&2
- exit 1
- ;;
-
- *.a | *.lib)
- if test -n "$link_against_libtool_libs"; then
- $echo "$modename: error: cannot link libtool libraries into archives" 1>&2
- exit 1
- fi
-
- if test -n "$deplibs"; then
- $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
- fi
-
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
- fi
-
- if test -n "$rpath"; then
- $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
- fi
-
- if test -n "$xrpath"; then
- $echo "$modename: warning: \`-R' is ignored for archives" 1>&2
- fi
-
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2
- fi
-
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for archives" 1>&2
- fi
-
- if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
- $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
- fi
-
- # Now set the variables for building old libraries.
- build_libtool_libs=no
- oldlibs="$output"
- ;;
-
- *.la)
- # Make sure we only generate libraries of the form `libNAME.la'.
- case "$outputname" in
- lib*)
- name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
- eval libname=\"$libname_spec\"
- ;;
- *)
- if test "$module" = no; then
- $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
- if test "$need_lib_prefix" != no; then
- # Add the "lib" prefix for modules if required
- name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
- eval libname=\"$libname_spec\"
- else
- libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
- fi
- ;;
- esac
-
- output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$output_objdir" = "X$output"; then
- output_objdir="$objdir"
- else
- output_objdir="$output_objdir/$objdir"
- fi
-
- if test -n "$objs"; then
- $echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1
- exit 1
- fi
-
- # How the heck are we supposed to write a wrapper for a shared library?
- if test -n "$link_against_libtool_libs"; then
- $echo "$modename: error: cannot link shared libraries into libtool libraries" 1>&2
- exit 1
- fi
-
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- $echo "$modename: warning: \`-dlopen' is ignored for libtool libraries" 1>&2
- fi
-
- set dummy $rpath
- if test $# -gt 2; then
- $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
- fi
- install_libdir="$2"
-
- oldlibs=
- if test -z "$rpath"; then
- if test "$build_libtool_libs" = yes; then
- # Building a libtool convenience library.
- libext=al
- oldlibs="$output_objdir/$libname.$libext $oldlibs"
- build_libtool_libs=convenience
- build_old_libs=yes
- fi
- dependency_libs="$deplibs"
-
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2
- fi
-
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
- fi
- else
-
- # Parse the version information argument.
- IFS="${IFS= }"; save_ifs="$IFS"; IFS=':'
- set dummy $vinfo 0 0 0
- IFS="$save_ifs"
-
- if test -n "$8"; then
- $echo "$modename: too many parameters to \`-version-info'" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- current="$2"
- revision="$3"
- age="$4"
-
- # Check that each of the things are valid numbers.
- case "$current" in
- 0 | [1-9] | [1-9][0-9]*) ;;
- *)
- $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit 1
- ;;
- esac
-
- case "$revision" in
- 0 | [1-9] | [1-9][0-9]*) ;;
- *)
- $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit 1
- ;;
- esac
-
- case "$age" in
- 0 | [1-9] | [1-9][0-9]*) ;;
- *)
- $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit 1
- ;;
- esac
-
- if test $age -gt $current; then
- $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit 1
- fi
-
- # Calculate the version variables.
- major=
- versuffix=
- verstring=
- case "$version_type" in
- none) ;;
-
- irix)
- major=`expr $current - $age + 1`
- versuffix="$major.$revision"
- verstring="sgi$major.$revision"
-
- # Add in all the interfaces that we are compatible with.
- loop=$revision
- while test $loop != 0; do
- iface=`expr $revision - $loop`
- loop=`expr $loop - 1`
- verstring="sgi$major.$iface:$verstring"
- done
- ;;
-
- linux)
- major=.`expr $current - $age`
- versuffix="$major.$age.$revision"
- ;;
-
- osf)
- major=`expr $current - $age`
- versuffix=".$current.$age.$revision"
- verstring="$current.$age.$revision"
-
- # Add in all the interfaces that we are compatible with.
- loop=$age
- while test $loop != 0; do
- iface=`expr $current - $loop`
- loop=`expr $loop - 1`
- verstring="$verstring:${iface}.0"
- done
-
- # Make executables depend on our current version.
- verstring="$verstring:${current}.0"
- ;;
-
- sunos)
- major=".$current"
- versuffix=".$current.$revision"
- ;;
-
- freebsd-aout)
- major=".$current"
- versuffix=".$current.$revision";
- ;;
-
- freebsd-elf)
- major=".$current"
- versuffix=".$current";
- ;;
-
- windows)
- # Like Linux, but with '-' rather than '.', since we only
- # want one extension on Windows 95.
- major=`expr $current - $age`
- versuffix="-$major-$age-$revision"
- ;;
-
- *)
- $echo "$modename: unknown library version type \`$version_type'" 1>&2
- echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
- exit 1
- ;;
- esac
-
- # Clear the version info if we defaulted, and they specified a release.
- if test -z "$vinfo" && test -n "$release"; then
- major=
- verstring="0.0"
- if test "$need_version" = no; then
- versuffix=
- else
- versuffix=".0.0"
- fi
- fi
-
- # Remove version info from name if versioning should be avoided
- if test "$avoid_version" = yes && test "$need_version" = no; then
- major=
- versuffix=
- verstring=""
- fi
-
- # Check to see if the archive will have undefined symbols.
- if test "$allow_undefined" = yes; then
- if test "$allow_undefined_flag" = unsupported; then
- $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
- build_libtool_libs=no
- build_old_libs=yes
- fi
- else
- # Don't allow undefined symbols.
- allow_undefined_flag="$no_undefined_flag"
- fi
-
- dependency_libs="$deplibs"
- case "$host" in
- *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
- # these systems don't actually have a c library (as such)!
- ;;
- *-*-rhapsody*)
- # rhapsody is a little odd...
- deplibs="$deplibs -framework System"
- ;;
- *)
- # Add libc to deplibs on all other systems.
- deplibs="$deplibs -lc"
- ;;
- esac
- fi
-
- # Create the output directory, or remove our outputs if we need to.
- if test -d $output_objdir; then
- $show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*"
- $run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*
- else
- $show "$mkdir $output_objdir"
- $run $mkdir $output_objdir
- status=$?
- if test $status -ne 0 && test ! -d $output_objdir; then
- exit $status
- fi
- fi
-
- # Now set the variables for building old libraries.
- if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
- oldlibs="$oldlibs $output_objdir/$libname.$libext"
-
- # Transform .lo files to .o files.
- oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
- fi
-
- if test "$build_libtool_libs" = yes; then
- # Transform deplibs into only deplibs that can be linked in shared.
- name_save=$name
- libname_save=$libname
- release_save=$release
- versuffix_save=$versuffix
- major_save=$major
- # I'm not sure if I'm treating the release correctly. I think
- # release should show up in the -l (ie -lgmp5) so we don't want to
- # add it in twice. Is that correct?
- release=""
- versuffix=""
- major=""
- newdeplibs=
- droppeddeps=no
- case "$deplibs_check_method" in
- pass_all)
- # Don't check for shared/static. Everything works.
- # This might be a little naive. We might want to check
- # whether the library exists or not. But this is on
- # osf3 & osf4 and I'm not really sure... Just
- # implementing what was already the behaviour.
- newdeplibs=$deplibs
- ;;
- test_compile)
- # This code stresses the "libraries are programs" paradigm to its
- # limits. Maybe even breaks it. We compile a program, linking it
- # against the deplibs as a proxy for the library. Then we can check
- # whether they linked in statically or dynamically with ldd.
- $rm conftest.c
- cat > conftest.c <<EOF
- int main() { return 0; }
-EOF
- $rm conftest
- $CC -o conftest conftest.c $deplibs
- if test $? -eq 0 ; then
- ldd_output=`ldd conftest`
- for i in $deplibs; do
- name="`expr $i : '-l\(.*\)'`"
- # If $name is empty we are operating on a -L argument.
- if test "$name" != "" ; then
- libname=`eval \\$echo \"$libname_spec\"`
- deplib_matches=`eval \\$echo \"$library_names_spec\"`
- set dummy $deplib_matches
- deplib_match=$2
- if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
- newdeplibs="$newdeplibs $i"
- else
- droppeddeps=yes
- echo
- echo "*** Warning: This library needs some functionality provided by $i."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have."
- fi
- else
- newdeplibs="$newdeplibs $i"
- fi
- done
- else
- # Error occured in the first compile. Let's try to salvage the situation:
- # Compile a seperate program for each library.
- for i in $deplibs; do
- name="`expr $i : '-l\(.*\)'`"
- # If $name is empty we are operating on a -L argument.
- if test "$name" != "" ; then
- $rm conftest
- $CC -o conftest conftest.c $i
- # Did it work?
- if test $? -eq 0 ; then
- ldd_output=`ldd conftest`
- libname=`eval \\$echo \"$libname_spec\"`
- deplib_matches=`eval \\$echo \"$library_names_spec\"`
- set dummy $deplib_matches
- deplib_match=$2
- if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
- newdeplibs="$newdeplibs $i"
- else
- droppeddeps=yes
- echo
- echo "*** Warning: This library needs some functionality provided by $i."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have."
- fi
- else
- droppeddeps=yes
- echo
- echo "*** Warning! Library $i is needed by this library but I was not able to"
- echo "*** make it link in! You will probably need to install it or some"
- echo "*** library that it depends on before this library will be fully"
- echo "*** functional. Installing it before continuing would be even better."
- fi
- else
- newdeplibs="$newdeplibs $i"
- fi
- done
- fi
- ;;
- file_magic*)
- set dummy $deplibs_check_method
- file_magic_regex="`expr \"$deplibs_check_method\" : \"$2 \(.*\)\"`"
- for a_deplib in $deplibs; do
- name="`expr $a_deplib : '-l\(.*\)'`"
- # If $name is empty we are operating on a -L argument.
- if test "$name" != "" ; then
- libname=`eval \\$echo \"$libname_spec\"`
- for i in $lib_search_path; do
- potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
- for potent_lib in $potential_libs; do
- # Follow soft links.
- if ls -lLd "$potent_lib" 2>/dev/null \
- | grep " -> " >/dev/null; then
- continue
- fi
- # The statement above tries to avoid entering an
- # endless loop below, in case of cyclic links.
- # We might still enter an endless loop, since a link
- # loop can be closed while we follow links,
- # but so what?
- potlib="$potent_lib"
- while test -h "$potlib" 2>/dev/null; do
- potliblink=`ls -ld $potlib | sed 's/.* -> //'`
- case "$potliblink" in
- [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
- *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
- esac
- done
- if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
- | sed 10q \
- | egrep "$file_magic_regex" > /dev/null; then
- newdeplibs="$newdeplibs $a_deplib"
- a_deplib=""
- break 2
- fi
- done
- done
- if test -n "$a_deplib" ; then
- droppeddeps=yes
- echo
- echo "*** Warning: This library needs some functionality provided by $a_deplib."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have."
- fi
- else
- # Add a -L argument.
- newdeplibs="$newdeplibs $a_deplib"
- fi
- done # Gone through all deplibs.
- ;;
- none | unknown | *)
- newdeplibs=""
- if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
- -e 's/ -[LR][^ ]*//g' -e 's/[ ]//g' |
- grep . >/dev/null; then
- echo
- if test "X$deplibs_check_method" = "Xnone"; then
- echo "*** Warning: inter-library dependencies are not supported in this platform."
- else
- echo "*** Warning: inter-library dependencies are not known to be supported."
- fi
- echo "*** All declared inter-library dependencies are being dropped."
- droppeddeps=yes
- fi
- ;;
- esac
- versuffix=$versuffix_save
- major=$major_save
- release=$release_save
- libname=$libname_save
- name=$name_save
-
- if test "$droppeddeps" = yes; then
- if test "$module" = yes; then
- echo
- echo "*** Warning: libtool could not satisfy all declared inter-library"
- echo "*** dependencies of module $libname. Therefore, libtool will create"
- echo "*** a static module, that should work as long as the dlopening"
- echo "*** application is linked with the -dlopen flag."
- if test -z "$global_symbol_pipe"; then
- echo
- echo "*** However, this would only work if libtool was able to extract symbol"
- echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
- echo "*** not find such a program. So, this module is probably useless."
- echo "*** \`nm' from GNU binutils and a full rebuild may help."
- fi
- if test "$build_old_libs" = no; then
- oldlibs="$output_objdir/$libname.$libext"
- build_libtool_libs=module
- build_old_libs=yes
- else
- build_libtool_libs=no
- fi
- else
- echo "*** The inter-library dependencies that have been dropped here will be"
- echo "*** automatically added whenever a program is linked with this library"
- echo "*** or is declared to -dlopen it."
- fi
- fi
- # Done checking deplibs!
- deplibs=$newdeplibs
- fi
-
- # All the library-specific variables (install_libdir is set above).
- library_names=
- old_library=
- dlname=
-
- # Test again, we may have decided not to build it any more
- if test "$build_libtool_libs" = yes; then
- # Get the real and link names of the library.
- eval library_names=\"$library_names_spec\"
- set dummy $library_names
- realname="$2"
- shift; shift
-
- if test -n "$soname_spec"; then
- eval soname=\"$soname_spec\"
- else
- soname="$realname"
- fi
-
- lib="$output_objdir/$realname"
- for link
- do
- linknames="$linknames $link"
- done
-
- # Ensure that we have .o objects for linkers which dislike .lo
- # (e.g. aix) in case we are running --disable-static
- for obj in $libobjs; do
- xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$obj"; then
- xdir="."
- else
- xdir="$xdir"
- fi
- baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
- oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
- if test ! -f $xdir/$oldobj; then
- $show "(cd $xdir && ${LN_S} $baseobj $oldobj)"
- $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $?
- fi
- done
-
- # Use standard objects if they are pic
- test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-
- # Prepare the list of exported symbols
- if test -z "$export_symbols"; then
- if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
- $show "generating symbol list for \`$libname.la'"
- export_symbols="$output_objdir/$libname.exp"
- $run $rm $export_symbols
- eval cmds=\"$export_symbols_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- if test -n "$export_symbols_regex"; then
- $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
- $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
- $show "$mv \"${export_symbols}T\" \"$export_symbols\""
- $run eval '$mv "${export_symbols}T" "$export_symbols"'
- fi
- fi
- fi
-
- if test -n "$export_symbols" && test -n "$include_expsyms"; then
- $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
- fi
-
- if test -n "$convenience"; then
- if test -n "$whole_archive_flag_spec"; then
- eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
- else
- gentop="$output_objdir/${outputname}x"
- $show "${rm}r $gentop"
- $run ${rm}r "$gentop"
- $show "mkdir $gentop"
- $run mkdir "$gentop"
- status=$?
- if test $status -ne 0 && test ! -d "$gentop"; then
- exit $status
- fi
- generated="$generated $gentop"
-
- for xlib in $convenience; do
- # Extract the objects.
- case "$xlib" in
- [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
- *) xabs=`pwd`"/$xlib" ;;
- esac
- xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
- xdir="$gentop/$xlib"
-
- $show "${rm}r $xdir"
- $run ${rm}r "$xdir"
- $show "mkdir $xdir"
- $run mkdir "$xdir"
- status=$?
- if test $status -ne 0 && test ! -d "$xdir"; then
- exit $status
- fi
- $show "(cd $xdir && $AR x $xabs)"
- $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-
- libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
- done
- fi
- fi
-
- if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
- eval flag=\"$thread_safe_flag_spec\"
- linkopts="$linkopts $flag"
- fi
-
- # Do each of the archive commands.
- if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
- eval cmds=\"$archive_expsym_cmds\"
- else
- eval cmds=\"$archive_cmds\"
- fi
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
-
- # Create links to the real library.
- for linkname in $linknames; do
- if test "$realname" != "$linkname"; then
- $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
- $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
- fi
- done
-
- # If -module or -export-dynamic was specified, set the dlname.
- if test "$module" = yes || test "$export_dynamic" = yes; then
- # On all known operating systems, these are identical.
- dlname="$soname"
- fi
- fi
- ;;
-
- *.lo | *.o | *.obj)
- if test -n "$link_against_libtool_libs"; then
- $echo "$modename: error: cannot link libtool libraries into objects" 1>&2
- exit 1
- fi
-
- if test -n "$deplibs"; then
- $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
- fi
-
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
- fi
-
- if test -n "$rpath"; then
- $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
- fi
-
- if test -n "$xrpath"; then
- $echo "$modename: warning: \`-R' is ignored for objects" 1>&2
- fi
-
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
- fi
-
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for objects" 1>&2
- fi
-
- case "$output" in
- *.lo)
- if test -n "$objs"; then
- $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
- exit 1
- fi
- libobj="$output"
- obj=`$echo "X$output" | $Xsed -e "$lo2o"`
- ;;
- *)
- libobj=
- obj="$output"
- ;;
- esac
-
- # Delete the old objects.
- $run $rm $obj $libobj
-
- # Objects from convenience libraries. This assumes
- # single-version convenience libraries. Whenever we create
- # different ones for PIC/non-PIC, this we'll have to duplicate
- # the extraction.
- reload_conv_objs=
- gentop=
- # reload_cmds runs $LD directly, so let us get rid of
- # -Wl from whole_archive_flag_spec
- wl=
-
- if test -n "$convenience"; then
- if test -n "$whole_archive_flag_spec"; then
- eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
- else
- gentop="$output_objdir/${obj}x"
- $show "${rm}r $gentop"
- $run ${rm}r "$gentop"
- $show "mkdir $gentop"
- $run mkdir "$gentop"
- status=$?
- if test $status -ne 0 && test ! -d "$gentop"; then
- exit $status
- fi
- generated="$generated $gentop"
-
- for xlib in $convenience; do
- # Extract the objects.
- case "$xlib" in
- [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
- *) xabs=`pwd`"/$xlib" ;;
- esac
- xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
- xdir="$gentop/$xlib"
-
- $show "${rm}r $xdir"
- $run ${rm}r "$xdir"
- $show "mkdir $xdir"
- $run mkdir "$xdir"
- status=$?
- if test $status -ne 0 && test ! -d "$xdir"; then
- exit $status
- fi
- $show "(cd $xdir && $AR x $xabs)"
- $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-
- reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
- done
- fi
- fi
-
- # Create the old-style object.
- reload_objs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs"
-
- output="$obj"
- eval cmds=\"$reload_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
-
- # Exit if we aren't doing a library object file.
- if test -z "$libobj"; then
- if test -n "$gentop"; then
- $show "${rm}r $gentop"
- $run ${rm}r $gentop
- fi
-
- exit 0
- fi
-
- if test "$build_libtool_libs" != yes; then
- if test -n "$gentop"; then
- $show "${rm}r $gentop"
- $run ${rm}r $gentop
- fi
-
- # Create an invalid libtool object if no PIC, so that we don't
- # accidentally link it into a program.
- $show "echo timestamp > $libobj"
- $run eval "echo timestamp > $libobj" || exit $?
- exit 0
- fi
-
- if test -n "$pic_flag"; then
- # Only do commands if we really have different PIC objects.
- reload_objs="$libobjs $reload_conv_objs"
- output="$libobj"
- eval cmds=\"$reload_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- else
- # Just create a symlink.
- $show $rm $libobj
- $run $rm $libobj
- xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$libobj"; then
- xdir="."
- else
- xdir="$xdir"
- fi
- baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
- oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
- $show "(cd $xdir && $LN_S $oldobj $baseobj)"
- $run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $?
- fi
-
- if test -n "$gentop"; then
- $show "${rm}r $gentop"
- $run ${rm}r $gentop
- fi
-
- exit 0
- ;;
-
- # Anything else should be a program.
- *)
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
- fi
-
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for programs" 1>&2
- fi
-
- if test "$preload" = yes; then
- if test "$dlopen" = unknown && test "$dlopen_self" = unknown &&
- test "$dlopen_self_static" = unknown; then
- $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
- fi
- fi
-
- if test -n "$rpath$xrpath"; then
- # If the user specified any rpath flags, then add them.
- for libdir in $rpath $xrpath; do
- # This is the magic to use -rpath.
- case "$compile_rpath " in
- *" $libdir "*) ;;
- *) compile_rpath="$compile_rpath $libdir" ;;
- esac
- case "$finalize_rpath " in
- *" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir" ;;
- esac
- done
- fi
-
- # Now hardcode the library paths
- rpath=
- hardcode_libdirs=
- for libdir in $compile_rpath $finalize_rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs="$libdir"
- else
- # Just accumulate the unique libdirs.
- case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
- *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- ;;
- *)
- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
- ;;
- esac
- fi
- else
- eval flag=\"$hardcode_libdir_flag_spec\"
- rpath="$rpath $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$perm_rpath " in
- *" $libdir "*) ;;
- *) perm_rpath="$perm_rpath $libdir" ;;
- esac
- fi
- done
- # Substitute the hardcoded libdirs into the rpath.
- if test -n "$hardcode_libdir_separator" &&
- test -n "$hardcode_libdirs"; then
- libdir="$hardcode_libdirs"
- eval rpath=\" $hardcode_libdir_flag_spec\"
- fi
- compile_rpath="$rpath"
-
- rpath=
- hardcode_libdirs=
- for libdir in $finalize_rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs="$libdir"
- else
- # Just accumulate the unique libdirs.
- case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
- *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- ;;
- *)
- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
- ;;
- esac
- fi
- else
- eval flag=\"$hardcode_libdir_flag_spec\"
- rpath="$rpath $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$finalize_perm_rpath " in
- *" $libdir "*) ;;
- *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
- esac
- fi
- done
- # Substitute the hardcoded libdirs into the rpath.
- if test -n "$hardcode_libdir_separator" &&
- test -n "$hardcode_libdirs"; then
- libdir="$hardcode_libdirs"
- eval rpath=\" $hardcode_libdir_flag_spec\"
- fi
- finalize_rpath="$rpath"
-
- output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$output_objdir" = "X$output"; then
- output_objdir="$objdir"
- else
- output_objdir="$output_objdir/$objdir"
- fi
-
- # Create the binary in the object directory, then wrap it.
- if test ! -d $output_objdir; then
- $show "$mkdir $output_objdir"
- $run $mkdir $output_objdir
- status=$?
- if test $status -ne 0 && test ! -d $output_objdir; then
- exit $status
- fi
- fi
-
- if test -n "$libobjs" && test "$build_old_libs" = yes; then
- # Transform all the library objects into standard objects.
- compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- fi
-
- dlsyms=
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- if test -n "$NM" && test -n "$global_symbol_pipe"; then
- dlsyms="${outputname}S.c"
- else
- $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
- fi
- fi
-
- if test -n "$dlsyms"; then
- case "$dlsyms" in
- "") ;;
- *.c)
- # Discover the nlist of each of the dlfiles.
- nlist="$output_objdir/${outputname}.nm"
-
- $show "$rm $nlist ${nlist}S ${nlist}T"
- $run $rm "$nlist" "${nlist}S" "${nlist}T"
-
- # Parse the name list into a source file.
- $show "creating $output_objdir/$dlsyms"
-
- test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
-/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
-/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
-
-#ifdef __cplusplus
-extern \"C\" {
-#endif
-
-/* Prevent the only kind of declaration conflicts we can make. */
-#define lt_preloaded_symbols some_other_symbol
-
-/* External symbol declarations for the compiler. */\
-"
-
- if test "$dlself" = yes; then
- $show "generating symbol list for \`$output'"
-
- test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
-
- # Add our own program objects to the symbol list.
- progfiles=`$echo "X$objs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- for arg in $progfiles; do
- $show "extracting global C symbols from \`$arg'"
- $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
- done
-
- if test -n "$exclude_expsyms"; then
- $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
- $run eval '$mv "$nlist"T "$nlist"'
- fi
-
- if test -n "$export_symbols_regex"; then
- $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T'
- $run eval '$mv "$nlist"T "$nlist"'
- fi
-
- # Prepare the list of exported symbols
- if test -z "$export_symbols"; then
- export_symbols="$output_objdir/$output.exp"
- $run $rm $export_symbols
- $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
- else
- $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
- $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T'
- $run eval 'mv "$nlist"T "$nlist"'
- fi
- fi
-
- for arg in $dlprefiles; do
- $show "extracting global C symbols from \`$arg'"
- name=`echo "$arg" | sed -e 's%^.*/%%'`
- $run eval 'echo ": $name " >> "$nlist"'
- $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
- done
-
- if test -z "$run"; then
- # Make sure we have at least an empty file.
- test -f "$nlist" || : > "$nlist"
-
- if test -n "$exclude_expsyms"; then
- egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
- $mv "$nlist"T "$nlist"
- fi
-
- # Try sorting and uniquifying the output.
- if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then
- :
- else
- grep -v "^: " < "$nlist" > "$nlist"S
- fi
-
- if test -f "$nlist"S; then
- eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
- else
- echo '/* NONE */' >> "$output_objdir/$dlsyms"
- fi
-
- $echo >> "$output_objdir/$dlsyms" "\
-
-#undef lt_preloaded_symbols
-
-#if defined (__STDC__) && __STDC__
-# define lt_ptr_t void *
-#else
-# define lt_ptr_t char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
- const char *name;
- lt_ptr_t address;
-}
-lt_preloaded_symbols[] =
-{\
-"
-
- sed -n -e 's/^: \([^ ]*\) $/ {\"\1\", (lt_ptr_t) 0},/p' \
- -e 's/^. \([^ ]*\) \([^ ]*\)$/ {"\2", (lt_ptr_t) \&\2},/p' \
- < "$nlist" >> "$output_objdir/$dlsyms"
-
- $echo >> "$output_objdir/$dlsyms" "\
- {0, (lt_ptr_t) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
- return lt_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif\
-"
- fi
-
- pic_flag_for_symtable=
- case "$host" in
- # compiling the symbol table file with pic_flag works around
- # a FreeBSD bug that causes programs to crash when -lm is
- # linked before any other PIC object. But we must not use
- # pic_flag when linking with -static. The problem exists in
- # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
- *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
- case "$compile_command " in
- *" -static "*) ;;
- *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";;
- esac;;
- *-*-hpux*)
- case "$compile_command " in
- *" -static "*) ;;
- *) pic_flag_for_symtable=" $pic_flag -DPIC";;
- esac
- esac
-
- # Now compile the dynamic symbol file.
- $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
- $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
-
- # Clean up the generated files.
- $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
- $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
-
- # Transform the symbol file into the correct name.
- compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
- finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
- ;;
- *)
- $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
- exit 1
- ;;
- esac
- else
- # We keep going just in case the user didn't refer to
- # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
- # really was required.
-
- # Nullify the symbol file.
- compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
- finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
- fi
-
- if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then
- # Replace the output file specification.
- compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
- link_command="$compile_command$compile_rpath"
-
- # We have no uninstalled library dependencies, so finalize right now.
- $show "$link_command"
- $run eval "$link_command"
- status=$?
-
- # Delete the generated files.
- if test -n "$dlsyms"; then
- $show "$rm $output_objdir/${outputname}S.${objext}"
- $run $rm "$output_objdir/${outputname}S.${objext}"
- fi
-
- exit $status
- fi
-
- if test -n "$shlibpath_var"; then
- # We should set the shlibpath_var
- rpath=
- for dir in $temp_rpath; do
- case "$dir" in
- [\\/]* | [A-Za-z]:[\\/]*)
- # Absolute path.
- rpath="$rpath$dir:"
- ;;
- *)
- # Relative path: add a thisdir entry.
- rpath="$rpath\$thisdir/$dir:"
- ;;
- esac
- done
- temp_rpath="$rpath"
- fi
-
- if test -n "$compile_shlibpath$finalize_shlibpath"; then
- compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
- fi
- if test -n "$finalize_shlibpath"; then
- finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
- fi
-
- compile_var=
- finalize_var=
- if test -n "$runpath_var"; then
- if test -n "$perm_rpath"; then
- # We should set the runpath_var.
- rpath=
- for dir in $perm_rpath; do
- rpath="$rpath$dir:"
- done
- compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
- fi
- if test -n "$finalize_perm_rpath"; then
- # We should set the runpath_var.
- rpath=
- for dir in $finalize_perm_rpath; do
- rpath="$rpath$dir:"
- done
- finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
- fi
- fi
-
- if test "$hardcode_action" = relink; then
- # Fast installation is not supported
- link_command="$compile_var$compile_command$compile_rpath"
- relink_command="$finalize_var$finalize_command$finalize_rpath"
-
- $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
- $echo "$modename: \`$output' will be relinked during installation" 1>&2
- else
- if test "$fast_install" != no; then
- link_command="$finalize_var$compile_command$finalize_rpath"
- if test "$fast_install" = yes; then
- relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
- else
- # fast_install is set to needless
- relink_command=
- fi
- else
- link_command="$compile_var$compile_command$compile_rpath"
- relink_command="$finalize_var$finalize_command$finalize_rpath"
- fi
- fi
-
- # Replace the output file specification.
- link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
-
- # Delete the old output files.
- $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
-
- $show "$link_command"
- $run eval "$link_command" || exit $?
-
- # Now create the wrapper script.
- $show "creating $output"
-
- # Quote the relink command for shipping.
- if test -n "$relink_command"; then
- relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
- fi
-
- # Quote $echo for shipping.
- if test "X$echo" = "X$SHELL $0 --fallback-echo"; then
- case "$0" in
- [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";;
- *) qecho="$SHELL `pwd`/$0 --fallback-echo";;
- esac
- qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
- else
- qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
- fi
-
- # Only actually do things if our run command is non-null.
- if test -z "$run"; then
- # win32 will think the script is a binary if it has
- # a .exe suffix, so we strip it off here.
- case $output in
- *.exe) output=`echo $output|sed 's,.exe$,,'` ;;
- esac
- $rm $output
- trap "$rm $output; exit 1" 1 2 15
-
- $echo > $output "\
-#! $SHELL
-
-# $output - temporary wrapper script for $objdir/$outputname
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# The $output program cannot be directly executed until all the libtool
-# libraries that it depends on are installed.
-#
-# This wrapper script should never be moved out of the build directory.
-# If it is, it will not operate correctly.
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e 1s/^X//'
-sed_quote_subst='$sed_quote_subst'
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi
-
-relink_command=\"$relink_command\"
-
-# This environment variable determines our operation mode.
-if test \"\$libtool_install_magic\" = \"$magic\"; then
- # install mode needs the following variable:
- link_against_libtool_libs='$link_against_libtool_libs'
-else
- # When we are sourced in execute mode, \$file and \$echo are already set.
- if test \"\$libtool_execute_magic\" != \"$magic\"; then
- echo=\"$qecho\"
- file=\"\$0\"
- # Make sure echo works.
- if test \"X\$1\" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
- elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
- # Yippee, \$echo works!
- :
- else
- # Restart under the correct shell, and then maybe \$echo will work.
- exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
- fi
- fi\
-"
- $echo >> $output "\
-
- # Find the directory that this script lives in.
- thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
- test \"x\$thisdir\" = \"x\$file\" && thisdir=.
-
- # Follow symbolic links until we get to the real thisdir.
- file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\`
- while test -n \"\$file\"; do
- destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
-
- # If there was a directory component, then change thisdir.
- if test \"x\$destdir\" != \"x\$file\"; then
- case \"\$destdir\" in
- [\\/]* | [A-Za-z]:[\\/]*) thisdir=\"\$destdir\" ;;
- *) thisdir=\"\$thisdir/\$destdir\" ;;
- esac
- fi
-
- file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
- file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\`
- done
-
- # Try to get the absolute directory name.
- absdir=\`cd \"\$thisdir\" && pwd\`
- test -n \"\$absdir\" && thisdir=\"\$absdir\"
-"
-
- if test "$fast_install" = yes; then
- echo >> $output "\
- program=lt-'$outputname'
- progdir=\"\$thisdir/$objdir\"
-
- if test ! -f \"\$progdir/\$program\" || \\
- { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\
- test \"X\$file\" != \"X\$progdir/\$program\"; }; then
-
- file=\"\$\$-\$program\"
-
- if test ! -d \"\$progdir\"; then
- $mkdir \"\$progdir\"
- else
- $rm \"\$progdir/\$file\"
- fi"
-
- echo >> $output "\
-
- # relink executable if necessary
- if test -n \"\$relink_command\"; then
- if (cd \"\$thisdir\" && eval \$relink_command); then :
- else
- $rm \"\$progdir/\$file\"
- exit 1
- fi
- fi
-
- $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
- { $rm \"\$progdir/\$program\";
- $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
- $rm \"\$progdir/\$file\"
- fi"
- else
- echo >> $output "\
- program='$outputname'
- progdir=\"\$thisdir/$objdir\"
-"
- fi
-
- echo >> $output "\
-
- if test -f \"\$progdir/\$program\"; then"
-
- # Export our shlibpath_var if we have one.
- if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
- $echo >> $output "\
- # Add our own library path to $shlibpath_var
- $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
-
- # Some systems cannot cope with colon-terminated $shlibpath_var
- # The second colon is a workaround for a bug in BeOS R4 sed
- $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
-
- export $shlibpath_var
-"
- fi
-
- # fixup the dll searchpath if we need to.
- if test -n "$dllsearchpath"; then
- $echo >> $output "\
- # Add the dll search path components to the executable PATH
- PATH=$dllsearchpath:\$PATH
-"
- fi
-
- $echo >> $output "\
- if test \"\$libtool_execute_magic\" != \"$magic\"; then
- # Run the actual program with our arguments.
-"
- case $host in
- # win32 systems need to use the prog path for dll
- # lookup to work
- *-*-cygwin*)
- $echo >> $output "\
- exec \$progdir/\$program \${1+\"\$@\"}
-"
- ;;
-
- # Backslashes separate directories on plain windows
- *-*-mingw | *-*-os2*)
- $echo >> $output "\
- exec \$progdir\\\\\$program \${1+\"\$@\"}
-"
- ;;
-
- *)
- $echo >> $output "\
- # Export the path to the program.
- PATH=\"\$progdir:\$PATH\"
- export PATH
-
- exec \$program \${1+\"\$@\"}
-"
- ;;
- esac
- $echo >> $output "\
- \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
- exit 1
- fi
- else
- # The program doesn't exist.
- \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
- \$echo \"This script is just a wrapper for \$program.\" 1>&2
- echo \"See the $PACKAGE documentation for more information.\" 1>&2
- exit 1
- fi
-fi\
-"
- chmod +x $output
- fi
- exit 0
- ;;
- esac
-
- # See if we need to build an old-fashioned archive.
- for oldlib in $oldlibs; do
-
- if test "$build_libtool_libs" = convenience; then
- oldobjs="$libobjs_save"
- addlibs="$convenience"
- build_libtool_libs=no
- else
- if test "$build_libtool_libs" = module; then
- oldobjs="$libobjs_save"
- build_libtool_libs=no
- else
- oldobjs="$objs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`
- fi
- addlibs="$old_convenience"
- fi
-
- if test -n "$addlibs"; then
- gentop="$output_objdir/${outputname}x"
- $show "${rm}r $gentop"
- $run ${rm}r "$gentop"
- $show "mkdir $gentop"
- $run mkdir "$gentop"
- status=$?
- if test $status -ne 0 && test ! -d "$gentop"; then
- exit $status
- fi
- generated="$generated $gentop"
-
- # Add in members from convenience archives.
- for xlib in $addlibs; do
- # Extract the objects.
- case "$xlib" in
- [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
- *) xabs=`pwd`"/$xlib" ;;
- esac
- xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
- xdir="$gentop/$xlib"
-
- $show "${rm}r $xdir"
- $run ${rm}r "$xdir"
- $show "mkdir $xdir"
- $run mkdir "$xdir"
- status=$?
- if test $status -ne 0 && test ! -d "$xdir"; then
- exit $status
- fi
- $show "(cd $xdir && $AR x $xabs)"
- $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-
- oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP`
- done
- fi
-
- # Do each command in the archive commands.
- if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
- eval cmds=\"$old_archive_from_new_cmds\"
- else
- # Ensure that we have .o objects in place in case we decided
- # not to build a shared library, and have fallen back to building
- # static libs even though --disable-static was passed!
- for oldobj in $oldobjs; do
- if test ! -f $oldobj; then
- xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$oldobj"; then
- xdir="."
- else
- xdir="$xdir"
- fi
- baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'`
- obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
- $show "(cd $xdir && ${LN_S} $obj $baseobj)"
- $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $?
- fi
- done
-
- eval cmds=\"$old_archive_cmds\"
- fi
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- done
-
- if test -n "$generated"; then
- $show "${rm}r$generated"
- $run ${rm}r$generated
- fi
-
- # Now create the libtool archive.
- case "$output" in
- *.la)
- old_library=
- test "$build_old_libs" = yes && old_library="$libname.$libext"
- $show "creating $output"
-
- if test -n "$xrpath"; then
- temp_xrpath=
- for libdir in $xrpath; do
- temp_xrpath="$temp_xrpath -R$libdir"
- done
- dependency_libs="$temp_xrpath $dependency_libs"
- fi
-
- # Only create the output if not a dry run.
- if test -z "$run"; then
- for installed in no yes; do
- if test "$installed" = yes; then
- if test -z "$install_libdir"; then
- break
- fi
- output="$output_objdir/$outputname"i
- fi
- $rm $output
- $echo > $output "\
-# $outputname - a libtool library file
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# The name that we can dlopen(3).
-dlname='$dlname'
-
-# Names of this library.
-library_names='$library_names'
-
-# The name of the static archive.
-old_library='$old_library'
-
-# Libraries that this one depends upon.
-dependency_libs='$dependency_libs'
-
-# Version information for $libname.
-current=$current
-age=$age
-revision=$revision
-
-# Is this an already installed library?
-installed=$installed
-
-# Directory that this library needs to be installed in:
-libdir='$install_libdir'\
-"
- done
- fi
-
- # Do a symbolic link so that the libtool archive can be found in
- # LD_LIBRARY_PATH before the program is installed.
- $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
- $run eval "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" || exit $?
- ;;
- esac
- exit 0
- ;;
-
- # libtool install mode
- install)
- modename="$modename: install"
-
- # There may be an optional sh(1) argument at the beginning of
- # install_prog (especially on Windows NT).
- if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh; then
- # Aesthetically quote it.
- arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
- case "$arg" in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
- arg="\"$arg\""
- ;;
- esac
- install_prog="$arg "
- arg="$1"
- shift
- else
- install_prog=
- arg="$nonopt"
- fi
-
- # The real first argument should be the name of the installation program.
- # Aesthetically quote it.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case "$arg" in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
- arg="\"$arg\""
- ;;
- esac
- install_prog="$install_prog$arg"
-
- # We need to accept at least all the BSD install flags.
- dest=
- files=
- opts=
- prev=
- install_type=
- isdir=no
- stripme=
- for arg
- do
- if test -n "$dest"; then
- files="$files $dest"
- dest="$arg"
- continue
- fi
-
- case "$arg" in
- -d) isdir=yes ;;
- -f) prev="-f" ;;
- -g) prev="-g" ;;
- -m) prev="-m" ;;
- -o) prev="-o" ;;
- -s)
- stripme=" -s"
- continue
- ;;
- -*) ;;
-
- *)
- # If the previous option needed an argument, then skip it.
- if test -n "$prev"; then
- prev=
- else
- dest="$arg"
- continue
- fi
- ;;
- esac
-
- # Aesthetically quote the argument.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case "$arg" in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
- arg="\"$arg\""
- ;;
- esac
- install_prog="$install_prog $arg"
- done
-
- if test -z "$install_prog"; then
- $echo "$modename: you must specify an install program" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- if test -n "$prev"; then
- $echo "$modename: the \`$prev' option requires an argument" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- if test -z "$files"; then
- if test -z "$dest"; then
- $echo "$modename: no file or destination specified" 1>&2
- else
- $echo "$modename: you must specify a destination" 1>&2
- fi
- $echo "$help" 1>&2
- exit 1
- fi
-
- # Strip any trailing slash from the destination.
- dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
-
- # Check to see that the destination is a directory.
- test -d "$dest" && isdir=yes
- if test "$isdir" = yes; then
- destdir="$dest"
- destname=
- else
- destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
- test "X$destdir" = "X$dest" && destdir=.
- destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
-
- # Not a directory, so check to see that there is only one file specified.
- set dummy $files
- if test $# -gt 2; then
- $echo "$modename: \`$dest' is not a directory" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
- fi
- case "$destdir" in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- for file in $files; do
- case "$file" in
- *.lo) ;;
- *)
- $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
- $echo "$help" 1>&2
- exit 1
- ;;
- esac
- done
- ;;
- esac
-
- # This variable tells wrapper scripts just to set variables rather
- # than running their programs.
- libtool_install_magic="$magic"
-
- staticlibs=
- future_libdirs=
- current_libdirs=
- for file in $files; do
-
- # Do each installation.
- case "$file" in
- *.a | *.lib)
- # Do the static libraries later.
- staticlibs="$staticlibs $file"
- ;;
-
- *.la)
- # Check to see that this really is a libtool archive.
- if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- else
- $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- library_names=
- old_library=
- # If there is no directory component, then add one.
- case "$file" in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Add the libdir to current_libdirs if it is the destination.
- if test "X$destdir" = "X$libdir"; then
- case "$current_libdirs " in
- *" $libdir "*) ;;
- *) current_libdirs="$current_libdirs $libdir" ;;
- esac
- else
- # Note the libdir as a future libdir.
- case "$future_libdirs " in
- *" $libdir "*) ;;
- *) future_libdirs="$future_libdirs $libdir" ;;
- esac
- fi
-
- dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/"
- test "X$dir" = "X$file/" && dir=
- dir="$dir$objdir"
-
- # See the names of the shared library.
- set dummy $library_names
- if test -n "$2"; then
- realname="$2"
- shift
- shift
-
- # Install the shared library and build the symlinks.
- $show "$install_prog $dir/$realname $destdir/$realname"
- $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $?
-
- if test $# -gt 0; then
- # Delete the old symlinks, and create new ones.
- for linkname
- do
- if test "$linkname" != "$realname"; then
- $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
- $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
- fi
- done
- fi
-
- # Do each command in the postinstall commands.
- lib="$destdir/$realname"
- eval cmds=\"$postinstall_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- fi
-
- # Install the pseudo-library for information purposes.
- name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- instname="$dir/$name"i
- $show "$install_prog $instname $destdir/$name"
- $run eval "$install_prog $instname $destdir/$name" || exit $?
-
- # Maybe install the static library, too.
- test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
- ;;
-
- *.lo)
- # Install (i.e. copy) a libtool object.
-
- # Figure out destination file name, if it wasn't already specified.
- if test -n "$destname"; then
- destfile="$destdir/$destname"
- else
- destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- destfile="$destdir/$destfile"
- fi
-
- # Deduce the name of the destination old-style object file.
- case "$destfile" in
- *.lo)
- staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
- ;;
- *.o | *.obj)
- staticdest="$destfile"
- destfile=
- ;;
- *)
- $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
- $echo "$help" 1>&2
- exit 1
- ;;
- esac
-
- # Install the libtool object if requested.
- if test -n "$destfile"; then
- $show "$install_prog $file $destfile"
- $run eval "$install_prog $file $destfile" || exit $?
- fi
-
- # Install the old object if enabled.
- if test "$build_old_libs" = yes; then
- # Deduce the name of the old-style object file.
- staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
-
- $show "$install_prog $staticobj $staticdest"
- $run eval "$install_prog \$staticobj \$staticdest" || exit $?
- fi
- exit 0
- ;;
-
- *)
- # Figure out destination file name, if it wasn't already specified.
- if test -n "$destname"; then
- destfile="$destdir/$destname"
- else
- destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- destfile="$destdir/$destfile"
- fi
-
- # Do a test to see if this is really a libtool program.
- if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- link_against_libtool_libs=
- relink_command=
-
- # If there is no directory component, then add one.
- case "$file" in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Check the variables that should have been set.
- if test -z "$link_against_libtool_libs"; then
- $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2
- exit 1
- fi
-
- finalize=yes
- for lib in $link_against_libtool_libs; do
- # Check to see that each library is installed.
- libdir=
- if test -f "$lib"; then
- # If there is no directory component, then add one.
- case "$lib" in
- */* | *\\*) . $lib ;;
- *) . ./$lib ;;
- esac
- fi
- libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`"
- if test -n "$libdir" && test ! -f "$libfile"; then
- $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
- finalize=no
- fi
- done
-
- outputname=
- if test "$fast_install" = no && test -n "$relink_command"; then
- if test "$finalize" = yes && test -z "$run"; then
- tmpdir="/tmp"
- test -n "$TMPDIR" && tmpdir="$TMPDIR"
- tmpdir="$tmpdir/libtool-$$"
- if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then :
- else
- $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
- continue
- fi
- outputname="$tmpdir/$file"
- # Replace the output file specification.
- relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
-
- $show "$relink_command"
- if $run eval "$relink_command"; then :
- else
- $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
- ${rm}r "$tmpdir"
- continue
- fi
- file="$outputname"
- else
- $echo "$modename: warning: cannot relink \`$file'" 1>&2
- fi
- else
- # Install the binary that we compiled earlier.
- file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
- fi
- fi
-
- $show "$install_prog$stripme $file $destfile"
- $run eval "$install_prog\$stripme \$file \$destfile" || exit $?
- test -n "$outputname" && ${rm}r "$tmpdir"
- ;;
- esac
- done
-
- for file in $staticlibs; do
- name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-
- # Set up the ranlib parameters.
- oldlib="$destdir/$name"
-
- $show "$install_prog $file $oldlib"
- $run eval "$install_prog \$file \$oldlib" || exit $?
-
- # Do each command in the postinstall commands.
- eval cmds=\"$old_postinstall_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- done
-
- if test -n "$future_libdirs"; then
- $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
- fi
-
- if test -n "$current_libdirs"; then
- # Maybe just do a dry run.
- test -n "$run" && current_libdirs=" -n$current_libdirs"
- exec $SHELL $0 --finish$current_libdirs
- exit 1
- fi
-
- exit 0
- ;;
-
- # libtool finish mode
- finish)
- modename="$modename: finish"
- libdirs="$nonopt"
- admincmds=
-
- if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
- for dir
- do
- libdirs="$libdirs $dir"
- done
-
- for libdir in $libdirs; do
- if test -n "$finish_cmds"; then
- # Do each command in the finish commands.
- eval cmds=\"$finish_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || admincmds="$admincmds
- $cmd"
- done
- IFS="$save_ifs"
- fi
- if test -n "$finish_eval"; then
- # Do the single finish_eval.
- eval cmds=\"$finish_eval\"
- $run eval "$cmds" || admincmds="$admincmds
- $cmds"
- fi
- done
- fi
-
- # Exit here if they wanted silent mode.
- test "$show" = : && exit 0
-
- echo "----------------------------------------------------------------------"
- echo "Libraries have been installed in:"
- for libdir in $libdirs; do
- echo " $libdir"
- done
- echo
- echo "If you ever happen to want to link against installed libraries"
- echo "in a given directory, LIBDIR, you must either use libtool, and"
- echo "specify the full pathname of the library, or use \`-LLIBDIR'"
- echo "flag during linking and do at least one of the following:"
- if test -n "$shlibpath_var"; then
- echo " - add LIBDIR to the \`$shlibpath_var' environment variable"
- echo " during execution"
- fi
- if test -n "$runpath_var"; then
- echo " - add LIBDIR to the \`$runpath_var' environment variable"
- echo " during linking"
- fi
- if test -n "$hardcode_libdir_flag_spec"; then
- libdir=LIBDIR
- eval flag=\"$hardcode_libdir_flag_spec\"
-
- echo " - use the \`$flag' linker flag"
- fi
- if test -n "$admincmds"; then
- echo " - have your system administrator run these commands:$admincmds"
- fi
- if test -f /etc/ld.so.conf; then
- echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
- fi
- echo
- echo "See any operating system documentation about shared libraries for"
- echo "more information, such as the ld(1) and ld.so(8) manual pages."
- echo "----------------------------------------------------------------------"
- exit 0
- ;;
-
- # libtool execute mode
- execute)
- modename="$modename: execute"
-
- # The first argument is the command name.
- cmd="$nonopt"
- if test -z "$cmd"; then
- $echo "$modename: you must specify a COMMAND" 1>&2
- $echo "$help"
- exit 1
- fi
-
- # Handle -dlopen flags immediately.
- for file in $execute_dlfiles; do
- if test ! -f "$file"; then
- $echo "$modename: \`$file' is not a file" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- dir=
- case "$file" in
- *.la)
- # Check to see that this really is a libtool archive.
- if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- else
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- # Read the libtool library.
- dlname=
- library_names=
-
- # If there is no directory component, then add one.
- case "$file" in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Skip this library if it cannot be dlopened.
- if test -z "$dlname"; then
- # Warn if it was a shared library.
- test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
- continue
- fi
-
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- test "X$dir" = "X$file" && dir=.
-
- if test -f "$dir/$objdir/$dlname"; then
- dir="$dir/$objdir"
- else
- $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
- exit 1
- fi
- ;;
-
- *.lo)
- # Just add the directory containing the .lo file.
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- test "X$dir" = "X$file" && dir=.
- ;;
-
- *)
- $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
- continue
- ;;
- esac
-
- # Get the absolute pathname.
- absdir=`cd "$dir" && pwd`
- test -n "$absdir" && dir="$absdir"
-
- # Now add the directory to shlibpath_var.
- if eval "test -z \"\$$shlibpath_var\""; then
- eval "$shlibpath_var=\"\$dir\""
- else
- eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
- fi
- done
-
- # This variable tells wrapper scripts just to set shlibpath_var
- # rather than running their programs.
- libtool_execute_magic="$magic"
-
- # Check if any of the arguments is a wrapper script.
- args=
- for file
- do
- case "$file" in
- -*) ;;
- *)
- # Do a test to see if this is really a libtool program.
- if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- # If there is no directory component, then add one.
- case "$file" in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Transform arg to wrapped name.
- file="$progdir/$program"
- fi
- ;;
- esac
- # Quote arguments (to preserve shell metacharacters).
- file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
- args="$args \"$file\""
- done
-
- if test -z "$run"; then
- if test -n "$shlibpath_var"; then
- # Export the shlibpath_var.
- eval "export $shlibpath_var"
- fi
-
- # Restore saved enviroment variables
- if test "${save_LC_ALL+set}" = set; then
- LC_ALL="$save_LC_ALL"; export LC_ALL
- fi
- if test "${save_LANG+set}" = set; then
- LANG="$save_LANG"; export LANG
- fi
-
- # Now actually exec the command.
- eval "exec \$cmd$args"
-
- $echo "$modename: cannot exec \$cmd$args"
- exit 1
- else
- # Display what would be done.
- if test -n "$shlibpath_var"; then
- eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
- $echo "export $shlibpath_var"
- fi
- $echo "$cmd$args"
- exit 0
- fi
- ;;
-
- # libtool uninstall mode
- uninstall)
- modename="$modename: uninstall"
- rm="$nonopt"
- files=
-
- for arg
- do
- case "$arg" in
- -*) rm="$rm $arg" ;;
- *) files="$files $arg" ;;
- esac
- done
-
- if test -z "$rm"; then
- $echo "$modename: you must specify an RM program" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- for file in $files; do
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- test "X$dir" = "X$file" && dir=.
- name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-
- rmfiles="$file"
-
- case "$name" in
- *.la)
- # Possibly a libtool archive, so verify it.
- if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- . $dir/$name
-
- # Delete the libtool libraries and symlinks.
- for n in $library_names; do
- rmfiles="$rmfiles $dir/$n"
- done
- test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library"
-
- $show "$rm $rmfiles"
- $run $rm $rmfiles
-
- if test -n "$library_names"; then
- # Do each command in the postuninstall commands.
- eval cmds=\"$postuninstall_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd"
- done
- IFS="$save_ifs"
- fi
-
- if test -n "$old_library"; then
- # Do each command in the old_postuninstall commands.
- eval cmds=\"$old_postuninstall_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd"
- done
- IFS="$save_ifs"
- fi
-
- # FIXME: should reinstall the best remaining shared library.
- fi
- ;;
-
- *.lo)
- if test "$build_old_libs" = yes; then
- oldobj=`$echo "X$name" | $Xsed -e "$lo2o"`
- rmfiles="$rmfiles $dir/$oldobj"
- fi
- $show "$rm $rmfiles"
- $run $rm $rmfiles
- ;;
-
- *)
- $show "$rm $rmfiles"
- $run $rm $rmfiles
- ;;
- esac
- done
- exit 0
- ;;
-
- "")
- $echo "$modename: you must specify a MODE" 1>&2
- $echo "$generic_help" 1>&2
- exit 1
- ;;
- esac
-
- $echo "$modename: invalid operation mode \`$mode'" 1>&2
- $echo "$generic_help" 1>&2
- exit 1
-fi # test -z "$show_help"
-
-# We need to display help for each of the modes.
-case "$mode" in
-"") $echo \
-"Usage: $modename [OPTION]... [MODE-ARG]...
-
-Provide generalized library-building support services.
-
- --config show all configuration variables
- --debug enable verbose shell tracing
--n, --dry-run display commands without modifying any files
- --features display basic configuration information and exit
- --finish same as \`--mode=finish'
- --help display this help message and exit
- --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS]
- --quiet same as \`--silent'
- --silent don't print informational messages
- --version print version information
-
-MODE must be one of the following:
-
- compile compile a source file into a libtool object
- execute automatically set library path, then run a program
- finish complete the installation of libtool libraries
- install install libraries or executables
- link create a library or an executable
- uninstall remove libraries from an installed directory
-
-MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for
-a more detailed description of MODE."
- exit 0
- ;;
-
-compile)
- $echo \
-"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
-
-Compile a source file into a libtool library object.
-
-This mode accepts the following additional options:
-
- -o OUTPUT-FILE set the output file name to OUTPUT-FILE
- -static always build a \`.o' file suitable for static linking
-
-COMPILE-COMMAND is a command to be used in creating a \`standard' object file
-from the given SOURCEFILE.
-
-The output file name is determined by removing the directory component from
-SOURCEFILE, then substituting the C source code suffix \`.c' with the
-library object suffix, \`.lo'."
- ;;
-
-execute)
- $echo \
-"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
-
-Automatically set library path, then run a program.
-
-This mode accepts the following additional options:
-
- -dlopen FILE add the directory containing FILE to the library path
-
-This mode sets the library path environment variable according to \`-dlopen'
-flags.
-
-If any of the ARGS are libtool executable wrappers, then they are translated
-into their corresponding uninstalled binary, and any of their required library
-directories are added to the library path.
-
-Then, COMMAND is executed, with ARGS as arguments."
- ;;
-
-finish)
- $echo \
-"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
-
-Complete the installation of libtool libraries.
-
-Each LIBDIR is a directory that contains libtool libraries.
-
-The commands that this mode executes may require superuser privileges. Use
-the \`--dry-run' option if you just want to see what would be executed."
- ;;
-
-install)
- $echo \
-"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
-
-Install executables or libraries.
-
-INSTALL-COMMAND is the installation command. The first component should be
-either the \`install' or \`cp' program.
-
-The rest of the components are interpreted as arguments to that command (only
-BSD-compatible install options are recognized)."
- ;;
-
-link)
- $echo \
-"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
-
-Link object files or libraries together to form another library, or to
-create an executable program.
-
-LINK-COMMAND is a command using the C compiler that you would use to create
-a program from several object files.
-
-The following components of LINK-COMMAND are treated specially:
-
- -all-static do not do any dynamic linking at all
- -avoid-version do not add a version suffix if possible
- -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
- -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
- -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
- -export-symbols SYMFILE
- try to export only the symbols listed in SYMFILE
- -export-symbols-regex REGEX
- try to export only the symbols matching REGEX
- -LLIBDIR search LIBDIR for required installed libraries
- -lNAME OUTPUT-FILE requires the installed library libNAME
- -module build a library that can dlopened
- -no-undefined declare that a library does not refer to external symbols
- -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
- -release RELEASE specify package release information
- -rpath LIBDIR the created library will eventually be installed in LIBDIR
- -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
- -static do not do any dynamic linking of libtool libraries
- -version-info CURRENT[:REVISION[:AGE]]
- specify library version info [each variable defaults to 0]
-
-All other options (arguments beginning with \`-') are ignored.
-
-Every other argument is treated as a filename. Files ending in \`.la' are
-treated as uninstalled libtool libraries, other files are standard or library
-object files.
-
-If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
-only library objects (\`.lo' files) may be specified, and \`-rpath' is
-required, except when creating a convenience library.
-
-If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
-using \`ar' and \`ranlib', or on Windows using \`lib'.
-
-If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
-is created, otherwise an executable program is created."
- ;;
-
-uninstall)
- $echo \
-"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
-
-Remove libraries from an installation directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, all the files associated with it are deleted.
-Otherwise, only FILE itself is deleted using RM."
- ;;
-
-*)
- $echo "$modename: invalid operation mode \`$mode'" 1>&2
- $echo "$help" 1>&2
- exit 1
- ;;
-esac
-
-echo
-$echo "Try \`$modename --help' for more information about other modes."
-
-exit 0
-
-# Local Variables:
-# mode:shell-script
-# sh-indentation:2
-# End:
diff --git a/contrib/idn/idnkit-1.0-src/make.wnt b/contrib/idn/idnkit-1.0-src/make.wnt
deleted file mode 100644
index 2b39acf9..00000000
--- a/contrib/idn/idnkit-1.0-src/make.wnt
+++ /dev/null
@@ -1,76 +0,0 @@
-# $Id: make.wnt,v 1.1 2003/06/04 00:25:03 marka Exp $
-# Copyright (c) 2000 Japan Network Information Center. All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-all : force
- copy include\config.h.win include\config.h
- cd lib
- $(MAKE) -f make.wnt
- cd ..
- cd tools
- $(MAKE) -f make.wnt
- cd ..
- cd wsock
- $(MAKE) -f make.wnt
- cd ..
-
-install : all
- cd lib
- $(MAKE) -f make.wnt install
- cd ..
- cd tools
- $(MAKE) -f make.wnt install
- cd ..
- cd wsock
- $(MAKE) -f make.wnt install
- cd ..
-
-clean : force
- cd lib
- $(MAKE) -f make.wnt clean
- cd ..
- cd tools
- $(MAKE) -f make.wnt clean
- cd ..
- cd wsock
- $(MAKE) -f make.wnt clean
- cd ..
-
-force:
diff --git a/contrib/idn/idnkit-1.0-src/man/Makefile.in b/contrib/idn/idnkit-1.0-src/man/Makefile.in
deleted file mode 100644
index 405418eb..00000000
--- a/contrib/idn/idnkit-1.0-src/man/Makefile.in
+++ /dev/null
@@ -1,116 +0,0 @@
-# $Id: Makefile.in,v 1.1 2003/06/04 00:27:14 marka Exp $
-#
-# Copyright (c) 2000 Japan Network Information Center. All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-top_builddir = ..
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-sysconfdir = @sysconfdir@
-mandir = @mandir@
-man3dir = $(mandir)/man3
-man5dir = $(mandir)/man5
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-MKINSTALLDIRS = @top_srcdir@/mkinstalldirs
-SHELL = @SHELL@
-
-@LITEONLY_TRUE@all: libidnkitlite.3 idn.conf.5 idnrc.5 idnalias.conf.5
-@LITEONLY_FALSE@all: libidnkitlite.3 idn.conf.5 idnrc.5 idnalias.conf.5 libidnkit.3
-
-libidnkit.3: libidnkit.3.in
- sed 's%[@]sysconfdir[@]%$(sysconfdir)%' < $(srcdir)/libidnkit.3.in > $@
-libidnkitlite.3: libidnkit.3.in
- sed 's%[@]sysconfdir[@]%$(sysconfdir)%' < $(srcdir)/libidnkit.3.in > $@
-idn.conf.5: idn.conf.5.in
- sed 's%[@]sysconfdir[@]%$(sysconfdir)%' < $(srcdir)/idn.conf.5.in > $@
-idnrc.5: idn.conf.5.in
- sed 's%[@]sysconfdir[@]%$(sysconfdir)%' < $(srcdir)/idn.conf.5.in > $@
-idnalias.conf.5: idn.conf.5.in
- sed 's%[@]sysconfdir[@]%$(sysconfdir)%' < $(srcdir)/idn.conf.5.in > $@
-
-@LITEONLY_TRUE@@COMPAT_TRUE@install: all install-common install-compat-common
-@LITEONLY_FALSE@@COMPAT_TRUE@install: all install-common install-nolite install-compat-common install-compat-nolite
-@LITEONLY_TRUE@@COMPAT_FALSE@install: all install-common
-@LITEONLY_FALSE@@COMPAT_FALSE@install: all install-common install-nolite
-
-install-common:
- $(MKINSTALLDIRS) $(DESTDIR)$(man3dir)
- $(INSTALL_DATA) libidnkitlite.3 $(DESTDIR)$(man3dir)/libidnkitlite.3
- $(MKINSTALLDIRS) $(DESTDIR)$(man5dir)
- $(INSTALL_DATA) idn.conf.5 $(DESTDIR)$(man5dir)/idn.conf.5
- $(INSTALL_DATA) idnrc.5 $(DESTDIR)$(man5dir)/idnrc.5
- $(INSTALL_DATA) idnalias.conf.5 $(DESTDIR)$(man5dir)/idnalias.conf.5
-
-install-nolite:
- $(MKINSTALLDIRS) $(DESTDIR)$(man3dir)
- $(INSTALL_DATA) libidnkit.3 $(DESTDIR)$(man3dir)/libidnkit.3
-
-install-compat-common:
- src=$(DESTDIR)$(man3dir)/libidnkitlite.3; \
- dst=$(DESTDIR)$(man3dir)/libmdnlite.3; \
- rm -f $$dst; \
- ln $$src $$dst || cp $$src $$dst
- src=$(DESTDIR)$(man5dir)/idn.conf.5; \
- dst=$(DESTDIR)$(man5dir)/mdn.conf.5; \
- rm -f $$dst; \
- ln $$src $$dst || cp $$src $$dst
-
-install-compat-nolite:
- src=$(DESTDIR)$(man3dir)/libidnkit.3; \
- dst=$(DESTDIR)$(man3dir)/libmdn.3; \
- rm -f $$dst; \
- ln $$src $$dst || cp $$src $$dst
-
-clean:
- rm -f idn.conf.5 idnrc.5 idnalias.conf.5 libidnkit.3 libidnkitlite.3
- rm -f *~
-
-distclean: clean
- rm -f Makefile
-
-test check:
diff --git a/contrib/idn/idnkit-1.0-src/man/idn.conf.5.in b/contrib/idn/idnkit-1.0-src/man/idn.conf.5.in
deleted file mode 100644
index 700ced9b..00000000
--- a/contrib/idn/idnkit-1.0-src/man/idn.conf.5.in
+++ /dev/null
@@ -1,312 +0,0 @@
-.\" $Id: idn.conf.5.in,v 1.1 2003/06/04 00:27:16 marka Exp $"
-.\"
-.\" Copyright (c) 2000,2001 Japan Network Information Center.
-.\" All rights reserved.
-.\"
-.\" By using this file, you agree to the terms and conditions set forth bellow.
-.\"
-.\" LICENSE TERMS AND CONDITIONS
-.\"
-.\" The following License Terms and Conditions apply, unless a different
-.\" license is obtained from Japan Network Information Center ("JPNIC"),
-.\" a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-.\" Chiyoda-ku, Tokyo 101-0047, Japan.
-.\"
-.\" 1. Use, Modification and Redistribution (including distribution of any
-.\" modified or derived work) in source and/or binary forms is permitted
-.\" under this License Terms and Conditions.
-.\"
-.\" 2. Redistribution of source code must retain the copyright notices as they
-.\" appear in each source code file, this License Terms and Conditions.
-.\"
-.\" 3. Redistribution in binary form must reproduce the Copyright Notice,
-.\" this License Terms and Conditions, in the documentation and/or other
-.\" materials provided with the distribution. For the purposes of binary
-.\" distribution the "Copyright Notice" refers to the following language:
-.\" "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-.\"
-.\" 4. The name of JPNIC may not be used to endorse or promote products
-.\" derived from this Software without specific prior written approval of
-.\" JPNIC.
-.\"
-.\" 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-.\" PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-.\" BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-.\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-.\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-.\"
-.TH idn.conf 5 "Mar 8, 2002"
-.\"
-.SH NAME
-idn.conf, .idnrc, idnalias.conf \- configuration files for idnkit library
-.\"
-.SH SYNOPSIS
-@sysconfdir@/idn.conf
-.br
-~/.idnrc
-.br
-@sysconfdir@/idnalias.conf
-.\"
-.SH DESCRIPTION
-\fBidn.conf\fR and \fB.idnrc\fR are configuration files for idnkit
-library which is a toolkit for handling internationalized domain names.
-.PP
-idnkit library tries to load the user's configuration file ~/.idnrc
-first, and then tries the system configutation file
-@sysconfdir@/idn.conf.
-Note that idnkit library loads either, not both.
-.PP
-To use internationalized domain names in DNS or other protocols, they
-must be converted to an appropriate format before further processing.
-In idnkit, this conversion process is comprised of the following tasks.
-.IP 1. 3
-Convert the given domain name in application's local codeset to Unicode,
-and vice versa.
-.IP 2. 3
-Map certain characters in the name to period character so that they are
-treated as the domain name
-delimiter (\fIdelimiter mapping\fR).
-.IP 3. 3
-Map certain characters in the name to other characters or chracter sequences,
-according to a mapping rule determined by its top level domain (TLD).
-.IP 4. 3
-Perform NAMEPREP, which is a starndard name preparation process for
-internationalized domain names. This process is composed of
-the tree steps called mapping, normalization, prohibited character
-checking and bidirectional string checking.
-.IP 5. 3
-Convert the nameprepped name to IDN encoding, which is the standard encoding
-for internationalized domain names (also known as ASCII-compatible encoding,
-ACE), and vice versa.
-.PP
-The configuration file specifies the parameters for these tasks, such as:
-.RS 2
-.IP \- 2
-the encoding of internationalized domain names (IDN encoding).
-.IP \- 2
-NAMEPREP schemes.
-.RE
-.\"
-.SH SYNTAX
-The configuration file is a simple text files, and each line in the file
-(other than comment lines, which begin with ``#'', and empty lines)
-forms an entry of the following format:
-.PP
-.RS 4
-.nf
-\fIkeyword\fP\ \fIvalue..\fP
-.fi
-.RE
-\."
-.SH "IDN-ENCODING ENTRY"
-IDN encoding entry specifies the encoding name (codeset name) which
-is used as the encoding of internationalized domain names.
-.PP
-The syntax of this entry is:
-.PP
-.RS 4
-.nf
-\f(CWidn-encoding \fP\fIencoding\fP
-.fi
-.RE
-.PP
-\fIencoding\fP is the encoding name to be used, and any of the following
-names can be specified.
-.RS 2
-.IP "\(bu" 2
-``Punycode''
-.IP "\(bu" 2
-``UTF-8''
-.IP "\(bu" 2
-Codeset names which iconv_open() library function accepts. Please
-consult iconv() documentation for the available codesets.
-.IP "\(bu" 2
-Any alias names for the above, defined by the alias file.
-(See section ``ENCODING-ALIAS-FILE'')
-.RE
-.PP
-The standard encoding was determined as Punycode.
-.\"
-.SH "NAMEPREP ENTRY"
-Nameprep entry specifies the version of NAMEPREP, which is a specification
-of ``canonicalization'' process of internationalized domain name before
-it is converted to the IDN encoding.
-.PP
-The syntax of this entry is:
-.PP
-.RS 4
-.nf
-\f(CWnameprep \fP\fIversion\fP
-.fi
-.RE
-.PP
-\fIversion\fR is the version name of NAMEPREP specification, and currently
-the following versions can be specified.
-.RS 2
-.IP "\(bu" 2
-``RFC3491''
-.br
-This version refers to RFC3491 ``rfc-3491.txt''.
-.RE
-.PP
-The NAMEPREP process consists of the following 4 subprocesses.
-.IP 1. 3
-mapping, which maps certain characters in a name to other characters,
-possibly none.
-.IP 2. 3
-normalization, which replaces character variants in a name to
-a unique one.
-.IP 3. 3
-prohibited character checking, which detects invalid characters in a name.
-.IP 4. 3
-unassigned codepoint checking, which also invalid codepoints in a name.
-.IP 5. 3
-bidirectional string checking, which detecs invalid string.
-.\"
-.SH "LOCAL-MAP ENTRY"
-This entry specifies localized mapping phase before NAMEPREP takes place.
-Different mapping rules can be specified for each TLD (top-level domain).
-For example, you can have one mapping for ``.tw'' domain, and another for
-``.jp'' domain.
-.PP
-The syntax of this entry is:
-.PP
-.RS 4
-.nf
-\f(CWlocal-map \fItld\f(CW \fIscheme\fR [\fIscheme\fR..]
-.fi
-.RE
-.PP
-\fItld\fR specifies the TLD to which the mapping rule is to be applied,
-and \fIscheme\fR specifies the mapping scheme, and currently available
-schemes are:
-.RS 2
-.TP 4
-\f(CWRFC3491\fP
-Specify mapping defined by RFC3491.
-.TP 4
-\f(CWfilemap:\fP\fIpathname\fP
-Specify mapping defined by the file \fIpathname\fP.
-See ``MAPFILE FORMAT'' for the format of this file.
-.RE
-.PP
-There are two special \fItld\fRs for specifying the mapping rule for
-local domain names (domain names without any dots in them), and the
-default mapping rule.
-If
-\fItld\fR is ``-'', it matches domain names which do not contain any
-dots.
-If \fItld\fR is ``.'', it matches any domain names which don't match
-to any other mapping rules specified by ``local-map'' entries.
-.\"
-.SH "MAPFILE FORMAT"
-A mapfile defines a set of character mapping rules. It can define
-unconditional one-character to N-character-sequence (N can be 0, 1 or more)
-mappings.
-.PP
-A mapfile is a simple text file, and each line specifies a single mapping.
-Each line is of the form:
-.PP
-.RS 4
-.nf
-\fIsrc-codepoint\fR\f(CW; \fImapped-codepoint-seq\fR\f(CW;\fR
-.fi
-.RE
-.PP
-\fIsrc-codepoint\fR indicates source character of the mapping, and must
-be a Unicode codepoint value in hexadecimal string.
-\fImapped-codepoint-seq\fR is a sequence of characters which is the
-outcome of the mapping, and must be a (possibly empty) list of Unicode
-codepoint values in hexadecimal string, separated by spaces.
-.PP
-Lines which begin with ``#'' are treated as comments and ignored.
-.PP
-A sample mapfile is shown below.
-.PP
-.RS 4
-.nf
-.ft CW
-# map "A" to "a"
-0041; 0061;
-# map "#" to nothing
-0023; ;
-# map "@" to "at"
-0040; 0061 0074;
-.ft R
-.fi
-.RE
-.\"
-.SH "LOCAL CODESET"
-\fBidn.conf\fR or \fB~/.idnrc\fR doesn't have an entry to specify the
-local codeset, since it is determined from the application's current
-locale information.
-So each application can use different local codeset.
-.PP
-Although idnkit tries hard to find out the local codeset, sometimes it
-fails. For example, there are applications which use non-ASCII codeset
-but work in C locale. In this case, you can specify the application's
-local codeset by an environment variable ``\fBIDN_LOCAL_CODESET\fR''.
-Just set the codeset name (or its alias name) to the variable, and
-idnkit will use the codeset as the local one, regardless of the locale
-setting.
-.\"
-.SH "ENCODING-ALIAS-FILE"
-Encoding alias file specifies codeset name aliases. It is located on
-@sysconfdir@/idnalias.conf and always loaded automatically as idn.conf
-and .idnrc. The aliases in this file can be used just as the real names.
-.PP
-The alias file is a simple text file, consisting of lines of the form:
-.PP
-.RS 4
-.nf
-\fIalias-name\fP\ \fIname\fP
-.fi
-.RE
-.PP
-\fIalias-name\fR is the alias name to be defined, and \fIname\fR is
-the real name or another alias name.
-.\"
-.SH "SAMPLE CONFIGURATION"
-The following shows a sample configuration file.
-.PP
-.RS 4
-.ft CW
-.nf
-#
-# a sample configuration.
-#
-
-# Use Punycode as the IDN encoding.
-idn-encoding Punycode
-
-# Use RFC3491 as NAMEPREP.
-nameprep RFC3491
-
-# Perform Japanese-specific mapping for .jp domain.
-# assuming /usr/local/lib/idnkit/jp-map contains the mapping.
-local-map .jp filemap:/usr/local/lib/idnkit/jp-map
-.fi
-.ft R
-.RE
-.\"
-.SH FILES
-.I @sysconfdir@/idn.conf
-.br
-.I ~/.idnrc
-.br
-.I @sysconfdir@/idnalias.conf
-.br
-.I @sysconfdir@/idn.conf.sample
-\- sample configuration with comments
-.br
-.I @sysconfdir@/idnalias.conf.sample
-\- sample alias file
-.\"
-.SH "SEE ALSO"
-iconv(3)
diff --git a/contrib/idn/idnkit-1.0-src/man/libidnkit.3.in b/contrib/idn/idnkit-1.0-src/man/libidnkit.3.in
deleted file mode 100644
index 66d756f0..00000000
--- a/contrib/idn/idnkit-1.0-src/man/libidnkit.3.in
+++ /dev/null
@@ -1,480 +0,0 @@
-.\" $Id: libidnkit.3.in,v 1.1 2003/06/04 00:27:15 marka Exp $
-.\"
-.\" Copyright (c) 2001,2002 Japan Network Information Center.
-.\" All rights reserved.
-.\"
-.\" By using this file, you agree to the terms and conditions set forth bellow.
-.\"
-.\" LICENSE TERMS AND CONDITIONS
-.\"
-.\" The following License Terms and Conditions apply, unless a different
-.\" license is obtained from Japan Network Information Center ("JPNIC"),
-.\" a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-.\" Chiyoda-ku, Tokyo 101-0047, Japan.
-.\"
-.\" 1. Use, Modification and Redistribution (including distribution of any
-.\" modified or derived work) in source and/or binary forms is permitted
-.\" under this License Terms and Conditions.
-.\"
-.\" 2. Redistribution of source code must retain the copyright notices as they
-.\" appear in each source code file, this License Terms and Conditions.
-.\"
-.\" 3. Redistribution in binary form must reproduce the Copyright Notice,
-.\" this License Terms and Conditions, in the documentation and/or other
-.\" materials provided with the distribution. For the purposes of binary
-.\" distribution the "Copyright Notice" refers to the following language:
-.\" "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-.\"
-.\" 4. The name of JPNIC may not be used to endorse or promote products
-.\" derived from this Software without specific prior written approval of
-.\" JPNIC.
-.\"
-.\" 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-.\" PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-.\" BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-.\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-.\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-.\"
-.TH libidnkit 3 "Mar 11, 2002"
-.\"
-.SH NAME
-libidnkit, libidnkitlite \- Internationalized Domain Name Handling Libraries
-.\"
-.SH SYNOPSIS
-.nf
-#include <idn/api.h>
-
-idn_result_t
-\fBidn_nameinit\fP(int\ load_file)
-
-idn_result_t
-\fBidn_encodename\fP(int\ actions,\ const\ char\ *from,\ char\ *to,\ size_t\ tolen)
-
-idn_result_t
-\fBidn_decodename\fP(int\ actions,\ const\ char\ *from,\ char\ *to,\ size_t\ tolen)
-
-idn_result_t
-\fBidn_decodename2\fP(int\ actions,\ const\ char\ *from,\ char\ *to,\ size_t\ tolen,
- const\ char\ *auxencoding)
-
-idn_result_t
-\fBidn_enable\fP(int\ on_off)
-
-#include <idn/result.h>
-
-char *
-\fBidn_result_tostring\fP(idn_result_t\ result)
-
-.\"
-.SH OVERVIEW
-The
-\fBlibidnkit\fR and \fBlibidnkitlite\fR libraries support various
-manipulations of internationalized domain names, including:
-.RS 2
-.IP \- 2
-encoding convesion
-.IP \- 2
-name preparation
-.RE
-.PP
-They are designed according to IDNA framework where each application must
-do necessary preparations for the internationalized domain names before
-passing them to the resolver.
-.PP
-To help applications do the preparation, the libraries provide easy-to-use,
-high-level interface for the work.
-.PP
-Both libraries provide almost the same API.
-The difference between them is that \fBlibidnkit\fR internally uses
-\fIiconv\fR function to provide encoding conversion from UTF-8 to the
-local encoding
-(such as iso-8859-1, usually determined by the current locale), and vise
-versa.
-\fBlibidnkitlite\fR is lightweight version of libidnkit.
-It assumes local encoding is UTF-8 so that it never uses \fIiconv\fR.
-.PP
-This manual describes only a small subset of the API that the libraries
-provide, most important functions for application programmers.
-For other API, please refer to the idnkit's specification document
-(which is not yet available) or the header files typically found under
-`/usr/local/include/idn/' on your system.
-.\"
-.SH DESCRIPTION
-.PP
-The \fBidn_nameinit\fR function initializes the library.
-It also sets default configuration if \fIload_file\fR is 0, otherwise
-it tries to read a configuration file.
-If \fBidn_nameinit\fR is called more than once, the library initialization
-will take place only at the first call while the actual configuration
-procedure will occur at every call.
-.PP
-If there are no errors, \fBidn_nameinit\fR returns \fBidn_success\fR.
-Otherwise, the returned value indicates the cause of the error.
-See the section ``RETURN VALUES'' below for the error codes.
-.PP
-Usually you don't have to call this function explicitly because
-it is implicitly called when \fBidn_encodename\fR or \fBidn_decodename\fR
-is first called without prior calling of \fBidn_nameinit\fR.
-In such case, initialization without the configuration file
-takes place.
-.\"
-.PP
-\fBidn_encodename\fR function performs name preparation and encoding
-conversion on the internationalized domain name specified by \fIfrom\fR,
-and stores the result to \fIto\fR, whose length is specified by
-\fItolen\fR.
-\fIactions\fR is a bitwise-OR of the following macros, specifying which
-subprocesses in the encoding process are to be employed.
-.RS 2
-.nf
-.ft CW
-IDN_LOCALCONV Local encoding to UTF-8 conversion
-IDN_DELIMMAP Delimiter mapping
-IDN_LOCALMAP Local mapping
-IDN_NAMEPREP NAMEPREP mapping, normalization,
- prohibited character check and bidirectional
- string check
-IDN_UNASCHECK NAMEPREP unassigned codepoint check
-IDN_ASCCHECK ASCII range character check
-IDN_IDNCONV UTF-8 to IDN encoding conversion
-IDN_LENCHECK Label length check
-.ft R
-.fi
-.RE
-.PP
-Details of this encoding process can be found in the section ``NAME ENCODING''.
-.PP
-For convenience, also \fBIDN_ENCODE_QUERY\fR, \fBIDN_ENCODE_APP\fR
-and \fBIDN_ENCODE_STORED\fR macros are provided.
-\fBIDN_ENCODE_QUERY\fR is used to encode a ``query string''
-(see the IDNA specification).
-It is equal to
-.RS 4
-.nf
-.ft CW
-(IDN_LOCALCONV | IDN_DELIMMAP | IDN_LOCALMAP | IDN_NAMEPREP
- | IDN_IDNCONV | IDN_LENCHECK)
-.ft R
-.fi
-.RE
-.PP
-if you are using \fBlibidnkit\fR, and equal to
-.RS 4
-.nf
-.ft CW
-(IDN_DELIMMAP | IDN_LOCALMAP | IDN_NAMEPREP | IDN_IDNCONV
- | IDN_LENCHECK)
-.ft R
-.fi
-.RE
-.PP
-if you are using \fBlibidnkitlite\fR.
-.PP
-\fBIDN_ENCODE_APP\fR is used for ordinary application to encode a
-domain name.
-It performs \fBIDN_ASCCHECK\fR in addition with \fBIDN_ENCODE_QUERY\fR.
-\fBIDN_ENCODE_STORED\fR is used to encode a ``stored string''
-(see the IDNA specification).
-It performs \fBIDN_ENCODE_APP\fR plus \fBIDN_UNASCHECK\fR.
-.PP
-\fBidn_decodename\fR function performs the reverse of \fBidn_encodename\fR.
-It converts the internationalized domain name given by \fIfrom\fR,
-which is represented in a special encoding called ACE,
-to the application's local codeset and stores into \fIto\fR,
-whose length is specified by \fItolen\fR.
-As in \fBidn_encodename\fR, \fIactions\fR is a bitwise-OR of the following
-macros.
-.RS 2
-.nf
-.ft CW
-IDN_DELIMMAP Delimiter mapping
-IDN_NAMEPREP NAMEPREP mapping, normalization,
- prohibited character check and bidirectional
- string check
-IDN_UNASCHECK NAMEPREP unassigned codepoint check
-IDN_IDNCONV UTF-8 to IDN encoding conversion
-IDN_RTCHECK Round trip check
-IDN_ASCCHECK ASCII range character check
-IDN_LOCALCONV Local encoding to UTF-8 conversion
-.ft R
-.fi
-.RE
-.PP
-Details of this decoding process can be found in the section ``NAME DECODING''.
-.PP
-For convenience, also \fBIDN_DECODE_QUERY\fR, \fBIDN_DECODE_APP\fR
-and \fBIDN_DECODE_STORED\fR macros are provided.
-\fBIDN_DECODE_QUERY\fR is used to decode a ``qeury string''
-(see the IDNA specification).
-It is equal to
-.RS 4
-.nf
-.ft CW
-(IDN_DELIMMAP | IDN_NAMEPREP | IDN_IDNCONV | IDN_RTCHECK
- | IDN_LOCALCONV)
-.ft R
-.fi
-.RE
-.PP
-if you are using \fBlibidnkit\fR, and equal to
-.RS 4
-.nf
-.ft CW
-(IDN_DELIMMAP | IDN_NAMEPREP | IDN_IDNCONV | IDN_RTCHECK)
-.ft R
-.fi
-.RE
-.PP
-if you are using \fBlibidnkitlite\fR.
-.PP
-\fBIDN_DECODE_APP\fR is used for ordinary application to decode a
-domain name.
-It performs \fBIDN_ASCCHECK\fR in addition with \fBIDN_DECODE_QUERY\fR.
-\fBIDN_DECODE_STORED\fR is used to decode a ``stored string''
-(see the IDNA specification).
-It performs \fBIDN_DECODE_APP\fR plus \fBIDN_UNASCHECK\fR.
-.PP
-\fBidn_decodename2\fR function provides the same functionality as
-\fBidn_decodename\fR except that character encoding of \fIfrom\fR is
-supposed to be \fIauxencoding\fR.
-If IDN encoding is Punycode and \fIauxencoding\fR is ISO 8859-2
-for example, it is assumed that the Punycode string stored in
-\fIfrom\fR is written in ISO 8859-2.
-.PP
-In the IDN decode procedure, \fBIDN_NAMEPREP\fR is done before
-\fBIDN_IDNCONV\fR, and some non-ASCII characters are converted to
-ASCII characters as the result of \fBIDN_NAMEPREP\fR.
-Therefore, ACE string given by \fBfrom\fR may contains those non-ASCII
-characters.
-That is the reason \fBdocode_name2\fR exists.
-.PP
-All of the functions above return error code of type \fBidn_result_t\fR.
-All codes other than \fBidn_success\fR indicates some kind of failure.
-\fBidn_result_tostring\fR function takes an error code \fIresult\fR
-and returns a pointer to the corresponding message string.
-.\"
-.SH "NAME ENCODING"
-Name encoding is a process that transforms the specified
-internationalized domain name to a certain string suitable for name
-resolution.
-For each label in a given domain name, the encoding processor performs:
-.\"
-.IP "(1) Convert to UTF-8 (IDN_LOCALCONV)"
-Convert the encoding of the given domain name from application's local
-encoding (e.g. ISO-8859-1) to UTF-8.
-Note that \fBlibidnkitlite\fR doesn't support this step.
-.\"
-.IP "(2) Delimiter mapping (IDN_DELIMMAP)"
-Map domain name delimiters to `.' (U+002E).
-The recoginzed delimiters are: U+3002 (ideographic full stop),
-U+FF0E (fullwidth full stop), U+FF61 (halfwidth ideographic full stop).
-.\"
-.IP "(3) Local mapping (IDN_LOCALMAP)"
-Apply character mapping whose rule is determined by the TLD of the name.
-.\"
-.IP "(4) NAMEPREP (IDN_NAMEPREP, IDN_UNASCHECK)"
-Perform name preparation (NAMEPREP), which is a standard process for
-name canonicalizaion of internationalized domain names.
-.br
-NAMEPREP consists of 5 steps:
-mapping, normalization, prohibited character check, bidirectional
-text check and unassigned codepoint check.
-The first four steps are done by IDN_NAMEPREP, and the last step is
-done by IDN_UNASCHECK.
-.\"
-.IP "(5) ASCII range character check (IDN_ASCCHECK)"
-Checks if the domain name contains non-LDH ASCII character (not
-alpha-numeric or hyphen), or it begins or end with hyphen.
-.\"
-.IP "(6) Convert to ACE (IDN_IDNCONV)"
-Convert the NAMEPREPed name to a special encoding designed for representing
-internationalized domain names.
-.br
-The encoding is also known as ACE (ASCII Compatible Encoding) since
-a string in the encoding is just like a traditional ASCII domain name
-consisting of only letters, numbers and hyphens.
-.\"
-.IP "(7) Label length check (IDN_LENCHECK)"
-For each label, check the number of characters in it.
-It must be in the range 1 to 63.
-.PP
-There are many configuration parameters for this process, such as the
-ACE or the local mapping rules. These parameters are read from the
-default idnkit's configuration file, \fBidn.conf\fR.
-See idn.conf(5) for details.
-.\"
-.SH "NAME DECODING"
-Name decoding is a reverse process of the name encoding.
-It transforms the specified
-internationalized domain name in a special encoding suitable for name
-resolution to the normal name string in the application's current codeset.
-However, name encoding and name decoding are not symmetric.
-.PP
-For each label in a given domain name, the decoding processor performs:
-.\"
-.IP "(1) Delimiter mapping (IDN_DELIMMAP)"
-Map domain name delimiters to `.' (U+002E).
-The recoginzed delimiters are: U+3002 (ideographic full stop),
-U+FF0E (fullwidth full stop), U+FF61 (halfwidth ideographic full stop).
-.\"
-.IP "(2) NAMEPREP (IDN_NAMEPREP, IDN_UNASCHECK)"
-Perform name preparation (NAMEPREP), which is a standard process for
-name canonicalizaion of internationalized domain names.
-.\"
-.IP "(3) Convert to UTF-8 (IDN_IDNCONV)"
-Convert the encoding of the given domain name from ACE to UTF-8.
-.\"
-.IP "(4) Round trip check (IDN_RTCHECK)"
-Encode the result of (3) using the ``NAME ENCODING'' scheme, and then
-compare it with the result of the step (2).
-If they are different, the check is failed.
-If IDN_UNASCHECK, IDN_ASCCHECK or both are specified, also they are
-done in the encoding processes.
-.\"
-.IP "(5) Convert to local encoding"
-Convert the result of (3) from UTF-8 to the application's local
-encoding (e.g. ISO-8859-1).
-Note that \fBlibidnkitlite\fR doesn't support this step.
-.PP
-If prohibited character check, unassigned codepoint check or
-bidirectional text check at step (2) is failed, or round trip check
-at step (4) is failed, the original input label is returned.
-.PP
-The configuration parameters for this process,
-are also read from the configuration file \fBidn.conf\fR.
-.\"
-.SH "IDN_DISABLE"
-If the \fBIDN_DISABLE\fR environ variable is defined at run-time,
-the libraries disable internationalized domain name support, by default.
-In this case, \fBidn_encodename\fR and \fBidn_decodename\fR don't
-encode/decode an input name, but instead they simply ouput a copy
-of the input name as the result of encoding/decoding.
-.PP
-If your application should always enable mulitilingual domain name
-support regardless of definition of \fBIDN_DISABLE\fR, call
-.RS 4
-.nf
-.ft CW
-idn_enable(1)
-.ft R
-.fi
-.RE
-.PP
-before performing encoding/decoding.
-.\"
-.SH "RETURN VALUES"
-Most of the API functions return values of type \fBidn_result_t\fR in
-order to indicate the status of the call.
-
-The following is a complete list of the status codes. Note that some
-of them are never returned by the functions described in this manual.
-.TP 15
-.SB idn_success
-Not an error. The call succeeded.
-.TP
-.SB idn_notfound
-Specified information does not exist.
-.TP
-.SB idn_invalid_encoding
-The encoding of the specified string is invalid.
-.TP
-.SB idn_invalid_syntax
-There is a syntax error in the configuration file.
-.TP
-.SB idn_invalid_name
-The specified name is not valid.
-.TP
-.SB idn_invalid_message
-The specified DNS message is not valid.
-.TP
-.SB idn_invalid_action
-The specified action contains invalid flags.
-.TP
-.SB idn_invalid_codepoint
-The specified Unicode code point value is not valid.
-.TP
-.SB idn_invalid_length
-The number of characters in an ACE label is not in the range 1 to 63.
-.TP
-.SB idn_buffer_overflow
-The specified buffer is too small to hold the result.
-.TP
-.SB idn_noentry
-The specified key does not exist in the hash table.
-.TP
-.SB idn_nomemory
-Memory allocation using malloc failed.
-.TP
-.SB idn_nofile
-The specified file could not be opened.
-.TP
-.SB idn_nomapping
-Some characters do not have the mapping to the target character set.
-.TP
-.SB idn_context_required
-Context information is required.
-.TP
-.SB idn_prohibited
-The specified string contains some prohibited characters.
-.TP
-.SB idn_failure
-Generic error which is not covered by the above codes.
-.\"
-.SH EXAMPLES
-To get the address of a internationalized domain name in the application's
-local codeset, use \fBidn_encodename\fR to convert the name to the format
-suitable for passing to resolver functions.
-.RS 4
-.nf
-.ft CW
-idn_result_t r;
-char ace_name[256];
-struct hostent *hp;
-
-\&...
-r = idn_encodename(IDN_ENCODE_APP, name, ace_name,
- sizeof(ace_name));
-if (r != idn_success) {
- fprintf(stderr, "idn_encodename failed: %s\en",
- idn_result_tostring(r));
- exit(1);
-}
-
-hp = gethostbyname(ace_name);
-\&...
-.ft R
-.fi
-.RE
-.PP
-To decode the internationalized domain name returned from a resolver function,
-use \fBidn_decodename\fR.
-.RS 4
-.nf
-.ft CW
-idn_result_t r;
-char local_name[256];
-struct hostent *hp;
-
-\&...
-hp = gethostbyname(name);
-r = idn_decodename(IDN_DECODE_APP, hp->h_name, local_name,
- sizeof(local_name));
-if (r != idn_success) {
- fprintf(stderr, "idn_decodename failed: %s\en",
- idn_result_tostring(r));
- exit(1);
-}
-printf("name: %s\en", local_name);
-\&...
-.ft R
-.fi
-.RE
-.\"
-.SH "SEE ALSO"
-idn.conf(5)
diff --git a/contrib/idn/idnkit-1.0-src/map/Makefile.in b/contrib/idn/idnkit-1.0-src/map/Makefile.in
deleted file mode 100644
index b986a6a5..00000000
--- a/contrib/idn/idnkit-1.0-src/map/Makefile.in
+++ /dev/null
@@ -1,75 +0,0 @@
-# $Id: Makefile.in,v 1.1 2003/06/04 00:27:55 marka Exp $
-#
-# Copyright (c) 2000 Japan Network Information Center. All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-top_builddir = ..
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-datadir = @datadir@
-mapdir = $(datadir)/idnkit
-
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-MKINSTALLDIRS = @top_srcdir@/mkinstalldirs
-SHELL = @SHELL@
-
-MAPS = jp.map
-
-all:
-
-install:
- $(MKINSTALLDIRS) $(DESTDIR)$(mapdir)
- for map in $(MAPS); do \
- $(INSTALL_DATA) $(srcdir)/$$map $(DESTDIR)$(mapdir)/$$map; \
- done
-
-clean:
- rm -f *~
-
-distclean: clean
- rm -f Makefile
-
-test check:
diff --git a/contrib/idn/idnkit-1.0-src/map/jp.map b/contrib/idn/idnkit-1.0-src/map/jp.map
deleted file mode 100644
index 3d98ccec..00000000
--- a/contrib/idn/idnkit-1.0-src/map/jp.map
+++ /dev/null
@@ -1,50 +0,0 @@
-# $Id: jp.map,v 1.1 2003/06/04 00:27:55 marka Exp $
-# Copyright (c) 2001 Japan Network Information Center. All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-#
-# Local map table for JP domain.
-#
-
-# version=1.0
-
-2212; FF0D
-309B; 3099
-309C; 309A
diff --git a/contrib/idn/idnkit-1.0-src/mkinstalldirs b/contrib/idn/idnkit-1.0-src/mkinstalldirs
deleted file mode 100755
index 6e12439f..00000000
--- a/contrib/idn/idnkit-1.0-src/mkinstalldirs
+++ /dev/null
@@ -1,40 +0,0 @@
-#! /bin/sh
-# mkinstalldirs --- make directory hierarchy
-# Author: Noah Friedman <friedman@prep.ai.mit.edu>
-# Created: 1993-05-16
-# Public domain
-
-# $Id: mkinstalldirs,v 1.1 2003/06/04 00:25:33 marka Exp $
-
-errstatus=0
-
-for file
-do
- set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
- shift
-
- pathcomp=
- for d
- do
- pathcomp="$pathcomp$d"
- case "$pathcomp" in
- -* ) pathcomp=./$pathcomp ;;
- esac
-
- if test ! -d "$pathcomp"; then
- echo "mkdir $pathcomp"
-
- mkdir "$pathcomp" || lasterr=$?
-
- if test ! -d "$pathcomp"; then
- errstatus=$lasterr
- fi
- fi
-
- pathcomp="$pathcomp/"
- done
-done
-
-exit $errstatus
-
-# mkinstalldirs ends here
diff --git a/contrib/idn/idnkit-1.0-src/patch/bind9/bind-9.2.1-patch b/contrib/idn/idnkit-1.0-src/patch/bind9/bind-9.2.1-patch
deleted file mode 100644
index db98d6c9..00000000
--- a/contrib/idn/idnkit-1.0-src/patch/bind9/bind-9.2.1-patch
+++ /dev/null
@@ -1,5900 +0,0 @@
-IDN patch for bind-9.2.1
-========================
-
-
-This is a patch file for ISC BIND 9.2.1 to make it work with
-internationalized domain names. With this patch you'll get IDN-aware
-dig/host/nslookup.
-
-To apply this patch, you should go to the top directory of the BIND
-distribution (where you see `README' file), then invoke `patch'
-command like this:
-
- % patch -p0 < this-file
-
-Then follow the instructions described in `README.idnkit' to compile
-and install.
-
-
-Index: README.idnkit
-diff -c /dev/null mdn/othersrc/bind9/README.idnkit:1.2
-*** README.idnkit Mon May 27 16:53:24 2002
---- README.idnkit Tue Mar 26 16:35:05 2002
-***************
-*** 0 ****
---- 1,113 ----
-+
-+ BIND-9 IDN patch
-+
-+ Japan Network Information Center (JPNIC)
-+
-+
-+ * What is this patch for?
-+
-+ This patch adds internationalized domain name (IDN) support to BIND-9.
-+ You'll get internationalized version of dig/host/nslookup commands.
-+
-+ + internationalized dig/host/nslookup
-+ dig/host/nslookup accepts non-ASCII domain names in the local
-+ codeset (such as Shift JIS, Big5 or ISO8859-1) determined by
-+ the locale information. The domain names are normalized and
-+ converted to the encoding on the DNS protocol, and sent to DNS
-+ servers. The replies are converted back to the local codeset
-+ and displayed.
-+
-+
-+ * Compilation & installation
-+
-+ 0. Prerequisite
-+
-+ You have to build and install idnkit before building this patched version
-+ of bind-9.
-+
-+ 1. Running configure script
-+
-+ Run `configure' in the top directory. See `README' for the
-+ configuration options.
-+
-+ This patch adds the following 4 options to `configure'. You should
-+ at least specify `--with-idn' option to enable IDN support.
-+
-+ --with-idn[=IDN_PREFIX]
-+ To enable IDN support, you have to specify `--with-idn' option.
-+ The argument IDN_PREFIX is the install prefix of idnkit. If
-+ IDN_PREFIX is omitted, PREFIX (derived from `--prefix=PREFIX')
-+ is assumed.
-+
-+ --with-libiconv[=LIBICONV_PREFIX]
-+ Specify this option if idnkit you have installed links GNU
-+ libiconv. The argument LIBICONV_PREFIX is install prefix of
-+ GNU libiconv. If the argument is omitted, PREFIX (derived
-+ from `--prefix=PREFIX') is assumed.
-+
-+ `--with-libiconv' is shorthand option for GNU libiconv.
-+
-+ --with-libiconv=/usr/local
-+
-+ This is equivalent to:
-+
-+ --with-iconv='-L/usr/local/lib -R/usr/local/lib -liconv'
-+
-+ `--with-libiconv' assumes that your C compiler has `-R'
-+ option, and that the option adds the specified run-time path
-+ to an exacutable binary. If `-R' option of your compiler has
-+ different meaning, or your compiler lacks the option, you
-+ should use `--with-iconv' option instead. Binary command
-+ without run-time path information might be unexecutable.
-+ In that case, you would see an error message like:
-+
-+ error in loading shared libraries: libiconv.so.2: cannot
-+ open shared object file
-+
-+ If both `--with-libiconv' and `--with-iconv' options are
-+ specified, `--with-iconv' is prior to `--with-libiconv'.
-+
-+ --with-iconv=ICONV_LIBSPEC
-+ If your libc doens't provide iconv(), you need to specify the
-+ library containing iconv() with this option. `ICONV_LIBSPEC'
-+ is the argument(s) to `cc' or `ld' to link the library, for
-+ example, `--with-iconv="-L/usr/local/lib -liconv"'.
-+ You don't need to specify the header file directory for "iconv.h"
-+ to the compiler, as it isn't included directly by bind-9 with
-+ this patch.
-+
-+ --with-idnlib=IDN_LIBSPEC
-+ With this option, you can explicitly specify the argument(s)
-+ to `cc' or `ld' to link the idnkit's library, `libidnkit'. If
-+ this option is not specified, `-L${PREFIX}/lib -lidnkit' is
-+ assumed, where ${PREFIX} is the installation prefix specified
-+ with `--with-idn' option above. You may need to use this
-+ option to specify extra argments, for example,
-+ `--with-idnlib="-L/usr/local/lib -R/usr/local/lib -lidnkit"'.
-+
-+ Please consult `README' for other configuration options.
-+
-+ Note that if you want to specify some extra header file directories,
-+ you should use the environment variable STD_CINCLUDES instead of
-+ CFLAGS, as described in README.
-+
-+ 2. Compilation and installation
-+
-+ After running "configure", just do
-+
-+ make
-+ make install
-+
-+ for compiling and installing.
-+
-+
-+ * Contact information
-+
-+ Please see http//www.nic.ad.jp/jp/research/mdn/ for the latest news
-+ about idnkit and this patch.
-+
-+ Bug reports and comments on this kit should be sent to
-+ mdnkit-bugs@nic.ad.jp and mdn-cmt@nic.ad.jp, respectively.
-+
-+
-+ ; $Id: bind-9.2.1-patch,v 1.1 2003/06/04 00:27:30 marka Exp $
-Index: config.h.in
-diff -c mdn/othersrc/bind9/config.h.in:1.1.1.6 mdn/othersrc/bind9/config.h.in:1.12
-*** config.h.in Tue Nov 27 16:55:45 2001
---- config.h.in Tue Mar 19 16:45:35 2002
-***************
-*** 141,146 ****
---- 141,149 ----
- /* define if you have strerror in the C library. */
- #undef HAVE_STRERROR
-
-+ /* Define if you have the setlocale function. */
-+ #undef HAVE_SETLOCALE
-+
- /* Define if you have the <dlfcn.h> header file. */
- #undef HAVE_DLFCN_H
-
-***************
-*** 150,155 ****
---- 153,161 ----
- /* Define if you have the <linux/capability.h> header file. */
- #undef HAVE_LINUX_CAPABILITY_H
-
-+ /* Define if you have the <locale.h> header file. */
-+ #undef HAVE_LOCALE_H
-+
- /* Define if you have the <sys/prctl.h> header file. */
- #undef HAVE_SYS_PRCTL_H
-
-***************
-*** 176,178 ****
---- 182,188 ----
-
- /* Define if you have the socket library (-lsocket). */
- #undef HAVE_LIBSOCKET
-+
-+ /* define if idnkit support is to be included. */
-+ #undef WITH_IDN
-+
-Index: configure
-diff -c mdn/othersrc/bind9/configure:1.1.1.9 mdn/othersrc/bind9/configure:1.15
-*** configure Wed May 22 17:14:53 2002
---- configure Mon May 27 12:10:14 2002
-***************
-*** 369,374 ****
---- 369,382 ----
- --with-kame[=PATH] use Kame IPv6 [default path /usr/local/v6]"
- ac_help="$ac_help
- --disable-linux-caps disable linux capabilities"
-+ ac_help="$ac_help
-+ --with-idn[=MPREFIX] enable IDN support using idnkit [default PREFIX]"
-+ ac_help="$ac_help
-+ --with-libiconv[=IPREFIX] GNU libiconv are in IPREFIX [default PREFIX]"
-+ ac_help="$ac_help
-+ --with-iconv[=LIBSPEC] specify iconv library [default -liconv]"
-+ ac_help="$ac_help
-+ --with-idnlib=ARG specify libidnkit"
-
- # Initialize some variables set by options.
- # The variables have the same names as the options, with
-***************
-*** 911,917 ****
- fi
-
- echo $ac_n "checking host system type""... $ac_c" 1>&6
-! echo "configure:915: checking host system type" >&5
-
- host_alias=$host
- case "$host_alias" in
---- 919,925 ----
- fi
-
- echo $ac_n "checking host system type""... $ac_c" 1>&6
-! echo "configure:923: checking host system type" >&5
-
- host_alias=$host
- case "$host_alias" in
-***************
-*** 933,939 ****
-
-
- echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-! echo "configure:937: checking whether ${MAKE-make} sets \${MAKE}" >&5
- set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
---- 941,947 ----
-
-
- echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-! echo "configure:945: checking whether ${MAKE-make} sets \${MAKE}" >&5
- set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-***************
-*** 962,968 ****
- # Extract the first word of "ranlib", so it can be a program name with args.
- set dummy ranlib; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:966: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 970,976 ----
- # Extract the first word of "ranlib", so it can be a program name with args.
- set dummy ranlib; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:974: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 1001,1007 ****
- # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
- # ./install, which can be erroneously created by make from ./install.sh.
- echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-! echo "configure:1005: checking for a BSD compatible install" >&5
- if test -z "$INSTALL"; then
- if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
---- 1009,1015 ----
- # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
- # ./install, which can be erroneously created by make from ./install.sh.
- echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-! echo "configure:1013: checking for a BSD compatible install" >&5
- if test -z "$INSTALL"; then
- if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-***************
-*** 1062,1068 ****
- # Extract the first word of "ar", so it can be a program name with args.
- set dummy ar; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:1066: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_AR'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 1070,1076 ----
- # Extract the first word of "ar", so it can be a program name with args.
- set dummy ar; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:1074: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_AR'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 1121,1127 ****
- # Extract the first word of "$ac_prog", so it can be a program name with args.
- set dummy $ac_prog; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:1125: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_ETAGS'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 1129,1135 ----
- # Extract the first word of "$ac_prog", so it can be a program name with args.
- set dummy $ac_prog; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:1133: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_ETAGS'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 1163,1169 ****
- #
- if test "X$ETAGS" != "X"; then
- echo $ac_n "checking for Exuberant Ctags etags""... $ac_c" 1>&6
-! echo "configure:1167: checking for Exuberant Ctags etags" >&5
- if $ETAGS --version 2>&1 | grep 'Exuberant Ctags' >/dev/null 2>&1; then
- echo "$ac_t""yes" 1>&6
- ETAGS="$ETAGS -L"
---- 1171,1177 ----
- #
- if test "X$ETAGS" != "X"; then
- echo $ac_n "checking for Exuberant Ctags etags""... $ac_c" 1>&6
-! echo "configure:1175: checking for Exuberant Ctags etags" >&5
- if $ETAGS --version 2>&1 | grep 'Exuberant Ctags' >/dev/null 2>&1; then
- echo "$ac_t""yes" 1>&6
- ETAGS="$ETAGS -L"
-***************
-*** 1181,1187 ****
- # Extract the first word of "$ac_prog", so it can be a program name with args.
- set dummy $ac_prog; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:1185: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 1189,1195 ----
- # Extract the first word of "$ac_prog", so it can be a program name with args.
- set dummy $ac_prog; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:1193: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 1328,1334 ****
- # Extract the first word of "gcc", so it can be a program name with args.
- set dummy gcc; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:1332: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 1336,1342 ----
- # Extract the first word of "gcc", so it can be a program name with args.
- set dummy gcc; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:1340: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 1358,1364 ****
- # Extract the first word of "cc", so it can be a program name with args.
- set dummy cc; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:1362: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 1366,1372 ----
- # Extract the first word of "cc", so it can be a program name with args.
- set dummy cc; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:1370: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 1409,1415 ****
- # Extract the first word of "cl", so it can be a program name with args.
- set dummy cl; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:1413: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 1417,1423 ----
- # Extract the first word of "cl", so it can be a program name with args.
- set dummy cl; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:1421: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 1441,1447 ****
- fi
-
- echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-! echo "configure:1445: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
-
- ac_ext=c
- # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
---- 1449,1455 ----
- fi
-
- echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-! echo "configure:1453: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
-
- ac_ext=c
- # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-***************
-*** 1452,1463 ****
-
- cat > conftest.$ac_ext << EOF
-
-! #line 1456 "configure"
- #include "confdefs.h"
-
- main(){return(0);}
- EOF
-! if { (eval echo configure:1461: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- ac_cv_prog_cc_works=yes
- # If we can't run a trivial program, we are probably using a cross compiler.
- if (./conftest; exit) 2>/dev/null; then
---- 1460,1471 ----
-
- cat > conftest.$ac_ext << EOF
-
-! #line 1464 "configure"
- #include "confdefs.h"
-
- main(){return(0);}
- EOF
-! if { (eval echo configure:1469: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- ac_cv_prog_cc_works=yes
- # If we can't run a trivial program, we are probably using a cross compiler.
- if (./conftest; exit) 2>/dev/null; then
-***************
-*** 1483,1494 ****
- { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
- fi
- echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-! echo "configure:1487: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
- echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
- cross_compiling=$ac_cv_prog_cc_cross
-
- echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-! echo "configure:1492: checking whether we are using GNU C" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 1491,1502 ----
- { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
- fi
- echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-! echo "configure:1495: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
- echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
- cross_compiling=$ac_cv_prog_cc_cross
-
- echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-! echo "configure:1500: checking whether we are using GNU C" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 1497,1503 ****
- yes;
- #endif
- EOF
-! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1501: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
- ac_cv_prog_gcc=yes
- else
- ac_cv_prog_gcc=no
---- 1505,1511 ----
- yes;
- #endif
- EOF
-! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1509: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
- ac_cv_prog_gcc=yes
- else
- ac_cv_prog_gcc=no
-***************
-*** 1516,1522 ****
- ac_save_CFLAGS="$CFLAGS"
- CFLAGS=
- echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-! echo "configure:1520: checking whether ${CC-cc} accepts -g" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 1524,1530 ----
- ac_save_CFLAGS="$CFLAGS"
- CFLAGS=
- echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-! echo "configure:1528: checking whether ${CC-cc} accepts -g" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 1549,1555 ****
-
-
- echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-! echo "configure:1553: checking how to run the C preprocessor" >&5
- # On Suns, sometimes $CPP names a directory.
- if test -n "$CPP" && test -d "$CPP"; then
- CPP=
---- 1557,1563 ----
-
-
- echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-! echo "configure:1561: checking how to run the C preprocessor" >&5
- # On Suns, sometimes $CPP names a directory.
- if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-***************
-*** 1564,1576 ****
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp.
- cat > conftest.$ac_ext <<EOF
-! #line 1568 "configure"
- #include "confdefs.h"
- #include <assert.h>
- Syntax Error
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-! { (eval echo configure:1574: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
- :
---- 1572,1584 ----
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp.
- cat > conftest.$ac_ext <<EOF
-! #line 1576 "configure"
- #include "confdefs.h"
- #include <assert.h>
- Syntax Error
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-! { (eval echo configure:1582: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
- :
-***************
-*** 1581,1593 ****
- rm -rf conftest*
- CPP="${CC-cc} -E -traditional-cpp"
- cat > conftest.$ac_ext <<EOF
-! #line 1585 "configure"
- #include "confdefs.h"
- #include <assert.h>
- Syntax Error
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-! { (eval echo configure:1591: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
- :
---- 1589,1601 ----
- rm -rf conftest*
- CPP="${CC-cc} -E -traditional-cpp"
- cat > conftest.$ac_ext <<EOF
-! #line 1593 "configure"
- #include "confdefs.h"
- #include <assert.h>
- Syntax Error
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-! { (eval echo configure:1599: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
- :
-***************
-*** 1598,1610 ****
- rm -rf conftest*
- CPP="${CC-cc} -nologo -E"
- cat > conftest.$ac_ext <<EOF
-! #line 1602 "configure"
- #include "confdefs.h"
- #include <assert.h>
- Syntax Error
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-! { (eval echo configure:1608: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
- :
---- 1606,1618 ----
- rm -rf conftest*
- CPP="${CC-cc} -nologo -E"
- cat > conftest.$ac_ext <<EOF
-! #line 1610 "configure"
- #include "confdefs.h"
- #include <assert.h>
- Syntax Error
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-! { (eval echo configure:1616: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
- :
-***************
-*** 1629,1640 ****
- echo "$ac_t""$CPP" 1>&6
-
- echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-! echo "configure:1633: checking for ANSI C header files" >&5
- if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 1638 "configure"
- #include "confdefs.h"
- #include <stdlib.h>
- #include <stdarg.h>
---- 1637,1648 ----
- echo "$ac_t""$CPP" 1>&6
-
- echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-! echo "configure:1641: checking for ANSI C header files" >&5
- if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 1646 "configure"
- #include "confdefs.h"
- #include <stdlib.h>
- #include <stdarg.h>
-***************
-*** 1642,1648 ****
- #include <float.h>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-! { (eval echo configure:1646: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
- rm -rf conftest*
---- 1650,1656 ----
- #include <float.h>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-! { (eval echo configure:1654: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
- rm -rf conftest*
-***************
-*** 1659,1665 ****
- if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat > conftest.$ac_ext <<EOF
-! #line 1663 "configure"
- #include "confdefs.h"
- #include <string.h>
- EOF
---- 1667,1673 ----
- if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat > conftest.$ac_ext <<EOF
-! #line 1671 "configure"
- #include "confdefs.h"
- #include <string.h>
- EOF
-***************
-*** 1677,1683 ****
- if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat > conftest.$ac_ext <<EOF
-! #line 1681 "configure"
- #include "confdefs.h"
- #include <stdlib.h>
- EOF
---- 1685,1691 ----
- if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat > conftest.$ac_ext <<EOF
-! #line 1689 "configure"
- #include "confdefs.h"
- #include <stdlib.h>
- EOF
-***************
-*** 1698,1704 ****
- :
- else
- cat > conftest.$ac_ext <<EOF
-! #line 1702 "configure"
- #include "confdefs.h"
- #include <ctype.h>
- #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
---- 1706,1712 ----
- :
- else
- cat > conftest.$ac_ext <<EOF
-! #line 1710 "configure"
- #include "confdefs.h"
- #include <ctype.h>
- #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-***************
-*** 1709,1715 ****
- exit (0); }
-
- EOF
-! if { (eval echo configure:1713: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
- :
- else
---- 1717,1723 ----
- exit (0); }
-
- EOF
-! if { (eval echo configure:1721: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
- :
- else
-***************
-*** 1737,1753 ****
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-! echo "configure:1741: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 1746 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-! { (eval echo configure:1751: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
- rm -rf conftest*
---- 1745,1761 ----
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-! echo "configure:1749: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 1754 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-! { (eval echo configure:1759: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
- rm -rf conftest*
-***************
-*** 1775,1786 ****
-
-
- echo $ac_n "checking for working const""... $ac_c" 1>&6
-! echo "configure:1779: checking for working const" >&5
- if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 1784 "configure"
- #include "confdefs.h"
-
- int main() {
---- 1783,1794 ----
-
-
- echo $ac_n "checking for working const""... $ac_c" 1>&6
-! echo "configure:1787: checking for working const" >&5
- if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 1792 "configure"
- #include "confdefs.h"
-
- int main() {
-***************
-*** 1829,1835 ****
-
- ; return 0; }
- EOF
-! if { (eval echo configure:1833: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_c_const=yes
- else
---- 1837,1843 ----
-
- ; return 0; }
- EOF
-! if { (eval echo configure:1841: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_c_const=yes
- else
-***************
-*** 1850,1870 ****
- fi
-
- echo $ac_n "checking for inline""... $ac_c" 1>&6
-! echo "configure:1854: checking for inline" >&5
- if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- ac_cv_c_inline=no
- for ac_kw in inline __inline__ __inline; do
- cat > conftest.$ac_ext <<EOF
-! #line 1861 "configure"
- #include "confdefs.h"
-
- int main() {
- } $ac_kw foo() {
- ; return 0; }
- EOF
-! if { (eval echo configure:1868: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_c_inline=$ac_kw; break
- else
---- 1858,1878 ----
- fi
-
- echo $ac_n "checking for inline""... $ac_c" 1>&6
-! echo "configure:1862: checking for inline" >&5
- if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- ac_cv_c_inline=no
- for ac_kw in inline __inline__ __inline; do
- cat > conftest.$ac_ext <<EOF
-! #line 1869 "configure"
- #include "confdefs.h"
-
- int main() {
- } $ac_kw foo() {
- ; return 0; }
- EOF
-! if { (eval echo configure:1876: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_c_inline=$ac_kw; break
- else
-***************
-*** 1890,1901 ****
- esac
-
- echo $ac_n "checking for sysctlbyname""... $ac_c" 1>&6
-! echo "configure:1894: checking for sysctlbyname" >&5
- if eval "test \"`echo '$''{'ac_cv_func_sysctlbyname'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 1899 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char sysctlbyname(); below. */
---- 1898,1909 ----
- esac
-
- echo $ac_n "checking for sysctlbyname""... $ac_c" 1>&6
-! echo "configure:1902: checking for sysctlbyname" >&5
- if eval "test \"`echo '$''{'ac_cv_func_sysctlbyname'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 1907 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char sysctlbyname(); below. */
-***************
-*** 1918,1924 ****
-
- ; return 0; }
- EOF
-! if { (eval echo configure:1922: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_sysctlbyname=yes"
- else
---- 1926,1932 ----
-
- ; return 0; }
- EOF
-! if { (eval echo configure:1930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_sysctlbyname=yes"
- else
-***************
-*** 1946,1954 ****
- # is reported to not support "static inline" (RT #1212).
- #
- echo $ac_n "checking for static inline breakage""... $ac_c" 1>&6
-! echo "configure:1950: checking for static inline breakage" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 1952 "configure"
- #include "confdefs.h"
-
- int main() {
---- 1954,1962 ----
- # is reported to not support "static inline" (RT #1212).
- #
- echo $ac_n "checking for static inline breakage""... $ac_c" 1>&6
-! echo "configure:1958: checking for static inline breakage" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 1960 "configure"
- #include "confdefs.h"
-
- int main() {
-***************
-*** 1965,1971 ****
-
- ; return 0; }
- EOF
-! if { (eval echo configure:1969: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""no" 1>&6
- else
---- 1973,1979 ----
-
- ; return 0; }
- EOF
-! if { (eval echo configure:1977: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""no" 1>&6
- else
-***************
-*** 1981,1992 ****
- rm -f conftest*
-
- echo $ac_n "checking for size_t""... $ac_c" 1>&6
-! echo "configure:1985: checking for size_t" >&5
- if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 1990 "configure"
- #include "confdefs.h"
- #include <sys/types.h>
- #if STDC_HEADERS
---- 1989,2000 ----
- rm -f conftest*
-
- echo $ac_n "checking for size_t""... $ac_c" 1>&6
-! echo "configure:1993: checking for size_t" >&5
- if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 1998 "configure"
- #include "confdefs.h"
- #include <sys/types.h>
- #if STDC_HEADERS
-***************
-*** 2014,2025 ****
- fi
-
- echo $ac_n "checking for ssize_t""... $ac_c" 1>&6
-! echo "configure:2018: checking for ssize_t" >&5
- if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 2023 "configure"
- #include "confdefs.h"
- #include <sys/types.h>
- #if STDC_HEADERS
---- 2022,2033 ----
- fi
-
- echo $ac_n "checking for ssize_t""... $ac_c" 1>&6
-! echo "configure:2026: checking for ssize_t" >&5
- if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 2031 "configure"
- #include "confdefs.h"
- #include <sys/types.h>
- #if STDC_HEADERS
-***************
-*** 2047,2058 ****
- fi
-
- echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-! echo "configure:2051: checking whether time.h and sys/time.h may both be included" >&5
- if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 2056 "configure"
- #include "confdefs.h"
- #include <sys/types.h>
- #include <sys/time.h>
---- 2055,2066 ----
- fi
-
- echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-! echo "configure:2059: checking whether time.h and sys/time.h may both be included" >&5
- if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 2064 "configure"
- #include "confdefs.h"
- #include <sys/types.h>
- #include <sys/time.h>
-***************
-*** 2061,2067 ****
- struct tm *tp;
- ; return 0; }
- EOF
-! if { (eval echo configure:2065: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_header_time=yes
- else
---- 2069,2075 ----
- struct tm *tp;
- ; return 0; }
- EOF
-! if { (eval echo configure:2073: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_header_time=yes
- else
-***************
-*** 2082,2097 ****
- fi
-
- echo $ac_n "checking for long long""... $ac_c" 1>&6
-! echo "configure:2086: checking for long long" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 2088 "configure"
- #include "confdefs.h"
-
- int main() {
- long long i = 0; return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:2095: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_PLATFORM_HAVELONGLONG="#define ISC_PLATFORM_HAVELONGLONG 1"
---- 2090,2105 ----
- fi
-
- echo $ac_n "checking for long long""... $ac_c" 1>&6
-! echo "configure:2094: checking for long long" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 2096 "configure"
- #include "confdefs.h"
-
- int main() {
- long long i = 0; return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:2103: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_PLATFORM_HAVELONGLONG="#define ISC_PLATFORM_HAVELONGLONG 1"
-***************
-*** 2111,2119 ****
- case $ac_cv_header_unistd_h in
- yes)
- echo $ac_n "checking if unistd.h defines fd_set""... $ac_c" 1>&6
-! echo "configure:2115: checking if unistd.h defines fd_set" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 2117 "configure"
- #include "confdefs.h"
-
- #include <unistd.h>
---- 2119,2127 ----
- case $ac_cv_header_unistd_h in
- yes)
- echo $ac_n "checking if unistd.h defines fd_set""... $ac_c" 1>&6
-! echo "configure:2123: checking if unistd.h defines fd_set" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 2125 "configure"
- #include "confdefs.h"
-
- #include <unistd.h>
-***************
-*** 2121,2127 ****
- fd_set read_set; return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:2125: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_PLATFORM_NEEDSYSSELECTH="#undef ISC_PLATFORM_NEEDSYSSELECTH"
---- 2129,2135 ----
- fd_set read_set; return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:2133: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_PLATFORM_NEEDSYSSELECTH="#undef ISC_PLATFORM_NEEDSYSSELECTH"
-***************
-*** 2163,2176 ****
- # Find the machine's endian flavor.
- #
- echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6
-! echo "configure:2167: checking whether byte ordering is bigendian" >&5
- if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- ac_cv_c_bigendian=unknown
- # See if sys/param.h defines the BYTE_ORDER macro.
- cat > conftest.$ac_ext <<EOF
-! #line 2174 "configure"
- #include "confdefs.h"
- #include <sys/types.h>
- #include <sys/param.h>
---- 2171,2184 ----
- # Find the machine's endian flavor.
- #
- echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6
-! echo "configure:2175: checking whether byte ordering is bigendian" >&5
- if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- ac_cv_c_bigendian=unknown
- # See if sys/param.h defines the BYTE_ORDER macro.
- cat > conftest.$ac_ext <<EOF
-! #line 2182 "configure"
- #include "confdefs.h"
- #include <sys/types.h>
- #include <sys/param.h>
-***************
-*** 2181,2191 ****
- #endif
- ; return 0; }
- EOF
-! if { (eval echo configure:2185: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- # It does; now see whether it defined to BIG_ENDIAN or not.
- cat > conftest.$ac_ext <<EOF
-! #line 2189 "configure"
- #include "confdefs.h"
- #include <sys/types.h>
- #include <sys/param.h>
---- 2189,2199 ----
- #endif
- ; return 0; }
- EOF
-! if { (eval echo configure:2193: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- # It does; now see whether it defined to BIG_ENDIAN or not.
- cat > conftest.$ac_ext <<EOF
-! #line 2197 "configure"
- #include "confdefs.h"
- #include <sys/types.h>
- #include <sys/param.h>
-***************
-*** 2196,2202 ****
- #endif
- ; return 0; }
- EOF
-! if { (eval echo configure:2200: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_c_bigendian=yes
- else
---- 2204,2210 ----
- #endif
- ; return 0; }
- EOF
-! if { (eval echo configure:2208: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_c_bigendian=yes
- else
-***************
-*** 2216,2222 ****
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
- else
- cat > conftest.$ac_ext <<EOF
-! #line 2220 "configure"
- #include "confdefs.h"
- main () {
- /* Are we little or big endian? From Harbison&Steele. */
---- 2224,2230 ----
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
- else
- cat > conftest.$ac_ext <<EOF
-! #line 2228 "configure"
- #include "confdefs.h"
- main () {
- /* Are we little or big endian? From Harbison&Steele. */
-***************
-*** 2229,2235 ****
- exit (u.c[sizeof (long) - 1] == 1);
- }
- EOF
-! if { (eval echo configure:2233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
- ac_cv_c_bigendian=no
- else
---- 2237,2243 ----
- exit (u.c[sizeof (long) - 1] == 1);
- }
- EOF
-! if { (eval echo configure:2241: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
- ac_cv_c_bigendian=no
- else
-***************
-*** 2257,2263 ****
- # was --with-openssl specified?
- #
- echo $ac_n "checking for OpenSSL library""... $ac_c" 1>&6
-! echo "configure:2261: checking for OpenSSL library" >&5
- # Check whether --with-openssl or --without-openssl was given.
- if test "${with_openssl+set}" = set; then
- withval="$with_openssl"
---- 2265,2271 ----
- # was --with-openssl specified?
- #
- echo $ac_n "checking for OpenSSL library""... $ac_c" 1>&6
-! echo "configure:2269: checking for OpenSSL library" >&5
- # Check whether --with-openssl or --without-openssl was given.
- if test "${with_openssl+set}" = set; then
- withval="$with_openssl"
-***************
-*** 2298,2304 ****
- echo "$ac_t""using openssl from $use_openssl/lib and $use_openssl/include" 1>&6
-
- echo $ac_n "checking OpenSSL library version""... $ac_c" 1>&6
-! echo "configure:2302: checking OpenSSL library version" >&5
- saved_cflags="$CFLAGS"
- saved_libs="$LIBS"
- CFLAGS="$CFLAGS $DST_OPENSSL_INC"
---- 2306,2312 ----
- echo "$ac_t""using openssl from $use_openssl/lib and $use_openssl/include" 1>&6
-
- echo $ac_n "checking OpenSSL library version""... $ac_c" 1>&6
-! echo "configure:2310: checking OpenSSL library version" >&5
- saved_cflags="$CFLAGS"
- saved_libs="$LIBS"
- CFLAGS="$CFLAGS $DST_OPENSSL_INC"
-***************
-*** 2307,2313 ****
- echo "$ac_t""assuming target platform has compatible version" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 2311 "configure"
- #include "confdefs.h"
-
- #include <stdio.h>
---- 2315,2321 ----
- echo "$ac_t""assuming target platform has compatible version" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 2319 "configure"
- #include "confdefs.h"
-
- #include <stdio.h>
-***************
-*** 2322,2328 ****
- }
-
- EOF
-! if { (eval echo configure:2326: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
- echo "$ac_t""ok" 1>&6
- else
---- 2330,2336 ----
- }
-
- EOF
-! if { (eval echo configure:2334: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
- echo "$ac_t""ok" 1>&6
- else
-***************
-*** 2387,2393 ****
- # was --with-randomdev specified?
- #
- echo $ac_n "checking for random device""... $ac_c" 1>&6
-! echo "configure:2391: checking for random device" >&5
- # Check whether --with-randomdev or --without-randomdev was given.
- if test "${with_randomdev+set}" = set; then
- withval="$with_randomdev"
---- 2395,2401 ----
- # was --with-randomdev specified?
- #
- echo $ac_n "checking for random device""... $ac_c" 1>&6
-! echo "configure:2399: checking for random device" >&5
- # Check whether --with-randomdev or --without-randomdev was given.
- if test "${with_randomdev+set}" = set; then
- withval="$with_randomdev"
-***************
-*** 2411,2417 ****
-
- ac_safe=`echo "$devrandom" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $devrandom""... $ac_c" 1>&6
-! echo "configure:2415: checking for $devrandom" >&5
- if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 2419,2425 ----
-
- ac_safe=`echo "$devrandom" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $devrandom""... $ac_c" 1>&6
-! echo "configure:2423: checking for $devrandom" >&5
- if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 2463,2469 ****
- #
-
- echo $ac_n "checking whether to build with thread support""... $ac_c" 1>&6
-! echo "configure:2467: checking whether to build with thread support" >&5
-
- case $host in
- *-dec-osf*)
---- 2471,2477 ----
- #
-
- echo $ac_n "checking whether to build with thread support""... $ac_c" 1>&6
-! echo "configure:2475: checking whether to build with thread support" >&5
-
- case $host in
- *-dec-osf*)
-***************
-*** 2551,2557 ****
- # experiment with it.
- CC="gcc"
- echo $ac_n "checking which NetBSD thread library to use""... $ac_c" 1>&6
-! echo "configure:2555: checking which NetBSD thread library to use" >&5
-
- # Check whether --with-ptl2 or --without-ptl2 was given.
- if test "${with_ptl2+set}" = set; then
---- 2559,2565 ----
- # experiment with it.
- CC="gcc"
- echo $ac_n "checking which NetBSD thread library to use""... $ac_c" 1>&6
-! echo "configure:2563: checking which NetBSD thread library to use" >&5
-
- # Check whether --with-ptl2 or --without-ptl2 was given.
- if test "${with_ptl2+set}" = set; then
-***************
-*** 2590,2596 ****
- ;;
- *)
- echo $ac_n "checking for pthread_create in -lpthread""... $ac_c" 1>&6
-! echo "configure:2594: checking for pthread_create in -lpthread" >&5
- ac_lib_var=`echo pthread'_'pthread_create | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
---- 2598,2604 ----
- ;;
- *)
- echo $ac_n "checking for pthread_create in -lpthread""... $ac_c" 1>&6
-! echo "configure:2602: checking for pthread_create in -lpthread" >&5
- ac_lib_var=`echo pthread'_'pthread_create | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-***************
-*** 2598,2604 ****
- ac_save_LIBS="$LIBS"
- LIBS="-lpthread $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 2602 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
---- 2606,2612 ----
- ac_save_LIBS="$LIBS"
- LIBS="-lpthread $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 2610 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
-***************
-*** 2609,2615 ****
- pthread_create()
- ; return 0; }
- EOF
-! if { (eval echo configure:2613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
---- 2617,2623 ----
- pthread_create()
- ; return 0; }
- EOF
-! if { (eval echo configure:2621: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
-***************
-*** 2635,2641 ****
- else
- echo "$ac_t""no" 1>&6
- echo $ac_n "checking for __pthread_create in -lpthread""... $ac_c" 1>&6
-! echo "configure:2639: checking for __pthread_create in -lpthread" >&5
- ac_lib_var=`echo pthread'_'__pthread_create | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
---- 2643,2649 ----
- else
- echo "$ac_t""no" 1>&6
- echo $ac_n "checking for __pthread_create in -lpthread""... $ac_c" 1>&6
-! echo "configure:2647: checking for __pthread_create in -lpthread" >&5
- ac_lib_var=`echo pthread'_'__pthread_create | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-***************
-*** 2643,2649 ****
- ac_save_LIBS="$LIBS"
- LIBS="-lpthread $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 2647 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
---- 2651,2657 ----
- ac_save_LIBS="$LIBS"
- LIBS="-lpthread $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 2655 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
-***************
-*** 2654,2660 ****
- __pthread_create()
- ; return 0; }
- EOF
-! if { (eval echo configure:2658: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
---- 2662,2668 ----
- __pthread_create()
- ; return 0; }
- EOF
-! if { (eval echo configure:2666: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
-***************
-*** 2680,2686 ****
- else
- echo "$ac_t""no" 1>&6
- echo $ac_n "checking for __pthread_create_system in -lpthread""... $ac_c" 1>&6
-! echo "configure:2684: checking for __pthread_create_system in -lpthread" >&5
- ac_lib_var=`echo pthread'_'__pthread_create_system | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
---- 2688,2694 ----
- else
- echo "$ac_t""no" 1>&6
- echo $ac_n "checking for __pthread_create_system in -lpthread""... $ac_c" 1>&6
-! echo "configure:2692: checking for __pthread_create_system in -lpthread" >&5
- ac_lib_var=`echo pthread'_'__pthread_create_system | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-***************
-*** 2688,2694 ****
- ac_save_LIBS="$LIBS"
- LIBS="-lpthread $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 2692 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
---- 2696,2702 ----
- ac_save_LIBS="$LIBS"
- LIBS="-lpthread $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 2700 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
-***************
-*** 2699,2705 ****
- __pthread_create_system()
- ; return 0; }
- EOF
-! if { (eval echo configure:2703: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
---- 2707,2713 ----
- __pthread_create_system()
- ; return 0; }
- EOF
-! if { (eval echo configure:2711: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
-***************
-*** 2725,2731 ****
- else
- echo "$ac_t""no" 1>&6
- echo $ac_n "checking for pthread_create in -lc_r""... $ac_c" 1>&6
-! echo "configure:2729: checking for pthread_create in -lc_r" >&5
- ac_lib_var=`echo c_r'_'pthread_create | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
---- 2733,2739 ----
- else
- echo "$ac_t""no" 1>&6
- echo $ac_n "checking for pthread_create in -lc_r""... $ac_c" 1>&6
-! echo "configure:2737: checking for pthread_create in -lc_r" >&5
- ac_lib_var=`echo c_r'_'pthread_create | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-***************
-*** 2733,2739 ****
- ac_save_LIBS="$LIBS"
- LIBS="-lc_r $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 2737 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
---- 2741,2747 ----
- ac_save_LIBS="$LIBS"
- LIBS="-lc_r $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 2745 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
-***************
-*** 2744,2750 ****
- pthread_create()
- ; return 0; }
- EOF
-! if { (eval echo configure:2748: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
---- 2752,2758 ----
- pthread_create()
- ; return 0; }
- EOF
-! if { (eval echo configure:2756: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
-***************
-*** 2770,2776 ****
- else
- echo "$ac_t""no" 1>&6
- echo $ac_n "checking for pthread_create in -lc""... $ac_c" 1>&6
-! echo "configure:2774: checking for pthread_create in -lc" >&5
- ac_lib_var=`echo c'_'pthread_create | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
---- 2778,2784 ----
- else
- echo "$ac_t""no" 1>&6
- echo $ac_n "checking for pthread_create in -lc""... $ac_c" 1>&6
-! echo "configure:2782: checking for pthread_create in -lc" >&5
- ac_lib_var=`echo c'_'pthread_create | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-***************
-*** 2778,2784 ****
- ac_save_LIBS="$LIBS"
- LIBS="-lc $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 2782 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
---- 2786,2792 ----
- ac_save_LIBS="$LIBS"
- LIBS="-lc $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 2790 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
-***************
-*** 2789,2795 ****
- pthread_create()
- ; return 0; }
- EOF
-! if { (eval echo configure:2793: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
---- 2797,2803 ----
- pthread_create()
- ; return 0; }
- EOF
-! if { (eval echo configure:2801: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
-***************
-*** 2835,2841 ****
- # We'd like to use sigwait() too
- #
- echo $ac_n "checking for sigwait in -lc""... $ac_c" 1>&6
-! echo "configure:2839: checking for sigwait in -lc" >&5
- ac_lib_var=`echo c'_'sigwait | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
---- 2843,2849 ----
- # We'd like to use sigwait() too
- #
- echo $ac_n "checking for sigwait in -lc""... $ac_c" 1>&6
-! echo "configure:2847: checking for sigwait in -lc" >&5
- ac_lib_var=`echo c'_'sigwait | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-***************
-*** 2843,2849 ****
- ac_save_LIBS="$LIBS"
- LIBS="-lc $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 2847 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
---- 2851,2857 ----
- ac_save_LIBS="$LIBS"
- LIBS="-lc $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 2855 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
-***************
-*** 2854,2860 ****
- sigwait()
- ; return 0; }
- EOF
-! if { (eval echo configure:2858: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
---- 2862,2868 ----
- sigwait()
- ; return 0; }
- EOF
-! if { (eval echo configure:2866: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
-***************
-*** 2876,2882 ****
- else
- echo "$ac_t""no" 1>&6
- echo $ac_n "checking for sigwait in -lpthread""... $ac_c" 1>&6
-! echo "configure:2880: checking for sigwait in -lpthread" >&5
- ac_lib_var=`echo pthread'_'sigwait | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
---- 2884,2890 ----
- else
- echo "$ac_t""no" 1>&6
- echo $ac_n "checking for sigwait in -lpthread""... $ac_c" 1>&6
-! echo "configure:2888: checking for sigwait in -lpthread" >&5
- ac_lib_var=`echo pthread'_'sigwait | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-***************
-*** 2884,2890 ****
- ac_save_LIBS="$LIBS"
- LIBS="-lpthread $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 2888 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
---- 2892,2898 ----
- ac_save_LIBS="$LIBS"
- LIBS="-lpthread $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 2896 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
-***************
-*** 2895,2901 ****
- sigwait()
- ; return 0; }
- EOF
-! if { (eval echo configure:2899: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
---- 2903,2909 ----
- sigwait()
- ; return 0; }
- EOF
-! if { (eval echo configure:2907: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
-***************
-*** 2917,2923 ****
- else
- echo "$ac_t""no" 1>&6
- echo $ac_n "checking for _Psigwait in -lpthread""... $ac_c" 1>&6
-! echo "configure:2921: checking for _Psigwait in -lpthread" >&5
- ac_lib_var=`echo pthread'_'_Psigwait | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
---- 2925,2931 ----
- else
- echo "$ac_t""no" 1>&6
- echo $ac_n "checking for _Psigwait in -lpthread""... $ac_c" 1>&6
-! echo "configure:2929: checking for _Psigwait in -lpthread" >&5
- ac_lib_var=`echo pthread'_'_Psigwait | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-***************
-*** 2925,2931 ****
- ac_save_LIBS="$LIBS"
- LIBS="-lpthread $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 2929 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
---- 2933,2939 ----
- ac_save_LIBS="$LIBS"
- LIBS="-lpthread $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 2937 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
-***************
-*** 2936,2942 ****
- _Psigwait()
- ; return 0; }
- EOF
-! if { (eval echo configure:2940: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
---- 2944,2950 ----
- _Psigwait()
- ; return 0; }
- EOF
-! if { (eval echo configure:2948: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
-***************
-*** 2966,2977 ****
-
-
- echo $ac_n "checking for pthread_attr_getstacksize""... $ac_c" 1>&6
-! echo "configure:2970: checking for pthread_attr_getstacksize" >&5
- if eval "test \"`echo '$''{'ac_cv_func_pthread_attr_getstacksize'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 2975 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char pthread_attr_getstacksize(); below. */
---- 2974,2985 ----
-
-
- echo $ac_n "checking for pthread_attr_getstacksize""... $ac_c" 1>&6
-! echo "configure:2978: checking for pthread_attr_getstacksize" >&5
- if eval "test \"`echo '$''{'ac_cv_func_pthread_attr_getstacksize'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 2983 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char pthread_attr_getstacksize(); below. */
-***************
-*** 2994,3000 ****
-
- ; return 0; }
- EOF
-! if { (eval echo configure:2998: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_pthread_attr_getstacksize=yes"
- else
---- 3002,3008 ----
-
- ; return 0; }
- EOF
-! if { (eval echo configure:3006: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_pthread_attr_getstacksize=yes"
- else
-***************
-*** 3026,3032 ****
- #
- *-freebsd*)
- echo $ac_n "checking for sigwait in -lc_r""... $ac_c" 1>&6
-! echo "configure:3030: checking for sigwait in -lc_r" >&5
- ac_lib_var=`echo c_r'_'sigwait | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
---- 3034,3040 ----
- #
- *-freebsd*)
- echo $ac_n "checking for sigwait in -lc_r""... $ac_c" 1>&6
-! echo "configure:3038: checking for sigwait in -lc_r" >&5
- ac_lib_var=`echo c_r'_'sigwait | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-***************
-*** 3034,3040 ****
- ac_save_LIBS="$LIBS"
- LIBS="-lc_r $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 3038 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
---- 3042,3048 ----
- ac_save_LIBS="$LIBS"
- LIBS="-lc_r $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 3046 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
-***************
-*** 3045,3051 ****
- sigwait()
- ; return 0; }
- EOF
-! if { (eval echo configure:3049: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
---- 3053,3059 ----
- sigwait()
- ; return 0; }
- EOF
-! if { (eval echo configure:3057: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
-***************
-*** 3100,3111 ****
- EOF
-
- echo $ac_n "checking for pthread_setconcurrency""... $ac_c" 1>&6
-! echo "configure:3104: checking for pthread_setconcurrency" >&5
- if eval "test \"`echo '$''{'ac_cv_func_pthread_setconcurrency'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 3109 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char pthread_setconcurrency(); below. */
---- 3108,3119 ----
- EOF
-
- echo $ac_n "checking for pthread_setconcurrency""... $ac_c" 1>&6
-! echo "configure:3112: checking for pthread_setconcurrency" >&5
- if eval "test \"`echo '$''{'ac_cv_func_pthread_setconcurrency'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 3117 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char pthread_setconcurrency(); below. */
-***************
-*** 3128,3134 ****
-
- ; return 0; }
- EOF
-! if { (eval echo configure:3132: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_pthread_setconcurrency=yes"
- else
---- 3136,3142 ----
-
- ; return 0; }
- EOF
-! if { (eval echo configure:3140: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_pthread_setconcurrency=yes"
- else
-***************
-*** 3166,3177 ****
- # Look for sysconf to allow detection of the number of processors.
- #
- echo $ac_n "checking for sysconf""... $ac_c" 1>&6
-! echo "configure:3170: checking for sysconf" >&5
- if eval "test \"`echo '$''{'ac_cv_func_sysconf'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 3175 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char sysconf(); below. */
---- 3174,3185 ----
- # Look for sysconf to allow detection of the number of processors.
- #
- echo $ac_n "checking for sysconf""... $ac_c" 1>&6
-! echo "configure:3178: checking for sysconf" >&5
- if eval "test \"`echo '$''{'ac_cv_func_sysconf'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 3183 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char sysconf(); below. */
-***************
-*** 3194,3200 ****
-
- ; return 0; }
- EOF
-! if { (eval echo configure:3198: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_sysconf=yes"
- else
---- 3202,3208 ----
-
- ; return 0; }
- EOF
-! if { (eval echo configure:3206: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_sysconf=yes"
- else
-***************
-*** 3275,3286 ****
- # be defined.
- #
- echo $ac_n "checking for flockfile""... $ac_c" 1>&6
-! echo "configure:3279: checking for flockfile" >&5
- if eval "test \"`echo '$''{'ac_cv_func_flockfile'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 3284 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char flockfile(); below. */
---- 3283,3294 ----
- # be defined.
- #
- echo $ac_n "checking for flockfile""... $ac_c" 1>&6
-! echo "configure:3287: checking for flockfile" >&5
- if eval "test \"`echo '$''{'ac_cv_func_flockfile'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 3292 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char flockfile(); below. */
-***************
-*** 3303,3309 ****
-
- ; return 0; }
- EOF
-! if { (eval echo configure:3307: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_flockfile=yes"
- else
---- 3311,3317 ----
-
- ; return 0; }
- EOF
-! if { (eval echo configure:3315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_flockfile=yes"
- else
-***************
-*** 3326,3337 ****
- fi
-
- echo $ac_n "checking for getc_unlocked""... $ac_c" 1>&6
-! echo "configure:3330: checking for getc_unlocked" >&5
- if eval "test \"`echo '$''{'ac_cv_func_getc_unlocked'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 3335 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char getc_unlocked(); below. */
---- 3334,3345 ----
- fi
-
- echo $ac_n "checking for getc_unlocked""... $ac_c" 1>&6
-! echo "configure:3338: checking for getc_unlocked" >&5
- if eval "test \"`echo '$''{'ac_cv_func_getc_unlocked'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 3343 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char getc_unlocked(); below. */
-***************
-*** 3354,3360 ****
-
- ; return 0; }
- EOF
-! if { (eval echo configure:3358: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_getc_unlocked=yes"
- else
---- 3362,3368 ----
-
- ; return 0; }
- EOF
-! if { (eval echo configure:3366: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_getc_unlocked=yes"
- else
-***************
-*** 3381,3387 ****
- # Indicate what the final decision was regarding threads.
- #
- echo $ac_n "checking whether to build with threads""... $ac_c" 1>&6
-! echo "configure:3385: checking whether to build with threads" >&5
- if $use_threads; then
- echo "$ac_t""yes" 1>&6
- else
---- 3389,3395 ----
- # Indicate what the final decision was regarding threads.
- #
- echo $ac_n "checking whether to build with threads""... $ac_c" 1>&6
-! echo "configure:3393: checking whether to build with threads" >&5
- if $use_threads; then
- echo "$ac_t""yes" 1>&6
- else
-***************
-*** 3457,3468 ****
- # NLS
- #
- echo $ac_n "checking for catgets""... $ac_c" 1>&6
-! echo "configure:3461: checking for catgets" >&5
- if eval "test \"`echo '$''{'ac_cv_func_catgets'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 3466 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char catgets(); below. */
---- 3465,3476 ----
- # NLS
- #
- echo $ac_n "checking for catgets""... $ac_c" 1>&6
-! echo "configure:3469: checking for catgets" >&5
- if eval "test \"`echo '$''{'ac_cv_func_catgets'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 3474 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char catgets(); below. */
-***************
-*** 3485,3491 ****
-
- ; return 0; }
- EOF
-! if { (eval echo configure:3489: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_catgets=yes"
- else
---- 3493,3499 ----
-
- ; return 0; }
- EOF
-! if { (eval echo configure:3497: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_catgets=yes"
- else
-***************
-*** 3523,3529 ****
- ;;
- *)
- echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6
-! echo "configure:3527: checking for socket in -lsocket" >&5
- ac_lib_var=`echo socket'_'socket | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
---- 3531,3537 ----
- ;;
- *)
- echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6
-! echo "configure:3535: checking for socket in -lsocket" >&5
- ac_lib_var=`echo socket'_'socket | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-***************
-*** 3531,3537 ****
- ac_save_LIBS="$LIBS"
- LIBS="-lsocket $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 3535 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
---- 3539,3545 ----
- ac_save_LIBS="$LIBS"
- LIBS="-lsocket $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 3543 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
-***************
-*** 3542,3548 ****
- socket()
- ; return 0; }
- EOF
-! if { (eval echo configure:3546: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
---- 3550,3556 ----
- socket()
- ; return 0; }
- EOF
-! if { (eval echo configure:3554: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
-***************
-*** 3570,3576 ****
- fi
-
- echo $ac_n "checking for inet_ntoa in -lnsl""... $ac_c" 1>&6
-! echo "configure:3574: checking for inet_ntoa in -lnsl" >&5
- ac_lib_var=`echo nsl'_'inet_ntoa | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
---- 3578,3584 ----
- fi
-
- echo $ac_n "checking for inet_ntoa in -lnsl""... $ac_c" 1>&6
-! echo "configure:3582: checking for inet_ntoa in -lnsl" >&5
- ac_lib_var=`echo nsl'_'inet_ntoa | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-***************
-*** 3578,3584 ****
- ac_save_LIBS="$LIBS"
- LIBS="-lnsl $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 3582 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
---- 3586,3592 ----
- ac_save_LIBS="$LIBS"
- LIBS="-lnsl $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 3590 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
-***************
-*** 3589,3595 ****
- inet_ntoa()
- ; return 0; }
- EOF
-! if { (eval echo configure:3593: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
---- 3597,3603 ----
- inet_ntoa()
- ; return 0; }
- EOF
-! if { (eval echo configure:3601: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
-***************
-*** 3623,3629 ****
- # Purify support
- #
- echo $ac_n "checking whether to use purify""... $ac_c" 1>&6
-! echo "configure:3627: checking whether to use purify" >&5
- # Check whether --with-purify or --without-purify was given.
- if test "${with_purify+set}" = set; then
- withval="$with_purify"
---- 3631,3637 ----
- # Purify support
- #
- echo $ac_n "checking whether to use purify""... $ac_c" 1>&6
-! echo "configure:3635: checking whether to use purify" >&5
- # Check whether --with-purify or --without-purify was given.
- if test "${with_purify+set}" = set; then
- withval="$with_purify"
-***************
-*** 3640,3646 ****
- # Extract the first word of "purify", so it can be a program name with args.
- set dummy purify; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:3644: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_purify_path'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 3648,3654 ----
- # Extract the first word of "purify", so it can be a program name with args.
- set dummy purify; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:3652: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_purify_path'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 3717,3728 ****
- case $use_libtool in
- yes)
- echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
-! echo "configure:3721: checking for Cygwin environment" >&5
- if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 3726 "configure"
- #include "confdefs.h"
-
- int main() {
---- 3725,3736 ----
- case $use_libtool in
- yes)
- echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
-! echo "configure:3729: checking for Cygwin environment" >&5
- if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 3734 "configure"
- #include "confdefs.h"
-
- int main() {
-***************
-*** 3733,3739 ****
- return __CYGWIN__;
- ; return 0; }
- EOF
-! if { (eval echo configure:3737: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_cygwin=yes
- else
---- 3741,3747 ----
- return __CYGWIN__;
- ; return 0; }
- EOF
-! if { (eval echo configure:3745: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_cygwin=yes
- else
-***************
-*** 3750,3768 ****
- CYGWIN=
- test "$ac_cv_cygwin" = yes && CYGWIN=yes
- echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
-! echo "configure:3754: checking for mingw32 environment" >&5
- if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 3759 "configure"
- #include "confdefs.h"
-
- int main() {
- return __MINGW32__;
- ; return 0; }
- EOF
-! if { (eval echo configure:3766: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_mingw32=yes
- else
---- 3758,3776 ----
- CYGWIN=
- test "$ac_cv_cygwin" = yes && CYGWIN=yes
- echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
-! echo "configure:3762: checking for mingw32 environment" >&5
- if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 3767 "configure"
- #include "confdefs.h"
-
- int main() {
- return __MINGW32__;
- ; return 0; }
- EOF
-! if { (eval echo configure:3774: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_mingw32=yes
- else
-***************
-*** 3848,3854 ****
- fi
-
- echo $ac_n "checking build system type""... $ac_c" 1>&6
-! echo "configure:3852: checking build system type" >&5
-
- build_alias=$build
- case "$build_alias" in
---- 3856,3862 ----
- fi
-
- echo $ac_n "checking build system type""... $ac_c" 1>&6
-! echo "configure:3860: checking build system type" >&5
-
- build_alias=$build
- case "$build_alias" in
-***************
-*** 3877,3883 ****
- if test "$GCC" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6
-! echo "configure:3881: checking for ld used by GCC" >&5
- case $host in
- *-*-mingw*)
- # gcc leaves a trailing carriage return which upsets mingw
---- 3885,3891 ----
- if test "$GCC" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6
-! echo "configure:3889: checking for ld used by GCC" >&5
- case $host in
- *-*-mingw*)
- # gcc leaves a trailing carriage return which upsets mingw
-***************
-*** 3907,3916 ****
- esac
- elif test "$with_gnu_ld" = yes; then
- echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-! echo "configure:3911: checking for GNU ld" >&5
- else
- echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-! echo "configure:3914: checking for non-GNU ld" >&5
- fi
- if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
---- 3915,3924 ----
- esac
- elif test "$with_gnu_ld" = yes; then
- echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-! echo "configure:3919: checking for GNU ld" >&5
- else
- echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-! echo "configure:3922: checking for non-GNU ld" >&5
- fi
- if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-***************
-*** 3945,3951 ****
- fi
- test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; }
- echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6
-! echo "configure:3949: checking if the linker ($LD) is GNU ld" >&5
- if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 3953,3959 ----
- fi
- test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; }
- echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6
-! echo "configure:3957: checking if the linker ($LD) is GNU ld" >&5
- if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 3962,3968 ****
-
-
- echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6
-! echo "configure:3966: checking for $LD option to reload object files" >&5
- if eval "test \"`echo '$''{'lt_cv_ld_reload_flag'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 3970,3976 ----
-
-
- echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6
-! echo "configure:3974: checking for $LD option to reload object files" >&5
- if eval "test \"`echo '$''{'lt_cv_ld_reload_flag'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 3974,3980 ****
- test -n "$reload_flag" && reload_flag=" $reload_flag"
-
- echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
-! echo "configure:3978: checking for BSD-compatible nm" >&5
- if eval "test \"`echo '$''{'lt_cv_path_NM'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 3982,3988 ----
- test -n "$reload_flag" && reload_flag=" $reload_flag"
-
- echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
-! echo "configure:3986: checking for BSD-compatible nm" >&5
- if eval "test \"`echo '$''{'lt_cv_path_NM'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 4012,4018 ****
- echo "$ac_t""$NM" 1>&6
-
- echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-! echo "configure:4016: checking whether ln -s works" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 4020,4026 ----
- echo "$ac_t""$NM" 1>&6
-
- echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-! echo "configure:4024: checking whether ln -s works" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 4033,4039 ****
- fi
-
- echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6
-! echo "configure:4037: checking how to recognise dependant libraries" >&5
- if eval "test \"`echo '$''{'lt_cv_deplibs_check_method'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 4041,4047 ----
- fi
-
- echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6
-! echo "configure:4045: checking how to recognise dependant libraries" >&5
- if eval "test \"`echo '$''{'lt_cv_deplibs_check_method'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 4206,4218 ****
- deplibs_check_method=$lt_cv_deplibs_check_method
-
- echo $ac_n "checking for object suffix""... $ac_c" 1>&6
-! echo "configure:4210: checking for object suffix" >&5
- if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- rm -f conftest*
- echo 'int i = 1;' > conftest.$ac_ext
-! if { (eval echo configure:4216: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- for ac_file in conftest.*; do
- case $ac_file in
- *.c) ;;
---- 4214,4226 ----
- deplibs_check_method=$lt_cv_deplibs_check_method
-
- echo $ac_n "checking for object suffix""... $ac_c" 1>&6
-! echo "configure:4218: checking for object suffix" >&5
- if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- rm -f conftest*
- echo 'int i = 1;' > conftest.$ac_ext
-! if { (eval echo configure:4224: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- for ac_file in conftest.*; do
- case $ac_file in
- *.c) ;;
-***************
-*** 4232,4238 ****
-
-
- echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-! echo "configure:4236: checking for executable suffix" >&5
- if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 4240,4246 ----
-
-
- echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-! echo "configure:4244: checking for executable suffix" >&5
- if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 4242,4251 ****
- rm -f conftest*
- echo 'int main () { return 0; }' > conftest.$ac_ext
- ac_cv_exeext=
-! if { (eval echo configure:4246: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
- for file in conftest.*; do
- case $file in
-! *.c | *.o | *.obj) ;;
- *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
- esac
- done
---- 4250,4259 ----
- rm -f conftest*
- echo 'int main () { return 0; }' > conftest.$ac_ext
- ac_cv_exeext=
-! if { (eval echo configure:4254: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
- for file in conftest.*; do
- case $file in
-! *.c | *.C | *.o | *.obj) ;;
- *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
- esac
- done
-***************
-*** 4273,4279 ****
-
- # Check for command to grab the raw symbol name followed by C symbol from nm.
- echo $ac_n "checking command to parse $NM output""... $ac_c" 1>&6
-! echo "configure:4277: checking command to parse $NM output" >&5
- if eval "test \"`echo '$''{'lt_cv_sys_global_symbol_pipe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 4281,4287 ----
-
- # Check for command to grab the raw symbol name followed by C symbol from nm.
- echo $ac_n "checking command to parse $NM output""... $ac_c" 1>&6
-! echo "configure:4285: checking command to parse $NM output" >&5
- if eval "test \"`echo '$''{'lt_cv_sys_global_symbol_pipe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 4349,4358 ****
- int main(){nm_test_var='a';nm_test_func();return(0);}
- EOF
-
-! if { (eval echo configure:4353: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- # Now try to grab the symbols.
- nlist=conftest.nm
-! if { (eval echo configure:4356: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\") 1>&5; (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5; } && test -s "$nlist"; then
- # Try sorting and uniquifying the output.
- if sort "$nlist" | uniq > "$nlist"T; then
- mv -f "$nlist"T "$nlist"
---- 4357,4366 ----
- int main(){nm_test_var='a';nm_test_func();return(0);}
- EOF
-
-! if { (eval echo configure:4361: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- # Now try to grab the symbols.
- nlist=conftest.nm
-! if { (eval echo configure:4364: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\") 1>&5; (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5; } && test -s "$nlist"; then
- # Try sorting and uniquifying the output.
- if sort "$nlist" | uniq > "$nlist"T; then
- mv -f "$nlist"T "$nlist"
-***************
-*** 4403,4409 ****
- save_CFLAGS="$CFLAGS"
- LIBS="conftstm.$ac_objext"
- CFLAGS="$CFLAGS$no_builtin_flag"
-! if { (eval echo configure:4407: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- pipe_works=yes
- fi
- LIBS="$save_LIBS"
---- 4411,4417 ----
- save_CFLAGS="$CFLAGS"
- LIBS="conftstm.$ac_objext"
- CFLAGS="$CFLAGS$no_builtin_flag"
-! if { (eval echo configure:4415: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- pipe_works=yes
- fi
- LIBS="$save_LIBS"
-***************
-*** 4449,4465 ****
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-! echo "configure:4453: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 4458 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-! { (eval echo configure:4463: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
- rm -rf conftest*
---- 4457,4473 ----
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-! echo "configure:4461: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 4466 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-! { (eval echo configure:4471: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
- rm -rf conftest*
-***************
-*** 4494,4500 ****
- file_magic*)
- if test "$file_magic_cmd" = '$MAGIC_CMD'; then
- echo $ac_n "checking for ${ac_tool_prefix}file""... $ac_c" 1>&6
-! echo "configure:4498: checking for ${ac_tool_prefix}file" >&5
- if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 4502,4508 ----
- file_magic*)
- if test "$file_magic_cmd" = '$MAGIC_CMD'; then
- echo $ac_n "checking for ${ac_tool_prefix}file""... $ac_c" 1>&6
-! echo "configure:4506: checking for ${ac_tool_prefix}file" >&5
- if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 4556,4562 ****
- if test -z "$lt_cv_path_MAGIC_CMD"; then
- if test -n "$ac_tool_prefix"; then
- echo $ac_n "checking for file""... $ac_c" 1>&6
-! echo "configure:4560: checking for file" >&5
- if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 4564,4570 ----
- if test -z "$lt_cv_path_MAGIC_CMD"; then
- if test -n "$ac_tool_prefix"; then
- echo $ac_n "checking for file""... $ac_c" 1>&6
-! echo "configure:4568: checking for file" >&5
- if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 4627,4633 ****
- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
- set dummy ${ac_tool_prefix}ranlib; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:4631: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 4635,4641 ----
- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
- set dummy ${ac_tool_prefix}ranlib; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:4639: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 4659,4665 ****
- # Extract the first word of "ranlib", so it can be a program name with args.
- set dummy ranlib; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:4663: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 4667,4673 ----
- # Extract the first word of "ranlib", so it can be a program name with args.
- set dummy ranlib; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:4671: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 4694,4700 ****
- # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
- set dummy ${ac_tool_prefix}strip; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:4698: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 4702,4708 ----
- # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
- set dummy ${ac_tool_prefix}strip; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:4706: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 4726,4732 ****
- # Extract the first word of "strip", so it can be a program name with args.
- set dummy strip; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:4730: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 4734,4740 ----
- # Extract the first word of "strip", so it can be a program name with args.
- set dummy strip; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:4738: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 4775,4782 ****
- case $host in
- *-*-irix6*)
- # Find out which ABI we are using.
-! echo '#line 4779 "configure"' > conftest.$ac_ext
-! if { (eval echo configure:4780: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- LD="${LD-ld} -32"
---- 4783,4790 ----
- case $host in
- *-*-irix6*)
- # Find out which ABI we are using.
-! echo '#line 4787 "configure"' > conftest.$ac_ext
-! if { (eval echo configure:4788: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- LD="${LD-ld} -32"
-***************
-*** 4797,4803 ****
- SAVE_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -belf"
- echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
-! echo "configure:4801: checking whether the C compiler needs -belf" >&5
- if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 4805,4811 ----
- SAVE_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -belf"
- echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
-! echo "configure:4809: checking whether the C compiler needs -belf" >&5
- if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 4810,4823 ****
- cross_compiling=$ac_cv_prog_cc_cross
-
- cat > conftest.$ac_ext <<EOF
-! #line 4814 "configure"
- #include "confdefs.h"
-
- int main() {
-
- ; return 0; }
- EOF
-! if { (eval echo configure:4821: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- lt_cv_cc_needs_belf=yes
- else
---- 4818,4831 ----
- cross_compiling=$ac_cv_prog_cc_cross
-
- cat > conftest.$ac_ext <<EOF
-! #line 4822 "configure"
- #include "confdefs.h"
-
- int main() {
-
- ; return 0; }
- EOF
-! if { (eval echo configure:4829: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- lt_cv_cc_needs_belf=yes
- else
-***************
-*** 4932,4938 ****
- ## FIXME: this should be a separate macro
- ##
- echo $ac_n "checking for objdir""... $ac_c" 1>&6
-! echo "configure:4936: checking for objdir" >&5
- rm -f .libs 2>/dev/null
- mkdir .libs 2>/dev/null
- if test -d .libs; then
---- 4940,4946 ----
- ## FIXME: this should be a separate macro
- ##
- echo $ac_n "checking for objdir""... $ac_c" 1>&6
-! echo "configure:4944: checking for objdir" >&5
- rm -f .libs 2>/dev/null
- mkdir .libs 2>/dev/null
- if test -d .libs; then
-***************
-*** 4963,4969 ****
- # in isolation, and that seeing it set (from the cache) indicates that
- # the associated values are set (in the cache) correctly too.
- echo $ac_n "checking for $compiler option to produce PIC""... $ac_c" 1>&6
-! echo "configure:4967: checking for $compiler option to produce PIC" >&5
- if eval "test \"`echo '$''{'lt_cv_prog_cc_pic'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 4971,4977 ----
- # in isolation, and that seeing it set (from the cache) indicates that
- # the associated values are set (in the cache) correctly too.
- echo $ac_n "checking for $compiler option to produce PIC""... $ac_c" 1>&6
-! echo "configure:4975: checking for $compiler option to produce PIC" >&5
- if eval "test \"`echo '$''{'lt_cv_prog_cc_pic'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 5115,5135 ****
-
- # Check to make sure the pic_flag actually works.
- echo $ac_n "checking if $compiler PIC flag $lt_cv_prog_cc_pic works""... $ac_c" 1>&6
-! echo "configure:5119: checking if $compiler PIC flag $lt_cv_prog_cc_pic works" >&5
- if eval "test \"`echo '$''{'lt_cv_prog_cc_pic_works'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC"
- cat > conftest.$ac_ext <<EOF
-! #line 5126 "configure"
- #include "confdefs.h"
-
- int main() {
-
- ; return 0; }
- EOF
-! if { (eval echo configure:5133: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- case $host_os in
- hpux9* | hpux10* | hpux11*)
---- 5123,5143 ----
-
- # Check to make sure the pic_flag actually works.
- echo $ac_n "checking if $compiler PIC flag $lt_cv_prog_cc_pic works""... $ac_c" 1>&6
-! echo "configure:5127: checking if $compiler PIC flag $lt_cv_prog_cc_pic works" >&5
- if eval "test \"`echo '$''{'lt_cv_prog_cc_pic_works'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC"
- cat > conftest.$ac_ext <<EOF
-! #line 5134 "configure"
- #include "confdefs.h"
-
- int main() {
-
- ; return 0; }
- EOF
-! if { (eval echo configure:5141: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- case $host_os in
- hpux9* | hpux10* | hpux11*)
-***************
-*** 5185,5191 ****
- ## FIXME: this should be a separate macro
- ##
- echo $ac_n "checking if $compiler static flag $lt_cv_prog_cc_static works""... $ac_c" 1>&6
-! echo "configure:5189: checking if $compiler static flag $lt_cv_prog_cc_static works" >&5
- if eval "test \"`echo '$''{'lt_cv_prog_cc_static_works'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 5193,5199 ----
- ## FIXME: this should be a separate macro
- ##
- echo $ac_n "checking if $compiler static flag $lt_cv_prog_cc_static works""... $ac_c" 1>&6
-! echo "configure:5197: checking if $compiler static flag $lt_cv_prog_cc_static works" >&5
- if eval "test \"`echo '$''{'lt_cv_prog_cc_static_works'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 5193,5206 ****
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static"
- cat > conftest.$ac_ext <<EOF
-! #line 5197 "configure"
- #include "confdefs.h"
-
- int main() {
-
- ; return 0; }
- EOF
-! if { (eval echo configure:5204: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- lt_cv_prog_cc_static_works=yes
- else
---- 5201,5214 ----
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static"
- cat > conftest.$ac_ext <<EOF
-! #line 5205 "configure"
- #include "confdefs.h"
-
- int main() {
-
- ; return 0; }
- EOF
-! if { (eval echo configure:5212: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- lt_cv_prog_cc_static_works=yes
- else
-***************
-*** 5231,5237 ****
- ##
- # Check to see if options -o and -c are simultaneously supported by compiler
- echo $ac_n "checking if $compiler supports -c -o file.$ac_objext""... $ac_c" 1>&6
-! echo "configure:5235: checking if $compiler supports -c -o file.$ac_objext" >&5
- if eval "test \"`echo '$''{'lt_cv_compiler_c_o'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 5239,5245 ----
- ##
- # Check to see if options -o and -c are simultaneously supported by compiler
- echo $ac_n "checking if $compiler supports -c -o file.$ac_objext""... $ac_c" 1>&6
-! echo "configure:5243: checking if $compiler supports -c -o file.$ac_objext" >&5
- if eval "test \"`echo '$''{'lt_cv_compiler_c_o'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 5250,5256 ****
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -o out/conftest2.$ac_objext"
- compiler_c_o=no
-! if { (eval echo configure:5254: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s out/conftest.err; then
---- 5258,5264 ----
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -o out/conftest2.$ac_objext"
- compiler_c_o=no
-! if { (eval echo configure:5262: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s out/conftest.err; then
-***************
-*** 5279,5285 ****
- if test x"$compiler_c_o" = x"yes"; then
- # Check to see if we can write to a .lo
- echo $ac_n "checking if $compiler supports -c -o file.lo""... $ac_c" 1>&6
-! echo "configure:5283: checking if $compiler supports -c -o file.lo" >&5
- if eval "test \"`echo '$''{'lt_cv_compiler_o_lo'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 5287,5293 ----
- if test x"$compiler_c_o" = x"yes"; then
- # Check to see if we can write to a .lo
- echo $ac_n "checking if $compiler supports -c -o file.lo""... $ac_c" 1>&6
-! echo "configure:5291: checking if $compiler supports -c -o file.lo" >&5
- if eval "test \"`echo '$''{'lt_cv_compiler_o_lo'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 5288,5301 ****
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -c -o conftest.lo"
- cat > conftest.$ac_ext <<EOF
-! #line 5292 "configure"
- #include "confdefs.h"
-
- int main() {
- int some_variable = 0;
- ; return 0; }
- EOF
-! if { (eval echo configure:5299: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
---- 5296,5309 ----
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -c -o conftest.lo"
- cat > conftest.$ac_ext <<EOF
-! #line 5300 "configure"
- #include "confdefs.h"
-
- int main() {
- int some_variable = 0;
- ; return 0; }
- EOF
-! if { (eval echo configure:5307: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
-***************
-*** 5329,5335 ****
- if test "$compiler_c_o" = no && test "$need_locks" != no; then
- # do not overwrite the value of need_locks provided by the user
- echo $ac_n "checking if we can lock with hard links""... $ac_c" 1>&6
-! echo "configure:5333: checking if we can lock with hard links" >&5
- hard_links=yes
- $rm conftest*
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
---- 5337,5343 ----
- if test "$compiler_c_o" = no && test "$need_locks" != no; then
- # do not overwrite the value of need_locks provided by the user
- echo $ac_n "checking if we can lock with hard links""... $ac_c" 1>&6
-! echo "configure:5341: checking if we can lock with hard links" >&5
- hard_links=yes
- $rm conftest*
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
-***************
-*** 5352,5371 ****
- if test "$GCC" = yes; then
- # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
- echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions""... $ac_c" 1>&6
-! echo "configure:5356: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
- echo "int some_variable = 0;" > conftest.$ac_ext
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext"
- compiler_rtti_exceptions=no
- cat > conftest.$ac_ext <<EOF
-! #line 5362 "configure"
- #include "confdefs.h"
-
- int main() {
- int some_variable = 0;
- ; return 0; }
- EOF
-! if { (eval echo configure:5369: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
---- 5360,5379 ----
- if test "$GCC" = yes; then
- # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
- echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions""... $ac_c" 1>&6
-! echo "configure:5364: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
- echo "int some_variable = 0;" > conftest.$ac_ext
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext"
- compiler_rtti_exceptions=no
- cat > conftest.$ac_ext <<EOF
-! #line 5370 "configure"
- #include "confdefs.h"
-
- int main() {
- int some_variable = 0;
- ; return 0; }
- EOF
-! if { (eval echo configure:5377: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
-***************
-*** 5396,5402 ****
- ##
- # See if the linker supports building shared libraries.
- echo $ac_n "checking whether the linker ($LD) supports shared libraries""... $ac_c" 1>&6
-! echo "configure:5400: checking whether the linker ($LD) supports shared libraries" >&5
-
- allow_undefined_flag=
- no_undefined_flag=
---- 5404,5410 ----
- ##
- # See if the linker supports building shared libraries.
- echo $ac_n "checking whether the linker ($LD) supports shared libraries""... $ac_c" 1>&6
-! echo "configure:5408: checking whether the linker ($LD) supports shared libraries" >&5
-
- allow_undefined_flag=
- no_undefined_flag=
-***************
-*** 6016,6022 ****
- ##
- # Check hardcoding attributes.
- echo $ac_n "checking how to hardcode library paths into programs""... $ac_c" 1>&6
-! echo "configure:6020: checking how to hardcode library paths into programs" >&5
- hardcode_action=
- if test -n "$hardcode_libdir_flag_spec" || \
- test -n "$runpath_var"; then
---- 6024,6030 ----
- ##
- # Check hardcoding attributes.
- echo $ac_n "checking how to hardcode library paths into programs""... $ac_c" 1>&6
-! echo "configure:6028: checking how to hardcode library paths into programs" >&5
- hardcode_action=
- if test -n "$hardcode_libdir_flag_spec" || \
- test -n "$runpath_var"; then
-***************
-*** 6048,6054 ****
- striplib=
- old_striplib=
- echo $ac_n "checking whether stripping libraries is possible""... $ac_c" 1>&6
-! echo "configure:6052: checking whether stripping libraries is possible" >&5
- if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
- test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
- test -z "$striplib" && striplib="$STRIP --strip-unneeded"
---- 6056,6062 ----
- striplib=
- old_striplib=
- echo $ac_n "checking whether stripping libraries is possible""... $ac_c" 1>&6
-! echo "configure:6060: checking whether stripping libraries is possible" >&5
- if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
- test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
- test -z "$striplib" && striplib="$STRIP --strip-unneeded"
-***************
-*** 6066,6072 ****
- ##
- # PORTME Fill in your ld.so characteristics
- echo $ac_n "checking dynamic linker characteristics""... $ac_c" 1>&6
-! echo "configure:6070: checking dynamic linker characteristics" >&5
- library_names_spec=
- libname_spec='lib$name'
- soname_spec=
---- 6074,6080 ----
- ##
- # PORTME Fill in your ld.so characteristics
- echo $ac_n "checking dynamic linker characteristics""... $ac_c" 1>&6
-! echo "configure:6078: checking dynamic linker characteristics" >&5
- library_names_spec=
- libname_spec='lib$name'
- soname_spec=
-***************
-*** 6456,6462 ****
- ##
- # Report the final consequences.
- echo $ac_n "checking if libtool supports shared libraries""... $ac_c" 1>&6
-! echo "configure:6460: checking if libtool supports shared libraries" >&5
- echo "$ac_t""$can_build_shared" 1>&6
- ##
- ## END FIXME
---- 6464,6470 ----
- ##
- # Report the final consequences.
- echo $ac_n "checking if libtool supports shared libraries""... $ac_c" 1>&6
-! echo "configure:6468: checking if libtool supports shared libraries" >&5
- echo "$ac_t""$can_build_shared" 1>&6
- ##
- ## END FIXME
-***************
-*** 6497,6503 ****
-
- *)
- echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-! echo "configure:6501: checking for dlopen in -ldl" >&5
- ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
---- 6505,6511 ----
-
- *)
- echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-! echo "configure:6509: checking for dlopen in -ldl" >&5
- ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-***************
-*** 6505,6511 ****
- ac_save_LIBS="$LIBS"
- LIBS="-ldl $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 6509 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
---- 6513,6519 ----
- ac_save_LIBS="$LIBS"
- LIBS="-ldl $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 6517 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
-***************
-*** 6516,6522 ****
- dlopen()
- ; return 0; }
- EOF
-! if { (eval echo configure:6520: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
---- 6524,6530 ----
- dlopen()
- ; return 0; }
- EOF
-! if { (eval echo configure:6528: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
-***************
-*** 6535,6546 ****
- else
- echo "$ac_t""no" 1>&6
- echo $ac_n "checking for dlopen""... $ac_c" 1>&6
-! echo "configure:6539: checking for dlopen" >&5
- if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 6544 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char dlopen(); below. */
---- 6543,6554 ----
- else
- echo "$ac_t""no" 1>&6
- echo $ac_n "checking for dlopen""... $ac_c" 1>&6
-! echo "configure:6547: checking for dlopen" >&5
- if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 6552 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char dlopen(); below. */
-***************
-*** 6563,6569 ****
-
- ; return 0; }
- EOF
-! if { (eval echo configure:6567: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_dlopen=yes"
- else
---- 6571,6577 ----
-
- ; return 0; }
- EOF
-! if { (eval echo configure:6575: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_dlopen=yes"
- else
-***************
-*** 6581,6592 ****
- else
- echo "$ac_t""no" 1>&6
- echo $ac_n "checking for shl_load""... $ac_c" 1>&6
-! echo "configure:6585: checking for shl_load" >&5
- if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 6590 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char shl_load(); below. */
---- 6589,6600 ----
- else
- echo "$ac_t""no" 1>&6
- echo $ac_n "checking for shl_load""... $ac_c" 1>&6
-! echo "configure:6593: checking for shl_load" >&5
- if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 6598 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char shl_load(); below. */
-***************
-*** 6609,6615 ****
-
- ; return 0; }
- EOF
-! if { (eval echo configure:6613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_shl_load=yes"
- else
---- 6617,6623 ----
-
- ; return 0; }
- EOF
-! if { (eval echo configure:6621: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_shl_load=yes"
- else
-***************
-*** 6627,6633 ****
- else
- echo "$ac_t""no" 1>&6
- echo $ac_n "checking for dlopen in -lsvld""... $ac_c" 1>&6
-! echo "configure:6631: checking for dlopen in -lsvld" >&5
- ac_lib_var=`echo svld'_'dlopen | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
---- 6635,6641 ----
- else
- echo "$ac_t""no" 1>&6
- echo $ac_n "checking for dlopen in -lsvld""... $ac_c" 1>&6
-! echo "configure:6639: checking for dlopen in -lsvld" >&5
- ac_lib_var=`echo svld'_'dlopen | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-***************
-*** 6635,6641 ****
- ac_save_LIBS="$LIBS"
- LIBS="-lsvld $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 6639 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
---- 6643,6649 ----
- ac_save_LIBS="$LIBS"
- LIBS="-lsvld $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 6647 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
-***************
-*** 6646,6652 ****
- dlopen()
- ; return 0; }
- EOF
-! if { (eval echo configure:6650: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
---- 6654,6660 ----
- dlopen()
- ; return 0; }
- EOF
-! if { (eval echo configure:6658: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
-***************
-*** 6665,6671 ****
- else
- echo "$ac_t""no" 1>&6
- echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
-! echo "configure:6669: checking for shl_load in -ldld" >&5
- ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
---- 6673,6679 ----
- else
- echo "$ac_t""no" 1>&6
- echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
-! echo "configure:6677: checking for shl_load in -ldld" >&5
- ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-***************
-*** 6673,6679 ****
- ac_save_LIBS="$LIBS"
- LIBS="-ldld $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 6677 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
---- 6681,6687 ----
- ac_save_LIBS="$LIBS"
- LIBS="-ldld $LIBS"
- cat > conftest.$ac_ext <<EOF
-! #line 6685 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
-***************
-*** 6684,6690 ****
- shl_load()
- ; return 0; }
- EOF
-! if { (eval echo configure:6688: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
---- 6692,6698 ----
- shl_load()
- ; return 0; }
- EOF
-! if { (eval echo configure:6696: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
-***************
-*** 6737,6743 ****
- LIBS="$lt_cv_dlopen_libs $LIBS"
-
- echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6
-! echo "configure:6741: checking whether a program can dlopen itself" >&5
- if eval "test \"`echo '$''{'lt_cv_dlopen_self'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 6745,6751 ----
- LIBS="$lt_cv_dlopen_libs $LIBS"
-
- echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6
-! echo "configure:6749: checking whether a program can dlopen itself" >&5
- if eval "test \"`echo '$''{'lt_cv_dlopen_self'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 6747,6753 ****
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<EOF
-! #line 6751 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
---- 6755,6761 ----
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<EOF
-! #line 6759 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-***************
-*** 6808,6814 ****
- exit (status);
- }
- EOF
-! if { (eval echo configure:6812: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then
- (./conftest; exit; ) 2>/dev/null
- lt_status=$?
- case x$lt_status in
---- 6816,6822 ----
- exit (status);
- }
- EOF
-! if { (eval echo configure:6820: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then
- (./conftest; exit; ) 2>/dev/null
- lt_status=$?
- case x$lt_status in
-***************
-*** 6831,6837 ****
- if test "x$lt_cv_dlopen_self" = xyes; then
- LDFLAGS="$LDFLAGS $link_static_flag"
- echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6
-! echo "configure:6835: checking whether a statically linked program can dlopen itself" >&5
- if eval "test \"`echo '$''{'lt_cv_dlopen_self_static'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 6839,6845 ----
- if test "x$lt_cv_dlopen_self" = xyes; then
- LDFLAGS="$LDFLAGS $link_static_flag"
- echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6
-! echo "configure:6843: checking whether a statically linked program can dlopen itself" >&5
- if eval "test \"`echo '$''{'lt_cv_dlopen_self_static'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 6841,6847 ****
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<EOF
-! #line 6845 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
---- 6849,6855 ----
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<EOF
-! #line 6853 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-***************
-*** 6902,6908 ****
- exit (status);
- }
- EOF
-! if { (eval echo configure:6906: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then
- (./conftest; exit; ) 2>/dev/null
- lt_status=$?
- case x$lt_status in
---- 6910,6916 ----
- exit (status);
- }
- EOF
-! if { (eval echo configure:6914: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then
- (./conftest; exit; ) 2>/dev/null
- lt_status=$?
- case x$lt_status in
-***************
-*** 6953,6966 ****
- # systems, -lgcc has to come before -lc. If gcc already passes -lc
- # to ld, don't add -lc before -lgcc.
- echo $ac_n "checking whether -lc should be explicitly linked in""... $ac_c" 1>&6
-! echo "configure:6957: checking whether -lc should be explicitly linked in" >&5
- if eval "test \"`echo '$''{'lt_cv_archive_cmds_need_lc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- $rm conftest*
- echo 'static int dummy;' > conftest.$ac_ext
-
-! if { (eval echo configure:6964: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- soname=conftest
- lib=conftest
- libobjs=conftest.$ac_objext
---- 6961,6974 ----
- # systems, -lgcc has to come before -lc. If gcc already passes -lc
- # to ld, don't add -lc before -lgcc.
- echo $ac_n "checking whether -lc should be explicitly linked in""... $ac_c" 1>&6
-! echo "configure:6965: checking whether -lc should be explicitly linked in" >&5
- if eval "test \"`echo '$''{'lt_cv_archive_cmds_need_lc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- $rm conftest*
- echo 'static int dummy;' > conftest.$ac_ext
-
-! if { (eval echo configure:6972: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- soname=conftest
- lib=conftest
- libobjs=conftest.$ac_objext
-***************
-*** 6973,6979 ****
- libname=conftest
- save_allow_undefined_flag=$allow_undefined_flag
- allow_undefined_flag=
-! if { (eval echo configure:6977: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\") 1>&5; (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5; }
- then
- lt_cv_archive_cmds_need_lc=no
- else
---- 6981,6987 ----
- libname=conftest
- save_allow_undefined_flag=$allow_undefined_flag
- allow_undefined_flag=
-! if { (eval echo configure:6985: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\") 1>&5; (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5; }
- then
- lt_cv_archive_cmds_need_lc=no
- else
-***************
-*** 7630,7638 ****
- # the right suffix on the files.
- #
- echo $ac_n "checking for IPv6 structures""... $ac_c" 1>&6
-! echo "configure:7634: checking for IPv6 structures" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 7636 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
---- 7638,7646 ----
- # the right suffix on the files.
- #
- echo $ac_n "checking for IPv6 structures""... $ac_c" 1>&6
-! echo "configure:7642: checking for IPv6 structures" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 7644 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
-***************
-*** 7642,7648 ****
- struct sockaddr_in6 sin6; return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:7646: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- found_ipv6=yes
---- 7650,7656 ----
- struct sockaddr_in6 sin6; return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:7654: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- found_ipv6=yes
-***************
-*** 7660,7666 ****
- # This is done before other IPv6 linking tests to LIBS is properly set.
- #
- echo $ac_n "checking for Kame IPv6 support""... $ac_c" 1>&6
-! echo "configure:7664: checking for Kame IPv6 support" >&5
- # Check whether --with-kame or --without-kame was given.
- if test "${with_kame+set}" = set; then
- withval="$with_kame"
---- 7668,7674 ----
- # This is done before other IPv6 linking tests to LIBS is properly set.
- #
- echo $ac_n "checking for Kame IPv6 support""... $ac_c" 1>&6
-! echo "configure:7672: checking for Kame IPv6 support" >&5
- # Check whether --with-kame or --without-kame was given.
- if test "${with_kame+set}" = set; then
- withval="$with_kame"
-***************
-*** 7751,7759 ****
- LWRES_PLATFORM_HAVEIPV6="#define LWRES_PLATFORM_HAVEIPV6 1"
-
- echo $ac_n "checking for in6_addr""... $ac_c" 1>&6
-! echo "configure:7755: checking for in6_addr" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 7757 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
---- 7759,7767 ----
- LWRES_PLATFORM_HAVEIPV6="#define LWRES_PLATFORM_HAVEIPV6 1"
-
- echo $ac_n "checking for in6_addr""... $ac_c" 1>&6
-! echo "configure:7763: checking for in6_addr" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 7765 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
-***************
-*** 7766,7772 ****
- struct in6_addr in6; return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:7770: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_PLATFORM_HAVEINADDR6="#undef ISC_PLATFORM_HAVEINADDR6"
---- 7774,7780 ----
- struct in6_addr in6; return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:7778: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_PLATFORM_HAVEINADDR6="#undef ISC_PLATFORM_HAVEINADDR6"
-***************
-*** 7784,7792 ****
- rm -f conftest*
-
- echo $ac_n "checking for in6addr_any""... $ac_c" 1>&6
-! echo "configure:7788: checking for in6addr_any" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 7790 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
---- 7792,7800 ----
- rm -f conftest*
-
- echo $ac_n "checking for in6addr_any""... $ac_c" 1>&6
-! echo "configure:7796: checking for in6addr_any" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 7798 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
-***************
-*** 7800,7806 ****
- struct in6_addr in6; in6 = in6addr_any; return (in6.s6_addr[0]);
- ; return 0; }
- EOF
-! if { (eval echo configure:7804: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_PLATFORM_NEEDIN6ADDRANY="#undef ISC_PLATFORM_NEEDIN6ADDRANY"
---- 7808,7814 ----
- struct in6_addr in6; in6 = in6addr_any; return (in6.s6_addr[0]);
- ; return 0; }
- EOF
-! if { (eval echo configure:7812: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_PLATFORM_NEEDIN6ADDRANY="#undef ISC_PLATFORM_NEEDIN6ADDRANY"
-***************
-*** 7816,7824 ****
- rm -f conftest*
-
- echo $ac_n "checking for in6addr_loopback""... $ac_c" 1>&6
-! echo "configure:7820: checking for in6addr_loopback" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 7822 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
---- 7824,7832 ----
- rm -f conftest*
-
- echo $ac_n "checking for in6addr_loopback""... $ac_c" 1>&6
-! echo "configure:7828: checking for in6addr_loopback" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 7830 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
-***************
-*** 7832,7838 ****
- struct in6_addr in6; in6 = in6addr_loopback; return (in6.s6_addr[0]);
- ; return 0; }
- EOF
-! if { (eval echo configure:7836: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_PLATFORM_NEEDIN6ADDRLOOPBACK="#undef ISC_PLATFORM_NEEDIN6ADDRLOOPBACK"
---- 7840,7846 ----
- struct in6_addr in6; in6 = in6addr_loopback; return (in6.s6_addr[0]);
- ; return 0; }
- EOF
-! if { (eval echo configure:7844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_PLATFORM_NEEDIN6ADDRLOOPBACK="#undef ISC_PLATFORM_NEEDIN6ADDRLOOPBACK"
-***************
-*** 7848,7856 ****
- rm -f conftest*
-
- echo $ac_n "checking for sin6_scope_id in struct sockaddr_in6""... $ac_c" 1>&6
-! echo "configure:7852: checking for sin6_scope_id in struct sockaddr_in6" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 7854 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
---- 7856,7864 ----
- rm -f conftest*
-
- echo $ac_n "checking for sin6_scope_id in struct sockaddr_in6""... $ac_c" 1>&6
-! echo "configure:7860: checking for sin6_scope_id in struct sockaddr_in6" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 7862 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
-***************
-*** 7863,7869 ****
- struct sockaddr_in6 xyzzy; xyzzy.sin6_scope_id = 0; return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:7867: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- result="#define LWRES_HAVE_SIN6_SCOPE_ID 1"
---- 7871,7877 ----
- struct sockaddr_in6 xyzzy; xyzzy.sin6_scope_id = 0; return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:7875: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- result="#define LWRES_HAVE_SIN6_SCOPE_ID 1"
-***************
-*** 7878,7886 ****
- LWRES_HAVE_SIN6_SCOPE_ID="$result"
-
- echo $ac_n "checking for in6_pktinfo""... $ac_c" 1>&6
-! echo "configure:7882: checking for in6_pktinfo" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 7884 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
---- 7886,7894 ----
- LWRES_HAVE_SIN6_SCOPE_ID="$result"
-
- echo $ac_n "checking for in6_pktinfo""... $ac_c" 1>&6
-! echo "configure:7890: checking for in6_pktinfo" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 7892 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
-***************
-*** 7893,7899 ****
- struct in6_pktinfo xyzzy; return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:7897: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_PLATFORM_HAVEIN6PKTINFO="#define ISC_PLATFORM_HAVEIN6PKTINFO 1"
---- 7901,7907 ----
- struct in6_pktinfo xyzzy; return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:7905: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_PLATFORM_HAVEIN6PKTINFO="#define ISC_PLATFORM_HAVEIN6PKTINFO 1"
-***************
-*** 7948,7956 ****
- #
-
- echo $ac_n "checking for inet_ntop""... $ac_c" 1>&6
-! echo "configure:7952: checking for inet_ntop" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 7954 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
---- 7956,7964 ----
- #
-
- echo $ac_n "checking for inet_ntop""... $ac_c" 1>&6
-! echo "configure:7960: checking for inet_ntop" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 7962 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
-***************
-*** 7960,7966 ****
- inet_ntop(0, 0, 0, 0); return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:7964: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_PLATFORM_NEEDNTOP="#undef ISC_PLATFORM_NEEDNTOP"
---- 7968,7974 ----
- inet_ntop(0, 0, 0, 0); return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:7972: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_PLATFORM_NEEDNTOP="#undef ISC_PLATFORM_NEEDNTOP"
-***************
-*** 7981,7993 ****
- # zeros should also be rejected.
-
- echo $ac_n "checking for inet_pton""... $ac_c" 1>&6
-! echo "configure:7985: checking for inet_pton" >&5
- if test "$cross_compiling" = yes; then
- echo "$ac_t""assuming target platform has working inet_pton" 1>&6
- ISC_PLATFORM_NEEDPTON="#undef ISC_PLATFORM_NEEDPTON"
- else
- cat > conftest.$ac_ext <<EOF
-! #line 7991 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
---- 7989,8001 ----
- # zeros should also be rejected.
-
- echo $ac_n "checking for inet_pton""... $ac_c" 1>&6
-! echo "configure:7993: checking for inet_pton" >&5
- if test "$cross_compiling" = yes; then
- echo "$ac_t""assuming target platform has working inet_pton" 1>&6
- ISC_PLATFORM_NEEDPTON="#undef ISC_PLATFORM_NEEDPTON"
- else
- cat > conftest.$ac_ext <<EOF
-! #line 7999 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
-***************
-*** 7997,8003 ****
- main() { char a[4]; return (inet_pton(AF_INET, "1.2.3", a) == 1 ? 1 :
- inet_pton(AF_INET, "1.2.3.04", a) == 1 ? 1 : 0); }
- EOF
-! if { (eval echo configure:8001: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
- echo "$ac_t""yes" 1>&6
- ISC_PLATFORM_NEEDPTON="#undef ISC_PLATFORM_NEEDPTON"
---- 8005,8011 ----
- main() { char a[4]; return (inet_pton(AF_INET, "1.2.3", a) == 1 ? 1 :
- inet_pton(AF_INET, "1.2.3.04", a) == 1 ? 1 : 0); }
- EOF
-! if { (eval echo configure:8009: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
- echo "$ac_t""yes" 1>&6
- ISC_PLATFORM_NEEDPTON="#undef ISC_PLATFORM_NEEDPTON"
-***************
-*** 8015,8023 ****
-
-
- echo $ac_n "checking for inet_aton""... $ac_c" 1>&6
-! echo "configure:8019: checking for inet_aton" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8021 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
---- 8023,8031 ----
-
-
- echo $ac_n "checking for inet_aton""... $ac_c" 1>&6
-! echo "configure:8027: checking for inet_aton" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8029 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
-***************
-*** 8027,8033 ****
- struct in_addr in; inet_aton(0, &in); return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8031: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_PLATFORM_NEEDATON="#undef ISC_PLATFORM_NEEDATON"
---- 8035,8041 ----
- struct in_addr in; inet_aton(0, &in); return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8039: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_PLATFORM_NEEDATON="#undef ISC_PLATFORM_NEEDATON"
-***************
-*** 8060,8068 ****
- esac
-
- echo $ac_n "checking for sa_len in struct sockaddr""... $ac_c" 1>&6
-! echo "configure:8064: checking for sa_len in struct sockaddr" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8066 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
---- 8068,8076 ----
- esac
-
- echo $ac_n "checking for sa_len in struct sockaddr""... $ac_c" 1>&6
-! echo "configure:8072: checking for sa_len in struct sockaddr" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8074 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
-***************
-*** 8071,8077 ****
- struct sockaddr sa; sa.sa_len = 0; return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8075: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_PLATFORM_HAVESALEN="#define ISC_PLATFORM_HAVESALEN 1"
---- 8079,8085 ----
- struct sockaddr sa; sa.sa_len = 0; return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8083: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_PLATFORM_HAVESALEN="#define ISC_PLATFORM_HAVESALEN 1"
-***************
-*** 8092,8100 ****
- # Look for a 4.4BSD or 4.3BSD struct msghdr
- #
- echo $ac_n "checking for struct msghdr flavor""... $ac_c" 1>&6
-! echo "configure:8096: checking for struct msghdr flavor" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8098 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
---- 8100,8108 ----
- # Look for a 4.4BSD or 4.3BSD struct msghdr
- #
- echo $ac_n "checking for struct msghdr flavor""... $ac_c" 1>&6
-! echo "configure:8104: checking for struct msghdr flavor" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8106 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
-***************
-*** 8103,8109 ****
- struct msghdr msg; msg.msg_flags = 0; return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8107: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""4.4BSD" 1>&6
- ISC_PLATFORM_MSGHDRFLAVOR="#define ISC_NET_BSD44MSGHDR 1"
---- 8111,8117 ----
- struct msghdr msg; msg.msg_flags = 0; return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8115: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""4.4BSD" 1>&6
- ISC_PLATFORM_MSGHDRFLAVOR="#define ISC_NET_BSD44MSGHDR 1"
-***************
-*** 8121,8129 ****
- # Look for in_port_t.
- #
- echo $ac_n "checking for type in_port_t""... $ac_c" 1>&6
-! echo "configure:8125: checking for type in_port_t" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8127 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
---- 8129,8137 ----
- # Look for in_port_t.
- #
- echo $ac_n "checking for type in_port_t""... $ac_c" 1>&6
-! echo "configure:8133: checking for type in_port_t" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8135 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
-***************
-*** 8132,8138 ****
- in_port_t port = 25; return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8136: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_PLATFORM_NEEDPORTT="#undef ISC_PLATFORM_NEEDPORTT"
---- 8140,8146 ----
- in_port_t port = 25; return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8144: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_PLATFORM_NEEDPORTT="#undef ISC_PLATFORM_NEEDPORTT"
-***************
-*** 8150,8158 ****
- # Check for addrinfo
- #
- echo $ac_n "checking for struct addrinfo""... $ac_c" 1>&6
-! echo "configure:8154: checking for struct addrinfo" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8156 "configure"
- #include "confdefs.h"
-
- #include <netdb.h>
---- 8158,8166 ----
- # Check for addrinfo
- #
- echo $ac_n "checking for struct addrinfo""... $ac_c" 1>&6
-! echo "configure:8162: checking for struct addrinfo" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8164 "configure"
- #include "confdefs.h"
-
- #include <netdb.h>
-***************
-*** 8160,8166 ****
- struct addrinfo a; return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8164: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_LWRES_NEEDADDRINFO="#undef ISC_LWRES_NEEDADDRINFO"
---- 8168,8174 ----
- struct addrinfo a; return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8172: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_LWRES_NEEDADDRINFO="#undef ISC_LWRES_NEEDADDRINFO"
-***************
-*** 8182,8190 ****
- # Check for rrsetinfo
- #
- echo $ac_n "checking for struct rrsetinfo""... $ac_c" 1>&6
-! echo "configure:8186: checking for struct rrsetinfo" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8188 "configure"
- #include "confdefs.h"
-
- #include <netdb.h>
---- 8190,8198 ----
- # Check for rrsetinfo
- #
- echo $ac_n "checking for struct rrsetinfo""... $ac_c" 1>&6
-! echo "configure:8194: checking for struct rrsetinfo" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8196 "configure"
- #include "confdefs.h"
-
- #include <netdb.h>
-***************
-*** 8192,8198 ****
- struct rrsetinfo r; return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8196: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_LWRES_NEEDRRSETINFO="#undef ISC_LWRES_NEEDRRSETINFO"
---- 8200,8206 ----
- struct rrsetinfo r; return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8204: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_LWRES_NEEDRRSETINFO="#undef ISC_LWRES_NEEDRRSETINFO"
-***************
-*** 8207,8215 ****
-
-
- echo $ac_n "checking for int sethostent""... $ac_c" 1>&6
-! echo "configure:8211: checking for int sethostent" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8213 "configure"
- #include "confdefs.h"
-
- #include <netdb.h>
---- 8215,8223 ----
-
-
- echo $ac_n "checking for int sethostent""... $ac_c" 1>&6
-! echo "configure:8219: checking for int sethostent" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8221 "configure"
- #include "confdefs.h"
-
- #include <netdb.h>
-***************
-*** 8217,8223 ****
- int i = sethostent(0); return(0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8221: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_LWRES_SETHOSTENTINT="#define ISC_LWRES_SETHOSTENTINT 1"
---- 8225,8231 ----
- int i = sethostent(0); return(0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8229: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_LWRES_SETHOSTENTINT="#define ISC_LWRES_SETHOSTENTINT 1"
-***************
-*** 8232,8240 ****
-
-
- echo $ac_n "checking for int endhostent""... $ac_c" 1>&6
-! echo "configure:8236: checking for int endhostent" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8238 "configure"
- #include "confdefs.h"
-
- #include <netdb.h>
---- 8240,8248 ----
-
-
- echo $ac_n "checking for int endhostent""... $ac_c" 1>&6
-! echo "configure:8244: checking for int endhostent" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8246 "configure"
- #include "confdefs.h"
-
- #include <netdb.h>
-***************
-*** 8242,8248 ****
- int i = endhostent(); return(0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8246: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_LWRES_ENDHOSTENTINT="#define ISC_LWRES_ENDHOSTENTINT 1"
---- 8250,8256 ----
- int i = endhostent(); return(0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8254: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_LWRES_ENDHOSTENTINT="#define ISC_LWRES_ENDHOSTENTINT 1"
-***************
-*** 8257,8265 ****
-
-
- echo $ac_n "checking for getnetbyaddr(in_addr_t, ...)""... $ac_c" 1>&6
-! echo "configure:8261: checking for getnetbyaddr(in_addr_t, ...)" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8263 "configure"
- #include "confdefs.h"
-
- #include <netdb.h>
---- 8265,8273 ----
-
-
- echo $ac_n "checking for getnetbyaddr(in_addr_t, ...)""... $ac_c" 1>&6
-! echo "configure:8269: checking for getnetbyaddr(in_addr_t, ...)" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8271 "configure"
- #include "confdefs.h"
-
- #include <netdb.h>
-***************
-*** 8268,8274 ****
-
- ; return 0; }
- EOF
-! if { (eval echo configure:8272: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_LWRES_GETNETBYADDRINADDR="#define ISC_LWRES_GETNETBYADDRINADDR 1"
---- 8276,8282 ----
-
- ; return 0; }
- EOF
-! if { (eval echo configure:8280: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_LWRES_GETNETBYADDRINADDR="#define ISC_LWRES_GETNETBYADDRINADDR 1"
-***************
-*** 8283,8291 ****
-
-
- echo $ac_n "checking for int setnetent""... $ac_c" 1>&6
-! echo "configure:8287: checking for int setnetent" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8289 "configure"
- #include "confdefs.h"
-
- #include <netdb.h>
---- 8291,8299 ----
-
-
- echo $ac_n "checking for int setnetent""... $ac_c" 1>&6
-! echo "configure:8295: checking for int setnetent" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8297 "configure"
- #include "confdefs.h"
-
- #include <netdb.h>
-***************
-*** 8293,8299 ****
- int i = setnetent(0); return(0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8297: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_LWRES_SETNETENTINT="#define ISC_LWRES_SETNETENTINT 1"
---- 8301,8307 ----
- int i = setnetent(0); return(0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8305: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_LWRES_SETNETENTINT="#define ISC_LWRES_SETNETENTINT 1"
-***************
-*** 8308,8316 ****
-
-
- echo $ac_n "checking for int endnetent""... $ac_c" 1>&6
-! echo "configure:8312: checking for int endnetent" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8314 "configure"
- #include "confdefs.h"
-
- #include <netdb.h>
---- 8316,8324 ----
-
-
- echo $ac_n "checking for int endnetent""... $ac_c" 1>&6
-! echo "configure:8320: checking for int endnetent" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8322 "configure"
- #include "confdefs.h"
-
- #include <netdb.h>
-***************
-*** 8318,8324 ****
- int i = endnetent(); return(0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8322: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_LWRES_ENDNETENTINT="#define ISC_LWRES_ENDNETENTINT 1"
---- 8326,8332 ----
- int i = endnetent(); return(0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8330: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_LWRES_ENDNETENTINT="#define ISC_LWRES_ENDNETENTINT 1"
-***************
-*** 8333,8341 ****
-
-
- echo $ac_n "checking for gethostbyaddr(const void *, size_t, ...)""... $ac_c" 1>&6
-! echo "configure:8337: checking for gethostbyaddr(const void *, size_t, ...)" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8339 "configure"
- #include "confdefs.h"
-
- #include <netdb.h>
---- 8341,8349 ----
-
-
- echo $ac_n "checking for gethostbyaddr(const void *, size_t, ...)""... $ac_c" 1>&6
-! echo "configure:8345: checking for gethostbyaddr(const void *, size_t, ...)" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8347 "configure"
- #include "confdefs.h"
-
- #include <netdb.h>
-***************
-*** 8344,8350 ****
- return(0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8348: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_LWRES_GETHOSTBYADDRVOID="#define ISC_LWRES_GETHOSTBYADDRVOID 1"
---- 8352,8358 ----
- return(0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8356: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_LWRES_GETHOSTBYADDRVOID="#define ISC_LWRES_GETHOSTBYADDRVOID 1"
-***************
-*** 8359,8367 ****
-
-
- echo $ac_n "checking for h_errno in netdb.h""... $ac_c" 1>&6
-! echo "configure:8363: checking for h_errno in netdb.h" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8365 "configure"
- #include "confdefs.h"
-
- #include <netdb.h>
---- 8367,8375 ----
-
-
- echo $ac_n "checking for h_errno in netdb.h""... $ac_c" 1>&6
-! echo "configure:8371: checking for h_errno in netdb.h" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8373 "configure"
- #include "confdefs.h"
-
- #include <netdb.h>
-***************
-*** 8369,8375 ****
- h_errno = 1; return(0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8373: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_LWRES_NEEDHERRNO="#undef ISC_LWRES_NEEDHERRNO"
---- 8377,8383 ----
- h_errno = 1; return(0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8381: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_LWRES_NEEDHERRNO="#undef ISC_LWRES_NEEDHERRNO"
-***************
-*** 8384,8395 ****
-
-
- echo $ac_n "checking for getipnodebyname""... $ac_c" 1>&6
-! echo "configure:8388: checking for getipnodebyname" >&5
- if eval "test \"`echo '$''{'ac_cv_func_getipnodebyname'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 8393 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char getipnodebyname(); below. */
---- 8392,8403 ----
-
-
- echo $ac_n "checking for getipnodebyname""... $ac_c" 1>&6
-! echo "configure:8396: checking for getipnodebyname" >&5
- if eval "test \"`echo '$''{'ac_cv_func_getipnodebyname'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 8401 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char getipnodebyname(); below. */
-***************
-*** 8412,8418 ****
-
- ; return 0; }
- EOF
-! if { (eval echo configure:8416: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_getipnodebyname=yes"
- else
---- 8420,8426 ----
-
- ; return 0; }
- EOF
-! if { (eval echo configure:8424: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_getipnodebyname=yes"
- else
-***************
-*** 8433,8444 ****
- fi
-
- echo $ac_n "checking for getnameinfo""... $ac_c" 1>&6
-! echo "configure:8437: checking for getnameinfo" >&5
- if eval "test \"`echo '$''{'ac_cv_func_getnameinfo'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 8442 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char getnameinfo(); below. */
---- 8441,8452 ----
- fi
-
- echo $ac_n "checking for getnameinfo""... $ac_c" 1>&6
-! echo "configure:8445: checking for getnameinfo" >&5
- if eval "test \"`echo '$''{'ac_cv_func_getnameinfo'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 8450 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char getnameinfo(); below. */
-***************
-*** 8461,8467 ****
-
- ; return 0; }
- EOF
-! if { (eval echo configure:8465: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_getnameinfo=yes"
- else
---- 8469,8475 ----
-
- ; return 0; }
- EOF
-! if { (eval echo configure:8473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_getnameinfo=yes"
- else
-***************
-*** 8482,8493 ****
- fi
-
- echo $ac_n "checking for getaddrinfo""... $ac_c" 1>&6
-! echo "configure:8486: checking for getaddrinfo" >&5
- if eval "test \"`echo '$''{'ac_cv_func_getaddrinfo'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 8491 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char getaddrinfo(); below. */
---- 8490,8501 ----
- fi
-
- echo $ac_n "checking for getaddrinfo""... $ac_c" 1>&6
-! echo "configure:8494: checking for getaddrinfo" >&5
- if eval "test \"`echo '$''{'ac_cv_func_getaddrinfo'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 8499 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char getaddrinfo(); below. */
-***************
-*** 8510,8516 ****
-
- ; return 0; }
- EOF
-! if { (eval echo configure:8514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_getaddrinfo=yes"
- else
---- 8518,8524 ----
-
- ; return 0; }
- EOF
-! if { (eval echo configure:8522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_getaddrinfo=yes"
- else
-***************
-*** 8535,8546 ****
- fi
-
- echo $ac_n "checking for gai_strerror""... $ac_c" 1>&6
-! echo "configure:8539: checking for gai_strerror" >&5
- if eval "test \"`echo '$''{'ac_cv_func_gai_strerror'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 8544 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char gai_strerror(); below. */
---- 8543,8554 ----
- fi
-
- echo $ac_n "checking for gai_strerror""... $ac_c" 1>&6
-! echo "configure:8547: checking for gai_strerror" >&5
- if eval "test \"`echo '$''{'ac_cv_func_gai_strerror'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 8552 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char gai_strerror(); below. */
-***************
-*** 8563,8569 ****
-
- ; return 0; }
- EOF
-! if { (eval echo configure:8567: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_gai_strerror=yes"
- else
---- 8571,8577 ----
-
- ; return 0; }
- EOF
-! if { (eval echo configure:8575: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_gai_strerror=yes"
- else
-***************
-*** 8593,8601 ****
- # Look for a sysctl call to get the list of network interfaces.
- #
- echo $ac_n "checking for interface list sysctl""... $ac_c" 1>&6
-! echo "configure:8597: checking for interface list sysctl" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8599 "configure"
- #include "confdefs.h"
-
- #include <sys/param.h>
---- 8601,8609 ----
- # Look for a sysctl call to get the list of network interfaces.
- #
- echo $ac_n "checking for interface list sysctl""... $ac_c" 1>&6
-! echo "configure:8605: checking for interface list sysctl" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8607 "configure"
- #include "confdefs.h"
-
- #include <sys/param.h>
-***************
-*** 8632,8647 ****
- # AC_CHECK_FUNC() incorrectly succeeds because it declares
- # the function itself.
- echo $ac_n "checking for correctly declared strsep()""... $ac_c" 1>&6
-! echo "configure:8636: checking for correctly declared strsep()" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8638 "configure"
- #include "confdefs.h"
- #include <string.h>
- int main() {
- char *sp; char *foo = strsep(&sp, ".");
- ; return 0; }
- EOF
-! if { (eval echo configure:8645: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6; ISC_PLATFORM_NEEDSTRSEP="#undef ISC_PLATFORM_NEEDSTRSEP"
- else
---- 8640,8655 ----
- # AC_CHECK_FUNC() incorrectly succeeds because it declares
- # the function itself.
- echo $ac_n "checking for correctly declared strsep()""... $ac_c" 1>&6
-! echo "configure:8644: checking for correctly declared strsep()" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8646 "configure"
- #include "confdefs.h"
- #include <string.h>
- int main() {
- char *sp; char *foo = strsep(&sp, ".");
- ; return 0; }
- EOF
-! if { (eval echo configure:8653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6; ISC_PLATFORM_NEEDSTRSEP="#undef ISC_PLATFORM_NEEDSTRSEP"
- else
-***************
-*** 8653,8664 ****
- rm -f conftest*
-
- echo $ac_n "checking for vsnprintf""... $ac_c" 1>&6
-! echo "configure:8657: checking for vsnprintf" >&5
- if eval "test \"`echo '$''{'ac_cv_func_vsnprintf'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 8662 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char vsnprintf(); below. */
---- 8661,8672 ----
- rm -f conftest*
-
- echo $ac_n "checking for vsnprintf""... $ac_c" 1>&6
-! echo "configure:8665: checking for vsnprintf" >&5
- if eval "test \"`echo '$''{'ac_cv_func_vsnprintf'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 8670 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char vsnprintf(); below. */
-***************
-*** 8681,8687 ****
-
- ; return 0; }
- EOF
-! if { (eval echo configure:8685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_vsnprintf=yes"
- else
---- 8689,8695 ----
-
- ; return 0; }
- EOF
-! if { (eval echo configure:8693: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_vsnprintf=yes"
- else
-***************
-*** 8706,8717 ****
-
-
- echo $ac_n "checking for strerror""... $ac_c" 1>&6
-! echo "configure:8710: checking for strerror" >&5
- if eval "test \"`echo '$''{'ac_cv_func_strerror'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 8715 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char strerror(); below. */
---- 8714,8725 ----
-
-
- echo $ac_n "checking for strerror""... $ac_c" 1>&6
-! echo "configure:8718: checking for strerror" >&5
- if eval "test \"`echo '$''{'ac_cv_func_strerror'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 8723 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char strerror(); below. */
-***************
-*** 8734,8740 ****
-
- ; return 0; }
- EOF
-! if { (eval echo configure:8738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_strerror=yes"
- else
---- 8742,8748 ----
-
- ; return 0; }
- EOF
-! if { (eval echo configure:8746: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_strerror=yes"
- else
-***************
-*** 8768,8784 ****
- # but that's defined elsewhere since we don't use configure on Win32.
- #
- echo $ac_n "checking printf format modifier for 64-bit integers""... $ac_c" 1>&6
-! echo "configure:8772: checking printf format modifier for 64-bit integers" >&5
- if test "$cross_compiling" = yes; then
- echo "$ac_t""assuming target platform uses ll" 1>&6
- ISC_PLATFORM_QUADFORMAT='#define ISC_PLATFORM_QUADFORMAT "ll"'
- else
- cat > conftest.$ac_ext <<EOF
-! #line 8778 "configure"
- #include "confdefs.h"
- main() { exit(!(sizeof(long long int) == sizeof(long int))); }
- EOF
-! if { (eval echo configure:8782: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
- echo "$ac_t""l" 1>&6
- ISC_PLATFORM_QUADFORMAT='#define ISC_PLATFORM_QUADFORMAT "l"'
---- 8776,8792 ----
- # but that's defined elsewhere since we don't use configure on Win32.
- #
- echo $ac_n "checking printf format modifier for 64-bit integers""... $ac_c" 1>&6
-! echo "configure:8780: checking printf format modifier for 64-bit integers" >&5
- if test "$cross_compiling" = yes; then
- echo "$ac_t""assuming target platform uses ll" 1>&6
- ISC_PLATFORM_QUADFORMAT='#define ISC_PLATFORM_QUADFORMAT "ll"'
- else
- cat > conftest.$ac_ext <<EOF
-! #line 8786 "configure"
- #include "confdefs.h"
- main() { exit(!(sizeof(long long int) == sizeof(long int))); }
- EOF
-! if { (eval echo configure:8790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
- echo "$ac_t""l" 1>&6
- ISC_PLATFORM_QUADFORMAT='#define ISC_PLATFORM_QUADFORMAT "l"'
-***************
-*** 8798,8809 ****
- # Security Stuff
- #
- echo $ac_n "checking for chroot""... $ac_c" 1>&6
-! echo "configure:8802: checking for chroot" >&5
- if eval "test \"`echo '$''{'ac_cv_func_chroot'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 8807 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char chroot(); below. */
---- 8806,8817 ----
- # Security Stuff
- #
- echo $ac_n "checking for chroot""... $ac_c" 1>&6
-! echo "configure:8810: checking for chroot" >&5
- if eval "test \"`echo '$''{'ac_cv_func_chroot'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 8815 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char chroot(); below. */
-***************
-*** 8826,8832 ****
-
- ; return 0; }
- EOF
-! if { (eval echo configure:8830: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_chroot=yes"
- else
---- 8834,8840 ----
-
- ; return 0; }
- EOF
-! if { (eval echo configure:8838: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_chroot=yes"
- else
-***************
-*** 8860,8876 ****
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-! echo "configure:8864: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 8869 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-! { (eval echo configure:8874: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
- rm -rf conftest*
---- 8868,8884 ----
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-! echo "configure:8872: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 8877 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-! { (eval echo configure:8882: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
- rm -rf conftest*
-***************
-*** 8904,8920 ****
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-! echo "configure:8908: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 8913 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-! { (eval echo configure:8918: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
- rm -rf conftest*
---- 8912,8928 ----
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-! echo "configure:8916: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
-! #line 8921 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-! { (eval echo configure:8926: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
- rm -rf conftest*
-***************
-*** 8945,8953 ****
- # BSD/OS, and perhaps some others, don't define rlim_t.
- #
- echo $ac_n "checking for type rlim_t""... $ac_c" 1>&6
-! echo "configure:8949: checking for type rlim_t" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8951 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
---- 8953,8961 ----
- # BSD/OS, and perhaps some others, don't define rlim_t.
- #
- echo $ac_n "checking for type rlim_t""... $ac_c" 1>&6
-! echo "configure:8957: checking for type rlim_t" >&5
- cat > conftest.$ac_ext <<EOF
-! #line 8959 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
-***************
-*** 8957,8963 ****
- rlim_t rl = 19671212; return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8961: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE rlim_t"
---- 8965,8971 ----
- rlim_t rl = 19671212; return (0);
- ; return 0; }
- EOF
-! if { (eval echo configure:8969: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
- ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE rlim_t"
-***************
-*** 8968,8979 ****
- echo "$ac_t""no" 1>&6
-
- echo $ac_n "checking type of rlim_cur""... $ac_c" 1>&6
-! echo "configure:8972: checking type of rlim_cur" >&5
- if test "$cross_compiling" = yes; then
- { echo "configure: error: cannot determine type of rlim_cur when cross compiling - define rlim_t" 1>&2; exit 1; }
- else
- cat > conftest.$ac_ext <<EOF
-! #line 8977 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
---- 8976,8987 ----
- echo "$ac_t""no" 1>&6
-
- echo $ac_n "checking type of rlim_cur""... $ac_c" 1>&6
-! echo "configure:8980: checking type of rlim_cur" >&5
- if test "$cross_compiling" = yes; then
- { echo "configure: error: cannot determine type of rlim_cur when cross compiling - define rlim_t" 1>&2; exit 1; }
- else
- cat > conftest.$ac_ext <<EOF
-! #line 8985 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
-***************
-*** 8981,8987 ****
- #include <sys/resource.h>
- main() { struct rlimit r; exit(!(sizeof(r.rlim_cur) == sizeof(int)));}
- EOF
-! if { (eval echo configure:8985: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
- echo "$ac_t""int" 1>&6
- ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE int"
---- 8989,8995 ----
- #include <sys/resource.h>
- main() { struct rlimit r; exit(!(sizeof(r.rlim_cur) == sizeof(int)));}
- EOF
-! if { (eval echo configure:8993: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
- echo "$ac_t""int" 1>&6
- ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE int"
-***************
-*** 8994,9000 ****
- { echo "configure: error: this cannot happen" 1>&2; exit 1; }
- else
- cat > conftest.$ac_ext <<EOF
-! #line 8998 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
---- 9002,9008 ----
- { echo "configure: error: this cannot happen" 1>&2; exit 1; }
- else
- cat > conftest.$ac_ext <<EOF
-! #line 9006 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
-***************
-*** 9002,9008 ****
- #include <sys/resource.h>
- main() { struct rlimit r; exit(!(sizeof(r.rlim_cur) == sizeof(long int)));}
- EOF
-! if { (eval echo configure:9006: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
- echo "$ac_t""long int" 1>&6
- ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE long int"
---- 9010,9016 ----
- #include <sys/resource.h>
- main() { struct rlimit r; exit(!(sizeof(r.rlim_cur) == sizeof(long int)));}
- EOF
-! if { (eval echo configure:9014: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
- echo "$ac_t""long int" 1>&6
- ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE long int"
-***************
-*** 9015,9021 ****
- { echo "configure: error: this cannot happen" 1>&2; exit 1; }
- else
- cat > conftest.$ac_ext <<EOF
-! #line 9019 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
---- 9023,9029 ----
- { echo "configure: error: this cannot happen" 1>&2; exit 1; }
- else
- cat > conftest.$ac_ext <<EOF
-! #line 9027 "configure"
- #include "confdefs.h"
-
- #include <sys/types.h>
-***************
-*** 9023,9029 ****
- #include <sys/resource.h>
- main() { struct rlimit r; exit((!sizeof(r.rlim_cur) == sizeof(long long int)));}
- EOF
-! if { (eval echo configure:9027: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
- echo "$ac_t""long long int" 1>&6
- ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE long long int"
---- 9031,9037 ----
- #include <sys/resource.h>
- main() { struct rlimit r; exit((!sizeof(r.rlim_cur) == sizeof(long long int)));}
- EOF
-! if { (eval echo configure:9035: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
- echo "$ac_t""long long int" 1>&6
- ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE long long int"
-***************
-*** 9147,9153 ****
- # Extract the first word of "$ac_prog", so it can be a program name with args.
- set dummy $ac_prog; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:9151: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_OPENJADE'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 9155,9161 ----
- # Extract the first word of "$ac_prog", so it can be a program name with args.
- set dummy $ac_prog; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:9159: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_OPENJADE'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 9194,9200 ****
- # Extract the first word of "$ac_prog", so it can be a program name with args.
- set dummy $ac_prog; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:9198: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_JADETEX'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 9202,9208 ----
- # Extract the first word of "$ac_prog", so it can be a program name with args.
- set dummy $ac_prog; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:9206: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_JADETEX'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 9237,9243 ****
- # Extract the first word of "$ac_prog", so it can be a program name with args.
- set dummy $ac_prog; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:9241: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_PDFJADETEX'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
---- 9245,9251 ----
- # Extract the first word of "$ac_prog", so it can be a program name with args.
- set dummy $ac_prog; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-! echo "configure:9249: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_PDFJADETEX'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-***************
-*** 9293,9299 ****
-
- SGMLCATALOG=""
- echo $ac_n "checking for catalog""... $ac_c" 1>&6
-! echo "configure:9297: checking for catalog" >&5
- for d in $sgmltrees
- do
- f=$d/catalog
---- 9301,9307 ----
-
- SGMLCATALOG=""
- echo $ac_n "checking for catalog""... $ac_c" 1>&6
-! echo "configure:9305: checking for catalog" >&5
- for d in $sgmltrees
- do
- f=$d/catalog
-***************
-*** 9335,9341 ****
-
- HTMLSTYLE=""
- echo $ac_n "checking for html/docbook.dsl""... $ac_c" 1>&6
-! echo "configure:9339: checking for html/docbook.dsl" >&5
- for d in $stylepath
- do
- f=$d/html/docbook.dsl
---- 9343,9349 ----
-
- HTMLSTYLE=""
- echo $ac_n "checking for html/docbook.dsl""... $ac_c" 1>&6
-! echo "configure:9347: checking for html/docbook.dsl" >&5
- for d in $stylepath
- do
- f=$d/html/docbook.dsl
-***************
-*** 9356,9362 ****
-
- PRINTSTYLE=""
- echo $ac_n "checking for print/docbook.dsl""... $ac_c" 1>&6
-! echo "configure:9360: checking for print/docbook.dsl" >&5
- for d in $stylepath
- do
- f=$d/print/docbook.dsl
---- 9364,9370 ----
-
- PRINTSTYLE=""
- echo $ac_n "checking for print/docbook.dsl""... $ac_c" 1>&6
-! echo "configure:9368: checking for print/docbook.dsl" >&5
- for d in $stylepath
- do
- f=$d/print/docbook.dsl
-***************
-*** 9382,9388 ****
-
- XMLDCL=""
- echo $ac_n "checking for docbook/dsssl/modular/dtds/decls/xml.dcl""... $ac_c" 1>&6
-! echo "configure:9386: checking for docbook/dsssl/modular/dtds/decls/xml.dcl" >&5
- for d in $sgmltrees
- do
- f=$d/docbook/dsssl/modular/dtds/decls/xml.dcl
---- 9390,9396 ----
-
- XMLDCL=""
- echo $ac_n "checking for docbook/dsssl/modular/dtds/decls/xml.dcl""... $ac_c" 1>&6
-! echo "configure:9394: checking for docbook/dsssl/modular/dtds/decls/xml.dcl" >&5
- for d in $sgmltrees
- do
- f=$d/docbook/dsssl/modular/dtds/decls/xml.dcl
-***************
-*** 9408,9414 ****
-
- DOCBOOK2MANSPEC=""
- echo $ac_n "checking for docbook2X/docbook2man-spec.pl""... $ac_c" 1>&6
-! echo "configure:9412: checking for docbook2X/docbook2man-spec.pl" >&5
- for d in $sgmltrees
- do
- f=$d/docbook2X/docbook2man-spec.pl
---- 9416,9422 ----
-
- DOCBOOK2MANSPEC=""
- echo $ac_n "checking for docbook2X/docbook2man-spec.pl""... $ac_c" 1>&6
-! echo "configure:9420: checking for docbook2X/docbook2man-spec.pl" >&5
- for d in $sgmltrees
- do
- f=$d/docbook2X/docbook2man-spec.pl
-***************
-*** 9428,9433 ****
---- 9436,9631 ----
-
-
- #
-+ # IDN support
-+ #
-+ # Check whether --with-idn or --without-idn was given.
-+ if test "${with_idn+set}" = set; then
-+ withval="$with_idn"
-+ use_idn="$withval"
-+ else
-+ use_idn="no"
-+ fi
-+
-+ case "$use_idn" in
-+ yes)
-+ if test X$prefix = XNONE ; then
-+ idn_path=/usr/local
-+ else
-+ idn_path=$prefix
-+ fi
-+ ;;
-+ no)
-+ ;;
-+ *)
-+ idn_path="$use_idn"
-+ ;;
-+ esac
-+
-+ iconvinc=
-+ iconvlib=
-+ # Check whether --with-libiconv or --without-libiconv was given.
-+ if test "${with_libiconv+set}" = set; then
-+ withval="$with_libiconv"
-+ use_libiconv="$withval"
-+ else
-+ use_libiconv="no"
-+ fi
-+
-+ case "$use_libiconv" in
-+ yes)
-+ if test X$prefix = XNONE ; then
-+ iconvlib="-L/usr/local/lib -R/usr/local/lib -liconv"
-+ else
-+ iconvlib="-L$prefix/lib -R$prefix/lib -liconv"
-+ fi
-+ ;;
-+ no)
-+ iconvlib=
-+ ;;
-+ *)
-+ iconvlib="-L$use_libiconv/lib -R$use_libiconv/lib -liconv"
-+ ;;
-+ esac
-+
-+ # Check whether --with-iconv or --without-iconv was given.
-+ if test "${with_iconv+set}" = set; then
-+ withval="$with_iconv"
-+ iconvlib="$withval"
-+ fi
-+
-+ case "$iconvlib" in
-+ no)
-+ iconvlib=
-+ ;;
-+ yes)
-+ iconvlib=-liconv
-+ ;;
-+ esac
-+
-+ # Check whether --with-idnlib or --without-idnlib was given.
-+ if test "${with_idnlib+set}" = set; then
-+ withval="$with_idnlib"
-+ idnlib="$withval"
-+ else
-+ idnlib="no"
-+ fi
-+
-+ if test "$idnlib" = yes; then
-+ { echo "configure: error: You must specify ARG for --with-idnlib." 1>&2; exit 1; }
-+ fi
-+
-+ IDNLIBS=
-+ if test "$use_idn" != no; then
-+ cat >> confdefs.h <<\EOF
-+ #define WITH_IDN 1
-+ EOF
-+
-+ STD_CINCLUDES="$STD_CINCLUDES -I$idn_path/include"
-+ if test "$idnlib" != no; then
-+ IDNLIBS="$idnlib $iconvlib"
-+ else
-+ IDNLIBS="-L$idn_path/lib -lidnkit $iconvlib"
-+ fi
-+ fi
-+
-+
-+ for ac_hdr in locale.h
-+ do
-+ ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-+ echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-+ echo "configure:9537: checking for $ac_hdr" >&5
-+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-+ echo $ac_n "(cached) $ac_c" 1>&6
-+ else
-+ cat > conftest.$ac_ext <<EOF
-+ #line 9542 "configure"
-+ #include "confdefs.h"
-+ #include <$ac_hdr>
-+ EOF
-+ ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-+ { (eval echo configure:9547: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+ ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-+ if test -z "$ac_err"; then
-+ rm -rf conftest*
-+ eval "ac_cv_header_$ac_safe=yes"
-+ else
-+ echo "$ac_err" >&5
-+ echo "configure: failed program was:" >&5
-+ cat conftest.$ac_ext >&5
-+ rm -rf conftest*
-+ eval "ac_cv_header_$ac_safe=no"
-+ fi
-+ rm -f conftest*
-+ fi
-+ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
-+ echo "$ac_t""yes" 1>&6
-+ ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
-+ cat >> confdefs.h <<EOF
-+ #define $ac_tr_hdr 1
-+ EOF
-+
-+ else
-+ echo "$ac_t""no" 1>&6
-+ fi
-+ done
-+
-+ for ac_func in setlocale
-+ do
-+ echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-+ echo "configure:9576: checking for $ac_func" >&5
-+ if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
-+ echo $ac_n "(cached) $ac_c" 1>&6
-+ else
-+ cat > conftest.$ac_ext <<EOF
-+ #line 9581 "configure"
-+ #include "confdefs.h"
-+ /* System header to define __stub macros and hopefully few prototypes,
-+ which can conflict with char $ac_func(); below. */
-+ #include <assert.h>
-+ /* Override any gcc2 internal prototype to avoid an error. */
-+ /* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+ char $ac_func();
-+
-+ int main() {
-+
-+ /* The GNU C library defines this for functions which it implements
-+ to always fail with ENOSYS. Some functions are actually named
-+ something starting with __ and the normal name is an alias. */
-+ #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-+ choke me
-+ #else
-+ $ac_func();
-+ #endif
-+
-+ ; return 0; }
-+ EOF
-+ if { (eval echo configure:9604: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+ rm -rf conftest*
-+ eval "ac_cv_func_$ac_func=yes"
-+ else
-+ echo "configure: failed program was:" >&5
-+ cat conftest.$ac_ext >&5
-+ rm -rf conftest*
-+ eval "ac_cv_func_$ac_func=no"
-+ fi
-+ rm -f conftest*
-+ fi
-+
-+ if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
-+ echo "$ac_t""yes" 1>&6
-+ ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-+ cat >> confdefs.h <<EOF
-+ #define $ac_tr_func 1
-+ EOF
-+
-+ else
-+ echo "$ac_t""no" 1>&6
-+ fi
-+ done
-+
-+
-+ #
- # Substitutions
- #
-
-***************
-*** 9799,9804 ****
---- 9997,10003 ----
- s%@PRINTSTYLE@%$PRINTSTYLE%g
- s%@XMLDCL@%$XMLDCL%g
- s%@DOCBOOK2MANSPEC@%$DOCBOOK2MANSPEC%g
-+ s%@IDNLIBS@%$IDNLIBS%g
- s%@BIND9_TOP_BUILDDIR@%$BIND9_TOP_BUILDDIR%g
- s%@BIND9_ISC_BUILDINCLUDE@%$BIND9_ISC_BUILDINCLUDE%g
- s%@BIND9_ISCCC_BUILDINCLUDE@%$BIND9_ISCCC_BUILDINCLUDE%g
-***************
-*** 9828,9834 ****
-
- # Split the substitutions into bite-sized pieces for seds with
- # small command number limits, like on Digital OSF/1 and HP-UX.
-! ac_max_sed_cmds=50 # Maximum number of lines to put in a sed script.
- ac_file=1 # Number of current file.
- ac_beg=1 # First line for current file.
- ac_end=$ac_max_sed_cmds # Line after last line for current file.
---- 10027,10033 ----
-
- # Split the substitutions into bite-sized pieces for seds with
- # small command number limits, like on Digital OSF/1 and HP-UX.
-! ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
- ac_file=1 # Number of current file.
- ac_beg=1 # First line for current file.
- ac_end=$ac_max_sed_cmds # Line after last line for current file.
-Index: configure.in
-diff -c mdn/othersrc/bind9/configure.in:1.1.1.9 mdn/othersrc/bind9/configure.in:1.15
-*** configure.in Wed May 22 17:14:53 2002
---- configure.in Mon May 27 12:10:14 2002
-***************
-*** 1614,1619 ****
---- 1614,1695 ----
- NOM_PATH_FILE(DOCBOOK2MANSPEC, docbook2X/docbook2man-spec.pl, $sgmltrees)
-
- #
-+ # IDN support
-+ #
-+ AC_ARG_WITH(idn,
-+ [ --with-idn[=MPREFIX] enable IDN support using idnkit [default PREFIX]],
-+ use_idn="$withval", use_idn="no")
-+ case "$use_idn" in
-+ yes)
-+ if test X$prefix = XNONE ; then
-+ idn_path=/usr/local
-+ else
-+ idn_path=$prefix
-+ fi
-+ ;;
-+ no)
-+ ;;
-+ *)
-+ idn_path="$use_idn"
-+ ;;
-+ esac
-+
-+ iconvinc=
-+ iconvlib=
-+ AC_ARG_WITH(libiconv,
-+ [ --with-libiconv[=IPREFIX] GNU libiconv are in IPREFIX [default PREFIX]],
-+ use_libiconv="$withval", use_libiconv="no")
-+ case "$use_libiconv" in
-+ yes)
-+ if test X$prefix = XNONE ; then
-+ iconvlib="-L/usr/local/lib -R/usr/local/lib -liconv"
-+ else
-+ iconvlib="-L$prefix/lib -R$prefix/lib -liconv"
-+ fi
-+ ;;
-+ no)
-+ iconvlib=
-+ ;;
-+ *)
-+ iconvlib="-L$use_libiconv/lib -R$use_libiconv/lib -liconv"
-+ ;;
-+ esac
-+
-+ AC_ARG_WITH(iconv,
-+ [ --with-iconv[=LIBSPEC] specify iconv library [default -liconv]],
-+ iconvlib="$withval")
-+ case "$iconvlib" in
-+ no)
-+ iconvlib=
-+ ;;
-+ yes)
-+ iconvlib=-liconv
-+ ;;
-+ esac
-+
-+ AC_ARG_WITH(idnlib,
-+ [ --with-idnlib=ARG specify libidnkit],
-+ idnlib="$withval", idnlib="no")
-+ if test "$idnlib" = yes; then
-+ AC_MSG_ERROR([You must specify ARG for --with-idnlib.])
-+ fi
-+
-+ IDNLIBS=
-+ if test "$use_idn" != no; then
-+ AC_DEFINE(WITH_IDN, 1, [define if idnkit support is to be included.])
-+ STD_CINCLUDES="$STD_CINCLUDES -I$idn_path/include"
-+ if test "$idnlib" != no; then
-+ IDNLIBS="$idnlib $iconvlib"
-+ else
-+ IDNLIBS="-L$idn_path/lib -lidnkit $iconvlib"
-+ fi
-+ fi
-+ AC_SUBST(IDNLIBS)
-+
-+ AC_CHECK_HEADERS(locale.h)
-+ AC_CHECK_FUNCS(setlocale)
-+
-+ #
- # Substitutions
- #
- AC_SUBST(BIND9_TOP_BUILDDIR)
-Index: bin/dig/Makefile.in
-diff -c mdn/othersrc/bind9/bin/dig/Makefile.in:1.1.1.6 mdn/othersrc/bind9/bin/dig/Makefile.in:1.3
-*** bin/dig/Makefile.in Tue Nov 27 16:55:50 2001
---- bin/dig/Makefile.in Tue Mar 19 16:45:35 2002
-***************
-*** 36,42 ****
-
- DEPLIBS = ${DNSDEPLIBS} ${ISCDEPLIBS}
-
-! LIBS = ${DNSLIBS} ${ISCLIBS} @LIBS@
-
- SUBDIRS =
-
---- 36,42 ----
-
- DEPLIBS = ${DNSDEPLIBS} ${ISCDEPLIBS}
-
-! LIBS = ${DNSLIBS} ${ISCLIBS} @IDNLIBS@ @LIBS@
-
- SUBDIRS =
-
-Index: bin/dig/dig.1
-diff -c mdn/othersrc/bind9/bin/dig/dig.1:1.1.1.2 mdn/othersrc/bind9/bin/dig/dig.1:1.4
-*** bin/dig/dig.1 Wed May 22 17:14:53 2002
---- bin/dig/dig.1 Mon May 27 12:10:14 2002
-***************
-*** 349,354 ****
---- 349,365 ----
- \fI+noqr\fR which means that \fBdig\fR
- will not print the initial query when it looks up the NS records for
- isc.org.
-+ .SH "IDN SUPPORT"
-+ .PP
-+ If \fBdig\fR has been built with IDN (internationalized
-+ domain name) support, it can accept and display non-ASCII domain names.
-+ \fBdig\fR appropriately converts character encoding of
-+ domain name before sending a request to DNS server or displaying a
-+ reply from the server.
-+ If you'd like to turn off the IDN support for some reason, defines
-+ the \fBIDN_DISABLE\fR environment variable.
-+ The IDN support is disabled if the the variable is set when
-+ \fBdig\fR runs.
- .SH "FILES"
- .PP
- \fI/etc/resolv.conf\fR
-Index: bin/dig/dig.docbook
-diff -c mdn/othersrc/bind9/bin/dig/dig.docbook:1.1.1.2 mdn/othersrc/bind9/bin/dig/dig.docbook:1.4
-*** bin/dig/dig.docbook Wed May 22 17:14:53 2002
---- bin/dig/dig.docbook Mon May 27 12:10:15 2002
-***************
-*** 523,528 ****
---- 523,543 ----
- </refsect1>
-
- <refsect1>
-+ <title>IDN SUPPORT</title>
-+ <para>
-+ If <command>dig</command> has been built with IDN (internationalized
-+ domain name) support, it can accept and display non-ASCII domain names.
-+ <command>dig</command> appropriately converts character encoding of
-+ domain name before sending a request to DNS server or displaying a
-+ reply from the server.
-+ If you'd like to turn off the IDN support for some reason, defines
-+ the <envar>IDN_DISABLE</envar> environment variable.
-+ The IDN support is disabled if the the variable is set when
-+ <command>dig</command> runs.
-+ </para>
-+ </refsect1>
-+
-+ <refsect1>
- <title>FILES</title>
- <para>
- <filename>/etc/resolv.conf</filename>
-Index: bin/dig/dighost.c
-diff -c mdn/othersrc/bind9/bin/dig/dighost.c:1.1.1.12 mdn/othersrc/bind9/bin/dig/dighost.c:1.32
-*** bin/dig/dighost.c Wed May 22 17:14:53 2002
---- bin/dig/dighost.c Mon May 27 12:10:15 2002
-***************
-*** 32,37 ****
---- 32,48 ----
- #include <string.h>
- #include <limits.h>
-
-+ #ifdef HAVE_LOCALE_H
-+ #include <locale.h>
-+ #endif
-+
-+ #ifdef WITH_IDN
-+ #include <idn/result.h>
-+ #include <idn/log.h>
-+ #include <idn/resconf.h>
-+ #include <idn/api.h>
-+ #endif
-+
- #include <dns/byaddr.h>
- #include <dns/fixedname.h>
- #include <dns/message.h>
-***************
-*** 130,135 ****
---- 141,158 ----
- isc_mutex_t lookup_lock;
- dig_lookup_t *current_lookup = NULL;
-
-+ #ifdef WITH_IDN
-+ static void initialize_idn(void);
-+ static isc_result_t output_filter(isc_buffer_t *buffer,
-+ unsigned int used_org,
-+ isc_boolean_t absolute);
-+ static idn_result_t append_textname(char *name, const char *origin,
-+ size_t namesize);
-+ static void idn_check_result(idn_result_t r, const char *msg);
-+
-+ #define MAXDLEN 256
-+ #endif
-+
- /*
- * Apply and clear locks at the event level in global task.
- * Can I get rid of these using shutdown events? XXX
-***************
-*** 648,653 ****
---- 671,680 ----
- ISC_LIST_APPEND(server_list, srv, link);
- }
-
-+ #ifdef WITH_IDN
-+ initialize_idn();
-+ #endif
-+
- if (keyfile[0] != 0)
- setup_file_key();
- else if (keysecret[0] != 0)
-***************
-*** 1168,1173 ****
---- 1195,1208 ----
- isc_buffer_t b;
- dns_compress_t cctx;
- char store[MXNAME];
-+ #ifdef WITH_IDN
-+ idn_result_t mr;
-+ char utf8_textname[MXNAME], utf8_origin[MXNAME], idn_textname[MXNAME];
-+ #endif
-+
-+ #ifdef WITH_IDN
-+ dns_name_settotextfilter(output_filter);
-+ #endif
-
- REQUIRE(lookup != NULL);
- INSIST(!free_now);
-***************
-*** 1196,1201 ****
---- 1231,1247 ----
- isc_buffer_init(&lookup->onamebuf, lookup->onamespace,
- sizeof(lookup->onamespace));
-
-+ #ifdef WITH_IDN
-+ /*
-+ * We cannot convert `textname' and `origin' separately.
-+ * `textname' doesn't contain TLD, but local mapping needs
-+ * TLD.
-+ */
-+ mr = idn_encodename(IDN_LOCALCONV | IDN_DELIMMAP, lookup->textname,
-+ utf8_textname, sizeof(utf8_textname));
-+ idn_check_result(mr, "convert textname to UTF-8");
-+ #endif
-+
- /*
- * If the name has too many dots, force the origin to be NULL
- * (which produces an absolute lookup). Otherwise, take the origin
-***************
-*** 1204,1215 ****
---- 1250,1290 ----
- * is TRUE or we got a domain line in the resolv.conf file.
- */
- /* XXX New search here? */
-+ #ifdef WITH_IDN
-+ if ((count_dots(utf8_textname) >= ndots) || !usesearch)
-+ lookup->origin = NULL; /* Force abs lookup */
-+ else if (lookup->origin == NULL && lookup->new_search && usesearch) {
-+ lookup->origin = ISC_LIST_HEAD(search_list);
-+ }
-+ #else
- if ((count_dots(lookup->textname) >= ndots) || !usesearch)
- lookup->origin = NULL; /* Force abs lookup */
- else if (lookup->origin == NULL && lookup->new_search && usesearch) {
- lookup->origin = ISC_LIST_HEAD(search_list);
- }
-+ #endif
-+
-+ #ifdef WITH_IDN
- if (lookup->origin != NULL) {
-+ mr = idn_encodename(IDN_LOCALCONV | IDN_DELIMMAP,
-+ lookup->origin->origin, utf8_origin,
-+ sizeof(utf8_origin));
-+ idn_check_result(mr, "convert origin to UTF-8");
-+ mr = append_textname(utf8_textname, utf8_origin,
-+ sizeof(utf8_textname));
-+ idn_check_result(mr, "append origin to textname");
-+ }
-+ mr = idn_encodename(IDN_LOCALMAP | IDN_NAMEPREP | IDN_ASCCHECK |
-+ IDN_IDNCONV | IDN_LENCHECK, utf8_textname,
-+ idn_textname, sizeof(idn_textname));
-+ idn_check_result(mr, "convert UTF-8 textname to IDN encoding");
-+ #endif
-+
-+ #ifdef WITH_IDN
-+ if (0) {
-+ #else
-+ if (lookup->origin != NULL) {
-+ #endif
- debug("trying origin %s", lookup->origin->origin);
- result = dns_message_gettempname(lookup->sendmsg,
- &lookup->oname);
-***************
-*** 1254,1259 ****
---- 1329,1343 ----
- if (lookup->trace && lookup->trace_root)
- dns_name_clone(dns_rootname, lookup->name);
- else {
-+ #ifdef WITH_IDN
-+ len = strlen(idn_textname);
-+ isc_buffer_init(&b, idn_textname, len);
-+ isc_buffer_add(&b, len);
-+ result = dns_name_fromtext(lookup->name, &b,
-+ dns_rootname,
-+ ISC_FALSE,
-+ &lookup->namebuf);
-+ #else
- len = strlen(lookup->textname);
- isc_buffer_init(&b, lookup->textname, len);
- isc_buffer_add(&b, len);
-***************
-*** 1261,1266 ****
---- 1345,1351 ----
- dns_rootname,
- ISC_FALSE,
- &lookup->namebuf);
-+ #endif
- }
- if (result != ISC_R_SUCCESS) {
- dns_message_puttempname(lookup->sendmsg,
-***************
-*** 2591,2593 ****
---- 2676,2776 ----
- if (mctx != NULL)
- isc_mem_destroy(&mctx);
- }
-+
-+ #ifdef WITH_IDN
-+ static void
-+ initialize_idn(void) {
-+ idn_result_t r;
-+
-+ #ifdef HAVE_SETLOCALE
-+ /* Set locale */
-+ (void)setlocale(LC_ALL, "");
-+ #endif
-+ /* Create configuration context. */
-+ r = idn_nameinit(1);
-+ if (r != idn_success)
-+ fatal("idn api initialization failed: %s",
-+ idn_result_tostring(r));
-+
-+ /* Set domain name -> text post-conversion filter. */
-+ dns_name_settotextfilter(output_filter);
-+ }
-+
-+ static isc_result_t
-+ output_filter(isc_buffer_t *buffer, unsigned int used_org,
-+ isc_boolean_t absolute)
-+ {
-+ char tmp1[MAXDLEN], tmp2[MAXDLEN];
-+ size_t fromlen, tolen;
-+ isc_boolean_t end_with_dot;
-+
-+ /*
-+ * Copy contents of 'buffer' to 'tmp1', supply trailing dot
-+ * if 'absolute' is true, and terminate with NUL.
-+ */
-+ fromlen = isc_buffer_usedlength(buffer) - used_org;
-+ if (fromlen >= MAXDLEN)
-+ return (ISC_R_SUCCESS);
-+ memcpy(tmp1, (char *)isc_buffer_base(buffer) + used_org, fromlen);
-+ end_with_dot = (tmp1[fromlen - 1] == '.') ? ISC_TRUE : ISC_FALSE;
-+ if (absolute && !end_with_dot) {
-+ fromlen++;
-+ if (fromlen >= MAXDLEN)
-+ return (ISC_R_SUCCESS);
-+ tmp1[fromlen - 1] = '.';
-+ }
-+ tmp1[fromlen] = '\0';
-+
-+ /*
-+ * Convert contents of 'tmp1' to local encoding.
-+ */
-+ if (idn_decodename(IDN_DECODE_APP, tmp1, tmp2, MAXDLEN) != idn_success)
-+ return (ISC_R_SUCCESS);
-+ strcpy(tmp1, tmp2);
-+
-+ /*
-+ * Copy the converted contents in 'tmp1' back to 'buffer'.
-+ * If we have appended trailing dot, remove it.
-+ */
-+ tolen = strlen(tmp1);
-+ if (absolute && !end_with_dot && tmp1[tolen - 1] == '.')
-+ tolen--;
-+
-+ if (isc_buffer_length(buffer) < used_org + tolen)
-+ return (ISC_R_NOSPACE);
-+
-+ isc_buffer_subtract(buffer, isc_buffer_usedlength(buffer) - used_org);
-+ memcpy(isc_buffer_used(buffer), tmp1, tolen);
-+ isc_buffer_add(buffer, tolen);
-+
-+ return (ISC_R_SUCCESS);
-+ }
-+
-+ static idn_result_t
-+ append_textname(char *name, const char *origin, size_t namesize) {
-+ size_t namelen = strlen(name);
-+ size_t originlen = strlen(origin);
-+
-+ /* Already absolute? */
-+ if (namelen > 0 && name[namelen - 1] == '.')
-+ return idn_success;
-+
-+ /* Append dot and origin */
-+
-+ if (namelen + 1 + originlen >= namesize)
-+ return idn_buffer_overflow;
-+
-+ name[namelen++] = '.';
-+ (void)strcpy(name + namelen, origin);
-+ return idn_success;
-+ }
-+
-+ static void
-+ idn_check_result(idn_result_t r, const char *msg) {
-+ if (r != idn_success) {
-+ exitcode = 1;
-+ fatal("%s: %s", msg, idn_result_tostring(r));
-+ }
-+ }
-+
-+ #endif /* WITH_IDN */
-Index: bin/dig/host.1
-diff -c mdn/othersrc/bind9/bin/dig/host.1:1.1.1.1 mdn/othersrc/bind9/bin/dig/host.1:1.3
-*** bin/dig/host.1 Tue Nov 27 16:55:51 2001
---- bin/dig/host.1 Tue Mar 19 16:45:36 2002
-***************
-*** 120,125 ****
---- 120,136 ----
- effectively wait forever for a reply. The time to wait for a response
- will be set to the number of seconds given by the hardware's maximum
- value for an integer quantity.
-+ .SH "IDN SUPPORT"
-+ .PP
-+ If \fBhost\fR has been built with IDN (internationalized
-+ domain name) support, it can accept and display non-ASCII domain names.
-+ \fBhost\fR appropriately converts character encoding of
-+ domain name before sending a request to DNS server or displaying a
-+ reply from the server.
-+ If you'd like to turn off the IDN support for some reason, defines
-+ the \fBIDN_DISABLE\fR environment variable.
-+ The IDN support is disabled if the the variable is set when
-+ \fBhost\fR runs.
- .SH "FILES"
- .PP
- \fI/etc/resolv.conf\fR
-Index: bin/dig/host.docbook
-diff -c mdn/othersrc/bind9/bin/dig/host.docbook:1.1.1.1 mdn/othersrc/bind9/bin/dig/host.docbook:1.3
-*** bin/dig/host.docbook Tue Nov 27 16:55:51 2001
---- bin/dig/host.docbook Tue Mar 19 16:45:36 2002
-***************
-*** 181,186 ****
---- 181,201 ----
- </refsect1>
-
- <refsect1>
-+ <title>IDN SUPPORT</title>
-+ <para>
-+ If <command>host</command> has been built with IDN (internationalized
-+ domain name) support, it can accept and display non-ASCII domain names.
-+ <command>host</command> appropriately converts character encoding of
-+ domain name before sending a request to DNS server or displaying a
-+ reply from the server.
-+ If you'd like to turn off the IDN support for some reason, defines
-+ the <envar>IDN_DISABLE</envar> environment variable.
-+ The IDN support is disabled if the the variable is set when
-+ <command>host</command> runs.
-+ </para>
-+ </refsect1>
-+
-+ <refsect1>
- <title>FILES</title>
- <para>
- <filename>/etc/resolv.conf</filename>
-Index: lib/dns/name.c
-diff -c mdn/othersrc/bind9/lib/dns/name.c:1.1.1.10 mdn/othersrc/bind9/lib/dns/name.c:1.14
-*** lib/dns/name.c Wed May 22 17:15:27 2002
---- lib/dns/name.c Mon May 27 12:10:15 2002
-***************
-*** 194,199 ****
---- 194,206 ----
- /* XXXDCL make const? */
- dns_name_t *dns_wildcardname = &wild;
-
-+ #ifdef WITH_IDN
-+ /*
-+ * dns_name_t to text post-conversion procedure.
-+ */
-+ static dns_name_totextfilter_t totext_filter_proc = NULL;
-+ #endif
-+
- static void
- set_offsets(const dns_name_t *name, unsigned char *offsets,
- dns_name_t *set_name);
-***************
-*** 1682,1687 ****
---- 1689,1697 ----
- unsigned int labels;
- isc_boolean_t saw_root = ISC_FALSE;
- char num[4];
-+ #ifdef WITH_IDN
-+ unsigned int oused = target->used;
-+ #endif
-
- /*
- * This function assumes the name is in proper uncompressed
-***************
-*** 1859,1864 ****
---- 1869,1878 ----
-
- isc_buffer_add(target, tlen - trem);
-
-+ #ifdef WITH_IDN
-+ if (totext_filter_proc != NULL)
-+ return ((*totext_filter_proc)(target, oused, saw_root));
-+ #endif
- return (ISC_R_SUCCESS);
- }
-
-***************
-*** 3315,3317 ****
---- 3329,3337 ----
- return (ISC_R_SUCCESS);
- }
-
-+ #ifdef WITH_IDN
-+ void
-+ dns_name_settotextfilter(dns_name_totextfilter_t proc) {
-+ totext_filter_proc = proc;
-+ }
-+ #endif
-Index: lib/dns/include/dns/name.h
-diff -c mdn/othersrc/bind9/lib/dns/include/dns/name.h:1.1.1.7 mdn/othersrc/bind9/lib/dns/include/dns/name.h:1.10
-*** lib/dns/include/dns/name.h Wed May 22 17:15:29 2002
---- lib/dns/include/dns/name.h Mon May 27 12:10:15 2002
-***************
-*** 219,224 ****
---- 219,235 ----
- */
- #define DNS_NAME_MAXWIRE 255
-
-+ #ifdef WITH_IDN
-+ /*
-+ * Text output filter procedure.
-+ * 'target' is the buffer to be converted. The region to be converted
-+ * is from 'buffer'->base + 'used_org' to the end of the used region.
-+ */
-+ typedef isc_result_t (*dns_name_totextfilter_t)(isc_buffer_t *target,
-+ unsigned int used_org,
-+ isc_boolean_t absolute);
-+ #endif
-+
- /***
- *** Initialization
- ***/
-***************
-*** 1244,1249 ****
---- 1255,1268 ----
- * 'size' > 0.
- *
- */
-+
-+ #ifdef WITH_IDN
-+ void
-+ dns_name_settotextfilter(dns_name_totextfilter_t proc);
-+ /*
-+ * Call 'proc' at the end of dns_name_totext.
-+ */
-+ #endif /* WITH_IDN */
-
- #define DNS_NAME_FORMATSIZE (DNS_NAME_MAXTEXT + 1)
- /*
diff --git a/contrib/idn/idnkit-1.0-src/patch/bind9/bind-9.2.2-patch b/contrib/idn/idnkit-1.0-src/patch/bind9/bind-9.2.2-patch
deleted file mode 100644
index 151f9dd9..00000000
--- a/contrib/idn/idnkit-1.0-src/patch/bind9/bind-9.2.2-patch
+++ /dev/null
@@ -1,1169 +0,0 @@
-IDN patch for bind-9.2.2
-========================
-
-
-This is a patch file for ISC BIND 9.2.2 to make it work with
-internationalized domain names. With this patch you'll get IDN-aware
-dig/host/nslookup.
-
-To apply this patch, you should go to the top directory of the BIND
-distribution (where you see `README' file), then invoke `patch'
-command like this:
-
- % patch -p0 < this-file
-
-Then follow the instructions described in `README.idnkit' to compile
-and install.
-
-
-Index: README.idnkit
-diff -c /dev/null mdn/othersrc/bind9/README.idnkit:1.3
-*** README.idnkit Tue Mar 11 08:55:20 2003
---- README.idnkit Mon Mar 10 09:47:41 2003
-***************
-*** 0 ****
---- 1,113 ----
-+
-+ BIND-9 IDN patch
-+
-+ Japan Network Information Center (JPNIC)
-+
-+
-+ * What is this patch for?
-+
-+ This patch adds internationalized domain name (IDN) support to BIND-9.
-+ You'll get internationalized version of dig/host/nslookup commands.
-+
-+ + internationalized dig/host/nslookup
-+ dig/host/nslookup accepts non-ASCII domain names in the local
-+ codeset (such as Shift JIS, Big5 or ISO8859-1) determined by
-+ the locale information. The domain names are normalized and
-+ converted to the encoding on the DNS protocol, and sent to DNS
-+ servers. The replies are converted back to the local codeset
-+ and displayed.
-+
-+
-+ * Compilation & installation
-+
-+ 0. Prerequisite
-+
-+ You have to build and install idnkit before building this patched version
-+ of bind-9.
-+
-+ 1. Running configure script
-+
-+ Run `configure' in the top directory. See `README' for the
-+ configuration options.
-+
-+ This patch adds the following 4 options to `configure'. You should
-+ at least specify `--with-idn' option to enable IDN support.
-+
-+ --with-idn[=IDN_PREFIX]
-+ To enable IDN support, you have to specify `--with-idn' option.
-+ The argument IDN_PREFIX is the install prefix of idnkit. If
-+ IDN_PREFIX is omitted, PREFIX (derived from `--prefix=PREFIX')
-+ is assumed.
-+
-+ --with-libiconv[=LIBICONV_PREFIX]
-+ Specify this option if idnkit you have installed links GNU
-+ libiconv. The argument LIBICONV_PREFIX is install prefix of
-+ GNU libiconv. If the argument is omitted, PREFIX (derived
-+ from `--prefix=PREFIX') is assumed.
-+
-+ `--with-libiconv' is shorthand option for GNU libiconv.
-+
-+ --with-libiconv=/usr/local
-+
-+ This is equivalent to:
-+
-+ --with-iconv='-L/usr/local/lib -R/usr/local/lib -liconv'
-+
-+ `--with-libiconv' assumes that your C compiler has `-R'
-+ option, and that the option adds the specified run-time path
-+ to an exacutable binary. If `-R' option of your compiler has
-+ different meaning, or your compiler lacks the option, you
-+ should use `--with-iconv' option instead. Binary command
-+ without run-time path information might be unexecutable.
-+ In that case, you would see an error message like:
-+
-+ error in loading shared libraries: libiconv.so.2: cannot
-+ open shared object file
-+
-+ If both `--with-libiconv' and `--with-iconv' options are
-+ specified, `--with-iconv' is prior to `--with-libiconv'.
-+
-+ --with-iconv=ICONV_LIBSPEC
-+ If your libc doens't provide iconv(), you need to specify the
-+ library containing iconv() with this option. `ICONV_LIBSPEC'
-+ is the argument(s) to `cc' or `ld' to link the library, for
-+ example, `--with-iconv="-L/usr/local/lib -liconv"'.
-+ You don't need to specify the header file directory for "iconv.h"
-+ to the compiler, as it isn't included directly by bind-9 with
-+ this patch.
-+
-+ --with-idnlib=IDN_LIBSPEC
-+ With this option, you can explicitly specify the argument(s)
-+ to `cc' or `ld' to link the idnkit's library, `libidnkit'. If
-+ this option is not specified, `-L${PREFIX}/lib -lidnkit' is
-+ assumed, where ${PREFIX} is the installation prefix specified
-+ with `--with-idn' option above. You may need to use this
-+ option to specify extra argments, for example,
-+ `--with-idnlib="-L/usr/local/lib -R/usr/local/lib -lidnkit"'.
-+
-+ Please consult `README' for other configuration options.
-+
-+ Note that if you want to specify some extra header file directories,
-+ you should use the environment variable STD_CINCLUDES instead of
-+ CFLAGS, as described in README.
-+
-+ 2. Compilation and installation
-+
-+ After running "configure", just do
-+
-+ make
-+ make install
-+
-+ for compiling and installing.
-+
-+
-+ * Contact information
-+
-+ Please see http//www.nic.ad.jp/en/idn/ for the latest news
-+ about idnkit and this patch.
-+
-+ Bug reports and comments on this kit should be sent to
-+ mdnkit-bugs@nic.ad.jp and idn-cmt@nic.ad.jp, respectively.
-+
-+
-+ ; $Id: bind-9.2.2-patch,v 1.1 2003/06/04 00:27:32 marka Exp $
-Index: config.h.in
-diff -c mdn/othersrc/bind9/config.h.in:1.1.1.6 mdn/othersrc/bind9/config.h.in:1.12
-*** config.h.in Tue Nov 27 16:55:45 2001
---- config.h.in Tue Mar 19 16:45:35 2002
-***************
-*** 141,146 ****
---- 141,149 ----
- /* define if you have strerror in the C library. */
- #undef HAVE_STRERROR
-
-+ /* Define if you have the setlocale function. */
-+ #undef HAVE_SETLOCALE
-+
- /* Define if you have the <dlfcn.h> header file. */
- #undef HAVE_DLFCN_H
-
-***************
-*** 150,155 ****
---- 153,161 ----
- /* Define if you have the <linux/capability.h> header file. */
- #undef HAVE_LINUX_CAPABILITY_H
-
-+ /* Define if you have the <locale.h> header file. */
-+ #undef HAVE_LOCALE_H
-+
- /* Define if you have the <sys/prctl.h> header file. */
- #undef HAVE_SYS_PRCTL_H
-
-***************
-*** 176,178 ****
---- 182,188 ----
-
- /* Define if you have the socket library (-lsocket). */
- #undef HAVE_LIBSOCKET
-+
-+ /* define if idnkit support is to be included. */
-+ #undef WITH_IDN
-+
-Index: configure
-diff -c mdn/othersrc/bind9/configure:1.1.1.10 mdn/othersrc/bind9/configure:1.16
-*** configure Wed Mar 5 17:14:55 2003
---- configure Thu Mar 6 20:10:05 2003
-***************
-*** 1007,1012 ****
---- 1007,1016 ----
- --with-gnu-ld assume the C compiler uses GNU ld default=no
- --with-pic try to use only PIC/non-PIC objects default=use both
- --with-kame=PATH use Kame IPv6 default path /usr/local/v6
-+ --with-idn=MPREFIX enable IDN support using idnkit default PREFIX
-+ --with-libiconv=IPREFIX GNU libiconv are in IPREFIX default PREFIX
-+ --with-iconv=LIBSPEC specify iconv library default -liconv
-+ --with-idnlib=ARG specify libidnkit
-
- Some influential environment variables:
- CC C compiler command
-***************
-*** 7371,7377 ****
- case $host in
- *-*-irix6*)
- # Find out which ABI we are using.
-! echo '#line 7374 "configure"' > conftest.$ac_ext
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
---- 7375,7381 ----
- case $host in
- *-*-irix6*)
- # Find out which ABI we are using.
-! echo '#line 7378 "configure"' > conftest.$ac_ext
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
-***************
-*** 7914,7920 ****
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -o out/conftest2.$ac_objext"
- compiler_c_o=no
-! if { (eval echo configure:7917: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s out/conftest.err; then
---- 7918,7924 ----
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -o out/conftest2.$ac_objext"
- compiler_c_o=no
-! if { (eval echo configure:7921: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s out/conftest.err; then
-***************
-*** 9599,9605 ****
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<EOF
-! #line 9602 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
---- 9603,9609 ----
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<EOF
-! #line 9606 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-***************
-*** 9697,9703 ****
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<EOF
-! #line 9700 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
---- 9701,9707 ----
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<EOF
-! #line 9704 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-***************
-*** 13265,13270 ****
---- 13269,13580 ----
-
-
- #
-+ # IDN support
-+ #
-+
-+ # Check whether --with-idn or --without-idn was given.
-+ if test "${with_idn+set}" = set; then
-+ withval="$with_idn"
-+ use_idn="$withval"
-+ else
-+ use_idn="no"
-+ fi;
-+ case "$use_idn" in
-+ yes)
-+ if test X$prefix = XNONE ; then
-+ idn_path=/usr/local
-+ else
-+ idn_path=$prefix
-+ fi
-+ ;;
-+ no)
-+ ;;
-+ *)
-+ idn_path="$use_idn"
-+ ;;
-+ esac
-+
-+ iconvinc=
-+ iconvlib=
-+
-+ # Check whether --with-libiconv or --without-libiconv was given.
-+ if test "${with_libiconv+set}" = set; then
-+ withval="$with_libiconv"
-+ use_libiconv="$withval"
-+ else
-+ use_libiconv="no"
-+ fi;
-+ case "$use_libiconv" in
-+ yes)
-+ if test X$prefix = XNONE ; then
-+ iconvlib="-L/usr/local/lib -R/usr/local/lib -liconv"
-+ else
-+ iconvlib="-L$prefix/lib -R$prefix/lib -liconv"
-+ fi
-+ ;;
-+ no)
-+ iconvlib=
-+ ;;
-+ *)
-+ iconvlib="-L$use_libiconv/lib -R$use_libiconv/lib -liconv"
-+ ;;
-+ esac
-+
-+
-+ # Check whether --with-iconv or --without-iconv was given.
-+ if test "${with_iconv+set}" = set; then
-+ withval="$with_iconv"
-+ iconvlib="$withval"
-+ fi;
-+ case "$iconvlib" in
-+ no)
-+ iconvlib=
-+ ;;
-+ yes)
-+ iconvlib=-liconv
-+ ;;
-+ esac
-+
-+
-+ # Check whether --with-idnlib or --without-idnlib was given.
-+ if test "${with_idnlib+set}" = set; then
-+ withval="$with_idnlib"
-+ idnlib="$withval"
-+ else
-+ idnlib="no"
-+ fi;
-+ if test "$idnlib" = yes; then
-+ { { echo "$as_me:$LINENO: error: You must specify ARG for --with-idnlib." >&5
-+ echo "$as_me: error: You must specify ARG for --with-idnlib." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+
-+ IDNLIBS=
-+ if test "$use_idn" != no; then
-+
-+ cat >>confdefs.h <<\_ACEOF
-+ #define WITH_IDN 1
-+ _ACEOF
-+
-+ STD_CINCLUDES="$STD_CINCLUDES -I$idn_path/include"
-+ if test "$idnlib" != no; then
-+ IDNLIBS="$idnlib $iconvlib"
-+ else
-+ IDNLIBS="-L$idn_path/lib -lidnkit $iconvlib"
-+ fi
-+ fi
-+
-+
-+
-+ for ac_header in locale.h
-+ do
-+ as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-+ if eval "test \"\${$as_ac_Header+set}\" = set"; then
-+ echo "$as_me:$LINENO: checking for $ac_header" >&5
-+ echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-+ if eval "test \"\${$as_ac_Header+set}\" = set"; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+ fi
-+ echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-+ echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-+ else
-+ # Is the header compilable?
-+ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-+ echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-+ cat >conftest.$ac_ext <<_ACEOF
-+ #line $LINENO "configure"
-+ #include "confdefs.h"
-+ $ac_includes_default
-+ #include <$ac_header>
-+ _ACEOF
-+ rm -f conftest.$ac_objext
-+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_header_compiler=yes
-+ else
-+ echo "$as_me: failed program was:" >&5
-+ cat conftest.$ac_ext >&5
-+ ac_header_compiler=no
-+ fi
-+ rm -f conftest.$ac_objext conftest.$ac_ext
-+ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-+ echo "${ECHO_T}$ac_header_compiler" >&6
-+
-+ # Is the header present?
-+ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-+ echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-+ cat >conftest.$ac_ext <<_ACEOF
-+ #line $LINENO "configure"
-+ #include "confdefs.h"
-+ #include <$ac_header>
-+ _ACEOF
-+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-+ ac_status=$?
-+ egrep -v '^ *\+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } >/dev/null; then
-+ if test -s conftest.err; then
-+ ac_cpp_err=$ac_c_preproc_warn_flag
-+ else
-+ ac_cpp_err=
-+ fi
-+ else
-+ ac_cpp_err=yes
-+ fi
-+ if test -z "$ac_cpp_err"; then
-+ ac_header_preproc=yes
-+ else
-+ echo "$as_me: failed program was:" >&5
-+ cat conftest.$ac_ext >&5
-+ ac_header_preproc=no
-+ fi
-+ rm -f conftest.err conftest.$ac_ext
-+ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-+ echo "${ECHO_T}$ac_header_preproc" >&6
-+
-+ # So? What about this header?
-+ case $ac_header_compiler:$ac_header_preproc in
-+ yes:no )
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-+ echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-+ echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
-+ no:yes )
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-+ echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-+ echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-+ echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
-+ esac
-+ echo "$as_me:$LINENO: checking for $ac_header" >&5
-+ echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-+ if eval "test \"\${$as_ac_Header+set}\" = set"; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+ else
-+ eval "$as_ac_Header=$ac_header_preproc"
-+ fi
-+ echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-+ echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-+
-+ fi
-+ if test `eval echo '${'$as_ac_Header'}'` = yes; then
-+ cat >>confdefs.h <<_ACEOF
-+ #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-+ _ACEOF
-+
-+ fi
-+
-+ done
-+
-+
-+ for ac_func in setlocale
-+ do
-+ as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-+ echo "$as_me:$LINENO: checking for $ac_func" >&5
-+ echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-+ if eval "test \"\${$as_ac_var+set}\" = set"; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+ else
-+ cat >conftest.$ac_ext <<_ACEOF
-+ #line $LINENO "configure"
-+ #include "confdefs.h"
-+ /* From autoconf 2.57 */
-+ /* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
-+ #define $ac_func innocuous_$ac_func
-+
-+ /* System header to define __stub macros and hopefully few prototypes,
-+ which can conflict with char $ac_func (); below.
-+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-+ <limits.h> exists even on freestanding compilers. */
-+
-+ #ifdef __STDC__
-+ # include <limits.h>
-+ #else
-+ # include <assert.h>
-+ #endif
-+
-+ #undef $ac_func
-+
-+ /* Override any gcc2 internal prototype to avoid an error. */
-+ #ifdef __cplusplus
-+ extern "C"
-+ {
-+ #endif
-+ /* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+ char $ac_func ();
-+ /* The GNU C library defines this for functions which it implements
-+ to always fail with ENOSYS. Some functions are actually named
-+ something starting with __ and the normal name is an alias. */
-+ #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-+ choke me
-+ #else
-+ char (*f) () = $ac_func;
-+ #endif
-+ #ifdef __cplusplus
-+ }
-+ #endif
-+
-+ #ifdef F77_DUMMY_MAIN
-+ # ifdef __cplusplus
-+ extern "C"
-+ # endif
-+ int F77_DUMMY_MAIN() { return 1; }
-+ #endif
-+ int
-+ main ()
-+ {
-+ return f != $ac_func;
-+ ;
-+ return 0;
-+ }
-+ _ACEOF
-+ rm -f conftest.$ac_objext conftest$ac_exeext
-+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ eval "$as_ac_var=yes"
-+ else
-+ echo "$as_me: failed program was:" >&5
-+ cat conftest.$ac_ext >&5
-+ eval "$as_ac_var=no"
-+ fi
-+ rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-+ fi
-+ echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-+ echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-+ if test `eval echo '${'$as_ac_var'}'` = yes; then
-+ cat >>confdefs.h <<_ACEOF
-+ #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-+ _ACEOF
-+
-+ fi
-+ done
-+
-+
-+ #
- # Substitutions
- #
-
-***************
-*** 14061,14066 ****
---- 14371,14377 ----
- s,@PRINTSTYLE@,$PRINTSTYLE,;t t
- s,@XMLDCL@,$XMLDCL,;t t
- s,@DOCBOOK2MANSPEC@,$DOCBOOK2MANSPEC,;t t
-+ s,@IDNLIBS@,$IDNLIBS,;t t
- s,@BIND9_TOP_BUILDDIR@,$BIND9_TOP_BUILDDIR,;t t
- s,@BIND9_ISC_BUILDINCLUDE@,$BIND9_ISC_BUILDINCLUDE,;t t
- s,@BIND9_ISCCC_BUILDINCLUDE@,$BIND9_ISCCC_BUILDINCLUDE,;t t
-Index: configure.in
-diff -c mdn/othersrc/bind9/configure.in:1.1.1.10 mdn/othersrc/bind9/configure.in:1.16
-*** configure.in Wed Mar 5 17:14:56 2003
---- configure.in Wed Mar 5 17:37:08 2003
-***************
-*** 1681,1686 ****
---- 1681,1762 ----
- NOM_PATH_FILE(DOCBOOK2MANSPEC, docbook2X/docbook2man-spec.pl, $sgmltrees)
-
- #
-+ # IDN support
-+ #
-+ AC_ARG_WITH(idn,
-+ [ --with-idn[=MPREFIX] enable IDN support using idnkit [default PREFIX]],
-+ use_idn="$withval", use_idn="no")
-+ case "$use_idn" in
-+ yes)
-+ if test X$prefix = XNONE ; then
-+ idn_path=/usr/local
-+ else
-+ idn_path=$prefix
-+ fi
-+ ;;
-+ no)
-+ ;;
-+ *)
-+ idn_path="$use_idn"
-+ ;;
-+ esac
-+
-+ iconvinc=
-+ iconvlib=
-+ AC_ARG_WITH(libiconv,
-+ [ --with-libiconv[=IPREFIX] GNU libiconv are in IPREFIX [default PREFIX]],
-+ use_libiconv="$withval", use_libiconv="no")
-+ case "$use_libiconv" in
-+ yes)
-+ if test X$prefix = XNONE ; then
-+ iconvlib="-L/usr/local/lib -R/usr/local/lib -liconv"
-+ else
-+ iconvlib="-L$prefix/lib -R$prefix/lib -liconv"
-+ fi
-+ ;;
-+ no)
-+ iconvlib=
-+ ;;
-+ *)
-+ iconvlib="-L$use_libiconv/lib -R$use_libiconv/lib -liconv"
-+ ;;
-+ esac
-+
-+ AC_ARG_WITH(iconv,
-+ [ --with-iconv[=LIBSPEC] specify iconv library [default -liconv]],
-+ iconvlib="$withval")
-+ case "$iconvlib" in
-+ no)
-+ iconvlib=
-+ ;;
-+ yes)
-+ iconvlib=-liconv
-+ ;;
-+ esac
-+
-+ AC_ARG_WITH(idnlib,
-+ [ --with-idnlib=ARG specify libidnkit],
-+ idnlib="$withval", idnlib="no")
-+ if test "$idnlib" = yes; then
-+ AC_MSG_ERROR([You must specify ARG for --with-idnlib.])
-+ fi
-+
-+ IDNLIBS=
-+ if test "$use_idn" != no; then
-+ AC_DEFINE(WITH_IDN, 1, [define if idnkit support is to be included.])
-+ STD_CINCLUDES="$STD_CINCLUDES -I$idn_path/include"
-+ if test "$idnlib" != no; then
-+ IDNLIBS="$idnlib $iconvlib"
-+ else
-+ IDNLIBS="-L$idn_path/lib -lidnkit $iconvlib"
-+ fi
-+ fi
-+ AC_SUBST(IDNLIBS)
-+
-+ AC_CHECK_HEADERS(locale.h)
-+ AC_CHECK_FUNCS(setlocale)
-+
-+ #
- # Substitutions
- #
- AC_SUBST(BIND9_TOP_BUILDDIR)
-Index: bin/dig/Makefile.in
-diff -c mdn/othersrc/bind9/bin/dig/Makefile.in:1.1.1.6 mdn/othersrc/bind9/bin/dig/Makefile.in:1.3
-*** bin/dig/Makefile.in Tue Nov 27 16:55:50 2001
---- bin/dig/Makefile.in Tue Mar 19 16:45:35 2002
-***************
-*** 36,42 ****
-
- DEPLIBS = ${DNSDEPLIBS} ${ISCDEPLIBS}
-
-! LIBS = ${DNSLIBS} ${ISCLIBS} @LIBS@
-
- SUBDIRS =
-
---- 36,42 ----
-
- DEPLIBS = ${DNSDEPLIBS} ${ISCDEPLIBS}
-
-! LIBS = ${DNSLIBS} ${ISCLIBS} @IDNLIBS@ @LIBS@
-
- SUBDIRS =
-
-Index: bin/dig/dig.1
-diff -c mdn/othersrc/bind9/bin/dig/dig.1:1.1.1.3 mdn/othersrc/bind9/bin/dig/dig.1:1.5
-*** bin/dig/dig.1 Wed Mar 5 17:14:57 2003
---- bin/dig/dig.1 Wed Mar 5 17:42:53 2003
-***************
-*** 349,354 ****
---- 349,365 ----
- \fI+noqr\fR which means that \fBdig\fR
- will not print the initial query when it looks up the NS records for
- isc.org.
-+ .SH "IDN SUPPORT"
-+ .PP
-+ If \fBdig\fR has been built with IDN (internationalized
-+ domain name) support, it can accept and display non-ASCII domain names.
-+ \fBdig\fR appropriately converts character encoding of
-+ domain name before sending a request to DNS server or displaying a
-+ reply from the server.
-+ If you'd like to turn off the IDN support for some reason, defines
-+ the \fBIDN_DISABLE\fR environment variable.
-+ The IDN support is disabled if the the variable is set when
-+ \fBdig\fR runs.
- .SH "FILES"
- .PP
- \fI/etc/resolv.conf\fR
-Index: bin/dig/dig.docbook
-diff -c mdn/othersrc/bind9/bin/dig/dig.docbook:1.1.1.3 mdn/othersrc/bind9/bin/dig/dig.docbook:1.5
-*** bin/dig/dig.docbook Wed Mar 5 17:14:57 2003
---- bin/dig/dig.docbook Wed Mar 5 17:42:53 2003
-***************
-*** 523,528 ****
---- 523,543 ----
- </refsect1>
-
- <refsect1>
-+ <title>IDN SUPPORT</title>
-+ <para>
-+ If <command>dig</command> has been built with IDN (internationalized
-+ domain name) support, it can accept and display non-ASCII domain names.
-+ <command>dig</command> appropriately converts character encoding of
-+ domain name before sending a request to DNS server or displaying a
-+ reply from the server.
-+ If you'd like to turn off the IDN support for some reason, defines
-+ the <envar>IDN_DISABLE</envar> environment variable.
-+ The IDN support is disabled if the the variable is set when
-+ <command>dig</command> runs.
-+ </para>
-+ </refsect1>
-+
-+ <refsect1>
- <title>FILES</title>
- <para>
- <filename>/etc/resolv.conf</filename>
-Index: bin/dig/dighost.c
-diff -c mdn/othersrc/bind9/bin/dig/dighost.c:1.1.1.13 mdn/othersrc/bind9/bin/dig/dighost.c:1.33
-*** bin/dig/dighost.c Wed Mar 5 17:14:57 2003
---- bin/dig/dighost.c Wed Mar 5 17:42:53 2003
-***************
-*** 32,37 ****
---- 32,48 ----
- #include <string.h>
- #include <limits.h>
-
-+ #ifdef HAVE_LOCALE_H
-+ #include <locale.h>
-+ #endif
-+
-+ #ifdef WITH_IDN
-+ #include <idn/result.h>
-+ #include <idn/log.h>
-+ #include <idn/resconf.h>
-+ #include <idn/api.h>
-+ #endif
-+
- #include <dns/byaddr.h>
- #include <dns/fixedname.h>
- #include <dns/message.h>
-***************
-*** 130,135 ****
---- 141,158 ----
- isc_mutex_t lookup_lock;
- dig_lookup_t *current_lookup = NULL;
-
-+ #ifdef WITH_IDN
-+ static void initialize_idn(void);
-+ static isc_result_t output_filter(isc_buffer_t *buffer,
-+ unsigned int used_org,
-+ isc_boolean_t absolute);
-+ static idn_result_t append_textname(char *name, const char *origin,
-+ size_t namesize);
-+ static void idn_check_result(idn_result_t r, const char *msg);
-+
-+ #define MAXDLEN 256
-+ #endif
-+
- /*
- * Apply and clear locks at the event level in global task.
- * Can I get rid of these using shutdown events? XXX
-***************
-*** 648,653 ****
---- 671,680 ----
- ISC_LIST_APPEND(server_list, srv, link);
- }
-
-+ #ifdef WITH_IDN
-+ initialize_idn();
-+ #endif
-+
- if (keyfile[0] != 0)
- setup_file_key();
- else if (keysecret[0] != 0)
-***************
-*** 1168,1173 ****
---- 1195,1208 ----
- isc_buffer_t b;
- dns_compress_t cctx;
- char store[MXNAME];
-+ #ifdef WITH_IDN
-+ idn_result_t mr;
-+ char utf8_textname[MXNAME], utf8_origin[MXNAME], idn_textname[MXNAME];
-+ #endif
-+
-+ #ifdef WITH_IDN
-+ dns_name_settotextfilter(output_filter);
-+ #endif
-
- REQUIRE(lookup != NULL);
- INSIST(!free_now);
-***************
-*** 1196,1201 ****
---- 1231,1247 ----
- isc_buffer_init(&lookup->onamebuf, lookup->onamespace,
- sizeof(lookup->onamespace));
-
-+ #ifdef WITH_IDN
-+ /*
-+ * We cannot convert `textname' and `origin' separately.
-+ * `textname' doesn't contain TLD, but local mapping needs
-+ * TLD.
-+ */
-+ mr = idn_encodename(IDN_LOCALCONV | IDN_DELIMMAP, lookup->textname,
-+ utf8_textname, sizeof(utf8_textname));
-+ idn_check_result(mr, "convert textname to UTF-8");
-+ #endif
-+
- /*
- * If the name has too many dots, force the origin to be NULL
- * (which produces an absolute lookup). Otherwise, take the origin
-***************
-*** 1204,1215 ****
---- 1250,1290 ----
- * is TRUE or we got a domain line in the resolv.conf file.
- */
- /* XXX New search here? */
-+ #ifdef WITH_IDN
-+ if ((count_dots(utf8_textname) >= ndots) || !usesearch)
-+ lookup->origin = NULL; /* Force abs lookup */
-+ else if (lookup->origin == NULL && lookup->new_search && usesearch) {
-+ lookup->origin = ISC_LIST_HEAD(search_list);
-+ }
-+ #else
- if ((count_dots(lookup->textname) >= ndots) || !usesearch)
- lookup->origin = NULL; /* Force abs lookup */
- else if (lookup->origin == NULL && lookup->new_search && usesearch) {
- lookup->origin = ISC_LIST_HEAD(search_list);
- }
-+ #endif
-+
-+ #ifdef WITH_IDN
- if (lookup->origin != NULL) {
-+ mr = idn_encodename(IDN_LOCALCONV | IDN_DELIMMAP,
-+ lookup->origin->origin, utf8_origin,
-+ sizeof(utf8_origin));
-+ idn_check_result(mr, "convert origin to UTF-8");
-+ mr = append_textname(utf8_textname, utf8_origin,
-+ sizeof(utf8_textname));
-+ idn_check_result(mr, "append origin to textname");
-+ }
-+ mr = idn_encodename(IDN_LOCALMAP | IDN_NAMEPREP | IDN_ASCCHECK |
-+ IDN_IDNCONV | IDN_LENCHECK, utf8_textname,
-+ idn_textname, sizeof(idn_textname));
-+ idn_check_result(mr, "convert UTF-8 textname to IDN encoding");
-+ #endif
-+
-+ #ifdef WITH_IDN
-+ if (0) {
-+ #else
-+ if (lookup->origin != NULL) {
-+ #endif
- debug("trying origin %s", lookup->origin->origin);
- result = dns_message_gettempname(lookup->sendmsg,
- &lookup->oname);
-***************
-*** 1254,1259 ****
---- 1329,1343 ----
- if (lookup->trace && lookup->trace_root)
- dns_name_clone(dns_rootname, lookup->name);
- else {
-+ #ifdef WITH_IDN
-+ len = strlen(idn_textname);
-+ isc_buffer_init(&b, idn_textname, len);
-+ isc_buffer_add(&b, len);
-+ result = dns_name_fromtext(lookup->name, &b,
-+ dns_rootname,
-+ ISC_FALSE,
-+ &lookup->namebuf);
-+ #else
- len = strlen(lookup->textname);
- isc_buffer_init(&b, lookup->textname, len);
- isc_buffer_add(&b, len);
-***************
-*** 1261,1266 ****
---- 1345,1351 ----
- dns_rootname,
- ISC_FALSE,
- &lookup->namebuf);
-+ #endif
- }
- if (result != ISC_R_SUCCESS) {
- dns_message_puttempname(lookup->sendmsg,
-***************
-*** 2663,2665 ****
---- 2748,2848 ----
- if (mctx != NULL)
- isc_mem_destroy(&mctx);
- }
-+
-+ #ifdef WITH_IDN
-+ static void
-+ initialize_idn(void) {
-+ idn_result_t r;
-+
-+ #ifdef HAVE_SETLOCALE
-+ /* Set locale */
-+ (void)setlocale(LC_ALL, "");
-+ #endif
-+ /* Create configuration context. */
-+ r = idn_nameinit(1);
-+ if (r != idn_success)
-+ fatal("idn api initialization failed: %s",
-+ idn_result_tostring(r));
-+
-+ /* Set domain name -> text post-conversion filter. */
-+ dns_name_settotextfilter(output_filter);
-+ }
-+
-+ static isc_result_t
-+ output_filter(isc_buffer_t *buffer, unsigned int used_org,
-+ isc_boolean_t absolute)
-+ {
-+ char tmp1[MAXDLEN], tmp2[MAXDLEN];
-+ size_t fromlen, tolen;
-+ isc_boolean_t end_with_dot;
-+
-+ /*
-+ * Copy contents of 'buffer' to 'tmp1', supply trailing dot
-+ * if 'absolute' is true, and terminate with NUL.
-+ */
-+ fromlen = isc_buffer_usedlength(buffer) - used_org;
-+ if (fromlen >= MAXDLEN)
-+ return (ISC_R_SUCCESS);
-+ memcpy(tmp1, (char *)isc_buffer_base(buffer) + used_org, fromlen);
-+ end_with_dot = (tmp1[fromlen - 1] == '.') ? ISC_TRUE : ISC_FALSE;
-+ if (absolute && !end_with_dot) {
-+ fromlen++;
-+ if (fromlen >= MAXDLEN)
-+ return (ISC_R_SUCCESS);
-+ tmp1[fromlen - 1] = '.';
-+ }
-+ tmp1[fromlen] = '\0';
-+
-+ /*
-+ * Convert contents of 'tmp1' to local encoding.
-+ */
-+ if (idn_decodename(IDN_DECODE_APP, tmp1, tmp2, MAXDLEN) != idn_success)
-+ return (ISC_R_SUCCESS);
-+ strcpy(tmp1, tmp2);
-+
-+ /*
-+ * Copy the converted contents in 'tmp1' back to 'buffer'.
-+ * If we have appended trailing dot, remove it.
-+ */
-+ tolen = strlen(tmp1);
-+ if (absolute && !end_with_dot && tmp1[tolen - 1] == '.')
-+ tolen--;
-+
-+ if (isc_buffer_length(buffer) < used_org + tolen)
-+ return (ISC_R_NOSPACE);
-+
-+ isc_buffer_subtract(buffer, isc_buffer_usedlength(buffer) - used_org);
-+ memcpy(isc_buffer_used(buffer), tmp1, tolen);
-+ isc_buffer_add(buffer, tolen);
-+
-+ return (ISC_R_SUCCESS);
-+ }
-+
-+ static idn_result_t
-+ append_textname(char *name, const char *origin, size_t namesize) {
-+ size_t namelen = strlen(name);
-+ size_t originlen = strlen(origin);
-+
-+ /* Already absolute? */
-+ if (namelen > 0 && name[namelen - 1] == '.')
-+ return idn_success;
-+
-+ /* Append dot and origin */
-+
-+ if (namelen + 1 + originlen >= namesize)
-+ return idn_buffer_overflow;
-+
-+ name[namelen++] = '.';
-+ (void)strcpy(name + namelen, origin);
-+ return idn_success;
-+ }
-+
-+ static void
-+ idn_check_result(idn_result_t r, const char *msg) {
-+ if (r != idn_success) {
-+ exitcode = 1;
-+ fatal("%s: %s", msg, idn_result_tostring(r));
-+ }
-+ }
-+
-+ #endif /* WITH_IDN */
-Index: bin/dig/host.1
-diff -c mdn/othersrc/bind9/bin/dig/host.1:1.1.1.2 mdn/othersrc/bind9/bin/dig/host.1:1.4
-*** bin/dig/host.1 Wed Mar 5 17:14:57 2003
---- bin/dig/host.1 Wed Mar 5 17:42:53 2003
-***************
-*** 120,125 ****
---- 120,136 ----
- effectively wait forever for a reply. The time to wait for a response
- will be set to the number of seconds given by the hardware's maximum
- value for an integer quantity.
-+ .SH "IDN SUPPORT"
-+ .PP
-+ If \fBhost\fR has been built with IDN (internationalized
-+ domain name) support, it can accept and display non-ASCII domain names.
-+ \fBhost\fR appropriately converts character encoding of
-+ domain name before sending a request to DNS server or displaying a
-+ reply from the server.
-+ If you'd like to turn off the IDN support for some reason, defines
-+ the \fBIDN_DISABLE\fR environment variable.
-+ The IDN support is disabled if the the variable is set when
-+ \fBhost\fR runs.
- .SH "FILES"
- .PP
- \fI/etc/resolv.conf\fR
-Index: bin/dig/host.docbook
-diff -c mdn/othersrc/bind9/bin/dig/host.docbook:1.1.1.2 mdn/othersrc/bind9/bin/dig/host.docbook:1.4
-*** bin/dig/host.docbook Wed Mar 5 17:14:57 2003
---- bin/dig/host.docbook Wed Mar 5 17:42:53 2003
-***************
-*** 181,186 ****
---- 181,201 ----
- </refsect1>
-
- <refsect1>
-+ <title>IDN SUPPORT</title>
-+ <para>
-+ If <command>host</command> has been built with IDN (internationalized
-+ domain name) support, it can accept and display non-ASCII domain names.
-+ <command>host</command> appropriately converts character encoding of
-+ domain name before sending a request to DNS server or displaying a
-+ reply from the server.
-+ If you'd like to turn off the IDN support for some reason, defines
-+ the <envar>IDN_DISABLE</envar> environment variable.
-+ The IDN support is disabled if the the variable is set when
-+ <command>host</command> runs.
-+ </para>
-+ </refsect1>
-+
-+ <refsect1>
- <title>FILES</title>
- <para>
- <filename>/etc/resolv.conf</filename>
-Index: lib/dns/name.c
-diff -c mdn/othersrc/bind9/lib/dns/name.c:1.1.1.11 mdn/othersrc/bind9/lib/dns/name.c:1.15
-*** lib/dns/name.c Wed Mar 5 17:16:22 2003
---- lib/dns/name.c Wed Mar 5 17:49:58 2003
-***************
-*** 194,199 ****
---- 194,206 ----
- /* XXXDCL make const? */
- dns_name_t *dns_wildcardname = &wild;
-
-+ #ifdef WITH_IDN
-+ /*
-+ * dns_name_t to text post-conversion procedure.
-+ */
-+ static dns_name_totextfilter_t totext_filter_proc = NULL;
-+ #endif
-+
- static void
- set_offsets(const dns_name_t *name, unsigned char *offsets,
- dns_name_t *set_name);
-***************
-*** 1684,1689 ****
---- 1691,1699 ----
- unsigned int labels;
- isc_boolean_t saw_root = ISC_FALSE;
- char num[4];
-+ #ifdef WITH_IDN
-+ unsigned int oused = target->used;
-+ #endif
-
- /*
- * This function assumes the name is in proper uncompressed
-***************
-*** 1861,1866 ****
---- 1871,1880 ----
-
- isc_buffer_add(target, tlen - trem);
-
-+ #ifdef WITH_IDN
-+ if (totext_filter_proc != NULL)
-+ return ((*totext_filter_proc)(target, oused, saw_root));
-+ #endif
- return (ISC_R_SUCCESS);
- }
-
-***************
-*** 3325,3327 ****
---- 3339,3347 ----
- return (ISC_R_SUCCESS);
- }
-
-+ #ifdef WITH_IDN
-+ void
-+ dns_name_settotextfilter(dns_name_totextfilter_t proc) {
-+ totext_filter_proc = proc;
-+ }
-+ #endif
-Index: lib/dns/include/dns/name.h
-diff -c mdn/othersrc/bind9/lib/dns/include/dns/name.h:1.1.1.7 mdn/othersrc/bind9/lib/dns/include/dns/name.h:1.10
-*** lib/dns/include/dns/name.h Wed May 22 17:15:29 2002
---- lib/dns/include/dns/name.h Mon May 27 12:10:15 2002
-***************
-*** 219,224 ****
---- 219,235 ----
- */
- #define DNS_NAME_MAXWIRE 255
-
-+ #ifdef WITH_IDN
-+ /*
-+ * Text output filter procedure.
-+ * 'target' is the buffer to be converted. The region to be converted
-+ * is from 'buffer'->base + 'used_org' to the end of the used region.
-+ */
-+ typedef isc_result_t (*dns_name_totextfilter_t)(isc_buffer_t *target,
-+ unsigned int used_org,
-+ isc_boolean_t absolute);
-+ #endif
-+
- /***
- *** Initialization
- ***/
-***************
-*** 1244,1249 ****
---- 1255,1268 ----
- * 'size' > 0.
- *
- */
-+
-+ #ifdef WITH_IDN
-+ void
-+ dns_name_settotextfilter(dns_name_totextfilter_t proc);
-+ /*
-+ * Call 'proc' at the end of dns_name_totext.
-+ */
-+ #endif /* WITH_IDN */
-
- #define DNS_NAME_FORMATSIZE (DNS_NAME_MAXTEXT + 1)
- /*
diff --git a/contrib/idn/idnkit-1.0-src/tools/Makefile.in b/contrib/idn/idnkit-1.0-src/tools/Makefile.in
deleted file mode 100644
index 4ccc7e9d..00000000
--- a/contrib/idn/idnkit-1.0-src/tools/Makefile.in
+++ /dev/null
@@ -1,65 +0,0 @@
-# $Id: Makefile.in,v 1.1 2003/06/04 00:27:05 marka Exp $
-# Copyright (c) 2000 Japan Network Information Center. All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-SUBDIRS = idnconv runidn
-
-SHELL = @SHELL@
-
-all: all-subdirs
-install: install-subdirs
-clean: clean-subdirs
-distclean: distclean-localdir distclean-subdirs
-test check: test-subdirs
-
-all-subdirs install-subdirs clean-subdirs distclean-subdirs test-subdirs:
- @target=`echo $@ | sed 's/-subdirs$$//'`; \
- for d in $(SUBDIRS); do \
- (cd $$d; $(MAKE) DESTDIR=$(DESTDIR) $$target); \
- done
-
-distclean-localdir:
- rm -f Makefile
diff --git a/contrib/idn/idnkit-1.0-src/tools/idnconv/Makefile.in b/contrib/idn/idnkit-1.0-src/tools/idnconv/Makefile.in
deleted file mode 100644
index 72af9136..00000000
--- a/contrib/idn/idnkit-1.0-src/tools/idnconv/Makefile.in
+++ /dev/null
@@ -1,116 +0,0 @@
-# $Id: Makefile.in,v 1.1 2003/06/04 00:27:05 marka Exp $
-# Copyright (c) 2000, 2002 Japan Network Information Center.
-# All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-top_builddir = ../..
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-mandir = @mandir@
-man1dir = $(mandir)/man1
-
-CC = @CC@
-RANLIB = @RANLIB@
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-MKINSTALLDIRS = @top_srcdir@/mkinstalldirs
-SHELL = @SHELL@
-LIBTOOL = @LIBTOOL@
-
-ICONVINC = @ICONVINC@
-ICONVLIB = @ICONVLIB@
-IDNLIB = ../../lib/libidnkit.la
-
-INCS = -I$(srcdir) -I$(srcdir)/../../include -I../../include $(ICONVINC)
-DEFS =
-
-CFLAGS = $(INCS) $(DEFS) @CPPFLAGS@ @CFLAGS@
-LDFLAGS = @LDFLAGS@
-
-SRCS = idnconv.c util.c selectiveencode.c
-OBJS = idnconv.o util.o selectiveencode.o
-
-@LITEONLY_TRUE@all:
-@LITEONLY_FALSE@all: idnconv idnslookup idnconv.1
-
-idnconv: $(OBJS) $(IDNLIB)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ \
- $(OBJS) $(IDNLIB) $(ICONVLIB)
-
-idnslookup: $(srcdir)/idnslookup.in
- sed -e 's%[@]bindir[@]%$(bindir)%' $(srcdir)/idnslookup.in > idnslookup
- chmod 0755 idnslookup
-
-@LITEONLY_TRUE@install:
-@LITEONLY_FALSE@@COMPAT_TRUE@install: all install-nolite install-compat
-@LITEONLY_FALSE@@COMPAT_FALSE@install: all install-nolite
-
-install-nolite:
- $(MKINSTALLDIRS) $(DESTDIR)$(bindir)
- $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) idnconv \
- $(DESTDIR)$(bindir)/idnconv
- $(MKINSTALLDIRS) $(DESTDIR)$(man1dir)
- $(INSTALL_DATA) $(srcdir)/idnconv.1 $(DESTDIR)$(man1dir)/idnconv.1
-
-install-compat:
- src=$(DESTDIR)$(bindir)/idnconv; \
- dst=$(DESTDIR)$(bindir)/mdnconv; \
- rm -f $$dst; \
- ln $$src $$dst || cp $$src $$dst
- src=$(DESTDIR)$(man1dir)/idnconv.1; \
- dst=$(DESTDIR)$(man1dir)/mdnconv.1; \
- rm -f $$dst; \
- ln $$src $$dst || cp $$src $$dst
-
-clean:
- rm -f *.o idnconv idnslookup *.core core *~
- rm -fr .libs/
-
-distclean: clean
- rm -f Makefile
-
-test check:
diff --git a/contrib/idn/idnkit-1.0-src/tools/idnconv/idnconv.1 b/contrib/idn/idnkit-1.0-src/tools/idnconv/idnconv.1
deleted file mode 100644
index 3ffe6b87..00000000
--- a/contrib/idn/idnkit-1.0-src/tools/idnconv/idnconv.1
+++ /dev/null
@@ -1,373 +0,0 @@
-.\" $Id: idnconv.1,v 1.1 2003/06/04 00:27:10 marka Exp $
-.\"
-.\" Copyright (c) 2000,2001,2002 Japan Network Information Center.
-.\" All rights reserved.
-.\"
-.\" By using this file, you agree to the terms and conditions set forth bellow.
-.\"
-.\" LICENSE TERMS AND CONDITIONS
-.\"
-.\" The following License Terms and Conditions apply, unless a different
-.\" license is obtained from Japan Network Information Center ("JPNIC"),
-.\" a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-.\" Chiyoda-ku, Tokyo 101-0047, Japan.
-.\"
-.\" 1. Use, Modification and Redistribution (including distribution of any
-.\" modified or derived work) in source and/or binary forms is permitted
-.\" under this License Terms and Conditions.
-.\"
-.\" 2. Redistribution of source code must retain the copyright notices as they
-.\" appear in each source code file, this License Terms and Conditions.
-.\"
-.\" 3. Redistribution in binary form must reproduce the Copyright Notice,
-.\" this License Terms and Conditions, in the documentation and/or other
-.\" materials provided with the distribution. For the purposes of binary
-.\" distribution the "Copyright Notice" refers to the following language:
-.\" "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-.\"
-.\" 4. The name of JPNIC may not be used to endorse or promote products
-.\" derived from this Software without specific prior written approval of
-.\" JPNIC.
-.\"
-.\" 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-.\" PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-.\" BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-.\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-.\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-.\"
-.TH IDNCONV 1 "Mar 3, 2001"
-.\"
-.SH NAME
-idnconv \- codeset converter for named.conf and zone master files
-.\"
-.SH SYNOPSIS
-\fBidnconv\fP [\fIoptions..\fP] [\fIfile\fP...]
-.\"
-.SH DESCRIPTION
-\fBidnconv\fR is a codeset converter for named configuration files
-and zone master files.
-\fBidnconv\fR performs codeset conversion specified either
-by the command-line arguments or by the configuration file,
-and writes the converted text to stdout.
-.PP
-If file name is specified, \fBidnconv\fR converts the contents of
-the file.
-Otherwise, \fBidnconv\fR converts \fIstdin\fR.
-.PP
-Since \fBidnconv\fR is specifically designed for converting
-internatinalized domain names, it may not be suitable as a general
-codeset converter.
-.\"
-.SH "OPERATION MODES"
-\fBidnconv\fR has two operation modes.
-.PP
-One is a mode to convert local-encoded domain names to IDN-encoded
-one. Usually this mode is used for preparing domain names to be
-listed in named configuration files or zone master files.
-In this mode, the following processes are performed in addition to
-the codeset (encoding) conversion.
-.RS 2
-.IP \- 2
-local mapping
-.IP \- 2
-standard domain name preperation (NAMEPREP)
-.RE
-.PP
-The other mode is a reverse conversion, from IDN-encoded domain name to
-local-encoded domain names.
-In this mode, local mapping and NAMEPREP are not performed since
-IDN-encoded names should already be normalized.
-Instead, a check is done in order to make sure the IDN-encoded domain name
-is properly NAMEPREP'ed. If it is not, the name will be output in
-IDN encoding, not in the local encoding.
-.\"
-.SH OPTIONS
-Normally \fBidnconv\fR reads system's default configuration file
-(idn.conf) and performs conversion or name preparation according to
-the parameters specified in the file.
-You can override the setting in the configuration file by various
-command line options below.
-.TP 4
-\fB\-in\fP \fIin-code\fP, \fB\-i\fP \fIin-code\fP
-Specify the codeset name of the input text.
-Any of the following codeset names can be specified.
-.RS 4
-.IP "\(bu" 2
-Any codeset names which \fIiconv_open()\fP library function accepts
-.IP "\(bu" 2
-\f(CWPunycode\fR
-.IP "\(bu" 2
-\f(CWUTF-8\fR
-.IP "\(bu" 2
-Any alias names for the above, defined by the codeset alias file.
-.RE
-.IP "" 4
-If this option is not specified, the default codeset is determined
-from the locale in normal conversion mode.
-In reverse conversion mode, the default codeset is the IDN encoding
-specified by the configuration file (``idn-encoding'' entry).
-.TP 4
-\fB\-out\fP \fIout-code\fP, \fB\-o\fP \fIout-code\fP
-Specify the codeset name of the output text. \fIout-code\fP can be any
-codeset name that can be specified for \fB\-in\fR option.
-.IP "" 4
-If this option is not specified, the default is the IDN encoding
-specified by the configuration file (``idn-encoding'' entry) in
-normal conversion mode.
-In reverse conversion mode, the default codeset is determined from
-the locale.
-.TP 4
-\fB\-conf\fP \fIpath\fP, \fB\-c\fP \fIpath\fP
-Specify the pathname of idnkit configuration file (``idn.conf'').
-If not specified, system's default file is used, unless \-noconf
-option is specified.
-.TP 4
-\fB\-noconf\fP, \fB\-C\fP
-Specify that no configuration file is to be used.
-.TP 4
-\fB\-reverse\fP, \fB\-r\fP
-Specify reverse conversion mode.
-.br
-If this option is not specified, the normal conversion mode is used.
-.TP 4
-\fB\-nameprep\fR \fIversion\fR, \fB\-n\fR \fIversion\fR
-Specify the version of NAMEPREP.
-The following is a list of currently available versions.
-.RS 4
-.IP \f(CWRFC3491\fR 4
-Perform NAMEPREP according to the RFC3491
-``rfc-3491.txt''.
-.RE
-.TP 4
-\fB\-nonameprep\fR, \fB\-N\fR
-Specify to skip NAMEPREP process (or NAMEPREP verification process
-in the reverse conversion mode).
-This option implies -nounassigncheck and -nobidicheck.
-.TP 4
-\fB\-localmap\fR \fImap\fR
-Specify the name of local mapping rule.
-Currently, following maps are available.
-.RS 4
-.IP \f(CWRFC3491\fR 4
-Use the list of mappings specified by RFC3491.
-.IP \f(CWfilemap:\fR\fIpath\fR 4
-Use list of mappings specified by mapfile \fIpath\fR.
-See idn.conf(5) for the format of a mapfile.
-.RE
-.IP "" 4
-This option can be specified more than once.
-In that case, each mapping will be performed in the order of the
-specification.
-.TP 4
-\fB\-nounassigncheck\fR, \fB\-U\fR
-Skip unassigned codepoint check.
-.TP 4
-\fB\-nobidicheck\fR, \fB\-B\fR
-Skip bidi character check.
-.TP 4
-\fB\-nolengthcheck\fR
-Do not check label length of normal conversion result.
-This option is only meaningful in the normal conversion mode.
-.TP 4
-\fB\-noasciicheck\fR, \fB\-A\fR
-Do not check ASCII range characters.
-This option is only meaningful in the normal conversion mode.
-.TP 4
-\fB\-noroundtripcheck\fR
-Do not perform round trip check.
-This option is only meaningful in the reverse conversion mode.
-.TP 4
-\fB\-delimiter\fR \fIcodepoint\fP
-Specify the character to be mapped to domain name delimiter (period).
-This option can be specified more than once in order to specify multiple
-characters.
-.br
-This option is only meaningful in the normal conversion mode.
-.TP 4
-\fB\-whole\fP, \fB\-w\fP
-Perform local mapping, nameprep and conversion to output codeset for the entire
-input text. If this option is not specified, only non-ASCII characters
-and their surrounding texts will be processed.
-See ``NORAML CONVERSION MECHANISM'' and ``REVERSE CONVERSION MECHANISM''
-for details.
-.TP 4
-\fB\-alias\fP \fIpath\fP, \fB\-a\fP \fIpath\fP
-Specify a codeset alias file. It is a simple text file, where
-each line has a pair of alias name and real name separated by one
-or more white spaces like below:
-.nf
-.ft CW
-
- \fIalias-codeset-name\fP \fIreal-codeset-name\fP
-
-.ft R
-.fi
-Lines starting with ``#'' are treated as comments.
-.TP 4
-\fB\-flush\fP
-Force line-buffering mode.
-.TP 4
-\fB\-version\fP, \fB\-v\fP
-Print version information and quit.
-.\"
-.SH LOCAL CODESET
-idnconv guesses local codeset from locale and environment variables.
-See the ``LOCAL CODESET'' section in idn.conf(5) for more details.
-.\"
-.SH NORMAL CONVERSION MECHANISM
-\fBidnconv\fR performs conversion line by line.
-Here describes how \fBidnconv\fR does its job for each line.
-.\"
-.IP "1. read a line from input text" 4
-.IP "2. convert the line to UTF-8" 4
-\fBidnconv\fR converts the line from local encoding to UTF-8.
-.IP "3. find internationalized domain names" 4
-If the \-whole\ (or \-w) option is specified, the entire line is
-assumed as an internationalized domain name.
-Otherwise, \fBidnconv\fR recognizes any character sequences having
-the following properties in the line as internationalized domain names.
-.RS 4
-.IP "\(bu" 2
-containing at least one non-ASCII character, and
-.IP "\(bu" 2
-consisting of legal domain name characters (alphabets, digits, hypens),
-non-ASCII characters and period.
-.RE
-.IP "4. convert internationalized domain names to ACE" 4
-For each internationalized domain name found in the line,
-\fBidnconv\fR converts the name to ACE.
-The details about the conversion procedure is:
-.RS 4
-.IP "4.1. delimiter mapping" 4
-Substibute certain characters specified as domain name delimiter
-with period.
-.IP "4.2. local mapping" 4
-Perform local mapping.
-If the local mapping is specified by command line option \-localmap,
-the specified mapping rule is applied. Otherwise, find the mapping rule
-from the configuration file which matches to the TLD of the name,
-and perform mapping according to the matched rule.
-.br
-This step is skipped if the \-nolocalmap (or \-L) option is specified.
-.IP "4.3. NAMEPREP" 4
-Perform name preparation (NAMEPREP).
-Mapping, normalization, prohibited character checking, unassigned
-codepoint checking, bidirectional character checking are done in
-that order.
-If the prohibited character check, unassigned codepoint check, or
-bidi character check fails, the normal conversion procedure aborts.
-.br
-This step is skipped if the \-nonameprep (or \-N) option is specified.
-.IP "4.4. ASCII character checking" 4
-Checks ASCII range character in the domain name.
-the normal conversion procedure aborts, if the domain name has a label
-beginning or end with hyphen (U+002D) or it contains ASCII range character
-except for alphanumeric and hyphen,
-.br
-This step is skipped if the \-noasciicheck (or \-A) option is specified.
-.IP "4.5. ACE conversion" 4
-Convert the string to ACE.
-.IP "4.6. label length checking" 4
-The normal conversion procedure aborts, if the domain name has an empty
-label or too long label (64 characters or more).
-.br
-This step is skipped if the \-nolengthcheck option is specified.
-.RE
-.IP "5. output the result" 4
-.PP
-.\"
-.SH REVERSE CONVERSION MECHANISM
-This is like the normal conversion mechanism, but they are not symmetric.
-\fBidnconv\fR does its job for each line.
-.\"
-.IP "1. read a line from input text" 4
-.IP "2. convert the line to UTF-8" 4
-\fBidnconv\fR converts the line from local encoding to UTF-8.
-.IP "3. find internationalized domain names" 4
-If the \-whole\ (or \-w) option is specified, the entire line is
-assumed as an internationalized domain name.
-Otherwise, \fBidnconv\fR decodes any valid ASCII domain names
-including ACE names in the line.
-.IP "4. convert domain names to local encoding"
-Then, \fBidnconv\fR decodes the domain names.
-The decode procedure consists of the following steps.
-.RS 4
-.IP "4.1. Delimiter mapping" 4
-Substibute certain characters specified as domain name delimiter
-with period.
-.br
-.IP "4.2. NAMEPREP" 4
-Perform name preparation (NAMEPREP) for each label in the domain name.
-Mapping, normalization, prohibited character checking, unassigned
-codepoint checking, bidirectional character checking are done in
-that order.
-If the prohibited character check, unassigned codepoint check, or
-bidi character check fails, disqualified labels are restored to
-original input strings and further conversion on those labels are
-not performed.
-.br
-This step is skipped if the \-nonameprep (or \-N) option is specified.
-.IP "4.3. ACE conversion" 4
-Convert the string from ACE to UTF-8.
-.IP "4.4. Round trip checkning" 4
-For each label, perform the normal conversion and compare it with
-the result of the step 4.2.
-This check succeeds, if they are equivalent strings.
-In case of failure, disqualified labels are restored to original
-input strings and further conversion on those labels are not
-performed.
-.br
-This step is skipped if the \-noroundtripcheck option is specified.
-.IP "4.5. local encoding conversion" 4
-Convert the result of the step 4.3. from UTF-8 to local encoding.
-If a label in the domain name contains a character which cannot be
-represented in the local encoding, the label is restored to the
-original input string.
-.RE
-.IP "5. output the result" 4
-.PP
-.\"
-.SH FILE MANAGEMENT
-Maybe the best way to manage named.conf or zone master files that contains
-internationalized domain name is to keep them in your local codeset so that
-they can be edited with your favorite editor, and generate a version in
-the IDN encoding using \fBidnconv\fP.
-.PP
-`make' is a convenient tool for this purpose.
-Suppose the local codeset version has suffix `.lc', and its ACE version
-has suffix `.ace'. The following Makefile enables you to generate
-ACE version from local codeset version by just typing `make'.
-.RS 4
-.nf
-.ft CW
-
-\&.SUFFIXES: .lc .ace
-\&.lc.ace:
- idnconv -in $(LOCALCODE) -out $(IDNCODE) \\
- $(IDNCONVOPT) $< > $@
-
-LOCALCODE = EUC-JP
-IDNCODE = Punycode
-IDNCONVOPT =
-
-DESTFILES = db.zone1.ace db.zone2.ace
-
-all: $(DESTFILES)
-.ft
-.fi
-.RE
-.\"
-.SH SEE ALSO
-idn.conf(5),
-iconv(3)
-.\"
-.SH BUGS
-The automatic input-code selection depends on your system, and sometimes
-it cannot guess or guess wrong. It is better to explicitly specify it
-using \-in option.
diff --git a/contrib/idn/idnkit-1.0-src/tools/idnconv/idnconv.c b/contrib/idn/idnkit-1.0-src/tools/idnconv/idnconv.c
deleted file mode 100644
index f14fddcc..00000000
--- a/contrib/idn/idnkit-1.0-src/tools/idnconv/idnconv.c
+++ /dev/null
@@ -1,803 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: idnconv.c,v 1.1 2003/06/04 00:27:07 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2000,2001,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-/*
- * idnconv -- Codeset converter for named.conf and zone files
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#ifdef HAVE_LOCALE_H
-#include <locale.h>
-#endif
-
-#include <idn/result.h>
-#include <idn/converter.h>
-#include <idn/normalizer.h>
-#include <idn/utf8.h>
-#include <idn/resconf.h>
-#include <idn/res.h>
-#include <idn/util.h>
-#include <idn/version.h>
-
-#include "util.h"
-
-#define MAX_DELIMITER 10
-#define MAX_LOCALMAPPER 10
-#define MAX_MAPPER 10
-#define MAX_NORMALIZER 10
-#define MAX_CHEKER 10
-
-#define FLAG_REVERSE 0x0001
-#define FLAG_DELIMMAP 0x0002
-#define FLAG_LOCALMAP 0x0004
-#define FLAG_MAP 0x0008
-#define FLAG_NORMALIZE 0x0010
-#define FLAG_PROHIBITCHECK 0x0020
-#define FLAG_UNASSIGNCHECK 0x0040
-#define FLAG_BIDICHECK 0x0080
-#define FLAG_ASCIICHECK 0x0100
-#define FLAG_LENGTHCHECK 0x0200
-#define FLAG_ROUNDTRIPCHECK 0x0400
-#define FLAG_SELECTIVE 0x0800
-
-#define FLAG_NAMEPREP \
- (FLAG_MAP|FLAG_NORMALIZE|FLAG_PROHIBITCHECK|FLAG_UNASSIGNCHECK|\
- FLAG_BIDICHECK)
-
-#define DEFAULT_FLAGS \
- (FLAG_LOCALMAP|FLAG_NAMEPREP|FLAG_ASCIICHECK|FLAG_LENGTHCHECK|\
- FLAG_ROUNDTRIPCHECK|FLAG_SELECTIVE|FLAG_DELIMMAP)
-
-int line_number; /* current input file line number */
-static int flush_every_line = 0; /* pretty obvious */
-
-static int encode_file(idn_resconf_t conf1, idn_resconf_t conf2,
- FILE *fp, int flags);
-static int decode_file(idn_resconf_t conf1, idn_resconf_t conf2,
- FILE *fp, int flags);
-static int trim_newline(idnconv_strbuf_t *buf);
-static idn_result_t convert_line(idnconv_strbuf_t *from,
- idnconv_strbuf_t *to,
- idn_resconf_t conf,
- idn_action_t actions, int flags);
-static void print_usage(char *cmd);
-static void print_version(void);
-static unsigned long get_ucs(const char *p);
-
-int
-main(int ac, char **av) {
- char *cmd = *av;
- char *cname;
- unsigned long delimiters[MAX_DELIMITER];
- char *localmappers[MAX_LOCALMAPPER];
- char *nameprep_version = NULL;
- int ndelimiters = 0;
- int nlocalmappers = 0;
- char *in_code = NULL;
- char *out_code = NULL;
- char *resconf_file = NULL;
- int no_resconf = 0;
- char *encoding_alias = NULL;
- int flags = DEFAULT_FLAGS;
- FILE *fp;
- idn_result_t r;
- idn_resconf_t resconf1, resconf2;
- idn_converter_t conv;
- int exit_value;
-
-#ifdef HAVE_SETLOCALE
- (void)setlocale(LC_ALL, "");
-#endif
-
- /*
- * If the command name begins with 'r', reverse mode is assumed.
- */
- if ((cname = strrchr(cmd, '/')) != NULL)
- cname++;
- else
- cname = cmd;
- if (cname[0] == 'r')
- flags |= FLAG_REVERSE;
-
- ac--;
- av++;
- while (ac > 0 && **av == '-') {
-
-#define OPT_MATCH(opt) (strcmp(*av, opt) == 0)
-#define MUST_HAVE_ARG if (ac < 2) print_usage(cmd)
-#define APPEND_LIST(array, size, item, what) \
- if (size >= (sizeof(array) / sizeof(array[0]))) { \
- errormsg("too many " what "\n"); \
- exit(1); \
- } \
- array[size++] = item; \
- ac--; av++
-
- if (OPT_MATCH("-in") || OPT_MATCH("-i")) {
- MUST_HAVE_ARG;
- in_code = av[1];
- ac--;
- av++;
- } else if (OPT_MATCH("-out") || OPT_MATCH("-o")) {
- MUST_HAVE_ARG;
- out_code = av[1];
- ac--;
- av++;
- } else if (OPT_MATCH("-conf") || OPT_MATCH("-c")) {
- MUST_HAVE_ARG;
- resconf_file = av[1];
- ac--;
- av++;
- } else if (OPT_MATCH("-nameprep") || OPT_MATCH("-n")) {
- MUST_HAVE_ARG;
- nameprep_version = av[1];
- ac--;
- av++;
- } else if (OPT_MATCH("-noconf") || OPT_MATCH("-C")) {
- no_resconf = 1;
- } else if (OPT_MATCH("-reverse") || OPT_MATCH("-r")) {
- flags |= FLAG_REVERSE;
- } else if (OPT_MATCH("-nolocalmap") || OPT_MATCH("-L")) {
- flags &= ~FLAG_LOCALMAP;
- } else if (OPT_MATCH("-nonameprep") || OPT_MATCH("-N")) {
- flags &= ~FLAG_NAMEPREP;
- } else if (OPT_MATCH("-unassigncheck") || OPT_MATCH("-u")) {
- flags |= FLAG_UNASSIGNCHECK;
- } else if (OPT_MATCH("-nounassigncheck") || OPT_MATCH("-U")) {
- flags &= ~FLAG_UNASSIGNCHECK;
- } else if (OPT_MATCH("-nobidicheck") || OPT_MATCH("-B")) {
- flags &= ~FLAG_BIDICHECK;
- } else if (OPT_MATCH("-noasciicheck") || OPT_MATCH("-A")) {
- flags &= ~FLAG_ASCIICHECK;
- } else if (OPT_MATCH("-nolengthcheck")) {
- flags &= ~FLAG_LENGTHCHECK;
- } else if (OPT_MATCH("-noroundtripcheck")) {
- flags &= ~FLAG_ROUNDTRIPCHECK;
- } else if (OPT_MATCH("-whole") || OPT_MATCH("-w")) {
- flags &= ~FLAG_SELECTIVE;
- } else if (OPT_MATCH("-localmap")) {
- MUST_HAVE_ARG;
- APPEND_LIST(localmappers, nlocalmappers, av[1],
- "local maps");
- } else if (OPT_MATCH("-delimiter")) {
- unsigned long v;
- MUST_HAVE_ARG;
- v = get_ucs(av[1]);
- APPEND_LIST(delimiters, ndelimiters, v,
- "delimiter maps");
- } else if (OPT_MATCH("-alias") || OPT_MATCH("-a")) {
- MUST_HAVE_ARG;
- encoding_alias = av[1];
- ac--;
- av++;
- } else if (OPT_MATCH("-flush")) {
- flush_every_line = 1;
- } else if (OPT_MATCH("-version") || OPT_MATCH("-v")) {
- print_version();
- } else {
- print_usage(cmd);
- }
-#undef OPT_MATCH
-#undef MUST_HAVE_ARG
-#undef APPEND_LIST
-
- ac--;
- av++;
- }
-
- if (ac > 1)
- print_usage(cmd);
-
- /* Initialize. */
- if ((r = idn_resconf_initialize()) != idn_success) {
- errormsg("error initializing library\n");
- return (1);
- }
-
- /*
- * Create resource contexts.
- * `resconf1' and `resconf2' are almost the same but local and
- * IDN encodings are reversed.
- */
- resconf1 = NULL;
- resconf2 = NULL;
- if (idn_resconf_create(&resconf1) != idn_success ||
- idn_resconf_create(&resconf2) != idn_success) {
- errormsg("error initializing configuration contexts\n");
- return (1);
- }
-
- /* Load configuration file. */
- if (no_resconf) {
- set_defaults(resconf1);
- set_defaults(resconf2);
- } else {
- load_conf_file(resconf1, resconf_file);
- load_conf_file(resconf2, resconf_file);
- }
-
- /* Set encoding alias file. */
- if (encoding_alias != NULL)
- set_encoding_alias(encoding_alias);
-
- /* Set input codeset. */
- if (flags & FLAG_REVERSE) {
- if (in_code == NULL) {
- conv = idn_resconf_getidnconverter(resconf1);
- if (conv == NULL) {
- errormsg("cannot get the IDN encoding.\n"
- "please specify an appropriate one "
- "with `-in' option.\n");
- exit(1);
- }
- idn_resconf_setlocalconverter(resconf2, conv);
- idn_converter_destroy(conv);
- } else {
- set_idncode(resconf1, in_code);
- set_localcode(resconf2, in_code);
- }
- } else {
- if (in_code == NULL) {
- conv = idn_resconf_getlocalconverter(resconf1);
- if (conv == NULL) {
- errormsg("cannot get the local encoding.\n"
- "please specify an appropriate one "
- "with `-in' option.\n");
- exit(1);
- }
- idn_resconf_setidnconverter(resconf2, conv);
- idn_converter_destroy(conv);
- } else {
- set_localcode(resconf1, in_code);
- set_idncode(resconf2, in_code);
- }
- }
-
- /* Set output codeset. */
- if (flags & FLAG_REVERSE) {
- if (out_code == NULL) {
- conv = idn_resconf_getlocalconverter(resconf1);
- if (conv == NULL) {
- errormsg("cannot get the local encoding.\n"
- "please specify an appropriate one "
- "with `-out' option.\n");
- exit(1);
- }
- idn_resconf_setidnconverter(resconf2, conv);
- idn_converter_destroy(conv);
- } else {
- set_localcode(resconf1, out_code);
- set_idncode(resconf2, out_code);
- }
- } else {
- if (out_code == NULL) {
- conv = idn_resconf_getidnconverter(resconf1);
- if (conv == NULL) {
- errormsg("cannot get the IDN encoding.\n"
- "please specify an appropriate one "
- "with `-out' option.\n");
- exit(1);
- }
- idn_resconf_setlocalconverter(resconf2, conv);
- idn_converter_destroy(conv);
- } else {
- set_idncode(resconf1, out_code);
- set_localcode(resconf2, out_code);
- }
- }
-
- /* Set delimiter map(s). */
- if (ndelimiters > 0) {
- set_delimitermapper(resconf1, delimiters, ndelimiters);
- set_delimitermapper(resconf2, delimiters, ndelimiters);
- }
-
- /* Set local map(s). */
- if (nlocalmappers > 0) {
- set_localmapper(resconf1, localmappers, nlocalmappers);
- set_localmapper(resconf2, localmappers, nlocalmappers);
- }
-
- /* Set NAMEPREP version. */
- if (nameprep_version != NULL) {
- set_nameprep(resconf1, nameprep_version);
- set_nameprep(resconf2, nameprep_version);
- }
-
- idn_res_enable(1);
-
- /* Open input file. */
- if (ac > 0) {
- if ((fp = fopen(av[0], "r")) == NULL) {
- errormsg("cannot open file %s: %s\n",
- av[0], strerror(errno));
- return (1);
- }
- } else {
- fp = stdin;
- }
-
- /* Do the conversion. */
- if (flags & FLAG_REVERSE)
- exit_value = decode_file(resconf1, resconf2, fp, flags);
- else
- exit_value = encode_file(resconf1, resconf2, fp, flags);
-
- idn_resconf_destroy(resconf1);
- idn_resconf_destroy(resconf2);
-
- return exit_value;
-}
-
-static int
-encode_file(idn_resconf_t conf1, idn_resconf_t conf2, FILE *fp, int flags) {
- idn_result_t r;
- idnconv_strbuf_t buf1, buf2;
- idn_action_t actions1, actions2;
- int nl_trimmed;
- int local_ace_hack;
- idn_converter_t conv;
-
- /*
- * See if the input codeset is an ACE.
- */
- conv = idn_resconf_getlocalconverter(conf1);
- if (conv != NULL && idn_converter_isasciicompatible(conv) &&
- (flags & FLAG_SELECTIVE))
- local_ace_hack = 1;
- else
- local_ace_hack = 0;
- if (conv != NULL)
- idn_converter_destroy(conv);
-
- if (local_ace_hack) {
- actions1 = IDN_IDNCONV;
- if (flags & FLAG_ROUNDTRIPCHECK)
- actions1 |= IDN_RTCHECK;
- } else {
- actions1 = IDN_LOCALCONV;
- }
-
- actions2 = IDN_IDNCONV;
- if (flags & FLAG_DELIMMAP)
- actions2 |= IDN_DELIMMAP;
- if (flags & FLAG_LOCALMAP)
- actions2 |= IDN_LOCALMAP;
- if (flags & FLAG_MAP)
- actions2 |= IDN_MAP;
- if (flags & FLAG_NORMALIZE)
- actions2 |= IDN_NORMALIZE;
- if (flags & FLAG_PROHIBITCHECK)
- actions2 |= IDN_PROHCHECK;
- if (flags & FLAG_UNASSIGNCHECK)
- actions2 |= IDN_UNASCHECK;
- if (flags & FLAG_BIDICHECK)
- actions2 |= IDN_BIDICHECK;
- if (flags & FLAG_ASCIICHECK)
- actions2 |= IDN_ASCCHECK;
- if (flags & FLAG_LENGTHCHECK)
- actions2 |= IDN_LENCHECK;
-
- strbuf_init(&buf1);
- strbuf_init(&buf2);
- line_number = 1;
- while (strbuf_getline(&buf1, fp) != NULL) {
- /*
- * Trim newline at the end. This is needed for
- * those ascii-comatible encodings such as UTF-5 or RACE
- * not to try converting newlines, which will result
- * in `invalid encoding' error.
- */
- nl_trimmed = trim_newline(&buf1);
-
- /*
- * Convert input line to UTF-8.
- */
- if (local_ace_hack)
- r = convert_line(&buf1, &buf2, conf2, actions1,
- FLAG_REVERSE|FLAG_SELECTIVE);
- else
- r = convert_line(&buf1, &buf2, conf1, actions1,
- 0);
-
- if (r != idn_success) {
- errormsg("conversion failed at line %d: %s\n",
- line_number,
- idn_result_tostring(r));
- goto error;
- }
- if (!idn_utf8_isvalidstring(strbuf_get(&buf2))) {
- errormsg("conversion to utf-8 failed at line %d\n",
- line_number);
- goto error;
- }
-
- /*
- * Perform local mapping and NAMEPREP, and convert to
- * the output codeset.
- */
- r = convert_line(&buf2, &buf1, conf1, actions2,
- flags & FLAG_SELECTIVE);
-
- if (r != idn_success) {
- errormsg("error in nameprep or output conversion "
- "at line %d: %s\n",
- line_number, idn_result_tostring(r));
- goto error;
- }
-
- fputs(strbuf_get(&buf1), stdout);
- if (nl_trimmed)
- putc('\n', stdout);
-
- if (flush_every_line)
- fflush(stdout);
-
- line_number++;
- }
-
- strbuf_reset(&buf1);
- strbuf_reset(&buf2);
- return (0);
-
- error:
- strbuf_reset(&buf1);
- strbuf_reset(&buf2);
- return (1);
-}
-
-static int
-decode_file(idn_resconf_t conf1, idn_resconf_t conf2, FILE *fp, int flags) {
- idn_result_t r;
- idnconv_strbuf_t buf1, buf2;
- idn_action_t actions1, actions2;
- int nl_trimmed;
- int local_ace_hack, idn_ace_hack;
- idn_converter_t conv;
-
- /*
- * See if the input codeset is an ACE.
- */
- conv = idn_resconf_getidnconverter(conf1);
- if (conv != NULL && idn_converter_isasciicompatible(conv) &&
- (flags & FLAG_SELECTIVE))
- idn_ace_hack = 1;
- else
- idn_ace_hack = 0;
- if (conv != NULL)
- idn_converter_destroy(conv);
-
- conv = idn_resconf_getlocalconverter(conf1);
- if (conv != NULL && idn_converter_isasciicompatible(conv) &&
- (flags & FLAG_SELECTIVE))
- local_ace_hack = 1;
- else
- local_ace_hack = 0;
- if (conv != NULL)
- idn_converter_destroy(conv);
-
- actions1 = IDN_IDNCONV;
-
- if (local_ace_hack) {
- actions2 = IDN_IDNCONV;
- if (flags & FLAG_MAP)
- actions2 |= IDN_MAP;
- if (flags & FLAG_NORMALIZE)
- actions2 |= IDN_NORMALIZE;
- if (flags & FLAG_PROHIBITCHECK)
- actions2 |= IDN_PROHCHECK;
- if (flags & FLAG_UNASSIGNCHECK)
- actions2 |= IDN_UNASCHECK;
- if (flags & FLAG_BIDICHECK)
- actions2 |= IDN_BIDICHECK;
- if (flags & FLAG_ASCIICHECK)
- actions2 |= IDN_ASCCHECK;
- if (flags & FLAG_LENGTHCHECK)
- actions2 |= IDN_LENCHECK;
- } else {
- actions2 = IDN_LOCALCONV;
- }
-
- if (flags & FLAG_DELIMMAP)
- actions1 |= IDN_DELIMMAP;
- if (flags & FLAG_MAP)
- actions1 |= IDN_MAP;
- if (flags & FLAG_NORMALIZE)
- actions1 |= IDN_NORMALIZE;
- if (flags & FLAG_NORMALIZE)
- actions1 |= IDN_NORMALIZE;
- if (flags & FLAG_PROHIBITCHECK)
- actions1 |= IDN_PROHCHECK;
- if (flags & FLAG_UNASSIGNCHECK)
- actions1 |= IDN_UNASCHECK;
- if (flags & FLAG_BIDICHECK)
- actions1 |= IDN_BIDICHECK;
- if (flags & FLAG_ASCIICHECK)
- actions1 |= IDN_ASCCHECK;
- if (flags & FLAG_ROUNDTRIPCHECK)
- actions1 |= IDN_RTCHECK;
-
- strbuf_init(&buf1);
- strbuf_init(&buf2);
- line_number = 1;
- while (strbuf_getline(&buf1, fp) != NULL) {
- /*
- * Trim newline at the end. This is needed for
- * those ascii-comatible encodings such as UTF-5 or RACE
- * not to try converting newlines, which will result
- * in `invalid encoding' error.
- */
- nl_trimmed = trim_newline(&buf1);
-
- /*
- * Treat input line as the string encoded in local
- * encoding and convert it to UTF-8 encoded string.
- */
- if (local_ace_hack) {
- if (strbuf_copy(&buf2, strbuf_get(&buf1)) == NULL)
- r = idn_nomemory;
- else
- r = idn_success;
- } else {
- r = convert_line(&buf1, &buf2, conf1, IDN_LOCALCONV,
- 0);
- }
- if (r != idn_success) {
- errormsg("conversion failed at line %d: %s\n",
- line_number, idn_result_tostring(r));
- goto error;
- }
-
- /*
- * Convert internationalized domain names in the line.
- */
- if (idn_ace_hack) {
- r = convert_line(&buf2, &buf1, conf1, actions1,
- FLAG_REVERSE|FLAG_SELECTIVE);
- } else {
- r = convert_line(&buf2, &buf1, conf1, actions1,
- FLAG_REVERSE);
- }
- if (r != idn_success) {
- errormsg("conversion failed at line %d: %s\n",
- line_number,
- idn_result_tostring(r));
- goto error;
- }
- if (!idn_utf8_isvalidstring(strbuf_get(&buf1))) {
- errormsg("conversion to utf-8 failed at line %d\n",
- line_number);
- goto error;
- }
-
- /*
- * Perform round trip check and convert to the output
- * codeset.
- */
- if (local_ace_hack) {
- r = convert_line(&buf1, &buf2, conf2, actions2,
- FLAG_SELECTIVE);
- } else {
- r = convert_line(&buf1, &buf2, conf1, actions2,
- FLAG_REVERSE);
- }
-
- if (r != idn_success) {
- errormsg("error in nameprep or output conversion "
- "at line %d: %s\n",
- line_number, idn_result_tostring(r));
- goto error;
- }
-
- fputs(strbuf_get(&buf2), stdout);
- if (nl_trimmed)
- putc('\n', stdout);
-
- if (flush_every_line)
- fflush(stdout);
-
- line_number++;
- }
- strbuf_reset(&buf1);
- strbuf_reset(&buf2);
- return (0);
-
- error:
- strbuf_reset(&buf1);
- strbuf_reset(&buf2);
- return (1);
-}
-
-static int
-trim_newline(idnconv_strbuf_t *buf) {
- /*
- * If the string in BUF ends with a newline, trim it and
- * return 1. Otherwise, just return 0 without modifying BUF.
- */
- char *s = strbuf_get(buf);
- size_t len = strlen(s);
-
- if (s[len - 1] == '\n') {
- s[len - 1] = '\0';
- return (1);
- }
-
- return (0);
-}
-
-static idn_result_t
-convert_line(idnconv_strbuf_t *from, idnconv_strbuf_t *to,
- idn_resconf_t conf, idn_action_t actions, int flags)
-{
- idn_result_t r = idn_success;
- char *from_str = strbuf_get(from);
-
- for (;;) {
- char *to_str = strbuf_get(to);
- size_t to_size = strbuf_size(to);
-
- switch (flags & (FLAG_REVERSE|FLAG_SELECTIVE)) {
- case 0:
- r = idn_res_encodename(conf, actions, from_str,
- to_str, to_size);
- break;
- case FLAG_REVERSE:
- r = idn_res_decodename(conf, actions, from_str,
- to_str, to_size);
- break;
- case FLAG_SELECTIVE:
- r = selective_encode(conf, actions, from_str,
- to_str, to_size);
- break;
- case FLAG_REVERSE|FLAG_SELECTIVE:
- r = selective_decode(conf, actions, from_str,
- to_str, to_size);
- break;
- }
- if (r == idn_buffer_overflow) {
- /*
- * Conversion is not successful because
- * the size of the target buffer is not enough.
- * Double the size and retry.
- */
- if (strbuf_double(to) == NULL) {
- /* oops. allocation failed. */
- return (idn_nomemory);
- }
- } else {
- break;
- }
- }
- return (r);
-}
-
-static char *options[] = {
- "-in INPUT-CODESET : specifies input codeset name.",
- "-i INPUT-CODESET : synonym for -in",
- "-out OUTPUT-CODESET : specifies output codeset name.",
- "-o OUTPUT-CODESET : synonym for -out",
- "-conf CONF-FILE : specifies idnkit configuration file.",
- "-c CONF-FILE : synonym for -conf",
- "-noconf : do not load idnkit configuration file.",
- "-C : synonym for -noconf",
- "-reverse : specifies reverse conversion.",
- " (i.e. IDN encoding to local encoding)",
- "-r : synonym for -reverse",
- "-nameprep VERSION : specifies version name of NAMEPREP.",
- "-n VERSION : synonym for -nameprep",
- "-nonameprep : do not perform NAMEPREP.",
- "-N : synonym for -nonameprep",
- "-localmap MAPPING : specifies local mapping.",
- "-nolocalmap : do not perform local mapping.",
- "-L : synonym for -nolocalmap",
- "-nounassigncheck : do not perform unassigned codepoint check.",
- "-U : synonym for -nounassigncheck",
- "-nobidicheck : do not perform bidirectional text check.",
- "-B : synonym for -nobidicheck",
- "-nolengthcheck : do not check label length.",
- "-noasciicheck : do not check ASCII range characters.",
- "-A : synonym for -noasciicheck",
- "-noroundtripcheck : do not perform round trip check.",
- "-delimiter U+XXXX : specifies local delimiter code point.",
- "-alias alias-file : specifies codeset alias file.",
- "-a : synonym for -alias",
- "-flush : line-buffering mode.",
- "-whole : convert the whole region instead of",
- " regions containing non-ascii characters.",
- "-w : synonym for -whole",
- "-version : print version number, then exit.",
- "-v : synonym for -version",
- "",
- " The following options can be specified multiple times",
- " -localmap, -delimiter",
- NULL,
-};
-
-static void
-print_version() {
- fprintf(stderr, "idnconv (idnkit) version: %s\n"
- "library version: %s\n",
- IDNKIT_VERSION,
- idn_version_getstring());
- exit(0);
-}
-
-static void
-print_usage(char *cmd) {
- int i;
-
- fprintf(stderr, "Usage: %s [options..] [file]\n", cmd);
-
- for (i = 0; options[i] != NULL; i++)
- fprintf(stderr, "\t%s\n", options[i]);
-
- exit(1);
-}
-
-static unsigned long
-get_ucs(const char *p) {
- unsigned long v;
- char *end;
-
- /* Skip optional 'U+' */
- if (strncmp(p, "U+", 2) == 0)
- p += 2;
-
- v = strtoul(p, &end, 16);
- if (*end != '\0') {
- fprintf(stderr, "invalid UCS code point \"%s\"\n", p);
- exit(1);
- }
-
- return v;
-}
diff --git a/contrib/idn/idnkit-1.0-src/tools/idnconv/idnslookup.in b/contrib/idn/idnkit-1.0-src/tools/idnconv/idnslookup.in
deleted file mode 100644
index 65d0a3dd..00000000
--- a/contrib/idn/idnkit-1.0-src/tools/idnconv/idnslookup.in
+++ /dev/null
@@ -1,116 +0,0 @@
-#! /bin/sh
-# $Id: idnslookup.in,v 1.1 2003/06/04 00:27:10 marka Exp $
-#
-# Copyright (c) 2000 Japan Network Information Center. All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-USAGE="Usage: $0 domain-name DNS-server"
-
-#
-# Parse command line arguments.
-#
-if [ $# -lt 2 ] ; then
- echo "$0: too few argument" 1>&2
- echo $USAGE 1>&2
- exit 1
-fi
-
-if [ $# -gt 2 ] ; then
- echo "$0: too many argument" 1>&2
- echo $USAGE 1>&2
- exit 1
-fi
-
-case "$1" in
--*) echo "$0: unknown option $1" 1>&2
- echo $USAGE 1>&2
- exit 1
- ;;
-esac
-
-LOCAL_DOMAIN_NAME="$1"
-NAME_SERVER="$2"
-
-#
-# Append some directories to PATH.
-#
-[ -d /usr/sbin ] && PATH=$PATH:/usr/sbin
-[ -d /sbin ] && PATH=$PATH:/sbin
-
-#
-# Find `nslookup' command.
-#
-if [ x"$NSLOOKUP" = x ] ; then
- for I in `echo $PATH | sed -e 's/:/ /g'` ; do
- if [ -x $I/nslookup ] ; then
- NSLOOKUP="$I/nslookup"
- break
- fi
- done
- if [ "$NSLOOKUP" = "" ] ; then
- echo "$0: nslookup not found" 1>&2
- exit 1
- fi
-fi
-if [ ! -x "$NSLOOKUP" ] ; then
- echo "$0: nslookup not found" 1>&2
- exit 1
-fi
-
-#
-# Check if `idnconv' command exists.
-#
-IDNCONV=${IDNCONV-"@bindir@/idnconv"}
-if [ ! -x "$IDNCONV" ] ; then
- echo "$0: idnconv not found" 1>&2
- exit 1
-fi
-
-#
-# Convert domain name to IDN encoding.
-#
-IDN_DOMAIN_NAME="`echo $LOCAL_DOMAIN_NAME | $IDNCONV -w`" || exit 1
-
-#
-# Invoke nslookup.
-#
-$NSLOOKUP $IDN_DOMAIN_NAME $NAME_SERVER < /dev/null || exit 1
-
-exit 0
diff --git a/contrib/idn/idnkit-1.0-src/tools/idnconv/make.wnt b/contrib/idn/idnkit-1.0-src/tools/idnconv/make.wnt
deleted file mode 100644
index 2f44114e..00000000
--- a/contrib/idn/idnkit-1.0-src/tools/idnconv/make.wnt
+++ /dev/null
@@ -1,72 +0,0 @@
-# $Id: make.wnt,v 1.1 2003/06/04 00:27:06 marka Exp $
-# Makefile for idnconv, manually configured for WIN-NT (VC5.0)
-#
-# Copyright (c) 2000,2002 Japan Network Information Center. All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-!include <ntwin32.mak>
-
-INCDIR = ..\..\include
-ICONVDIR = ..\..\win
-IDNLIBDIR = ..\..\lib
-LIBS = $(IDNLIBDIR)\idnkit.lib $(ICONVDIR)\iconv.lib
-SYSLIBS = $(conlibsdll)
-
-SRCS = idnconv.c util.c selectiveencode.c
-OBJS = idnconv.obj util.obj selectiveencode.obj
-
-TARGET = idnconv.exe
-
-all: $(TARGET)
-
-idnconv.exe: $(OBJS) $(LIBS)
- $(link) $(conflags) /out:idnconv.exe $(OBJS) $(LIBS) $(SYSLIBS)
-
-install:
-
-clean:
- -del *.exe *.obj *.lib core *.core *~
-
-idnconv.obj: idnconv.c
- $(cc) $(cflags) $(cvarsdll) -I$(INCDIR) $*.c
-util.obj: util.c
- $(cc) $(cflags) $(cvarsdll) -I$(INCDIR) $*.c
-selectiveencode.obj: selectiveencode.c
- $(cc) $(cflags) $(cvarsdll) -I$(INCDIR) $*.c
diff --git a/contrib/idn/idnkit-1.0-src/tools/idnconv/selectiveencode.c b/contrib/idn/idnkit-1.0-src/tools/idnconv/selectiveencode.c
deleted file mode 100644
index eed4b34a..00000000
--- a/contrib/idn/idnkit-1.0-src/tools/idnconv/selectiveencode.c
+++ /dev/null
@@ -1,127 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: selectiveencode.c,v 1.1 2003/06/04 00:27:07 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2000,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stddef.h>
-
-#include <idn/assert.h>
-#include <idn/logmacro.h>
-#include <idn/result.h>
-#include <idn/utf8.h>
-#include <idn/debug.h>
-
-#include "selectiveencode.h"
-
-static int is_domain_delimiter(char c);
-static char *find_nonascii(const char *s);
-
-idn_result_t
-idn_selectiveencode_findregion(const char *s,
- char **startp, char **endp)
-{
- char *non_ascii;
- char *start, *end;
-
- assert(s != NULL && startp != NULL && endp != NULL);
-
- TRACE(("idn_selectiveencode_findregion(s=\"%s\")\n",
- idn__debug_xstring(s, 20)));
-
- /*
- * Scan the specified string looking for non-ascii character.
- */
- if ((non_ascii = find_nonascii(s)) == NULL)
- return (idn_notfound);
-
- /*
- * Non-ascii character found.
- * Determine the region to encode.
- */
-
- /*
- * First, we scan backwards to find the beginning of the region
- * that should be converted.
- */
- start = non_ascii;
- while (start > s) {
- char *prev = idn_utf8_findfirstbyte(start - 1, s);
- if (is_domain_delimiter(*prev))
- break; /* Found */
- start = prev;
- }
- *startp = start;
-
- /*
- * Next we scan forwards looking for the end of the region.
- */
- end = non_ascii + idn_utf8_mblen(non_ascii);
- while (!is_domain_delimiter(*end))
- end += idn_utf8_mblen(end);
- *endp = end;
-
- return (idn_success);
-}
-
-static int
-is_domain_delimiter(char c) {
- return ((unsigned char)c < 0x80 &&
- !('A' <= c && c <= 'Z') &&
- !('a' <= c && c <= 'z') &&
- !('0' <= c && c <= '9') &&
- c != '-' && c != '.');
-}
-
-static char *
-find_nonascii(const char *s) {
- while (*s != '\0' && (unsigned char)*s < 0x80)
- s++;
- if (*s == '\0')
- return (NULL);
- else
- return ((char *)s);
-}
diff --git a/contrib/idn/idnkit-1.0-src/tools/idnconv/selectiveencode.h b/contrib/idn/idnkit-1.0-src/tools/idnconv/selectiveencode.h
deleted file mode 100644
index 29c13e2c..00000000
--- a/contrib/idn/idnkit-1.0-src/tools/idnconv/selectiveencode.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* $Id: selectiveencode.h,v 1.2 2009/09/01 03:31:33 jinmei Exp $ */
-/*
- * Copyright (c) 2000,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_SELECTIVEENCODE_H
-#define IDN_SELECTIVEENCODE_H 1
-
-/*
- * Find where to convert.
- *
- * Find a substring for which IDN domain name codeset conversion is necessary.
- */
-
-#include <idn/result.h>
-
-/*
- * Scan the given string 's' (in UTF-8 encoding) looking for a substring
- * made of
- * + at least one non-ascii character and
- * + zero or more legitimate domain-name characters (i.e. ascii alphabets,
- * digits and hyphens) and periods.
- *
- * Returns:
- * idn_success -- ok, found.
- * idn_notfound -- not found.
- */
-extern idn_result_t
-idn_selectiveencode_findregion(const char *s, char **startp, char **endp);
-
-#endif /* IDN_SELECTIVEENCODE_H */
diff --git a/contrib/idn/idnkit-1.0-src/tools/idnconv/util.c b/contrib/idn/idnkit-1.0-src/tools/idnconv/util.c
deleted file mode 100644
index 216b9f29..00000000
--- a/contrib/idn/idnkit-1.0-src/tools/idnconv/util.c
+++ /dev/null
@@ -1,554 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: util.c,v 1.1 2003/06/04 00:27:08 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2000,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-
-#include <idn/resconf.h>
-#include <idn/converter.h>
-#include <idn/res.h>
-#include <idn/utf8.h>
-
-#include "util.h"
-#include "selectiveencode.h"
-
-extern int line_number;
-
-idn_result_t
-selective_encode(idn_resconf_t conf, idn_action_t actions,
- char *from, char *to, int tolen)
-{
- for (;;) {
- int len;
- char *region_start, *region_end;
- idn_result_t r;
- char save;
-
- /*
- * Find the region that needs conversion.
- */
- r = idn_selectiveencode_findregion(from, &region_start,
- &region_end);
- if (r == idn_notfound) {
- /*
- * Not found. Just copy the whole thing.
- */
- if (tolen <= strlen(from))
- return (idn_buffer_overflow);
- (void)strcpy(to, from);
- return (idn_success);
- } else if (r != idn_success) {
- /* This should not happen.. */
- errormsg("internal error at line %d: %s\n",
- line_number, idn_result_tostring(r));
- return (r);
- }
-
- /*
- * We have found a region to convert.
- * First, copy the prefix part verbatim.
- */
- len = region_start - from;
- if (tolen < len) {
- errormsg("internal buffer overflow at line %d\n",
- line_number);
- return (idn_buffer_overflow);
- }
- (void)memcpy(to, from, len);
- to += len;
- tolen -= len;
-
- /*
- * Terminate the region with NUL.
- */
- save = *region_end;
- *region_end = '\0';
-
- /*
- * Encode the region.
- */
- r = idn_res_encodename(conf, actions, region_start, to, tolen);
-
- /*
- * Restore character.
- */
- *region_end = save;
-
- if (r != idn_success)
- return (r);
-
- len = strlen(to);
- to += len;
- tolen -= len;
-
- from = region_end;
- }
-}
-
-idn_result_t
-selective_decode(idn_resconf_t conf, idn_action_t actions,
- char *from, char *to, int tolen)
-{
- char *domain_name;
- char *ignored_chunk;
- char save;
- int len;
- idn_result_t r;
-
- /*
- * While `*from' points to a character in a string which may be
- * a domain name, `domain_name' refers to the beginning of the
- * domain name.
- */
- domain_name = NULL;
-
- /*
- * We ignore chunks matching to the regular expression:
- * [\-\.][0-9A-Za-z\-\.]*
- *
- * While `*from' points to a character in such a chunk,
- * `ignored_chunk' refers to the beginning of the chunk.
- */
- ignored_chunk = NULL;
-
- for (;;) {
- if (*from == '-') {
- /*
- * We don't recognize `.-' as a part of domain name.
- */
- if (domain_name != NULL) {
- if (*(from - 1) == '.') {
- ignored_chunk = domain_name;
- domain_name = NULL;
- }
- } else if (ignored_chunk == NULL) {
- ignored_chunk = from;
- }
-
- } else if (*from == '.') {
- /*
- * We don't recognize `-.' nor `..' as a part of
- * domain name.
- */
- if (domain_name != NULL) {
- if (*(from - 1) == '-' || *(from - 1) == '.') {
- ignored_chunk = domain_name;
- domain_name = NULL;
- }
- } else if (ignored_chunk == NULL) {
- ignored_chunk = from;
- }
-
- } else if (('a' <= *from && *from <= 'z') ||
- ('A' <= *from && *from <= 'Z') ||
- ('0' <= *from && *from <= '9')) {
- if (ignored_chunk == NULL && domain_name == NULL)
- domain_name = from;
-
- } else {
- if (ignored_chunk != NULL) {
- /*
- * `from' reaches the end of the ignored chunk.
- * Copy the chunk to `to'.
- */
- len = from - ignored_chunk;
- if (tolen < len)
- return (idn_buffer_overflow);
- (void)memcpy(to, ignored_chunk, len);
- to += len;
- tolen -= len;
-
- } else if (domain_name != NULL) {
- /*
- * `from' reaches the end of the domain name.
- * Decode the domain name, and copy the result
- * to `to'.
- */
- save = *from;
- *from = '\0';
- r = idn_res_decodename(conf, actions,
- domain_name, to, tolen);
- *from = save;
-
- if (r == idn_success) {
- len = strlen(to);
- } else if (r == idn_invalid_encoding) {
- len = from - domain_name;
- if (tolen < len)
- return (idn_buffer_overflow);
- (void)memcpy(to, domain_name, len);
- } else {
- return (r);
- }
- to += len;
- tolen -= len;
- }
-
- /*
- * Copy a character `*from' to `to'.
- */
- if (tolen < 1)
- return (idn_buffer_overflow);
- *to = *from;
- to++;
- tolen--;
-
- domain_name = NULL;
- ignored_chunk = NULL;
-
- if (*from == '\0')
- break;
- }
-
- from++;
- }
-
- return (idn_success);
-}
-
-void
-set_defaults(idn_resconf_t conf) {
- idn_result_t r;
-
- if ((r = idn_resconf_setdefaults(conf)) != idn_success) {
- errormsg("error setting default configuration: %s\n",
- idn_result_tostring(r));
- exit(1);
- }
-}
-
-void
-load_conf_file(idn_resconf_t conf, const char *file) {
- idn_result_t r;
-
- if ((r = idn_resconf_loadfile(conf, file)) != idn_success) {
- errormsg("error reading configuration file: %s\n",
- idn_result_tostring(r));
- exit(1);
- }
-}
-
-void
-set_encoding_alias(const char *encoding_alias) {
- idn_result_t r;
-
- if ((r = idn_converter_resetalias()) != idn_success) {
- errormsg("cannot reset alias information: %s\n",
- idn_result_tostring(r));
- exit(1);
- }
-
- if ((r = idn_converter_aliasfile(encoding_alias)) != idn_success) {
- errormsg("cannot read alias file %s: %s\n",
- encoding_alias, idn_result_tostring(r));
- exit(1);
- }
-}
-
-void
-set_localcode(idn_resconf_t conf, const char *code) {
- idn_result_t r;
-
- r = idn_resconf_setlocalconvertername(conf, code,
- IDN_CONVERTER_RTCHECK);
- if (r != idn_success) {
- errormsg("cannot create converter for codeset %s: %s\n",
- code, idn_result_tostring(r));
- exit(1);
- }
-}
-
-void
-set_idncode(idn_resconf_t conf, const char *code) {
- idn_result_t r;
-
- r = idn_resconf_setidnconvertername(conf, code,
- IDN_CONVERTER_RTCHECK);
- if (r != idn_success) {
- errormsg("cannot create converter for codeset %s: %s\n",
- code, idn_result_tostring(r));
- exit(1);
- }
-}
-
-void
-set_delimitermapper(idn_resconf_t conf, unsigned long *delimiters,
- int ndelimiters) {
- idn_result_t r;
-
- r = idn_resconf_addalldelimitermapucs(conf, delimiters, ndelimiters);
- if (r != idn_success) {
- errormsg("cannot add delimiter: %s\n",
- idn_result_tostring(r));
- exit(1);
- }
-}
-
-void
-set_localmapper(idn_resconf_t conf, char **mappers, int nmappers) {
- idn_result_t r;
-
- /* Add mapping. */
- r = idn_resconf_addalllocalmapselectornames(conf,
- IDN_MAPSELECTOR_DEFAULTTLD,
- (const char **)mappers,
- nmappers);
- if (r != idn_success) {
- errormsg("cannot add local map: %s\n",
- idn_result_tostring(r));
- exit(1);
- }
-}
-
-void
-set_nameprep(idn_resconf_t conf, char *version) {
- idn_result_t r;
-
- r = idn_resconf_setnameprepversion(conf, version);
- if (r != idn_success) {
- errormsg("error setting nameprep %s: %s\n",
- version, idn_result_tostring(r));
- exit(1);
- }
-}
-
-void
-set_mapper(idn_resconf_t conf, char **mappers, int nmappers) {
- idn_result_t r;
-
- /* Configure mapper. */
- r = idn_resconf_addallmappernames(conf, (const char **)mappers,
- nmappers);
- if (r != idn_success) {
- errormsg("cannot add nameprep map: %s\n",
- idn_result_tostring(r));
- exit(1);
- }
-}
-
-void
-set_normalizer(idn_resconf_t conf, char **normalizers, int nnormalizer) {
- idn_result_t r;
-
- r = idn_resconf_addallnormalizernames(conf,
- (const char **)normalizers,
- nnormalizer);
- if (r != idn_success) {
- errormsg("cannot add normalizer: %s\n",
- idn_result_tostring(r));
- exit(1);
- }
-}
-
-void
-set_prohibit_checkers(idn_resconf_t conf, char **prohibits, int nprohibits) {
- idn_result_t r;
-
- r = idn_resconf_addallprohibitcheckernames(conf,
- (const char **)prohibits,
- nprohibits);
- if (r != idn_success) {
- errormsg("cannot add prohibit checker: %s\n",
- idn_result_tostring(r));
- exit(1);
- }
-}
-
-void
-set_unassigned_checkers(idn_resconf_t conf, char **unassigns, int nunassigns) {
- idn_result_t r;
-
- r = idn_resconf_addallunassignedcheckernames(conf,
- (const char **)unassigns,
- nunassigns);
- if (r != idn_success) {
- errormsg("cannot add unassigned checker: %s\n",
- idn_result_tostring(r));
- exit(1);
- }
-}
-
-void
-errormsg(const char *fmt, ...) {
- va_list args;
-
- va_start(args, fmt);
- vfprintf(stderr, fmt, args);
- va_end(args);
-}
-
-
-/*
- * Dynamic Stirng Buffer Utility
- */
-
-void
-strbuf_init(idnconv_strbuf_t *buf) {
- /*
- * Initialize the given string buffer.
- * Caller must allocate the structure (idnconv_strbuf_t)
- * as an automatic variable or by malloc().
- */
- buf->str = buf->local_buf;
- buf->str[0] = '\0';
- buf->size = sizeof(buf->local_buf);
-}
-
-void
-strbuf_reset(idnconv_strbuf_t *buf) {
- /*
- * Reset the given string buffer.
- * Free memory allocated by this utility, and
- * re-initialize.
- */
- if (buf->str != NULL && buf->str != buf->local_buf) {
- free(buf->str);
- }
- strbuf_init(buf);
-}
-
-char *
-strbuf_get(idnconv_strbuf_t *buf) {
- /*
- * Get the pointer of the buffer.
- */
- return (buf->str);
-}
-
-size_t
-strbuf_size(idnconv_strbuf_t *buf) {
- /*
- * Get the allocated size of the buffer.
- */
- return (buf->size);
-}
-
-char *
-strbuf_copy(idnconv_strbuf_t *buf, const char *str) {
- /*
- * Copy STR to BUF.
- */
- size_t len = strlen(str);
-
- if (strbuf_alloc(buf, len + 1) == NULL)
- return (NULL);
- strcpy(buf->str, str);
- return (buf->str);
-}
-
-char *
-strbuf_append(idnconv_strbuf_t *buf, const char *str) {
- /*
- * Append STR to the end of BUF.
- */
- size_t len1 = strlen(buf->str);
- size_t len2 = strlen(str);
- char *p;
-#define MARGIN 50
-
- p = strbuf_alloc(buf, len1 + len2 + 1 + MARGIN);
- if (p != NULL)
- strcpy(buf->str + len1, str);
- return (p);
-}
-
-char *
-strbuf_alloc(idnconv_strbuf_t *buf, size_t size) {
- /*
- * Reallocate the buffer of BUF if needed
- * so that BUF can hold SIZE bytes of data at least.
- */
- char *p;
-
- if (buf->size >= size)
- return (buf->str);
- if (buf->str == buf->local_buf) {
- if ((p = malloc(size)) == NULL)
- return (NULL);
- memcpy(p, buf->local_buf, sizeof(buf->local_buf));
- } else {
- if ((p = realloc(buf->str, size)) == NULL)
- return (NULL);
- }
- buf->str = p;
- buf->size = size;
- return (buf->str);
-}
-
-char *
-strbuf_double(idnconv_strbuf_t *buf) {
- /*
- * Double the size of the buffer of BUF.
- */
- return (strbuf_alloc(buf, buf->size * 2));
-}
-
-char *
-strbuf_getline(idnconv_strbuf_t *buf, FILE *fp) {
- /*
- * Read a line from FP.
- */
- char s[256];
-
- buf->str[0] = '\0';
- while (fgets(s, sizeof(s), fp) != NULL) {
- if (strbuf_append(buf, s) == NULL)
- return (NULL);
- if (strlen(s) < sizeof(s) - 1 || s[sizeof(s) - 2] == '\n')
- return (buf->str);
- }
- if (buf->str[0] != '\0')
- return (buf->str);
- return (NULL);
-}
diff --git a/contrib/idn/idnkit-1.0-src/tools/idnconv/util.h b/contrib/idn/idnkit-1.0-src/tools/idnconv/util.h
deleted file mode 100644
index adc2196d..00000000
--- a/contrib/idn/idnkit-1.0-src/tools/idnconv/util.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/* $Id: util.h,v 1.1 2003/06/04 00:27:09 marka Exp $ */
-/*
- * Copyright (c) 2000,2001 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef IDN_IDNCONV_UTIL_H
-#define IDN_IDNCONV_UTIL_H 1
-
-#include <idn/res.h>
-
-#define IDNCONV_LOCALBUF_SIZE 512
-
-typedef struct {
- char *str;
- size_t size;
- char local_buf[IDNCONV_LOCALBUF_SIZE];
-} idnconv_strbuf_t;
-
-extern idn_result_t selective_encode(idn_resconf_t conf,
- idn_action_t actions, char *from,
- char *to, int tolen);
-extern idn_result_t selective_decode(idn_resconf_t conf,
- idn_action_t actions, char *from,
- char *to, int tolen);
-extern void set_defaults(idn_resconf_t conf);
-extern void load_conf_file(idn_resconf_t conf, const char *file);
-extern void set_encoding_alias(const char *encoding_alias);
-extern void set_localcode(idn_resconf_t conf, const char *code);
-extern void set_idncode(idn_resconf_t conf, const char *code);
-extern void set_delimitermapper(idn_resconf_t conf,
- unsigned long *delimiters,
- int ndelimiters);
-extern void set_localmapper(idn_resconf_t conf,
- char **mappers, int nmappers);
-extern void set_nameprep(idn_resconf_t conf, char *version);
-extern void set_mapper(idn_resconf_t conf,
- char **mappers, int nmappers);
-extern void set_normalizer(idn_resconf_t conf,
- char **normalizer, int nnormalizer);
-extern void set_prohibit_checkers(idn_resconf_t conf,
- char **prohibits,
- int nprohibits);
-extern void set_unassigned_checkers(idn_resconf_t conf,
- char **unassigns,
- int nunassigns);
-extern void errormsg(const char *fmt, ...);
-extern void strbuf_init(idnconv_strbuf_t *buf);
-extern void strbuf_reset(idnconv_strbuf_t *buf);
-extern char *strbuf_get(idnconv_strbuf_t *buf);
-extern size_t strbuf_size(idnconv_strbuf_t *buf);
-extern char *strbuf_copy(idnconv_strbuf_t *buf, const char *str);
-extern char *strbuf_append(idnconv_strbuf_t *buf, const char *str);
-extern char *strbuf_alloc(idnconv_strbuf_t *buf, size_t size);
-extern char *strbuf_double(idnconv_strbuf_t *buf);
-extern char *strbuf_getline(idnconv_strbuf_t *buf, FILE *fp);
-
-#endif /* IDN_IDNCONV_UTIL_H */
diff --git a/contrib/idn/idnkit-1.0-src/tools/make.wnt b/contrib/idn/idnkit-1.0-src/tools/make.wnt
deleted file mode 100644
index 1ea01c7a..00000000
--- a/contrib/idn/idnkit-1.0-src/tools/make.wnt
+++ /dev/null
@@ -1,57 +0,0 @@
-# $Id: make.wnt,v 1.1 2003/06/04 00:27:05 marka Exp $
-# Copyright (c) 2000 Japan Network Information Center. All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-all : force
- cd idnconv
- $(MAKE) -f make.wnt
- cd ..
-
-install : all
- cd idnconv
- $(MAKE) -f make.wnt install
- cd ..
-
-clean : force
- cd idnconv
- $(MAKE) -f make.wnt clean
- cd ..
-
-force:
diff --git a/contrib/idn/idnkit-1.0-src/tools/rpm/idnkit.spec b/contrib/idn/idnkit-1.0-src/tools/rpm/idnkit.spec
deleted file mode 100644
index c740570a..00000000
--- a/contrib/idn/idnkit-1.0-src/tools/rpm/idnkit.spec
+++ /dev/null
@@ -1,142 +0,0 @@
-%define prefix /usr
-%define sysconfdir /etc
-%define version 1.0
-
-# official/beta release:
-#define release 1
-#define distrel %{version}
-
-# release candidate:
-%define release rc1
-%define distrel %{version}-%{release}
-
-%define serial 2002051501
-
-%define name idnkit
-%define distsrc %{name}-%{distrel}-src
-
-Name: %{name}
-Version: %{version}
-Release: %{release}
-Copyright: distributable
-Group: System Environment
-Source: %{distsrc}.tar.gz
-BuildRoot: /var/tmp/%{name}-root
-Serial: %{serial}
-Summary: Internationalized Domain Name kit (idnkit/JPNIC)
-Vendor: JPNIC
-Packager: Japan Network Information Center
-
-%description
-idnkit is a kit for handling Internationalized Domain Name.
-
-%package devel
-Group: Development/Libraries
-Summary: The development files for idnkit
-
-%description devel
-The header files and libraries (libidnkit.a and libidnkitlite.a)
-to develop applications that use the libraries.
-
-%prep
-%setup -n %{distsrc}
-
-%build
-if [ -f /usr/lib/libiconv.a -o -f /usr/lib/libiconv.so ]
-then
- if [ -f /lib/libc-2.0* ]
- then
- ICONV="--with-iconv=yes"
- fi
-fi
-
-CFLAGS="$RPM_OPT_FLAGS" ./configure \
- --prefix=%{prefix} --sysconfdir=%{sysconfdir} \
- --enable-runidn \
- $ICONV
-make
-
-%install
-rm -fr $RPM_BUILD_ROOT
-make DESTDIR=$RPM_BUILD_ROOT install
-mv $RPM_BUILD_ROOT/etc/idn.conf.sample $RPM_BUILD_ROOT/etc/idn.conf
-mv $RPM_BUILD_ROOT/etc/idnalias.conf.sample $RPM_BUILD_ROOT/etc/idnalias.conf
-
-# devel kit
-#install -c lib/libidnkit.a $RPM_BUILD_ROOT/usr/lib
-#cp -r include/idn $RPM_BUILD_ROOT/usr/include
-
-# docs
-mkdir rpm_docs
-(cp NEWS INSTALL INSTALL.ja DISTFILES README.ja README LICENSE.txt \
- ChangeLog rpm_docs)
-cp -r patch rpm_docs
-
-%clean
-rm -fr $RPM_BUILD_ROOT
-
-%files
-%defattr(-, root, root)
-%{prefix}/bin/idnconv
-%{prefix}/bin/runidn
-%{prefix}/lib/libidnkit.so.*
-%{prefix}/lib/libidnkitlite.so.*
-%{prefix}/lib/libidnkitres.so.*
-%{prefix}/share/idnkit/*
-%config %{sysconfdir}/idn.conf
-%config %{sysconfdir}/idnalias.conf
-%attr(0644, root, root) %config(noreplace)
-%attr(0644, root, man) %{prefix}/man/man1/*
-%attr(0644, root, man) %{prefix}/man/man3/*
-%attr(0644, root, man) %{prefix}/man/man5/*
-%doc rpm_docs/*
-
-%files devel
-%defattr(-, root, root)
-%{prefix}/lib/libidnkit.a
-%{prefix}/lib/libidnkit.la
-%{prefix}/lib/libidnkit.so
-%{prefix}/lib/libidnkitlite.a
-%{prefix}/lib/libidnkitlite.la
-%{prefix}/lib/libidnkitlite.so
-%{prefix}/lib/libidnkitres.a
-%{prefix}/lib/libidnkitres.la
-%{prefix}/lib/libidnkitres.so
-%{prefix}/include/idn/*
-
-%changelog
-* Web May 15 2002 Motoyuki Kasahara <m-kasahr@sra.co.jp>
-- 1.0beta2, experimental.
-
-* Mon May 28 2001 MANABE Takashi <manabe@dsl.gr.jp>
-- include runmdn, libmdnresolv
-
-* Mon Apr 4 2001 Motoyuki Kasahara <m-kasahr@sra.co.jp>
-- 2.1 release
-
-* Mon Apr 4 2001 Motoyuki Kasahara <m-kasahr@sra.co.jp>
-- 2.0.1 release
-
-* Mon Apr 2 2001 MANABE Takashi <manabe@dsl.gr.jp>
-- 2.0 release
-
-* Fri Mar 3 2001 MANABE Takashi <manabe@dsl.gr.jp>
-- 1.3 release
-
-* Mon Dec 6 2000 MANABE Takashi <manabe@dsl.gr.jp>
-- add brace/lace functions to libmdnresolv(mdnkit-1.2-runmdn.patch)
-- include /var/dnsproxy
-- change files section for compressed man pages
-
-* Mon Nov 27 2000 Makoto Ishisone <ishisone@sra.co.jp>
-- 1.2 release
-
-* Thu Nov 2 2000 MANABE Takashi <manabe@dsl.gr.jp>
-- 1.1 release
-
-* Fri Oct 27 2000 MANABE Takashi <manabe@dsl.gr.jp>
-- dnsproxy.patch1
-- move libmdnresolv.{la,so} from mdnkit-devel to mdnkit package
-
-* Wed Oct 18 2000 MANABE Takashi <manabe@dsl.gr.jp>
-- 1.0 release
diff --git a/contrib/idn/idnkit-1.0-src/tools/runidn/Makefile.in b/contrib/idn/idnkit-1.0-src/tools/runidn/Makefile.in
deleted file mode 100644
index 8e3875ff..00000000
--- a/contrib/idn/idnkit-1.0-src/tools/runidn/Makefile.in
+++ /dev/null
@@ -1,167 +0,0 @@
-# $Id: Makefile.in,v 1.1 2003/06/04 00:27:11 marka Exp $
-# Copyright (c) 2000 Japan Network Information Center. All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-LIB_CURRENT = 1
-LIB_REVISION = 1
-LIB_AGE = 0
-
-.SUFFIXES:
-.SUFFIXES: .c .lo
-
-top_builddir = ../..
-subdir = tools/runidn
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-libdir = @libdir@
-mandir = @mandir@
-man1dir = $(mandir)/man1
-
-CC = @CC@
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_DATA = @INSTALL_DATA@
-MKINSTALLDIRS = @top_srcdir@/mkinstalldirs
-SHELL = @SHELL@
-LIBTOOL = @LIBTOOL@
-
-ICONVINC = @ICONVINC@
-ICONVLIB = @ICONVLIB@
-
-INCS = -I$(srcdir) -I$(srcdir)/../../include -I../../include $(ICONVINC)
-DEFS =
-
-CFLAGS = $(INCS) $(DEFS) @CPPFLAGS@ @CFLAGS@
-LDFLAGS = @LDFLAGS@
-
-LIB = libidnkitres
-OBJS = rtresolver.lo stub.lo $(IDNOBJS)
-SCRIPT = runidn
-LIBDL = @LIBDL@
-
-IDNDIR = ../../lib
-IDNOBJS = \
- $(IDNDIR)/aliaslist.lo \
- $(IDNDIR)/api.lo \
- $(IDNDIR)/checker.lo \
- $(IDNDIR)/converter.lo \
- $(IDNDIR)/debug.lo \
- $(IDNDIR)/delimitermap.lo \
- $(IDNDIR)/filechecker.lo \
- $(IDNDIR)/filemapper.lo \
- $(IDNDIR)/localencoding.lo \
- $(IDNDIR)/log.lo \
- $(IDNDIR)/mapper.lo \
- $(IDNDIR)/mapselector.lo \
- $(IDNDIR)/nameprep.lo \
- $(IDNDIR)/normalizer.lo \
- $(IDNDIR)/punycode.lo \
- $(IDNDIR)/race.lo \
- $(IDNDIR)/res.lo \
- $(IDNDIR)/resconf.lo \
- $(IDNDIR)/result.lo \
- $(IDNDIR)/strhash.lo \
- $(IDNDIR)/ucsmap.lo \
- $(IDNDIR)/ucsset.lo \
- $(IDNDIR)/unicode.lo \
- $(IDNDIR)/unormalize.lo \
- $(IDNDIR)/ucs4.lo \
- $(IDNDIR)/utf8.lo \
- $(IDNDIR)/util.lo \
- $(IDNDIR)/version.lo
-
-.c.lo:
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c $<
-
-@RUNIDN_TRUE@all: $(LIB).la runidn
-@RUNIDN_FALSE@all:
-
-rtresolver.lo: $(srcdir)/resolver.c
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -DFOR_RUNIDN -o $@ \
- -c $(srcdir)/resolver.c
-
-$(LIB).la: $(OBJS)
- $(LIBTOOL) --mode=link $(LD) $(LDFLAGS) -o $@ \
- -version-info $(LIB_CURRENT):$(LIB_REVISION):$(LIB_AGE) \
- -module -rpath $(libdir) $(OBJS) $(LIBDL)
-
-runidn: $(srcdir)/runidn.in
- cd $(top_builddir) && \
- CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= CONFIG_LINKS= \
- $(SHELL) ./config.status
-
-@RUNIDN_TRUE@@COMPAT_TRUE@install: all install-runidn install-compat
-@RUNIDN_TRUE@@COMPAT_FALSE@install: all install-runidn
-@RUNIDN_FALSE@install:
-
-install-runidn:
- $(MKINSTALLDIRS) $(DESTDIR)$(libdir)
- $(LIBTOOL) --mode=install $(INSTALL_DATA) $(LIB).la \
- $(DESTDIR)$(libdir)/$(LIB).la
- $(MKINSTALLDIRS) $(DESTDIR)$(bindir)
- $(INSTALL_SCRIPT) $(SCRIPT) $(DESTDIR)$(bindir)
- $(MKINSTALLDIRS) $(DESTDIR)$(man1dir)
- $(INSTALL_DATA) $(srcdir)/runidn.1 $(DESTDIR)$(man1dir)/runidn.1
-
-install-compat:
- src=$(DESTDIR)$(bindir)/runidn; \
- dst=$(DESTDIR)$(bindir)/runmdn; \
- rm -f $$dst; \
- ln $$src $$dst || cp $$src $$dst
- src=$(DESTDIR)$(man1dir)/runidn.1; \
- dst=$(DESTDIR)$(man1dir)/runmdn.1; \
- rm -f $$dst; \
- ln $$src $$dst || cp $$src $$dst
-
-clean:
- rm -f *.lo *.la *.o
- rm -fr .libs/
-
-distclean: clean
- rm -f runidn Makefile
-
-test check:
diff --git a/contrib/idn/idnkit-1.0-src/tools/runidn/resolver.c b/contrib/idn/idnkit-1.0-src/tools/runidn/resolver.c
deleted file mode 100644
index eaa93288..00000000
--- a/contrib/idn/idnkit-1.0-src/tools/runidn/resolver.c
+++ /dev/null
@@ -1,1056 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: resolver.c,v 1.1 2003/06/04 00:27:12 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2001 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <stddef.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netdb.h>
-#include <errno.h>
-
-#include <idn/api.h>
-#include <idn/log.h>
-#include <idn/logmacro.h>
-#include <idn/debug.h>
-
-#ifdef FOR_RUNIDN
-/*
- * This file is specially compiled for runidn.
- * runidn replaces existing resolver functions dynamically with ones
- * with IDN processing (encoding conversion and normalization).
- * So entry names must be same as the system's one.
- */
-#include "stub.h"
-
-#define ENTRY(name) name
-#define REAL(name) idn_stub_ ## name
-#else
-/*
- * For normal use. All the entry names are prefixed with "idn_resolver_".
- * <idn/resolver.h> has bunch of #defines to substitute the standard
- * name resolver functions with ones provided here.
- */
-#include "resolver.h"
-#undef gethostbyname
-#undef gethostbyname2
-#undef gethostbyaddr
-#undef gethostbyname_r
-#undef gethostbyname2_r
-#undef gethostbyaddr_r
-#undef getipnodebyname
-#undef getipnodebyaddr
-#undef getaddrinfo
-#undef getnameinfo
-
-#define ENTRY(name) idn_resolver_ ## name
-#define REAL(name) name
-#endif
-
-#define IDN_NAME_SIZE 512
-
-#define IDN_HOSTBUF_SIZE 2048
-typedef union {
- char *dummy_for_alignment;
- char data[IDN_HOSTBUF_SIZE];
-} hostbuf_t;
-
-typedef struct obj_lock {
- void *key;
- struct obj_lock *next;
-} obj_lock_t;
-
-#define OBJLOCKHASH_SIZE 127
-static obj_lock_t *obj_lock_hash[OBJLOCKHASH_SIZE];
-
-/*
- * This variable is to prevent IDN processing occuring more than once for
- * a single name resolution. This will happen if some resolver function
- * is implemented using another function (e.g. gethostbyname() implemented
- * using gethostbyname2()).
- * No, using the static variable is not a correct thing to do for a multi-
- * threading environment, but I don't think of a better solution..
- */
-static int idn_isprocessing = 0;
-
-static int obj_hash(void *key);
-static int obj_islocked(void *key);
-static void obj_lock(void *key);
-static void obj_unlock(void *key);
-static struct hostent *copy_decode_hostent_static(struct hostent *hp,
- struct hostent *newhp,
- char *buf, size_t buflen,
- int *errp);
-static char *decode_name_dynamic(const char *name);
-static struct hostent *copy_decode_hostent_dynamic(struct hostent *hp,
- int *errp);
-static void free_copied_hostent(struct hostent *hp);
-#ifdef HAVE_GETADDRINFO
-static struct addrinfo *copy_decode_addrinfo_dynamic(struct addrinfo *aip);
-#endif
-#ifdef HAVE_FREEADDRINFO
-static void free_copied_addrinfo(struct addrinfo *aip);
-#endif
-
-/*
- * Object locking facility.
- */
-
-static int
-obj_hash(void *key) {
- /*
- * Hash function for obj_*.
- * 'key' is supposed to be an address.
- */
- unsigned long v = (unsigned long)key;
-
- return ((v >> 3) % OBJLOCKHASH_SIZE);
-}
-
-static int
-obj_islocked(void *key)
-{
- /*
- * Check if the object specified by 'key' is locked.
- * Return 1 if so, 0 otherwise.
- */
- int h = obj_hash(key);
- obj_lock_t *olp = obj_lock_hash[h];
-
- while (olp != NULL) {
- if (olp->key == key)
- return (1);
- olp = olp->next;
- }
- return (0);
-}
-
-static void
-obj_lock(void *key)
-{
- /*
- * Lock an object specified by 'key'.
- */
- int h = obj_hash(key);
- obj_lock_t *olp;
-
- olp = malloc(sizeof(obj_lock_t));
- if (olp != NULL) {
- olp->key = key;
- olp->next = obj_lock_hash[h];
- obj_lock_hash[h] = olp;
- }
-}
-
-static void
-obj_unlock(void *key)
-{
- /*
- * Unlock an object specified by 'key'.
- */
- int h = obj_hash(key);
- obj_lock_t *olp, *olp0;
-
- olp = obj_lock_hash[h];
- olp0 = NULL;
- while (olp != NULL) {
- if (olp->key == key) {
- if (olp0 == NULL)
- obj_lock_hash[h] = olp->next;
- else
- olp0->next = olp->next;
- free(olp);
- return;
- }
- olp0 = olp;
- olp = olp->next;
- }
-}
-
-static struct hostent *
-copy_decode_hostent_static(struct hostent *hp, struct hostent *newhp,
- char *buf, size_t buflen, int *errp)
-{
- /*
- * Copy "struct hostent" data referenced by 'hp' to 'newhp'.
- * It's a deep-copy, meaning all the data referenced by 'hp' are
- * also copied. They are copied into 'buf', whose length is 'buflen'.
- * The domain names ('hp->h_name' and 'hp->h_aliases') are
- * decoded from ACE to the local encoding before they are copied.
- * If 'buf' is too small to hold all the data, NULL will be
- * returned and '*errp' is set to NO_RECOVERY.
- */
- int naliases = 0;
- int naddrs = 0;
-
- if (hp == NULL)
- return (NULL);
-
- *newhp = *hp;
-
- if (hp->h_aliases != NULL) {
- /*
- * Allocate aliase table in 'buf'.
- */
- size_t sz;
-
- while (hp->h_aliases[naliases] != NULL)
- naliases++;
-
- newhp->h_aliases = (char **)buf;
- sz = sizeof(char *) * (naliases + 1);
-
- if (buflen < sz)
- goto overflow;
-
- buf += sz;
- buflen -= sz;
- }
-
- if (hp->h_addr_list != NULL) {
- /*
- * Allocate address table in 'buf'.
- */
- size_t sz;
- int i;
-
- while (hp->h_addr_list[naddrs] != NULL)
- naddrs++;
-
- newhp->h_addr_list = (char **)buf;
- sz = sizeof(char *) * (naddrs + 1);
-
- if (buflen < sz)
- goto overflow;
-
- buf += sz;
- buflen -= sz;
-
- /*
- * Copy the addresses.
- */
- sz = hp->h_length * naddrs;
- if (buflen < sz)
- goto overflow;
-
- for (i = 0; i < naddrs; i++) {
- newhp->h_addr_list[i] = buf;
- memcpy(buf, hp->h_addr_list[i], hp->h_length);
- buf += hp->h_length;
- }
- newhp->h_addr_list[naddrs] = NULL;
-
- buf += sz;
- buflen -= sz;
- }
-
- if (hp->h_name != NULL) {
- /*
- * Decode the name in h_name.
- */
- idn_result_t r;
- size_t slen;
-
- idn_enable(1);
- idn_nameinit(1);
- r = idn_decodename(IDN_DECODE_APP, hp->h_name,
- buf, buflen);
- switch (r) {
- case idn_success:
- newhp->h_name = buf;
- break;
- default:
- /* Copy hp->h_name verbatim. */
- if (strlen(hp->h_name) + 1 <= buflen) {
- newhp->h_name = buf;
- strcpy(buf, hp->h_name);
- break;
- }
- /* falllthrough */
- case idn_buffer_overflow:
- goto overflow;
- }
-
- slen = strlen(buf) + 1;
- buf += slen;
- buflen -= slen;
- }
-
- if (hp->h_aliases != NULL) {
- /*
- * Decode the names in h_aliases.
- */
- char **aliases = hp->h_aliases;
- char **newaliases = newhp->h_aliases;
- int i;
-
- for (i = 0; i < naliases; i++) {
- idn_result_t r;
- size_t slen;
-
- idn_enable(1);
- idn_nameinit(1);
- r = idn_decodename(IDN_DECODE_APP, aliases[i],
- buf, buflen);
-
- switch (r) {
- case idn_success:
- newaliases[i] = buf;
- break;
- default:
- /* Copy hp->h_name verbatim. */
- if (strlen(aliases[i]) + 1 <= buflen) {
- newaliases[i] = buf;
- strcpy(buf, aliases[i]);
- break;
- }
- /* falllthrough */
- case idn_buffer_overflow:
- goto overflow;
- }
-
- slen = strlen(buf) + 1;
- buf += slen;
- buflen -= slen;
- }
- newaliases[naliases] = NULL;
- }
-
- return (newhp);
-
- overflow:
- *errp = NO_RECOVERY;
- return (NULL);
-}
-
-static char *
-decode_name_dynamic(const char *name) {
- idn_result_t r;
- char buf[IDN_NAME_SIZE];
- char *s;
-
- idn_enable(1);
- idn_nameinit(1);
- r = idn_decodename(IDN_DECODE_APP, name, buf, sizeof(buf));
- if (r == idn_success) {
- name = buf;
- }
- s = malloc(strlen(name) + 1);
- if (s == NULL)
- return (NULL);
- else
- return (strcpy(s, name));
-}
-
-static struct hostent *
-copy_decode_hostent_dynamic(struct hostent *hp, int *errp) {
- /*
- * Make a deep-copy of the data referenced by 'hp', and return
- * a pointer to the copied data.
- * All the data are dynamically allocated using malloc().
- * The domain names ('hp->h_name' and 'hp->h_aliases') are
- * decoded from ACE to the local encoding before they are copied.
- * If malloc() fails, NULL will be returned and '*errp' is set to
- * NO_RECOVERY.
- */
- struct hostent *newhp;
- char **pp;
- size_t alloc_size;
- int naliases = 0;
- int naddrs = 0;
- int i;
-
- if (hp == NULL)
- return (NULL);
-
- if (hp->h_aliases != NULL) {
- while (hp->h_aliases[naliases] != NULL)
- naliases++;
- }
-
- if (hp->h_addr_list != NULL) {
- while (hp->h_addr_list[naddrs] != NULL)
- naddrs++;
- }
-
- alloc_size = sizeof(struct hostent) +
- sizeof(char *) * (naliases + 1) +
- sizeof(char *) * (naddrs + 1) +
- hp->h_length * naddrs;
-
- if ((newhp = malloc(alloc_size)) == NULL) {
- return (hp);
- }
-
- memset(newhp, 0, alloc_size);
-
- pp = (char **)(newhp + 1);
-
- if (hp->h_name != NULL) {
- newhp->h_name = decode_name_dynamic(hp->h_name);
- if (newhp->h_name == NULL)
- goto alloc_fail;
- }
-
- newhp->h_addrtype = hp->h_addrtype;
- newhp->h_length = hp->h_length;
-
- if (hp->h_aliases != NULL) {
- newhp->h_aliases = pp;
- for (i = 0; i < naliases; i++) {
- newhp->h_aliases[i] =
- decode_name_dynamic(hp->h_aliases[i]);
- if (newhp->h_aliases[i] == NULL)
- goto alloc_fail;
- }
- newhp->h_aliases[naliases] = NULL;
- pp += naliases + 1;
- }
-
- if (hp->h_addr_list != NULL) {
- char *p;
-
- newhp->h_addr_list = pp;
- pp += naddrs + 1;
- p = (char *)pp;
-
- for (i = 0; i < naddrs; i++) {
- newhp->h_addr_list[i] = p;
- memcpy(p, hp->h_addr_list[i], hp->h_length);
- p += hp->h_length;
- }
- newhp->h_addr_list[naddrs] = NULL;
- }
-
- return (newhp);
-
- alloc_fail:
- free_copied_hostent(hp);
- *errp = NO_RECOVERY;
- return (NULL);
-}
-
-static void
-free_copied_hostent(struct hostent *hp) {
- /*
- * Free all the memory allocated by copy_decode_hostent_dynamic().
- */
- if (hp->h_name != NULL)
- free(hp->h_name);
- if (hp->h_aliases != NULL) {
- char **pp = hp->h_aliases;
- while (*pp != NULL)
- free(*pp++);
- }
- free(hp);
-}
-
-#ifdef HAVE_GETNAMEINFO
-static struct addrinfo *
-copy_decode_addrinfo_dynamic(struct addrinfo *aip) {
- struct addrinfo *newaip;
-
- if (aip == NULL)
- return (NULL);
-
- newaip = malloc(sizeof(struct addrinfo) + aip->ai_addrlen);
- if (newaip == NULL)
- return (NULL);
-
- *newaip = *aip;
- newaip->ai_addr = (struct sockaddr *)(newaip + 1);
- memcpy(newaip->ai_addr, aip->ai_addr, aip->ai_addrlen);
-
- if (newaip->ai_canonname != NULL)
- newaip->ai_canonname = decode_name_dynamic(aip->ai_canonname);
-
- newaip->ai_next = copy_decode_addrinfo_dynamic(aip->ai_next);
- return (newaip);
-}
-#endif
-
-#ifdef HAVE_FREEADDRINFO
-static void
-free_copied_addrinfo(struct addrinfo *aip) {
- while (aip != NULL) {
- struct addrinfo *next = aip->ai_next;
-
- if (aip->ai_canonname != NULL)
- free(aip->ai_canonname);
- free(aip);
- aip = next;
- }
-}
-#endif
-
-#ifdef HAVE_GETHOSTBYNAME
-struct hostent *
-ENTRY(gethostbyname)(const char *name) {
- static hostbuf_t buf;
- static struct hostent he;
- idn_result_t r;
- struct hostent *hp;
-
- if (idn_isprocessing)
- return (REAL(gethostbyname)(name));
-
- TRACE(("gethostbyname(name=%s)\n", idn__debug_xstring(name, 60)));
-
- idn_isprocessing = 1;
- idn_enable(1);
- idn_nameinit(1);
- r = idn_encodename(IDN_ENCODE_APP, name, buf.data, sizeof(buf));
- if (r == idn_success)
- name = buf.data;
-
- hp = copy_decode_hostent_static(REAL(gethostbyname)(name),
- &he, buf.data, sizeof(buf),
- &h_errno);
- idn_isprocessing = 0;
- return (hp);
-}
-#endif
-
-#ifdef HAVE_GETHOSTBYNAME2
-struct hostent *
-ENTRY(gethostbyname2)(const char *name, int af) {
- static hostbuf_t buf;
- static struct hostent he;
- idn_result_t r;
- struct hostent *hp;
-
- if (idn_isprocessing)
- return (REAL(gethostbyname2)(name, af));
-
- TRACE(("gethostbyname2(name=%s)\n", idn__debug_xstring(name, 60), af));
-
- idn_isprocessing = 1;
- idn_enable(1);
- idn_nameinit(1);
- r = idn_encodename(IDN_ENCODE_APP, name, buf.data, sizeof(buf));
- if (r == idn_success)
- name = buf.data;
-
- hp = copy_decode_hostent_static(REAL(gethostbyname2)(name, af),
- &he, buf.data, sizeof(buf),
- &h_errno);
- idn_isprocessing = 0;
- return (hp);
-}
-#endif
-
-#ifdef HAVE_GETHOSTBYADDR
-struct hostent *
-ENTRY(gethostbyaddr)(GHBA_ADDR_T addr, GHBA_ADDRLEN_T len, int type) {
- static hostbuf_t buf;
- static struct hostent he;
- struct hostent *hp;
-
- if (idn_isprocessing)
- return (REAL(gethostbyaddr)(addr, len, type));
-
- TRACE(("gethostbyaddr()\n"));
-
- idn_isprocessing = 1;
- hp = copy_decode_hostent_static(REAL(gethostbyaddr)(addr, len, type),
- &he, buf.data, sizeof(buf),
- &h_errno);
- idn_isprocessing = 0;
- return (hp);
-}
-#endif
-
-#ifdef GETHOST_R_GLIBC_FLAVOR
-
-#ifdef HAVE_GETHOSTBYNAME_R
-int
-ENTRY(gethostbyname_r)(const char *name, struct hostent *result,
- char *buffer, size_t buflen,
- struct hostent **rp, int *errp)
-{
- char namebuf[IDN_NAME_SIZE];
- char *data;
- size_t datalen;
- idn_result_t r;
- struct hostent he;
- hostbuf_t buf;
- int n;
-
- if (idn_isprocessing)
- return (REAL(gethostbyname_r)(name, result, buffer,
- buflen, rp, errp));
-
- TRACE(("gethostbyname_r(name=%s,buflen=%d)\n",
- idn__debug_xstring(name, 60), buflen));
-
- if (buflen <= sizeof(buf)) {
- data = buf.data;
- datalen = sizeof(buf);
- } else {
- data = malloc(buflen);
- datalen = buflen;
- if (data == NULL) {
- *errp = NO_RECOVERY;
- return (ENOMEM);
- }
- }
-
- idn_isprocessing = 1;
- idn_enable(1);
- idn_nameinit(1);
- r = idn_encodename(IDN_ENCODE_APP, name, namebuf, sizeof(namebuf));
- if (r == idn_success)
- name = namebuf;
-
- *errp = 0;
- n = REAL(gethostbyname_r)(name, &he, data, datalen, rp, errp);
-
- if (n == 0 && *rp != NULL)
- *rp = copy_decode_hostent_static(*rp, result, buffer, buflen,
- errp);
- idn_isprocessing = 0;
-
- if (data != buf.data)
- free(data);
-
- if (*errp != 0)
- n = EINVAL; /* XXX */
-
- return (n);
-}
-#endif
-
-#ifdef HAVE_GETHOSTBYNAME2_R
-int
-ENTRY(gethostbyname2_r)(const char *name, int af, struct hostent *result,
- char *buffer, size_t buflen,
- struct hostent **rp, int *errp)
-{
- char namebuf[IDN_NAME_SIZE];
- char *data;
- size_t datalen;
- idn_result_t r;
- struct hostent he;
- hostbuf_t buf;
- int n;
-
- if (idn_isprocessing)
- return (REAL(gethostbyname2_r)(name, af, result, buffer,
- buflen, rp, errp));
-
- TRACE(("gethostbyname2_r(name=%s,buflen=%d)\n",
- idn__debug_xstring(name, 60), buflen));
-
- if (buflen <= sizeof(buf)) {
- data = buf.data;
- datalen = sizeof(buf);
- } else {
- data = malloc(buflen);
- datalen = buflen;
- if (data == NULL) {
- *errp = NO_RECOVERY;
- return (ENOMEM);
- }
- }
-
- idn_isprocessing = 1;
- idn_enable(1);
- idn_nameinit(1);
- r = idn_encodename(IDN_ENCODE_APP, name, namebuf, sizeof(namebuf));
- if (r == idn_success)
- name = namebuf;
-
- n = REAL(gethostbyname2_r)(name, af, &he, data, datalen, rp, errp);
-
- if (n == 0 && *rp != NULL)
- *rp = copy_decode_hostent_static(*rp, result, buffer, buflen,
- errp);
- idn_isprocessing = 0;
-
- if (data != buf.data)
- free(data);
-
- if (*errp != 0)
- n = EINVAL; /* XXX */
-
- return (n);
-}
-#endif
-
-#ifdef HAVE_GETHOSTBYADDR_R
-int
-ENTRY(gethostbyaddr_r)(GHBA_ADDR_T addr, GHBA_ADDRLEN_T len, int type,
- struct hostent *result,
- char *buffer, size_t buflen,
- struct hostent **rp, int *errp)
-{
- char *data;
- size_t datalen;
- struct hostent he;
- hostbuf_t buf;
- int n;
-
- if (idn_isprocessing) {
- return (REAL(gethostbyaddr_r)(addr, len, type, result,
- buffer, buflen, rp, errp));
- }
-
- TRACE(("gethostbyaddr_r(buflen=%d)\n", buflen));
-
- if (buflen <= sizeof(buf)) {
- data = buf.data;
- datalen = sizeof(buf);
- } else {
- data = malloc(buflen);
- datalen = buflen;
- if (data == NULL) {
- *errp = NO_RECOVERY;
- return (ENOMEM);
- }
- }
-
- idn_isprocessing = 1;
- n = REAL(gethostbyaddr_r)(addr, len, type, &he,
- data, datalen, rp, errp);
-
- if (n == 0 && *rp != NULL)
- *rp = copy_decode_hostent_static(*rp, result, buffer, buflen,
- errp);
- idn_isprocessing = 0;
-
- if (data != buf.data)
- free(data);
-
- if (*errp != 0)
- n = EINVAL; /* XXX */
-
- return (0);
-}
-#endif
-
-#else /* GETHOST_R_GLIBC_FLAVOR */
-
-#ifdef HAVE_GETHOSTBYNAME_R
-struct hostent *
-ENTRY(gethostbyname_r)(const char *name, struct hostent *result,
- char *buffer, int buflen, int *errp)
-{
- char namebuf[IDN_NAME_SIZE];
- char *data;
- size_t datalen;
- idn_result_t r;
- struct hostent *hp, he;
- hostbuf_t buf;
-
- if (idn_isprocessing)
- return (REAL(gethostbyname_r)(name, result, buffer,
- buflen, errp));
-
- TRACE(("gethostbyname_r(name=%s,buflen=%d)\n",
- idn__debug_xstring(name, 60), buflen));
-
- if (buflen <= sizeof(buf)) {
- data = buf.data;
- datalen = sizeof(buf);
- } else {
- data = malloc(buflen);
- datalen = buflen;
- if (data == NULL) {
- *errp = NO_RECOVERY;
- return (NULL);
- }
- }
-
- idn_isprocessing = 1;
- idn_enable(1);
- idn_nameinit(1);
- r = idn_encodename(IDN_ENCODE_APP, name, namebuf, sizeof(namebuf));
- if (r == idn_success)
- name = namebuf;
-
- hp = REAL(gethostbyname_r)(name, &he, data, datalen, errp);
-
- if (hp != NULL)
- hp = copy_decode_hostent_static(hp, result, buffer, buflen,
- errp);
- idn_isprocessing = 0;
-
- if (data != buf.data)
- free(data);
-
- return (hp);
-}
-#endif
-
-#ifdef HAVE_GETHOSTBYADDR_R
-struct hostent *
-ENTRY(gethostbyaddr_r)(GHBA_ADDR_T addr, GHBA_ADDRLEN_T len, int type,
- struct hostent *result,
- char *buffer, int buflen, int *errp)
-{
- char *data;
- size_t datalen;
- struct hostent *hp, he;
- hostbuf_t buf;
-
- if (idn_isprocessing) {
- return (REAL(gethostbyaddr_r)(addr, len, type, result,
- buffer, buflen, errp));
- }
-
- TRACE(("gethostbyaddr_r(buflen=%d)\n", buflen));
-
- if (buflen <= sizeof(buf)) {
- data = buf.data;
- datalen = sizeof(buf);
- } else {
- data = malloc(buflen);
- datalen = buflen;
- if (data == NULL) {
- *errp = NO_RECOVERY;
- return (NULL);
- }
- }
-
- idn_isprocessing = 1;
- hp = REAL(gethostbyaddr_r)(addr, len, type, &he, data, datalen, errp);
-
- if (hp != NULL)
- hp = copy_decode_hostent_static(hp, result, buffer, buflen,
- errp);
- idn_isprocessing = 0;
-
- if (data != buf.data)
- free(data);
-
- return (hp);
-}
-#endif
-
-#endif /* GETHOST_R_GLIBC_FLAVOR */
-
-#ifdef HAVE_GETIPNODEBYNAME
-struct hostent *
-ENTRY(getipnodebyname)(const char *name, int af, int flags, int *errp) {
- char namebuf[IDN_NAME_SIZE];
- idn_result_t r;
- struct hostent *hp;
-
- if (idn_isprocessing)
- return (REAL(getipnodebyname)(name, af, flags, errp));
-
- TRACE(("getipnodebyname(name=%s)\n", idn__debug_xstring(name, 60), af));
-
- idn_isprocessing = 1;
- idn_enable(1);
- idn_nameinit(1);
- r = idn_encodename(IDN_ENCODE_APP, name, namebuf, sizeof(namebuf));
- if (r == idn_success)
- name = namebuf;
-
- hp = REAL(getipnodebyname)(name, af, flags, errp);
- if (hp != NULL) {
- struct hostent *newhp = copy_decode_hostent_dynamic(hp, errp);
- if (newhp != hp) {
- REAL(freehostent)(hp);
- obj_lock(newhp);
- hp = newhp;
- }
- }
- idn_isprocessing = 0;
- return (hp);
-}
-#endif
-
-#ifdef HAVE_GETIPNODEBYADDR
-struct hostent *
-ENTRY(getipnodebyaddr)(const void *src, size_t len, int af, int *errp) {
- struct hostent *hp;
-
- if (idn_isprocessing)
- return (REAL(getipnodebyaddr)(src, len, af, errp));
-
- TRACE(("getipnodebyaddr()\n"));
-
- idn_isprocessing = 1;
- hp = REAL(getipnodebyaddr)(src, len, af, errp);
- if (hp != NULL) {
- struct hostent *newhp = copy_decode_hostent_dynamic(hp, errp);
- if (newhp != hp) {
- REAL(freehostent)(hp);
- obj_lock(newhp);
- hp = newhp;
- }
- }
- idn_isprocessing = 0;
- return (hp);
-}
-#endif
-
-#ifdef HAVE_FREEHOSTENT
-void
-ENTRY(freehostent)(struct hostent *hp) {
- TRACE(("freehostent(hp=%p)\n", (void *)hp));
-
- if (obj_islocked(hp)) {
- /*
- * We allocated the data.
- */
- obj_unlock(hp);
- free_copied_hostent(hp);
- } else {
- /*
- * It was allocated the original getipnodeby*().
- */
- REAL(freehostent)(hp);
- }
-}
-#endif
-
-#ifdef HAVE_GETADDRINFO
-int
-ENTRY(getaddrinfo)(const char *nodename, const char *servname,
- const struct addrinfo *hints, struct addrinfo **res)
-{
- char namebuf[IDN_NAME_SIZE];
- idn_result_t r;
- struct addrinfo *aip;
- int err;
-
- if (nodename == NULL || idn_isprocessing)
- return (REAL(getaddrinfo)(nodename, servname, hints, res));
-
- TRACE(("getaddrinfo(nodename=%s)\n", idn__debug_xstring(nodename, 60)));
-
- idn_isprocessing = 1;
- idn_enable(1);
- idn_nameinit(1);
- r = idn_encodename(IDN_ENCODE_APP, nodename,
- namebuf, sizeof(namebuf));
- if (r == idn_success)
- nodename = namebuf;
-
- err = REAL(getaddrinfo)(nodename, servname, hints, &aip);
- if (err == 0 && aip != NULL) {
- *res = copy_decode_addrinfo_dynamic(aip);
- if (*res == NULL)
- err = EAI_FAIL;
- else
- obj_lock(*res);
- if (aip != NULL)
- REAL(freeaddrinfo)(aip);
- }
- idn_isprocessing = 0;
- return (err);
-}
-#endif
-
-#ifdef HAVE_FREEADDRINFO
-void
-ENTRY(freeaddrinfo)(struct addrinfo *aip) {
- TRACE(("freeaddrinfo(aip=%p)\n", (void *)aip));
-
- if (obj_islocked(aip)) {
- /*
- * We allocated the data.
- */
- obj_unlock(aip);
- free_copied_addrinfo(aip);
- } else {
- /*
- * It was allocated the original getaddrinfo().
- */
- REAL(freeaddrinfo)(aip);
- }
-}
-#endif
-
-#ifdef HAVE_GETNAMEINFO
-int
-ENTRY(getnameinfo)(const struct sockaddr *sa, GNI_SALEN_T salen,
- char *host, GNI_HOSTLEN_T hostlen, char *serv,
- GNI_SERVLEN_T servlen, GNI_FLAGS_T flags)
-{
- char name[IDN_NAME_SIZE];
- size_t namelen = sizeof(name);
- int code;
- idn_result_t r;
-
- if (host == NULL || hostlen == 0 || idn_isprocessing) {
- return (REAL(getnameinfo)(sa, salen, host, hostlen,
- serv, servlen, flags));
- }
-
- TRACE(("getnameinfo(hostlen=%u)\n", hostlen));
-
- idn_isprocessing = 1;
- code = REAL(getnameinfo)(sa, salen, name, namelen,
- serv, servlen, flags);
- if (code == 0 && name[0] != '\0') {
- idn_enable(1);
- idn_nameinit(1);
- r = idn_decodename(IDN_DECODE_APP, name, host, hostlen);
- switch (r) {
- case idn_success:
- code = 0;
- break;
- case idn_buffer_overflow:
- case idn_nomemory:
- code = EAI_MEMORY;
- break;
- default:
- code = EAI_FAIL;
- break;
- }
- }
- idn_isprocessing = 0;
- return (code);
-}
-#endif
diff --git a/contrib/idn/idnkit-1.0-src/tools/runidn/resolver.h b/contrib/idn/idnkit-1.0-src/tools/runidn/resolver.h
deleted file mode 100644
index c11dab18..00000000
--- a/contrib/idn/idnkit-1.0-src/tools/runidn/resolver.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* $Id: resolver.h,v 1.1 2003/06/04 00:27:13 marka Exp $ */
-/*
- * Copyright (c) 2001 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef RESOLVER_H
-#define RESOLVER_H 1
-
-#undef gethostbyname
-#define gethostbyname idn_resolver_gethostbyname
-#undef gethostbyname2
-#define gethostbyname2 idn_resolver_gethostbyname2
-#undef gethostbyname_r
-#define gethostbyname_r idn_resolver_gethostbyname_r
-#undef gethostbyaddr
-#define gethostbyaddr idn_resolver_gethostbyaddr
-#undef gethostbyaddr
-#define gethostbyaddr_r idn_resolver_gethostbyaddr_r
-#undef getipnodebyname
-#define getipnodebyname idn_resolver_getipnodebyname
-#undef getipnodebyaddr
-#define getipnodebyaddr idn_resolver_getipnodebyaddr
-#undef freehostent
-#define freehostent idn_resolver_freehostent
-#undef getaddrinfo
-#define getaddrinfo idn_resolver_getaddrinfo
-#undef freeaddrinfo
-#define freeaddrinfo idn_resolver_freeaddrinfo
-#undef getnameinfo
-#define getnameinfo idn_resolver_getnameinfo
-
-#endif /* RESOLVER_H */
diff --git a/contrib/idn/idnkit-1.0-src/tools/runidn/runidn.1 b/contrib/idn/idnkit-1.0-src/tools/runidn/runidn.1
deleted file mode 100644
index 244e6111..00000000
--- a/contrib/idn/idnkit-1.0-src/tools/runidn/runidn.1
+++ /dev/null
@@ -1,151 +0,0 @@
-.\" $Id: runidn.1,v 1.1 2003/06/04 00:27:14 marka Exp $
-.\"
-.\" Copyright (c) 2000,2001 Japan Network Information Center.
-.\" All rights reserved.
-.\"
-.\" By using this file, you agree to the terms and conditions set forth bellow.
-.\"
-.\" LICENSE TERMS AND CONDITIONS
-.\"
-.\" The following License Terms and Conditions apply, unless a different
-.\" license is obtained from Japan Network Information Center ("JPNIC"),
-.\" a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-.\" Chiyoda-ku, Tokyo 101-0047, Japan.
-.\"
-.\" 1. Use, Modification and Redistribution (including distribution of any
-.\" modified or derived work) in source and/or binary forms is permitted
-.\" under this License Terms and Conditions.
-.\"
-.\" 2. Redistribution of source code must retain the copyright notices as they
-.\" appear in each source code file, this License Terms and Conditions.
-.\"
-.\" 3. Redistribution in binary form must reproduce the Copyright Notice,
-.\" this License Terms and Conditions, in the documentation and/or other
-.\" materials provided with the distribution. For the purposes of binary
-.\" distribution the "Copyright Notice" refers to the following language:
-.\" "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-.\"
-.\" 4. The name of JPNIC may not be used to endorse or promote products
-.\" derived from this Software without specific prior written approval of
-.\" JPNIC.
-.\"
-.\" 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-.\" PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-.\" BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-.\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-.\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-.\"
-.TH RUNIDN 1 "April 6, 2001"
-.\"
-.SH NAME
-runidn \- A script to allow applications to use internationalized domain names.
-.\"
-.SH SYNOPSIS
-\fBrunidn\fP [\fB-e\fP \fIlocal-codeset\fP] \fIprogram-name\fP [\fIargs..\fP]
-.\"
-.SH DESCRIPTION
-\fBrunidn\fP enables applications to use internationalized domain names
-without recompilation.
-Just add ``runidn'' before the application-name, and the application
-can handle non-ASCII domain names. For example, you can do:
-.PP
-.RS 4
-.nf
-\f(CW% runidn telnet \fInon-ASCII-hostname\fR
-.fi
-.RE
-.PP
-Before using runidn, you should set up properties related to
-internationalized DNS by configuring idnkit's configuration file
-\fBidn.conf\fP.
-See idn.conf(5) which describes the configuration.
-.\"
-.SH OPTION
-The following option is available:
-.TP 4
-\fB\-e\fP \fIlocal-codeset\fP
-Specify the application's local codeset.
-If the option is not specified, \fBrunidn\fR guesses the codeset
-from the current locale.
-See the ``NOTE'' section for more details about local codeset.
-.\"
-.SH IMPLEMENTATION
-\fBrunidn\fR is a small shell script that sets up an environment variable
-called ``LD_PRELOAD'', so that an application dynamically links a shared
-library ``libidnkitres'' before any other shared libraries.
-.PP
-The library ``libidnkitres'' provides a special version of resolver
-functions which implement features for handling internationalized
-domain names.
-\fBrunidn\fR replaces the following functions with the special version:
-.PP
-.RS 4
-.nf
-.ft CW
-gethostbyname
-gethostbyname2
-gethostbyaddr
-gethostbyname_r
-gethostbyname2_r
-gethostbyaddr_r
-getipnodebyname
-getipnodebyaddr
-freehostent
-getaddrinfo
-freeaddrinfo
-getnameinfo
-.ft R
-.fi
-.RE
-.PP
-By overriding them in the standard libraries with the special version
-provided by ``libidnkitres'',
-\fBrunidn\fR enables applications to use internationalized domain names.
-.RS 4
-.IP \(bu 2
-These API functions accept non-ASCII domain names encoded
-in the local codeset that the application is using.
-Also the result from these APIs may contain non-ASCII domain names.
-.IP \(bu 2
-The normalization and codeset conversion between application's local
-codeset and the codeset used in DNS protocol data are handled
-automatically, so users/applications need not worry about them.
-.RE
-.PP
-Properties of internationalized DNS (such as the normalization or
-the codeset used on DNS protocol data) can be configured with the
-idnkit's configuration file (\fBidn.conf\fR).
-See idn.conf(5) for details.
-.\"
-.SH NOTE
-Unless \fB\-e\fP option is specified, \fBrunidn\fR tries to guess
-the application's local codeset from the application's current locale.
-However, sometimes it cannot guess the codeset correctly, for example
-if the application does not set the locale appropriately by calling
-`setlocale()'.
-In that case, you can explicitly specify the local codeset by setting an
-environment variable ``IDN_LOCAL_CODESET''.
-See the section ``LOCAL CODESET'' in idn.conf(5) for details.
-.PP
-The idea of using ``LD_PRELOAD'' to replace some functions in the standard
-library was taken from ``runsocks'' script distributed as part of SOCKS5
-reference implementation.
-.SH BUGS
-There are many cases where \fBrunidn\fR does not work.
-.PP
-Your system must support ``LD_PRELOAD'' mechanism in the first place.
-.PP
-Due to security reasons, ``LD_PRELOAD'' mechanism is disabled for
-setuid programs in any sane systems.
-So \fBrunidn\fR does not work for setuid programs such as ping or rsh.
-.PP
-If your application uses a function other than the ones runidn supports for
-name resolution, you lose.
-.SH "SEE ALSO"
-idn.conf(5), runsocks(1)
diff --git a/contrib/idn/idnkit-1.0-src/tools/runidn/runidn.in b/contrib/idn/idnkit-1.0-src/tools/runidn/runidn.in
deleted file mode 100644
index 3ee6d873..00000000
--- a/contrib/idn/idnkit-1.0-src/tools/runidn/runidn.in
+++ /dev/null
@@ -1,109 +0,0 @@
-#! /bin/sh
-# $Id: runidn.in,v 1.1 2003/06/04 00:27:14 marka Exp $
-#
-# Copyright (c) 2000 Japan Network Information Center. All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-# Parse command line options.
-usage="Usage: `basename $0` [-e local-encoding] command [argument..]"
-while test $# -gt 0; do
- case "$1" in
- -e)
- if test $# -le 1; then
- echo $usage 1>&2
- exit 1
- fi
- IDN_LOCAL_CODESET="$2"
- export IDN_LOCAL_CODESET
- shift
- ;;
- -)
- break
- ;;
- -*)
- echo $usage 1>&2
- exit 1
- ;;
- *)
- break
- ;;
- esac
- shift
-done
-if test $# -eq 0; then
- echo $usage 1>&2
- exit 1
-fi
-
-# Load library info.
-preload=
-iconv_file=@ICONVSOFILE@
-if test "$iconv_file" != none; then
- preload="$iconv_file@PRELOAD_SEP@"
-fi
-
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=`echo @libdir@`
-if test ! -f $libdir/libidnkitres.la; then
- cat <<EOF 1>&2
-Have you installed idnkit? I cannot find libidnkitres.la.
-EOF
- exit 1
-fi
-eval `grep '^dlname' $libdir/libidnkitres.la`
-if test "$dlname" = ""; then
- cat <<EOF 1>&2
-Sorry, runidn won't work because libidnkitres is not dynamically loadable.
-EOF
- exit 1
-fi
-preload=$preload$libdir/$dlname
-
-# Set @PRELOAD_VAR@.
-if [ X$@PRELOAD_VAR@ = X ]; then
- @PRELOAD_VAR@="$preload@PRELOAD_LAST@"
-else
- @PRELOAD_VAR@="$preload@PRELOAD_SEP@$@PRELOAD_VAR@@PRELOAD_LAST@"
-fi
-export @PRELOAD_VAR@
-
-# Shoot.
-exec "$@"
diff --git a/contrib/idn/idnkit-1.0-src/tools/runidn/stub.c b/contrib/idn/idnkit-1.0-src/tools/runidn/stub.c
deleted file mode 100644
index b5e203c3..00000000
--- a/contrib/idn/idnkit-1.0-src/tools/runidn/stub.c
+++ /dev/null
@@ -1,387 +0,0 @@
-#ifndef lint
-static char *rcsid = "$Id: stub.c,v 1.1 2003/06/04 00:27:13 marka Exp $";
-#endif
-
-/*
- * Copyright (c) 2001 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <config.h>
-
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netdb.h>
-#include <errno.h>
-#ifdef HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <idn/logmacro.h>
-#include <idn/debug.h>
-
-#include "stub.h"
-
-#ifndef RTLD_NEXT
-typedef struct {
- const char *name;
- void *handle;
-} shared_obj_t;
-
-static shared_obj_t shobj[] = {
-#ifdef SOPATH_LIBC
- { SOPATH_LIBC },
-#endif
-#ifdef SOPATH_LIBNSL
- { SOPATH_LIBNSL },
-#endif
- { NULL },
-};
-#endif
-
-static void *shared_obj_findsym(void *handle, const char *name);
-static void *shared_obj_findsymx(void *handle, const char *name);
-static void *get_func_addr(const char *name);
-
-#ifndef RTLD_NEXT
-static void *
-shared_obj_open(const char *path) {
-#ifdef HAVE_DLOPEN
- return (dlopen(path, RTLD_LAZY));
-#endif
- FATAL(("stub: no way to load shared object file\n"));
- return (NULL);
-}
-#endif
-
-static void *
-shared_obj_findsym(void *handle, const char *name) {
- char namebuf[100];
- void *addr;
- static int need_leading_underscore = -1;
-
- /* Prepend underscore. */
- namebuf[0] = '_';
- (void)strcpy(namebuf + 1, name);
- name = namebuf;
-
- if (need_leading_underscore < 0) {
- /* First try without one. */
- if ((addr = shared_obj_findsymx(handle, name + 1)) != NULL) {
- need_leading_underscore = 0;
- return (addr);
- }
- /* Then try with one. */
- if ((addr = shared_obj_findsymx(handle, name)) != NULL) {
- need_leading_underscore = 1;
- return (addr);
- }
- } else if (need_leading_underscore) {
- return (shared_obj_findsymx(handle, name));
- } else {
- return (shared_obj_findsymx(handle, name + 1));
- }
- return (NULL);
-}
-
-static void *
-shared_obj_findsymx(void *handle, const char *name) {
-#ifdef HAVE_DLSYM
- return (dlsym(handle, name));
-#endif
- /* logging */
- FATAL(("stub: no way to get symbol address\n"));
- return (NULL);
-}
-
-static void *
-get_func_addr(const char *name) {
-#ifdef RTLD_NEXT
- void *addr = shared_obj_findsym(RTLD_NEXT, name);
-
- if (addr != NULL) {
- TRACE(("stub: %s found in the subsequent objects\n", name));
- return (addr);
- }
-#else
- int i;
-
- for (i = 0; shobj[i].name != NULL; i++) {
- if (shobj[i].handle == NULL) {
- TRACE(("stub: loading %s\n", shobj[i].name));
- shobj[i].handle = shared_obj_open(shobj[i].name);
- }
- if (shobj[i].handle != NULL) {
- void *addr = shared_obj_findsym(shobj[i].handle, name);
- if (addr != NULL) {
- TRACE(("stub: %s found in %s\n",
- name, shobj[i].name));
- return (addr);
- }
- }
- }
-#endif
- TRACE(("stub: %s not found\n", name));
- return (NULL);
-}
-
-#ifdef HAVE_GETHOSTBYNAME
-struct hostent *
-idn_stub_gethostbyname(const char *name) {
- static struct hostent *(*fp)(const char *name);
-
- if (fp == NULL)
- fp = get_func_addr("gethostbyname");
- if (fp != NULL)
- return ((*fp)(name));
- return (NULL);
-}
-#endif
-
-#ifdef HAVE_GETHOSTBYNAME2
-struct hostent *
-idn_stub_gethostbyname2(const char *name, int af) {
- static struct hostent *(*fp)(const char *name, int af);
-
- if (fp == NULL)
- fp = get_func_addr("gethostbyname2");
- if (fp != NULL)
- return ((*fp)(name, af));
- return (NULL);
-}
-#endif
-
-#ifdef HAVE_GETHOSTBYADDR
-struct hostent *
-idn_stub_gethostbyaddr(GHBA_ADDR_T addr, GHBA_ADDRLEN_T len, int type) {
- static struct hostent *(*fp)(GHBA_ADDR_T name,
- GHBA_ADDRLEN_T len, int type);
-
- if (fp == NULL)
- fp = get_func_addr("gethostbyaddr");
- if (fp != NULL)
- return ((*fp)(addr, len, type));
- return (NULL);
-}
-#endif
-
-#ifdef GETHOST_R_GLIBC_FLAVOR
-
-#ifdef HAVE_GETHOSTBYNAME_R
-int
-idn_stub_gethostbyname_r(const char *name, struct hostent *result,
- char *buffer, size_t buflen,
- struct hostent **rp, int *errp)
-{
- static int (*fp)(const char *name, struct hostent *result,
- char *buffer, size_t buflen,
- struct hostent **rp, int *errp);
-
- if (fp == NULL)
- fp = get_func_addr("gethostbyname_r");
- if (fp != NULL)
- return ((*fp)(name, result, buffer, buflen, rp, errp));
- return (ENOENT); /* ??? */
-}
-#endif
-
-#ifdef HAVE_GETHOSTBYNAME2_R
-int
-idn_stub_gethostbyname2_r(const char *name, int af, struct hostent *result,
- char *buffer, size_t buflen,
- struct hostent **rp, int *errp)
-{
- static int (*fp)(const char *name, int af, struct hostent *result,
- char *buffer, size_t buflen,
- struct hostent **rp, int *errp);
-
- if (fp == NULL)
- fp = get_func_addr("gethostbyname2_r");
- if (fp != NULL)
- return ((*fp)(name, af, result, buffer, buflen, rp, errp));
- return (ENOENT); /* ??? */
-}
-#endif
-
-#ifdef HAVE_GETHOSTBYADDR_R
-int
-idn_stub_gethostbyaddr_r(GHBA_ADDR_T addr, GHBA_ADDRLEN_T len, int type,
- struct hostent *result, char *buffer,
- size_t buflen, struct hostent **rp, int *errp)
-{
- static int (*fp)(GHBA_ADDR_T addr, GHBA_ADDRLEN_T len, int type,
- struct hostent *result, char *buffer,
- size_t buflen, struct hostent **rp, int *errp);
-
- if (fp == NULL)
- fp = get_func_addr("gethostbyaddr_r");
- if (fp != NULL)
- return ((*fp)(addr, len, type, result,
- buffer, buflen, rp, errp));
- return (ENOENT); /* ??? */
-}
-#endif
-
-#else /* GETHOST_R_GLIBC_FLAVOR */
-
-#ifdef HAVE_GETHOSTBYNAME_R
-struct hostent *
-idn_stub_gethostbyname_r(const char *name, struct hostent *result,
- char *buffer, int buflen, int *errp)
-{
- static struct hostent *(*fp)(const char *name, struct hostent *result,
- char *buffer, int buflen, int *errp);
-
- if (fp == NULL)
- fp = get_func_addr("gethostbyname_r");
- if (fp != NULL)
- return ((*fp)(name, result, buffer, buflen, errp));
- return (NULL);
-}
-#endif
-
-#ifdef HAVE_GETHOSTBYADDR_R
-struct hostent *
-idn_stub_gethostbyaddr_r(GHBA_ADDR_T addr, int len, int type,
- struct hostent *result, char *buffer,
- int buflen, int *errp)
-{
- static struct hostent *(*fp)(GHBA_ADDR_T addr, int len, int type,
- struct hostent *result, char *buffer,
- int buflen, int *errp);
-
- if (fp == NULL)
- fp = get_func_addr("gethostbyaddr_r");
- if (fp != NULL)
- return ((*fp)(addr, len, type, result, buffer, buflen, errp));
- return (NULL);
-}
-#endif
-
-#endif /* GETHOST_R_GLIBC_FLAVOR */
-
-#ifdef HAVE_GETIPNODEBYNAME
-struct hostent *
-idn_stub_getipnodebyname(const char *name, int af, int flags, int *errp) {
- static struct hostent *(*fp)(const char *name, int af, int flags,
- int *errp);
-
- if (fp == NULL)
- fp = get_func_addr("getipnodebyname");
- if (fp != NULL)
- return ((*fp)(name, af, flags, errp));
- return (NULL);
-}
-#endif
-
-#ifdef HAVE_GETIPNODEBYADDR
-struct hostent *
-idn_stub_getipnodebyaddr(const void *src, size_t len, int af, int *errp) {
- static struct hostent *(*fp)(const void *src, size_t len, int af,
- int *errp);
-
- if (fp == NULL)
- fp = get_func_addr("getipnodebyaddr");
- if (fp != NULL)
- return ((*fp)(src, len, af, errp));
- return (NULL);
-}
-#endif
-
-#ifdef HAVE_FREEHOSTENT
-void
-idn_stub_freehostent(struct hostent *hp) {
- static void (*fp)(struct hostent *hp);
-
- if (fp == NULL)
- fp = get_func_addr("freehostent");
- if (fp != NULL)
- (*fp)(hp);
-}
-#endif
-
-#ifdef HAVE_GETADDRINFO
-int
-idn_stub_getaddrinfo(const char *nodename, const char *servname,
- const struct addrinfo *hints, struct addrinfo **res)
-{
- static int (*fp)(const char *nodename, const char *servname,
- const struct addrinfo *hints, struct addrinfo **res);
-
- if (fp == NULL)
- fp = get_func_addr("getaddrinfo");
- if (fp != NULL)
- return ((*fp)(nodename, servname, hints, res));
- return (EAI_FAIL);
-}
-#endif
-
-#ifdef HAVE_FREEADDRINFO
-void
-idn_stub_freeaddrinfo(struct addrinfo *aip) {
- static void (*fp)(struct addrinfo *aip);
-
- if (fp == NULL)
- fp = get_func_addr("freeaddrinfo");
- if (fp != NULL)
- (*fp)(aip);
-}
-#endif
-
-#ifdef HAVE_GETNAMEINFO
-int
-idn_stub_getnameinfo(const struct sockaddr *sa, GNI_SALEN_T salen,
- char *host, GNI_HOSTLEN_T hostlen,
- char *serv, GNI_SERVLEN_T servlen, GNI_FLAGS_T flags) {
- static int (*fp)(const struct sockaddr *sa, GNI_SALEN_T salen,
- char *host, GNI_HOSTLEN_T hostlen,
- char *serv, GNI_SERVLEN_T servlen,
- GNI_FLAGS_T flags);
-
- if (fp == NULL)
- fp = get_func_addr("getnameinfo");
- if (fp != NULL)
- return ((*fp)(sa, salen, host, hostlen, serv, servlen, flags));
- return (EAI_FAIL);
-}
-#endif
diff --git a/contrib/idn/idnkit-1.0-src/tools/runidn/stub.h b/contrib/idn/idnkit-1.0-src/tools/runidn/stub.h
deleted file mode 100644
index bb4e3d26..00000000
--- a/contrib/idn/idnkit-1.0-src/tools/runidn/stub.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/* $Id: stub.h,v 1.1 2003/06/04 00:27:13 marka Exp $ */
-
-#ifndef STUB_H
-#define STUB_H
-
-#ifdef HAVE_GETHOSTBYNAME
-extern struct hostent *
-idn_stub_gethostbyname(const char *name);
-#endif
-
-#ifdef GETHOST_R_GLIBC_FLAVOR
-#ifdef HAVE_GETHOSTBYNAME_R
-extern int
-idn_stub_gethostbyname_r(const char *name, struct hostent *result,
- char *buffer, size_t buflen,
- struct hostent **rp, int *errp);
-#endif
-#else /* GETHOST_R_GLIBC_FLAVOR */
-#ifdef HAVE_GETHOSTBYNAME_R
-extern struct hostent *
-idn_stub_gethostbyname_r(const char *name, struct hostent *result,
- char *buffer, int buflen, int *errp);
-#endif
-#endif /* GETHOST_R_GLIBC_FLAVOR */
-
-#ifdef HAVE_GETHOSTBYNAME2
-extern struct hostent *
-idn_stub_gethostbyname2(const char *name, int af);
-#endif
-
-#ifdef GETHOST_R_GLIBC_FLAVOR
-#ifdef HAVE_GETHOSTBYNAME2_R
-extern int
-idn_stub_gethostbyname2_r(const char *name, int af, struct hostent *result,
- char *buffer, size_t buflen,
- struct hostent **rp, int *errp);
-#endif
-#endif /* GETHOST_R_GLIBC_FLAVOR */
-
-#ifdef HAVE_GETHOSTBYADDR
-extern struct hostent *
-idn_stub_gethostbyaddr(GHBA_ADDR_T addr, GHBA_ADDRLEN_T len, int type);
-#endif
-
-#ifdef GETHOST_R_GLIBC_FLAVOR
-#ifdef HAVE_GETHOSTBYADDR_R
-extern int
-idn_stub_gethostbyaddr_r(GHBA_ADDR_T addr, GHBA_ADDRLEN_T len, int type,
- struct hostent *result, char *buffer,
- size_t buflen, struct hostent **rp, int *errp);
-#endif
-#else /* GETHOST_R_GLIBC_FLAVOR */
-#ifdef HAVE_GETHOSTBYADDR_R
-extern struct hostent *
-idn_stub_gethostbyaddr_r(GHBA_ADDR_T addr, GHBA_ADDRLEN_T len, int type,
- struct hostent *result, char *buffer,
- int buflen, int *errp);
-#endif
-#endif /* GETHOST_R_GLIBC_FLAVOR */
-
-#ifdef HAVE_GETIPNODEBYNAME
-extern struct hostent *
-idn_stub_getipnodebyname(const char *name, int af, int flags, int *errp);
-#endif
-
-#ifdef HAVE_GETIPNODEBYADDR
-extern struct hostent *
-idn_stub_getipnodebyaddr(const void *src, size_t len, int af, int *errp);
-#endif
-
-#ifdef HAVE_FREEHOSTENT
-extern void
-idn_stub_freehostent(struct hostent *hp);
-#endif
-
-#ifdef HAVE_GETADDRINFO
-extern int
-idn_stub_getaddrinfo(const char *nodename, const char *servname,
- const struct addrinfo *hints, struct addrinfo **res);
-#endif
-
-#ifdef HAVE_FREEADDRINFO
-extern void
-idn_stub_freeaddrinfo(struct addrinfo *aip);
-#endif
-
-#ifdef HAVE_GETNAMEINFO
-extern int
-idn_stub_getnameinfo(const struct sockaddr *sa, GNI_SALEN_T salen,
- char *host, GNI_HOSTLEN_T hostlen, char *serv,
- GNI_SERVLEN_T servlen, GNI_FLAGS_T flags);
-#endif
-
-#endif /* STUB_H */
diff --git a/contrib/idn/idnkit-1.0-src/util/Makefile b/contrib/idn/idnkit-1.0-src/util/Makefile
deleted file mode 100644
index 9acbbc5d..00000000
--- a/contrib/idn/idnkit-1.0-src/util/Makefile
+++ /dev/null
@@ -1,43 +0,0 @@
-# $Id: Makefile,v 1.1 2003/06/04 00:27:52 marka Exp $
-
-PERL = /usr/local/bin/perl -w
-
-V301_NORM_DIR = data/unicode-3.0.0
-V310_NORM_DIR = data/unicode-3.1.0
-V320_NORM_DIR = data/unicode-3.2.0
-NORM_GENERATOR = ./generate_normalize_data.pl
-
-NAMEPREP_DIR = data/nameprep
-NAMEPREP_FILES = \
- $(NAMEPREP_DIR)/nameprep.rfc3491.map \
- $(NAMEPREP_DIR)/nameprep.rfc3491.prohibited \
- $(NAMEPREP_DIR)/nameprep.rfc3491.unassigned \
- $(NAMEPREP_DIR)/nameprep.rfc3491.bidi
-NAMEPREP_GENERATOR = ./generate_nameprep_data.pl
-NAMEPREP_VERSIONS = rfc3491
-
-all: normalize nameprep
-
-normalize: ../lib/unicodedata_320.c
-
-nameprep: ../lib/nameprepdata.c
-
-../lib/unicodedata_301.c: $(NORM_GENERATOR)
- -rm -f $@.tmp
- $(PERL) $(NORM_GENERATOR) -prefix v301_ -dir $(V301_NORM_DIR) \
- > $@.tmp && mv $@.tmp $@
-
-../lib/unicodedata_310.c: $(NORM_GENERATOR)
- -rm -f $@.tmp
- $(PERL) $(NORM_GENERATOR) -prefix v310_ -dir $(V310_NORM_DIR) \
- > $@.tmp && mv $@.tmp $@
-
-../lib/unicodedata_320.c: $(NORM_GENERATOR)
- -rm -f $@.tmp
- $(PERL) $(NORM_GENERATOR) -prefix v320_ -dir $(V320_NORM_DIR) \
- > $@.tmp && mv $@.tmp $@
-
-../lib/nameprepdata.c: $(NAMEPREP_GENERATOR) $(NAMEPREP_FILES)
- -rm -f $@.tmp
- $(PERL) $(NAMEPREP_GENERATOR) -dir $(NAMEPREP_DIR) \
- $(NAMEPREP_VERSIONS) > $@.tmp && mv $@.tmp $@
diff --git a/contrib/idn/idnkit-1.0-src/util/SparseMap.pm b/contrib/idn/idnkit-1.0-src/util/SparseMap.pm
deleted file mode 100644
index ca9933b7..00000000
--- a/contrib/idn/idnkit-1.0-src/util/SparseMap.pm
+++ /dev/null
@@ -1,575 +0,0 @@
-# $Id: SparseMap.pm,v 1.1 2003/06/04 00:27:53 marka Exp $
-#
-# Copyright (c) 2001 Japan Network Information Center. All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-#
-
-package SparseMap;
-
-use strict;
-use Carp;
-
-my $debug = 0;
-
-sub new {
- # common options are:
- # BITS => [8, 7, 6], # 3-level map, 2nd level bits=7, 3rd = 6.
- # MAX => 0x110000 # actually, max + 1.
- my $class = shift;
- my $self = {@_};
-
- croak "BITS unspecified" unless exists $self->{BITS};
- croak "BITS is not an array reference"
- unless ref($self->{BITS}) eq 'ARRAY';
- croak "MAX unspecified" unless exists $self->{MAX};
-
- $self->{MAXLV} = @{$self->{BITS}} - 1;
- $self->{FIXED} = 0;
-
- my $lv0size = (indices($self, $self->{MAX} - 1))[0] + 1;
-
- my @map = (undef) x $lv0size;
- $self->{MAP} = \@map;
-
- bless $self, $class;
-}
-
-sub add1 {
- my ($self, $n, $val) = @_;
-
- croak "Already fixed" if $self->{FIXED};
- carp("data ($n) out of range"), return if $n >= $self->{MAX};
-
- my @index = $self->indices($n);
- my $r = $self->{MAP};
- my $maxlv = $self->{MAXLV};
- my $idx;
- my $lv;
-
- for ($lv = 0; $lv < $maxlv - 1; $lv++) {
- $idx = $index[$lv];
- $r->[$idx] = $self->create_imap($lv + 1, undef)
- unless defined $r->[$idx];
- $r = $r->[$idx];
- }
- $idx = $index[$lv];
- $r->[$idx] = $self->create_dmap() unless defined $r->[$idx];
- $self->add_to_dmap($r->[$idx], $index[$maxlv], $val);
-}
-
-sub fix {
- my $self = shift;
- my $map = $self->{MAP};
- my $maxlv = $self->{MAXLV};
- my @tmp;
- my @zero;
-
- carp "Already fixed" if $self->{FIXED};
- $self->collapse_tree();
- $self->fill_default();
- $self->{FIXED} = 1;
-}
-
-sub indices {
- my $self = shift;
- my $v = shift;
- my @bits = @{$self->{BITS}};
- my @idx;
-
- print "indices($v,", join(',', @bits), ") = " if $debug;
- for (my $i = @bits - 1; $i >= 0; $i--) {
- my $bit = $bits[$i];
- unshift @idx, $v & ((1 << $bit) - 1);
- $v = $v >> $bit;
- }
- print "(", join(',', @idx), ")\n" if $debug;
- @idx;
-}
-
-sub get {
- my $self = shift;
- my $v = shift;
- my $map = $self->{MAP};
- my @index = $self->indices($v);
-
- croak "Not yet fixed" unless $self->{FIXED};
-
- my $lastidx = pop @index;
- foreach my $idx (@index) {
- return $map->{DEFAULT} unless defined $map->[$idx];
- $map = $map->[$idx];
- }
- $map->[$lastidx];
-}
-
-sub indirectmap {
- my $self = shift;
-
- croak "Not yet fixed" unless $self->{FIXED};
-
- my @maps = $self->collect_maps();
- my $maxlv = $self->{MAXLV};
- my @bits = @{$self->{BITS}};
-
- my @indirect = ();
- for (my $lv = 0; $lv < $maxlv; $lv++) {
- my $offset;
- my $chunksz;
- my $mapsz = @{$maps[$lv]->[0]};
- if ($lv < $maxlv - 1) {
- # indirect map
- $offset = @indirect + @{$maps[$lv]} * @{$maps[$lv]->[0]};
- $chunksz = (1 << $bits[$lv + 1]);
- } else {
- # direct map
- $offset = 0;
- $chunksz = 1;
- }
- my $nextmaps = $maps[$lv + 1];
- foreach my $mapref (@{$maps[$lv]}) {
- croak "mapsize inconsistent ", scalar(@$mapref),
- " should be ", $mapsz, " (lv $lv)\n" if @$mapref != $mapsz;
- foreach my $m (@$mapref) {
- my $idx;
- for ($idx = 0; $idx < @$nextmaps; $idx++) {
- last if $nextmaps->[$idx] == $m;
- }
- croak "internal error: map corrupted" if $idx >= @$nextmaps;
- push @indirect, $offset + $chunksz * $idx;
- }
- }
- }
- @indirect;
-}
-
-sub cprog_imap {
- my $self = shift;
- my %opt = @_;
- my $name = $opt{NAME} || 'map';
- my @indirect = $self->indirectmap();
- my $prog;
- my $i;
- my ($idtype, $idcol, $idwid);
-
- my $max = 0;
- $max < $_ and $max = $_ foreach @indirect;
-
- if ($max < 256) {
- $idtype = 'char';
- $idcol = 8;
- $idwid = 3;
- } elsif ($max < 65536) {
- $idtype = 'short';
- $idcol = 8;
- $idwid = 5;
- } else {
- $idtype = 'long';
- $idcol = 4;
- $idwid = 10;
- }
- $prog = "static const unsigned $idtype ${name}_imap[] = {\n";
- $i = 0;
- foreach my $v (@indirect) {
- if ($i % $idcol == 0) {
- $prog .= "\n" if $i != 0;
- $prog .= "\t";
- }
- $prog .= sprintf "%${idwid}d, ", $v;
- $i++;
- }
- $prog .= "\n};\n";
- $prog;
-}
-
-sub cprog {
- my $self = shift;
- $self->cprog_imap(@_) . "\n" . $self->cprog_dmap(@_);
-}
-
-sub stat {
- my $self = shift;
- my @maps = $self->collect_maps();
- my $elsize = $self->{ELSIZE};
- my $i;
- my $total = 0;
- my @lines;
-
- for ($i = 0; $i < $self->{MAXLV}; $i++) {
- my $nmaps = @{$maps[$i]};
- my $mapsz = @{$maps[$i]->[0]};
- push @lines, "level $i: $nmaps maps (size $mapsz) ";
- push @lines, "[", $nmaps * $mapsz * $elsize, "]" if $elsize;
- push @lines, "\n";
- }
- my $ndmaps = @{$maps[$i]};
- push @lines, "level $i: $ndmaps dmaps";
- my $r = $maps[$i]->[0];
- if (ref($r) eq 'ARRAY') {
- push @lines, " (size ", scalar(@$r), ")";
- }
- push @lines, "\n";
- join '', @lines;
-}
-
-sub collapse_tree {
- my $self = shift;
- my @tmp;
-
- $self->_collapse_tree_rec($self->{MAP}, 0, \@tmp);
-}
-
-sub _collapse_tree_rec {
- my ($self, $r, $lv, $refs) = @_;
- my $ref = $refs->[$lv];
- my $maxlv = $self->{MAXLV};
- my $found;
-
- return $r unless defined $r;
-
- $ref = $refs->[$lv] = [] unless defined $ref;
-
- if ($lv == $maxlv) {
- $found = $self->find_dmap($ref, $r);
- } else {
- for (my $i = 0; $i < @$r; $i++) {
- $r->[$i] = $self->_collapse_tree_rec($r->[$i], $lv + 1, $refs);
- }
- $found = $self->find_imap($ref, $r);
- }
- unless ($found) {
- $found = $r;
- push @$ref, $found;
- }
- return $found;
-}
-
-sub fill_default {
- my $self = shift;
- my $maxlv = $self->{MAXLV};
- my $bits = $self->{BITS};
- my @zeros;
-
- $zeros[$maxlv] = $self->create_dmap();
- for (my $lv = $maxlv - 1; $lv >= 0; $lv--) {
- my $r = $zeros[$lv + 1];
- $zeros[$lv] = $self->create_imap($lv, $r);
- }
- _fill_default_rec($self->{MAP}, 0, $maxlv, \@zeros);
-}
-
-sub _fill_default_rec {
- my ($r, $lv, $maxlv, $zeros) = @_;
-
- return if $lv == $maxlv;
- for (my $i = 0; $i < @$r; $i++) {
- if (defined($r->[$i])) {
- _fill_default_rec($r->[$i], $lv + 1, $maxlv, $zeros);
- } else {
- $r->[$i] = $zeros->[$lv + 1];
- }
- }
-}
-
-sub create_imap {
- my ($self, $lv, $v) = @_;
- my @map;
- @map = ($v) x (1 << $self->{BITS}->[$lv]);
- \@map;
-}
-
-sub find_imap {
- my ($self, $maps, $map) = @_;
- my $i;
-
- foreach my $el (@$maps) {
- next unless @$el == @$map;
- for ($i = 0; $i < @$el; $i++) {
- last unless ($el->[$i] || 0) == ($map->[$i] || 0);
- }
- return $el if $i >= @$el;
- }
- undef;
-}
-
-sub collect_maps {
- my $self = shift;
- my @maps;
- _collect_maps_rec($self->{MAP}, 0, $self->{MAXLV}, \@maps);
- @maps;
-}
-
-sub _collect_maps_rec {
- my ($r, $lv, $maxlv, $maps) = @_;
- my $mapref = $maps->[$lv];
-
- return unless defined $r;
- foreach my $ref (@{$mapref}) {
- return if $ref == $r;
- }
- push @{$maps->[$lv]}, $r;
- if ($lv < $maxlv) {
- _collect_maps_rec($_, $lv + 1, $maxlv, $maps) foreach @{$r};
- }
-}
-
-sub add {confess "Subclass responsibility";}
-sub create_dmap {confess "Subclass responsibility";}
-sub add_to_dmap {confess "Subclass responsibility";}
-sub find_dmap {confess "Subclass responsibility";}
-sub cprog_dmap {confess "Subclass responsibility";}
-
-1;
-
-package SparseMap::Bit;
-
-use strict;
-use vars qw(@ISA);
-use Carp;
-#use SparseMap;
-
-@ISA = qw(SparseMap);
-
-sub new {
- my $class = shift;
- my $self = $class->SUPER::new(@_);
- $self->{DEFAULT} = 0;
- bless $self, $class;
-}
-
-sub add {
- my $self = shift;
-
- $self->add1($_, undef) foreach @_;
-}
-
-sub create_dmap {
- my $self = shift;
- my $bmbits = $self->{BITS}->[-1];
-
- my $s = "\0" x (1 << ($bmbits - 3));
- \$s;
-}
-
-sub add_to_dmap {
- my ($self, $map, $idx, $val) = @_;
- vec($$map, $idx, 1) = 1;
-}
-
-sub find_dmap {
- my ($self, $ref, $r) = @_;
- foreach my $map (@$ref) {
- return $map if $$map eq $$r;
- }
- return undef;
-}
-
-sub cprog_dmap {
- my $self = shift;
- my %opt = @_;
- my $name = $opt{NAME} || 'map';
- my @maps = $self->collect_maps();
- my @bitmap = @{$maps[-1]};
- my $prog;
- my $bmsize = 1 << ($self->{BITS}->[-1] - 3);
-
- $prog = <<"END";
-static const struct {
- unsigned char bm[$bmsize];
-} ${name}_bitmap[] = {
-END
-
- foreach my $bm (@bitmap) {
- my $i = 0;
- $prog .= "\t{{\n";
- foreach my $v (unpack 'C*', $$bm) {
- if ($i % 16 == 0) {
- $prog .= "\n" if $i != 0;
- $prog .= "\t";
- }
- $prog .= sprintf "%3d,", $v;
- $i++;
- }
- $prog .= "\n\t}},\n";
- }
- $prog .= "};\n";
- $prog;
-}
-
-1;
-
-package SparseMap::Int;
-
-use strict;
-use vars qw(@ISA);
-use Carp;
-#use SparseMap;
-
-@ISA = qw(SparseMap);
-
-sub new {
- my $class = shift;
- my $self = $class->SUPER::new(@_);
- $self->{DEFAULT} = 0 unless exists $self->{DEFAULT};
- bless $self, $class;
-}
-
-sub add {
- my $self = shift;
- while (@_ > 0) {
- my $n = shift;
- my $val = shift;
- $self->add1($n, $val);
- }
-}
-
-sub create_dmap {
- my $self = shift;
- my $tblbits = $self->{BITS}->[-1];
- my $default = $self->{DEFAULT};
-
- my @tbl = ($default) x (1 << $tblbits);
- \@tbl;
-}
-
-sub add_to_dmap {
- my ($self, $map, $idx, $val) = @_;
- $map->[$idx] = $val;
-}
-
-sub find_dmap {
- my ($self, $ref, $r) = @_;
- foreach my $map (@$ref) {
- if (@$map == @$r) {
- my $i;
- for ($i = 0; $i < @$map; $i++) {
- last if $map->[$i] != $r->[$i];
- }
- return $map if $i == @$map;
- }
- }
- return undef;
-}
-
-sub cprog_dmap {
- my $self = shift;
- my %opt = @_;
- my $name = $opt{NAME} || 'map';
- my @maps = $self->collect_maps();
- my @table = @{$maps[-1]};
- my $prog;
- my $i;
- my ($idtype, $idcol, $idwid);
- my $tblsize = 1 << $self->{BITS}->[-1];
-
- my ($min, $max);
- foreach my $a (@table) {
- foreach my $v (@$a) {
- $min = $v if !defined($min) or $min > $v;
- $max = $v if !defined($max) or $max < $v;
- }
- }
- if (exists $opt{MAPTYPE}) {
- $idtype = $opt{MAPTYPE};
- } else {
- my $u = $min < 0 ? '' : 'unsigned ';
- my $absmax = abs($max);
- $absmax = abs($min) if abs($min) > $absmax;
-
- if ($absmax < 256) {
- $idtype = "${u}char";
- } elsif ($absmax < 65536) {
- $idtype = "${u}short";
- } else {
- $idtype = "${u}long";
- }
- }
-
- $idwid = decimalwidth($max);
- $idwid = decimalwidth($min) if decimalwidth($min) > $idwid;
-
- $prog = <<"END";
-static const struct {
- $idtype tbl[$tblsize];
-} ${name}_table[] = {
-END
-
- foreach my $a (@table) {
- my $i = 0;
- my $col = 0;
- $prog .= "\t{{\n\t";
- foreach my $v (@$a) {
- my $s = sprintf "%${idwid}d, ", $v;
- $col += length($s);
- if ($col > 70) {
- $prog .= "\n\t";
- $col = length($s);
- }
- $prog .= $s;
- }
- $prog .= "\n\t}},\n";
- }
- $prog .= "};\n";
- $prog;
-}
-
-sub decimalwidth {
- my $n = shift;
- my $neg = 0;
- my $w;
-
- if ($n < 0) {
- $neg = 1;
- $n = -$n;
- }
- if ($n < 100) {
- $w = 2;
- } elsif ($n < 10000) {
- $w = 4;
- } elsif ($n < 1000000) {
- $w = 6;
- } elsif ($n < 100000000) {
- $w = 8;
- } else {
- $w = 10;
- }
- $w + $neg;
-}
-
-1;
diff --git a/contrib/idn/idnkit-1.0-src/util/UCD.pm b/contrib/idn/idnkit-1.0-src/util/UCD.pm
deleted file mode 100644
index 24f02d6f..00000000
--- a/contrib/idn/idnkit-1.0-src/util/UCD.pm
+++ /dev/null
@@ -1,194 +0,0 @@
-# $Id: UCD.pm,v 1.1 2003/06/04 00:27:53 marka Exp $
-#
-# Copyright (c) 2000,2001 Japan Network Information Center.
-# All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-#
-
-package UCD;
-
-#
-# UCD.pm -- parser for Unicode Character Database files.
-#
-# This file is an aggregation of the following modules, each of which
-# provides a parser for a specific data file of UCD.
-# UCD::UnicodeData -- for UnicodeData.txt
-# UCD::CaseFolding -- for CaseFolding.txt
-# UCD::SpecialCasing -- for SpecialCasing.txt
-# UCD::CompositionExclusions -- for CompositionExclusions-1.txt
-#
-# Each module provides two subroutines:
-#
-# $line = getline(\*HANDLE);
-# reads next non-comment line from HANDLE, and returns it.
-# undef will be returned upon EOF.
-#
-# %fields = parse($line);
-# parses a line and extract fields, and returns a list of
-# field name and its value, suitable for assignment to a hash.
-#
-
-package UCD::UnicodeData;
-
-use strict;
-use Carp;
-
-sub getline {
- my $fh = shift;
- my $s = <$fh>;
- $s =~ s/\r?\n$// if $s;
- $s;
-}
-
-sub parseline {
- my $s = shift;
-
- my @f = split /;/, $s, -1;
- return (CODE => hex($f[0]),
- NAME => $f[1],
- CATEGORY => $f[2],
- CLASS => $f[3]+0,
- BIDI => $f[4],
- DECOMP => dcmap($f[5]),
- DECIMAL => dvalue($f[6]),
- DIGIT => dvalue($f[7]),
- NUMERIC => dvalue($f[8]),
- MIRRORED => $f[9] eq 'Y',
- NAME10 => $f[10],
- COMMENT => $f[11],
- UPPER => ucode($f[12]),
- LOWER => ucode($f[13]),
- TITLE => ucode($f[14]));
-}
-
-sub dcmap {
- my $v = shift;
- return undef if $v eq '';
- $v =~ /^(?:(<[^>]+>)\s*)?(\S.*)/
- or croak "invalid decomposition mapping \"$v\"";
- my $tag = $1 || '';
- [$tag, map {hex($_)} split(' ', $2)];
-}
-
-sub ucode {
- my $v = shift;
- return undef if $v eq '';
- hex($v);
-}
-
-sub dvalue {
- my $v = shift;
- return undef if $v eq '';
- $v;
-}
-
-package UCD::CaseFolding;
-
-use strict;
-
-sub getline {
- my $fh = shift;
- while (defined(my $s = <$fh>)) {
- next if $s =~ /^\#/;
- next if $s =~ /^\s*$/;
- $s =~ s/\r?\n$//;
- return $s;
- }
- undef;
-}
-
-sub parseline {
- my $s = shift;
- my @f = split /;\s*/, $s, -1;
- return (CODE => hex($f[0]),
- TYPE => $f[1],
- MAP => [map(hex, split ' ', $f[2])],
- );
-}
-
-package UCD::SpecialCasing;
-
-use strict;
-
-sub getline {
- my $fh = shift;
- while (defined(my $s = <$fh>)) {
- next if $s =~ /^\#/;
- next if $s =~ /^\s*$/;
- $s =~ s/\r?\n$//;
- return $s;
- }
- undef;
-}
-
-sub parseline {
- my $s = shift;
-
- my @f = split /;\s*/, $s, -1;
- my $cond = (@f > 5) ? $f[4] : undef;
- return (CODE => hex($f[0]),
- LOWER => [map(hex, split ' ', $f[1])],
- TITLE => [map(hex, split ' ', $f[2])],
- UPPER => [map(hex, split ' ', $f[3])],
- CONDITION => $cond);
-}
-
-package UCD::CompositionExclusions;
-
-use strict;
-
-sub getline {
- my $fh = shift;
- while (defined(my $s = <$fh>)) {
- next if $s =~ /^\#/;
- next if $s =~ /^\s*$/;
- $s =~ s/\r?\n$//;
- return $s;
- }
- undef;
-}
-
-sub parseline {
- my $s = shift;
- m/^[0-9A-Fa-f]+/;
- return (CODE => hex($&));
-}
-
-1;
diff --git a/contrib/idn/idnkit-1.0-src/util/generate_nameprep_data.pl b/contrib/idn/idnkit-1.0-src/util/generate_nameprep_data.pl
deleted file mode 100755
index c93f3aec..00000000
--- a/contrib/idn/idnkit-1.0-src/util/generate_nameprep_data.pl
+++ /dev/null
@@ -1,405 +0,0 @@
-#! /usr/local/bin/perl -w
-# $Id: generate_nameprep_data.pl,v 1.1 2003/06/04 00:27:54 marka Exp $
-#
-# Copyright (c) 2001 Japan Network Information Center. All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-#
-
-use v5.6.0; # for pack('U')
-use bytes;
-
-use lib qw(.);
-
-use SparseMap;
-use Getopt::Long;
-
-(my $myid = '$Id: generate_nameprep_data.pl,v 1.1 2003/06/04 00:27:54 marka Exp $') =~ s/\$([^\$]+)\$/\$-$1-\$/;
-
-my @map_bits = (9, 7, 5);
-my @proh_bits = (7, 7, 7);
-my @unas_bits = (7, 7, 7);
-my @bidi_bits = (9, 7, 5);
-
-my @bidi_types = ('OTHERS', 'R_AL', 'L');
-
-my $dir = '.';
-my @versions = ();
-
-GetOptions('dir=s', \$dir) or die usage();
-@versions = @ARGV;
-
-print_header();
-
-bits_definition("MAP", @map_bits);
-bits_definition("PROH", @proh_bits);
-bits_definition("UNAS", @unas_bits);
-bits_definition("BIDI", @bidi_bits);
-
-generate_data($_) foreach @ARGV;
-
-sub usage {
- die "Usage: $0 [-dir dir] version..\n";
-}
-
-sub generate_data {
- my $version = shift;
- generate_mapdata($version, "$dir/nameprep.$version.map");
- generate_prohibiteddata($version, "$dir/nameprep.$version.prohibited");
- generate_unassigneddata($version, "$dir/nameprep.$version.unassigned");
- generate_bididata($version, "$dir/nameprep.$version.bidi");
-}
-
-#
-# Generate mapping data.
-#
-sub generate_mapdata {
- my $version = shift;
- my $file = shift;
-
- my $map = SparseMap::Int->new(BITS => [@map_bits],
- MAX => 0x110000,
- MAPALL => 1,
- DEFAULT => 0);
- open FILE, $file or die "cannot open $file: $!\n";
-
- my $mapbuf = "\0"; # dummy
- my %maphash = ();
- while (<FILE>) {
- if ($. == 1 and /^%\s*SAME-AS\s+(\S+)/) {
- my $same_as = $1;
- if (grep {$_ eq $same_as} @versions > 0) {
- generate_map_ref($version, $same_as);
- close FILE;
- return;
- }
- next;
- }
- next if /^\#/;
- next if /^\s*$/;
- register_map($map, \$mapbuf, \%maphash, $_);
- }
- close FILE;
- generate_map($version, $map, \$mapbuf);
-}
-
-#
-# Generate prohibited character data.
-#
-sub generate_prohibiteddata {
- my $version = shift;
- my $file = shift;
-
- my $proh = SparseMap::Bit->new(BITS => [@proh_bits],
- MAX => 0x110000);
- open FILE, $file or die "cannot open $file: $!\n";
- while (<FILE>) {
- if ($. == 1 and /^%\s*SAME-AS\s+(\S+)/) {
- my $same_as = $1;
- if (grep {$_ eq $same_as} @versions > 0) {
- generate_prohibited_ref($version, $same_as);
- close FILE;
- return;
- }
- next;
- }
- next if /^\#/;
- next if /^\s*$/;
- register_prohibited($proh, $_);
- }
- close FILE;
- generate_prohibited($version, $proh);
-}
-
-#
-# Generate unassigned codepoint data.
-#
-sub generate_unassigneddata {
- my $version = shift;
- my $file = shift;
-
- my $unas = SparseMap::Bit->new(BITS => [@unas_bits],
- MAX => 0x110000);
- open FILE, $file or die "cannot open $file: $!\n";
- while (<FILE>) {
- if ($. == 1 and /^%\s*SAME-AS\s+(\S+)/) {
- my $same_as = $1;
- if (grep {$_ eq $same_as} @versions > 0) {
- generate_unassigned_ref($version, $same_as);
- close FILE;
- return;
- }
- next;
- }
- next if /^\#/;
- next if /^\s*$/;
- register_unassigned($unas, $_);
- }
- close FILE;
- generate_unassigned($version, $unas);
-}
-
-#
-# Generate data of bidi "R" or "AL" characters.
-#
-sub generate_bididata {
- my $version = shift;
- my $file = shift;
-
- my $bidi = SparseMap::Int->new(BITS => [@bidi_bits],
- MAX => 0x110000);
- open FILE, $file or die "cannot open $file: $!\n";
-
- my $type = 0;
- while (<FILE>) {
- if ($. == 1 and /^%\s*SAME-AS\s+(\S+)/) {
- my $same_as = $1;
- if (grep {$_ eq $same_as} @versions > 0) {
- generate_unassigned_ref($version, $same_as);
- close FILE;
- return;
- }
- next;
- }
- if (/^%\s*BIDI_TYPE\s+(\S+)$/) {
- my $i = 0;
- for ($i = 0; $i < @bidi_types; $i++) {
- if ($1 eq $bidi_types[$i]) {
- $type = $i;
- last;
- }
- }
- die "unrecognized line: $_" if ($i >= @bidi_types);
- next;
- }
- next if /^\#/;
- next if /^\s*$/;
- register_bidi($bidi, $type, $_);
- }
- close FILE;
-
- generate_bidi($version, $bidi);
-}
-
-sub print_header {
- print <<"END";
-/* \$Id\$ */
-/* $myid */
-/*
- * Do not edit this file!
- * This file is generated from NAMEPREP specification.
- */
-
-END
-}
-
-sub bits_definition {
- my $name = shift;
- my @bits = @_;
- my $i = 0;
-
- foreach my $n (@bits) {
- print "#define ${name}_BITS_$i\t$n\n";
- $i++;
- }
- print "\n";
-}
-
-sub register_map {
- my ($map, $bufref, $hashref, $line) = @_;
-
- my ($from, $to) = split /;/, $line;
- my @fcode = map {hex($_)} split ' ', $from;
- my @tcode = map {hex($_)} split ' ', $to;
-
- my $ucs4 = pack('V*', @tcode);
- $ucs4 =~ s/\000+$//;
-
- my $offset;
- if (exists $hashref->{$ucs4}) {
- $offset = $hashref->{$ucs4};
- } else {
- $offset = length $$bufref;
- $$bufref .= pack('C', length($ucs4)) . $ucs4;
- $hashref->{$ucs4} = $offset;
- }
-
- die "unrecognized line: $line" if @fcode != 1;
- $map->add($fcode[0], $offset);
-}
-
-sub generate_map {
- my ($version, $map, $bufref) = @_;
-
- $map->fix();
-
- print $map->cprog(NAME => "nameprep_${version}_map");
- print "\nstatic const unsigned char nameprep_${version}_map_data[] = \{\n";
- print_uchararray($$bufref);
- print "};\n\n";
-}
-
-sub generate_map_ref {
- my ($version, $refversion) = @_;
- print <<"END";
-#define nameprep_${version}_map_imap nameprep_${refversion}_map_imap
-#define nameprep_${version}_map_table nameprep_${refversion}_map_table
-#define nameprep_${version}_map_data nameprep_${refversion}_map_data
-
-END
-}
-
-sub print_uchararray {
- my @chars = unpack 'C*', $_[0];
- my $i = 0;
- foreach my $v (@chars) {
- if ($i % 12 == 0) {
- print "\n" if $i != 0;
- print "\t";
- }
- printf "%3d, ", $v;
- $i++;
- }
- print "\n";
-}
-
-sub register_prohibited {
- my $proh = shift;
- register_bitmap($proh, @_);
-}
-
-sub register_unassigned {
- my $unas = shift;
- register_bitmap($unas, @_);
-}
-
-sub register_bidi {
- my $bidi = shift;
- my $type = shift;
- register_intmap($bidi, $type, @_);
-}
-
-sub generate_prohibited {
- my ($version, $proh) = @_;
- generate_bitmap($proh, "nameprep_${version}_prohibited");
- print "\n";
-}
-
-sub generate_prohibited_ref {
- my ($version, $refversion) = @_;
- print <<"END";
-#define nameprep_${version}_prohibited_imap nameprep_${refversion}_prohibited_imap
-#define nameprep_${version}_prohibited_bitmap nameprep_${refversion}_prohibited_bitmap
-
-END
-}
-
-sub generate_unassigned {
- my ($version, $unas) = @_;
- generate_bitmap($unas, "nameprep_${version}_unassigned");
- print "\n";
-}
-
-sub generate_unassigned_ref {
- my ($version, $refversion) = @_;
- print <<"END";
-#define nameprep_${version}_unassigned_imap nameprep_${refversion}_unassigned_imap
-#define nameprep_${version}_unassigned_bitmap nameprep_${refversion}_unassigned_bitmap
-
-END
-}
-
-sub generate_bidi {
- my ($version, $bidi) = @_;
-
- $bidi->fix();
-
- print $bidi->cprog(NAME => "nameprep_${version}_bidi");
- print "\n";
- print "static const unsigned char nameprep_${version}_bidi_data[] = \{\n";
-
- foreach my $type (@bidi_types) {
- printf "\tidn_biditype_%s, \n", lc($type);
- }
- print "};\n\n";
-}
-
-sub generate_bidi_ref {
- my ($version, $refversion) = @_;
- print <<"END";
-#define nameprep_${version}_bidi_imap nameprep_${refversion}_bidi_imap
-#define nameprep_${version}_bidi_table nameprep_${refversion}_bidi_table
-
-END
-}
-
-sub register_bitmap {
- my $map = shift;
- my $line = shift;
-
- /^([0-9A-Fa-f]+)(?:-([0-9A-Fa-f]+))?/ or die "unrecognized line: $line";
- my $start = hex($1);
- my $end = defined($2) ? hex($2) : undef;
- if (defined $end) {
- $map->add($start .. $end);
- } else {
- $map->add($start);
- }
-}
-
-sub register_intmap {
- my $map = shift;
- my $value = shift;
- my $line = shift;
-
- /^([0-9A-Fa-f]+)(?:-([0-9A-Fa-f]+))?/ or die "unrecognized line: $line";
- my $start = hex($1);
- my $end = defined($2) ? hex($2) : $start;
- for (my $i = $start; $i <= $end; $i++) {
- $map->add($i, $value);
- }
-}
-
-sub generate_bitmap {
- my $map = shift;
- my $name = shift;
- $map->fix();
- #$map->stat();
- print $map->cprog(NAME => $name);
-}
diff --git a/contrib/idn/idnkit-1.0-src/util/generate_normalize_data.pl b/contrib/idn/idnkit-1.0-src/util/generate_normalize_data.pl
deleted file mode 100755
index 2ba1a2f5..00000000
--- a/contrib/idn/idnkit-1.0-src/util/generate_normalize_data.pl
+++ /dev/null
@@ -1,586 +0,0 @@
-#! /usr/local/bin/perl -w
-# $Id: generate_normalize_data.pl,v 1.1 2003/06/04 00:27:55 marka Exp $
-#
-# Copyright (c) 2000,2001 Japan Network Information Center.
-# All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-#
-
-#
-# Generate lib/unicodedata.c from UnicodeData.txt,
-# CompositionExclusions-1.txt, SpecialCasing.txt and CaseFolding.txt,
-# all of them available from ftp://ftp.unicode.org/Public/UNIDATA/.
-#
-
-use strict;
-use lib qw(.);
-
-use Getopt::Long;
-use UCD;
-use SparseMap;
-
-use constant UCS_MAX => 0x110000;
-use constant END_BIT => 0x80000000;
-
-my $DECOMP_COMPAT_BIT = 0x8000;
-
-my $CASEMAP_FINAL_BIT = 0x1;
-my $CASEMAP_NONFINAL_BIT = 0x2;
-my $CASEMAP_LAST_BIT = 0x10;
-
-my $LETTER_BIT = 1;
-my $NSPMARK_BIT = 2;
-
-(my $myid = '$Id: generate_normalize_data.pl,v 1.1 2003/06/04 00:27:55 marka Exp $') =~ s/\$([^\$]+)\$/\$-$1-\$/;
-
-my @default_bits = (9, 7, 5);
-#my @default_bits = (7, 7, 7);
-my @canon_class_bits = @default_bits;
-my @decomp_bits = @default_bits;
-my @comp_bits = @default_bits;
-my @folding_bits = @default_bits;
-my @casemap_bits = @default_bits;
-my @casemap_ctx_bits = @default_bits;
-
-my $prefix = '';
-my $dir = '.';
-my $unicodedatafile = 'UnicodeData.txt';
-my $exclusionfile = 'CompositionExclusions.txt';
-my $specialcasefile = 'SpecialCasing.txt';
-my $casefoldingfile = 'CaseFolding.txt';
-my $verbose;
-
-GetOptions('dir|d=s' => \$dir,
- 'unicodedata|u=s' => \$unicodedatafile,
- 'exclude|e=s' => \$exclusionfile,
- 'specialcase|s=s' => \$specialcasefile,
- 'casefold|c=s' => \$casefoldingfile,
- 'prefix|p=s' => \$prefix,
- 'verbose|v' => \$verbose,
-) or usage();
-
-foreach my $r (\$unicodedatafile, \$exclusionfile,
- \$specialcasefile, \$casefoldingfile) {
- $$r = "$dir/$$r" unless $$r =~ m|^/|;
-}
-
-my %exclusions;
-my %lower_special;
-my %upper_special;
-
-my @decomp_data;
-my @comp_data;
-my @toupper_data;
-my @tolower_data;
-my @folding_data;
-
-#
-# Create Mapping/Bitmap objects.
-#
-
-# canonical class
-my $canon_class = SparseMap::Int->new(BITS => [@canon_class_bits],
- MAX => UCS_MAX,
- MAPALL => 1,
- DEFAULT => 0);
-
-# canonical/compatibility decomposition
-my $decomp = SparseMap::Int->new(BITS => [@decomp_bits],
- MAX => UCS_MAX,
- MAPALL => 1,
- DEFAULT => 0);
-
-# canonical composition
-my $comp = SparseMap::Int->new(BITS => [@comp_bits],
- MAX => UCS_MAX,
- MAPALL => 1,
- DEFAULT => 0);
-
-# uppercase/lowercase
-my $upper = SparseMap::Int->new(BITS => [@casemap_bits],
- MAX => UCS_MAX,
- MAPALL => 1,
- DEFAULT => 0);
-my $lower = SparseMap::Int->new(BITS => [@casemap_bits],
- MAX => UCS_MAX,
- MAPALL => 1,
- DEFAULT => 0);
-
-# final/nonfinal context
-my $casemap_ctx = SparseMap::Int->new(BITS => [@casemap_ctx_bits],
- MAX => UCS_MAX,
- MAPALL => 1,
- DEFAULT => 0);
-
-# casefolding
-my $folding = SparseMap::Int->new(BITS => [@folding_bits],
- MAX => UCS_MAX,
- MAPALL => 1,
- DEFAULT => 0);
-
-#
-# Read datafiles.
-#
-
-read_exclusion_file();
-read_specialcasing_file();
-read_unicodedata_file();
-read_casefolding_file();
-
-print_header();
-print_canon_class();
-print_composition();
-print_decomposition();
-print_casemap();
-print_casemap_context();
-print_casefolding();
-
-exit;
-
-sub usage {
- print STDERR <<"END";
-Usage: $0 [options..]
- options:
- -d DIR directory where Unicode Character Data files resides [./]
- -u FILE name of the UnicodeData file [UnicodeData.txt]
- -e FILE name of the CompositionExclusion file [CompositionExclusions-1.txt]
- -s FILE name of the SpecialCasing file [SpecialCasing.txt]
- -c FILE name of the CaseFolding file [CaseFolding.txt]
-END
- exit 1;
-}
-
-#
-# read_exclusion_file -- read CompositionExclusions-1.txt.
-#
-sub read_exclusion_file {
- open EXCLUDE, $exclusionfile or die "cannot open $exclusionfile: $!\n";
- while ($_ = UCD::CompositionExclusions::getline(\*EXCLUDE)) {
- my %data = UCD::CompositionExclusions::parseline($_);
- $exclusions{$data{CODE}} = 1;
- }
- close EXCLUDE;
-}
-
-#
-# read_specialcasing_file -- read SpecialCasing.txt
-#
-sub read_specialcasing_file {
- open SPCASE, $specialcasefile or die "cannot open $specialcasefile: $!\n";
- while ($_ = UCD::SpecialCasing::getline(\*SPCASE)) {
- my %data = UCD::SpecialCasing::parseline($_);
- my $code = $data{CODE};
- my $lower = $data{LOWER};
- my $upper = $data{UPPER};
- my $cond = $data{CONDITION} || '';
-
- next unless $cond eq '' or $cond =~ /^(NON_)?FINAL/;
-
- if (defined $cond && (@$lower > 1 || $lower->[0] != $code)
- or @$lower > 1 or $lower->[0] != $code) {
- $lower_special{$code} = [$lower, $cond];
- }
- if (defined $cond && (@$upper > 1 || $upper->[0] != $code)
- or @$upper > 1 or $upper->[0] != $code) {
- $upper_special{$code} = [$upper, $cond];
- }
- }
- close SPCASE;
-}
-
-#
-# read_unicodedata_file -- read UnicodeData.txt
-#
-sub read_unicodedata_file {
- open UCD, $unicodedatafile or die "cannot open $unicodedatafile: $!\n";
-
- @decomp_data = (0);
- @toupper_data = (0);
- @tolower_data = (0);
-
- my @comp_cand; # canonical composition candidates
- my %nonstarter;
-
- while ($_ = UCD::UnicodeData::getline(\*UCD)) {
- my %data = UCD::UnicodeData::parseline($_);
- my $code = $data{CODE};
-
- # combining class
- if ($data{CLASS} > 0) {
- $nonstarter{$code} = 1;
- $canon_class->add($code, $data{CLASS});
- }
-
- # uppercasing
- if (exists $upper_special{$code} or defined $data{UPPER}) {
- my $offset = @toupper_data;
- my @casedata;
-
- $upper->add($code, $offset);
- if (exists $upper_special{$code}) {
- push @casedata, $upper_special{$code};
- }
- if (defined $data{UPPER}) {
- push @casedata, $data{UPPER};
- }
- push @toupper_data, casemap_data(@casedata);
- }
-
- # lowercasing
- if (exists $lower_special{$code} or defined $data{LOWER}) {
- my $offset = @tolower_data;
- my @casedata;
-
- $lower->add($code, $offset);
- if (exists $lower_special{$code}) {
- push @casedata, $lower_special{$code};
- }
- if (defined $data{LOWER}) {
- push @casedata, $data{LOWER};
- }
- push @tolower_data, casemap_data(@casedata);
- }
-
- # composition/decomposition
- if ($data{DECOMP}) {
- my ($tag, @decomp) = @{$data{DECOMP}};
- my $offset = @decomp_data;
-
- # composition
- if ($tag eq '' and @decomp > 1 and not exists $exclusions{$code}) {
- # canonical composition candidate
- push @comp_cand, [$code, @decomp];
- }
-
- # decomposition
- if ($tag ne '') {
- # compatibility decomposition
- $offset |= $DECOMP_COMPAT_BIT;
- }
- $decomp->add($code, $offset);
- push @decomp_data, @decomp;
- $decomp_data[-1] |= END_BIT;
-
- }
-
- # final/nonfinal context
- if ($data{CATEGORY} =~ /L[ult]/) {
- $casemap_ctx->add($code, $LETTER_BIT);
- } elsif ($data{CATEGORY} eq 'Mn') {
- $casemap_ctx->add($code, $NSPMARK_BIT);
- }
- }
- close UCD;
-
- # Eliminate composition candidates whose decomposition starts with
- # a non-starter.
- @comp_cand = grep {not exists $nonstarter{$_->[1]}} @comp_cand;
-
- @comp_data = ([0, 0, 0]);
- my $last_code = -1;
- my $last_offset = @comp_data;
- for my $r (sort {$a->[1] <=> $b->[1] || $a->[2] <=> $b->[2]} @comp_cand) {
- if ($r->[1] != $last_code) {
- $comp->add($last_code,
- ($last_offset | ((@comp_data - $last_offset)<<16)))
- unless $last_code == -1;
- $last_code = $r->[1];
- $last_offset = @comp_data;
- }
- push @comp_data, $r;
- }
- $comp->add($last_code,
- ($last_offset | ((@comp_data - $last_offset)<<16)));
-}
-
-sub casemap_data {
- my @data = @_;
- my @result = ();
- while (@data > 0) {
- my $r = shift @data;
- my $flag = 0;
- if (ref $r) {
- if ($r->[1] eq 'FINAL') {
- $flag |= $CASEMAP_FINAL_BIT;
- } elsif ($r->[1] eq 'NON_FINAL') {
- $flag |= $CASEMAP_NONFINAL_BIT;
- } elsif ($r->[1] ne '') {
- die "unknown condition \"", $r->[1], "\"\n";
- }
- }
- $flag |= $CASEMAP_LAST_BIT if @data == 0;
- push @result, $flag;
- push @result, (ref $r) ? @{$r->[0]} : $r;
- $result[-1] |= END_BIT;
- }
- @result;
-}
-
-#
-# read_casefolding_file -- read CaseFolding.txt
-#
-sub read_casefolding_file {
- open FOLD, $casefoldingfile or die "cannto open $casefoldingfile: $!\n";
-
- # dummy.
- @folding_data = (0);
-
- while ($_ = UCD::CaseFolding::getline(\*FOLD)) {
- my %data = UCD::CaseFolding::parseline($_);
-
- $folding->add($data{CODE}, scalar(@folding_data));
- push @folding_data, @{$data{MAP}};
- $folding_data[-1] |= END_BIT;
- }
- close FOLD;
-}
-
-sub print_header {
- print <<"END";
-/* \$Id\$ */
-/* $myid */
-/*
- * Do not edit this file!
- * This file is generated from UnicodeData.txt, CompositionExclusions-1.txt,
- * SpecialCasing.txt and CaseFolding.txt.
- */
-
-END
-}
-
-#
-# print_canon_class -- generate data for canonical class
-#
-sub print_canon_class {
- $canon_class->fix();
- print STDERR "** cannon_class\n", $canon_class->stat() if $verbose;
-
- print <<"END";
-
-/*
- * Canonical Class
- */
-
-END
- print_bits("CANON_CLASS", @canon_class_bits);
- print "\n";
- print $canon_class->cprog(NAME => "${prefix}canon_class");
-}
-
-#
-# print_composition -- generate data for canonical composition
-#
-sub print_composition {
- $comp->fix();
- print STDERR "** composition\n", $comp->stat() if $verbose;
-
- print <<"END";
-
-/*
- * Canonical Composition
- */
-
-END
- print_bits("CANON_COMPOSE", @comp_bits);
- print "\n";
- print $comp->cprog(NAME => "${prefix}compose");
- print <<"END";
-
-static const struct composition ${prefix}compose_seq[] = {
-END
- my $i = 0;
- foreach my $r (@comp_data) {
- if ($i % 2 == 0) {
- print "\n" if $i != 0;
- print "\t";
- }
- printf "{ 0x%08x, 0x%08x }, ", $r->[2], $r->[0];
- $i++;
- }
- print "\n};\n\n";
-}
-
-#
-# print_decomposition -- generate data for canonical/compatibility
-# decomposition
-#
-sub print_decomposition {
- $decomp->fix();
- print STDERR "** decomposition\n", $decomp->stat() if $verbose;
-
- print <<"END";
-
-/*
- * Canonical/Compatibility Decomposition
- */
-
-END
- print_bits("DECOMP", @decomp_bits);
- print "#define DECOMP_COMPAT\t$DECOMP_COMPAT_BIT\n\n";
-
- print $decomp->cprog(NAME => "${prefix}decompose");
-
- print "static const unsigned long ${prefix}decompose_seq[] = {\n";
- print_ulseq(@decomp_data);
- print "};\n\n";
-}
-
-#
-# print_casemap -- generate data for case mapping
-#
-sub print_casemap {
- $upper->fix();
- $lower->fix();
- print STDERR "** upper mapping\n", $upper->stat() if $verbose;
- print STDERR "** lower mapping\n", $lower->stat() if $verbose;
-
- print <<"END";
-
-/*
- * Lowercase <-> Uppercase mapping
- */
-
-/*
- * Flags for special case mapping.
- */
-#define CMF_FINAL $CASEMAP_FINAL_BIT
-#define CMF_NONFINAL $CASEMAP_NONFINAL_BIT
-#define CMF_LAST $CASEMAP_LAST_BIT
-#define CMF_CTXDEP (CMF_FINAL|CMF_NONFINAL)
-
-END
- print_bits("CASEMAP", @casemap_bits);
- print "\n";
- print $upper->cprog(NAME => "${prefix}toupper");
- print $lower->cprog(NAME => "${prefix}tolower");
-
- print "static const unsigned long ${prefix}toupper_seq[] = {\n";
- print_ulseq(@toupper_data);
- print "};\n\n";
-
- print "static const unsigned long ${prefix}tolower_seq[] = {\n";
- print_ulseq(@tolower_data);
- print "};\n\n";
-}
-
-#
-# print_casefolding -- generate data for case folding
-#
-sub print_casefolding {
- $folding->fix();
- print STDERR "** case folding\n", $folding->stat() if $verbose;
-
- print <<"END";
-
-/*
- * Case Folding
- */
-
-END
- print_bits("CASE_FOLDING", @folding_bits);
- print "\n";
- print $folding->cprog(NAME => "${prefix}case_folding");
-
- print "static const unsigned long ${prefix}case_folding_seq[] = {\n";
- print_ulseq(@folding_data);
- print "};\n\n";
-}
-
-#
-# print_casemap_context -- gerarate data for determining context
-# (final/non-final)
-#
-sub print_casemap_context {
- $casemap_ctx->fix();
- print STDERR "** casemap context\n", $casemap_ctx->stat() if $verbose;
-
- print <<"END";
-
-/*
- * Cased characters and non-spacing marks (for casemap context)
- */
-
-END
-
- print_bits("CASEMAP_CTX", @casemap_ctx_bits);
- print <<"END";
-
-#define CTX_CASED $LETTER_BIT
-#define CTX_NSM $NSPMARK_BIT
-
-END
- print $casemap_ctx->cprog(NAME => "${prefix}casemap_ctx");
-}
-
-sub sprint_composition_hash {
- my $i = 0;
- my $s = '';
- foreach my $r (@_) {
- if ($i % 2 == 0) {
- $s .= "\n" if $i != 0;
- $s .= "\t";
- }
- $s .= sprintf "{0x%04x, 0x%04x, 0x%04x}, ", @{$r};
- $i++;
- }
- $s;
-}
-
-sub print_bits {
- my $prefix = shift;
- my $i = 0;
- foreach my $bit (@_) {
- print "#define ${prefix}_BITS_$i\t$bit\n";
- $i++;
- }
-}
-
-sub print_ulseq {
- my $i = 0;
- foreach my $v (@_) {
- if ($i % 4 == 0) {
- print "\n" if $i != 0;
- print "\t";
- }
- printf "0x%08x, ", $v;
- $i++;
- }
- print "\n";
-}
diff --git a/contrib/idn/idnkit-1.0-src/win/README.WIN b/contrib/idn/idnkit-1.0-src/win/README.WIN
deleted file mode 100644
index 425200bd..00000000
--- a/contrib/idn/idnkit-1.0-src/win/README.WIN
+++ /dev/null
@@ -1,17 +0,0 @@
-To build idnkit for Windows, follow the instruction below.
-
-To build Windows version, you need `iconv' library. A LGPL
-implemenation is available from the following place.
-
- http://www.gnu.org/software/libiconv/
-
-Follow the instructions described in README.woe32 file which can be
-found in the distribution, and you'll get a DLL vesion of `libiconv'.
-Copy the DLL (iconv.dll), the header (iconv.h) and the import library
-(iconv.lib) here.
-
-Then go to the top directory and run the following command.
-
- nmake -f make.wnt
-
-; $Id: README.WIN,v 1.1 2003/06/04 00:27:32 marka Exp $
diff --git a/contrib/idn/idnkit-1.0-src/wsock/README.txt b/contrib/idn/idnkit-1.0-src/wsock/README.txt
deleted file mode 100644
index e7723b44..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/README.txt
+++ /dev/null
@@ -1,665 +0,0 @@
-
- idn wrapper - Client Side IDN Conversion Software for Windows
-
- Copyright (c) 2000,2001,2002 Japan Network Information Center.
- All rights reserved.
-
- *** NOTICE ******************************************************
- If you have installed mDN Wrapper (former version of idn wrapper)
- on your system, you should unwrap all the programs before
- installing idn wrapper.
- *****************************************************************
-
-
-1. Introduction
-
- For supporting internationalized domain names, each client
- application should convert domain names (their encodings) to that
- DNS server accepts. This requires applications to handle
- internationalized domain names in its core, and it is the vendor's
- responsibility to make their programs IDN-compatible.
-
- Although there are ongoing efforts in IETF to standardize IDN
- framework (architecture, encoding etc.) and several RFCs are
- expected to be published soon as the result, not many applications
- support IDN to this date.
-
- So, there are needs for some helper application which makes legacy
- applications IDN-aware. `runidn' in idnkit is one of such
- solutions for Unix-like operating systems, and this software, `idn
- wrapper' is the one for Windows.
-
- On windows, name resolving request is passed to WINSOCK DLL. idn
- wrapper replaces WINSOCK DLL with the one that can handle IDN,
- which makes legacy windows applications compatible with IDN.
-
-2. Architecture
-
-2.1. Wrapper DLL
-
- Wrapper DLL resides between application and original DLL. It
- intercept application's calls to original DLL, and preforms some
- additional processing on those calls.
-
- +------------+ Call +------------+ Call +------------+
- | |------->| |------->| |
- |Application | |Wrapper DLL | |Original DLL|
- | |<-------| |<-------| |
- +------------+ Return +------------+ Return +------------+
- additional
- processing
- here
-
- DLL call from apllication is passed to wrapper DLL. Wrapper DLL
- then performs some additional processing on that call, and then
- calls original DLL. Also, result from original DLL will once passed
- to wrapper DLL and wrapper does additional process on that result,
- and finally result will passed to the application.
-
- idn wrapper provides wrapper DLLs for WINSOCK,
-
- WSOCK32.DLL WINSOCK V1.1
- WS2_32.DLL WINSOCK V2.0
-
- to resolve multi-lingual domain names.
-
-2.2. Wrapping APIs
-
- idn wrapper performs additional processing on name resolving APIs in
- WINSOCK, listed below.
-
- both WINSOCK 1.1, WINSOCK 2.0
-
- gethostbyaddr
- gethostbyname
- WSAAsyncGetHostByAddr
- WSAAsyncGetHostByName
-
- only in WINSOCK 2.0
-
- getaddrinfo
- freeaddrinfo
- getnameinfo
- WSALookupServiceBeginA
- WSALookupServiceNextA
- WSALookupServiceEnd
-
- Some applications do not use these APIs to resolve domain names.
- `nslookup' is one of those programs. `nslookup' builds and parse DNS
- messages internally and does not use WINSOCK's name resolver APIs.
- idn wrapper cannot make those programs IDN-aware.
-
- NOTE:
- WINSOCK 2.0 also contains WIDE-CHARACTER based name resolution
- APIs,
-
- WSALookupServiceBeginW
- WSALookupServiceNextW
-
- idn wrapper does not wrap these APIs. These APIs are used in
- Microsoft's own internationalization framework. It is dangerous
- to convert to another internationalization framework.
-
-2.3. Other APIs in WINSOCK
-
- For other APIs in WINSOCK, idn wrapper does nothing, only calls
- original DLL's entries.
-
- idn wrapper copies original WINSOCK DLLs with renaming
- as below, and forward requests to them.
-
- wsock32.dll -> wsock32o.dll
- ws2_32.dll -> ws2_32o.dll
-
- Wrappper DLL will be installed with original DLL names. So after
- installation of idn wrapper, WINSOCK DLLs should be
-
- wsock32.dll idn wrapper for WINSOCK V1.1
- ws2_32.dll idn wrapper for WINSOCK V2.0
- wsock32o.dll Original WINSOCK V1.1 DLL
- ws2_32o.dll Original WINSOCK V2.0 DLL
-
-2.4. Asynchronous API
-
- Domain name conversion take place on
-
- request to DNS
-
- convert from local encoding to DNS compatible encoding
-
- response from DNS
-
- convert from DNS encoding to local encoding
-
- For synchronous APIs, local to DNS conversion is done before calling
- original API, and after return from original API, name should be
- converted from DNS encoding to local encoding.
-
- But WINSOCK having some asynchronous APIs, such as
-
- WSAAsyncGetHostByAddr
- WSAAsyncGetHostByName
-
- In these APIs, completion is notified with windows message. To
- perform DNS to local conversion, wrapper should hook target window
- procedure to capture those completion messages.
-
- So, if asynchronous API was called, idn wrapper set hook to target
- window procedure (passed with API parameter). If hook found
- notify message (also given with API parameter), then convert
- resulting name (in DNS encoding) to local encoding.
-
-2.5. Installing Wrapper DLLs
-
- WINSOCK DLLs are placed at Windows's system directory. To wrap
- WINSOCK DLLs, one could do following sequence at system directory.
-
- + Rename Original WINSOCK DLLs
-
- ren wsock32.dll wsock32o.dll
- ren ws2_32.dll ws2_32o.dll
-
- + Install (copy in) Wrapper DLLs
-
- copy somewhere\wsock32.dll wsock32.dll
- copy somewhere\ws2_32.dll ws2_32.dll
- copy another DLLs also
-
- However, replacing DLLs in Window's system directory is very
- dangerous:
-
- a) If you re-install idn wrapper again, original WINSOCK DLLs
- may be lost.
-
- b) Some application or service pack will replace WINSOCK DLLs. It
- may corrupt WINSOCK environment.
-
- If these happen, at least networking does not work, and worse,
- Windows never startup again.
-
- So, idn wrapper usually does not wrap in the system directory, but wrap in
- each indivisual application's directory.
-
- In Windows, DLL will be searched in the following places:
-
- Application's Load Directory
- %SystemRoot%\System32
- %SystemRoot%
- Directories in PATH
-
- and loaded & linked first found one. So if installed wrapper DLLs is
- found on application's load directory, the application's call to
- WINSOCK will wrapped.
-
- But some applications or DLLs are binded to specific DLL, they do
- not rely on above DLL's search path. For those applcaitons or DLLs,
- idn wrapper (in standard installation) cannot wrap them.
-
- NOTE: Netscape is one of those program. It cannot be wrapped if
- installed to applications directory. Also WINSOCK DLLs are
- also binded to related DLLs in system directory. On the
- other hand, Internet Explore or Window Media Player relys on
- standard DLL search path, and well wrapped with idn wrapper.
-
-2.6. At which point conversion applied
-
- If windows supporting WINSOCK 2.0, there are DLLs one for 1.1 and
- another for 2.0, and call to WINSOCK 1.1 will redirected to 2.0 DLL.
-
- +------------+ Call +------------+ Call +------------+
- | |------->| |------->| |
- |Application | |WINSOCK 1.1 | |WINSOCK 2.0 |
- | |<-------| |<-------| |
- +------------+ Return +------------+ Return +------------+
-
- In this case, calls to 1.1 and 2.0 are both passed to 2.0 DLL. So
- conversion will done in WINSOCK 2.0 DLL side.
-
- If windows only supports WINSOCK 1.1, there's 1.1 DLL only.
-
- +------------+ Call +------------+
- | |------->| |
- |Application | |WINSOCK 1.1 |
- | |<-------| |
- +------------+ Return +------------+
-
- In this case, conversion must done in 1.1 DLL.
-
- If idn wrapper was installed on system directory, DLLs will work as
- described above. But if wrapper was installed on application's
- directory, call/return sequence changes. Original WINSOCK 1.1 DLL
- in windows seems binded to specific WINSOCK 2.0 DLL, placed at
- window's system diretory. So call from WINSOCK 1.1 to WINSOCK 2.0
- will passed to original DLL (in system directory) and never passed
- to wrapper DLL in application's directory. So in this case, both
- 1.1 and 2.0 DLLs should coonvert domain name encodings.
-
- These DLL binding is not documented. It may be change on OS
- versions or DLL versions. So, mDn wrapper determines place of
- conversion on registry value. With this registry value, idn
- wrappper absolb OS/DLL variations.
-
- Registry values for idn wrapper will placed under
-
- HKEY_LOCAL_MACHINE\SOFTWARE\JPNIC\IDN
- HKEY_CURRENT_USER\SOFTWARE\JPNIC\IDN
-
- Place of conversion is determined with registry value "Where",
-
- Registry Value "Where" REG_DWORD
-
- 0 both on WINSOCK 1.1 and WINSOCK 2.0
- 1 if WINSOCK 2.0 exist, only in WINSOCK 2.0
- otherwise, convert on WINSOCK 1.1
- 2 only in WINSOCK 1.1
- 3 only in WINSOCK 2.0
-
- If you install idn wrapper into application's directory, use "0".
- If you install idn wrapper into system directory, use "1". If there
- are no "Where" value, idn wrapper uses "0" as default, it is suited
- to installation into application's directory (default installation).
-
-2.7. Converting From/To
-
- Wrapper DLL convert resolving domain name encoded with local code to
- DNS server's encoding. Also, wrapper DLL convert resulting name (
- encoded with DNS's encoding) back to local encoding.
-
- There are several proposals for DNS encodings to handle multi-lingual
- domain names. Wrapper DLL should be configured to convert to one of
- those encodings. This DNS side encoding will specified with
- registry. When installing idn wrapper, this registry will set to
- some (yet undefined) DNS encoding.
-
- Registry values for idn wrapper will placed under
-
- HKEY_LOCAL_MACHINE\SOFTWARE\JPNIC\IDN
- HKEY_CURRENT_USER\SOFTWARE\JPNIC\IDN
-
- DNS encoding name will given with registry value (REG_SZ) of "Encoding",
- this name must be one of encoding names which 'libmdn' recognize.
-
- Registry Value "Encoding" REG_SZ
-
- Encoding name of DNS server accepts.
-
- Local encodings (Windows Apllication Encodings) is generally
- acquired from process's code page. 'iconv' library, used for idn
- wrapper, generally accepts MS's codepage names.
-
- Some windows apllication encode domain name with some specific multi-
- lingual encoding. For example, if you configured IE to use UTF-8,
- then domain names are encoded with UTF-8. UTF-8 is one of proposed
- DNS encoding, but DNS server may expect another encoding.
-
- For those cases, idn wrapper accept program specific encoding as
- local encoding. These program specific local encoding should be
- marked in registry.
-
- Program specific registry setting will placed under
-
- HKEY_LOCAL_MACHINE\SOFTWARE\JPNIC\IDN\PerProg
- HKEY_CURRENT_USER\SOFTWARE\JPNIC\IDN\PerProg
-
- using program name (executable file name) as key. For example,
- setting specific to Internet Explore, it executable name is
- "IEXPLORE", will plcaed at
-
- HKEY_LOCAL_MACHINE\SOFTWARE\JPNIC\IDN\PerProg\IEXPLORE
-
- Local encoding name will specified with registry value (REG_SZ) of
- "Encoding". This name must be one of encoding names which '
- recognize.libmdn'
-
- Registry Value "Encoding" REG_SZ
-
- Encoding name of application program encodes, if it is not
- system's default encoding.
-
-3. Setup and Configuration
-
- idn wrapper wraps WINSOCK DLL by placing wrapper (fake) DLLs in
- the application's directory. For the installation, idn wrapper
- comes with a setup program and a configuration program.
-
- NOTE: You can also install idn wrapper DLLs in the Windows
- system directory. But this installation is very dangerous
- and may cause severe problems in your system.
- You should try it at your own risk.
-
-3.1. Setup Program
-
- To install idn wrapper, run "setup.exe". Setup program will do:
-
- Installing Files
-
- Copy idn wrapper files (DLL, Program EXE, etc) into diretory
-
- "\Program Files\JPNIC\idn wrapper"
-
- This directory may be changed on setup sequence.
-
- Setting registry entries
-
- Setup program will create keys and values under registry:
-
- "HKEY_LOCAL_MACHINES\Software\JPNIC\IDN"
-
- InstallDir REG_SZ "<installation directory>"
- Pathname of the idn wrapper's installation directory.
- The installer makes copies of the original WINSOCK DLLs
- in that directory, which is referenced by the idn wrapper's
- fake DLLs.
-
- ConfFile REG_SZ "<installation directory>\idn.conf"
- Name of the idnkit's configuration file, which defines
- various parameter regarding multilingual domain name
- handling. See the contents of the file for details.
- This value can be changed with the Configuration Program
- or the registry editor.
-
- LogFile REG_SZ "<installation directory>\idn_wrapper.log"
- Name of the idn wrapper's log file.
- This value can be changed with the Configuration Program
- or the registry editor.
-
- LogLevel DWORD -1
- Logging level. Default is -1, which indicates no logging
- is made. This value can be changed with the Configuration
- Program or the registry editor.
-
- PerProg KEY
-
- Under this key, idn wrapper set program specific values. idn
- wrapper uses program's executable name as key, and put
- values under that key.
-
- PerProg\<progname>\Where REG_DWORD Encoding Position
- PerProg\>progname>\Encoding REG_SZ Local Encoding Name
-
- Configuration program set local encpoding name. "Where"
- value is usually not required in standard installation. If
- you installed idn wrapper in system directory, chanage
- "Where" values to fit your environment.
-
- Creating ICON
-
- Setup program will create program icon for idn wrapper's
- configuration program, and put it into "Start Menu". You can
- start configuration program with it.
-
-3.2. Configuration Program
-
- Configuration program is a tool for wrap specific program, or unwrap
- programs. If you start "Configuration Program", you'll get window
- like this.
-
- +---+-------------------------------------------------+---+---+---+
- | | idn wrapper - Configuration | _ | O | X |
- +---+-------------------------------------------------+---+---+---+
- | idn wrapper Configuration Program version X.X |
- +-----------------------------------------------------------------+
- | Wrapped Program +---------+ |
- | +---------------------------------------------+---+ | Wrap.. | |
- | | | A | +---------+ |
- | | +---+ +---------+ |
- | | | | | Unwrap..| |
- | | | | +---------+ |
- | | | | +---------+ |
- | | | | |UnwrapAll| |
- | | | | +---------+ |
- | | | | +---------+ |
- | | | | |RewrapAll| |
- | | | | +---------+ |
- | | | | +---------+ |
- | | | | | Log.. | |
- | | | | +---------+ |
- | | | | +---------+ |
- | | +---+ |Advanced.| |
- | | | V | +---------+ |
- | +---+-------------------------------------+---+---+ +---------+ |
- | | < | | > | | Exit | |
- | +---+-------------------------------------+---+ +---------+ |
- +-----------------------------------------------------------------+
-
- Listbox contains list of current wrapped programs. Initially it is
- empty.
-
- To wrap a program, press button "wrap". You'll get following dialog.
-
- +---+-------------------------------------------------+---+---+---+
- | | idn wrapper - Wrap Executable | _ | O | X |
- +---+-------------------------------------------------+---+---+---+
- | +----------------------------------------+ +--------+ |
- | Program: | | |Browse..| |
- | +----------------------------------------+ +--------+ |
- | +----------+ |
- | Encoding: | | o Default o UTF-8 |
- | +----------+ |
- | [] Force local DLL reference |
- +-----------------------------------------------------------------+
- | +--------+ +--------+ |
- | | Wrap | | Cancel | |
- | +--------+ +--------+ |
- +-----------------------------------------------------------------+
-
- First, enter program (executable name with full path) or browse
- wrapping exectable from file browser. Then set local encoding of
- that program. Usually use "Default" as local encoding. If target
- program uses internationalized encoding, then specify "UFT-8".
-
- The "Force local DLL reference" button controls the DLL search
- order of the program to be wrapped (Windows95 does not have this
- capability, hence this button does not appear). If it is checked,
- DLLs in the local directory (the directory which the executable
- file is in) are always preferred, even if the executable specifies
- otherwise. If you have problem with wrapping, checking this
- button may solve the problem, but it is also possible that it
- causes other problem.
-
- Finally, put "wrap" button to wrap specified program with given
- encoding. Wrapped program will be listed in listbox of the first
- window.
-
- When you install a new version of idn wrapper, you have to re-wrap
- your programs in order to update DLLs used for wrapping. "Rewrap
- all" button is provided for this purpose. Just press the button,
- and all the currently wrapped programs will be re-wrapped.
-
- To unwrap a program, press button "unwrap". You'll get following
- confirmating dialog.
-
- +---+-------------------------------------------------+---+---+---+
- | | idn wrapper - Unwrap Executable | _ | O | X |
- +---+-------------------------------------------------+---+---+---+
- | +---------------------------------------------------+ |
- | Program: | | |
- | +---------------------------------------------------+ |
- +-----------------------------------------------------------------+
- | +--------+ +--------+ |
- | | Unwrap | | Cancel | |
- | +--------+ +--------+ |
- +-----------------------------------------------------------------+
-
- If you unwrap a program, the program will be vanished from listbox
- of the first window.
-
- Also "Unwrap all" button is provided to unwrap all the programs
- that are currently wrapped.
-
- To configure logging, press button "log". You'll get the following
- dialog.
-
- +---+-------------------------------------------------+---+---+---+
- | | idn wrapper - Log Configuration | _ | O | X |
- +---+-------------------------------------------------+---+---+---+
- | Log Level: o None o Fatal o Error o Warning o Info o Trace |
- | |
- | +------------------------------------+ +---------+ |
- | Log File:| | | Browse..| |
- | +------------------------------------+ +---------+ |
- | +------+ +--------+ |
- |Log Operation: | View | | Delete | |
- | +------+ +--------+ |
- +-----------------------------------------------------------------+
- | +--------+ +--------+ |
- | | OK | | Cancel | |
- | +--------+ +--------+ |
- +-----------------------------------------------------------------+
-
- Logging level can be selected from the followings.
- None no logging at all
- Fatal only records fatal errors
- Error also records non-fatal errors
- Warning also records warning mssages
- Info also records informational messages
- Trace also records trace information
- Note that these levels are for log output from IDN library (idnkit.dll).
- idn wrapper itself supports only off (None) and on (the rest).
-
- Pathname of the log file can also be specified with this dialog.
-
- You can view the current log file contents by pressing "View" button,
- or delete it by "Delete" button.
-
- Note that log level and log file configuration doesn't affect already
- running processes.
-
- Press "advanced" button to invoke the advanced configuration dialog.
- This dialog is for advanced users and enables customization for
- some basic parameters which normal users need not change, since
- appropriate defaults are provided.
-
- +---+-------------------------------------------------+---+---+---+
- | | idn wrapper - Advanced Configuration | _ | O | X |
- +---+-------------------------------------------------+---+---+---+
- | IDN Wrapping Mode |
- | o Wrap both WINSOCK 1.1 and WINSOCK 2.0 |
- | o Wrap only WINSOCK 1.1 |
- | o Wrap only WINSOCK 2.0 |
- | o Wrap only WINSOCK 2.0 if it exists. |
- | Otherwise wrap only WINSOCK 1.1 |
- +-----------------------------------------------------------------+
- | IDN Configuration |
- | +--------------------------------+ +----------+ |
- | Config File: | | | Browse.. | |
- | +--------------------------------+ +----------+ |
- | +------+ |
- | | Edit | |
- | +------+ |
- +-----------------------------------------------------------------+
- | +--------+ +--------+ |
- | | OK | | Cancel | |
- | +--------+ +--------+ |
- +-----------------------------------------------------------------+
-
- With the dialog users can do the following configuration.
-
- Wrapping Mode
- Customize wrapping mode. Normally the default item should be
- appropriate. Changing it to other item may help when you
- have problems.
-
- IDN Configuration
- Set the configuration file for multilingual domain name handling.
- By pressing "Edit" button, you can edit then contents of the file.
-
-4. Limitations
-
-4.1. DLL Versions
-
- Wrapper DLL is tightly coupled with specific DLL version, because
- it must export all the entries including un-documented ones.
- If WINSOCK DLL version changed, idn wrapper may not work correctly.
-
- Current idn wrapper is tested on
-
- Win2000 (WINSOCK 1.1 + 2.0)
- WinME (WINSOCK 1.1 + 2.0)
-
- But there are no assuarance for future versions of Windows.
-
-4.2. DNS, WINS, LMHOSTS
-
- There are three name resolving methods in windows, DNS, WINS and
- LMHOSTS. Using idn wrapper, domain name conversion will performed
- on all of thoses methods. It may cause some trouble if windows
- using WINS or LMHOSTS. We recommend use DNS oly if you want to use
- idn wrapper.
-
-4.3. Converting Names other than Domain Name
-
- In WINSOCK 2.0, there are generic name resolution APIs are
- introduced.
-
- WSALookupServiceBeginA
- WSALookupServiceNextA
- WSALookupServiceEnd
-
- They are use mainly domain name conversion now, but not limited to
- resolving domain name. idn wrapper hooks this API and convert
- given name anyway. This causes some trouble if conversion name is
- not domain name.
-
-4.4. Applications don't use these APIa
-
- Some applications don't use these APIs to resolving domain names.
- For example, 'nslookup' issue DNS request locally. For these
- applications, idn wrapper does not work.
-
-4.5. Applications bound to specific WINSOCK DLL
-
- Some applications are bound to specific DLL, not relying on
- standard DLL search path. Netscape Communicator seems to be one of
- such programs. idn wrapper in standard installation cannot wrap
- such programs.
-
- If you want to wrap those programs, you may use installation into
- system directory. But this installation is very dangerous, for
- it is possible that your system cannot boot again.
-
-5. Registry Setting - Summary
-
-5.1. Priority of Setting
-
- Settings of idn wrapper is placed on registry
-
- Software\JPNIC\IDN
-
- under HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER. idn wrapper first
- read HKEY_LOCAL_MACHINE, and if HKEY_CURRENT_USER exist, overwrite
- with this one. Usually set HKEY_LOCAL_MACHINE only. But if you
- need per user setting, then set HKEY_CURRENT_USER.
-
- Note that the configuration program reads/writes only
- HKEY_LOCAL_MACHINE.
-
-5.2. Registry Key
-
- There's common settings and per program settings.
-
-_Common Settings
-
- Software\JPNIC\IDN\InstallDir Installation directory
- Software\JPNIC\IDN\Where Where to convert encoding
- 0: both WINSOCK 1.1 and WINSOCK 2.0
- 1: if WINSOCK 2.0 exist, convert at 2.0 DLL
- if WINSOCK 1.1 only, convert at 1.1 DLL
- 2: only in WINSOCK1.1
- 3: only in WINSOCK2.0
- Software\JPNIC\IDN\ConfFile idnkit Configuration File
- Software\JPNIC\IDN\LogFile Log File
- Software\JPNIC\IDN\LogLevel Log Level
-
-_Per Program Settings
-
- Converting position and program's local encoding may be set per
- program bases.
-
- Software\JPNIC\IDN\PerProg\<name>\Where
- Software\JPNIC\IDN\PerProg\<name>\Encoding
-
- If not specified, the following values are assumed.
-
- Where 0 (both 1.1 DLL and 2.0 DLL)
- Encoding [process's code page]
diff --git a/contrib/idn/idnkit-1.0-src/wsock/README_j.txt b/contrib/idn/idnkit-1.0-src/wsock/README_j.txt
deleted file mode 100644
index 354f46ce..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/README_j.txt
+++ /dev/null
@@ -1,717 +0,0 @@
-
- idn wrapper - Windows ‚É‚¨‚¯‚éƒNƒ‰ƒCƒAƒ“ƒg‘¤‚Å‚Ì IDN •ÏŠ·ƒ\ƒtƒgƒEƒFƒA
-
- Copyright (c) 2000,2001,2002 Japan Network Information Center.
- All rights reserved.
-
- *** ’ˆÓ **********************************************************
- ‚à‚µ‚à‚·‚Å‚É mDN Wrapper (idn wrapper ‚Ì‘Og) ‚ªƒCƒ“ƒXƒg[ƒ‹‚³‚ê‚Ä
- ‚¢‚éƒ}ƒVƒ“‚É idn wrapper ‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚éꇂɂÍAƒCƒ“ƒXƒg[ƒ‹‘O
- ‚ÉAƒ‰ƒbƒv‚³‚ê‚Ä‚¢‚é‚·‚ׂẴvƒƒOƒ‰ƒ€‚ðƒAƒ“ƒ‰ƒbƒv‚µ‚Ä‚­‚¾‚³‚¢B
- *******************************************************************
-
-
-1. ‚Í‚¶‚ß‚É
-
- Windows ‚Å‘Û‰»ƒhƒƒCƒ“–¼‚ðˆµ‚¦‚é‚悤‚É‚·‚邽‚ß‚É‚ÍAWindows ã‚Ì
- ƒNƒ‰ƒCƒAƒ“ƒgƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚É‚¨‚¢‚ÄA‰ðŒˆ‚µ‚悤‚Æ‚·‚é–¼‘O‚̃Gƒ“ƒR[
- ƒfƒBƒ“ƒO‚ðADNS ƒT[ƒo‚ªŽó•t‚¯‚éŒ`Ž®‚Ì‚à‚Ì‚É•ÏŠ·‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B
- ‚±‚ê‚ÍAWindows ã‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚ªA‚«‚¿‚ñ‚Æ‘Û‰»ƒhƒƒCƒ“–¼‚ð
- ˆµ‚¦‚é‚悤‚É‚È‚Á‚Ä‚¢‚È‚¯‚ê‚΂Ȃç‚È‚¢A‚Æ‚¢‚¤‚±‚Æ‚Å‚ ‚èA–{—ˆ‚Í‚»‚ê
- ‚¼‚ê‚̃vƒƒOƒ‰ƒ€‚Ì쬎҂ªs‚È‚¤‚ׂ«‚±‚Æ‚Å‚·B
-
- Œ»Ý IETF ‚É‚Ä‘Û‰»ƒhƒƒCƒ“–¼‚̃tƒŒ[ƒ€ƒ[ƒN‚ð•W€‰»‚·‚é“w—Í‚ª‘±
- ‚¯‚ç‚ê‚Ä‚¨‚èA‚»‚ÌŒ‹‰Ê‚Æ‚µ‚Ĉê˜A‚Ì RFC ‚ª‚à‚¤‚·‚®”­s‚³‚ê‚邱‚Æ‚É
- ‚È‚Á‚Ä‚¢‚Ü‚·‚ªA‚»‚ê‚Å‚à‘Û‰»ƒhƒƒCƒ“–¼‚ɑΉž‚µ‚½ƒAƒvƒŠƒP[ƒVƒ‡ƒ“
- ‚Í‚Ü‚¾‚Ü‚¾­‚È‚¢‚Ì‚ªŒ»ó‚Å‚·B
-
- ‚»‚±‚ÅAŠù‘¶‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚ð‘Û‰»ƒhƒƒCƒ“–¼‚ɑΉž‚³‚¹‚邽‚ß‚Ì
- ƒwƒ‹ƒp[ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ª•K—v‚É‚È‚è‚Ü‚·Bidnkit ‚ÉŠÜ‚Ü‚ê‚é runidn
- ƒRƒ}ƒ“ƒh‚Í Unix Œn‚Ì OS ‚ł̈ê‚‚̉ðŒˆô‚Å‚·‚µAWindows ‚ɑ΂·‚é‰ð
- Œˆô‚Æ‚µ‚Ä‚Í‚±‚±‚Åà–¾‚·‚é idn wrapper ‚ª‚ ‚è‚Ü‚·B
-
- Windows ‚É‚¨‚¢‚ÄA‘½‚­‚Ìê‡AƒhƒƒCƒ“–¼‰ðŒˆ‚Ì—v‹‚ÍWINSOCK DLL ‚É
- “n‚³‚ê‚Ü‚·B‚»‚±‚ÅAWINSOCK DLL ‚ð‘Û‰»ƒhƒƒCƒ“–¼‘Ήž‚Ì‚à‚Ì‚É’u‚«
- Š·‚¦‚Ä‚â‚ê‚ÎAŠù‘¶‚̃vƒƒOƒ‰ƒ€‚©‚ç‚Å‚à‘Û‰»ƒhƒƒCƒ“–¼‚ðŽg‚¤‚±‚Æ‚ª
- ‚Å‚«‚é‚悤‚É‚È‚è‚Ü‚·B
-
-2. ŽÀŒ»•û–@
-
-2.1. ƒ‰ƒbƒp[DLL
-
- ƒ‰ƒbƒp[DLL ‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ÆŒ³‚ÌDLL ‚Æ‚ÌŠÔ‚ÉŠ„‚èž‚ñ‚ÅAƒAƒvƒŠ
- ƒP[ƒVƒ‡ƒ“‚©‚ç‚ÌDLL ‚̌ĂÑo‚µ‚ð‰¡Žæ‚肵‚ÄA–{—ˆ‚ÌDLL ‚Ƃ͈قȂÁ‚½ˆ
- —‚ð‚³‚¹‚é‚à‚Ì‚Å‚·B
-
- +------------+ Call +------------+ Call +------------+
- | |------->| |------->| |
- |Application | |Wrapper DLL | |Original DLL|
- | |<-------| |<-------| |
- +------------+ Return +------------+ Return +------------+
- additional
- processing
- here
-
- ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚©‚ç‚ÌDLL ‚̌ĂÑo‚µ‚̓‰ƒbƒp[ DLL‚É“n‚³‚ê‚Ü‚·Bƒ‰ƒb
- ƒp[ DLL‚Í‚»‚±‚ÅA•t‰Á“I‚Ȉ—‚ðs‚È‚Á‚ÄAŒ³‚ÌDLL ‚̃Gƒ“ƒgƒŠ‚ðŒÄ‚Ño
- ‚µ‚Ü‚·B‚Ü‚½AŒ³‚ÌDLL ‚̈—Œ‹‰Ê‚͈ê’Uƒ‰ƒbƒp[ DLL‚É•Ô‚³‚êA‚±‚±‚Å‚à
- •t‰Á“I‚Ȉ—‚ðs‚È‚Á‚ÄAÅI“I‚ÈŒ‹‰Ê‚ªƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚É•Ô‚³‚ê‚邱‚Æ
- ‚É‚È‚è‚Ü‚·B
-
- idn wrapper ‚Å‚ÍAWINSOCK DLL‚Ì
-
- WSOCK32.DLL WINSOCK V1.1
- WS2_32.DLL WINSOCK V2.0
-
- ‚ɑ΂·‚郉ƒbƒp[DLL ‚ð’ñ‹Ÿ‚µ‚ÄA‘Û‰»ƒhƒƒCƒ“–¼‚Ì–¼‘O‰ðŒˆ‚ª‚Å‚«‚é‚æ
- ‚¤‚É‚µ‚Ü‚·B16ƒrƒbƒg”Å‚ÌWINSOCK (WINSOCK.DLL) ‚Í‘ÎÛŠO‚Å‚·B
-
-2.2. ˆ—‘ÎÛ‚ÌAPI
-
- idn wrapper ‚ÍWINSOCK ‚Ì–¼‘O‰ðŒˆ‚ÉŠÖ˜A‚µ‚½API ‚ɂ‚¢‚Ä‚Ì‚Ý•t‰Á“I‚Ȉ
- —‚ðs‚È‚¢‚Ü‚·Bˆ—‚Ì‘ÎÛ‚Æ‚È‚éWINSOCK API‚͈ȉº‚Ì‚à‚Ì‚Å‚·B
-
- WINSOCK 1.1, WINSOCK 2.0 ‚Ì—¼•û‚É‚ ‚é‚à‚Ì
-
- gethostbyaddr
- gethostbyname
- WSAAsyncGetHostByAddr
- WSAAsyncGetHostByName
-
- WINSOCK 2.0 ‚¾‚¯‚É‚ ‚é‚à‚Ì
-
- WSALookupServiceBeginA
- WSALookupServiceNextA
- WSALookupServiceEnd
-
- ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚É‚æ‚Á‚Ä‚ÍA‚±‚ê‚ç‚ÌAPI ‚ðŽg‚í‚È‚¢‚Å“ÆŽ©‚ɃhƒƒCƒ“–¼
- ‚Ì‰ðŒˆ‚ðs‚È‚¤‚à‚Ì‚à‚ ‚è‚Ü‚·B—Ⴆ‚ÎAnslookup‚ÍA‚±‚ê‚ç‚ÌAPI ‚ðŽg‚í
- ‚È‚¢‚ÅA“à•”‚Å“ÆŽ©‚ÉDNS ƒŠƒNƒGƒXƒg‚̶¬A‰ðŽß‚ðs‚È‚Á‚Ä‚¢‚Ü‚·B“–‘R
- ‚Ì‚±‚Æ‚È‚ª‚çA‚±‚ê‚ç‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚ɂ‚¢‚Ä‚ÍAidn wrapper ‚Å‚Í‘½
- Œ¾Œê‰»‘Ήž‚³‚¹‚邱‚Æ‚Í‚Å‚«‚Ü‚¹‚ñB
-
- ’FWINSOCK 2.0 ‚É‚ÍAWIDE CHARACTER ƒx[ƒX‚Ì–¼‘O‰ðŒˆ‚ÌAPI ‚Æ‚µ‚Ä
-
- WSALookupServiceBeginW
- WSALookupServiceNextW
-
- ‚à‚ ‚è‚Ü‚·‚ªA‚±‚ê‚ç‚ɂ‚¢‚Ă̓‰ƒbƒv‚µ‚Ü‚¹‚ñB‚±‚ê‚ç‚ÌAPI ‚̓}
- ƒCƒNƒƒ\ƒtƒgŽd—l‚É‚æ‚é‘Û‰»‚ɑΉž‚µ‚½‚à‚Ì‚Å‚·‚©‚çA‚»‚̃tƒŒ[
- ƒ€ƒ[ƒNã‚ÅŽg‚¤‚ׂ«‚à‚Ì‚Å‚·B‚±‚ê‚ç‚ɂ‚¢‚Ä‚Í‘¼‚Ì‘½Œ¾Œê‰»ƒtƒŒ[
- ƒ€ƒ[ƒN‚É•ÏŠ·‚µ‚Ä‚µ‚Ü‚¤‚̂͊댯‚Å‚Í‚È‚¢‚Æ”»’f‚µ‚Ü‚µ‚½B
-
-2.3. ˆ—‘ÎÛŠO‚ÌAPI
-
- ã‹LˆÈŠO‚ÌWINSOCK API ‚ɂ‚¢‚Ä‚ÍAidn wrapper ‚Í‚È‚É‚à‚µ‚È‚¢‚ÅAŒ³‚Ì
- WINSOCK API ‚ðŒÄ‚Ño‚µ‚Ü‚·B
-
- idn wrapper ‚Å‚ÍAŒ³‚ÌWINSOCK DLL ‚𖼑O‚ð•Ï‚¦‚ăRƒs[‚µA‚»‚ê‚ð
- ŒÄ‚Ño‚·‚悤‚Éì‚ç‚ê‚Ä‚¢‚Ü‚·B
-
- wsock32.dll -> wsock32o.dll
- ws2_32.dll -> ws2_32o.dll
-
- ƒ‰ƒbƒp[DLL ‚ÍŒ³‚ÌWINSOCK DLL ‚Æ“¯‚¶–¼‘O‚Å쬂³‚ê‚Ü‚·B]‚Á‚Äidn
- wrapper ‚ªƒCƒ“ƒXƒg[ƒ‹‚³‚ꂽó‘Ô‚Å‚ÍA
-
- wsock32.dll idn wrapper for WINSOCK V1.1
- ws2_32.dll idn wrapper for WINSOCK V2.0
- wsock32o.dll Original WINSOCK V1.1 DLL
- ws2_32o.dll Original WINSOCK V2.0 DLL
-
- ‚Æ‚È‚è‚Ü‚·B
-
-2.4. ”ñ“¯Šú API
-
- ƒhƒƒCƒ“–¼‚Ì•ÏŠ·‚ÍAˆÈ‰º‚̃^ƒCƒ~ƒ“ƒO‚Ås‚È‚í‚ê‚é•K—v‚ª‚ ‚è‚Ü‚·B
-
- DNS ‚ւ̃ŠƒNƒGƒXƒgŽž
-
- ƒ[ƒJƒ‹ƒGƒ“ƒR[ƒfƒBƒ“ƒO -> DNS ƒGƒ“ƒR[ƒfƒBƒ“ƒO
-
- DNS ‚©‚ç‚̉ž“šŽóMŽž
-
- DNS ƒGƒ“ƒR[ƒfƒBƒ“ƒO -> ƒ[ƒJƒ‹ƒGƒ“ƒR[ƒfƒBƒ“ƒO
-
- “¯ŠúAPI ‚É‚¨‚¢‚Ä‚ÍAƒ[ƒJƒ‹ƒGƒ“ƒR[ƒfƒBƒ“ƒO‚©‚çDNS ƒGƒ“ƒR[ƒfƒBƒ“ƒO
- ‚Ö‚Ì•ÏŠ·‚ÍAŒ³‚ÌAPI ‚ðŒÄ‚Ño‚·‘O‚És‚í‚êADNS ƒGƒ“ƒR[ƒfƒBƒ“ƒO‚©‚çƒ[
- ƒJƒ‹ƒGƒ“ƒR[ƒfƒBƒ“ƒO‚Ö‚Ì•ÏŠ·‚ÍAŒ³‚ÌAPI ‚©‚ç•œ‹A‚µ‚Ä‚«‚½‚Æ‚±‚ë‚Ås‚È
- ‚í‚ê‚Ü‚·B
-
- ‚µ‚©‚µAWINSOCK ‚̈ȉº‚ÌAPI ‚Í”ñ“¯ŠúAPI ‚ÅADNS ‚©‚ç‚̉ž“šŽóM‘O‚É•œ
- ‹A‚µ‚Ä‚µ‚Ü‚¢‚Ü‚·B
-
- WSAAsyncGetHostByAddr
- WSAAsyncGetHostByName
-
- ‚±‚ê‚ç‚ÌAPI ‚É‚¨‚¢‚Ä‚ÍA–¼‘O‰ðŒˆ‚ÌŠ®—¹‚ÍAWindows ‚ւ̃ƒbƒZ[ƒW‚É‚æ‚Á
- ‚Ä’Ê’m‚³‚ê‚Ü‚·B‚±‚Ì‚½‚ßADNS ƒGƒ“ƒR[ƒfƒBƒ“ƒO‚©‚çƒ[ƒJƒ‹ƒGƒ“ƒR[ƒfƒBƒ“
- ƒO‚Ö‚Ì•ÏŠ·‚ðs‚È‚¤‚É‚ÍAƒ‰ƒbƒp[‚Í’Ê’mæ‚̃EƒBƒ“ƒhƒEƒvƒƒVƒWƒƒ‚̃ƒb
- ƒZ[ƒWƒLƒ…[‚ðƒtƒbƒN‚µ‚ÄA‚±‚ÌŠ®—¹ƒƒbƒZ[ƒW‚ð•ßŠl‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B
-
- ‚»‚±‚ÅA”ñ“¯ŠúAPI ‚ªŒÄ‚Ño‚³‚ꂽꇂɂÍAidn wrapper ‚ÍA’Ê’mæ‚̃EƒBƒ“
- ƒhƒEƒvƒƒVƒWƒƒi‚±‚ê‚ÍAPI ‚̃pƒ‰ƒƒ^‚ÅŽwŽ¦‚³‚ê‚Ü‚·j‚ɃtƒbƒN‚ðݒ肵
- ‚Ü‚·BƒtƒbƒN‚ªŠ®—¹ƒƒbƒZ[ƒWi‚±‚ê‚àAPI ‚̃pƒ‰ƒƒ^‚ÅŽwŽ¦‚³‚ê‚Ü‚·j‚ð
- ŒŸo‚µ‚½‚È‚çAƒtƒbƒN‚ÍŒ‹‰Ê‚ÌŠi”[—̈æi‚±‚ê‚àAPI ‚̃pƒ‰ƒƒ^‚ÅŽwŽ¦‚³‚ê
- ‚Ä‚¢‚Ü‚·j‚̃hƒƒCƒ“–¼‚ðADNS ‘¤‚̃Gƒ“ƒR[ƒfƒBƒ“ƒO‚©‚çƒ[ƒJƒ‹ƒGƒ“ƒR[
- ƒfƒBƒ“ƒO‚É•ÏŠ·‚·‚é‚à‚Ì‚Æ‚µ‚Ü‚·B
-
-2.5. Wrapper DLL ‚̃Cƒ“ƒXƒg[ƒ‹
-
- WINSOCK DLL ‚ÍWindows ‚̃VƒXƒeƒ€ƒfƒBƒŒƒNƒgƒŠ‚É’u‚©‚ê‚Ä‚¢‚Ü‚·B
- WINSOCK ‚ðŠmŽÀ‚Ƀ‰ƒbƒv‚·‚é‚É‚ÍAƒVƒXƒeƒ€ƒfƒBƒŒƒNƒgƒŠ‚É‚¨‚¢‚Ä
-
- ƒIƒŠƒWƒiƒ‹WINSOCK DLL ‚Ì–¼‘O‚Ì•ÏX
-
- ren wsock32.dll wsock32o.dll
- ren ws2_32.dll ws2_32o.dll
-
- ƒ‰ƒbƒp[DLL ‚Ì“±“ü
-
- copy somewhere\wsock32.dll wsock32.dll
- copy somewhere\ws2_32.dll ws2_32.dll
- copy another DLLs also
-
- ‚ðs‚È‚¤•K—v‚ª‚ ‚è‚Ü‚·B
-
- ‚µ‚©‚µAƒVƒXƒeƒ€ƒfƒBƒŒƒNƒgƒŠ‚Å‚±‚̂悤‚ÈDLL ‚Ì’u‚«Š·‚¦‚ðs‚È‚¤‚Ì‚Í‘å
- •ÏŠëŒ¯‚È‘€ì‚É‚È‚è‚Ü‚·B
-
- a) DLL ‚ð“ü‚ê‘Ö‚¦‚½ó‘Ô‚ÅA‚à‚¤‚¢‚¿‚Ç“¯‚¶‘€ì‚ðs‚È‚¤‚ÆAƒIƒŠƒWƒiƒ‹
- ‚ÌWINSOCK DLL ‚ªŽ¸‚í‚ê‚Ä‚µ‚Ü‚¤‚±‚Æ‚É‚È‚è‚Ü‚·B
-
- b) ƒT[ƒrƒXƒpƒbƒN‚âƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚È‚Ç‚ÅAWINSOCK DLL ‚ðÄ“±“ü‚·‚é
- ‚à‚Ì‚ª‚ ‚è‚Ü‚·‚ªA‚±‚ê‚É‚æ‚Á‚Ä‚àWINSOCK ‚ª—˜—p•s”\‚ɂȂ邱‚Æ‚ª‚ 
- ‚è‚Ü‚·B
-
- ‚±‚̂悤‚Èó‘Ô‚É‚È‚é‚ÆAƒlƒbƒgƒ[ƒN‹@”\‚ª‘S‚­Žg‚¦‚È‚­‚È‚Á‚½‚èAň«
- ‚ÍWindows ‚Ì‹N“®‚·‚ço—ˆ‚È‚­‚È‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B
-
- ‚»‚±‚ÅAidn wrapper ‚Å‚ÍAã‚̂悤‚ȃVƒXƒeƒ€ƒŒƒxƒ‹‚̃‰ƒbƒv‚Å‚Í‚È‚­A
- ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ɑ΂·‚郉ƒbƒv‚ðŠî–{‹@”\‚Æ‚µ‚Ä’ñ‹Ÿ‚·‚é‚à‚Ì‚Æ‚µ‚Ü‚·B
-
- Windows ‚É‚¨‚¢‚ÄADLL ‚ÍAŠî–{“I‚É‚Í
-
- ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚̃[ƒhƒfƒBƒŒƒNƒgƒŠ
- %SystemRoot%\System32
- %SystemRoot%
- PATH ‚ÅŽwŽ¦‚³‚ê‚éƒfƒBƒŒƒNƒgƒŠ
-
- ‚̇˜‚ÅŒŸõ‚³‚ê‚ÄAʼn‚ÉŒ©‚‚©‚Á‚½‚à‚Ì‚ªƒ[ƒh‚³‚ê‚Ü‚·B‚Å‚·‚©‚çA
- ˆê”Ê“I‚É‚ÍADLL ‚ðƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚̃[ƒhƒfƒBƒŒƒNƒgƒŠ‚ɃCƒ“ƒXƒg[ƒ‹
- ‚·‚ê‚ÎA‚»‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚©‚ç‚ÌWINSOCK ‚̌ĂÑo‚µ‚ðƒ‰ƒbƒv‚·‚邱‚Æ
- ‚ª‚Å‚«‚Ü‚·B
-
- ‚½‚¾‚µA‚¢‚­‚‚©‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“ADLL ‚Å‚ÍAŒŸõƒpƒX‚ðŒo—R‚¹‚¸‚É“Á
- ’è‚ÌDLL ‚ðƒŠƒ“ƒN‚·‚é‚悤‚É‚È‚Á‚Ä‚¢‚é‚à‚Ì‚ª‚ ‚è‚Ü‚·B‚±‚̂悤‚È\¬‚Ì
- ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ADLL ‚ªŽg‚í‚ê‚½ê‡‚É‚Í idn wrapper‚ł͑Έ‚·‚邱‚Æ
- ‚Í‚Å‚«‚Ü‚¹‚ñB
-
- ’FNetscape‚Í“Á’èDLL ‚ɃoƒCƒ“ƒh‚³‚ê‚Ä‚¢‚é‚悤‚ÅAƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒfƒB
- ƒŒƒNƒgƒŠ‚ւ̃Cƒ“ƒXƒg[ƒ‹‚ł̓‰ƒbƒv‚Å‚«‚Ü‚¹‚ñBWINSOCK DLL Ž©‘Ì‚à
- ƒVƒXƒeƒ€ƒfƒBƒŒƒNƒgƒŠ‚ÌŠÖ˜ADLL ‚ɃoƒCƒ“ƒh‚³‚ê‚Ä‚¢‚é‚悤‚Å‚·Bˆê•ûA
- Internet Explore‚âWindows Media Player‚Í•W€‚̃T[ƒ`ƒpƒX‚É]‚Á‚Ä
- ‚¢‚é‚Ì‚ÅAƒ‰ƒbƒv‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B
-
-2.6. ƒGƒ“ƒR[ƒfƒBƒ“ƒO‚Ì•ÏŠ·ˆÊ’u
-
- WINSOCK 2.0 ‚ðƒTƒ|[ƒg‚µ‚Ä‚¢‚éWindows ‚É‚ÍAWINSOCK ‚Ì1.1 ‚Æ2.0 ‚Ì‚»
- ‚ꂼ‚ê‚ɑΉž‚·‚éDLL ‚ª‚ ‚èAWINSOCK 1.1 ‚ÌAPI ‚̌ĂÑo‚µ‚Í2.0 ‚Ì“¯‚¶
- ƒGƒ“ƒgƒŠ‚ɃŠƒ_ƒCƒŒƒNƒg‚³‚ê‚é‚悤‚É‚È‚Á‚Ä‚¢‚Ü‚·B
-
- +------------+ Call +------------+ Call +------------+
- | |------->| |------->| |
- |Application | |WINSOCK 1.1 | |WINSOCK 2.0 |
- | |<-------| |<-------| |
- +------------+ Return +------------+ Return +------------+
-
- ‚±‚ÌꇂɂÍ1.1 ‚ɑ΂·‚éŒÄ‚Ño‚µ‚à2.0 ‚ɑ΂·‚éŒÄ‚Ño‚µ‚àA‚Æ‚à‚ÉV2.0
- —p‚ÌDLL ‚É“n‚³‚ê‚é‚Ì‚ÅA2.0—p‚̃‰ƒbƒp[DLL ‘¤‚¾‚¯‚ŃGƒ“ƒR[ƒfƒBƒ“ƒO‚Ì
- •ÏŠ·‚ðs‚È‚¤‚悤‚É‚·‚é‚ׂ«‚Å‚µ‚傤B
-
- ˆê•ûAWINSOCK 1.1 ‚µ‚©ƒTƒ|[ƒg‚µ‚Ä‚¢‚È‚¢ê‡(Win95)‚É‚ÍA1.1 ‚ɑΉž‚µ
- ‚½DLL ‚µ‚©‚ ‚è‚Ü‚¹‚ñB
-
- +------------+ Call +------------+
- | |------->| |
- |Application | |WINSOCK 1.1 |
- | |<-------| |
- +------------+ Return +------------+
-
- ‚±‚Ìꇂɂ͕K‘R“I‚É1.1 —p‚̃‰ƒbƒp[DLL ‚ŃGƒ“ƒR[ƒfƒBƒ“ƒO‚ð•ÏŠ·‚µ‚È
- ‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB
-
- idn Wrapepr ‚ªwindows ‚̃VƒXƒeƒ€ƒfƒBƒŒƒNƒgƒŠ‚ɃCƒ“ƒXƒg[ƒ‹‚³‚ꂽê‡
- ‚É‚ÍAã‚Ì’Ê‚è‚É“®ì‚·‚é‚Ì‚ÅA
-
- WINSOCK 2.0 ‚ ‚è 2.0 ƒ‰ƒbƒp[‚Å•ÏŠ·
- WINSOCK 1.1 ‚Ì‚Ý 1.1 ƒ‰ƒbƒp[‚Å•ÏŠ·
-
- ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B
-
- ‚µ‚©‚µAƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒfƒBƒŒƒNƒgƒŠ‚ɃCƒ“ƒXƒg[ƒ‹‚³‚ꂽꇂɂ͓®ì
- ‚ª•Ï‚í‚Á‚Ä‚«‚Ü‚·BWindows •t‘®‚Ì WINSOCK 1.1 DLL‚ÍAƒVƒXƒeƒ€ƒfƒBƒŒƒN
- ƒgƒŠ‚ÌWINSOCK 2.0 ‚ɃoƒCƒ“ƒh‚³‚ê‚Ä‚¢‚邽‚ßAƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒfƒBƒŒƒN
- ƒgƒŠ‘¤‚ÌWINSOCK 2.0 ƒ‰ƒbƒp[DLL ‚ɂ̓Šƒ_ƒCƒŒƒNƒg‚³‚ê‚Ä‚«‚Ü‚¹‚ñB‚±‚Ì
- ‚½‚ßAƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒfƒBƒŒƒNƒgƒŠ‚ւ̃Cƒ“ƒXƒg[ƒ‹‚É‚¨‚¢‚Ä‚ÍA1.1DLLA
- 2.0DLL‚Ì—¼•û‚ŃGƒ“ƒR[ƒfƒBƒ“ƒO‚ð•ÏŠ·‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B
-
- ‚±‚̂悤‚ÈDLL ŠÔ‚̃oƒCƒ“ƒfƒBƒ“ƒO‚̓hƒLƒ…ƒƒ“ƒg‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ‚Ì‚ÅAŠÂ
- ‹«Aƒo[ƒWƒ‡ƒ“‚É‚æ‚Á‚Ă͈قȂÁ‚½“®ì‚ð‚·‚é‚©‚à’m‚ê‚Ü‚¹‚ñB‚»‚±‚Åidn
- wrapper ‚Å‚ÍAƒŒƒWƒXƒgƒŠ’l‚É‚æ‚Á‚ÄAƒ‰ƒbƒp[DLL ‚Ì‚Ç‚±‚Å•ÏŠ·‚ðs‚È‚¤
- ‚©‚ðŒˆ’è‚·‚é‚悤‚É‚µ‚ÄAƒCƒ“ƒXƒg[ƒ‹æ‚É‚æ‚é·ˆÙA‚ ‚é‚¢‚̓o[ƒWƒ‡ƒ“
- ‚É‚æ‚é·ˆÙ‚ð‹zŽû‚·‚é‚悤‚É‚µ‚Ü‚·B
-
- idn wrapper —p‚̃ŒƒWƒXƒgƒŠÝ’è‚Í
-
- HKEY_LOCAL_MACHINE\SOFTWARE\JPNIC\IDN
- HKEY_CURRENT_USER\SOFTWARE\JPNIC\IDN
-
- ˆÈ‰º‚É”z’u‚³‚ê‚Ü‚·BƒGƒ“ƒR[ƒfƒBƒ“ƒO•ÏŠ·‚ðs‚È‚¤ˆÊ’u‚ɂ‚¢‚Ä‚ÍA‚±‚Ì
- ’¼‰º‚̃ŒƒWƒXƒgƒŠ’l WhereiREG_DWORDj ‚É‚æ‚Á‚ÄŒˆ’肵‚Ü‚·B—LŒø‚È’l‚ÍA
-
- ƒŒƒWƒXƒgƒŠ Where (REG_DWORD)
-
- 0 WINSOCK 1.1AWINSOCK 2.0 ‚Ì—¼•û‚Å•ÏŠ·‚·‚é
- 1 WINSOCK 2.0 ‚ª‚ ‚ê‚ÎAWINSOCK 2.0‚¾‚¯‚Å•ÏŠ·‚·‚é
- WINSOCK 1.1 ‚¾‚¯‚Ìê‡‚É‚Í WINSOCK 1.1 ‚Å•ÏŠ·‚·‚é
- 2 WINSOCK 1.1 ‚¾‚¯‚Å•ÏŠ·‚·‚é
- 3 WINSOCK 2.0 ‚¾‚¯‚Å•ÏŠ·‚·‚é
-
- ‚Ì‚S’Ê‚è‚Å‚·BƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒfƒBƒŒƒNƒgƒŠ‚ɃCƒ“ƒXƒg[ƒ‹‚·‚éꇂɂÍ
- u‚Ov‚ðAƒVƒXƒeƒ€ƒfƒBƒŒƒNƒgƒŠ‚ɃCƒ“ƒXƒg[ƒ‹‚·‚éꇂɂÍu‚Pv‚ðÝ’è
- ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BƒŒƒWƒXƒgƒŠ’l‚ª‘¶Ý‚µ‚È‚¢ê‡‚É‚Íu‚Ov‚ð‘z’肵‚Ü
- ‚·B‚±‚ê‚̓AƒvƒŠƒP[ƒVƒ‡ƒ“ƒfƒBƒŒƒNƒgƒŠ‚ւ̃Cƒ“ƒXƒg[ƒ‹‚ð•W€‚Æ‚µ‚½‚à
- ‚Ì‚Å‚·B
-
-2.7. •ÏŠ·Œ³/æ‚̃Gƒ“ƒNƒR[ƒfƒBƒ“ƒO
-
- ƒ‰ƒbƒp[DLL ‚Å‚ÍA‰ðŒˆ‚µ‚悤‚Æ‚·‚éƒhƒƒCƒ“–¼‚ðAƒ}ƒVƒ“‚̃[ƒJƒ‹ƒGƒ“
- ƒR[ƒfƒBƒ“ƒO‚©‚çDNS ƒT[ƒo‚̃Gƒ“ƒR[ƒfƒBƒ“ƒO‚É•ÏŠ·‚µA‚Ü‚½ADNS ‚ª•Ô
- ‚µ‚Ä‚«‚½ƒhƒƒCƒ“–¼(DNS ƒT[ƒo‚̃Gƒ“ƒR[ƒfƒBƒ“ƒO)‚ðƒ}ƒVƒ“‚̃[ƒJƒ‹ƒGƒ“
- ƒR[ƒfƒBƒ“ƒO‚É–ß‚µ‚Ü‚·B
-
- Œ»ÝADNS ‘¤‚Ì‘Û‰»ƒGƒ“ƒR[ƒfƒBƒ“ƒO‚ɂ‚¢‚Ä‚ÍA‚¢‚­‚‚à‚Ì•ûŽ®‚ª’ñ
- ˆÄ‚³‚ê‚Ä‚¢‚Ü‚·Bƒ‰ƒbƒp[DLL ‚Í‚»‚ê‚ç‚ÌDNS ‘¤ƒGƒ“ƒR[ƒfƒBƒ“ƒO‚Ì‚Ç‚ê‚©
- ‚ЂƂ‚ɕϊ·‚·‚é‚悤‚É\¬‚³‚ê‚Ü‚·B‚±‚ÌDNS ‘¤ƒGƒ“ƒR[ƒfƒBƒ“ƒO‚̓ŒƒW
- ƒXƒgƒŠ‚ÅŽwŽ¦‚³‚ê‚Ü‚·B‚±‚̃ŒƒWƒXƒgƒŠ‚É‚ÍAidn wrapper ‚̃Cƒ“ƒXƒg[ƒ‹
- Žž‚ÉiŒ»Žž“_‚Å‚Í–¢’è‚ÌjƒfƒtƒHƒ‹ƒgƒGƒ“ƒR[ƒfƒBƒ“ƒO‚ªÝ’肳‚ê‚Ü‚·B“–
- ‘RA‚±‚̃ŒƒWƒXƒgƒŠ‚ÍAŒã‚Å‘¼‚Ì‚à‚Ì‚É•ÏX‚·‚邱‚Æ‚à‚Å‚«‚Ü‚·B
-
- idn wrapper —p‚̃ŒƒWƒXƒgƒŠÝ’è‚Í
-
- HKEY_LOCAL_MACHINE\SOFTWARE\JPNIC\IDN
- HKEY_CURRENT_USER\SOFTWARE\JPNIC\IDN
-
- ˆÈ‰º‚É”z’u‚³‚ê‚Ü‚·BDNS ‘¤‚̃Gƒ“ƒR[ƒfƒBƒ“ƒO‚̓ŒƒWƒXƒgƒŠ’l Encoding
- iREG_SZj‚ÅŽwŽ¦‚³‚ê‚Ü‚·B‚±‚̃Gƒ“ƒR[ƒfƒBƒ“ƒO–¼‚ÍAlibmdn‚Å”FŽ¯‚³‚ê
- ‚é‚à‚Ì‚Å‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB
-
- ƒŒƒWƒXƒgƒŠ Encoding (REG_SZ)
- DNS ƒT[ƒo‘¤‚̃Gƒ“ƒR[ƒfƒBƒ“ƒO–¼‚ðݒ肵‚Ü‚·
-
- ˆê•ûAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ªŽg—p‚µ‚Ä‚¢‚éƒ[ƒJƒ‹ƒGƒ“ƒR[ƒfƒBƒ“ƒO‚ÍA’Êí
- ‚̓vƒƒZƒX‚̃R[ƒhƒy[ƒW‚©‚ç‹‚ß‚Ü‚·Bƒ‰ƒbƒp[DLL ‚ªŽg—p‚·‚é 'iconv'
- ƒ‰ƒCƒuƒ‰ƒŠ‚ÍAwindows ‚̃R[ƒhƒy[ƒW–¼‚ðƒGƒ“ƒR[ƒfƒBƒ“ƒO–¼‚Æ‚µ‚ÄŽó•t
- ‚¯‚邱‚Æ‚ª‚Å‚«‚é‚Ì‚ÅAƒR[ƒhƒy[ƒW–¼‚ð‚»‚Ì‚Ü‚Üƒ[ƒJƒ‹ƒGƒ“ƒR[ƒfƒBƒ“
- ƒO–¼‚Æ‚µ‚ÄŽg—p‚µ‚Ü‚·B
-
- ‚µ‚©‚µAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚É‚æ‚Á‚Ä‚ÍA“Á’è‚Ì‘Û‰»ƒGƒ“ƒR[ƒfƒBƒ“ƒO‚Å
- ƒhƒƒCƒ“–¼‚ðƒGƒ“ƒR[ƒfƒBƒ“ƒO‚µ‚Ä‚µ‚Ü‚¤‚à‚Ì‚à‚ ‚è‚Ü‚·B—Ⴆ‚ÎAIE‚Å‚Í
- ƒhƒƒCƒ“–¼‚ðUTF-8 ‚Å•\‹L‚·‚é‚悤‚ÉŽwŽ¦‚·‚邱‚Æ‚ª‚Å‚«‚é‚悤‚É‚È‚Á‚Ä‚¢
- ‚Ü‚·BUTF-8 ‚É‚æ‚éƒGƒ“ƒR[ƒfƒBƒ“ƒO‚ÍA’ñˆÄ‚³‚ê‚Ä‚¢‚é‘Û‰»•ûŽ®‚Ì‚Ð
- ‚Ƃ‚ł·‚ªA‘Û‰»‚³‚ꂽDNS ƒT[ƒo‚Í‘¼‚̃Gƒ“ƒR[ƒfƒBƒ“ƒO‚µ‚©Žó•t‚¯
- ‚È‚¢‚©‚à’m‚ê‚Ü‚¹‚ñB
-
- ‚±‚̂悤‚È󋵂ɑΈ‚·‚邽‚ßAidn ƒ‰ƒbƒp[‚ÍAƒ[ƒJƒ‹ƒGƒ“ƒR[ƒfƒBƒ“
- ƒO‚Æ‚µ‚ăvƒƒOƒ‰ƒ€“Á—L‚̃Gƒ“ƒR[ƒfƒBƒ“ƒO‚àŽó•t‚¯‚邱‚Æ‚ª‚Å‚«‚é‚悤‚É
- ‚µ‚Ü‚·B‚±‚̂悤‚ȃvƒƒOƒ‰ƒ€“Á—L‚̃[ƒJƒ‹ƒGƒ“ƒR[ƒfƒBƒ“ƒO‚̓ŒƒWƒXƒg
- ƒŠ‹LÚ‚³‚ê‚é‚à‚Ì‚Æ‚µ‚Ü‚·B
-
- idn wrapper —p‚̃vƒƒOƒ‰ƒ€“Á—L‚̃ŒƒWƒXƒgƒŠÝ’è‚Í
-
- HKEY_LOCAL_MACHINE\SOFTWARE\JPNIC\IDN\PerProg
- HKEY_CURRENT_USER\SOFTWARE\JPNIC\IDN\PerProg
-
- ˆÈ‰º‚ÉAƒvƒƒOƒ‰ƒ€–¼iŽÀsƒ‚ƒWƒ…[ƒ‹ƒtƒ@ƒCƒ‹–¼j‚ðƒL[‚Æ‚µ‚Ä”z’u‚³‚ê
- ‚Ü‚·B—Ⴆ‚ÎAInternet Explore ‚ÌꇂɂÍAŽÀsƒ‚ƒWƒ…[ƒ‹–¼‚Ì
- IEXPLORE‚ðƒL[‚Æ‚µ‚Ä
-
- HKEY_LOCAL_MACHINE\SOFTWARE\JPNIC\IDN\PerProg\IEXPLORE
-
- ˆÈ‰º‚É’u‚©‚ê‚Ü‚·Bƒ[ƒJƒ‹ƒGƒ“ƒR[ƒfƒBƒ“ƒO–¼‚ÍAƒŒƒWƒXƒgƒŠ’l
- Encoding iREG_SZj‚ÅŽwŽ¦‚µ‚Ü‚·B‚±‚ê‚àlibmdn‚Å”FŽ¯‚³‚ê‚é‚à‚Ì‚Å‚È‚¯‚ê
- ‚΂Ȃè‚Ü‚¹‚ñB
-
- ƒŒƒWƒXƒgƒŠ Encoding (REG_SZ)
-
- ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€“Á—L‚̃Gƒ“ƒR[ƒfƒBƒ“ƒO–¼iƒfƒtƒHƒ‹
- ƒg‚̃Gƒ“ƒR[ƒfƒBƒ“ƒOˆÈŠO‚ð•K—v‚Æ‚·‚éê‡j‚ðŽw’肵‚Ü‚·B
-
-3.ƒZƒbƒgƒAƒbƒv‚ƃRƒ“ƒtƒBƒMƒ…ƒŒ[ƒVƒ‡ƒ“
-
- idn wrapper ‚ÍAŠî–{ƒCƒ“ƒXƒgƒŒ[ƒVƒ‡ƒ“‚Æ‚µ‚ÄAƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒfƒBƒŒ
- ƒNƒgƒŠ‚ÅWINSOCK ‚ðƒ‰ƒbƒv‚µ‚Ü‚·B‚±‚ê‚ɇ‚킹‚ÄAƒZƒbƒgƒAƒbƒvƒvƒƒOƒ‰
- ƒ€‚ƃRƒ“ƒtƒBƒMƒ…ƒŒ[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€‚Æ‚ð’ñ‹Ÿ‚µ‚Ü‚·B
-
- ’FƒVƒXƒeƒ€ƒfƒBƒŒƒNƒgƒŠ‚ł̃‰ƒbƒv‚à‰Â”\‚Å‚·‚ªA‚±‚ê‚͊댯‚ÈÝ’è‚Å‚·
- ‚Ì‚ÅA•W€ƒCƒ“ƒXƒgƒŒ[ƒVƒ‡ƒ“‚Æ‚µ‚Ä‚Í’ñ‹Ÿ‚µ‚Ü‚¹‚ñBƒVƒXƒeƒ€ƒfƒBƒŒ
- ƒNƒgƒŠ‚ւ̃Cƒ“ƒXƒg[ƒ‹‚ðs‚È‚¤ê‡‚É‚ÍAŽ©ŒÈÓ”C‚Å‚â‚Á‚Ä‚­‚¾‚³‚¢B
-
-3.1.ƒZƒbƒgƒAƒbƒvƒvƒƒOƒ‰ƒ€
-
- idn wrapper ‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚é‚É‚Í"setup.exe" ‚ðŽÀs‚µ‚Ü‚·BƒZƒbƒgƒAƒb
- ƒvƒvƒƒOƒ‰ƒ€‚͈ȉº‚̈—‚ðŽÀs‚µ‚Ü‚·B
-
- ƒtƒ@ƒCƒ‹‚̃Cƒ“ƒXƒg[ƒ‹
-
- ƒfƒBƒŒƒNƒgƒŠu\Program Files\JPNIC\idn wrapperv i ƒZƒbƒgƒAƒbƒv
- Žž“_‚Å•ÏX‰Â”\jˆÈ‰º‚ÉAidn wrapper ‚ð\¬‚·‚éƒtƒ@ƒCƒ‹‚ðƒRƒs[‚µ
- ‚Ü‚·B
-
- ƒŒƒWƒXƒgƒŠ‚ÌÝ’è
-
- HKEY_LOCAL_MACHINE\Software\JPNIC\IDN ˆÈ‰º‚É•K—v‚ȃŒƒWƒXƒgƒŠƒL[A
- ƒŒƒWƒXƒgƒŠ’l‚ðì¬Aݒ肵‚Ü‚·B
-
- InstallDir REG_SZ "<ƒCƒ“ƒXƒg[ƒ‹ƒfƒBƒŒƒNƒgƒŠ>"
- idn wrapper ‚̃Cƒ“ƒXƒg[ƒ‹ƒfƒBƒŒƒNƒgƒŠ‚̃pƒX–¼‚Å‚·BƒZƒbƒg
- ƒAƒbƒvƒvƒƒOƒ‰ƒ€‚Í‚±‚̃fƒBƒŒƒNƒgƒŠ‚ɃIƒŠƒWƒiƒ‹‚ÌWINSOCK
- DLL ‚̃Rƒs[‚ð쬂µ‚Ü‚·Bidn wrapper ‚̃‰ƒbƒp[ DLL ‚ÍŽÀ
- sŽž‚É‚±‚Ì DLL ‚ðŽQÆ‚µ‚Ü‚·B
-
- ConfFile REG_SZ "<ƒCƒ“ƒXƒg[ƒ‹ƒfƒBƒŒƒNƒgƒŠ>\idn.conf"
- idn wrapper ‚ª‘Û‰»ƒhƒƒCƒ“–¼‚Ì•ÏŠ·ˆ—‚ÉŽg—p‚µ‚Ä‚¢‚é
- idnkit ‚̃Rƒ“ƒtƒBƒMƒ…ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚Ì–¼‘O‚Å‚·B‚±‚̃tƒ@
- ƒCƒ‹‚Í‘Û‰»ƒhƒƒCƒ“–¼‚̈—‚É•K—v‚ÈŠeŽí‚̃pƒ‰ƒ[ƒ^‚ðÝ’è
- ‚·‚邽‚ß‚Ì‚à‚Ì‚Å‚·BÚ‚µ‚­‚̓tƒ@ƒCƒ‹‚Ì“à—e‚ð‚²——‚­‚¾‚³‚¢B
- ‚±‚Ì’l‚ÍŒãq‚·‚éƒRƒ“ƒtƒBƒMƒ…ƒŒ[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€‚Å•ÏX‚·‚é
- ‚±‚Æ‚ª‚Å‚«‚Ü‚·B
-
- LogFile REG_SZ "<ƒCƒ“ƒXƒg[ƒ‹ƒfƒBƒŒƒNƒgƒŠ>\idn_wrapper.log"
- idn wrapper ‚̃ƒOƒtƒ@ƒCƒ‹‚Ì–¼‘O‚Å‚·B‚±‚Ì’l‚àƒRƒ“ƒtƒBƒMƒ…
- ƒŒ[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€‚Å•ÏX‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B
-
- LogLevel DWORD -1
- ƒƒOƒŒƒxƒ‹‚ÌŽw’è‚Å‚·BƒfƒtƒHƒ‹ƒg‚Í -1 ‚ÅA‚±‚ê‚Í‘S‚­ƒƒO‚ð
- o—Í‚µ‚È‚¢‚Æ‚¢‚¤ˆÓ–¡‚Å‚·B‚±‚Ì’l‚àƒRƒ“ƒtƒBƒMƒ…ƒŒ[ƒVƒ‡ƒ“ƒv
- ƒƒOƒ‰ƒ€‚Å•ÏX‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B
-
- PerProg ƒL[
-
- ƒvƒƒOƒ‰ƒ€–ˆ‚ÌÝ’è’l‚ðŠi”[‚·‚邽‚߂̃L[‚Å‚·B‚±‚̉º‚ÉAƒvƒ
- ƒOƒ‰ƒ€‚ÌŽÀsƒ‚ƒWƒ…[ƒ‹–¼‚ðƒL[‚Æ‚µ‚ăvƒƒOƒ‰ƒ€ŒÂ•Ê‚Ìݒ肪‹L
- ˜^‚³‚ê‚Ü‚·Bݒ肳‚ê‚éî•ñ‚͈ȉº‚Ì“ñ‚‚ł·B
-
- PerProg\<progname>\Where REG_DWORD •ÏŠ·ˆÊ’u
- PerProg\<progname>\Encoding REG_SZ ƒGƒ“ƒR[ƒfƒBƒ“ƒO–¼
-
- ƒGƒ“ƒR[ƒfƒBƒ“ƒO–¼‚Í’ÊíƒRƒ“ƒtƒBƒMƒ…ƒŒ[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€‚É‚æ‚Á
- ‚Äݒ肳‚ê‚Ü‚·B•ÏŠ·ˆÊ’u‚ÍA•W€ƒCƒ“ƒXƒg[ƒ‹‚Å‚Í•s—v‚Å‚·BƒV
- ƒXƒeƒ€ƒfƒBƒŒƒNƒgƒŠ‚ւ̃Cƒ“ƒXƒg[ƒ‹‚ðs‚È‚Á‚½ê‡‚É‚ÍAƒŒƒWƒX
- ƒgƒŠƒGƒfƒBƒ^‚Ŋ‹«‚ɇ‚킹‚ÄÝ’è‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B
-
- ƒAƒCƒRƒ“‚Ìì¬
-
- ƒRƒ“ƒtƒBƒMƒ…ƒŒ[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€‚̃AƒCƒRƒ“‚ð쬂µAƒXƒ^[ƒgƒƒjƒ…[
- ‚É“o˜^‚µ‚Ü‚·B‚±‚ê‚É‚æ‚Á‚ăRƒ“ƒtƒBƒMƒ…ƒŒ[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€‚ð‹N“®
- ‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B
-
- ƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚·‚é‚É‚ÍAƒRƒ“ƒgƒ[ƒ‹ƒpƒlƒ‹‚ÌuƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Ì’Ç
- ‰Á‚Æíœv‚ÅAuidn wrapperv ‚ð‘I‘ð‚µ‚Äíœiu’ljÁ‚Æíœvƒ{ƒ^ƒ“j
- ‚µ‚Ü‚·B
-
-3.2.ƒRƒ“ƒtƒBƒMƒ…ƒŒ[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€
-
- ƒRƒ“ƒtƒBƒMƒ…ƒŒ[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€‚ÍAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ð“Á’肵‚ă‰ƒbƒv
- ‚µ‚½‚èAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚̃‰ƒbƒv‚ð‰ðœ‚·‚邽‚߂̃c[ƒ‹‚Å‚·B
-
- ‹N“®‚·‚é‚ƈȉº‚̂悤‚ȉæ–Ê‚ª•\Ž¦‚³‚ê‚Ü‚·B
-
- „¡„Ÿ„¦„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„¦„Ÿ„¦„Ÿ„¦„Ÿ„¢
- „ @„ idn wrapper - Configuration „ Q„  „ ~„ 
- „¥„Ÿ„¨„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„¨„Ÿ„¨„Ÿ„¨„Ÿ„§
- „  idn wrapper Configuration Program version X.X „ 
- „¥„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„§
- „  Wrapped Program „¡„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„¢„ 
- „ „¡„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„¦„Ÿ„¢„  Wrap.. „ „ 
- „ „  „ È„ „¤„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„£„ 
- „ „  „¥„Ÿ„§„¡„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„¢„ 
- „ „  „  „ „  Unwrap.. „ „ 
- „ „  „  „ „¤„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„£„ 
- „ „  „  „ „¡„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„¢„ 
- „ „  „  „ „ UnwrapAll.„ „ 
- „ „  „  „ „¤„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„£„ 
- „ „  „  „ „¡„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„¢„ 
- „ „  „  „ „ RewrapAll.„ „ 
- „ „  „  „ „¤„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„£„ 
- „ „  „  „ „¡„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„¢„ 
- „ „  „  „ „  Log.. „ „ 
- „ „  „  „ „¤„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„£„ 
- „ „  „  „ „¡„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„¢„ 
- „ „  „¥„Ÿ„§„ Advanced..„ „ 
- „ „  „ É„ „¤„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„£„ 
- „ „¥„Ÿ„¦„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„¦„Ÿ„©„Ÿ„£„¡„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„¢„ 
- „ „ q„  „ r„  „  Exit „ „ 
- „ „¤„Ÿ„¨„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„¨„Ÿ„£ „¤„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„£„ 
- „¤„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„£
-
- ƒŠƒXƒgƒ{ƒbƒNƒX‚É‚ÍA‚»‚ÌŽž“_‚щƒbƒv‚³‚ê‚Ä‚¢‚éƒvƒƒOƒ‰ƒ€‚ª•\Ž¦‚³‚ê‚Ü
- ‚·Bʼn‚ÉŽÀs‚µ‚½ê‡‚É‚Í‹ó‚É‚È‚Á‚Ä‚¢‚Ü‚·B
-
- ƒvƒƒOƒ‰ƒ€‚ðƒ‰ƒbƒv‚·‚é‚É‚ÍA"wrap"ƒ{ƒ^ƒ“‚ð‰Ÿ‚µ‚Ü‚·B"wrap"ƒ{ƒ^ƒ“‚ð‰Ÿ
- ‚·‚ƈȉº‚̂悤‚ȃ_ƒCƒAƒƒO‚ª•\Ž¦‚³‚ê‚Ü‚·B
-
- „¡„Ÿ„¦„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„¦„Ÿ„¦„Ÿ„¦„Ÿ„¢
- „ @„ idn wrapper - Wrap Executable „ Q„  „ ~„ 
- „¥„Ÿ„¨„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„¨„Ÿ„¨„Ÿ„¨„Ÿ„§
- „  „¡„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„¢„¡„Ÿ„Ÿ„Ÿ„Ÿ„¢„ 
- „  Program: „  „ „ Browse..„ „ 
- „  „¤„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„£„¤„Ÿ„Ÿ„Ÿ„Ÿ„£„ 
- „  „¡„Ÿ„Ÿ„Ÿ„¢ „ 
- „ Encoding: „  „  ›Default ›UTF-8 „ 
- „  „¤„Ÿ„Ÿ„Ÿ„£ „ 
- „    Force local DLL reference „ 
- „¥„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„§
- „  „¡„Ÿ„Ÿ„Ÿ„Ÿ„¢„¡„Ÿ„Ÿ„Ÿ„Ÿ„¢„ 
- „  „  wrap „ „  cancel „ „ 
- „  „¤„Ÿ„Ÿ„Ÿ„Ÿ„£„¤„Ÿ„Ÿ„Ÿ„Ÿ„£„ 
- „¤„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„£
-
- ʼn‚ÉAƒ‰ƒbƒv‚·‚éƒvƒƒOƒ‰ƒ€‚ÌŽÀsƒtƒ@ƒCƒ‹–¼‚ðݒ肵‚Ü‚·B’¼Ú“ü—Í
- ‚·‚é‚©Aƒuƒ‰ƒEƒYƒ{ƒ^ƒ“‚Ńtƒ@ƒCƒ‹‚ð’T‚µ‚Ä‚­‚¾‚³‚¢BŽŸ‚É‚»‚̃vƒƒOƒ‰
- ƒ€‚̃[ƒJƒ‹ƒGƒ“ƒR[ƒfƒBƒ“ƒO‚ðŽw’肵‚Ü‚·B’Êí‚ÍuDefaultv ‚Å‚©‚Ü
- ‚¢‚Ü‚¹‚ñBƒvƒƒOƒ‰ƒ€‚ª‘Û‰»ƒGƒ“ƒR[ƒfƒBƒ“ƒO‚É]‚Á‚Ä‚¢‚éꇂɂ̂Ý
- uUTF-8v ‚ðŽwŽ¦‚µ‚Ü‚·B
-
- uForce local DLL referencevƒ{ƒ^ƒ“‚É‚æ‚èAƒ‰ƒbƒv‚·‚éƒvƒƒOƒ‰ƒ€‚Ì
- DLL ‚Ì’Tõ‡˜‚ð•ÏX‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚· (‚½‚¾‚µ Windows95 ‚É‚Í‚±‚Ì
- ‹@”\‚ª‚È‚¢‚½‚ßA‚±‚̃{ƒ^ƒ“‚à•\Ž¦‚³‚ê‚Ü‚¹‚ñ)B‚±‚̃{ƒ^ƒ“‚ðƒ`ƒFƒbƒN
- ‚·‚é‚ÆA‚½‚Æ‚¦ƒvƒƒOƒ‰ƒ€‚ª•Ê‚ÌêŠ‚Ì DLL ‚ðŽw’肵‚Ä‚¢‚Ä‚àAí‚ÉŽÀ
- sƒtƒ@ƒCƒ‹‚ª‚ ‚éƒfƒBƒŒƒNƒgƒŠ‚Ì DLL ‚ª—D悳‚ê‚é‚悤‚É‚È‚è‚Ü‚·B‚à
- ‚µƒvƒƒOƒ‰ƒ€‚ª‚¤‚Ü‚­ƒ‰ƒbƒv‚Å‚«‚È‚¢ê‡‚É‚ÍA‚±‚̃{ƒ^ƒ“‚ðƒ`ƒFƒbƒN‚·
- ‚é‚Æ‚¤‚Ü‚­‚¢‚­‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚½‚¾‚µ“¯Žž‚É‘¼‚Ì–â‘肪”­¶‚·‚é‰Â”\«
- ‚à‚ ‚è‚Ü‚·B
-
- ÅŒã‚Éuwrapvƒ{ƒ^ƒ“‚ð‰Ÿ‚¹‚ÎAƒvƒƒOƒ‰ƒ€‚ªAŽw’肳‚ꂽƒGƒ“ƒR[ƒfƒB
- ƒ“ƒO‚щƒbƒv‚³‚ê‚Ü‚·Bƒ‰ƒbƒv‚³‚ꂽƒvƒƒOƒ‰ƒ€‚ÍAʼn‚̃EƒBƒ“ƒhƒE‚Ì
- ƒŠƒXƒgƒ{ƒbƒNƒX‚É”½‰f‚³‚ê‚Ü‚·B
-
- idn wrapper ‚ðƒo[ƒWƒ‡ƒ“ƒAƒbƒv‚µ‚½ê‡‚É‚ÍAƒ‰ƒbƒv—p‚Ì DLL ‚ðƒAƒbƒv
- ƒf[ƒg‚·‚邽‚ß‚ÉAƒvƒƒOƒ‰ƒ€‚ðă‰ƒbƒv‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚±‚Ì‚½‚ß‚ÉA
- Œ»Ýƒ‰ƒbƒv‚³‚ê‚Ä‚¢‚éƒvƒƒOƒ‰ƒ€‚ɑ΂µ‚ÄÄ“xƒ‰ƒbƒv‚ðs‚¤‚½‚ß‚Ìurewrap
- allvƒ{ƒ^ƒ“‚ª—pˆÓ‚³‚ê‚Ä‚¢‚Ü‚·B
-
- ƒvƒƒOƒ‰ƒ€‚ɑ΂·‚郉ƒbƒv‚ð‰ðœ‚·‚é‚É‚ÍAƒŠƒXƒgƒ{ƒbƒNƒX‚ʼn𜂷‚éƒvƒ
- ƒOƒ‰ƒ€‚ð‘I‘ð‚µ‚ÄAuunwrapvƒ{ƒ^ƒ“‚ð‰Ÿ‚µ‚Ü‚·BˆÈ‰º‚ÌŠm”F—p‚̃_ƒCƒAƒ
- ƒO‚ª•\Ž¦‚³‚ê‚Ü‚·‚Ì‚ÅAŠÔˆá‚¢‚ª‚È‚¯‚ê‚Îuunwrapvƒ{ƒ^ƒ“‚ð‰Ÿ‚µ‚Ä‚­‚¾‚³
- ‚¢B
-
- „¡„Ÿ„¦„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„¦„Ÿ„¦„Ÿ„¦„Ÿ„¢
- „ @„ idn wrapper - Unwrap Executable „ Q„  „ ~„ 
- „¥„Ÿ„¨„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„¨„Ÿ„¨„Ÿ„¨„Ÿ„§
- „  „¡„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„¢„ 
- „ Program: „  „ „ 
- „  „¤„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„£„ 
- „¥„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„§
- „  „¡„Ÿ„Ÿ„Ÿ„Ÿ„¢„¡„Ÿ„Ÿ„Ÿ„Ÿ„¢„ 
- „  „  Unwrap „ „  Cancel „ „ 
- „  „¤„Ÿ„Ÿ„Ÿ„Ÿ„£„¤„Ÿ„Ÿ„Ÿ„Ÿ„£„ 
- „¤„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„£
-
- ƒ‰ƒbƒv‚ª‰ðœ‚³‚ê‚é‚ÆA‚»‚̃vƒƒOƒ‰ƒ€‚Íʼn‚̃EƒBƒ“ƒhƒE‚̃ŠƒXƒgƒ{ƒbƒN
- ƒX‚©‚ç‚à휂³‚ê‚Ü‚·B
-
- ƒvƒƒOƒ‰ƒ€‚ɑ΂µ‚ÄŒ»Ýݒ肳‚ê‚Ä‚¢‚郉ƒbƒv‚ð‚·‚×‚Ä‰ðœ‚·‚邽‚ß‚Ì
- uunwrap allvƒ{ƒ^ƒ“‚à—pˆÓ‚³‚ê‚Ä‚¢‚Ü‚·B
-
- ƒƒO‚ÌÝ’è‚ðs‚¤‚É‚ÍA"log" ƒ{ƒ^ƒ“‚ð‰Ÿ‚µ‚Ü‚·BŽŸ‚̂悤‚ȃ_ƒCƒAƒƒO‚ª
- •\Ž¦‚³‚ê‚Ü‚·B
-
- „¡„Ÿ„¦„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„¦„Ÿ„¦„Ÿ„¦„Ÿ„¢
- „ @„ idn wrapper - Log Configuration „ Q„  „ ~„ 
- „¥„Ÿ„¨„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„¨„Ÿ„¨„Ÿ„¨„Ÿ„§
- „  Log Level: ›None ›Fatal ›Error ›Warning ›Info ›Trace „ 
- „  „¡„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„¢„¡„Ÿ„Ÿ„Ÿ„Ÿ„¢„ 
- „  Log File:„  „ „ Browse..„ „ 
- „  „¤„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„£„¤„Ÿ„Ÿ„Ÿ„Ÿ„£„ 
- „  „¡„Ÿ„Ÿ„Ÿ„¢ „¡„Ÿ„Ÿ„Ÿ„¢ „ 
- „ Log Operation:„  View „  „ Delete„  „ 
- „  „¤„Ÿ„Ÿ„Ÿ„£ „¤„Ÿ„Ÿ„Ÿ„£ „ 
- „¥„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„§
- „  „¡„Ÿ„Ÿ„Ÿ„Ÿ„¢„¡„Ÿ„Ÿ„Ÿ„Ÿ„¢„ 
- „  „  OK „ „  Cancel „ „ 
- „  „¤„Ÿ„Ÿ„Ÿ„Ÿ„£„¤„Ÿ„Ÿ„Ÿ„Ÿ„£„ 
- „¤„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„£
-
- ƒƒOƒŒƒxƒ‹‚ÍŽŸ‚Ì’†‚©‚ç‘I‘ð‚·‚é‚±‚Æ‚ª‚Å‚«‚Ü‚·B
- None ƒƒO‚ðo—Í‚µ‚È‚¢
- Fatal ’v–½“IƒGƒ‰[‚Ì‚Ý‹L˜^‚·‚é
- Error ’v–½“I‚Å‚È‚¢ƒGƒ‰[‚à‹L˜^‚·‚é
- Warning ŒxƒƒbƒZ[ƒW‚à‹L˜^‚·‚é
- Info ‚»‚Ì‘¼‚Ìî•ñ‚à‹L˜^‚·‚é
- Trace ƒgƒŒ[ƒXo—Í‚à‹L˜^‚·‚é
- ‚±‚±‚É‚ ‚°‚½ƒƒOƒŒƒxƒ‹‚ÌÝ’è‚ÍAIDN ƒ‰ƒCƒuƒ‰ƒŠ (idnkit.dll) ‚ªo—Í‚·‚é
- ƒƒO‚ɑ΂µ‚Ä‚Ì‚Ý—LŒø‚Å‚·Bidn wrapper Ž©g‚ªo—Í‚·‚郃O‚Í ON/OFF
- ‚µ‚©‚Å‚«‚Ü‚¹‚ñBNone ‚ðŽw’è‚·‚é‚Æ OFF ‚ÉA‚»‚êˆÈŠO‚̃Œƒxƒ‹‚ðŽw’è‚·‚é‚Æ
- ON ‚É‚È‚è‚Ü‚·B
-
- ‚±‚̃_ƒCƒAƒƒO‚ð—p‚¢‚ÄAƒƒOƒtƒ@ƒCƒ‹‚̃pƒX–¼‚ðŽw’è‚·‚邱‚Æ‚à‚Å‚«‚Ü‚·B
-
- ‚Ü‚½AƒƒOƒtƒ@ƒCƒ‹‚Ì“à—e‚ð•\Ž¦‚³‚¹‚½‚èAƒƒOƒtƒ@ƒCƒ‹‚ð휂·‚邱‚Æ‚à
- ‰Â”\‚Å‚·B
-
- ƒƒOƒŒƒxƒ‹‚⃃Oƒtƒ@ƒCƒ‹‚ÌÝ’è‚ÍAݒ莞‚É‚·‚Å‚É“®ì‚µ‚Ä‚¢‚éƒvƒƒZƒX
- ‚ɂ͉e‹¿‚ð—^‚¦‚È‚¢‚±‚Æ‚É‹C‚ð‚‚¯‚Ä‚­‚¾‚³‚¢B
-
- "advanced" ƒ{ƒ^ƒ“‚ð‰Ÿ‚·‚Æuadvanced configurationv—p‚̃_ƒCƒAƒƒO
- ‚ª•\Ž¦‚³‚ê‚Ü‚·B‚±‚̃_ƒCƒAƒƒO‚Í㋉ƒ†[ƒU‚Ì‚½‚ß‚Ì‚à‚Ì‚ÅA“K؂ȃf
- ƒtƒHƒ‹ƒg‚ªÝ’肳‚ê‚Ä‚¢‚邽‚ß‚É’Ê탆[ƒU‚ª•ÏX‚·‚é•K—v‚Ì‚È‚¢‚悤‚È
- Šî–{“I‚ȃpƒ‰ƒ[ƒ^‚ð•ÏX‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B
-
- „¡„Ÿ„¦„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„¦„Ÿ„¦„Ÿ„¦„Ÿ„¢
- „ @„ idn wrapper - Advanced Configuration „ Q„  „ ~„ 
- „¥„Ÿ„¨„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„¨„Ÿ„¨„Ÿ„¨„Ÿ„§
- „  IDN Wrapping Mode „ 
- „  ›Wrap both WINSOCK 1.1 and WINSOCK 2.0 „ 
- „  ›Wrap only WINSOCK 1.1 „ 
- „  ›Wrap only WINSOCK 2.0 „ 
- „  ›Wrap only WINSOCK 2.0 if it exists. „ 
- „  Otherwise wrap only WINSOCK 1.1 „ 
- „¥„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„§
- „  IDN Configuration „ 
- „  „¡„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„¢„¡„Ÿ„Ÿ„Ÿ„Ÿ„¢„ 
- „  Log File:„  „ „ Browse..„ „ 
- „  „¤„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„£„¤„Ÿ„Ÿ„Ÿ„Ÿ„£„ 
- „  „¡„Ÿ„Ÿ„Ÿ„¢ „ 
- „  „  Edit „  „ 
- „  „¤„Ÿ„Ÿ„Ÿ„£ „ 
- „¥„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„§
- „  „¡„Ÿ„Ÿ„Ÿ„Ÿ„¢„¡„Ÿ„Ÿ„Ÿ„Ÿ„¢„ 
- „  „  OK „ „  Cancel „ „ 
- „  „¤„Ÿ„Ÿ„Ÿ„Ÿ„£„¤„Ÿ„Ÿ„Ÿ„Ÿ„£„ 
- „¤„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„Ÿ„£
-
- ‚±‚̃_ƒCƒAƒƒO‚ðŽg—p‚µ‚ÄAŽŸ‚Ì3Ží—Þ‚ÌÝ’è‚ðs‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·B
-
- Wrapping Mode
- ƒ‰ƒbƒv•û–@‚ðݒ肵‚Ü‚·B’Êí‚̓fƒtƒHƒ‹ƒg‚Åݒ肳‚ê‚Ä‚¢‚逖ڂð
- ‘I‘ð‚µ‚Ä‚¨‚¯‚΂悢‚Í‚¸‚Å‚·‚ªA–â‘肪‹N‚Á‚½‚Æ‚«‚É‚Í•Ê‚Ì€–Ú‚É‚·
- ‚é‚Æ“®‚­‚悤‚É‚È‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñB
-
- IDN Configuration
- ƒRƒ“ƒtƒBƒMƒ…ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹–¼‚ðŽw’肵‚Ü‚·B‚Ü‚½ "Edit" ƒ{ƒ^
- ƒ“‚ð‰Ÿ‚·‚±‚Æ‚É‚æ‚èAƒtƒ@ƒCƒ‹‚Ì“à—e‚ð•ÒW‚·‚邱‚Æ‚à‰Â”\‚Å‚·B
-
-4. §ŒÀŽ–€
-
-4.1. DLL ƒo[ƒWƒ‡ƒ“
-
- ƒ‰ƒbƒp[DLL ‚ÍAŒ³‚ÌWINSOCK ‚ÌDLL ‚̃o[ƒWƒ‡ƒ“‚É‹­‚­ˆË‘¶‚µ‚Ü‚·B‚±‚ê
- ‚ÍA”ñŒöŠJ‚̃Gƒ“ƒgƒŠ‚àŠÜ‚ß‚Ä‚·‚ׂẴGƒ“ƒgƒŠ‚ð’ñ‹Ÿ‚·‚é•K—v‚ª‚ ‚邽‚ß
- ‚Å‚·B‚±‚Ì‚½‚ßWINSOCK DLL ‚̃o[ƒWƒ‡ƒ“‚ª•Ï‚í‚é‚ÆAidn wrapper ‚ª“®ì
- ‚µ‚È‚­‚È‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B
-
- ¡‰ñ쬂³‚ꂽidn wrapper ‚ÍA
-
- Win2000 (WINSOCK 1.1 + 2.0)
- WinME (WINSOCK 1.1 + 2.0)
-
- ‚Å“®ì‚ðŠm”F‚µ‚Ä‚¢‚Ü‚·B‚½‚¾A«—ˆ‚ɂ킽‚Á‚Ä“®ì‚·‚é•ÛØ‚Í‚ ‚è‚Ü‚¹‚ñB
-
-4.2. DNS, WINS, LMHOSTS
-
- Windows ‚Å‚ÍADNS ‚¾‚¯‚Å‚Í‚È‚­AWINS‚âLMHOSTS ‚É‚æ‚Á‚Ä‚àƒhƒƒCƒ“–¼A
- ƒzƒXƒg–¼‚Ì‰ðŒˆ‚ªs‚È‚í‚ê‚Ü‚·Bidn wrapper ‚ðŽg‚Á‚½ê‡‚É‚ÍAƒhƒƒCƒ“
- –¼‚Ì•ÏŠ·‚ªA‚±‚ê‚ç‚Ì•ûŽ®‚ւ̃fƒBƒXƒpƒbƒ`‚ðs‚È‚¤êŠ‚æ‚è‚àãˆÊ‘w‚Ås
- ‚È‚í‚ê‚é‚Ì‚ÅA‚±‚ê‚ç‚Ì‚·‚ׂĂ̕ûŽ®‚ɂ‚¢‚ÄAƒhƒƒCƒ“–¼AƒzƒXƒg–¼‚Ì•Ï
- Š·‚ªs‚È‚í‚ê‚邱‚Æ‚É‚È‚è‚Ü‚·B‚±‚Ì‚½‚ßAWindows ‚ªAWINS‚âLMHOSTS ‚ð
- Žg‚Á‚Ä‚¢‚éꇂɂÍA—\Šú‚µ‚È‚¢–â‘肪”­¶‚·‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B‚±‚ê‚É
- ‚‚¢‚Ä‚ÍAidn wrapper ‚ðŽg‚¤ê‡‚É‚ÍA–¼‘O‰ðŒˆ‚ÉDNS ‚¾‚¯‚ðŽg—p‚·‚邱
- ‚Æ‚ð‚¨Š©‚ß‚µ‚Ü‚·B
-
-3.3. ƒhƒƒCƒ“–¼ˆÈŠO‚Ì–¼‘O‚̉ðŒˆ
-
- WINSOCK 2.0 ‚Ì–¼‘O‰ðŒˆAPI
-
- WSALookupServiceBeginA
- WSALookupServiceNextA
- WSALookupServiceEnd
-
- ‚ÍAƒhƒƒCƒ“–¼ˆÈŠO‚Å‚àŽg—p‚Å‚«‚éA”Ä—p‚Ì–¼‘O‰ðŒˆ—p‚ÌAPI ‚Æ‚µ‚Ä’è‹`‚³
- ‚ê‚Ä‚¢‚Ü‚·BŒ»Žž“_‚Å‚ÍA‚±‚ê‚ç‚Í‚à‚Á‚Ï‚çƒhƒƒCƒ“–¼‚Ì‰ðŒˆ‚ÅŽg—p‚³‚ê‚Ä
- ‚¢‚Ü‚·‚ªA‘¼‚Ì–¼‘O(—Ⴆ‚΃T[ƒrƒX–¼)‚Ì‰ðŒˆ‚É‚àŽg—p‚Å‚«‚邱‚Æ‚É‚È‚Á‚Ä
- ‚¢‚Ü‚·B
-
- idn wrapper ‚ÍA–¼‘O‚Ì‘ÎÛ‚Ì”@‰½‚É‚©‚©‚í‚炸A–¼‘O‚̃Gƒ“ƒR[ƒfƒBƒ“ƒO
- ‚ð•ÏŠ·‚µ‚Ä‚µ‚Ü‚¤‚Ì‚ÅA‚±‚ê‚ç‚ÌAPI ‚ªAƒhƒƒCƒ“–¼ˆÈŠO‚Ì‰ðŒˆ‚ÉŽg‚í‚ê‚Ä
- ‚¢‚éꇂɂÍA–â‘è‚ðˆø‚«‹N‚±‚·‰Â”\«‚ª‚ ‚è‚Ü‚·B
-
-4.4. –¼‘O‰ðŒˆAPI ‚ðŽg‚í‚È‚¢ƒvƒƒOƒ‰ƒ€
-
- ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚É‚æ‚Á‚Ä‚ÍAƒhƒƒCƒ“–¼‚Ì‰ðŒˆ‚É‚±‚ê‚ç‚ÌAPI ‚ðŽg—p‚µ‚È
- ‚¢‚à‚Ì‚à‚ ‚è‚Ü‚·B—Ⴆ‚ÎA'nslookup'‚ÍA‚±‚ê‚ç‚ÌAPI ‚ðŽg—p‚µ‚È‚¢‚ÅA
- ’¼ÚDNS ƒT[ƒo‚Æ’ÊM‚µ‚Ä‚µ‚Ü‚¢‚Ü‚·B‚±‚̂悤‚ȃAƒvƒŠƒP[ƒVƒ‡ƒ“‚ɂ‚¢
- ‚Ä‚ÍAidn wrapper ‚Í–ð‚É—§‚¿‚Ü‚¹‚ñB
-
-4.5. “Á’èWINSOCK DLL ‚ɃoƒCƒ“ƒh‚³‚ꂽƒAƒvƒŠƒP[ƒVƒ‡ƒ“
-
- ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚É‚æ‚Á‚Ä‚ÍA•W€‚ÌDLL ƒT[ƒ`ƒpƒX‚É]‚í‚È‚¢‚ÅA“Á’è‚Ì
- ƒpƒX‚ÌDLL ‚ɃoƒCƒ“ƒh‚³‚ê‚Ä‚¢‚é‚à‚Ì‚ª‚ ‚è‚Ü‚·B‚æ‚­Žg‚í‚ê‚éƒvƒƒOƒ‰ƒ€
- ‚Ì’†‚Å‚ÍANetscape Communicator ‚ª‚»‚¤‚È‚Á‚Ä‚¢‚Ü‚·B‚±‚̂悤‚ȃvƒƒO
- ƒ‰ƒ€‚ɂ‚¢‚Ä‚ÍA•W€‚̃Cƒ“ƒXƒg[ƒ‹^ƒRƒ“ƒtƒBƒMƒ…ƒŒ[ƒVƒ‡ƒ“‚ł̓‰ƒbƒv
- ‚·‚邱‚Æ‚Í‚Å‚«‚Ü‚¹‚ñB
-
- ‚±‚̂悤‚ȃvƒƒOƒ‰ƒ€‚ɂ‚¢‚ÄA‚Ç‚¤‚µ‚Ä‚àƒ‰ƒbƒv‚·‚é•K—v‚ª‚ ‚é‚È‚çAƒV
- ƒXƒeƒ€ƒfƒBƒŒƒNƒgƒŠ‚ւ̃Cƒ“ƒXƒg[ƒ‹‚ðs‚È‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚½‚¾‚µA‚±
- ‚̃Cƒ“ƒXƒg[ƒ‹‚Í‘å•ÏŠëŒ¯‚ÅAꇂɂæ‚Á‚Ă̓VƒXƒeƒ€‚ðÄ‹N“®•s”\‚É‚µ‚Ä
- ‚µ‚Ü‚¤‰Â”\«‚à‚ ‚è‚Ü‚·B
-
-5. ƒŒƒWƒXƒgƒŠÝ’è - ‚Ü‚Æ‚ß
-
-5.1. ƒŒƒWƒXƒgƒŠ‚Ì—D懈Ê
-
- idn wrapper ‚ÌÝ’èî•ñ‚ÍAHKEY_LOCAL_MACHINEAHKEY_CURRENT_USER‚Ì
-
- Software\JPNIC\IDN
-
- ˆÈ‰º‚ÉŠi”[‚³‚ê‚Ü‚·Bidn wrapper‚Íʼn‚ÉHKEY_LOCAL_MACHINE‚ÌÝ’è‚ð“Ç
- ‚Ýž‚ÝAHKEY_CURRENT_USER‘¤‚É‚àݒ肪‚ ‚ê‚ÎA‚±‚ê‚Åã‘‚«‚µ‚Ü‚·B’Ê
- í‚ÍAHKEY_LOCAL_MACHINE ‘¤‚¾‚¯‚ðݒ肵‚Ü‚·Bƒ†[ƒUŒÂ•Ê‚ɈقȂÁ‚½Ý
- ’è‚ðŽg‚¢‚½‚¢ê‡‚Ì‚ÝAHKEY_CURRENT_USER‚ðÝ’è‚·‚é‚悤‚É‚µ‚Ä‚­‚¾‚³‚¢B
-
- ‚È‚¨AƒRƒ“ƒtƒBƒMƒ…ƒŒ[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ€‚Í HKEY_LOCAL_MACHINE ‚ÌÝ’è
- ‚¾‚¯‚ð“Ç‚Ý‘‚«‚·‚é‚悤‚É‚È‚Á‚Ä‚¢‚Ü‚·B
-
-4.2. ƒŒƒWƒXƒgƒŠƒL[
-
- ‘S‘Ì‚Ì‹¤’Ê‚ÌÝ’è‚ÆAƒvƒƒOƒ‰ƒ€ŒÂ•ÊÝ’è‚Æ‚ª‚ ‚è‚Ü‚·B
-
-Q‹¤’Ê’è‹`
-
- Software\JPNIC\IDN\InstallDir ƒCƒ“ƒXƒg[ƒ‹ƒfƒBƒŒƒNƒgƒŠ
- Software\JPNIC\IDN\Where •ÏŠ·ˆÊ’u
- 0:WINSOCK1.1 WINSOCK2.0‚Ì—¼•û‚Å
- 1:WINSOCK2.0 ‚ª‚ ‚ê‚΂»‚¿‚ç‚Å
- 2:WINSOCK1.1 ‚¾‚¯‚Å
- 3:WINSOCK2.0 ‚¾‚¯‚Å
- Software\JPNIC\IDN\ConfFile idnkit ‚ÌÝ’èƒtƒ@ƒCƒ‹
- Software\JPNIC\IDN\LogLevel ƒƒOƒŒƒxƒ‹
- Software\JPNIC\IDN\LogFile ƒƒOƒtƒ@ƒCƒ‹
-
-QƒvƒƒOƒ‰ƒ€ŒÂ•ÊÝ’è
-
- •ÏŠ·ˆÊ’uA‚¨‚æ‚уvƒƒOƒ‰ƒ€‘¤‚̃Gƒ“ƒR[ƒfƒBƒ“ƒO‚̓vƒƒOƒ‰ƒ€–ˆ‚É“Á’è‚·
- ‚邱‚Æ‚à‚Å‚«‚Ü‚·B‚±‚ê‚ç‚ÍAˆÈ‰º‚̃L[ƒnƒCƒu‚̉º‚ÉAƒvƒƒOƒ‰ƒ€–¼‚ðƒL[
- ‚Æ‚·‚é’l‚Åݒ肵‚Ü‚·B
-
- Software\JPNIC\IDN\PerProg\<name>\Where
- Software\JPNIC\IDN\PerProg\<name>\Encoding
-
- Žw’肳‚ê‚Ä‚¢‚È‚¢ê‡‚É‚ÍA
-
- Where 0 1.1A2.0 ‚Ì—¼•û‚Å•ÏŠ·
- Encoding ƒvƒƒZƒX‚̃R[ƒhƒy[ƒW
-
- ‚Æ‚Ý‚È‚µ‚Ü‚·B
-
diff --git a/contrib/idn/idnkit-1.0-src/wsock/common/checkdll.c b/contrib/idn/idnkit-1.0-src/wsock/common/checkdll.c
deleted file mode 100644
index a620cc92..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/common/checkdll.c
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * checkdll.c - Winsock DLL/IDN processing status
- */
-
-/*
- * Copyright (c) 2000,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <windows.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "wrapcommon.h"
-
-static int winsock_idx; /* index of winsock_info[] */
-
-static struct winsock_type {
- char *version; /* winsock version */
- char *name; /* wrapper DLL name */
- char *original_name; /* original DLL name */
-} winsock_info[] = {
-#define IDN_IDX_WS11 0
- { "1.1", "WSOCK32", "WSOCK32O" },
-#define IDN_IDX_WS20 1
- { "2.0", "WS2_32", "WS2_32O" },
- { NULL, NULL, NULL },
-};
-
-static HINSTANCE load_original_dll(void);
-static BOOL check_idn_processing(void);
-static BOOL check_dll(const char *name);
-
-BOOL
-idnWinsockVersion(const char *version) {
- int i;
- for (i = 0; winsock_info[i].version != NULL; i++) {
- if (strcmp(winsock_info[i].version, version) == 0) {
- winsock_idx = i;
- idnLogPrintf(idn_log_level_trace,
- "idnWinsockVersion: version %s\n",
- version);
- return (TRUE);
- }
- }
- idnLogPrintf(idn_log_level_fatal,
- "idnWinsockVersion: unknown winsock version %s\n",
- version);
- return (FALSE);
-}
-
-HINSTANCE
-idnWinsockHandle(void) {
- static HINSTANCE dll_handle = NULL;
- static int initialized = 0;
-
- if (!initialized) {
- /* Get the handle of the original winsock DLL */
- idnLogPrintf(idn_log_level_trace,
- "idnWinsockHandle: loading original DLL..\n");
- dll_handle = load_original_dll();
- }
- initialized = 1;
- return (dll_handle);
-}
-
-idn_resconf_t
-idnGetContext(void) {
- static int initialized = 0;
- static idn_resconf_t ctx = NULL;
-
- if (!initialized) {
- /*
- * Check whether IDN processing should be done
- * in this wrapper DLL.
- */
- idnLogPrintf(idn_log_level_trace,
- "idnGetContext: checking IDN status..\n");
- if (check_idn_processing()) {
- /* Initialize idnkit */
- ctx = idnConvInit();
- idnLogPrintf(idn_log_level_info,
- "Processing context: %08x\n", ctx);
- } else {
- idnLogPrintf(idn_log_level_info,
- "NOT process IDN here\n");
- ctx = NULL;
- }
- initialized = 1;
- }
-
- return (ctx);
-}
-
-static HINSTANCE
-load_original_dll(void) {
- /*
- * Load Original DLL
- */
- char dllpath[MAX_PATH];
- const char *dll_name = winsock_info[winsock_idx].original_name;
- HINSTANCE handle;
-
- /*
- * Get idn wrapper's install directory, where the copies of
- * the original winsock DLLs are saved.
- */
- dllpath[0] = '\0';
- if (idnGetInstallDir(dllpath, sizeof(dllpath)) != TRUE) {
- idnLogPrintf(idn_log_level_fatal,
- "idnWinsockHandle: cannot find idn wrapper's "
- "install directory\n");
- abort();
- return (NULL); /* for lint */
- }
- /* Strip the trailing backslash. */
- if (dllpath[0] != '\0' &&
- dllpath[strlen(dllpath) - 1] == '\\') {
- dllpath[strlen(dllpath) - 1] = '\0';
- }
- /* Is the pathname is insanely long? */
- if (strlen(dllpath) + strlen(dll_name) + 1 + 4 >= sizeof(dllpath)) {
- idnLogPrintf(idn_log_level_fatal,
- "idnWinsockHandle: idn wrapper's install path is "
- "too long to be true\n");
- abort();
- return (NULL); /* for lint */
- }
- /* Append the DLL name to form a full pathname of the DLL. */
- strcat(dllpath, "\\");
- strcat(dllpath, dll_name);
- strcat(dllpath, ".DLL");
-
- idnLogPrintf(idn_log_level_trace,
- "idnWinsockHandle: loading original winsock DLL (%s)\n",
- dllpath);
- if ((handle = LoadLibrary(dllpath)) == NULL) {
- idnLogPrintf(idn_log_level_fatal,
- "idnWinsockHandle: no DLL %-.100s\n", dllpath);
- abort();
- return (NULL); /* font lint */
- }
- return (handle);
-}
-
-static BOOL
-check_idn_processing(void) {
- int where = idnEncodeWhere();
- BOOL here = FALSE;
-
- idnLogPrintf(idn_log_level_trace,
- "idnGetContext: Winsock%s, where=%d\n",
- winsock_info[winsock_idx].version, where);
-
- switch (winsock_idx) {
- case IDN_IDX_WS11:
- switch (where) {
- case IDN_ENCODE_ALWAYS:
- case IDN_ENCODE_ONLY11:
- return (TRUE);
- case IDN_ENCODE_CHECK:
- if (!check_dll(winsock_info[winsock_idx].name)) {
- return (TRUE);
- }
- break;
- }
- break;
- case IDN_IDX_WS20:
- switch (where) {
- case IDN_ENCODE_ALWAYS:
- case IDN_ENCODE_ONLY20:
- case IDN_ENCODE_CHECK:
- return (TRUE);
- break;
- }
- break;
- }
- return (FALSE);
-}
-
-static BOOL
-check_dll(const char *name) {
- HINSTANCE hdll = NULL;
-
-#if 1
- hdll = LoadLibrary(name);
-#else
- /*
- * Just check the existence of the named DLL, without taking
- * the trouble of calling DllMain.
- */
- hdll = LoadLibraryEx(name, NULL, LOAD_LIBRARY_AS_DATAFILE);
-#endif
- if (hdll == NULL) {
- idnLogPrintf(idn_log_level_trace,
- "idnGetContext: DLL %s does not exist\n");
- return (FALSE);
- } else {
- idnLogPrintf(idn_log_level_trace,
- "idnGetContext: DLL %s exists\n");
- FreeLibrary(hdll);
- return (TRUE);
- }
-}
diff --git a/contrib/idn/idnkit-1.0-src/wsock/common/convert.c b/contrib/idn/idnkit-1.0-src/wsock/common/convert.c
deleted file mode 100644
index b2c202e4..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/common/convert.c
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * convert.c - convert domain name
- */
-
-/*
- * Copyright (c) 2000,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <windows.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "wrapcommon.h"
-
-/*
- * prepare/dispose conversion context
- */
-
-void
-idnConvDone(idn_resconf_t ctx)
-{
- if (ctx != NULL) {
- idnLogReset();
- idn_resconf_destroy(ctx);
- }
-}
-
-idn_resconf_t
-idnConvInit(void)
-{
- char encoding[256];
- idn_resconf_t ctx;
- idn_result_t r;
-
- idnLogReset();
-
- idnLogPrintf(idn_log_level_info, "idnkit version: %-.20s\n",
- idn_version_getstring());
-
- /*
- * Initialize.
- */
- if ((r = idn_resconf_initialize()) != idn_success) {
- idnPrintf("idnConvInit: cannot initialize idn library: %s\n",
- idn_result_tostring(r));
- return NULL;
- }
- if ((r = idn_resconf_create(&ctx)) != idn_success) {
- idnPrintf("idnConvInit: cannot create context: %s\n",
- idn_result_tostring(r));
- return NULL;
- }
- /*
- * load configuration file.
- */
- if ((r = idn_resconf_loadfile(ctx, NULL)) != idn_success) {
- idnPrintf("idnConvInit: cannot read configuration file: %s\n",
- idn_result_tostring(r));
- if ((r = idn_resconf_setdefaults(ctx)) != idn_success) {
- idnPrintf("idnConvInit: setting default configuration"
- " failed: %s\n",
- idn_result_tostring(r));
- idnConvDone(ctx);
- return (NULL);
- }
- idnPrintf("idnConvInit: using default configuration\n");
- }
- /*
- * Set local codeset.
- */
- if (idnGetPrgEncoding(encoding, sizeof(encoding)) == TRUE) {
- idnPrintf("Encoding PRG <%-.100s>\n", encoding);
- r = idn_resconf_setlocalconvertername(ctx, encoding,
- IDN_CONVERTER_RTCHECK);
- if (r != idn_success) {
- idnPrintf("idnConvInit: invalid local codeset "
- "\"%-.100s\": %s\n",
- encoding, idn_result_tostring(r));
- idnConvDone(ctx);
- return NULL;
- }
- }
- return ctx;
-}
-
-/*
- * idnConvReq - convert domain name in a DNS request
- *
- * convert local encoding to DNS encoding
- */
-
-BOOL
-idnConvReq(idn_resconf_t ctx, const char FAR *from, char FAR *to, size_t tolen)
-{
- idn_result_t r;
-
- idnLogReset();
-
- idnLogPrintf(idn_log_level_trace, "idnConvReq(from=%-.100s)\n", from);
- if (ctx == NULL) {
- idnLogPrintf(idn_log_level_trace, "idnConvReq: ctx is NULL\n");
- if (strlen(from) >= tolen)
- return FALSE;
- strcpy(to, from);
- return TRUE;
- }
-
- r = idn_res_encodename(ctx, IDN_ENCODE_APP, from, to, tolen);
-
- if (r == idn_success) {
- return TRUE;
- } else {
- return FALSE;
- }
-}
-
-/*
- * idnConvRsp - convert domain name in a DNS response
- *
- * convert DNS encoding to local encoding
- */
-
-BOOL
-idnConvRsp(idn_resconf_t ctx, const char FAR *from, char FAR *to, size_t tolen)
-{
- idnLogReset();
-
- idnLogPrintf(idn_log_level_trace, "idnConvRsp(from=%-.100s)\n", from);
- if (ctx == NULL) {
- if (strlen(from) >= tolen)
- return FALSE;
- strcpy(to, from);
- return TRUE;
- } else if (idn_res_decodename(ctx, IDN_DECODE_APP,
- from, to, tolen) == idn_success) {
- return TRUE;
- } else {
- return FALSE;
- }
-}
diff --git a/contrib/idn/idnkit-1.0-src/wsock/common/dump.c b/contrib/idn/idnkit-1.0-src/wsock/common/dump.c
deleted file mode 100644
index 1f16bd5c..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/common/dump.c
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * dump.c - dump data
- */
-
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <windows.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "wrapcommon.h"
-
-char *
-dumpAddr(const char FAR *addr, int len, char *buff, size_t size) {
- int i;
- char *p;
-
- buff[0] = '\0';
- for (i = 0, p = buff; i < len; i++) {
- char digits[8];
-
- sprintf(digits, "%d", (addr[i] & 0xff));
- if (i + 1 < len) {
- strcat(digits, ".");
- }
- if (strlen(digits) >= size) {
- break;
- }
- strcpy(p, digits);
- p += strlen(digits);
- size -= strlen(digits);
- }
- return (buff);
-}
-
-char *
-dumpHost(const struct hostent FAR *hp, char *buff, size_t size) {
- char *p = buff;
-
- p[0] = '\0';
- if (strlen(hp->h_name) + 1 < size) {
- sprintf(p, "%s ", hp->h_name);
- p += strlen(p);
- size -= strlen(p);
- }
- dumpAddr(hp->h_addr_list[0], hp->h_length, p, size);
- return (buff);
-}
-
-char *
-dumpName(const char *name, char *buff, size_t size) {
- const char *sp;
- char *dp;
-
- for (sp = name, dp = buff; *sp != '\0'; sp++) {
- if (*sp >= 0x21 && *sp <= 0x7e) {
- if (size < 2) {
- break;
- }
- *dp++ = *sp;
- size--;
- } else {
- if (size < 5) {
- break;
- }
- dp[0] = '\\';
- dp[1] = 'x';
- sprintf(dp + 2, "%02x", *sp & 0xff);
- dp += 4;
- size -= 4;
- }
- }
- *dp = '\0';
-
- return (buff);
-}
-
diff --git a/contrib/idn/idnkit-1.0-src/wsock/common/encoding.c b/contrib/idn/idnkit-1.0-src/wsock/common/encoding.c
deleted file mode 100644
index f8ad9e7c..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/common/encoding.c
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * encoding.c - get DNS/Local encodings
- *
- * Software\JPNIC\IDN\Where
- * \LogFile
- * \LogLevel
- * \InstallDir
- * \PerProg\<name>\Where
- * \PerProg\<name>\Encoding
- */
-
-/*
- * Copyright (c) 2000,2001,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <windows.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include "wrapcommon.h"
-
-#define IDN_GLOBAL 1
-#define IDN_PERPROG 2
-#define IDN_CURUSER 4
-
-/*
- * Registry of Encodings
- */
-
-#define IDNKEY_WRAPPER "Software\\JPNIC\\IDN"
-#define IDNKEY_PERPROG "Software\\JPNIC\\IDN\\PerProg"
-#define IDNVAL_WHERE "Where"
-#define IDNVAL_ENCODE "Encoding"
-#define IDNVAL_LOGLVL "LogLevel"
-#define IDNVAL_LOGFILE "LogFile"
-#define IDNVAL_INSDIR "InstallDir"
-
-static int GetRegistry(HKEY top, const char *key, const char *name,
- DWORD type, void *param, DWORD length);
-static char *GetPerProgKey(char *buf, size_t len);
-static int GetFromRegistry(const char *name, int where, DWORD type,
- void *param, DWORD length);
-static int GetIntFromRegistry(const char *name, int defvalue, int where);
-static BOOL GetStringFromRegistry(const char *name, char *result,
- size_t length, int where);
-
-static int
-GetRegistry(HKEY top, const char *key, const char *name, DWORD type,
- void *param, DWORD length)
-{
- LONG stat;
- HKEY hk;
- DWORD realtype;
-
- stat = RegOpenKeyEx(top, key, 0, KEY_READ, &hk);
- if (stat != ERROR_SUCCESS) {
- return 0;
- }
-
- stat = RegQueryValueEx(hk, (LPCTSTR)name, NULL,
- &realtype, (LPBYTE)param, &length);
-
- RegCloseKey(hk);
-
- if (stat != ERROR_SUCCESS || realtype != type)
- return 0;
-
- return 1;
-}
-
-static char *
-GetPerProgKey(char *buf, size_t len)
-{
- char exename[256];
- char prgname[256];
- char *p, *last;
-
- GetModuleFileName(NULL, exename, 256);
-
- for (p = exename, last = NULL; *p != '\0'; p++) {
- if (*p == '/' || *p == '\\') {
- last = p;
- }
- }
- strcpy(prgname, (last == NULL) ? exename : (last + 1));
- if ((p = strrchr(prgname, '.')) != NULL) {
- *p = '\0';
- }
-
- if (strlen(IDNKEY_PERPROG) + 1 + strlen(prgname) >= len) {
- return (NULL);
- }
- sprintf(buf, "%s\\%s", IDNKEY_PERPROG, prgname);
- return buf;
-}
-
-static int
-GetFromRegistry(const char *name, int where, DWORD type,
- void *param, DWORD length)
-{
- if (where & IDN_PERPROG) {
- /*
- * First, try program specific setting.
- */
- char keyname[256];
-
- /*
- * Try HKEY_CURRENT_USER and HKEY_LOCAL_MACHINE.
- */
- if (GetPerProgKey(keyname, sizeof(keyname)) != NULL) {
- if (((where & IDN_CURUSER) &&
- GetRegistry(HKEY_CURRENT_USER, keyname, name,
- type, param, length)) ||
- GetRegistry(HKEY_LOCAL_MACHINE, keyname, name,
- type, param, length)) {
- return (1);
- }
- }
- }
-
- if (where & IDN_GLOBAL) {
- /*
- * Try global setting.
- */
- if (((where & IDN_CURUSER) &&
- GetRegistry(HKEY_CURRENT_USER, IDNKEY_WRAPPER, name,
- type, param, length)) ||
- GetRegistry(HKEY_LOCAL_MACHINE, IDNKEY_WRAPPER, name,
- type, param, length)) {
- return (1);
- }
- }
-
- /*
- * Not found.
- */
- return (0);
-}
-
-static int
-GetIntFromRegistry(const char *name, int defvalue, int where)
-{
- DWORD param;
-
- if (GetFromRegistry(name, where, REG_DWORD, &param, sizeof(param))) {
- return ((int)param);
- }
- return (defvalue);
-}
-
-static BOOL
-GetStringFromRegistry(const char *name, char *result, size_t length, int where)
-{
- if (GetFromRegistry(name, where, REG_SZ, result, (DWORD)length)) {
- return (TRUE);
- }
- return (FALSE);
-}
-
-/*
- * idnEncodeWhere - which module should convert domain name
- */
-int
-idnEncodeWhere(void)
-{
- int v = GetIntFromRegistry(IDNVAL_WHERE, IDN_ENCODE_ALWAYS,
- IDN_GLOBAL|IDN_PERPROG|IDN_CURUSER);
-
- idnLogPrintf(idn_log_level_trace, "idnEncodeWhere: %d\n", v);
- return (v);
-}
-
-/*
- * idnGetLogFile - refer to log file
- */
-BOOL
-idnGetLogFile(char *file, size_t len)
-{
- BOOL v = GetStringFromRegistry(IDNVAL_LOGFILE, file, len,
- IDN_GLOBAL|IDN_CURUSER);
-
- idnLogPrintf(idn_log_level_trace, "idnGetLogFile: %-.100s\n",
- (v == TRUE) ? file : "<none>");
- return (v);
-}
-
-/*
- * idnGetPrgEncoding - refer to Program's Local Encoding
- *
- * use program name as registry key
- */
-BOOL
-idnGetPrgEncoding(char *enc, size_t len)
-{
- if (GetStringFromRegistry(IDNVAL_ENCODE, enc, len,
- IDN_PERPROG|IDN_CURUSER) != TRUE ||
- enc[0] == '\0') {
- sprintf(enc, "CP%d", GetACP());
- }
- idnLogPrintf(idn_log_level_trace,
- "idnGetPrgEncoding: %-.30s\n", enc);
- return (TRUE);
-}
-
-/*
- * idnGetLogLevel
- */
-int
-idnGetLogLevel(void)
-{
- int v = GetIntFromRegistry(IDNVAL_LOGLVL, 0,
- IDN_GLOBAL|IDN_CURUSER);
-
- idnLogPrintf(idn_log_level_trace, "idnGetLogLevel: %d\n", v);
- return (v);
-}
-
-/*
- * idnGetInstallDir - get idn wrapper install directory
- */
-BOOL
-idnGetInstallDir(char *dir, size_t len)
-{
- /* No need to look at HKEY_CURRENT_USER */
- BOOL v = GetStringFromRegistry(IDNVAL_INSDIR, dir, len, IDN_GLOBAL);
-
- idnLogPrintf(idn_log_level_trace, "idnGetInstallDir: %-.100s\n",
- (v == TRUE) ? dir : "<none>");
- return (v);
-}
diff --git a/contrib/idn/idnkit-1.0-src/wsock/common/hook.c b/contrib/idn/idnkit-1.0-src/wsock/common/hook.c
deleted file mode 100644
index b520f10e..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/common/hook.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * hook.c - Hooking Asynchronous Completion
- */
-
-/*
- * Copyright (c) 2000,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <windows.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "wrapcommon.h"
-
-/*
- * Hook Managements
- */
-
-static HHOOK hookHandle = NULL ;
-
-typedef struct _HOOK *HOOKPTR;
-
-typedef struct _HOOK {
- HOOKPTR prev;
- HOOKPTR next;
- idn_resconf_t ctx;
- HWND hWnd;
- u_int wMsg;
- char FAR *pBuf;
-} HOOKREC;
-
-static HOOKREC hookList = { 0 } ;
-
-static void
-hookListInit(void) {
- if (hookList.prev == NULL || hookList.next == NULL) {
- hookList.prev = &hookList;
- hookList.next = &hookList;
- }
-}
-
-static HOOKPTR
-hookListSearch(HWND hWnd, u_int wMsg) {
- HOOKPTR hp;
-
- for (hp = hookList.next ; hp != &hookList ; hp = hp->next) {
- if (hp->hWnd == hWnd && hp->wMsg == wMsg) {
- return (hp);
- }
- }
- return (NULL);
-}
-
-static BOOL
-hookListAppend(HWND hWnd, u_int wMsg, char FAR *buf, idn_resconf_t ctx) {
- HOOKPTR hp, prev, next;
-
- if ((hp = (HOOKPTR)malloc(sizeof(HOOKREC))) == NULL) {
- idnPrintf("cannot create hook record\n");
- return (FALSE);
- }
- memset(hp, 0, sizeof(*hp));
-
- hp->ctx = ctx;
- hp->hWnd = hWnd;
- hp->wMsg = wMsg;
- hp->pBuf = buf;
-
- prev = hookList.prev;
- next = prev->next;
- prev->next = hp;
- next->prev = hp;
- hp->next = next;
- hp->prev = prev;
-
- return (TRUE);
-}
-
-static void
-hookListDelete(HOOKPTR hp)
-{
- HOOKPTR prev, next;
-
- prev = hp->prev;
- next = hp->next;
- prev->next = next;
- next->prev = prev;
-
- free(hp);
-}
-
-static void
-hookListDone(void)
-{
- HOOKPTR hp;
-
- while ((hp = hookList.next) != &hookList) {
- hookListDelete(hp);
- }
-}
-
-/*
- * idnHookInit - initialize Hook Management
- */
-void
-idnHookInit(void) {
- hookListInit();
-}
-
-/*
- * idnHookDone - finalize Hook Management
- */
-void
-idnHookDone(void) {
- if (hookHandle != NULL) {
- UnhookWindowsHookEx(hookHandle);
- hookHandle = NULL;
- }
- hookListDone();
-}
-
-/*
- * hookProc - hookprocedure, used as WH_GETMESSAGE hook
- */
-LRESULT CALLBACK
-hookProc(int nCode, WPARAM wParam, LPARAM lParam) {
- MSG *pMsg;
- HOOKPTR pHook;
- struct hostent *pHost;
- char nbuff[256];
- char hbuff[256];
-
- if (nCode < 0) {
- return (CallNextHookEx(hookHandle, nCode, wParam, lParam));
- } else if (nCode != HC_ACTION) {
- return (0);
- }
- if ((pMsg = (MSG *)lParam) == NULL) {
- return (0);
- }
- if ((pHook = hookListSearch(pMsg->hwnd, pMsg->message)) == NULL) {
- return (0);
- }
-
- /*
- * Convert the Host Name
- */
- pHost = (struct hostent *)pHook->pBuf;
- idnPrintf("AsyncComplete Resulting <%s>\n",
- dumpName(pHost->h_name, hbuff, sizeof(hbuff)));
- if (idnConvRsp(pHook->ctx, pHost->h_name,
- nbuff, sizeof(nbuff)) == TRUE) {
- idnPrintf("AsyncComplete Converted <%s>\n",
- dumpName(nbuff, hbuff, sizeof(hbuff)));
- strcpy(pHost->h_name, nbuff);
- }
-
- /*
- * Delete target
- */
- hookListDelete(pHook);
-
- return (0);
-}
-
-/*
- * idnHook - hook async. completion message
- */
-BOOL
-idnHook(HWND hWnd, u_int wMsg, char FAR *buf, idn_resconf_t ctx)
-{
- if (hookHandle == NULL) {
- hookHandle = SetWindowsHookEx(WH_GETMESSAGE, hookProc,
- NULL, GetCurrentThreadId());
- }
- if (hookHandle == NULL) {
- idnPrintf("idnHook: cannot set hook\n");
- return (FALSE);
- }
- if (hookListAppend(hWnd, wMsg, buf, ctx) != TRUE) {
- return (FALSE);
- }
- return (TRUE);
-}
diff --git a/contrib/idn/idnkit-1.0-src/wsock/common/make.wnt b/contrib/idn/idnkit-1.0-src/wsock/common/make.wnt
deleted file mode 100644
index 4dde4dd6..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/common/make.wnt
+++ /dev/null
@@ -1,102 +0,0 @@
-#
-# Makefile for WinSock Wrapper (common part)
-#
-
-# Copyright (c) 2000 Japan Network Information Center. All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-!include <win32.mak>
-
-SYSLIBS = $(libcdll) kernel32.lib advapi32.lib user32.lib
-
-#
-# Files to use
-#
-
-HDRS = wrapcommon.h
-SRCS = printf.c dump.c checkdll.c encoding.c convert.c hook.c
-OBJS = printf.obj dump.obj checkdll.obj encoding.obj convert.obj hook.obj
-LIBS = ..\..\lib\idnkit.lib ..\..\win\iconv.lib
-
-cflags = $(cflags) -I..\..\include
-
-#
-# Targets to Build
-#
-
-TARGETS = wrapcommon.lib
-
-all : $(TARGETS)
-
-wrapcommon.lib : $(OBJS)
- -del wrapcommon.lib
- lib /out:wrapcommon.lib $(OBJS)
-
-install :
-
-clean : force
- -del *.obj
- -del *.lib
- -del *.exp
-
-#
-# Dependencies
-#
-
-printf.obj : printf.c $(HDRS)
- $(cc) $(cflags) $(cvarsdll) -DDEBUG $*.c
-
-dump.obj : dump.c $(HDRS)
- $(cc) $(cflags) $(cvarsdll) -DDEBUG $*.c
-
-checkdll.obj : checkdll.c $(HDRS)
- $(cc) $(cflags) $(cvarsdll) -DDEBUG $*.c
-
-encoding.obj : encoding.c $(HDRS)
- $(cc) $(cflags) $(cvarsdll) -DDEBUG $*.c
-
-convert.obj : convert.c $(HDRS)
- $(cc) $(cflags) $(cvarsdll) -DDEBUG $*.c
-
-hook.obj : hook.c $(HDRS)
- $(cc) $(cflags) $(cvarsdll) -DDEBUG $*.c
-
-force :
-
diff --git a/contrib/idn/idnkit-1.0-src/wsock/common/printf.c b/contrib/idn/idnkit-1.0-src/wsock/common/printf.c
deleted file mode 100644
index 7d6d2e4a..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/common/printf.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * printf.c - printf like debug print function
- */
-
-/*
- * Copyright (c) 2000,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <windows.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <process.h>
-
-#include "wrapcommon.h"
-
-/*
- * Debug Tracer for DLL
- */
-
-static char logfile_name[256];
-static int log_level = -1;
-static char log_header[30];
-
-void
-idnPrintf(char *fmt, ...) {
- va_list arg_ptr;
- FILE *fp;
- char msg[512];
-
- if (log_level < 0 || logfile_name[0] == '\0')
- return;
-
- va_start(arg_ptr, fmt);
- vsprintf(msg, fmt, arg_ptr);
- va_end(arg_ptr);
-
- if ((fp = fopen(logfile_name, "a")) != NULL) {
- fputs(log_header, fp);
- fputs(msg, fp);
- fclose(fp);
- }
-}
-
-void
-idnLogPrintf(int level, char *fmt, ...) {
- va_list arg_ptr;
- FILE *fp;
- char msg[512];
-
- if (level > log_level || logfile_name[0] == '\0')
- return;
-
- va_start(arg_ptr, fmt);
- vsprintf(msg, fmt, arg_ptr);
- va_end(arg_ptr);
-
- if ((fp = fopen(logfile_name, "a")) != NULL) {
- fputs(log_header, fp);
- fputs(msg, fp);
- fclose(fp);
- }
-}
-
-static void
-log_proc(int level, const char *msg) {
- FILE *fp;
-
- if (log_level < 0 || logfile_name[0] == '\0')
- return;
-
- if ((fp = fopen(logfile_name, "a")) != NULL) {
- fputs(msg, fp);
- fclose(fp);
- }
-}
-
-void
-idnLogInit(const char *title) {
- log_level = idnGetLogLevel();
- /* If log file is not stored in the registry, don't do logging. */
- if (idnGetLogFile(logfile_name, sizeof(logfile_name)) == FALSE) {
- log_level = -1;
- }
- sprintf(log_header, "%08x %-.16s: ", getpid(), title);
- idn_log_setproc(log_proc);
- idn_log_setlevel(log_level < 0 ? 0 : log_level);
-}
-
-void
-idnLogReset(void) {
- idn_log_setproc(log_proc);
-}
-
-void
-idnLogFinish(void) {
- idn_log_setproc(NULL);
- /* idn_log_setlevel(0); */
-}
diff --git a/contrib/idn/idnkit-1.0-src/wsock/common/wrapcommon.h b/contrib/idn/idnkit-1.0-src/wsock/common/wrapcommon.h
deleted file mode 100644
index c186a331..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/common/wrapcommon.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * wrapcommon.h
- */
-
-/*
- * Copyright (c) 2000,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef _WRAPCOMMON_H
-#define _WRAPCOMMON_H
-
-#include <idn/res.h>
-#include <idn/log.h>
-#include <idn/version.h>
-
-#define WRAPPER_EXPORT extern __declspec(dllexport)
-
-extern void idnPrintf(char *fmt, ...);
-extern void idnLogPrintf(int level, char *fmt, ...);
-extern void idnLogInit(const char *title);
-extern void idnLogReset(void);
-extern void idnLogFinish(void);
-
-extern char *dumpAddr(const char FAR *addr, int len, char *buff, size_t size);
-extern char *dumpHost(const struct hostent FAR *hp, char *buff, size_t size);
-extern char *dumpName(const char *name, char *buff, size_t size);
-
-extern int idnEncodeWhere(void);
-
-#define IDN_ENCODE_ALWAYS 0
-#define IDN_ENCODE_CHECK 1
-#define IDN_ENCODE_ONLY11 2
-#define IDN_ENCODE_ONLY20 3
-
-extern BOOL idnGetPrgEncoding(char *enc, size_t len);
-extern BOOL idnGetLogFile(char *file, size_t len);
-
-extern int idnGetLogLevel(void); /* 0 : fatal */
- /* 1 : error */
- /* 2 : warning */
- /* 3 : info */
- /* 4 : trace */
- /* 5 : dump */
-extern int idnGetInstallDir(char *dir, size_t len);
-
-extern idn_resconf_t idnConvInit(void);
-extern void idnConvDone(idn_resconf_t ctx);
-
-extern BOOL idnWinsockVersion(const char *version);
-extern HINSTANCE idnWinsockHandle(void);
-extern idn_resconf_t idnGetContext(void);
-
-/*
- * Converting Request/Response
- */
-
-extern BOOL idnConvReq(idn_resconf_t ctx, const char FAR *from,
- char FAR *to, size_t tolen);
-extern BOOL idnConvRsp(idn_resconf_t ctx, const char FAR *from,
- char FAR *to, size_t tolen);
-
-/*
- * Hook for Asynchronouse Query
- */
-
-extern void idnHookInit(void);
-extern void idnHookDone(void);
-extern BOOL idnHook(HWND hWnd, u_int wMsg, char FAR *buf, idn_resconf_t ctx);
-
-#endif /* _WRAPCOMMON_H */
diff --git a/contrib/idn/idnkit-1.0-src/wsock/config/idnconf.tcl b/contrib/idn/idnkit-1.0-src/wsock/config/idnconf.tcl
deleted file mode 100644
index a140ed20..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/config/idnconf.tcl
+++ /dev/null
@@ -1,1123 +0,0 @@
-# $Id: idnconf.tcl,v 1.1 2003/06/04 00:27:42 marka Exp $
-#
-# idnconf.tcl - configure idn wrapper
-#
-
-#############################################################################
-# Copyright (c) 2000,2002 Japan Network Information Center.
-# All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-#############################################################################
-
-global configFile configBack
-global registryKey registryEnc registryDef
-global filesCpy filesRen filesDel
-
-# idnkit version
-set version "1.0"
-
-set configFile "idnconf.lst" ;# list of wrapped program
-set configBack "idnconf.bak" ;# backup of previous data
-
-set serverKey "HKEY_LOCAL_MACHINE\\Software\\JPNIC\\IDN"
-set serverLogLevel LogLevel
-set serverLogLevelDef -1
-set serverLogLevelNone -1
-set serverLogFile LogFile
-set serverLogFileDef {C:\idn_wrapper.log}
-set serverConfFile ConfFile
-
-set perprogKey "HKEY_LOCAL_MACHINE\\Software\\JPNIC\\IDN\\PerProg\\"
-set perprogEnc Encoding
-set perprogDef Default
-
-set logFileNameDef idn_wrapper.log
-set confFileNameDef idn.conf
-
-set filesCpy11 { "wsock32.dll" }
-set filesCpy20 { "wsock32.dll" "ws2_32.dll" }
-set filesDel11 { "wsock32.dll" }
-set filesDel20 { "wsock32.dll" "ws2_32.dll" }
-
-set local_dll 0
-
-########################################################################
-#
-# OS version check
-#
-
-proc get_os_version {} {
- global os_version tcl_platform
-
- if {[llength [info globals os_version]] > 0} {
- return $os_version
- }
-
- switch -- $tcl_platform(os) {
- "Windows 95" {
- switch -- $tcl_platform(osVersion) {
- 4.0 {
- set os_version {Windows 95}
- }
- 4.10 {
- set os_version {Windows 98}
- }
- 4.90 {
- set os_version {Windows Me}
- }
- }
- }
- "Windows NT" {
- switch -- $tcl_platform(osVersion) {
- 3.51 -
- 4.0 {
- set os_version {Windows NT}
- }
- 5.0 {
- set os_version {Windows 2000}
- }
- default {
- # XP or .NET
- set os_version {Windows XP}
- }
- }
- }
- "Win32s" {
- error "idn wrapper does not support Windows 3.1"
- }
- default {
- set os_version "Unknown"
- }
- }
- set os_version
-}
-
-proc support_dll_redirection {} {
- global dll_redirection
-
- if {[llength [info globals dll_redirection]] > 0} {
- return $dll_redirection
- }
-
- switch -- [get_os_version] {
- {Windows 95} -
- {Windows NT} {
- # cannot force local DLL reference by .local file.
- set dll_redirection 0
- }
- default {
- set dll_redirection 1
- }
- }
- set dll_redirection
-}
-
-########################################################################
-#
-# handling pathname
-#
-
-proc getExeName { prg } {
- set elem [file split $prg]
- set leng [expr {[llength $elem] - 1}]
- set name [lindex $elem $leng]
- set exe [file rootname $name]
- return $exe
-}
-
-proc getDirName { prg } {
- file dirname $prg
-}
-
-proc getSystemDir {} {
- global env
- switch -- [get_os_version] {
- "Windows 95" -
- "Windows 98" -
- "Windows Me" {
- set sysDir $env(windir)/system
- }
- default {
- set sysDir $env(SystemRoot)/system32
- }
- }
- return $sysDir
-}
-
-########################################################################
-#
-# loadList / saveList
-#
-# loadList - load list of wrapped executables from $configFile
-# saveList - save list of wrapped executables into $configFile
-#
-
-proc loadList {} {
-
- global configFile configBack
-
- if { [file exists $configFile] } {
- file copy -force $configFile $configBack
- }
-
- set aList {}
- set fd [open $configFile {CREAT RDONLY}]
- while { ! [eof $fd]} {
- set line [gets $fd]
- if { [string length $line] > 0} {
- lappend aList "$line"
- }
- }
- close $fd
- return $aList
-}
-
-proc saveList { aList } {
- global configFile
- file delete -force $configFile
- set fd [open $configFile {CREAT WRONLY}]
- foreach e $aList {
- puts $fd $e
- }
- close $fd
-}
-
-########################################################################
-#
-# putList / getList - set/get list to/from listbox
-#
-
-proc putList { lb aList } {
- foreach e $aList {
- $lb insert end $e
- }
-}
-
-proc getList { lb } {
- $lb get 0 end
-}
-
-########################################################################
-#
-# checkList / appendList / deleteList - check / append / delete program from/to listbox
-#
-
-proc checkList { lb prg } {
- set cnt 0
- set lst [getList $lb]
-
- foreach n $lst {
- if { [string compare $prg $n] == 0 } {
- incr cnt
- }
- }
- return $cnt
-}
-
-proc appendList { lb prg } {
-
- if { [checkList $lb $prg] == 0 } {
- $lb insert end $prg
- }
-}
-
-proc deleteList { lb prg } {
- set cnt 0
- set lst [getList $lb]
-
- foreach n $lst {
- if { [string compare $n $prg] == 0 } {
- $lb delete $cnt
- }
- incr cnt
- }
-}
-
-########################################################################
-#
-# registry operations
-#
-
-proc regGetEncode { prg } {
-
- global perprogKey perprogEnc perprogDef
-
- if { [string compare $prg "" ] == 0 } {
- return $perprogDef
- }
-
- if {![isWindows]} {
- return $perprogDef
- }
- package require registry 1.0
-
- set name [getExeName $prg]
- set key $perprogKey$name
-
- if { [catch {set enc [registry get $key $perprogEnc]} err] } {
- return $perprogDef
- }
- if { [string compare $enc ""] == 0 } {
- return $perprogDef
- }
- return $enc
-}
-
-proc regSetEncode { prg enc } {
-
- global perprogKey perprogEnc perprogDef
-
- if {![isWindows]} {
- return 1
- }
-
- package require registry 1.0
-
- set name [getExeName $prg]
- set key $perprogKey$name
-
- if { [string compare $enc $perprogDef] == 0 } {
- set enc ""
- }
- if { [catch {registry set $key $perprogEnc $enc sz} ] } {
- return 2
- }
- return 0
-}
-
-proc regGetLogLevel {} {
- global serverKey serverLogLevel serverLogLevelDef
- regGetValue $serverKey $serverLogLevel $serverLogLevelDef
-}
-
-proc regSetLogLevel {level} {
- global serverKey serverLogLevel
- regSetValue $serverKey $serverLogLevel $level dword
-}
-
-proc regGetLogFile {} {
- global serverKey serverLogFile serverLogFileDef
- set file [regGetValue $serverKey $serverLogFile $serverLogFileDef]
- if {[catch {file attributes $file -longname} lfile]} {
- # Maybe $file doesn't exist (yet). Get the longname of
- # directory portion.
- set dir [file dirname $file]
- if {[catch {file attributes $dir -longname} ldir]} {
- set ldir $dir
- }
- set lfile [file join $ldir [file tail $file]]
- }
- file nativename $lfile
-}
-
-proc regSetLogFile {file} {
- global serverKey serverLogFile
- regSetValue $serverKey $serverLogFile [file nativename $file]
-}
-
-proc regGetConfFile {} {
- global serverKey serverConfFile
- set file [regGetValue $serverKey $serverConfFile {}]
- if {[string compare $file {}] == 0} {
- return {}
- }
- if {[catch {file attributes $file -longname} lfile]} {
- # Maybe $file doesn't exist (yet). Get the longname of
- # directory portion.
- set dir [file dirname $file]
- if {[catch {file attributes $dir -longname} ldir]} {
- set ldir $dir
- }
- set lfile [file join $ldir [file tail $file]]
- }
- file nativename $lfile
-}
-
-proc regSetConfFile {file} {
- global serverKey serverConfFile
- regSetValue $serverKey $serverConfFile [file nativename $file]
-}
-
-proc regGetWhere {} {
- global serverKey
- regGetValue $serverKey Where 0
-}
-
-proc regSetWhere {where} {
- global serverKey
- regSetValue $serverKey Where $where dword
-}
-
-proc regGetValue {key name default} {
- if {![isWindows]} {
- puts "--regGetValue $key $name"
- return $default
- }
- package require registry 1.0
-
- if {[catch {registry get $key $name} value]} {
- return $default
- }
- if {[string compare $value {}] == 0} {
- return $default
- }
- return $value
-}
-
-proc regSetValue {key name value {type sz}} {
- if {![isWindows]} {
- puts "--regSetValue $key $name $value"
- return 1
- }
-
- package require registry 1.0
-
- if {[catch {registry set $key $name $value $type}]} {
- return 2
- }
- return 0
-}
-
-########################################################################
-#
-# install / uninstall DLL s
-#
-
-proc fileInstall { prg } {
-
- global env
- global filesCpy11 filesCpy20
-
- if {![isWindows]} {
- return 1
- }
-
- switch -- [get_os_version] {
- "Windows 95" -
- "Windows 98" -
- "Windows Me" {
- set winDir $env(windir)
- set sysDir $winDir/system
- set filesCpy $filesCpy11
- }
- default {
- set winDir $env(SystemRoot)
- set sysDir $winDir/system32
- set filesCpy $filesCpy20
- }
- }
-
- set toDir [getDirName $prg ]
-
- foreach n $filesCpy {
- file copy -force $n $toDir
- }
- return 0
-}
-
-proc fileRemove { prg } {
-
- global filesDel11 filesDel20
-
- if {![isWindows]} {
- return 1
- }
-
- switch -- [get_os_version] {
- "Windows 95" {
- set filesDel $filesDel11
- }
- "Windows 98" -
- "Windows Me" {
- set filesDel $filesDel20
- }
- default {
- set filesDel $filesDel20
- }
- }
-
- set fromDir [getDirName $prg ]
-
- foreach n $filesDel {
- file delete -force $fromDir/$n
- }
- return 0
-}
-
-########################################################################
-#
-# Wrap/Unwrap program
-#
-
-proc execWrap { pw lb dlg prg enc } {
-
- set prgName [$prg get]
- set encName [$enc get]
-
- # Make sure the program name is not empty
- if {[string compare $prgName {}] == 0} {
- confErrorDialog $dlg "Program must be specified.\nClick \"Browse..\" button for browsing."
- return
- }
-
- # It is dangerous to wrap programs in the system directory.
- set prgdir [file nativename [getDirName $prgName]]
- set sysdir [file nativename [getSystemDir]]
- if {[string compare -nocase $prgdir $sysdir] == 0} {
- tk_messageBox -icon error -type ok -title "Directory Error" \
- -parent $dlg \
- -message "Cannot wrap applications in the system directory.\nPlease copy the EXE file to elsewhere and wrap the copied one."
- destroy $dlg
- return 1
- }
-
- # Okay, copy the wrapper DLLs.
- if { [fileInstall $prgName] } {
- tk_messageBox -icon warning -type ok \
- -title "Warning" \
- -message "Cannot install DLLs" \
- -parent $dlg
- destroy $dlg
- return 1
- }
- if { [regSetEncode $prgName $encName] } {
- tk_messageBox -icon warning -type ok \
- -title "Warning" \
- -message "Cannot set encoding" \
- -parent $dlg
- fileRemove $prgName
- destroy $dlg
- return 2
- }
-
- # if local flag is on, create $prgName.local.
- global local_dll
- if {$local_dll} {
- create_dot_local $prgName $dlg
- } else {
- remove_dot_local $prgName $dlg
- }
-
- if { [checkList $lb $prgName] == 0 } {
- appendList $lb $prgName
- }
- saveList [getList $lb]
- destroy $dlg
-}
-
-proc execUnwrap { pw lb dlg prg } {
-
- set prgName [$prg get]
-
- if {[support_dll_redirection] && [file exists $prgName.local]} {
- set ans [tk_messageBox -icon question -type yesno \
- -title "Confirmation" \
- -message "Also remove $prgName.local file?" \
- -parent $dlg]
- if {[string compare $ans yes] == 0} {
- remove_dot_local $prgName $dlg
- }
- }
-
- if { [checkList $lb $prgName] == 1 } {
- fileRemove $prgName
- }
- deleteList $lb $prgName
- saveList [getList $lb]
- destroy $dlg
-}
-
-proc create_dot_local {path {parent .}} {
- set dotlocal $path.local
- if {[file exists $dotlocal]} {
- return 0
- }
- if {[catch {open $dotlocal w} fh]} {
- tk_messageBox -icon warning -type ok -title "Warning" \
- -message "Cannot create $dotlocal" -parent $parent
- return -1
- }
- close $fh
- return 0
-}
-
-proc remove_dot_local {path {parent .}} {
- set dotlocal $path.local
- if {[file exists $dotlocal] && [catch {file delete $dotlocal}]} {
- tk_messageBox -icon warning -type ok -title "Warning" \
- -message "Cannot remove $dotlocal" -parent $parent
- return -1
- }
- return 0
-}
-
-########################################################################
-#
-# dialog for Wrap / Unwrap
-#
-
-proc syncEncode { v i op } {
- global prgName encName
- set enc [regGetEncode $prgName]
- if { [string compare $encName $enc] != 0 } {
- set encName $enc
- }
-}
-
-proc confBrowse { p ePrg eEnc } {
-
- set types {
- { "Executable" .exe }
- }
-
- set file [tk_getOpenFile -filetypes $types -parent $p ]
-
- if { [string compare $file ""] == 0 } {
- return
- }
- set enc [regGetEncode $file]
- $ePrg delete 0 end
- $ePrg insert 0 $file
-}
-
-proc confWrap { pw lb } {
-
- global prgName encName local_dll
-
- set idx [$lb curselection]
- if { [llength $idx] == 1 } {
- set prg [$lb get $idx]
- set local_dll [file exists $prg.local]
- } else {
- set prg ""
- }
-
- set top .wrap
- toplevel $top
- grab $top
- wm title $top "idn wrapper - Wrap Executable"
-
- frame $top.f1 -bd 1 -relief raised
- frame $top.f2 -bd 1 -relief raised
- pack $top.f1 -side top -fill x -expand on
- pack $top.f2 -side top -fill x -expand on
-
- frame $top.f1.f
- pack $top.f1.f -fill both -expand on -padx 4 -pady 4
-
- set w $top.f1.f
- label $w.prgtitle -text "Program:"
- label $w.enctitle -text "Encoding:"
-
- entry $w.prgname -relief sunken -width 56 -textvariable prgName
- entry $w.encname -relief sunken -width 8 -textvariable encName
- set w_prgname $w.prgname
- set w_encname $w.encname
- button $w.browse -text "Browse.." \
- -command [list confBrowse $w $w_prgname $w_encname]
-
- frame $w.rbf
- radiobutton $w.rbf.encdef -text "Default" -variable encName \
- -value "Default"
- radiobutton $w.rbf.encutf -text "UTF-8" -variable encName \
- -value "UTF-8"
- pack $w.rbf.encdef $w.rbf.encutf -side left -padx 4
-
- grid $w.prgtitle -row 0 -column 0 -sticky e
- grid $w.enctitle -row 1 -column 0 -sticky e
- grid $w.prgname -row 0 -column 1 -sticky we -pady 4 -padx 2 -columnspan 2
- grid $w.browse -row 0 -column 3 -sticky w -pady 4 -padx 4
- grid $w.encname -row 1 -column 1 -sticky we -pady 4 -padx 2
- grid $w.rbf -row 1 -column 2 -sticky w -padx 2
- if {[support_dll_redirection]} {
- checkbutton $w.local -text "Force local DLL reference" \
- -variable local_dll
- grid $w.local -row 2 -column 1 -sticky w -padx 4 -pady 4
- }
- grid columnconfig $w 1 -weight 1 -minsize 20
- grid columnconfig $w 2 -weight 2 -minsize 20
-
- trace variable prgName w syncEncode
-
- $w.prgname delete 0 end
- $w.prgname insert 0 $prg
-
- focus $w.prgname
-
- set w $top.f2
- button $w.wrap -text "Wrap" \
- -command [list execWrap $pw $lb $top $w_prgname $w_encname]
- button $w.cancel -text "Cancel" \
- -command [list destroy $top]
- pack $w.cancel -side right -fill y -padx 12 -pady 4
- pack $w.wrap -side right -fill y -padx 12 -pady 4
-
- tkwait window $top
-}
-
-proc confUnwrap { pw lb } {
-
- set idx [$lb curselection]
- if { [llength $idx] != 1 } {
- tk_messageBox -icon warning -type ok \
- -title "Warning" \
- -message "first, select unwrapping executable" \
- -parent $pw
- return 0
- }
- set prg [$lb get $idx]
- if { [string length $prg] == 0 } {
- tk_messageBox -icon warning -type ok \
- -title "Warning" \
- -message "first, select unwrapping executable" \
- -parent $pw
- return 0
- }
-
- set top .unwrap
- toplevel $top
- grab $top
- wm title $top "idn wrapper - Unwrap Executable"
-
- frame $top.f1 -bd 1 -relief raised
- frame $top.f2 -bd 1 -relief raised
- pack $top.f2 -side bottom -fill x
- pack $top.f1 -side bottom -fill x -expand on
-
- frame $top.f1.f
- pack $top.f1.f -padx 4 -pady 4 -fill both -expand on
- set w $top.f1.f
- label $w.prgtitle -text "Program:"
- entry $w.prgname -relief sunken -width 56 -textvariable prgName
- $w.prgname delete 0 end
- $w.prgname insert 0 $prg
-
- set w_prgname $w.prgname
-
- grid $w.prgtitle -row 0 -column 0 -sticky w
- grid $w.prgname -row 0 -column 1 -sticky we -pady 4
- grid columnconfig $w 1 -weight 1 -minsize 20
-
- set w $top.f2
- button $w.wrap -text "Unwrap" \
- -command [list execUnwrap $pw $lb $top $w_prgname]
- button $w.cancel -text "Cancel" \
- -command [list destroy $top]
-
- pack $w.cancel -side right -padx 12 -pady 6
- pack $w.wrap -side right -padx 12 -pady 6
-
- focus $w.wrap
- tkwait window $top
-}
-
-proc unwrapAll {pw lb} {
- set ans [tk_messageBox -type yesno -default no -icon question \
- -parent $pw -title {idn wrapper Configuration} \
- -message {Really unwrap all programs?}]
- if {[string compare $ans yes] != 0} {
- return
- }
-
- foreach prog [$lb get 0 end] {
- fileRemove $prog
- }
-
- if {[support_dll_redirection]} {
- set delete_type yes
- foreach prog [$lb get 0 end] {
- if {![file exists $prog.local]} continue
- switch -- $delete_type {
- yes -
- no {
- set delete_type [dotLocalDialog $prog $delete_type]
- }
- }
- switch -- $delete_type {
- yes -
- yesall {
- remove_dot_local $prog $pw
- }
- }
- }
- }
-
- $lb delete 0 end
- saveList {}
-}
-
-proc rewrapAll {pw lb} {
- set ans [tk_messageBox -type yesno -default yes -icon question \
- -parent $pw -title {idn wrapper Configuration} \
- -message {Really rewrap all programs?}]
- if {[string compare $ans yes] != 0} {
- return
- }
- foreach prog [$lb get 0 end] {
- fileInstall $prog
- }
-}
-
-proc confLog {pw} {
- global _logLevel _logFile
-
- set top .log
- catch {destroy $top}
- toplevel $top
- wm title $top "idn wrapper - Log Configuration"
- # wm transient $top $pw
-
- set _logLevel [regGetLogLevel]
- set _logFile [regGetLogFile]
-
- frame $top.f1 -bd 1 -relief raised
- frame $top.f2 -bd 1 -relief raised
- pack $top.f2 -side bottom -fill x
- pack $top.f1 -side top -fill both -expand on
-
- set w $top.f1
- label $w.lv_l -text "Log Level:"
- frame $w.lv_v
- global serverLogLevelNone
- set i 0
- foreach {lvl text} [list $serverLogLevelNone None \
- 0 Fatal 1 Error 2 Warning 3 Info 4 Trace] {
- radiobutton $w.lv_v.btn$i -text $text -value $lvl -variable _logLevel
- pack $w.lv_v.btn$i -side left -padx 3
- incr i
- }
- label $w.ld_l -text "Log File:"
- frame $w.ld_v
- entry $w.ld_v.e -width 40 -textvariable _logFile
- focus $w.ld_v.e
- button $w.ld_v.b -text "Browse.." -command [list selectLog $top $w.ld_v.e]
- pack $w.ld_v.b -side right -fill y -padx 6
- pack $w.ld_v.e -side left -fill both -expand yes
- #label $w.lo_l -text "Log Operation:"
- frame $w.lo_v
- button $w.lo_v.show -text "View" -command [list showLog $top]
- button $w.lo_v.delete -text "Delete" -command [list deleteLog $top]
- pack $w.lo_v.show $w.lo_v.delete -side left -padx 4
-
- grid $w.lv_l -row 0 -column 0 -sticky e -padx 4
- grid $w.ld_l -row 1 -column 0 -sticky e -padx 4
- #grid $w.lo_l -row 2 -column 0 -sticky e -padx 4
- grid $w.lv_v -row 0 -column 1 -sticky w -padx 4 -pady 4
- grid $w.ld_v -row 1 -column 1 -sticky we -padx 4 -pady 4
- grid $w.lo_v -row 2 -column 1 -sticky w -padx 4 -pady 4
-
- set w $top.f2
- button $w.ok -text "OK" -command [list configureLog $top]
- button $w.cancel -text "Cancel" -command [list destroy $top]
- pack $w.cancel -side right -padx 12 -pady 6
- pack $w.ok -side right -padx 12 -pady 6
-}
-
-proc configureLog {top} {
- global _logLevel _logFile
-
- if {$_logLevel != [regGetLogLevel] ||
- [string compare $_logFile [regGetLogFile]] != 0} {
- set dir [file dirname $_logFile]
- if {[string compare $dir {}]} {
- if {![file exists $dir]} {
- confErrorDialog $top "Directory $dir doesn't exist"
- return
- } elseif {![file isdirectory $dir]} {
- confErrorDialog $top "$dir is not a directory"
- return
- }
- }
- regSetLogLevel $_logLevel
- regSetLogFile $_logFile
- tk_messageBox -type ok -default ok -icon info -parent $top \
- -title "idn wrapper Configuration" \
- -message "Changing log level or file does not affect already running processes."
- }
- destroy $top
-}
-
-proc selectLog {top e} {
- global logFileNameDef
- set file [tk_getSaveFile -title {idn wrapper Logfile Selection} \
- -defaultextension .log \
- -filetypes {{{Log Files} .log} {{All Files} *}} \
- -initialfile $logFileNameDef \
- -parent $top]
- if {[string compare $file {}]} {
- $e delete 0 end
- $e insert insert $file
- }
-}
-
-proc showLog {top} {
- global _logFile
- if {[catch {exec notepad.exe $_logFile &} r]} {
- confErrorDialog $top "Cannot execute notepad"
- }
-}
-
-proc deleteLog {top} {
- global _logFile
- set ans [tk_messageBox -type yesno -default no -icon question \
- -parent $top -title "idn wrapper Configuration" \
- -message "Really delete $_logFile?"]
- if {[string compare $ans yes] == 0} {
- file delete $_logFile
- }
-}
-
-########################################################################
-#
-# dialog for .local deletion
-#
-
-proc dotLocalDialog {path {default yes}} {
- set parent .
- set dlg .dotlocaldlg
- catch {destroy $dlg}
- toplevel $dlg
-
- wm iconname $dlg Dialog
- wm title $dlg Confirmation
- wm transient $dlg $parent
- wm protocol $dlg WM_DELETE_WINDOW {}
-
- frame $dlg.f1 -bd 1 -relief raised
- frame $dlg.f2 -bd 1 -relief raised
- pack $dlg.f1 -side top -fill x -expand on -ipadx 2m -ipady 4m
- pack $dlg.f2 -side top -fill x -ipadx 2m
-
- label $dlg.f1.bm -bitmap question -bd 0
- label $dlg.f1.msg -text "Remove $path.local?" -wraplength 10c
- pack $dlg.f1.bm -side left -padx 3m -pady 2m
- pack $dlg.f1.msg -side left -padx 2m -pady 2m
-
- global dotlocal_selection
- foreach {btn lbl} {yes Yes no No yesall {Yes to All} noall {No to All}} {
- set bw $dlg.f2.btn$btn
- button $bw -text $lbl -default normal \
- -command [list set dotlocal_selection $btn]
- if {[string compare $default $btn] == 0} {
- $bw configure -default active
- focus $bw
- }
- bind $bw <Return> {%W flash; %W invoke}
- pack $bw -side left -padx 3m -pady 2m
- }
-
- grab $dlg
- ::tk::PlaceWindow $dlg widget $parent
-
- vwait dotlocal_selection
- destroy $dlg
- return $dotlocal_selection
-}
-
-########################################################################
-#
-# dialog for advanced configuration
-#
-
-proc advancedConf {pw} {
- set top .adv
- catch {destroy $top}
- toplevel $top
- wm title $top "idn wrapper - Advanced Configuration"
-
- global _mdnOperation _confFile
- set _mdnOperation [regGetWhere]
- set _confFile [regGetConfFile]
-
- foreach f {f1 f2 f3} {
- frame $top.$f -bd 1 -relief raised
- pack $top.$f -side top -fill x
- }
-
- set f $top.f1
- label $f.lbl -text {IDN Wrapping Mode}
- set w $f.f
- frame $w
- foreach {rb val txt} [list \
- rb1 0 {Wrap both WINSOCK 1.1 and WINSOCK 2.0} \
- rb2 2 {Wrap only WINSOCK 1.1} \
- rb3 3 {Wrap only WINSOCK 2.0} \
- rb4 1 "Wrap only WINSOCK2.0 if it exists.\nOtherwise wrap only WINSOCK1.1"] {
- radiobutton $w.$rb -text $txt -variable _mdnOperation -value $val \
- -anchor w -justify left
- pack $w.$rb -side top -fill x -pady 1
- }
- pack $f.lbl -side top -fill x -pady 4
- pack $w -side top -fill both -padx 20 -pady 10
-
- set f $top.f2
- label $f.lbl -text {IDN Configuration}
- pack $f.lbl -side top -fill x -pady 6
-
- set w $f.f
- frame $w
- pack $w -side top -fill both -padx 10 -pady 6
- label $w.l1 -text {Config File:}
- #label $w.l2 -text {Config Operation:}
- entry $w.e -width 40 -textvariable _confFile
- focus $w.e
- button $w.br -text "Browse.." -command [list selectConf $top $w.e]
- button $w.b -text Edit -command [list editConf $top]
- grid $w.l1 -row 0 -column 0 -sticky e -padx 4
- #grid $w.l2 -row 1 -column 0 -sticky e -padx 4
- grid $w.e -row 0 -column 1 -sticky we -padx 4 -pady 4
- grid $w.b -row 1 -column 1 -sticky w -padx 4 -pady 4
- grid $w.br -row 0 -column 2 -sticky w -padx 4 -pady 4
-
- set w $top.f3
- button $w.ok -text "OK" -command [list advConf $top]
- button $w.cancel -text "Cancel" -command [list destroy $top]
- pack $w.cancel -side right -padx 12 -pady 8
- pack $w.ok -side right -padx 12 -pady 8
-}
-
-proc editConf {top} {
- global _confFile
- if {[catch {exec notepad.exe $_confFile &} r]} {
- confErrorDialog $top "Cannot execute notepad"
- }
-}
-
-proc selectConf {top e} {
- global confFileNameDef
- set file [tk_getOpenFile -title {idn wrapper Config File Selection} \
- -defaultextension .conf \
- -filetypes {{{Config Files} .conf} {{All Files} *}} \
- -initialfile $confFileNameDef \
- -parent $top]
- if {[string compare $file {}]} {
- $e delete 0 end
- $e insert insert $file
- }
-}
-
-proc advConf {top} {
- global _mdnOperation _confFile
- regSetWhere $_mdnOperation
- regSetConfFile $_confFile
- destroy $top
-}
-
-########################################################################
-#
-# utility
-#
-
-proc confErrorDialog {top message} {
- tk_messageBox -default ok -icon error -parent $top -type ok \
- -title {idn wrapper Configuration Error} -message $message
-}
-
-proc isWindows {} {
- global tcl_platform
- expr {[string compare $tcl_platform(platform) "windows"] == 0}
-}
-
-########################################################################
-#
-# config program start here
-#
-
-wm title . "idn wrapper - Configuration"
-wm iconname . "idn wrapper - Configuration"
-
-
-label .title -bd 1 -relief raised -pady 5 \
- -text "idn wrapper Configuration Program version $version"
-
-frame .left -bd 1 -relief raised
-frame .right -bd 1 -relief raised
-
-frame .lst
-label .lst.title -text "Wrapped Programs" -pady 3
-listbox .lst.list -width 64 -height 16 -setgrid 1 \
- -xscrollcommand ".lst.xscroll set" \
- -yscrollcommand ".lst.yscroll set"
-scrollbar .lst.yscroll -orient vertical -command ".lst.list yview"
-scrollbar .lst.xscroll -orient horizontal -command ".lst.list xview"
-grid .lst.title -row 0 -column 0 -columnspan 2 -sticky news
-grid .lst.list -row 1 -column 0 -sticky news
-grid .lst.xscroll -row 2 -column 0 -sticky news
-grid .lst.yscroll -row 1 -column 1 -sticky news
-grid rowconfig .lst 1 -weight 1
-grid columnconfig .lst 0 -weight 1
-
-frame .btn
-button .btn.wrap -text "Wrap.." -command [list confWrap . .lst.list]
-button .btn.unwrap -text "Unwrap.." -command [list confUnwrap . .lst.list]
-button .btn.unwrapall -text "Unwrap All" -command [list unwrapAll . .lst.list]
-button .btn.rewrapall -text "Rewrap All" -command [list rewrapAll . .lst.list]
-frame .btn.spacing1 -width 1 -height 12 -bd 0
-button .btn.log -text "Log.." -command [list confLog .]
-frame .btn.spacing2 -width 1 -height 12 -bd 0
-button .btn.adv -text "Advanced.." -command [list advancedConf .]
-button .btn.exit -text Exit -command exit
-pack .btn.wrap -side top -fill x -pady 4
-pack .btn.unwrap -side top -fill x -pady 4
-pack .btn.unwrapall -side top -fill x -pady 4
-pack .btn.rewrapall -side top -fill x -pady 4
-pack .btn.spacing1 -side top
-pack .btn.log -side top -fill x -pady 4
-pack .btn.spacing2 -side top
-pack .btn.adv -side top -fill x -pady 4
-pack .btn.exit -side bottom -fill x -pady 4
-
-pack .lst -in .left -padx 4 -pady 4 -fill both -expand on
-pack .btn -in .right -padx 6 -pady 4 -fill both -expand on
-
-pack .title -side top -fill x
-pack .right -side right -fill y
-pack .left -side left -fill y -expand on
-
-#
-# then set current list into listbox
-#
-
-set theList [loadList]
-#saveList $theList
-putList .lst.list $theList
-
-#
-########################################################################
diff --git a/contrib/idn/idnkit-1.0-src/wsock/config/make.wnt b/contrib/idn/idnkit-1.0-src/wsock/config/make.wnt
deleted file mode 100644
index 1099fbe4..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/config/make.wnt
+++ /dev/null
@@ -1,58 +0,0 @@
-#
-# Makefile for building mDNS Wrapper Configuration Tool
-#
-
-# Copyright (c) 2000 Japan Network Information Center. All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-TARGETS = idnconf.exe
-
-all : $(TARGETS)
-
-idnconf.exe : idnconf.tcl
- freewrap idnconf.tcl
-
-install : $(TARGETS)
- copy idnconf.exe ..\bin
-
-clean : force
- -del idnconf.exe
-
-force :
diff --git a/contrib/idn/idnkit-1.0-src/wsock/make.wnt b/contrib/idn/idnkit-1.0-src/wsock/make.wnt
deleted file mode 100644
index 3c454327..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/make.wnt
+++ /dev/null
@@ -1,97 +0,0 @@
-#
-# Top Level Makefile for building WINSOCK idn wrapper
-#
-
-# Copyright (c) 2000 Japan Network Information Center. All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-all : force
- cd common
- $(MAKE) -f make.wnt all
- cd ..
- cd wsock11
- $(MAKE) -f make.wnt all
- cd ..
- cd wsock20
- $(MAKE) -f make.wnt all
- cd ..
- cd config
- $(MAKE) -f make.wnt all
- cd ..
-
-install : force
- copy ..\win\iconv.dll bin
- copy ..\lib\idnkit.dll bin
- copy ..\lib\idnkitlite.dll bin
- copy ..\map\jp.map bin
- cd common
- $(MAKE) -f make.wnt install
- cd ..
- cd wsock11
- $(MAKE) -f make.wnt install
- cd ..
- cd wsock20
- $(MAKE) -f make.wnt install
- cd ..
- cd config
- $(MAKE) -f make.wnt install
- cd ..
-
-setup : force
- cd bin
- iscc idn_wrapper.iss
- cd ..
-
-clean : force
- cd common
- $(MAKE) -f make.wnt clean
- cd ..
- cd wsock11
- $(MAKE) -f make.wnt clean
- cd ..
- cd wsock20
- $(MAKE) -f make.wnt clean
- cd ..
- cd config
- $(MAKE) -f make.wnt clean
- cd ..
-
-force :
-
diff --git a/contrib/idn/idnkit-1.0-src/wsock/wsock11/dlldef.h b/contrib/idn/idnkit-1.0-src/wsock/wsock11/dlldef.h
deleted file mode 100644
index 569a264e..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/wsock11/dlldef.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * dlldef.h
- */
-
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef _DLLDEF_H
-#define _DLLDEF_H
-
-#include "../common/wrapcommon.h"
-
-/*
- * Execution Tracing
- */
-
-extern int procPid;
-
-#ifdef DEBUG
-#define TRACE idnPrintf
-#define FATAL idnPrintf
-#else
-#define TRACE
-#define FATAL idnPrintf
-#endif
-
-/*
- * Stub functions for calling original version.
- */
-extern int PASCAL
-_org_gethostname(char FAR * name, int namelen);
-
-extern struct hostent FAR * PASCAL
-_org_gethostbyname(const char FAR * name);
-
-extern struct hostent FAR * PASCAL
-_org_gethostbyaddr(const char FAR * addr, int len, int type);
-
-extern HANDLE PASCAL
-_org_WSAAsyncGetHostByName(HWND hWnd, u_int wMsg, const char FAR * name,
- char FAR * buf, int buflen);
-extern HANDLE PASCAL
-_org_WSAAsyncGetHostByAddr(HWND hWnd, u_int wMsg, const char FAR * addr,
- int len, int type, char FAR * buf, int buflen);
-
-
-#endif /* _DLLDEF_H */
diff --git a/contrib/idn/idnkit-1.0-src/wsock/wsock11/dllfunc.c b/contrib/idn/idnkit-1.0-src/wsock/wsock11/dllfunc.c
deleted file mode 100644
index 4b709f61..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/wsock11/dllfunc.c
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * dllfunc.c - wrapper functions
- */
-
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <windows.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <process.h>
-
-#include "dlldef.h"
-
-WRAPPER_EXPORT int PASCAL FAR
-gethostname(char FAR * name, int namelen) {
- int ret;
-
- TRACE("ENTER gethostname\n");
- ret = _org_gethostname(name, namelen);
- TRACE("LEAVE gethostname %d <%-.100s>\n", ret, name);
-
- return (ret);
-}
-
-WRAPPER_EXPORT struct hostent FAR * PASCAL FAR
-gethostbyname(const char FAR * name) {
- struct hostent FAR *ret;
- char nbuff[256];
- char hbuff[256];
- BOOL stat;
- idn_resconf_t encodeCtx;
-
- TRACE("ENTER gethostbyname <%-.100s>\n",
- (name != NULL ? name : "NULL"));
-
- encodeCtx = idnGetContext();
-
- if (encodeCtx == NULL) {
- TRACE("gethostbyname: not encode here\n");
- ret = _org_gethostbyname(name);
- } else if (name == NULL) {
- TRACE("gethostbyname: name is NULL\n");
- ret = _org_gethostbyname(name);
- } else {
- stat = idnConvReq(encodeCtx, name, nbuff, sizeof(nbuff));
- if (stat == FALSE) {
- TRACE("idnConvReq failed\n");
- ret = NULL;
- } else {
- TRACE("Converted Name <%s>\n",
- dumpName(nbuff, hbuff, sizeof(hbuff)));
- ret = _org_gethostbyname(nbuff);
- }
- }
-
- if (ret != NULL && encodeCtx != NULL) {
- TRACE("Resulting Name <%s>\n",
- dumpName(ret->h_name, hbuff, sizeof(hbuff)));
- stat = idnConvRsp(encodeCtx, ret->h_name, nbuff,
- sizeof(nbuff));
- if (stat == FALSE) {
- TRACE("Decoding failed - return the name verbatim\n");
- } else {
- TRACE("Converted Back <%s>\n",
- dumpName(nbuff, hbuff, sizeof(hbuff)));
- strcpy(ret->h_name, nbuff);
- }
- }
-
- if (ret == NULL) {
- TRACE("LEAVE gethostbyname NULL\n");
- } else {
- TRACE("LEAVE gethostbyname <%s>\n",
- dumpHost(ret, hbuff, sizeof(hbuff)));
- }
- return (ret);
-}
-
-WRAPPER_EXPORT struct hostent FAR * PASCAL FAR
-gethostbyaddr(const char FAR * addr, int len, int type) {
- struct hostent FAR *ret;
- char nbuff[256];
- char abuff[256];
- char hbuff[256];
- BOOL stat;
- idn_resconf_t encodeCtx;
-
- TRACE("ENTER gethostbyaddr <%s>\n",
- dumpAddr(addr, len, abuff, sizeof(abuff)));
-
- encodeCtx = idnGetContext();
-
- ret = _org_gethostbyaddr(addr, len, type);
-
- if (ret != NULL && encodeCtx != NULL) {
- TRACE("Resulting Name <%s>\n",
- dumpName(ret->h_name, hbuff, sizeof(hbuff)));
- stat = idnConvRsp(encodeCtx, ret->h_name,
- nbuff, sizeof(nbuff));
- if (stat == FALSE) {
- TRACE("Decoding failed - return the name verbatim\n");
- } else {
- TRACE("Converted Back <%s>\n",
- dumpName(nbuff, hbuff, sizeof(hbuff)));
- strcpy(ret->h_name, nbuff);
- }
- }
-
- if (ret == NULL) {
- TRACE("LEAVE gethostbyaddr NULL\n") ;
- } else {
- TRACE("LEAVE gethostbyaddr <%s>\n",
- dumpHost(ret, hbuff, sizeof(hbuff)));
- }
- return (ret);
-}
-
-WRAPPER_EXPORT HANDLE PASCAL FAR
-WSAAsyncGetHostByName(HWND hWnd, u_int wMsg,
- const char FAR * name, char FAR * buf, int buflen)
-{
- HANDLE ret;
- char nbuff[256];
- char hbuff[256];
- idn_resconf_t encodeCtx;
-
- TRACE("ENTER WSAAsyncGetHostByName <%-.100s>\n", name);
-
- encodeCtx = idnGetContext();
-
- if (encodeCtx == NULL || name == NULL) {
- ret = _org_WSAAsyncGetHostByName(hWnd, wMsg, name,
- buf, buflen);
- } else {
- idnHook(hWnd, wMsg, buf, encodeCtx);
- idnConvReq(encodeCtx, name, nbuff, sizeof(nbuff));
- TRACE("Converted Name <%s>\n",
- dumpName(nbuff, hbuff, sizeof(hbuff)));
- ret = _org_WSAAsyncGetHostByName(hWnd, wMsg, nbuff,
- buf, buflen);
- }
-
- TRACE("LEAVE WSAAsyncGetHostByName HANDLE %08x\n", ret);
-
- return (ret);
-}
-
-WRAPPER_EXPORT HANDLE PASCAL FAR
-WSAAsyncGetHostByAddr(HWND hWnd, u_int wMsg, const char FAR * addr,
- int len, int type, char FAR * buf, int buflen)
-{
- HANDLE ret;
- char abuff[256];
- idn_resconf_t encodeCtx;
-
- encodeCtx = idnGetContext();
-
- if (encodeCtx != NULL) {
- idnHook(hWnd, wMsg, buf, encodeCtx);
- }
-
- TRACE("ENTER WSAAsyncGetHostByAddr <%s>\n",
- dumpAddr(addr, len, abuff, sizeof(abuff)));
- ret = _org_WSAAsyncGetHostByAddr(hWnd, wMsg, addr, len, type,
- buf, buflen);
- TRACE("LEAVE WSAAsyncGetHostByAddr HANDLE %08x\n", ret);
-
- return (ret);
-}
-
-
diff --git a/contrib/idn/idnkit-1.0-src/wsock/wsock11/dllload.c b/contrib/idn/idnkit-1.0-src/wsock/wsock11/dllload.c
deleted file mode 100644
index 68c2a7e8..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/wsock11/dllload.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * dllload.c - load original entries
- */
-
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <windows.h>
-#include <winsock.h>
-#include <nspapi.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <process.h>
-
-#include "dlldef.h"
-
-/*
- * Manages original DLL
- */
-
-#define DLLHANDLE idnWinsockHandle()
-
-#include "dllstub.c"
diff --git a/contrib/idn/idnkit-1.0-src/wsock/wsock11/dllmain.c b/contrib/idn/idnkit-1.0-src/wsock/wsock11/dllmain.c
deleted file mode 100644
index 177f7229..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/wsock11/dllmain.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * dllmain.c - entry for DLL
- */
-
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <windows.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <process.h>
-
-#include "dlldef.h"
-
-/*
- * Control Variables
- */
-
-int procPid = 0;
-
-static char procExe[256];
-
-/*
- * DLL Entry
- */
-
-BOOL APIENTRY
-DllMain(HMODULE hmod, DWORD reason, LPVOID *resv) {
- switch (reason) {
-
- case DLL_PROCESS_ATTACH:
- procPid = getpid();
- GetModuleFileName(NULL, procExe, 256);
-
- idnLogInit("ws11");
- idnHookInit();
-
- TRACE("Attached to Process <%s>\n", procExe);
- return (idnWinsockVersion("1.1"));
-
- case DLL_PROCESS_DETACH:
- idnConvDone(idnGetContext());
- idnHookDone();
- TRACE("Detached from Process\n");
- idnLogFinish();
- break;
-
- case DLL_THREAD_ATTACH:
- break;
- case DLL_THREAD_DETACH:
- break;
- }
-
- return (TRUE);
-}
-
diff --git a/contrib/idn/idnkit-1.0-src/wsock/wsock11/dllstub.c b/contrib/idn/idnkit-1.0-src/wsock/wsock11/dllstub.c
deleted file mode 100644
index af8a2b67..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/wsock11/dllstub.c
+++ /dev/null
@@ -1,1541 +0,0 @@
-/* $Id: dllstub.c,v 1.1 2003/06/04 00:27:45 marka Exp $ */
-
-SOCKET PASCAL
-accept(SOCKET a0, struct sockaddr* a1, int* a2)
-{
- static SOCKET (PASCAL *fp)(SOCKET a0, struct sockaddr* a1, int* a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub accept() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "accept")) == NULL) {
- FATAL("cannot find entry accept (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-int PASCAL
-bind(SOCKET a0, const struct sockaddr* a1, int a2)
-{
- static int (PASCAL *fp)(SOCKET a0, const struct sockaddr* a1, int a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub bind() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "bind")) == NULL) {
- FATAL("cannot find entry bind (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-int PASCAL
-closesocket(SOCKET a0)
-{
- static int (PASCAL *fp)(SOCKET a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub closesocket() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "closesocket")) == NULL) {
- FATAL("cannot find entry closesocket (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-int PASCAL
-connect(SOCKET a0, const struct sockaddr* a1, int a2)
-{
- static int (PASCAL *fp)(SOCKET a0, const struct sockaddr* a1, int a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub connect() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "connect")) == NULL) {
- FATAL("cannot find entry connect (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-int PASCAL
-getpeername(SOCKET a0, struct sockaddr* a1, int* a2)
-{
- static int (PASCAL *fp)(SOCKET a0, struct sockaddr* a1, int* a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub getpeername() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "getpeername")) == NULL) {
- FATAL("cannot find entry getpeername (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-int PASCAL
-getsockname(SOCKET a0, struct sockaddr* a1, int* a2)
-{
- static int (PASCAL *fp)(SOCKET a0, struct sockaddr* a1, int* a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub getsockname() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "getsockname")) == NULL) {
- FATAL("cannot find entry getsockname (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-int PASCAL
-getsockopt(SOCKET a0, int a1, int a2, char* a3, int* a4)
-{
- static int (PASCAL *fp)(SOCKET a0, int a1, int a2, char* a3, int* a4);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub getsockopt() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "getsockopt")) == NULL) {
- FATAL("cannot find entry getsockopt (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4);
-}
-
-u_long PASCAL
-htonl(u_long a0)
-{
- static u_long (PASCAL *fp)(u_long a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub htonl() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "htonl")) == NULL) {
- FATAL("cannot find entry htonl (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-u_short PASCAL
-htons(u_short a0)
-{
- static u_short (PASCAL *fp)(u_short a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub htons() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "htons")) == NULL) {
- FATAL("cannot find entry htons (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-unsigned long PASCAL
-inet_addr(const char* a0)
-{
- static unsigned long (PASCAL *fp)(const char* a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub inet_addr() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "inet_addr")) == NULL) {
- FATAL("cannot find entry inet_addr (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
- char * PASCAL
-inet_ntoa(struct in_addr a0)
-{
- static char * (PASCAL *fp)(struct in_addr a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub inet_ntoa() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "inet_ntoa")) == NULL) {
- FATAL("cannot find entry inet_ntoa (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-int PASCAL
-ioctlsocket(SOCKET a0, long a1, u_long * a2)
-{
- static int (PASCAL *fp)(SOCKET a0, long a1, u_long * a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub ioctlsocket() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "ioctlsocket")) == NULL) {
- FATAL("cannot find entry ioctlsocket (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-int PASCAL
-listen(SOCKET a0, int a1)
-{
- static int (PASCAL *fp)(SOCKET a0, int a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub listen() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "listen")) == NULL) {
- FATAL("cannot find entry listen (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-u_long PASCAL
-ntohl(u_long a0)
-{
- static u_long (PASCAL *fp)(u_long a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub ntohl() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "ntohl")) == NULL) {
- FATAL("cannot find entry ntohl (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-u_short PASCAL
-ntohs(u_short a0)
-{
- static u_short (PASCAL *fp)(u_short a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub ntohs() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "ntohs")) == NULL) {
- FATAL("cannot find entry ntohs (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-int PASCAL
-recv(SOCKET a0, char* a1, int a2, int a3)
-{
- static int (PASCAL *fp)(SOCKET a0, char* a1, int a2, int a3);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub recv() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "recv")) == NULL) {
- FATAL("cannot find entry recv (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3);
-}
-
-int PASCAL
-recvfrom(SOCKET a0, char* a1, int a2, int a3, struct sockaddr* a4, int* a5)
-{
- static int (PASCAL *fp)(SOCKET a0, char* a1, int a2, int a3, struct sockaddr* a4, int* a5);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub recvfrom() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "recvfrom")) == NULL) {
- FATAL("cannot find entry recvfrom (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5);
-}
-
-int PASCAL
-select(int a0, fd_set* a1, fd_set* a2, fd_set* a3, const struct timeval* a4)
-{
- static int (PASCAL *fp)(int a0, fd_set* a1, fd_set* a2, fd_set* a3, const struct timeval* a4);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub select() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "select")) == NULL) {
- FATAL("cannot find entry select (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4);
-}
-
-int PASCAL
-send(SOCKET a0, const char* a1, int a2, int a3)
-{
- static int (PASCAL *fp)(SOCKET a0, const char* a1, int a2, int a3);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub send() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "send")) == NULL) {
- FATAL("cannot find entry send (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3);
-}
-
-int PASCAL
-sendto(SOCKET a0, const char* a1, int a2, int a3, const struct sockaddr* a4, int a5)
-{
- static int (PASCAL *fp)(SOCKET a0, const char* a1, int a2, int a3, const struct sockaddr* a4, int a5);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub sendto() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "sendto")) == NULL) {
- FATAL("cannot find entry sendto (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5);
-}
-
-int PASCAL
-setsockopt(SOCKET a0, int a1, int a2, const char* a3, int a4)
-{
- static int (PASCAL *fp)(SOCKET a0, int a1, int a2, const char* a3, int a4);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub setsockopt() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "setsockopt")) == NULL) {
- FATAL("cannot find entry setsockopt (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4);
-}
-
-int PASCAL
-shutdown(SOCKET a0, int a1)
-{
- static int (PASCAL *fp)(SOCKET a0, int a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub shutdown() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "shutdown")) == NULL) {
- FATAL("cannot find entry shutdown (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-SOCKET PASCAL
-socket(int a0, int a1, int a2)
-{
- static SOCKET (PASCAL *fp)(int a0, int a1, int a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub socket() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "socket")) == NULL) {
- FATAL("cannot find entry socket (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-int PASCAL
-MigrateWinsockConfiguration(int a0, int a1, int a2)
-{
- static int (PASCAL *fp)(int a0, int a1, int a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub MigrateWinsockConfiguration() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "MigrateWinsockConfiguration")) == NULL) {
- FATAL("cannot find entry MigrateWinsockConfiguration (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
- struct hostent * PASCAL
-_org_gethostbyaddr(const char* a0, int a1, int a2)
-{
- static struct hostent * (PASCAL *fp)(const char* a0, int a1, int a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub _org_gethostbyaddr() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "gethostbyaddr")) == NULL) {
- FATAL("cannot find entry gethostbyaddr (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
- struct hostent * PASCAL
-_org_gethostbyname(const char* a0)
-{
- static struct hostent * (PASCAL *fp)(const char* a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub _org_gethostbyname() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "gethostbyname")) == NULL) {
- FATAL("cannot find entry gethostbyname (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
- struct protoent * PASCAL
-getprotobyname(const char* a0)
-{
- static struct protoent * (PASCAL *fp)(const char* a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub getprotobyname() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "getprotobyname")) == NULL) {
- FATAL("cannot find entry getprotobyname (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
- struct protoent * PASCAL
-getprotobynumber(int a0)
-{
- static struct protoent * (PASCAL *fp)(int a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub getprotobynumber() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "getprotobynumber")) == NULL) {
- FATAL("cannot find entry getprotobynumber (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
- struct servent * PASCAL
-getservbyname(const char* a0, const char* a1)
-{
- static struct servent * (PASCAL *fp)(const char* a0, const char* a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub getservbyname() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "getservbyname")) == NULL) {
- FATAL("cannot find entry getservbyname (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
- struct servent * PASCAL
-getservbyport(int a0, const char* a1)
-{
- static struct servent * (PASCAL *fp)(int a0, const char* a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub getservbyport() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "getservbyport")) == NULL) {
- FATAL("cannot find entry getservbyport (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-int PASCAL
-_org_gethostname(char* a0, int a1)
-{
- static int (PASCAL *fp)(char* a0, int a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub _org_gethostname() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "gethostname")) == NULL) {
- FATAL("cannot find entry gethostname (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-int PASCAL
-WSAAsyncSelect(SOCKET a0, HWND a1, u_int a2, long a3)
-{
- static int (PASCAL *fp)(SOCKET a0, HWND a1, u_int a2, long a3);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAAsyncSelect() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAAsyncSelect")) == NULL) {
- FATAL("cannot find entry WSAAsyncSelect (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3);
-}
-
-HANDLE PASCAL
-_org_WSAAsyncGetHostByAddr(HWND a0, u_int a1, const char* a2, int a3, int a4, char* a5, int a6)
-{
- static HANDLE (PASCAL *fp)(HWND a0, u_int a1, const char* a2, int a3, int a4, char* a5, int a6);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub _org_WSAAsyncGetHostByAddr() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAAsyncGetHostByAddr")) == NULL) {
- FATAL("cannot find entry WSAAsyncGetHostByAddr (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5, a6);
-}
-
-HANDLE PASCAL
-_org_WSAAsyncGetHostByName(HWND a0, u_int a1, const char* a2, char* a3, int a4)
-{
- static HANDLE (PASCAL *fp)(HWND a0, u_int a1, const char* a2, char* a3, int a4);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub _org_WSAAsyncGetHostByName() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAAsyncGetHostByName")) == NULL) {
- FATAL("cannot find entry WSAAsyncGetHostByName (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4);
-}
-
-HANDLE PASCAL
-WSAAsyncGetProtoByNumber(HWND a0, u_int a1, int a2, char* a3, int a4)
-{
- static HANDLE (PASCAL *fp)(HWND a0, u_int a1, int a2, char* a3, int a4);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAAsyncGetProtoByNumber() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAAsyncGetProtoByNumber")) == NULL) {
- FATAL("cannot find entry WSAAsyncGetProtoByNumber (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4);
-}
-
-HANDLE PASCAL
-WSAAsyncGetProtoByName(HWND a0, u_int a1, const char* a2, char* a3, int a4)
-{
- static HANDLE (PASCAL *fp)(HWND a0, u_int a1, const char* a2, char* a3, int a4);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAAsyncGetProtoByName() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAAsyncGetProtoByName")) == NULL) {
- FATAL("cannot find entry WSAAsyncGetProtoByName (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4);
-}
-
-HANDLE PASCAL
-WSAAsyncGetServByPort(HWND a0, u_int a1, int a2, const char* a3, char* a4, int a5)
-{
- static HANDLE (PASCAL *fp)(HWND a0, u_int a1, int a2, const char* a3, char* a4, int a5);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAAsyncGetServByPort() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAAsyncGetServByPort")) == NULL) {
- FATAL("cannot find entry WSAAsyncGetServByPort (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5);
-}
-
-HANDLE PASCAL
-WSAAsyncGetServByName(HWND a0, u_int a1, const char* a2, const char* a3, char* a4, int a5)
-{
- static HANDLE (PASCAL *fp)(HWND a0, u_int a1, const char* a2, const char* a3, char* a4, int a5);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAAsyncGetServByName() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAAsyncGetServByName")) == NULL) {
- FATAL("cannot find entry WSAAsyncGetServByName (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5);
-}
-
-int PASCAL
-WSACancelAsyncRequest(HANDLE a0)
-{
- static int (PASCAL *fp)(HANDLE a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSACancelAsyncRequest() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSACancelAsyncRequest")) == NULL) {
- FATAL("cannot find entry WSACancelAsyncRequest (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-FARPROC PASCAL
-WSASetBlockingHook(FARPROC a0)
-{
- static FARPROC (PASCAL *fp)(FARPROC a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSASetBlockingHook() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSASetBlockingHook")) == NULL) {
- FATAL("cannot find entry WSASetBlockingHook (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-int PASCAL
-WSAUnhookBlockingHook(void)
-{
- static int (PASCAL *fp)(void);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAUnhookBlockingHook() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAUnhookBlockingHook")) == NULL) {
- FATAL("cannot find entry WSAUnhookBlockingHook (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)();
-}
-
-int PASCAL
-WSAGetLastError(void)
-{
- static int (PASCAL *fp)(void);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAGetLastError() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAGetLastError")) == NULL) {
- FATAL("cannot find entry WSAGetLastError (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)();
-}
-
-void PASCAL
-WSASetLastError(int a0)
-{
- static void (PASCAL *fp)(int a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSASetLastError() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSASetLastError")) == NULL) {
- FATAL("cannot find entry WSASetLastError (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- (*fp)(a0);
-}
-
-int PASCAL
-WSACancelBlockingCall(void)
-{
- static int (PASCAL *fp)(void);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSACancelBlockingCall() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSACancelBlockingCall")) == NULL) {
- FATAL("cannot find entry WSACancelBlockingCall (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)();
-}
-
-BOOL PASCAL
-WSAIsBlocking(void)
-{
- static BOOL (PASCAL *fp)(void);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAIsBlocking() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAIsBlocking")) == NULL) {
- FATAL("cannot find entry WSAIsBlocking (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)();
-}
-
-int PASCAL
-WSAStartup(WORD a0, LPWSADATA a1)
-{
- static int (PASCAL *fp)(WORD a0, LPWSADATA a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAStartup() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAStartup")) == NULL) {
- FATAL("cannot find entry WSAStartup (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-int PASCAL
-WSACleanup(void)
-{
- static int (PASCAL *fp)(void);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSACleanup() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSACleanup")) == NULL) {
- FATAL("cannot find entry WSACleanup (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)();
-}
-
-int PASCAL
-__WSAFDIsSet(SOCKET a0, fd_set* a1)
-{
- static int (PASCAL *fp)(SOCKET a0, fd_set* a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub __WSAFDIsSet() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "__WSAFDIsSet")) == NULL) {
- FATAL("cannot find entry __WSAFDIsSet (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-int PASCAL
-WEP(void)
-{
- static int (PASCAL *fp)(void);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WEP() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WEP")) == NULL) {
- FATAL("cannot find entry WEP (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)();
-}
-
-int PASCAL
-WSApSetPostRoutine(int a0)
-{
- static int (PASCAL *fp)(int a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSApSetPostRoutine() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSApSetPostRoutine")) == NULL) {
- FATAL("cannot find entry WSApSetPostRoutine (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-int PASCAL
-WsControl(int a0, int a1, int a2, int a3, int a4, int a5)
-{
- static int (PASCAL *fp)(int a0, int a1, int a2, int a3, int a4, int a5);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WsControl() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WsControl")) == NULL) {
- FATAL("cannot find entry WsControl (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5);
-}
-
-int PASCAL
-closesockinfo(int a0)
-{
- static int (PASCAL *fp)(int a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub closesockinfo() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "closesockinfo")) == NULL) {
- FATAL("cannot find entry closesockinfo (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-int PASCAL
-Arecv(int a0, int a1, int a2, int a3)
-{
- static int (PASCAL *fp)(int a0, int a1, int a2, int a3);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub Arecv() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "Arecv")) == NULL) {
- FATAL("cannot find entry Arecv (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3);
-}
-
-int PASCAL
-Asend(int a0, int a1, int a2, int a3)
-{
- static int (PASCAL *fp)(int a0, int a1, int a2, int a3);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub Asend() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "Asend")) == NULL) {
- FATAL("cannot find entry Asend (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3);
-}
-
-int PASCAL
-WSHEnumProtocols(void)
-{
- static int (PASCAL *fp)(void);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSHEnumProtocols() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSHEnumProtocols")) == NULL) {
- FATAL("cannot find entry WSHEnumProtocols (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)();
-}
-
-int PASCAL
-inet_network(int a0)
-{
- static int (PASCAL *fp)(int a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub inet_network() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "inet_network")) == NULL) {
- FATAL("cannot find entry inet_network (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-int PASCAL
-getnetbyname(int a0)
-{
- static int (PASCAL *fp)(int a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub getnetbyname() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "getnetbyname")) == NULL) {
- FATAL("cannot find entry getnetbyname (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-int PASCAL
-rcmd(int a0, int a1, int a2, int a3, int a4, int a5)
-{
- static int (PASCAL *fp)(int a0, int a1, int a2, int a3, int a4, int a5);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub rcmd() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "rcmd")) == NULL) {
- FATAL("cannot find entry rcmd (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5);
-}
-
-int PASCAL
-rexec(int a0, int a1, int a2, int a3, int a4, int a5)
-{
- static int (PASCAL *fp)(int a0, int a1, int a2, int a3, int a4, int a5);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub rexec() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "rexec")) == NULL) {
- FATAL("cannot find entry rexec (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5);
-}
-
-int PASCAL
-rresvport(int a0)
-{
- static int (PASCAL *fp)(int a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub rresvport() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "rresvport")) == NULL) {
- FATAL("cannot find entry rresvport (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-int PASCAL
-sethostname(int a0, int a1)
-{
- static int (PASCAL *fp)(int a0, int a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub sethostname() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "sethostname")) == NULL) {
- FATAL("cannot find entry sethostname (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-int PASCAL
-dn_expand(int a0, int a1, int a2, int a3, int a4)
-{
- static int (PASCAL *fp)(int a0, int a1, int a2, int a3, int a4);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub dn_expand() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "dn_expand")) == NULL) {
- FATAL("cannot find entry dn_expand (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4);
-}
-
-int PASCAL
-WSARecvEx(SOCKET a0, char* a1, int a2, int* a3)
-{
- static int (PASCAL *fp)(SOCKET a0, char* a1, int a2, int* a3);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSARecvEx() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSARecvEx")) == NULL) {
- FATAL("cannot find entry WSARecvEx (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3);
-}
-
-int PASCAL
-s_perror(int a0, int a1)
-{
- static int (PASCAL *fp)(int a0, int a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub s_perror() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "s_perror")) == NULL) {
- FATAL("cannot find entry s_perror (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-INT PASCAL
-GetAddressByNameA(DWORD a0, LPGUID a1, LPSTR a2, LPINT a3, DWORD a4, LPSERVICE_ASYNC_INFO a5, LPVOID a6, LPDWORD a7, LPSTR a8, LPDWORD a9)
-{
- static INT (PASCAL *fp)(DWORD a0, LPGUID a1, LPSTR a2, LPINT a3, DWORD a4, LPSERVICE_ASYNC_INFO a5, LPVOID a6, LPDWORD a7, LPSTR a8, LPDWORD a9);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub GetAddressByNameA() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "GetAddressByNameA")) == NULL) {
- FATAL("cannot find entry GetAddressByNameA (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-}
-
-INT PASCAL
-GetAddressByNameW(DWORD a0, LPGUID a1, LPWSTR a2, LPINT a3, DWORD a4, LPSERVICE_ASYNC_INFO a5, LPVOID a6, LPDWORD a7, LPWSTR a8, LPDWORD a9)
-{
- static INT (PASCAL *fp)(DWORD a0, LPGUID a1, LPWSTR a2, LPINT a3, DWORD a4, LPSERVICE_ASYNC_INFO a5, LPVOID a6, LPDWORD a7, LPWSTR a8, LPDWORD a9);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub GetAddressByNameW() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "GetAddressByNameW")) == NULL) {
- FATAL("cannot find entry GetAddressByNameW (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-}
-
-INT PASCAL
-EnumProtocolsA(LPINT a0, LPVOID a1, LPDWORD a2)
-{
- static INT (PASCAL *fp)(LPINT a0, LPVOID a1, LPDWORD a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub EnumProtocolsA() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "EnumProtocolsA")) == NULL) {
- FATAL("cannot find entry EnumProtocolsA (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-INT PASCAL
-EnumProtocolsW(LPINT a0, LPVOID a1, LPDWORD a2)
-{
- static INT (PASCAL *fp)(LPINT a0, LPVOID a1, LPDWORD a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub EnumProtocolsW() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "EnumProtocolsW")) == NULL) {
- FATAL("cannot find entry EnumProtocolsW (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-INT PASCAL
-GetTypeByNameA(LPSTR a0, LPGUID a1)
-{
- static INT (PASCAL *fp)(LPSTR a0, LPGUID a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub GetTypeByNameA() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "GetTypeByNameA")) == NULL) {
- FATAL("cannot find entry GetTypeByNameA (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-INT PASCAL
-GetTypeByNameW(LPWSTR a0, LPGUID a1)
-{
- static INT (PASCAL *fp)(LPWSTR a0, LPGUID a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub GetTypeByNameW() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "GetTypeByNameW")) == NULL) {
- FATAL("cannot find entry GetTypeByNameW (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-INT PASCAL
-GetNameByTypeA(LPGUID a0, LPSTR a1, DWORD a2)
-{
- static INT (PASCAL *fp)(LPGUID a0, LPSTR a1, DWORD a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub GetNameByTypeA() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "GetNameByTypeA")) == NULL) {
- FATAL("cannot find entry GetNameByTypeA (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-INT PASCAL
-GetNameByTypeW(LPGUID a0, LPWSTR a1, DWORD a2)
-{
- static INT (PASCAL *fp)(LPGUID a0, LPWSTR a1, DWORD a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub GetNameByTypeW() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "GetNameByTypeW")) == NULL) {
- FATAL("cannot find entry GetNameByTypeW (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-INT PASCAL
-SetServiceA(DWORD a0, DWORD a1, DWORD a2, LPSERVICE_INFOA a3, LPSERVICE_ASYNC_INFO a4, LPDWORD a5)
-{
- static INT (PASCAL *fp)(DWORD a0, DWORD a1, DWORD a2, LPSERVICE_INFOA a3, LPSERVICE_ASYNC_INFO a4, LPDWORD a5);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub SetServiceA() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "SetServiceA")) == NULL) {
- FATAL("cannot find entry SetServiceA (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5);
-}
-
-INT PASCAL
-SetServiceW(DWORD a0, DWORD a1, DWORD a2, LPSERVICE_INFOW a3, LPSERVICE_ASYNC_INFO a4, LPDWORD a5)
-{
- static INT (PASCAL *fp)(DWORD a0, DWORD a1, DWORD a2, LPSERVICE_INFOW a3, LPSERVICE_ASYNC_INFO a4, LPDWORD a5);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub SetServiceW() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "SetServiceW")) == NULL) {
- FATAL("cannot find entry SetServiceW (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5);
-}
-
-INT PASCAL
-GetServiceA(DWORD a0, LPGUID a1, LPSTR a2, DWORD a3, LPVOID a4, LPDWORD a5, LPSERVICE_ASYNC_INFO a6)
-{
- static INT (PASCAL *fp)(DWORD a0, LPGUID a1, LPSTR a2, DWORD a3, LPVOID a4, LPDWORD a5, LPSERVICE_ASYNC_INFO a6);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub GetServiceA() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "GetServiceA")) == NULL) {
- FATAL("cannot find entry GetServiceA (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5, a6);
-}
-
-INT PASCAL
-GetServiceW(DWORD a0, LPGUID a1, LPWSTR a2, DWORD a3, LPVOID a4, LPDWORD a5, LPSERVICE_ASYNC_INFO a6)
-{
- static INT (PASCAL *fp)(DWORD a0, LPGUID a1, LPWSTR a2, DWORD a3, LPVOID a4, LPDWORD a5, LPSERVICE_ASYNC_INFO a6);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub GetServiceW() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "GetServiceW")) == NULL) {
- FATAL("cannot find entry GetServiceW (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5, a6);
-}
-
-int PASCAL
-NPLoadNameSpaces(int a0, int a1, int a2)
-{
- static int (PASCAL *fp)(int a0, int a1, int a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub NPLoadNameSpaces() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "NPLoadNameSpaces")) == NULL) {
- FATAL("cannot find entry NPLoadNameSpaces (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-int PASCAL
-NSPStartup(int a0, int a1)
-{
- static int (PASCAL *fp)(int a0, int a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub NSPStartup() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "NSPStartup")) == NULL) {
- FATAL("cannot find entry NSPStartup (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-BOOL PASCAL
-TransmitFile(SOCKET a0, HANDLE a1, DWORD a2, DWORD a3, LPOVERLAPPED a4, LPTRANSMIT_FILE_BUFFERS a5, DWORD a6)
-{
- static BOOL (PASCAL *fp)(SOCKET a0, HANDLE a1, DWORD a2, DWORD a3, LPOVERLAPPED a4, LPTRANSMIT_FILE_BUFFERS a5, DWORD a6);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub TransmitFile() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "TransmitFile")) == NULL) {
- FATAL("cannot find entry TransmitFile (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5, a6);
-}
-
-BOOL PASCAL
-AcceptEx(SOCKET a0, SOCKET a1, PVOID a2, DWORD a3, DWORD a4, DWORD a5, LPDWORD a6, LPOVERLAPPED a7)
-{
- static BOOL (PASCAL *fp)(SOCKET a0, SOCKET a1, PVOID a2, DWORD a3, DWORD a4, DWORD a5, LPDWORD a6, LPOVERLAPPED a7);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub AcceptEx() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "AcceptEx")) == NULL) {
- FATAL("cannot find entry AcceptEx (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5, a6, a7);
-}
-
-VOID PASCAL
-GetAcceptExSockaddrs(PVOID a0, DWORD a1, DWORD a2, DWORD a3, struct sockaddr** a4, LPINT a5, struct sockaddr** a6, LPINT a7)
-{
- static VOID (PASCAL *fp)(PVOID a0, DWORD a1, DWORD a2, DWORD a3, struct sockaddr** a4, LPINT a5, struct sockaddr** a6, LPINT a7);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub GetAcceptExSockaddrs() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "GetAcceptExSockaddrs")) == NULL) {
- FATAL("cannot find entry GetAcceptExSockaddrs (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- (*fp)(a0, a1, a2, a3, a4, a5, a6, a7);
-}
-
diff --git a/contrib/idn/idnkit-1.0-src/wsock/wsock11/make.wnt b/contrib/idn/idnkit-1.0-src/wsock/wsock11/make.wnt
deleted file mode 100644
index 5543a6d2..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/wsock11/make.wnt
+++ /dev/null
@@ -1,98 +0,0 @@
-#
-# Makefile for WinSock Wrapper (for WinSock 1.1)
-#
-
-# Copyright (c) 2000 Japan Network Information Center. All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-!include <win32.mak>
-
-SYSLIBS = $(libcdll) kernel32.lib advapi32.lib user32.lib
-
-#
-# Files to use
-#
-
-HDRS = dlldef.h ..\common\wrapcommon.h
-SRCS = dllmain.c dllload.c dllfunc.c dllstub.c
-OBJS = dllmain.obj dllload.obj dllfunc.obj
-LIBS = ..\common\wrapcommon.lib ..\..\lib\idnkit.lib ..\..\win\iconv.lib
-
-cflags = $(cflags) -I..\..\include
-
-#
-# Targets to Build
-#
-
-TARGETS = wsock32.dll
-
-all : $(TARGETS)
-
-wsock32.dll : wsock32.def $(OBJS) $(LIBS)
- $(link) $(dlllflags) /OUT:wsock32.dll /DEF:wsock32.def $(OBJS) $(LIBS) $(SYSLIBS)
-
-install : $(TARGETS)
- copy wsock32.dll ..\bin
-
-clean : force
- -del *.obj
- -del *.lib
- -del *.dll
- -del *.exp
-
-#
-# Dependencies
-#
-
-dllmain.obj : dllmain.c $(HDRS)
- $(cc) $(cflags) $(cvarsdll) -DDEBUG $*.c
-
-dllload.obj : dllload.c dllstub.c $(HDRS)
- $(cc) $(cflags) $(cvarsdll) -DDEBUG $*.c
-
-
-dllfunc.obj : dllfunc.c $(HDRS)
- $(cc) $(cflags) $(cvarsdll) -DDEBUG $*.c
-
-wsock32o.lib : wsock32o.def
- LIB /DEF:wsock32o.def /MACHINE:IX86
-
-force :
-
diff --git a/contrib/idn/idnkit-1.0-src/wsock/wsock11/wsock32.def b/contrib/idn/idnkit-1.0-src/wsock/wsock11/wsock32.def
deleted file mode 100644
index 5501d26a..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/wsock11/wsock32.def
+++ /dev/null
@@ -1,87 +0,0 @@
-;
-; Library Defition for idn wrapper's wrapper DLL
-;
-LIBRARY wsock32
-DESCRIPTION "JPNIC idn wrapper DLL for WSOCK32"
-EXPORTS
- accept @1
- bind @2
- closesocket @3
- connect @4
- getpeername @5
- getsockname @6
- getsockopt @7
- htonl @8
- htons @9
- inet_addr @10
- inet_ntoa @11
- ioctlsocket @12
- listen @13
- ntohl @14
- ntohs @15
- recv @16
- recvfrom @17
- select @18
- send @19
- sendto @20
- setsockopt @21
- shutdown @22
- socket @23
- MigrateWinsockConfiguration @24
- gethostbyaddr @51
- gethostbyname @52
- getprotobyname @53
- getprotobynumber @54
- getservbyname @55
- getservbyport @56
- gethostname @57
- WSAAsyncSelect @101
- WSAAsyncGetHostByAddr @102
- WSAAsyncGetHostByName @103
- WSAAsyncGetProtoByNumber @104
- WSAAsyncGetProtoByName @105
- WSAAsyncGetServByPort @106
- WSAAsyncGetServByName @107
- WSACancelAsyncRequest @108
- WSASetBlockingHook @109
- WSAUnhookBlockingHook @110
- WSAGetLastError @111
- WSASetLastError @112
- WSACancelBlockingCall @113
- WSAIsBlocking @114
- WSAStartup @115
- WSACleanup @116
- __WSAFDIsSet @151
- WEP @500
- WSApSetPostRoutine @1000
- WsControl @1001
- closesockinfo @1002
- Arecv @1003
- Asend @1004
- WSHEnumProtocols @1005
- inet_network @1100
- getnetbyname @1101
- rcmd @1102
- rexec @1103
- rresvport @1104
- sethostname @1105
- dn_expand @1106
- WSARecvEx @1107
- s_perror @1108
- GetAddressByNameA @1109
- GetAddressByNameW @1110
- EnumProtocolsA @1111
- EnumProtocolsW @1112
- GetTypeByNameA @1113
- GetTypeByNameW @1114
- GetNameByTypeA @1115
- GetNameByTypeW @1116
- SetServiceA @1117
- SetServiceW @1118
- GetServiceA @1119
- GetServiceW @1120
- NPLoadNameSpaces @1130
- NSPStartup @1131
- TransmitFile @1140
- AcceptEx @1141
- GetAcceptExSockaddrs @1142
diff --git a/contrib/idn/idnkit-1.0-src/wsock/wsock20/dlldef.h b/contrib/idn/idnkit-1.0-src/wsock/wsock20/dlldef.h
deleted file mode 100644
index 52a25678..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/wsock20/dlldef.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * dlldef.h
- */
-
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef _DLLDEF_H
-#define _DLLDEF_H
-
-#include "../common/wrapcommon.h"
-
-/*
- * Execution Tracing
- */
-
-extern int procPid;
-
-#ifdef DEBUG
-#define TRACE idnPrintf
-#define FATAL idnPrintf
-#else
-#define TRACE
-#define FATAL idnPrintf
-#endif
-
-/*
- * entry points to wrap
- */
-
-extern int WSAAPI
-_org_gethostname(char FAR * name, int namelen);
-
-extern struct hostent FAR * WSAAPI
-_org_gethostbyaddr(const char FAR * addr, int len, int type);
-
-extern struct hostent FAR * WSAAPI
-_org_gethostbyname(const char FAR * name);
-
-extern HANDLE WSAAPI
-_org_WSAAsyncGetHostByName(HWND hWnd, u_int wMsg, const char FAR * name,
- char FAR * buf,int buflen);
-
-extern HANDLE WSAAPI
-_org_WSAAsyncGetHostByAddr(HWND hWnd, u_int wMsg, const char FAR * addr,
- int len, int type, char FAR * buf, int buflen);
-
-extern INT WSAAPI
-_org_WSALookupServiceBeginA(LPWSAQUERYSETA lpqsRestrictions,
- DWORD dwControlFlags,
- LPHANDLE lphLookup);
-
-extern INT WSAAPI
-_org_WSALookupServiceBeginW(LPWSAQUERYSETW lpqsRestrictions,
- DWORD dwControlFlags,
- LPHANDLE lphLookup);
-
-extern INT WSAAPI
-_org_WSALookupServiceNextA(HANDLE hLookup,
- DWORD dwControlFlags,
- LPDWORD lpdwBufferLength,
- LPWSAQUERYSETA lpqsResults);
-
-extern INT WSAAPI
-_org_WSALookupServiceNextW(HANDLE hLookup,
- DWORD dwControlFlags,
- LPDWORD lpdwBufferLength,
- LPWSAQUERYSETW lpqsResults);
-
-extern INT WSAAPI
-_org_WSALookupServiceEnd(HANDLE hLookup);
-
-extern int WSAAPI
-_org_getaddrinfo(const char *nodename, const char *servname,
- LPVOID hints, LPVOID res);
-
-extern void WSAAPI
-_org_freeaddrinfo(LPVOID aip);
-
-extern int WSAAPI
-_org_getnameinfo(LPVOID sa, DWORD salen, char* host, DWORD hostlen,
- char* serv, DWORD servlen, int flags);
-
-#endif /* _DLLDEF_H */
diff --git a/contrib/idn/idnkit-1.0-src/wsock/wsock20/dllfunc.c b/contrib/idn/idnkit-1.0-src/wsock/wsock20/dllfunc.c
deleted file mode 100644
index cec2d065..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/wsock20/dllfunc.c
+++ /dev/null
@@ -1,592 +0,0 @@
-/*
- * dllfunc.c - wrapper functions
- */
-
-/*
- * Copyright (c) 2000,2002 Japan Network Information Center.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <windows.h>
-#include <svcguid.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <process.h>
-
-#include "dlldef.h"
-
-#ifndef EAI_MEMORY
-#define EAI_MEMORY WSA_NOT_ENOUGH_MEMORY
-#endif
-#ifndef EAI_FAIL
-#define EAI_FAIL WSANO_RECOVERY
-#endif
-
-static GUID guid_habn = SVCID_INET_HOSTADDRBYNAME;
-static GUID guid_habis = SVCID_INET_HOSTADDRBYINETSTRING;
-
-#define SVCID_IS_HABN(p) (memcmp(p, &guid_habn, sizeof(GUID)) == 0)
-#define SVCID_IS_HABIS(p) (memcmp(p, &guid_habis, sizeof(GUID)) == 0)
-
-/*
- * Rename addrinfo to my_addrinfo for avoiding possible name conflict.
- */
-struct my_addrinfo {
- int ai_flags;
- int ai_family;
- int ai_socktype;
- int ai_protocol;
- size_t ai_addrlen;
- char *ai_canonname;
- struct sockaddr *ai_addr;
- struct my_addrinfo *ai_next;
-};
-
-typedef struct obj_lock {
- void *key;
- struct obj_lock *next;
-} obj_lock_t;
-
-#define OBJLOCKHASH_SIZE 127
-static obj_lock_t *obj_lock_hash[OBJLOCKHASH_SIZE];
-
-static int obj_hash(void *key);
-static int obj_islocked(void *key);
-static void obj_lock(void *key);
-static void obj_unlock(void *key);
-static char *decode_name_dynamic(const char *name, idn_resconf_t idnctx);
-static struct my_addrinfo
- *copy_decode_addrinfo_dynamic(struct my_addrinfo *aip,
- idn_resconf_t idnctx);
-static void free_copied_addrinfo(struct my_addrinfo *aip);
-
-WRAPPER_EXPORT int WSAAPI
-gethostname(char FAR * name, int namelen) {
- int ret;
-
- TRACE("ENTER gethostname\n");
- ret = _org_gethostname(name, namelen);
- TRACE("LEAVE gethostname %d <%-.100s>\n", ret, name);
-
- return (ret);
-}
-
-WRAPPER_EXPORT struct hostent FAR * WSAAPI
-gethostbyname(const char FAR * name) {
- struct hostent FAR *ret;
- char nbuff[256];
- char hbuff[256];
- BOOL stat;
- idn_resconf_t encodeCtx;
-
- TRACE("ENTER gethostbyname <%-.100s>\n",
- (name != NULL ? name : "NULL"));
-
- encodeCtx = idnGetContext();
-
- if (encodeCtx == NULL || name == NULL) {
- ret = _org_gethostbyname(name);
- } else {
- stat = idnConvReq(encodeCtx, name, nbuff, sizeof(nbuff));
- if (stat == FALSE) {
- TRACE("idnConvReq failed\n");
- ret = NULL;
- } else {
- TRACE("Converted Name <%s>\n",
- dumpName(nbuff, hbuff, sizeof(hbuff)));
- ret = _org_gethostbyname(nbuff);
- }
- }
-
- if (ret != NULL && encodeCtx != NULL) {
- TRACE("Resulting Name <%s>\n",
- dumpName(ret->h_name, hbuff, sizeof(hbuff)));
- stat = idnConvRsp(encodeCtx, ret->h_name,
- nbuff, sizeof(nbuff));
- if (stat == FALSE) {
- TRACE("Decoding failed - return the name verbatim\n");
- } else {
- TRACE("Converted Back <%s>\n",
- dumpName(nbuff, hbuff, sizeof(hbuff)));
- strcpy(ret->h_name, nbuff);
- }
- }
-
- if (ret == NULL) {
- TRACE("LEAVE gethostbyname NULL\n");
- } else {
- TRACE("LEAVE gethostbyname <%s>\n",
- dumpHost(ret, hbuff, sizeof(hbuff)));
- }
- return (ret);
-}
-
-WRAPPER_EXPORT struct hostent FAR * WSAAPI
-gethostbyaddr(const char FAR * addr, int len, int type) {
- struct hostent FAR *ret;
- char nbuff[256];
- char abuff[256];
- char hbuff[256];
- BOOL stat;
- idn_resconf_t encodeCtx;
-
- TRACE("ENTER gethostbyaddr <%s>\n",
- dumpAddr(addr, len, abuff, sizeof(abuff)));
-
- encodeCtx = idnGetContext();
-
- ret = _org_gethostbyaddr(addr, len, type);
-
- if (ret != NULL && encodeCtx != NULL) {
- TRACE("Resulting Name <%s>\n",
- dumpName(ret->h_name, hbuff, sizeof(hbuff)));
- stat = idnConvRsp(encodeCtx, ret->h_name,
- nbuff, sizeof(nbuff));
- if (stat == FALSE) {
- TRACE("Decoding failed - return the name verbatim\n");
- } else {
- TRACE("Converted Back <%s>\n",
- dumpName(nbuff, hbuff, sizeof(hbuff)));
- strcpy(ret->h_name, nbuff);
- }
- }
-
- if (ret == NULL) {
- TRACE("LEAVE gethostbyaddr NULL\n");
- } else {
- TRACE("LEAVE gethostbyaddr <%s>\n",
- dumpHost(ret, hbuff, sizeof(hbuff)));
- }
- return (ret);
-}
-
-WRAPPER_EXPORT HANDLE WSAAPI
-WSAAsyncGetHostByName(HWND hWnd, u_int wMsg,
- const char FAR * name, char FAR * buf, int buflen)
-{
- HANDLE ret;
- char nbuff[256];
- char hbuff[256];
- idn_resconf_t encodeCtx;
-
- TRACE("ENTER WSAAsyncGetHostByName <%-.100s>\n", name);
-
- encodeCtx = idnGetContext();
-
- if (encodeCtx == NULL || name == NULL) {
- ret = _org_WSAAsyncGetHostByName(hWnd, wMsg,
- name, buf, buflen);
- } else {
- idnHook(hWnd, wMsg, buf, encodeCtx);
- idnConvReq(encodeCtx, name, nbuff, sizeof(nbuff));
- TRACE("Converted Name <%s>\n",
- dumpName(nbuff, hbuff, sizeof(hbuff)));
- ret = _org_WSAAsyncGetHostByName(hWnd, wMsg, nbuff,
- buf, buflen);
- }
-
- TRACE("LEAVE WSAAsyncGetHostByName HANDLE %08x\n", ret);
-
- return (ret);
-}
-
-WRAPPER_EXPORT HANDLE WSAAPI
-WSAAsyncGetHostByAddr(HWND hWnd, u_int wMsg, const char FAR * addr,
- int len, int type, char FAR * buf, int buflen)
-{
- HANDLE ret;
- char abuff[256];
- idn_resconf_t encodeCtx;
-
- encodeCtx = idnGetContext();
-
- if (encodeCtx != NULL) {
- idnHook(hWnd, wMsg, buf, encodeCtx);
- }
-
- TRACE("ENTER WSAAsyncGetHostByAddr <%s>\n",
- dumpAddr(addr, len, abuff, sizeof(abuff)));
- ret = _org_WSAAsyncGetHostByAddr(hWnd, wMsg, addr, len, type,
- buf, buflen);
- TRACE("LEAVE WSAAsyncGetHostByAddr HANDLE %08x\n", ret);
-
- return (ret);
-}
-
-WRAPPER_EXPORT INT WSAAPI
-WSALookupServiceBeginA(LPWSAQUERYSETA lpqsRestrictions,
- DWORD dwControlFlags, LPHANDLE lphLookup)
-{
- INT ret;
- char nbuff[256];
- char hbuff[256];
- LPSTR name = lpqsRestrictions->lpszServiceInstanceName;
- LPGUID class = lpqsRestrictions->lpServiceClassId;
- idn_resconf_t encodeCtx;
-
- TRACE("ENTER WSALookupServiceBeginA <%-.100s>\n",
- name == NULL ? "<NULL>" : name);
-
- encodeCtx = idnGetContext();
-
- if (name != NULL && encodeCtx != NULL && SVCID_IS_HABN(class) == 0) {
- idnConvReq(encodeCtx, name, nbuff, sizeof(nbuff));
- TRACE("Converted Name <%s>\n",
- dumpName(nbuff, hbuff, sizeof(hbuff)));
- /* strcpy(lpqsRestrictions->lpszQueryString, nbuff); */
- lpqsRestrictions->lpszServiceInstanceName = nbuff;
- }
- ret = _org_WSALookupServiceBeginA(lpqsRestrictions,
- dwControlFlags, lphLookup);
- TRACE("LEAVE WSALookupServiceBeginA %d\n", ret);
-
- return (ret);
-}
-
-WRAPPER_EXPORT INT WSAAPI
-WSALookupServiceNextA(HANDLE hLookup, DWORD dwControlFlags,
- LPDWORD lpdwBufferLength, LPWSAQUERYSETA lpqsResults)
-{
- INT ret;
- char nbuff[256];
- char hbuff[256];
- LPGUID class;
- idn_resconf_t encodeCtx;
-
- TRACE("ENTER WSALookupServiceNextA\n");
-
- encodeCtx = idnGetContext();
-
- ret = _org_WSALookupServiceNextA(hLookup, dwControlFlags,
- lpdwBufferLength, lpqsResults);
- class = lpqsResults->lpServiceClassId;
-
- if (ret == 0 &&
- encodeCtx != NULL &&
- (dwControlFlags & LUP_RETURN_NAME) &&
- (SVCID_IS_HABN(class) || SVCID_IS_HABIS(class))) {
- TRACE("Resulting Name <%s>\n",
- dumpName(lpqsResults->lpszServiceInstanceName,
- hbuff, sizeof(hbuff)));
- if (idnConvRsp(encodeCtx,
- lpqsResults->lpszServiceInstanceName,
- nbuff, sizeof(nbuff)) == FALSE) {
- TRACE("Decoding failed - return the name verbatim\n");
- } else {
- TRACE("Converted Back <%s>\n",
- dumpName(nbuff, hbuff, sizeof(hbuff)));
- strcpy(lpqsResults->lpszServiceInstanceName, nbuff);
- }
- }
- TRACE("LEAVE WSALookupServiceNextA %d <%s>\n", ret, nbuff);
-
- return (ret);
-}
-
-WRAPPER_EXPORT INT WSAAPI
-WSALookupServiceBeginW(LPWSAQUERYSETW lpqsRestrictions,
- DWORD dwControlFlags, LPHANDLE lphLookup)
-{
- INT ret;
-
- TRACE("ENTER WSALookupServiceBeginW\n");
- ret = _org_WSALookupServiceBeginW(lpqsRestrictions,
- dwControlFlags,lphLookup);
- TRACE("LEAVE WSALookupServiceBeginW %d\n", ret);
-
- return (ret);
-}
-
-WRAPPER_EXPORT INT WSAAPI
-WSALookupServiceNextW(HANDLE hLookup, DWORD dwControlFlags,
- LPDWORD lpdwBufferLength, LPWSAQUERYSETW lpqsResults)
-{
- INT ret;
-
- TRACE("ENTER WSALookupServiceNextW\n");
- ret = _org_WSALookupServiceNextW(hLookup, dwControlFlags,
- lpdwBufferLength, lpqsResults);
- TRACE("LEAVE WSALookupServiceNextW %d\n", ret);
-
- return (ret);
-}
-
-WRAPPER_EXPORT INT WSAAPI
-WSALookupServiceEnd(HANDLE hLookup) {
- INT ret;
-
- TRACE("ENTER WSALookupServiceEnd\n");
- ret = _org_WSALookupServiceEnd(hLookup);
- TRACE("LEAVE WSALookupServiceEnd %d\n", ret);
-
- return (ret);
-}
-
-static int
-obj_hash(void *key) {
- /*
- * Hash function for obj_*.
- * 'key' is supposed to be an address.
- */
- unsigned long v = (unsigned long)key;
-
- return ((v >> 3) % OBJLOCKHASH_SIZE);
-}
-
-static int
-obj_islocked(void *key)
-{
- /*
- * Check if the object specified by 'key' is locked.
- * Return 1 if so, 0 otherwise.
- */
- int h = obj_hash(key);
- obj_lock_t *olp = obj_lock_hash[h];
-
- while (olp != NULL) {
- if (olp->key == key)
- return (1);
- olp = olp->next;
- }
- return (0);
-}
-
-static void
-obj_lock(void *key)
-{
- /*
- * Lock an object specified by 'key'.
- */
- int h = obj_hash(key);
- obj_lock_t *olp;
-
- olp = malloc(sizeof(obj_lock_t));
- if (olp != NULL) {
- olp->key = key;
- olp->next = obj_lock_hash[h];
- obj_lock_hash[h] = olp;
- }
-}
-
-static void
-obj_unlock(void *key)
-{
- /*
- * Unlock an object specified by 'key'.
- */
- int h = obj_hash(key);
- obj_lock_t *olp, *olp0;
-
- olp = obj_lock_hash[h];
- olp0 = NULL;
- while (olp != NULL) {
- if (olp->key == key) {
- if (olp0 == NULL)
- obj_lock_hash[h] = olp->next;
- else
- olp0->next = olp->next;
- free(olp);
- return;
- }
- olp0 = olp;
- olp = olp->next;
- }
-}
-
-static char *
-decode_name_dynamic(const char *name, idn_resconf_t idnctx) {
- BOOL stat;
- char buf[256], tmp[256];
- char *s;
-
- if (idnConvRsp(idnctx, name, buf, sizeof(buf)) == TRUE) {
- TRACE("Converted Back <%s>\n",
- dumpName(buf, tmp, sizeof(tmp)));
- name = buf;
- } else {
- TRACE("Decoding failed - return the name verbatim\n");
- }
- s = malloc(strlen(name) + 1);
- if (s == NULL)
- return (NULL);
- else
- return (strcpy(s, name));
-}
-
-static struct my_addrinfo *
-copy_decode_addrinfo_dynamic(struct my_addrinfo *aip, idn_resconf_t idnctx)
-{
- struct my_addrinfo *newaip;
-
- if (aip == NULL)
- return (NULL);
-
- newaip = malloc(sizeof(struct my_addrinfo) + aip->ai_addrlen);
- if (newaip == NULL)
- return (NULL);
-
- *newaip = *aip;
- newaip->ai_addr = (struct sockaddr *)(newaip + 1);
- memcpy(newaip->ai_addr, aip->ai_addr, aip->ai_addrlen);
-
- if (newaip->ai_canonname != NULL)
- newaip->ai_canonname = decode_name_dynamic(aip->ai_canonname,
- idnctx);
-
- newaip->ai_next = copy_decode_addrinfo_dynamic(aip->ai_next, idnctx);
- return (newaip);
-}
-
-static void
-free_copied_addrinfo(struct my_addrinfo *aip) {
- while (aip != NULL) {
- struct my_addrinfo *next = aip->ai_next;
-
- if (aip->ai_canonname != NULL)
- free(aip->ai_canonname);
- free(aip);
- aip = next;
- }
-}
-
-WRAPPER_EXPORT int WSAAPI
-getaddrinfo(const char *nodename, const char *servname,
- const struct my_addrinfo *hints, struct my_addrinfo **res)
-{
- char namebuf[256];
- BOOL stat;
- struct my_addrinfo *aip;
- int err;
- idn_resconf_t encodeCtx;
-
- TRACE("ENTER getaddrinfo <%-.100s>\n", nodename ? nodename : "NULL");
-
- encodeCtx = idnGetContext();
-
- if (nodename == NULL || encodeCtx == NULL) {
- TRACE("conversion unnecessary\n");
- err = _org_getaddrinfo(nodename, servname, hints, res);
- } else {
- stat = idnConvReq(encodeCtx, nodename,
- namebuf, sizeof(namebuf));
- if (stat == TRUE) {
- nodename = namebuf;
- TRACE("Converted Name <%-.100s>\n", namebuf);
- }
-
- err = _org_getaddrinfo(nodename, servname, hints, &aip);
- if (err == 0 && aip != NULL) {
- *res = copy_decode_addrinfo_dynamic(aip, encodeCtx);
- if (*res == NULL)
- err = EAI_FAIL;
- else
- obj_lock(*res);
- if (aip != NULL)
- _org_freeaddrinfo(aip);
- }
- }
-
- TRACE("LEAVE getaddrinfo %d\n", err);
- return (err);
-}
-
-WRAPPER_EXPORT void WSAAPI
-freeaddrinfo(struct my_addrinfo *aip) {
- TRACE("ENTER freeaddrinfo aip=%p\n", (void *)aip);
-
- if (obj_islocked(aip)) {
- /*
- * We allocated the data.
- */
- obj_unlock(aip);
- free_copied_addrinfo(aip);
- } else {
- /*
- * It was allocated the original getaddrinfo().
- */
- TRACE("Not allocated by the wrapper\n");
- _org_freeaddrinfo(aip);
- }
- TRACE("LEAVE freeaddrinfo\n");
-}
-
-WRAPPER_EXPORT int WSAAPI
-getnameinfo(const struct sockaddr *sa, DWORD salen,
- char *host, DWORD hostlen, char *serv,
- DWORD servlen, int flags)
-{
- char name[256];
- size_t namelen = sizeof(name);
- int code;
- BOOL stat;
- idn_resconf_t encodeCtx;
-
- TRACE("ENTER getnameinfo\n");
-
- encodeCtx = idnGetContext();
-
- if (host == NULL || hostlen == 0 || encodeCtx == NULL) {
- TRACE("conversion unnecessary\n");
- code = _org_getnameinfo(sa, salen, host, hostlen,
- serv, servlen, flags);
- } else {
- code = _org_getnameinfo(sa, salen, name, namelen,
- serv, servlen, flags);
- if (code == 0 && name[0] != '\0') {
- stat = idnConvRsp(encodeCtx, name, host, hostlen);
- if (stat == FALSE) {
- TRACE("Decoding failed - return the name verbatim\n");
- if (strlen(name) >= hostlen) {
- code = EAI_FAIL;
- } else {
- strcpy(host, name);
- }
- } else {
- TRACE("Converted Back <%s>\n",
- dumpName(host, name, sizeof(name)));
- }
- }
- }
-
- TRACE("LEAVE getnameinfo %d\n", code);
- return (code);
-}
diff --git a/contrib/idn/idnkit-1.0-src/wsock/wsock20/dllload.c b/contrib/idn/idnkit-1.0-src/wsock/wsock20/dllload.c
deleted file mode 100644
index 0f1257e7..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/wsock20/dllload.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * dllload.c - load original entries
- */
-
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <windows.h>
-#include <winsock2.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <process.h>
-
-#include "dlldef.h"
-
-/*
- * Manages original DLL
- */
-
-#define DLLHANDLE idnWinsockHandle()
-
-#include "dllstub.c"
diff --git a/contrib/idn/idnkit-1.0-src/wsock/wsock20/dllmain.c b/contrib/idn/idnkit-1.0-src/wsock/wsock20/dllmain.c
deleted file mode 100644
index c6609bc3..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/wsock20/dllmain.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * dllmain.c - entry for DLL
- */
-
-/*
- * Copyright (c) 2000 Japan Network Information Center. All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set forth bellow.
- *
- * LICENSE TERMS AND CONDITIONS
- *
- * The following License Terms and Conditions apply, unless a different
- * license is obtained from Japan Network Information Center ("JPNIC"),
- * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
- * Chiyoda-ku, Tokyo 101-0047, Japan.
- *
- * 1. Use, Modification and Redistribution (including distribution of any
- * modified or derived work) in source and/or binary forms is permitted
- * under this License Terms and Conditions.
- *
- * 2. Redistribution of source code must retain the copyright notices as they
- * appear in each source code file, this License Terms and Conditions.
- *
- * 3. Redistribution in binary form must reproduce the Copyright Notice,
- * this License Terms and Conditions, in the documentation and/or other
- * materials provided with the distribution. For the purposes of binary
- * distribution the "Copyright Notice" refers to the following language:
- * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
- *
- * 4. The name of JPNIC may not be used to endorse or promote products
- * derived from this Software without specific prior written approval of
- * JPNIC.
- *
- * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <windows.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <process.h>
-
-#include "dlldef.h"
-
-/*
- * Control Variables
- */
-
-int procPid = 0;
-
-static char procExe[256];
-
-/*
- * DLL Entry
- */
-
-BOOL APIENTRY
-DllMain(HMODULE hmod, DWORD reason, LPVOID *resv) {
- switch (reason) {
- case DLL_PROCESS_ATTACH:
- procPid = getpid();
- GetModuleFileName(NULL, procExe, 256);
-
- idnLogInit("ws20");
- idnHookInit();
-
- TRACE("Attached to Process <%s>\n", procExe);
- return (idnWinsockVersion("2.0"));
-
- case DLL_PROCESS_DETACH:
- idnConvDone(idnGetContext());
- idnHookDone();
- TRACE("Detached from Process\n");
- idnLogFinish();
- break;
-
- case DLL_THREAD_ATTACH:
- break;
- case DLL_THREAD_DETACH:
- break;
- }
-
- return (TRUE);
-}
diff --git a/contrib/idn/idnkit-1.0-src/wsock/wsock20/dllstub.c b/contrib/idn/idnkit-1.0-src/wsock/wsock20/dllstub.c
deleted file mode 100644
index f3e695ed..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/wsock20/dllstub.c
+++ /dev/null
@@ -1,2168 +0,0 @@
-/* $Id: dllstub.c,v 1.1 2003/06/04 00:27:51 marka Exp $ */
-
-SOCKET PASCAL
-accept(SOCKET a0, struct sockaddr* a1, int* a2)
-{
- static SOCKET (PASCAL *fp)(SOCKET a0, struct sockaddr* a1, int* a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub accept() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "accept")) == NULL) {
- FATAL("cannot find entry accept (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-int PASCAL
-bind(SOCKET a0, const struct sockaddr* a1, int a2)
-{
- static int (PASCAL *fp)(SOCKET a0, const struct sockaddr* a1, int a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub bind() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "bind")) == NULL) {
- FATAL("cannot find entry bind (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-int PASCAL
-closesocket(SOCKET a0)
-{
- static int (PASCAL *fp)(SOCKET a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub closesocket() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "closesocket")) == NULL) {
- FATAL("cannot find entry closesocket (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-int PASCAL
-connect(SOCKET a0, const struct sockaddr* a1, int a2)
-{
- static int (PASCAL *fp)(SOCKET a0, const struct sockaddr* a1, int a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub connect() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "connect")) == NULL) {
- FATAL("cannot find entry connect (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-int PASCAL
-getpeername(SOCKET a0, struct sockaddr* a1, int* a2)
-{
- static int (PASCAL *fp)(SOCKET a0, struct sockaddr* a1, int* a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub getpeername() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "getpeername")) == NULL) {
- FATAL("cannot find entry getpeername (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-int PASCAL
-getsockname(SOCKET a0, struct sockaddr* a1, int* a2)
-{
- static int (PASCAL *fp)(SOCKET a0, struct sockaddr* a1, int* a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub getsockname() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "getsockname")) == NULL) {
- FATAL("cannot find entry getsockname (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-int PASCAL
-getsockopt(SOCKET a0, int a1, int a2, char* a3, int* a4)
-{
- static int (PASCAL *fp)(SOCKET a0, int a1, int a2, char* a3, int* a4);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub getsockopt() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "getsockopt")) == NULL) {
- FATAL("cannot find entry getsockopt (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4);
-}
-
-u_long PASCAL
-htonl(u_long a0)
-{
- static u_long (PASCAL *fp)(u_long a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub htonl() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "htonl")) == NULL) {
- FATAL("cannot find entry htonl (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-u_short PASCAL
-htons(u_short a0)
-{
- static u_short (PASCAL *fp)(u_short a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub htons() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "htons")) == NULL) {
- FATAL("cannot find entry htons (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-int PASCAL
-ioctlsocket(SOCKET a0, long a1, u_long * a2)
-{
- static int (PASCAL *fp)(SOCKET a0, long a1, u_long * a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub ioctlsocket() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "ioctlsocket")) == NULL) {
- FATAL("cannot find entry ioctlsocket (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-unsigned long PASCAL
-inet_addr(const char* a0)
-{
- static unsigned long (PASCAL *fp)(const char* a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub inet_addr() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "inet_addr")) == NULL) {
- FATAL("cannot find entry inet_addr (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
- char * PASCAL
-inet_ntoa(struct in_addr a0)
-{
- static char * (PASCAL *fp)(struct in_addr a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub inet_ntoa() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "inet_ntoa")) == NULL) {
- FATAL("cannot find entry inet_ntoa (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-int PASCAL
-listen(SOCKET a0, int a1)
-{
- static int (PASCAL *fp)(SOCKET a0, int a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub listen() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "listen")) == NULL) {
- FATAL("cannot find entry listen (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-u_long PASCAL
-ntohl(u_long a0)
-{
- static u_long (PASCAL *fp)(u_long a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub ntohl() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "ntohl")) == NULL) {
- FATAL("cannot find entry ntohl (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-u_short PASCAL
-ntohs(u_short a0)
-{
- static u_short (PASCAL *fp)(u_short a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub ntohs() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "ntohs")) == NULL) {
- FATAL("cannot find entry ntohs (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-int PASCAL
-recv(SOCKET a0, char* a1, int a2, int a3)
-{
- static int (PASCAL *fp)(SOCKET a0, char* a1, int a2, int a3);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub recv() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "recv")) == NULL) {
- FATAL("cannot find entry recv (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3);
-}
-
-int PASCAL
-recvfrom(SOCKET a0, char* a1, int a2, int a3, struct sockaddr* a4, int* a5)
-{
- static int (PASCAL *fp)(SOCKET a0, char* a1, int a2, int a3, struct sockaddr* a4, int* a5);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub recvfrom() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "recvfrom")) == NULL) {
- FATAL("cannot find entry recvfrom (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5);
-}
-
-int PASCAL
-select(int a0, fd_set* a1, fd_set* a2, fd_set* a3, const struct timeval* a4)
-{
- static int (PASCAL *fp)(int a0, fd_set* a1, fd_set* a2, fd_set* a3, const struct timeval* a4);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub select() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "select")) == NULL) {
- FATAL("cannot find entry select (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4);
-}
-
-int PASCAL
-send(SOCKET a0, const char* a1, int a2, int a3)
-{
- static int (PASCAL *fp)(SOCKET a0, const char* a1, int a2, int a3);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub send() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "send")) == NULL) {
- FATAL("cannot find entry send (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3);
-}
-
-int PASCAL
-sendto(SOCKET a0, const char* a1, int a2, int a3, const struct sockaddr* a4, int a5)
-{
- static int (PASCAL *fp)(SOCKET a0, const char* a1, int a2, int a3, const struct sockaddr* a4, int a5);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub sendto() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "sendto")) == NULL) {
- FATAL("cannot find entry sendto (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5);
-}
-
-int PASCAL
-setsockopt(SOCKET a0, int a1, int a2, const char* a3, int a4)
-{
- static int (PASCAL *fp)(SOCKET a0, int a1, int a2, const char* a3, int a4);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub setsockopt() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "setsockopt")) == NULL) {
- FATAL("cannot find entry setsockopt (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4);
-}
-
-int PASCAL
-shutdown(SOCKET a0, int a1)
-{
- static int (PASCAL *fp)(SOCKET a0, int a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub shutdown() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "shutdown")) == NULL) {
- FATAL("cannot find entry shutdown (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-SOCKET PASCAL
-socket(int a0, int a1, int a2)
-{
- static SOCKET (PASCAL *fp)(int a0, int a1, int a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub socket() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "socket")) == NULL) {
- FATAL("cannot find entry socket (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-int PASCAL
-WSApSetPostRoutine(int a0)
-{
- static int (PASCAL *fp)(int a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSApSetPostRoutine() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSApSetPostRoutine")) == NULL) {
- FATAL("cannot find entry WSApSetPostRoutine (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-WSAEVENT WSAAPI
-WPUCompleteOverlappedRequest(SOCKET a0, LPWSAOVERLAPPED a1, DWORD a2, DWORD a3, LPINT a4)
-{
- static WSAEVENT (WSAAPI *fp)(SOCKET a0, LPWSAOVERLAPPED a1, DWORD a2, DWORD a3, LPINT a4);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WPUCompleteOverlappedRequest() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WPUCompleteOverlappedRequest")) == NULL) {
- FATAL("cannot find entry WPUCompleteOverlappedRequest (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4);
-}
-
-SOCKET WINAPI
-WSAAccept(SOCKET a0, struct sockaddr * a1, LPINT a2, LPCONDITIONPROC a3, DWORD a4)
-{
- static SOCKET (WINAPI *fp)(SOCKET a0, struct sockaddr * a1, LPINT a2, LPCONDITIONPROC a3, DWORD a4);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAAccept() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAAccept")) == NULL) {
- FATAL("cannot find entry WSAAccept (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4);
-}
-
-INT WINAPI
-WSAAddressToStringA(LPSOCKADDR a0, DWORD a1, LPWSAPROTOCOL_INFOA a2, LPSTR a3, LPDWORD a4)
-{
- static INT (WINAPI *fp)(LPSOCKADDR a0, DWORD a1, LPWSAPROTOCOL_INFOA a2, LPSTR a3, LPDWORD a4);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAAddressToStringA() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAAddressToStringA")) == NULL) {
- FATAL("cannot find entry WSAAddressToStringA (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4);
-}
-
-INT WINAPI
-WSAAddressToStringW(LPSOCKADDR a0, DWORD a1, LPWSAPROTOCOL_INFOW a2, LPWSTR a3, LPDWORD a4)
-{
- static INT (WINAPI *fp)(LPSOCKADDR a0, DWORD a1, LPWSAPROTOCOL_INFOW a2, LPWSTR a3, LPDWORD a4);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAAddressToStringW() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAAddressToStringW")) == NULL) {
- FATAL("cannot find entry WSAAddressToStringW (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4);
-}
-
-BOOL WINAPI
-WSACloseEvent(WSAEVENT a0)
-{
- static BOOL (WINAPI *fp)(WSAEVENT a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSACloseEvent() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSACloseEvent")) == NULL) {
- FATAL("cannot find entry WSACloseEvent (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-int WINAPI
-WSAConnect(SOCKET a0, const struct sockaddr * a1, int a2, LPWSABUF a3, LPWSABUF a4, LPQOS a5, LPQOS a6)
-{
- static int (WINAPI *fp)(SOCKET a0, const struct sockaddr * a1, int a2, LPWSABUF a3, LPWSABUF a4, LPQOS a5, LPQOS a6);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAConnect() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAConnect")) == NULL) {
- FATAL("cannot find entry WSAConnect (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5, a6);
-}
-
-WSAEVENT WINAPI
-WSACreateEvent(void)
-{
- static WSAEVENT (WINAPI *fp)(void);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSACreateEvent() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSACreateEvent")) == NULL) {
- FATAL("cannot find entry WSACreateEvent (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)();
-}
-
-int WINAPI
-WSADuplicateSocketA(SOCKET a0, DWORD a1, LPWSAPROTOCOL_INFOA a2)
-{
- static int (WINAPI *fp)(SOCKET a0, DWORD a1, LPWSAPROTOCOL_INFOA a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSADuplicateSocketA() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSADuplicateSocketA")) == NULL) {
- FATAL("cannot find entry WSADuplicateSocketA (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-int WINAPI
-WSADuplicateSocketW(SOCKET a0, DWORD a1, LPWSAPROTOCOL_INFOW a2)
-{
- static int (WINAPI *fp)(SOCKET a0, DWORD a1, LPWSAPROTOCOL_INFOW a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSADuplicateSocketW() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSADuplicateSocketW")) == NULL) {
- FATAL("cannot find entry WSADuplicateSocketW (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-INT WINAPI
-WSAEnumNameSpaceProvidersA(LPDWORD a0, LPWSANAMESPACE_INFOA a1)
-{
- static INT (WINAPI *fp)(LPDWORD a0, LPWSANAMESPACE_INFOA a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAEnumNameSpaceProvidersA() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAEnumNameSpaceProvidersA")) == NULL) {
- FATAL("cannot find entry WSAEnumNameSpaceProvidersA (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-INT WINAPI
-WSAEnumNameSpaceProvidersW(LPDWORD a0, LPWSANAMESPACE_INFOW a1)
-{
- static INT (WINAPI *fp)(LPDWORD a0, LPWSANAMESPACE_INFOW a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAEnumNameSpaceProvidersW() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAEnumNameSpaceProvidersW")) == NULL) {
- FATAL("cannot find entry WSAEnumNameSpaceProvidersW (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-int WINAPI
-WSAEnumNetworkEvents(SOCKET a0, WSAEVENT a1, LPWSANETWORKEVENTS a2)
-{
- static int (WINAPI *fp)(SOCKET a0, WSAEVENT a1, LPWSANETWORKEVENTS a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAEnumNetworkEvents() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAEnumNetworkEvents")) == NULL) {
- FATAL("cannot find entry WSAEnumNetworkEvents (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-int WINAPI
-WSAEnumProtocolsA(LPINT a0, LPWSAPROTOCOL_INFOA a1, LPDWORD a2)
-{
- static int (WINAPI *fp)(LPINT a0, LPWSAPROTOCOL_INFOA a1, LPDWORD a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAEnumProtocolsA() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAEnumProtocolsA")) == NULL) {
- FATAL("cannot find entry WSAEnumProtocolsA (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-int WINAPI
-WSAEnumProtocolsW(LPINT a0, LPWSAPROTOCOL_INFOW a1, LPDWORD a2)
-{
- static int (WINAPI *fp)(LPINT a0, LPWSAPROTOCOL_INFOW a1, LPDWORD a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAEnumProtocolsW() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAEnumProtocolsW")) == NULL) {
- FATAL("cannot find entry WSAEnumProtocolsW (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-int WINAPI
-WSAEventSelect(SOCKET a0, WSAEVENT a1, long a2)
-{
- static int (WINAPI *fp)(SOCKET a0, WSAEVENT a1, long a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAEventSelect() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAEventSelect")) == NULL) {
- FATAL("cannot find entry WSAEventSelect (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-BOOL WINAPI
-WSAGetOverlappedResult(SOCKET a0, LPWSAOVERLAPPED a1, LPDWORD a2, BOOL a3, LPDWORD a4)
-{
- static BOOL (WINAPI *fp)(SOCKET a0, LPWSAOVERLAPPED a1, LPDWORD a2, BOOL a3, LPDWORD a4);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAGetOverlappedResult() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAGetOverlappedResult")) == NULL) {
- FATAL("cannot find entry WSAGetOverlappedResult (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4);
-}
-
-BOOL WINAPI
-WSAGetQOSByName(SOCKET a0, LPWSABUF a1, LPQOS a2)
-{
- static BOOL (WINAPI *fp)(SOCKET a0, LPWSABUF a1, LPQOS a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAGetQOSByName() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAGetQOSByName")) == NULL) {
- FATAL("cannot find entry WSAGetQOSByName (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-INT WINAPI
-WSAGetServiceClassInfoA(LPGUID a0, LPGUID a1, LPDWORD a2, LPWSASERVICECLASSINFOA a3)
-{
- static INT (WINAPI *fp)(LPGUID a0, LPGUID a1, LPDWORD a2, LPWSASERVICECLASSINFOA a3);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAGetServiceClassInfoA() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAGetServiceClassInfoA")) == NULL) {
- FATAL("cannot find entry WSAGetServiceClassInfoA (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3);
-}
-
-INT WINAPI
-WSAGetServiceClassInfoW(LPGUID a0, LPGUID a1, LPDWORD a2, LPWSASERVICECLASSINFOW a3)
-{
- static INT (WINAPI *fp)(LPGUID a0, LPGUID a1, LPDWORD a2, LPWSASERVICECLASSINFOW a3);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAGetServiceClassInfoW() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAGetServiceClassInfoW")) == NULL) {
- FATAL("cannot find entry WSAGetServiceClassInfoW (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3);
-}
-
-INT WINAPI
-WSAGetServiceClassNameByClassIdA(LPGUID a0, LPSTR a1, LPDWORD a2)
-{
- static INT (WINAPI *fp)(LPGUID a0, LPSTR a1, LPDWORD a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAGetServiceClassNameByClassIdA() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAGetServiceClassNameByClassIdA")) == NULL) {
- FATAL("cannot find entry WSAGetServiceClassNameByClassIdA (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-INT WINAPI
-WSAGetServiceClassNameByClassIdW(LPGUID a0, LPWSTR a1, LPDWORD a2)
-{
- static INT (WINAPI *fp)(LPGUID a0, LPWSTR a1, LPDWORD a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAGetServiceClassNameByClassIdW() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAGetServiceClassNameByClassIdW")) == NULL) {
- FATAL("cannot find entry WSAGetServiceClassNameByClassIdW (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-int WINAPI
-WSAHtonl(SOCKET a0, unsigned long a1, unsigned long * a2)
-{
- static int (WINAPI *fp)(SOCKET a0, unsigned long a1, unsigned long * a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAHtonl() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAHtonl")) == NULL) {
- FATAL("cannot find entry WSAHtonl (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-int WINAPI
-WSAHtons(SOCKET a0, unsigned short a1, unsigned short * a2)
-{
- static int (WINAPI *fp)(SOCKET a0, unsigned short a1, unsigned short * a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAHtons() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAHtons")) == NULL) {
- FATAL("cannot find entry WSAHtons (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-INT WINAPI
-WSAInstallServiceClassA(LPWSASERVICECLASSINFOA a0)
-{
- static INT (WINAPI *fp)(LPWSASERVICECLASSINFOA a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAInstallServiceClassA() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAInstallServiceClassA")) == NULL) {
- FATAL("cannot find entry WSAInstallServiceClassA (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-INT WINAPI
-WSAInstallServiceClassW(LPWSASERVICECLASSINFOW a0)
-{
- static INT (WINAPI *fp)(LPWSASERVICECLASSINFOW a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAInstallServiceClassW() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAInstallServiceClassW")) == NULL) {
- FATAL("cannot find entry WSAInstallServiceClassW (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-int WINAPI
-WSAIoctl(SOCKET a0, DWORD a1, LPVOID a2, DWORD a3, LPVOID a4, DWORD a5, LPDWORD a6, LPWSAOVERLAPPED a7, LPWSAOVERLAPPED_COMPLETION_ROUTINE a8)
-{
- static int (WINAPI *fp)(SOCKET a0, DWORD a1, LPVOID a2, DWORD a3, LPVOID a4, DWORD a5, LPDWORD a6, LPWSAOVERLAPPED a7, LPWSAOVERLAPPED_COMPLETION_ROUTINE a8);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAIoctl() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAIoctl")) == NULL) {
- FATAL("cannot find entry WSAIoctl (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5, a6, a7, a8);
-}
-
- struct hostent * PASCAL
-_org_gethostbyaddr(const char* a0, int a1, int a2)
-{
- static struct hostent * (PASCAL *fp)(const char* a0, int a1, int a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub _org_gethostbyaddr() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "gethostbyaddr")) == NULL) {
- FATAL("cannot find entry gethostbyaddr (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
- struct hostent * PASCAL
-_org_gethostbyname(const char* a0)
-{
- static struct hostent * (PASCAL *fp)(const char* a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub _org_gethostbyname() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "gethostbyname")) == NULL) {
- FATAL("cannot find entry gethostbyname (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
- struct protoent * PASCAL
-getprotobyname(const char* a0)
-{
- static struct protoent * (PASCAL *fp)(const char* a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub getprotobyname() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "getprotobyname")) == NULL) {
- FATAL("cannot find entry getprotobyname (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
- struct protoent * PASCAL
-getprotobynumber(int a0)
-{
- static struct protoent * (PASCAL *fp)(int a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub getprotobynumber() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "getprotobynumber")) == NULL) {
- FATAL("cannot find entry getprotobynumber (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
- struct servent * PASCAL
-getservbyname(const char* a0, const char* a1)
-{
- static struct servent * (PASCAL *fp)(const char* a0, const char* a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub getservbyname() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "getservbyname")) == NULL) {
- FATAL("cannot find entry getservbyname (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
- struct servent * PASCAL
-getservbyport(int a0, const char* a1)
-{
- static struct servent * (PASCAL *fp)(int a0, const char* a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub getservbyport() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "getservbyport")) == NULL) {
- FATAL("cannot find entry getservbyport (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-int PASCAL
-_org_gethostname(char* a0, int a1)
-{
- static int (PASCAL *fp)(char* a0, int a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub _org_gethostname() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "gethostname")) == NULL) {
- FATAL("cannot find entry gethostname (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-SOCKET WINAPI
-WSAJoinLeaf(SOCKET a0, const struct sockaddr * a1, int a2, LPWSABUF a3, LPWSABUF a4, LPQOS a5, LPQOS a6, DWORD a7)
-{
- static SOCKET (WINAPI *fp)(SOCKET a0, const struct sockaddr * a1, int a2, LPWSABUF a3, LPWSABUF a4, LPQOS a5, LPQOS a6, DWORD a7);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAJoinLeaf() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAJoinLeaf")) == NULL) {
- FATAL("cannot find entry WSAJoinLeaf (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5, a6, a7);
-}
-
-INT WINAPI
-_org_WSALookupServiceBeginA(LPWSAQUERYSETA a0, DWORD a1, LPHANDLE a2)
-{
- static INT (WINAPI *fp)(LPWSAQUERYSETA a0, DWORD a1, LPHANDLE a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub _org_WSALookupServiceBeginA() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSALookupServiceBeginA")) == NULL) {
- FATAL("cannot find entry WSALookupServiceBeginA (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-INT WINAPI
-_org_WSALookupServiceBeginW(LPWSAQUERYSETW a0, DWORD a1, LPHANDLE a2)
-{
- static INT (WINAPI *fp)(LPWSAQUERYSETW a0, DWORD a1, LPHANDLE a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub _org_WSALookupServiceBeginW() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSALookupServiceBeginW")) == NULL) {
- FATAL("cannot find entry WSALookupServiceBeginW (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-INT WINAPI
-_org_WSALookupServiceEnd(HANDLE a0)
-{
- static INT (WINAPI *fp)(HANDLE a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub _org_WSALookupServiceEnd() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSALookupServiceEnd")) == NULL) {
- FATAL("cannot find entry WSALookupServiceEnd (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-INT WINAPI
-_org_WSALookupServiceNextA(HANDLE a0, DWORD a1, LPDWORD a2, LPWSAQUERYSETA a3)
-{
- static INT (WINAPI *fp)(HANDLE a0, DWORD a1, LPDWORD a2, LPWSAQUERYSETA a3);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub _org_WSALookupServiceNextA() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSALookupServiceNextA")) == NULL) {
- FATAL("cannot find entry WSALookupServiceNextA (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3);
-}
-
-INT WINAPI
-_org_WSALookupServiceNextW(HANDLE a0, DWORD a1, LPDWORD a2, LPWSAQUERYSETW a3)
-{
- static INT (WINAPI *fp)(HANDLE a0, DWORD a1, LPDWORD a2, LPWSAQUERYSETW a3);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub _org_WSALookupServiceNextW() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSALookupServiceNextW")) == NULL) {
- FATAL("cannot find entry WSALookupServiceNextW (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3);
-}
-
-int WINAPI
-WSANtohl(SOCKET a0, unsigned long a1, unsigned long * a2)
-{
- static int (WINAPI *fp)(SOCKET a0, unsigned long a1, unsigned long * a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSANtohl() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSANtohl")) == NULL) {
- FATAL("cannot find entry WSANtohl (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-int WINAPI
-WSANtohs(SOCKET a0, unsigned short a1, unsigned short * a2)
-{
- static int (WINAPI *fp)(SOCKET a0, unsigned short a1, unsigned short * a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSANtohs() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSANtohs")) == NULL) {
- FATAL("cannot find entry WSANtohs (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-int WSAAPI
-WSAProviderConfigChange(LPHANDLE a0, LPWSAOVERLAPPED a1, LPWSAOVERLAPPED_COMPLETION_ROUTINE a2)
-{
- static int (WSAAPI *fp)(LPHANDLE a0, LPWSAOVERLAPPED a1, LPWSAOVERLAPPED_COMPLETION_ROUTINE a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAProviderConfigChange() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAProviderConfigChange")) == NULL) {
- FATAL("cannot find entry WSAProviderConfigChange (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-int WINAPI
-WSARecv(SOCKET a0, LPWSABUF a1, DWORD a2, LPDWORD a3, LPDWORD a4, LPWSAOVERLAPPED a5, LPWSAOVERLAPPED_COMPLETION_ROUTINE a6)
-{
- static int (WINAPI *fp)(SOCKET a0, LPWSABUF a1, DWORD a2, LPDWORD a3, LPDWORD a4, LPWSAOVERLAPPED a5, LPWSAOVERLAPPED_COMPLETION_ROUTINE a6);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSARecv() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSARecv")) == NULL) {
- FATAL("cannot find entry WSARecv (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5, a6);
-}
-
-int WINAPI
-WSARecvDisconnect(SOCKET a0, LPWSABUF a1)
-{
- static int (WINAPI *fp)(SOCKET a0, LPWSABUF a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSARecvDisconnect() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSARecvDisconnect")) == NULL) {
- FATAL("cannot find entry WSARecvDisconnect (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-int WINAPI
-WSARecvFrom(SOCKET a0, LPWSABUF a1, DWORD a2, LPDWORD a3, LPDWORD a4, struct sockaddr * a5, LPINT a6, LPWSAOVERLAPPED a7, LPWSAOVERLAPPED_COMPLETION_ROUTINE a8)
-{
- static int (WINAPI *fp)(SOCKET a0, LPWSABUF a1, DWORD a2, LPDWORD a3, LPDWORD a4, struct sockaddr * a5, LPINT a6, LPWSAOVERLAPPED a7, LPWSAOVERLAPPED_COMPLETION_ROUTINE a8);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSARecvFrom() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSARecvFrom")) == NULL) {
- FATAL("cannot find entry WSARecvFrom (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5, a6, a7, a8);
-}
-
-INT WINAPI
-WSARemoveServiceClass(LPGUID a0)
-{
- static INT (WINAPI *fp)(LPGUID a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSARemoveServiceClass() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSARemoveServiceClass")) == NULL) {
- FATAL("cannot find entry WSARemoveServiceClass (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-BOOL WINAPI
-WSAResetEvent(WSAEVENT a0)
-{
- static BOOL (WINAPI *fp)(WSAEVENT a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAResetEvent() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAResetEvent")) == NULL) {
- FATAL("cannot find entry WSAResetEvent (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-int WINAPI
-WSASend(SOCKET a0, LPWSABUF a1, DWORD a2, LPDWORD a3, DWORD a4, LPWSAOVERLAPPED a5, LPWSAOVERLAPPED_COMPLETION_ROUTINE a6)
-{
- static int (WINAPI *fp)(SOCKET a0, LPWSABUF a1, DWORD a2, LPDWORD a3, DWORD a4, LPWSAOVERLAPPED a5, LPWSAOVERLAPPED_COMPLETION_ROUTINE a6);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSASend() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSASend")) == NULL) {
- FATAL("cannot find entry WSASend (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5, a6);
-}
-
-int WINAPI
-WSASendDisconnect(SOCKET a0, LPWSABUF a1)
-{
- static int (WINAPI *fp)(SOCKET a0, LPWSABUF a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSASendDisconnect() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSASendDisconnect")) == NULL) {
- FATAL("cannot find entry WSASendDisconnect (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-int WINAPI
-WSASendTo(SOCKET a0, LPWSABUF a1, DWORD a2, LPDWORD a3, DWORD a4, const struct sockaddr * a5, int a6, LPWSAOVERLAPPED a7, LPWSAOVERLAPPED_COMPLETION_ROUTINE a8)
-{
- static int (WINAPI *fp)(SOCKET a0, LPWSABUF a1, DWORD a2, LPDWORD a3, DWORD a4, const struct sockaddr * a5, int a6, LPWSAOVERLAPPED a7, LPWSAOVERLAPPED_COMPLETION_ROUTINE a8);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSASendTo() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSASendTo")) == NULL) {
- FATAL("cannot find entry WSASendTo (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5, a6, a7, a8);
-}
-
-BOOL WINAPI
-WSASetEvent(WSAEVENT a0)
-{
- static BOOL (WINAPI *fp)(WSAEVENT a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSASetEvent() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSASetEvent")) == NULL) {
- FATAL("cannot find entry WSASetEvent (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-INT WSAAPI
-WSASetServiceA(LPWSAQUERYSETA a0, WSAESETSERVICEOP a1, DWORD a2)
-{
- static INT (WSAAPI *fp)(LPWSAQUERYSETA a0, WSAESETSERVICEOP a1, DWORD a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSASetServiceA() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSASetServiceA")) == NULL) {
- FATAL("cannot find entry WSASetServiceA (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-INT WINAPI
-WSASetServiceW(LPWSAQUERYSETW a0, WSAESETSERVICEOP a1, DWORD a2)
-{
- static INT (WINAPI *fp)(LPWSAQUERYSETW a0, WSAESETSERVICEOP a1, DWORD a2);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSASetServiceW() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSASetServiceW")) == NULL) {
- FATAL("cannot find entry WSASetServiceW (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2);
-}
-
-SOCKET WINAPI
-WSASocketA(int a0, int a1, int a2, LPWSAPROTOCOL_INFOA a3, GROUP a4, DWORD a5)
-{
- static SOCKET (WINAPI *fp)(int a0, int a1, int a2, LPWSAPROTOCOL_INFOA a3, GROUP a4, DWORD a5);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSASocketA() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSASocketA")) == NULL) {
- FATAL("cannot find entry WSASocketA (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5);
-}
-
-SOCKET WINAPI
-WSASocketW(int a0, int a1, int a2, LPWSAPROTOCOL_INFOW a3, GROUP a4, DWORD a5)
-{
- static SOCKET (WINAPI *fp)(int a0, int a1, int a2, LPWSAPROTOCOL_INFOW a3, GROUP a4, DWORD a5);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSASocketW() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSASocketW")) == NULL) {
- FATAL("cannot find entry WSASocketW (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5);
-}
-
-INT WINAPI
-WSAStringToAddressA(LPSTR a0, INT a1, LPWSAPROTOCOL_INFOA a2, LPSOCKADDR a3, LPINT a4)
-{
- static INT (WINAPI *fp)(LPSTR a0, INT a1, LPWSAPROTOCOL_INFOA a2, LPSOCKADDR a3, LPINT a4);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAStringToAddressA() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAStringToAddressA")) == NULL) {
- FATAL("cannot find entry WSAStringToAddressA (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4);
-}
-
-INT WINAPI
-WSAStringToAddressW(LPWSTR a0, INT a1, LPWSAPROTOCOL_INFOW a2, LPSOCKADDR a3, LPINT a4)
-{
- static INT (WINAPI *fp)(LPWSTR a0, INT a1, LPWSAPROTOCOL_INFOW a2, LPSOCKADDR a3, LPINT a4);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAStringToAddressW() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAStringToAddressW")) == NULL) {
- FATAL("cannot find entry WSAStringToAddressW (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4);
-}
-
-DWORD WINAPI
-WSAWaitForMultipleEvents(DWORD a0, const WSAEVENT * a1, BOOL a2, DWORD a3, BOOL a4)
-{
- static DWORD (WINAPI *fp)(DWORD a0, const WSAEVENT * a1, BOOL a2, DWORD a3, BOOL a4);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAWaitForMultipleEvents() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAWaitForMultipleEvents")) == NULL) {
- FATAL("cannot find entry WSAWaitForMultipleEvents (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4);
-}
-
-int WINAPI
-WSCDeinstallProvider(LPGUID a0, LPINT a1)
-{
- static int (WINAPI *fp)(LPGUID a0, LPINT a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSCDeinstallProvider() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSCDeinstallProvider")) == NULL) {
- FATAL("cannot find entry WSCDeinstallProvider (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-int WINAPI
-WSCEnableNSProvider(LPGUID a0, BOOL a1)
-{
- static int (WINAPI *fp)(LPGUID a0, BOOL a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSCEnableNSProvider() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSCEnableNSProvider")) == NULL) {
- FATAL("cannot find entry WSCEnableNSProvider (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-int WINAPI
-WSCEnumProtocols(LPINT a0, LPWSAPROTOCOL_INFOW a1, LPDWORD a2, LPINT a3)
-{
- static int (WINAPI *fp)(LPINT a0, LPWSAPROTOCOL_INFOW a1, LPDWORD a2, LPINT a3);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSCEnumProtocols() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSCEnumProtocols")) == NULL) {
- FATAL("cannot find entry WSCEnumProtocols (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3);
-}
-
-int WINAPI
-WSCGetProviderPath(LPGUID a0, LPWSTR a1, LPINT a2, LPINT a3)
-{
- static int (WINAPI *fp)(LPGUID a0, LPWSTR a1, LPINT a2, LPINT a3);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSCGetProviderPath() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSCGetProviderPath")) == NULL) {
- FATAL("cannot find entry WSCGetProviderPath (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3);
-}
-
-int WINAPI
-WSCInstallNameSpace(LPWSTR a0, LPWSTR a1, DWORD a2, DWORD a3, LPGUID a4)
-{
- static int (WINAPI *fp)(LPWSTR a0, LPWSTR a1, DWORD a2, DWORD a3, LPGUID a4);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSCInstallNameSpace() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSCInstallNameSpace")) == NULL) {
- FATAL("cannot find entry WSCInstallNameSpace (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4);
-}
-
-int WINAPI
-WSCInstallProvider(const LPGUID a0, const LPWSTR a1, const LPWSAPROTOCOL_INFOW a2, DWORD a3, LPINT a4)
-{
- static int (WINAPI *fp)(const LPGUID a0, const LPWSTR a1, const LPWSAPROTOCOL_INFOW a2, DWORD a3, LPINT a4);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSCInstallProvider() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSCInstallProvider")) == NULL) {
- FATAL("cannot find entry WSCInstallProvider (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4);
-}
-
-int WINAPI
-WSCUnInstallNameSpace(LPGUID a0)
-{
- static int (WINAPI *fp)(LPGUID a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSCUnInstallNameSpace() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSCUnInstallNameSpace")) == NULL) {
- FATAL("cannot find entry WSCUnInstallNameSpace (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-int PASCAL
-WSAAsyncSelect(SOCKET a0, HWND a1, u_int a2, long a3)
-{
- static int (PASCAL *fp)(SOCKET a0, HWND a1, u_int a2, long a3);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAAsyncSelect() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAAsyncSelect")) == NULL) {
- FATAL("cannot find entry WSAAsyncSelect (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3);
-}
-
-HANDLE PASCAL
-_org_WSAAsyncGetHostByAddr(HWND a0, u_int a1, const char* a2, int a3, int a4, char* a5, int a6)
-{
- static HANDLE (PASCAL *fp)(HWND a0, u_int a1, const char* a2, int a3, int a4, char* a5, int a6);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub _org_WSAAsyncGetHostByAddr() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAAsyncGetHostByAddr")) == NULL) {
- FATAL("cannot find entry WSAAsyncGetHostByAddr (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5, a6);
-}
-
-HANDLE PASCAL
-_org_WSAAsyncGetHostByName(HWND a0, u_int a1, const char* a2, char* a3, int a4)
-{
- static HANDLE (PASCAL *fp)(HWND a0, u_int a1, const char* a2, char* a3, int a4);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub _org_WSAAsyncGetHostByName() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAAsyncGetHostByName")) == NULL) {
- FATAL("cannot find entry WSAAsyncGetHostByName (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4);
-}
-
-HANDLE PASCAL
-WSAAsyncGetProtoByNumber(HWND a0, u_int a1, int a2, char* a3, int a4)
-{
- static HANDLE (PASCAL *fp)(HWND a0, u_int a1, int a2, char* a3, int a4);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAAsyncGetProtoByNumber() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAAsyncGetProtoByNumber")) == NULL) {
- FATAL("cannot find entry WSAAsyncGetProtoByNumber (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4);
-}
-
-HANDLE PASCAL
-WSAAsyncGetProtoByName(HWND a0, u_int a1, const char* a2, char* a3, int a4)
-{
- static HANDLE (PASCAL *fp)(HWND a0, u_int a1, const char* a2, char* a3, int a4);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAAsyncGetProtoByName() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAAsyncGetProtoByName")) == NULL) {
- FATAL("cannot find entry WSAAsyncGetProtoByName (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4);
-}
-
-HANDLE PASCAL
-WSAAsyncGetServByPort(HWND a0, u_int a1, int a2, const char* a3, char* a4, int a5)
-{
- static HANDLE (PASCAL *fp)(HWND a0, u_int a1, int a2, const char* a3, char* a4, int a5);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAAsyncGetServByPort() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAAsyncGetServByPort")) == NULL) {
- FATAL("cannot find entry WSAAsyncGetServByPort (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5);
-}
-
-HANDLE PASCAL
-WSAAsyncGetServByName(HWND a0, u_int a1, const char* a2, const char* a3, char* a4, int a5)
-{
- static HANDLE (PASCAL *fp)(HWND a0, u_int a1, const char* a2, const char* a3, char* a4, int a5);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAAsyncGetServByName() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAAsyncGetServByName")) == NULL) {
- FATAL("cannot find entry WSAAsyncGetServByName (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5);
-}
-
-int PASCAL
-WSACancelAsyncRequest(HANDLE a0)
-{
- static int (PASCAL *fp)(HANDLE a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSACancelAsyncRequest() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSACancelAsyncRequest")) == NULL) {
- FATAL("cannot find entry WSACancelAsyncRequest (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-FARPROC PASCAL
-WSASetBlockingHook(FARPROC a0)
-{
- static FARPROC (PASCAL *fp)(FARPROC a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSASetBlockingHook() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSASetBlockingHook")) == NULL) {
- FATAL("cannot find entry WSASetBlockingHook (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0);
-}
-
-int PASCAL
-WSAUnhookBlockingHook(void)
-{
- static int (PASCAL *fp)(void);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAUnhookBlockingHook() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAUnhookBlockingHook")) == NULL) {
- FATAL("cannot find entry WSAUnhookBlockingHook (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)();
-}
-
-int PASCAL
-WSAGetLastError(void)
-{
- static int (PASCAL *fp)(void);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAGetLastError() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAGetLastError")) == NULL) {
- FATAL("cannot find entry WSAGetLastError (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)();
-}
-
-void PASCAL
-WSASetLastError(int a0)
-{
- static void (PASCAL *fp)(int a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSASetLastError() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSASetLastError")) == NULL) {
- FATAL("cannot find entry WSASetLastError (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- (*fp)(a0);
-}
-
-int PASCAL
-WSACancelBlockingCall(void)
-{
- static int (PASCAL *fp)(void);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSACancelBlockingCall() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSACancelBlockingCall")) == NULL) {
- FATAL("cannot find entry WSACancelBlockingCall (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)();
-}
-
-BOOL PASCAL
-WSAIsBlocking(void)
-{
- static BOOL (PASCAL *fp)(void);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAIsBlocking() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAIsBlocking")) == NULL) {
- FATAL("cannot find entry WSAIsBlocking (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)();
-}
-
-int PASCAL
-WSAStartup(WORD a0, LPWSADATA a1)
-{
- static int (PASCAL *fp)(WORD a0, LPWSADATA a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSAStartup() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSAStartup")) == NULL) {
- FATAL("cannot find entry WSAStartup (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-int PASCAL
-WSACleanup(void)
-{
- static int (PASCAL *fp)(void);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSACleanup() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSACleanup")) == NULL) {
- FATAL("cannot find entry WSACleanup (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)();
-}
-
-int PASCAL
-__WSAFDIsSet(SOCKET a0, fd_set* a1)
-{
- static int (PASCAL *fp)(SOCKET a0, fd_set* a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub __WSAFDIsSet() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "__WSAFDIsSet")) == NULL) {
- FATAL("cannot find entry __WSAFDIsSet (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-int PASCAL
-WEP(void)
-{
- static int (PASCAL *fp)(void);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WEP() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WEP")) == NULL) {
- FATAL("cannot find entry WEP (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)();
-}
-
-int PASCAL
-WSCWriteNameSpaceOrder(int a0, int a1)
-{
- static int (PASCAL *fp)(int a0, int a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSCWriteNameSpaceOrder() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSCWriteNameSpaceOrder")) == NULL) {
- FATAL("cannot find entry WSCWriteNameSpaceOrder (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-int PASCAL
-WSCWriteProviderOrder(LPDWORD a0, DWORD a1)
-{
- static int (PASCAL *fp)(LPDWORD a0, DWORD a1);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSCWriteProviderOrder() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSCWriteProviderOrder")) == NULL) {
- FATAL("cannot find entry WSCWriteProviderOrder (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1);
-}
-
-int PASCAL
-WSANSPIoctl(HANDLE a0, DWORD a1, LPVOID a2, DWORD a3, LPVOID a4, DWORD a5, LPDWORD a6, LPVOID a7)
-{
- static int (PASCAL *fp)(HANDLE a0, DWORD a1, LPVOID a2, DWORD a3, LPVOID a4, DWORD a5, LPDWORD a6, LPVOID a7);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSANSPIoctl() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSANSPIoctl")) == NULL) {
- FATAL("cannot find entry WSANSPIoctl (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5, a6, a7);
-}
-
-int PASCAL
-WSCUpdateProvider(LPGUID a0, const WCHAR FAR* a1, const LPVOID a2, DWORD a3, LPINT a4)
-{
- static int (PASCAL *fp)(LPGUID a0, const WCHAR FAR* a1, const LPVOID a2, DWORD a3, LPINT a4);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub WSCUpdateProvider() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "WSCUpdateProvider")) == NULL) {
- FATAL("cannot find entry WSCUpdateProvider (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4);
-}
-
-int PASCAL
-_org_getaddrinfo(const char* a0, const char* a1, LPVOID a2, LPVOID a3)
-{
- static int (PASCAL *fp)(const char* a0, const char* a1, LPVOID a2, LPVOID a3);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub _org_getaddrinfo() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "getaddrinfo")) == NULL) {
- FATAL("cannot find entry getaddrinfo (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3);
-}
-
-void PASCAL
-_org_freeaddrinfo(LPVOID a0)
-{
- static void (PASCAL *fp)(LPVOID a0);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub _org_freeaddrinfo() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "freeaddrinfo")) == NULL) {
- FATAL("cannot find entry freeaddrinfo (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- (*fp)(a0);
-}
-
-int PASCAL
-_org_getnameinfo(LPVOID a0, DWORD a1, char* a2, DWORD a3, char* a4, DWORD a5, int a6)
-{
- static int (PASCAL *fp)(LPVOID a0, DWORD a1, char* a2, DWORD a3, char* a4, DWORD a5, int a6);
-
-#ifdef DEBUG_STUB
- idnLogPrintf(idn_log_level_trace, "stub _org_getnameinfo() called\n");
-#endif
- if (fp == NULL) {
- void *p;
- if ((p = GetProcAddress(DLLHANDLE, "getnameinfo")) == NULL) {
- FATAL("cannot find entry getnameinfo (%d)\n", GetLastError());
- abort();
- }
- fp = p;
- }
- return (*fp)(a0, a1, a2, a3, a4, a5, a6);
-}
-
diff --git a/contrib/idn/idnkit-1.0-src/wsock/wsock20/make.wnt b/contrib/idn/idnkit-1.0-src/wsock/wsock20/make.wnt
deleted file mode 100644
index b5283aae..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/wsock20/make.wnt
+++ /dev/null
@@ -1,97 +0,0 @@
-#
-# Makefile for WinSock Wrapper (for WinSock 2.0)
-#
-
-# Copyright (c) 2000 Japan Network Information Center. All rights reserved.
-#
-# By using this file, you agree to the terms and conditions set forth bellow.
-#
-# LICENSE TERMS AND CONDITIONS
-#
-# The following License Terms and Conditions apply, unless a different
-# license is obtained from Japan Network Information Center ("JPNIC"),
-# a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
-# Chiyoda-ku, Tokyo 101-0047, Japan.
-#
-# 1. Use, Modification and Redistribution (including distribution of any
-# modified or derived work) in source and/or binary forms is permitted
-# under this License Terms and Conditions.
-#
-# 2. Redistribution of source code must retain the copyright notices as they
-# appear in each source code file, this License Terms and Conditions.
-#
-# 3. Redistribution in binary form must reproduce the Copyright Notice,
-# this License Terms and Conditions, in the documentation and/or other
-# materials provided with the distribution. For the purposes of binary
-# distribution the "Copyright Notice" refers to the following language:
-# "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved."
-#
-# 4. The name of JPNIC may not be used to endorse or promote products
-# derived from this Software without specific prior written approval of
-# JPNIC.
-#
-# 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-!include <win32.mak>
-
-SYSLIBS = $(libcdll) kernel32.lib advapi32.lib user32.lib
-
-#
-# Files to use
-#
-
-HDRS = dlldef.h ..\common\wrapcommon.h
-SRCS = dllmain.c dllload.obj dllfunc.c dllstub.c
-OBJS = dllmain.obj dllload.obj dllfunc.obj
-LIBS = ..\common\wrapcommon.lib ..\..\lib\idnkit.lib ..\..\win\iconv.lib
-
-cflags = $(cflags) -I..\..\include
-
-#
-# Targets to Build
-#
-
-TARGETS = ws2_32.dll
-
-all : $(TARGETS)
-
-ws2_32.dll : ws2_32.def $(OBJS) $(LIBS)
- $(link) $(dlllflags) /OUT:ws2_32.dll /DEF:ws2_32.def $(OBJS) $(LIBS) $(SYSLIBS)
-
-install : $(TARGETS)
- copy ws2_32.dll ..\bin
-
-clean : force
- -del *.obj
- -del *.lib
- -del *.dll
- -del *.exp
-
-#
-# Dependencies
-#
-
-dllmain.obj : dllmain.c $(HDRS)
- $(cc) $(cflags) $(cvarsdll) -DDEBUG $*.c
-
-dllload.obj : dllload.c $(HDRS)
- $(cc) $(cflags) $(cvarsdll) -DDEBUG $*.c
-
-dllfunc.obj : dllfunc.c dllstub.c $(HDRS)
- $(cc) $(cflags) $(cvarsdll) -DDEBUG $*.c
-
-ws2_32o.lib : ws2_32o.def
- LIB /DEF:ws2_32o.def /MACHINE:IX86
-
-force:
-
diff --git a/contrib/idn/idnkit-1.0-src/wsock/wsock20/ws2_32.def b/contrib/idn/idnkit-1.0-src/wsock/wsock20/ws2_32.def
deleted file mode 100644
index ba9a44ce..00000000
--- a/contrib/idn/idnkit-1.0-src/wsock/wsock20/ws2_32.def
+++ /dev/null
@@ -1,120 +0,0 @@
-;
-; Library Defition for idn wrapper's wrapper DLL
-;
-LIBRARY ws2_32
-DESCRIPTION "JPNIC idn warpper DLL for WS2_32"
-EXPORTS
- accept @1
- bind @2
- closesocket @3
- connect @4
- getpeername @5
- getsockname @6
- getsockopt @7
- htonl @8
- htons @9
- ioctlsocket @10
- inet_addr @11
- inet_ntoa @12
- listen @13
- ntohl @14
- ntohs @15
- recv @16
- recvfrom @17
- select @18
- send @19
- sendto @20
- setsockopt @21
- shutdown @22
- socket @23
- WSApSetPostRoutine @24
- WPUCompleteOverlappedRequest @25
- WSAAccept @26
- WSAAddressToStringA @27
- WSAAddressToStringW @28
- WSACloseEvent @29
- WSAConnect @30
- WSACreateEvent @31
- WSADuplicateSocketA @32
- WSADuplicateSocketW @33
- WSAEnumNameSpaceProvidersA @34
- WSAEnumNameSpaceProvidersW @35
- WSAEnumNetworkEvents @36
- WSAEnumProtocolsA @37
- WSAEnumProtocolsW @38
- WSAEventSelect @39
- WSAGetOverlappedResult @40
- WSAGetQOSByName @41
- WSAGetServiceClassInfoA @42
- WSAGetServiceClassInfoW @43
- WSAGetServiceClassNameByClassIdA @44
- WSAGetServiceClassNameByClassIdW @45
- WSAHtonl @46
- WSAHtons @47
- WSAInstallServiceClassA @48
- WSAInstallServiceClassW @49
- WSAIoctl @50
- gethostbyaddr @51
- gethostbyname @52
- getprotobyname @53
- getprotobynumber @54
- getservbyname @55
- getservbyport @56
- gethostname @57
- WSAJoinLeaf @58
- WSALookupServiceBeginA @59
- WSALookupServiceBeginW @60
- WSALookupServiceEnd @61
- WSALookupServiceNextA @62
- WSALookupServiceNextW @63
- WSANtohl @64
- WSANtohs @65
- WSAProviderConfigChange @66
- WSARecv @67
- WSARecvDisconnect @68
- WSARecvFrom @69
- WSARemoveServiceClass @70
- WSAResetEvent @71
- WSASend @72
- WSASendDisconnect @73
- WSASendTo @74
- WSASetEvent @75
- WSASetServiceA @76
- WSASetServiceW @77
- WSASocketA @78
- WSASocketW @79
- WSAStringToAddressA @80
- WSAStringToAddressW @81
- WSAWaitForMultipleEvents @82
- WSCDeinstallProvider @83
- WSCEnableNSProvider @84
- WSCEnumProtocols @85
- WSCGetProviderPath @86
- WSCInstallNameSpace @87
- WSCInstallProvider @88
- WSCUnInstallNameSpace @89
- WSCWriteNameSpaceOrder @90
- WSCWriteProviderOrder @91
- freeaddrinfo @94
- getaddrinfo @95
- getnameinfo @96
- WSAAsyncSelect @101
- WSAAsyncGetHostByAddr @102
- WSAAsyncGetHostByName @103
- WSAAsyncGetProtoByNumber @104
- WSAAsyncGetProtoByName @105
- WSAAsyncGetServByPort @106
- WSAAsyncGetServByName @107
- WSACancelAsyncRequest @108
- WSASetBlockingHook @109
- WSAUnhookBlockingHook @110
- WSAGetLastError @111
- WSASetLastError @112
- WSACancelBlockingCall @113
- WSAIsBlocking @114
- WSAStartup @115
- WSACleanup @116
- __WSAFDIsSet @151
- WEP @500
- WSANSPIoctl @600
- WSCUpdateProvider @601
diff --git a/contrib/kasp/README b/contrib/kasp/README
deleted file mode 100644
index fb897f10..00000000
--- a/contrib/kasp/README
+++ /dev/null
@@ -1,11 +0,0 @@
-This directory is for tools and scripts related to the OpenDNSSEC KASP
-("key and signature policy") format. Currently it only contains
-"kasp2policy.py", a python script for converting KASP key policy
-to the "dnssec.policy" format that is used by dnssec-keymgr.
-
-This depends on PLY (python lex/yacc) and on the "isc.dnskey" module in
-bin/python/isc.
-
-Basic test:
-$ python kasp2policy.py kasp.xml > policy.out
-$ diff policy.out policy.good
diff --git a/contrib/kasp/kasp.xml b/contrib/kasp/kasp.xml
deleted file mode 100644
index d94b0843..00000000
--- a/contrib/kasp/kasp.xml
+++ /dev/null
@@ -1,134 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- Sample KASP file to use for testing kasp2policy.py. -->
-<KASP>
- <Policy name="Policy1">
- <Description>A default policy that will
- amaze you and your friends</Description>
- <Signatures>
- <Resign>PT5M</Resign>
- <Refresh>PT5M</Refresh>
- <Validity>
- <Default>PT15M</Default>
- <Denial>PT15M</Denial>
- </Validity>
- <Jitter>PT2M</Jitter>
- <InceptionOffset>PT1M</InceptionOffset>
- </Signatures>
-
- <Denial>
- <NSEC>
- </NSEC>
- </Denial>
-
- <Keys>
- <!-- Parameters for both KSK and ZSK -->
- <TTL>PT1M</TTL>
- <RetireSafety>PT0S</RetireSafety>
- <PublishSafety>PT0S</PublishSafety>
-
- <!-- Parameters for KSK only -->
- <KSK>
- <Algorithm length="2048">5</Algorithm>
- <Lifetime>PT40M</Lifetime>
- <Repository>softHSM</Repository>
- <Standby>1</Standby>
- </KSK>
-
- <!-- Parameters for ZSK only -->
- <ZSK>
- <Algorithm length="2048">5</Algorithm>
- <Lifetime>PT25M</Lifetime>
- <Repository>softHSM</Repository>
- <Standby>1</Standby>
- </ZSK>
- </Keys>
-
- <Zone>
- <PropagationDelay>PT0S</PropagationDelay>
- <SOA>
- <TTL>PT0S</TTL>
- <Minimum>PT0S</Minimum>
- <Serial>unixtime</Serial>
- </SOA>
- </Zone>
-
- <Parent>
- <PropagationDelay>PT8M</PropagationDelay>
- <DS>
- <TTL>PT0S</TTL>
- </DS>
- <SOA>
- <TTL>PT0S</TTL>
- <Minimum>PT0S</Minimum>
- </SOA>
- </Parent>
- </Policy>
- <Policy name="Policy2">
- <Description>A default policy that will amaze you and your friends</Description>
- <Signatures>
- <Resign>PT7M</Resign>
- <Refresh>PT7M</Refresh>
- <Validity>
- <Default>PT15M</Default>
- <Denial>PT16M</Denial>
- </Validity>
- <Jitter>PT2M</Jitter>
- <InceptionOffset>PT1M</InceptionOffset>
- </Signatures>
-
- <Denial>
- <NSEC3>
- <Resalt>P120D</Resalt>
- <Hash>
- <Algorithm>1</Algorithm>
- <Iterations>5</Iterations>
- <Salt length="8"/>
- </Hash>
- </NSEC3>
- </Denial>
-
- <Keys>
- <!-- Parameters for both KSK and ZSK -->
- <TTL>PT15M</TTL>
- <RetireSafety>PT0S</RetireSafety>
- <PublishSafety>PT0S</PublishSafety>
-
- <!-- Parameters for KSK only -->
- <KSK>
- <Algorithm length="2048">7</Algorithm>
- <Lifetime>PT45M</Lifetime>
- <Repository>softHSM</Repository>
- <Standby>1</Standby>
- </KSK>
-
- <!-- Parameters for ZSK only -->
- <ZSK>
- <Algorithm length="2048">7</Algorithm>
- <Lifetime>PT25M</Lifetime>
- <Repository>softHSM</Repository>
- <Standby>1</Standby>
- </ZSK>
- </Keys>
-
- <Zone>
- <PropagationDelay>PT0S</PropagationDelay>
- <SOA>
- <TTL>PT0S</TTL>
- <Minimum>PT0S</Minimum>
- <Serial>unixtime</Serial>
- </SOA>
- </Zone>
-
- <Parent>
- <PropagationDelay>PT12M</PropagationDelay>
- <DS>
- <TTL>PT0S</TTL>
- </DS>
- <SOA>
- <TTL>PT0S</TTL>
- <Minimum>PT0S</Minimum>
- </SOA>
- </Parent>
- </Policy>
-</KASP>
diff --git a/contrib/kasp/kasp2policy.py b/contrib/kasp/kasp2policy.py
deleted file mode 100644
index b78a968f..00000000
--- a/contrib/kasp/kasp2policy.py
+++ /dev/null
@@ -1,209 +0,0 @@
-#!/usr/bin/python
-############################################################################
-# Copyright (C) 2015 Internet Systems Consortium, Inc. ("ISC")
-#
-# Permission to use, copy, modify, and/or distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-############################################################################
-# kasp2policy.py
-# This translates the Keys section of a KASP XML file into a dnssec.policy
-# file that can be used by dnssec-keymgr.
-############################################################################
-
-from xml.etree import cElementTree as ET
-from collections import defaultdict
-from isc import dnskey
-import ply.yacc as yacc
-import ply.lex as lex
-import re
-
-############################################################################
-# Translate KASP duration values into seconds
-############################################################################
-class kasptime:
- class ktlex:
- tokens = ( 'P', 'T', 'Y', 'M', 'D', 'H', 'S', 'NUM' )
-
- t_P = r'(?i)P'
- t_T = r'(?i)T'
- t_Y = r'(?i)Y'
- t_M = r'(?i)M'
- t_D = r'(?i)D'
- t_H = r'(?i)H'
- t_S = r'(?i)S'
-
- def t_NUM(self, t):
- r'\d+'
- t.value = int(t.value)
- return t
-
- def t_error(self, t):
- print("Illegal character '%s'" % t.value[0])
- t.lexer.skip(1)
-
- def __init__(self):
- self.lexer = lex.lex(object=self)
-
- def __init__(self):
- self.lexer = self.ktlex()
- self.tokens = self.lexer.tokens
- self.parser = yacc.yacc(debug=False, write_tables=False, module=self)
-
- def parse(self, text):
- self.lexer.lexer.lineno = 0
- return self.parser.parse(text)
-
- def p_ktime_4(self, p):
- "ktime : P periods T times"
- p[0] = p[2] + p[4]
-
- def p_ktime_3(self, p):
- "ktime : P T times"
- p[0] = p[3]
-
- def p_ktime_2(self, p):
- "ktime : P periods"
- p[0] = p[2]
-
- def p_periods_1(self, p):
- "periods : period"
- p[0] = p[1]
-
- def p_periods_2(self, p):
- "periods : periods period"
- p[0] = p[1] + p[2]
-
- def p_times_1(self, p):
- "times : time"
- p[0] = p[1]
-
- def p_times_2(self, p):
- "times : times time"
- p[0] = p[1] + p[2]
-
- def p_period(self, p):
- '''period : NUM Y
- | NUM M
- | NUM D'''
- if p[2].lower() == 'y':
- p[0] = int(p[1]) * 31536000
- elif p[2].lower() == 'm':
- p[0] = int(p[1]) * 2592000
- elif p[2].lower() == 'd':
- p[0] += int(p[1]) * 86400
-
- def p_time(self, p):
- '''time : NUM H
- | NUM M
- | NUM S'''
- if p[2].lower() == 'h':
- p[0] = int(p[1]) * 3600
- elif p[2].lower() == 'm':
- p[0] = int(p[1]) * 60
- elif p[2].lower() == 's':
- p[0] = int(p[1])
-
- def p_error(self, p):
- print("Syntax error")
-
-############################################################################
-# Load the contents of a KASP XML file as a python dictionary
-############################################################################
-class kasp():
- @staticmethod
- def _todict(t):
- d = {t.tag: {} if t.attrib else None}
- children = list(t)
- if children:
- dd = defaultdict(list)
- for dc in map(kasp._todict, children):
- for k, v in dc.iteritems():
- dd[k].append(v)
- d = {t.tag:
- {k:v[0] if len(v) == 1 else v for k, v in dd.iteritems()}}
- if t.attrib:
- d[t.tag].update(('@' + k, v) for k, v in t.attrib.iteritems())
- if t.text:
- text = t.text.strip()
- if children or t.attrib:
- if text:
- d[t.tag]['#text'] = text
- else:
- d[t.tag] = text
- return d
-
- def __init__(self, filename):
- self._dict = kasp._todict(ET.parse(filename).getroot())
-
- def __getitem__(self, key):
- return self._dict[key]
-
- def __len__(self):
- return len(self._dict)
-
- def __iter__(self):
- return self._dict.__iter__()
-
- def __repr__(self):
- return repr(self._dict)
-
-############################################################################
-# Load the contents of a KASP XML file as a python dictionary
-############################################################################
-if __name__ == "__main__":
- from pprint import *
- import sys
-
- if len(sys.argv) < 2:
- print("Usage: kasp2policy <filename>")
- exit(1)
-
- try:
- kinfo = kasp(sys.argv[1])
- except:
- print("%s: unable to load KASP file '%s'" % (sys.argv[0], sys.argv[1]))
- exit(1)
-
- kt = kasptime()
- first = True
-
- for p in kinfo['KASP']['Policy']:
- if not p['@name'] or not p['Keys']: continue
- if not first:
- print("")
- first = False
- if p['Description']:
- d = p['Description'].strip()
- print("# %s" % re.sub(r"\n\s*", "\n# ", d))
- print("policy %s {" % p['@name'])
- ksk = p['Keys']['KSK']
- zsk = p['Keys']['ZSK']
- kalg = ksk['Algorithm']
- zalg = zsk['Algorithm']
- algnum = kalg['#text'] or zalg['#text']
- if algnum:
- print("\talgorithm %s;" % dnskey.algstr(int(algnum)))
- if p['Keys']['TTL']:
- print("\tkeyttl %d;" % kt.parse(p['Keys']['TTL']))
- if kalg['@length']:
- print("\tkey-size ksk %d;" % int(kalg['@length']))
- if zalg['@length']:
- print("\tkey-size zsk %d;" % int(zalg['@length']))
- if ksk['Lifetime']:
- print("\troll-period ksk %d;" % kt.parse(ksk['Lifetime']))
- if zsk['Lifetime']:
- print("\troll-period zsk %d;" % kt.parse(zsk['Lifetime']))
- if ksk['Standby']:
- print("\tstandby ksk %d;" % int(ksk['Standby']))
- if zsk['Standby']:
- print("\tstandby zsk %d;" % int(zsk['Standby']))
- print("};")
diff --git a/contrib/kasp/policy.good b/contrib/kasp/policy.good
deleted file mode 100644
index 18c63608..00000000
--- a/contrib/kasp/policy.good
+++ /dev/null
@@ -1,24 +0,0 @@
-# A default policy that will
-# amaze you and your friends
-policy Policy1 {
- algorithm RSASHA1;
- keyttl 60;
- key-size ksk 2048;
- key-size zsk 2048;
- roll-period ksk 2400;
- roll-period zsk 1500;
- standby ksk 1;
- standby zsk 1;
-};
-
-# A default policy that will amaze you and your friends
-policy Policy2 {
- algorithm NSEC3RSASHA1;
- keyttl 900;
- key-size ksk 2048;
- key-size zsk 2048;
- roll-period ksk 2700;
- roll-period zsk 1500;
- standby ksk 1;
- standby zsk 1;
-};
diff --git a/contrib/nslint-3.0a2/CHANGES b/contrib/nslint-3.0a2/CHANGES
deleted file mode 100644
index 0e47d36f..00000000
--- a/contrib/nslint-3.0a2/CHANGES
+++ /dev/null
@@ -1,208 +0,0 @@
-@(#) $Id: CHANGES 250 2009-10-16 23:26:47Z leres $ (LBL)
-
-v3.0 Fri Oct 16 16:26:04 PDT 2009
-
-- Add IPv6 support.
-
-v2.2 Fri Mar 13 22:29:52 PDT 2009
-
-- Convert source tree to subversion
-
-v2.1 Fri Feb 15 20:45:01 PST 2008
-
-- Handle "srv" records.
-
-- Fix some ttl parsing problems.
-
-- Add "ignore" option
-
-- Hack in support for "view"
-
-- Check for duplicate "cname" records.
-
-- Upgrade to autoconf 2.61
-
-v2.0.2 Tue Mar 20 17:49:13 PST 2001
-
-- Allow missing trailing dot in certain special cases.
-
-- Include zone names when checking NS records.
-
-- Document nslint.conf network keyword.
-
-- Sort the network list so that we always pick the right network/mask
- when the overlap.
-
-v2.0.1 Tue Dec 14 11:24:31 PST 1999
-
-- Handle $ttl.
-
-- Fix some minor portability/compiler problems for OSF 4.
-
-- Correctly detect mx records that point to themselves but not a
- real "a" record.
-
-- Fix file descriptor leak in doconf(). Thanks to Paul McIlfatrick
- (paul.mcilfatrick@bt.com)
-
-v2.0 Wed Dec 9 16:48:54 PST 1998
-
-- Add support for BIND 8 named.conf file.
-
-- Support protocols in addition to tcp and udp for WKS records.
- Resulted from a bug report from Petter Reinholdtsen (pere@td.org.uit.no)
-
-- Support dotted serial numbers in SOA records. Resulted from a
- bug report from Frank Ederveen (frank@our.domaintje.com)
-
-- Ignore unknown statements and options in named.boot and named.conf
- (instead of issuing warnings).
-
-- Handle '#' and C style named.conf comments.
-
-- Handle optional "in" in named.conf zone statements. Reported by
- DJ Coster (djc@discoverbrokerage.com)
-
-- Add support for include directives in named.boot and named.conf.
-
-- Redo differing ttls check and do mx records in addition to a
- records. Change place where soa values gets zeroed so they don't
- get clobbered when we use includes.
-
-- Allow "@" abbr. for ptr, mx, cname and ns records.
-
-- Detect cname referenced by another cname or mx record.
-
-- Handle chaos records (to some minor extent).
-
-v1.7 Tue Jul 22 14:26:21 PDT 1997
-
-- Report differing ttls in A records. Check SOA records.
-
-- Detect hosts with more than one ip address on a subnet.
-
-v1.6.1 Sat Jun 7 03:12:01 PDT 1997
-
-- Fix "unknown service" printf format.
-
-- Fix off-by-one error in the ptr parsing code. Thanks to Andreas
- Lamprecht (andreas.lamprecht@siemens.at)
-
-- Fix broken $origin code.
-
-v1.6 Mon Apr 7 19:09:52 PDT 1997
-
-- Add support for classless delegation.
-
-- Fix some case sensitive bugs.
-
-- Report domain names outside the current zone.
-
-- Fixed off-by-one bug that broke single character hostnames.
-
-- Increase size of hash table.
-
-- Make tcp and udp service name tables dynamic.
-
-- Improved error message for garbage in /etc/services.
-
-v1.5.1 Thu Jul 18 21:44:44 PDT 1996
-
-- Use $CC when checking gcc version. Thanks to Carl Lindberg
- (carl_lindberg@blacksmith.com)
-
-- Raise size of hash table to 65K.
-
-v1.5 Fri Jul 12 18:58:47 PDT 1996
-
-- Detect extra octets and other garbage in PTR records.
-
-- Handle multi-line WKS records.
-
-- Allow multple WKS records (since we can have udp and tcp).
-
-- Convert to autoconf.
-
-- Declare optarg, optind and opterr extern. Thanks to Howard Moftich
- (howardm@lsil.com).
-
-- BS/DOS does not have malloc.h. Thanks to Jordan Hayes
- (jordan@thinkbank.com).
-
-- Correctly handle named.boot comments with leading whitespace.
-
-- Handle fully specified in-addr.arpa records. Resulted from a bug
- report from Joe Kelly (joe@gol.com).
-
-- Fix endian problems. Thanks to Carl Lindberg (carl_lindberg@blacksmith.com).
-
-- Fixed some mixed case problems.
-
-- Update man page to describe how nslint.boot works.
-
-v1.4 Sat Jun 3 23:38:14 PDT 1995
-
-- Allow TXT records to exist with no other records.
-
-- Full system prototypes.
-
-- Complain about extra arguments.
-
-- Detect MX record chains.
-
-- Handle single line SOA records correctly. Thanks to Edward J. O'Brien
- (ejobrie@sam.wal-mart.com)
-
-v1.3 Wed Mar 8 17:27:20 PST 1995
-
-- Add "allowdupa" record type for use with nslint.boot. This allows ip
- addresses to have multiple A records.
-
-- Fixed bug that caused dangling cname references to not be reported
- properly. Thanks to Edward J. O'Brien (ejobrie@sam.wal-mart.com).
-
-v1.2 Thu Sep 1 15:55:38 PDT 1994
-
-- Allow hostnames with a leading numeric as per rfc1123. Thanks to Bill
- Gianopoulos (wag@sccux1.msd.ray.com).
-
-- Remove (undocumented) -u flag and allow uppercase.
-
-- Support TXT records. Thanks to Paul Pomes (paul@uxc.cso.uiuc.edu).
-
-- Support RP records.
-
-- Ignore new bind keywords.
-
-- Fix bug where we could exit with a zero status even though errors had
- been detected
-
-- Complain about hosts that have smtp/tcp WKS entries but no MX records.
-
-- Add -B flag to handle PTR records that point outside the domains
- listed in named.boot.
-
-v1.1 Sun May 22 20:43:03 PDT 1994
-
-- Allow ns records with no a records (the preferred way to go).
-
-- Fix typos in the sawstr array.
-
-- Use string.h instead of strings.h and add rindex(), index() and
- bzero() macros for SYSV compatibility. Thanks to Bill King
- (wrk@cle.ab.com).
-
-- Handle $origin directives. Thanks to Bill Gianopoulos
- (wag@sccux1.msd.ray.com).
-
-- Fix add_domain() to work for the root. Thanks to Bill Gianopoulos.
-
-- Handle quotes in hinfo records. Thanks to Bill Gianopoulos.
-
-- Fix endian problems in parseinaddr() and parseptr().
-
-- Check non in-addr.arpa names for cname conflicts.
-
-v1.0 Thu Apr 21 11:02:59 PDT 1994
-
-- Initial release.
diff --git a/contrib/nslint-3.0a2/FILES b/contrib/nslint-3.0a2/FILES
deleted file mode 100644
index 376bdd39..00000000
--- a/contrib/nslint-3.0a2/FILES
+++ /dev/null
@@ -1,20 +0,0 @@
-CHANGES
-FILES
-INSTALL
-Makefile.in
-README
-VERSION
-aclocal.m4
-config.guess
-config.sub
-configure
-configure.in
-install-sh
-lbl/gnuc.h
-mkdep
-nslint.8
-nslint.c
-savestr.c
-savestr.h
-strerror.c
-version.h
diff --git a/contrib/nslint-3.0a2/INSTALL b/contrib/nslint-3.0a2/INSTALL
deleted file mode 100644
index d0782293..00000000
--- a/contrib/nslint-3.0a2/INSTALL
+++ /dev/null
@@ -1,42 +0,0 @@
-@(#) $Id: INSTALL 238 2009-03-14 05:43:37Z leres $ (LBL)
-
-You will need an ANSI C compiler to build nslint. The configure
-script will abort if your compiler is not ANSI compliant. If this
-happens, use the GNU C compiler, available via anonymous ftp:
-
- ftp://prep.ai.mit.edu/pub/gnu/gcc.tar.gz
-
-If necessary, edit the BINDEST and MANDEST paths in Makefile.in
-and run ./configure (a shell script). "configure" will determine
-your system attributes and generate an appropriate Makefile from
-Makefile.in. Now build nslint by running "make".
-
-If everything builds ok, su and type "make install" (and optionally
-"make install-man). This will install nslint and its manual entry.
-
-If your system is not one which we have tested nslint on, you may
-have to modify the configure script and Makefile.in. Please send
-us patches for any modifications you need to make.
-
-FILES
------
-CHANGES - description of differences between releases
-FILES - list of files exported as part of the distribution
-INSTALL - this file
-Makefile.in - compilation rules (input to the configure script)
-README - description of distribution
-VERSION - version of this release
-aclocal.m4 - autoconf macros
-config.guess - autoconf support
-config.sub - autoconf support
-configure - configure script (run this first)
-configure.in - configure script source
-install-sh - BSD style install script
-lbl/gnuc.h - gcc macros and defines
-mkdep - construct Makefile dependency list
-nslint.8 - manual entry
-nslint.c - main program
-savestr.c - strdup() replacement
-savestr.h - savestr prototypes
-strerror.c - missing routine
-version.h - prototypes, defines and struct definitions
diff --git a/contrib/nslint-3.0a2/Makefile.in b/contrib/nslint-3.0a2/Makefile.in
deleted file mode 100644
index 0c265c75..00000000
--- a/contrib/nslint-3.0a2/Makefile.in
+++ /dev/null
@@ -1,135 +0,0 @@
-# Copyright (c) 1992, 1993, 1994, 1995, 1996, 1997, 2000, 2008, 2009
-# The Regents of the University of California. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that: (1) source code distributions
-# retain the above copyright notice and this paragraph in its entirety, (2)
-# distributions including binary code include the above copyright notice and
-# this paragraph in its entirety in the documentation or other materials
-# provided with the distribution, and (3) all advertising materials mentioning
-# features or use of this software display the following acknowledgement:
-# ``This product includes software developed by the University of California,
-# Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
-# the University nor the names of its contributors may be used to endorse
-# or promote products derived from this software without specific prior
-# written permission.
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
-# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-#
-# @(#) $Id: Makefile.in 242 2009-10-14 08:30:03Z leres $ (LBL)
-
-#
-# Various configurable paths (remember to edit Makefile.in, not Makefile)
-#
-
-# Top level hierarchy
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-# Pathname of directory to install the binary
-BINDEST = @bindir@
-# Pathname of directory to install the man page
-MANDEST = @prefix@/man
-# The root of the directory tree for read-only
-datarootdir = @datarootdir@
-
-# VPATH
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-#
-# You shouldn't need to edit anything below here.
-#
-
-PROG = nslint
-CC = @CC@
-CCOPT = @V_CCOPT@
-INCLS = @V_INCLS@
-DEFS = @DEFS@
-
-# Standard CFLAGS
-CFLAGS = $(CCOPT) $(DEFS) $(INCLS)
-
-# Standard LDFLAGS
-LDFLAGS = @LDFLAGS@
-
-# Standard LIBS
-LIBS = @LIBS@
-
-INSTALL = @INSTALL@
-
-# Explicitly define compilation rule since SunOS 4's make doesn't like gcc.
-# Also, gcc does not remove the .o before forking 'as', which can be a
-# problem if you don't own the file but can write to the directory.
-.c.o:
- @rm -f $@
- $(CC) $(CFLAGS) -c $(srcdir)/$*.c
-
-CSRC = nslint.c savestr.c
-GENSRC = version.c
-
-SRC = $(CSRC) $(GENSRC)
-
-# We would like to say "OBJS = $(SRC:.c=.o)" but Ultrix's make cannot
-# hack the extra indirection
-OBJS = $(CSRC:.c=.o) $(GENSRC:.c=.o) @LIBOBJS@
-
-TAGHDR = \
- /usr/include/sys/types.h \
- /usr/include/netinet/in.h
-
-TAGFILES = $(SRC) $(TAGHDR)
-
-CLEANFILES = $(PROG) $(OBJS) $(GENSRC) purify $(OBJS:.o=_pure_*.o)
-
-$(PROG): $(OBJS)
- @rm -f $@
- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
-
-purify: $(OBJS)
- @rm -f $@
- purify $(CC) $(CFLAGS) $(LDFLAGS) -static -o purify $(OBJS) $(LIBS)
-
-version.o: version.c
-version.c: $(srcdir)/VERSION
- @rm -f $@
- sed -e 's/.*/char version[] = "&";/' $(srcdir)/VERSION > $@
-
-install: force
- $(INSTALL) -m 555 -o bin -g bin $(PROG) $(DESTDIR)$(BINDEST)/$(PROG)
- @diff $(srcdir)/$(PROG).8 $(DESTDIR)$(MANDEST)/man8 >/dev/null 2>&1 || \
- $(INSTALL) -m 444 -o bin -g bin $(srcdir)/$(PROG).8 $(DESTDIR)$(MANDEST)/man8/
-
-clean: force
- rm -f $(CLEANFILES)
-
-distclean: force
- rm -rf $(CLEANFILES) Makefile config.cache config.log config.status \
- gnuc.h os-proto.h autom4te.cache
-
-tags: $(TAGFILES)
- ctags -wtd $(TAGFILES)
-
-tar: force
- @cwd=`pwd` ; name=$(PROG)-`cat VERSION` ; \
- list="" ; tar="tar chf" ; temp="$$name.tar.gz" ; \
- for i in `cat FILES` ; do list="$$list $$name/$$i" ; done; \
- echo \
- "rm -f $$name; ln -s . $$name" ; \
- rm -f $$name; ln -s . $$name ; \
- echo \
- "$$tar - [lots of files] | gzip > $$temp" ; \
- $$tar - $$list | gzip > $$temp ; \
- echo \
- "rm -f $$name" ; \
- rm -f $$name
-
-sign:
- @name=${PROG}-`cat VERSION`.tar.gz; \
- set -x; \
- rm -f $${name}.asc; \
- gpg --armor --detach-sign $${name}
-
-force: /tmp
-depend: $(GENSRC) force
- ./mkdep -c $(CC) $(DEFS) $(INCLS) $(SRC)
diff --git a/contrib/nslint-3.0a2/README b/contrib/nslint-3.0a2/README
deleted file mode 100644
index d1c9177f..00000000
--- a/contrib/nslint-3.0a2/README
+++ /dev/null
@@ -1,14 +0,0 @@
-@(#) $Id: README 237 2009-03-14 05:38:15Z leres $ (LBL)
-
-NSLINT 2.0
-Lawrence Berkeley National Laboratory
-Network Research Group
-nslint@ee.lbl.gov
-ftp://ftp.ee.lbl.gov/nslint.tar.gz
-
-This directory contains source code for nslint, a lint program for dns
-files.
-
-Please send bugs and comments to nslint@ee.lbl.gov.
-
- - Craig Leres
diff --git a/contrib/nslint-3.0a2/VERSION b/contrib/nslint-3.0a2/VERSION
deleted file mode 100644
index 57af7a33..00000000
--- a/contrib/nslint-3.0a2/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-3.0a2
diff --git a/contrib/nslint-3.0a2/aclocal.m4 b/contrib/nslint-3.0a2/aclocal.m4
deleted file mode 100644
index ceff7c40..00000000
--- a/contrib/nslint-3.0a2/aclocal.m4
+++ /dev/null
@@ -1,978 +0,0 @@
-dnl @(#) $Id: aclocal.m4 616 2009-10-10 00:08:08Z leres $ (LBL)
-dnl
-dnl Copyright (c) 2008, 2009
-dnl The Regents of the University of California. All rights reserved.
-dnl
-dnl Redistribution and use in source and binary forms, with or without
-dnl modification, are permitted provided that: (1) source code distributions
-dnl retain the above copyright notice and this paragraph in its entirety, (2)
-dnl distributions including binary code include the above copyright notice and
-dnl this paragraph in its entirety in the documentation or other materials
-dnl provided with the distribution, and (3) all advertising materials mentioning
-dnl features or use of this software display the following acknowledgement:
-dnl ``This product includes software developed by the University of California,
-dnl Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
-dnl the University nor the names of its contributors may be used to endorse
-dnl or promote products derived from this software without specific prior
-dnl written permission.
-dnl THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
-dnl WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
-dnl MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-dnl
-dnl LBL autoconf macros
-dnl
-
-dnl
-dnl Determine which compiler we're using (cc or gcc)
-dnl If using gcc, determine the version number
-dnl If using cc, require that it support ansi prototypes
-dnl If using gcc, use -O3 (otherwise use -O)
-dnl If using cc, explicitly specify /usr/local/include
-dnl
-dnl usage:
-dnl
-dnl AC_LBL_C_INIT(copt, incls)
-dnl
-dnl results:
-dnl
-dnl $1 (copt set)
-dnl $2 (incls set)
-dnl CC
-dnl LDFLAGS set
-dnl
-AC_DEFUN(AC_LBL_C_INIT,
- [AC_PREREQ(2.12)
- AC_ARG_ENABLE([optimization],
- [AS_HELP_STRING([--disable-optimization],
- [turn off gcc optimization])],
- ac_cv_without_optimization=${withval})
- AC_BEFORE([$0], [AC_PROG_CC])
- AC_BEFORE([$0], [AC_LBL_FIXINCLUDES])
- AC_BEFORE([$0], [AC_LBL_DEVEL])
- AC_ARG_WITH(gcc, [ --without-gcc don't use gcc])
- AC_USE_SYSTEM_EXTENSIONS
- $1=""
- if test "${ac_cv_without_optimization+set}" != set; then
- $1="-O"
- fi
- $2=""
- if test "${srcdir}" != "." ; then
- $2="-I\$\(srcdir\)"
- fi
- if test -z "$CC" ; then
- case "$target_os" in
-
- bsdi*)
- AC_CHECK_PROG(SHLICC2, shlicc2, yes, no)
- if test $SHLICC2 = yes ; then
- CC=shlicc2
- export CC
- fi
- ;;
- esac
- fi
- if test -z "$CC" -a "$with_gcc" = no ; then
- CC=cc
- export CC
- fi
- AC_PROG_CC
- AC_SYS_LARGEFILE
- if test "$GCC" != yes ; then
- AC_MSG_CHECKING(that $CC handles ansi prototypes)
- AC_CACHE_VAL(ac_cv_lbl_cc_ansi_prototypes,
- AC_TRY_COMPILE(
- [#include <sys/types.h>],
- [int frob(int, char *)],
- ac_cv_lbl_cc_ansi_prototypes=yes,
- ac_cv_lbl_cc_ansi_prototypes=no))
- AC_MSG_RESULT($ac_cv_lbl_cc_ansi_prototypes)
- if test $ac_cv_lbl_cc_ansi_prototypes = no ; then
- case "$target_os" in
-
- hpux*)
- AC_MSG_CHECKING(for HP-UX ansi compiler ($CC -Aa -D_HPUX_SOURCE))
- savedcflags="$CFLAGS"
- CFLAGS="-Aa -D_HPUX_SOURCE $CFLAGS"
- AC_CACHE_VAL(ac_cv_lbl_cc_hpux_cc_aa,
- AC_TRY_COMPILE(
- [#include <sys/types.h>],
- [int frob(int, char *)],
- ac_cv_lbl_cc_hpux_cc_aa=yes,
- ac_cv_lbl_cc_hpux_cc_aa=no))
- AC_MSG_RESULT($ac_cv_lbl_cc_hpux_cc_aa)
- if test $ac_cv_lbl_cc_hpux_cc_aa = no ; then
- AC_MSG_ERROR(see the INSTALL doc for more info)
- fi
- CFLAGS="$savedcflags"
- $1="-Aa $$1"
- AC_DEFINE(_HPUX_SOURCE,,[HP-UX ansi compiler])
- ;;
-
- *)
- AC_MSG_ERROR(see the INSTALL doc for more info)
- ;;
- esac
- fi
- $2="$$2 -I/usr/local/include"
- LDFLAGS="$LDFLAGS -L/usr/local/lib"
-
- case "$target_os" in
-
- irix*)
- $1="$$1 -xansi -signed -g3"
- ;;
-
- osf*)
- $1="$$1 -std1 -g3"
- ;;
-
- ultrix*)
- AC_MSG_CHECKING(that Ultrix $CC hacks const in prototypes)
- AC_CACHE_VAL(ac_cv_lbl_cc_const_proto,
- AC_TRY_COMPILE(
- [#include <sys/types.h>],
- [struct a { int b; };
- void c(const struct a *)],
- ac_cv_lbl_cc_const_proto=yes,
- ac_cv_lbl_cc_const_proto=no))
- AC_MSG_RESULT($ac_cv_lbl_cc_const_proto)
- if test $ac_cv_lbl_cc_const_proto = no ; then
- AC_DEFINE(const,,[ultrix can't hack const])
- fi
- ;;
- esac
- fi
-])
-
-AC_LBL_ENABLE_CHECK(brov6 activemapping expire-dfa-states)
-dnl
-dnl This allows us to check for bogus configure enable/disable
-dnl command line options
-dnl
-dnl usage:
-dnl
-dnl AC_LBL_ENABLE_CHECK(opt ...)
-dnl
-AC_DEFUN(AC_LBL_ENABLE_CHECK,
- [set |
- sed -n -e 's/^enable_\([[^=]]*\)=[[^=]]*$/\1/p' |
- while read var; do
- ok=0
- for o in $1; do
- if test "${o}" = "${var}" ; then
- ok=1
- break
- fi
- done
- if test ${ok} -eq 0 ; then
- # It's hard to kill configure script from subshell!
- AC_MSG_ERROR(unknown enable option: ${var})
- exit 1
- fi
- done
- if test $? -ne 0 ; then
- exit 1
- fi])
-
-dnl
-dnl Use pfopen.c if available and pfopen() not in standard libraries
-dnl Require libpcap
-dnl Look for libpcap in ..
-dnl Use the installed libpcap if there is no local version
-dnl
-dnl usage:
-dnl
-dnl AC_LBL_LIBPCAP(pcapdep, incls)
-dnl
-dnl results:
-dnl
-dnl $1 (pcapdep set)
-dnl $2 (incls appended)
-dnl LIBS
-dnl LDFLAGS
-dnl LBL_LIBS
-dnl
-AC_DEFUN(AC_LBL_LIBPCAP,
- [AC_REQUIRE([AC_LBL_LIBRARY_NET])
- dnl
- dnl save a copy before locating libpcap.a
- dnl
- LBL_LIBS="$LIBS"
- pfopen=/usr/examples/packetfilter/pfopen.c
- if test -f $pfopen ; then
- AC_CHECK_FUNCS(pfopen)
- if test $ac_cv_func_pfopen = "no" ; then
- AC_MSG_RESULT(Using $pfopen)
- LIBS="$LIBS $pfopen"
- fi
- fi
- AC_MSG_CHECKING(for local pcap library)
- libpcap=FAIL
- lastdir=FAIL
- places=`ls .. | sed -e 's,/$,,' -e 's,^,../,' | \
- egrep '/libpcap-[[0-9]]*\.[[0-9]]*(\.[[0-9]]*)?([[ab]][[0-9]]*)?$'`
- for dir in $places ../libpcap libpcap ; do
- basedir=`echo $dir | sed -e 's/[[ab]][[0-9]]*$//'`
- if test $lastdir = $basedir ; then
- dnl skip alphas when an actual release is present
- continue;
- fi
- lastdir=$dir
- if test -r $dir/pcap.c ; then
- libpcap=$dir/libpcap.a
- d=$dir
- dnl continue and select the last one that exists
- fi
- done
- if test "x$libpcap" = xFAIL ; then
- AC_MSG_RESULT(not found)
- AC_CHECK_LIB(pcap, pcap_open_live, libpcap="-lpcap")
- unset ac_cv_lib_pcap_pcap_open_live
- if test "x$libpcap" = xFAIL ; then
- CFLAGS="$CFLAGS -I/usr/local/include"
- LIBS="$LIBS -L/usr/local/lib"
- AC_CHECK_LIB(pcap, pcap_open_live, libpcap="-lpcap")
- unset ac_cv_lib_pcap_pcap_open_live
- if test "x$libpcap" = xFAIL ; then
- AC_MSG_ERROR(see the INSTALL doc for more info)
- fi
- $2="$$2 -I/usr/local/include"
- fi
- LIBS="$LIBS -lpcap"
- else
- $1=$libpcap
- $2="-I$d $$2"
- AC_MSG_RESULT($libpcap)
- fi
- if test "x$libpcap" != "x-lpcap" ; then
- LIBS="$libpcap $LIBS"
- fi
- case "$target_os" in
-
- aix*)
- pseexe="/lib/pse.exp"
- AC_MSG_CHECKING(for $pseexe)
- if test -f $pseexe ; then
- AC_MSG_RESULT(yes)
- LIBS="$LIBS -I:$pseexe"
- fi
- ;;
- esac])
-
-dnl
-dnl Define RETSIGTYPE and RETSIGVAL
-dnl
-dnl usage:
-dnl
-dnl AC_LBL_TYPE_SIGNAL
-dnl
-dnl results:
-dnl
-dnl RETSIGTYPE (defined)
-dnl RETSIGVAL (defined)
-dnl
-AC_DEFUN(AC_LBL_TYPE_SIGNAL,
- [AC_BEFORE([$0], [AC_LBL_LIBPCAP])
- AC_TYPE_SIGNAL
- if test "$ac_cv_type_signal" = void ; then
- AC_DEFINE(RETSIGVAL,,[signal function return value])
- else
- AC_DEFINE(RETSIGVAL,(0))
- fi
- case "$target_os" in
-
- irix*)
- AC_DEFINE(_BSD_SIGNALS,,[irix's BSD style signals])
- ;;
-
- *)
- dnl prefer sigset() to sigaction()
- AC_CHECK_FUNCS(sigset)
- if test $ac_cv_func_sigset = yes ; then
- AC_DEFINE(signal,sigset,[use sigset() instead of signal()])
- else
- AC_CHECK_FUNCS(sigaction)
- fi
- ;;
- esac])
-
-dnl
-dnl If using gcc, make sure we have ANSI ioctl definitions
-dnl
-dnl usage:
-dnl
-dnl AC_LBL_FIXINCLUDES
-dnl
-AC_DEFUN(AC_LBL_FIXINCLUDES,
- [if test "$GCC" = yes ; then
- AC_MSG_CHECKING(for ANSI ioctl definitions)
- AC_CACHE_VAL(ac_cv_lbl_gcc_fixincludes,
- AC_TRY_COMPILE(
- [/*
- * This generates a "duplicate case value" when fixincludes
- * has not be run.
- */
-# include <sys/types.h>
-# include <sys/time.h>
-# include <sys/ioctl.h>
-# ifdef HAVE_SYS_IOCCOM_H
-# include <sys/ioccom.h>
-# endif],
- [switch (0) {
- case _IO('A', 1):;
- case _IO('B', 1):;
- }],
- ac_cv_lbl_gcc_fixincludes=yes,
- ac_cv_lbl_gcc_fixincludes=no))
- AC_MSG_RESULT($ac_cv_lbl_gcc_fixincludes)
- if test $ac_cv_lbl_gcc_fixincludes = no ; then
- # Don't cache failure
- unset ac_cv_lbl_gcc_fixincludes
- AC_MSG_ERROR(see the INSTALL for more info)
- fi
- fi])
-
-dnl
-dnl Check for flex, default to lex
-dnl Require flex 2.4 or higher
-dnl Check for bison, default to yacc
-dnl Default to lex/yacc if both flex and bison are not available
-dnl Define the yy prefix string if using flex and bison
-dnl
-dnl usage:
-dnl
-dnl AC_LBL_LEX_AND_YACC(lex, yacc, yyprefix)
-dnl
-dnl results:
-dnl
-dnl $1 (lex set)
-dnl $2 (yacc appended)
-dnl $3 (optional flex and bison -P prefix)
-dnl
-AC_DEFUN(AC_LBL_LEX_AND_YACC,
- [AC_ARG_WITH(flex, [ --without-flex don't use flex])
- AC_ARG_WITH(bison, [ --without-bison don't use bison])
- if test "$with_flex" = no ; then
- $1=lex
- else
- AC_CHECK_PROGS($1, flex, lex)
- fi
- if test "$$1" = flex ; then
- # The -V flag was added in 2.4
- AC_MSG_CHECKING(for flex 2.4 or higher)
- AC_CACHE_VAL(ac_cv_lbl_flex_v24,
- if flex -V >/dev/null 2>&1; then
- ac_cv_lbl_flex_v24=yes
- else
- ac_cv_lbl_flex_v24=no
- fi)
- AC_MSG_RESULT($ac_cv_lbl_flex_v24)
- if test $ac_cv_lbl_flex_v24 = no ; then
- s="2.4 or higher required"
- AC_MSG_WARN(ignoring obsolete flex executable ($s))
- $1=lex
- fi
- fi
- if test "$with_bison" = no ; then
- $2=yacc
- else
- AC_CHECK_PROGS($2, bison, yacc)
- fi
- if test "$$2" = bison ; then
- $2="$$2 -y"
- fi
- if test "$$1" != lex -a "$$2" = yacc -o "$$1" = lex -a "$$2" != yacc ; then
- AC_MSG_WARN(don't have both flex and bison; reverting to lex/yacc)
- $1=lex
- $2=yacc
- fi
- if test "$$1" = flex -a -n "$3" ; then
- $1="$$1 -P$3"
- $2="$$2 -p $3"
- fi])
-
-dnl
-dnl Checks to see if union wait is used with WEXITSTATUS()
-dnl
-dnl usage:
-dnl
-dnl AC_LBL_UNION_WAIT
-dnl
-dnl results:
-dnl
-dnl DECLWAITSTATUS (defined)
-dnl
-AC_DEFUN(AC_LBL_UNION_WAIT,
- [AC_MSG_CHECKING(if union wait is used)
- AC_CACHE_VAL(ac_cv_lbl_union_wait,
- AC_TRY_COMPILE([
-# include <sys/types.h>
-# include <sys/wait.h>],
- [int status;
- u_int i = WEXITSTATUS(status);
- u_int j = waitpid(0, &status, 0);],
- ac_cv_lbl_union_wait=no,
- ac_cv_lbl_union_wait=yes))
- AC_MSG_RESULT($ac_cv_lbl_union_wait)
- if test $ac_cv_lbl_union_wait = yes ; then
- AC_DEFINE(DECLWAITSTATUS,union wait)
- else
- AC_DEFINE(DECLWAITSTATUS,int)
- fi])
-
-dnl
-dnl Checks to see if the sockaddr struct has the 4.4 BSD sa_len member
-dnl
-dnl usage:
-dnl
-dnl AC_LBL_SOCKADDR_SA_LEN
-dnl
-dnl results:
-dnl
-dnl HAVE_SOCKADDR_SA_LEN (defined)
-dnl
-AC_DEFUN(AC_LBL_SOCKADDR_SA_LEN,
- [AC_CHECK_MEMBERS(struct sockaddr.sa_len,,,[
-# include <sys/types.h>
-# include <sys/socket.h>])])
-
-dnl
-dnl Makes sure socklen_t is defined
-dnl
-dnl usage:
-dnl
-dnl AC_LBL_SOCKLEN_T
-dnl
-dnl results:
-dnl
-dnl socklen_t (defined if missing)
-dnl
-AC_DEFUN(AC_LBL_SOCKLEN_T,
- [AC_MSG_CHECKING(for socklen_t in sys/socket.h using $CC)
- AC_CACHE_VAL(ac_cv_lbl_socklen_t,
- AC_TRY_COMPILE([
-# include "confdefs.h"
-# include <sys/types.h>
-# include <sys/socket.h>
-# if STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-# endif],
- [socklen_t i],
- ac_cv_lbl_socklen_t=yes,
- ac_cv_lbl_socklen_t=no))
- AC_MSG_RESULT($ac_cv_lbl_socklen_t)
- if test $ac_cv_lbl_socklen_t = no ; then
- AC_DEFINE(socklen_t, int, [Define socklen_t if missing])
- fi])
-
-dnl
-dnl Checks to see if the IFF_LOOPBACK exists as a define or enum
-dnl
-dnl (stupidly some versions of linux use an enum...)
-dnl
-dnl usage:
-dnl
-dnl AC_LBL_IFF_LOOPBACK
-dnl
-dnl results:
-dnl
-dnl HAVE_IFF_LOOPBACK (defined)
-dnl
-AC_DEFUN(AC_LBL_IFF_LOOPBACK,
- [AC_MSG_CHECKING(for IFF_LOOPBACK define/enum)
- AC_CACHE_VAL(ac_cv_lbl_have_iff_loopback,
- AC_TRY_COMPILE([
-# include <sys/param.h>
-# include <sys/file.h>
-# include <sys/ioctl.h>
-# include <sys/socket.h>
-# ifdef HAVE_SYS_SOCKIO_H
-# include <sys/sockio.h>
-# endif
-# include <sys/time.h>
-# include <net/if.h>
-# include <netinet/in.h>],
- [int i = IFF_LOOPBACK],
- ac_cv_lbl_have_iff_loopback=yes,
- ac_cv_lbl_have_iff_loopback=no))
- AC_MSG_RESULT($ac_cv_lbl_have_iff_loopback)
- if test $ac_cv_lbl_have_iff_loopback = yes ; then
- AC_DEFINE(HAVE_IFF_LOOPBACK,, [Have IFF_LOOPBACK define/enum])
- fi])
-
-dnl
-dnl Due to the stupid way it's implemented, AC_CHECK_TYPE is nearly useless.
-dnl
-dnl usage:
-dnl
-dnl AC_LBL_CHECK_TYPE
-dnl
-dnl results:
-dnl
-dnl int32_t (defined)
-dnl u_int32_t (defined)
-dnl
-AC_DEFUN(AC_LBL_CHECK_TYPE,
- [AC_MSG_CHECKING(for $1 using $CC)
- AC_CACHE_VAL(ac_cv_lbl_have_$1,
- AC_TRY_COMPILE([
-# include "confdefs.h"
-# include <sys/types.h>
-# if STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-# endif],
- [$1 i],
- ac_cv_lbl_have_$1=yes,
- ac_cv_lbl_have_$1=no))
- AC_MSG_RESULT($ac_cv_lbl_have_$1)
- if test $ac_cv_lbl_have_$1 = no ; then
- AC_DEFINE($1, $2, Define $1)
- fi])
-
-dnl
-dnl Checks to see if unaligned memory accesses fail
-dnl
-dnl usage:
-dnl
-dnl AC_LBL_UNALIGNED_ACCESS
-dnl
-dnl results:
-dnl
-dnl LBL_ALIGN (DEFINED)
-dnl
-AC_DEFUN(AC_LBL_UNALIGNED_ACCESS,
- [AC_MSG_CHECKING(if unaligned accesses fail)
- AC_CACHE_VAL(ac_cv_lbl_unaligned_fail,
- [case "$target_cpu" in
-
- alpha|hp*|mips|sparc)
- ac_cv_lbl_unaligned_fail=yes
- ;;
-
- *)
- cat >conftest.c <<EOF
-# include <sys/types.h>
-# include <sys/wait.h>
-# include <stdio.h>
- unsigned char a[[5]] = { 1, 2, 3, 4, 5 };
- main() {
- unsigned int i;
- pid_t pid;
- int status;
- /* avoid "core dumped" message */
- pid = fork();
- if (pid < 0)
- exit(2);
- if (pid > 0) {
- /* parent */
- pid = waitpid(pid, &status, 0);
- if (pid < 0)
- exit(3);
- exit(!WIFEXITED(status));
- }
- /* child */
- i = *(unsigned int *)&a[[1]];
- printf("%d\n", i);
- exit(0);
- }
-EOF
- ${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS \
- conftest.c $LIBS >/dev/null 2>&1
- if test ! -x conftest ; then
- dnl failed to compile for some reason
- ac_cv_lbl_unaligned_fail=yes
- else
- ./conftest >conftest.out
- if test ! -s conftest.out ; then
- ac_cv_lbl_unaligned_fail=yes
- else
- ac_cv_lbl_unaligned_fail=no
- fi
- fi
- rm -f conftest* core core.conftest
- ;;
- esac])
- AC_MSG_RESULT($ac_cv_lbl_unaligned_fail)
- if test $ac_cv_lbl_unaligned_fail = yes ; then
- AC_DEFINE(LBL_ALIGN)
- fi])
-
-dnl
-dnl add all warning option to CFLAGS
-dnl
-dnl usage:
-dnl
-dnl AC_LBL_CHECK_WALL(copt)
-dnl
-dnl results:
-dnl
-dnl $1 (copt appended)
-dnl ac_cv_lbl_gcc_vers
-dnl
-AC_DEFUN(AC_LBL_CHECK_WALL,
- [ if test "$GCC" = yes ; then
- if test "$SHLICC2" = yes ; then
- ac_cv_lbl_gcc_vers=2
- $1="`echo $$1 | sed -e 's/-O/-O3/'`"
- else
- AC_MSG_CHECKING(gcc version)
- AC_CACHE_VAL(ac_cv_lbl_gcc_vers,
- # Gag, the gcc folks keep changing the output...
- # try to grab N.N.N
- ac_cv_lbl_gcc_vers=`$CC --version 2>&1 |
- sed -e '1!d' -e 's/[[[^0-9]]]*\([[[0-9]]][[[0-9]]]*\)\.[[[0-9\]]][[[0-9]]]*\.[[[0-9]]][[[0-9]]]*.*/\1/'`)
- AC_MSG_RESULT($ac_cv_lbl_gcc_vers)
- if test "$ac_cv_lbl_gcc_vers" -gt 1 ; then
- $1="`echo $$1 | sed -e 's/-O/-O3/'`"
- fi
- fi
- if test "$ac_cv_prog_cc_g" = yes ; then
- $1="-g $$1"
- fi
- $1="$$1 -Wall"
- if test "$ac_cv_lbl_gcc_vers" -gt 1 ; then
- $1="$$1 -Wmissing-prototypes -Wstrict-prototypes"
- if [[ "`uname -s`" = "FreeBSD" ]]; then
- $1="$$1 -Werror"
- fi
- fi
- else
- case "$target_os" in
-
- irix6*)
- $1="$$1 -fullwarn -n32"
- ;;
-
- *)
- ;;
- esac
- fi])
-
-dnl
-dnl If using gcc and the file .devel exists:
-dnl Compile with -g (if supported) and -Wall
-dnl If using gcc 2, do extra prototype checking
-dnl If an os prototype include exists, symlink os-proto.h to it
-dnl
-dnl usage:
-dnl
-dnl AC_LBL_DEVEL(copt)
-dnl
-dnl results:
-dnl
-dnl $1 (copt appended)
-dnl HAVE_OS_PROTO_H (defined)
-dnl os-proto.h (symlinked)
-dnl
-AC_DEFUN(AC_LBL_DEVEL,[
- AC_BEFORE([$0], [AC_LBL_LD_RUN_PATH])
- rm -f os-proto.h
- if test -f .devel ; then
- AC_LBL_CHECK_WALL($1)
- os=`echo $target_os | sed -e 's/\([[0-9]][[0-9]]*\)[[^0-9]].*$/\1/'`
- name="lbl/os-$os.h"
- if test -f $name ; then
- ln -s $name os-proto.h
- AC_DEFINE(HAVE_OS_PROTO_H,,[have os-proto.h])
- else
- AC_MSG_WARN(can't find $name)
- fi
- fi])
-
-dnl
-dnl Improved version of AC_CHECK_LIB
-dnl
-dnl Thanks to John Hawkinson (jhawk@mit.edu)
-dnl
-dnl usage:
-dnl
-dnl AC_LBL_CHECK_LIB(LIBRARY, FUNCTION [, ACTION-IF-FOUND [,
-dnl ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
-dnl
-dnl results:
-dnl
-dnl LIBS
-dnl
-
-define(AC_LBL_CHECK_LIB,
-[AC_MSG_CHECKING([for $2 in -l$1])
-dnl Use a cache variable name containing both the library and function name,
-dnl because the test really is for library $1 defining function $2, not
-dnl just for library $1. Separate tests with the same $1 and different $2's
-dnl may have different results.
-ac_lib_var=`echo $1['_']$2['_']$5 | sed 'y%./+- %__p__%'`
-AC_CACHE_VAL(ac_cv_lbl_lib_$ac_lib_var,
-[ac_save_LIBS="$LIBS"
-LIBS="-l$1 $5 $LIBS"
-AC_TRY_LINK(dnl
-ifelse([$2], [main], , dnl Avoid conflicting decl of main.
-[/* Override any gcc2 internal prototype to avoid an error. */
-]ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus
-extern "C"
-#endif
-])dnl
-[/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $2();
-]),
- [$2()],
- eval "ac_cv_lbl_lib_$ac_lib_var=yes",
- eval "ac_cv_lbl_lib_$ac_lib_var=no")
-LIBS="$ac_save_LIBS"
-])dnl
-if eval "test \"`echo '$ac_cv_lbl_lib_'$ac_lib_var`\" = yes"; then
- AC_MSG_RESULT(yes)
- ifelse([$3], ,
-[changequote(, )dnl
- ac_tr_lib=HAVE_LIB`echo $1 | sed -e 's/[^a-zA-Z0-9_]/_/g' \
- -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
-changequote([, ])dnl
- AC_DEFINE_UNQUOTED($ac_tr_lib)
- LIBS="-l$1 $LIBS"
-], [$3])
-else
- AC_MSG_RESULT(no)
-ifelse([$4], , , [$4
-])dnl
-fi
-])
-
-dnl
-dnl AC_LBL_LIBRARY_NET
-dnl
-dnl This test is for network applications that need socket() and
-dnl gethostbyname() -ish functions. Under Solaris, those applications
-dnl need to link with "-lsocket -lnsl". Under IRIX, they need to link
-dnl with "-lnsl" but should *not* link with "-lsocket" because
-dnl libsocket.a breaks a number of things (for instance:
-dnl gethostbyname() under IRIX 5.2, and snoop sockets under most
-dnl versions of IRIX).
-dnl
-dnl Unfortunately, many application developers are not aware of this,
-dnl and mistakenly write tests that cause -lsocket to be used under
-dnl IRIX. It is also easy to write tests that cause -lnsl to be used
-dnl under operating systems where neither are necessary (or useful),
-dnl such as SunOS 4.1.4, which uses -lnsl for TLI.
-dnl
-dnl This test exists so that every application developer does not test
-dnl this in a different, and subtly broken fashion.
-
-dnl It has been argued that this test should be broken up into two
-dnl seperate tests, one for the resolver libraries, and one for the
-dnl libraries necessary for using Sockets API. Unfortunately, the two
-dnl are carefully intertwined and allowing the autoconf user to use
-dnl them independantly potentially results in unfortunate ordering
-dnl dependancies -- as such, such component macros would have to
-dnl carefully use indirection and be aware if the other components were
-dnl executed. Since other autoconf macros do not go to this trouble,
-dnl and almost no applications use sockets without the resolver, this
-dnl complexity has not been implemented.
-dnl
-dnl The check for libresolv is in case you are attempting to link
-dnl statically and happen to have a libresolv.a lying around (and no
-dnl libnsl.a).
-dnl
-AC_DEFUN(AC_LBL_LIBRARY_NET, [
- # Most operating systems have gethostbyname() in the default searched
- # libraries (i.e. libc):
- AC_CHECK_FUNC(gethostbyname, ,
- # Some OSes (eg. Solaris) place it in libnsl:
- AC_CHECK_LIB(nsl, gethostbyname, ,
- # Some strange OSes (SINIX) have it in libsocket:
- AC_CHECK_LIB(socket, gethostbyname, ,
- # Unfortunately libsocket sometimes depends on libnsl.
- # AC_CHECK_LIB's API is essentially broken so the
- # following ugliness is necessary:
- AC_CHECK_LIB(socket, gethostbyname,
- LIBS="-lsocket -lnsl $LIBS",
- AC_CHECK_LIB(resolv, gethostbyname),
- -lnsl))))
- AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket, ,
- AC_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", ,
- -lnsl)))
- # DLPI needs putmsg under HPUX so test for -lstr while we're at it
- AC_CHECK_LIB(str, putmsg)
- ])
-
-dnl
-dnl AC_LBL_RUN_PATH
-dnl
-dnl Extracts -L directories from LIBS; if any are found they are
-dnl converted to a LD_RUN_PATH and put in V_ENVIRONMENT
-dnl
-dnl usage:
-dnl
-dnl AC_LBL_RUN_PATH
-dnl
-dnl results:
-dnl
-dnl V_ENVIRONMENT
-dnl
-AC_DEFUN(AC_LBL_LD_RUN_PATH, [
- AC_MSG_CHECKING(LD_RUN_PATH)
- AC_SUBST(V_ENVIRONMENT)
- dnl
- dnl Split out -L directories
- dnl
- ldirs=""
- for x in ${LIBS}; do
- case x${x} in
-
- x-L*)
- ldirs="${ldirs} ${x}"
- ;;
-
- *)
- ;;
- esac
- done
-
- dnl
- dnl Build LD_RUN_PATH
- dnl
- if test -n "${ldirs}"; then
- V_ENVIRONMENT="LD_RUN_PATH=\"`echo \"${ldirs}\" | sed -e 's,-L,,g' -e 's,^ *,,' -e 's, ,:,g'`\""
- AC_MSG_RESULT(${V_ENVIRONMENT})
- else
- AC_MSG_RESULT(empty)
- fi])
-
-dnl
-dnl AC_LBL_BROCCOLI
-dnl
-dnl Include Broccoli support
-dnl
-dnl usage:
-dnl
-dnl AC_LBL_BROCCOLI(copt, incls, [min-vers])
-dnl
-dnl results:
-dnl
-dnl $1 (copt variable appended)
-dnl $2 (incls variable appended)
-dnl $3 minimum version (optional)
-dnl
-AC_DEFUN(AC_LBL_BROCCOLI, [
- AC_BEFORE([$0], [AC_LBL_LD_RUN_PATH])
- dnl
- dnl configure flags
- dnl
- AC_ARG_WITH([broccoli],
- [AS_HELP_STRING([--without-broccoli],
- [disable Broccoli support @<:@default=check@:>@])],
- ac_cv_with_broccoli=${withval})
- dnl
- dnl Network application libraries
- dnl
- AC_LBL_LIBRARY_NET
-
- AC_MSG_CHECKING(for broccoli)
- if test "${ac_cv_with_broccoli}" = "" -o \
- "${ac_cv_with_broccoli}" = yes ; then
- cflags=""
- libs=""
- dnl
- dnl Our entire path
- dnl
- dirs="`echo ${PATH} | sed -e 's/:/ /g'`"
- dnl
- dnl Add in default Bro install bin directory
- dnl
- dirs="${dirs} /usr/local/bro/bin"
- for d in ${dirs}; do
- if test -x ${d}/broccoli-config ; then
- broccoli_config_path="${d}/broccoli-config"
- cflags="`${broccoli_config_path} --cflags`"
- libs="`${broccoli_config_path} --libs`"
- break
- fi
- done
- if test -n "${cflags}" ; then
- ac_cv_have_broccoli=yes
- else
- ac_cv_have_broccoli=no
- fi
- AC_MSG_RESULT($ac_cv_have_broccoli)
- if test "${ac_cv_with_broccoli}" = yes -a \
- ${ac_cv_have_broccoli} = "no" ; then
- AC_MSG_ERROR(Broccoli explicitly enabled but not supported)
- fi
- else
- AC_MSG_RESULT([disabled])
- fi
-
- dnl
- dnl Optionally check for minimum Broccoli version
- dnl
- if test "$ac_cv_have_broccoli" = yes -a -n "$3"; then
- AC_MSG_CHECKING(Broccoli >= $3)
- BROCCOLI_VERSION="`${broccoli_config_path} --version`"
- AC_MSG_RESULT(${BROCCOLI_VERSION})
- dnl
- dnl Sort the two versions; the desired version should
- dnl appear first (or perhaps 1st and 2nd)
- dnl
- tvers="`(echo "$3" ; echo ${BROCCOLI_VERSION}) |
- sort -t. +0 -1n +1 -2n +2 -3n +3 -4n |
- head -1`"
- if test "${tvers}" != "$3"; then
- if test "${ac_cv_with_broccoli}" = yes; then
- AC_MSG_ERROR(Broccoli $3 or higher is required)
- fi
- AC_MSG_NOTICE(Broccoli support disabled)
- ac_cv_have_broccoli="no"
- fi
- fi
-
- dnl
- dnl Broccoli ho!
- dnl
- if test "$ac_cv_have_broccoli" = yes ; then
- AC_DEFINE(HAVE_BROCCOLI)
- dnl
- dnl Split out -I directories
- dnl
- for x in ${cflags}; do
- case x${x} in
-
- x-I*)
- eval "$2=\"\$$2 ${x}\""
- ;;
-
- *)
- eval "$1=\"\$$1 ${x}\""
- ;;
- esac
- done
-
- dnl
- dnl Add in Broccoli libs
- dnl
- LIBS="$LIBS ${libs}"
-
- dnl
- dnl Look for the libs in DIR or DIR/lib
- dnl
- AC_ARG_WITH([openssl],
- [AS_HELP_STRING([--with-openssl=DIR],
- [Use OpenSSL installation in DIR])],
- [eval "$2=\"-I${withval}/include \$$2\""
- for x in ${withval}/lib ${withval}; do
- if test -r ${x}/libssl.a; then
- LIBS="-L${x} ${LIBS}"
- break
- fi
- done])
-
- dnl
- dnl -lssl needs to come first on some systems!
- dnl
- AC_CHECK_LIB(ssl, OPENSSL_add_all_algorithms_conf,
- [LIBS="${LIBS} -lssl -lcrypto"],,-lcrypto)
- dnl
- dnl Newer versions of 1.4.0 and anything higher needs bro_init()
- dnl
- AC_CHECK_LIB(broccoli, bro_init, [AC_DEFINE(HAVE_BRO_INIT)])
- fi])
diff --git a/contrib/nslint-3.0a2/config.guess b/contrib/nslint-3.0a2/config.guess
deleted file mode 100755
index 0e30d56e..00000000
--- a/contrib/nslint-3.0a2/config.guess
+++ /dev/null
@@ -1,1407 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-
-timestamp='2003-07-02'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Originally written by Per Bothner <per@bothner.com>.
-# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub. If it succeeds, it prints the system name on stdout, and
-# exits with 0. Otherwise, it exits with 1.
-#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit 0 ;;
- --version | -v )
- echo "$version" ; exit 0 ;;
- --help | --h* | -h )
- echo "$usage"; exit 0 ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help" >&2
- exit 1 ;;
- * )
- break ;;
- esac
-done
-
-if test $# != 0; then
- echo "$me: too many arguments$help" >&2
- exit 1
-fi
-
-trap 'exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,) echo "int x;" > $dummy.c ;
- for c in cc gcc c89 c99 ; do
- if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
- CC_FOR_BUILD="$c"; break ;
- fi ;
- done ;
- if test x"$CC_FOR_BUILD" = x ; then
- CC_FOR_BUILD=no_compiler_found ;
- fi
- ;;
- ,,*) CC_FOR_BUILD=$CC ;;
- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
-esac ;'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
- PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- *:NetBSD:*:*)
- # NetBSD (nbsd) targets should (where applicable) match one or
- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
- # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
- # switched to ELF, *-*-netbsd* would select the old
- # object file format. This provides both forward
- # compatibility and a consistent mechanism for selecting the
- # object file format.
- #
- # Note: NetBSD doesn't particularly care about the vendor
- # portion of the name. We always set it to "unknown".
- sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
- case "${UNAME_MACHINE_ARCH}" in
- armeb) machine=armeb-unknown ;;
- arm*) machine=arm-unknown ;;
- sh3el) machine=shl-unknown ;;
- sh3eb) machine=sh-unknown ;;
- *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
- esac
- # The Operating System including object format, if it has switched
- # to ELF recently, or will in the future.
- case "${UNAME_MACHINE_ARCH}" in
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
- eval $set_cc_for_build
- if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep __ELF__ >/dev/null
- then
- # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- # Return netbsd for either. FIX?
- os=netbsd
- else
- os=netbsdelf
- fi
- ;;
- *)
- os=netbsd
- ;;
- esac
- # The OS release
- # Debian GNU/NetBSD machines have a different userland, and
- # thus, need a distinct triplet. However, they do not need
- # kernel version information, so it can be replaced with a
- # suitable tag, in the style of linux-gnu.
- case "${UNAME_VERSION}" in
- Debian*)
- release='-gnu'
- ;;
- *)
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- ;;
- esac
- # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
- # contains redundant information, the shorter form:
- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
- exit 0 ;;
- amiga:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- arc:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- hp300:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mac68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- macppc:OpenBSD:*:*)
- echo powerpc-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvme68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvme88k:OpenBSD:*:*)
- echo m88k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvmeppc:OpenBSD:*:*)
- echo powerpc-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- pmax:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- sgi:OpenBSD:*:*)
- echo mipseb-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- sun3:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- wgrisc:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- *:OpenBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- alpha:OSF1:*:*)
- if test $UNAME_RELEASE = "V4.0"; then
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
- fi
- # According to Compaq, /usr/sbin/psrinfo has been available on
- # OSF/1 and Tru64 systems produced since 1995. I hope that
- # covers most systems running today. This code pipes the CPU
- # types through head -n 1, so we only detect the type of CPU 0.
- ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
- case "$ALPHA_CPU_TYPE" in
- "EV4 (21064)")
- UNAME_MACHINE="alpha" ;;
- "EV4.5 (21064)")
- UNAME_MACHINE="alpha" ;;
- "LCA4 (21066/21068)")
- UNAME_MACHINE="alpha" ;;
- "EV5 (21164)")
- UNAME_MACHINE="alphaev5" ;;
- "EV5.6 (21164A)")
- UNAME_MACHINE="alphaev56" ;;
- "EV5.6 (21164PC)")
- UNAME_MACHINE="alphapca56" ;;
- "EV5.7 (21164PC)")
- UNAME_MACHINE="alphapca57" ;;
- "EV6 (21264)")
- UNAME_MACHINE="alphaev6" ;;
- "EV6.7 (21264A)")
- UNAME_MACHINE="alphaev67" ;;
- "EV6.8CB (21264C)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.8AL (21264B)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.8CX (21264D)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.9A (21264/EV69A)")
- UNAME_MACHINE="alphaev69" ;;
- "EV7 (21364)")
- UNAME_MACHINE="alphaev7" ;;
- "EV7.9 (21364A)")
- UNAME_MACHINE="alphaev79" ;;
- esac
- # A Vn.n version is a released version.
- # A Tn.n version is a released field test version.
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- exit 0 ;;
- Alpha*:OpenVMS:*:*)
- echo alpha-hp-vms
- exit 0 ;;
- Alpha\ *:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # Should we change UNAME_MACHINE based on the output of uname instead
- # of the specific Alpha model?
- echo alpha-pc-interix
- exit 0 ;;
- 21064:Windows_NT:50:3)
- echo alpha-dec-winnt3.5
- exit 0 ;;
- Amiga*:UNIX_System_V:4.0:*)
- echo m68k-unknown-sysv4
- exit 0;;
- *:[Aa]miga[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-amigaos
- exit 0 ;;
- *:[Mm]orph[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-morphos
- exit 0 ;;
- *:OS/390:*:*)
- echo i370-ibm-openedition
- exit 0 ;;
- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix${UNAME_RELEASE}
- exit 0;;
- SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
- exit 0;;
- Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
- # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "`(/bin/universe) 2>/dev/null`" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit 0 ;;
- NILE*:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit 0 ;;
- DRS?6000:unix:4.0:6*)
- echo sparc-icl-nx6
- exit 0 ;;
- DRS?6000:UNIX_SV:4.2*:7*)
- case `/usr/bin/uname -p` in
- sparc) echo sparc-icl-nx7 && exit 0 ;;
- esac ;;
- sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- i86pc:SunOS:5.*:*)
- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:6*:*)
- # According to config.sub, this is the proper way to canonicalize
- # SunOS6. Hard to guess exactly what SunOS6 will be like, but
- # it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:*:*)
- case "`/usr/bin/arch -k`" in
- Series*|S4*)
- UNAME_RELEASE=`uname -v`
- ;;
- esac
- # Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
- exit 0 ;;
- sun3*:SunOS:*:*)
- echo m68k-sun-sunos${UNAME_RELEASE}
- exit 0 ;;
- sun*:*:4.2BSD:*)
- UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
- test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
- case "`/bin/arch`" in
- sun3)
- echo m68k-sun-sunos${UNAME_RELEASE}
- ;;
- sun4)
- echo sparc-sun-sunos${UNAME_RELEASE}
- ;;
- esac
- exit 0 ;;
- aushp:SunOS:*:*)
- echo sparc-auspex-sunos${UNAME_RELEASE}
- exit 0 ;;
- # The situation for MiNT is a little confusing. The machine name
- # can be virtually everything (everything which is not
- # "atarist" or "atariste" at least should have a processor
- # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
- # to the lowercase version "mint" (or "freemint"). Finally
- # the system name "TOS" denotes a system which is actually not
- # MiNT. But MiNT is downward compatible to TOS, so this should
- # be no problem.
- atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
- atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
- *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
- milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint${UNAME_RELEASE}
- exit 0 ;;
- hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint${UNAME_RELEASE}
- exit 0 ;;
- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint${UNAME_RELEASE}
- exit 0 ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten${UNAME_RELEASE}
- exit 0 ;;
- RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
- exit 0 ;;
- RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix${UNAME_RELEASE}
- exit 0 ;;
- VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix${UNAME_RELEASE}
- exit 0 ;;
- 2020:CLIX:*:* | 2430:CLIX:*:*)
- echo clipper-intergraph-clix${UNAME_RELEASE}
- exit 0 ;;
- mips:*:*:UMIPS | mips:*:*:RISCos)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
- #if defined (host_mips) && defined (MIPSEB)
- #if defined (SYSTYPE_SYSV)
- printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_SVR4)
- printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
- printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
- #endif
- #endif
- exit (-1);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c \
- && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
- && exit 0
- echo mips-mips-riscos${UNAME_RELEASE}
- exit 0 ;;
- Motorola:PowerMAX_OS:*:*)
- echo powerpc-motorola-powermax
- exit 0 ;;
- Motorola:*:4.3:PL8-*)
- echo powerpc-harris-powermax
- exit 0 ;;
- Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
- echo powerpc-harris-powermax
- exit 0 ;;
- Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit 0 ;;
- m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit 0 ;;
- m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit 0 ;;
- m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit 0 ;;
- AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
- then
- if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
- [ ${TARGET_BINARY_INTERFACE}x = x ]
- then
- echo m88k-dg-dgux${UNAME_RELEASE}
- else
- echo m88k-dg-dguxbcs${UNAME_RELEASE}
- fi
- else
- echo i586-dg-dgux${UNAME_RELEASE}
- fi
- exit 0 ;;
- M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit 0 ;;
- M88*:*:R3*:*)
- # Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit 0 ;;
- XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit 0 ;;
- Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit 0 ;;
- *:IRIX*:*:*)
- echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit 0 ;;
- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
- i*86:AIX:*:*)
- echo i386-ibm-aix
- exit 0 ;;
- ia64:AIX:*:*)
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
- exit 0 ;;
- *:AIX:2:3)
- if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <sys/systemcfg.h>
-
- main()
- {
- if (!__power_pc())
- exit(1);
- puts("powerpc-ibm-aix3.2.5");
- exit(0);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
- echo rs6000-ibm-aix3.2.5
- elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
- else
- echo rs6000-ibm-aix3.2
- fi
- exit 0 ;;
- *:AIX:*:[45])
- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
- if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
- IBM_ARCH=rs6000
- else
- IBM_ARCH=powerpc
- fi
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${IBM_ARCH}-ibm-aix${IBM_REV}
- exit 0 ;;
- *:AIX:*:*)
- echo rs6000-ibm-aix
- exit 0 ;;
- ibmrt:4.4BSD:*|romp-ibm:BSD:*)
- echo romp-ibm-bsd4.4
- exit 0 ;;
- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
- echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
- exit 0 ;; # report: romp-ibm BSD 4.3
- *:BOSX:*:*)
- echo rs6000-bull-bosx
- exit 0 ;;
- DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit 0 ;;
- 9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit 0 ;;
- hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit 0 ;;
- 9000/[34678]??:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- case "${UNAME_MACHINE}" in
- 9000/31? ) HP_ARCH=m68000 ;;
- 9000/[34]?? ) HP_ARCH=m68k ;;
- 9000/[678][0-9][0-9])
- if [ -x /usr/bin/getconf ]; then
- sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
- case "${sc_cpu_version}" in
- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
- 532) # CPU_PA_RISC2_0
- case "${sc_kernel_bits}" in
- 32) HP_ARCH="hppa2.0n" ;;
- 64) HP_ARCH="hppa2.0w" ;;
- '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
- esac ;;
- esac
- fi
- if [ "${HP_ARCH}" = "" ]; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-
- #define _HPUX_SOURCE
- #include <stdlib.h>
- #include <unistd.h>
-
- int main ()
- {
- #if defined(_SC_KERNEL_BITS)
- long bits = sysconf(_SC_KERNEL_BITS);
- #endif
- long cpu = sysconf (_SC_CPU_VERSION);
-
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
- case CPU_PA_RISC2_0:
- #if defined(_SC_KERNEL_BITS)
- switch (bits)
- {
- case 64: puts ("hppa2.0w"); break;
- case 32: puts ("hppa2.0n"); break;
- default: puts ("hppa2.0"); break;
- } break;
- #else /* !defined(_SC_KERNEL_BITS) */
- puts ("hppa2.0"); break;
- #endif
- default: puts ("hppa1.0"); break;
- }
- exit (0);
- }
-EOF
- (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
- test -z "$HP_ARCH" && HP_ARCH=hppa
- fi ;;
- esac
- if [ ${HP_ARCH} = "hppa2.0w" ]
- then
- # avoid double evaluation of $set_cc_for_build
- test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
- if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
- then
- HP_ARCH="hppa2.0w"
- else
- HP_ARCH="hppa64"
- fi
- fi
- echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- exit 0 ;;
- ia64:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- echo ia64-hp-hpux${HPUX_REV}
- exit 0 ;;
- 3050*:HI-UX:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <unistd.h>
- int
- main ()
- {
- long cpu = sysconf (_SC_CPU_VERSION);
- /* The order matters, because CPU_IS_HP_MC68K erroneously returns
- true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
- results, however. */
- if (CPU_IS_PA_RISC (cpu))
- {
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
- default: puts ("hppa-hitachi-hiuxwe2"); break;
- }
- }
- else if (CPU_IS_HP_MC68K (cpu))
- puts ("m68k-hitachi-hiuxwe2");
- else puts ("unknown-hitachi-hiuxwe2");
- exit (0);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
- echo unknown-hitachi-hiuxwe2
- exit 0 ;;
- 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
- echo hppa1.1-hp-bsd
- exit 0 ;;
- 9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit 0 ;;
- *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- echo hppa1.0-hp-mpeix
- exit 0 ;;
- hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
- echo hppa1.1-hp-osf
- exit 0 ;;
- hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit 0 ;;
- i*86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
- echo ${UNAME_MACHINE}-unknown-osf1mk
- else
- echo ${UNAME_MACHINE}-unknown-osf1
- fi
- exit 0 ;;
- parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit 0 ;;
- C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit 0 ;;
- C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit 0 ;;
- C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit 0 ;;
- C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit 0 ;;
- C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit 0 ;;
- CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*[A-Z]90:*:*:*)
- echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
- | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
- -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*TS:*:*:*)
- echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*T3E:*:*:*)
- echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*SV1:*:*:*)
- echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- *:UNICOS/mp:*:*)
- echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit 0 ;;
- i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
- exit 0 ;;
- sparc*:BSD/OS:*:*)
- echo sparc-unknown-bsdi${UNAME_RELEASE}
- exit 0 ;;
- *:BSD/OS:*:*)
- echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- exit 0 ;;
- *:FreeBSD:*:*|*:GNU/FreeBSD:*:*)
- # Determine whether the default compiler uses glibc.
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <features.h>
- #if __GLIBC__ >= 2
- LIBC=gnu
- #else
- LIBC=
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
- # GNU/FreeBSD systems have a "k" prefix to indicate we are using
- # FreeBSD's kernel, but not the complete OS.
- case ${LIBC} in gnu) kernel_only='k' ;; esac
- echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
- exit 0 ;;
- i*:CYGWIN*:*)
- echo ${UNAME_MACHINE}-pc-cygwin
- exit 0 ;;
- i*:MINGW*:*)
- echo ${UNAME_MACHINE}-pc-mingw32
- exit 0 ;;
- i*:PW*:*)
- echo ${UNAME_MACHINE}-pc-pw32
- exit 0 ;;
- x86:Interix*:[34]*)
- echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
- exit 0 ;;
- [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
- echo i${UNAME_MACHINE}-pc-mks
- exit 0 ;;
- i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
- # UNAME_MACHINE based on the output of uname instead of i386?
- echo i586-pc-interix
- exit 0 ;;
- i*:UWIN*:*)
- echo ${UNAME_MACHINE}-pc-uwin
- exit 0 ;;
- p*:CYGWIN*:*)
- echo powerpcle-unknown-cygwin
- exit 0 ;;
- prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- *:GNU:*:*)
- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit 0 ;;
- i*86:Minix:*:*)
- echo ${UNAME_MACHINE}-pc-minix
- exit 0 ;;
- arm*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- cris:Linux:*:*)
- echo cris-axis-linux-gnu
- exit 0 ;;
- ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- mips:Linux:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #undef CPU
- #undef mips
- #undef mipsel
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=mipsel
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=mips
- #else
- CPU=
- #endif
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
- test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
- ;;
- mips64:Linux:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #undef CPU
- #undef mips64
- #undef mips64el
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=mips64el
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=mips64
- #else
- CPU=
- #endif
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
- test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
- ;;
- ppc:Linux:*:*)
- echo powerpc-unknown-linux-gnu
- exit 0 ;;
- ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-gnu
- exit 0 ;;
- alpha:Linux:*:*)
- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
- EV5) UNAME_MACHINE=alphaev5 ;;
- EV56) UNAME_MACHINE=alphaev56 ;;
- PCA56) UNAME_MACHINE=alphapca56 ;;
- PCA57) UNAME_MACHINE=alphapca56 ;;
- EV6) UNAME_MACHINE=alphaev6 ;;
- EV67) UNAME_MACHINE=alphaev67 ;;
- EV68*) UNAME_MACHINE=alphaev68 ;;
- esac
- objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
- exit 0 ;;
- parisc:Linux:*:* | hppa:Linux:*:*)
- # Look for CPU level
- case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- PA7*) echo hppa1.1-unknown-linux-gnu ;;
- PA8*) echo hppa2.0-unknown-linux-gnu ;;
- *) echo hppa-unknown-linux-gnu ;;
- esac
- exit 0 ;;
- parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-gnu
- exit 0 ;;
- s390:Linux:*:* | s390x:Linux:*:*)
- echo ${UNAME_MACHINE}-ibm-linux
- exit 0 ;;
- sh64*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- sh*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- sparc:Linux:*:* | sparc64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- x86_64:Linux:*:*)
- echo x86_64-unknown-linux-gnu
- exit 0 ;;
- i*86:Linux:*:*)
- # The BFD linker knows what the default object file format is, so
- # first see if it will tell us. cd to the root directory to prevent
- # problems with other programs or directories called `ld' in the path.
- # Set LC_ALL=C to ensure ld outputs messages in English.
- ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
- | sed -ne '/supported targets:/!d
- s/[ ][ ]*/ /g
- s/.*supported targets: *//
- s/ .*//
- p'`
- case "$ld_supported_targets" in
- elf32-i386)
- TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
- ;;
- a.out-i386-linux)
- echo "${UNAME_MACHINE}-pc-linux-gnuaout"
- exit 0 ;;
- coff-i386)
- echo "${UNAME_MACHINE}-pc-linux-gnucoff"
- exit 0 ;;
- "")
- # Either a pre-BFD a.out linker (linux-gnuoldld) or
- # one that does not give us useful --help.
- echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
- exit 0 ;;
- esac
- # Determine whether the default compiler is a.out or elf
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <features.h>
- #ifdef __ELF__
- # ifdef __GLIBC__
- # if __GLIBC__ >= 2
- LIBC=gnu
- # else
- LIBC=gnulibc1
- # endif
- # else
- LIBC=gnulibc1
- # endif
- #else
- #ifdef __INTEL_COMPILER
- LIBC=gnu
- #else
- LIBC=gnuaout
- #endif
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
- test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
- test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
- ;;
- i*86:DYNIX/ptx:4*:*)
- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
- # earlier versions are messed up and put the nodename in both
- # sysname and nodename.
- echo i386-sequent-sysv4
- exit 0 ;;
- i*86:UNIX_SV:4.2MP:2.*)
- # Unixware is an offshoot of SVR4, but it has its own version
- # number series starting with 2...
- # I am not positive that other SVR4 systems won't match this,
- # I just have to hope. -- rms.
- # Use sysv4.2uw... so that sysv4* matches it.
- echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
- exit 0 ;;
- i*86:OS/2:*:*)
- # If we were able to find `uname', then EMX Unix compatibility
- # is probably installed.
- echo ${UNAME_MACHINE}-pc-os2-emx
- exit 0 ;;
- i*86:XTS-300:*:STOP)
- echo ${UNAME_MACHINE}-unknown-stop
- exit 0 ;;
- i*86:atheos:*:*)
- echo ${UNAME_MACHINE}-unknown-atheos
- exit 0 ;;
- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
- echo i386-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- i*86:*DOS:*:*)
- echo ${UNAME_MACHINE}-pc-msdosdjgpp
- exit 0 ;;
- i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
- UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
- else
- echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
- fi
- exit 0 ;;
- i*86:*:5:[78]*)
- case `/bin/uname -X | grep "^Machine"` in
- *486*) UNAME_MACHINE=i486 ;;
- *Pentium) UNAME_MACHINE=i586 ;;
- *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
- esac
- echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
- exit 0 ;;
- i*86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
- echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
- elif /bin/uname -X 2>/dev/null >/dev/null ; then
- UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
- (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
- (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
- && UNAME_MACHINE=i586
- (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
- && UNAME_MACHINE=i686
- (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
- && UNAME_MACHINE=i686
- echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
- else
- echo ${UNAME_MACHINE}-pc-sysv32
- fi
- exit 0 ;;
- pc:*:*:*)
- # Left here for compatibility:
- # uname -m prints for DJGPP always 'pc', but it prints nothing about
- # the processor, so we play safe by assuming i386.
- echo i386-pc-msdosdjgpp
- exit 0 ;;
- Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit 0 ;;
- paragon:*:*:*)
- echo i860-intel-osf1
- exit 0 ;;
- i860:*:4.*:*) # i860-SVR4
- if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
- else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
- fi
- exit 0 ;;
- mini*:CTIX:SYS*5:*)
- # "miniframe"
- echo m68010-convergent-sysv
- exit 0 ;;
- mc68k:UNIX:SYSTEM5:3.51m)
- echo m68k-convergent-sysv
- exit 0 ;;
- M680?0:D-NIX:5.3:*)
- echo m68k-diab-dnix
- exit 0 ;;
- M68*:*:R3V[567]*:*)
- test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
- 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
- OS_REL=''
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4.3${OS_REL} && exit 0
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4 && exit 0 ;;
- m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit 0 ;;
- TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
- echo powerpc-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv${UNAME_RELEASE}
- exit 0 ;;
- RM*:ReliantUNIX-*:*:*)
- echo mips-sni-sysv4
- exit 0 ;;
- RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit 0 ;;
- *:SINIX-*:*:*)
- if uname -p 2>/dev/null >/dev/null ; then
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- echo ${UNAME_MACHINE}-sni-sysv4
- else
- echo ns32k-sni-sysv
- fi
- exit 0 ;;
- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit 0 ;;
- *:UNIX_System_V:4*:FTX*)
- # From Gerald Hewes <hewes@openmarket.com>.
- # How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit 0 ;;
- *:*:*:FTX*)
- # From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
- exit 0 ;;
- *:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo hppa1.1-stratus-vos
- exit 0 ;;
- mc68*:A/UX:*:*)
- echo m68k-apple-aux${UNAME_RELEASE}
- exit 0 ;;
- news*:NEWS-OS:6*:*)
- echo mips-sony-newsos6
- exit 0 ;;
- R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if [ -d /usr/nec ]; then
- echo mips-nec-sysv${UNAME_RELEASE}
- else
- echo mips-unknown-sysv${UNAME_RELEASE}
- fi
- exit 0 ;;
- BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
- exit 0 ;;
- BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
- echo powerpc-apple-beos
- exit 0 ;;
- BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
- exit 0 ;;
- SX-4:SUPER-UX:*:*)
- echo sx4-nec-superux${UNAME_RELEASE}
- exit 0 ;;
- SX-5:SUPER-UX:*:*)
- echo sx5-nec-superux${UNAME_RELEASE}
- exit 0 ;;
- SX-6:SUPER-UX:*:*)
- echo sx6-nec-superux${UNAME_RELEASE}
- exit 0 ;;
- Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody${UNAME_RELEASE}
- exit 0 ;;
- *:Rhapsody:*:*)
- echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
- exit 0 ;;
- *:Darwin:*:*)
- case `uname -p` in
- *86) UNAME_PROCESSOR=i686 ;;
- powerpc) UNAME_PROCESSOR=powerpc ;;
- esac
- echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
- exit 0 ;;
- *:procnto*:*:* | *:QNX:[0123456789]*:*)
- UNAME_PROCESSOR=`uname -p`
- if test "$UNAME_PROCESSOR" = "x86"; then
- UNAME_PROCESSOR=i386
- UNAME_MACHINE=pc
- fi
- echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
- exit 0 ;;
- *:QNX:*:4*)
- echo i386-pc-qnx
- exit 0 ;;
- NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*)
- echo nsr-tandem-nsk${UNAME_RELEASE}
- exit 0 ;;
- *:NonStop-UX:*:*)
- echo mips-compaq-nonstopux
- exit 0 ;;
- BS2000:POSIX*:*:*)
- echo bs2000-siemens-sysv
- exit 0 ;;
- DS/*:UNIX_System_V:*:*)
- echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
- exit 0 ;;
- *:Plan9:*:*)
- # "uname -m" is not consistent, so use $cputype instead. 386
- # is converted to i386 for consistency with other x86
- # operating systems.
- if test "$cputype" = "386"; then
- UNAME_MACHINE=i386
- else
- UNAME_MACHINE="$cputype"
- fi
- echo ${UNAME_MACHINE}-unknown-plan9
- exit 0 ;;
- *:TOPS-10:*:*)
- echo pdp10-unknown-tops10
- exit 0 ;;
- *:TENEX:*:*)
- echo pdp10-unknown-tenex
- exit 0 ;;
- KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- echo pdp10-dec-tops20
- exit 0 ;;
- XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- echo pdp10-xkl-tops20
- exit 0 ;;
- *:TOPS-20:*:*)
- echo pdp10-unknown-tops20
- exit 0 ;;
- *:ITS:*:*)
- echo pdp10-unknown-its
- exit 0 ;;
- SEI:*:*:SEIUX)
- echo mips-sei-seiux${UNAME_RELEASE}
- exit 0 ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
- printf ("arm-acorn-riscix"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
- printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
- if (version < 4)
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- else
- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
-
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-# include <sys/param.h>
-# if defined (BSD)
-# if BSD == 43
- printf ("vax-dec-bsd4.3\n"); exit (0);
-# else
-# if BSD == 199006
- printf ("vax-dec-bsd4.3reno\n"); exit (0);
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# endif
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# else
- printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
- exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
- case `getsysinfo -f cpu_type` in
- c1*)
- echo c1-convex-bsd
- exit 0 ;;
- c2*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit 0 ;;
- c34*)
- echo c34-convex-bsd
- exit 0 ;;
- c38*)
- echo c38-convex-bsd
- exit 0 ;;
- c4*)
- echo c4-convex-bsd
- exit 0 ;;
- esac
-fi
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
- ftp://ftp.gnu.org/pub/gnu/config/
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo = `(hostinfo) 2>/dev/null`
-/bin/universe = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/contrib/nslint-3.0a2/config.sub b/contrib/nslint-3.0a2/config.sub
deleted file mode 100755
index 9d7f7339..00000000
--- a/contrib/nslint-3.0a2/config.sub
+++ /dev/null
@@ -1,1504 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-
-timestamp='2003-07-04'
-
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine. It does not imply ALL GNU software can.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support. The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
- $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit 0 ;;
- --version | -v )
- echo "$version" ; exit 0 ;;
- --help | --h* | -h )
- echo "$usage"; exit 0 ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help"
- exit 1 ;;
-
- *local*)
- # First pass through any local machine types.
- echo $1
- exit 0;;
-
- * )
- break ;;
- esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
- exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
- exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
- nto-qnx* | linux-gnu* | kfreebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
- os=-$maybe_os
- basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
- *)
- basic_machine=`echo $1 | sed 's/-[^-]*$//'`
- if [ $basic_machine != $1 ]
- then os=`echo $1 | sed 's/.*-/-/'`
- else os=; fi
- ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work. We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
- -sun*os*)
- # Prevent following clause from handling this invalid input.
- ;;
- -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
- -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
- -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
- -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
- -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple | -axis)
- os=
- basic_machine=$1
- ;;
- -sim | -cisco | -oki | -wec | -winbond)
- os=
- basic_machine=$1
- ;;
- -scout)
- ;;
- -wrs)
- os=-vxworks
- basic_machine=$1
- ;;
- -chorusos*)
- os=-chorusos
- basic_machine=$1
- ;;
- -chorusrdb)
- os=-chorusrdb
- basic_machine=$1
- ;;
- -hiux*)
- os=-hiuxwe2
- ;;
- -sco5)
- os=-sco3.2v5
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco4)
- os=-sco3.2v4
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2.[4-9]*)
- os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2v[4-9]*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco*)
- os=-sco3.2v2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -udk*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -isc)
- os=-isc2.2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -clix*)
- basic_machine=clipper-intergraph
- ;;
- -isc*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -lynx*)
- os=-lynxos
- ;;
- -ptx*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
- ;;
- -windowsnt*)
- os=`echo $os | sed -e 's/windowsnt/winnt/'`
- ;;
- -psos*)
- os=-psos
- ;;
- -mint | -mint[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
- # Recognize the basic CPU types without company name.
- # Some are omitted here because they have special meanings below.
- 1750a | 580 \
- | a29k \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
- | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
- | c4x | clipper \
- | d10v | d30v | dlx | dsp16xx \
- | fr30 | frv \
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | i370 | i860 | i960 | ia64 \
- | ip2k \
- | m32r | m68000 | m68k | m88k | mcore \
- | mips | mipsbe | mipseb | mipsel | mipsle \
- | mips16 \
- | mips64 | mips64el \
- | mips64vr | mips64vrel \
- | mips64orion | mips64orionel \
- | mips64vr4100 | mips64vr4100el \
- | mips64vr4300 | mips64vr4300el \
- | mips64vr5000 | mips64vr5000el \
- | mipsisa32 | mipsisa32el \
- | mipsisa32r2 | mipsisa32r2el \
- | mipsisa64 | mipsisa64el \
- | mipsisa64sb1 | mipsisa64sb1el \
- | mipsisa64sr71k | mipsisa64sr71kel \
- | mipstx39 | mipstx39el \
- | mn10200 | mn10300 \
- | msp430 \
- | ns16k | ns32k \
- | openrisc | or32 \
- | pdp10 | pdp11 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
- | pyramid \
- | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
- | sh64 | sh64le \
- | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
- | strongarm \
- | tahoe | thumb | tic4x | tic80 | tron \
- | v850 | v850e \
- | we32k \
- | x86 | xscale | xstormy16 | xtensa \
- | z8k)
- basic_machine=$basic_machine-unknown
- ;;
- m6811 | m68hc11 | m6812 | m68hc12)
- # Motorola 68HC11/12.
- basic_machine=$basic_machine-unknown
- os=-none
- ;;
- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
- ;;
-
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
- i*86 | x86_64)
- basic_machine=$basic_machine-pc
- ;;
- # Object if more than one company name word.
- *-*-*)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
- # Recognize the basic CPU types with company name.
- 580-* \
- | a29k-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- | alphapca5[67]-* | alpha64pca5[67]-* | amd64-* | arc-* \
- | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
- | avr-* \
- | bs2000-* \
- | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
- | clipper-* | cydra-* \
- | d10v-* | d30v-* | dlx-* \
- | elxsi-* \
- | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
- | h8300-* | h8500-* \
- | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
- | i*86-* | i860-* | i960-* | ia64-* \
- | ip2k-* \
- | m32r-* \
- | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | mcore-* \
- | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
- | mips16-* \
- | mips64-* | mips64el-* \
- | mips64vr-* | mips64vrel-* \
- | mips64orion-* | mips64orionel-* \
- | mips64vr4100-* | mips64vr4100el-* \
- | mips64vr4300-* | mips64vr4300el-* \
- | mips64vr5000-* | mips64vr5000el-* \
- | mipsisa32-* | mipsisa32el-* \
- | mipsisa32r2-* | mipsisa32r2el-* \
- | mipsisa64-* | mipsisa64el-* \
- | mipsisa64sb1-* | mipsisa64sb1el-* \
- | mipsisa64sr71k-* | mipsisa64sr71kel-* \
- | mipstx39-* | mipstx39el-* \
- | msp430-* \
- | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
- | orion-* \
- | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
- | pyramid-* \
- | romp-* | rs6000-* \
- | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
- | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
- | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
- | tahoe-* | thumb-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
- | tron-* \
- | v850-* | v850e-* | vax-* \
- | we32k-* \
- | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
- | xtensa-* \
- | ymp-* \
- | z8k-*)
- ;;
- # Recognize the various machine names and aliases which stand
- # for a CPU type and a company and sometimes even an OS.
- 386bsd)
- basic_machine=i386-unknown
- os=-bsd
- ;;
- 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- basic_machine=m68000-att
- ;;
- 3b*)
- basic_machine=we32k-att
- ;;
- a29khif)
- basic_machine=a29k-amd
- os=-udi
- ;;
- adobe68k)
- basic_machine=m68010-adobe
- os=-scout
- ;;
- alliant | fx80)
- basic_machine=fx80-alliant
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- ;;
- am29k)
- basic_machine=a29k-none
- os=-bsd
- ;;
- amd64)
- basic_machine=x86_64-pc
- ;;
- amdahl)
- basic_machine=580-amdahl
- os=-sysv
- ;;
- amiga | amiga-*)
- basic_machine=m68k-unknown
- ;;
- amigaos | amigados)
- basic_machine=m68k-unknown
- os=-amigaos
- ;;
- amigaunix | amix)
- basic_machine=m68k-unknown
- os=-sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- os=-sysv
- ;;
- apollo68bsd)
- basic_machine=m68k-apollo
- os=-bsd
- ;;
- aux)
- basic_machine=m68k-apple
- os=-aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- os=-dynix
- ;;
- c90)
- basic_machine=c90-cray
- os=-unicos
- ;;
- convex-c1)
- basic_machine=c1-convex
- os=-bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- os=-bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- os=-bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- os=-bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- os=-bsd
- ;;
- cray | j90)
- basic_machine=j90-cray
- os=-unicos
- ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- cris | cris-* | etrax*)
- basic_machine=cris-axis
- ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
- decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
- ;;
- decsystem10* | dec10*)
- basic_machine=pdp10-dec
- os=-tops10
- ;;
- decsystem20* | dec20*)
- basic_machine=pdp10-dec
- os=-tops20
- ;;
- delta | 3300 | motorola-3300 | motorola-delta \
- | 3300-motorola | delta-motorola)
- basic_machine=m68k-motorola
- ;;
- delta88)
- basic_machine=m88k-motorola
- os=-sysv3
- ;;
- dpx20 | dpx20-*)
- basic_machine=rs6000-bull
- os=-bosx
- ;;
- dpx2* | dpx2*-bull)
- basic_machine=m68k-bull
- os=-sysv3
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- os=-ebmon
- ;;
- elxsi)
- basic_machine=elxsi-elxsi
- os=-bsd
- ;;
- encore | umax | mmax)
- basic_machine=ns32k-encore
- ;;
- es1800 | OSE68k | ose68k | ose | OSE)
- basic_machine=m68k-ericsson
- os=-ose
- ;;
- fx2800)
- basic_machine=i860-alliant
- ;;
- genix)
- basic_machine=ns32k-ns
- ;;
- gmicro)
- basic_machine=tron-gmicro
- os=-sysv
- ;;
- go32)
- basic_machine=i386-pc
- os=-go32
- ;;
- h3050r* | hiux*)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- os=-hms
- ;;
- h8300xray)
- basic_machine=h8300-hitachi
- os=-xray
- ;;
- h8500hms)
- basic_machine=h8500-hitachi
- os=-hms
- ;;
- harris)
- basic_machine=m88k-harris
- os=-sysv3
- ;;
- hp300-*)
- basic_machine=m68k-hp
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- os=-bsd
- ;;
- hp300hpux)
- basic_machine=m68k-hp
- os=-hpux
- ;;
- hp3k9[0-9][0-9] | hp9[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k2[0-9][0-9] | hp9k31[0-9])
- basic_machine=m68000-hp
- ;;
- hp9k3[2-9][0-9])
- basic_machine=m68k-hp
- ;;
- hp9k6[0-9][0-9] | hp6[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k7[0-79][0-9] | hp7[0-79][0-9])
- basic_machine=hppa1.1-hp
- ;;
- hp9k78[0-9] | hp78[0-9])
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][13679] | hp8[0-9][13679])
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][0-9] | hp8[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hppa-next)
- os=-nextstep3
- ;;
- hppaosf)
- basic_machine=hppa1.1-hp
- os=-osf
- ;;
- hppro)
- basic_machine=hppa1.1-hp
- os=-proelf
- ;;
- i370-ibm* | ibm*)
- basic_machine=i370-ibm
- ;;
-# I'm not sure what "Sysv32" means. Should this be sysv3.2?
- i*86v32)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv32
- ;;
- i*86v4*)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv4
- ;;
- i*86v)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv
- ;;
- i*86sol2)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-solaris2
- ;;
- i386mach)
- basic_machine=i386-mach
- os=-mach
- ;;
- i386-vsta | vsta)
- basic_machine=i386-unknown
- os=-vsta
- ;;
- iris | iris4d)
- basic_machine=mips-sgi
- case $os in
- -irix*)
- ;;
- *)
- os=-irix4
- ;;
- esac
- ;;
- isi68 | isi)
- basic_machine=m68k-isi
- os=-sysv
- ;;
- m88k-omron*)
- basic_machine=m88k-omron
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- os=-sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- os=-sysv
- ;;
- mingw32)
- basic_machine=i386-pc
- os=-mingw32
- ;;
- miniframe)
- basic_machine=m68000-convergent
- ;;
- *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
- mips3*-*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
- ;;
- mips3*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
- ;;
- mmix*)
- basic_machine=mmix-knuth
- os=-mmixware
- ;;
- monitor)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- morphos)
- basic_machine=powerpc-unknown
- os=-morphos
- ;;
- msdos)
- basic_machine=i386-pc
- os=-msdos
- ;;
- mvs)
- basic_machine=i370-ibm
- os=-mvs
- ;;
- ncr3000)
- basic_machine=i486-ncr
- os=-sysv4
- ;;
- netbsd386)
- basic_machine=i386-unknown
- os=-netbsd
- ;;
- netwinder)
- basic_machine=armv4l-rebel
- os=-linux
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- os=-newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- os=-newsos
- ;;
- news-3600 | risc-news)
- basic_machine=mips-sony
- os=-newsos
- ;;
- necv70)
- basic_machine=v70-nec
- os=-sysv
- ;;
- next | m*-next )
- basic_machine=m68k-next
- case $os in
- -nextstep* )
- ;;
- -ns2*)
- os=-nextstep2
- ;;
- *)
- os=-nextstep3
- ;;
- esac
- ;;
- nh3000)
- basic_machine=m68k-harris
- os=-cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- os=-cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- os=-nindy
- ;;
- mon960)
- basic_machine=i960-intel
- os=-mon960
- ;;
- nonstopux)
- basic_machine=mips-compaq
- os=-nonstopux
- ;;
- np1)
- basic_machine=np1-gould
- ;;
- nv1)
- basic_machine=nv1-cray
- os=-unicosmp
- ;;
- nsr-tandem)
- basic_machine=nsr-tandem
- ;;
- op50n-* | op60c-*)
- basic_machine=hppa1.1-oki
- os=-proelf
- ;;
- or32 | or32-*)
- basic_machine=or32-unknown
- os=-coff
- ;;
- OSE68000 | ose68000)
- basic_machine=m68000-ericsson
- os=-ose
- ;;
- os68k)
- basic_machine=m68k-none
- os=-os68k
- ;;
- pa-hitachi)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- paragon)
- basic_machine=i860-intel
- os=-osf
- ;;
- pbd)
- basic_machine=sparc-tti
- ;;
- pbb)
- basic_machine=m68k-tti
- ;;
- pc532 | pc532-*)
- basic_machine=ns32k-pc532
- ;;
- pentium | p5 | k5 | k6 | nexgen | viac3)
- basic_machine=i586-pc
- ;;
- pentiumpro | p6 | 6x86 | athlon | athlon_*)
- basic_machine=i686-pc
- ;;
- pentiumii | pentium2 | pentiumiii | pentium3)
- basic_machine=i686-pc
- ;;
- pentium4)
- basic_machine=i786-pc
- ;;
- pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
- basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumpro-* | p6-* | 6x86-* | athlon-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentium4-*)
- basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pn)
- basic_machine=pn-gould
- ;;
- power) basic_machine=power-ibm
- ;;
- ppc) basic_machine=powerpc-unknown
- ;;
- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppcle | powerpclittle | ppc-le | powerpc-little)
- basic_machine=powerpcle-unknown
- ;;
- ppcle-* | powerpclittle-*)
- basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64) basic_machine=powerpc64-unknown
- ;;
- ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64le | powerpc64little | ppc64-le | powerpc64-little)
- basic_machine=powerpc64le-unknown
- ;;
- ppc64le-* | powerpc64little-*)
- basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ps2)
- basic_machine=i386-ibm
- ;;
- pw32)
- basic_machine=i586-unknown
- os=-pw32
- ;;
- rom68k)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- rm[46]00)
- basic_machine=mips-siemens
- ;;
- rtpc | rtpc-*)
- basic_machine=romp-ibm
- ;;
- s390 | s390-*)
- basic_machine=s390-ibm
- ;;
- s390x | s390x-*)
- basic_machine=s390x-ibm
- ;;
- sa29200)
- basic_machine=a29k-amd
- os=-udi
- ;;
- sb1)
- basic_machine=mipsisa64sb1-unknown
- ;;
- sb1el)
- basic_machine=mipsisa64sb1el-unknown
- ;;
- sei)
- basic_machine=mips-sei
- os=-seiux
- ;;
- sequent)
- basic_machine=i386-sequent
- ;;
- sh)
- basic_machine=sh-hitachi
- os=-hms
- ;;
- sh64)
- basic_machine=sh64-unknown
- ;;
- sparclite-wrs | simso-wrs)
- basic_machine=sparclite-wrs
- os=-vxworks
- ;;
- sps7)
- basic_machine=m68k-bull
- os=-sysv2
- ;;
- spur)
- basic_machine=spur-unknown
- ;;
- st2000)
- basic_machine=m68k-tandem
- ;;
- stratus)
- basic_machine=i860-stratus
- os=-sysv4
- ;;
- sun2)
- basic_machine=m68000-sun
- ;;
- sun2os3)
- basic_machine=m68000-sun
- os=-sunos3
- ;;
- sun2os4)
- basic_machine=m68000-sun
- os=-sunos4
- ;;
- sun3os3)
- basic_machine=m68k-sun
- os=-sunos3
- ;;
- sun3os4)
- basic_machine=m68k-sun
- os=-sunos4
- ;;
- sun4os3)
- basic_machine=sparc-sun
- os=-sunos3
- ;;
- sun4os4)
- basic_machine=sparc-sun
- os=-sunos4
- ;;
- sun4sol2)
- basic_machine=sparc-sun
- os=-solaris2
- ;;
- sun3 | sun3-*)
- basic_machine=m68k-sun
- ;;
- sun4)
- basic_machine=sparc-sun
- ;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
- ;;
- sv1)
- basic_machine=sv1-cray
- os=-unicos
- ;;
- symmetry)
- basic_machine=i386-sequent
- os=-dynix
- ;;
- t3e)
- basic_machine=alphaev5-cray
- os=-unicos
- ;;
- t90)
- basic_machine=t90-cray
- os=-unicos
- ;;
- tic54x | c54x*)
- basic_machine=tic54x-unknown
- os=-coff
- ;;
- tic55x | c55x*)
- basic_machine=tic55x-unknown
- os=-coff
- ;;
- tic6x | c6x*)
- basic_machine=tic6x-unknown
- os=-coff
- ;;
- tx39)
- basic_machine=mipstx39-unknown
- ;;
- tx39el)
- basic_machine=mipstx39el-unknown
- ;;
- toad1)
- basic_machine=pdp10-xkl
- os=-tops20
- ;;
- tower | tower-32)
- basic_machine=m68k-ncr
- ;;
- udi29k)
- basic_machine=a29k-amd
- os=-udi
- ;;
- ultra3)
- basic_machine=a29k-nyu
- os=-sym1
- ;;
- v810 | necv810)
- basic_machine=v810-nec
- os=-none
- ;;
- vaxv)
- basic_machine=vax-dec
- os=-sysv
- ;;
- vms)
- basic_machine=vax-dec
- os=-vms
- ;;
- vpp*|vx|vx-*)
- basic_machine=f301-fujitsu
- ;;
- vxworks960)
- basic_machine=i960-wrs
- os=-vxworks
- ;;
- vxworks68)
- basic_machine=m68k-wrs
- os=-vxworks
- ;;
- vxworks29k)
- basic_machine=a29k-wrs
- os=-vxworks
- ;;
- w65*)
- basic_machine=w65-wdc
- os=-none
- ;;
- w89k-*)
- basic_machine=hppa1.1-winbond
- os=-proelf
- ;;
- xps | xps100)
- basic_machine=xps100-honeywell
- ;;
- ymp)
- basic_machine=ymp-cray
- os=-unicos
- ;;
- z8k-*-coff)
- basic_machine=z8k-unknown
- os=-sim
- ;;
- none)
- basic_machine=none-none
- os=-none
- ;;
-
-# Here we handle the default manufacturer of certain CPU types. It is in
-# some cases the only manufacturer, in others, it is the most popular.
- w89k)
- basic_machine=hppa1.1-winbond
- ;;
- op50n)
- basic_machine=hppa1.1-oki
- ;;
- op60c)
- basic_machine=hppa1.1-oki
- ;;
- romp)
- basic_machine=romp-ibm
- ;;
- rs6000)
- basic_machine=rs6000-ibm
- ;;
- vax)
- basic_machine=vax-dec
- ;;
- pdp10)
- # there are many clones, so DEC is not a safe bet
- basic_machine=pdp10-unknown
- ;;
- pdp11)
- basic_machine=pdp11-dec
- ;;
- we32k)
- basic_machine=we32k-att
- ;;
- sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
- basic_machine=sh-unknown
- ;;
- sh64)
- basic_machine=sh64-unknown
- ;;
- sparc | sparcv9 | sparcv9b)
- basic_machine=sparc-sun
- ;;
- cydra)
- basic_machine=cydra-cydrome
- ;;
- orion)
- basic_machine=orion-highlevel
- ;;
- orion105)
- basic_machine=clipper-highlevel
- ;;
- mac | mpw | mac-mpw)
- basic_machine=m68k-apple
- ;;
- pmac | pmac-mpw)
- basic_machine=powerpc-apple
- ;;
- *-unknown)
- # Make sure to match an already-canonicalized machine name.
- ;;
- *)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
- *-digital*)
- basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
- ;;
- *-commodore*)
- basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
- ;;
- *)
- ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
- # First match some system type aliases
- # that might get confused with valid system types.
- # -solaris* is a basic system type, with this one exception.
- -solaris1 | -solaris1.*)
- os=`echo $os | sed -e 's|solaris1|sunos4|'`
- ;;
- -solaris)
- os=-solaris2
- ;;
- -svr4*)
- os=-sysv4
- ;;
- -unixware*)
- os=-sysv4.2uw
- ;;
- -gnu/linux*)
- os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
- ;;
- # First accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST END IN A *, to match a version number.
- # -sysv* is not here because it comes later, after sysvr4.
- -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
- | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -netbsd* | -openbsd* | -kfreebsd* | -freebsd* | -riscix* \
- | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -chorusos* | -chorusrdb* \
- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
- | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
- | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
- | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
- | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
- | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
- | -powermax* | -dnix* | -nx6 | -nx7 | -sei*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- -qnx*)
- case $basic_machine in
- x86-* | i*86-*)
- ;;
- *)
- os=-nto$os
- ;;
- esac
- ;;
- -nto-qnx*)
- ;;
- -nto*)
- os=`echo $os | sed -e 's|nto|nto-qnx|'`
- ;;
- -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
- | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
- | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
- ;;
- -mac*)
- os=`echo $os | sed -e 's|mac|macos|'`
- ;;
- -linux*)
- os=`echo $os | sed -e 's|linux|linux-gnu|'`
- ;;
- -sunos5*)
- os=`echo $os | sed -e 's|sunos5|solaris2|'`
- ;;
- -sunos6*)
- os=`echo $os | sed -e 's|sunos6|solaris3|'`
- ;;
- -opened*)
- os=-openedition
- ;;
- -wince*)
- os=-wince
- ;;
- -osfrose*)
- os=-osfrose
- ;;
- -osf*)
- os=-osf
- ;;
- -utek*)
- os=-bsd
- ;;
- -dynix*)
- os=-bsd
- ;;
- -acis*)
- os=-aos
- ;;
- -atheos*)
- os=-atheos
- ;;
- -386bsd)
- os=-bsd
- ;;
- -ctix* | -uts*)
- os=-sysv
- ;;
- -nova*)
- os=-rtmk-nova
- ;;
- -ns2 )
- os=-nextstep2
- ;;
- -nsk*)
- os=-nsk
- ;;
- # Preserve the version number of sinix5.
- -sinix5.*)
- os=`echo $os | sed -e 's|sinix|sysv|'`
- ;;
- -sinix*)
- os=-sysv4
- ;;
- -triton*)
- os=-sysv3
- ;;
- -oss*)
- os=-sysv3
- ;;
- -svr4)
- os=-sysv4
- ;;
- -svr3)
- os=-sysv3
- ;;
- -sysvr4)
- os=-sysv4
- ;;
- # This must come after -sysvr4.
- -sysv*)
- ;;
- -ose*)
- os=-ose
- ;;
- -es1800*)
- os=-ose
- ;;
- -xenix)
- os=-xenix
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- os=-mint
- ;;
- -aros*)
- os=-aros
- ;;
- -kaos*)
- os=-kaos
- ;;
- -none)
- ;;
- *)
- # Get rid of the `-' at the beginning of $os.
- os=`echo $os | sed 's/[^-]*-//'`
- echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
- exit 1
- ;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system. Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
- *-acorn)
- os=-riscix1.2
- ;;
- arm*-rebel)
- os=-linux
- ;;
- arm*-semi)
- os=-aout
- ;;
- c4x-* | tic4x-*)
- os=-coff
- ;;
- # This must come before the *-dec entry.
- pdp10-*)
- os=-tops20
- ;;
- pdp11-*)
- os=-none
- ;;
- *-dec | vax-*)
- os=-ultrix4.2
- ;;
- m68*-apollo)
- os=-domain
- ;;
- i386-sun)
- os=-sunos4.0.2
- ;;
- m68000-sun)
- os=-sunos3
- # This also exists in the configure program, but was not the
- # default.
- # os=-sunos4
- ;;
- m68*-cisco)
- os=-aout
- ;;
- mips*-cisco)
- os=-elf
- ;;
- mips*-*)
- os=-elf
- ;;
- or32-*)
- os=-coff
- ;;
- *-tti) # must be before sparc entry or we get the wrong os.
- os=-sysv3
- ;;
- sparc-* | *-sun)
- os=-sunos4.1.1
- ;;
- *-be)
- os=-beos
- ;;
- *-ibm)
- os=-aix
- ;;
- *-wec)
- os=-proelf
- ;;
- *-winbond)
- os=-proelf
- ;;
- *-oki)
- os=-proelf
- ;;
- *-hp)
- os=-hpux
- ;;
- *-hitachi)
- os=-hiux
- ;;
- i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=-sysv
- ;;
- *-cbm)
- os=-amigaos
- ;;
- *-dg)
- os=-dgux
- ;;
- *-dolphin)
- os=-sysv3
- ;;
- m68k-ccur)
- os=-rtu
- ;;
- m88k-omron*)
- os=-luna
- ;;
- *-next )
- os=-nextstep
- ;;
- *-sequent)
- os=-ptx
- ;;
- *-crds)
- os=-unos
- ;;
- *-ns)
- os=-genix
- ;;
- i370-*)
- os=-mvs
- ;;
- *-next)
- os=-nextstep3
- ;;
- *-gould)
- os=-sysv
- ;;
- *-highlevel)
- os=-bsd
- ;;
- *-encore)
- os=-bsd
- ;;
- *-sgi)
- os=-irix
- ;;
- *-siemens)
- os=-sysv4
- ;;
- *-masscomp)
- os=-rtu
- ;;
- f30[01]-fujitsu | f700-fujitsu)
- os=-uxpv
- ;;
- *-rom68k)
- os=-coff
- ;;
- *-*bug)
- os=-coff
- ;;
- *-apple)
- os=-macos
- ;;
- *-atari*)
- os=-mint
- ;;
- *)
- os=-none
- ;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer. We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
- *-unknown)
- case $os in
- -riscix*)
- vendor=acorn
- ;;
- -sunos*)
- vendor=sun
- ;;
- -aix*)
- vendor=ibm
- ;;
- -beos*)
- vendor=be
- ;;
- -hpux*)
- vendor=hp
- ;;
- -mpeix*)
- vendor=hp
- ;;
- -hiux*)
- vendor=hitachi
- ;;
- -unos*)
- vendor=crds
- ;;
- -dgux*)
- vendor=dg
- ;;
- -luna*)
- vendor=omron
- ;;
- -genix*)
- vendor=ns
- ;;
- -mvs* | -opened*)
- vendor=ibm
- ;;
- -ptx*)
- vendor=sequent
- ;;
- -vxsim* | -vxworks* | -windiss*)
- vendor=wrs
- ;;
- -aux*)
- vendor=apple
- ;;
- -hms*)
- vendor=hitachi
- ;;
- -mpw* | -macos*)
- vendor=apple
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- vendor=atari
- ;;
- -vos*)
- vendor=stratus
- ;;
- esac
- basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
- ;;
-esac
-
-echo $basic_machine$os
-exit 0
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/contrib/nslint-3.0a2/configure b/contrib/nslint-3.0a2/configure
deleted file mode 100755
index cdaf3822..00000000
--- a/contrib/nslint-3.0a2/configure
+++ /dev/null
@@ -1,6885 +0,0 @@
-#! /bin/sh
-# From configure.in @(#) Id (LBL).
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.62.
-#
-# Copyright (c) 1995, 1996, 1997, 2006, 2009
-# The Regents of the University of California. All rights reserved.
-#
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- { (exit 1); exit 1; }
-fi
-
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# CDPATH.
-$as_unset CDPATH
-
-
-if test "x$CONFIG_SHELL" = x; then
- if (eval ":") 2>/dev/null; then
- as_have_required=yes
-else
- as_have_required=no
-fi
-
- if test $as_have_required = yes && (eval ":
-(as_func_return () {
- (exit \$1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
- :
-else
- exitcode=1
- echo positional parameters were not saved.
-fi
-
-test \$exitcode = 0) || { (exit 1); exit 1; }
-
-(
- as_lineno_1=\$LINENO
- as_lineno_2=\$LINENO
- test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
- test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
-") 2> /dev/null; then
- :
-else
- as_candidate_shells=
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- case $as_dir in
- /*)
- for as_base in sh bash ksh sh5; do
- as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
- done;;
- esac
-done
-IFS=$as_save_IFS
-
-
- for as_shell in $as_candidate_shells $SHELL; do
- # Try only shells that exist, to save several forks.
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { ("$as_shell") 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-:
-_ASEOF
-}; then
- CONFIG_SHELL=$as_shell
- as_have_required=yes
- if { "$as_shell" 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-:
-(as_func_return () {
- (exit $1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = "$1" ); then
- :
-else
- exitcode=1
- echo positional parameters were not saved.
-fi
-
-test $exitcode = 0) || { (exit 1); exit 1; }
-
-(
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
-
-_ASEOF
-}; then
- break
-fi
-
-fi
-
- done
-
- if test "x$CONFIG_SHELL" != x; then
- for as_var in BASH_ENV ENV
- do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
- done
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
-fi
-
-
- if test $as_have_required = no; then
- echo This script requires a shell more modern than all the
- echo shells that I found on your system. Please install a
- echo modern shell, or manually run the script under such a
- echo shell if you do have one.
- { (exit 1); exit 1; }
-fi
-
-
-fi
-
-fi
-
-
-
-(eval "as_func_return () {
- (exit \$1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
- :
-else
- exitcode=1
- echo positional parameters were not saved.
-fi
-
-test \$exitcode = 0") || {
- echo No shell found that supports shell functions.
- echo Please tell bug-autoconf@gnu.org about your system,
- echo including any error possibly output before this message.
- echo This can help us improve future autoconf versions.
- echo Configuration will now proceed without shell functions.
-}
-
-
-
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
-
- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
- # uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line after each line using $LINENO; the second 'sed'
- # does the real work. The second script uses 'N' to pair each
- # line-number line with the line containing $LINENO, and appends
- # trailing '-' during substitution so that $LINENO is not a special
- # case at line end.
- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # scripts with optimization help from Paolo Bonzini. Blame Lee
- # E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
- { (exit 1); exit 1; }; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
--n*)
- case `echo 'x\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- *) ECHO_C='\c';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -p'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -p'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -p'
- fi
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
- as_test_x='test -x'
-else
- if ls -dL / >/dev/null 2>&1; then
- as_ls_L_option=L
- else
- as_ls_L_option=
- fi
- as_test_x='
- eval sh -c '\''
- if test -d "$1"; then
- test -d "$1/.";
- else
- case $1 in
- -*)set "./$1";;
- esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
- ???[sx]*):;;*)false;;esac;fi
- '\'' sh
- '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-
-exec 7<&0 </dev/null 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-
-ac_unique_file="nslint.c"
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-# endif
-#endif
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-# include <memory.h>
-# endif
-# include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-ac_subst_vars='SHELL
-PATH_SEPARATOR
-PACKAGE_NAME
-PACKAGE_TARNAME
-PACKAGE_VERSION
-PACKAGE_STRING
-PACKAGE_BUGREPORT
-exec_prefix
-prefix
-program_transform_name
-bindir
-sbindir
-libexecdir
-datarootdir
-datadir
-sysconfdir
-sharedstatedir
-localstatedir
-includedir
-oldincludedir
-docdir
-infodir
-htmldir
-dvidir
-pdfdir
-psdir
-libdir
-localedir
-mandir
-DEFS
-ECHO_C
-ECHO_N
-ECHO_T
-LIBS
-build_alias
-host_alias
-target_alias
-build
-build_cpu
-build_vendor
-build_os
-host
-host_cpu
-host_vendor
-host_os
-target
-target_cpu
-target_vendor
-target_os
-CC
-CFLAGS
-LDFLAGS
-CPPFLAGS
-ac_ct_CC
-EXEEXT
-OBJEXT
-CPP
-GREP
-EGREP
-SHLICC2
-INSTALL_PROGRAM
-INSTALL_SCRIPT
-INSTALL_DATA
-LIBOBJS
-V_CCOPT
-V_INCLS
-LTLIBOBJS'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-enable_optimization
-with_gcc
-enable_largefile
-'
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CPP'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval $ac_prev=\$ac_option
- ac_prev=
- continue
- fi
-
- case $ac_option in
- *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *) ac_optarg=yes ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir=$ac_optarg ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build_alias ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build_alias=$ac_optarg ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file=$ac_optarg ;;
-
- --config-cache | -C)
- cache_file=config.cache ;;
-
- -datadir | --datadir | --datadi | --datad)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=*)
- datadir=$ac_optarg ;;
-
- -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
- | --dataroo | --dataro | --datar)
- ac_prev=datarootdir ;;
- -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
- | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
- datarootdir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
- { (exit 1); exit 1; }; }
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
- -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
- docdir=$ac_optarg ;;
-
- -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
- ac_prev=dvidir ;;
- -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
- dvidir=$ac_optarg ;;
-
- -enable-* | --enable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
- { (exit 1); exit 1; }; }
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=\$ac_optarg ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix=$ac_optarg ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he | -h)
- ac_init_help=long ;;
- -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
- ac_init_help=recursive ;;
- -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
- ac_init_help=short ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host_alias ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host_alias=$ac_optarg ;;
-
- -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
- ac_prev=htmldir ;;
- -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
- | --ht=*)
- htmldir=$ac_optarg ;;
-
- -includedir | --includedir | --includedi | --included | --include \
- | --includ | --inclu | --incl | --inc)
- ac_prev=includedir ;;
- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
- | --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir=$ac_optarg ;;
-
- -infodir | --infodir | --infodi | --infod | --info | --inf)
- ac_prev=infodir ;;
- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir=$ac_optarg ;;
-
- -libdir | --libdir | --libdi | --libd)
- ac_prev=libdir ;;
- -libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir=$ac_optarg ;;
-
- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
- | --libexe | --libex | --libe)
- ac_prev=libexecdir ;;
- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
- | --libexe=* | --libex=* | --libe=*)
- libexecdir=$ac_optarg ;;
-
- -localedir | --localedir | --localedi | --localed | --locale)
- ac_prev=localedir ;;
- -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
- localedir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst | --locals)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
- localstatedir=$ac_optarg ;;
-
- -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
- ac_prev=mandir ;;
- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir=$ac_optarg ;;
-
- -nfp | --nfp | --nf)
- # Obsolete; use --without-fp.
- with_fp=no ;;
-
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c | -n)
- no_create=yes ;;
-
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
- no_recursion=yes ;;
-
- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
- | --oldin | --oldi | --old | --ol | --o)
- ac_prev=oldincludedir ;;
- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir=$ac_optarg ;;
-
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix=$ac_optarg ;;
-
- -program-prefix | --program-prefix | --program-prefi | --program-pref \
- | --program-pre | --program-pr | --program-p)
- ac_prev=program_prefix ;;
- -program-prefix=* | --program-prefix=* | --program-prefi=* \
- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix=$ac_optarg ;;
-
- -program-suffix | --program-suffix | --program-suffi | --program-suff \
- | --program-suf | --program-su | --program-s)
- ac_prev=program_suffix ;;
- -program-suffix=* | --program-suffix=* | --program-suffi=* \
- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix=$ac_optarg ;;
-
- -program-transform-name | --program-transform-name \
- | --program-transform-nam | --program-transform-na \
- | --program-transform-n | --program-transform- \
- | --program-transform | --program-transfor \
- | --program-transfo | --program-transf \
- | --program-trans | --program-tran \
- | --progr-tra | --program-tr | --program-t)
- ac_prev=program_transform_name ;;
- -program-transform-name=* | --program-transform-name=* \
- | --program-transform-nam=* | --program-transform-na=* \
- | --program-transform-n=* | --program-transform-=* \
- | --program-transform=* | --program-transfor=* \
- | --program-transfo=* | --program-transf=* \
- | --program-trans=* | --program-tran=* \
- | --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name=$ac_optarg ;;
-
- -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
- ac_prev=pdfdir ;;
- -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
- pdfdir=$ac_optarg ;;
-
- -psdir | --psdir | --psdi | --psd | --ps)
- ac_prev=psdir ;;
- -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
- psdir=$ac_optarg ;;
-
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- silent=yes ;;
-
- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
- ac_prev=sbindir ;;
- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
- | --sbi=* | --sb=*)
- sbindir=$ac_optarg ;;
-
- -sharedstatedir | --sharedstatedir | --sharedstatedi \
- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
- | --sharedst | --shareds | --shared | --share | --shar \
- | --sha | --sh)
- ac_prev=sharedstatedir ;;
- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
- | --sha=* | --sh=*)
- sharedstatedir=$ac_optarg ;;
-
- -site | --site | --sit)
- ac_prev=site ;;
- -site=* | --site=* | --sit=*)
- site=$ac_optarg ;;
-
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir=$ac_optarg ;;
-
- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
- | --syscon | --sysco | --sysc | --sys | --sy)
- ac_prev=sysconfdir ;;
- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir=$ac_optarg ;;
-
- -target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target_alias ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target_alias=$ac_optarg ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers | -V)
- ac_init_version=: ;;
-
- -with-* | --with-*)
- ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
- { (exit 1); exit 1; }; }
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=\$ac_optarg ;;
-
- -without-* | --without-*)
- ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
- { (exit 1); exit 1; }; }
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=no ;;
-
- --x)
- # Obsolete; use --with-x.
- with_x=yes ;;
-
- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
- | --x-incl | --x-inc | --x-in | --x-i)
- ac_prev=x_includes ;;
- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes=$ac_optarg ;;
-
- -x-libraries | --x-libraries | --x-librarie | --x-librari \
- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
- ac_prev=x_libraries ;;
- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries=$ac_optarg ;;
-
- -*) { $as_echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; }
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2
- { (exit 1); exit 1; }; }
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
- : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- ac_option=--`echo $ac_prev | sed 's/_/-/g'`
- { $as_echo "$as_me: error: missing argument to $ac_option" >&2
- { (exit 1); exit 1; }; }
-fi
-
-if test -n "$ac_unrecognized_opts"; then
- case $enable_option_checking in
- no) ;;
- fatal) { $as_echo "$as_me: error: Unrecognized options: $ac_unrecognized_opts" >&2
- { (exit 1); exit 1; }; } ;;
- *) $as_echo "$as_me: WARNING: Unrecognized options: $ac_unrecognized_opts" >&2 ;;
- esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
-do
- eval ac_val=\$$ac_var
- # Remove trailing slashes.
- case $ac_val in
- */ )
- ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
- eval $ac_var=\$ac_val;;
- esac
- # Be sure to have absolute directory names.
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
- esac
- { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
- { (exit 1); exit 1; }; }
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
- if test "x$build_alias" = x; then
- cross_compiling=maybe
- $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
- If a cross compiler is detected then cross compile mode will be used." >&2
- elif test "x$build_alias" != "x$host_alias"; then
- cross_compiling=yes
- fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- { $as_echo "$as_me: error: Working directory cannot be determined" >&2
- { (exit 1); exit 1; }; }
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- { $as_echo "$as_me: error: pwd does not report name of working directory" >&2
- { (exit 1); exit 1; }; }
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
- ac_srcdir_defaulted=yes
- # Try the directory containing this script, then the parent directory.
- ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_myself" : 'X\(//\)[^/]' \| \
- X"$as_myself" : 'X\(//\)$' \| \
- X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- srcdir=$ac_confdir
- if test ! -r "$srcdir/$ac_unique_file"; then
- srcdir=..
- fi
-else
- ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
- { (exit 1); exit 1; }; }
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2
- { (exit 1); exit 1; }; }
- pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
- srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
- eval ac_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_env_${ac_var}_value=\$${ac_var}
- eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat <<_ACEOF
-\`configure' configures this package to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE. See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
- -h, --help display this help and exit
- --help=short display options specific to this package
- --help=recursive display the short help of all the included packages
- -V, --version display version information and exit
- -q, --quiet, --silent do not print \`checking...' messages
- --cache-file=FILE cache test results in FILE [disabled]
- -C, --config-cache alias for \`--cache-file=config.cache'
- -n, --no-create do not create output files
- --srcdir=DIR find the sources in DIR [configure dir or \`..']
-
-Installation directories:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc [/usr/include]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_ACEOF
-
- cat <<\_ACEOF
-
-System types:
- --build=BUILD configure for building on BUILD [guessed]
- --host=HOST cross-compile to build programs to run on HOST [BUILD]
- --target=TARGET configure for building compilers for TARGET [HOST]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-
- cat <<\_ACEOF
-
-Optional Features:
- --disable-option-checking ignore unrecognized --enable/--with options
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --disable-optimization turn off gcc optimization
- --disable-largefile omit support for large files
-
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --without-gcc don't use gcc
-
-Some influential environment variables:
- CC C compiler command
- CFLAGS C compiler flags
- LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
- nonstandard directory <lib dir>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
- CPP C preprocessor
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" ||
- { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
- continue
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
- cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
- if test -f "$ac_srcdir/configure.gnu"; then
- echo &&
- $SHELL "$ac_srcdir/configure.gnu" --help=recursive
- elif test -f "$ac_srcdir/configure"; then
- echo &&
- $SHELL "$ac_srcdir/configure" --help=recursive
- else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
- done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
- cat <<\_ACEOF
-configure
-generated by GNU Autoconf 2.62
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-
-Copyright (c) 1995, 1996, 1997, 2006, 2009
- The Regents of the University of California. All rights reserved.
-_ACEOF
- exit
-fi
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by $as_me, which was
-generated by GNU Autoconf 2.62. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
-
-/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
-/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
-/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
-done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
- for ac_arg
- do
- case $ac_arg in
- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- continue ;;
- *\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
- 2)
- ac_configure_args1="$ac_configure_args1 '$ac_arg'"
- if test $ac_must_keep_next = true; then
- ac_must_keep_next=false # Got value, back to normal.
- else
- case $ac_arg in
- *=* | --config-cache | -C | -disable-* | --disable-* \
- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
- | -with-* | --with-* | -without-* | --without-* | --x)
- case "$ac_configure_args0 " in
- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
- esac
- ;;
- -* ) ac_must_keep_next=true ;;
- esac
- fi
- ac_configure_args="$ac_configure_args '$ac_arg'"
- ;;
- esac
- done
-done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log. We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- cat <<\_ASBOX
-## ---------------- ##
-## Cache variables. ##
-## ---------------- ##
-_ASBOX
- echo
- # The following way of writing the cache mishandles newlines in values,
-(
- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
-$as_echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) $as_unset $ac_var ;;
- esac ;;
- esac
- done
- (set) 2>&1 |
- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- sed -n \
- "s/'\''/'\''\\\\'\'''\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
- ;; #(
- *)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-)
- echo
-
- cat <<\_ASBOX
-## ----------------- ##
-## Output variables. ##
-## ----------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- cat <<\_ASBOX
-## ------------------- ##
-## File substitutions. ##
-## ------------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- cat <<\_ASBOX
-## ----------- ##
-## confdefs.h. ##
-## ----------- ##
-_ASBOX
- echo
- cat confdefs.h
- echo
- fi
- test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
- ac_site_file1=$CONFIG_SITE
-elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
-else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
- test "x$ac_site_file" = xNONE && continue
- if test -r "$ac_site_file"; then
- { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file"
- fi
-done
-
-if test -r "$cache_file"; then
- # Some versions of bash will fail to source /dev/null (special
- # files actually), so we avoid doing that.
- if test -f "$cache_file"; then
- { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
- esac
- fi
-else
- { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
- >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
- eval ac_old_set=\$ac_cv_env_${ac_var}_set
- eval ac_new_set=\$ac_env_${ac_var}_set
- eval ac_old_val=\$ac_cv_env_${ac_var}_value
- eval ac_new_val=\$ac_env_${ac_var}_value
- case $ac_old_set,$ac_new_set in
- set,)
- { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,);;
- *)
- if test "x$ac_old_val" != "x$ac_new_val"; then
- # differences in whitespace do not lead to failure.
- ac_old_val_w=`echo x $ac_old_val`
- ac_new_val_w=`echo x $ac_new_val`
- if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- ac_cache_corrupted=:
- else
- { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
- eval $ac_var=\$ac_old_val
- fi
- { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
- *) ac_arg=$ac_var=$ac_new_val ;;
- esac
- case " $ac_configure_args " in
- *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
- *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
-ac_aux_dir=
-for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
-$as_echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-
-
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
-$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
- { (exit 1); exit 1; }; }
-
-{ $as_echo "$as_me:$LINENO: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if test "${ac_cv_build+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
- { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
-$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
- { (exit 1); exit 1; }; }
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
-$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
- { (exit 1); exit 1; }; }
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
-$as_echo "$as_me: error: invalid value of canonical build" >&2;}
- { (exit 1); exit 1; }; };;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:$LINENO: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if test "${ac_cv_host+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test "x$host_alias" = x; then
- ac_cv_host=$ac_cv_build
-else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
-$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
-$as_echo "$as_me: error: invalid value of canonical host" >&2;}
- { (exit 1); exit 1; }; };;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:$LINENO: checking target system type" >&5
-$as_echo_n "checking target system type... " >&6; }
-if test "${ac_cv_target+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test "x$target_alias" = x; then
- ac_cv_target=$ac_cv_host
-else
- ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
- { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5
-$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_target" >&5
-$as_echo "$ac_cv_target" >&6; }
-case $ac_cv_target in
-*-*-*) ;;
-*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical target" >&5
-$as_echo "$as_me: error: invalid value of canonical target" >&2;}
- { (exit 1); exit 1; }; };;
-esac
-target=$ac_cv_target
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_target
-shift
-target_cpu=$1
-target_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-target_os=$*
-IFS=$ac_save_IFS
-case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
-
-
-# The aliases save the names the user supplied, while $host etc.
-# will get canonicalized.
-test -n "$target_alias" &&
- test "$program_prefix$program_suffix$program_transform_name" = \
- NONENONEs,x,x, &&
- program_prefix=${target_alias}-
-
-umask 002
-
-if test -z "$PWD" ; then
- PWD=`pwd`
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-else
- CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- fi
-fi
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# != 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:$LINENO: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-{ (ac_try="$ac_compiler --version >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler --version >&5") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (ac_try="$ac_compiler -v >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler -v >&5") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (ac_try="$ac_compiler -V >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler -V >&5") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { (ac_try="$ac_link_default"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
- break;;
- * )
- break;;
- esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
- ac_file=''
-fi
-
-{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-if test -z "$ac_file"; then
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
-fi
-
-ac_exeext=$ac_cv_exeext
-
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
- if { ac_try='./$ac_file'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
- fi
- fi
-fi
-{ $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
-done
-else
- { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest$ac_cv_exeext
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_compiler_gnu=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_compiler_gnu=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_g=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- CFLAGS=""
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- :
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_g=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_c89=$ac_arg
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:$LINENO: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:$LINENO: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if test "${ac_cv_prog_CPP+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- :
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Broken: fails on valid input.
-continue
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- # Broken: success on invalid input.
-continue
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
- break
-fi
-
- done
- ac_cv_prog_CPP=$CPP
-
-fi
- CPP=$ac_cv_prog_CPP
-else
- ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:$LINENO: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- :
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Broken: fails on valid input.
-continue
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- # Broken: success on invalid input.
-continue
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
- :
-else
- { { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -z "$GREP"; then
- ac_path_GREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
-# Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'GREP' >> "conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- ac_count=`expr $ac_count + 1`
- if test $ac_count -gt ${ac_path_GREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_GREP="$ac_path_GREP"
- ac_path_GREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_GREP_found && break 3
- done
- done
-done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_GREP"; then
- { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
- { (exit 1); exit 1; }; }
- fi
-else
- ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:$LINENO: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
- then ac_cv_path_EGREP="$GREP -E"
- else
- if test -z "$EGREP"; then
- ac_path_EGREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in egrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
- { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
- # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'EGREP' >> "conftest.nl"
- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- ac_count=`expr $ac_count + 1`
- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_EGREP="$ac_path_EGREP"
- ac_path_EGREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_EGREP_found && break 3
- done
- done
-done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_EGREP"; then
- { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
- { (exit 1); exit 1; }; }
- fi
-else
- ac_cv_path_EGREP=$EGREP
-fi
-
- fi
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_header_stdc=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_header_stdc=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then
- :
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then
- :
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then
- :
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_header_stdc=no
-fi
-rm -rf conftest.dSYM
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-
-fi
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-
-
-
-
-
-
-
-
-
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
-do
-as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-$as_echo_n "checking for $ac_header... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- eval "$as_ac_Header=yes"
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- eval "$as_ac_Header=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
- $as_echo "$as_val"'`
- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if test `eval 'as_val=${'$as_ac_Header'}
- $as_echo "$as_val"'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
- # Check whether --enable-optimization was given.
-if test "${enable_optimization+set}" = set; then
- enableval=$enable_optimization; ac_cv_without_optimization=${withval}
-fi
-
-
-
-
-
-# Check whether --with-gcc was given.
-if test "${with_gcc+set}" = set; then
- withval=$with_gcc;
-fi
-
-
- if test "${ac_cv_header_minix_config_h+set}" = set; then
- { $as_echo "$as_me:$LINENO: checking for minix/config.h" >&5
-$as_echo_n "checking for minix/config.h... " >&6; }
-if test "${ac_cv_header_minix_config_h+set}" = set; then
- $as_echo_n "(cached) " >&6
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5
-$as_echo "$ac_cv_header_minix_config_h" >&6; }
-else
- # Is the header compilable?
-{ $as_echo "$as_me:$LINENO: checking minix/config.h usability" >&5
-$as_echo_n "checking minix/config.h usability... " >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <minix/config.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:$LINENO: checking minix/config.h presence" >&5
-$as_echo_n "checking minix/config.h presence... " >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <minix/config.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: minix/config.h: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: minix/config.h: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: minix/config.h: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: minix/config.h: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: minix/config.h: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the preprocessor's result" >&5
-$as_echo "$as_me: WARNING: minix/config.h: proceeding with the preprocessor's result" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: in the future, the compiler will take precedence" >&5
-$as_echo "$as_me: WARNING: minix/config.h: in the future, the compiler will take precedence" >&2;}
-
- ;;
-esac
-{ $as_echo "$as_me:$LINENO: checking for minix/config.h" >&5
-$as_echo_n "checking for minix/config.h... " >&6; }
-if test "${ac_cv_header_minix_config_h+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_cv_header_minix_config_h=$ac_header_preproc
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5
-$as_echo "$ac_cv_header_minix_config_h" >&6; }
-
-fi
-if test $ac_cv_header_minix_config_h = yes; then
- MINIX=yes
-else
- MINIX=
-fi
-
-
- if test "$MINIX" = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define _POSIX_SOURCE 1
-_ACEOF
-
-
-cat >>confdefs.h <<\_ACEOF
-#define _POSIX_1_SOURCE 2
-_ACEOF
-
-
-cat >>confdefs.h <<\_ACEOF
-#define _MINIX 1
-_ACEOF
-
- fi
-
-
-
- { $as_echo "$as_me:$LINENO: checking whether it is safe to define __EXTENSIONS__" >&5
-$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
-if test "${ac_cv_safe_to_define___extensions__+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-# define __EXTENSIONS__ 1
- $ac_includes_default
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_safe_to_define___extensions__=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_safe_to_define___extensions__=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_safe_to_define___extensions__" >&5
-$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
- test $ac_cv_safe_to_define___extensions__ = yes &&
- cat >>confdefs.h <<\_ACEOF
-#define __EXTENSIONS__ 1
-_ACEOF
-
- cat >>confdefs.h <<\_ACEOF
-#define _ALL_SOURCE 1
-_ACEOF
-
- cat >>confdefs.h <<\_ACEOF
-#define _GNU_SOURCE 1
-_ACEOF
-
- cat >>confdefs.h <<\_ACEOF
-#define _POSIX_PTHREAD_SEMANTICS 1
-_ACEOF
-
- cat >>confdefs.h <<\_ACEOF
-#define _TANDEM_SOURCE 1
-_ACEOF
-
-
- V_CCOPT=""
- if test "${ac_cv_without_optimization+set}" != set; then
- V_CCOPT="-O"
- fi
- V_INCLS=""
- if test "${srcdir}" != "." ; then
- V_INCLS="-I\$\(srcdir\)"
- fi
- if test -z "$CC" ; then
- case "$target_os" in
-
- bsdi*)
- # Extract the first word of "shlicc2", so it can be a program name with args.
-set dummy shlicc2; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_SHLICC2+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$SHLICC2"; then
- ac_cv_prog_SHLICC2="$SHLICC2" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_SHLICC2="yes"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_prog_SHLICC2" && ac_cv_prog_SHLICC2="no"
-fi
-fi
-SHLICC2=$ac_cv_prog_SHLICC2
-if test -n "$SHLICC2"; then
- { $as_echo "$as_me:$LINENO: result: $SHLICC2" >&5
-$as_echo "$SHLICC2" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- if test $SHLICC2 = yes ; then
- CC=shlicc2
- export CC
- fi
- ;;
- esac
- fi
- if test -z "$CC" -a "$with_gcc" = no ; then
- CC=cc
- export CC
- fi
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-else
- CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- fi
-fi
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# != 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:$LINENO: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-{ (ac_try="$ac_compiler --version >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler --version >&5") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (ac_try="$ac_compiler -v >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler -v >&5") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (ac_try="$ac_compiler -V >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler -V >&5") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-
-{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_compiler_gnu=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_compiler_gnu=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_g=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- CFLAGS=""
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- :
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_g=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_c89=$ac_arg
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:$LINENO: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:$LINENO: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
- # Check whether --enable-largefile was given.
-if test "${enable_largefile+set}" = set; then
- enableval=$enable_largefile;
-fi
-
-if test "$enable_largefile" != no; then
-
- { $as_echo "$as_me:$LINENO: checking for special C compiler options needed for large files" >&5
-$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
-if test "${ac_cv_sys_largefile_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_cv_sys_largefile_CC=no
- if test "$GCC" != yes; then
- ac_save_CC=$CC
- while :; do
- # IRIX 6.2 and later do not support large files by default,
- # so use the C compiler's -n32 option if that helps.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
- since some C++ compilers masquerading as C compilers
- incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
- ? 1 : -1];
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
- rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- break
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext
- CC="$CC -n32"
- rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_sys_largefile_CC=' -n32'; break
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext
- break
- done
- CC=$ac_save_CC
- rm -f conftest.$ac_ext
- fi
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_CC" >&5
-$as_echo "$ac_cv_sys_largefile_CC" >&6; }
- if test "$ac_cv_sys_largefile_CC" != no; then
- CC=$CC$ac_cv_sys_largefile_CC
- fi
-
- { $as_echo "$as_me:$LINENO: checking for _FILE_OFFSET_BITS value needed for large files" >&5
-$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
-if test "${ac_cv_sys_file_offset_bits+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
- since some C++ compilers masquerading as C compilers
- incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
- ? 1 : -1];
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_sys_file_offset_bits=no; break
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#define _FILE_OFFSET_BITS 64
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
- since some C++ compilers masquerading as C compilers
- incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
- ? 1 : -1];
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_sys_file_offset_bits=64; break
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_cv_sys_file_offset_bits=unknown
- break
-done
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_sys_file_offset_bits" >&5
-$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
-case $ac_cv_sys_file_offset_bits in #(
- no | unknown) ;;
- *)
-cat >>confdefs.h <<_ACEOF
-#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
-_ACEOF
-;;
-esac
-rm -rf conftest*
- if test $ac_cv_sys_file_offset_bits = unknown; then
- { $as_echo "$as_me:$LINENO: checking for _LARGE_FILES value needed for large files" >&5
-$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
-if test "${ac_cv_sys_large_files+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
- since some C++ compilers masquerading as C compilers
- incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
- ? 1 : -1];
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_sys_large_files=no; break
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#define _LARGE_FILES 1
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
- since some C++ compilers masquerading as C compilers
- incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
- ? 1 : -1];
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_sys_large_files=1; break
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_cv_sys_large_files=unknown
- break
-done
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_sys_large_files" >&5
-$as_echo "$ac_cv_sys_large_files" >&6; }
-case $ac_cv_sys_large_files in #(
- no | unknown) ;;
- *)
-cat >>confdefs.h <<_ACEOF
-#define _LARGE_FILES $ac_cv_sys_large_files
-_ACEOF
-;;
-esac
-rm -rf conftest*
- fi
-fi
-
- if test "$GCC" != yes ; then
- { $as_echo "$as_me:$LINENO: checking that $CC handles ansi prototypes" >&5
-$as_echo_n "checking that $CC handles ansi prototypes... " >&6; }
- if test "${ac_cv_lbl_cc_ansi_prototypes+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-int
-main ()
-{
-int frob(int, char *)
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_lbl_cc_ansi_prototypes=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lbl_cc_ansi_prototypes=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lbl_cc_ansi_prototypes" >&5
-$as_echo "$ac_cv_lbl_cc_ansi_prototypes" >&6; }
- if test $ac_cv_lbl_cc_ansi_prototypes = no ; then
- case "$target_os" in
-
- hpux*)
- { $as_echo "$as_me:$LINENO: checking for HP-UX ansi compiler ($CC -Aa -D_HPUX_SOURCE)" >&5
-$as_echo_n "checking for HP-UX ansi compiler ($CC -Aa -D_HPUX_SOURCE)... " >&6; }
- savedcflags="$CFLAGS"
- CFLAGS="-Aa -D_HPUX_SOURCE $CFLAGS"
- if test "${ac_cv_lbl_cc_hpux_cc_aa+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-int
-main ()
-{
-int frob(int, char *)
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_lbl_cc_hpux_cc_aa=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lbl_cc_hpux_cc_aa=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lbl_cc_hpux_cc_aa" >&5
-$as_echo "$ac_cv_lbl_cc_hpux_cc_aa" >&6; }
- if test $ac_cv_lbl_cc_hpux_cc_aa = no ; then
- { { $as_echo "$as_me:$LINENO: error: see the INSTALL doc for more info" >&5
-$as_echo "$as_me: error: see the INSTALL doc for more info" >&2;}
- { (exit 1); exit 1; }; }
- fi
- CFLAGS="$savedcflags"
- V_CCOPT="-Aa $V_CCOPT"
-
-cat >>confdefs.h <<\_ACEOF
-#define _HPUX_SOURCE /**/
-_ACEOF
-
- ;;
-
- *)
- { { $as_echo "$as_me:$LINENO: error: see the INSTALL doc for more info" >&5
-$as_echo "$as_me: error: see the INSTALL doc for more info" >&2;}
- { (exit 1); exit 1; }; }
- ;;
- esac
- fi
- V_INCLS="$V_INCLS -I/usr/local/include"
- LDFLAGS="$LDFLAGS -L/usr/local/lib"
-
- case "$target_os" in
-
- irix*)
- V_CCOPT="$V_CCOPT -xansi -signed -g3"
- ;;
-
- osf*)
- V_CCOPT="$V_CCOPT -std1 -g3"
- ;;
-
- ultrix*)
- { $as_echo "$as_me:$LINENO: checking that Ultrix $CC hacks const in prototypes" >&5
-$as_echo_n "checking that Ultrix $CC hacks const in prototypes... " >&6; }
- if test "${ac_cv_lbl_cc_const_proto+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-int
-main ()
-{
-struct a { int b; };
- void c(const struct a *)
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_lbl_cc_const_proto=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lbl_cc_const_proto=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lbl_cc_const_proto" >&5
-$as_echo "$ac_cv_lbl_cc_const_proto" >&6; }
- if test $ac_cv_lbl_cc_const_proto = no ; then
-
-cat >>confdefs.h <<\_ACEOF
-#define const /**/
-_ACEOF
-
- fi
- ;;
- esac
- fi
-
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in
- ./ | .// | /cC/* | \
- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
- ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
- /usr/ucb/* ) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
- if test $ac_prog = install &&
- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- elif test $ac_prog = install &&
- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # program-specific install script used by HP pwplus--don't use.
- :
- else
- rm -rf conftest.one conftest.two conftest.dir
- echo one > conftest.one
- echo two > conftest.two
- mkdir conftest.dir
- if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
- test -s conftest.one && test -s conftest.two &&
- test -s conftest.dir/conftest.one &&
- test -s conftest.dir/conftest.two
- then
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
- break 3
- fi
- fi
- fi
- done
- done
- ;;
-esac
-
-done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL=$ac_cv_path_install
- else
- # As a last resort, use the slow shell script. Don't cache a
- # value for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the value is a relative name.
- INSTALL=$ac_install_sh
- fi
-fi
-{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-
-
-
-for ac_header in fcntl.h memory.h
-do
-as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-$as_echo_n "checking for $ac_header... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- $as_echo_n "(cached) " >&6
-fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
- $as_echo "$as_val"'`
- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
- # Is the header compilable?
-{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
-$as_echo_n "checking $ac_header usability... " >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
-$as_echo_n "checking $ac_header presence... " >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-
- ;;
-esac
-{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-$as_echo_n "checking for $ac_header... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- $as_echo_n "(cached) " >&6
-else
- eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
- $as_echo "$as_val"'`
- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-
-fi
-if test `eval 'as_val=${'$as_ac_Header'}
- $as_echo "$as_val"'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-for ac_func in strerror
-do
-as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
-$as_echo_n "checking for $ac_func... " >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- eval "$as_ac_var=yes"
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- eval "$as_ac_var=no"
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval 'as_val=${'$as_ac_var'}
- $as_echo "$as_val"'`
- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if test `eval 'as_val=${'$as_ac_var'}
- $as_echo "$as_val"'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-else
- case " $LIBOBJS " in
- *" $ac_func.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext"
- ;;
-esac
-
-fi
-done
-
-
-
-{ $as_echo "$as_me:$LINENO: checking for main in -lnsl" >&5
-$as_echo_n "checking for main in -lnsl... " >&6; }
-if test "${ac_cv_lib_nsl_main+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lnsl $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-int
-main ()
-{
-return main ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_lib_nsl_main=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_nsl_main=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_main" >&5
-$as_echo "$ac_cv_lib_nsl_main" >&6; }
-if test $ac_cv_lib_nsl_main = yes; then
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBNSL 1
-_ACEOF
-
- LIBS="-lnsl $LIBS"
-
-fi
-
-
-{ $as_echo "$as_me:$LINENO: checking for main in -lsocket" >&5
-$as_echo_n "checking for main in -lsocket... " >&6; }
-if test "${ac_cv_lib_socket_main+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsocket $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-int
-main ()
-{
-return main ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_lib_socket_main=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_socket_main=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_socket_main" >&5
-$as_echo "$ac_cv_lib_socket_main" >&6; }
-if test $ac_cv_lib_socket_main = yes; then
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBSOCKET 1
-_ACEOF
-
- LIBS="-lsocket $LIBS"
-
-fi
-
-
-{ $as_echo "$as_me:$LINENO: checking for int32_t using $CC" >&5
-$as_echo_n "checking for int32_t using $CC... " >&6; }
- if test "${ac_cv_lbl_have_int32_t+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-# include "confdefs.h"
-# include <sys/types.h>
-# if STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-# endif
-int
-main ()
-{
-int32_t i
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_lbl_have_int32_t=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lbl_have_int32_t=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lbl_have_int32_t" >&5
-$as_echo "$ac_cv_lbl_have_int32_t" >&6; }
- if test $ac_cv_lbl_have_int32_t = no ; then
-
-cat >>confdefs.h <<\_ACEOF
-#define int32_t int
-_ACEOF
-
- fi
-{ $as_echo "$as_me:$LINENO: checking for u_int32_t using $CC" >&5
-$as_echo_n "checking for u_int32_t using $CC... " >&6; }
- if test "${ac_cv_lbl_have_u_int32_t+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-# include "confdefs.h"
-# include <sys/types.h>
-# if STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-# endif
-int
-main ()
-{
-u_int32_t i
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_lbl_have_u_int32_t=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lbl_have_u_int32_t=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lbl_have_u_int32_t" >&5
-$as_echo "$ac_cv_lbl_have_u_int32_t" >&6; }
- if test $ac_cv_lbl_have_u_int32_t = no ; then
-
-cat >>confdefs.h <<\_ACEOF
-#define u_int32_t u_int
-_ACEOF
-
- fi
-
-
-
- rm -f os-proto.h
- if test -f .devel ; then
- if test "$GCC" = yes ; then
- if test "$SHLICC2" = yes ; then
- ac_cv_lbl_gcc_vers=2
- V_CCOPT="`echo $V_CCOPT | sed -e 's/-O/-O3/'`"
- else
- { $as_echo "$as_me:$LINENO: checking gcc version" >&5
-$as_echo_n "checking gcc version... " >&6; }
- if test "${ac_cv_lbl_gcc_vers+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- # Gag, the gcc folks keep changing the output...
- # try to grab N.N.N
- ac_cv_lbl_gcc_vers=`$CC --version 2>&1 |
- sed -e '1!d' -e 's/[^0-9]*\([0-9][0-9]*\)\.[0-9\][0-9]*\.[0-9][0-9]*.*/\1/'`
-fi
-
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lbl_gcc_vers" >&5
-$as_echo "$ac_cv_lbl_gcc_vers" >&6; }
- if test "$ac_cv_lbl_gcc_vers" -gt 1 ; then
- V_CCOPT="`echo $V_CCOPT | sed -e 's/-O/-O3/'`"
- fi
- fi
- if test "$ac_cv_prog_cc_g" = yes ; then
- V_CCOPT="-g $V_CCOPT"
- fi
- V_CCOPT="$V_CCOPT -Wall"
- if test "$ac_cv_lbl_gcc_vers" -gt 1 ; then
- V_CCOPT="$V_CCOPT -Wmissing-prototypes -Wstrict-prototypes"
- if [ "`uname -s`" = "FreeBSD" ]; then
- V_CCOPT="$V_CCOPT -Werror"
- fi
- fi
- else
- case "$target_os" in
-
- irix6*)
- V_CCOPT="$V_CCOPT -fullwarn -n32"
- ;;
-
- *)
- ;;
- esac
- fi
- os=`echo $target_os | sed -e 's/\([0-9][0-9]*\)[^0-9].*$/\1/'`
- name="lbl/os-$os.h"
- if test -f $name ; then
- ln -s $name os-proto.h
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_OS_PROTO_H /**/
-_ACEOF
-
- else
- { $as_echo "$as_me:$LINENO: WARNING: can't find $name" >&5
-$as_echo "$as_me: WARNING: can't find $name" >&2;}
- fi
- fi
-
-if test -r lbl/gnuc.h ; then
- rm -f gnuc.h
- ln -s lbl/gnuc.h gnuc.h
-fi
-
-
-
-
-
-
-
-ac_config_files="$ac_config_files Makefile"
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems. If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
- for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
-$as_echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) $as_unset $ac_var ;;
- esac ;;
- esac
- done
-
- (set) 2>&1 |
- case $as_nl`(ac_space=' '; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- # `set' does not quote correctly, so add quotes (double-quote
- # substitution turns \\\\ into \\, and sed turns \\ into \).
- sed -n \
- "s/'/'\\\\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
- ;; #(
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- test "x$cache_file" != "x/dev/null" &&
- { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
- cat confcache >$cache_file
- else
- { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
- fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# Transform confdefs.h into DEFS.
-# Protect against shell expansion while executing Makefile rules.
-# Protect against Makefile macro expansion.
-#
-# If the first sed substitution is executed (which looks for macros that
-# take arguments), then branch to the quote section. Otherwise,
-# look for a macro that doesn't take arguments.
-ac_script='
-:mline
-/\\$/{
- N
- s,\\\n,,
- b mline
-}
-t clear
-:clear
-s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-b any
-:quote
-s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
-s/\[/\\&/g
-s/\]/\\&/g
-s/\$/$$/g
-H
-:any
-${
- g
- s/^\n//
- s/\n/ /g
- p
-}
-'
-DEFS=`sed -n "$ac_script" confdefs.h`
-
-
-ac_libobjs=
-ac_ltlibobjs=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: ${CONFIG_STATUS=./config.status}
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- { (exit 1); exit 1; }
-fi
-
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# CDPATH.
-$as_unset CDPATH
-
-
-
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
-
- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
- # uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line after each line using $LINENO; the second 'sed'
- # does the real work. The second script uses 'N' to pair each
- # line-number line with the line containing $LINENO, and appends
- # trailing '-' during substitution so that $LINENO is not a special
- # case at line end.
- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # scripts with optimization help from Paolo Bonzini. Blame Lee
- # E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
- { (exit 1); exit 1; }; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
--n*)
- case `echo 'x\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- *) ECHO_C='\c';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -p'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -p'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -p'
- fi
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
- as_test_x='test -x'
-else
- if ls -dL / >/dev/null 2>&1; then
- as_ls_L_option=L
- else
- as_ls_L_option=
- fi
- as_test_x='
- eval sh -c '\''
- if test -d "$1"; then
- test -d "$1/.";
- else
- case $1 in
- -*)set "./$1";;
- esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
- ???[sx]*):;;*)false;;esac;fi
- '\'' sh
- '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-
-# Save the log message, to keep $[0] and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by $as_me, which was
-generated by GNU Autoconf 2.62. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
-
-Usage: $0 [OPTIONS] [FILE]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- -q, --quiet do not print progress messages
- -d, --debug don't remove temporary files
- --recheck update $as_me by reconfiguring in the same conditions
- --file=FILE[:TEMPLATE]
- instantiate the configuration file FILE
-
-Configuration files:
-$config_files
-
-Report bugs to <bug-autoconf@gnu.org>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_version="\\
-config.status
-configured by $0, generated by GNU Autoconf 2.62,
- with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
-
-Copyright (C) 2008 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
- case $1 in
- --*=*)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
- ac_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- CONFIG_FILES="$CONFIG_FILES '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h | --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) { $as_echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; } ;;
-
- *) ac_config_targets="$ac_config_targets $1"
- ac_need_defaults=false ;;
-
- esac
- shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
- exec 6>/dev/null
- ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
- set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
- shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
- CONFIG_SHELL='$SHELL'
- export CONFIG_SHELL
- exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
- $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-
- *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
- { (exit 1); exit 1; }; };;
- esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used. Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
- tmp=
- trap 'exit_status=$?
- { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
-' 0
- trap '{ (exit 1); exit 1; }' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -n "$tmp" && test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} ||
-{
- $as_echo "$as_me: cannot create a temporary directory in ." >&2
- { (exit 1); exit 1; }
-}
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=' '
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
- ac_cs_awk_cr='\\r'
-else
- ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
-_ACEOF
-
-
-{
- echo "cat >conf$$subs.awk <<_ACEOF" &&
- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
- echo "_ACEOF"
-} >conf$$subs.sh ||
- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- . ./conf$$subs.sh ||
- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
-
- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` = $ac_delim_num; then
- break
- elif $ac_last_try; then
- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\).*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\).*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
- N
- s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
- for (key in S) S_is_set[key] = 1
- FS = ""
-
-}
-{
- line = $ 0
- nfields = split(line, field, "@")
- substed = 0
- len = length(field[1])
- for (i = 2; i < nfields; i++) {
- key = field[i]
- keylen = length(key)
- if (S_is_set[key]) {
- value = S[key]
- line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
- len += length(value) + length(field[++i])
- substed = 1
- } else
- len += 1 + keylen
- }
-
- print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
- sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
- cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
- || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5
-$as_echo "$as_me: error: could not setup config files machinery" >&2;}
- { (exit 1); exit 1; }; }
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=/{
-s/:*\$(srcdir):*/:/
-s/:*\${srcdir}:*/:/
-s/:*@srcdir@:*/:/
-s/^\([^=]*=[ ]*\):*/\1/
-s/:*$//
-s/^[^=]*=[ ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-
-eval set X " :F $CONFIG_FILES "
-shift
-for ac_tag
-do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
- :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
-$as_echo "$as_me: error: Invalid tag $ac_tag." >&2;}
- { (exit 1); exit 1; }; };;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
- esac
- ac_save_IFS=$IFS
- IFS=:
- set x $ac_tag
- IFS=$ac_save_IFS
- shift
- ac_file=$1
- shift
-
- case $ac_mode in
- :L) ac_source=$1;;
- :[FH])
- ac_file_inputs=
- for ac_f
- do
- case $ac_f in
- -) ac_f="$tmp/stdin";;
- *) # Look for the file first in the build tree, then in the source tree
- # (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
- test -f "$ac_f" ||
- case $ac_f in
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
- { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
-$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;}
- { (exit 1); exit 1; }; };;
- esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
- ac_file_inputs="$ac_file_inputs '$ac_f'"
- done
-
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
- `' by configure.'
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:$LINENO: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
- fi
- # Neutralize special characters interpreted by sed in replacement strings.
- case $configure_input in #(
- *\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
- sed 's/[\\\\&|]/\\\\&/g'`;; #(
- *) ac_sed_conf_input=$configure_input;;
- esac
-
- case $ac_tag in
- *:-:* | *:-) cat >"$tmp/stdin" \
- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
- { (exit 1); exit 1; }; } ;;
- esac
- ;;
- esac
-
- ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- { as_dir="$ac_dir"
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
-$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
- { (exit 1); exit 1; }; }; }
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
- case $INSTALL in
- [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
- esac
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-
-ac_sed_dataroot='
-/datarootdir/ {
- p
- q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p
-'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
- s&@infodir@&$infodir&g
- s&@localedir@&$localedir&g
- s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
- { (exit 1); exit 1; }; }
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined." >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined." >&2;}
-
- rm -f "$tmp/stdin"
- case $ac_file in
- -) cat "$tmp/out" && rm -f "$tmp/out";;
- *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
- esac \
- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
- { (exit 1); exit 1; }; }
- ;;
-
-
-
- esac
-
-done # for ac_tag
-
-
-{ (exit 0); exit 0; }
-_ACEOF
-chmod +x $CONFIG_STATUS
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
- { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded. So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status. When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
- ac_cs_success=:
- ac_config_status_args=
- test "$silent" = yes &&
- ac_config_status_args="$ac_config_status_args --quiet"
- exec 5>/dev/null
- $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
- exec 5>>config.log
- # Use ||, not &&, to avoid exiting from the if with $? = 1, which
- # would make configure fail if this is the last instruction.
- $ac_cs_success || { (exit 1); exit 1; }
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:$LINENO: WARNING: Unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: Unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
-
-if test -f .devel ; then
- make depend
-fi
-exit 0
diff --git a/contrib/nslint-3.0a2/configure.in b/contrib/nslint-3.0a2/configure.in
deleted file mode 100644
index aa8a6b07..00000000
--- a/contrib/nslint-3.0a2/configure.in
+++ /dev/null
@@ -1,51 +0,0 @@
-AC_REVISION([@(#) $Id: configure.in 241 2009-10-10 23:31:13Z leres $ (LBL)])
-dnl
-AC_COPYRIGHT([Copyright (c) 1995, 1996, 1997, 2006, 2009
- The Regents of the University of California. All rights reserved.])
-dnl
-dnl Process this file with autoconf to produce a configure script.
-dnl
-
-AC_INIT
-AC_CONFIG_SRCDIR(nslint.c)
-
-AC_CANONICAL_TARGET
-
-umask 002
-
-if test -z "$PWD" ; then
- PWD=`pwd`
-fi
-
-AC_LBL_C_INIT(V_CCOPT, V_INCLS)
-AC_PROG_INSTALL
-
-AC_CHECK_HEADERS(fcntl.h memory.h)
-
-AC_REPLACE_FUNCS(strerror)
-AC_CHECK_LIB(nsl, main)
-AC_CHECK_LIB(socket, main)
-
-AC_LBL_CHECK_TYPE(int32_t, int)
-AC_LBL_CHECK_TYPE(u_int32_t, u_int)
-
-AC_LBL_DEVEL(V_CCOPT)
-
-if test -r lbl/gnuc.h ; then
- rm -f gnuc.h
- ln -s lbl/gnuc.h gnuc.h
-fi
-
-AC_SUBST(CFLAGS)
-AC_SUBST(LDFLAGS)
-AC_SUBST(LIBS)
-AC_SUBST(V_CCOPT)
-AC_SUBST(V_INCLS)
-
-AC_CONFIG_FILES(Makefile)
-AC_OUTPUT
-
-if test -f .devel ; then
- make depend
-fi
-exit 0
diff --git a/contrib/nslint-3.0a2/install-sh b/contrib/nslint-3.0a2/install-sh
deleted file mode 100755
index a5897de6..00000000
--- a/contrib/nslint-3.0a2/install-sh
+++ /dev/null
@@ -1,519 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2006-12-25.00
-
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
-# later released in X11R6 (xc/config/util/install.sh) with the
-# following copyright and license.
-#
-# Copyright (C) 1994 X Consortium
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Except as contained in this notice, the name of the X Consortium shall not
-# be used in advertising or otherwise to promote the sale, use or other deal-
-# ings in this Software without prior written authorization from the X Consor-
-# tium.
-#
-#
-# FSF changes to this file are in the public domain.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.
-
-nl='
-'
-IFS=" "" $nl"
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit=${DOITPROG-}
-if test -z "$doit"; then
- doit_exec=exec
-else
- doit_exec=$doit
-fi
-
-# Put in absolute file names if you don't have them in your path;
-# or use environment vars.
-
-chgrpprog=${CHGRPPROG-chgrp}
-chmodprog=${CHMODPROG-chmod}
-chownprog=${CHOWNPROG-chown}
-cmpprog=${CMPPROG-cmp}
-cpprog=${CPPROG-cp}
-mkdirprog=${MKDIRPROG-mkdir}
-mvprog=${MVPROG-mv}
-rmprog=${RMPROG-rm}
-stripprog=${STRIPPROG-strip}
-
-posix_glob='?'
-initialize_posix_glob='
- test "$posix_glob" != "?" || {
- if (set -f) 2>/dev/null; then
- posix_glob=
- else
- posix_glob=:
- fi
- }
-'
-
-posix_mkdir=
-
-# Desired mode of installed file.
-mode=0755
-
-chgrpcmd=
-chmodcmd=$chmodprog
-chowncmd=
-mvcmd=$mvprog
-rmcmd="$rmprog -f"
-stripcmd=
-
-src=
-dst=
-dir_arg=
-dst_arg=
-
-copy_on_change=false
-no_target_directory=
-
-usage="\
-Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
- or: $0 [OPTION]... SRCFILES... DIRECTORY
- or: $0 [OPTION]... -t DIRECTORY SRCFILES...
- or: $0 [OPTION]... -d DIRECTORIES...
-
-In the 1st form, copy SRCFILE to DSTFILE.
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-In the 4th, create DIRECTORIES.
-
-Options:
- --help display this help and exit.
- --version display version info and exit.
-
- -c (ignored)
- -C install only if different (preserve the last data modification time)
- -d create directories instead of installing files.
- -g GROUP $chgrpprog installed files to GROUP.
- -m MODE $chmodprog installed files to MODE.
- -o USER $chownprog installed files to USER.
- -s $stripprog installed files.
- -t DIRECTORY install into DIRECTORY.
- -T report an error if DSTFILE is a directory.
-
-Environment variables override the default commands:
- CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
- RMPROG STRIPPROG
-"
-
-while test $# -ne 0; do
- case $1 in
- -c) ;;
-
- -C) copy_on_change=true;;
-
- -d) dir_arg=true;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift;;
-
- --help) echo "$usage"; exit $?;;
-
- -m) mode=$2
- case $mode in
- *' '* | *' '* | *'
-'* | *'*'* | *'?'* | *'['*)
- echo "$0: invalid mode: $mode" >&2
- exit 1;;
- esac
- shift;;
-
- -o) chowncmd="$chownprog $2"
- shift;;
-
- -s) stripcmd=$stripprog;;
-
- -t) dst_arg=$2
- shift;;
-
- -T) no_target_directory=true;;
-
- --version) echo "$0 $scriptversion"; exit $?;;
-
- --) shift
- break;;
-
- -*) echo "$0: invalid option: $1" >&2
- exit 1;;
-
- *) break;;
- esac
- shift
-done
-
-if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
- # When -d is used, all remaining arguments are directories to create.
- # When -t is used, the destination is already specified.
- # Otherwise, the last argument is the destination. Remove it from $@.
- for arg
- do
- if test -n "$dst_arg"; then
- # $@ is not empty: it contains at least $arg.
- set fnord "$@" "$dst_arg"
- shift # fnord
- fi
- shift # arg
- dst_arg=$arg
- done
-fi
-
-if test $# -eq 0; then
- if test -z "$dir_arg"; then
- echo "$0: no input file specified." >&2
- exit 1
- fi
- # It's OK to call `install-sh -d' without argument.
- # This can happen when creating conditional directories.
- exit 0
-fi
-
-if test -z "$dir_arg"; then
- trap '(exit $?); exit' 1 2 13 15
-
- # Set umask so as not to create temps with too-generous modes.
- # However, 'strip' requires both read and write access to temps.
- case $mode in
- # Optimize common cases.
- *644) cp_umask=133;;
- *755) cp_umask=22;;
-
- *[0-7])
- if test -z "$stripcmd"; then
- u_plus_rw=
- else
- u_plus_rw='% 200'
- fi
- cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
- *)
- if test -z "$stripcmd"; then
- u_plus_rw=
- else
- u_plus_rw=,u+rw
- fi
- cp_umask=$mode$u_plus_rw;;
- esac
-fi
-
-for src
-do
- # Protect names starting with `-'.
- case $src in
- -*) src=./$src;;
- esac
-
- if test -n "$dir_arg"; then
- dst=$src
- dstdir=$dst
- test -d "$dstdir"
- dstdir_status=$?
- else
-
- # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
- # might cause directories to be created, which would be especially bad
- # if $src (and thus $dsttmp) contains '*'.
- if test ! -f "$src" && test ! -d "$src"; then
- echo "$0: $src does not exist." >&2
- exit 1
- fi
-
- if test -z "$dst_arg"; then
- echo "$0: no destination specified." >&2
- exit 1
- fi
-
- dst=$dst_arg
- # Protect names starting with `-'.
- case $dst in
- -*) dst=./$dst;;
- esac
-
- # If destination is a directory, append the input filename; won't work
- # if double slashes aren't ignored.
- if test -d "$dst"; then
- if test -n "$no_target_directory"; then
- echo "$0: $dst_arg: Is a directory" >&2
- exit 1
- fi
- dstdir=$dst
- dst=$dstdir/`basename "$src"`
- dstdir_status=0
- else
- # Prefer dirname, but fall back on a substitute if dirname fails.
- dstdir=`
- (dirname "$dst") 2>/dev/null ||
- expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$dst" : 'X\(//\)[^/]' \| \
- X"$dst" : 'X\(//\)$' \| \
- X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
- echo X"$dst" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'
- `
-
- test -d "$dstdir"
- dstdir_status=$?
- fi
- fi
-
- obsolete_mkdir_used=false
-
- if test $dstdir_status != 0; then
- case $posix_mkdir in
- '')
- # Create intermediate dirs using mode 755 as modified by the umask.
- # This is like FreeBSD 'install' as of 1997-10-28.
- umask=`umask`
- case $stripcmd.$umask in
- # Optimize common cases.
- *[2367][2367]) mkdir_umask=$umask;;
- .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
-
- *[0-7])
- mkdir_umask=`expr $umask + 22 \
- - $umask % 100 % 40 + $umask % 20 \
- - $umask % 10 % 4 + $umask % 2
- `;;
- *) mkdir_umask=$umask,go-w;;
- esac
-
- # With -d, create the new directory with the user-specified mode.
- # Otherwise, rely on $mkdir_umask.
- if test -n "$dir_arg"; then
- mkdir_mode=-m$mode
- else
- mkdir_mode=
- fi
-
- posix_mkdir=false
- case $umask in
- *[123567][0-7][0-7])
- # POSIX mkdir -p sets u+wx bits regardless of umask, which
- # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
- ;;
- *)
- tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
- trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
-
- if (umask $mkdir_umask &&
- exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
- then
- if test -z "$dir_arg" || {
- # Check for POSIX incompatibilities with -m.
- # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
- # other-writeable bit of parent directory when it shouldn't.
- # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
- ls_ld_tmpdir=`ls -ld "$tmpdir"`
- case $ls_ld_tmpdir in
- d????-?r-*) different_mode=700;;
- d????-?--*) different_mode=755;;
- *) false;;
- esac &&
- $mkdirprog -m$different_mode -p -- "$tmpdir" && {
- ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
- test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
- }
- }
- then posix_mkdir=:
- fi
- rmdir "$tmpdir/d" "$tmpdir"
- else
- # Remove any dirs left behind by ancient mkdir implementations.
- rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
- fi
- trap '' 0;;
- esac;;
- esac
-
- if
- $posix_mkdir && (
- umask $mkdir_umask &&
- $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
- )
- then :
- else
-
- # The umask is ridiculous, or mkdir does not conform to POSIX,
- # or it failed possibly due to a race condition. Create the
- # directory the slow way, step by step, checking for races as we go.
-
- case $dstdir in
- /*) prefix='/';;
- -*) prefix='./';;
- *) prefix='';;
- esac
-
- eval "$initialize_posix_glob"
-
- oIFS=$IFS
- IFS=/
- $posix_glob set -f
- set fnord $dstdir
- shift
- $posix_glob set +f
- IFS=$oIFS
-
- prefixes=
-
- for d
- do
- test -z "$d" && continue
-
- prefix=$prefix$d
- if test -d "$prefix"; then
- prefixes=
- else
- if $posix_mkdir; then
- (umask=$mkdir_umask &&
- $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
- # Don't fail if two instances are running concurrently.
- test -d "$prefix" || exit 1
- else
- case $prefix in
- *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
- *) qprefix=$prefix;;
- esac
- prefixes="$prefixes '$qprefix'"
- fi
- fi
- prefix=$prefix/
- done
-
- if test -n "$prefixes"; then
- # Don't fail if two instances are running concurrently.
- (umask $mkdir_umask &&
- eval "\$doit_exec \$mkdirprog $prefixes") ||
- test -d "$dstdir" || exit 1
- obsolete_mkdir_used=true
- fi
- fi
- fi
-
- if test -n "$dir_arg"; then
- { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
- { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
- { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
- test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
- else
-
- # Make a couple of temp file names in the proper directory.
- dsttmp=$dstdir/_inst.$$_
- rmtmp=$dstdir/_rm.$$_
-
- # Trap to clean up those temp files at exit.
- trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
-
- # Copy the file name to the temp name.
- (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
-
- # and set any options; do chmod last to preserve setuid bits.
- #
- # If any of these fail, we abort the whole thing. If we want to
- # ignore errors from any of these, just make sure not to ignore
- # errors from the above "$doit $cpprog $src $dsttmp" command.
- #
- { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
- { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
- { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
- { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
-
- # If -C, don't bother to copy if it wouldn't change the file.
- if $copy_on_change &&
- old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
- new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
-
- eval "$initialize_posix_glob" &&
- $posix_glob set -f &&
- set X $old && old=:$2:$4:$5:$6 &&
- set X $new && new=:$2:$4:$5:$6 &&
- $posix_glob set +f &&
-
- test "$old" = "$new" &&
- $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
- then
- rm -f "$dsttmp"
- else
- # Rename the file to the real destination.
- $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
-
- # The rename failed, perhaps because mv can't rename something else
- # to itself, or perhaps because mv is so ancient that it does not
- # support -f.
- {
- # Now remove or move aside any old file at destination location.
- # We try this two ways since rm can't unlink itself on some
- # systems and the destination file might be busy for other
- # reasons. In this case, the final cleanup might fail but the new
- # file should still install successfully.
- {
- test ! -f "$dst" ||
- $doit $rmcmd -f "$dst" 2>/dev/null ||
- { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
- { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
- } ||
- { echo "$0: cannot unlink or rename $dst" >&2
- (exit 1); exit 1
- }
- } &&
-
- # Now rename the file to the real destination.
- $doit $mvcmd "$dsttmp" "$dst"
- }
- fi || exit 1
-
- trap '' 0
- fi
-done
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/contrib/nslint-3.0a2/lbl/gnuc.h b/contrib/nslint-3.0a2/lbl/gnuc.h
deleted file mode 100644
index 3c6b8f8d..00000000
--- a/contrib/nslint-3.0a2/lbl/gnuc.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* @(#) $Id: gnuc.h,v 1.4 2006/04/30 03:58:45 leres Exp $ (LBL) */
-
-/* Define __P() macro, if necessary */
-#ifndef __P
-#if __STDC__
-#define __P(protos) protos
-#else
-#define __P(protos) ()
-#endif
-#endif
-
-/* inline foo */
-#ifdef __GNUC__
-#define inline __inline
-#else
-#define inline
-#endif
-
-/*
- * Handle new and old "dead" routine prototypes
- *
- * For example:
- *
- * __dead void foo(void) __attribute__((noreturn));
- *
- */
-#ifdef __GNUC__
-#ifndef __dead
-#if __GNUC__ >= 4
-#define __dead
-#define noreturn __noreturn__
-#else
-#define __dead volatile
-#define noreturn volatile
-#endif
-#endif
-#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
-#ifndef __attribute__
-#define __attribute__(args)
-#endif
-#endif
-#else
-#ifndef __dead
-#define __dead
-#endif
-#ifndef __attribute__
-#define __attribute__(args)
-#endif
-#endif
diff --git a/contrib/nslint-3.0a2/mkdep b/contrib/nslint-3.0a2/mkdep
deleted file mode 100755
index 2a9c221b..00000000
--- a/contrib/nslint-3.0a2/mkdep
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/bin/sh -
-#
-# Copyright (c) 1994, 1996
-# The Regents of the University of California. All rights reserved.
-#
-# Redistribution and use in source and binary forms are permitted
-# provided that this notice is preserved and that due credit is given
-# to the University of California at Berkeley. The name of the University
-# may not be used to endorse or promote products derived from this
-# software without specific prior written permission. This software
-# is provided ``as is'' without express or implied warranty.
-#
-# @(#)mkdep.sh 5.11 (Berkeley) 5/5/88
-#
-
-PATH=/bin:/usr/bin:/usr/ucb:/usr/local:/usr/local/bin
-export PATH
-
-MAKE=Makefile # default makefile name is "Makefile"
-CC=cc # default C compiler is "cc"
-
-while :
- do case "$1" in
- # -c allows you to specify the C compiler
- -c)
- CC=$2
- shift; shift ;;
-
- # -f allows you to select a makefile name
- -f)
- MAKE=$2
- shift; shift ;;
-
- # the -p flag produces "program: program.c" style dependencies
- # so .o's don't get produced
- -p)
- SED='s;\.o;;'
- shift ;;
- *)
- break ;;
- esac
-done
-
-if [ $# = 0 ] ; then
- echo 'usage: mkdep [-p] [-c cc] [-f makefile] [flags] file ...'
- exit 1
-fi
-
-if [ ! -w $MAKE ]; then
- echo "mkdep: no writeable file \"$MAKE\""
- exit 1
-fi
-
-TMP=/tmp/mkdep$$
-
-trap 'rm -f $TMP ; exit 1' 1 2 3 13 15
-
-cp $MAKE ${MAKE}.bak
-
-sed -e '/DO NOT DELETE THIS LINE/,$d' < $MAKE > $TMP
-
-cat << _EOF_ >> $TMP
-# DO NOT DELETE THIS LINE -- mkdep uses it.
-# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
-
-_EOF_
-
-# If your compiler doesn't have -M, add it. If you can't, the next two
-# lines will try and replace the "cc -M". The real problem is that this
-# hack can't deal with anything that requires a search path, and doesn't
-# even try for anything using bracket (<>) syntax.
-#
-# egrep '^#include[ ]*".*"' /dev/null $* |
-# sed -e 's/:[^"]*"\([^"]*\)".*/: \1/' -e 's/\.c/.o/' |
-
-# XXX this doesn't work with things like "-DDECLWAITSTATUS=union\ wait"
-$CC -M $* |
-sed "
- s; \./; ;g
- $SED" |
-awk '{
- if ($1 != prev) {
- if (rec != "")
- print rec;
- rec = $0;
- prev = $1;
- }
- else {
- if (length(rec $2) > 78) {
- print rec;
- rec = $0;
- }
- else
- rec = rec " " $2
- }
-}
-END {
- print rec
-}' >> $TMP
-
-cat << _EOF_ >> $TMP
-
-# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
-_EOF_
-
-# copy to preserve permissions
-cp $TMP $MAKE
-rm -f ${MAKE}.bak $TMP
-exit 0
diff --git a/contrib/nslint-3.0a2/nslint.8 b/contrib/nslint-3.0a2/nslint.8
deleted file mode 100644
index 92515ea4..00000000
--- a/contrib/nslint-3.0a2/nslint.8
+++ /dev/null
@@ -1,497 +0,0 @@
-.\" @(#) $Id: nslint.8 238 2009-03-14 05:43:37Z leres $ (LBL)
-.\"
-.\" Copyright (c) 1994, 1996, 1997, 1999, 2001, 2002, 2009
-.\" The Regents of the University of California. All rights reserved.
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that: (1) source code distributions
-.\" retain the above copyright notice and this paragraph in its entirety, (2)
-.\" distributions including binary code include the above copyright notice and
-.\" this paragraph in its entirety in the documentation or other materials
-.\" provided with the distribution, and (3) all advertising materials mentioning
-.\" features or use of this software display the following acknowledgement:
-.\" ``This product includes software developed by the University of California,
-.\" Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
-.\" the University nor the names of its contributors may be used to endorse
-.\" or promote products derived from this software without specific prior
-.\" written permission.
-.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
-.\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
-.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-.\"
-.TH nslint 8 "2 May 2002"
-.UC 4
-.SH NAME
-nslint - perform consistency checks on dns files
-.SH SYNOPSIS
-.B nslint
-[
-.B -d
-] [
-.B -c
-.I named.conf
-] [
-.B -C
-.I nslint.conf
-]
-.br
-.B nslint
-[
-.B -d
-] [
-.B -b
-.I named.boot
-] [
-.B -B
-.I nslint.boot
-]
-.SH DESCRIPTION
-.B Nslint
-reads the nameserver configuration files and performs a number of
-consistency checks on the dns records. If any problems are discovered,
-error messages are displayed on
-.I stderr
-and
-.B nslint
-exits with a non-zero status.
-.LP
-Here is a partial list of errors
-.B nslint
-detects:
-.IP
-Records that are malformed.
-.IP
-Names that contain dots but are missing a trailing dot.
-.IP
-.B PTR
-records with names that are missing a trailing dot.
-.IP
-Names that contain illegal characters (rfc1034).
-.IP
-.B A
-records
-without matching
-.B PTR
-records
-.IP
-.B PTR
-records
-without matching
-.B A
-records
-.IP
-Names with more than one address on the same subnet.
-.IP
-Addresses in use by more than one name.
-.IP
-Names with
-.B CNAME
-and other records (rfc1033).
-.IP
-Unknown service and/or protocol keywords in
-.B WKS
-records.
-.IP
-Missing semicolons and quotes.
-.LP
-.SH OPTIONS
-.TP
-.B -b
-Specify an alternate
-.I named.boot
-file. The default is
-.IR /etc/named.boot .
-.TP
-.TP
-.B -c
-Specify an alternate
-.I named.conf
-file. The default is
-.IR /etc/named.conf .
-.TP
-.B -B
-Specify an alternate
-.I nslint.boot
-file. The default is
-.I nslint.boot
-in the last
-.B directory
-line processed in
-.I named.boot
-(or the current working directory).
-This file is processed like a second
-.IR named.boot .
-The most common use is to tell
-.B nslint
-about
-.B A
-records that match
-.B PTR
-records that point outside the domains listed in
-.IR named.boot .
-.TP
-.B -C
-Specify an alternate
-.I nslint.conf
-file. The default is
-.I nslint.conf
-in the last
-.B directory
-line processed in
-.I named.conf
-(or the current working directory).
-This file is processed like a second
-.IR named.conf .
-.TP
-.B -d
-Raise the debugging level. Debugging information is
-displayed on
-.IR stdout .
-.LP
-.B Nslint
-knows how to read
-BIND 8 and 9's
-.I named.conf
-configuration file and also
-older BIND's
-.I named.boot
-file. If both files exist,
-.B nslint
-will prefer
-.I named.conf
-(on the theory that you forgot to delete
-.I named.boot
-when you upgraded BIND).
-.LP
-.SH "ADVANCED CONFIGURATION"
-There are some cases where it is necessary to use the
-advanced configuration features of
-.BR nslint .
-Advanced configuration is done with the
-.I nslint.conf
-file. (You can also use
-.I nslint.boot
-which has a syntax similar to
-.I named.boot
-but is not described here.)
-.LP
-The most common is when a site has a demilitarized zone (DMZ).
-The problem here is that the DMZ network will have
-.B PTR
-records for hosts outside its domain. For example lets say
-we have
-.I 128.0.rev
-with:
-.LP
-.RS
-.nf
-.sp .5
-1.1 604800 in ptr gateway.lbl.gov.
-2.1 604800 in ptr gateway.es.net.
-.sp .5
-.fi
-.RE
-.LP
-Obviously we will define an
-.B A
-record for
-.I gateway.lbl.gov
-pointing to
-.I 128.0.1.1
-but we will get errors because there is no
-.B A
-record defined for
-.IR gateway.es.net .
-The solution is to create a
-.I nslint.conf
-file (in the same directory as the other dns files)
-with:
-.LP
-.RS
-.nf
-.sp .5
-zone "es.net" {
-.RS
-type master;
-file "nslint.es.net";
-.RE
-};
-.sp .5
-.fi
-.RE
-.LP
-And then create the file
-.I nslint.es.net
-with:
-.LP
-.RS
-.nf
-.sp .5
-gateway 1 in a 128.0.1.2
-.sp .5
-.fi
-.RE
-.LP
-Another problem occurs when there is a
-.B CNAME
-that points to a host outside the local domains. Let's say we have
-.I info.lbl.gov
-pointing to
-.IR larry.es.net :
-.LP
-.RS
-.nf
-.sp .5
-info 604800 in cname larry.es.net.
-.sp .5
-.fi
-.RE
-.LP
-In this case we would need:
-.LP
-.RS
-.nf
-.sp .5
-zone "es.net" {
-.RS
-type master;
-file "nslint.es.net";
-.RE
-};
-.sp .5
-.fi
-.RE
-.LP
-in
-.I nslint.boot
-and:
-.LP
-.RS
-.nf
-.sp .5
-larry 1 in txt "place holder"
-.sp .5
-.fi
-.RE
-.LP
-.IR nslint.es.net .
-.LP
-One last problem
-when a pseudo host is setup to allow two more
-more actual hosts provide a service. For, let's say that
-.I lbl.gov
-contains:
-.LP
-.RS
-.nf
-.sp .5
-server 604800 in a 128.0.6.6
-server 604800 in a 128.0.6.94
-;
-tom 604800 in a 128.0.6.6
-tom 604800 in mx 0 lbl.gov.
-;
-jerry 604800 in a 128.0.6.94
-jerry 604800 in mx 0 lbl.gov.
-.sp .5
-.fi
-.RE
-.LP
-In this case
-.B nslint
-would complain about missing
-.B PTR
-records and ip addresses in use by more than one host.
-To suppress these warnings, add you would the lines:
-.LP
-.RS
-.nf
-.sp .5
-zone "lbl.gov" {
-.RS
-type master;
-file "nslint.lbl.gov";
-.RE
-};
-.LP
-zone "0.128.in-addr.arpa" {
-.RS
-type master;
-file "nslint.128.0.rev";
-.RE
-};
-.sp .5
-.fi
-.RE
-.LP
-to
-.I nslint.conf
-and create
-.I nslint.lbl.gov
-with:
-.LP
-.RS
-.nf
-.sp .5
-server 1 in allowdupa 128.0.6.6
-server 1 in allowdupa 128.0.6.94
-.sp .5
-.fi
-.RE
-.LP
-and create
-.I nslint.128.0.rev
-with:
-.LP
-.RS
-.nf
-.sp .5
-6.6 604800 in ptr server.lbl.gov.
-94.6 604800 in ptr server.lbl.gov.
-.sp .5
-.fi
-.RE
-.LP
-In this example, the
-.B allowdupa
-keyword tells
-.B nslint
-that it's ok for
-.I 128.0.6.6
-and
-.I 128.0.6.94
-to be shared by
-.IR server.lbl.gov ,
-.IR tom.lbl.gov ,
-and
-.IR jerry.lbl.gov .
-.LP
-Another
-.B nslint
-feature helps detect hosts that have mistakenly had two ip addresses
-assigned on the same subnet. This can happen when two different
-people request an ip address for the same hostname or when someone
-forgets an address has been assigned and requests a new number.
-.LP
-To detect such
-.B A
-records, add a
-.B nslint
-section to your
-.I nslint.conf
-containing something similar to:
-.LP
-.RS
-.nf
-.sp .5
-nslint {
-.RS
-network "128.0.6/22";
-.RE
-};
-.sp .5
-.fi
-.RE
-.LP
-or:
-.LP
-.RS
-.nf
-.sp .5
-nslint {
-.RS
-network "128.0.6 255.255.252.0";
-.RE
-};
-.sp .5
-.fi
-.RE
-.LP
-These two examples are are equivalent ways of saying the same thing;
-that subnet
-.I 128.0.6
-has a 22 bit wide subnet mask.
-.LP
-Using information from the above
-.B network
-statement,
-.B nslint
-would would flag the following
-.B A
-records as being in error:
-.LP
-.RS
-.nf
-.sp .5
-server 1 in a 128.0.6.48
-server 1 in a 128.0.7.16
-.sp .5
-.fi
-.RE
-.LP
-Note that if you specify any
-.B network
-lines in your
-.I nslint.conf
-file,
-.B nslint
-requires you to include lines for all networks;
-otherwise you might forget to add
-.B network
-lines for new networks.
-.LP
-Sometimes you have a zone that
-.B nslint
-just can't deal with. A good example is
-a dynamic dns zone. To handle this, you can
-add the following to
-.IB nslint.com :
-.LP
-.RS
-.nf
-.sp .5
-nslint {
-.RS
-ignorezone "dhcp.lbl.gov";
-.RE
-};
-.sp .5
-.fi
-.RE
-.LP
-This will suppress "name referenced without other records" warnings.
-.LP
-.SH FILES
-.na
-.nh
-.nf
-/etc/named.conf - default named configuration file
-/etc/named.boot - old style named configuration file
-nslint.conf - default nslint configuration file
-nslint.boot - old style nslint configuration file
-.ad
-.hy
-.fi
-.LP
-.SH "SEE ALSO"
-.na
-.nh
-.IR named (8),
-rfc1033,
-rfc1034
-.ad
-.hy
-.SH AUTHOR
-Craig Leres of the
-Lawrence Berkeley National Laboratory, University of California, Berkeley, CA.
-.LP
-The current version is available via anonymous ftp:
-.LP
-.RS
-.I ftp://ftp.ee.lbl.gov/nslint.tar.gz
-.RE
-.SH BUGS
-Please send bug reports to nslint@ee.lbl.gov.
-.LP
-Not everyone is guaranteed to agree with all the checks done.
diff --git a/contrib/nslint-3.0a2/nslint.c b/contrib/nslint-3.0a2/nslint.c
deleted file mode 100644
index 9708c58a..00000000
--- a/contrib/nslint-3.0a2/nslint.c
+++ /dev/null
@@ -1,2971 +0,0 @@
-/*
- * Copyright (c) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2008, 2009
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that: (1) source code distributions
- * retain the above copyright notice and this paragraph in its entirety, (2)
- * distributions including binary code include the above copyright notice and
- * this paragraph in its entirety in the documentation or other materials
- * provided with the distribution, and (3) all advertising materials mentioning
- * features or use of this software display the following acknowledgement:
- * ``This product includes software developed by the University of California,
- * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
- * the University nor the names of its contributors may be used to endorse
- * or promote products derived from this software without specific prior
- * written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-#ifndef lint
-static const char copyright[] =
- "@(#) Copyright (c) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2008, 2009\n\
-The Regents of the University of California. All rights reserved.\n";
-static const char rcsid[] =
- "@(#) $Id: nslint.c 247 2009-10-14 17:54:05Z leres $ (LBL)";
-#endif
-/*
- * nslint - perform consistency checks on dns files
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-
-#include <arpa/inet.h>
-
-#include <ctype.h>
-#include <errno.h>
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_MEMORY_H
-#include <memory.h>
-#endif
-#include <netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-
-#include "savestr.h"
-#include "version.h"
-
-#include "gnuc.h"
-#ifdef HAVE_OS_PROTO_H
-#include "os-proto.h"
-#endif
-
-#define NSLINTBOOT "nslint.boot" /* default nslint.boot file */
-#define NSLINTCONF "nslint.conf" /* default nslint.conf file */
-
-/* Is the string just a dot by itself? */
-#define CHECKDOT(p) (p[0] == '.' && p[1] == '\0')
-
-/* Address (network order) */
-struct addr {
- u_int family;
- union {
- struct in_addr _a_addr4;
- struct in6_addr _a_addr6;
- } addr;
-};
-#define a_addr4 addr._a_addr4.s_addr
-#define a_addr6 addr._a_addr6.s6_addr
-
-/* Network */
-struct network {
- u_int family;
- union {
- struct in_addr _n_addr4;
- struct in6_addr _n_addr6;
- } addr;
- union {
- struct in_addr _n_mask4;
- struct in6_addr _n_mask6;
- } mask;
-};
-#define n_addr4 addr._n_addr4.s_addr
-#define n_mask4 mask._n_mask4.s_addr
-#define n_addr6 addr._n_addr6.s6_addr
-#define n_mask6 mask._n_mask6.s6_addr
-
-/* Item struct */
-struct item {
- char *host; /* pointer to hostname */
- struct addr addr; /* ip address */
- u_int ttl; /* ttl of A records */
- int records; /* resource records seen */
- int flags; /* flags word */
-};
-
-/* Ignored zone struct */
-struct ignoredzone {
- char *zone; /* zone name */
- int len; /* length of zone */
-};
-
-/* Resource records seen */
-#define REC_A 0x0001
-#define REC_AAAA 0x0002
-#define REC_PTR 0x0004
-#define REC_WKS 0x0008
-#define REC_HINFO 0x0010
-#define REC_MX 0x0020
-#define REC_CNAME 0x0040
-#define REC_NS 0x0080
-#define REC_SOA 0x0100
-#define REC_RP 0x0200
-#define REC_TXT 0x0400
-#define REC_SRV 0x0800
-
-/* These aren't real records */
-#define REC_OTHER 0x1000
-#define REC_REF 0x2000
-#define REC_UNKNOWN 0x4000
-
-/* resource record types for parsing */
-enum rrtype {
- RR_UNDEF = 0,
- RR_A,
- RR_AAAA,
- RR_ALLOWDUPA,
- RR_CNAME,
- RR_DNSKEY,
- RR_HINFO,
- RR_MX,
- RR_NS,
- RR_PTR,
- RR_RP,
- RR_SOA,
- RR_SRV,
- RR_TXT,
- RR_WKS,
- RR_RRSIG,
- RR_NSEC,
-};
-
-/* Test for records we want to map to REC_OTHER */
-#define MASK_TEST_REC (REC_WKS | REC_HINFO | \
- REC_MX | REC_SOA | REC_RP | REC_TXT | REC_SRV | REC_UNKNOWN)
-
-/* Mask away records we don't care about in the final processing to REC_OTHER */
-#define MASK_CHECK_REC \
- (REC_A | REC_AAAA | REC_PTR | REC_CNAME | REC_REF | REC_OTHER)
-
-/* Test for records we want to check for duplicate name detection */
-#define MASK_TEST_DUP \
- (REC_A | REC_AAAA | REC_HINFO | REC_CNAME)
-
-/* Flags */
-#define FLG_SELFMX 0x001 /* mx record refers to self */
-#define FLG_MXREF 0x002 /* this record referred to by a mx record */
-#define FLG_SMTPWKS 0x004 /* saw wks with smtp/tcp */
-#define FLG_ALLOWDUPA 0x008 /* allow duplicate a records */
-
-/* doconf() and doboot() flags */
-#define CONF_MUSTEXIST 0x001 /* fatal for files to not exist */
-#define CONF_NOZONE 0x002 /* do not parse zone files */
-
-/* Test for smtp problems */
-#define MASK_TEST_SMTP \
- (FLG_SELFMX | FLG_SMTPWKS)
-
-#define ITEMSIZE (1 << 17) /* power of two */
-
-struct item items[ITEMSIZE];
-int itemcnt; /* count of items */
-
-/* Hostname string storage */
-#define STRSIZE 8192; /* size to malloc when more space is needed */
-char *strptr; /* pointer to string pool */
-int strsize; /* size of space left in pool */
-
-int debug;
-int errors;
-#ifdef __FreeBSD__
-char *bootfile = "/etc/namedb/named.boot";
-char *conffile = "/etc/namedb/named.conf";
-#else
-char *bootfile = "/etc/named.boot";
-char *conffile = "/etc/named.conf";
-#endif
-char *nslintboot;
-char *nslintconf;
-char *prog;
-char *cwd = ".";
-
-static struct network *netlist;
-static u_int netlistsize; /* size of array */
-static u_int netlistcnt; /* next free element */
-
-char **protoserv; /* valid protocol/service names */
-int protoserv_init;
-int protoserv_last;
-int protoserv_len;
-
-static char inaddr[] = ".in-addr.arpa.";
-static char inaddr6[] = ".ip6.arpa.";
-
-/* XXX should be dynamic */
-static struct ignoredzone ignoredzones[10];
-static int numignoredzones = 0;
-#define SIZEIGNOREDZONES (sizeof(ignoredzones) / sizeof(ignoredzones[0]))
-
-/* SOA record */
-#define SOA_SERIAL 0
-#define SOA_REFRESH 1
-#define SOA_RETRY 2
-#define SOA_EXPIRE 3
-#define SOA_MINIMUM 4
-
-static u_int soaval[5];
-static int nsoaval;
-#define NSOAVAL (sizeof(soaval) / sizeof(soaval[0]))
-
-/* Forwards */
-void add_domain(char *, const char *);
-const char *addr2str(struct addr *);
-int checkaddr(const char *);
-int checkdots(const char *);
-void checkdups(struct item *, int);
-int checkignoredzone(const char *);
-int checkserv(const char *, char **p);
-int checkwks(FILE *, char *, int *, char **);
-int cmpaddr(const void *, const void *);
-int cmpitemaddr(const void *, const void *);
-int cmpitemhost(const void *, const void *);
-int cmpnetwork(const void *, const void *);
-void doboot(const char *, int);
-void doconf(const char *, int);
-const char *extractaddr(const char *, struct addr *);
-const char *extractnetwork(const char *, struct network *);
-struct network *findnetwork(struct addr *);
-void initprotoserv(void);
-int main(int, char **);
-int maskwidth(struct network *);
-const char *network2str(struct network *);
-void nslint(void);
-const char *parsenetwork(const char *);
-const char *parseptr(const char *, struct addr *);
-char *parsequoted(char *);
-int parserrsig(const char *, char **);
-int parsesoa(const char *, char **);
-void process(const char *, const char *, const char *);
-int rfc1034host(const char *, int);
-enum rrtype txt2rrtype(const char *);
-int samesubnet(struct addr *, struct addr *, struct network *);
-void setmaskwidth(u_int w, struct network *);
-int updateitem(const char *, struct addr *, int, u_int, int);
-void usage(void) __attribute__((noreturn));
-
-extern char *optarg;
-extern int optind, opterr;
-
-int
-main(int argc, char **argv)
-{
- char *cp;
- int op, donamedboot, donamedconf;
-
- if ((cp = strrchr(argv[0], '/')) != NULL)
- prog = cp + 1;
- else
- prog = argv[0];
-
- donamedboot = 0;
- donamedconf = 0;
- while ((op = getopt(argc, argv, "b:c:B:C:d")) != -1)
- switch (op) {
-
- case 'b':
- bootfile = optarg;
- ++donamedboot;
- break;
-
- case 'c':
- conffile = optarg;
- ++donamedconf;
- break;
-
- case 'B':
- nslintboot = optarg;
- ++donamedboot;
- break;
-
- case 'C':
- nslintconf = optarg;
- ++donamedconf;
- break;
-
- case 'd':
- ++debug;
- break;
-
- default:
- usage();
- }
- if (optind != argc || (donamedboot && donamedconf))
- usage();
-
- /* Find config file if not manually specified */
- if (!donamedboot && !donamedconf) {
- if (access(conffile, R_OK) >= 0)
- ++donamedconf;
- if (access(bootfile, R_OK) >= 0)
- ++donamedboot;
-
- if (donamedboot && donamedconf) {
- fprintf(stderr,
- "%s: nslint: both %s and %s exist; use -b or -c\n",
- prog, conffile, bootfile);
- exit(1);
- }
- }
-
- if (donamedboot) {
- doboot(bootfile, CONF_MUSTEXIST | CONF_NOZONE);
- if (nslintboot != NULL)
- doboot(nslintboot, CONF_MUSTEXIST);
- else
- doboot(NSLINTBOOT, 0);
- doboot(bootfile, CONF_MUSTEXIST);
- } else {
- doconf(conffile, CONF_MUSTEXIST | CONF_NOZONE);
- if (nslintconf != NULL)
- doconf(nslintconf, CONF_MUSTEXIST);
- else
- doconf(NSLINTCONF, 0);
- doconf(conffile, CONF_MUSTEXIST);
- }
-
- /* Sort network list */
- if (netlistcnt > 0)
- qsort(netlist, netlistcnt, sizeof(netlist[0]), cmpnetwork);
-
- nslint();
- exit (errors != 0);
-}
-
-/* add domain if necessary */
-void
-add_domain(char *name, const char *domain)
-{
- char *cp;
-
- /* Kill trailing white space and convert to lowercase */
- for (cp = name; *cp != '\0' && !isspace(*cp); ++cp)
- if (isupper(*cp))
- *cp = tolower(*cp);
- *cp-- = '\0';
- /* If necessary, append domain */
- if (cp >= name && *cp++ != '.') {
- if (*domain != '.')
- *cp++ = '.';
- (void)strcpy(cp, domain);
- }
- /* XXX should we insure a trailing dot? */
-}
-
-const char *
-addr2str(struct addr *ap)
-{
- struct network net;
-
- memset(&net, 0, sizeof(net));
- net.family = ap->family;
- switch (ap->family) {
-
- case AF_INET:
- net.n_addr4 = ap->a_addr4;
- setmaskwidth(32, &net);
- break;
-
- case AF_INET6:
- memmove(net.n_addr6, &ap->a_addr6, sizeof(ap->a_addr6));
- setmaskwidth(128, &net);
- break;
-
- default:
- return ("<nil>");
- }
- return (network2str(&net));
-}
-
-/*
- * Returns true if name is really an ip address.
- */
-int
-checkaddr(const char *name)
-{
- struct in_addr addr;
-
- return (inet_pton(AF_INET, name, (char *)&addr));
-}
-
-/*
- * Returns true if name contains a dot but not a trailing dot.
- * Special case: allow a single dot if the second part is not one
- * of the 3 or 4 letter top level domains or is any 2 letter TLD
- */
-int
-checkdots(const char *name)
-{
- const char *cp, *cp2;
-
- if ((cp = strchr(name, '.')) == NULL)
- return (0);
- cp2 = name + strlen(name) - 1;
- if (cp2 >= name && *cp2 == '.')
- return (0);
-
- /* Return true of more than one dot*/
- ++cp;
- if (strchr(cp, '.') != NULL)
- return (1);
-
- if (strlen(cp) == 2 ||
- strcasecmp(cp, "gov") == 0 ||
- strcasecmp(cp, "edu") == 0 ||
- strcasecmp(cp, "com") == 0 ||
- strcasecmp(cp, "net") == 0 ||
- strcasecmp(cp, "org") == 0 ||
- strcasecmp(cp, "mil") == 0 ||
- strcasecmp(cp, "int") == 0 ||
- strcasecmp(cp, "nato") == 0 ||
- strcasecmp(cp, "arpa") == 0)
- return (1);
- return (0);
-}
-
-/* Records we use to detect duplicates */
-static struct duprec {
- int record;
- char *name;
-} duprec[] = {
- { REC_A, "a" },
- { REC_AAAA, "aaaa" },
- { REC_HINFO, "hinfo" },
- { REC_CNAME, "cname" },
- { 0, NULL },
-};
-
-void
-checkdups(struct item *ip, int records)
-{
- struct duprec *dp;
-
- records &= (ip->records & MASK_TEST_DUP);
- if (records == 0)
- return;
- for (dp = duprec; dp->name != NULL; ++dp)
- if ((records & dp->record) != 0) {
- ++errors;
- fprintf(stderr, "%s: multiple \"%s\" records for %s\n",
- prog, dp->name, ip->host);
- records &= ~dp->record;
- }
- if (records != 0)
- fprintf(stderr, "%s: checkdups: records not zero %s (0x%x)\n",
- prog, ip->host, records);
-}
-
-/* Check for an "ignored zone" (usually dynamic dns) */
-int
-checkignoredzone(const char *name)
-{
- int i, len, len2;
-
- len = strlen(name);
- if (len > 1 && name[len - 1] == '.')
- --len;
- for (i = 0; i < numignoredzones; ++i) {
- len2 = len - ignoredzones[i].len;
- if (len2 >= 0 &&
- strncasecmp(name + len2,
- ignoredzones[i].zone, len - len2) == 0)
- return (1);
- }
- return (0);
-}
-
-int
-checkserv(const char *serv, char **p)
-{
- for (; *p != NULL; ++p)
- if (*serv == **p && strcmp(serv, *p) == 0)
- return (1);
- return (0);
-}
-
-int
-checkwks(FILE *f, char *proto, int *smtpp, char **errstrp)
-{
- int n, sawparen;
- char *cp, *serv, **p;
- static char errstr[132];
- char buf[1024];
- char psbuf[512];
-
- if (!protoserv_init) {
- initprotoserv();
- ++protoserv_init;
- }
-
- /* Line count */
- n = 0;
-
- /* Terminate protocol */
- cp = proto;
- while (!isspace(*cp) && *cp != '\0')
- ++cp;
- if (*cp != '\0')
- *cp++ = '\0';
-
- /* Find services */
- *smtpp = 0;
- sawparen = 0;
- if (*cp == '(') {
- ++sawparen;
- ++cp;
- while (isspace(*cp))
- ++cp;
- }
- for (;;) {
- if (*cp == '\0') {
- if (!sawparen)
- break;
- if (fgets(buf, sizeof(buf), f) == NULL) {
- *errstrp = "mismatched parens";
- return (n);
- }
- ++n;
- cp = buf;
- while (isspace(*cp))
- ++cp;
- }
- /* Find end of service, converting to lowercase */
- for (serv = cp; !isspace(*cp) && *cp != '\0'; ++cp)
- if (isupper(*cp))
- *cp = tolower(*cp);
- if (*cp != '\0')
- *cp++ = '\0';
- if (sawparen && *cp == ')') {
- /* XXX should check for trailing junk */
- break;
- }
-
- (void)sprintf(psbuf, "%s/%s", serv, proto);
-
- if (*serv == 's' && strcmp(psbuf, "tcp/smtp") == 0)
- ++*smtpp;
-
- for (p = protoserv; *p != NULL; ++p)
- if (*psbuf == **p && strcmp(psbuf, *p) == 0) {
- break;
- }
- if (*p == NULL) {
- sprintf(errstr, "%s unknown", psbuf);
- *errstrp = errstr;
- break;
- }
- }
-
- return (n);
-}
-
-int
-cmpaddr(const void *arg1, const void *arg2)
-{
- int i, r1;
- const struct network *n1, *n2;
-
- n1 = (const struct network *)arg1;
- n2 = (const struct network *)arg2;
-
- /* IPv4 before IPv6 */
- if (n1->family != n2->family)
- return ((n1->family == AF_INET) ? -1 : 1);
-
- switch (n1->family) {
-
- case AF_INET:
- /* Address */
- if (ntohl(n1->n_addr4) < ntohl(n2->n_addr4))
- return (-1);
- else if (ntohl(n1->n_addr4) > ntohl(n2->n_addr4))
- return (1);
- return (0);
-
- case AF_INET6:
- /* Address */
- r1 = 0;
- for (i = 0; i < 16; ++i) {
- if (ntohl(n1->n_addr6[i]) < ntohl(n2->n_addr6[i]))
- return (-1);
- if (ntohl(n1->n_addr6[i]) > ntohl(n2->n_addr6[i]))
- return (1);
- }
- return (0);
-
- default:
- abort();
- }
-}
-
-int
-cmpitemaddr(const void *arg1, const void *arg2)
-{
- struct item *i1, *i2;
-
- i1 = (struct item *)arg1;
- i2 = (struct item *)arg2;
-
- return (cmpaddr(&i1->addr, &i2->addr));
-}
-
-int
-cmpitemhost(const void *arg1, const void *arg2)
-{
- struct item *i1, *i2;
-
- i1 = (struct item *)arg1;
- i2 = (struct item *)arg2;
-
- return (strcasecmp(i1->host, i1->host));
-}
-
-/* Sort by network number (use mask when networks are the same) */
-int
-cmpnetwork(const void *arg1, const void *arg2)
-{
- int i, r1, r2;
- const struct network *n1, *n2;
-
- n1 = (const struct network *)arg1;
- n2 = (const struct network *)arg2;
-
- /* IPv4 before IPv6 */
- if (n1->family != n2->family)
- return ((n1->family == AF_INET) ? -1 : 1);
-
- switch (n1->family) {
-
- case AF_INET:
- /* Address */
- if (ntohl(n1->n_addr4) < ntohl(n2->n_addr4))
- return (-1);
- else if (ntohl(n1->n_addr4) > ntohl(n2->n_addr4))
- return (1);
-
- /* Mask */
- if (ntohl(n1->n_mask4) < ntohl(n2->n_mask4))
- return (1);
- else if (ntohl(n1->n_mask4) > ntohl(n2->n_mask4))
- return (-1);
- return (0);
-
- case AF_INET6:
- /* Address */
- r1 = 0;
- for (i = 0; i < 16; ++i) {
- if (ntohl(n1->n_addr6[i]) < ntohl(n2->n_addr6[i]))
- return (-1);
- if (ntohl(n1->n_addr6[i]) > ntohl(n2->n_addr6[i]))
- return (1);
- }
-
- /* Mask */
- r2 = 0;
- for (i = 0; i < 16; ++i) {
- if (n1->n_mask6[i] < n2->n_mask6[i])
- return (1);
- if (n1->n_mask6[i] > n2->n_mask6[i])
- return (-1);
- }
- return (0);
- break;
-
- default:
- abort();
- }
- abort();
-}
-
-void
-doboot(const char *file, int flags)
-{
- int n;
- char *cp, *cp2;
- FILE *f;
- const char *errstr;
- char buf[1024], name[128];
-
- errno = 0;
- f = fopen(file, "r");
- if (f == NULL) {
- /* Not an error if it doesn't exist */
- if ((flags & CONF_MUSTEXIST) == 0 && errno == ENOENT) {
- if (debug > 1)
- printf(
- "%s: doit: %s doesn't exist (ignoring)\n",
- prog, file);
- return;
- }
- fprintf(stderr, "%s: %s: %s\n", prog, file, strerror(errno));
- exit(1);
- }
- if (debug > 1)
- printf("%s: doit: opened %s\n", prog, file);
-
- n = 0;
- while (fgets(buf, sizeof(buf), f) != NULL) {
- ++n;
-
- /* Skip comments */
- if (buf[0] == ';')
- continue;
- cp = strchr(buf, ';');
- if (cp)
- *cp = '\0';
- cp = buf + strlen(buf) - 1;
- if (cp >= buf && *cp == '\n')
- *cp = '\0';
- cp = buf;
-
- /* Eat leading whitespace */
- while (isspace(*cp))
- ++cp;
-
- /* Skip blank lines */
- if (*cp == '\n' || *cp == '\0')
- continue;
-
- /* Get name */
- cp2 = cp;
- while (!isspace(*cp) && *cp != '\0')
- ++cp;
- *cp++ = '\0';
-
- /* Find next keyword */
- while (isspace(*cp))
- ++cp;
- if (strcasecmp(cp2, "directory") == 0) {
- /* Terminate directory */
- cp2 = cp;
- while (!isspace(*cp) && *cp != '\0')
- ++cp;
- *cp = '\0';
- if (chdir(cp2) < 0) {
- ++errors;
- fprintf(stderr, "%s: can't chdir %s: %s\n",
- prog, cp2, strerror(errno));
- exit(1);
- }
- cwd = savestr(cp2);
- continue;
- }
- if (strcasecmp(cp2, "primary") == 0) {
- /* Extract domain, converting to lowercase */
- for (cp2 = name; !isspace(*cp) && *cp != '\0'; ++cp)
- if (isupper(*cp))
- *cp2++ = tolower(*cp);
- else
- *cp2++ = *cp;
- /* Insure trailing dot */
- if (cp2 > name && cp2[-1] != '.')
- *cp2++ = '.';
- *cp2 = '\0';
-
- /* Find file */
- while (isspace(*cp))
- ++cp;
-
- /* Terminate directory */
- cp2 = cp;
- while (!isspace(*cp) && *cp != '\0')
- ++cp;
- *cp = '\0';
-
- /* Process it! (zone is the same as the domain) */
- nsoaval = -1;
- memset(soaval, 0, sizeof(soaval));
- if ((flags & CONF_NOZONE) == 0)
- process(cp2, name, name);
- continue;
- }
- if (strcasecmp(cp2, "network") == 0) {
- errstr = parsenetwork(cp);
- if (errstr != NULL) {
- ++errors;
- fprintf(stderr,
- "%s: %s:%d: bad network: %s\n",
- prog, file, n, errstr);
- }
- continue;
- }
- if (strcasecmp(cp2, "include") == 0) {
- /* Terminate include file */
- cp2 = cp;
- while (!isspace(*cp) && *cp != '\0')
- ++cp;
- *cp = '\0';
- doboot(cp2, 1);
- continue;
- }
- /* Eat any other options */
- }
- (void)fclose(f);
-}
-
-void
-doconf(const char *file, int flags)
-{
- int n, fd, cc, i, depth;
- char *cp, *cp2, *buf;
- const char *p;
- char *name, *zonename, *filename, *typename;
- int namelen, zonenamelen, filenamelen, typenamelen;
- struct stat sbuf;
- char zone[128], includefile[256];
-
- errno = 0;
- fd = open(file, O_RDONLY, 0);
- if (fd < 0) {
- /* Not an error if it doesn't exist */
- if ((flags & CONF_MUSTEXIST) == 0 && errno == ENOENT) {
- if (debug > 1)
- printf(
- "%s: doconf: %s doesn't exist (ignoring)\n",
- prog, file);
- return;
- }
- fprintf(stderr, "%s: %s: %s\n", prog, file, strerror(errno));
- exit(1);
- }
- if (debug > 1)
- printf("%s: doconf: opened %s\n", prog, file);
-
- if (fstat(fd, &sbuf) < 0) {
- fprintf(stderr, "%s: fstat(%s) %s\n",
- prog, file, strerror(errno));
- exit(1);
- }
- buf = (char *)malloc(sbuf.st_size + 1);
- if (buf == NULL) {
- fprintf(stderr, "%s: malloc: %s\n", prog, strerror(errno));
- exit(1);
- }
-
- /* Slurp entire config file */
- n = sbuf.st_size;
- cp = buf;
- do {
- cc = read(fd, cp, n);
- if (cc < 0) {
- fprintf(stderr, "%s: read(%s) %s\n",
- prog, file, strerror(errno));
- exit(1);
- }
- cp += cc;
- n -= cc;
- } while (cc != 0 && cc < n);
- buf[cc] = '\0';
-
-#define EATWHITESPACE \
- while (isspace(*cp)) { \
- if (*cp == '\n') \
- ++n; \
- ++cp; \
- }
-
-/* Handle both to-end-of-line and C style comments */
-#define EATCOMMENTS \
- { \
- int sawcomment; \
- do { \
- EATWHITESPACE \
- sawcomment = 0; \
- if (*cp == '#') { \
- sawcomment = 1; \
- ++cp; \
- while (*cp != '\n' && *cp != '\0') \
- ++cp; \
- } \
- else if (strncmp(cp, "//", 2) == 0) { \
- sawcomment = 1; \
- cp += 2; \
- while (*cp != '\n' && *cp != '\0') \
- ++cp; \
- } \
- else if (strncmp(cp, "/*", 2) == 0) { \
- sawcomment = 1; \
- for (cp += 2; *cp != '\0'; ++cp) { \
- if (*cp == '\n') \
- ++n; \
- else if (strncmp(cp, "*/", 2) == 0) { \
- cp += 2; \
- break; \
- } \
- } \
- } \
- } while (sawcomment); \
- }
-
-#define GETNAME(name, len) \
- { \
- (name) = cp; \
- (len) = 0; \
- while (!isspace(*cp) && *cp != ';' && *cp != '\0') { \
- ++(len); \
- ++cp; \
- } \
- }
-
-#define GETQUOTEDNAME(name, len) \
- { \
- if (*cp != '"') { \
- ++errors; \
- fprintf(stderr, "%s: %s:%d missing left quote\n", \
- prog, file, n); \
- } else \
- ++cp; \
- (name) = cp; \
- (len) = 0; \
- while (*cp != '"' && *cp != '\n' && *cp != '\0') { \
- ++(len); \
- ++cp; \
- } \
- if (*cp != '"') { \
- ++errors; \
- fprintf(stderr, "%s: %s:%d missing right quote\n", \
- prog, file, n); \
- } else \
- ++cp; \
- }
-
-/* Eat everything to the next semicolon, perhaps eating matching qbraces */
-#define EATSEMICOLON \
- { \
- int depth = 0; \
- while (*cp != '\0') { \
- EATCOMMENTS \
- if (*cp == ';') { \
- ++cp; \
- if (depth == 0) \
- break; \
- continue; \
- } \
- if (*cp == '{') { \
- ++depth; \
- ++cp; \
- continue; \
- } \
- if (*cp == '}') { \
- --depth; \
- ++cp; \
- continue; \
- } \
- ++cp; \
- } \
- }
-
-/* Eat everything to the next left qbrace */
-#define EATSLEFTBRACE \
- while (*cp != '\0') { \
- EATCOMMENTS \
- if (*cp == '{') { \
- ++cp; \
- break; \
- } \
- ++cp; \
- }
-
- n = 1;
- zone[0] = '\0';
- cp = buf;
- while (*cp != '\0') {
- EATCOMMENTS
- if (*cp == '\0')
- break;
- GETNAME(name, namelen)
- if (namelen == 0) {
- ++errors;
- fprintf(stderr, "%s: %s:%d garbage char '%c' (1)\n",
- prog, file, n, *cp);
- ++cp;
- continue;
- }
- EATCOMMENTS
- if (strncasecmp(name, "options", namelen) == 0) {
- EATCOMMENTS
- if (*cp != '{') {
- ++errors;
- fprintf(stderr,
- "%s: %s:%d missing left qbrace in options\n",
- prog, file, n);
- } else
- ++cp;
- EATCOMMENTS
- while (*cp != '}' && *cp != '\0') {
- EATCOMMENTS
- GETNAME(name, namelen)
- if (namelen == 0) {
- ++errors;
- fprintf(stderr,
- "%s: %s:%d garbage char '%c' (2)\n",
- prog, file, n, *cp);
- ++cp;
- break;
- }
-
- /* If not the "directory" option, just eat it */
- if (strncasecmp(name, "directory",
- namelen) == 0) {
- EATCOMMENTS
- GETQUOTEDNAME(cp2, i)
- cp2[i] = '\0';
- if (chdir(cp2) < 0) {
- ++errors;
- fprintf(stderr,
- "%s: %s:.%d can't chdir %s: %s\n",
- prog, file, n, cp2,
- strerror(errno));
- exit(1);
- }
- cwd = savestr(cp2);
- }
- EATSEMICOLON
- EATCOMMENTS
- }
- ++cp;
- EATCOMMENTS
- if (*cp != ';') {
- ++errors;
- fprintf(stderr,
- "%s: %s:%d missing options semi\n",
- prog, file, n);
- } else
- ++cp;
- continue;
- }
- if (strncasecmp(name, "zone", namelen) == 0) {
- EATCOMMENTS
- GETQUOTEDNAME(zonename, zonenamelen)
- typename = NULL;
- filename = NULL;
- typenamelen = 0;
- filenamelen = 0;
- EATCOMMENTS
- if (strncasecmp(cp, "in", 2) == 0) {
- cp += 2;
- EATWHITESPACE
- } else if (strncasecmp(cp, "chaos", 5) == 0) {
- cp += 5;
- EATWHITESPACE
- }
- if (*cp != '{') { /* } */
- ++errors;
- fprintf(stderr,
- "%s: %s:%d missing left qbrace in zone\n",
- prog, file, n);
- continue;
- }
- depth = 0;
- EATCOMMENTS
- while (*cp != '\0') {
- if (*cp == '{') {
- ++cp;
- ++depth;
- } else if (*cp == '}') {
- if (--depth <= 1)
- break;
- ++cp;
- }
- EATCOMMENTS
- GETNAME(name, namelen)
- if (namelen == 0) {
- ++errors;
- fprintf(stderr,
- "%s: %s:%d garbage char '%c' (3)\n",
- prog, file, n, *cp);
- ++cp;
- break;
- }
- if (strncasecmp(name, "type",
- namelen) == 0) {
- EATCOMMENTS
- GETNAME(typename, typenamelen)
- if (namelen == 0) {
- ++errors;
- fprintf(stderr,
- "%s: %s:%d garbage char '%c' (4)\n",
- prog, file, n, *cp);
- ++cp;
- break;
- }
- } else if (strncasecmp(name, "file",
- namelen) == 0) {
- EATCOMMENTS
- GETQUOTEDNAME(filename, filenamelen)
- }
- /* Just ignore keywords we don't understand */
- EATSEMICOLON
- EATCOMMENTS
- }
- /* { */
- if (*cp != '}') {
- ++errors;
- fprintf(stderr,
- "%s: %s:%d missing zone right qbrace\n",
- prog, file, n);
- } else
- ++cp;
- if (*cp != ';') {
- ++errors;
- fprintf(stderr,
- "%s: %s:%d missing zone semi\n",
- prog, file, n);
- } else
- ++cp;
- EATCOMMENTS
- /* If we got something interesting, process it */
- if (typenamelen == 0) {
- ++errors;
- fprintf(stderr, "%s: missing zone type!\n",
- prog);
- continue;
- }
- if (strncasecmp(typename, "master", typenamelen) == 0) {
- if (filenamelen == 0) {
- ++errors;
- fprintf(stderr,
- "%s: missing zone filename!\n",
- prog);
- continue;
- }
- strncpy(zone, zonename, zonenamelen);
- zone[zonenamelen] = '\0';
- for (cp2 = zone; *cp2 != '\0'; ++cp2)
- if (isupper(*cp2))
- *cp2 = tolower(*cp2);
- /* Insure trailing dot */
- if (cp2 > zone && cp2[-1] != '.') {
- *cp2++ = '.';
- *cp2 = '\0';
- }
- filename[filenamelen] = '\0';
- nsoaval = -1;
- memset(soaval, 0, sizeof(soaval));
- if ((flags & CONF_NOZONE) == 0)
- process(filename, zone, zone);
- }
- continue;
- }
- if (strncasecmp(name, "nslint", namelen) == 0) {
- EATCOMMENTS
- if (*cp != '{') {
- ++errors;
- fprintf(stderr,
- "%s: %s:%d missing left qbrace in nslint\n",
- prog, file, n);
- } else
- ++cp;
- ++cp;
- EATCOMMENTS
- while (*cp != '}' && *cp != '\0') {
- EATCOMMENTS
- GETNAME(name, namelen)
- if (strncasecmp(name, "network",
- namelen) == 0) {
- EATCOMMENTS
- GETQUOTEDNAME(cp2, i)
-
- cp2[i] = '\0';
- p = parsenetwork(cp2);
- if (p != NULL) {
- ++errors;
- fprintf(stderr,
- "%s: %s:%d: bad network: %s\n",
- prog, file, n, p);
- }
- } else if (strncasecmp(name, "ignorezone",
- namelen) == 0) {
- EATCOMMENTS
- GETQUOTEDNAME(cp2, i)
- cp2[i] = '\0';
- if (numignoredzones + 1 <
- sizeof(ignoredzones) /
- sizeof(ignoredzones[0])) {
- ignoredzones[numignoredzones].zone =
- savestr(cp2);
- if (ignoredzones[numignoredzones].zone != NULL) {
- ignoredzones[numignoredzones].len = strlen(cp2);
- ++numignoredzones;
- }
- }
- } else {
- ++errors;
- fprintf(stderr,
- "%s: unknown nslint \"%.*s\"\n",
- prog, namelen, name);
- }
- EATSEMICOLON
- EATCOMMENTS
- }
- ++cp;
- EATCOMMENTS
- if (*cp != ';') {
- ++errors;
- fprintf(stderr,
- "%s: %s:%d: missing nslint semi\n",
- prog, file, n);
- } else
- ++cp;
- continue;
- }
- if (strncasecmp(name, "include", namelen) == 0) {
- EATCOMMENTS
- GETQUOTEDNAME(filename, filenamelen)
- strncpy(includefile, filename, filenamelen);
- includefile[filenamelen] = '\0';
- doconf(includefile, 1);
- EATSEMICOLON
- continue;
- }
- if (strncasecmp(name, "view", namelen) == 0) {
- EATSLEFTBRACE
- continue;
- }
-
- /* Skip over statements we don't understand */
- EATSEMICOLON
- }
-
- free(buf);
- close(fd);
-}
-
-const char *
-extractaddr(const char *str, struct addr *ap)
-{
-
- memset(ap, 0, sizeof(*ap));
-
- /* Let's see what we've got here */
- if (strchr(str, '.') != NULL) {
- ap->family = AF_INET;
- } else if (strchr(str, ':') != NULL) {
- ap->family = AF_INET6;
- } else
- return ("unrecognized address type");
-
- switch (ap->family) {
-
- case AF_INET:
- if (!inet_pton(ap->family, str, &ap->a_addr4))
- return ("cannot parse IPv4 address");
-
- break;
-
- case AF_INET6:
- if (!inet_pton(ap->family, str, &ap->a_addr6))
- return ("cannot parse IPv6 address");
- break;
-
- default:
- abort();
- }
-
- return (NULL);
-}
-
-const char *
-extractnetwork(const char *str, struct network *np)
-{
- int i;
- long w;
- char *cp, *ep;
- const char *p;
- char temp[64];
-
- memset(np, 0, sizeof(*np));
-
- /* Let's see what we've got here */
- if (strchr(str, '.') != NULL) {
- np->family = AF_INET;
- w = 32;
- } else if (strchr(str, ':') != NULL) {
- np->family = AF_INET6;
- w = 128;
- } else
- return ("unrecognized address type");
-
- p = strchr(str, '/');
- if (p != NULL) {
- /* Mask length was specified */
- strncpy(temp, str, sizeof(temp));
- temp[sizeof(temp) - 1] = '\0';
- cp = strchr(temp, '/');
- if (cp == NULL)
- abort();
- *cp++ = '\0';
- ep = NULL;
- w = strtol(cp, &ep, 10);
- if (*ep != '\0')
- return ("garbage following mask width");
- str = temp;
- }
-
- switch (np->family) {
-
- case AF_INET:
- if (!inet_pton(np->family, str, &np->n_addr4))
- return ("cannot parse IPv4 address");
-
- if (w > 32)
- return ("mask length must be <= 32");
- setmaskwidth(w, np);
-
- if ((np->n_addr4 & ~np->n_mask4) != 0)
- return ("non-network bits set in addr");
-
-#ifdef notdef
- if ((ntohl(np->n_addr4) & 0xff000000) == 0)
- return ("high octet must be non-zero");
-#endif
- break;
-
- case AF_INET6:
- if (!inet_pton(np->family, str, &np->n_addr6))
- return ("cannot parse IPv6 address");
- if (w > 128)
- return ("mask length must be <= 128");
- setmaskwidth(w, np);
-
- for (i = 0; i < 16; ++i) {
- if ((np->n_addr6[i] & ~np->n_mask6[i]) != 0)
- return ("non-network bits set in addr");
- }
- break;
-
- default:
- abort();
- }
-
- return (NULL);
-}
-
-struct network *
-findnetwork(struct addr *ap)
-{
- int i, j;
- struct network *np;
-
- switch (ap->family) {
-
- case AF_INET:
- for (i = 0, np = netlist; i < netlistcnt; ++i, ++np)
- if ((ap->a_addr4 & np->n_mask4) == np->n_addr4)
- return (np);
- break;
-
- case AF_INET6:
- for (i = 0, np = netlist; i < netlistcnt; ++i, ++np) {
- for (j = 0; j < sizeof(ap->a_addr6); ++j) {
- if ((ap->a_addr6[j] & np->n_mask6[j]) !=
- np->n_addr6[j])
- break;
- }
- if (j >= sizeof(ap->a_addr6))
- return (np);
- }
- break;
-
- default:
- abort();
- }
- return (NULL);
-}
-
-void
-initprotoserv(void)
-{
- char *cp;
- struct servent *sp;
- char psbuf[512];
-
- protoserv_len = 256;
- protoserv = (char **)malloc(protoserv_len * sizeof(*protoserv));
- if (protoserv == NULL) {
- fprintf(stderr, "%s: nslint: malloc: %s\n",
- prog, strerror(errno));
- exit(1);
- }
-
- while ((sp = getservent()) != NULL) {
- (void)sprintf(psbuf, "%s/%s", sp->s_name, sp->s_proto);
-
- /* Convert to lowercase */
- for (cp = psbuf; *cp != '\0'; ++cp)
- if (isupper(*cp))
- *cp = tolower(*cp);
-
- if (protoserv_last + 1 >= protoserv_len) {
- protoserv_len <<= 1;
- protoserv = realloc(protoserv,
- protoserv_len * sizeof(*protoserv));
- if (protoserv == NULL) {
- fprintf(stderr, "%s: nslint: realloc: %s\n",
- prog, strerror(errno));
- exit(1);
- }
- }
- protoserv[protoserv_last] = savestr(psbuf);
- ++protoserv_last;
- }
- protoserv[protoserv_last] = NULL;
-}
-
-int
-maskwidth(struct network *np)
-{
- int w;
- int i, j;
- u_int32_t m, tm;
-
- /* Work backwards until we find a set bit */
- switch (np->family) {
-
- case AF_INET:
- m = ntohl(np->n_mask4);
- for (w = 32; w > 0; --w) {
- tm = 0xffffffff << (32 - w);
- if (tm == m)
- break;
- }
- break;
-
- case AF_INET6:
- w = 128;
- for (j = 15; j >= 0; --j) {
- m = np->n_mask6[j];
- for (i = 8; i > 0; --w, --i) {
- tm = (0xff << (8 - i)) & 0xff;
- if (tm == m)
- return (w);
- }
- }
- break;
-
- default:
- abort();
- }
- return (w);
-}
-
-const char *
-network2str(struct network *np)
-{
- int w;
- size_t len, size;
- char *cp;
- static char buf[128];
-
- w = maskwidth(np);
- switch (np->family) {
-
- case AF_INET:
- if (inet_ntop(np->family, &np->n_addr4,
- buf, sizeof(buf)) == NULL) {
- fprintf(stderr, "network2str: v4 botch");
- abort();
- }
- if (w == 32)
- return (buf);
- break;
-
- case AF_INET6:
- if (inet_ntop(np->family, &np->n_addr6,
- buf, sizeof(buf)) == NULL) {
- fprintf(stderr, "network2str: v6 botch");
- abort();
- }
- if (w == 128)
- return (buf);
- break;
-
- default:
- return ("<nil>");
- }
-
- /* Append address mask width */
- cp = buf;
- len = strlen(cp);
- cp += len;
- size = sizeof(buf) - len;
- (void)snprintf(cp, size, "/%d", w);
- return (buf);
-}
-
-void
-nslint(void)
-{
- int n, records, flags;
- struct item *ip, *lastaip, **ipp, **itemlist;
- struct addr addr, lastaddr;
- struct network *np;
-
- itemlist = (struct item **)calloc(itemcnt, sizeof(*ipp));
- if (itemlist == NULL) {
- fprintf(stderr, "%s: nslint: calloc: %s\n",
- prog, strerror(errno));
- exit(1);
- }
- ipp = itemlist;
- for (n = 0, ip = items; n < ITEMSIZE; ++n, ++ip) {
- if (ip->host == NULL)
- continue;
- /* Save entries with addresses for later check */
- if (ip->addr.family != 0)
- *ipp++ = ip;
-
- if (debug > 1) {
- if (debug > 2)
- printf("%d\t", n);
- printf("%s\t%s\t0x%x\t0x%x\n",
- ip->host, addr2str(&ip->addr),
- ip->records, ip->flags);
- }
-
- /* Check for illegal hostnames (rfc1034) */
- if (rfc1034host(ip->host, ip->records))
- ++errors;
-
- /* Check for missing ptr records (ok if also an ns record) */
- records = ip->records & MASK_CHECK_REC;
- if ((ip->records & MASK_TEST_REC) != 0)
- records |= REC_OTHER;
- switch (records) {
-
- case REC_A | REC_OTHER | REC_PTR | REC_REF:
- case REC_A | REC_OTHER | REC_PTR:
- case REC_A | REC_PTR | REC_REF:
- case REC_A | REC_PTR:
- case REC_AAAA | REC_OTHER | REC_PTR | REC_REF:
- case REC_AAAA | REC_OTHER | REC_PTR:
- case REC_AAAA | REC_PTR | REC_REF:
- case REC_AAAA | REC_PTR:
- case REC_CNAME:
- /* These are O.K. */
- break;
-
- case REC_CNAME | REC_REF:
- ++errors;
- fprintf(stderr, "%s: \"cname\" referenced by other"
- " \"cname\" or \"mx\": %s\n", prog, ip->host);
- break;
-
- case REC_OTHER | REC_REF:
- case REC_OTHER:
- /*
- * This is only an error if there is an address
- * associated with the hostname; this means
- * there was a wks entry with bogus address.
- * Otherwise, we have an mx or hinfo.
- *
- * XXX ignore localhost for now
- * (use flag to indicate loopback?)
- */
- if (ip->addr.family == AF_INET &&
- ip->addr.a_addr4 != htonl(INADDR_LOOPBACK)) {
- ++errors;
- fprintf(stderr,
- "%s: \"wks\" without \"a\" and \"ptr\": %s -> %s\n",
- prog, ip->host, addr2str(&ip->addr));
- }
- break;
-
- case REC_REF:
- if (!checkignoredzone(ip->host)) {
- ++errors;
- fprintf(stderr, "%s: Name referenced without"
- " other records: %s\n", prog, ip->host);
- }
- break;
-
- case REC_A | REC_OTHER | REC_REF:
- case REC_A | REC_OTHER:
- case REC_A | REC_REF:
- case REC_A:
- case REC_AAAA | REC_OTHER | REC_REF:
- case REC_AAAA | REC_OTHER:
- case REC_AAAA | REC_REF:
- case REC_AAAA:
- ++errors;
- fprintf(stderr, "%s: Missing \"ptr\": %s -> %s\n",
- prog, ip->host, addr2str(&ip->addr));
- break;
-
- case REC_OTHER | REC_PTR | REC_REF:
- case REC_OTHER | REC_PTR:
- case REC_PTR | REC_REF:
- case REC_PTR:
- ++errors;
- fprintf(stderr, "%s: Missing \"a\": %s -> %s\n",
- prog, ip->host, addr2str(&ip->addr));
- break;
-
- case REC_A | REC_CNAME | REC_OTHER | REC_PTR | REC_REF:
- case REC_A | REC_CNAME | REC_OTHER | REC_PTR:
- case REC_A | REC_CNAME | REC_OTHER | REC_REF:
- case REC_A | REC_CNAME | REC_OTHER:
- case REC_A | REC_CNAME | REC_PTR | REC_REF:
- case REC_A | REC_CNAME | REC_PTR:
- case REC_A | REC_CNAME | REC_REF:
- case REC_A | REC_CNAME:
- case REC_AAAA | REC_CNAME | REC_OTHER | REC_PTR | REC_REF:
- case REC_AAAA | REC_CNAME | REC_OTHER | REC_PTR:
- case REC_AAAA | REC_CNAME | REC_OTHER | REC_REF:
- case REC_AAAA | REC_CNAME | REC_OTHER:
- case REC_AAAA | REC_CNAME | REC_PTR | REC_REF:
- case REC_AAAA | REC_CNAME | REC_PTR:
- case REC_AAAA | REC_CNAME | REC_REF:
- case REC_AAAA | REC_CNAME:
- case REC_CNAME | REC_OTHER | REC_PTR | REC_REF:
- case REC_CNAME | REC_OTHER | REC_PTR:
- case REC_CNAME | REC_OTHER | REC_REF:
- case REC_CNAME | REC_OTHER:
- case REC_CNAME | REC_PTR | REC_REF:
- case REC_CNAME | REC_PTR:
- ++errors;
- fprintf(stderr, "%s: \"cname\" %s has other records\n",
- prog, ip->host);
- break;
-
- case 0:
- /* Second level test */
- if ((ip->records & ~(REC_NS | REC_TXT)) == 0)
- break;
- /* Fall through... */
-
- default:
- ++errors;
- fprintf(stderr,
- "%s: records == 0x%x: can't happen (%s 0x%x)\n",
- prog, records, ip->host, ip->records);
- break;
- }
-
- /* Check for smtp problems */
- flags = ip->flags & MASK_TEST_SMTP;
-
- if ((flags & FLG_SELFMX) != 0 &&
- (ip->records & (REC_A | REC_AAAA)) == 0) {
- ++errors;
- fprintf(stderr,
- "%s: Self \"mx\" for %s missing"
- " \"a\" or \"aaaa\" record\n",
- prog, ip->host);
- }
-
- switch (flags) {
-
- case 0:
- case FLG_SELFMX | FLG_SMTPWKS:
- /* These are O.K. */
- break;
-
- case FLG_SELFMX:
- if ((ip->records & REC_WKS) != 0) {
- ++errors;
- fprintf(stderr,
- "%s: smtp/tcp missing from \"wks\": %s\n",
- prog, ip->host);
- }
- break;
-
- case FLG_SMTPWKS:
- ++errors;
- fprintf(stderr,
- "%s: Saw smtp/tcp without self \"mx\": %s\n",
- prog, ip->host);
- break;
-
- default:
- ++errors;
- fprintf(stderr,
- "%s: flags == 0x%x: can't happen (%s)\n",
- prog, flags, ip->host);
- }
-
- /* Check for chained MX records */
- if ((ip->flags & (FLG_SELFMX | FLG_MXREF)) == FLG_MXREF &&
- (ip->records & REC_MX) != 0) {
- ++errors;
- fprintf(stderr, "%s: \"mx\" referenced by other"
- " \"mx\" record: %s\n", prog, ip->host);
- }
- }
-
- /* Check for doubly booked addresses */
- n = ipp - itemlist;
- qsort(itemlist, n, sizeof(itemlist[0]), cmpaddr);
- memset(&lastaddr, 0, sizeof(lastaddr));
- ip = NULL;
- for (ipp = itemlist; n > 0; ++ipp, --n) {
- addr = (*ipp)->addr;
- if (cmpaddr(&lastaddr, &addr) == 0 &&
- ((*ipp)->flags & FLG_ALLOWDUPA) == 0 &&
- (ip->flags & FLG_ALLOWDUPA) == 0) {
- ++errors;
- fprintf(stderr, "%s: %s in use by %s and %s\n",
- prog, addr2str(&addr), (*ipp)->host, ip->host);
- }
- memmove(&lastaddr, &addr, sizeof(addr));
- ip = *ipp;
- }
-
- /* Check for hosts with multiple addresses on the same subnet */
- n = ipp - itemlist;
- qsort(itemlist, n, sizeof(itemlist[0]), cmpitemhost);
- if (netlistcnt > 0) {
- n = ipp - itemlist;
- lastaip = NULL;
- for (ipp = itemlist; n > 0; ++ipp, --n) {
- ip = *ipp;
- if ((ip->records & (REC_A | REC_AAAA)) == 0 ||
- (ip->flags & FLG_ALLOWDUPA) != 0)
- continue;
- if (lastaip != NULL &&
- strcasecmp(ip->host, lastaip->host) == 0) {
- np = findnetwork(&ip->addr);
- if (np == NULL) {
- ++errors;
- fprintf(stderr,
- "%s: Can't find subnet mask"
- " for %s (%s)\n",
- prog, ip->host,
- addr2str(&ip->addr));
- } else if (samesubnet(&lastaip->addr,
- &ip->addr, np)) {
- ++errors;
- fprintf(stderr,
- "%s: Multiple \"a\" records for %s on subnet %s",
- prog, ip->host,
- network2str(np));
- fprintf(stderr, "\n\t(%s",
- addr2str(&lastaip->addr));
- fprintf(stderr, " and %s)\n",
- addr2str(&ip->addr));
- }
- }
- lastaip = ip;
- }
- }
-
- if (debug)
- printf("%s: %d/%d items used, %d error%s\n", prog, itemcnt,
- ITEMSIZE, errors, errors == 1 ? "" : "s");
-}
-
-const char *
-parsenetwork(const char *cp)
-{
- const char *p;
- struct network net;
-
- while (isspace(*cp))
- ++cp;
-
- p = extractnetwork(cp, &net);
- if (p != NULL)
- return (p);
-
- while (isspace(*cp))
- ++cp;
-
- /* Make sure there's room */
- if (netlistsize <= netlistcnt) {
- if (netlistsize == 0) {
- netlistsize = 32;
- netlist = (struct network *)
- malloc(netlistsize * sizeof(*netlist));
- } else {
- netlistsize <<= 1;
- netlist = (struct network *)
- realloc(netlist, netlistsize * sizeof(*netlist));
- }
- if (netlist == NULL) {
- fprintf(stderr,
- "%s: parsenetwork: malloc/realloc: %s\n",
- prog, strerror(errno));
- exit(1);
- }
- }
-
- /* Add to list */
- memmove(netlist + netlistcnt, &net, sizeof(net));
- ++netlistcnt;
-
- return (NULL);
-}
-
-const char *
-parseptr(const char *str, struct addr *ap)
-{
- int i, n, base;
- u_long v, v2;
- char *cp;
- const char *p;
- u_char *up;
-
- memset(ap, 0, sizeof(*ap));
- base = -1;
-
- /* IPv4 */
- p = str + strlen(str) - sizeof(inaddr) + 1;
- if (p >= str && strcasecmp(p, inaddr) == 0) {
- ap->family = AF_INET;
- n = 4;
- base = 10;
- } else {
- /* IPv6 */
- p = str + strlen(str) - sizeof(inaddr6) + 1;
- if (p >= str && strcasecmp(p, inaddr6) == 0) {
- ap->family = AF_INET6;
- n = 16;
- base = 16;
- }
- }
-
- if (base < 0)
- return ("Not a IPv4 or IPv6 \"ptr\" record");
-
- up = (u_char *)&ap->addr;
- for (i = 0; i < n; ++i) {
- /* Back up to previous dot or beginning of string */
- while (p > str && p[-1] != '.')
- --p;
- v = strtoul(p, &cp, base);
-
- if (base == 10) {
- if (v > 0xff)
- return ("Octet larger than 8 bits");
- } else {
- if (v > 0xf)
- return ("Octet larger than 4 bits");
- if (*cp != '.')
- return ("Junk in \"ptr\" record");
-
- /* Back up over dot */
- if (p > str)
- --p;
-
- /* Back up to previous dot or beginning of string */
- while (p > str && p[-1] != '.')
- --p;
- v2 = strtoul(p, &cp, base);
- if (v2 > 0xf)
- return ("Octet larger than 4 bits");
- if (*cp != '.')
- return ("Junk in \"ptr\" record");
- v = (v << 4) | v2;
- }
- if (*cp != '.')
- return ("Junk in \"ptr\" record");
-
- *up++ = v & 0xff;
-
- /* Back up over dot */
- if (p > str)
- --p;
- else if (p == str)
- break;
- }
- if (i < n - 1)
- return ("Too many octets in \"ptr\" record");
- if (p != str)
- return ("Not enough octets in \"ptr\" record");
-
- return (NULL);
-}
-
-/* Returns a pointer after the next token or quoted string, else NULL */
-char *
-parsequoted(char *cp)
-{
-
- if (*cp == '"') {
- ++cp;
- while (*cp != '"' && *cp != '\0')
- ++cp;
- if (*cp != '"')
- return (NULL);
- ++cp;
- } else {
- while (!isspace(*cp) && *cp != '\0')
- ++cp;
- }
- return (cp);
-}
-
-/* Return true when done */
-int
-parserrsig(const char *str, char **errstrp)
-{
- const char *cp;
-
- /* XXX just look for closing paren */
- cp = str + strlen(str) - 1;
- while (cp >= str)
- if (*cp-- == ')')
- return (1);
- return (0);
-}
-
-/* Return true when done */
-int
-parsesoa(const char *cp, char **errstrp)
-{
- char ch, *garbage;
- static char errstr[132];
-
- /* Eat leading whitespace */
- while (isspace(*cp))
- ++cp;
-
- /* Find opening paren */
- if (nsoaval < 0) {
- cp = strchr(cp, '(');
- if (cp == NULL)
- return (0);
- ++cp;
- while (isspace(*cp))
- ++cp;
- nsoaval = 0;
- }
-
- /* Grab any numbers we find */
- garbage = "leading garbage";
- while (isdigit(*cp) && nsoaval < NSOAVAL) {
- soaval[nsoaval] = atoi(cp);
- do {
- ++cp;
- } while (isdigit(*cp));
- if (nsoaval == SOA_SERIAL && *cp == '.' && isdigit(cp[1])) {
- do {
- ++cp;
- } while (isdigit(*cp));
- } else {
- ch = *cp;
- if (isupper(ch))
- ch = tolower(ch);
- switch (ch) {
-
- case 'w':
- soaval[nsoaval] *= 7;
- /* fall through */
-
- case 'd':
- soaval[nsoaval] *= 24;
- /* fall through */
-
- case 'h':
- soaval[nsoaval] *= 60;
- /* fall through */
-
- case 'm':
- soaval[nsoaval] *= 60;
- /* fall through */
-
- case 's':
- ++cp;
- break;
-
- default:
- ; /* none */
- }
- }
- while (isspace(*cp))
- ++cp;
- garbage = "trailing garbage";
- ++nsoaval;
- }
-
- /* If we're done, do some sanity checks */
- if (nsoaval >= NSOAVAL && *cp == ')') {
- ++cp;
- if (*cp != '\0')
- *errstrp = garbage;
- else if (soaval[SOA_EXPIRE] <
- soaval[SOA_REFRESH] + 10 * soaval[SOA_RETRY]) {
- (void)sprintf(errstr,
- "expire less than refresh + 10 * retry (%u < %u + 10 * %u)",
- soaval[SOA_EXPIRE],
- soaval[SOA_REFRESH],
- soaval[SOA_RETRY]);
- *errstrp = errstr;
- } else if (soaval[SOA_REFRESH] < 2 * soaval[SOA_RETRY]) {
- (void)sprintf(errstr,
- "refresh less than 2 * retry (%u < 2 * %u)",
- soaval[SOA_REFRESH],
- soaval[SOA_RETRY]);
- *errstrp = errstr;
- }
- return (1);
- }
-
- if (*cp != '\0') {
- *errstrp = garbage;
- return (1);
- }
-
- return (0);
-}
-
-void
-process(const char *file, const char *domain, const char *zone)
-{
- FILE *f;
- char ch, *cp, *cp2, *cp3, *rtype;
- const char *p;
- int n, sawsoa, sawrrsig, flags, i;
- u_int ttl;
- enum rrtype rrtype;
- struct addr *ap;
- struct addr addr;
- // struct network *net;
- int smtp;
- char buf[2048], name[256], lastname[256], odomain[256];
- char *errstr;
- const char *addrfmt =
- "%s: %s/%s:%d \"%s\" target is an ip address: %s\n";
- const char *dotfmt =
- "%s: %s/%s:%d \"%s\" target missing trailing dot: %s\n";
-
- /* Check for an "ignored zone" (usually dynamic dns) */
- if (checkignoredzone(zone))
- return;
-
- f = fopen(file, "r");
- if (f == NULL) {
- fprintf(stderr, "%s: %s/%s: %s\n",
- prog, cwd, file, strerror(errno));
- ++errors;
- return;
- }
- if (debug > 1)
- printf("%s: process: opened %s/%s\n", prog, cwd, file);
-
- /* Line number */
- n = 0;
-
- ap = &addr;
-
- lastname[0] = '\0';
- sawsoa = 0;
- sawrrsig = 0;
- while (fgets(buf, sizeof(buf), f) != NULL) {
- ++n;
- cp = buf;
- while (*cp != '\0') {
- /* Handle quoted strings (but don't report errors) */
- if (*cp == '"') {
- ++cp;
- while (*cp != '"' && *cp != '\n' && *cp != '\0')
- ++cp;
- continue;
- }
- if (*cp == '\n' || *cp == ';')
- break;
- ++cp;
- }
- *cp-- = '\0';
-
- /* Nuke trailing white space */
- while (cp >= buf && isspace(*cp))
- *cp-- = '\0';
-
- cp = buf;
- if (*cp == '\0')
- continue;
-
- /* Handle multi-line soa records */
- if (sawsoa) {
- errstr = NULL;
- if (parsesoa(cp, &errstr))
- sawsoa = 0;
- if (errstr != NULL) {
- ++errors;
- fprintf(stderr,
- "%s: %s/%s:%d Bad \"soa\" record (%s)\n",
- prog, cwd, file, n, errstr);
- }
- continue;
- }
-
- /* Handle multi-line rrsig records */
- if (sawrrsig) {
- errstr = NULL;
- if (parserrsig(cp, &errstr))
- sawsoa = 0;
- if (errstr != NULL) {
- ++errors;
- fprintf(stderr,
- "%s: %s/%s:%d Bad \"rrsig\" record (%s)\n",
- prog, cwd, file, n, errstr);
- }
- continue;
- }
-
- if (debug > 3)
- printf(">%s<\n", cp);
-
- /* Look for name */
- if (isspace(*cp)) {
- /* Same name as last record */
- if (lastname[0] == '\0') {
- ++errors;
- fprintf(stderr,
- "%s: %s/%s:%d No default name\n",
- prog, cwd, file, n);
- continue;
- }
- (void)strcpy(name, lastname);
- } else {
- /* Extract name, converting to lowercase */
- for (cp2 = name; !isspace(*cp) && *cp != '\0'; ++cp)
- if (isupper(*cp))
- *cp2++ = tolower(*cp);
- else
- *cp2++ = *cp;
- *cp2 = '\0';
-
- /* Check for domain shorthand */
- if (name[0] == '@' && name[1] == '\0')
- (void)strcpy(name, domain);
- }
-
- /* Find next token */
- while (isspace(*cp))
- ++cp;
-
- /* Handle includes (gag) */
- if (name[0] == '$' && strcasecmp(name, "$include") == 0) {
- /* Extract filename */
- cp2 = name;
- while (!isspace(*cp) && *cp != '\0')
- *cp2++ = *cp++;
- *cp2 = '\0';
-
- /* Look for optional domain */
- while (isspace(*cp))
- ++cp;
- if (*cp == '\0')
- process(name, domain, zone);
- else {
- cp2 = cp;
- /* Convert optional domain to lowercase */
- for (; !isspace(*cp) && *cp != '\0'; ++cp)
- if (isupper(*cp))
- *cp = tolower(*cp);
- *cp = '\0';
- process(name, cp2, cp2);
- }
- continue;
- }
-
- /* Handle $origin */
- if (name[0] == '$' && strcasecmp(name, "$origin") == 0) {
- /* Extract domain, converting to lowercase */
- for (cp2 = odomain; !isspace(*cp) && *cp != '\0'; ++cp)
- if (isupper(*cp))
- *cp2++ = tolower(*cp);
- else
- *cp2++ = *cp;
- *cp2 = '\0';
- domain = odomain;
- lastname[0] = '\0';
- continue;
- }
-
- /* Handle ttl */
- if (name[0] == '$' && strcasecmp(name, "$ttl") == 0) {
- cp2 = cp;
- while (isdigit(*cp))
- ++cp;
- ch = *cp;
- if (isupper(ch))
- ch = tolower(ch);
- if (strchr("wdhms", ch) != NULL)
- ++cp;
- while (isspace(*cp))
- ++cp;
- if (*cp != '\0') {
- ++errors;
- fprintf(stderr,
- "%s: %s/%s:%d Bad $ttl \"%s\"\n",
- prog, cwd, file, n, cp2);
- }
- (void)strcpy(name, lastname);
- continue;
- }
-
- /* Parse ttl or use default */
- if (isdigit(*cp)) {
- ttl = atoi(cp);
- do {
- ++cp;
- } while (isdigit(*cp));
-
- ch = *cp;
- if (isupper(ch))
- ch = tolower(ch);
- switch (ch) {
-
- case 'w':
- ttl *= 7;
- /* fall through */
-
- case 'd':
- ttl *= 24;
- /* fall through */
-
- case 'h':
- ttl *= 60;
- /* fall through */
-
- case 'm':
- ttl *= 60;
- /* fall through */
-
- case 's':
- ++cp;
- break;
-
- default:
- ; /* none */
- }
-
- if (!isspace(*cp)) {
- ++errors;
- fprintf(stderr, "%s: %s/%s:%d Bad ttl\n",
- prog, cwd, file, n);
- continue;
- }
-
- /* Find next token */
- ++cp;
- while (isspace(*cp))
- ++cp;
- } else
- ttl = soaval[SOA_MINIMUM];
-
- /* Eat optional "in" */
- if ((cp[0] == 'i' || cp[0] == 'I') &&
- (cp[1] == 'n' || cp[1] == 'N') && isspace(cp[2])) {
- /* Find next token */
- cp += 3;
- while (isspace(*cp))
- ++cp;
- } else if ((cp[0] == 'c' || cp[0] == 'C') &&
- isspace(cp[5]) && strncasecmp(cp, "chaos", 5) == 0) {
- /* Find next token */
- cp += 5;
- while (isspace(*cp))
- ++cp;
- }
-
- /* Find end of record type, converting to lowercase */
- rtype = cp;
- for (rtype = cp; !isspace(*cp) && *cp != '\0'; ++cp)
- if (isupper(*cp))
- *cp = tolower(*cp);
- *cp++ = '\0';
-
- /* Find "the rest" */
- while (isspace(*cp))
- ++cp;
-
- /* Check for non-ptr names with dots but no trailing dot */
- if (!isdigit(*name) &&
- checkdots(name) && strcmp(domain, ".") != 0) {
- ++errors;
- fprintf(stderr,
- "%s: %s/%s:%d \"%s\" name missing trailing dot: %s\n",
- prog, cwd, file, n, rtype, name);
- }
-
- /* Check for FQDNs outside the zone */
- cp2 = name + strlen(name) - 1;
- if (cp2 >= name && *cp2 == '.' && strchr(name, '.') != NULL) {
- cp2 = name + strlen(name) - strlen(zone);
- if (cp2 >= name && strcasecmp(cp2, zone) != 0) {
- ++errors;
- fprintf(stderr,
- "%s: %s/%s:%d \"%s\" outside zone %s\n",
- prog, cwd, file, n, name, zone);
- }
- }
-
- rrtype = txt2rrtype(rtype);
- switch (rrtype) {
-
- case RR_A:
- /* Handle "a" record */
- add_domain(name, domain);
- p = extractaddr(cp, ap);
- if (p != NULL) {
- ++errors;
- cp2 = cp + strlen(cp) - 1;
- if (cp2 >= cp && *cp2 == '\n')
- *cp2 = '\0';
- fprintf(stderr,
- "%s: %s/%s:%d Bad \"a\" record ip addr \"%s\"\n",
- prog, cwd, file, n, cp);
- continue;
- }
- if (ap->family != AF_INET) {
- ++errors;
- cp2 = cp + strlen(cp) - 1;
- if (cp2 >= cp && *cp2 == '\n')
- *cp2 = '\0';
- fprintf(stderr,
- "%s: %s/%s:%d \"a\"record not AF_INET \"%s\"\n",
- prog, cwd, file, n, cp);
- continue;
- }
- errors += updateitem(name, ap, REC_A, ttl, 0);
- break;
-
- case RR_AAAA:
- /* Handle "aaaa" record */
- add_domain(name, domain);
- p = extractaddr(cp, ap);
- if (p != NULL) {
- ++errors;
- cp2 = cp + strlen(cp) - 1;
- if (cp2 >= cp && *cp2 == '\n')
- *cp2 = '\0';
- fprintf(stderr,
- "%s: %s/%s:%d Bad \"aaaa\" record ip addr \"%s\"\n",
- prog, cwd, file, n, cp);
- continue;
- }
- if (ap->family != AF_INET6) {
- ++errors;
- cp2 = cp + strlen(cp) - 1;
- if (cp2 >= cp && *cp2 == '\n')
- *cp2 = '\0';
- fprintf(stderr,
- "%s: %s/%s:%d \"aaaa\"record not AF_INET6 \"%s\"\n",
- prog, cwd, file, n, cp);
- continue;
- }
- errors += updateitem(name, ap, REC_AAAA, ttl, 0);
- break;
-
- case RR_PTR:
- /* Handle "ptr" record */
- add_domain(name, domain);
- if (strcmp(cp, "@") == 0)
- (void)strcpy(cp, zone);
- if (checkdots(cp)) {
- ++errors;
- fprintf(stderr,
- checkaddr(cp) ? addrfmt : dotfmt,
- prog, cwd, file, n, rtype, cp);
- }
- add_domain(cp, domain);
- p = parseptr(name, ap);
- if (p != NULL) {
- ++errors;
- fprintf(stderr,
- "%s: %s/%s:%d Bad \"ptr\" record (%s) ip addr \"%s\"\n",
- prog, cwd, file, n, p, name);
- continue;
- }
- errors += updateitem(cp, ap, REC_PTR, 0, 0);
- break;
-
- case RR_SOA:
- /* Handle "soa" record */
- if (!CHECKDOT(name)) {
- add_domain(name, domain);
- errors += updateitem(name, NULL, REC_SOA, 0, 0);
- }
- errstr = NULL;
- if (!parsesoa(cp, &errstr))
- ++sawsoa;
- if (errstr != NULL) {
- ++errors;
- fprintf(stderr,
- "%s: %s/%s:%d Bad \"soa\" record (%s)\n",
- prog, cwd, file, n, errstr);
- continue;
- }
- break;
-
- case RR_WKS:
- /* Handle "wks" record */
- p = extractaddr(cp, ap);
- if (p != NULL) {
- ++errors;
- cp2 = cp;
- while (!isspace(*cp2) && *cp2 != '\0')
- ++cp2;
- *cp2 = '\0';
- fprintf(stderr,
- "%s: %s/%s:%d Bad \"wks\" record ip addr \"%s\"\n",
- prog, cwd, file, n, cp);
- continue;
- }
- /* Step over ip address */
- while (*cp == '.' || isdigit(*cp))
- ++cp;
- while (isspace(*cp))
- *cp++ = '\0';
- /* Make sure services are legit */
- errstr = NULL;
- n += checkwks(f, cp, &smtp, &errstr);
- if (errstr != NULL) {
- ++errors;
- fprintf(stderr,
- "%s: %s/%s:%d Bad \"wks\" record (%s)\n",
- prog, cwd, file, n, errstr);
- continue;
- }
- add_domain(name, domain);
- errors += updateitem(name, ap, REC_WKS,
- 0, smtp ? FLG_SMTPWKS : 0);
- /* XXX check to see if ip address records exists? */
- break;
-
- case RR_HINFO:
- /* Handle "hinfo" record */
- add_domain(name, domain);
- errors += updateitem(name, NULL, REC_HINFO, 0, 0);
- cp2 = cp;
- cp = parsequoted(cp);
- if (cp == NULL) {
- ++errors;
- fprintf(stderr,
- "%s: %s/%s:%d \"hinfo\" missing quote: %s\n",
- prog, cwd, file, n, cp2);
- continue;
- }
- if (!isspace(*cp)) {
- ++errors;
- fprintf(stderr,
- "%s: %s/%s:%d \"hinfo\" missing white space: %s\n",
- prog, cwd, file, n, cp2);
- continue;
- }
- ++cp;
- while (isspace(*cp))
- ++cp;
- if (*cp == '\0') {
- ++errors;
- fprintf(stderr,
- "%s: %s/%s:%d \"hinfo\" missing keyword: %s\n",
- prog, cwd, file, n, cp2);
- continue;
- }
- cp = parsequoted(cp);
- if (cp == NULL) {
- ++errors;
- fprintf(stderr,
- "%s: %s/%s:%d \"hinfo\" missing quote: %s\n",
- prog, cwd, file, n, cp2);
- continue;
- }
- if (*cp != '\0') {
- ++errors;
- fprintf(stderr,
- "%s: %s/%s:%d \"hinfo\" garbage after keywords: %s\n",
- prog, cwd, file, n, cp2);
- continue;
- }
- break;
-
- case RR_MX:
- /* Handle "mx" record */
- add_domain(name, domain);
- errors += updateitem(name, NULL, REC_MX, ttl, 0);
-
- /* Look for priority */
- if (!isdigit(*cp)) {
- ++errors;
- fprintf(stderr,
- "%s: %s/%s:%d Bad \"mx\" priority: %s\n",
- prog, cwd, file, n, cp);
- }
-
- /* Skip over priority */
- ++cp;
- while (isdigit(*cp))
- ++cp;
- while (isspace(*cp))
- ++cp;
- if (*cp == '\0') {
- ++errors;
- fprintf(stderr,
- "%s: %s/%s:%d Missing \"mx\" hostname\n",
- prog, cwd, file, n);
- }
- if (strcmp(cp, "@") == 0)
- (void)strcpy(cp, zone);
- if (checkdots(cp)) {
- ++errors;
- fprintf(stderr,
- checkaddr(cp) ? addrfmt : dotfmt,
- prog, cwd, file, n, rtype, cp);
- }
-
- /* Check to see if mx host exists */
- add_domain(cp, domain);
- flags = FLG_MXREF;
- if (*name == *cp && strcmp(name, cp) == 0)
- flags |= FLG_SELFMX;
- errors += updateitem(cp, NULL, REC_REF, 0, flags);
- break;
-
- case RR_CNAME:
- /* Handle "cname" record */
- add_domain(name, domain);
- errors += updateitem(name, NULL, REC_CNAME, 0, 0);
- if (checkdots(cp)) {
- ++errors;
- fprintf(stderr,
- checkaddr(cp) ? addrfmt : dotfmt,
- prog, cwd, file, n, rtype, cp);
- }
-
- /* Make sure cname points somewhere */
- if (strcmp(cp, "@") == 0)
- (void)strcpy(cp, zone);
- add_domain(cp, domain);
- errors += updateitem(cp, NULL, REC_REF, 0, 0);
- break;
-
- case RR_SRV:
- /* Handle "srv" record */
- add_domain(name, domain);
- errors += updateitem(name, NULL, REC_SRV, 0, 0);
- cp2 = cp;
-
- /* Skip over three values */
- for (i = 0; i < 3; ++i) {
- if (!isdigit(*cp)) {
- ++errors;
- fprintf(stderr, "%s: %s/%s:%d"
- " Bad \"srv\" value: %s\n",
- prog, cwd, file, n, cp);
- }
-
- /* Skip over value */
- ++cp;
- while (isdigit(*cp))
- ++cp;
- while (isspace(*cp))
- ++cp;
- }
-
- /* Check to see if mx host exists */
- add_domain(cp, domain);
- errors += updateitem(cp, NULL, REC_REF, 0, 0);
- break;
-
- case RR_TXT:
- /* Handle "txt" record */
- add_domain(name, domain);
- errors += updateitem(name, NULL, REC_TXT, 0, 0);
- cp2 = cp;
- cp = parsequoted(cp);
- if (cp == NULL) {
- ++errors;
- fprintf(stderr,
- "%s: %s/%s:%d \"txt\" missing quote: %s\n",
- prog, cwd, file, n, cp2);
- continue;
- }
- while (isspace(*cp))
- ++cp;
- if (*cp != '\0') {
- ++errors;
- fprintf(stderr,
- "%s: %s/%s:%d \"txt\" garbage after text: %s\n",
- prog, cwd, file, n, cp2);
- continue;
- }
- break;
-
- case RR_NS:
- /* Handle "ns" record */
- errors += updateitem(zone, NULL, REC_NS, 0, 0);
- if (strcmp(cp, "@") == 0)
- (void)strcpy(cp, zone);
- if (checkdots(cp)) {
- ++errors;
- fprintf(stderr,
- checkaddr(cp) ? addrfmt : dotfmt,
- prog, cwd, file, n, rtype, cp);
- }
- add_domain(cp, domain);
- errors += updateitem(cp, NULL, REC_REF, 0, 0);
- break;
-
- case RR_RP:
- /* Handle "rp" record */
- add_domain(name, domain);
- errors += updateitem(name, NULL, REC_RP, 0, 0);
- cp2 = cp;
-
- /* Step over mailbox name */
- /* XXX could add_domain() and check further */
- while (!isspace(*cp) && *cp != '\0')
- ++cp;
- if (*cp == '\0') {
- ++errors;
- fprintf(stderr,
- "%s: %s/%s:%d \"rp\" missing text name: %s\n",
- prog, cwd, file, n, cp2);
- continue;
- }
- ++cp;
- cp3 = cp;
-
- /* Step over text name */
- while (!isspace(*cp) && *cp != '\0')
- ++cp;
-
- if (*cp != '\0') {
- ++errors;
- fprintf(stderr,
- "%s: %s/%s:%d \"rp\" garbage after text name: %s\n",
- prog, cwd, file, n, cp2);
- continue;
- }
-
- /* Make sure text name points somewhere (if not ".") */
- if (!CHECKDOT(cp3)) {
- add_domain(cp3, domain);
- errors += updateitem(cp3, NULL, REC_REF, 0, 0);
- }
- break;
-
- case RR_ALLOWDUPA:
- /* Handle "allow duplicate a" record */
- add_domain(name, domain);
- p = extractaddr(cp, ap);
- if (p != NULL) {
- ++errors;
- cp2 = cp + strlen(cp) - 1;
- if (cp2 >= cp && *cp2 == '\n')
- *cp2 = '\0';
- fprintf(stderr,
- "%s: %s/%s:%d Bad \"allowdupa\" record ip addr \"%s\"\n",
- prog, cwd, file, n, cp);
- continue;
- }
- errors += updateitem(name, ap, 0, 0, FLG_ALLOWDUPA);
- break;
-
- case RR_DNSKEY:
- /* Handle "dnskey" record */
- add_domain(name, domain);
- errors += updateitem(name, NULL, REC_CNAME, 0, 0);
- if (checkdots(cp)) {
- ++errors;
- fprintf(stderr,
- checkaddr(cp) ? addrfmt : dotfmt,
- prog, cwd, file, n, rtype, cp);
- }
-
- /* Make sure cname points somewhere */
- if (strcmp(cp, "@") == 0)
- (void)strcpy(cp, zone);
- add_domain(cp, domain);
- errors += updateitem(cp, NULL, REC_REF, 0, 0);
- break;
-
- case RR_RRSIG:
- errstr = NULL;
- if (!parserrsig(cp, &errstr))
- ++sawrrsig;
- if (errstr != NULL) {
- ++errors;
- fprintf(stderr,
- "%s: %s/%s:%d Bad \"rrsig\" record (%s)\n",
- prog, cwd, file, n, errstr);
- continue;
- }
- break;
-
- case RR_NSEC:
- /* XXX */
- continue;
-
- default:
- /* Unknown record type */
- ++errors;
- fprintf(stderr,
- "%s: %s/%s:%d Unknown record type \"%s\"\n",
- prog, cwd, file, n, rtype);
- add_domain(name, domain);
- errors += updateitem(name, NULL, REC_UNKNOWN, 0, 0);
- break;
- }
- (void)strcpy(lastname, name);
- }
- (void)fclose(f);
- return;
-}
-
-static const char *microlist[] = {
- "_tcp",
- "_udp",
- "_msdcs",
- "_sites",
- NULL
-};
-
-int
-rfc1034host(const char *host, int recs)
-{
- const char *cp, **p;
- int underok;
-
- underok = 0;
- for (p = microlist; *p != NULL ;++p)
- if ((cp = strstr(host, *p)) != NULL &&
- cp > host &&
- cp[-1] == '.' &&
- cp[strlen(*p)] == '.') {
- ++underok;
- break;
- }
-
- cp = host;
- if (!(isalpha(*cp) || isdigit(*cp) || (*cp == '_' && underok))) {
- fprintf(stderr,
- "%s: illegal hostname \"%s\" (starts with non-alpha/numeric)\n",
- prog, host);
- return (1);
- }
- for (++cp; *cp != '.' && *cp != '\0'; ++cp)
- if (!(isalpha(*cp) || isdigit(*cp) || *cp == '-' ||
- (*cp == '/' && (recs & REC_SOA) != 0))) {
- fprintf(stderr,
- "%s: Illegal hostname \"%s\" ('%c' illegal character)\n",
- prog, host, *cp);
- return (1);
- }
- if (--cp >= host && *cp == '-') {
- fprintf(stderr, "%s: Illegal hostname \"%s\" (ends with '-')\n",
- prog, host);
- return (1);
- }
- return (0);
-}
-
-enum rrtype
-txt2rrtype(const char *str)
-{
- if (strcasecmp(str, "aaaa") == 0)
- return (RR_AAAA);
- if (strcasecmp(str, "a") == 0)
- return (RR_A);
- if (strcasecmp(str, "allowdupa") == 0)
- return (RR_ALLOWDUPA);
- if (strcasecmp(str, "cname") == 0)
- return (RR_CNAME);
- if (strcasecmp(str, "dnskey") == 0)
- return (RR_DNSKEY);
- if (strcasecmp(str, "hinfo") == 0)
- return (RR_HINFO);
- if (strcasecmp(str, "mx") == 0)
- return (RR_MX);
- if (strcasecmp(str, "ns") == 0)
- return (RR_NS);
- if (strcasecmp(str, "ptr") == 0)
- return (RR_PTR);
- if (strcasecmp(str, "rp") == 0)
- return (RR_RP);
- if (strcasecmp(str, "soa") == 0)
- return (RR_SOA);
- if (strcasecmp(str, "srv") == 0)
- return (RR_SRV);
- if (strcasecmp(str, "txt") == 0)
- return (RR_TXT);
- if (strcasecmp(str, "wks") == 0)
- return (RR_WKS);
- if (strcasecmp(str, "RRSIG") == 0)
- return (RR_RRSIG);
- if (strcasecmp(str, "NSEC") == 0)
- return (RR_NSEC);
- return (RR_UNDEF);
-}
-
-int
-samesubnet(struct addr *a1, struct addr *a2, struct network *np)
-{
- int i;
- u_int32_t v1, v2;
-
- /* IPv4 before IPv6 */
- if (a1->family != a2->family)
- return (0);
-
- switch (a1->family) {
-
- case AF_INET:
- /* Apply the mask to both values */
- v1 = a1->a_addr4 & np->n_mask4;
- v2 = a2->a_addr4 & np->n_mask4;
- return (v1 == v2);
-
- case AF_INET6:
- /* Apply the mask to both values */
- for (i = 0; i < 16; ++i) {
- v1 = a1->a_addr6[i] & np->n_mask6[i];
- v2 = a2->a_addr6[i] & np->n_mask6[i];
- if (v1 != v2)
- return (0);
- }
- break;
-
- default:
- abort();
- }
- return (1);
-}
-
-/* Set address mask in network order */
-void
-setmaskwidth(u_int w, struct network *np)
-{
- int i, j;
-
- switch (np->family) {
-
- case AF_INET:
- if (w <= 0)
- np->n_mask4 = 0;
- else
- np->n_mask4 = htonl(0xffffffff << (32 - w));
- break;
-
- case AF_INET6:
- /* XXX is this right? */
- memset(np->n_mask6, 0, sizeof(np->n_mask6));
- for (i = 0; i < w / 8; ++i)
- np->n_mask6[i] = 0xff;
- i = w / 8;
- j = w % 8;
- if (j > 0 && i < 16)
- np->n_mask6[i] = 0xff << (8 - j);
- break;
-
- default:
- abort();
- }
-}
-
-int
-updateitem(const char *host, struct addr *ap, int records, u_int ttl, int flags)
-{
- const char *ccp;
- int n, errs;
- u_int i;
- struct item *ip;
- int foundsome;
-
- n = 0;
- foundsome = 0;
- errs = 0;
-
- /* Hash the host name */
- i = 0;
- ccp = host;
- while (*ccp != '\0')
- i = i * 37 + *ccp++;
- ip = &items[i & (ITEMSIZE - 1)];
-
- /* Look for a match or any empty slot */
- while (n < ITEMSIZE && ip->host != NULL) {
-
- if ((ap == NULL || ip->addr.family == 0 ||
- cmpaddr(ap, &ip->addr) == 0) &&
- *host == *ip->host && strcmp(host, ip->host) == 0) {
- ++foundsome;
- if (ip->addr.family == 0 && ap != NULL)
- memmove(&ip->addr, ap, sizeof(*ap));
- if ((records & MASK_TEST_DUP) != 0)
- checkdups(ip, records);
- ip->records |= records;
- /* Only check differing ttl's for A and MX records */
- if (ip->ttl == 0)
- ip->ttl = ttl;
- else if (ttl != 0 && ip->ttl != ttl) {
- fprintf(stderr,
- "%s: Differing ttls for %s (%u != %u)\n",
- prog, ip->host, ttl, ip->ttl);
- ++errs;
- }
- ip->flags |= flags;
- /* Not done if we wildcard matched the name */
- if (ap != NULL)
- return (errs);
- }
- ++n;
- ++ip;
- if (ip >= &items[ITEMSIZE])
- ip = items;
- }
-
- if (n >= ITEMSIZE) {
- fprintf(stderr, "%s: Out of item slots (max %d)\n",
- prog, ITEMSIZE);
- exit(1);
- }
-
- /* Done if we were wildcarding the name (and found entries for it) */
- if (ap == NULL && foundsome) {
- return (errs);
- }
-
- /* Didn't find it, make new entry */
- ++itemcnt;
- if (ip->host) {
- fprintf(stderr, "%s: Reusing bucket!\n", prog);
- exit(1);
- }
- if (ap != NULL)
- memmove(&ip->addr, ap, sizeof(*ap));
- ip->host = savestr(host);
- if ((records & MASK_TEST_DUP) != 0)
- checkdups(ip, records);
- ip->records |= records;
- if (ttl != 0)
- ip->ttl = ttl;
- ip->flags |= flags;
- return (errs);
-}
-
-void
-usage(void)
-{
-
- fprintf(stderr, "Version %s\n", version);
- fprintf(stderr, "usage: %s [-d] [-b named.boot] [-B nslint.boot]\n",
- prog);
- fprintf(stderr, " %s [-d] [-c named.conf] [-C nslint.conf]\n",
- prog);
- exit(1);
-}
diff --git a/contrib/nslint-3.0a2/savestr.c b/contrib/nslint-3.0a2/savestr.c
deleted file mode 100644
index ac4eaef7..00000000
--- a/contrib/nslint-3.0a2/savestr.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 1997
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that: (1) source code distributions
- * retain the above copyright notice and this paragraph in its entirety, (2)
- * distributions including binary code include the above copyright notice and
- * this paragraph in its entirety in the documentation or other materials
- * provided with the distribution, and (3) all advertising materials mentioning
- * features or use of this software display the following acknowledgement:
- * ``This product includes software developed by the University of California,
- * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
- * the University nor the names of its contributors may be used to endorse
- * or promote products derived from this software without specific prior
- * written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-#ifndef lint
-static const char rcsid[] =
- "@(#) $Id: savestr.c,v 1.2 2006/03/09 02:27:11 leres Exp $ (LBL)";
-#endif
-
-#include <sys/types.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "gnuc.h"
-#ifdef HAVE_OS_PROTO_H
-#include "os-proto.h"
-#endif
-
-#include "savestr.h"
-
-/* A replacement for strdup() that cuts down on malloc() overhead */
-char *
-savestr(register const char *str)
-{
- register u_int size;
- register char *p;
- static char *strptr = NULL;
- static u_int strsize = 0;
-
- size = strlen(str) + 1;
- if (size > strsize) {
- strsize = 1024;
- if (strsize < size)
- strsize = size;
- strptr = (char *)malloc(strsize);
- if (strptr == NULL) {
- fprintf(stderr, "savestr: malloc\n");
- exit(1);
- }
- }
- (void)strcpy(strptr, str);
- p = strptr;
- strptr += size;
- strsize -= size;
- return (p);
-}
diff --git a/contrib/nslint-3.0a2/savestr.h b/contrib/nslint-3.0a2/savestr.h
deleted file mode 100644
index 51b44029..00000000
--- a/contrib/nslint-3.0a2/savestr.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (c) 1997
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that: (1) source code distributions
- * retain the above copyright notice and this paragraph in its entirety, (2)
- * distributions including binary code include the above copyright notice and
- * this paragraph in its entirety in the documentation or other materials
- * provided with the distribution, and (3) all advertising materials mentioning
- * features or use of this software display the following acknowledgement:
- * ``This product includes software developed by the University of California,
- * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
- * the University nor the names of its contributors may be used to endorse
- * or promote products derived from this software without specific prior
- * written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- * @(#) $Header: savestr.h,v 1.1 97/04/22 13:30:21 leres Exp $ (LBL)
- */
-
-extern char *savestr(const char *);
diff --git a/contrib/nslint-3.0a2/strerror.c b/contrib/nslint-3.0a2/strerror.c
deleted file mode 100644
index 2233cb0a..00000000
--- a/contrib/nslint-3.0a2/strerror.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 1988, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char sccsid[] = "@(#)strerror.c 8.1 (Berkeley) 6/4/93";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/types.h>
-
-#include <string.h>
-
-#include "gnuc.h"
-#ifdef HAVE_OS_PROTO_H
-#include "os-proto.h"
-#endif
-
-char *
-strerror(num)
- int num;
-{
- extern int sys_nerr;
- extern char *sys_errlist[];
-#define UPREFIX "Unknown error: "
- static char ebuf[40] = UPREFIX; /* 64-bit number + slop */
- register unsigned int errnum;
- register char *p, *t;
- char tmp[40];
-
- errnum = num; /* convert to unsigned */
- if (errnum < sys_nerr)
- return(sys_errlist[errnum]);
-
- /* Do this by hand, so we don't include stdio(3). */
- t = tmp;
- do {
- *t++ = "0123456789"[errnum % 10];
- } while (errnum /= 10);
- for (p = ebuf + sizeof(UPREFIX) - 1;;) {
- *p++ = *--t;
- if (t <= tmp)
- break;
- }
- *p = '\0';
- return(ebuf);
-}
diff --git a/contrib/nslint-3.0a2/version.h b/contrib/nslint-3.0a2/version.h
deleted file mode 100644
index 879afc28..00000000
--- a/contrib/nslint-3.0a2/version.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* @(#) $Id: version.h 239 2009-03-14 05:44:54Z leres $ (LBL) */
-
-extern const char version[];
diff --git a/contrib/perftcpdns/Makefile.in b/contrib/perftcpdns/Makefile.in
deleted file mode 100644
index f89de29e..00000000
--- a/contrib/perftcpdns/Makefile.in
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright (C) 2014, 2016 Internet Systems Consortium, Inc. ("ISC")
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-CC = @CC@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-DEFS = @DEFS@
-
-perftcpdns: perftcpdns.o $(LIBOBJS)
- $(CC) $(CFLAGS) $(DEFS) $(LDFLAGS) perftcpdns.o $(LIBOBJS) $(LIBS) -o perftcpdns
-
-perftcpdns.o: perftcpdns.c
- $(CC) $(CFLAGS) $(DEFS) -c perftcpdns.c
-
-clean:
- rm -f *.o perftcpdns
-
-distclean: clean
- rm -f config.log
- rm -f config.cache
- rm -f config.status
- rm -f Makefile
diff --git a/contrib/perftcpdns/configure b/contrib/perftcpdns/configure
deleted file mode 100755
index 2be15f8d..00000000
--- a/contrib/perftcpdns/configure
+++ /dev/null
@@ -1,4342 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69.
-#
-#
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
-#
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# Use a proper internal environment variable to ensure we don't fall
- # into an infinite loop, continuously re-executing ourselves.
- if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
- _as_can_reexec=no; export _as_can_reexec;
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
- fi
- # We don't want this to propagate to other subprocesses.
- { _as_can_reexec=; unset _as_can_reexec;}
-if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '\${1+\"\$@\"}'='\"\$@\"'
- setopt NO_GLOB_SUBST
-else
- case \`(set -o) 2>/dev/null\` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-"
- as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
- exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
- as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
- as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
- eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
- test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
- as_have_required=yes
-else
- as_have_required=no
-fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- as_found=:
- case $as_dir in #(
- /*)
- for as_base in sh bash ksh sh5; do
- # Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
- CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
- break 2
-fi
-fi
- done;;
- esac
- as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
- if test "x$CONFIG_SHELL" != x; then :
- export CONFIG_SHELL
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
-fi
-
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
- else
- $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
-$0: including any error possibly output before this
-$0: message. Then install a modern shell, or manually run
-$0: the script under such a shell if you do have one."
- fi
- exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-
- as_lineno_1=$LINENO as_lineno_1a=$LINENO
- as_lineno_2=$LINENO as_lineno_2a=$LINENO
- eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
- test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
- # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
- # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
- # already done that, so ensure we don't try to do so again and fall
- # in an infinite loop. This has already happened in practice.
- _as_can_reexec=no; export _as_can_reexec
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-PACKAGE_URL=
-
-ac_unique_file="perftcpdns.c"
-ac_subst_vars='LTLIBOBJS
-LIBOBJS
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-'
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval $ac_prev=\$ac_option
- ac_prev=
- continue
- fi
-
- case $ac_option in
- *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *=) ac_optarg= ;;
- *) ac_optarg=yes ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir=$ac_optarg ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build_alias ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build_alias=$ac_optarg ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file=$ac_optarg ;;
-
- --config-cache | -C)
- cache_file=config.cache ;;
-
- -datadir | --datadir | --datadi | --datad)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=*)
- datadir=$ac_optarg ;;
-
- -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
- | --dataroo | --dataro | --datar)
- ac_prev=datarootdir ;;
- -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
- | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
- datarootdir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
- -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
- docdir=$ac_optarg ;;
-
- -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
- ac_prev=dvidir ;;
- -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
- dvidir=$ac_optarg ;;
-
- -enable-* | --enable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=\$ac_optarg ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix=$ac_optarg ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he | -h)
- ac_init_help=long ;;
- -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
- ac_init_help=recursive ;;
- -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
- ac_init_help=short ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host_alias ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host_alias=$ac_optarg ;;
-
- -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
- ac_prev=htmldir ;;
- -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
- | --ht=*)
- htmldir=$ac_optarg ;;
-
- -includedir | --includedir | --includedi | --included | --include \
- | --includ | --inclu | --incl | --inc)
- ac_prev=includedir ;;
- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
- | --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir=$ac_optarg ;;
-
- -infodir | --infodir | --infodi | --infod | --info | --inf)
- ac_prev=infodir ;;
- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir=$ac_optarg ;;
-
- -libdir | --libdir | --libdi | --libd)
- ac_prev=libdir ;;
- -libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir=$ac_optarg ;;
-
- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
- | --libexe | --libex | --libe)
- ac_prev=libexecdir ;;
- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
- | --libexe=* | --libex=* | --libe=*)
- libexecdir=$ac_optarg ;;
-
- -localedir | --localedir | --localedi | --localed | --locale)
- ac_prev=localedir ;;
- -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
- localedir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst | --locals)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
- localstatedir=$ac_optarg ;;
-
- -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
- ac_prev=mandir ;;
- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir=$ac_optarg ;;
-
- -nfp | --nfp | --nf)
- # Obsolete; use --without-fp.
- with_fp=no ;;
-
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c | -n)
- no_create=yes ;;
-
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
- no_recursion=yes ;;
-
- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
- | --oldin | --oldi | --old | --ol | --o)
- ac_prev=oldincludedir ;;
- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir=$ac_optarg ;;
-
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix=$ac_optarg ;;
-
- -program-prefix | --program-prefix | --program-prefi | --program-pref \
- | --program-pre | --program-pr | --program-p)
- ac_prev=program_prefix ;;
- -program-prefix=* | --program-prefix=* | --program-prefi=* \
- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix=$ac_optarg ;;
-
- -program-suffix | --program-suffix | --program-suffi | --program-suff \
- | --program-suf | --program-su | --program-s)
- ac_prev=program_suffix ;;
- -program-suffix=* | --program-suffix=* | --program-suffi=* \
- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix=$ac_optarg ;;
-
- -program-transform-name | --program-transform-name \
- | --program-transform-nam | --program-transform-na \
- | --program-transform-n | --program-transform- \
- | --program-transform | --program-transfor \
- | --program-transfo | --program-transf \
- | --program-trans | --program-tran \
- | --progr-tra | --program-tr | --program-t)
- ac_prev=program_transform_name ;;
- -program-transform-name=* | --program-transform-name=* \
- | --program-transform-nam=* | --program-transform-na=* \
- | --program-transform-n=* | --program-transform-=* \
- | --program-transform=* | --program-transfor=* \
- | --program-transfo=* | --program-transf=* \
- | --program-trans=* | --program-tran=* \
- | --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name=$ac_optarg ;;
-
- -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
- ac_prev=pdfdir ;;
- -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
- pdfdir=$ac_optarg ;;
-
- -psdir | --psdir | --psdi | --psd | --ps)
- ac_prev=psdir ;;
- -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
- psdir=$ac_optarg ;;
-
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- silent=yes ;;
-
- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
- ac_prev=sbindir ;;
- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
- | --sbi=* | --sb=*)
- sbindir=$ac_optarg ;;
-
- -sharedstatedir | --sharedstatedir | --sharedstatedi \
- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
- | --sharedst | --shareds | --shared | --share | --shar \
- | --sha | --sh)
- ac_prev=sharedstatedir ;;
- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
- | --sha=* | --sh=*)
- sharedstatedir=$ac_optarg ;;
-
- -site | --site | --sit)
- ac_prev=site ;;
- -site=* | --site=* | --sit=*)
- site=$ac_optarg ;;
-
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir=$ac_optarg ;;
-
- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
- | --syscon | --sysco | --sysc | --sys | --sy)
- ac_prev=sysconfdir ;;
- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir=$ac_optarg ;;
-
- -target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target_alias ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target_alias=$ac_optarg ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers | -V)
- ac_init_version=: ;;
-
- -with-* | --with-*)
- ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=\$ac_optarg ;;
-
- -without-* | --without-*)
- ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=no ;;
-
- --x)
- # Obsolete; use --with-x.
- with_x=yes ;;
-
- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
- | --x-incl | --x-inc | --x-in | --x-i)
- ac_prev=x_includes ;;
- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes=$ac_optarg ;;
-
- -x-libraries | --x-libraries | --x-librarie | --x-librari \
- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
- ac_prev=x_libraries ;;
- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries=$ac_optarg ;;
-
- -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- case $ac_envvar in #(
- '' | [0-9]* | *[!_$as_cr_alnum]* )
- as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
- esac
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
- : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- ac_option=--`echo $ac_prev | sed 's/_/-/g'`
- as_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
- case $enable_option_checking in
- no) ;;
- fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
- esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
-do
- eval ac_val=\$$ac_var
- # Remove trailing slashes.
- case $ac_val in
- */ )
- ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
- eval $ac_var=\$ac_val;;
- esac
- # Be sure to have absolute directory names.
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
- esac
- as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
- if test "x$build_alias" = x; then
- cross_compiling=maybe
- elif test "x$build_alias" != "x$host_alias"; then
- cross_compiling=yes
- fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- as_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- as_fn_error $? "pwd does not report name of working directory"
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
- ac_srcdir_defaulted=yes
- # Try the directory containing this script, then the parent directory.
- ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_myself" : 'X\(//\)[^/]' \| \
- X"$as_myself" : 'X\(//\)$' \| \
- X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- srcdir=$ac_confdir
- if test ! -r "$srcdir/$ac_unique_file"; then
- srcdir=..
- fi
-else
- ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
- pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
- srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
- eval ac_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_env_${ac_var}_value=\$${ac_var}
- eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat <<_ACEOF
-\`configure' configures this package to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE. See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
- -h, --help display this help and exit
- --help=short display options specific to this package
- --help=recursive display the short help of all the included packages
- -V, --version display version information and exit
- -q, --quiet, --silent do not print \`checking ...' messages
- --cache-file=FILE cache test results in FILE [disabled]
- -C, --config-cache alias for \`--cache-file=config.cache'
- -n, --no-create do not create output files
- --srcdir=DIR find the sources in DIR [configure dir or \`..']
-
-Installation directories:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc [/usr/include]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_ACEOF
-
- cat <<\_ACEOF
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-
- cat <<\_ACEOF
-
-Some influential environment variables:
- CC C compiler command
- CFLAGS C compiler flags
- LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
- nonstandard directory <lib dir>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to the package provider.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" ||
- { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
- continue
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
- cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
- if test -f "$ac_srcdir/configure.gnu"; then
- echo &&
- $SHELL "$ac_srcdir/configure.gnu" --help=recursive
- elif test -f "$ac_srcdir/configure"; then
- echo &&
- $SHELL "$ac_srcdir/configure" --help=recursive
- else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
- done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
- cat <<\_ACEOF
-configure
-generated by GNU Autoconf 2.69
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
- exit
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
- if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_compile
-
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext conftest$ac_exeext
- if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- test -x conftest$ac_exeext
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
- # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
- # interfere with the next link command; also delete a directory that is
- # left behind by Apple's compiler. We do this before executing the actions.
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_link
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then :
- ac_retval=0
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=$ac_status
-fi
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_run
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
-
-/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
-/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
-/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
- done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
- for ac_arg
- do
- case $ac_arg in
- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- continue ;;
- *\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
- 2)
- as_fn_append ac_configure_args1 " '$ac_arg'"
- if test $ac_must_keep_next = true; then
- ac_must_keep_next=false # Got value, back to normal.
- else
- case $ac_arg in
- *=* | --config-cache | -C | -disable-* | --disable-* \
- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
- | -with-* | --with-* | -without-* | --without-* | --x)
- case "$ac_configure_args0 " in
- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
- esac
- ;;
- -* ) ac_must_keep_next=true ;;
- esac
- fi
- as_fn_append ac_configure_args " '$ac_arg'"
- ;;
- esac
- done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset ac_configure_args1;}
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log. We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
- echo
- # The following way of writing the cache mishandles newlines in values,
-(
- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
- (set) 2>&1 |
- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- sed -n \
- "s/'\''/'\''\\\\'\'''\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
- ;; #(
- *)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-)
- echo
-
- $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
- echo
- cat confdefs.h
- echo
- fi
- test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
-elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
-else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
- fi
-done
-
-if test -r "$cache_file"; then
- # Some versions of bash will fail to source /dev/null (special files
- # actually), so we avoid doing that. DJGPP emulates it as a regular file.
- if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
- esac
- fi
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
- >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
- eval ac_old_set=\$ac_cv_env_${ac_var}_set
- eval ac_new_set=\$ac_env_${ac_var}_set
- eval ac_old_val=\$ac_cv_env_${ac_var}_value
- eval ac_new_val=\$ac_env_${ac_var}_value
- case $ac_old_set,$ac_new_set in
- set,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,);;
- *)
- if test "x$ac_old_val" != "x$ac_new_val"; then
- # differences in whitespace do not lead to failure.
- ac_old_val_w=`echo x $ac_old_val`
- ac_new_val_w=`echo x $ac_new_val`
- if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- ac_cache_corrupted=:
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
- eval $ac_var=\$ac_old_val
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
- *) ac_arg=$ac_var=$ac_new_val ;;
- esac
- case " $ac_configure_args " in
- *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
- *) as_fn_append ac_configure_args " '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-else
- CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- fi
-fi
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# != 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- fi
- rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
- break;;
- * )
- break;;
- esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
- ac_file=''
-fi
-if test -z "$ac_file"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
-done
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
- { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if { ac_try='./conftest$ac_cv_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-else
- CFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqrt in -lm" >&5
-$as_echo_n "checking for sqrt in -lm... " >&6; }
-if ${ac_cv_lib_m_sqrt+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lm $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char sqrt ();
-int
-main ()
-{
-return sqrt ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_m_sqrt=yes
-else
- ac_cv_lib_m_sqrt=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sqrt" >&5
-$as_echo "$ac_cv_lib_m_sqrt" >&6; }
-if test "x$ac_cv_lib_m_sqrt" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBM 1
-_ACEOF
-
- LIBS="-lm $LIBS"
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
-$as_echo_n "checking for clock_gettime in -lrt... " >&6; }
-if ${ac_cv_lib_rt_clock_gettime+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lrt $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char clock_gettime ();
-int
-main ()
-{
-return clock_gettime ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_rt_clock_gettime=yes
-else
- ac_cv_lib_rt_clock_gettime=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
-$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; }
-if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBRT 1
-_ACEOF
-
- LIBS="-lrt $LIBS"
-
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking epoll support" >&5
-$as_echo_n "checking epoll support... " >&6; }
-if test "$cross_compiling" = yes; then :
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run test program while cross compiling
-See \`config.log' for more details" "$LINENO" 5; }
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-#include <sys/epoll.h>
-int main() {
- if (epoll_create(1) < 0)
- return (1);
- return (0);
-}
-
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
- as_fn_error $? "epoll not found" "$LINENO" 5
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-
-case "$host" in
- *-freebsd*)
- # We don't want to set -lpthread as that break
- # the ability to choose threads library at final
- # link time and is not valid for all architectures.
-
- PTHREAD=
- if test "X$GCC" = "Xyes"; then
- saved_cc="$CC"
- CC="$CC -pthread"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc -pthread support" >&5
-$as_echo_n "checking for gcc -pthread support... " >&6; };
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <pthread.h>
-int
-main ()
-{
-printf("%x\n", pthread_create);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- PTHREAD="yes"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- CC="$saved_cc"
- fi
- if test "X$PTHREAD" != "Xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5
-$as_echo_n "checking for pthread_create in -lpthread... " >&6; }
-if ${ac_cv_lib_pthread_pthread_create+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpthread $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pthread_create ();
-int
-main ()
-{
-return pthread_create ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_pthread_pthread_create=yes
-else
- ac_cv_lib_pthread_pthread_create=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5
-$as_echo "$ac_cv_lib_pthread_pthread_create" >&6; }
-if test "x$ac_cv_lib_pthread_pthread_create" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBPTHREAD 1
-_ACEOF
-
- LIBS="-lpthread $LIBS"
-
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for thread_create in -lthr" >&5
-$as_echo_n "checking for thread_create in -lthr... " >&6; }
-if ${ac_cv_lib_thr_thread_create+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lthr $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char thread_create ();
-int
-main ()
-{
-return thread_create ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_thr_thread_create=yes
-else
- ac_cv_lib_thr_thread_create=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_thr_thread_create" >&5
-$as_echo "$ac_cv_lib_thr_thread_create" >&6; }
-if test "x$ac_cv_lib_thr_thread_create" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBTHR 1
-_ACEOF
-
- LIBS="-lthr $LIBS"
-
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc_r" >&5
-$as_echo_n "checking for pthread_create in -lc_r... " >&6; }
-if ${ac_cv_lib_c_r_pthread_create+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lc_r $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pthread_create ();
-int
-main ()
-{
-return pthread_create ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_c_r_pthread_create=yes
-else
- ac_cv_lib_c_r_pthread_create=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_create" >&5
-$as_echo "$ac_cv_lib_c_r_pthread_create" >&6; }
-if test "x$ac_cv_lib_c_r_pthread_create" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBC_R 1
-_ACEOF
-
- LIBS="-lc_r $LIBS"
-
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc" >&5
-$as_echo_n "checking for pthread_create in -lc... " >&6; }
-if ${ac_cv_lib_c_pthread_create+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lc $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pthread_create ();
-int
-main ()
-{
-return pthread_create ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_c_pthread_create=yes
-else
- ac_cv_lib_c_pthread_create=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_pthread_create" >&5
-$as_echo "$ac_cv_lib_c_pthread_create" >&6; }
-if test "x$ac_cv_lib_c_pthread_create" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBC 1
-_ACEOF
-
- LIBS="-lc $LIBS"
-
-else
- as_fn_error $? "\"could not find thread libraries\"" "$LINENO" 5
-fi
-
-fi
-
-fi
-
-fi
-
- fi
- ;;
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5
-$as_echo_n "checking for pthread_create in -lpthread... " >&6; }
-if ${ac_cv_lib_pthread_pthread_create+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpthread $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pthread_create ();
-int
-main ()
-{
-return pthread_create ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_pthread_pthread_create=yes
-else
- ac_cv_lib_pthread_pthread_create=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5
-$as_echo "$ac_cv_lib_pthread_pthread_create" >&6; }
-if test "x$ac_cv_lib_pthread_pthread_create" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBPTHREAD 1
-_ACEOF
-
- LIBS="-lpthread $LIBS"
-
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __pthread_create in -lpthread" >&5
-$as_echo_n "checking for __pthread_create in -lpthread... " >&6; }
-if ${ac_cv_lib_pthread___pthread_create+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpthread $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char __pthread_create ();
-int
-main ()
-{
-return __pthread_create ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_pthread___pthread_create=yes
-else
- ac_cv_lib_pthread___pthread_create=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread___pthread_create" >&5
-$as_echo "$ac_cv_lib_pthread___pthread_create" >&6; }
-if test "x$ac_cv_lib_pthread___pthread_create" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBPTHREAD 1
-_ACEOF
-
- LIBS="-lpthread $LIBS"
-
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __pthread_create_system in -lpthread" >&5
-$as_echo_n "checking for __pthread_create_system in -lpthread... " >&6; }
-if ${ac_cv_lib_pthread___pthread_create_system+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpthread $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char __pthread_create_system ();
-int
-main ()
-{
-return __pthread_create_system ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_pthread___pthread_create_system=yes
-else
- ac_cv_lib_pthread___pthread_create_system=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread___pthread_create_system" >&5
-$as_echo "$ac_cv_lib_pthread___pthread_create_system" >&6; }
-if test "x$ac_cv_lib_pthread___pthread_create_system" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBPTHREAD 1
-_ACEOF
-
- LIBS="-lpthread $LIBS"
-
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc_r" >&5
-$as_echo_n "checking for pthread_create in -lc_r... " >&6; }
-if ${ac_cv_lib_c_r_pthread_create+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lc_r $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pthread_create ();
-int
-main ()
-{
-return pthread_create ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_c_r_pthread_create=yes
-else
- ac_cv_lib_c_r_pthread_create=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_create" >&5
-$as_echo "$ac_cv_lib_c_r_pthread_create" >&6; }
-if test "x$ac_cv_lib_c_r_pthread_create" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBC_R 1
-_ACEOF
-
- LIBS="-lc_r $LIBS"
-
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc" >&5
-$as_echo_n "checking for pthread_create in -lc... " >&6; }
-if ${ac_cv_lib_c_pthread_create+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lc $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pthread_create ();
-int
-main ()
-{
-return pthread_create ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_c_pthread_create=yes
-else
- ac_cv_lib_c_pthread_create=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_pthread_create" >&5
-$as_echo "$ac_cv_lib_c_pthread_create" >&6; }
-if test "x$ac_cv_lib_c_pthread_create" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBC 1
-_ACEOF
-
- LIBS="-lc $LIBS"
-
-else
- as_fn_error $? "\"could not find thread libraries\"" "$LINENO" 5
-fi
-
-fi
-
-fi
-
-fi
-
-fi
-
- ;;
-esac
-
-ac_config_files="$ac_config_files Makefile"
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems. If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
- for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
-
- (set) 2>&1 |
- case $as_nl`(ac_space=' '; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- # `set' does not quote correctly, so add quotes: double-quote
- # substitution turns \\\\ into \\, and sed turns \\ into \.
- sed -n \
- "s/'/'\\\\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
- ;; #(
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
- if test ! -f "$cache_file" || test -h "$cache_file"; then
- cat confcache >"$cache_file"
- else
- case $cache_file in #(
- */* | ?:*)
- mv -f confcache "$cache_file"$$ &&
- mv -f "$cache_file"$$ "$cache_file" ;; #(
- *)
- mv -f confcache "$cache_file" ;;
- esac
- fi
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
- fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# Transform confdefs.h into DEFS.
-# Protect against shell expansion while executing Makefile rules.
-# Protect against Makefile macro expansion.
-#
-# If the first sed substitution is executed (which looks for macros that
-# take arguments), then branch to the quote section. Otherwise,
-# look for a macro that doesn't take arguments.
-ac_script='
-:mline
-/\\$/{
- N
- s,\\\n,,
- b mline
-}
-t clear
-:clear
-s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-b any
-:quote
-s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
-s/\[/\\&/g
-s/\]/\\&/g
-s/\$/$$/g
-H
-:any
-${
- g
- s/^\n//
- s/\n/ /g
- p
-}
-'
-DEFS=`sed -n "$ac_script" confdefs.h`
-
-
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-
-SHELL=\${CONFIG_SHELL-$SHELL}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration. Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- --config print configuration, then exit
- -q, --quiet, --silent
- do not print progress messages
- -d, --debug don't remove temporary files
- --recheck update $as_me by reconfiguring in the same conditions
- --file=FILE[:TEMPLATE]
- instantiate the configuration file FILE
-
-Configuration files:
-$config_files
-
-Report bugs to the package provider."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-config.status
-configured by $0, generated by GNU Autoconf 2.69,
- with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
- case $1 in
- --*=?*)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
- ac_shift=:
- ;;
- --*=)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=
- ac_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
- --config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- '') as_fn_error $? "missing file argument" ;;
- esac
- as_fn_append CONFIG_FILES " '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h | --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
- *) as_fn_append ac_config_targets " $1"
- ac_need_defaults=false ;;
-
- esac
- shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
- exec 6>/dev/null
- ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
- set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
- shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
- CONFIG_SHELL='$SHELL'
- export CONFIG_SHELL
- exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
- $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-
- *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
- esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used. Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
- tmp= ac_tmp=
- trap 'exit_status=$?
- : "${ac_tmp:=$tmp}"
- { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
- trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
- eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
- ac_cs_awk_cr='\\r'
-else
- ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
- echo "cat >conf$$subs.awk <<_ACEOF" &&
- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
- echo "_ACEOF"
-} >conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- . ./conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
- ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
- if test $ac_delim_n = $ac_delim_num; then
- break
- elif $ac_last_try; then
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
- N
- s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
- for (key in S) S_is_set[key] = 1
- FS = ""
-
-}
-{
- line = $ 0
- nfields = split(line, field, "@")
- substed = 0
- len = length(field[1])
- for (i = 2; i < nfields; i++) {
- key = field[i]
- keylen = length(key)
- if (S_is_set[key]) {
- value = S[key]
- line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
- len += length(value) + length(field[++i])
- substed = 1
- } else
- len += 1 + keylen
- }
-
- print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
- sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
- cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
- || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
-h
-s///
-s/^/:/
-s/[ ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[ ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[ ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-
-eval set X " :F $CONFIG_FILES "
-shift
-for ac_tag
-do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
- :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
- esac
- ac_save_IFS=$IFS
- IFS=:
- set x $ac_tag
- IFS=$ac_save_IFS
- shift
- ac_file=$1
- shift
-
- case $ac_mode in
- :L) ac_source=$1;;
- :[FH])
- ac_file_inputs=
- for ac_f
- do
- case $ac_f in
- -) ac_f="$ac_tmp/stdin";;
- *) # Look for the file first in the build tree, then in the source tree
- # (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
- test -f "$ac_f" ||
- case $ac_f in
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
- as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
- esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
- as_fn_append ac_file_inputs " '$ac_f'"
- done
-
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
- `' by configure.'
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
- fi
- # Neutralize special characters interpreted by sed in replacement strings.
- case $configure_input in #(
- *\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
- sed 's/[\\\\&|]/\\\\&/g'`;; #(
- *) ac_sed_conf_input=$configure_input;;
- esac
-
- case $ac_tag in
- *:-:* | *:-) cat >"$ac_tmp/stdin" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
- esac
- ;;
- esac
-
- ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- as_dir="$ac_dir"; as_fn_mkdir_p
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
- p
- q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
- s&@infodir@&$infodir&g
- s&@localedir@&$localedir&g
- s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
- >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
- "$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&2;}
-
- rm -f "$ac_tmp/stdin"
- case $ac_file in
- -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
- *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
- esac \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
-
-
-
- esac
-
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
- as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded. So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status. When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
- ac_cs_success=:
- ac_config_status_args=
- test "$silent" = yes &&
- ac_config_status_args="$ac_config_status_args --quiet"
- exec 5>/dev/null
- $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
- exec 5>>config.log
- # Use ||, not &&, to avoid exiting from the if with $? = 1, which
- # would make configure fail if this is the last instruction.
- $ac_cs_success || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
diff --git a/contrib/perftcpdns/configure.in b/contrib/perftcpdns/configure.in
deleted file mode 100644
index 492deaf4..00000000
--- a/contrib/perftcpdns/configure.in
+++ /dev/null
@@ -1,62 +0,0 @@
-# Copyright (C) 2014, 2016 Internet Systems Consortium, Inc. ("ISC")
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-AC_INIT(perftcpdns.c)
-
-AC_PREREQ(2.13)
-
-AC_PROG_CC
-
-AC_CHECK_LIB(m, sqrt)
-AC_CHECK_LIB(rt, clock_gettime)
-
-AC_MSG_CHECKING(epoll support)
-AC_TRY_RUN([
-#include <sys/epoll.h>
-int main() {
- if (epoll_create(1) < 0)
- return (1);
- return (0);
-}
-], [AC_MSG_RESULT(yes)], [AC_MSG_ERROR(epoll not found)])
-
-case "$host" in
- *-freebsd*)
- # We don't want to set -lpthread as that break
- # the ability to choose threads library at final
- # link time and is not valid for all architectures.
-
- PTHREAD=
- if test "X$GCC" = "Xyes"; then
- saved_cc="$CC"
- CC="$CC -pthread"
- AC_MSG_CHECKING(for gcc -pthread support);
- AC_TRY_LINK([#include <pthread.h>],
- [printf("%x\n", pthread_create);],
- PTHREAD="yes"
- AC_MSG_RESULT(yes),
- AC_MSG_RESULT(no))
- CC="$saved_cc"
- fi
- if test "X$PTHREAD" != "Xyes"; then
- AC_CHECK_LIB(pthread, pthread_create,,
- AC_CHECK_LIB(thr, thread_create,,
- AC_CHECK_LIB(c_r, pthread_create,,
- AC_CHECK_LIB(c, pthread_create,,
- AC_MSG_ERROR("could not find thread libraries")))))
- fi
- ;;
- *)
- AC_CHECK_LIB(pthread, pthread_create,,
- AC_CHECK_LIB(pthread, __pthread_create,,
- AC_CHECK_LIB(pthread, __pthread_create_system,,
- AC_CHECK_LIB(c_r, pthread_create,,
- AC_CHECK_LIB(c, pthread_create,,
- AC_MSG_ERROR("could not find thread libraries"))))))
- ;;
-esac
-
-AC_OUTPUT(Makefile)
diff --git a/contrib/perftcpdns/perftcpdns.c b/contrib/perftcpdns/perftcpdns.c
deleted file mode 100644
index c7aaf231..00000000
--- a/contrib/perftcpdns/perftcpdns.c
+++ /dev/null
@@ -1,2469 +0,0 @@
-/*
- * Copyright (C) 2013, 2014, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-/*
- * TCP DNS perf tool
- *
- * main parameters are -r<rate> and <server>
- * standard options are 4|6 (IPv4|IPv6), rate computations, terminaisons,
- * EDNS0, NOERROR|NXDOMAIN, template (for your own query), diags,
- * alternate server port and UDP version.
- *
- * To help to crush kernels (unfortunately both client and server :-)
- * this version of the tool is multi-threaded:
- * - the master thread inits, monitors the activity each millisecond,
- * and report results when finished
- * - the connecting thread computes the date of the next connection,
- * creates a socket, makes it non blocking, binds it if wanted,
- * connects it and pushes it on the output epoll queue
- * - the sending thread gets by epoll connected sockets, timeouts
- * embryonic connections, sends queries and pushes sockets on
- * the input epoll queue
- * - the receiving thread gets by epoll sockets with a pending
- * response, receives responses, timeouts unanswered queries,
- * and recycles (by closing them) all sockets.
- *
- * Rate computation details:
- * - the target rate is in query+response per second.
- * - rating is done by the connecting thread.
- * - of course the tool is always late so the target rate is never
- * reached. BTW there is no attempt to internally adjust the
- * effective rate to the target one: this must be by tuning
- * the rate related parameters, first the -r<rate> itself.
- * - at the beginning of the connecting thread iteration loop
- * (second "loops" counter) the date of the due (aka next) connect()
- * call is computed from the last one with 101% of the rate.
- * - the due date is compared with the current date (aka now).
- * - if the due is before, lateconn counter is incremented, else
- * the thread sleeps for the difference,
- * - the next step is to reget the current date, if it is still
- * before the due date (e.g., because the sleep was interrupted)
- * the first shortwait counter is incremented.
- * - if it is after (common case) the number of connect calls is
- * computed from the difference between now and due divided by rate,
- * rounded to the next number,
- * - this number of connect() calls is bounded by the -a<aggressiveness>
- * parameter to avoid too many back to back new connection attempts.
- * - the compconn counter is incremented, errors (other than EINPROGRESS
- * from not blocking connect()) are printed. When an error is
- * related to a local limit (e.g., EMFILE, EADDRNOTAVAIL or the
- * internal ENOMEM) the locallimit counter is incremented.
- */
-
-#ifdef __linux__
-#define _GNU_SOURCE
-#endif
-
-#include <sys/types.h>
-#include <sys/epoll.h>
-#include <sys/prctl.h>
-#include <sys/select.h>
-#include <sys/socket.h>
-#include <sys/wait.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <math.h>
-#include <netdb.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-
-/* DNS defines */
-
-#define NS_TYPE_A 1
-#define NS_TYPE_NS 2
-#define NS_TYPE_CNAME 5
-#define NS_TYPE_SOA 6
-#define NS_TYPE_NULL 10
-#define NS_TYPE_PTR 12
-#define NS_TYPE_MX 15
-#define NS_TYPE_TXT 16
-#define NS_TYPE_AAAA 28
-#define NS_TYPE_OPT 41
-#define NS_TYPE_DS 43
-#define NS_TYPE_RRSIG 46
-#define NS_TYPE_NSEC 47
-#define NS_TYPE_DNSKEY 48
-#define NS_TYPE_NSEC3 50
-#define NS_TYPE_NSEC3PARAM 51
-#define NS_TYPE_TSIG 250
-#define NS_TYPE_IXFR 251
-#define NS_TYPE_AXFR 252
-#define NS_TYPE_ANY 255
-
-#define NS_CLASS_IN 1
-#define NS_CLASS_ANY 255
-
-#define NS_OFF_ID 0
-#define NS_OFF_FLAGS 2
-#define NS_OFF_QDCOUNT 4
-#define NS_OFF_ANCOUNT 6
-#define NS_OFF_NSCOUNT 8
-#define NS_OFF_ARCOUNT 10
-#define NS_OFF_QUESTION 12
-
-#define NS_FLAG_QR 0x8000U
-#define NS_FLAG_AA 0x0400U
-#define NS_FLAG_TC 0x0200U
-#define NS_FLAG_RD 0x0100U
-#define NS_FLAG_RA 0x0080U
-#define NS_FLAG_AD 0x0020U
-#define NS_FLAG_CD 0x0010U
-
-#define NS_XFLAG_DO 0x8000U
-
-#define NS_OPCODE_MASK 0x7000U
-#define NS_OPCODE_QUERY 0
-
-#define NS_RCODE_MASK 0x000fU
-#define NS_RCODE_NOERROR 0
-#define NS_RCODE_FORMERR 1
-#define NS_RCODE_SERVFAIL 2
-#define NS_RCODE_NXDOMAIN 3
-#define NS_RCODE_NOIMP 4
-#define NS_RCODE_REFUSED 5
-#define NS_RCODE_LAST 6
-
-/* chaining macros */
-
-#define ISC_INIT(head, headl) do { \
- (head) = -1; \
- (headl) = &(head); \
-} while (0)
-
-#define ISC_INSERT(head, headl, elm) do { \
- (elm)->next = -1; \
- (elm)->prev = (headl); \
- *(headl) = (elm) - xlist; \
- (headl) = &((elm)->next); \
-} while (0)
-
-#define ISC_REMOVE(headl, elm) do { \
- if ((elm)->next != -1) \
- xlist[(elm)->next].prev = (elm)->prev; \
- else \
- (headl) = (elm)->prev; \
- *(elm)->prev = (elm)->next; \
-} while (0)
-
-/*
- * Data structures
- */
-
-/*
- * exchange:
- * - per exchange values:
- * * order (for debugging)
- * * id
- * * random (for debugging)
- * * time-stamps
- *
- * sent/rcvd chain, "next to be received" on entry cache.
- */
-
-struct exchange { /* per exchange structure */
- int sock; /* socket descriptor */
- int next, *prev; /* chaining */
-#define X_FREE 0
-#define X_CONN 1
-#define X_READY 2
-#define X_SENT 3
- int state; /* state */
- uint16_t id; /* ID */
- uint64_t order; /* number of this exchange */
- struct timespec ts0, ts1, ts2, ts3; /* timespecs */
-};
-struct exchange *xlist; /* exchange list */
-int xlast; /* number of exchanges */
-int xconn, *xconnl; /* connecting list */
-int xready, *xreadyl; /* connected list */
-int xsent, *xsentl; /* sent list */
-int xfree, *xfreel; /* free list */
-int xused; /* next to be used list */
-pthread_mutex_t mtxconn, mtxsent, mtxfree; /* mutexes */
-uint64_t xccount; /* connected counters */
-uint64_t xscount; /* sent counters */
-uint64_t xrcount; /* received counters */
-
-/*
- * statictics counters and accumulators
- */
-
-uint64_t recverr, tooshort, locallimit; /* error counters */
-uint64_t loops[4], shortwait[3]; /* rate stats */
-uint64_t lateconn, compconn; /* rate stats (cont) */
-uint64_t badconn, collconn, badsent, collsent; /* rate stats (cont) */
-uint64_t badid, notresp; /* bad response counters */
-uint64_t rcodes[NS_RCODE_LAST + 1]; /* rcode counters */
-double dmin = 999999999.; /* minimum delay */
-double dmax = 0.; /* maximum delay */
-double dsum = 0.; /* delay sum */
-double dsumsq = 0.; /* square delay sum */
-
-/*
- * command line parameters
- */
-
-int edns0; /* EDNS0 DO flag */
-int ipversion = 0; /* IP version */
-int rate; /* rate in connections per second */
-int noreport; /* disable auto reporting */
-int report; /* delay between two reports */
-uint32_t range; /* randomization range */
-uint32_t maxrandom; /* maximum random value */
-int basecnt; /* base count */
-char *base[2]; /* bases */
-int gotnumreq = -1; /* numreq[0] was set */
-int numreq[2]; /* number of exchanges */
-int period; /* test period */
-int gotlosttime = -1; /* losttime[0] was set */
-double losttime[2] = {.5, 1.}; /* delay for a timeout */
-int gotmaxloss = -1; /* max{p}loss[0] was set */
-int maxloss[2]; /* maximum number of losses */
-double maxploss[2] = {0., 0.}; /* maximum percentage */
-char *localname; /* local address or interface */
-int aggressiveness = 1; /* back to back connections */
-int seeded; /* is a seed provided */
-unsigned int seed; /* randomization seed */
-char *templatefile; /* template file name */
-int rndoffset = -1; /* template offset (random) */
-char *diags; /* diagnostic selectors */
-char *servername; /* server */
-int ixann; /* ixann NXDOMAIN */
-int udp; /* use UDP in place of TCP */
-int minport, maxport, curport; /* port range */
-
-/*
- * global variables
- */
-
-struct sockaddr_storage localaddr; /* local socket address */
-struct sockaddr_storage serveraddr; /* server socket address */
-in_port_t port = 53; /* server socket port */
-
-int epoll_ifd, epoll_ofd; /* epoll file descriptors */
-#ifndef EVENTS_CNT
-#define EVENTS_CNT 16
-#endif
-struct epoll_event ievents[EVENTS_CNT]; /* polled input events */
-struct epoll_event oevents[EVENTS_CNT]; /* polled output events */
-int interrupted, fatal; /* to finish flags */
-
-uint8_t obuf[4098], ibuf[4098]; /* I/O buffers */
-char tbuf[4098]; /* template buffer */
-
-struct timespec boot; /* the date of boot */
-struct timespec last; /* the date of last connect */
-struct timespec due; /* the date of next connect */
-struct timespec dreport; /* the date of next reporting */
-struct timespec finished; /* the date of finish */
-
-/*
- * template
- */
-
-size_t length_query;
-uint8_t template_query[4096];
-size_t random_query;
-
-/*
- * threads
- */
-
-pthread_t master, connector, sender, receiver;
-
-/*
- * initialize data structures handling exchanges
- */
-
-void
-inits(void)
-{
- int idx;
-
- ISC_INIT(xconn, xconnl);
- ISC_INIT(xready, xreadyl);
- ISC_INIT(xsent, xsentl);
- ISC_INIT(xfree, xfreel);
-
- if ((pthread_mutex_init(&mtxconn, NULL) != 0) ||
- (pthread_mutex_init(&mtxsent, NULL) != 0) ||
- (pthread_mutex_init(&mtxfree, NULL) != 0)) {
- fprintf(stderr, "pthread_mutex_init failed\n");
- exit(1);
- }
-
- epoll_ifd = epoll_create(EVENTS_CNT);
- if (epoll_ifd < 0) {
- perror("epoll_create(input)");
- exit(1);
- }
- epoll_ofd = epoll_create(EVENTS_CNT);
- if (epoll_ofd < 0) {
- perror("epoll_create(output)");
- exit(1);
- }
-
- xlist = (struct exchange *) malloc(xlast * sizeof(struct exchange));
- if (xlist == NULL) {
- perror("malloc(exchanges)");
- exit(1);
- }
- memset(xlist, 0, xlast * sizeof(struct exchange));
-
- for (idx = 0; idx < xlast; idx++)
- xlist[idx].sock = xlist[idx].next = -1;
-}
-
-/*
- * build a TCP DNS QUERY
- */
-
-void
-build_template_query(void)
-{
- uint8_t *p = template_query;
- uint16_t v;
-
- /* flags */
- p += NS_OFF_FLAGS;
- v = NS_FLAG_RD;
- *p++ = v >> 8;
- *p++ = v & 0xff;
- /* qdcount */
- v = 1;
- *p++ = v >> 8;
- *p++ = v & 0xff;
- /* ancount */
- v = 0;
- *p++ = v >> 8;
- *p++ = v & 0xff;
- /* nscount */
- v = 0;
- *p++ = v >> 8;
- *p++ = v & 0xff;
- /* arcount */
- v = edns0;
- *p++ = v >> 8;
- *p++ = v & 0xff;
- /* icann.link (or ixann.link) */
- *p++ = 5;
- *p++ = 'i';
- if (ixann == 0)
- *p++ = 'c';
- else
- *p++ = 'x';
- *p++ = 'a';
- *p++ = 'n';
- *p++ = 'n';
- *p++ = 4;
- *p++ = 'l';
- *p++ = 'i';
- *p++ = 'n';
- *p++ = 'k';
- *p++ = 0;
- /* type A/AAAA */
- if (ipversion == 4)
- v = NS_TYPE_A;
- else
- v = NS_TYPE_AAAA;
- *p++ = v >> 8;
- *p++ = v & 0xff;
- /* class IN */
- v = NS_CLASS_IN;
- *p++ = v >> 8;
- *p++ = v & 0xff;
- /* EDNS0 OPT with DO */
- if (edns0) {
- /* root name */
- *p++ = 0;
- /* type OPT */
- v = NS_TYPE_OPT;
- *p++ = v >> 8;
- *p++ = v & 0xff;
- /* class UDP length */
- v = 4096;
- *p++ = v >> 8;
- *p++ = v & 0xff;
- /* extended rcode 0 */
- *p++ = 0;
- /* version 0 */
- *p++ = 0;
- /* extended flags DO */
- v = NS_XFLAG_DO;
- *p++ = v >> 8;
- *p++ = v & 0xff;
- /* rdlength */
- v = 0;
- *p++ = v >> 8;
- *p++ = v & 0xff;
- }
- /* length */
- length_query = p - template_query;
-}
-
-/*
- * get a TCP DNS client QUERY template
- * from the file given in the command line (-T<template-file>)
- * and rnd offset (-O<random-offset>)
- */
-
-void
-get_template_query(void)
-{
- uint8_t *p = template_query;
- int fd, cc, i, j;
-
- fd = open(templatefile, O_RDONLY);
- if (fd < 0) {
- fprintf(stderr, "open(%s): %s\n",
- templatefile, strerror(errno));
- exit(2);
- }
- cc = read(fd, tbuf, sizeof(tbuf));
- (void) close(fd);
- if (cc < 0) {
- fprintf(stderr, "read(%s): %s\n",
- templatefile, strerror(errno));
- exit(1);
- }
- if (cc < NS_OFF_QUESTION + 6) {
- fprintf(stderr,"file '%s' too small\n", templatefile);
- exit(2);
- }
- if (cc > 4096) {
- fprintf(stderr,"file '%s' too large\n", templatefile);
- exit(2);
- }
- j = 0;
- for (i = 0; i < cc; i++) {
- if (isspace((int) tbuf[i]))
- continue;
- if (!isxdigit((int) tbuf[i])) {
- fprintf(stderr,
- "illegal char[%d]='%c' in file '%s'\n",
- i, (int) tbuf[i], templatefile);
- exit(2);
- }
- tbuf[j] = tbuf[i];
- j++;
- }
- cc = j;
- if ((cc & 1) != 0) {
- fprintf(stderr,
- "odd number of hexadecimal digits in file '%s'\n",
- templatefile);
- exit(2);
- }
- length_query = cc >> 1;
- for (i = 0; i < cc; i += 2)
- (void) sscanf(tbuf + i, "%02hhx", &p[i >> 1]);
- if (rndoffset >= 0)
- random_query = (size_t) rndoffset;
- if (random_query > length_query) {
- fprintf(stderr,
- "random (at %zu) outside the template (length %zu)?\n",
- random_query, length_query);
- exit(2);
- }
-}
-
-#if 0
-/*
- * randomize the value of the given field:
- * - offset of the field
- * - random seed (used as it when suitable)
- * - returns the random value which was used
- */
-
-uint32_t
-randomize(size_t offset, uint32_t r)
-{
- uint32_t v;
-
- if (range == 0)
- return 0;
- if (range == UINT32_MAX)
- return r;
- if (maxrandom != 0)
- while (r >= maxrandom)
- r = (uint32_t) random();
- r %= range + 1;
- v = r;
- v += obuf[offset];
- obuf[offset] = v;
- if (v < 256)
- return r;
- v >>= 8;
- v += obuf[offset - 1];
- obuf[offset - 1] = v;
- if (v < 256)
- return r;
- v >>= 8;
- v += obuf[offset - 2];
- obuf[offset - 2] = v;
- if (v < 256)
- return r;
- v >>= 8;
- v += obuf[offset - 3];
- obuf[offset - 3] = v;
- return r;
-}
-#endif
-
-/*
- * flush/timeout connect
- */
-
-void
-flushconnect(void)
-{
- struct exchange *x;
- struct timespec now;
- int idx = xconn;
- int cnt = 10;
- double waited;
-
- if (clock_gettime(CLOCK_REALTIME, &now) < 0) {
- perror("clock_gettime(flushconnect)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
-
- while (--cnt >= 0) {
- if (idx < 0)
- return;
- x = xlist + idx;
- idx = x->next;
- if (x->state != X_CONN)
- abort();
- /* check for a timed-out connection */
- waited = now.tv_sec - x->ts0.tv_sec;
- waited += (now.tv_nsec - x->ts0.tv_nsec) / 1e9;
- if (waited < losttime[0])
- return;
- /* garbage collect timed-out connections */
- if (pthread_mutex_lock(&mtxconn) != 0) {
- fprintf(stderr, "pthread_mutex_lock(flushconnect)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
- ISC_REMOVE(xconnl, x);
- if (pthread_mutex_unlock(&mtxconn) != 0) {
- fprintf(stderr, "pthread_mutex_unlock(flushconnect)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
- (void) close(x->sock);
- x->sock = -1;
- collconn++;
- if (pthread_mutex_lock(&mtxfree) != 0) {
- fprintf(stderr, "pthread_mutex_lock(flushconnect)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
- x->state = X_FREE;
- ISC_INSERT(xfree, xfreel, x);
- if (pthread_mutex_unlock(&mtxfree) != 0) {
- fprintf(stderr, "pthread_mutex_unlock(flushconnect)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
- }
-}
-
-/*
- * poll connected
- */
-
-void
-pollconnect(int topoll)
-{
- struct exchange *x;
- int evn, idx, err;
- socklen_t len = sizeof(int);
-
- for (evn = 0; evn < topoll; evn++) {
- idx = oevents[evn].data.fd;
- x = xlist + idx;
- if (x->state != X_CONN)
- continue;
- if (oevents[evn].events == 0)
- continue;
- if (pthread_mutex_lock(&mtxconn) != 0) {
- fprintf(stderr, "pthread_mutex_lock(pollconnect)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
- ISC_REMOVE(xconnl, x);
- if (pthread_mutex_unlock(&mtxconn) != 0) {
- fprintf(stderr, "pthread_mutex_unlock(pollconnect)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
- oevents[evn].events = 0;
- if ((getsockopt(x->sock, SOL_SOCKET, SO_ERROR,
- &err, &len) < 0) ||
- (err != 0)) {
- (void) close(x->sock);
- x->sock = -1;
- badconn++;
- if (pthread_mutex_lock(&mtxfree) != 0) {
- fprintf(stderr,
- "pthread_mutex_lock(pollconnect)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
- x->state = X_FREE;
- ISC_INSERT(xfree, xfreel, x);
- if (pthread_mutex_unlock(&mtxfree) != 0) {
- fprintf(stderr,
- "pthread_mutex_unlock(pollconnect)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
- continue;
- }
- x->state = X_READY;
- ISC_INSERT(xready, xreadyl, x);
- }
-}
-
-/*
- * send the TCP DNS QUERY
- */
-
-int
-sendquery(struct exchange *x)
-{
- ssize_t ret;
- size_t off;
-
- if (udp)
- off = 0;
- else {
- off = 2;
- /* message length */
- obuf[0] = length_query >> 8;
- obuf[1]= length_query & 0xff;
- }
- /* message from template */
- memcpy(obuf + off, template_query, length_query);
- /* ID */
- memcpy(obuf + off + NS_OFF_ID, &x->id, 2);
-#if 0
- /* random */
- if (random_query > 0)
- x->rnd = randomize(random_query + off, x->rnd);
-#endif
- /* timestamp */
- errno = 0;
- ret = clock_gettime(CLOCK_REALTIME, &x->ts2);
- if (ret < 0) {
- perror("clock_gettime(send)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return -errno;
- }
- ret = send(x->sock, obuf, length_query + off, 0);
- if ((size_t) ret == length_query + off)
- return 0;
- return -errno;
-}
-
-/*
- * poll ready and send
- */
-
-void
-pollsend(void)
-{
- struct exchange *x;
- int idx = xready;
- struct epoll_event ev;
-
- memset(&ev, 0, sizeof(ev));
- ev.events = EPOLLIN | EPOLLET | EPOLLONESHOT;
- for (;;) {
- if (idx < 0)
- return;
- x = xlist + idx;
- ev.data.fd = idx;
- idx = x->next;
- ISC_REMOVE(xreadyl, x);
- if (sendquery(x) < 0) {
- (void) close(x->sock);
- x->sock = -1;
- badsent++;
- if (pthread_mutex_lock(&mtxfree) != 0) {
- fprintf(stderr,
- "pthread_mutex_lock(pollsend)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
- x->state = X_FREE;
- ISC_INSERT(xfree, xfreel, x);
- if (pthread_mutex_unlock(&mtxfree) != 0) {
- fprintf(stderr,
- "pthread_mutex_unlock(pollsend)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
- continue;
- }
- xscount++;
- if (pthread_mutex_lock(&mtxsent) != 0) {
- fprintf(stderr, "pthread_mutex_lock(pollsend)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
- x->state = X_SENT;
- ISC_INSERT(xsent, xsentl, x);
- if (pthread_mutex_unlock(&mtxsent) != 0) {
- fprintf(stderr, "pthread_mutex_unlock(pollsend)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
- if (epoll_ctl(epoll_ifd, EPOLL_CTL_ADD, x->sock, &ev) < 0) {
- perror("epoll_ctl(add input)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
- }
-}
-
-/*
- * receive a TCP DNS RESPONSE
- */
-
-void
-receiveresp(struct exchange *x)
-{
- struct timespec now;
- ssize_t cc;
- size_t off;
- uint16_t v;
- double delta;
-
- cc = recv(x->sock, ibuf, sizeof(ibuf), 0);
- if (cc < 0) {
- if ((errno == EAGAIN) ||
- (errno == EWOULDBLOCK) ||
- (errno == EINTR) ||
- (errno == ECONNRESET)) {
- recverr++;
- return;
- }
- perror("recv");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
- if (udp)
- off = 0;
- else
- off = 2;
- /* enforce a reasonable length */
- if ((size_t) cc < length_query + off) {
- tooshort++;
- return;
- }
- /* must match the ID */
- if (memcmp(ibuf + off + NS_OFF_ID, &x->id, 2) != 0) {
- badid++;
- return;
- }
- /* must be a response */
- memcpy(&v, ibuf + off + NS_OFF_FLAGS, 2);
- v = ntohs(v);
- if ((v & NS_FLAG_QR) == 0) {
- notresp++;
- return;
- }
- if (clock_gettime(CLOCK_REALTIME, &now) < 0) {
- perror("clock_gettime(receive)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
- /* got it: update stats */
- xrcount++;
- x->ts3 = now;
- delta = x->ts3.tv_sec - x->ts2.tv_sec;
- delta += (x->ts3.tv_nsec - x->ts2.tv_nsec) / 1e9;
- if (delta < dmin)
- dmin = delta;
- if (delta > dmax)
- dmax = delta;
- dsum += delta;
- dsumsq += delta * delta;
- v &= NS_RCODE_MASK;
- if (v >= NS_RCODE_LAST)
- v = NS_RCODE_LAST;
- rcodes[v] += 1;
-}
-
-/*
- * flush/timeout receive
- */
-
-void
-flushrecv(void)
-{
- struct exchange *x;
- struct timespec now;
- int idx = xsent;
- int cnt = 5;
- double waited;
-
- if (clock_gettime(CLOCK_REALTIME, &now) < 0) {
- perror("clock_gettime(receive)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
-
- while (--cnt >= 0) {
- if (idx < 0)
- return;
- x = xlist + idx;
- idx = x->next;
- if (x->state != X_SENT)
- abort();
- /* check for a timed-out exchange */
- waited = now.tv_sec - x->ts2.tv_sec;
- waited += (now.tv_nsec - x->ts2.tv_nsec) / 1e9;
- if (waited < losttime[1])
- return;
- /* garbage collect timed-out exchange */
- if (pthread_mutex_lock(&mtxsent) != 0) {
- fprintf(stderr, "pthread_mutex_lock(flushrecv)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
- ISC_REMOVE(xsentl, x);
- if (pthread_mutex_unlock(&mtxsent) != 0) {
- fprintf(stderr, "pthread_mutex_unlock(flushrecv)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
- (void) close(x->sock);
- x->sock = -1;
- collsent++;
- if (pthread_mutex_lock(&mtxfree) != 0) {
- fprintf(stderr, "pthread_mutex_lock(flushrecv)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
- x->state = X_FREE;
- ISC_INSERT(xfree, xfreel, x);
- if (pthread_mutex_unlock(&mtxfree) != 0) {
- fprintf(stderr, "pthread_mutex_unlock(flushrecv)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
- }
-}
-
-/*
- * poll receive
- */
-
-void
-pollrecv(int topoll)
-{
- struct exchange *x;
- int evn, idx;
-
- for (evn = 0; evn < topoll; evn++) {
- idx = ievents[evn].data.fd;
- x = xlist + idx;
- if (x->state != X_SENT)
- continue;
- if (ievents[evn].events == 0)
- continue;
- if (pthread_mutex_lock(&mtxsent) != 0) {
- fprintf(stderr, "pthread_mutex_lock(pollrecv)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
- ISC_REMOVE(xsentl, x);
- if (pthread_mutex_unlock(&mtxsent) != 0) {
- fprintf(stderr, "pthread_mutex_unlock(pollrecv)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
- receiveresp(x);
- ievents[evn].events = 0;
- (void) close(x->sock);
- x->sock = -1;
- if (pthread_mutex_lock(&mtxfree) != 0) {
- fprintf(stderr, "pthread_mutex_lock(pollrecv)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
- x->state = X_FREE;
- ISC_INSERT(xfree, xfreel, x);
- if (pthread_mutex_unlock(&mtxfree) != 0) {
- fprintf(stderr, "pthread_mutex_unlock(pollrecv)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return;
- }
- }
-}
-
-/*
- * get the TCP DNS socket descriptor (IPv4)
- */
-
-int
-getsock4(void)
-{
- int sock;
- int flags;
-
- errno = 0;
- if (udp)
- sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
- else
- sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
- if (sock < 0)
- return -errno;
-
- /* make the socket descriptor not blocking */
- flags = fcntl(sock, F_GETFL, 0);
- if (flags == -1) {
- (void) close(sock);
- return -errno;
- }
- if (fcntl(sock, F_SETFL, flags | O_NONBLOCK) == -1) {
- (void) close(sock);
- return -errno;
- }
-
- /* bind if wanted */
- if (localname != NULL) {
- if (curport) {
- struct sockaddr_in *l4;
-
- l4 = (struct sockaddr_in *) &localaddr;
- l4->sin_port = htons((uint16_t) curport);
- curport++;
- if (curport > maxport)
- curport = minport;
- }
- if (bind(sock,
- (struct sockaddr *) &localaddr,
- sizeof(struct sockaddr_in)) < 0) {
- (void) close(sock);
- return -errno;
- }
- }
-
- /* connect */
- if (connect(sock,
- (struct sockaddr *) &serveraddr,
- sizeof(struct sockaddr_in)) < 0) {
- if (errno != EINPROGRESS) {
- (void) close(sock);
- return -errno;
- }
- }
- return sock;
-}
-
-/*
- * connect the TCP DNS QUERY (IPv4)
- */
-
-int
-connect4(void)
-{
- struct exchange *x;
- int ret;
- int idx;
- struct epoll_event ev;
-
- ret = clock_gettime(CLOCK_REALTIME, &last);
- if (ret < 0) {
- perror("clock_gettime(connect)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return -errno;
- }
-
- if (xfree >= 0) {
- idx = xfree;
- x = xlist + idx;
- ret = pthread_mutex_lock(&mtxfree);
- if (ret != 0) {
- fprintf(stderr, "pthread_mutex_lock(connect4)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return -ret;
- }
- ISC_REMOVE(xfreel, x);
- ret = pthread_mutex_unlock(&mtxfree);
- if (ret != 0) {
- fprintf(stderr, "pthread_mutex_unlock(connect4)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return -ret;
- }
- } else if (xused < xlast) {
- idx = xused;
- x = xlist + idx;
- xused++;
- } else
- return -ENOMEM;
-
- if ((x->state != X_FREE) || (x->sock != -1))
- abort();
-
- memset(x, 0, sizeof(*x));
- memset(&ev, 0, sizeof(ev));
- x->next = -1;
- x->prev = NULL;
- x->ts0 = last;
- x->sock = getsock4();
- if (x->sock < 0) {
- int result = x->sock;
-
- x->sock = -1;
- ret = pthread_mutex_lock(&mtxfree);
- if (ret != 0) {
- fprintf(stderr, "pthread_mutex_lock(connect4)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return -ret;
- }
- ISC_INSERT(xfree, xfreel, x);
- ret = pthread_mutex_unlock(&mtxfree);
- if (ret != 0) {
- fprintf(stderr, "pthread_mutex_unlock(connect4)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return -ret;
- }
- return result;
- }
- ret = pthread_mutex_lock(&mtxconn);
- if (ret != 0) {
- fprintf(stderr, "pthread_mutex_lock(connect4)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return -ret;
- }
- x->state = X_CONN;
- ISC_INSERT(xconn, xconnl, x);
- ret = pthread_mutex_unlock(&mtxconn);
- if (ret != 0) {
- fprintf(stderr, "pthread_mutex_unlock(connect4)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return -ret;
- }
- ev.events = EPOLLOUT | EPOLLET | EPOLLONESHOT;
- ev.data.fd = idx;
- if (epoll_ctl(epoll_ofd, EPOLL_CTL_ADD, x->sock, &ev) < 0) {
- perror("epoll_ctl(add output)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return -errno;
- }
- x->order = xccount++;
- x->id = (uint16_t) random();
-#if 0
- if (random_query > 0)
- x->rnd = (uint32_t) random();
-#endif
- return idx;
-}
-
-/*
- * get the TCP DNS socket descriptor (IPv6)
- */
-
-int
-getsock6(void)
-{
- int sock;
- int flags;
-
- errno = 0;
- if (udp)
- sock = socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP);
- else
- sock = socket(PF_INET6, SOCK_STREAM, IPPROTO_TCP);
- if (sock < 0)
- return -errno;
-
- /* make the socket descriptor not blocking */
- flags = fcntl(sock, F_GETFL, 0);
- if (flags == -1) {
- (void) close(sock);
- return -errno;
- }
- if (fcntl(sock, F_SETFL, flags | O_NONBLOCK) == -1) {
- (void) close(sock);
- return -errno;
- }
-
- /* bind if wanted */
- if (localname != NULL) {
- if (curport) {
- struct sockaddr_in6 *l6;
-
- l6 = (struct sockaddr_in6 *) &localaddr;
- l6->sin6_port = htons((uint16_t) curport);
- curport++;
- if (curport > maxport)
- curport = minport;
- }
- if (bind(sock,
- (struct sockaddr *) &localaddr,
- sizeof(struct sockaddr_in6)) < 0) {
- (void) close(sock);
- return -errno;
- }
- }
-
- /* connect */
- if (connect(sock,
- (struct sockaddr *) &serveraddr,
- sizeof(struct sockaddr_in6)) < 0) {
- if (errno != EINPROGRESS) {
- (void) close(sock);
- return -errno;
- }
- }
- return sock;
-}
-
-/*
- * connect the TCP DNS QUERY (IPv6)
- */
-
-int
-connect6(void)
-{
- struct exchange *x;
- int ret;
- int idx;
- struct epoll_event ev;
-
- ret = clock_gettime(CLOCK_REALTIME, &last);
- if (ret < 0) {
- perror("clock_gettime(connect)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return -errno;
- }
-
- if (xfree >= 0) {
- idx = xfree;
- x = xlist + idx;
- ret = pthread_mutex_lock(&mtxfree);
- if (ret != 0) {
- fprintf(stderr, "pthread_mutex_lock(connect6)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return -ret;
- }
- ISC_REMOVE(xfreel, x);
- ret = pthread_mutex_unlock(&mtxfree);
- if (ret != 0) {
- fprintf(stderr, "pthread_mutex_unlock(connect6)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return -ret;
- }
- } else if (xused < xlast) {
- idx = xused;
- x = xlist + idx;
- xused++;
- } else
- return -ENOMEM;
-
- memset(x, 0, sizeof(*x));
- memset(&ev, 0, sizeof(ev));
- x->next = -1;
- x->prev = NULL;
- x->ts0 = last;
- x->sock = getsock6();
- if (x->sock < 0) {
- int result = x->sock;
-
- x->sock = -1;
- ret = pthread_mutex_lock(&mtxfree);
- if (ret != 0) {
- fprintf(stderr, "pthread_mutex_lock(connect6)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return -ret;
- }
- ISC_INSERT(xfree, xfreel, x);
- ret = pthread_mutex_unlock(&mtxfree);
- if (ret != 0) {
- fprintf(stderr, "pthread_mutex_unlock(connect6)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return -ret;
- }
- return result;
- }
- ret = pthread_mutex_lock(&mtxconn);
- if (ret != 0) {
- fprintf(stderr, "pthread_mutex_lock(connect6)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return -ret;
- }
- x->state = X_CONN;
- ISC_INSERT(xconn, xconnl, x);
- ret = pthread_mutex_unlock(&mtxconn);
- if (ret != 0) {
- fprintf(stderr, "pthread_mutex_unlock(connect6)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return -ret;
- }
- ev.events = EPOLLOUT | EPOLLET | EPOLLONESHOT;
- ev.data.fd = idx;
- if (epoll_ctl(epoll_ofd, EPOLL_CTL_ADD, x->sock, &ev) < 0) {
- perror("epoll_ctl(add output)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- return -errno;
- }
- x->order = xccount++;
- x->id = (uint16_t) random();
-#if 0
- if (random_query > 0)
- x->rnd = (uint32_t) random();
-#endif
- return idx;
-}
-
-/*
- * connector working routine
- */
-
-void *
-connecting(void *dummy)
-{
- struct timespec now, ts;
- int ret;
- int i;
- char name[16];
-
- dummy = dummy;
-
- /* set conn-name */
- memset(name, 0, sizeof(name));
- ret = prctl(PR_GET_NAME, name, 0, 0, 0);
- if (ret < 0)
- perror("prctl(PR_GET_NAME)");
- else {
- memmove(name + 5, name, 11);
- memcpy(name, "conn-", 5);
- ret = prctl(PR_SET_NAME, name, 0, 0, 0);
- if (ret < 0)
- perror("prctl(PR_SET_NAME");
- }
-
- for (;;) {
- if (fatal)
- break;
-
- loops[1]++;
-
- /* compute the delay for the next connection */
- if (clock_gettime(CLOCK_REALTIME, &now) < 0) {
- perror("clock_gettime(connecting)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- break;
- }
-
- due = last;
- if (rate == 1)
- due.tv_sec += 1;
- else
- due.tv_nsec += 1010000000 / rate;
- while (due.tv_nsec >= 1000000000) {
- due.tv_sec += 1;
- due.tv_nsec -= 1000000000;
- }
- ts = due;
- ts.tv_sec -= now.tv_sec;
- ts.tv_nsec -= now.tv_nsec;
- while (ts.tv_nsec < 0) {
- ts.tv_sec -= 1;
- ts.tv_nsec += 1000000000;
- }
- /* the connection was already due? */
- if (ts.tv_sec < 0) {
- ts.tv_sec = ts.tv_nsec = 0;
- lateconn++;
- } else {
- /* wait until */
- ret = clock_nanosleep(CLOCK_REALTIME, 0, &ts, NULL);
- if (ret != 0) {
- if (ret == EINTR)
- continue;
- fprintf(stderr, "clock_nanosleep: %s\n",
- strerror(ret));
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- break;
- }
- }
-
- /* compute how many connections to open */
- if (clock_gettime(CLOCK_REALTIME, &now) < 0) {
- perror("clock_gettime(connecting)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- break;
- }
-
- if ((now.tv_sec > due.tv_sec) ||
- ((now.tv_sec == due.tv_sec) &&
- (now.tv_nsec >= due.tv_nsec))) {
- double toconnect;
-
- toconnect = (now.tv_nsec - due.tv_nsec) / 1e9;
- toconnect += now.tv_sec - due.tv_sec;
- toconnect *= rate;
- toconnect++;
- if (toconnect > (double) aggressiveness)
- i = aggressiveness;
- else
- i = (int) toconnect;
- compconn += i;
- /* open connections */
- while (i-- > 0) {
- if (ipversion == 4)
- ret = connect4();
- else
- ret = connect6();
- if (ret < 0) {
- if ((ret == -EAGAIN) ||
- (ret == -EWOULDBLOCK) ||
- (ret == -ENOBUFS) ||
- (ret == -ENFILE) ||
- (ret == -EMFILE) ||
- (ret == -EADDRNOTAVAIL) ||
- (ret == -ENOMEM))
- locallimit++;
- fprintf(stderr,
- "connect: %s\n",
- strerror(-ret));
- break;
- }
- }
- } else
- /* there was no connection to open */
- shortwait[0]++;
- }
-
- return NULL;
-}
-
-/*
- * sender working routine
- */
-
-void *
-sending(void *dummy)
-{
- int ret;
- int nfds;
- char name[16];
-
- dummy = dummy;
-
- /* set send-name */
- memset(name, 0, sizeof(name));
- ret = prctl(PR_GET_NAME, name, 0, 0, 0);
- if (ret < 0)
- perror("prctl(PR_GET_NAME)");
- else {
- memmove(name + 5, name, 11);
- memcpy(name, "send-", 5);
- ret = prctl(PR_SET_NAME, name, 0, 0, 0);
- if (ret < 0)
- perror("prctl(PR_SET_NAME");
- }
-
- for (;;) {
- if (fatal)
- break;
-
- loops[2]++;
-
- /* epoll_wait() */
- memset(oevents, 0, sizeof(oevents));
- nfds = epoll_wait(epoll_ofd, oevents, EVENTS_CNT, 1);
- if (nfds < 0) {
- if (errno == EINTR)
- continue;
- perror("epoll_wait(output)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- break;
- }
-
- /* connection(s) to finish */
- if (nfds == 0)
- shortwait[1]++;
- else
- pollconnect(nfds);
- if (fatal)
- break;
- flushconnect();
- if (fatal)
- break;
-
- /* packet(s) to send */
- pollsend();
- if (fatal)
- break;
- }
-
- return NULL;
-}
-
-/*
- * receiver working routine
- */
-
-void *
-receiving(void *dummy)
-{
- int ret;
- int nfds;
- char name[16];
-
- dummy = dummy;
-
- /* set recv-name */
- memset(name, 0, sizeof(name));
- ret = prctl(PR_GET_NAME, name, 0, 0, 0);
- if (ret < 0)
- perror("prctl(PR_GET_NAME)");
- else {
- memmove(name + 5, name, 11);
- memcpy(name, "recv-", 5);
- ret = prctl(PR_SET_NAME, name, 0, 0, 0);
- if (ret < 0)
- perror("prctl(PR_SET_NAME");
- }
-
- for (;;) {
- if (fatal)
- break;
-
- loops[3]++;
-
- /* epoll_wait() */
- memset(ievents, 0, sizeof(ievents));
- nfds = epoll_wait(epoll_ifd, ievents, EVENTS_CNT, 1);
- if (nfds < 0) {
- if (errno == EINTR)
- continue;
- perror("epoll_wait(input)");
- fatal = 1;
- (void) pthread_kill(master, SIGTERM);
- break;
- }
-
- /* packet(s) to receive */
- if (nfds == 0)
- shortwait[2]++;
- else
- pollrecv(nfds);
- if (fatal)
- break;
- flushrecv();
- if (fatal)
- break;
- }
-
- return NULL;
-}
-
-/*
- * get the server socket address from the command line:
- * - flags: inherited from main, 0 or AI_NUMERICHOST (for literals)
- */
-
-void
-getserveraddr(const int flags)
-{
- struct addrinfo hints, *res;
- int ret;
-
- memset(&hints, 0, sizeof(hints));
- if (ipversion == 4)
- hints.ai_family = AF_INET;
- else
- hints.ai_family = AF_INET6;
- if (udp) {
- hints.ai_socktype = SOCK_DGRAM;
- hints.ai_protocol = IPPROTO_UDP;
- } else {
- hints.ai_socktype = SOCK_STREAM;
- hints.ai_protocol = IPPROTO_TCP;
- }
- hints.ai_flags = AI_ADDRCONFIG | flags;
-
- ret = getaddrinfo(servername, NULL, &hints, &res);
- if (ret != 0) {
- fprintf(stderr, "bad server=%s: %s\n",
- servername, gai_strerror(ret));
- exit(2);
- }
- if (res->ai_next != NULL) {
- fprintf(stderr, "ambiguous server=%s\n", servername);
- exit(2);
- }
- memcpy(&serveraddr, res->ai_addr, res->ai_addrlen);
- freeaddrinfo(res);
- if (ipversion == 4)
- ((struct sockaddr_in *)&serveraddr)->sin_port = htons(port);
- else
- ((struct sockaddr_in6 *)&serveraddr)->sin6_port = htons(port);
-}
-
-/*
- * get the local socket address from the command line
- */
-
-void
-getlocaladdr(void)
-{
- struct addrinfo hints, *res;
- int ret;
-
- memset(&hints, 0, sizeof(hints));
- if (ipversion == 4)
- hints.ai_family = AF_INET;
- else
- hints.ai_family = AF_INET6;
- if (udp) {
- hints.ai_socktype = SOCK_DGRAM;
- hints.ai_protocol = IPPROTO_UDP;
- } else {
- hints.ai_socktype = SOCK_STREAM;
- hints.ai_protocol = IPPROTO_TCP;
- }
- hints.ai_flags = AI_ADDRCONFIG;
-
- ret = getaddrinfo(localname, NULL, &hints, &res);
- if (ret != 0) {
- fprintf(stderr,
- "bad -l<local-addr=%s>: %s\n",
- localname,
- gai_strerror(ret));
- exit(2);
- }
- /* refuse multiple addresses */
- if (res->ai_next != NULL) {
- fprintf(stderr,
- "ambiguous -l<local-addr=%s>\n",
- localname);
- exit(2);
- }
- memcpy(&localaddr, res->ai_addr, res->ai_addrlen);
- freeaddrinfo(res);
-}
-
-/*
- * intermediate reporting
- * (note: an in-transit packet can be reported as lost)
- */
-
-void
-reporting(void)
-{
- dreport.tv_sec += report;
-
- if (xccount != 0) {
- printf("connect: %llu, sent: %llu, received: %llu "
- "(embryonics: %lld, drops: %lld)",
- (unsigned long long) xccount,
- (unsigned long long) xscount,
- (unsigned long long) xrcount,
- (long long) (xccount - xscount),
- (long long) (xscount - xrcount));
- if (xrcount != 0) {
- double avg;
-
- avg = dsum / xrcount;
- printf(" average: %.3f ms", avg * 1e3);
- }
- }
- printf("\n");
-}
-
-/*
- * SIGCHLD handler
- */
-
-void
-reapchild(int sig)
-{
- int status;
-
- sig = sig;
- while (wait3(&status, WNOHANG, NULL) > 0)
- /* continue */;
-}
-
-/*
- * SIGINT handler
- */
-
-void
-interrupt(int sig)
-{
- sig = sig;
- interrupted = 1;
-}
-
-/*
- * SIGTERM handler
- */
-
-void
-terminate(int sig)
-{
- sig = sig;
- fatal = 1;
-}
-
-/*
- * '-v' handler
- */
-
-void
-version(void)
-{
- fprintf(stderr, "version 0.01\n");
-}
-
-/*
- * usage (from the wiki)
- */
-
-void
-usage(void)
-{
- fprintf(stderr, "%s",
-"perftcpdns [-huvX0] [-4|-6] [-r<rate>] [-t<report>] [-p<test-period>]\n"
-" [-n<num-request>]* [-d<lost-time>]* [-D<max-loss>]* [-T<template-file>]\n"
-" [-l<local-addr>] [-L<local-port>]* [-a<aggressiveness>] [-s<seed>]\n"
-" [-M<memory>] [-x<diagnostic-selector>] [-P<port>] server\n"
-"\f\n"
-"The server argument is the name/address of the DNS server to contact.\n"
-"\n"
-"Options:\n"
-"-0: Add EDNS0 option with DO flag.\n"
-"-4: TCP/IPv4 operation (default). This is incompatible with the -6 option.\n"
-"-6: TCP/IPv6 operation. This is incompatible with the -4 option.\n"
-"-a<aggressiveness>: When the target sending rate is not yet reached,\n"
-" control how many connections are initiated before the next pause.\n"
-"-d<lost-time>: Specify the time after which a connection or a query is\n"
-" treated as having been lost. The value is given in seconds and\n"
-" may contain a fractional component. The default is 1 second.\n"
-"-h: Print this help.\n"
-"-l<local-addr>: Specify the local hostname/address to use when\n"
-" communicating with the server.\n"
-"-L<local-port>: Specify the (minimal and maximal) local port number\n"
-"-M<memory>: Size of the tables (default 60000)\n"
-"-P<port>: Specify an alternate (i.e., not 53) port\n"
-"-r<rate>: Initiate <rate> TCP DNS connections per second. A periodic\n"
-" report is generated showing the number of exchanges which were not\n"
-" completed, as well as the average response latency. The program\n"
-" continues until interrupted, at which point a final report is\n"
-" generated.\n"
-"-s<seed>: Specify the seed for randomization, making it repeatable.\n"
-"-t<report>: Delay in seconds between two periodic reports.\n"
-"-T<template-file>: The name of a file containing the template to use\n"
-" as a stream of hexadecimal digits.\n"
-"-u: Use UDP in place of TCP.\n"
-"-v: Report the version number of this program.\n"
-"-X: change default template to get NXDOMAIN responses.\n"
-"-x<diagnostic-selector>: Include extended diagnostics in the output.\n"
-" <diagnostic-selector> is a string of single-keywords specifying\n"
-" the operations for which verbose output is desired. The selector\n"
-" keyletters are:\n"
-" * 'a': print the decoded command line arguments\n"
-" * 'e': print the exit reason\n"
-" * 'i': print rate processing details\n"
-" * 'T': when finished, print templates\n"
-"\n"
-"Stopping conditions:\n"
-"-D<max-loss>: Abort the test if more than <max-loss> connections or\n"
-" queries have been lost. If <max-loss> includes the suffix '%', it\n"
-" specifies a maximum percentage of losses before stopping.\n"
-" In this case, testing of the threshold begins after 10\n"
-" connections/responses have been expected to be accepted/received.\n"
-"-n<num-request>: Initiate <num-request> transactions. No report is\n"
-" generated until all transactions have been initiated/waited-for,\n"
-" after which a report is generated and the program terminates.\n"
-"-p<test-period>: Send requests for the given test period, which is\n"
-" specified in the same manner as -d. This can be used as an\n"
-" alternative to -n, or both options can be given, in which case the\n"
-" testing is completed when either limit is reached.\n"
-"\n"
-"Errors:\n"
-"- locallimit: reached to local system limits when sending a message.\n"
-"- badconn: connection failed (from getsockopt(SO_ERROR))\n"
-"- collconn: connect() timed out\n"
-"- badsent: send() failed\n"
-"- callsent: timed out waiting from a response\n"
-"- recverr: recv() system call failed\n"
-"- tooshort: received a too short message\n"
-"- badid: the id mismatches between the query and the response\n"
-"- notresp: doesn't receive a response\n"
-"Rate stats:\n"
-"- loops: number of thread loop iterations\n"
-"- shortwait: no direct activity in a thread iteration\n"
-"- compconn: computed number of connect() calls\n"
-"- lateconn: connect() already dued when computing delay to the next one\n"
-"\n"
-"Exit status:\n"
-"The exit status is:\n"
-"0 on complete success.\n"
-"1 for a general error.\n"
-"2 if an error is found in the command line arguments.\n"
-"3 if there are no general failures in operation, but one or more\n"
-" exchanges are not successfully completed.\n");
-}
-
-/*
- * main function / entry point
- */
-
-int
-main(const int argc, char * const argv[])
-{
- int opt, flags = 0, ret, i;
- long long r;
- char *pc;
- double d;
- extern char *optarg;
- extern int optind;
-
-#define OPTIONS "hv46u0XM:r:t:R:b:n:p:d:D:l:L:a:s:T:O:x:P:"
-
- /* decode options */
- while ((opt = getopt(argc, argv, OPTIONS)) != -1)
- switch (opt) {
- case 'h':
- usage();
- exit(0);
-
- case 'u':
- udp = 1;
- break;
-
- case 'v':
- version();
- exit(0);
-
- case '0':
- edns0 = 1;
- break;
-
- case '4':
- if (ipversion == 6) {
- fprintf(stderr, "IP version already set to 6\n");
- usage();
- exit(2);
- }
- ipversion = 4;
- break;
-
- case '6':
- if (ipversion == 4) {
- fprintf(stderr, "IP version already set to 4\n");
- usage();
- exit(2);
- }
- ipversion = 6;
- break;
-
- case 'X':
- ixann = 1;
- break;
-
- case 'M':
- xlast = atoi(optarg);
- if (xlast <= 1000) {
- fprintf(stderr, "memory must be greater than 1000\n");
- usage();
- exit(2);
- }
- break;
-
- case 'r':
- rate = atoi(optarg);
- if (rate <= 0) {
- fprintf(stderr, "rate must be a positive integer\n");
- usage();
- exit(2);
- }
- break;
-
- case 't':
- report = atoi(optarg);
- if (report <= 0) {
- fprintf(stderr, "report must be a positive integer\n");
- usage();
- exit(2);
- }
- break;
-
- case 'R':
- r = atoll(optarg);
- if (r < 0) {
- fprintf(stderr,
- "range must not be a negative integer\n");
- usage();
- exit(2);
- }
- range = (uint32_t) r;
- if ((range != 0) && (range != UINT32_MAX)) {
- uint32_t s = range + 1;
- uint64_t b = UINT32_MAX + 1, m;
-
- m = (b / s) * s;
- if (m == b)
- maxrandom = 0;
- else
- maxrandom = (uint32_t) m;
- }
- break;
-
- case 'b':
- if (basecnt > 1) {
- fprintf(stderr, "too many bases\n");
- usage();
- exit(2);
- }
- base[basecnt] = optarg;
- /* decodebase(); */
- basecnt++;
- break;
-
- case 'n':
- noreport = 1;
- gotnumreq++;
- if (gotnumreq > 1) {
- fprintf(stderr, "too many num-request's\n");
- usage();
- exit(2);
- }
- numreq[gotnumreq] = atoi(optarg);
- if ((numreq[gotnumreq] < 0) ||
- ((numreq[gotnumreq] == 0) && (gotnumreq == 1))) {
- fprintf(stderr,
- "num-request must be a positive integer\n");
- usage();
- exit(2);
- }
- break;
-
- case 'p':
- noreport = 1;
- period = atoi(optarg);
- if (period <= 0) {
- fprintf(stderr,
- "test-period must be a positive integer\n");
- usage();
- exit(2);
- }
- break;
-
- case 'd':
- gotlosttime++;
- if (gotlosttime > 1) {
- fprintf(stderr, "too many lost-time's\n");
- usage();
- exit(2);
- }
- d = atof(optarg);
- if ((d < 0.) || ((d == 0.) && (gotlosttime == 1))) {
- fprintf(stderr,
- "lost-time must be a positive number\n");
- usage();
- exit(2);
- }
- if (d > 0.)
- losttime[gotlosttime] = d;
- break;
-
- case 'D':
- noreport = 1;
- gotmaxloss++;
- if (gotmaxloss > 1) {
- fprintf(stderr, "too many max-loss's\n");
- usage();
- exit(2);
- }
- pc = strchr(optarg, '%');
- if (pc != NULL) {
- *pc = '\0';
- maxploss[gotmaxloss] = atof(optarg);
- if ((maxploss[gotmaxloss] < 0) ||
- (maxploss[gotmaxloss] >= 100)) {
- fprintf(stderr,
- "invalid max-loss percentage\n");
- usage();
- exit(2);
- }
- } else {
- maxloss[gotmaxloss] = atoi(optarg);
- if ((maxloss[gotmaxloss] < 0) ||
- ((maxloss[gotmaxloss] == 0) &&
- (gotmaxloss == 1))) {
- fprintf(stderr,
- "max-loss must be a "
- "positive integer\n");
- usage();
- exit(2);
- }
- }
- break;
-
- case 'l':
- localname = optarg;
- break;
-
- case 'L':
- i = atoi(optarg);
- if ((i <= 0) || (i >65535)) {
- fprintf(stderr,
- "local-port must be a small positive integer\n");
- usage();
- exit(2);
- }
- if (maxport != 0) {
- fprintf(stderr, "too many local-port's\n");
- usage();
- exit(2);
- }
- if (curport == 0)
- minport = curport = i;
- else
- maxport = i;
- break;
-
- case 'a':
- aggressiveness = atoi(optarg);
- if (aggressiveness <= 0) {
- fprintf(stderr,
- "aggressiveness must be a positive integer\n");
- usage();
- exit(2);
- }
- break;
-
- case 's':
- seeded = 1;
- seed = (unsigned int) atol(optarg);
- break;
-
- case 'T':
- if (templatefile != NULL) {
- fprintf(stderr, "template-file is already set\n");
- usage();
- exit(2);
- }
- templatefile = optarg;
- break;
-
- case 'O':
- rndoffset = atoi(optarg);
- if (rndoffset < 14) {
- fprintf(stderr,
- "random-offset must be greater than 14\n");
- usage();
- exit(2);
- }
- break;
-
- case 'x':
- diags = optarg;
- break;
-
- case 'P':
- i = atoi(optarg);
- if ((i <= 0) || (i > 65535)) {
- fprintf(stderr,
- "port must be a positive short integer\n");
- usage();
- exit(2);
- }
- port = (in_port_t) i;
- break;
-
- default:
- usage();
- exit(2);
- }
-
- /* adjust some global variables */
- if (ipversion == 0)
- ipversion = 4;
- if (rate == 0)
- rate = 100;
- if (xlast == 0)
- xlast = 60000;
- if (noreport == 0)
- report = 1;
- if ((curport != 0) && (maxport == 0))
- maxport = 65535;
-
- /* when required, print the internal view of the command line */
- if ((diags != NULL) && (strchr(diags, 'a') != NULL)) {
- if (udp)
- printf("UDP ");
- printf("IPv%d", ipversion);
- printf(" rate=%d", rate);
- if (edns0 != 0)
- printf(" EDNS0");
- if (report != 0)
- printf(" report=%d", report);
- if (range != 0) {
- if (strchr(diags, 'r') != NULL)
- printf(" range=0..%d [0x%x]",
- range,
- (unsigned int) maxrandom);
- else
- printf(" range=0..%d", range);
- }
- if (basecnt != 0)
- for (i = 0; i < basecnt; i++)
- printf(" base[%d]='%s'", i, base[i]);
- if (gotnumreq >= 0) {
- if ((numreq[0] == 0) && (numreq[1] != 0))
- printf(" num-request=*,%d", numreq[1]);
- if ((numreq[0] != 0) && (numreq[1] == 0))
- printf(" num-request=%d,*", numreq[0]);
- if ((numreq[0] != 0) && (numreq[1] != 0))
- printf(" num-request=%d,%d",
- numreq[0], numreq[1]);
- }
- if (period != 0)
- printf(" test-period=%d", period);
- printf(" lost-time=%g,%g", losttime[0], losttime[1]);
- if (gotmaxloss == 0) {
- if (maxloss[0] != 0)
- printf(" max-loss=%d,*", maxloss[0]);
- if (maxploss[0] != 0.)
- printf(" max-loss=%2.2f%%,*", maxploss[0]);
- } else if (gotmaxloss == 1) {
- if (maxloss[0] != 0)
- printf(" max-loss=%d,", maxloss[0]);
- else if (maxploss[0] != 0.)
- printf(" max-loss=%2.2f%%,", maxploss[0]);
- else
- printf(" max-loss=*,");
- if (maxloss[1] != 0)
- printf("%d", maxloss[1]);
- else if (maxploss[1] != 0.)
- printf("%2.2f%%", maxploss[1]);
- else
- printf("*");
- }
- printf(" aggressiveness=%d", aggressiveness);
- if (seeded)
- printf(" seed=%u", seed);
- if (templatefile != NULL)
- printf(" template-file='%s'", templatefile);
- else if (ixann != 0)
- printf(" Xflag");
- if (rndoffset >= 0)
- printf(" rnd-offset=%d", rndoffset);
- printf(" diagnotic-selectors='%s'", diags);
- printf("\n");
- }
-
- /* check local address options */
- if ((localname == NULL) && (curport != 0)) {
- fprintf(stderr,
- "-l<local-addr> must be set to use -L<local-port>\n");
- usage();
- exit(2);
- }
-
- /* check template file options */
- if ((templatefile == NULL) && (rndoffset >= 0)) {
- fprintf(stderr,
- "-T<template-file> must be set to "
- "use -O<random-offset>\n");
- usage();
- exit(2);
- }
-
- /* check various template file(s) and other condition(s) options */
- if ((templatefile != NULL) && (range > 0) && (rndoffset < 0)) {
- fprintf(stderr,
- "-O<random-offset> must be set when "
- "-T<template-file> and -R<range> are used\n");
- usage();
- exit(2);
- }
-
- /* get the server argument */
- if (optind < argc - 1) {
- fprintf(stderr, "extra arguments?\n");
- usage();
- exit(2);
- }
- if (optind == argc - 1)
- servername = argv[optind];
-
- /* handle the local '-l' address/interface */
- if (localname != NULL) {
- /* given */
- getlocaladdr();
- if ((diags != NULL) && (strchr(diags, 'a') != NULL)) {
- printf("local-addr='%s'", localname);
- if (curport != 0)
- printf(" local-port='%d..%d'",
- minport, maxport);
- printf("\n");
- }
- }
-
- /* get the server socket address */
- if (servername == NULL) {
- fprintf(stderr, "server is required\n");
- usage();
- exit(2);
- }
- getserveraddr(flags);
-
- /* finish local/server socket address stuff and print it */
- if ((diags != NULL) && (strchr(diags, 'a') != NULL))
- printf("server='%s'\n", servername);
- if ((localname != NULL) &&
- (diags != NULL) && (strchr(diags, 'a') != NULL)) {
- char addr[NI_MAXHOST];
-
- ret = getnameinfo((struct sockaddr *) &localaddr,
- sizeof(localaddr),
- addr,
- NI_MAXHOST,
- NULL,
- 0,
- NI_NUMERICHOST);
- if (ret != 0) {
- fprintf(stderr,
- "can't get the local address: %s\n",
- gai_strerror(ret));
- exit(1);
- }
- printf("local address='%s'\n", addr);
- }
-
- /* initialize exchange structures */
- inits();
-
- /* get the socket descriptor and template(s) */
- if (templatefile == NULL)
- build_template_query();
- else
- get_template_query();
-
- /* boot is done! */
- if (clock_gettime(CLOCK_REALTIME, &boot) < 0) {
- perror("clock_gettime(boot)");
- exit(1);
- }
-
- /* compute the next intermediate reporting date */
- if (report != 0) {
- dreport.tv_sec = boot.tv_sec + report;
- dreport.tv_nsec = boot.tv_nsec;
- }
-
- /* seed the random generator */
- if (seeded == 0)
- seed = (unsigned int) (boot.tv_sec + boot.tv_nsec);
- srandom(seed);
-
- /* required only before the interrupted flag check */
- (void) signal(SIGINT, interrupt);
- (void) signal(SIGTERM, terminate);
-
- /* threads */
- master = pthread_self();
- ret = pthread_create(&connector, NULL, connecting, NULL);
- if (ret != 0) {
- fprintf(stderr, "pthread_create: %s\n", strerror(ret));
- exit(1);
- }
- ret = pthread_create(&sender, NULL, sending, NULL);
- if (ret != 0) {
- fprintf(stderr, "pthread_create: %s\n", strerror(ret));
- exit(1);
- }
- ret = pthread_create(&receiver, NULL, receiving, NULL);
- if (ret != 0) {
- fprintf(stderr, "pthread_create: %s\n", strerror(ret));
- exit(1);
- }
-
- /* main loop */
- for (;;) {
- struct timespec now, ts;
-
- /* immediate loop exit conditions */
- if (interrupted) {
- if ((diags != NULL) && (strchr(diags, 'e') != NULL))
- printf("interrupted\n");
- break;
- }
- if (fatal) {
- if ((diags != NULL) && (strchr(diags, 'e') != NULL))
- printf("got a fatal error\n");
- break;
- }
-
- loops[0]++;
-
- /* get the date and use it */
- if (clock_gettime(CLOCK_REALTIME, &now) < 0) {
- perror("clock_gettime(now)");
- fatal = 1;
- continue;
- }
- if ((period != 0) &&
- ((boot.tv_sec + period < now.tv_sec) ||
- ((boot.tv_sec + period == now.tv_sec) &&
- (boot.tv_nsec < now.tv_nsec)))) {
- if ((diags != NULL) && (strchr(diags, 'e') != NULL))
- printf("reached test-period\n");
- break;
- }
- if ((report != 0) &&
- ((dreport.tv_sec < now.tv_sec) ||
- ((dreport.tv_sec == now.tv_sec) &&
- (dreport.tv_nsec < now.tv_nsec))))
- reporting();
-
- /* check receive loop exit conditions */
- if ((numreq[0] != 0) && ((int) xccount >= numreq[0])) {
- if ((diags != NULL) && (strchr(diags, 'e') != NULL))
- printf("reached num-connection\n");
- break;
- }
- if ((numreq[1] != 0) && ((int) xscount >= numreq[1])) {
- if ((diags != NULL) && (strchr(diags, 'e') != NULL))
- printf("reached num-query\n");
- break;
- }
- if ((maxloss[0] != 0) &&
- ((int) (xccount - xscount) > maxloss[0])) {
- if ((diags != NULL) && (strchr(diags, 'e') != NULL))
- printf("reached max-loss "
- "(connection/absolute)\n");
- break;
- }
- if ((maxloss[1] != 0) &&
- ((int) (xscount - xrcount) > maxloss[1])) {
- if ((diags != NULL) && (strchr(diags, 'e') != NULL))
- printf("reached max-loss "
- "(query/absolute)\n");
- break;
- }
- if ((maxploss[0] != 0.) &&
- (xccount > 10) &&
- (((100. * (xccount - xscount)) / xccount) > maxploss[1])) {
- if ((diags != NULL) && (strchr(diags, 'e') != NULL))
- printf("reached max-loss "
- "(connection/percent)\n");
- break;
- }
- if ((maxploss[1] != 0.) &&
- (xscount > 10) &&
- (((100. * (xscount - xrcount)) / xscount) > maxploss[1])) {
- if ((diags != NULL) && (strchr(diags, 'e') != NULL))
- printf("reached max-loss "
- "(query/percent)\n");
- break;
- }
-
- /* waiting 1ms */
- memset(&ts, 0, sizeof(ts));
- ts.tv_nsec = 1000000;
- (void) clock_nanosleep(CLOCK_REALTIME, 0, &ts, NULL);
- }
-
- /* after main loop: finished */
- if (clock_gettime(CLOCK_REALTIME, &finished) < 0)
- perror("clock_gettime(finished)");
-
- /* threads */
- (void) pthread_cancel(connector);
- (void) pthread_cancel(sender);
- (void) pthread_cancel(receiver);
-
- /* main statictics */
- printf("connect: %llu, sent: %llu, received: %llu\n",
- (unsigned long long) xccount,
- (unsigned long long) xscount,
- (unsigned long long) xrcount);
- printf("embryonics: %lld (%.1f%%)\n",
- (long long) (xccount - xscount),
- (100. * (xccount - xscount)) / xccount);
- printf("drops: %lld (%.1f%%)\n",
- (long long) (xscount - xrcount),
- (100. * (xscount - xrcount)) / xscount);
- printf("total losses: %lld (%.1f%%)\n",
- (long long) (xccount - xrcount),
- (100. * (xccount - xrcount)) / xccount);
- printf("local limits: %llu, bad connects: %llu, "
- "connect timeouts: %llu\n",
- (unsigned long long) locallimit,
- (unsigned long long) badconn,
- (unsigned long long) collconn);
- printf("bad sends: %llu, bad recvs: %llu, recv timeouts: %llu\n",
- (unsigned long long) badsent,
- (unsigned long long) recverr,
- (unsigned long long) collsent);
- printf("too shorts: %llu, bad IDs: %llu, not responses: %llu\n",
- (unsigned long long) tooshort,
- (unsigned long long) badid,
- (unsigned long long) notresp);
- printf("rcode counters:\n noerror: %llu, formerr: %llu, "
- "servfail: %llu\n "
- "nxdomain: %llu, noimp: %llu, refused: %llu, others: %llu\n",
- (unsigned long long) rcodes[NS_RCODE_NOERROR],
- (unsigned long long) rcodes[NS_RCODE_FORMERR],
- (unsigned long long) rcodes[NS_RCODE_SERVFAIL],
- (unsigned long long) rcodes[NS_RCODE_NXDOMAIN],
- (unsigned long long) rcodes[NS_RCODE_NOIMP],
- (unsigned long long) rcodes[NS_RCODE_REFUSED],
- (unsigned long long) rcodes[NS_RCODE_LAST]);
-
- /* print the rates */
- if (finished.tv_sec != 0) {
- double dall, erate[3];
-
- dall = (finished.tv_nsec - boot.tv_nsec) / 1e9;
- dall += finished.tv_sec - boot.tv_sec;
- erate[0] = xccount / dall;
- erate[1] = xscount / dall;
- erate[2] = xrcount / dall;
- printf("rates: %.0f,%.0f,%.0f (target %d)\n",
- erate[0], erate[1], erate[2], rate);
- }
-
- /* rate processing instrumentation */
- if ((diags != NULL) && (strchr(diags, 'i') != NULL)) {
- printf("loops: %llu,%llu,%llu,%llu\n",
- (unsigned long long) loops[0],
- (unsigned long long) loops[1],
- (unsigned long long) loops[2],
- (unsigned long long) loops[3]);
- printf("shortwait: %llu,%llu,%llu\n",
- (unsigned long long) shortwait[0],
- (unsigned long long) shortwait[1],
- (unsigned long long) shortwait[2]);
- printf("compconn: %llu, lateconn: %llu\n",
- (unsigned long long) compconn,
- (unsigned long long) lateconn);
- printf("badconn: %llu, collconn: %llu, "
- "recverr: %llu, collsent: %llu\n",
- (unsigned long long) badconn,
- (unsigned long long) collconn,
- (unsigned long long) recverr,
- (unsigned long long) collsent);
- printf("memory: used(%d) / allocated(%d)\n",
- xused, xlast);
- }
-
- /* round-time trip statistics */
- if (xrcount != 0) {
- double avg, stddev;
-
- avg = dsum / xrcount;
- stddev = sqrt(dsumsq / xrcount - avg * avg);
- printf("RTT: min/avg/max/stddev: %.3f/%.3f/%.3f/%.3f ms\n",
- dmin * 1e3, avg * 1e3, dmax * 1e3, stddev * 1e3);
- }
- printf("\n");
-
- /* template(s) */
- if ((diags != NULL) && (strchr(diags, 'T') != NULL)) {
- size_t n;
-
- printf("length = 0x%zx\n", length_query);
- if (random_query > 0)
- printf("random offset = %zu\n", random_query);
- printf("content:\n");
- for (n = 0; n < length_query; n++) {
- printf("%s%02hhx",
- (n & 15) == 0 ? "" : " ",
- template_query[n]);
- if ((n & 15) == 15)
- printf("\n");
- }
- if ((n & 15) != 15)
- printf("\n");
- printf("\n");
- }
-
- /* compute the exit code (and exit) */
- if (fatal)
- exit(1);
- else if ((xccount == xscount) && (xscount == xrcount))
- exit(0);
- else
- exit(3);
-}
diff --git a/contrib/query-loc-0.4.0/ADDRESSES b/contrib/query-loc-0.4.0/ADDRESSES
deleted file mode 100644
index 49fb7d83..00000000
--- a/contrib/query-loc-0.4.0/ADDRESSES
+++ /dev/null
@@ -1,16 +0,0 @@
-The following machines, at least today seem to have LOC
-records:
-
-147.210.73.0/24 (note the two /25 have different LOC, inherited differently)
-130.104.3.*
-Melanie.Tolna.Net
-204.92.254.*
-alink.net
-caida.org
-ckdhr.com
-distributed.net (rc5stats.distributed.net)
-nikhef.nl
-yahoo.com
-nic.af
-
-$Id: ADDRESSES,v 1.1 2008/02/15 01:47:15 marka Exp $
diff --git a/contrib/query-loc-0.4.0/ALGO b/contrib/query-loc-0.4.0/ALGO
deleted file mode 100644
index 4695dc14..00000000
--- a/contrib/query-loc-0.4.0/ALGO
+++ /dev/null
@@ -1,48 +0,0 @@
-Just for info, can be out of date.
-
-
-RFC 1876, 5.2, specially 5.2.3
-
-Important points:
-
-- LOC RRs are always attached to a *name*.
-- we can have two (or more) RRs for one address, one more specific than the other
-
-main
- if (host is a name)
- getLOCbyname
- else # host is an IP address
- gethostbyaddr
- if (name)
- getLOCbyname
- # If there is none, do not search. We assume the above was sufficient # (But check 5.2.2)
- else
- getLOCbyaddress
-
-getLOCbyname (host)
- get LOC for host
- if (it exists)
- OK
- else
- get all A records of the name
- foreach A record
- getLOCbyaddress
- OK at the first one found
- # we assume they are consistent
- END
-
-getLOCbyaddress (address)
- # May receive a mask. Otherwise, deduce it from the class
- makeNetAddress
- getLOCbynetwork
-
-getLOCbynetwork
- get PTR and A for it
- if (exist)
- getLOCbyname
- ******* DIFFICULT : we have to manage a stack. See the code
- makeNetAddress (level--)
- getLOCbynetwork
- else
- END
-
diff --git a/contrib/query-loc-0.4.0/INSTALL b/contrib/query-loc-0.4.0/INSTALL
deleted file mode 100644
index 97e740b3..00000000
--- a/contrib/query-loc-0.4.0/INSTALL
+++ /dev/null
@@ -1,9 +0,0 @@
-Type './configure', then 'make' and (as root if necessary) 'make
-install'.
-
-It requires a recent libresolv, with loc_ntoa, but use an alternative
-which I provide, if not found.
-
-Tested on Linux (i386 and Alpha), Solaris (Sparc) and Digital Unix (Alpha).
-
-$Id: INSTALL,v 1.1 2008/02/15 01:47:15 marka Exp $
diff --git a/contrib/query-loc-0.4.0/Makefile.in b/contrib/query-loc-0.4.0/Makefile.in
deleted file mode 100644
index eefa2acb..00000000
--- a/contrib/query-loc-0.4.0/Makefile.in
+++ /dev/null
@@ -1,42 +0,0 @@
-# $Id: Makefile.in,v 1.1 2008/02/15 01:47:15 marka Exp $
-CC=@CC@
-CFLAGS=@CFLAGS@
-LIBS=@LIBS@
-DESTDIR=@prefix@
-BINDIR=@prefix@/bin
-MANDIR=@prefix@/share/man/man1
-DISTRIB= README INSTALL ALGO USAGE ADDRESSES Makefile.in configure configure.in config.h.in install-sh loc.h loc.c query-loc.c loc_ntoa.c query-loc.1 reconf
-OBJS=query-loc.o loc.o @LOC_NTOA@
-VERSION=`grep VERSION loc.h | cut -d ' ' -f 3 | sed s/\"//g`
-
-all: query-loc
-
-query-loc: $(OBJS)
- $(CC) -o $@ $(OBJS) $(LIBS)
-
-%.o: %.c loc.h
- $(CC) $(CFLAGS) -c $<
-
-clean:
- rm -f *.o query-loc *~
-
-distclean: clean
- rm -f config.h config.cache config.log config.status Makefile
-
-dist: distrib
-
-distrib: clean
- ./reconf
- @(echo Query-Loc is version ${VERSION}; \
- mkdir query-loc-${VERSION}; \
- cp $(DISTRIB) query-loc-${VERSION};\
- tar cvf query-loc-${VERSION}.tar query-loc-${VERSION}; \
- rm -rf query-loc-${VERSION}; \
- gzip -v -9 -f query-loc-${VERSION}.tar);
-
-install:
- @INSTALL@ -m 0755 query-loc $(BINDIR)
- if [ ! -d $(MANDIR) ]; then \
- mkdir $(MANDIR); \
- fi
- @INSTALL@ -m 0644 query-loc.1 $(MANDIR)
diff --git a/contrib/query-loc-0.4.0/README b/contrib/query-loc-0.4.0/README
deleted file mode 100644
index 250b3784..00000000
--- a/contrib/query-loc-0.4.0/README
+++ /dev/null
@@ -1,21 +0,0 @@
- query-loc: a program to retrieve and display the location
- information in the DNS.
-
- It uses the algorithms described in
- RFC 1876 (and RFC 1101 to get the network names).
- You can find examples of networks wchich implement this scheme
- in the ADDRESSES file.
-
- It is under the General Public Licence (GPL, which
- you can fetch from <http://www.gnu.org/copyleft/gpl.html>.
-
- Copyright Stéphane Bortzmeyer <bortzmeyer@sources.org>, 1998-2007.
-
- Thanks to Paul Vixie for the RFC and its encouragements. Thanks
- to Björn Augustsson for the xtraceroute program
- <http://www.dtek.chalmers.se/~d3august/xt/>. Thanks to Roland
- Dirlewanger for extensive patching.
-
-$Id: README,v 1.1 2008/02/15 01:47:15 marka Exp $
-
-
diff --git a/contrib/query-loc-0.4.0/USAGE b/contrib/query-loc-0.4.0/USAGE
deleted file mode 100644
index d3ee4c06..00000000
--- a/contrib/query-loc-0.4.0/USAGE
+++ /dev/null
@@ -1,7 +0,0 @@
-query-loc [-v] [-d nnn] host-name-or-address
-
-Examples of hosts with LOCation info (quite uncommon, if you know more,
-please tell me):
-
-See the ADDRESSES file
-
diff --git a/contrib/query-loc-0.4.0/config.h.in b/contrib/query-loc-0.4.0/config.h.in
deleted file mode 100644
index 772136c7..00000000
--- a/contrib/query-loc-0.4.0/config.h.in
+++ /dev/null
@@ -1,73 +0,0 @@
-/* config.h.in. Generated from configure.in by autoheader. */
-
-/* Define to 1 if you have the <arpa/nameser_compat.h> header file. */
-#undef HAVE_ARPA_NAMESER_COMPAT_H
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if you have the `resolv' library (-lresolv). */
-#undef HAVE_LIBRESOLV
-
-/* Is there a loc_ntoa on this system? */
-#undef HAVE_LOC_NTOA
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the home page for this package. */
-#undef PACKAGE_URL
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* The size of `char', as computed by sizeof. */
-#undef SIZEOF_CHAR
-
-/* The size of `int', as computed by sizeof. */
-#undef SIZEOF_INT
-
-/* The size of `long', as computed by sizeof. */
-#undef SIZEOF_LONG
-
-/* The size of `short', as computed by sizeof. */
-#undef SIZEOF_SHORT
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define to empty if `const' does not conform to ANSI C. */
-#undef const
diff --git a/contrib/query-loc-0.4.0/configure b/contrib/query-loc-0.4.0/configure
deleted file mode 100755
index afaa0cc8..00000000
--- a/contrib/query-loc-0.4.0/configure
+++ /dev/null
@@ -1,5165 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69.
-#
-#
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
-#
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# Use a proper internal environment variable to ensure we don't fall
- # into an infinite loop, continuously re-executing ourselves.
- if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
- _as_can_reexec=no; export _as_can_reexec;
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
- fi
- # We don't want this to propagate to other subprocesses.
- { _as_can_reexec=; unset _as_can_reexec;}
-if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '\${1+\"\$@\"}'='\"\$@\"'
- setopt NO_GLOB_SUBST
-else
- case \`(set -o) 2>/dev/null\` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-"
- as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
- exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
- as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
- as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
- eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
- test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
- as_have_required=yes
-else
- as_have_required=no
-fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- as_found=:
- case $as_dir in #(
- /*)
- for as_base in sh bash ksh sh5; do
- # Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
- CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
- break 2
-fi
-fi
- done;;
- esac
- as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
- if test "x$CONFIG_SHELL" != x; then :
- export CONFIG_SHELL
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
-fi
-
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
- else
- $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
-$0: including any error possibly output before this
-$0: message. Then install a modern shell, or manually run
-$0: the script under such a shell if you do have one."
- fi
- exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-
- as_lineno_1=$LINENO as_lineno_1a=$LINENO
- as_lineno_2=$LINENO as_lineno_2a=$LINENO
- eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
- test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
- # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
- # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
- # already done that, so ensure we don't try to do so again and fall
- # in an infinite loop. This has already happened in practice.
- _as_can_reexec=no; export _as_can_reexec
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-PACKAGE_URL=
-
-ac_unique_file="query-loc.c"
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-# endif
-#endif
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-# include <memory.h>
-# endif
-# include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-ac_subst_vars='LTLIBOBJS
-LIBOBJS
-LOC_NTOA
-EGREP
-GREP
-CPP
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-'
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CPP'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval $ac_prev=\$ac_option
- ac_prev=
- continue
- fi
-
- case $ac_option in
- *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *=) ac_optarg= ;;
- *) ac_optarg=yes ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir=$ac_optarg ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build_alias ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build_alias=$ac_optarg ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file=$ac_optarg ;;
-
- --config-cache | -C)
- cache_file=config.cache ;;
-
- -datadir | --datadir | --datadi | --datad)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=*)
- datadir=$ac_optarg ;;
-
- -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
- | --dataroo | --dataro | --datar)
- ac_prev=datarootdir ;;
- -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
- | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
- datarootdir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
- -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
- docdir=$ac_optarg ;;
-
- -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
- ac_prev=dvidir ;;
- -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
- dvidir=$ac_optarg ;;
-
- -enable-* | --enable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=\$ac_optarg ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix=$ac_optarg ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he | -h)
- ac_init_help=long ;;
- -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
- ac_init_help=recursive ;;
- -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
- ac_init_help=short ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host_alias ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host_alias=$ac_optarg ;;
-
- -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
- ac_prev=htmldir ;;
- -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
- | --ht=*)
- htmldir=$ac_optarg ;;
-
- -includedir | --includedir | --includedi | --included | --include \
- | --includ | --inclu | --incl | --inc)
- ac_prev=includedir ;;
- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
- | --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir=$ac_optarg ;;
-
- -infodir | --infodir | --infodi | --infod | --info | --inf)
- ac_prev=infodir ;;
- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir=$ac_optarg ;;
-
- -libdir | --libdir | --libdi | --libd)
- ac_prev=libdir ;;
- -libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir=$ac_optarg ;;
-
- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
- | --libexe | --libex | --libe)
- ac_prev=libexecdir ;;
- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
- | --libexe=* | --libex=* | --libe=*)
- libexecdir=$ac_optarg ;;
-
- -localedir | --localedir | --localedi | --localed | --locale)
- ac_prev=localedir ;;
- -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
- localedir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst | --locals)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
- localstatedir=$ac_optarg ;;
-
- -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
- ac_prev=mandir ;;
- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir=$ac_optarg ;;
-
- -nfp | --nfp | --nf)
- # Obsolete; use --without-fp.
- with_fp=no ;;
-
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c | -n)
- no_create=yes ;;
-
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
- no_recursion=yes ;;
-
- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
- | --oldin | --oldi | --old | --ol | --o)
- ac_prev=oldincludedir ;;
- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir=$ac_optarg ;;
-
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix=$ac_optarg ;;
-
- -program-prefix | --program-prefix | --program-prefi | --program-pref \
- | --program-pre | --program-pr | --program-p)
- ac_prev=program_prefix ;;
- -program-prefix=* | --program-prefix=* | --program-prefi=* \
- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix=$ac_optarg ;;
-
- -program-suffix | --program-suffix | --program-suffi | --program-suff \
- | --program-suf | --program-su | --program-s)
- ac_prev=program_suffix ;;
- -program-suffix=* | --program-suffix=* | --program-suffi=* \
- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix=$ac_optarg ;;
-
- -program-transform-name | --program-transform-name \
- | --program-transform-nam | --program-transform-na \
- | --program-transform-n | --program-transform- \
- | --program-transform | --program-transfor \
- | --program-transfo | --program-transf \
- | --program-trans | --program-tran \
- | --progr-tra | --program-tr | --program-t)
- ac_prev=program_transform_name ;;
- -program-transform-name=* | --program-transform-name=* \
- | --program-transform-nam=* | --program-transform-na=* \
- | --program-transform-n=* | --program-transform-=* \
- | --program-transform=* | --program-transfor=* \
- | --program-transfo=* | --program-transf=* \
- | --program-trans=* | --program-tran=* \
- | --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name=$ac_optarg ;;
-
- -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
- ac_prev=pdfdir ;;
- -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
- pdfdir=$ac_optarg ;;
-
- -psdir | --psdir | --psdi | --psd | --ps)
- ac_prev=psdir ;;
- -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
- psdir=$ac_optarg ;;
-
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- silent=yes ;;
-
- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
- ac_prev=sbindir ;;
- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
- | --sbi=* | --sb=*)
- sbindir=$ac_optarg ;;
-
- -sharedstatedir | --sharedstatedir | --sharedstatedi \
- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
- | --sharedst | --shareds | --shared | --share | --shar \
- | --sha | --sh)
- ac_prev=sharedstatedir ;;
- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
- | --sha=* | --sh=*)
- sharedstatedir=$ac_optarg ;;
-
- -site | --site | --sit)
- ac_prev=site ;;
- -site=* | --site=* | --sit=*)
- site=$ac_optarg ;;
-
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir=$ac_optarg ;;
-
- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
- | --syscon | --sysco | --sysc | --sys | --sy)
- ac_prev=sysconfdir ;;
- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir=$ac_optarg ;;
-
- -target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target_alias ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target_alias=$ac_optarg ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers | -V)
- ac_init_version=: ;;
-
- -with-* | --with-*)
- ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=\$ac_optarg ;;
-
- -without-* | --without-*)
- ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=no ;;
-
- --x)
- # Obsolete; use --with-x.
- with_x=yes ;;
-
- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
- | --x-incl | --x-inc | --x-in | --x-i)
- ac_prev=x_includes ;;
- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes=$ac_optarg ;;
-
- -x-libraries | --x-libraries | --x-librarie | --x-librari \
- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
- ac_prev=x_libraries ;;
- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries=$ac_optarg ;;
-
- -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- case $ac_envvar in #(
- '' | [0-9]* | *[!_$as_cr_alnum]* )
- as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
- esac
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
- : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- ac_option=--`echo $ac_prev | sed 's/_/-/g'`
- as_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
- case $enable_option_checking in
- no) ;;
- fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
- esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
-do
- eval ac_val=\$$ac_var
- # Remove trailing slashes.
- case $ac_val in
- */ )
- ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
- eval $ac_var=\$ac_val;;
- esac
- # Be sure to have absolute directory names.
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
- esac
- as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
- if test "x$build_alias" = x; then
- cross_compiling=maybe
- elif test "x$build_alias" != "x$host_alias"; then
- cross_compiling=yes
- fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- as_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- as_fn_error $? "pwd does not report name of working directory"
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
- ac_srcdir_defaulted=yes
- # Try the directory containing this script, then the parent directory.
- ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_myself" : 'X\(//\)[^/]' \| \
- X"$as_myself" : 'X\(//\)$' \| \
- X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- srcdir=$ac_confdir
- if test ! -r "$srcdir/$ac_unique_file"; then
- srcdir=..
- fi
-else
- ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
- pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
- srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
- eval ac_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_env_${ac_var}_value=\$${ac_var}
- eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat <<_ACEOF
-\`configure' configures this package to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE. See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
- -h, --help display this help and exit
- --help=short display options specific to this package
- --help=recursive display the short help of all the included packages
- -V, --version display version information and exit
- -q, --quiet, --silent do not print \`checking ...' messages
- --cache-file=FILE cache test results in FILE [disabled]
- -C, --config-cache alias for \`--cache-file=config.cache'
- -n, --no-create do not create output files
- --srcdir=DIR find the sources in DIR [configure dir or \`..']
-
-Installation directories:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc [/usr/include]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_ACEOF
-
- cat <<\_ACEOF
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-
- cat <<\_ACEOF
-
-Some influential environment variables:
- CC C compiler command
- CFLAGS C compiler flags
- LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
- nonstandard directory <lib dir>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
- CPP C preprocessor
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to the package provider.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" ||
- { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
- continue
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
- cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
- if test -f "$ac_srcdir/configure.gnu"; then
- echo &&
- $SHELL "$ac_srcdir/configure.gnu" --help=recursive
- elif test -f "$ac_srcdir/configure"; then
- echo &&
- $SHELL "$ac_srcdir/configure" --help=recursive
- else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
- done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
- cat <<\_ACEOF
-configure
-generated by GNU Autoconf 2.69
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
- exit
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
- if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_compile
-
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext conftest$ac_exeext
- if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- test -x conftest$ac_exeext
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
- # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
- # interfere with the next link command; also delete a directory that is
- # left behind by Apple's compiler. We do this before executing the actions.
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_link
-
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } > conftest.i && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then :
- ac_retval=0
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=$ac_status
-fi
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_run
-
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if eval \${$3+:} false; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
- # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_header_compiler=yes
-else
- ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- ac_header_preproc=yes
-else
- ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
- yes:no: )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
- no:yes:* )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
-esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_mongrel
-
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- eval "$3=yes"
-else
- eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_compile
-
-# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
-# --------------------------------------------
-# Tries to find the compile-time value of EXPR in a program that includes
-# INCLUDES, setting VAR accordingly. Returns whether the value could be
-# computed
-ac_fn_c_compute_int ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if test "$cross_compiling" = yes; then
- # Depending upon the size, compute the lo and hi bounds.
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) >= 0)];
-test_array [0] = 0;
-return test_array [0];
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_lo=0 ac_mid=0
- while :; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0;
-return test_array [0];
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_hi=$ac_mid; break
-else
- as_fn_arith $ac_mid + 1 && ac_lo=$as_val
- if test $ac_lo -le $ac_mid; then
- ac_lo= ac_hi=
- break
- fi
- as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) < 0)];
-test_array [0] = 0;
-return test_array [0];
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_hi=-1 ac_mid=-1
- while :; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) >= $ac_mid)];
-test_array [0] = 0;
-return test_array [0];
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_lo=$ac_mid; break
-else
- as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
- if test $ac_mid -le $ac_hi; then
- ac_lo= ac_hi=
- break
- fi
- as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- ac_lo= ac_hi=
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
- as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0;
-return test_array [0];
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_hi=$ac_mid
-else
- as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in #((
-?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
-'') ac_retval=1 ;;
-esac
- else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-static long int longval () { return $2; }
-static unsigned long int ulongval () { return $2; }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
- FILE *f = fopen ("conftest.val", "w");
- if (! f)
- return 1;
- if (($2) < 0)
- {
- long int i = longval ();
- if (i != ($2))
- return 1;
- fprintf (f, "%ld", i);
- }
- else
- {
- unsigned long int i = ulongval ();
- if (i != ($2))
- return 1;
- fprintf (f, "%lu", i);
- }
- /* Do not output a trailing newline, as this causes \r\n confusion
- on some platforms. */
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- echo >>conftest.val; read $3 <conftest.val; ac_retval=0
-else
- ac_retval=1
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-rm -f conftest.val
-
- fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_compute_int
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
-
-/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
-/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
-/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
- done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
- for ac_arg
- do
- case $ac_arg in
- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- continue ;;
- *\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
- 2)
- as_fn_append ac_configure_args1 " '$ac_arg'"
- if test $ac_must_keep_next = true; then
- ac_must_keep_next=false # Got value, back to normal.
- else
- case $ac_arg in
- *=* | --config-cache | -C | -disable-* | --disable-* \
- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
- | -with-* | --with-* | -without-* | --without-* | --x)
- case "$ac_configure_args0 " in
- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
- esac
- ;;
- -* ) ac_must_keep_next=true ;;
- esac
- fi
- as_fn_append ac_configure_args " '$ac_arg'"
- ;;
- esac
- done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset ac_configure_args1;}
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log. We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
- echo
- # The following way of writing the cache mishandles newlines in values,
-(
- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
- (set) 2>&1 |
- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- sed -n \
- "s/'\''/'\''\\\\'\'''\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
- ;; #(
- *)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-)
- echo
-
- $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
- echo
- cat confdefs.h
- echo
- fi
- test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
-elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
-else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
- fi
-done
-
-if test -r "$cache_file"; then
- # Some versions of bash will fail to source /dev/null (special files
- # actually), so we avoid doing that. DJGPP emulates it as a regular file.
- if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
- esac
- fi
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
- >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
- eval ac_old_set=\$ac_cv_env_${ac_var}_set
- eval ac_new_set=\$ac_env_${ac_var}_set
- eval ac_old_val=\$ac_cv_env_${ac_var}_value
- eval ac_new_val=\$ac_env_${ac_var}_value
- case $ac_old_set,$ac_new_set in
- set,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,);;
- *)
- if test "x$ac_old_val" != "x$ac_new_val"; then
- # differences in whitespace do not lead to failure.
- ac_old_val_w=`echo x $ac_old_val`
- ac_new_val_w=`echo x $ac_new_val`
- if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- ac_cache_corrupted=:
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
- eval $ac_var=\$ac_old_val
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
- *) ac_arg=$ac_var=$ac_new_val ;;
- esac
- case " $ac_configure_args " in
- *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
- *) as_fn_append ac_configure_args " '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-else
- CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- fi
-fi
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# != 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- fi
- rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
- break;;
- * )
- break;;
- esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
- ac_file=''
-fi
-if test -z "$ac_file"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
-done
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
- { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if { ac_try='./conftest$ac_cv_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-else
- CFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-if test "$GCC" = "yes"; then
- CFLAGS="${CFLAGS} -Wall"
-fi
-ac_aux_dir=
-for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-
-
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
- ./ | .// | /[cC]/* | \
- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
- ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
- /usr/ucb/* ) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
- if test $ac_prog = install &&
- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- elif test $ac_prog = install &&
- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # program-specific install script used by HP pwplus--don't use.
- :
- else
- rm -rf conftest.one conftest.two conftest.dir
- echo one > conftest.one
- echo two > conftest.two
- mkdir conftest.dir
- if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
- test -s conftest.one && test -s conftest.two &&
- test -s conftest.dir/conftest.one &&
- test -s conftest.dir/conftest.two
- then
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
- break 3
- fi
- fi
- fi
- done
- done
- ;;
-esac
-
- done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL=$ac_cv_path_install
- else
- # As a last resort, use the slow shell script. Don't cache a
- # value for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the value is a relative name.
- INSTALL=$ac_install_sh
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for res_query in -lresolv" >&5
-$as_echo_n "checking for res_query in -lresolv... " >&6; }
-if ${ac_cv_lib_resolv_res_query+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lresolv $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char res_query ();
-int
-main ()
-{
-return res_query ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_resolv_res_query=yes
-else
- ac_cv_lib_resolv_res_query=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolv_res_query" >&5
-$as_echo "$ac_cv_lib_resolv_res_query" >&6; }
-if test "x$ac_cv_lib_resolv_res_query" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBRESOLV 1
-_ACEOF
-
- LIBS="-lresolv $LIBS"
-
-fi
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if ${ac_cv_prog_CPP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
- break
-fi
-
- done
- ac_cv_prog_CPP=$CPP
-
-fi
- CPP=$ac_cv_prog_CPP
-else
- ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -z "$GREP"; then
- ac_path_GREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'GREP' >> "conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_GREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_GREP="$ac_path_GREP"
- ac_path_GREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_GREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_GREP"; then
- as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
- then ac_cv_path_EGREP="$GREP -E"
- else
- if test -z "$EGREP"; then
- ac_path_EGREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in egrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
- # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'EGREP' >> "conftest.nl"
- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_EGREP="$ac_path_EGREP"
- ac_path_EGREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_EGREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_EGREP"; then
- as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_EGREP=$EGREP
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then :
- :
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-ac_config_headers="$ac_config_headers config.h"
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-ac_fn_c_check_header_mongrel "$LINENO" "resolv.h" "ac_cv_header_resolv_h" "$ac_includes_default"
-if test "x$ac_cv_header_resolv_h" = xyes; then :
-
-else
- as_fn_error $? "\"No headers for name service applications\"" "$LINENO" 5
-fi
-
-
-ac_fn_c_check_header_mongrel "$LINENO" "arpa/nameser.h" "ac_cv_header_arpa_nameser_h" "$ac_includes_default"
-if test "x$ac_cv_header_arpa_nameser_h" = xyes; then :
-
-else
- as_fn_error $? "\"No headers for name service applications\"" "$LINENO" 5
-fi
-
-
-for ac_header in arpa/nameser_compat.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "arpa/nameser_compat.h" "ac_cv_header_arpa_nameser_compat_h" "$ac_includes_default"
-if test "x$ac_cv_header_arpa_nameser_compat_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_ARPA_NAMESER_COMPAT_H 1
-_ACEOF
-
-fi
-
-done
-
-ac_fn_c_check_header_mongrel "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_time_h" = xyes; then :
-
-else
- as_fn_error $? "\"Mandatory header missing on your system\"" "$LINENO" 5
-fi
-
-
-ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
-if test "x$ac_cv_header_unistd_h" = xyes; then :
-
-else
- as_fn_error $? "\"Mandatory header missing on your system\"" "$LINENO" 5
-fi
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if libnsl is mandatory" >&5
-$as_echo_n "checking if libnsl is mandatory... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
- #include <netinet/in.h>
- #include <arpa/nameser.h>
- #ifdef HAVE_ARPA_NAMESER_COMPAT_H
- #include <arpa/nameser_compat.h>
- #endif
- #include <resolv.h>
- union
- {
- HEADER hdr;
- u_char buf[4096]; /* With RFC 2671, otherwise 512 is enough */
- }
- response;
- char *domain;
- int requested_type;
-int
-main ()
-{
-res_query(domain,
- C_IN,
- requested_type,
- (u_char *) & response,
- sizeof (response))
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }; LIBS="${LIBS} -lnsl"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking loc_ntoa" >&5
-$as_echo_n "checking loc_ntoa... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <resolv.h>
-int
-main ()
-{
-u_char *cp; char *result; loc_ntoa(cp, result)
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; };
-$as_echo "#define HAVE_LOC_NTOA /**/" >>confdefs.h
-
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using the alternative" >&5
-$as_echo "no, using the alternative" >&6; }; LOC_NTOA=loc_ntoa.o
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
-$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if ${ac_cv_c_const+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
-#ifndef __cplusplus
- /* Ultrix mips cc rejects this sort of thing. */
- typedef int charset[2];
- const charset cs = { 0, 0 };
- /* SunOS 4.1.1 cc rejects this. */
- char const *const *pcpcc;
- char **ppc;
- /* NEC SVR4.0.2 mips cc rejects this. */
- struct point {int x, y;};
- static struct point const zero = {0,0};
- /* AIX XL C 1.02.0.0 rejects this.
- It does not let you subtract one const X* pointer from another in
- an arm of an if-expression whose if-part is not a constant
- expression */
- const char *g = "string";
- pcpcc = &g + (g ? g-g : 0);
- /* HPUX 7.0 cc rejects these. */
- ++pcpcc;
- ppc = (char**) pcpcc;
- pcpcc = (char const *const *) ppc;
- { /* SCO 3.2v4 cc rejects this sort of thing. */
- char tx;
- char *t = &tx;
- char const *s = 0 ? (char *) 0 : (char const *) 0;
-
- *t++ = 0;
- if (s) return 0;
- }
- { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
- int x[] = {25, 17};
- const int *foo = &x[0];
- ++foo;
- }
- { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
- typedef const int *iptr;
- iptr p = 0;
- ++p;
- }
- { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
- "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
- struct s { int j; const int *ap[3]; } bx;
- struct s *b = &bx; b->j = 5;
- }
- { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
- const int foo = 10;
- if (!foo) return 0;
- }
- return !cs[0] && !zero.x;
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_const=yes
-else
- ac_cv_c_const=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
-$as_echo "$ac_cv_c_const" >&6; }
-if test $ac_cv_c_const = no; then
-
-$as_echo "#define const /**/" >>confdefs.h
-
-fi
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
-$as_echo_n "checking size of long... " >&6; }
-if ${ac_cv_sizeof_long+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then :
-
-else
- if test "$ac_cv_type_long" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (long)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_long=0
- fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
-$as_echo "$ac_cv_sizeof_long" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG $ac_cv_sizeof_long
-_ACEOF
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
-$as_echo_n "checking size of int... " >&6; }
-if ${ac_cv_sizeof_int+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then :
-
-else
- if test "$ac_cv_type_int" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (int)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_int=0
- fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
-$as_echo "$ac_cv_sizeof_int" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_INT $ac_cv_sizeof_int
-_ACEOF
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5
-$as_echo_n "checking size of short... " >&6; }
-if ${ac_cv_sizeof_short+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then :
-
-else
- if test "$ac_cv_type_short" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (short)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_short=0
- fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5
-$as_echo "$ac_cv_sizeof_short" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_SHORT $ac_cv_sizeof_short
-_ACEOF
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char" >&5
-$as_echo_n "checking size of char... " >&6; }
-if ${ac_cv_sizeof_char+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default"; then :
-
-else
- if test "$ac_cv_type_char" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (char)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_char=0
- fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5
-$as_echo "$ac_cv_sizeof_char" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_CHAR $ac_cv_sizeof_char
-_ACEOF
-
-
-
-ac_config_files="$ac_config_files Makefile"
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems. If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
- for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
-
- (set) 2>&1 |
- case $as_nl`(ac_space=' '; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- # `set' does not quote correctly, so add quotes: double-quote
- # substitution turns \\\\ into \\, and sed turns \\ into \.
- sed -n \
- "s/'/'\\\\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
- ;; #(
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
- if test ! -f "$cache_file" || test -h "$cache_file"; then
- cat confcache >"$cache_file"
- else
- case $cache_file in #(
- */* | ?:*)
- mv -f confcache "$cache_file"$$ &&
- mv -f "$cache_file"$$ "$cache_file" ;; #(
- *)
- mv -f confcache "$cache_file" ;;
- esac
- fi
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
- fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-
-SHELL=\${CONFIG_SHELL-$SHELL}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-case $ac_config_headers in *"
-"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
-esac
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_headers="$ac_config_headers"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration. Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- --config print configuration, then exit
- -q, --quiet, --silent
- do not print progress messages
- -d, --debug don't remove temporary files
- --recheck update $as_me by reconfiguring in the same conditions
- --file=FILE[:TEMPLATE]
- instantiate the configuration file FILE
- --header=FILE[:TEMPLATE]
- instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Report bugs to the package provider."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-config.status
-configured by $0, generated by GNU Autoconf 2.69,
- with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
- case $1 in
- --*=?*)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
- ac_shift=:
- ;;
- --*=)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=
- ac_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
- --config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- '') as_fn_error $? "missing file argument" ;;
- esac
- as_fn_append CONFIG_FILES " '$ac_optarg'"
- ac_need_defaults=false;;
- --header | --heade | --head | --hea )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- as_fn_append CONFIG_HEADERS " '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h)
- # Conflict between --help and --header
- as_fn_error $? "ambiguous option: \`$1'
-Try \`$0 --help' for more information.";;
- --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
- *) as_fn_append ac_config_targets " $1"
- ac_need_defaults=false ;;
-
- esac
- shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
- exec 6>/dev/null
- ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
- set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
- shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
- CONFIG_SHELL='$SHELL'
- export CONFIG_SHELL
- exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
- $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-
- *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
- esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used. Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
- test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
- tmp= ac_tmp=
- trap 'exit_status=$?
- : "${ac_tmp:=$tmp}"
- { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
- trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
- eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
- ac_cs_awk_cr='\\r'
-else
- ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
- echo "cat >conf$$subs.awk <<_ACEOF" &&
- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
- echo "_ACEOF"
-} >conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- . ./conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
- ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
- if test $ac_delim_n = $ac_delim_num; then
- break
- elif $ac_last_try; then
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
- N
- s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
- for (key in S) S_is_set[key] = 1
- FS = ""
-
-}
-{
- line = $ 0
- nfields = split(line, field, "@")
- substed = 0
- len = length(field[1])
- for (i = 2; i < nfields; i++) {
- key = field[i]
- keylen = length(key)
- if (S_is_set[key]) {
- value = S[key]
- line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
- len += length(value) + length(field[++i])
- substed = 1
- } else
- len += 1 + keylen
- }
-
- print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
- sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
- cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
- || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
-h
-s///
-s/^/:/
-s/[ ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[ ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[ ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-_ACEOF
-
-# Transform confdefs.h into an awk script `defines.awk', embedded as
-# here-document in config.status, that substitutes the proper values into
-# config.h.in to produce config.h.
-
-# Create a delimiter string that does not exist in confdefs.h, to ease
-# handling of long lines.
-ac_delim='%!_!# '
-for ac_last_try in false false :; do
- ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
- if test -z "$ac_tt"; then
- break
- elif $ac_last_try; then
- as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-
-# For the awk script, D is an array of macro values keyed by name,
-# likewise P contains macro parameters if any. Preserve backslash
-# newline sequences.
-
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-sed -n '
-s/.\{148\}/&'"$ac_delim"'/g
-t rset
-:rset
-s/^[ ]*#[ ]*define[ ][ ]*/ /
-t def
-d
-:def
-s/\\$//
-t bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3"/p
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
-d
-:bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3\\\\\\n"\\/p
-t cont
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
-t cont
-d
-:cont
-n
-s/.\{148\}/&'"$ac_delim"'/g
-t clear
-:clear
-s/\\$//
-t bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/"/p
-d
-:bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
-b cont
-' <confdefs.h | sed '
-s/'"$ac_delim"'/"\\\
-"/g' >>$CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- for (key in D) D_is_set[key] = 1
- FS = ""
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
- line = \$ 0
- split(line, arg, " ")
- if (arg[1] == "#") {
- defundef = arg[2]
- mac1 = arg[3]
- } else {
- defundef = substr(arg[1], 2)
- mac1 = arg[2]
- }
- split(mac1, mac2, "(") #)
- macro = mac2[1]
- prefix = substr(line, 1, index(line, defundef) - 1)
- if (D_is_set[macro]) {
- # Preserve the white space surrounding the "#".
- print prefix "define", macro P[macro] D[macro]
- next
- } else {
- # Replace #undef with comments. This is necessary, for example,
- # in the case of _POSIX_SOURCE, which is predefined and required
- # on some systems where configure will not decide to define it.
- if (defundef == "undef") {
- print "/*", prefix defundef, macro, "*/"
- next
- }
- }
-}
-{ print }
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
- as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
-fi # test -n "$CONFIG_HEADERS"
-
-
-eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS "
-shift
-for ac_tag
-do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
- :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
- esac
- ac_save_IFS=$IFS
- IFS=:
- set x $ac_tag
- IFS=$ac_save_IFS
- shift
- ac_file=$1
- shift
-
- case $ac_mode in
- :L) ac_source=$1;;
- :[FH])
- ac_file_inputs=
- for ac_f
- do
- case $ac_f in
- -) ac_f="$ac_tmp/stdin";;
- *) # Look for the file first in the build tree, then in the source tree
- # (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
- test -f "$ac_f" ||
- case $ac_f in
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
- as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
- esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
- as_fn_append ac_file_inputs " '$ac_f'"
- done
-
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
- `' by configure.'
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
- fi
- # Neutralize special characters interpreted by sed in replacement strings.
- case $configure_input in #(
- *\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
- sed 's/[\\\\&|]/\\\\&/g'`;; #(
- *) ac_sed_conf_input=$configure_input;;
- esac
-
- case $ac_tag in
- *:-:* | *:-) cat >"$ac_tmp/stdin" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
- esac
- ;;
- esac
-
- ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- as_dir="$ac_dir"; as_fn_mkdir_p
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
- case $INSTALL in
- [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
- esac
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
- p
- q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
- s&@infodir@&$infodir&g
- s&@localedir@&$localedir&g
- s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
- >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
- "$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&2;}
-
- rm -f "$ac_tmp/stdin"
- case $ac_file in
- -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
- *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
- esac \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
- :H)
- #
- # CONFIG_HEADER
- #
- if test x"$ac_file" != x-; then
- {
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
- } >"$ac_tmp/config.h" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
- else
- rm -f "$ac_file"
- mv "$ac_tmp/config.h" "$ac_file" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- fi
- else
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
- || as_fn_error $? "could not create -" "$LINENO" 5
- fi
- ;;
-
-
- esac
-
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
- as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded. So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status. When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
- ac_cs_success=:
- ac_config_status_args=
- test "$silent" = yes &&
- ac_config_status_args="$ac_config_status_args --quiet"
- exec 5>/dev/null
- $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
- exec 5>>config.log
- # Use ||, not &&, to avoid exiting from the if with $? = 1, which
- # would make configure fail if this is the last instruction.
- $ac_cs_success || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
diff --git a/contrib/query-loc-0.4.0/configure.in b/contrib/query-loc-0.4.0/configure.in
deleted file mode 100644
index 47b8a8ca..00000000
--- a/contrib/query-loc-0.4.0/configure.in
+++ /dev/null
@@ -1,66 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-AC_RELEASE("$Id: configure.in,v 1.1 2008/02/15 01:47:15 marka Exp $")
-AC_INIT(query-loc.c)
-
-dnl Checks for programs.
-AC_PROG_CC
-if test "$GCC" = "yes"; then
- CFLAGS="${CFLAGS} -Wall"
-fi
-AC_PROG_INSTALL
-
-dnl Checks for libraries.
-AC_CHECK_LIB(resolv, res_query)
-
-dnl Checks for header files.
-AC_HEADER_STDC
-AC_CONFIG_HEADER(config.h)
-AC_CHECK_HEADER(resolv.h, , AC_MSG_ERROR("No headers for name service applications"))
-AC_CHECK_HEADER(arpa/nameser.h, , AC_MSG_ERROR("No headers for name service applications"))
-AC_CHECK_HEADERS(arpa/nameser_compat.h)
-AC_CHECK_HEADER(sys/time.h, , AC_MSG_ERROR("Mandatory header missing on your system"))
-AC_CHECK_HEADER(unistd.h, , AC_MSG_ERROR("Mandatory header missing on your system"))
-
-
-dnl This one is only useful for Solaris?
-AC_MSG_CHECKING(if libnsl is mandatory)
-AC_TRY_LINK([#include <sys/types.h>
- #include <netinet/in.h>
- #include <arpa/nameser.h>
- #ifdef HAVE_ARPA_NAMESER_COMPAT_H
- #include <arpa/nameser_compat.h>
- #endif
- #include <resolv.h>
- union
- {
- HEADER hdr;
- u_char buf[4096]; /* With RFC 2671, otherwise 512 is enough */
- }
- response;
- char *domain;
- int requested_type; ],
- [res_query(domain,
- C_IN,
- requested_type,
- (u_char *) & response,
- sizeof (response)) ],
- [AC_MSG_RESULT(no)],
- [AC_MSG_RESULT(yes); LIBS="${LIBS} -lnsl"])
-
-dnl Check for the loc_ntoa macro/function
-AC_MSG_CHECKING(loc_ntoa)
-AC_TRY_LINK([#include <resolv.h>],
- [u_char *cp; char *result; loc_ntoa(cp, result)],
- [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_LOC_NTOA,,[Is there a loc_ntoa on this system?])],
- [AC_MSG_RESULT([no, using the alternative]); LOC_NTOA=loc_ntoa.o])
-AC_SUBST(LOC_NTOA)
-
-dnl Checks for typedefs, structures, and compiler characteristics.
-AC_C_CONST
-AC_CHECK_SIZEOF(long)
-AC_CHECK_SIZEOF(int)
-AC_CHECK_SIZEOF(short)
-AC_CHECK_SIZEOF(char)
-
-dnl Misc.
-AC_OUTPUT(Makefile)
diff --git a/contrib/query-loc-0.4.0/install-sh b/contrib/query-loc-0.4.0/install-sh
deleted file mode 100755
index 1a835340..00000000
--- a/contrib/query-loc-0.4.0/install-sh
+++ /dev/null
@@ -1,323 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2005-02-02.21
-
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
-# later released in X11R6 (xc/config/util/install.sh) with the
-# following copyright and license.
-#
-# Copyright (C) 1994 X Consortium
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Except as contained in this notice, the name of the X Consortium shall not
-# be used in advertising or otherwise to promote the sale, use or other deal-
-# ings in this Software without prior written authorization from the X Consor-
-# tium.
-#
-#
-# FSF changes to this file are in the public domain.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch. It can only install one file at a time, a restriction
-# shared with many OS's install programs.
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-chmodcmd="$chmodprog 0755"
-chowncmd=
-chgrpcmd=
-stripcmd=
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=
-dst=
-dir_arg=
-dstarg=
-no_target_directory=
-
-usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
- or: $0 [OPTION]... SRCFILES... DIRECTORY
- or: $0 [OPTION]... -t DIRECTORY SRCFILES...
- or: $0 [OPTION]... -d DIRECTORIES...
-
-In the 1st form, copy SRCFILE to DSTFILE.
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-In the 4th, create DIRECTORIES.
-
-Options:
--c (ignored)
--d create directories instead of installing files.
--g GROUP $chgrpprog installed files to GROUP.
--m MODE $chmodprog installed files to MODE.
--o USER $chownprog installed files to USER.
--s $stripprog installed files.
--t DIRECTORY install into DIRECTORY.
--T report an error if DSTFILE is a directory.
---help display this help and exit.
---version display version info and exit.
-
-Environment variables override the default commands:
- CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
-"
-
-while test -n "$1"; do
- case $1 in
- -c) shift
- continue;;
-
- -d) dir_arg=true
- shift
- continue;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift
- shift
- continue;;
-
- --help) echo "$usage"; exit $?;;
-
- -m) chmodcmd="$chmodprog $2"
- shift
- shift
- continue;;
-
- -o) chowncmd="$chownprog $2"
- shift
- shift
- continue;;
-
- -s) stripcmd=$stripprog
- shift
- continue;;
-
- -t) dstarg=$2
- shift
- shift
- continue;;
-
- -T) no_target_directory=true
- shift
- continue;;
-
- --version) echo "$0 $scriptversion"; exit $?;;
-
- *) # When -d is used, all remaining arguments are directories to create.
- # When -t is used, the destination is already specified.
- test -n "$dir_arg$dstarg" && break
- # Otherwise, the last argument is the destination. Remove it from $@.
- for arg
- do
- if test -n "$dstarg"; then
- # $@ is not empty: it contains at least $arg.
- set fnord "$@" "$dstarg"
- shift # fnord
- fi
- shift # arg
- dstarg=$arg
- done
- break;;
- esac
-done
-
-if test -z "$1"; then
- if test -z "$dir_arg"; then
- echo "$0: no input file specified." >&2
- exit 1
- fi
- # It's OK to call `install-sh -d' without argument.
- # This can happen when creating conditional directories.
- exit 0
-fi
-
-for src
-do
- # Protect names starting with `-'.
- case $src in
- -*) src=./$src ;;
- esac
-
- if test -n "$dir_arg"; then
- dst=$src
- src=
-
- if test -d "$dst"; then
- mkdircmd=:
- chmodcmd=
- else
- mkdircmd=$mkdirprog
- fi
- else
- # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
- # might cause directories to be created, which would be especially bad
- # if $src (and thus $dsttmp) contains '*'.
- if test ! -f "$src" && test ! -d "$src"; then
- echo "$0: $src does not exist." >&2
- exit 1
- fi
-
- if test -z "$dstarg"; then
- echo "$0: no destination specified." >&2
- exit 1
- fi
-
- dst=$dstarg
- # Protect names starting with `-'.
- case $dst in
- -*) dst=./$dst ;;
- esac
-
- # If destination is a directory, append the input filename; won't work
- # if double slashes aren't ignored.
- if test -d "$dst"; then
- if test -n "$no_target_directory"; then
- echo "$0: $dstarg: Is a directory" >&2
- exit 1
- fi
- dst=$dst/`basename "$src"`
- fi
- fi
-
- # This sed command emulates the dirname command.
- dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
-
- # Make sure that the destination directory exists.
-
- # Skip lots of stat calls in the usual case.
- if test ! -d "$dstdir"; then
- defaultIFS='
- '
- IFS="${IFS-$defaultIFS}"
-
- oIFS=$IFS
- # Some sh's can't handle IFS=/ for some reason.
- IFS='%'
- set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
- shift
- IFS=$oIFS
-
- pathcomp=
-
- while test $# -ne 0 ; do
- pathcomp=$pathcomp$1
- shift
- if test ! -d "$pathcomp"; then
- $mkdirprog "$pathcomp"
- # mkdir can fail with a `File exist' error in case several
- # install-sh are creating the directory concurrently. This
- # is OK.
- test -d "$pathcomp" || exit
- fi
- pathcomp=$pathcomp/
- done
- fi
-
- if test -n "$dir_arg"; then
- $doit $mkdircmd "$dst" \
- && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
- && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
- && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
- && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
-
- else
- dstfile=`basename "$dst"`
-
- # Make a couple of temp file names in the proper directory.
- dsttmp=$dstdir/_inst.$$_
- rmtmp=$dstdir/_rm.$$_
-
- # Trap to clean up those temp files at exit.
- trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
- trap '(exit $?); exit' 1 2 13 15
-
- # Copy the file name to the temp name.
- $doit $cpprog "$src" "$dsttmp" &&
-
- # and set any options; do chmod last to preserve setuid bits.
- #
- # If any of these fail, we abort the whole thing. If we want to
- # ignore errors from any of these, just make sure not to ignore
- # errors from the above "$doit $cpprog $src $dsttmp" command.
- #
- { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
- && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
- && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
- && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
-
- # Now rename the file to the real destination.
- { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
- || {
- # The rename failed, perhaps because mv can't rename something else
- # to itself, or perhaps because mv is so ancient that it does not
- # support -f.
-
- # Now remove or move aside any old file at destination location.
- # We try this two ways since rm can't unlink itself on some
- # systems and the destination file might be busy for other
- # reasons. In this case, the final cleanup might fail but the new
- # file should still install successfully.
- {
- if test -f "$dstdir/$dstfile"; then
- $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
- || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
- || {
- echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
- (exit 1); exit 1
- }
- else
- :
- fi
- } &&
-
- # Now rename the file to the real destination.
- $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
- }
- }
- fi || { (exit 1); exit 1; }
-done
-
-# The final little trick to "correctly" pass the exit status to the exit trap.
-{
- (exit 0); exit 0
-}
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/contrib/query-loc-0.4.0/loc.c b/contrib/query-loc-0.4.0/loc.c
deleted file mode 100644
index d02ddead..00000000
--- a/contrib/query-loc-0.4.0/loc.c
+++ /dev/null
@@ -1,602 +0,0 @@
-#include "loc.h"
-
-/* $Id: loc.c,v 1.1 2008/02/15 01:47:15 marka Exp $ */
-
-/* Global variables */
-
-short rr_errno;
-
-/*
- Prints the actual usage
- */
-void
-usage ()
-{
- (void) fprintf (stderr,
- "Usage: %s: [-v] [-d nnn] hostname\n", progname);
- exit (2);
-}
-
-/*
- Panics
- */
-void
-panic (message)
- char *message;
-{
- (void) fprintf (stderr,
- "%s: %s\n", progname, message);
- exit (2);
-}
-
-/*
- ** IN_ADDR_ARPA -- Convert dotted quad string to reverse in-addr.arpa
- ** ------------------------------------------------------------------
- **
- ** Returns:
- ** Pointer to appropriate reverse in-addr.arpa name
- ** with trailing dot to force absolute domain name.
- ** NULL in case of invalid dotted quad input string.
- */
-
-#ifndef ARPA_ROOT
-#define ARPA_ROOT "in-addr.arpa"
-#endif
-
-char *
-in_addr_arpa (dottedquad)
- char *dottedquad; /* input string with dotted quad */
-{
- static char addrbuf[4 * 4 + sizeof (ARPA_ROOT) + 2];
- unsigned int a[4];
- register int n;
-
- n = sscanf (dottedquad, "%u.%u.%u.%u", &a[0], &a[1], &a[2], &a[3]);
- switch (n)
- {
- case 4:
- (void) sprintf (addrbuf, "%u.%u.%u.%u.%s.",
- a[3] & 0xff, a[2] & 0xff, a[1] & 0xff, a[0] & 0xff, ARPA_ROOT);
- break;
-
- case 3:
- (void) sprintf (addrbuf, "%u.%u.%u.%s.",
- a[2] & 0xff, a[1] & 0xff, a[0] & 0xff, ARPA_ROOT);
- break;
-
- case 2:
- (void) sprintf (addrbuf, "%u.%u.%s.",
- a[1] & 0xff, a[0] & 0xff, ARPA_ROOT);
- break;
-
- case 1:
- (void) sprintf (addrbuf, "%u.%s.",
- a[0] & 0xff, ARPA_ROOT);
- break;
-
- default:
- return (NULL);
- }
-
- while (--n >= 0)
- if (a[n] > 255)
- return (NULL);
-
- return (addrbuf);
-}
-
-/*
- Returns a human-readable version of the LOC information or
- NULL if it failed. Argument is a name (of a network or a machine)
- and a boolean telling is it is a network name or a machine name.
- */
-char *
-getlocbyname (name, is_network)
- const char *name;
- short is_network;
-{
- char *result;
- struct list_in_addr *list, *p;
- result = findRR (name, T_LOC);
- if (result != NULL)
- {
- if (debug >= 2)
- printf ("LOC record found for the name %s\n", name);
- return result;
- }
- else
- {
- if (!is_network)
- {
- list = findA (name);
- if (debug >= 2)
- printf ("No LOC record found for the name %s, trying addresses\n", name);
- if (list != NULL)
- {
- for (p = list; p != NULL; p = p->next)
- {
- if (debug >= 2)
- printf ("Trying address %s\n", inet_ntoa (p->addr));
- result = getlocbyaddr (p->addr, NULL);
- if (result != NULL)
- return result;
- }
- return NULL;
- }
- else
- {
- if (debug >= 2)
- printf (" No A record found for %s\n", name);
- return NULL;
- }
- }
- else
- {
- if (debug >= 2)
- printf ("No LOC record found for the network name %s\n", name);
- return NULL;
- }
- }
-}
-
-/*
- Returns a human-readable version of the LOC information or
- NULL if it failed. Argument is an IP address.
- */
-char *
-getlocbyaddr (addr, mask)
- const struct in_addr addr;
- const struct in_addr *mask;
-{
- struct in_addr netaddr;
- u_int32_t a;
- struct in_addr themask;
- char text_addr[sizeof("255.255.255.255")],
- text_mask[sizeof("255.255.255.255")];
-
- if (mask == NULL)
- {
- themask.s_addr = (u_int32_t) 0;
- }
- else
- {
- themask = *mask;
- }
-
- strcpy (text_addr, inet_ntoa (addr));
- strcpy (text_mask, inet_ntoa (themask));
-
- if (debug >= 2)
- printf ("Testing address %s/%s\n", text_addr, text_mask);
-
- if (mask == NULL)
- {
- a = ntohl (addr.s_addr);
- if (IN_CLASSA (a))
- {
- netaddr.s_addr = htonl (a & IN_CLASSA_NET);
- themask.s_addr = htonl(IN_CLASSA_NET);
- }
- else if (IN_CLASSB (a))
- {
- netaddr.s_addr = htonl (a & IN_CLASSB_NET);
- themask.s_addr = htonl(IN_CLASSB_NET);
- }
- else if (IN_CLASSC (a))
- {
- netaddr.s_addr = htonl (a & IN_CLASSC_NET);
- themask.s_addr = htonl(IN_CLASSC_NET);
- }
- else
- {
- /* Error */
- return NULL;
- }
- return getlocbynet (in_addr_arpa (inet_ntoa (netaddr)), addr, &themask);
- }
- else
- {
- netaddr.s_addr = addr.s_addr & themask.s_addr;
- return getlocbynet (in_addr_arpa (inet_ntoa (netaddr)), addr, mask);
- }
-}
-
-/*
- Returns a human-readable LOC.
- Argument is a network name in the 0.z.y.x.in-addr.arpa format
- and the original address
- */
-char *
-getlocbynet (name, addr, mask)
- char *name;
- struct in_addr addr;
- struct in_addr *mask;
-{
- char *network;
- char *result;
- struct list_in_addr *list;
- struct in_addr newmask;
- u_int32_t a;
- char newname[4 * 4 + sizeof (ARPA_ROOT) + 2];
-
- if (debug >= 2)
- printf ("Testing network %s with mask %s\n", name, inet_ntoa(*mask));
-
- /* Check if this network has an A RR */
- list = findA (name);
- if (list != NULL)
- {
- /* Yes, it does. This A record will be used as the
- * new mask for recursion if it is longer than
- * the actual mask. */
- if (mask != NULL && mask->s_addr < list->addr.s_addr)
- {
- /* compute the new arguments for recursion
- * - compute the new network by applying the new mask
- * to the address and get the in_addr_arpa representation
- * of it.
- * - the address remains unchanged
- * - the new mask is the one given in the A record
- */
- a = ntohl(addr.s_addr); /* start from host address */
- a &= ntohl(list->addr.s_addr); /* apply new mask */
- newname[sizeof newname - 1] = 0;
- strncpy(
- newname,
- in_addr_arpa(inet_ntoa(inet_makeaddr(a, 0))),
- sizeof newname);
- newmask = inet_makeaddr(ntohl(list->addr.s_addr), 0);
- result = getlocbynet (newname, addr, &newmask);
- if (result != NULL)
- {
- return result;
- }
- }
- /* couldn't find a LOC. Fall through and try with name */
- }
-
- /* Check if this network has a name */
- network = findRR (name, T_PTR);
- if (network == NULL)
- {
- if (debug >= 2)
- printf ("No name for network %s\n", name);
- return NULL;
- }
- else
- {
- return getlocbyname (network, TRUE);
- }
-}
-
-/*
- The code for these two functions is stolen from the examples in Liu and Albitz
- book "DNS and BIND" (O'Reilly).
- */
-
-/****************************************************************
- * skipName -- This routine skips over a domain name. If the *
- * domain name expansion fails, it crashes. *
- * dn_skipname() is probably not on your manual *
- * page; it is similar to dn_expand() except that it just *
- * skips over the name. dn_skipname() is in res_comp.c if *
- * you need to find it. *
- ****************************************************************/
-int
-skipName (cp, endOfMsg)
- u_char *cp;
- u_char *endOfMsg;
-{
- int n;
-
- if ((n = dn_skipname (cp, endOfMsg)) < 0)
- {
- panic ("dn_skipname failed\n");
- }
- return (n);
-}
-
-/****************************************************************
- * skipToData -- This routine advances the cp pointer to the *
- * start of the resource record data portion. On the way, *
- * it fills in the type, class, ttl, and data length *
- ****************************************************************/
-int
-skipToData (cp, type, class, ttl, dlen, endOfMsg)
- u_char *cp;
- u_short *type;
- u_short *class;
- u_int32_t *ttl;
- u_short *dlen;
- u_char *endOfMsg;
-{
- u_char *tmp_cp = cp; /* temporary version of cp */
-
- /* Skip the domain name; it matches the name we looked up */
- tmp_cp += skipName (tmp_cp, endOfMsg);
-
- /*
- * Grab the type, class, and ttl. GETSHORT and GETLONG
- * are macros defined in arpa/nameser.h.
- */
- GETSHORT (*type, tmp_cp);
- GETSHORT (*class, tmp_cp);
- GETLONG (*ttl, tmp_cp);
- GETSHORT (*dlen, tmp_cp);
-
- return (tmp_cp - cp);
-}
-
-
-/*
- Returns a human-readable version of a DNS RR (resource record)
- associated with the name 'domain'.
- If it does not find, ir returns NULL and sets rr_errno to explain why.
-
- The code for this function is stolen from the examples in Liu and Albitz
- book "DNS and BIND" (O'Reilly).
- */
-char *
-findRR (domain, requested_type)
- char *domain;
- int requested_type;
-{
- char *result, *message;
-
- union
- {
- HEADER hdr; /* defined in resolv.h */
- u_char buf[PACKETSZ]; /* defined in arpa/nameser.h */
- }
- response; /* response buffers */
-short found = 0;
-int responseLen; /* buffer length */
-
- u_char *cp; /* character pointer to parse DNS packet */
- u_char *endOfMsg; /* need to know the end of the message */
- u_short class; /* classes defined in arpa/nameser.h */
- u_short type; /* types defined in arpa/nameser.h */
- u_int32_t ttl; /* resource record time to live */
- u_short dlen; /* size of resource record data */
-
- int i, count, dup; /* misc variables */
-
- char *ptrList[1];
- int ptrNum = 0;
- struct in_addr addr;
-
- result = (char *) malloc (256);
- message = (char *) malloc (256);
- if (result == NULL || message == NULL)
- {
- panic ("Malloc failed");
- }
- /*
- * Look up the records for the given domain name.
- * We expect the domain to be a fully qualified name, so
- * we use res_query(). If we wanted the resolver search
- * algorithm, we would have used res_search() instead.
- */
- if ((responseLen =
- res_query (domain, /* the domain we care about */
- C_IN, /* Internet class records */
- requested_type, /* Look up name server records */
- (u_char *) & response, /*response buffer */
- sizeof (response))) /*buffer size */
- < 0)
- { /*If negative */
- rr_errno = h_errno;
- return NULL;
- }
-
- /*
- * Keep track of the end of the message so we don't
- * pass it while parsing the response. responseLen is
- * the value returned by res_query.
- */
- endOfMsg = response.buf + responseLen;
-
- /*
- * Set a pointer to the start of the question section,
- * which begins immediately AFTER the header.
- */
- cp = response.buf + sizeof (HEADER);
-
- /*
- * Skip over the whole question section. The question
- * section is comprised of a name, a type, and a class.
- * QFIXEDSZ (defined in arpa/nameser.h) is the size of
- * the type and class portions, which is fixed. Therefore,
- * we can skip the question section by skipping the
- * name (at the beginning) and then advancing QFIXEDSZ.
- * After this calculation, cp points to the start of the
- * answer section, which is a list of NS records.
- */
- cp += skipName (cp, endOfMsg) + QFIXEDSZ;
-
- count = ntohs (response.hdr.ancount) +
- ntohs (response.hdr.nscount);
- while ((--count >= 0) /* still more records */
- && (cp < endOfMsg))
- { /* still inside the packet */
-
-
- /* Skip to the data portion of the resource record */
- cp += skipToData (cp, &type, &class, &ttl, &dlen, endOfMsg);
-
- if (type == requested_type)
- {
- switch (requested_type)
- {
- case (T_LOC):
- loc_ntoa (cp, result);
- return result;
- break;
- case (T_PTR):
- ptrList[ptrNum] = (char *) malloc (MAXDNAME);
- if (ptrList[ptrNum] == NULL)
- {
- panic ("Malloc failed");
- }
-
- if (dn_expand (response.buf, /* Start of the packet */
- endOfMsg, /* End of the packet */
- cp, /* Position in the packet */
- (char *) ptrList[ptrNum], /* Result */
- MAXDNAME) /* size of ptrList buffer */
- < 0)
- { /* Negative: error */
- panic ("dn_expand failed");
- }
-
- /*
- * Check the name we've just unpacked and add it to
- * the list if it is not a duplicate.
- * If it is a duplicate, just ignore it.
- */
- for (i = 0, dup = 0; (i < ptrNum) && !dup; i++)
- dup = !strcasecmp (ptrList[i], ptrList[ptrNum]);
- if (dup)
- free (ptrList[ptrNum]);
- else
- ptrNum++;
- strcpy (result, ptrList[0]);
- return result;
- break;
- case (T_A):
- bcopy ((char *) cp, (char *) &addr, INADDRSZ);
- strcat (result, " ");
- strcat (result, inet_ntoa (addr));
- found = 1;
- break;
- default:
- sprintf (message, "Unexpected type %u", requested_type);
- panic (message);
- }
- }
-
- /* Advance the pointer over the resource record data */
- cp += dlen;
-
- } /* end of while */
- if (found)
- return result;
-else
-return NULL;
-}
-
-struct list_in_addr *
-findA (domain)
- char *domain;
-{
-
- struct list_in_addr *result, *end;
-
- union
- {
- HEADER hdr; /* defined in resolv.h */
- u_char buf[PACKETSZ]; /* defined in arpa/nameser.h */
- }
- response; /* response buffers */
- int responseLen; /* buffer length */
-
- u_char *cp; /* character pointer to parse DNS packet */
- u_char *endOfMsg; /* need to know the end of the message */
- u_short class; /* classes defined in arpa/nameser.h */
- u_short type; /* types defined in arpa/nameser.h */
- u_int32_t ttl; /* resource record time to live */
- u_short dlen; /* size of resource record data */
-
- int count; /* misc variables */
-
- struct in_addr addr;
-
- end = NULL;
- result = NULL;
-
- /*
- * Look up the records for the given domain name.
- * We expect the domain to be a fully qualified name, so
- * we use res_query(). If we wanted the resolver search
- * algorithm, we would have used res_search() instead.
- */
- if ((responseLen =
- res_query (domain, /* the domain we care about */
- C_IN, /* Internet class records */
- T_A,
- (u_char *) & response, /*response buffer */
- sizeof (response))) /*buffer size */
- < 0)
- { /*If negative */
- rr_errno = h_errno;
- return NULL;
- }
-
- /*
- * Keep track of the end of the message so we don't
- * pass it while parsing the response. responseLen is
- * the value returned by res_query.
- */
- endOfMsg = response.buf + responseLen;
-
- /*
- * Set a pointer to the start of the question section,
- * which begins immediately AFTER the header.
- */
- cp = response.buf + sizeof (HEADER);
-
- /*
- * Skip over the whole question section. The question
- * section is comprised of a name, a type, and a class.
- * QFIXEDSZ (defined in arpa/nameser.h) is the size of
- * the type and class portions, which is fixed. Therefore,
- * we can skip the question section by skipping the
- * name (at the beginning) and then advancing QFIXEDSZ.
- * After this calculation, cp points to the start of the
- * answer section, which is a list of NS records.
- */
- cp += skipName (cp, endOfMsg) + QFIXEDSZ;
-
- count = ntohs (response.hdr.ancount) +
- ntohs (response.hdr.nscount);
- while ((--count >= 0) /* still more records */
- && (cp < endOfMsg))
- { /* still inside the packet */
-
-
- /* Skip to the data portion of the resource record */
- cp += skipToData (cp, &type, &class, &ttl, &dlen, endOfMsg);
-
- if (type == T_A)
- {
- bcopy ((char *) cp, (char *) &addr, INADDRSZ);
- if (end == NULL)
- {
- result = (void *) malloc (sizeof (struct list_in_addr));
- if (result == NULL)
- {
- panic ("Malloc failed");
- }
- result->addr = addr;
- result->next = NULL;
- end = result;
- }
- else
- {
- end->next = (void *) malloc (sizeof (struct list_in_addr));
- if (end->next == NULL)
- {
- panic ("Malloc failed");
- }
- end = end->next;
- end->addr = addr;
- end->next = NULL;
- }
- }
-
- /* Advance the pointer over the resource record data */
- cp += dlen;
-
- } /* end of while */
- return result;
-}
diff --git a/contrib/query-loc-0.4.0/loc.h b/contrib/query-loc-0.4.0/loc.h
deleted file mode 100644
index 92bfbc2a..00000000
--- a/contrib/query-loc-0.4.0/loc.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/* $Id: loc.h,v 1.1 2008/02/15 01:47:15 marka Exp $ */
-
-#define VERSION "0.4.0"
-
-#include "config.h"
-
-/* Probably too many inclusions but this is to keep 'gcc -Wall' happy... */
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <netdb.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <sys/time.h>
-#include <errno.h>
-#include <unistd.h>
-#include <string.h>
-#include <signal.h>
-#include <arpa/nameser.h>
-#ifdef HAVE_ARPA_NAMESER_COMPAT_H
-#include <arpa/nameser_compat.h>
-#endif
-#include <resolv.h>
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#if SIZEOF_LONG == 4
-#define u_int32_t unsigned long
-#ifndef int32_t
-#define int32_t long
-#endif
-#else
-#define u_int32_t unsigned int
-#ifndef int32_t
-#define int32_t int
-#endif
-#endif
-
-#if SIZEOF_CHAR == 1
-#define u_int8_t unsigned char
-#ifndef int8_t
-#define int8_t char
-#endif
-#else
-#if SIZEOF_SHORT == 1
-#define u_int8_t unsigned short
-#ifndef int8_t
-#define int8_t short
-#endif
-#else
-#error "No suitable native type for storing bytes"
-#endif
-#endif
-
-#ifndef INADDR_NONE
-#define INADDR_NONE (in_addr_t)-1
-#endif
-
-struct list_in_addr
- {
- struct in_addr addr;
- void *next;
- };
-
-void usage ();
-void panic ();
-
-char *getlocbyname ();
-char *getlocbyaddr ();
-char *getlocbynet ();
-char *findRR ();
-struct list_in_addr *findA ();
-
-extern char *progname;
-extern short debug;
diff --git a/contrib/query-loc-0.4.0/loc_ntoa.c b/contrib/query-loc-0.4.0/loc_ntoa.c
deleted file mode 100644
index e631b0e7..00000000
--- a/contrib/query-loc-0.4.0/loc_ntoa.c
+++ /dev/null
@@ -1,235 +0,0 @@
-/* Stolen from BIND */
-
-/*
- * Copyright (c) 1985
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Portions Copyright (c) 1993 by Digital Equipment Corporation.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies, and that
- * the name of Digital Equipment Corporation not be used in advertising or
- * publicity pertaining to distribution of the document or software without
- * specific, written prior permission.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
- * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/*
- * Portions Copyright (c) 1995 by International Business Machines, Inc.
- *
- * International Business Machines, Inc. (hereinafter called IBM) grants
- * permission under its copyrights to use, copy, modify, and distribute this
- * Software with or without fee, provided that the above copyright notice and
- * all paragraphs of this notice appear in all copies, and that the name of IBM
- * not be used in connection with the marketing of any product incorporating
- * the Software or modifications thereof, without specific, written prior
- * permission.
- *
- * To the extent it has a right to do so, IBM grants an immunity from suit
- * under its patents, if any, for the use, sale or manufacture of products to
- * the extent that such products are used for performing Domain Name System
- * dynamic updates in TCP/IP networks by means of the Software. No immunity is
- * granted for any product per se or for any other function of any product.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL,
- * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN
- * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-/*
- * Copyright (C) 1996-1999, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-
-#include <ctype.h>
-#include <errno.h>
-#include <math.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#include "loc.h"
-
-const char *precsize_ntoa();
-
-/* takes an on-the-wire LOC RR and formats it in a human readable format. */
-const char *
-loc_ntoa(binary, ascii)
- const u_char *binary;
- char *ascii;
-{
- static char *error = "?";
- static char tmpbuf[sizeof
-"1000 60 60.000 N 1000 60 60.000 W -12345678.00m 90000000.00m 90000000.00m 90000000.00m"];
- const u_char *cp = binary;
-
- int latdeg, latmin, latsec, latsecfrac;
- int longdeg, longmin, longsec, longsecfrac;
- char northsouth, eastwest;
- int altmeters, altfrac, altsign;
-
- const u_int32_t referencealt = 100000 * 100;
-
- int32_t latval, longval, altval;
- u_int32_t templ;
- u_int8_t sizeval, hpval, vpval, versionval;
-
- char *sizestr, *hpstr, *vpstr;
-
- versionval = *cp++;
-
- if (ascii == NULL)
- ascii = tmpbuf;
-
- if (versionval) {
- (void) sprintf(ascii, "; error: unknown LOC RR version");
- return (ascii);
- }
-
- sizeval = *cp++;
-
- hpval = *cp++;
- vpval = *cp++;
-
- GETLONG(templ, cp);
- latval = (templ - ((unsigned)1<<31));
-
- GETLONG(templ, cp);
- longval = (templ - ((unsigned)1<<31));
-
- GETLONG(templ, cp);
- if (templ < referencealt) { /* below WGS 84 spheroid */
- altval = referencealt - templ;
- altsign = -1;
- } else {
- altval = templ - referencealt;
- altsign = 1;
- }
-
- if (latval < 0) {
- northsouth = 'S';
- latval = -latval;
- } else
- northsouth = 'N';
-
- latsecfrac = latval % 1000;
- latval = latval / 1000;
- latsec = latval % 60;
- latval = latval / 60;
- latmin = latval % 60;
- latval = latval / 60;
- latdeg = latval;
-
- if (longval < 0) {
- eastwest = 'W';
- longval = -longval;
- } else
- eastwest = 'E';
-
- longsecfrac = longval % 1000;
- longval = longval / 1000;
- longsec = longval % 60;
- longval = longval / 60;
- longmin = longval % 60;
- longval = longval / 60;
- longdeg = longval;
-
- altfrac = altval % 100;
- altmeters = (altval / 100) * altsign;
-
- if ((sizestr = strdup(precsize_ntoa(sizeval))) == NULL)
- sizestr = error;
- if ((hpstr = strdup(precsize_ntoa(hpval))) == NULL)
- hpstr = error;
- if ((vpstr = strdup(precsize_ntoa(vpval))) == NULL)
- vpstr = error;
-
- sprintf(ascii,
- "%d %.2d %.2d.%.3d %c %d %.2d %.2d.%.3d %c %d.%.2dm %sm %sm %sm",
- latdeg, latmin, latsec, latsecfrac, northsouth,
- longdeg, longmin, longsec, longsecfrac, eastwest,
- altmeters, altfrac, sizestr, hpstr, vpstr);
-
- if (sizestr != error)
- free(sizestr);
- if (hpstr != error)
- free(hpstr);
- if (vpstr != error)
- free(vpstr);
-
- return (ascii);
-}
-
-static unsigned int poweroften[10] = {1, 10, 100, 1000, 10000, 100000,
- 1000000,10000000,100000000,1000000000};
-
-/* takes an XeY precision/size value, returns a string representation. */
-const char *
-precsize_ntoa(prec)
- u_int8_t prec;
-{
- static char retbuf[sizeof "90000000.00"]; /* XXX nonreentrant */
- unsigned long val;
- int mantissa, exponent;
-
- mantissa = (int)((prec >> 4) & 0x0f) % 10;
- exponent = (int)((prec >> 0) & 0x0f) % 10;
-
- val = mantissa * poweroften[exponent];
-
- (void) sprintf(retbuf, "%ld.%.2ld", val/100, val%100);
- return (retbuf);
-}
-
diff --git a/contrib/query-loc-0.4.0/query-loc.1 b/contrib/query-loc-0.4.0/query-loc.1
deleted file mode 100644
index df55b4d8..00000000
--- a/contrib/query-loc-0.4.0/query-loc.1
+++ /dev/null
@@ -1,55 +0,0 @@
-.\" Hey, EMACS: -*- nroff -*-
-.\" First parameter, NAME, should be all caps
-.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
-.\" other parameters are allowed: see man(7), man(1)
-.TH QUERY-LOC 1 "January 11, 2005"
-.\" Please adjust this date whenever revising the manpage.
-.\"
-.\" Some roff macros, for reference:
-.\" .nh disable hyphenation
-.\" .hy enable hyphenation
-.\" .ad l left justify
-.\" .ad b justify to both left and right margins
-.\" .nf disable filling
-.\" .fi enable filling
-.\" .br insert line break
-.\" .sp <n> insert n+1 empty lines
-.\" for manpage-specific macros, see man(7)
-.SH NAME
-query-loc \- to retrieve and display the location information in the DNS
-.SH SYNOPSIS
-.B query-loc
-.RI [-v] [-d nnn] " host"
-.SH DESCRIPTION
-This manual page documents briefly the
-.B query-loc
-command.
-.PP
-.\" TeX users may be more comfortable with the \fB<whatever>\fP and
-.\" \fI<whatever>\fP escape sequences to invode bold face and italics,
-.\" respectively.
-\fBquery-loc\fP is a program to retrieve and display the location
-information in the DNS.
-
-It uses the algorithms described in
-RFC 1876 (and RFC 1101 to get the network names).
-You can find examples of networks wchich implement this scheme
-in the ADDRESSES file.
-
-.SH OPTIONS
-.TP
-.B \-v
-Verbose mode.
-.TP
-.B \-d nnn
-Debug mode. Displays the RFC's algorithm
-
-.SH BUGS
-
-Very few hosts have location information.
-
-.SH AUTHOR
-This manual page was written by Stephane Bortzmeyer
-<bortzmeyer@debian.org>.
-
-.\" $Id: query-loc.1,v 1.1 2008/02/15 01:47:15 marka Exp $
diff --git a/contrib/query-loc-0.4.0/query-loc.c b/contrib/query-loc-0.4.0/query-loc.c
deleted file mode 100644
index 2492d5b0..00000000
--- a/contrib/query-loc-0.4.0/query-loc.c
+++ /dev/null
@@ -1,98 +0,0 @@
-#include "loc.h"
-
-/* $Id: query-loc.c,v 1.1 2008/02/15 01:47:15 marka Exp $ */
-
-/* Global variables */
-char *progname;
-short debug;
-
-int
-main (argc, argv)
- int argc;
- char *argv[];
-{
- extern char *optarg;
- extern int optind;
-
- short verbose = FALSE;
- char *host;
-
- char ch;
-
- char *loc = NULL;
- struct in_addr addr;
- struct hostent *hp;
-
- progname = argv[0];
- while ((ch = getopt (argc, argv, "vd:")) != EOF)
- {
- switch (ch)
- {
- case 'v':
- verbose = TRUE;
- break;
- case 'd':
- debug = atoi (optarg);
- if (debug <= 0)
- {
- (void) fprintf (stderr,
- "%s: illegal debug value.\n", progname);
- exit (2);
- }
- break;
- default:
- usage ();
- }
- }
- argc -= optind;
- argv += optind;
- if (argc != 1)
- {
- usage ();
- }
- if (verbose || debug)
- {
- printf ("\nThis is %s, version %s.\n\n", progname, VERSION);
- }
- host = argv[0];
- (void) res_init ();
-
- if ((addr.s_addr = inet_addr (host)) == INADDR_NONE)
- {
- if (debug >= 1)
- printf ("%s is a name\n", host);
- loc = getlocbyname (host, FALSE);
- }
- else
- {
- if (debug >= 1)
- printf ("%s is an IP address ", host);
- hp = (struct hostent *) gethostbyaddr
- ((char *) &addr, sizeof (addr), AF_INET);
- if (hp)
- {
- if (debug >= 1)
- printf ("and %s is its official name\n",
- hp->h_name);
- loc = getlocbyname (hp->h_name, FALSE);
- }
- else
- {
- if (debug >= 1)
- printf ("which has no name\n");
- loc = getlocbyaddr (addr, NULL);
- }
- }
- if (loc == NULL)
- {
- printf ("No LOCation found for %s\n", host);
- exit (1);
- }
- else
- {
- if (verbose || debug)
- printf ("LOCation for %s is ", host);
- printf ("%s\n", loc);
- exit (0);
- }
-}
diff --git a/contrib/query-loc-0.4.0/reconf b/contrib/query-loc-0.4.0/reconf
deleted file mode 100755
index c1cf7322..00000000
--- a/contrib/query-loc-0.4.0/reconf
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-
-# $Id: reconf,v 1.1 2008/02/15 01:47:15 marka Exp $
-
-autoreconf
-# We do not use automake but we need its install-sh file. We do not
-# care about the exit code.
-automake --add-missing || true
diff --git a/contrib/queryperf/Makefile.in b/contrib/queryperf/Makefile.in
deleted file mode 100644
index 6e16cad5..00000000
--- a/contrib/queryperf/Makefile.in
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright (C) 2000, 2001 Nominum, Inc. All Rights Reserved.
-
-CC = @CC@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-DEFS = @DEFS@
-
-queryperf: queryperf.o $(LIBOBJS)
- $(CC) $(CFLAGS) $(DEFS) $(LDFLAGS) queryperf.o $(LIBOBJS) $(LIBS) -lm -o queryperf
-
-queryperf.o: queryperf.c
- $(CC) $(CFLAGS) $(DEFS) -c queryperf.c
-
-# under missing subdir
-getaddrinfo.o: ./missing/getaddrinfo.c
- $(CC) $(CFLAGS) -c ./missing/$*.c
-
-getnameinfo.o: ./missing/getnameinfo.c
- $(CC) $(CFLAGS) -c ./missing/$*.c
-
-clean:
- rm -f *.o queryperf
-
-distclean: clean
- rm -f config.log
- rm -f config.cache
- rm -f config.status
- rm -f Makefile
diff --git a/contrib/queryperf/README b/contrib/queryperf/README
deleted file mode 100644
index 54edd340..00000000
--- a/contrib/queryperf/README
+++ /dev/null
@@ -1,82 +0,0 @@
-
-$Id: README,v 1.1 2001/07/12 02:02:09 gson Exp $
-
-This is queryperf, a DNS server query performance testing tool.
-
-It is primarily intended for measuring the performance of
-authoritative DNS servers, but it has also been used for measuring
-caching server performance. This document describes the use of
-queryperf for authoritative server performance testing.
-
-
-Building
-
-To build queryperf, just do
-
- sh configure
- make
-
-
-The test environment
-
-It is recommended that you run queryperf and the name server under
-test on separate machines, so that the CPU usage of queryperf itself
-does not slow down the name server. The two machines should be
-connected with a fast network, preferably a dedicated 100baseT
-segment. Testing through a router or firewall is not advisable.
-
-
-Configuring the server
-
-The name server under test should be set up as an authoritative
-server, serving one or more zones similar in size and number to
-what the server is expected to serve in production.
-
-Be sure to turn off recursion in the server's configuration
-(in BIND 8/9, specify "recursion no;" in the options block).
-In BIND 8, you should also specify "fetch-glue no;"; otherwise
-the server may attempt to retrieve glue information from the
-Internet during the test, slowing it down by an unpredictable
-factor.
-
-
-Constructing the input file
-
-You need to construct a queryperf input file containing a large and
-realistic set of queries, on the order of ten thousand to a million.
-The input file contains one line per query, consisting of a domain
-name and an RR type name separated by a space. The class of the
-query is implicitly IN.
-
-When measuring the performance serving non-terminal zones such as the
-root zone or TLDs, note that such servers spend most of their time
-providing referral responses, not authoritative answers. Therefore, a
-realistic input file might consist mostly of queries for type A for
-names *below*, not at, the delegations present in the zone. For
-example, when testing the performance of a server configured to be
-authoritative for the top-level domain "fi.", which contains
-delegations for domains like "helsinki.fi" and "turku.fi", the input
-file could contain lines like
-
- www.turku.fi A
- www.helsinki.fi A
-
-where the "www" prefix ensures that the server will respond with a
-referral. Ideally, a realistic proportion of queries for nonexistent
-domains should be mixed in with those for existing ones, and the lines
-of the input file should be in a random order.
-
-
-Running the tests
-
-Queryperf is run specifying the input file using the "-d" option, as
-in
-
- queryperf -d input_file -s server
-
-The output of queryperf is mostly self-explanatory. Pay attention to
-the number of dropped packets reported - when running the test over a
-local Ethernet connection, it should be zero. If one or more packets
-has been dropped, there may be a problem with the network connection.
-In that case, the results should be considered suspect and the test
-repeated.
diff --git a/contrib/queryperf/config.h.in b/contrib/queryperf/config.h.in
deleted file mode 100644
index 744afdde..00000000
--- a/contrib/queryperf/config.h.in
+++ /dev/null
@@ -1,37 +0,0 @@
-/* config.h.in. Generated from configure.in by autoheader. */
-
-/* Define to 1 if you have the `getaddrinfo' function. */
-#undef HAVE_GETADDRINFO
-
-/* Define to 1 if you have the `gethostbyname2' function. */
-#undef HAVE_GETHOSTBYNAME2
-
-/* Define to 1 if you have the `getnameinfo' function. */
-#undef HAVE_GETNAMEINFO
-
-/* Define to 1 if you have the `nsl' library (-lnsl). */
-#undef HAVE_LIBNSL
-
-/* Define to 1 if you have the `socket' library (-lsocket). */
-#undef HAVE_LIBSOCKET
-
-/* Define to 1 if `struct sockaddr' has element `sa_len'. */
-#undef HAVE_SA_LEN
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Define to `int' if `socklen_t' does not exist. */
-#undef socklen_t
diff --git a/contrib/queryperf/configure b/contrib/queryperf/configure
deleted file mode 100755
index 4de92ee8..00000000
--- a/contrib/queryperf/configure
+++ /dev/null
@@ -1,4273 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68.
-#
-#
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
-# Foundation, Inc.
-#
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '\${1+\"\$@\"}'='\"\$@\"'
- setopt NO_GLOB_SUBST
-else
- case \`(set -o) 2>/dev/null\` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-"
- as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
- exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1"
- as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
- as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
- eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
- test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
- as_have_required=yes
-else
- as_have_required=no
-fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- as_found=:
- case $as_dir in #(
- /*)
- for as_base in sh bash ksh sh5; do
- # Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
- CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
- break 2
-fi
-fi
- done;;
- esac
- as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
- if test "x$CONFIG_SHELL" != x; then :
- # We cannot yet assume a decent shell, so we have to provide a
- # neutralization value for shells without unset; and this also
- # works around shells that cannot unset nonexistent variables.
- # Preserve -v and -x to the replacement shell.
- BASH_ENV=/dev/null
- ENV=/dev/null
- (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
- export CONFIG_SHELL
- case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
- esac
- exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
-fi
-
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
- else
- $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
-$0: including any error possibly output before this
-$0: message. Then install a modern shell, or manually run
-$0: the script under such a shell if you do have one."
- fi
- exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-
- as_lineno_1=$LINENO as_lineno_1a=$LINENO
- as_lineno_2=$LINENO as_lineno_2a=$LINENO
- eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
- test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
- # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -p'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -p'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -p'
- fi
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
- as_test_x='test -x'
-else
- if ls -dL / >/dev/null 2>&1; then
- as_ls_L_option=L
- else
- as_ls_L_option=
- fi
- as_test_x='
- eval sh -c '\''
- if test -d "$1"; then
- test -d "$1/.";
- else
- case $1 in #(
- -*)set "./$1";;
- esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
- ???[sx]*):;;*)false;;esac;fi
- '\'' sh
- '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-PACKAGE_URL=
-
-ac_unique_file="queryperf.c"
-ac_subst_vars='LTLIBOBJS
-LIBOBJS
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-'
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval $ac_prev=\$ac_option
- ac_prev=
- continue
- fi
-
- case $ac_option in
- *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *=) ac_optarg= ;;
- *) ac_optarg=yes ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir=$ac_optarg ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build_alias ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build_alias=$ac_optarg ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file=$ac_optarg ;;
-
- --config-cache | -C)
- cache_file=config.cache ;;
-
- -datadir | --datadir | --datadi | --datad)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=*)
- datadir=$ac_optarg ;;
-
- -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
- | --dataroo | --dataro | --datar)
- ac_prev=datarootdir ;;
- -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
- | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
- datarootdir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
- -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
- docdir=$ac_optarg ;;
-
- -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
- ac_prev=dvidir ;;
- -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
- dvidir=$ac_optarg ;;
-
- -enable-* | --enable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=\$ac_optarg ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix=$ac_optarg ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he | -h)
- ac_init_help=long ;;
- -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
- ac_init_help=recursive ;;
- -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
- ac_init_help=short ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host_alias ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host_alias=$ac_optarg ;;
-
- -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
- ac_prev=htmldir ;;
- -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
- | --ht=*)
- htmldir=$ac_optarg ;;
-
- -includedir | --includedir | --includedi | --included | --include \
- | --includ | --inclu | --incl | --inc)
- ac_prev=includedir ;;
- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
- | --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir=$ac_optarg ;;
-
- -infodir | --infodir | --infodi | --infod | --info | --inf)
- ac_prev=infodir ;;
- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir=$ac_optarg ;;
-
- -libdir | --libdir | --libdi | --libd)
- ac_prev=libdir ;;
- -libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir=$ac_optarg ;;
-
- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
- | --libexe | --libex | --libe)
- ac_prev=libexecdir ;;
- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
- | --libexe=* | --libex=* | --libe=*)
- libexecdir=$ac_optarg ;;
-
- -localedir | --localedir | --localedi | --localed | --locale)
- ac_prev=localedir ;;
- -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
- localedir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst | --locals)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
- localstatedir=$ac_optarg ;;
-
- -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
- ac_prev=mandir ;;
- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir=$ac_optarg ;;
-
- -nfp | --nfp | --nf)
- # Obsolete; use --without-fp.
- with_fp=no ;;
-
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c | -n)
- no_create=yes ;;
-
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
- no_recursion=yes ;;
-
- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
- | --oldin | --oldi | --old | --ol | --o)
- ac_prev=oldincludedir ;;
- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir=$ac_optarg ;;
-
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix=$ac_optarg ;;
-
- -program-prefix | --program-prefix | --program-prefi | --program-pref \
- | --program-pre | --program-pr | --program-p)
- ac_prev=program_prefix ;;
- -program-prefix=* | --program-prefix=* | --program-prefi=* \
- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix=$ac_optarg ;;
-
- -program-suffix | --program-suffix | --program-suffi | --program-suff \
- | --program-suf | --program-su | --program-s)
- ac_prev=program_suffix ;;
- -program-suffix=* | --program-suffix=* | --program-suffi=* \
- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix=$ac_optarg ;;
-
- -program-transform-name | --program-transform-name \
- | --program-transform-nam | --program-transform-na \
- | --program-transform-n | --program-transform- \
- | --program-transform | --program-transfor \
- | --program-transfo | --program-transf \
- | --program-trans | --program-tran \
- | --progr-tra | --program-tr | --program-t)
- ac_prev=program_transform_name ;;
- -program-transform-name=* | --program-transform-name=* \
- | --program-transform-nam=* | --program-transform-na=* \
- | --program-transform-n=* | --program-transform-=* \
- | --program-transform=* | --program-transfor=* \
- | --program-transfo=* | --program-transf=* \
- | --program-trans=* | --program-tran=* \
- | --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name=$ac_optarg ;;
-
- -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
- ac_prev=pdfdir ;;
- -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
- pdfdir=$ac_optarg ;;
-
- -psdir | --psdir | --psdi | --psd | --ps)
- ac_prev=psdir ;;
- -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
- psdir=$ac_optarg ;;
-
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- silent=yes ;;
-
- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
- ac_prev=sbindir ;;
- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
- | --sbi=* | --sb=*)
- sbindir=$ac_optarg ;;
-
- -sharedstatedir | --sharedstatedir | --sharedstatedi \
- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
- | --sharedst | --shareds | --shared | --share | --shar \
- | --sha | --sh)
- ac_prev=sharedstatedir ;;
- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
- | --sha=* | --sh=*)
- sharedstatedir=$ac_optarg ;;
-
- -site | --site | --sit)
- ac_prev=site ;;
- -site=* | --site=* | --sit=*)
- site=$ac_optarg ;;
-
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir=$ac_optarg ;;
-
- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
- | --syscon | --sysco | --sysc | --sys | --sy)
- ac_prev=sysconfdir ;;
- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir=$ac_optarg ;;
-
- -target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target_alias ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target_alias=$ac_optarg ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers | -V)
- ac_init_version=: ;;
-
- -with-* | --with-*)
- ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=\$ac_optarg ;;
-
- -without-* | --without-*)
- ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=no ;;
-
- --x)
- # Obsolete; use --with-x.
- with_x=yes ;;
-
- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
- | --x-incl | --x-inc | --x-in | --x-i)
- ac_prev=x_includes ;;
- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes=$ac_optarg ;;
-
- -x-libraries | --x-libraries | --x-librarie | --x-librari \
- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
- ac_prev=x_libraries ;;
- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries=$ac_optarg ;;
-
- -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- case $ac_envvar in #(
- '' | [0-9]* | *[!_$as_cr_alnum]* )
- as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
- esac
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
- : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- ac_option=--`echo $ac_prev | sed 's/_/-/g'`
- as_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
- case $enable_option_checking in
- no) ;;
- fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
- esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
-do
- eval ac_val=\$$ac_var
- # Remove trailing slashes.
- case $ac_val in
- */ )
- ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
- eval $ac_var=\$ac_val;;
- esac
- # Be sure to have absolute directory names.
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
- esac
- as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
- if test "x$build_alias" = x; then
- cross_compiling=maybe
- $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
- If a cross compiler is detected then cross compile mode will be used" >&2
- elif test "x$build_alias" != "x$host_alias"; then
- cross_compiling=yes
- fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- as_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- as_fn_error $? "pwd does not report name of working directory"
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
- ac_srcdir_defaulted=yes
- # Try the directory containing this script, then the parent directory.
- ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_myself" : 'X\(//\)[^/]' \| \
- X"$as_myself" : 'X\(//\)$' \| \
- X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- srcdir=$ac_confdir
- if test ! -r "$srcdir/$ac_unique_file"; then
- srcdir=..
- fi
-else
- ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
- pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
- srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
- eval ac_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_env_${ac_var}_value=\$${ac_var}
- eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat <<_ACEOF
-\`configure' configures this package to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE. See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
- -h, --help display this help and exit
- --help=short display options specific to this package
- --help=recursive display the short help of all the included packages
- -V, --version display version information and exit
- -q, --quiet, --silent do not print \`checking ...' messages
- --cache-file=FILE cache test results in FILE [disabled]
- -C, --config-cache alias for \`--cache-file=config.cache'
- -n, --no-create do not create output files
- --srcdir=DIR find the sources in DIR [configure dir or \`..']
-
-Installation directories:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc [/usr/include]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_ACEOF
-
- cat <<\_ACEOF
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-
- cat <<\_ACEOF
-
-Some influential environment variables:
- CC C compiler command
- CFLAGS C compiler flags
- LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
- nonstandard directory <lib dir>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to the package provider.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" ||
- { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
- continue
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
- cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
- if test -f "$ac_srcdir/configure.gnu"; then
- echo &&
- $SHELL "$ac_srcdir/configure.gnu" --help=recursive
- elif test -f "$ac_srcdir/configure"; then
- echo &&
- $SHELL "$ac_srcdir/configure" --help=recursive
- else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
- done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
- cat <<\_ACEOF
-configure
-generated by GNU Autoconf 2.68
-
-Copyright (C) 2010 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
- exit
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
- if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_compile
-
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext conftest$ac_exeext
- if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
- # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
- # interfere with the next link command; also delete a directory that is
- # left behind by Apple's compiler. We do this before executing the actions.
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_link
-
-# ac_fn_c_check_func LINENO FUNC VAR
-# ----------------------------------
-# Tests whether FUNC exists, setting the cache variable VAR accordingly
-ac_fn_c_check_func ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $2 innocuous_$2
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $2 (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $2
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $2 ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_$2 || defined __stub___$2
-choke me
-#endif
-
-int
-main ()
-{
-return $2 ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- eval "$3=yes"
-else
- eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_func
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by $as_me, which was
-generated by GNU Autoconf 2.68. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
-
-/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
-/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
-/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
- done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
- for ac_arg
- do
- case $ac_arg in
- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- continue ;;
- *\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
- 2)
- as_fn_append ac_configure_args1 " '$ac_arg'"
- if test $ac_must_keep_next = true; then
- ac_must_keep_next=false # Got value, back to normal.
- else
- case $ac_arg in
- *=* | --config-cache | -C | -disable-* | --disable-* \
- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
- | -with-* | --with-* | -without-* | --without-* | --x)
- case "$ac_configure_args0 " in
- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
- esac
- ;;
- -* ) ac_must_keep_next=true ;;
- esac
- fi
- as_fn_append ac_configure_args " '$ac_arg'"
- ;;
- esac
- done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset ac_configure_args1;}
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log. We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
- echo
- # The following way of writing the cache mishandles newlines in values,
-(
- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
- (set) 2>&1 |
- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- sed -n \
- "s/'\''/'\''\\\\'\'''\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
- ;; #(
- *)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-)
- echo
-
- $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
- echo
- cat confdefs.h
- echo
- fi
- test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
-elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
-else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
- fi
-done
-
-if test -r "$cache_file"; then
- # Some versions of bash will fail to source /dev/null (special files
- # actually), so we avoid doing that. DJGPP emulates it as a regular file.
- if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
- esac
- fi
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
- >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
- eval ac_old_set=\$ac_cv_env_${ac_var}_set
- eval ac_new_set=\$ac_env_${ac_var}_set
- eval ac_old_val=\$ac_cv_env_${ac_var}_value
- eval ac_new_val=\$ac_env_${ac_var}_value
- case $ac_old_set,$ac_new_set in
- set,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,);;
- *)
- if test "x$ac_old_val" != "x$ac_new_val"; then
- # differences in whitespace do not lead to failure.
- ac_old_val_w=`echo x $ac_old_val`
- ac_new_val_w=`echo x $ac_new_val`
- if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- ac_cache_corrupted=:
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
- eval $ac_var=\$ac_old_val
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
- *) ac_arg=$ac_var=$ac_new_val ;;
- esac
- case " $ac_configure_args " in
- *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
- *) as_fn_append ac_configure_args " '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-else
- CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- fi
-fi
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# != 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- fi
- rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
- break;;
- * )
- break;;
- esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
- ac_file=''
-fi
-if test -z "$ac_file"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
-done
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
- { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if { ac_try='./conftest$ac_cv_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-else
- CFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
-
-
-ac_config_headers="$ac_config_headers config.h"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing res_mkquery" >&5
-$as_echo_n "checking for library containing res_mkquery... " >&6; }
-if ${ac_cv_search_res_mkquery+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char res_mkquery ();
-int
-main ()
-{
-return res_mkquery ();
- ;
- return 0;
-}
-_ACEOF
-for ac_lib in '' resolv bind; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_res_mkquery=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- if ${ac_cv_search_res_mkquery+:} false; then :
- break
-fi
-done
-if ${ac_cv_search_res_mkquery+:} false; then :
-
-else
- ac_cv_search_res_mkquery=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_res_mkquery" >&5
-$as_echo "$ac_cv_search_res_mkquery" >&6; }
-ac_res=$ac_cv_search_res_mkquery
-if test "$ac_res" != no; then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing __res_mkquery" >&5
-$as_echo_n "checking for library containing __res_mkquery... " >&6; }
-if ${ac_cv_search___res_mkquery+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char __res_mkquery ();
-int
-main ()
-{
-return __res_mkquery ();
- ;
- return 0;
-}
-_ACEOF
-for ac_lib in '' resolv bind; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search___res_mkquery=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- if ${ac_cv_search___res_mkquery+:} false; then :
- break
-fi
-done
-if ${ac_cv_search___res_mkquery+:} false; then :
-
-else
- ac_cv_search___res_mkquery=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search___res_mkquery" >&5
-$as_echo "$ac_cv_search___res_mkquery" >&6; }
-ac_res=$ac_cv_search___res_mkquery
-if test "$ac_res" != no; then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing res_9_mkquery" >&5
-$as_echo_n "checking for library containing res_9_mkquery... " >&6; }
-if ${ac_cv_search_res_9_mkquery+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char res_9_mkquery ();
-int
-main ()
-{
-return res_9_mkquery ();
- ;
- return 0;
-}
-_ACEOF
-for ac_lib in '' resolv bind; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_res_9_mkquery=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- if ${ac_cv_search_res_9_mkquery+:} false; then :
- break
-fi
-done
-if ${ac_cv_search_res_9_mkquery+:} false; then :
-
-else
- ac_cv_search_res_9_mkquery=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_res_9_mkquery" >&5
-$as_echo "$ac_cv_search_res_9_mkquery" >&6; }
-ac_res=$ac_cv_search_res_9_mkquery
-if test "$ac_res" != no; then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5
-$as_echo_n "checking for socket in -lsocket... " >&6; }
-if ${ac_cv_lib_socket_socket+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsocket $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char socket ();
-int
-main ()
-{
-return socket ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_socket_socket=yes
-else
- ac_cv_lib_socket_socket=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5
-$as_echo "$ac_cv_lib_socket_socket" >&6; }
-if test "x$ac_cv_lib_socket_socket" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBSOCKET 1
-_ACEOF
-
- LIBS="-lsocket $LIBS"
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lnsl" >&5
-$as_echo_n "checking for inet_ntoa in -lnsl... " >&6; }
-if ${ac_cv_lib_nsl_inet_ntoa+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lnsl $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char inet_ntoa ();
-int
-main ()
-{
-return inet_ntoa ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_nsl_inet_ntoa=yes
-else
- ac_cv_lib_nsl_inet_ntoa=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_inet_ntoa" >&5
-$as_echo "$ac_cv_lib_nsl_inet_ntoa" >&6; }
-if test "x$ac_cv_lib_nsl_inet_ntoa" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBNSL 1
-_ACEOF
-
- LIBS="-lnsl $LIBS"
-
-fi
-
-for ac_func in gethostbyname2
-do :
- ac_fn_c_check_func "$LINENO" "gethostbyname2" "ac_cv_func_gethostbyname2"
-if test "x$ac_cv_func_gethostbyname2" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_GETHOSTBYNAME2 1
-_ACEOF
-
-fi
-done
-
-ac_fn_c_check_func "$LINENO" "getaddrinfo" "ac_cv_func_getaddrinfo"
-if test "x$ac_cv_func_getaddrinfo" = xyes; then :
-
-$as_echo "#define HAVE_GETADDRINFO 1" >>confdefs.h
-
-else
- case " $LIBOBJS " in
- *" getaddrinfo.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS getaddrinfo.$ac_objext"
- ;;
-esac
-
-fi
-
-ac_fn_c_check_func "$LINENO" "getnameinfo" "ac_cv_func_getnameinfo"
-if test "x$ac_cv_func_getnameinfo" = xyes; then :
-
-$as_echo "#define HAVE_GETNAMEINFO 1" >>confdefs.h
-
-else
- case " $LIBOBJS " in
- *" getnameinfo.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS getnameinfo.$ac_objext"
- ;;
-esac
-
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for socklen_t" >&5
-$as_echo_n "checking for socklen_t... " >&6; }
-if ${ac_cv_type_socklen_t+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
- #include <sys/socket.h>
-int
-main ()
-{
-socklen_t len = 42; return len;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_type_socklen_t=yes
-else
- ac_cv_type_socklen_t=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_socklen_t" >&5
-$as_echo "$ac_cv_type_socklen_t" >&6; }
- if test $ac_cv_type_socklen_t != yes; then
-
-$as_echo "#define socklen_t int" >>confdefs.h
-
- fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sa_len" >&5
-$as_echo_n "checking for sa_len... " >&6; }
-if ${ac_cv_sa_len+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
- #include <sys/socket.h>
-int
-main ()
-{
-struct sockaddr sa; sa.sa_len = 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_sa_len=yes
-else
- ac_cv_sa_len=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sa_len" >&5
-$as_echo "$ac_cv_sa_len" >&6; }
- if test $ac_cv_sa_len = yes; then
-
-$as_echo "#define HAVE_SA_LEN 1" >>confdefs.h
-
- fi
-
-
-ac_config_files="$ac_config_files Makefile"
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems. If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
- for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
-
- (set) 2>&1 |
- case $as_nl`(ac_space=' '; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- # `set' does not quote correctly, so add quotes: double-quote
- # substitution turns \\\\ into \\, and sed turns \\ into \.
- sed -n \
- "s/'/'\\\\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
- ;; #(
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
- if test ! -f "$cache_file" || test -h "$cache_file"; then
- cat confcache >"$cache_file"
- else
- case $cache_file in #(
- */* | ?:*)
- mv -f confcache "$cache_file"$$ &&
- mv -f "$cache_file"$$ "$cache_file" ;; #(
- *)
- mv -f confcache "$cache_file" ;;
- esac
- fi
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
- fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-
-SHELL=\${CONFIG_SHELL-$SHELL}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -p'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -p'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -p'
- fi
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
- as_test_x='test -x'
-else
- if ls -dL / >/dev/null 2>&1; then
- as_ls_L_option=L
- else
- as_ls_L_option=
- fi
- as_test_x='
- eval sh -c '\''
- if test -d "$1"; then
- test -d "$1/.";
- else
- case $1 in #(
- -*)set "./$1";;
- esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
- ???[sx]*):;;*)false;;esac;fi
- '\'' sh
- '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by $as_me, which was
-generated by GNU Autoconf 2.68. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-case $ac_config_headers in *"
-"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
-esac
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_headers="$ac_config_headers"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration. Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- --config print configuration, then exit
- -q, --quiet, --silent
- do not print progress messages
- -d, --debug don't remove temporary files
- --recheck update $as_me by reconfiguring in the same conditions
- --file=FILE[:TEMPLATE]
- instantiate the configuration file FILE
- --header=FILE[:TEMPLATE]
- instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Report bugs to the package provider."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-config.status
-configured by $0, generated by GNU Autoconf 2.68,
- with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2010 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
- case $1 in
- --*=?*)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
- ac_shift=:
- ;;
- --*=)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=
- ac_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
- --config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- '') as_fn_error $? "missing file argument" ;;
- esac
- as_fn_append CONFIG_FILES " '$ac_optarg'"
- ac_need_defaults=false;;
- --header | --heade | --head | --hea )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- as_fn_append CONFIG_HEADERS " '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h)
- # Conflict between --help and --header
- as_fn_error $? "ambiguous option: \`$1'
-Try \`$0 --help' for more information.";;
- --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
- *) as_fn_append ac_config_targets " $1"
- ac_need_defaults=false ;;
-
- esac
- shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
- exec 6>/dev/null
- ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
- set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
- shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
- CONFIG_SHELL='$SHELL'
- export CONFIG_SHELL
- exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
- $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-
- *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
- esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used. Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
- test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
- tmp= ac_tmp=
- trap 'exit_status=$?
- : "${ac_tmp:=$tmp}"
- { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
- trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
- eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
- ac_cs_awk_cr='\\r'
-else
- ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
- echo "cat >conf$$subs.awk <<_ACEOF" &&
- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
- echo "_ACEOF"
-} >conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- . ./conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
- ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
- if test $ac_delim_n = $ac_delim_num; then
- break
- elif $ac_last_try; then
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
- N
- s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
- for (key in S) S_is_set[key] = 1
- FS = ""
-
-}
-{
- line = $ 0
- nfields = split(line, field, "@")
- substed = 0
- len = length(field[1])
- for (i = 2; i < nfields; i++) {
- key = field[i]
- keylen = length(key)
- if (S_is_set[key]) {
- value = S[key]
- line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
- len += length(value) + length(field[++i])
- substed = 1
- } else
- len += 1 + keylen
- }
-
- print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
- sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
- cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
- || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
-h
-s///
-s/^/:/
-s/[ ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[ ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[ ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-_ACEOF
-
-# Transform confdefs.h into an awk script `defines.awk', embedded as
-# here-document in config.status, that substitutes the proper values into
-# config.h.in to produce config.h.
-
-# Create a delimiter string that does not exist in confdefs.h, to ease
-# handling of long lines.
-ac_delim='%!_!# '
-for ac_last_try in false false :; do
- ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
- if test -z "$ac_tt"; then
- break
- elif $ac_last_try; then
- as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-
-# For the awk script, D is an array of macro values keyed by name,
-# likewise P contains macro parameters if any. Preserve backslash
-# newline sequences.
-
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-sed -n '
-s/.\{148\}/&'"$ac_delim"'/g
-t rset
-:rset
-s/^[ ]*#[ ]*define[ ][ ]*/ /
-t def
-d
-:def
-s/\\$//
-t bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3"/p
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
-d
-:bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3\\\\\\n"\\/p
-t cont
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
-t cont
-d
-:cont
-n
-s/.\{148\}/&'"$ac_delim"'/g
-t clear
-:clear
-s/\\$//
-t bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/"/p
-d
-:bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
-b cont
-' <confdefs.h | sed '
-s/'"$ac_delim"'/"\\\
-"/g' >>$CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- for (key in D) D_is_set[key] = 1
- FS = ""
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
- line = \$ 0
- split(line, arg, " ")
- if (arg[1] == "#") {
- defundef = arg[2]
- mac1 = arg[3]
- } else {
- defundef = substr(arg[1], 2)
- mac1 = arg[2]
- }
- split(mac1, mac2, "(") #)
- macro = mac2[1]
- prefix = substr(line, 1, index(line, defundef) - 1)
- if (D_is_set[macro]) {
- # Preserve the white space surrounding the "#".
- print prefix "define", macro P[macro] D[macro]
- next
- } else {
- # Replace #undef with comments. This is necessary, for example,
- # in the case of _POSIX_SOURCE, which is predefined and required
- # on some systems where configure will not decide to define it.
- if (defundef == "undef") {
- print "/*", prefix defundef, macro, "*/"
- next
- }
- }
-}
-{ print }
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
- as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
-fi # test -n "$CONFIG_HEADERS"
-
-
-eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS "
-shift
-for ac_tag
-do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
- :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
- esac
- ac_save_IFS=$IFS
- IFS=:
- set x $ac_tag
- IFS=$ac_save_IFS
- shift
- ac_file=$1
- shift
-
- case $ac_mode in
- :L) ac_source=$1;;
- :[FH])
- ac_file_inputs=
- for ac_f
- do
- case $ac_f in
- -) ac_f="$ac_tmp/stdin";;
- *) # Look for the file first in the build tree, then in the source tree
- # (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
- test -f "$ac_f" ||
- case $ac_f in
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
- as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
- esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
- as_fn_append ac_file_inputs " '$ac_f'"
- done
-
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
- `' by configure.'
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
- fi
- # Neutralize special characters interpreted by sed in replacement strings.
- case $configure_input in #(
- *\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
- sed 's/[\\\\&|]/\\\\&/g'`;; #(
- *) ac_sed_conf_input=$configure_input;;
- esac
-
- case $ac_tag in
- *:-:* | *:-) cat >"$ac_tmp/stdin" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
- esac
- ;;
- esac
-
- ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- as_dir="$ac_dir"; as_fn_mkdir_p
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
- p
- q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
- s&@infodir@&$infodir&g
- s&@localedir@&$localedir&g
- s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
- >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
- "$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&2;}
-
- rm -f "$ac_tmp/stdin"
- case $ac_file in
- -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
- *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
- esac \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
- :H)
- #
- # CONFIG_HEADER
- #
- if test x"$ac_file" != x-; then
- {
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
- } >"$ac_tmp/config.h" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
- else
- rm -f "$ac_file"
- mv "$ac_tmp/config.h" "$ac_file" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- fi
- else
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
- || as_fn_error $? "could not create -" "$LINENO" 5
- fi
- ;;
-
-
- esac
-
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
- as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded. So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status. When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
- ac_cs_success=:
- ac_config_status_args=
- test "$silent" = yes &&
- ac_config_status_args="$ac_config_status_args --quiet"
- exec 5>/dev/null
- $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
- exec 5>>config.log
- # Use ||, not &&, to avoid exiting from the if with $? = 1, which
- # would make configure fail if this is the last instruction.
- $ac_cs_success || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
diff --git a/contrib/queryperf/configure.in b/contrib/queryperf/configure.in
deleted file mode 100644
index 442e8199..00000000
--- a/contrib/queryperf/configure.in
+++ /dev/null
@@ -1,71 +0,0 @@
-#
-# Copyright (C) 2000, 2001 Nominum, Inc.
-#
-# Permission to use, copy, modify, and distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
-# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
-# INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
-# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
-# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-AC_INIT(queryperf.c)
-
-AC_PREREQ(2.13)
-
-AC_PROG_CC
-
-AC_DEFUN(AC_TYPE_SOCKLEN_T,
-[AC_CACHE_CHECK([for socklen_t], ac_cv_type_socklen_t,
-[
- AC_TRY_COMPILE(
- [#include <sys/types.h>
- #include <sys/socket.h>],
- [socklen_t len = 42; return len;],
- ac_cv_type_socklen_t=yes,
- ac_cv_type_socklen_t=no)
-])
- if test $ac_cv_type_socklen_t != yes; then
- AC_DEFINE(socklen_t, int, [Define to `int' if `socklen_t' does not exist.])
- fi
-])
-
-AC_DEFUN(AC_SA_LEN,
-[AC_CACHE_CHECK([for sa_len], ac_cv_sa_len,
-[
- AC_TRY_COMPILE(
- [#include <sys/types.h>
- #include <sys/socket.h>],
- [struct sockaddr sa; sa.sa_len = 0;],
- ac_cv_sa_len=yes,
- ac_cv_sa_len=no)
-])
- if test $ac_cv_sa_len = yes; then
- AC_DEFINE(HAVE_SA_LEN, 1, [Define to 1 if `struct sockaddr' has element `sa_len'.])
- fi
-])
-
-AC_CONFIG_HEADERS(config.h)
-AC_SEARCH_LIBS(res_mkquery, resolv bind)
-AC_SEARCH_LIBS(__res_mkquery, resolv bind)
-AC_SEARCH_LIBS(res_9_mkquery, resolv bind)
-AC_CHECK_LIB(socket, socket)
-AC_CHECK_LIB(nsl, inet_ntoa)
-AC_CHECK_FUNCS(gethostbyname2)
-AC_CHECK_FUNC(getaddrinfo,
- AC_DEFINE(HAVE_GETADDRINFO, 1, [Define to 1 if you have the `getaddrinfo' function.]),
- [AC_LIBOBJ(getaddrinfo)])
-AC_CHECK_FUNC(getnameinfo,
- AC_DEFINE(HAVE_GETNAMEINFO, 1, [Define to 1 if you have the `getnameinfo' function.]),
- [AC_LIBOBJ(getnameinfo)])
-
-AC_TYPE_SOCKLEN_T
-AC_SA_LEN
-
-AC_OUTPUT(Makefile)
diff --git a/contrib/queryperf/input/sample.0 b/contrib/queryperf/input/sample.0
deleted file mode 100644
index 024d8a0a..00000000
--- a/contrib/queryperf/input/sample.0
+++ /dev/null
@@ -1,6 +0,0 @@
-; This is a comment
-#server ns.sector93.ie
-#port 53
-#maxwait 5
-meow.com MX
-1.0.0.10.in-addr.arpa PTR
diff --git a/contrib/queryperf/input/sample.1 b/contrib/queryperf/input/sample.1
deleted file mode 100644
index e2911a58..00000000
--- a/contrib/queryperf/input/sample.1
+++ /dev/null
@@ -1,13 +0,0 @@
-; Sample input data file
-
-;#server ns.sector93.ie
-;#port 53
-;#maxwait 10
-
-1-host.com ANY
-1-linknet.com A
-1.0-127.35.195.200.in-addr.arpa PTR
-1.0-63.236.210.200.in-addr.arpa PTR
-1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.int PTR
-1.0.0.0.in-addr.arpa PTR
-1.0.0.10.in-addr.arpa PTR
diff --git a/contrib/queryperf/missing/addrinfo.h b/contrib/queryperf/missing/addrinfo.h
deleted file mode 100644
index 54a5e85b..00000000
--- a/contrib/queryperf/missing/addrinfo.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef HAVE_GETADDRINFO
-
-/*
- * Error return codes from getaddrinfo()
- */
-#define EAI_ADDRFAMILY 1 /* address family for hostname not supported */
-#define EAI_AGAIN 2 /* temporary failure in name resolution */
-#define EAI_BADFLAGS 3 /* invalid value for ai_flags */
-#define EAI_FAIL 4 /* non-recoverable failure in name resolution */
-#define EAI_FAMILY 5 /* ai_family not supported */
-#define EAI_MEMORY 6 /* memory allocation failure */
-#define EAI_NODATA 7 /* no address associated with hostname */
-#define EAI_NONAME 8 /* hostname nor servname provided, or not known */
-#define EAI_SERVICE 9 /* servname not supported for ai_socktype */
-#define EAI_SOCKTYPE 10 /* ai_socktype not supported */
-#define EAI_SYSTEM 11 /* system error returned in errno */
-#define EAI_BADHINTS 12
-#define EAI_PROTOCOL 13
-#define EAI_MAX 14
-
-/*
- * Flag values for getaddrinfo()
- */
-#define AI_PASSIVE 0x00000001 /* get address to use bind() */
-#define AI_CANONNAME 0x00000002 /* fill ai_canonname */
-#define AI_NUMERICHOST 0x00000004 /* prevent name resolution */
-/* valid flags for addrinfo */
-#define AI_MASK (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST)
-
-#define AI_ALL 0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */
-#define AI_V4MAPPED_CFG 0x00000200 /* accept IPv4-mapped if kernel supports */
-#define AI_ADDRCONFIG 0x00000400 /* only if any address is assigned */
-#define AI_V4MAPPED 0x00000800 /* accept IPv4-mapped IPv6 address */
-/* special recommended flags for getipnodebyname */
-#define AI_DEFAULT (AI_V4MAPPED_CFG | AI_ADDRCONFIG)
-
-/*
- * Constants for getnameinfo()
- */
-#define NI_MAXHOST 1025
-#define NI_MAXSERV 32
-
-/*
- * Flag values for getnameinfo()
- */
-#define NI_NOFQDN 0x00000001
-#define NI_NUMERICHOST 0x00000002
-#define NI_NAMEREQD 0x00000004
-#define NI_NUMERICSERV 0x00000008
-#define NI_DGRAM 0x00000010
-
-struct addrinfo {
- int ai_flags; /* AI_PASSIVE, AI_CANONNAME */
- int ai_family; /* PF_xxx */
- int ai_socktype; /* SOCK_xxx */
- int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
- size_t ai_addrlen; /* length of ai_addr */
- char *ai_canonname; /* canonical name for hostname */
- struct sockaddr *ai_addr; /* binary address */
- struct addrinfo *ai_next; /* next structure in linked list */
-};
-
-struct sockaddr_storage {
- u_char __ss_len;
- u_char __ss_family;
- u_char fill[126];
-};
-
-extern void freehostent(struct hostent *);
-extern char *gai_strerror(int);
-#endif
diff --git a/contrib/queryperf/missing/getaddrinfo.c b/contrib/queryperf/missing/getaddrinfo.c
deleted file mode 100644
index 69eb748c..00000000
--- a/contrib/queryperf/missing/getaddrinfo.c
+++ /dev/null
@@ -1,632 +0,0 @@
-/*
- * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <ctype.h>
-#include <unistd.h>
-
-#include "addrinfo.h"
-
-#define SUCCESS 0
-#define ANY 0
-#define YES 1
-#define NO 0
-
-static const char in_addrany[] = { 0, 0, 0, 0 };
-static const char in6_addrany[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-static const char in_loopback[] = { 127, 0, 0, 1 };
-static const char in6_loopback[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
-};
-
-struct sockinet {
- u_char si_len;
- u_char si_family;
- u_short si_port;
-};
-
-static struct afd {
- int a_af;
- int a_addrlen;
- int a_socklen;
- int a_off;
- const char *a_addrany;
- const char *a_loopback;
-} afdl [] = {
-#ifdef INET6
-#define N_INET6 0
- {PF_INET6, sizeof(struct in6_addr),
- sizeof(struct sockaddr_in6),
- offsetof(struct sockaddr_in6, sin6_addr),
- in6_addrany, in6_loopback},
-#define N_INET 1
-#else
-#define N_INET 0
-#endif
- {PF_INET, sizeof(struct in_addr),
- sizeof(struct sockaddr_in),
- offsetof(struct sockaddr_in, sin_addr),
- in_addrany, in_loopback},
- {0, 0, 0, 0, NULL, NULL},
-};
-
-#ifdef INET6
-#define PTON_MAX 16
-#else
-#define PTON_MAX 4
-#endif
-
-
-static int get_name(const char *, struct afd *,
- struct addrinfo **, char *, struct addrinfo *,
- int);
-static int get_addr(const char *, int, struct addrinfo **,
- struct addrinfo *, int);
-static int get_addr0(const char *, int, struct addrinfo **,
- struct addrinfo *, int);
-static int str_isnumber(const char *);
-
-static char *ai_errlist[] = {
- "Success",
- "Address family for hostname not supported", /* EAI_ADDRFAMILY */
- "Temporary failure in name resolution", /* EAI_AGAIN */
- "Invalid value for ai_flags", /* EAI_BADFLAGS */
- "Non-recoverable failure in name resolution", /* EAI_FAIL */
- "ai_family not supported", /* EAI_FAMILY */
- "Memory allocation failure", /* EAI_MEMORY */
- "No address associated with hostname", /* EAI_NODATA */
- "hostname nor servname provided, or not known",/* EAI_NONAME */
- "servname not supported for ai_socktype", /* EAI_SERVICE */
- "ai_socktype not supported", /* EAI_SOCKTYPE */
- "System error returned in errno", /* EAI_SYSTEM */
- "Invalid value for hints", /* EAI_BADHINTS */
- "Resolved protocol is unknown", /* EAI_PROTOCOL */
- "Unknown error", /* EAI_MAX */
-};
-
-#define GET_CANONNAME(ai, str) \
-if (pai->ai_flags & AI_CANONNAME) {\
- if (((ai)->ai_canonname = (char *)malloc(strlen(str) + 1)) != NULL) {\
- strcpy((ai)->ai_canonname, (str));\
- } else {\
- error = EAI_MEMORY;\
- goto free;\
- }\
-}
-
-#ifdef HAVE_SA_LEN
-#define SET_AILEN(ai,l) (ai)->ai_addr->sa_len = (ai)->ai_addrlen = (l)
-#else
-#define SET_AILEN(ai,l) (ai)->ai_addrlen = (l)
-#endif
-
-#define GET_AI(ai, afd, addr, port) {\
- char *p;\
- if (((ai) = (struct addrinfo *)malloc(sizeof(struct addrinfo) +\
- ((afd)->a_socklen)))\
- == NULL) {\
- error = EAI_MEMORY;\
- goto free;\
- }\
- memcpy(ai, pai, sizeof(struct addrinfo));\
- (ai)->ai_addr = (struct sockaddr *)((ai) + 1);\
- memset((ai)->ai_addr, 0, (afd)->a_socklen);\
- SET_AILEN((ai), (afd)->a_socklen);\
- (ai)->ai_addr->sa_family = (ai)->ai_family = (afd)->a_af;\
- ((struct sockinet *)(ai)->ai_addr)->si_port = port;\
- p = (char *)((ai)->ai_addr);\
- memcpy(p + (afd)->a_off, (addr), (afd)->a_addrlen);\
-}
-
-#define ERR(err) { error = (err); goto bad; }
-
-char *
-gai_strerror(ecode)
- int ecode;
-{
- if (ecode < 0 || ecode > EAI_MAX)
- ecode = EAI_MAX;
- return ai_errlist[ecode];
-}
-
-void
-freeaddrinfo(ai)
- struct addrinfo *ai;
-{
- struct addrinfo *next;
-
- do {
- next = ai->ai_next;
- if (ai->ai_canonname)
- free(ai->ai_canonname);
- /* no need to free(ai->ai_addr) */
- free(ai);
- } while ((ai = next) != NULL);
-}
-
-static int
-str_isnumber(p)
- const char *p;
-{
- char *q = (char *)p;
- while (*q) {
- if (! isdigit(*q))
- return NO;
- q++;
- }
- return YES;
-}
-
-int
-getaddrinfo(hostname, servname, hints, res)
- const char *hostname, *servname;
- const struct addrinfo *hints;
- struct addrinfo **res;
-{
- struct addrinfo sentinel;
- struct addrinfo *top = NULL;
- struct addrinfo *cur;
- int i, error = 0;
- char pton[PTON_MAX];
- struct addrinfo ai;
- struct addrinfo *pai;
- u_short port;
-
- /* initialize file static vars */
- sentinel.ai_next = NULL;
- cur = &sentinel;
- pai = &ai;
- pai->ai_flags = 0;
- pai->ai_family = PF_UNSPEC;
- pai->ai_socktype = ANY;
- pai->ai_protocol = ANY;
- pai->ai_addrlen = 0;
- pai->ai_canonname = NULL;
- pai->ai_addr = NULL;
- pai->ai_next = NULL;
- port = ANY;
-
- if (hostname == NULL && servname == NULL)
- return EAI_NONAME;
- if (hints) {
- /* error check for hints */
- if (hints->ai_addrlen || hints->ai_canonname ||
- hints->ai_addr || hints->ai_next)
- ERR(EAI_BADHINTS); /* xxx */
- if (hints->ai_flags & ~AI_MASK)
- ERR(EAI_BADFLAGS);
- switch (hints->ai_family) {
- case PF_UNSPEC:
- case PF_INET:
-#ifdef INET6
- case PF_INET6:
-#endif
- break;
- default:
- ERR(EAI_FAMILY);
- }
- memcpy(pai, hints, sizeof(*pai));
- switch (pai->ai_socktype) {
- case ANY:
- switch (pai->ai_protocol) {
- case ANY:
- break;
- case IPPROTO_UDP:
- pai->ai_socktype = SOCK_DGRAM;
- break;
- case IPPROTO_TCP:
- pai->ai_socktype = SOCK_STREAM;
- break;
- default:
- pai->ai_socktype = SOCK_RAW;
- break;
- }
- break;
- case SOCK_RAW:
- break;
- case SOCK_DGRAM:
- if (pai->ai_protocol != IPPROTO_UDP &&
- pai->ai_protocol != ANY)
- ERR(EAI_BADHINTS); /*xxx*/
- pai->ai_protocol = IPPROTO_UDP;
- break;
- case SOCK_STREAM:
- if (pai->ai_protocol != IPPROTO_TCP &&
- pai->ai_protocol != ANY)
- ERR(EAI_BADHINTS); /*xxx*/
- pai->ai_protocol = IPPROTO_TCP;
- break;
- default:
- ERR(EAI_SOCKTYPE);
- break;
- }
- }
-
- /*
- * service port
- */
- if (servname) {
- if (str_isnumber(servname)) {
- if (pai->ai_socktype == ANY) {
- /* caller accept *ANY* socktype */
- pai->ai_socktype = SOCK_DGRAM;
- pai->ai_protocol = IPPROTO_UDP;
- }
- port = htons(atoi(servname));
- } else {
- struct servent *sp;
- char *proto;
-
- proto = NULL;
- switch (pai->ai_socktype) {
- case ANY:
- proto = NULL;
- break;
- case SOCK_DGRAM:
- proto = "udp";
- break;
- case SOCK_STREAM:
- proto = "tcp";
- break;
- default:
- fprintf(stderr, "panic!\n");
- break;
- }
- if ((sp = getservbyname(servname, proto)) == NULL)
- ERR(EAI_SERVICE);
- port = sp->s_port;
- if (pai->ai_socktype == ANY) {
- if (strcmp(sp->s_proto, "udp") == 0) {
- pai->ai_socktype = SOCK_DGRAM;
- pai->ai_protocol = IPPROTO_UDP;
- } else if (strcmp(sp->s_proto, "tcp") == 0) {
- pai->ai_socktype = SOCK_STREAM;
- pai->ai_protocol = IPPROTO_TCP;
- } else
- ERR(EAI_PROTOCOL); /*xxx*/
- }
- }
- }
-
- /*
- * hostname == NULL.
- * passive socket -> anyaddr (0.0.0.0 or ::)
- * non-passive socket -> localhost (127.0.0.1 or ::1)
- */
- if (hostname == NULL) {
- struct afd *afd;
- int s;
-
- for (afd = &afdl[0]; afd->a_af; afd++) {
- if (!(pai->ai_family == PF_UNSPEC
- || pai->ai_family == afd->a_af)) {
- continue;
- }
-
- /*
- * filter out AFs that are not supported by the kernel
- * XXX errno?
- */
- s = socket(afd->a_af, SOCK_DGRAM, 0);
- if (s < 0)
- continue;
- close(s);
-
- if (pai->ai_flags & AI_PASSIVE) {
- GET_AI(cur->ai_next, afd, afd->a_addrany, port);
- /* xxx meaningless?
- * GET_CANONNAME(cur->ai_next, "anyaddr");
- */
- } else {
- GET_AI(cur->ai_next, afd, afd->a_loopback,
- port);
- /* xxx meaningless?
- * GET_CANONNAME(cur->ai_next, "localhost");
- */
- }
- cur = cur->ai_next;
- }
- top = sentinel.ai_next;
- if (top)
- goto good;
- else
- ERR(EAI_FAMILY);
- }
-
- /* hostname as numeric name */
- for (i = 0; afdl[i].a_af; i++) {
- if (inet_pton(afdl[i].a_af, hostname, pton) == 1) {
- u_long v4a;
- u_char pfx;
-
- switch (afdl[i].a_af) {
- case AF_INET:
- v4a = ntohl(((struct in_addr *)pton)->s_addr);
- if (IN_MULTICAST(v4a) || IN_EXPERIMENTAL(v4a))
- pai->ai_flags &= ~AI_CANONNAME;
- v4a >>= IN_CLASSA_NSHIFT;
- if (v4a == 0 || v4a == IN_LOOPBACKNET)
- pai->ai_flags &= ~AI_CANONNAME;
- break;
-#ifdef INET6
- case AF_INET6:
- pfx = ((struct in6_addr *)pton)->s6_addr[0];
- if (pfx == 0 || pfx == 0xfe || pfx == 0xff)
- pai->ai_flags &= ~AI_CANONNAME;
- break;
-#endif
- }
-
- if (pai->ai_family == afdl[i].a_af ||
- pai->ai_family == PF_UNSPEC) {
- if (! (pai->ai_flags & AI_CANONNAME)) {
- GET_AI(top, &afdl[i], pton, port);
- goto good;
- }
- /*
- * if AI_CANONNAME and if reverse lookup
- * fail, return ai anyway to pacify
- * calling application.
- *
- * XXX getaddrinfo() is a name->address
- * translation function, and it looks strange
- * that we do addr->name translation here.
- */
- get_name(pton, &afdl[i], &top, pton, pai, port);
- goto good;
- } else
- ERR(EAI_FAMILY); /*xxx*/
- }
- }
-
- if (pai->ai_flags & AI_NUMERICHOST)
- ERR(EAI_NONAME);
-
- /* hostname as alphabetical name */
- error = get_addr(hostname, pai->ai_family, &top, pai, port);
- if (error == 0) {
- if (top) {
- good:
- *res = top;
- return SUCCESS;
- } else
- error = EAI_FAIL;
- }
- free:
- if (top)
- freeaddrinfo(top);
- bad:
- *res = NULL;
- return error;
-}
-
-static int
-get_name(addr, afd, res, numaddr, pai, port0)
- const char *addr;
- struct afd *afd;
- struct addrinfo **res;
- char *numaddr;
- struct addrinfo *pai;
- int port0;
-{
- u_short port = port0 & 0xffff;
- struct hostent *hp;
- struct addrinfo *cur;
- int error = 0;
- hp = gethostbyaddr(addr, afd->a_addrlen, afd->a_af);
- if (hp && hp->h_name && hp->h_name[0] && hp->h_addr_list[0]) {
- GET_AI(cur, afd, hp->h_addr_list[0], port);
- GET_CANONNAME(cur, hp->h_name);
- } else
- GET_AI(cur, afd, numaddr, port);
-
- *res = cur;
- return SUCCESS;
- free:
- if (cur)
- freeaddrinfo(cur);
-
- /* bad: */
- *res = NULL;
- return error;
-}
-
-static int
-get_addr(hostname, af, res0, pai, port0)
- const char *hostname;
- int af;
- struct addrinfo **res0;
- struct addrinfo *pai;
- int port0;
-{
- int i, error, ekeep;
- struct addrinfo *cur;
- struct addrinfo **res;
- int retry;
- int s;
-
- res = res0;
- ekeep = 0;
- error = 0;
- for (i = 0; afdl[i].a_af; i++) {
- retry = 0;
- if (af == AF_UNSPEC) {
- /*
- * filter out AFs that are not supported by the kernel
- * XXX errno?
- */
- s = socket(afdl[i].a_af, SOCK_DGRAM, 0);
- if (s < 0)
- continue;
- close(s);
- } else {
- if (af != afdl[i].a_af)
- continue;
- }
- /* It is WRONG, we need getipnodebyname(). */
-again:
- error = get_addr0(hostname, afdl[i].a_af, res, pai, port0);
- switch (error) {
- case EAI_AGAIN:
- if (++retry < 3)
- goto again;
- /* FALL THROUGH*/
- default:
- if (ekeep == 0)
- ekeep = error;
- break;
- }
- if (*res) {
- /* make chain of addrs */
- for (cur = *res;
- cur && cur->ai_next;
- cur = cur->ai_next)
- ;
- if (!cur)
- return EAI_FAIL;
- res = &cur->ai_next;
- }
- }
-
- /* if we got something, it's okay */
- if (*res0)
- return 0;
-
- return error ? error : ekeep;
-}
-
-static int
-get_addr0(hostname, af, res, pai, port0)
- const char *hostname;
- int af;
- struct addrinfo **res;
- struct addrinfo *pai;
- int port0;
-{
- u_short port = port0 & 0xffff;
- struct addrinfo sentinel;
- struct hostent *hp;
- struct addrinfo *top, *cur;
- struct afd *afd;
- int i, error = 0, h_error;
- char *ap;
-
- top = NULL;
- sentinel.ai_next = NULL;
- cur = &sentinel;
-
-#ifdef HAVE_GETHOSTBYNAME2
- if (af == AF_UNSPEC) {
- error = EAI_FAIL;
- goto bad;
- }
- hp = gethostbyname2(hostname, af);
-#else
- if (af != AF_UNSPEC && af != AF_INET) {
- error = EAI_FAIL;
- goto bad;
- }
- hp = gethostbyname(hostname);
-#endif
- h_error = h_errno;
-
- if (hp == NULL) {
- switch (h_error) {
- case HOST_NOT_FOUND:
- case NO_DATA:
- error = EAI_NODATA;
- break;
- case TRY_AGAIN:
- error = EAI_AGAIN;
- break;
- case NO_RECOVERY:
- case NETDB_INTERNAL:
- default:
- error = EAI_FAIL;
- break;
- }
- goto bad;
- }
-
- if ((hp->h_name == NULL) || (hp->h_name[0] == 0) ||
- (hp->h_addr_list[0] == NULL))
- ERR(EAI_FAIL);
-
- for (i = 0; (ap = hp->h_addr_list[i]) != NULL; i++) {
- switch (af) {
-#ifdef INET6
- case AF_INET6:
- afd = &afdl[N_INET6];
- break;
-#endif
-#ifndef INET6
- default: /* AF_UNSPEC */
-#endif
- case AF_INET:
- afd = &afdl[N_INET];
- break;
-#ifdef INET6
- default: /* AF_UNSPEC */
- if (IN6_IS_ADDR_V4MAPPED((struct in6_addr *)ap)) {
- ap += sizeof(struct in6_addr) -
- sizeof(struct in_addr);
- afd = &afdl[N_INET];
- } else
- afd = &afdl[N_INET6];
- break;
-#endif
- }
- GET_AI(cur->ai_next, afd, ap, port);
- if (cur == &sentinel) {
- top = cur->ai_next;
- GET_CANONNAME(top, hp->h_name);
- }
- cur = cur->ai_next;
- }
- *res = top;
- return SUCCESS;
- free:
- if (top)
- freeaddrinfo(top);
- bad:
- *res = NULL;
- return error;
-}
diff --git a/contrib/queryperf/missing/getnameinfo.c b/contrib/queryperf/missing/getnameinfo.c
deleted file mode 100644
index 6b1cbe11..00000000
--- a/contrib/queryperf/missing/getnameinfo.c
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Issues to be discussed:
- * - Thread safe-ness must be checked
- * - Return values. There seems to be no standard for return value (RFC2553)
- * but INRIA implementation returns EAI_xxx defined for getaddrinfo().
- */
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <string.h>
-#include <stddef.h>
-
-#include "addrinfo.h"
-
-#define SUCCESS 0
-#define ANY 0
-#define YES 1
-#define NO 0
-
-static struct afd {
- int a_af;
- int a_addrlen;
- int a_socklen;
- int a_off;
-} afdl [] = {
-#ifdef INET6
- {PF_INET6, sizeof(struct in6_addr), sizeof(struct sockaddr_in6),
- offsetof(struct sockaddr_in6, sin6_addr)},
-#endif
- {PF_INET, sizeof(struct in_addr), sizeof(struct sockaddr_in),
- offsetof(struct sockaddr_in, sin_addr)},
- {0, 0, 0},
-};
-
-struct sockinet {
- u_char si_len;
- u_char si_family;
- u_short si_port;
-};
-
-#define ENI_NOSOCKET 0
-#define ENI_NOSERVNAME 1
-#define ENI_NOHOSTNAME 2
-#define ENI_MEMORY 3
-#define ENI_SYSTEM 4
-#define ENI_FAMILY 5
-#define ENI_SALEN 6
-
-int
-getnameinfo(sa, salen, host, hostlen, serv, servlen, flags)
- const struct sockaddr *sa;
- size_t salen;
- char *host;
- size_t hostlen;
- char *serv;
- size_t servlen;
- int flags;
-{
- struct afd *afd;
- struct servent *sp;
- struct hostent *hp;
- u_short port;
- int family, len, i;
- char *addr, *p;
- u_long v4a;
- int h_error;
- char numserv[512];
- char numaddr[512];
-
- if (sa == NULL)
- return ENI_NOSOCKET;
-
-#ifdef HAVE_SA_LEN
- len = sa->sa_len;
- if (len != salen) return ENI_SALEN;
-#else
- len = salen;
-#endif
-
- family = sa->sa_family;
- for (i = 0; afdl[i].a_af; i++)
- if (afdl[i].a_af == family) {
- afd = &afdl[i];
- goto found;
- }
- return ENI_FAMILY;
-
- found:
- if (len != afd->a_socklen) return ENI_SALEN;
-
- port = ((struct sockinet *)sa)->si_port; /* network byte order */
- addr = (char *)sa + afd->a_off;
-
- if (serv == NULL || servlen == 0) {
- /* what we should do? */
- } else if (flags & NI_NUMERICSERV) {
- snprintf(numserv, sizeof(numserv), "%d", ntohs(port));
- if (strlen(numserv) > servlen)
- return ENI_MEMORY;
- strcpy(serv, numserv);
- } else {
- sp = getservbyport(port, (flags & NI_DGRAM) ? "udp" : "tcp");
- if (sp) {
- if (strlen(sp->s_name) > servlen)
- return ENI_MEMORY;
- strcpy(serv, sp->s_name);
- } else
- return ENI_NOSERVNAME;
- }
-
- switch (sa->sa_family) {
- case AF_INET:
- v4a = ntohl(((struct sockaddr_in *)sa)->sin_addr.s_addr);
- if (IN_MULTICAST(v4a) || IN_EXPERIMENTAL(v4a))
- flags |= NI_NUMERICHOST;
- v4a >>= IN_CLASSA_NSHIFT;
- if (v4a == 0 || v4a == IN_LOOPBACKNET)
- flags |= NI_NUMERICHOST;
- break;
-#ifdef INET6
- case AF_INET6:
- {
- struct sockaddr_in6 *sin6;
- sin6 = (struct sockaddr_in6 *)sa;
- switch (sin6->sin6_addr.s6_addr[0]) {
- case 0x00:
- if (IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr))
- ;
- else if (IN6_IS_ADDR_LOOPBACK(&sin6->sin6_addr))
- ;
- else
- flags |= NI_NUMERICHOST;
- break;
- default:
- if (IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr))
- flags |= NI_NUMERICHOST;
- else if (IN6_IS_ADDR_MULTICAST(&sin6->sin6_addr))
- flags |= NI_NUMERICHOST;
- break;
- }
- }
- break;
-#endif
- }
- if (host == NULL || hostlen == 0) {
- /* what should we do? */
- } else if (flags & NI_NUMERICHOST) {
- /* NUMERICHOST and NAMEREQD conflicts with each other */
- if (flags & NI_NAMEREQD)
- return ENI_NOHOSTNAME;
- if (inet_ntop(afd->a_af, addr, numaddr, sizeof(numaddr))
- == NULL)
- return ENI_SYSTEM;
- if (strlen(numaddr) > hostlen)
- return ENI_MEMORY;
- strcpy(host, numaddr);
- } else {
-#ifdef USE_GETIPNODEBY
- hp = getipnodebyaddr(addr, afd->a_addrlen, afd->a_af, &h_error);
-#else
- hp = gethostbyaddr(addr, afd->a_addrlen, afd->a_af);
- h_error = h_errno;
-#endif
-
- if (hp) {
- if (flags & NI_NOFQDN) {
- p = strchr(hp->h_name, '.');
- if (p) *p = '\0';
- }
- if (strlen(hp->h_name) > hostlen) {
-#ifdef USE_GETIPNODEBY
- freehostent(hp);
-#endif
- return ENI_MEMORY;
- }
- strcpy(host, hp->h_name);
-#ifdef USE_GETIPNODEBY
- freehostent(hp);
-#endif
- } else {
- if (flags & NI_NAMEREQD)
- return ENI_NOHOSTNAME;
- if (inet_ntop(afd->a_af, addr, numaddr, sizeof(numaddr))
- == NULL)
- return ENI_NOHOSTNAME;
- if (strlen(numaddr) > hostlen)
- return ENI_MEMORY;
- strcpy(host, numaddr);
- }
- }
- return SUCCESS;
-}
diff --git a/contrib/queryperf/queryperf.c b/contrib/queryperf/queryperf.c
deleted file mode 100644
index 0738cc29..00000000
--- a/contrib/queryperf/queryperf.c
+++ /dev/null
@@ -1,2237 +0,0 @@
-/*
- * Copyright (C) 2000, 2001 Nominum, Inc.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/***
- *** DNS Query Performance Testing Tool (queryperf.c)
- ***
- *** Version $Id: queryperf.c,v 1.12 2007/09/05 07:36:04 marka Exp $
- ***
- *** Stephen Jacob <sj@nominum.com>
- ***/
-
-#define BIND_8_COMPAT /* Pull in <arpa/nameser_compat.h> */
-
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-#include <time.h>
-#include <unistd.h>
-#include <netdb.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-#include <math.h>
-#include <errno.h>
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#ifndef HAVE_GETADDRINFO
-#include "missing/addrinfo.h"
-#endif
-#endif
-
-/*
- * Configuration defaults
- */
-
-#define DEF_MAX_QUERIES_OUTSTANDING 20
-#define DEF_QUERY_TIMEOUT 5 /* in seconds */
-#define DEF_SERVER_TO_QUERY "127.0.0.1"
-#define DEF_SERVER_PORT "53"
-#define DEF_BUFFER_SIZE 32 /* in k */
-
-#define DEF_RTTARRAY_SIZE 50000
-#define DEF_RTTARRAY_UNIT 100 /* in usec */
-
-/*
- * Other constants / definitions
- */
-
-#define COMMENT_CHAR ';'
-#define CONFIG_CHAR '#'
-#define MAX_PORT 65535
-#define MAX_INPUT_LEN 512
-#define MAX_DOMAIN_LEN 255
-#define MAX_BUFFER_LEN 8192 /* in bytes */
-#define HARD_TIMEOUT_EXTRA 5 /* in seconds */
-#define RESPONSE_BLOCKING_WAIT_TIME 0.1 /* in seconds */
-#define EDNSLEN 11
-#define DNS_HEADERLEN 12
-
-#define FALSE 0
-#define TRUE 1
-
-#define WHITESPACE " \t\n"
-
-enum directives_enum { V_SERVER, V_PORT, V_MAXQUERIES, V_MAXWAIT };
-#define DIRECTIVES { "server", "port", "maxqueries", "maxwait" }
-#define DIR_VALUES { V_SERVER, V_PORT, V_MAXQUERIES, V_MAXWAIT }
-
-#define QTYPE_STRINGS { \
- "A", "NS", "MD", "MF", "CNAME", "SOA", "MB", "MG", "MR", \
- "NULL", "WKS", "PTR", "HINFO", "MINFO", "MX", "TXT", "RP", \
- "AFSDB", "X25", "ISDN", "RT", "NSAP", "NSAP-PTR", "SIG", \
- "KEY", "PX", "GPOS", "AAAA", "LOC", "NXT", "EID", "NIMLOC", \
- "SRV", "ATMA", "NAPTR", "KX", "CERT", "A6", "DNAME", "SINK", \
- "OPT", "APL", "DS", "SSHFP", "IPSECKEY", "RRSIG", "NSEC", \
- "DNSKEY", "DHCID", "NSEC3", "NSEC3PARAM", "TLSA", "HIP", \
- "NINFO", "RKEY", "TALINK", "CDS", "SPF", "UINFO", "UID", \
- "GID", "UNSPEC", "NID", "L32", "L64", "LP", "TKEY", "TSIG", \
- "IXFR", "AXFR", "MAILB", "MAILA", "URI", "CAA", "*", "ANY", \
- "TA", "DLV" \
-}
-
-#define QTYPE_CODES { \
- 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, \
- 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, \
- 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, \
- 49, 50, 51, 52, 55, 56, 57, 58, 59, 99, 100, 101, 102, 103, \
- 104, 105, 106, 107, 249, 250, 251, 252, 253, 254, 255, 255, \
- 256, 257, 32768, 32769 \
-}
-
-#define RCODE_STRINGS { \
- "NOERROR", "FORMERR", "SERVFAIL", "NXDOMAIN", \
- "NOTIMP", "REFUSED", "YXDOMAIN", "YXRRSET", \
- "NXRRSET", "NOTAUTH", "NOTZONE", "rcode11", \
- "rcode12", "rcode13", "rcode14", "rcode15" \
-}
-
-/*
- * Data type definitions
- */
-
-#define QUERY_STATUS_MAGIC 0x51535441U /* QSTA */
-#define VALID_QUERY_STATUS(q) ((q) != NULL && \
- (q)->magic == QUERY_STATUS_MAGIC)
-
-struct query_status {
- unsigned int magic;
- int in_use;
- unsigned short int id;
- struct timeval sent_timestamp;
- char *desc;
- int qtype;
- char qname[MAX_DOMAIN_LEN + 1];
-};
-
-struct query_mininfo { /* minimum info for timeout queries */
- int qtype; /* use -1 if N/A */
- struct timeval sent_timestamp;
- char qname[MAX_DOMAIN_LEN + 1];
-};
-
-/*
- * Forward declarations.
- */
-int is_uint(char *test_int, unsigned int *result);
-
-/*
- * Configuration options (global)
- */
-
-unsigned int max_queries_outstanding; /* init 0 */
-unsigned int query_timeout = DEF_QUERY_TIMEOUT;
-int ignore_config_changes = FALSE;
-unsigned int socket_bufsize = DEF_BUFFER_SIZE;
-
-int family = AF_UNSPEC;
-int use_stdin = TRUE;
-char *datafile_name; /* init NULL */
-
-char *server_to_query; /* init NULL */
-char *server_port; /* init NULL */
-struct addrinfo *server_ai; /* init NULL */
-
-int run_only_once = FALSE;
-int use_timelimit = FALSE;
-unsigned int run_timelimit; /* init 0 */
-unsigned int print_interval; /* init 0 */
-
-unsigned int target_qps; /* init 0 */
-
-int serverset = FALSE, portset = FALSE;
-int queriesset = FALSE, timeoutset = FALSE;
-int edns = FALSE, dnssec = FALSE;
-int countrcodes = FALSE;
-int rcodecounts[16] = {0};
-
-int verbose = FALSE;
-int recurse = 1;
-
-/*
- * Other global stuff
- */
-
-int setup_phase = TRUE;
-
-FILE *datafile_ptr; /* init NULL */
-unsigned int runs_through_file; /* init 0 */
-
-unsigned int num_queries_sent; /* init 0 */
-unsigned int num_queries_sent_interval;
-unsigned int num_queries_outstanding; /* init 0 */
-unsigned int num_queries_timed_out; /* init 0 */
-unsigned int num_queries_possiblydelayed; /* init 0 */
-unsigned int num_queries_timed_out_interval;
-unsigned int num_queries_possiblydelayed_interval;
-
-struct timeval time_of_program_start;
-struct timeval time_of_first_query;
-double time_of_first_query_sec;
-struct timeval time_of_first_query_interval;
-struct timeval time_of_end_of_run;
-struct timeval time_of_stop_sending;
-
-struct timeval time_of_queryset_start;
-double query_interval;
-struct timeval time_of_next_queryset;
-
-double rtt_max = -1;
-double rtt_max_interval = -1;
-double rtt_min = -1;
-double rtt_min_interval = -1;
-double rtt_total;
-double rtt_total_interval;
-int rttarray_size = DEF_RTTARRAY_SIZE;
-int rttarray_unit = DEF_RTTARRAY_UNIT;
-unsigned int *rttarray = NULL;
-unsigned int *rttarray_interval = NULL;
-unsigned int rtt_overflows;
-unsigned int rtt_overflows_interval;
-unsigned int rtt_counted;
-unsigned int rtt_counted_interval;
-char *rtt_histogram_file = NULL;
-
-struct query_status *status; /* init NULL */
-unsigned int query_status_allocated; /* init 0 */
-
-int query_socket = -1;
-int socket4 = -1, socket6 = -1;
-
-static char *rcode_strings[] = RCODE_STRINGS;
-
-static struct query_mininfo *timeout_queries;
-
-/*
- * get_uint16:
- * Get an unsigned short integer from a buffer (in network order)
- */
-static unsigned short
-get_uint16(unsigned char *buf) {
- unsigned short ret;
-
- ret = buf[0] * 256 + buf[1];
-
- return (ret);
-}
-
-/*
- * show_startup_info:
- * Show name/version
- */
-void
-show_startup_info(void) {
- printf("\n"
-"DNS Query Performance Testing Tool\n"
-"Version: $Id: queryperf.c,v 1.12 2007/09/05 07:36:04 marka Exp $\n"
-"\n");
-}
-
-/*
- * show_usage:
- * Print out usage/syntax information
- */
-void
-show_usage(void) {
- fprintf(stderr,
-"\n"
-"Usage: queryperf [-d datafile] [-s server_addr] [-p port] [-q num_queries]\n"
-" [-b bufsize] [-t timeout] [-n] [-l limit] [-f family] [-1]\n"
-" [-i interval] [-r arraysize] [-u unit] [-H histfile]\n"
-" [-T qps] [-e] [-D] [-R] [-c] [-v] [-h]\n"
-" -d specifies the input data file (default: stdin)\n"
-" -s sets the server to query (default: %s)\n"
-" -p sets the port on which to query the server (default: %s)\n"
-" -q specifies the maximum number of queries outstanding (default: %d)\n"
-" -t specifies the timeout for query completion in seconds (default: %d)\n"
-" -n causes configuration changes to be ignored\n"
-" -l specifies how a limit for how long to run tests in seconds (no default)\n"
-" -1 run through input only once (default: multiple iff limit given)\n"
-" -b set input/output buffer size in kilobytes (default: %d k)\n"
-" -i specifies interval of intermediate outputs in seconds (default: 0=none)\n"
-" -f specify address family of DNS transport, inet or inet6 (default: any)\n"
-" -r set RTT statistics array size (default: %d)\n"
-" -u set RTT statistics time unit in usec (default: %d)\n"
-" -H specifies RTT histogram data file (default: none)\n"
-" -T specify the target qps (default: 0=unspecified)\n"
-" -e enable EDNS 0\n"
-" -D set the DNSSEC OK bit (implies EDNS)\n"
-" -R disable recursion\n"
-" -c print the number of packets with each rcode\n"
-" -v verbose: report the RCODE of each response on stdout\n"
-" -h print this usage\n"
-"\n",
- DEF_SERVER_TO_QUERY, DEF_SERVER_PORT,
- DEF_MAX_QUERIES_OUTSTANDING, DEF_QUERY_TIMEOUT,
- DEF_BUFFER_SIZE, DEF_RTTARRAY_SIZE, DEF_RTTARRAY_UNIT);
-}
-
-/*
- * set_datafile:
- * Set the datafile to read
- *
- * Return -1 on failure
- * Return a non-negative integer otherwise
- */
-int
-set_datafile(char *new_file) {
- char *dfname_tmp;
-
- if ((new_file == NULL) || (new_file[0] == '\0')) {
- fprintf(stderr, "Error: null datafile name\n");
- return (-1);
- }
-
- if ((dfname_tmp = malloc(strlen(new_file) + 1)) == NULL) {
- fprintf(stderr, "Error allocating memory for datafile name: "
- "%s\n", new_file);
- return (-1);
- }
-
- free(datafile_name);
- datafile_name = dfname_tmp;
-
- strcpy(datafile_name, new_file);
- use_stdin = FALSE;
-
- return (0);
-}
-
-/*
- * set_input_stdin:
- * Set the input to be stdin (instead of a datafile)
- */
-void
-set_input_stdin(void) {
- use_stdin = TRUE;
- free(datafile_name);
- datafile_name = NULL;
-}
-
-/*
- * set_server:
- * Set the server to be queried
- *
- * Return -1 on failure
- * Return a non-negative integer otherwise
- */
-int
-set_server(char *new_name) {
- static struct hostent *server_he;
-
- /* If no change in server name, don't do anything... */
- if ((server_to_query != NULL) && (new_name != NULL))
- if (strcmp(new_name, server_to_query) == 0)
- return (0);
-
- if ((new_name == NULL) || (new_name[0] == '\0')) {
- fprintf(stderr, "Error: null server name\n");
- return (-1);
- }
-
- free(server_to_query);
- server_to_query = NULL;
-
- if ((server_to_query = malloc(strlen(new_name) + 1)) == NULL) {
- fprintf(stderr, "Error allocating memory for server name: "
- "%s\n", new_name);
- return (-1);
- }
-
- strcpy(server_to_query, new_name);
-
- return (0);
-}
-
-/*
- * set_server_port:
- * Set the port on which to contact the server
- *
- * Return -1 if port is invalid
- * Return a non-negative integer otherwise
- */
-int
-set_server_port(char *new_port) {
- unsigned int uint_val;
-
- if ((is_uint(new_port, &uint_val)) != TRUE)
- return (-1);
-
- if (uint_val && uint_val > MAX_PORT)
- return (-1);
- else {
- if (server_port != NULL && new_port != NULL &&
- strcmp(server_port, new_port) == 0)
- return (0);
-
- free(server_port);
- server_port = NULL;
-
- if ((server_port = malloc(strlen(new_port) + 1)) == NULL) {
- fprintf(stderr,
- "Error allocating memory for server port: "
- "%s\n", new_port);
- return (-1);
- }
-
- strcpy(server_port, new_port);
-
- return (0);
- }
-}
-
-int
-set_server_sa(void) {
- struct addrinfo hints, *res;
- static struct protoent *proto;
- int error;
-
- if (proto == NULL && (proto = getprotobyname("udp")) == NULL) {
- fprintf(stderr, "Error: getprotobyname call failed");
- return (-1);
- }
-
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = family;
- hints.ai_socktype = SOCK_DGRAM;
- hints.ai_protocol = proto->p_proto;
- if ((error = getaddrinfo(server_to_query, server_port,
- &hints, &res)) != 0) {
- fprintf(stderr, "Error: getaddrinfo(%s, %s) failed\n",
- server_to_query, server_port);
- return (-1);
- }
-
- /* replace the server's addrinfo */
- if (server_ai != NULL)
- freeaddrinfo(server_ai);
- server_ai = res;
- return (0);
-}
-
-/*
- * is_digit:
- * Tests if a character is a digit
- *
- * Return TRUE if it is
- * Return FALSE if it is not
- */
-int
-is_digit(char d) {
- if (d < '0' || d > '9')
- return (FALSE);
- else
- return (TRUE);
-}
-
-/*
- * is_uint:
- * Tests if a string, test_int, is a valid unsigned integer
- *
- * Sets *result to be the unsigned integer if it is valid
- *
- * Return TRUE if it is
- * Return FALSE if it is not
- */
-int
-is_uint(char *test_int, unsigned int *result) {
- unsigned long int value;
- char *end;
-
- if (test_int == NULL)
- return (FALSE);
-
- if (is_digit(test_int[0]) == FALSE)
- return (FALSE);
-
- value = strtoul(test_int, &end, 10);
-
- if ((errno == ERANGE) || (*end != '\0') || (value > UINT_MAX))
- return (FALSE);
-
- *result = (unsigned int)value;
- return (TRUE);
-}
-
-/*
- * set_max_queries:
- * Set the maximum number of outstanding queries
- *
- * Returns -1 on failure
- * Returns a non-negative integer otherwise
- */
-int
-set_max_queries(unsigned int new_max) {
- static unsigned int size_qs = sizeof(struct query_status);
- struct query_status *temp_stat;
- unsigned int count;
-
- if (new_max > query_status_allocated) {
- temp_stat = realloc(status, new_max * size_qs);
-
- if (temp_stat == NULL) {
- fprintf(stderr, "Error resizing query_status\n");
- return (-1);
- } else {
- status = temp_stat;
-
- /*
- * Be careful to only initialise between above
- * the previously allocated space. Note that the
- * allocation may be larger than the current
- * max_queries_outstanding. We don't want to
- * "forget" any outstanding queries! We might
- * still have some above the bounds of the max.
- */
- count = query_status_allocated;
- for (; count < new_max; count++) {
- status[count].in_use = FALSE;
- status[count].magic = QUERY_STATUS_MAGIC;
- status[count].desc = NULL;
- }
-
- query_status_allocated = new_max;
- }
- }
-
- max_queries_outstanding = new_max;
-
- return (0);
-}
-
-/*
- * parse_args:
- * Parse program arguments and set configuration options
- *
- * Return -1 on failure
- * Return a non-negative integer otherwise
- */
-int
-parse_args(int argc, char **argv) {
- int c;
- unsigned int uint_arg_val;
-
- while ((c = getopt(argc, argv,
- "f:q:t:i:nd:s:p:1l:b:eDcvr:RT:u:H:h")) != -1) {
- switch (c) {
- case 'f':
- if (strcmp(optarg, "inet") == 0)
- family = AF_INET;
-#ifdef AF_INET6
- else if (strcmp(optarg, "inet6") == 0)
- family = AF_INET6;
-#endif
- else if (strcmp(optarg, "any") == 0)
- family = AF_UNSPEC;
- else {
- fprintf(stderr, "Invalid address family: %s\n",
- optarg);
- return (-1);
- }
- break;
- case 'q':
- if (is_uint(optarg, &uint_arg_val) == TRUE) {
- set_max_queries(uint_arg_val);
- queriesset = TRUE;
- } else {
- fprintf(stderr, "Option requires a positive "
- "integer value: -%c %s\n",
- c, optarg);
- return (-1);
- }
- break;
-
- case 't':
- if (is_uint(optarg, &uint_arg_val) == TRUE) {
- query_timeout = uint_arg_val;
- timeoutset = TRUE;
- } else {
- fprintf(stderr, "Option requires a positive "
- "integer value: -%c %s\n",
- c, optarg);
- return (-1);
- }
- break;
-
- case 'n':
- ignore_config_changes = TRUE;
- break;
-
- case 'd':
- if (set_datafile(optarg) == -1) {
- fprintf(stderr, "Error setting datafile "
- "name: %s\n", optarg);
- return (-1);
- }
- break;
-
- case 's':
- if (set_server(optarg) == -1) {
- fprintf(stderr, "Error setting server "
- "name: %s\n", optarg);
- return (-1);
- }
- serverset = TRUE;
- break;
-
- case 'p':
- if (is_uint(optarg, &uint_arg_val) == TRUE &&
- uint_arg_val < MAX_PORT)
- {
- set_server_port(optarg);
- portset = TRUE;
- } else {
- fprintf(stderr, "Option requires a positive "
- "integer between 0 and %d: -%c %s\n",
- MAX_PORT - 1, c, optarg);
- return (-1);
- }
- break;
-
- case '1':
- run_only_once = TRUE;
- break;
-
- case 'l':
- if (is_uint(optarg, &uint_arg_val) == TRUE) {
- use_timelimit = TRUE;
- run_timelimit = uint_arg_val;
- } else {
- fprintf(stderr, "Option requires a positive "
- "integer: -%c %s\n",
- c, optarg);
- return (-1);
- }
- break;
-
- case 'b':
- if (is_uint(optarg, &uint_arg_val) == TRUE) {
- socket_bufsize = uint_arg_val;
- } else {
- fprintf(stderr, "Option requires a positive "
- "integer: -%c %s\n",
- c, optarg);
- return (-1);
- }
- break;
- case 'e':
- edns = TRUE;
- break;
- case 'D':
- dnssec = TRUE;
- edns = TRUE;
- break;
- case 'c':
- countrcodes = TRUE;
- break;
- case 'v':
- verbose = 1;
- break;
- case 'i':
- if (is_uint(optarg, &uint_arg_val) == TRUE)
- print_interval = uint_arg_val;
- else {
- fprintf(stderr, "Invalid interval: %s\n",
- optarg);
- return (-1);
- }
- break;
- case 'R':
- recurse = 0;
- break;
- case 'r':
- if (is_uint(optarg, &uint_arg_val) == TRUE)
- rttarray_size = uint_arg_val;
- else {
- fprintf(stderr, "Invalid RTT array size: %s\n",
- optarg);
- return (-1);
- }
- break;
- case 'u':
- if (is_uint(optarg, &uint_arg_val) == TRUE)
- rttarray_unit = uint_arg_val;
- else {
- fprintf(stderr, "Invalid RTT unit: %s\n",
- optarg);
- return (-1);
- }
- break;
- case 'H':
- rtt_histogram_file = optarg;
- break;
- case 'T':
- if (is_uint(optarg, &uint_arg_val) == TRUE)
- target_qps = uint_arg_val;
- else {
- fprintf(stderr, "Invalid target qps: %s\n",
- optarg);
- return (-1);
- }
- break;
- case 'h':
- return (-1);
- default:
- fprintf(stderr, "Invalid option: -%c\n", optopt);
- return (-1);
- }
- }
-
- if (run_only_once == FALSE && use_timelimit == FALSE)
- run_only_once = TRUE;
-
- return (0);
-}
-
-/*
- * open_datafile:
- * Open the data file ready for reading
- *
- * Return -1 on failure
- * Return non-negative integer on success
- */
-int
-open_datafile(void) {
- if (use_stdin == TRUE) {
- datafile_ptr = stdin;
- return (0);
- } else {
- if ((datafile_ptr = fopen(datafile_name, "r")) == NULL) {
- fprintf(stderr, "Error: unable to open datafile: %s\n",
- datafile_name);
- return (-1);
- } else
- return (0);
- }
-}
-
-/*
- * close_datafile:
- * Close the data file if any is open
- *
- * Return -1 on failure
- * Return non-negative integer on success, including if not needed
- */
-int
-close_datafile(void) {
- if ((use_stdin == FALSE) && (datafile_ptr != NULL)) {
- if (fclose(datafile_ptr) != 0) {
- fprintf(stderr, "Error: unable to close datafile\n");
- return (-1);
- }
- }
-
- return (0);
-}
-
-/*
- * open_socket:
- * Open a socket for the queries. When we have an active socket already,
- * close it and open a new one.
- *
- * Return -1 on failure
- * Return the socket identifier
- */
-int
-open_socket(void) {
- int sock;
- int ret;
- int bufsize;
- struct addrinfo hints, *res;
-
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = server_ai->ai_family;
- hints.ai_socktype = server_ai->ai_socktype;
- hints.ai_protocol = server_ai->ai_protocol;
- hints.ai_flags = AI_PASSIVE;
-
- if ((ret = getaddrinfo(NULL, "0", &hints, &res)) != 0) {
- fprintf(stderr,
- "Error: getaddrinfo for bind socket failed: %s\n",
- gai_strerror(ret));
- return (-1);
- }
-
- if ((sock = socket(res->ai_family, SOCK_DGRAM,
- res->ai_protocol)) == -1) {
- fprintf(stderr, "Error: socket call failed");
- goto fail;
- }
-
-#if defined(AF_INET6) && defined(IPV6_V6ONLY)
- if (res->ai_family == AF_INET6) {
- int on = 1;
-
- if (setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY,
- &on, sizeof(on)) == -1) {
- fprintf(stderr,
- "Warning: setsockopt(IPV6_V6ONLY) failed\n");
- }
- }
-#endif
-
- if (bind(sock, res->ai_addr, res->ai_addrlen) == -1)
- fprintf(stderr, "Error: bind call failed");
-
- freeaddrinfo(res);
-
- bufsize = 1024 * socket_bufsize;
-
- ret = setsockopt(sock, SOL_SOCKET, SO_RCVBUF,
- (char *) &bufsize, sizeof(bufsize));
- if (ret < 0)
- fprintf(stderr, "Warning: setsockbuf(SO_RCVBUF) failed\n");
-
- ret = setsockopt(sock, SOL_SOCKET, SO_SNDBUF,
- (char *) &bufsize, sizeof(bufsize));
- if (ret < 0)
- fprintf(stderr, "Warning: setsockbuf(SO_SNDBUF) failed\n");
-
- return (sock);
-
- fail:
- if (res)
- freeaddrinfo(res);
- return (-1);
-}
-
-/*
- * close_socket:
- * Close the query socket(s)
- *
- * Return -1 on failure
- * Return a non-negative integer otherwise
- */
-int
-close_socket(void) {
- if (socket4 != -1) {
- if (close(socket4) != 0) {
- fprintf(stderr,
- "Error: unable to close IPv4 socket\n");
- return (-1);
- }
- }
-
- if (socket6 != -1) {
- if (close(socket6) != 0) {
- fprintf(stderr,
- "Error: unable to close IPv6 socket\n");
- return (-1);
- }
- }
-
- query_socket = -1;
-
- return (0);
-}
-
-/*
- * change_socket:
- * Choose an appropriate socket according to the address family of the
- * current server. Open a new socket if necessary.
- *
- * Return -1 on failure
- * Return the socket identifier
- */
-int
-change_socket(void) {
- int s, *sockp;
-
- switch (server_ai->ai_family) {
- case AF_INET:
- sockp = &socket4;
- break;
-#ifdef AF_INET6
- case AF_INET6:
- sockp = &socket6;
- break;
-#endif
- default:
- fprintf(stderr, "unexpected address family: %d\n",
- server_ai->ai_family);
- exit(1);
- }
-
- if (*sockp == -1) {
- if ((s = open_socket()) == -1)
- return (-1);
- *sockp = s;
- }
-
- return (*sockp);
-}
-
-/*
- * reset_rttarray:
- * (re)allocate RTT array and zero-clear the whole buffer.
- * if array is being used, it is freed.
- * Returns -1 on failure
- * Returns a non-negative integer otherwise
- */
-int
-reset_rttarray(int size) {
- if (rttarray != NULL)
- free(rttarray);
- if (rttarray_interval != NULL)
- free(rttarray_interval);
-
- rttarray = NULL;
- rttarray_interval = NULL;
- rtt_max = -1;
- rtt_min = -1;
-
- if (size > 0) {
- rttarray = malloc(size * sizeof(rttarray[0]));
- if (rttarray == NULL) {
- fprintf(stderr,
- "Error: allocating memory for RTT array\n");
- return (-1);
- }
- memset(rttarray, 0, size * sizeof(rttarray[0]));
-
- rttarray_interval = malloc(size *
- sizeof(rttarray_interval[0]));
- if (rttarray_interval == NULL) {
- fprintf(stderr,
- "Error: allocating memory for RTT array\n");
- return (-1);
- }
-
- memset(rttarray_interval, 0,
- size * sizeof(rttarray_interval[0]));
- }
-
- return (0);
-}
-
-/*
- * set_query_interval:
- * set the interval of consecutive queries if the target qps are specified.
- * Returns -1 on failure
- * Returns a non-negative integer otherwise
- */
-int
-set_query_interval(unsigned int qps) {
- if (qps == 0)
- return (0);
-
- query_interval = (1.0 / (double)qps);
-
- return (0);
-}
-
-/*
- * setup:
- * Set configuration options from command line arguments
- * Open datafile ready for reading
- *
- * Return -1 on failure
- * Return non-negative integer on success
- */
-int
-setup(int argc, char **argv) {
- set_input_stdin();
-
- if (set_max_queries(DEF_MAX_QUERIES_OUTSTANDING) == -1) {
- fprintf(stderr, "%s: Unable to set default max outstanding "
- "queries\n", argv[0]);
- return (-1);
- }
-
- if (set_server(DEF_SERVER_TO_QUERY) == -1) {
- fprintf(stderr, "%s: Error setting default server name\n",
- argv[0]);
- return (-1);
- }
-
- if (set_server_port(DEF_SERVER_PORT) == -1) {
- fprintf(stderr, "%s: Error setting default server port\n",
- argv[0]);
- return (-1);
- }
-
- if (parse_args(argc, argv) == -1) {
- show_usage();
- return (-1);
- }
-
- if (open_datafile() == -1)
- return (-1);
-
- if (set_server_sa() == -1)
- return (-1);
-
- if ((query_socket = change_socket()) == -1)
- return (-1);
-
- if (reset_rttarray(rttarray_size) == -1)
- return (-1);
-
- if (set_query_interval(target_qps) == -1)
- return (-1);
-
- return (0);
-}
-
-/*
- * set_timenow:
- * Set a timeval struct to indicate the current time
- */
-void
-set_timenow(struct timeval *tv) {
- if (gettimeofday(tv, NULL) == -1) {
- fprintf(stderr, "Error in gettimeofday(). Using inaccurate "
- "time() instead\n");
- tv->tv_sec = time(NULL);
- tv->tv_usec = 0;
- }
-}
-
-/*
- * addtv:
- * add tv1 and tv2, store the result in tv_result.
- */
-void
-addtv(struct timeval *tv1, struct timeval *tv2, struct timeval *tv_result) {
- tv_result->tv_sec = tv1->tv_sec + tv2->tv_sec;
- tv_result->tv_usec = tv1->tv_usec + tv2->tv_usec;
- if (tv_result->tv_usec > 1000000) {
- tv_result->tv_sec++;
- tv_result->tv_usec -= 1000000;
- }
-}
-
-/*
- * difftv:
- * Find the difference in seconds between two timeval structs.
- *
- * Return the difference between tv1 and tv2 in seconds in a double.
- */
-double
-difftv(struct timeval tv1, struct timeval tv2) {
- long diff_sec, diff_usec;
- double diff;
-
- diff_sec = tv1.tv_sec - tv2.tv_sec;
- diff_usec = tv1.tv_usec - tv2.tv_usec;
-
- diff = (double)diff_sec + ((double)diff_usec / 1000000.0);
-
- return (diff);
-}
-
-/*
- * timelimit_reached:
- * Have we reached the time limit (if any)?
- *
- * Returns FALSE if there is no time limit or if we have not reached it
- * Returns TRUE otherwise
- */
-int
-timelimit_reached(void) {
- struct timeval time_now;
-
- set_timenow(&time_now);
-
- if (use_timelimit == FALSE)
- return (FALSE);
-
- if (setup_phase == TRUE) {
- if (difftv(time_now, time_of_program_start)
- < (double)(run_timelimit + HARD_TIMEOUT_EXTRA))
- return (FALSE);
- else
- return (TRUE);
- } else {
- if (difftv(time_now, time_of_first_query)
- < (double)run_timelimit)
- return (FALSE);
- else
- return (TRUE);
- }
-}
-
-/*
- * keep_sending:
- * Should we keep sending queries or stop here?
- *
- * Return TRUE if we should keep on sending queries
- * Return FALSE if we should stop
- *
- * Side effects:
- * Rewinds the input and clears reached_end_input if we have reached the
- * end of the input, but we are meant to run through it multiple times
- * and have not hit the time limit yet (if any is set).
- */
-int
-keep_sending(int *reached_end_input) {
- static int stop = FALSE;
-
- if (stop == TRUE)
- return (FALSE);
-
- if ((*reached_end_input == FALSE) && (timelimit_reached() == FALSE))
- return (TRUE);
- else if ((*reached_end_input == TRUE) && (run_only_once == FALSE)
- && (timelimit_reached() == FALSE)) {
- rewind(datafile_ptr);
- *reached_end_input = FALSE;
- runs_through_file++;
- return (TRUE);
- } else {
- if (*reached_end_input == TRUE)
- runs_through_file++;
- set_timenow(&time_of_stop_sending);
- stop = TRUE;
- return (FALSE);
- }
-}
-
-/*
- * queries_outstanding:
- * How many queries are outstanding?
- *
- * Returns the number of outstanding queries
- */
-unsigned int
-queries_outstanding(void) {
- return (num_queries_outstanding);
-}
-
-/*
- * next_input_line:
- * Get the next non-comment line from the input file
- *
- * Put text in line, up to max of n chars. Skip comment lines.
- * Skip empty lines.
- *
- * Return line length on success
- * Return 0 if cannot read a non-comment line (EOF or error)
- */
-int
-next_input_line(char *line, int n) {
- char *result;
-
- do {
- result = fgets(line, n, datafile_ptr);
- } while ((result != NULL) &&
- ((line[0] == COMMENT_CHAR) || (line[0] == '\n')));
-
- if (result == NULL)
- return (0);
- else
- return (strlen(line));
-}
-
-/*
- * identify_directive:
- * Gives us a numerical value equivelant for a directive string
- *
- * Returns the value for the directive
- * Returns -1 if not a valid directive
- */
-int
-identify_directive(char *dir) {
- static char *directives[] = DIRECTIVES;
- static int dir_values[] = DIR_VALUES;
- unsigned int index, num_directives;
-
- num_directives = sizeof(directives) / sizeof(directives[0]);
-
- if (num_directives > (sizeof(dir_values) / sizeof(int)))
- num_directives = sizeof(dir_values) / sizeof(int);
-
- for (index = 0; index < num_directives; index++) {
- if (strcmp(dir, directives[index]) == 0)
- return (dir_values[index]);
- }
-
- return (-1);
-}
-
-/*
- * update_config:
- * Update configuration options from a line from the input file
- */
-void
-update_config(char *config_change_desc) {
- char *directive, *config_value, *trailing_garbage;
- char conf_copy[MAX_INPUT_LEN + 1];
- unsigned int uint_val;
- int directive_number;
- int check;
- int old_af;
-
- if (ignore_config_changes == TRUE) {
- fprintf(stderr, "Ignoring configuration change: %s",
- config_change_desc);
- return;
- }
-
- strcpy(conf_copy, config_change_desc);
-
- ++config_change_desc;
-
- if (*config_change_desc == '\0') {
- fprintf(stderr, "Invalid config: No directive present: %s\n",
- conf_copy);
- return;
- }
-
- if (index(WHITESPACE, *config_change_desc) != NULL) {
- fprintf(stderr, "Invalid config: Space before directive or "
- "no directive present: %s\n", conf_copy);
- return;
- }
-
- directive = strtok(config_change_desc, WHITESPACE);
- config_value = strtok(NULL, WHITESPACE);
- trailing_garbage = strtok(NULL, WHITESPACE);
-
- if ((directive_number = identify_directive(directive)) == -1) {
- fprintf(stderr, "Invalid config: Bad directive: %s\n",
- conf_copy);
- return;
- }
-
- if (config_value == NULL) {
- fprintf(stderr, "Invalid config: No value present: %s\n",
- conf_copy);
- return;
- }
-
- if (trailing_garbage != NULL) {
- fprintf(stderr, "Config warning: "
- "trailing garbage: %s\n", conf_copy);
- }
-
- switch(directive_number) {
-
- case V_SERVER:
- if (serverset && (setup_phase == TRUE)) {
- fprintf(stderr, "Config change overridden by command "
- "line: %s\n", directive);
- return;
- }
-
- if (set_server(config_value) == -1) {
- fprintf(stderr, "Set server error: unable to change "
- "the server name to '%s'\n", config_value);
- return;
- }
-
- old_af = server_ai->ai_family;
- if (set_server_sa() == -1) {
- fprintf(stderr, "Set server error: unable to resolve "
- "a new server '%s'\n",
- config_value);
- return;
- }
- if (old_af != server_ai->ai_family) {
- if ((query_socket = change_socket()) == -1) {
- /* XXX: this is fatal */
- fprintf(stderr, "Set server error: "
- "unable to open a new socket "
- "for '%s'\n", config_value);
- exit(1);
- }
- }
-
- break;
-
- case V_PORT:
- if (portset && (setup_phase == TRUE)) {
- fprintf(stderr, "Config change overridden by command "
- "line: %s\n", directive);
- return;
- }
-
- check = is_uint(config_value, &uint_val);
-
- if ((check == TRUE) && (uint_val > 0)) {
- if (set_server_port(config_value) == -1) {
- fprintf(stderr, "Invalid config: Bad value for"
- " %s: %s\n", directive, config_value);
- } else {
- if (set_server_sa() == -1) {
- fprintf(stderr,
- "Failed to set a new port\n");
- return;
- }
- }
- } else
- fprintf(stderr, "Invalid config: Bad value for "
- "%s: %s\n", directive, config_value);
- break;
-
- case V_MAXQUERIES:
- if (queriesset && (setup_phase == TRUE)) {
- fprintf(stderr, "Config change overridden by command "
- "line: %s\n", directive);
- return;
- }
-
- check = is_uint(config_value, &uint_val);
-
- if ((check == TRUE) && (uint_val > 0)) {
- set_max_queries(uint_val);
- } else
- fprintf(stderr, "Invalid config: Bad value for "
- "%s: %s\n", directive, config_value);
- break;
-
- case V_MAXWAIT:
- if (timeoutset && (setup_phase == TRUE)) {
- fprintf(stderr, "Config change overridden by command "
- "line: %s\n", directive);
- return;
- }
-
- check = is_uint(config_value, &uint_val);
-
- if ((check == TRUE) && (uint_val > 0)) {
- query_timeout = uint_val;
- } else
- fprintf(stderr, "Invalid config: Bad value for "
- "%s: %s\n", directive, config_value);
- break;
-
- default:
- fprintf(stderr, "Invalid config: Bad directive: %s\n",
- directive);
- break;
- }
-}
-
-/*
- * parse_query:
- * Parse a query line from the input file
- *
- * Set qname to be the domain to query (up to a max of qnlen chars)
- * Set qtype to be the type of the query
- *
- * Return -1 on failure
- * Return a non-negative integer otherwise
- */
-int
-parse_query(char *input, char *qname, unsigned int qnlen, int *qtype) {
- static char *qtype_strings[] = QTYPE_STRINGS;
- static int qtype_codes[] = QTYPE_CODES;
- unsigned int num_types, index;
- int found = FALSE;
- char incopy[MAX_INPUT_LEN + 1];
- char *domain_str, *type_str;
-
- num_types = sizeof(qtype_strings) / sizeof(qtype_strings[0]);
- if (num_types > (sizeof(qtype_codes) / sizeof(int)))
- num_types = sizeof(qtype_codes) / sizeof(int);
-
- strcpy(incopy, input);
-
- domain_str = strtok(incopy, WHITESPACE);
- type_str = strtok(NULL, WHITESPACE);
-
- if ((domain_str == NULL) || (type_str == NULL)) {
- fprintf(stderr, "Invalid query input format: %s\n", input);
- return (-1);
- }
-
- if (strlen(domain_str) > qnlen) {
- fprintf(stderr, "Query domain too long: %s\n", domain_str);
- return (-1);
- }
-
- for (index = 0; (index < num_types) && (found == FALSE); index++) {
- if (strcasecmp(type_str, qtype_strings[index]) == 0) {
- *qtype = qtype_codes[index];
- found = TRUE;
- }
- }
-
- if (found == FALSE) {
- fprintf(stderr, "Query type not understood: %s\n", type_str);
- return (-1);
- }
-
- strcpy(qname, domain_str);
-
- return (0);
-}
-
-/*
- * dispatch_query:
- * Send the query packet for the entry
- *
- * Return -1 on failure
- * Return a non-negative integer otherwise
- */
-int
-dispatch_query(unsigned short int id, char *dom, int qt, u_char **pktp,
- int *pktlenp)
-{
- static u_char packet_buffer[PACKETSZ + 1];
- int buffer_len = PACKETSZ;
- int bytes_sent;
- unsigned short int net_id = htons(id);
- char *id_ptr = (char *)&net_id;
- HEADER *hp = (HEADER *)packet_buffer;
-
- buffer_len = res_mkquery(QUERY, dom, C_IN, qt, NULL, 0,
- NULL, packet_buffer, PACKETSZ);
- if (buffer_len == -1) {
- fprintf(stderr, "Failed to create query packet: %s %d\n",
- dom, qt);
- return (-1);
- }
- hp->rd = recurse;
- if (edns) {
- unsigned char *p;
- if (buffer_len + EDNSLEN >= PACKETSZ) {
- fprintf(stderr, "Failed to add OPT to query packet\n");
- return (-1);
- }
- packet_buffer[11] = 1;
- p = &packet_buffer[buffer_len];
- *p++ = 0; /* root name */
- *p++ = 0;
- *p++ = 41; /* OPT */
- *p++ = 16;
- *p++ = 0; /* UDP payload size (4K) */
- *p++ = 0; /* extended rcode */
- *p++ = 0; /* version */
- if (dnssec)
- *p++ = 0x80; /* upper flag bits - DO set */
- else
- *p++ = 0; /* upper flag bits */
- *p++ = 0; /* lower flag bit */
- *p++ = 0;
- *p++ = 0; /* rdlen == 0 */
- buffer_len += EDNSLEN;
- }
-
- packet_buffer[0] = id_ptr[0];
- packet_buffer[1] = id_ptr[1];
-
- bytes_sent = sendto(query_socket, packet_buffer, buffer_len, 0,
- server_ai->ai_addr, server_ai->ai_addrlen);
- if (bytes_sent == -1) {
- fprintf(stderr, "Failed to send query packet: %s %d\n",
- dom, qt);
- return (-1);
- }
-
- if (bytes_sent != buffer_len)
- fprintf(stderr, "Warning: incomplete packet sent: %s %d\n",
- dom, qt);
-
- *pktp = packet_buffer;
- *pktlenp = buffer_len;
-
- return (0);
-}
-
-/*
- * send_query:
- * Send a query based on a line of input
- */
-void
-send_query(char *query_desc) {
- static unsigned short int use_query_id = 0;
- static int qname_len = MAX_DOMAIN_LEN;
- static char domain[MAX_DOMAIN_LEN + 1];
- u_char *qpkt;
- char serveraddr[NI_MAXHOST];
- int query_type, qpkt_len;
- unsigned int count;
-
- use_query_id++;
-
- if (parse_query(query_desc, domain, qname_len, &query_type) == -1) {
- fprintf(stderr, "Error parsing query: %s\n", query_desc);
- return;
- }
-
- if (dispatch_query(use_query_id, domain, query_type,
- &qpkt, &qpkt_len) == -1) {
- char *addrstr;
-
- if (getnameinfo(server_ai->ai_addr, server_ai->ai_addrlen,
- serveraddr, sizeof(serveraddr), NULL, 0,
- NI_NUMERICHOST) == 0) {
- addrstr = serveraddr;
- } else
- addrstr = "???"; /* XXX: this should not happen */
- fprintf(stderr, "Error sending query to %s: %s\n",
- addrstr, query_desc);
- return;
- }
-
- if (setup_phase == TRUE) {
- set_timenow(&time_of_first_query);
- time_of_first_query_sec = (double)time_of_first_query.tv_sec +
- ((double)time_of_first_query.tv_usec / 1000000.0);
- setup_phase = FALSE;
- if (getnameinfo(server_ai->ai_addr, server_ai->ai_addrlen,
- serveraddr, sizeof(serveraddr), NULL, 0,
- NI_NUMERICHOST) != 0) {
- fprintf(stderr, "Error printing server address\n");
- return;
- }
- printf("[Status] Sending queries (beginning with %s)\n",
- serveraddr);
- }
-
- /* Find the first slot in status[] that is not in use */
- for (count = 0; (status[count].in_use == TRUE)
- && (count < max_queries_outstanding); count++);
-
- if (status[count].in_use == TRUE) {
- fprintf(stderr, "Unexpected error: We have run out of "
- "status[] space!\n");
- return;
- }
-
- /* Register the query in status[] */
- status[count].id = use_query_id;
- if (verbose)
- status[count].desc = strdup(query_desc);
- set_timenow(&status[count].sent_timestamp);
- status[count].qtype = query_type;
- if (dn_expand(qpkt, qpkt + qpkt_len, qpkt + DNS_HEADERLEN,
- status[count].qname, MAX_DOMAIN_LEN) == -1) {
- fprintf(stderr, "Unexpected error: "
- "query message doesn't have qname?\n");
- return;
- }
- status[count].in_use = TRUE;
-
- if (num_queries_sent_interval == 0)
- set_timenow(&time_of_first_query_interval);
-
- num_queries_sent++;
- num_queries_sent_interval++;
- num_queries_outstanding++;
-}
-
-void
-register_rtt(struct timeval *timestamp, char *qname, int qtype,
- unsigned int rcode)
-{
- int i;
- int oldquery = FALSE;
- struct timeval now;
- double rtt;
-
- set_timenow(&now);
- rtt = difftv(now, *timestamp);
-
- if (difftv(*timestamp, time_of_first_query_interval) < 0)
- oldquery = TRUE;
-
- if (rtt_max < 0 || rtt_max < rtt)
- rtt_max = rtt;
-
- if (rtt_min < 0 || rtt_min > rtt)
- rtt_min = rtt;
-
- rtt_total += rtt;
- rtt_counted++;
-
- if (!oldquery) {
- if (rtt_max_interval < 0 || rtt_max_interval < rtt)
- rtt_max_interval = rtt;
-
- if (rtt_min_interval < 0 || rtt_min_interval > rtt)
- rtt_min_interval = rtt;
-
- rtt_total_interval += rtt;
- rtt_counted_interval++;
- }
-
- if (rttarray == NULL)
- return;
-
- i = (int)(rtt * (1000000.0 / rttarray_unit));
- if (i < rttarray_size) {
- rttarray[i]++;
- if (!oldquery)
- rttarray_interval[i]++;
- } else {
- fprintf(stderr, "Warning: RTT is out of range: %.6lf "
- "[query=%s/%d, rcode=%u]\n", rtt, qname, qtype, rcode);
- rtt_overflows++;
- if (!oldquery)
- rtt_overflows_interval++;
- }
-}
-
-/*
- * register_response:
- * Register receipt of a query
- *
- * Removes (sets in_use = FALSE) the record for the given query id in
- * status[] if any exists.
- */
-void
-register_response(unsigned short int id, unsigned int rcode, char *qname,
- int qtype)
-{
- unsigned int ct = 0;
- int found = FALSE;
- struct timeval now;
- double rtt;
-
- if (timeout_queries != NULL) {
- struct query_mininfo *qi = &timeout_queries[id];
-
- if (qi->qtype == qtype && strcasecmp(qi->qname, qname) == 0) {
- register_rtt(&qi->sent_timestamp, qname, qtype, rcode);
- qi->qtype = -1;
- found = TRUE;
- }
- }
-
- for (; (ct < query_status_allocated) && (found == FALSE); ct++) {
- if (status[ct].in_use == TRUE && status[ct].id == id &&
- status[ct].qtype == qtype &&
- strcasecmp(status[ct].qname, qname) == 0) {
- status[ct].in_use = FALSE;
- num_queries_outstanding--;
- found = TRUE;
-
- register_rtt(&status[ct].sent_timestamp, qname, qtype,
- rcode);
-
- if (status[ct].desc) {
- printf("> %s %s\n", rcode_strings[rcode],
- status[ct].desc);
- free(status[ct].desc);
- }
- }
- }
-
- if (countrcodes && (found == TRUE || target_qps > 0))
- rcodecounts[rcode]++;
-
- if (found == FALSE) {
- if (target_qps > 0) {
- num_queries_possiblydelayed++;
- num_queries_possiblydelayed_interval++;
- } else {
- fprintf(stderr,
- "Warning: Received a response with an "
- "unexpected (maybe timed out) id: %u\n", id);
- }
- }
-}
-
-/*
- * process_single_response:
- * Receive from the given socket & process an invididual response packet.
- * Remove it from the list of open queries (status[]) and decrement the
- * number of outstanding queries if it matches an open query.
- */
-void
-process_single_response(int sockfd) {
- struct sockaddr_storage from_addr_ss;
- struct sockaddr *from_addr;
- static unsigned char in_buf[MAX_BUFFER_LEN];
- char qname[MAX_DOMAIN_LEN + 1];
- int numbytes, addr_len, resp_id, qnamelen;
- int qtype, flags;
-
- memset(&from_addr_ss, 0, sizeof(from_addr_ss));
- from_addr = (struct sockaddr *)&from_addr_ss;
- addr_len = sizeof(from_addr_ss);
-
- if ((numbytes = recvfrom(sockfd, in_buf, MAX_BUFFER_LEN,
- 0, from_addr, &addr_len)) == -1) {
- fprintf(stderr, "Error receiving datagram\n");
- return;
- }
-
- if (numbytes < DNS_HEADERLEN) {
- if (verbose)
- fprintf(stderr, "Malformed response\n");
- return;
- }
- resp_id = get_uint16(in_buf);
- flags = get_uint16(in_buf + 2);
- qnamelen = dn_expand(in_buf, in_buf + numbytes, in_buf + DNS_HEADERLEN,
- qname, MAX_DOMAIN_LEN);
- if (qnamelen == -1) {
- if (verbose)
- fprintf(stderr,
- "Failed to retrieve qname from response\n");
- return;
- }
- if (numbytes < DNS_HEADERLEN + qnamelen + 2) {
- if (verbose)
- fprintf(stderr, "Malformed response\n");
- return;
- }
- qtype = get_uint16(in_buf + DNS_HEADERLEN + qnamelen);
-
- register_response(resp_id, flags & 0xF, qname, qtype);
-}
-
-/*
- * data_available:
- * Is there data available on the given file descriptor?
- *
- * Return TRUE if there is
- * Return FALSE otherwise
- */
-int
-data_available(double wait) {
- fd_set read_fds;
- struct timeval tv;
- int retval;
- int available = FALSE;
- int maxfd = -1;
-
- /* Set list of file descriptors */
- FD_ZERO(&read_fds);
- if (socket4 != -1) {
- FD_SET(socket4, &read_fds);
- maxfd = socket4;
- }
- if (socket6 != -1) {
- FD_SET(socket6, &read_fds);
- if (maxfd == -1 || maxfd < socket6)
- maxfd = socket6;
- }
-
- if ((wait > 0.0) && (wait < (double)LONG_MAX)) {
- tv.tv_sec = (long)floor(wait);
- tv.tv_usec = (long)(1000000.0 * (wait - floor(wait)));
- } else {
- tv.tv_sec = 0;
- tv.tv_usec = 0;
- }
-
- retval = select(maxfd + 1, &read_fds, NULL, NULL, &tv);
-
- if (socket4 != -1 && FD_ISSET(socket4, &read_fds)) {
- available = TRUE;
- process_single_response(socket4);
- }
- if (socket6 != -1 && FD_ISSET(socket6, &read_fds)) {
- available = TRUE;
- process_single_response(socket6);
- }
-
- return (available);
-}
-
-/*
- * process_responses:
- * Go through any/all received responses and remove them from the list of
- * open queries (set in_use = FALSE for their entry in status[]), also
- * decrementing the number of outstanding queries.
- */
-void
-process_responses(int adjust_rate) {
- double wait;
- struct timeval now, waituntil;
- double first_packet_wait = RESPONSE_BLOCKING_WAIT_TIME;
- unsigned int outstanding = queries_outstanding();
-
- if (adjust_rate == TRUE) {
- double u;
-
- u = time_of_first_query_sec +
- query_interval * num_queries_sent;
- waituntil.tv_sec = (long)floor(u);
- waituntil.tv_usec = (long)(1000000.0 * (u - waituntil.tv_sec));
-
- /*
- * Wait until a response arrives or the specified limit is
- * reached.
- */
- while (1) {
- set_timenow(&now);
- wait = difftv(waituntil, now);
- if (wait <= 0)
- wait = 0.0;
- if (data_available(wait) != TRUE)
- break;
-
- /*
- * We have reached the limit. Read as many responses
- * as possible without waiting, and exit.
- */
- if (wait == 0) {
- while (data_available(0.0) == TRUE)
- ;
- break;
- }
- }
- } else {
- /*
- * Don't block waiting for packets at all if we aren't
- * looking for any responses or if we are now able to send new
- * queries.
- */
- if ((outstanding == 0) ||
- (outstanding < max_queries_outstanding)) {
- first_packet_wait = 0.0;
- }
-
- if (data_available(first_packet_wait) == TRUE) {
- while (data_available(0.0) == TRUE)
- ;
- }
- }
-}
-
-/*
- * retire_old_queries:
- * Go through the list of open queries (status[]) and remove any queries
- * (i.e. set in_use = FALSE) which are older than the timeout, decrementing
- * the number of queries outstanding for each one removed.
- */
-void
-retire_old_queries(int sending) {
- unsigned int count = 0;
- struct timeval curr_time;
- double timeout = query_timeout;
- int timeout_reduced = FALSE;
-
- /*
- * If we have target qps and would not be able to send any packets
- * due to buffer full, check whether we are behind the schedule.
- * If we are, purge some queries more aggressively.
- */
- if (target_qps > 0 && sending == TRUE && count == 0 &&
- queries_outstanding() == max_queries_outstanding) {
- struct timeval next, now;
- double n;
-
- n = time_of_first_query_sec +
- query_interval * num_queries_sent;
- next.tv_sec = (long)floor(n);
- next.tv_usec = (long)(1000000.0 * (n - next.tv_sec));
-
- set_timenow(&now);
- if (difftv(next, now) <= 0) {
- timeout_reduced = TRUE;
- timeout = 0.001; /* XXX: ad-hoc value */
- }
- }
-
- set_timenow(&curr_time);
-
- for (; count < query_status_allocated; count++) {
- if ((status[count].in_use == TRUE) &&
- (difftv(curr_time,
- status[count].sent_timestamp) >= (double)timeout))
- {
- status[count].in_use = FALSE;
- num_queries_outstanding--;
-
- if (timeout_queries != NULL) {
- struct query_mininfo *qi;
-
- qi = &timeout_queries[status[count].id];
- if (qi->qtype != -1) {
- /* now really retire this query */
- num_queries_timed_out++;
- num_queries_timed_out_interval++;
- }
- qi->qtype = status[count].qtype;
- qi->sent_timestamp =
- status[count].sent_timestamp;
- strcpy(qi->qname, status[count].qname);
- } else {
- num_queries_timed_out++;
- num_queries_timed_out_interval++;
- }
-
- if (timeout_reduced == FALSE) {
- if (status[count].desc) {
- printf("> T %s\n", status[count].desc);
- free(status[count].desc);
- } else {
- printf("[Timeout] Query timed out: "
- "msg id %u\n",
- status[count].id);
- }
- }
- }
- }
-}
-
-/*
- * print_histogram
- * Print RTT histogram to the specified file in the gnuplot format
- */
-void
-print_histogram(unsigned int total) {
- int i;
- double ratio;
- FILE *fp;
-
- if (rtt_histogram_file == NULL || rttarray == NULL)
- return;
-
- fp = fopen((const char *)rtt_histogram_file, "w+");
- if (fp == NULL) {
- fprintf(stderr, "Error opening RTT histogram file: %s\n",
- rtt_histogram_file);
- return;
- }
-
- for (i = 0; i < rttarray_size; i++) {
- ratio = ((double)rttarray[i] / (double)total) * 100;
- fprintf(fp, "%.6lf %.3lf\n",
- (double)(i * rttarray_unit) +
- (double)rttarray_unit / 2,
- ratio);
- }
-
- (void)fclose(fp);
-}
-
-/*
- * print_statistics:
- * Print out statistics based on the results of the test
- */
-void
-print_statistics(int intermediate, unsigned int sent, unsigned int timed_out,
- unsigned int possibly_delayed,
- struct timeval *first_query,
- struct timeval *program_start,
- struct timeval *end_perf, struct timeval *end_query,
- unsigned int rcounted, double rmax, double rmin, double rtotal,
- unsigned int roverflows, unsigned int *rarray)
-{
- unsigned int num_queries_completed;
- double per_lost, per_completed, per_lost2, per_completed2;
- double run_time, queries_per_sec, queries_per_sec2;
- double queries_per_sec_total;
- double rtt_average, rtt_stddev;
- struct timeval start_time;
-
- num_queries_completed = sent - timed_out;
-
- if (num_queries_completed == 0) {
- per_lost = 0.0;
- per_completed = 0.0;
-
- per_lost2 = 0.0;
- per_completed2 = 0.0;
- } else {
- per_lost = (100.0 * (double)timed_out) / (double)sent;
- per_completed = 100.0 - per_lost;
-
- per_lost2 = (100.0 * (double)(timed_out - possibly_delayed))
- / (double)sent;
- per_completed2 = 100 - per_lost2;
- }
-
- if (sent == 0) {
- start_time.tv_sec = program_start->tv_sec;
- start_time.tv_usec = program_start->tv_usec;
- run_time = 0.0;
- queries_per_sec = 0.0;
- queries_per_sec2 = 0.0;
- queries_per_sec_total = 0.0;
- } else {
- start_time.tv_sec = first_query->tv_sec;
- start_time.tv_usec = first_query->tv_usec;
- run_time = difftv(*end_perf, *first_query);
- queries_per_sec = (double)num_queries_completed / run_time;
- queries_per_sec2 = (double)(num_queries_completed +
- possibly_delayed) / run_time;
-
- queries_per_sec_total = (double)sent /
- difftv(*end_query, *first_query);
- }
-
- if (rcounted > 0) {
- int i;
- double sum = 0;
-
- rtt_average = rtotal / (double)rcounted;
- for (i = 0; i < rttarray_size; i++) {
- if (rarray[i] != 0) {
- double mean, diff;
-
- mean = (double)(i * rttarray_unit) +
- (double)rttarray_unit / 2;
- diff = rtt_average - (mean / 1000000.0);
- sum += (diff * diff) * rarray[i];
- }
- }
- rtt_stddev = sqrt(sum / (double)rcounted);
- } else {
- rtt_average = 0.0;
- rtt_stddev = 0.0;
- }
-
- printf("\n");
-
- printf("%sStatistics:\n", intermediate ? "Intermediate " : "");
-
- printf("\n");
-
- if (!intermediate) {
- printf(" Parse input file: %s\n",
- ((run_only_once == TRUE) ? "once" : "multiple times"));
- if (use_timelimit)
- printf(" Run time limit: %u seconds\n",
- run_timelimit);
- if (run_only_once == FALSE)
- printf(" Ran through file: %u times\n",
- runs_through_file);
- else
- printf(" Ended due to: reaching %s\n",
- ((runs_through_file == 0) ? "time limit"
- : "end of file"));
-
- printf("\n");
- }
-
- printf(" Queries sent: %u queries\n", sent);
- printf(" Queries completed: %u queries\n", num_queries_completed);
- printf(" Queries lost: %u queries\n", timed_out);
- printf(" Queries delayed(?): %u queries\n", possibly_delayed);
-
- printf("\n");
-
- printf(" RTT max: %3.6lf sec\n", rmax);
- printf(" RTT min: %3.6lf sec\n", rmin);
- printf(" RTT average: %3.6lf sec\n", rtt_average);
- printf(" RTT std deviation: %3.6lf sec\n", rtt_stddev);
- printf(" RTT out of range: %u queries\n", roverflows);
-
- if (!intermediate) /* XXX should we print this case also? */
- print_histogram(num_queries_completed);
-
- printf("\n");
-
- if (countrcodes) {
- unsigned int i;
-
- for (i = 0; i < 16; i++) {
- if (rcodecounts[i] == 0)
- continue;
- printf(" Returned %8s: %u queries\n",
- rcode_strings[i], rcodecounts[i]);
- }
- printf("\n");
- }
-
- printf(" Percentage completed: %6.2lf%%\n", per_completed);
- if (possibly_delayed > 0)
- printf(" (w/ delayed qrys): %6.2lf%%\n", per_completed2);
- printf(" Percentage lost: %6.2lf%%\n", per_lost);
- if (possibly_delayed > 0)
- printf(" (w/o delayed qrys): %6.2lf%%\n", per_lost2);
-
- printf("\n");
-
- printf(" Started at: %s",
- ctime((const time_t *)&start_time.tv_sec));
- printf(" Finished at: %s",
- ctime((const time_t *)&end_perf->tv_sec));
- printf(" Ran for: %.6lf seconds\n", run_time);
-
- printf("\n");
-
- printf(" Queries per second: %.6lf qps\n", queries_per_sec);
- if (possibly_delayed > 0) {
- printf(" (w/ delayed qrys): %.6lf qps\n",
- queries_per_sec2);
- }
- if (target_qps > 0) {
- printf(" Total QPS/target: %.6lf/%d qps\n",
- queries_per_sec_total, target_qps);
- }
-
- printf("\n");
-}
-
-void
-print_interval_statistics() {
- struct timeval time_now;
-
- if (use_timelimit == FALSE)
- return;
-
- if (setup_phase == TRUE)
- return;
-
- if (print_interval == 0)
- return;
-
- if (timelimit_reached() == TRUE)
- return;
-
- set_timenow(&time_now);
- if (difftv(time_now, time_of_first_query_interval)
- <= (double)print_interval)
- return;
-
- /* Don't count currently outstanding queries */
- num_queries_sent_interval -= queries_outstanding();
- print_statistics(TRUE, num_queries_sent_interval,
- num_queries_timed_out_interval,
- num_queries_possiblydelayed_interval,
- &time_of_first_query_interval,
- &time_of_first_query_interval, &time_now, &time_now,
- rtt_counted_interval, rtt_max_interval,
- rtt_min_interval, rtt_total_interval,
- rtt_overflows_interval, rttarray_interval);
-
- /* Reset intermediate counters */
- num_queries_sent_interval = 0;
- num_queries_timed_out_interval = 0;
- num_queries_possiblydelayed_interval = 0;
- rtt_max_interval = -1;
- rtt_min_interval = -1;
- rtt_total_interval = 0.0;
- rtt_counted_interval = 0.0;
- rtt_overflows_interval = 0;
- if (rttarray_interval != NULL) {
- memset(rttarray_interval, 0,
- sizeof(rttarray_interval[0]) * rttarray_size);
- }
-}
-
-/*
- * queryperf Program Mainline
- */
-int
-main(int argc, char **argv) {
- int adjust_rate;
- int sending = FALSE;
- int got_eof = FALSE;
- int input_length = MAX_INPUT_LEN;
- char input_line[MAX_INPUT_LEN + 1];
-
- set_timenow(&time_of_program_start);
- time_of_first_query.tv_sec = 0;
- time_of_first_query.tv_usec = 0;
- time_of_first_query_interval.tv_sec = 0;
- time_of_first_query_interval.tv_usec = 0;
- time_of_end_of_run.tv_sec = 0;
- time_of_end_of_run.tv_usec = 0;
-
- input_line[0] = '\0';
-
- show_startup_info();
-
- if (setup(argc, argv) == -1)
- return (-1);
-
- /* XXX: move this to setup: */
- timeout_queries = malloc(sizeof(struct query_mininfo) * 65536);
- if (timeout_queries == NULL) {
- fprintf(stderr,
- "failed to allocate memory for timeout queries\n");
- return (-1);
- } else {
- int i;
- for (i = 0; i < 65536; i++)
- timeout_queries[i].qtype = -1;
- }
-
- printf("[Status] Processing input data\n");
-
- while ((sending = keep_sending(&got_eof)) == TRUE ||
- queries_outstanding() > 0)
- {
- if (num_queries_sent_interval > 0){
- /*
- * After statistics are printed, send_query()
- * needs to be called at least once so that
- * time_of_first_query_interval is reset
- */
- print_interval_statistics();
- }
- adjust_rate = FALSE;
-
- while ((sending = keep_sending(&got_eof)) == TRUE &&
- queries_outstanding() < max_queries_outstanding)
- {
- int len = next_input_line(input_line, input_length);
- if (len == 0) {
- got_eof = TRUE;
- } else {
- /* Zap the trailing newline */
- if (input_line[len - 1] == '\n')
- input_line[len - 1] = '\0';
-
- /*
- * TODO: Should test if we got a whole line
- * and flush to the next \n in input if not
- * here... Add this later. Only do the next
- * few lines if we got a whole line, else
- * print a warning. Alternative: Make the
- * max line size really big. BAD! :)
- */
-
- if (input_line[0] == CONFIG_CHAR)
- update_config(input_line);
- else {
- send_query(input_line);
- if (target_qps > 0 &&
- (num_queries_sent %
- max_queries_outstanding) == 0) {
- adjust_rate = TRUE;
- }
- }
- }
- }
-
- process_responses(adjust_rate);
- retire_old_queries(sending);
- }
-
- set_timenow(&time_of_end_of_run);
-
- printf("[Status] Testing complete\n");
-
- close_socket();
- close_datafile();
-
- print_statistics(FALSE, num_queries_sent, num_queries_timed_out,
- num_queries_possiblydelayed,
- &time_of_first_query, &time_of_program_start,
- &time_of_end_of_run, &time_of_stop_sending,
- rtt_counted, rtt_max, rtt_min, rtt_total,
- rtt_overflows, rttarray);
-
- return (0);
-}
diff --git a/contrib/queryperf/utils/gen-data-queryperf.py b/contrib/queryperf/utils/gen-data-queryperf.py
deleted file mode 100644
index 52074b79..00000000
--- a/contrib/queryperf/utils/gen-data-queryperf.py
+++ /dev/null
@@ -1,113 +0,0 @@
-#!/usr/bin/python
-
-#
-# $Id: gen-data-queryperf.py,v 1.2 2008/06/13 18:17:08 jinmei Exp $
-#
-# Contributed by Stephane Bortzmeyer <bortzmeyer@nic.fr>
-#
-# "A small tool which may be useful with contrib/queryperf. This script
-# can generate files of queries, both with random names (to test the
-# behaviour with NXdomain) and with domains from a real zone file."
-#
-
-import sys
-import getopt
-import random
-import re
-
-ldh = []
-# Letters
-for i in range(97, 122):
- ldh.append(chr(i))
-# Digits
-for i in range(48, 57):
- ldh.append(chr(i))
-# Hyphen
-ldh.append('-')
-
-maxsize=10
-tld='org'
-num=4
-percent_random = 0.3
-gen = None
-zone_file = None
-domains = {}
-domain_ns = r'^([a-z0-9-\.]+)((\s+\d+)?(\s+IN)?|(\s+IN)(\s+\d+)?)\s+NS'
-domain_ns_re = re.compile(domain_ns, re.IGNORECASE)
-
-def remove_tld(label, tld):
- if label.endswith('.' + tld + '.'):
- return label[0:-(1+ len(tld) + 1)]
- else:
- return label
-
-def gen_random_label():
- label = ""
- for i in range(gen.randint(1, maxsize)):
- label = label + gen.choice(ldh)
- return label
-
-def make_domain(label):
- return "www." + label + "." + tld + " A"
-
-def usage():
- sys.stdout.write("Usage: " + sys.argv[0] + " [-n number] " + \
- "[-p percent-random] [-t TLD]\n")
- sys.stdout.write(" [-m MAXSIZE] [-f zone-file]\n")
-
-try:
- optlist, args = getopt.getopt(sys.argv[1:], "hp:f:n:t:m:",
- ["help", "percentrandom=", "zonefile=",
- "number=", "tld=",
- "maxsize="])
- for option, value in optlist:
- if option == "--help" or option == "-h":
- usage()
- sys.exit(0)
- elif option == "--number" or option == "-n":
- num = int(value)
- elif option == "--maxsize" or option == "-m":
- maxsize = int(value)
- elif option == "--percentrandom" or option == "-p":
- percent_random = float(value)
- elif option == "--tld" or option == "-t":
- tld = str(value)
- elif option == "--zonefile" or option == "-f":
- zone_file = str(value)
- else:
- error("Unknown option " + option)
-except getopt.error, reason:
- sys.stderr.write(sys.argv[0] + ": " + str(reason) + "\n")
- usage()
- sys.exit(1)
-
-if len(args) <> 0:
- usage()
- sys.exit(1)
-
-gen = random.Random()
-if zone_file:
- file = open(zone_file)
- line = file.readline()
- while line:
- domain_line = domain_ns_re.match(line)
- if domain_line:
- print domain_line.group(1)
- domain = remove_tld(domain_line.group(1), tld)
- domains[domain] = 1
- line = file.readline()
- file.close()
-if zone_file:
- domains = domains.keys()
- if len(domains) == 0:
- sys.stderr.write("No domains found in '%s'\n" % zone_file)
- sys.exit(1)
-for i in range(num):
- if zone_file:
- if gen.random() < percent_random:
- sys.stdout.write(make_domain(gen_random_label()))
- else:
- sys.stdout.write(make_domain(gen.choice(domains)))
- else:
- sys.stdout.write(make_domain(gen_random_label()))
- sys.stdout.write("\n")
diff --git a/contrib/scripts/check-secure-delegation.pl.in b/contrib/scripts/check-secure-delegation.pl.in
deleted file mode 100644
index 0e08b173..00000000
--- a/contrib/scripts/check-secure-delegation.pl.in
+++ /dev/null
@@ -1,113 +0,0 @@
-#!@PERL@
-#
-# Copyright (C) 2010, 2012, 2014, 2016 Internet Systems Consortium, Inc. ("ISC")
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# $Id: check-secure-delegation.pl.in,v 1.2 2010/12/21 02:32:21 marka Exp $
-
-use warnings;
-use FileHandle;
-use IPC::Open2;
-use POSIX qw/strftime/;
-
-#
-# We only compare keyid / DNSSEC algorithm pairs. If this succeeds then
-# the crypto will likely succeed. If it fails then the crypto will definitely
-# fail.
-#
-$prefix = "@prefix@";
-$dig = "$prefix/bin/dig +cd +dnssec +noall +answer";
-$dsfromkey = "$prefix/sbin/dnssec-dsfromkey -1 -A -f /dev/stdin";
-
-# Get "now" in a RRSIG datestamp format.
-$now = strftime "%Y%m%d%H%M%S", gmtime;
-
-foreach $zone (@ARGV) {
- my %algorithms = ();
- my %dnskeygood = ();
- my %dnskeyalg = ();
- my %dnskey = ();
- my %dsgood = ();
- my %ds = ();
-
- # Read the DS records and extract the key id, algorithm pairs
- open(DS, "$dig -t DS -q $zone|") || die("dig DS failed");
- while(<DS>) {
- @words = split;
- if ($words[3] eq "RRSIG" && $words[4] eq "DS") {
- next if ($words[8] >= $now && $words[9] <= $now);
- print "BAD SIG DATES: $_";
- }
- next if ($words[3] ne "DS");
- $ds{"$words[4] $words[5]"} = 1;
- $algorithms{"$words[5]"} = 1;
- }
- close(DS);
-
- # Read the RRSIG(DNSKEY) records and extract the key id,
- # algorithm pairs. Set good if we have a match against the DS
- # records. DNSKEY records should be before the RRSIG records.
- open(DNSKEY, "$dig -t DNSKEY -q $zone|") || die("dig DNSKEY failed");
- while (<DNSKEY>) {
- @words = split;
- if ($words[3] eq "DNSKEY") {
- $dnskeyalg{"$words[6]"} = 1;
- next if (! -e "/dev/stdin");
- # get the key id ($dswords[3]).
- $pid = open2(*Reader, *Writer, "$dsfromkey $zone");
- die("dsfromkey failed") if ($pid == -1);
- print Writer "$_";
- close(Writer);
- $line = <Reader>;
- close(Reader);
- @dswords = split /\s/, $line;
- $dnskey{"$dswords[3] $dswords[4]"} = 1;
- next;
- }
- next if ($words[3] ne "RRSIG" || $words[4] ne "DNSKEY");
- if ($words[8] >= $now && $words[9] <= $now) {
- # If we don't have /dev/stdin then just check for the
- # RRSIG otherwise check for both the DNSKEY and
- # RRSIG.
- $dsgood{"$words[5]"} = 1
- if (! -e "/dev/stdin" &&
- exists($ds{"$words[10] $words[5]"}));
- $dsgood{"$words[5]"} = 1
- if (exists($ds{"$words[10] $words[5]"}) &&
- exists($dnskey{"$words[10] $words[5]"}));
- $dnskeygood{"$words[5]"} = 1
- if (! -e "/dev/stdin");
- $dnskeygood{"$words[5]"} = 1
- if (exists($dnskey{"$words[10] $words[5]"}));
- } else {
- $dnskeygood{"$words[5]"} = 1;
- print "BAD SIG DATES: $_";
- }
- }
- close(DNSKEY);
-
- # Do we have signatures for all DNSKEY algorithms?
- foreach $alg ( keys %dnskeyalg ) {
- print "Missing $zone DNSKEY RRSIG for algorithm $alg\n"
- if (!exists($dnskeygood{$alg}));
- }
-
- # Do we have a matching self signed DNSKEY for all DNSSEC algorithms
- # in the DS records.
- $count = 0;
- foreach $alg ( keys %algorithms ) {
- if (exists($dsgood{$alg})) {
- print "$zone algorithm $alg good " .
- "(found DS / self signed DNSKEY pair)\n";
- } else {
- print "$zone algorithm $alg bad " .
- "(no DS / self signed DNSKEY pair found)\n";
- }
- $count++;
- }
- print "$zone has no secure delegation records\n"
- if (! $count);
-}
diff --git a/contrib/scripts/check5011.pl b/contrib/scripts/check5011.pl
deleted file mode 100644
index d4f2d3f1..00000000
--- a/contrib/scripts/check5011.pl
+++ /dev/null
@@ -1,199 +0,0 @@
-#!/usr/bin/perl
-
-use warnings;
-use strict;
-
-use POSIX qw(strftime);
-my $now = strftime "%Y%m%d%H%M%S", gmtime;
-
-sub ext8601 ($) {
- my $d = shift;
- $d =~ s{(....)(..)(..)(..)(..)(..)}
- {$1-$2-$3.$4:$5:$6+0000};
- return $d;
-}
-
-sub getkey ($$) {
- my $h = shift;
- my $k = shift;
- m{\s+(\d+)\s+(\d+)\s+(\d+)\s+[(]\s*$};
- $k->{flags} = $1;
- $k->{protocol} = $2;
- $k->{algorithm} = $3;
- my $data = "(";
- while (<$h>) {
- s{^\s+}{};
- s{\s+$}{};
- last if m{^[)]};
- $data .= $_;
- }
- m{ alg = (\S+); key id = (\d+)};
- $k->{alg} = $1;
- $k->{id} = $2;
- $k->{data} = $data;
- return $k;
-}
-
-sub fmtkey ($) {
- my $k = shift;
- return sprintf "%16s tag %s", $k->{name}, $k->{id};
-}
-
-sub printstatus ($) {
- my $a = shift;
- if ($a->{removehd} ne "19700101000000") {
- printf " untrusted and to be removed at %s\n", ext8601 $a->{removehd};
- } elsif ($a->{addhd} lt $now) {
- printf " trusted\n";
- } else {
- printf " waiting for %s\n", ext8601 $a->{addhd};
- }
-}
-
-sub digkeys ($) {
- my $name = shift;
- my $keys;
- open my $d, "-|", qw{dig +multiline DNSKEY}, $name;
- while (<$d>) {
- next unless m{^([a-z0-9.-]*)\s+\d+\s+IN\s+DNSKEY\s+};
- next unless $name eq $1;
- push @$keys, getkey $d, { name => $name };
- }
- return $keys;
-}
-
-my $anchor;
-my $owner = ".";
-while (<>) {
- next unless m{^([a-z0-9.-]*)\s+KEYDATA\s+(\d+)\s+(\d+)\s+(\d+)\s+};
- my $k = getkey *ARGV, {
- name => $1,
- refresh => $2,
- addhd => $3,
- removehd => $4,
- };
- if ($k->{name} eq "") {
- $k->{name} = $owner;
- } else {
- $owner = $k->{name};
- }
- $k->{name} =~ s{[.]*$}{.};
- push @{$anchor->{$k->{name}}}, $k;
-}
-
-for my $name (keys %$anchor) {
- my $keys = digkeys $name;
- my $anchors = $anchor->{$name};
- for my $k (@$keys) {
- if ($k->{flags} & 1) {
- printf "%s %s", fmtkey $k, $k->{alg};
- } else {
- # ZSK - skipping
- next;
- }
- if ($k->{flags} & 512) {
- print " revoked;";
- }
- my $a;
- for my $t (@$anchors) {
- if ($t->{data} eq $k->{data} and
- $t->{protocol} eq $k->{protocol} and
- $t->{algorithm} eq $k->{algorithm}) {
- $t->{matched} = 1;
- $a = $t;
- last;
- }
- }
- if (not defined $a) {
- print " no trust anchor\n";
- next;
- }
- printstatus $a;
- }
- for my $a (@$anchors) {
- next if $a->{matched};
- printf "%s %s missing;", fmtkey $a, $a->{alg};
- printstatus $a;
- }
-}
-
-exit;
-
-__END__
-
-=head1 NAME
-
-check5011 - summarize DNSSEC trust anchor status
-
-=head1 SYNOPSIS
-
-check5011 <I<managed-keys.bind>>
-
-=head1 DESCRIPTION
-
-The BIND managed-keys file contains DNSSEC trust anchors
-that can be automatically updated according to RFC 5011. The
-B<check5011> program reads this file and prints a summary of the
-status of the trust anchors. It fetches the corresponding
-DNSKEY records using B<dig> and compares them to the trust anchors.
-
-Each key is printed on a line with its name, its tag, and its
-algorithm, followed by a summary of its status.
-
-=over
-
-=item C<trusted>
-
-The key is currently trusted.
-
-=item C<waiting for ...>
-
-The key is new, and B<named> is waiting for the "add hold-down" period
-to pass before the key will be trusted.
-
-=item C<untrusted and to be removed at ...>
-
-The key was revoked and will be removed at the stated time.
-
-=item C<no trust anchor>
-
-The key is present in the DNS but not in the managed-keys file.
-
-=item C<revoked>
-
-The key has its revoked flag set. This is printed before the key's
-trust anchor status which should normally be C<untrusted...> if
-B<named> has observed the revocation.
-
-=item C<missing>
-
-There is no DNSKEY record for this trust anchor. This is printed
-before the key's trust anchor status.
-
-=back
-
-By default the managed keys are stored in a file called
-F<managed-keys.bind> in B<named>'s working directory. This location
-can be changed with B<named>'s B<managed-keys-directory> option. If
-you are using views the file may be named with the SHA256 hash of a
-view name with a F<.mkeys> extension added.
-
-=head1 AUTHOR
-
-=over
-
-=item Written by Tony Finch <fanf2@cam.ac.uk> <dot@dotat.at>
-
-=item at the University of Cambridge Computing Service.
-
-=item You may do anything with this. It has no warranty.
-
-=item L<http://creativecommons.org/publicdomain/zero/1.0/>
-
-=back
-
-=head1 SEE ALSO
-
-dig(1), named(8)
-
-=cut
diff --git a/contrib/scripts/dnssec-keyset.sh b/contrib/scripts/dnssec-keyset.sh
deleted file mode 100644
index f93ac9ff..00000000
--- a/contrib/scripts/dnssec-keyset.sh
+++ /dev/null
@@ -1,210 +0,0 @@
-#!/bin/sh
-# Copyright (C) 2015 Internet Systems Consortium, Inc. ("ISC")
-#
-# Permission to use, copy, modify, and/or distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Original script contributed by Jeffry A. Spain <spainj@countryday.net>
-
-HELP="
-Generates a set of <count> successive DNSSEC keys for <zone>
-Key timings are based on a pre-publication rollover strategy
-
- <life> (lifetime) is the key active lifetime in days [default 180]
- <intro> (introduction time) is the number of days from publication
- to activation of a key [default 30]
- <ret> (retirement time) is the number of days from inactivation
- to deletion of a key [default 30]
-
-Options:
- -a <alg> Cryptographic algorithm. See man dnssec-keygen for defaults.
- -b <bits> Number of bits in the key. See man dnssec-keygen for defaults.
- -k if present, generate Key Signing Keys (KSKs). Otherwise,
- generate Zone Signing Keys (ZSKs).
- -3 If present and if -a is not specified, use an NSEC3-
- capable algorithm. See man dnssec-keygen for defaults.
- -i <date> Inception date of the set of keys, in 'mm/dd/yyyy' format.
- The first two keys will be published by this date, and the
- first one will be activated. Default is today.
- -f <index> Index of first key generated. Defaults to 0.
- -K <dir> Key repository: write keys to this directory. Defaults to CWD.
- -d Dry run. No actual keys generated if present."
-
-USAGE="Usage:
-`basename $0` [-a <alg>] [-b <bits>] [-k] [-3] [-i <date>]
- [-f <index>] [-d] <zone> <count> [<life>] [<intro>] [<ret>]"
-
-ALGFLAG=''
-BITSFLAG=''
-KSKFLAG=''
-NSEC3FLAG=''
-KEYREPO=''
-DRYRUN=false
-OPTKSK=false
-K=0
-INCEP=`date +%m/%d/%Y`
-
-# Parse command line options
-while getopts ":a:b:df:hkK:3i:" thisOpt
-do
- case $thisOpt in
- a)
- ALGFLAG=" -a $OPTARG"
- ;;
- b)
- BITSFLAG=" -b $OPTARG"
- ;;
- d)
- DRYRUN=true
- ;;
- f)
- OPTKSK=true
- K=$OPTARG
- ;;
- h)
- echo "$USAGE"
- echo "$HELP"
- exit 0
- ;;
- k)
- KSKFLAG=" -f KSK"
- ;;
- K)
- KEYREPO=$OPTARG
- ;;
- 3)
- NSEC3FLAG=" -3"
- ;;
- i)
- INCEP=$OPTARG
- ;;
- *)
- echo 'Unrecognized option.'
- echo "$USAGE"
- exit 1
- ;;
- esac
-done
-shift `expr $OPTIND - 1`
-
-# Check that required arguments are present
-if [ $# -gt 5 -o $# -lt 2 ]; then
- echo "$USAGE"
- exit 1
-fi
-
-# Remaining arguments:
-# DNS zone name
-ZONE=$1
-shift
-
-# Number of keys to be generated
-COUNT=$1
-shift
-
-# Key active lifetime
-LIFE=${1:-180}
-[ $# -ne 0 ] && shift
-
-# Key introduction time (publication to activation)
-INTRO=${1:-30}
-[ $# -ne 0 ] && shift
-
-# Key retirement time (inactivation to deletion)
-RET=${1:-30}
-
-# Today's date in dnssec-keygen format (YYYYMMDD)
-TODAY=`date +%Y%m%d`
-
-# Key repository defaults to CWD
-if [ -z "$KEYREPO" ]; then
- KEYREPO="."
-fi
-
-if $DRYRUN; then
- echo 'Dry Run (no key files generated)'
-elif [ ! -d "$KEYREPO" ]; then
- # Create the key repository if it does not currently exist
- mkdir -p "$KEYREPO"
-fi
-
-# Iterate through the key set. K is the index, zero-based.
-KLAST=`expr $K + $COUNT`
-while [ $K -lt $KLAST ]; do
- KEYLABEL="Key `printf \"%02d\" $K`:"
- # Epoch of the current key
- # (zero for the first key, increments of key lifetime)
- # The epoch is in days relative to the inception date of the key set
- EPOCH=`expr $LIFE \* $K`
- # Activation date in days is the same as the epoch
- ACTIVATE=$EPOCH
- # Publication date in days relative to the key epoch
- PUBLISH=`expr $EPOCH - $LIFE - $INTRO`
- # Inactivation date in days relative to the key epoch
- INACTIVE=`expr $EPOCH + $LIFE`
- # Deletion date in days relative to the key epoch
- DELETE=`expr $EPOCH + $LIFE + $RET`
-
- # ... these values should not precede the key epoch
- [ $ACTIVATE -lt 0 ] && ACTIVATE=0
- [ $PUBLISH -lt 0 ] && PUBLISH=0
- [ $INACTIVE -lt 0 ] && INACTIVE=0
- [ $DELETE -lt 0 ] && DELETE=0
-
- # Key timing dates in dnssec-keygen format (YYYYMMDD):
- # publication, activation, inactivation, deletion
- PDATE=`date -d "$INCEP +$PUBLISH day" +%Y%m%d`
- ADATE=`date -d "$INCEP +$ACTIVATE day" +%Y%m%d`
- IDATE=`date -d "$INCEP +$INACTIVE day" +%Y%m%d`
- DDATE=`date -d "$INCEP +$DELETE day" +%Y%m%d`
-
- # Construct the dnssec-keygen command including all the specified options.
- # Suppress key generation progress information, and save the key in
- # the $KEYREPO directory.
- KEYGENCMD="dnssec-keygen -q$ALGFLAG$BITSFLAG$NSEC3FLAG$KSKFLAG -P $PDATE -A $ADATE -I $IDATE -D $DDATE -K $KEYREPO $ZONE"
- echo "$KEYLABEL $KEYGENCMD"
-
- # Generate the key and retrieve its name
- if $DRYRUN; then
- KEYNAME="DryRunKey-`printf \"%02d\" $K`"
- else
- KEYNAME=`$KEYGENCMD`
- fi
-
- # Indicate the key status based on key timing dates relative to today
- if [ $TODAY -ge $DDATE ]; then
- echo "$KEYLABEL $KEYNAME is obsolete post deletion date."
- elif [ $TODAY -ge $IDATE ]; then
- echo "$KEYLABEL $KEYNAME is published and inactive prior to deletion date."
- elif [ $TODAY -ge $ADATE ]; then
- echo "$KEYLABEL $KEYNAME is published and active."
- elif [ $TODAY -ge $PDATE ]; then
- echo "$KEYLABEL $KEYNAME is published prior to activation date."
- else
- echo "$KEYLABEL $KEYNAME is pending publication."
- fi
-
- # For published KSKs, generate the required DS records,
- # saving them to the file $KEYREPO/DS-$KEYNAME
- if $OPTKSK && [ $TODAY -ge $PDATE -a $TODAY -lt $DDATE ]; then
- echo "$KEYLABEL $KEYNAME (KSK) requires the publication of DS records in the parent zone."
- if $DRYRUN; then
- echo "$KEYLABEL No DS-$KEYNAME file created."
- else
- dnssec-dsfromkey "$KEYREPO/$KEYNAME" > "$KEYREPO/DS-$KEYNAME"
- echo "$KEYLABEL See $KEYREPO/DS-$KEYNAME."
- fi
- fi
- K=`expr $K + 1`
-done
-
-exit 0
diff --git a/contrib/scripts/named-bootconf.sh b/contrib/scripts/named-bootconf.sh
deleted file mode 100644
index f5907cf1..00000000
--- a/contrib/scripts/named-bootconf.sh
+++ /dev/null
@@ -1,298 +0,0 @@
-#!/bin/sh
-#
-# Portions Copyright (C) 1999-2001, 2004, 2006, 2007, 2012, 2014, 2016 Internet Systems Consortium, Inc. ("ISC")
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# $Id: named-bootconf.sh,v 1.12 2007/06/19 23:47:07 tbox Exp $
-
-# $NetBSD: named-bootconf.sh,v 1.5 1998/12/15 01:00:53 tron Exp $
-#
-# Copyright (c) 1995, 1998 The NetBSD Foundation, Inc.
-# All rights reserved.
-#
-# This code is derived from software contributed to The NetBSD Foundation
-# by Matthias Scheler.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
-# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
-# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-
-if [ ${OPTIONFILE-X} = X ]; then
- WORKDIR=/tmp/`date +%s`.$$
- ( umask 077 ; mkdir $WORKDIR ) || {
- echo "unable to create work directory '$WORKDIR'" >&2
- exit 1
- }
- OPTIONFILE=$WORKDIR/options
- ZONEFILE=$WORKDIR/zones
- COMMENTFILE=$WORKDIR/comments
- export OPTIONFILE ZONEFILE COMMENTFILE
- touch $OPTIONFILE $ZONEFILE $COMMENTFILE
- DUMP=1
-else
- DUMP=0
-fi
-
-while read CMD ARGS; do
- class=
- CMD=`echo "${CMD}" | tr '[A-Z]' '[a-z]'`
- case $CMD in
- \; )
- echo \# $ARGS >>$COMMENTFILE
- ;;
- cache )
- set - X $ARGS
- shift
- if [ $# -eq 2 ]; then
- (echo ""
- cat $COMMENTFILE
- echo "zone \"$1\" {"
- echo " type hint;"
- echo " file \"$2\";"
- echo "};") >>$ZONEFILE
- rm -f $COMMENTFILE
- touch $COMMENTFILE
- fi
- ;;
- directory )
- set - X $ARGS
- shift
- if [ $# -eq 1 ]; then
- (cat $COMMENTFILE
- echo " directory \"$1\";") >>$OPTIONFILE
- rm -f $COMMENTFILE
- touch $COMMENTFILE
-
- DIRECTORY=$1
- export DIRECTORY
- fi
- ;;
- forwarders )
- (cat $COMMENTFILE
- echo " forwarders {"
- for ARG in $ARGS; do
- echo " $ARG;"
- done
- echo " };") >>$OPTIONFILE
- rm -f $COMMENTFILE
- touch $COMMENTFILE
- ;;
- include )
- if [ "$ARGS" != "" ]; then
- (cd ${DIRECTORY-.}; cat $ARGS) | $0
- fi
- ;;
- limit )
- ARGS=`echo "${ARGS}" | tr '[A-Z]' '[a-z]'`
- set - X $ARGS
- shift
- if [ $# -eq 2 ]; then
- cat $COMMENTFILE >>$OPTIONFILE
- case $1 in
- datasize | files | transfers-in | transfers-per-ns )
- echo " $1 $2;" >>$OPTIONFILE
- ;;
- esac
- rm -f $COMMENTFILE
- touch $COMMENTFILE
- fi
- ;;
- options )
- ARGS=`echo "${ARGS}" | tr '[A-Z]' '[a-z]'`
- cat $COMMENTFILE >>$OPTIONFILE
- for ARG in $ARGS; do
- case $ARG in
- fake-iquery )
- echo " fake-iquery yes;" >>$OPTIONFILE
- ;;
- forward-only )
- echo " forward only;" >>$OPTIONFILE
- ;;
- no-fetch-glue )
- echo " fetch-glue no;" >>$OPTIONFILE
- ;;
- no-recursion )
- echo " recursion no;" >>$OPTIONFILE
- ;;
- esac
- done
- rm -f $COMMENTFILE
- touch $COMMENTFILE
- ;;
- primary|primary/* )
- case $CMD in
- primary/chaos )
- class="chaos "
- ;;
- primary/hs )
- class="hesiod "
- ;;
- esac
- set - X $ARGS
- shift
- if [ $# -eq 2 ]; then
- (echo ""
- cat $COMMENTFILE
- echo "zone \"$1\" ${class}{"
- echo " type master;"
- echo " file \"$2\";"
- echo "};") >>$ZONEFILE
- rm -f $COMMENTFILE
- touch $COMMENTFILE
- fi
- ;;
- secondary|secondary/* )
- case $CMD in
- secondary/chaos )
- class="chaos "
- ;;
- secondary/hs )
- class="hesiod "
- ;;
- esac
- set - X $ARGS
- shift
- if [ $# -gt 2 ]; then
- ZONE=$1
- shift
- PRIMARIES=$1
- while [ $# -gt 2 ]; do
- shift
- PRIMARIES="$PRIMARIES $1"
- done
- (echo ""
- cat $COMMENTFILE
- echo "zone \"$ZONE\" ${class}{"
- echo " type slave;"
- echo " file \"$2\";"
- echo " masters {"
- for PRIMARY in $PRIMARIES; do
- echo " $PRIMARY;"
- done
- echo " };"
- echo "};") >>$ZONEFILE
- rm -f $COMMENTFILE
- touch $COMMENTFILE
- fi
- ;;
- stub|stub/* )
- case $CMD in
- stub/chaos )
- class="chaos "
- ;;
- stub/hs )
- class="hesiod "
- ;;
- esac
- set - X $ARGS
- shift
- if [ $# -gt 2 ]; then
- ZONE=$1
- shift
- PRIMARIES=$1
- while [ $# -gt 2 ]; do
- shift
- PRIMARIES="$PRIMARIES $1"
- done
- (echo ""
- cat $COMMENTFILE
- echo "zone \"$ZONE\" ${class}{"
- echo " type stub;"
- echo " file \"$2\";"
- echo " masters {"
- for PRIMARY in $PRIMARIES; do
- echo " $PRIMARY;"
- done
- echo " };"
- echo "};") >>$ZONEFILE
- rm -f $COMMENTFILE
- touch $COMMENTFILE
- fi
- ;;
- slave )
- cat $COMMENTFILE >>$OPTIONFILE
- echo " forward only;" >>$OPTIONFILE
- rm -f $COMMENTFILE
- touch $COMMENTFILE
- ;;
- sortlist )
- (cat $COMMENTFILE
- echo " topology {"
- for ARG in $ARGS; do
- case $ARG in
- *.0.0.0 )
- echo " $ARG/8;"
- ;;
- *.0.0 )
- echo " $ARG/16;"
- ;;
- *.0 )
- echo " $ARG/24;"
- ;;
- * )
- echo " $ARG;"
- ;;
- esac
- done
- echo " };") >>$OPTIONFILE
- rm -f $COMMENTFILE
- touch $COMMENTFILE
- ;;
- tcplist | xfrnets )
- (cat $COMMENTFILE
- echo " allow-transfer {"
- for ARG in $ARGS; do
- case $ARG in
- *.0.0.0 )
- echo " $ARG/8;"
- ;;
- *.0.0 )
- echo " $ARG/16;"
- ;;
- *.0 )
- echo " $ARG/24;"
- ;;
- * )
- echo " $ARG;"
- ;;
- esac
- done
- echo " };") >>$OPTIONFILE
- rm -f $COMMENTFILE
- touch $COMMENTFILE
- ;;
- esac
-done
-
-if [ $DUMP -eq 1 ]; then
- echo ""
- echo "options {"
- cat $OPTIONFILE
- echo "};"
- cat $ZONEFILE $COMMENTFILE
-
- rm -f $OPTIONFILE $ZONEFILE $COMMENTFILE
- rmdir $WORKDIR
-fi
-
-exit 0
diff --git a/contrib/scripts/nanny.pl b/contrib/scripts/nanny.pl
deleted file mode 100644
index 535fb890..00000000
--- a/contrib/scripts/nanny.pl
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/perl
-#
-# Copyright (C) 2000, 2001, 2004, 2007, 2012, 2014, 2016 Internet Systems Consortium, Inc. ("ISC")
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# $Id: nanny.pl,v 1.11 2007/06/19 23:47:07 tbox Exp $
-
-# A simple nanny to make sure named stays running.
-
-$pid_file_location = '/var/run/named.pid';
-$nameserver_location = 'localhost';
-$dig_program = 'dig';
-$named_program = 'named';
-
-fork() && exit();
-
-for (;;) {
- $pid = 0;
- open(FILE, $pid_file_location) || goto restart;
- $pid = <FILE>;
- close(FILE);
- chomp($pid);
-
- $res = kill 0, $pid;
-
- goto restart if ($res == 0);
-
- $dig_command =
- "$dig_program +short . \@$nameserver_location > /dev/null";
- $return = system($dig_command);
- goto restart if ($return == 9);
-
- sleep 30;
- next;
-
- restart:
- if ($pid != 0) {
- kill 15, $pid;
- sleep 30;
- }
- system ($named_program);
- sleep 120;
-}
diff --git a/contrib/scripts/zone-edit.sh.in b/contrib/scripts/zone-edit.sh.in
deleted file mode 100644
index bb4beba9..00000000
--- a/contrib/scripts/zone-edit.sh.in
+++ /dev/null
@@ -1,150 +0,0 @@
-#!/bin/sh
-#
-# Copyright (C) 2010, 2012, 2014, 2016 Internet Systems Consortium, Inc. ("ISC")
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# $Id: zone-edit.sh.in,v 1.2 2010/12/21 23:47:08 tbox Exp $
-
-dir=/tmp/zone-edit.$$
-mkdir ${dir} || exit 1
-trap "/bin/rm -rf ${dir}" 0
-
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-bindir=@bindir@
-sbindir=@sbindir@
-
-dig=${bindir}/dig
-checkzone=${sbindir}/named-checkzone
-nsupdate=${bindir}/nsupdate
-
-case $# in
-0) echo "Usage: zone-edit <zone> [dig options] [ -- nsupdate options ]"; exit 0 ;;
-esac
-
-# What kind of echo are we using?
-try=`echo -n ""`
-if test "X$try" = "X-n "
-then
- echo_arg=""
- bsc="\\c"
-else
- echo_arg="-n"
- bsc=""
-fi
-
-zone="${1}"
-shift
-digopts=
-while test $# -ne 0
-do
- case "${1}" in
- --)
- shift
- break
- ;;
- *)
- digopts="$digopts $1"
- shift
- ;;
- esac
-done
-
-${dig} axfr "$zone" $digopts |
-awk '$4 == "RRSIG" || $4 == "NSEC" || $4 == "NSEC3" || $4 == "NSEC3PARAM" { next; } { print; }' > ${dir}/old
-
-if test -s ${dir}/old
-then
- ${checkzone} -q -D "$zone" ${dir}/old > ${dir}/ooo
-fi
-
-if test -s ${dir}/ooo
-then
- cp ${dir}/ooo ${dir}/new
- while :
- do
- if ${VISUAL:-${EDITOR:-/bin/ed}} ${dir}/new
- then
- if ${checkzone} -q -D "$zone" ${dir}/new > ${dir}/nnn
- then
- sort ${dir}/ooo > ${dir}/s1
- sort ${dir}/nnn > ${dir}/s2
- comm -23 ${dir}/s1 ${dir}/s2 |
- sed 's/^/update delete /' > ${dir}/ccc
- comm -13 ${dir}/s1 ${dir}/s2 |
- sed 's/^/update add /' >> ${dir}/ccc
- if test -s ${dir}/ccc
- then
- cat ${dir}/ccc | more
- while :
- do
- echo ${echo_arg} "Update (u), Abort (a), Redo (r), Modify (m), Display (d) : $bsc"
- read ans
- case "$ans" in
- u)
- (
- echo zone "$zone"
- cat ${dir}/ccc
- echo send
- ) | ${nsupdate} "$@"
- break 2
- ;;
- a)
- break 2
- ;;
- d)
- cat ${dir}/ccc | more
- ;;
- r)
- cp ${dir}/ooo ${dir}/new
- break
- ;;
- m)
- break
- ;;
- esac
- done
- else
- while :
- do
- echo ${echo_arg} "Abort (a), Redo (r), Modify (m) : $bsc"
- read ans
- case "$ans" in
- a)
- break 2
- ;;
- r)
- cp ${dir}/ooo ${dir}/new
- break
- ;;
- m)
- break
- ;;
- esac
- done
- fi
- else
- while :
- do
- echo ${echo_arg} "Abort (a), Redo (r), Modify (m) : $bsc"
- read ans
- case "$ans" in
- a)
- break 2
- ;;
- r)
- cp ${dir}/ooo ${dir}/new
- break
- ;;
- m)
- break
- ;;
- esac
- done
- fi
- fi
- done
-fi
diff --git a/contrib/sdb/bdb/README b/contrib/sdb/bdb/README
deleted file mode 100644
index d2acf4e3..00000000
--- a/contrib/sdb/bdb/README
+++ /dev/null
@@ -1,37 +0,0 @@
-(Message trash:37216)
-
-Date: Wed, 15 May 2002 20:44:45 +0100
-To: <bind-workers@isc.org>
-From: Nuno Miguel Rodrigues <nmr@co.sapo.pt>
-Subject: Berkeley DB BIND9 SDB
-
-Replied: Thu, 16 May 2002 11:47:35 +1000
-Replied: Nuno Miguel Rodrigues <nmr@co.sapo.pt>
-Return-Path: <bind-workers-bounce@isc.org>
-X-X-Sender: <nmr@angelina.sl.pt>
-MIME-Version: 1.0
-X-ecartis-version: Ecartis v1.0.0
-Sender: bind-workers-bounce@isc.org
-Errors-To: bind-workers-bounce@isc.org
-X-original-sender: nmr@co.sapo.pt
-Precedence: bulk
-X-list: bind-workers
-Status:
-
-
-
-Hello all,
-
-I'm making available a BIND9 SDB using Berkeley DB 4.0.
-
-You can get it at http://www.dhis.org/~nmr/bind9_berkeleydb_sdb-1.0.tar
-
-Thanks,
-
-
---
-Nuno M. Rodrigues <nmr@co.sapo.pt>
-
-
-
-
diff --git a/contrib/sdb/bdb/bdb.c b/contrib/sdb/bdb/bdb.c
deleted file mode 100644
index 23594bbe..00000000
--- a/contrib/sdb/bdb/bdb.c
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Copyright (C) 2002 Nuno M. Rodrigues.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND NUNO M. RODRIGUES
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/* $Id: bdb.c,v 1.2 2011/10/11 00:09:02 each Exp $ */
-
-/*
- * BIND 9.1.x simple database driver
- * implementation, using Berkeley DB.
- */
-
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <isc/file.h>
-#include <isc/log.h>
-#include <isc/lib.h>
-#include <isc/mem.h>
-#include <isc/msgs.h>
-#include <isc/msgcat.h>
-#include <isc/region.h>
-#include <isc/result.h>
-#include <isc/types.h>
-#include <isc/util.h>
-
-#include <dns/sdb.h>
-#include <dns/log.h>
-#include <dns/lib.h>
-#include <dns/ttl.h>
-
-#include <named/bdb.h>
-#include <named/globals.h>
-#include <named/config.h>
-
-#include <db.h>
-
-#define DRIVERNAME "bdb"
-
-static dns_sdbimplementation_t *bdb_imp;
-
-static isc_result_t
-bdb_create(const char *zone, int argc, char **argv,
- void *unused, void **dbdata)
-{
- int ret;
-
- UNUSED(zone);
- UNUSED(unused);
-
- if (argc < 1)
- return ISC_R_FAILURE; /* database path must be given */
-
- if (db_create((DB **)dbdata, NULL, 0) != 0) {
- /*
- * XXX Should use dns_msgcat et al
- * but seems to be unavailable.
- */
- isc_log_iwrite(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_SDB, ISC_LOG_CRITICAL, isc_msgcat,
- ISC_MSGSET_GENERAL, ISC_MSG_FATALERROR,
- "db_create");
- return ISC_R_FAILURE;
- }
-
- if (isc_file_exists(*argv) != ISC_TRUE) {
- isc_log_iwrite(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_SDB, ISC_LOG_CRITICAL, isc_msgcat,
- ISC_MSGSET_GENERAL, ISC_MSG_FATALERROR,
- "isc_file_exists: %s", *argv);
- return ISC_R_FAILURE;
- }
-
- if ((ret = (*(DB **)dbdata)->open(*(DB **)dbdata, *argv, NULL, DB_HASH,
- DB_RDONLY, 0)) != 0) {
- isc_log_iwrite(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_SDB, ISC_LOG_CRITICAL,
- isc_msgcat, ISC_MSGSET_GENERAL,
- ISC_MSG_FATALERROR, "DB->open: %s",
- db_strerror(ret));
- return ISC_R_FAILURE;
- }
- return ISC_R_SUCCESS;
-}
-
-static isc_result_t
-#ifdef DNS_CLIENTINFO_VERSION
-bdb_lookup(const char *zone, const char *name, void *dbdata,
- dns_sdblookup_t *l, dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-#else
-bdb_lookup(const char *zone, const char *name, void *dbdata,
- dns_sdblookup_t *l)
-#endif /* DNS_CLIENTINFO_VERSION */
-{
- int ret;
- char *type, *rdata;
- dns_ttl_t ttl;
- isc_consttextregion_t ttltext;
- DBC *c;
- DBT key, data;
-
- UNUSED(zone);
-#ifdef DNS_CLIENTINFO_VERSION
- UNUSED(methods);
- UNUSED(clientinfo);
-#endif /* DNS_CLIENTINFO_VERSION */
-
- if ((ret = ((DB *)dbdata)->cursor((DB *)dbdata, NULL, &c, 0)) != 0) {
- isc_log_iwrite(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_SDB, ISC_LOG_ERROR,
- isc_msgcat, ISC_MSGSET_GENERAL,
- ISC_MSG_FAILED, "DB->cursor: %s",
- db_strerror(ret));
- return ISC_R_FAILURE;
- }
-
- memset(&key, 0, sizeof(DBT));
- memset(&data, 0, sizeof(DBT));
-
- (const char *)key.data = name;
- key.size = strlen(name);
-
- ret = c->c_get(c, &key, &data, DB_SET);
- while (ret == 0) {
- ((char *)key.data)[key.size] = 0;
- ((char *)data.data)[data.size] = 0;
- ttltext.base = strtok((char *)data.data, " ");
- ttltext.length = strlen(ttltext.base);
- dns_ttl_fromtext((isc_textregion_t *)&ttltext, &ttl);
- type = strtok(NULL, " ");
- rdata = type + strlen(type) + 1;
-
- if (dns_sdb_putrr(l, type, ttl, rdata) != ISC_R_SUCCESS) {
- isc_log_iwrite(dns_lctx,
- DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_SDB, ISC_LOG_ERROR,
- isc_msgcat, ISC_MSGSET_GENERAL,
- ISC_MSG_FAILED, "dns_sdb_putrr");
- return ISC_R_FAILURE;
- }
- ret = c->c_get(c, &key, &data, DB_NEXT_DUP);
- }
-
- c->c_close(c);
- return ISC_R_SUCCESS;
-}
-
-static isc_result_t
-bdb_allnodes(const char *zone, void *dbdata, dns_sdballnodes_t *n)
-{
- int ret;
- char *type, *rdata;
- dns_ttl_t ttl;
- isc_consttextregion_t ttltext;
- DBC *c;
- DBT key, data;
-
- UNUSED(zone);
-
- if ((ret = ((DB *)dbdata)->cursor((DB *)dbdata, NULL, &c, 0)) != 0) {
- isc_log_iwrite(dns_lctx, DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_SDB, ISC_LOG_ERROR,
- isc_msgcat, ISC_MSGSET_GENERAL,
- ISC_MSG_FAILED, "DB->cursor: %s",
- db_strerror(ret));
- return ISC_R_FAILURE;
- }
-
- memset(&key, 0, sizeof(DBT));
- memset(&data, 0, sizeof(DBT));
-
- while (c->c_get(c, &key, &data, DB_NEXT) == 0) {
- ((char *)key.data)[key.size] = 0;
- ((char *)data.data)[data.size] = 0;
- ttltext.base = strtok((char *)data.data, " ");
- ttltext.length = strlen(ttltext.base);
- dns_ttl_fromtext((isc_textregion_t *)&ttltext, &ttl);
- type = strtok(NULL, " ");
- rdata = type + strlen(type) + 1;
-
- if (dns_sdb_putnamedrr(n, key.data, type, ttl, rdata) !=
- ISC_R_SUCCESS) {
- isc_log_iwrite(dns_lctx,
- DNS_LOGCATEGORY_DATABASE,
- DNS_LOGMODULE_SDB, ISC_LOG_ERROR,
- isc_msgcat, ISC_MSGSET_GENERAL,
- ISC_MSG_FAILED, "dns_sdb_putnamedrr");
- return ISC_R_FAILURE;
- }
-
- }
-
- c->c_close(c);
- return ISC_R_SUCCESS;
-}
-
-static isc_result_t
-bdb_destroy(const char *zone, void *unused, void **dbdata)
-{
-
- UNUSED(zone);
- UNUSED(unused);
-
- (*(DB **)dbdata)->close(*(DB **)dbdata, 0);
-
- return ISC_R_SUCCESS;
-}
-
-isc_result_t
-bdb_init(void)
-{
- static dns_sdbmethods_t bdb_methods = {
- bdb_lookup,
- NULL,
- bdb_allnodes,
- bdb_create,
- bdb_destroy,
- NULL /* lookup2 */
- };
-
- return dns_sdb_register(DRIVERNAME, &bdb_methods, NULL, 0, ns_g_mctx,
- &bdb_imp);
-}
-
-void
-bdb_clear(void)
-{
-
- if (bdb_imp != NULL)
- dns_sdb_unregister(&bdb_imp);
-}
diff --git a/contrib/sdb/bdb/bdb.h b/contrib/sdb/bdb/bdb.h
deleted file mode 100644
index 7ab56b49..00000000
--- a/contrib/sdb/bdb/bdb.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2002 Nuno M. Rodrigues.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND NUNO M. RODRIGUES
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/* $Id: bdb.h,v 1.1 2002/05/16 04:25:22 marka Exp $ */
-
-#ifndef BDB_H
-#define BDB_H 1
-
-#include <isc/types.h>
-
-/*
- * Prototypes.
- */
-isc_result_t bdb_init(void);
-void bdb_clear(void);
-
-#endif /* BDB_H */
diff --git a/contrib/sdb/bdb/zone2bdb.c b/contrib/sdb/bdb/zone2bdb.c
deleted file mode 100644
index e7118531..00000000
--- a/contrib/sdb/bdb/zone2bdb.c
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright (C) 2002 Nuno M. Rodrigues.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND NUNO M. RODRIGUES
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/* $Id: zone2bdb.c,v 1.3 2009/09/01 00:22:26 jinmei Exp $ */
-
-#include <stdio.h>
-
-#include <isc/mem.h>
-#include <isc/result.h>
-#include <isc/types.h>
-#include <isc/util.h>
-
-#include <dns/db.h>
-#include <dns/dbiterator.h>
-#include <dns/fixedname.h>
-#include <dns/name.h>
-#include <dns/rdata.h>
-#include <dns/rdataset.h>
-#include <dns/rdatasetiter.h>
-#include <dns/rdatatype.h>
-#include <dns/ttl.h>
-#include <dns/types.h>
-
-#include <db.h>
-
-#define MAX_RDATATEXT 63 + 4 + 65535 + 2 /* ttl + type + rdata + sep */
-
-/*
- * Returns a valid 'DB' handle.
- *
- * Requires:
- * 'file' is a valid non-existant path.
- */
-DB *
-bdb_init(const char *file)
-{
- DB *db;
-
- REQUIRE(db_create(&db, NULL, 0) == 0);
- REQUIRE(db->set_flags(db, DB_DUP) == 0);
- REQUIRE(db->open(db, file, NULL, DB_HASH, DB_CREATE | DB_EXCL, 0) == 0);
-
- return db;
-}
-
-/*
- * Puts resource record data on 'db'.
- */
-isc_result_t
-bdb_putrdata(DB *db, dns_name_t *name, dns_ttl_t ttl, dns_rdata_t *rdata)
-{
- static DBT key, data;
- isc_buffer_t keybuf, databuf;
- char nametext[DNS_NAME_MAXTEXT];
- char rdatatext[MAX_RDATATEXT];
-
- isc_buffer_init(&keybuf, nametext, DNS_NAME_MAXTEXT);
-
- dns_name_totext(name, ISC_TRUE, &keybuf);
-
- key.data = isc_buffer_base(&keybuf);
- key.size = isc_buffer_usedlength(&keybuf);
-
- isc_buffer_init(&databuf, rdatatext, MAX_RDATATEXT);
-
- dns_ttl_totext(ttl, ISC_FALSE, &databuf);
- *(char *)isc_buffer_used(&databuf) = ' ';
- isc_buffer_add(&databuf, 1);
-
- dns_rdatatype_totext(rdata->type, &databuf); /* XXX private data */
- *(char *)isc_buffer_used(&databuf) = ' ';
- isc_buffer_add(&databuf, 1);
-
- dns_rdata_totext(rdata, NULL, &databuf);
-
- data.data = isc_buffer_base(&databuf);
- data.size = isc_buffer_usedlength(&databuf);
-
- REQUIRE(db->put(db, NULL, &key, &data, 0) == 0);
-
- return ISC_R_SUCCESS;
-}
-
-isc_result_t
-bdb_destroy(DB *db)
-{
-
- return (db->close(db, 0) == 0) ? ISC_R_SUCCESS : ISC_R_FAILURE;
-}
-
-void
-usage(const char *prog)
-{
-
- fprintf(stderr, "Usage: %s <origin> <zonefile> <db>\n", prog);
- exit(1);
-}
-
-int
-main(int argc, char *argv[])
-{
- isc_mem_t *mctx = NULL;
- isc_buffer_t b;
- int n;
- dns_fixedname_t origin, name;
- dns_db_t *db = NULL;
- dns_dbiterator_t *dbiter = NULL;
- isc_result_t res;
- dns_dbnode_t *node = NULL;
- dns_rdataset_t rdataset;
- dns_rdatasetiter_t *rdatasetiter = NULL;
- dns_rdata_t rdata;
- DB *bdb;
-
- if (argc != 4) usage(*argv);
-
- REQUIRE(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
-
- n = strlen(argv[1]);
- isc_buffer_init(&b, argv[1], n);
- isc_buffer_add(&b, n);
-
- dns_fixedname_init(&origin);
-
- REQUIRE(dns_name_fromtext(dns_fixedname_name(&origin), &b, dns_rootname,
- 0, NULL) == ISC_R_SUCCESS);
- REQUIRE(dns_db_create(mctx, "rbt", dns_fixedname_name(&origin),
- dns_dbtype_zone, dns_rdataclass_in, 0, NULL,
- &db) == ISC_R_SUCCESS);
-
- REQUIRE(dns_db_load(db, argv[2]) == ISC_R_SUCCESS);
-
- REQUIRE(dns_db_createiterator(db, 0, &dbiter) == ISC_R_SUCCESS);
-
- dns_rdataset_init(&rdataset);
- dns_rdata_init(&rdata);
- dns_fixedname_init(&name);
- bdb = bdb_init(argv[3]);
-
- for (res = dns_dbiterator_first(dbiter); res == ISC_R_SUCCESS;
- res = dns_dbiterator_next(dbiter)) {
- dns_dbiterator_current(dbiter, &node, dns_fixedname_name(&name));
- REQUIRE(dns_db_allrdatasets(db, node, NULL, 0, &rdatasetiter)
- == ISC_R_SUCCESS);
-
- for (res = dns_rdatasetiter_first(rdatasetiter);
- res == ISC_R_SUCCESS;
- res = dns_rdatasetiter_next(rdatasetiter)) {
- dns_rdatasetiter_current(rdatasetiter, &rdataset);
-
- res = dns_rdataset_first(&rdataset);
- while (res == ISC_R_SUCCESS) {
- dns_rdataset_current(&rdataset, &rdata);
- REQUIRE(bdb_putrdata(bdb,
- dns_fixedname_name(&name),
- rdataset.ttl, &rdata)
- == ISC_R_SUCCESS);
-
- dns_rdata_reset(&rdata);
- res = dns_rdataset_next(&rdataset);
- }
-
- dns_rdataset_disassociate(&rdataset);
- }
- dns_rdatasetiter_destroy(&rdatasetiter);
- dns_db_detachnode(db, &node);
- }
- dns_dbiterator_destroy(&dbiter);
-
- REQUIRE(bdb_destroy(bdb) == ISC_R_SUCCESS);
-
- return 0;
-}
diff --git a/contrib/sdb/dir/dirdb.c b/contrib/sdb/dir/dirdb.c
deleted file mode 100644
index 749a36d1..00000000
--- a/contrib/sdb/dir/dirdb.c
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Copyright (C) 2000, 2001, 2004, 2007, 2011, 2014, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-/* $Id: dirdb.c,v 1.14 2011/10/11 23:46:45 tbox Exp $ */
-
-/*
- * A simple database driver that returns basic information about
- * files and directories in the Unix file system as DNS data.
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#include <sys/sysmacros.h>
-
-#include <isc/mem.h>
-#include <isc/print.h>
-#include <isc/result.h>
-#include <isc/util.h>
-
-#include <dns/sdb.h>
-
-#include <named/globals.h>
-
-#include "dirdb.h"
-
-static dns_sdbimplementation_t *dirdb = NULL;
-
-#define CHECK(op) \
- do { result = (op); \
- if (result != ISC_R_SUCCESS) return (result); \
- } while (0)
-
-#define CHECKN(op) \
- do { n = (op); \
- if (n < 0) return (ISC_R_FAILURE); \
- } while (0)
-
-
-/*
- * This database operates on relative names.
- *
- * Any name will be interpreted as a pathname offset from the directory
- * specified in the configuration file.
- */
-#ifdef DNS_CLIENTINFO_VERSION
-static isc_result_t
-dirdb_lookup(const char *zone, const char *name, void *dbdata,
- dns_sdblookup_t *lookup, dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-#else
-static isc_result_t
-dirdb_lookup(const char *zone, const char *name, void *dbdata,
- dns_sdblookup_t *lookup)
-#endif /* DNS_CLIENTINFO_VERSION */
-{
- char filename[255];
- char filename2[255];
- char buf[1024];
- struct stat statbuf;
- isc_result_t result;
- int n;
-
- UNUSED(zone);
- UNUSED(dbdata);
-#ifdef DNS_CLIENTINFO_VERSION
- UNUSED(methods);
- UNUSED(clientinfo);
-#endif /* DNS_CLIENTINFO_VERSION */
-
- if (strcmp(name, "@") == 0)
- snprintf(filename, sizeof(filename), "%s", (char *)dbdata);
- else
- snprintf(filename, sizeof(filename), "%s/%s",
- (char *)dbdata, name);
- CHECKN(lstat(filename, &statbuf));
-
- if (S_ISDIR(statbuf.st_mode))
- CHECK(dns_sdb_putrr(lookup, "txt", 3600, "dir"));
- else if (S_ISCHR(statbuf.st_mode) || S_ISBLK(statbuf.st_mode)) {
- CHECKN(snprintf(buf, sizeof(buf),
- "\"%sdev\" \"major %d\" \"minor %d\"",
- S_ISCHR(statbuf.st_mode) ? "chr" : "blk",
- major(statbuf.st_rdev),
- minor(statbuf.st_rdev)));
- CHECK(dns_sdb_putrr(lookup, "txt", 3600, buf));
- } else if (S_ISFIFO(statbuf.st_mode))
- CHECK(dns_sdb_putrr(lookup, "txt", 3600, "pipe"));
- else if (S_ISSOCK(statbuf.st_mode))
- CHECK(dns_sdb_putrr(lookup, "txt", 3600, "socket"));
- else if (S_ISLNK(statbuf.st_mode)) {
- CHECKN(readlink(filename, filename2, sizeof(filename2) - 1));
- buf[n] = 0;
- CHECKN(snprintf(buf, sizeof(buf), "\"symlink\" \"%s\"",
- filename2));
- CHECK(dns_sdb_putrr(lookup, "txt", 3600, buf));
- } else if (!S_ISREG(statbuf.st_mode))
- CHECK(dns_sdb_putrr(lookup, "txt", 3600, "unknown"));
- else {
- CHECKN(snprintf(buf, sizeof(buf), "\"file\" \"size = %u\"",
- (unsigned int)statbuf.st_size));
- CHECK(dns_sdb_putrr(lookup, "txt", 3600, buf));
- }
-
- return (ISC_R_SUCCESS);
-}
-
-/*
- * lookup () does not return SOA or NS records, so authority() must be defined.
- */
-static isc_result_t
-dirdb_authority(const char *zone, void *dbdata, dns_sdblookup_t *lookup) {
- isc_result_t result;
-
- UNUSED(zone);
- UNUSED(dbdata);
-
- result = dns_sdb_putsoa(lookup, "ns", "hostmaster", 0);
- INSIST(result == ISC_R_SUCCESS);
- result = dns_sdb_putrr(lookup, "ns", 86400, "ns1");
- INSIST(result == ISC_R_SUCCESS);
- result = dns_sdb_putrr(lookup, "ns", 86400, "ns2");
- INSIST(result == ISC_R_SUCCESS);
- return (ISC_R_SUCCESS);
-}
-
-/*
- * Each database stores the top-level directory as the dbdata opaque
- * object. The create() function allocates it. argv[0] holds the top
- * level directory.
- */
-static isc_result_t
-dirdb_create(const char *zone, int argc, char **argv,
- void *driverdata, void **dbdata)
-{
- UNUSED(zone);
- UNUSED(driverdata);
-
- if (argc < 1)
- return (ISC_R_FAILURE);
- *dbdata = isc_mem_strdup((isc_mem_t *)driverdata, argv[0]);
- if (*dbdata == NULL)
- return (ISC_R_NOMEMORY);
- return (ISC_R_SUCCESS);
-}
-
-/*
- * The destroy() function frees the memory allocated by create().
- */
-static void
-dirdb_destroy(const char *zone, void *driverdata, void **dbdata) {
- UNUSED(zone);
- UNUSED(driverdata);
- isc_mem_free((isc_mem_t *)driverdata, *dbdata);
-}
-
-/*
- * This zone does not support zone transfer, so allnodes() is NULL.
- */
-static dns_sdbmethods_t dirdb_methods = {
- dirdb_lookup,
- dirdb_authority,
- NULL, /* allnodes */
- dirdb_create,
- dirdb_destroy,
- NULL /* lookup2 */
-};
-
-/*
- * Wrapper around dns_sdb_register(). Note that the first ns_g_mctx is
- * being passed as the "driverdata" parameter, so that will it will be
- * passed to create() and destroy().
- */
-isc_result_t
-dirdb_init(void) {
- unsigned int flags;
- flags = DNS_SDBFLAG_RELATIVEOWNER | DNS_SDBFLAG_RELATIVERDATA |
- DNS_SDBFLAG_THREADSAFE;
- return (dns_sdb_register("dir", &dirdb_methods, ns_g_mctx, flags,
- ns_g_mctx, &dirdb));
-}
-
-/*
- * Wrapper around dns_sdb_unregister().
- */
-void
-dirdb_clear(void) {
- if (dirdb != NULL)
- dns_sdb_unregister(&dirdb);
-}
diff --git a/contrib/sdb/dir/dirdb.h b/contrib/sdb/dir/dirdb.h
deleted file mode 100644
index 3559733f..00000000
--- a/contrib/sdb/dir/dirdb.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright (C) 2000, 2001, 2004, 2007, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-/* $Id: dirdb.h,v 1.5 2007/06/19 23:47:07 tbox Exp $ */
-
-#include <isc/types.h>
-
-isc_result_t dirdb_init(void);
-
-void dirdb_clear(void);
-
diff --git a/contrib/sdb/ldap/INSTALL.ldap b/contrib/sdb/ldap/INSTALL.ldap
deleted file mode 100644
index 91511296..00000000
--- a/contrib/sdb/ldap/INSTALL.ldap
+++ /dev/null
@@ -1,83 +0,0 @@
-This is the INSTALL file for 1.0-beta. See
-http://www.venaas.no/ldap/bind-sdb/ for updates or other information.
-
-BUILDING
-
-You need the source for BIND 9.1.0 or newer (for zone transfers you
-will need at least 9.1.1rc3 due to a bug). Basically you need to follow
-the instructions in doc/misc/sdb, if my instructions don't make sense,
-please have a look at those as well.
-
-Copy ldapdb.c to bin/named and ldapdb.h to bin/named/include in the
-source tree.
-
-Next alter bin/named/Makefile.in. Add ldapdb.@O@ to DBDRIVER_OBJS and
-ldapdb.c to DBDRIVER_SRCS. You also need to add something like
--I/usr/local/include to DBDRIVER_INCLUDES and
--L/usr/local/lib -lldap -llber -lresolv to DBDRIVER_LIBS
-depending on what LDAP library you have and where you installed it.
-
-Finally you need to edit bin/named/main.c. Below where it says
-"#include "xxdb.h"", add the line "#include <ldapdb.h>". Below where
-it says "xxdb_init();" add the line "ldapdb_init();", and finally
-below where it says "xxdb_clear();", add "ldapdb_clear();".
-
-Now you should hopefully be able to build as usual; first configure
-and then make. If you get an error message about ldap_memfree() not
-being defined, you're probably using an LDAP library with the
-interface defined in RFC 1823. To build, uncomment the "#define
-LDAPDB_RFC1823API" line near the top of ldapdb.c.
-
-Also, if you're using an LDAPv2 only server, you need to change
-the line "#define LDAPDB_LDAP_VERSION 3" in ldapdb.c. Simply
-replace 3 with 2. Instead of editing the file, you may define
-LDAPDB_LDAP_VERSION yourself.
-
-If you want to use TLS, you need to uncommed the #define LDAPDB_TLS"
-line near the top of ldapdb.c.
-
-CONFIGURING
-
-Before you do any configuring of LDAP stuff, please try to configure
-and start bind as usual to see if things work.
-
-To do anything useful, you need to store a zone in some LDAP server.
-You must use a schema called dNSZone. Note that it relies on some
-attribute definitions in the Cosine schema, so that must be included
-as well. The Cosine schema probably comes with your LDAP server. You
-can find dNSZone and further details on how to store the data in your
-LDAP server at http://www.venaas.no/ldap/bind-sdb/
-
-To make BIND use a zone stored in LDAP, you will have to put something
-like this in named.conf:
-
-zone "venaas.com" {
- type master;
- database "ldap ldap://158.38.160.245/dc=venaas,dc=com,o=DNS,dc=venaas,dc=no 172800";
-};
-
-When doing lookups BIND will do a sub-tree search below the base in the
-URL. The number 172800 is the TTL which will be used for all entries that
-haven't got the dNSTTL attribute. It is also possible to add a filter to
-the URL, say "ldap://host/base???(o=internal)".
-
-Version 1.0 also has support for simple LDAP bind, that is, binding to
-LDAP using plain text authentication. The bind dn and password is coded
-into the URL as extensions, according to RFC 2255. If you want simple
-bind with say dn "cn=Manager,dc=venaas,dc=no" and password "secret", the
-URL will be something like this:
-
-ldap://158.38.160.245/dc=venaas,dc=com,o=DNS,dc=venaas,dc=no????!bindname=cn=Manager%2cdc=venaas%2cdc=no,!x-bindpw=secret
-
-This URL may also include a filter part if you need it. Note that in
-the bind dn, "," is hex-escaped as "%2c". This is necessary since ","
-is the separator between the extension elements. The "!" in front of
-"bindname" and "x-bindpw" can be omitted if you prefer. "x-bindpw" is
-not standardized, but it's used by several other LDAP applications. See
-RFC 2255 for details.
-
-Finally, if you enabled TLS when compiling, you can also use TLS if
-you like. To do this you use the extension "x-tls", e.g.
-ldap://158.38.160.245/dc=venaas,dc=com,o=DNS,dc=venaas,dc=no????!bindname=cn=Manager%2cdc=venaas%2cdc=no,!x-bindpw=secret,x-tls
-
-Stig Venaas <venaas@uninett.no> 2004-08-15
diff --git a/contrib/sdb/ldap/README.ldap b/contrib/sdb/ldap/README.ldap
deleted file mode 100644
index b4ea18ab..00000000
--- a/contrib/sdb/ldap/README.ldap
+++ /dev/null
@@ -1,48 +0,0 @@
-This is an attempt at an LDAP back-end for BIND 9 using the new simplified
-database interface "sdb". This is release 1.0-beta and should be pretty
-stable. Note that since version 0.4 a new schema is used. It is not
-backwards compatible with versions before 0.4.
-
-1.0-beta fixes a large memory leak. An extension x-tls for enabling TLS
-has been added.
-
-1.0-alpha uses LDAPv3 by default and also supports LDAP simple bind. That
-is, one can use plain text password for authentication. The bind dn and
-password is coded into the URL using extensions bindname and x-bindpw
-per RFC 2255.
-
-In 0.9 the code has been cleaned up a bit and should be slightly faster
-than previous versions. It also fixes an error with zone transfers (AXFR)
-and entries with multiple relativeDomainName values. The problem was
-that it would only use the first value in the result. There's no need
-to upgrade unless you use such entries.
-
-0.8 uses asynchronous LDAP search which should give better performance.
-Thanks to Ashley Burston for providing patch. Another new feature is
-allowing filters in URLs. The syntax is as in RFC 2255. Few people will
-need this, but if you have say an internal and external version of the
-same zone, you could stick say o=internal and o=external into different
-entries, and specify for instance ldap://host/base???(o=internal)
-Some error logging has also been added.
-
-0.7 allows space and other characters to be used in URLs by use of %-quoting.
-For instance space can be written as %20. It also fixes a problem with some
-servers and/or APIs that do not preserve attribute casing.
-
-0.6 fixes some memory leaks present in older versions unless compiled with
-the RFC 1823 API.
-
-The big changes in 0.5 are thread support and improved connection handling.
-Multiple threads can now access the back-end simultaneously, and rather than
-having one connection per zone, there is now one connection per thread per
-LDAP server. This should help people with multiple CPUs and people with a
-huge number of zones. One final change is support for literal IPv6 addresses
-in LDAP URLs. At least OpenLDAP 2 has IPv6 support, so if you use OpenLDAP 2
-libraries and server, you got all you need.
-
-If you have bug reports, fixes, comments, questions or whatever, please
-contact me. See also http://www.venaas.no/ldap/bind-sdb/ for information.
-
-See INSTALL for how to build, install and use.
-
-Stig Venaas <venaas@uninett.no> 2004-08-15
diff --git a/contrib/sdb/ldap/README.zone2ldap b/contrib/sdb/ldap/README.zone2ldap
deleted file mode 100644
index dacb56bf..00000000
--- a/contrib/sdb/ldap/README.zone2ldap
+++ /dev/null
@@ -1,17 +0,0 @@
-INSTALLATION
-
-To Compile zone2ldap from contrib/sdb directory:
-
- gcc -g `../../../isc-config.sh --cflags isc dns` -c zone2ldap.c
- gcc -g -o zone2ldap zone2ldap.o `../../../isc-config.sh --libs isc dns` -lldap -llber -lresolv
-
-USAGE:
-
-See zone2ldap.1
-
-BUGS:
-
-Jeff McNeil <jeff@snapcase.g-rock.net>
-
-
-
diff --git a/contrib/sdb/ldap/ldapdb.c b/contrib/sdb/ldap/ldapdb.c
deleted file mode 100644
index c43342cd..00000000
--- a/contrib/sdb/ldap/ldapdb.c
+++ /dev/null
@@ -1,690 +0,0 @@
-/*
- * ldapdb.c version 1.0-beta
- *
- * Copyright (C) 2002, 2004 Stig Venaas
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * Contributors: Jeremy C. McDermond
- */
-
-/*
- * If you want to use TLS, uncomment the define below
- */
-/* #define LDAPDB_TLS */
-
-/*
- * If you are using an old LDAP API uncomment the define below. Only do this
- * if you know what you're doing or get compilation errors on ldap_memfree().
- * This also forces LDAPv2.
- */
-/* #define LDAPDB_RFC1823API */
-
-/* Using LDAPv3 by default, change this if you want v2 */
-#ifndef LDAPDB_LDAP_VERSION
-#define LDAPDB_LDAP_VERSION 3
-#endif
-
-#include <config.h>
-
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-
-#include <isc/mem.h>
-#include <isc/print.h>
-#include <isc/result.h>
-#include <isc/util.h>
-#include <isc/thread.h>
-
-#include <dns/sdb.h>
-
-#include <named/globals.h>
-#include <named/log.h>
-
-#include <ldap.h>
-#include "ldapdb.h"
-
-/*
- * A simple database driver for LDAP
- */
-
-/* enough for name with 8 labels of max length */
-#define MAXNAMELEN 519
-
-static dns_sdbimplementation_t *ldapdb = NULL;
-
-struct ldapdb_data {
- char *hostport;
- char *hostname;
- int portno;
- char *base;
- int defaultttl;
- char *filterall;
- int filteralllen;
- char *filterone;
- int filteronelen;
- char *filtername;
- char *bindname;
- char *bindpw;
-#ifdef LDAPDB_TLS
- int tls;
-#endif
-};
-
-/* used by ldapdb_getconn */
-
-struct ldapdb_entry {
- void *index;
- size_t size;
- void *data;
- struct ldapdb_entry *next;
-};
-
-static struct ldapdb_entry *ldapdb_find(struct ldapdb_entry *stack,
- const void *index, size_t size) {
- while (stack != NULL) {
- if (stack->size == size && !memcmp(stack->index, index, size))
- return stack;
- stack = stack->next;
- }
- return NULL;
-}
-
-static void ldapdb_insert(struct ldapdb_entry **stack,
- struct ldapdb_entry *item) {
- item->next = *stack;
- *stack = item;
-}
-
-static void ldapdb_lock(int what) {
- static isc_mutex_t lock;
-
- switch (what) {
- case 0:
- isc_mutex_init(&lock);
- break;
- case 1:
- LOCK(&lock);
- break;
- case -1:
- UNLOCK(&lock);
- break;
- }
-}
-
-/* data == NULL means cleanup */
-static LDAP **
-ldapdb_getconn(struct ldapdb_data *data)
-{
- static struct ldapdb_entry *allthreadsdata = NULL;
- struct ldapdb_entry *threaddata, *conndata;
- unsigned long threadid;
-
- if (data == NULL) {
- /* cleanup */
- /* lock out other threads */
- ldapdb_lock(1);
- while (allthreadsdata != NULL) {
- threaddata = allthreadsdata;
- free(threaddata->index);
- while (threaddata->data != NULL) {
- conndata = threaddata->data;
- if (conndata->data != NULL)
- ldap_unbind((LDAP *)conndata->data);
- threaddata->data = conndata->next;
- free(conndata);
- }
- allthreadsdata = threaddata->next;
- free(threaddata);
- }
- ldapdb_lock(-1);
- return (NULL);
- }
-
- /* look for connection data for current thread */
- threadid = isc_thread_self();
- threaddata = ldapdb_find(allthreadsdata, &threadid, sizeof(threadid));
- if (threaddata == NULL) {
- /* no data for this thread, create empty connection list */
- threaddata = malloc(sizeof(*threaddata));
- if (threaddata == NULL)
- return (NULL);
- threaddata->index = malloc(sizeof(threadid));
- if (threaddata->index == NULL) {
- free(threaddata);
- return (NULL);
- }
- *(unsigned long *)threaddata->index = threadid;
- threaddata->size = sizeof(threadid);
- threaddata->data = NULL;
-
- /* need to lock out other threads here */
- ldapdb_lock(1);
- ldapdb_insert(&allthreadsdata, threaddata);
- ldapdb_lock(-1);
- }
-
- /* threaddata points at the connection list for current thread */
- /* look for existing connection to our server */
- conndata = ldapdb_find((struct ldapdb_entry *)threaddata->data,
- data->hostport, strlen(data->hostport));
- if (conndata == NULL) {
- /* no connection data structure for this server, create one */
- conndata = malloc(sizeof(*conndata));
- if (conndata == NULL)
- return (NULL);
- conndata->index = data->hostport;
- conndata->size = strlen(data->hostport);
- conndata->data = NULL;
- ldapdb_insert((struct ldapdb_entry **)&threaddata->data,
- conndata);
- }
-
- return (LDAP **)&conndata->data;
-}
-
-static void
-ldapdb_bind(struct ldapdb_data *data, LDAP **ldp)
-{
-#ifndef LDAPDB_RFC1823API
- const int ver = LDAPDB_LDAP_VERSION;
-#endif
-
- if (*ldp != NULL)
- ldap_unbind(*ldp);
- *ldp = ldap_open(data->hostname, data->portno);
- if (*ldp == NULL)
- return;
-
-#ifndef LDAPDB_RFC1823API
- ldap_set_option(*ldp, LDAP_OPT_PROTOCOL_VERSION, &ver);
-#endif
-
-#ifdef LDAPDB_TLS
- if (data->tls) {
- ldap_start_tls_s(*ldp, NULL, NULL);
- }
-#endif
-
- if (ldap_simple_bind_s(*ldp, data->bindname, data->bindpw) != LDAP_SUCCESS) {
- ldap_unbind(*ldp);
- *ldp = NULL;
- }
-}
-
-#ifdef DNS_CLIENTINFO_VERSION
-static isc_result_t
-ldapdb_search(const char *zone, const char *name, void *dbdata, void *retdata,
- dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo)
-#else
-static isc_result_t
-ldapdb_search(const char *zone, const char *name, void *dbdata, void *retdata,
- void *methods, void *clientinfo)
-#endif /* DNS_CLIENTINFO_VERSION */
-{
- struct ldapdb_data *data = dbdata;
- isc_result_t result = ISC_R_NOTFOUND;
- LDAP **ldp;
- LDAPMessage *res, *e;
- char *fltr, *a, **vals = NULL, **names = NULL;
- char type[64];
-#ifdef LDAPDB_RFC1823API
- void *ptr;
-#else
- BerElement *ptr;
-#endif
- int i, j, errno, msgid;
-
- UNUSED(methods);
- UNUSED(clientinfo);
-
- ldp = ldapdb_getconn(data);
- if (ldp == NULL)
- return (ISC_R_FAILURE);
- if (*ldp == NULL) {
- ldapdb_bind(data, ldp);
- if (*ldp == NULL) {
- isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER, ISC_LOG_ERROR,
- "LDAP sdb zone '%s': bind failed", zone);
- return (ISC_R_FAILURE);
- }
- }
-
- if (name == NULL) {
- fltr = data->filterall;
- } else {
- if (strlen(name) > MAXNAMELEN) {
- isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER, ISC_LOG_ERROR,
- "LDAP sdb zone '%s': name %s too long", zone, name);
- return (ISC_R_FAILURE);
- }
- sprintf(data->filtername, "%s))", name);
- fltr = data->filterone;
- }
-
- msgid = ldap_search(*ldp, data->base, LDAP_SCOPE_SUBTREE, fltr, NULL, 0);
- if (msgid == -1) {
- ldapdb_bind(data, ldp);
- if (*ldp != NULL)
- msgid = ldap_search(*ldp, data->base, LDAP_SCOPE_SUBTREE, fltr, NULL, 0);
- }
-
- if (*ldp == NULL || msgid == -1) {
- isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER, ISC_LOG_ERROR,
- "LDAP sdb zone '%s': search failed, filter %s", zone, fltr);
- return (ISC_R_FAILURE);
- }
-
- /* Get the records one by one as they arrive and return them to bind */
- while ((errno = ldap_result(*ldp, msgid, 0, NULL, &res)) != LDAP_RES_SEARCH_RESULT ) {
- LDAP *ld = *ldp;
- int ttl = data->defaultttl;
-
- /* not supporting continuation references at present */
- if (errno != LDAP_RES_SEARCH_ENTRY) {
- isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER, ISC_LOG_ERROR,
- "LDAP sdb zone '%s': ldap_result returned %d", zone, errno);
- ldap_msgfree(res);
- return (ISC_R_FAILURE);
- }
-
- /* only one entry per result message */
- e = ldap_first_entry(ld, res);
- if (e == NULL) {
- ldap_msgfree(res);
- isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER, ISC_LOG_ERROR,
- "LDAP sdb zone '%s': ldap_first_entry failed", zone);
- return (ISC_R_FAILURE);
- }
-
- if (name == NULL) {
- names = ldap_get_values(ld, e, "relativeDomainName");
- if (names == NULL)
- continue;
- }
-
- vals = ldap_get_values(ld, e, "dNSTTL");
- if (vals != NULL) {
- ttl = atoi(vals[0]);
- ldap_value_free(vals);
- }
-
- for (a = ldap_first_attribute(ld, e, &ptr); a != NULL; a = ldap_next_attribute(ld, e, ptr)) {
- char *s;
-
- for (s = a; *s; s++)
- *s = toupper(*s);
- s = strstr(a, "RECORD");
- if ((s == NULL) || (s == a) || (s - a >= (signed int)sizeof(type))) {
-#ifndef LDAPDB_RFC1823API
- ldap_memfree(a);
-#endif
- continue;
- }
-
- strncpy(type, a, s - a);
- type[s - a] = '\0';
- vals = ldap_get_values(ld, e, a);
- if (vals != NULL) {
- for (i = 0; vals[i] != NULL; i++) {
- if (name != NULL) {
- result = dns_sdb_putrr(retdata, type, ttl, vals[i]);
- } else {
- for (j = 0; names[j] != NULL; j++) {
- result = dns_sdb_putnamedrr(retdata, names[j], type, ttl, vals[i]);
- if (result != ISC_R_SUCCESS)
- break;
- }
- }
-; if (result != ISC_R_SUCCESS) {
- isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER, ISC_LOG_ERROR,
- "LDAP sdb zone '%s': dns_sdb_put... failed for %s", zone, vals[i]);
- ldap_value_free(vals);
-#ifndef LDAPDB_RFC1823API
- ldap_memfree(a);
- if (ptr != NULL)
- ber_free(ptr, 0);
-#endif
- if (name == NULL)
- ldap_value_free(names);
- ldap_msgfree(res);
- return (ISC_R_FAILURE);
- }
- }
- ldap_value_free(vals);
- }
-#ifndef LDAPDB_RFC1823API
- ldap_memfree(a);
-#endif
- }
-#ifndef LDAPDB_RFC1823API
- if (ptr != NULL)
- ber_free(ptr, 0);
-#endif
- if (name == NULL)
- ldap_value_free(names);
-
- /* free this result */
- ldap_msgfree(res);
- }
-
- /* free final result */
- ldap_msgfree(res);
- return (result);
-}
-
-
-/* callback routines */
-#ifdef DNS_CLIENTINFO_VERSION
-static isc_result_t
-ldapdb_lookup(const char *zone, const char *name, void *dbdata,
- dns_sdblookup_t *lookup, dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-{
- UNUSED(methods);
- UNUSED(clientinfo);
- return (ldapdb_search(zone, name, dbdata, lookup, NULL, NULL));
-}
-#else
-static isc_result_t
-ldapdb_lookup(const char *zone, const char *name, void *dbdata,
- dns_sdblookup_t *lookup)
-{
- return (ldapdb_search(zone, name, dbdata, lookup, methods,
- clientinfo));
-}
-#endif /* DNS_CLIENTINFO_VERSION */
-
-static isc_result_t
-ldapdb_allnodes(const char *zone, void *dbdata,
- dns_sdballnodes_t *allnodes)
-{
- return (ldapdb_search(zone, NULL, dbdata, allnodes, NULL, NULL));
-}
-
-static char *
-unhex(char *in)
-{
- static const char hexdigits[] = "0123456789abcdef";
- char *p, *s = in;
- int d1, d2;
-
- while ((s = strchr(s, '%'))) {
- if (!(s[1] && s[2]))
- return NULL;
- if ((p = strchr(hexdigits, tolower(s[1]))) == NULL)
- return NULL;
- d1 = p - hexdigits;
- if ((p = strchr(hexdigits, tolower(s[2]))) == NULL)
- return NULL;
- d2 = p - hexdigits;
- *s++ = d1 << 4 | d2;
- memmove(s, s + 2, strlen(s) - 1);
- }
- return in;
-}
-
-/* returns 0 for ok, -1 for bad syntax, -2 for unknown critical extension */
-static int
-parseextensions(char *extensions, struct ldapdb_data *data)
-{
- char *s, *next, *name, *value;
- int critical;
-
- while (extensions != NULL) {
- s = strchr(extensions, ',');
- if (s != NULL) {
- *s++ = '\0';
- next = s;
- } else {
- next = NULL;
- }
-
- if (*extensions != '\0') {
- s = strchr(extensions, '=');
- if (s != NULL) {
- *s++ = '\0';
- value = *s != '\0' ? s : NULL;
- } else {
- value = NULL;
- }
- name = extensions;
-
- critical = *name == '!';
- if (critical) {
- name++;
- }
- if (*name == '\0') {
- return -1;
- }
-
- if (!strcasecmp(name, "bindname")) {
- data->bindname = value;
- } else if (!strcasecmp(name, "x-bindpw")) {
- data->bindpw = value;
-#ifdef LDAPDB_TLS
- } else if (!strcasecmp(name, "x-tls")) {
- data->tls = value == NULL || !strcasecmp(value, "true");
-#endif
- } else if (critical) {
- return -2;
- }
- }
- extensions = next;
- }
- return 0;
-}
-
-static void
-free_data(struct ldapdb_data *data)
-{
- if (data->hostport != NULL)
- isc_mem_free(ns_g_mctx, data->hostport);
- if (data->hostname != NULL)
- isc_mem_free(ns_g_mctx, data->hostname);
- if (data->filterall != NULL)
- isc_mem_put(ns_g_mctx, data->filterall, data->filteralllen);
- if (data->filterone != NULL)
- isc_mem_put(ns_g_mctx, data->filterone, data->filteronelen);
- isc_mem_put(ns_g_mctx, data, sizeof(struct ldapdb_data));
-}
-
-
-static isc_result_t
-ldapdb_create(const char *zone, int argc, char **argv,
- void *driverdata, void **dbdata)
-{
- struct ldapdb_data *data;
- char *s, *filter = NULL, *extensions = NULL;
- int defaultttl;
-
- UNUSED(driverdata);
-
- /* we assume that only one thread will call create at a time */
- /* want to do this only once for all instances */
-
- if ((argc < 2)
- || (argv[0] != strstr( argv[0], "ldap://"))
- || ((defaultttl = atoi(argv[1])) < 1))
- return (ISC_R_FAILURE);
- data = isc_mem_get(ns_g_mctx, sizeof(struct ldapdb_data));
- if (data == NULL)
- return (ISC_R_NOMEMORY);
-
- memset(data, 0, sizeof(struct ldapdb_data));
- data->hostport = isc_mem_strdup(ns_g_mctx, argv[0] + strlen("ldap://"));
- if (data->hostport == NULL) {
- free_data(data);
- return (ISC_R_NOMEMORY);
- }
-
- data->defaultttl = defaultttl;
-
- s = strchr(data->hostport, '/');
- if (s != NULL) {
- *s++ = '\0';
- data->base = s;
- /* attrs, scope, filter etc? */
- s = strchr(s, '?');
- if (s != NULL) {
- *s++ = '\0';
- /* ignore attributes */
- s = strchr(s, '?');
- if (s != NULL) {
- *s++ = '\0';
- /* ignore scope */
- s = strchr(s, '?');
- if (s != NULL) {
- *s++ = '\0';
- /* filter */
- filter = s;
- s = strchr(s, '?');
- if (s != NULL) {
- *s++ = '\0';
- /* extensions */
- extensions = s;
- s = strchr(s, '?');
- if (s != NULL) {
- *s++ = '\0';
- }
- if (*extensions == '\0') {
- extensions = NULL;
- }
- }
- if (*filter == '\0') {
- filter = NULL;
- }
- }
- }
- }
- if (*data->base == '\0') {
- data->base = NULL;
- }
- }
-
- /* parse extensions */
- if (extensions != NULL) {
- int err;
-
- err = parseextensions(extensions, data);
- if (err < 0) {
- /* err should be -1 or -2 */
- free_data(data);
- if (err == -1) {
- isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER, ISC_LOG_ERROR,
- "LDAP sdb zone '%s': URL: extension syntax error", zone);
- } else if (err == -2) {
- isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER, ISC_LOG_ERROR,
- "LDAP sdb zone '%s': URL: unknown critical extension", zone);
- }
- return (ISC_R_FAILURE);
- }
- }
-
- if ((data->base != NULL && unhex(data->base) == NULL) ||
- (filter != NULL && unhex(filter) == NULL) ||
- (data->bindname != NULL && unhex(data->bindname) == NULL) ||
- (data->bindpw != NULL && unhex(data->bindpw) == NULL)) {
- free_data(data);
- isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER, ISC_LOG_ERROR,
- "LDAP sdb zone '%s': URL: bad hex values", zone);
- return (ISC_R_FAILURE);
- }
-
- /* compute filterall and filterone once and for all */
- if (filter == NULL) {
- data->filteralllen = strlen(zone) + strlen("(zoneName=)") + 1;
- data->filteronelen = strlen(zone) + strlen("(&(zoneName=)(relativeDomainName=))") + MAXNAMELEN + 1;
- } else {
- data->filteralllen = strlen(filter) + strlen(zone) + strlen("(&(zoneName=))") + 1;
- data->filteronelen = strlen(filter) + strlen(zone) + strlen("(&(zoneName=)(relativeDomainName=))") + MAXNAMELEN + 1;
- }
-
- data->filterall = isc_mem_get(ns_g_mctx, data->filteralllen);
- if (data->filterall == NULL) {
- free_data(data);
- return (ISC_R_NOMEMORY);
- }
- data->filterone = isc_mem_get(ns_g_mctx, data->filteronelen);
- if (data->filterone == NULL) {
- free_data(data);
- return (ISC_R_NOMEMORY);
- }
-
- if (filter == NULL) {
- sprintf(data->filterall, "(zoneName=%s)", zone);
- sprintf(data->filterone, "(&(zoneName=%s)(relativeDomainName=", zone);
- } else {
- sprintf(data->filterall, "(&%s(zoneName=%s))", filter, zone);
- sprintf(data->filterone, "(&%s(zoneName=%s)(relativeDomainName=", filter, zone);
- }
- data->filtername = data->filterone + strlen(data->filterone);
-
- /* support URLs with literal IPv6 addresses */
- data->hostname = isc_mem_strdup(ns_g_mctx, data->hostport + (*data->hostport == '[' ? 1 : 0));
- if (data->hostname == NULL) {
- free_data(data);
- return (ISC_R_NOMEMORY);
- }
-
- if (*data->hostport == '[' &&
- (s = strchr(data->hostname, ']')) != NULL )
- *s++ = '\0';
- else
- s = data->hostname;
- s = strchr(s, ':');
- if (s != NULL) {
- *s++ = '\0';
- data->portno = atoi(s);
- } else
- data->portno = LDAP_PORT;
-
- *dbdata = data;
- return (ISC_R_SUCCESS);
-}
-
-static void
-ldapdb_destroy(const char *zone, void *driverdata, void **dbdata) {
- struct ldapdb_data *data = *dbdata;
-
- UNUSED(zone);
- UNUSED(driverdata);
-
- free_data(data);
-}
-
-static dns_sdbmethods_t ldapdb_methods = {
- ldapdb_lookup,
- NULL, /* authority */
- ldapdb_allnodes,
- ldapdb_create,
- ldapdb_destroy,
- NULL /* lookup2 */
-};
-
-/* Wrapper around dns_sdb_register() */
-isc_result_t
-ldapdb_init(void) {
- unsigned int flags =
- DNS_SDBFLAG_RELATIVEOWNER |
- DNS_SDBFLAG_RELATIVERDATA |
- DNS_SDBFLAG_THREADSAFE;
-
- ldapdb_lock(0);
- return (dns_sdb_register("ldap", &ldapdb_methods, NULL, flags,
- ns_g_mctx, &ldapdb));
-}
-
-/* Wrapper around dns_sdb_unregister() */
-void
-ldapdb_clear(void) {
- if (ldapdb != NULL) {
- /* clean up thread data */
- ldapdb_getconn(NULL);
- dns_sdb_unregister(&ldapdb);
- }
-}
diff --git a/contrib/sdb/ldap/ldapdb.h b/contrib/sdb/ldap/ldapdb.h
deleted file mode 100644
index a08eb20b..00000000
--- a/contrib/sdb/ldap/ldapdb.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <isc/types.h>
-
-isc_result_t ldapdb_init(void);
-
-void ldapdb_clear(void);
-
diff --git a/contrib/sdb/ldap/zone2ldap.1 b/contrib/sdb/ldap/zone2ldap.1
deleted file mode 100644
index 781114bc..00000000
--- a/contrib/sdb/ldap/zone2ldap.1
+++ /dev/null
@@ -1,64 +0,0 @@
-.TH zone2ldap 1 "8 March 2001"
-.SH NAME
-zone2ldap /- Load BIND 9 Zone files into LDAP Directory
-.SH SYNOPSIS
-zone2ldap [-D Bind DN] [-w Bind Password] [-b Base DN] [-z Zone] [-f Zone File ] [-h Ldap Host] [-cd] [-v]
-.SH DESCRIPTION
-zone2ldap will parse a complete BIND 9 format DNS zone file, and load
-the contents into an LDAP directory, for use with the LDAP sdb back-end.
-
-If the zone already exists, zone2ldap will exit succesfully. If the zone does not exists, or
-partially exists, zone2ldap will attempt to add all/missing zone data.
-
-.SS Options
-.TP
--b
-LDAP Base DN. LDAP systems require a "base dn", which is generally considered the LDAP Directory root.
-If the zone you are loading is different from the base, then you will need to tell zone2ldap what your LDAP
-base is.
-.TP
--v
-Print version information, and immediatly exit.
-.TP
--f
-Zone file. Bind 9.1 compatible zone file, from which zone information will be read.
-.TP
--d
-Dump debug information to standard out.
-.TP
--w
-LDAP Bind password, corresponding the the value of "-b".
-.TP
--h
-LDAP Directory host. This is the hostname of the LDAP system you wish to store zone information on.
-An LDAP server should be listening on port 389 of the target system. This may be ommited, and will default
-to "localhost".
-.TP
--c
-This will create the zone portion of the DN you are importing. For instance, if you are creating a domain.com zone,
-zone2ldap should first create "dc=domain,dc=com". This is useful if you are creating multiple domains.
-.TP
--z
-This is the name of the zone specified in the SOA record.
-.SH EXAMPLES
-Following are brief examples of how to import a zone file into your LDAP DIT.
-.SS Loading zone domain.com, with an LDAP Base DN of dc=domain,dc=com
-zone2ldap -D dc=root -w secret -h localhost -z domain.com -f domain.com.zone
-
-This will add Resource Records into an ALREADY EXISTING dc=domain,dc=com. The final SOA DN in this case, will be
-dc=@,dc=domain,dc=com
-
-.SS Loading customer.com, if your LDAP Base DN is dc=provider,dc=net.
-zone2ldap -D dc=root -w secret -h localhost -z customer.com -b dc=provider,dc=net -f customer.com.zone -c
-
-This will create dc=customer,dc=com under dc=provider,dc=net, and add all necessary Resource Records. The final
-root DN to the SOA will be dc=@,dc=customer,dc=com,dc=provider,dc=net.
-
-.SH "SEE ALSO"
-named(8) ldap(3)
-http://www.venaas.no/ldap/bind-sdb/
-.SH "BUGS"
-Send all bug reports to Jeff McNeil <jeff@snapcase.g-rock.net>
-.SH AUTHOR
-Jeff McNeil <jeff@snapcase.g-rock.net>
-
diff --git a/contrib/sdb/ldap/zone2ldap.c b/contrib/sdb/ldap/zone2ldap.c
deleted file mode 100644
index ed674b57..00000000
--- a/contrib/sdb/ldap/zone2ldap.c
+++ /dev/null
@@ -1,774 +0,0 @@
-/*
- * Copyright (C) 2001 Jeff McNeil <jeff@snapcase.g-rock.net>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * Change Log
- *
- * Tue May 1 19:19:54 EDT 2001 - Jeff McNeil
- * Update to objectClass code, and add_to_rr_list function
- * (I need to rename that) to support the dNSZone schema,
- * ditched dNSDomain2 schema support. Version 0.3-ALPHA
- */
-
-#include <errno.h>
-#include <string.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <getopt.h>
-
-#include <isc/buffer.h>
-#include <isc/entropy.h>
-#include <isc/hash.h>
-#include <isc/mem.h>
-#include <isc/print.h>
-#include <isc/result.h>
-#include <isc/string.h>
-
-#include <dns/db.h>
-#include <dns/dbiterator.h>
-#include <dns/fixedname.h>
-#include <dns/name.h>
-#include <dns/rdata.h>
-#include <dns/rdataset.h>
-#include <dns/rdatasetiter.h>
-#include <dns/result.h>
-#include <dns/rdatatype.h>
-
-#define LDAP_DEPRECATED 1
-
-#include <ldap.h>
-
-#define DNS_OBJECT 6
-#define DNS_TOP 2
-
-#define VERSION "0.4-ALPHA"
-
-#define NO_SPEC 0
-#define WI_SPEC 1
-
-/* Global Zone Pointer */
-char *gbl_zone = NULL;
-
-typedef struct LDAP_INFO
-{
- char *dn;
- LDAPMod **attrs;
- struct LDAP_INFO *next;
- int attrcnt;
-}
-ldap_info;
-
-/* usage Info */
-void usage ();
-
-/* Add to the ldap dit */
-void add_ldap_values (ldap_info * ldinfo);
-
-/* Init an ldap connection */
-void init_ldap_conn ();
-
-/* Ldap error checking */
-void ldap_result_check (char *msg, char *dn, int err);
-
-/* Put a hostname into a char ** array */
-char **hostname_to_dn_list (char *hostname, char *zone, unsigned int flags);
-
-/* Find out how many items are in a char ** array */
-int get_attr_list_size (char **tmp);
-
-/* Get a DN */
-char *build_dn_from_dc_list (char **dc_list, unsigned int ttl, int flag);
-
-/* Add to RR list */
-void add_to_rr_list (char *dn, char *name, char *type, char *data,
- unsigned int ttl, unsigned int flags);
-
-/* Error checking */
-void isc_result_check (isc_result_t res, char *errorstr);
-
-/* Generate LDIF Format files */
-void generate_ldap (dns_name_t * dnsname, dns_rdata_t * rdata,
- unsigned int ttl);
-
-/* head pointer to the list */
-ldap_info *ldap_info_base = NULL;
-
-char *argzone, *ldapbase, *binddn, *bindpw = NULL;
-char *ldapsystem = "localhost";
-static char *objectClasses[] =
- { "top", "dNSZone", NULL };
-static char *topObjectClasses[] = { "top", NULL };
-LDAP *conn;
-unsigned int debug = 0;
-
-#ifdef DEBUG
-debug = 1;
-#endif
-
-static void
-fatal(const char *msg) {
- perror(msg);
- if (conn != NULL)
- ldap_unbind_s(conn);
- exit(1);
-}
-
-int
-main (int argc, char **argv)
-{
- isc_mem_t *mctx = NULL;
- isc_entropy_t *ectx = NULL;
- isc_result_t result;
- char *basedn;
- ldap_info *tmp;
- LDAPMod *base_attrs[2];
- LDAPMod base;
- isc_buffer_t buff;
- char *zonefile;
- char fullbasedn[1024];
- char *ctmp;
- dns_fixedname_t fixedzone, fixedname;
- dns_rdataset_t rdataset;
- char **dc_list;
- dns_rdata_t rdata = DNS_RDATA_INIT;
- dns_rdatasetiter_t *riter;
- dns_name_t *zone, *name;
- dns_db_t *db = NULL;
- dns_dbiterator_t *dbit = NULL;
- dns_dbnode_t *node;
- extern char *optarg;
- extern int optind, opterr, optopt;
- int create_base = 0;
- int topt;
-
- if (argc < 2)
- {
- usage ();
- exit (-1);
- }
-
- while ((topt = getopt (argc, argv, "D:w:b:z:f:h:?dcv")) != -1)
- {
- switch (topt)
- {
- case 'v':
- printf("%s\n", VERSION);
- exit(0);
- case 'c':
- create_base++;
- break;
- case 'd':
- debug++;
- break;
- case 'D':
- binddn = strdup (optarg);
- if (binddn == NULL)
- fatal("strdup");
- break;
- case 'w':
- bindpw = strdup (optarg);
- if (bindpw == NULL)
- fatal("strdup");
- break;
- case 'b':
- ldapbase = strdup (optarg);
- if (ldapbase == NULL)
- fatal("strdup");
- break;
- case 'z':
- argzone = strdup (optarg);
- // We wipe argzone all to hell when we parse it for the DN */
- gbl_zone = strdup(argzone);
- if (argzone == NULL || gbl_zone == NULL)
- fatal("strdup");
- break;
- case 'f':
- zonefile = strdup (optarg);
- if (zonefile == NULL)
- fatal("strdup");
- break;
- case 'h':
- ldapsystem = strdup (optarg);
- if (ldapsystem == NULL)
- fatal("strdup");
- break;
- case '?':
- default:
- usage ();
- exit (0);
- }
- }
-
- if ((argzone == NULL) || (zonefile == NULL))
- {
- usage ();
- exit (-1);
- }
-
- if (debug)
- printf ("Initializing ISC Routines, parsing zone file\n");
-
- result = isc_mem_create (0, 0, &mctx);
- isc_result_check (result, "isc_mem_create");
-
- result = isc_entropy_create(mctx, &ectx);
- isc_result_check (result, "isc_entropy_create");
-
- result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
- isc_result_check (result, "isc_hash_create");
-
- isc_buffer_init (&buff, argzone, strlen (argzone));
- isc_buffer_add (&buff, strlen (argzone));
- dns_fixedname_init (&fixedzone);
- zone = dns_fixedname_name (&fixedzone);
- result = dns_name_fromtext (zone, &buff, dns_rootname, 0, NULL);
- isc_result_check (result, "dns_name_fromtext");
-
- result = dns_db_create (mctx, "rbt", zone, dns_dbtype_zone,
- dns_rdataclass_in, 0, NULL, &db);
- isc_result_check (result, "dns_db_create");
-
- result = dns_db_load (db, zonefile);
- isc_result_check (result, "Check Zone Syntax: dns_db_load");
-
- result = dns_db_createiterator (db, 0, &dbit);
- isc_result_check (result, "dns_db_createiterator");
-
- result = dns_dbiterator_first (dbit);
- isc_result_check (result, "dns_dbiterator_first");
-
- dns_fixedname_init (&fixedname);
- name = dns_fixedname_name (&fixedname);
- dns_rdataset_init (&rdataset);
- dns_rdata_init (&rdata);
-
- while (result == ISC_R_SUCCESS)
- {
- node = NULL;
- result = dns_dbiterator_current (dbit, &node, name);
-
- if (result == ISC_R_NOMORE)
- break;
-
- isc_result_check (result, "dns_dbiterator_current");
-
- riter = NULL;
- result = dns_db_allrdatasets (db, node, NULL, 0, &riter);
- isc_result_check (result, "dns_db_allrdatasets");
-
- result = dns_rdatasetiter_first (riter);
- //isc_result_check(result, "dns_rdatasetiter_first");
-
- while (result == ISC_R_SUCCESS)
- {
- dns_rdatasetiter_current (riter, &rdataset);
- result = dns_rdataset_first (&rdataset);
- isc_result_check (result, "dns_rdatasetiter_current");
-
- while (result == ISC_R_SUCCESS)
- {
- dns_rdataset_current (&rdataset, &rdata);
- generate_ldap (name, &rdata, rdataset.ttl);
- dns_rdata_reset (&rdata);
- result = dns_rdataset_next (&rdataset);
- }
- dns_rdataset_disassociate (&rdataset);
- result = dns_rdatasetiter_next (riter);
-
- }
- dns_rdatasetiter_destroy (&riter);
- result = dns_dbiterator_next (dbit);
-
- }
-
- /* Initialize the LDAP Connection */
- if (debug)
- printf ("Initializing LDAP Connection to %s as %s\n", ldapsystem, binddn);
-
- init_ldap_conn ();
-
- if (create_base)
- {
- if (debug)
- printf ("Creating base zone DN %s\n", argzone);
-
- dc_list = hostname_to_dn_list (argzone, argzone, DNS_TOP);
- basedn = build_dn_from_dc_list (dc_list, 0, NO_SPEC);
-
- for (ctmp = &basedn[strlen (basedn)]; ctmp >= &basedn[0]; ctmp--)
- {
- if ((*ctmp == ',') || (ctmp == &basedn[0]))
- {
- base.mod_op = LDAP_MOD_ADD;
- base.mod_type = "objectClass";
- base.mod_values = topObjectClasses;
- base_attrs[0] = &base;
- base_attrs[1] = NULL;
-
- if (ldapbase)
- {
- if (ctmp != &basedn[0])
- sprintf (fullbasedn, "%s,%s", ctmp + 1, ldapbase);
- else
- sprintf (fullbasedn, "%s,%s", ctmp, ldapbase);
-
- }
- else
- {
- if (ctmp != &basedn[0])
- sprintf (fullbasedn, "%s", ctmp + 1);
- else
- sprintf (fullbasedn, "%s", ctmp);
- }
- result = ldap_add_s (conn, fullbasedn, base_attrs);
- ldap_result_check ("intial ldap_add_s", fullbasedn, result);
- }
-
- }
- }
- else
- {
- if (debug)
- printf ("Skipping zone base dn creation for %s\n", argzone);
- }
-
- for (tmp = ldap_info_base; tmp != NULL; tmp = tmp->next)
- {
-
- if (debug)
- printf ("Adding DN: %s\n", tmp->dn);
-
- add_ldap_values (tmp);
- }
-
- if (debug)
- printf("Operation Complete.\n");
-
- /* Cleanup */
- isc_hash_destroy();
- isc_entropy_detach(&ectx);
- isc_mem_destroy(&mctx);
- if (zonefile)
- free(zonefile);
-
- return 0;
-}
-
-
-/* Check the status of an isc_result_t after any isc routines.
- * I should probably rename this function, as not to cause any
- * confusion with the isc* routines. Will exit on error. */
-void
-isc_result_check (isc_result_t res, char *errorstr)
-{
- if (res != ISC_R_SUCCESS)
- {
- fprintf (stderr, " %s: %s\n", errorstr, isc_result_totext (res));
- exit (-1);
- }
-}
-
-
-/* Takes DNS information, in bind data structure format, and adds textual
- * zone information to the LDAP run queue. */
-void
-generate_ldap (dns_name_t * dnsname, dns_rdata_t * rdata, unsigned int ttl)
-{
- char name[DNS_NAME_MAXTEXT + 1];
- unsigned int len;
- char type[20];
- char data[2048];
- char **dc_list;
- char *dn;
-
- isc_buffer_t buff;
- isc_result_t result;
-
- isc_buffer_init (&buff, name, sizeof (name));
- result = dns_name_totext (dnsname, ISC_TRUE, &buff);
- isc_result_check (result, "dns_name_totext");
- name[isc_buffer_usedlength (&buff)] = 0;
-
- isc_buffer_init (&buff, type, sizeof (type));
- result = dns_rdatatype_totext (rdata->type, &buff);
- isc_result_check (result, "dns_rdatatype_totext");
- type[isc_buffer_usedlength (&buff)] = 0;
-
- isc_buffer_init (&buff, data, sizeof (data));
- result = dns_rdata_totext (rdata, NULL, &buff);
- isc_result_check (result, "dns_rdata_totext");
- data[isc_buffer_usedlength (&buff)] = 0;
-
- dc_list = hostname_to_dn_list (name, argzone, DNS_OBJECT);
- len = (get_attr_list_size (dc_list) - 2);
- dn = build_dn_from_dc_list (dc_list, ttl, WI_SPEC);
-
- if (debug)
- printf ("Adding %s (%s %s) to run queue list.\n", dn, type, data);
-
- add_to_rr_list (dn, dc_list[len], type, data, ttl, DNS_OBJECT);
-}
-
-
-/* Locate an item in the Run queue linked list, by DN. Used by functions
- * which add items to the run queue.
- */
-ldap_info *
-locate_by_dn (char *dn)
-{
- ldap_info *tmp;
- for (tmp = ldap_info_base; tmp != (ldap_info *) NULL; tmp = tmp->next)
- {
- if (!strncmp (tmp->dn, dn, strlen (dn)))
- return tmp;
- }
- return (ldap_info *) NULL;
-}
-
-
-
-/* Take textual zone data, and add to the LDAP Run queue. This works like so:
- * If locate_by_dn does not return, alloc a new ldap_info structure, and then
- * calloc a LDAPMod array, fill in the default "everyone needs this" information,
- * including object classes and dc's. If it locate_by_dn does return, then we'll
- * realloc for more LDAPMod structs, and appened the new data. If an LDAPMod exists
- * for the parameter we're adding, then we'll realloc the mod_values array, and
- * add the new value to the existing LDAPMod. Finnaly, it assures linkage exists
- * within the Run queue linked ilst*/
-
-void
-add_to_rr_list (char *dn, char *name, char *type,
- char *data, unsigned int ttl, unsigned int flags)
-{
- int i;
- int x;
- ldap_info *tmp;
- int attrlist;
- char ldap_type_buffer[128];
- char charttl[64];
-
-
- if ((tmp = locate_by_dn (dn)) == NULL)
- {
-
- /* There wasn't one already there, so we need to allocate a new one,
- * and stick it on the list */
-
- tmp = (ldap_info *) malloc (sizeof (ldap_info));
- if (tmp == (ldap_info *) NULL)
- fatal("malloc");
-
- tmp->dn = strdup (dn);
- if (tmp->dn == NULL)
- fatal("strdup");
-
- tmp->attrs = (LDAPMod **) calloc (sizeof (LDAPMod *), flags);
- if (tmp->attrs == (LDAPMod **) NULL)
- fatal("calloc");
-
- for (i = 0; i < flags; i++)
- {
- tmp->attrs[i] = (LDAPMod *) malloc (sizeof (LDAPMod));
- if (tmp->attrs[i] == (LDAPMod *) NULL)
- fatal("malloc");
- }
- tmp->attrs[0]->mod_op = LDAP_MOD_ADD;
- tmp->attrs[0]->mod_type = "objectClass";
-
- if (flags == DNS_OBJECT)
- tmp->attrs[0]->mod_values = objectClasses;
- else
- {
- tmp->attrs[0]->mod_values = topObjectClasses;
- tmp->attrs[1] = NULL;
- tmp->attrcnt = 2;
- tmp->next = ldap_info_base;
- ldap_info_base = tmp;
- return;
- }
-
- tmp->attrs[1]->mod_op = LDAP_MOD_ADD;
- tmp->attrs[1]->mod_type = "relativeDomainName";
- tmp->attrs[1]->mod_values = (char **) calloc (sizeof (char *), 2);
-
- if (tmp->attrs[1]->mod_values == (char **)NULL)
- fatal("calloc");
-
- tmp->attrs[1]->mod_values[0] = strdup (name);
- tmp->attrs[1]->mod_values[2] = NULL;
-
- if (tmp->attrs[1]->mod_values[0] == NULL)
- fatal("strdup");
-
- sprintf (ldap_type_buffer, "%sRecord", type);
-
- tmp->attrs[2]->mod_op = LDAP_MOD_ADD;
- tmp->attrs[2]->mod_type = strdup (ldap_type_buffer);
- tmp->attrs[2]->mod_values = (char **) calloc (sizeof (char *), 2);
-
- if (tmp->attrs[2]->mod_type == NULL ||
- tmp->attrs[2]->mod_values == (char **)NULL)
- fatal("strdup/calloc");
-
- tmp->attrs[2]->mod_values[0] = strdup (data);
- tmp->attrs[2]->mod_values[1] = NULL;
-
- if (tmp->attrs[2]->mod_values[0] == NULL)
- fatal("strdup");
-
- tmp->attrs[3]->mod_op = LDAP_MOD_ADD;
- tmp->attrs[3]->mod_type = "dNSTTL";
- tmp->attrs[3]->mod_values = (char **) calloc (sizeof (char *), 2);
-
- if (tmp->attrs[3]->mod_values == (char **)NULL)
- fatal("calloc");
-
- sprintf (charttl, "%d", ttl);
- tmp->attrs[3]->mod_values[0] = strdup (charttl);
- tmp->attrs[3]->mod_values[1] = NULL;
-
- if (tmp->attrs[3]->mod_values[0] == NULL)
- fatal("strdup");
-
- tmp->attrs[4]->mod_op = LDAP_MOD_ADD;
- tmp->attrs[4]->mod_type = "zoneName";
- tmp->attrs[4]->mod_values = (char **)calloc(sizeof(char *), 2);
-
- if (tmp->attrs[4]->mod_values == (char **)NULL)
- fatal("calloc");
-
- tmp->attrs[4]->mod_values[0] = gbl_zone;
- tmp->attrs[4]->mod_values[1] = NULL;
-
- tmp->attrs[5] = NULL;
- tmp->attrcnt = flags;
- tmp->next = ldap_info_base;
- ldap_info_base = tmp;
- }
- else
- {
-
- for (i = 0; tmp->attrs[i] != NULL; i++)
- {
- sprintf (ldap_type_buffer, "%sRecord", type);
- if (!strncmp
- (ldap_type_buffer, tmp->attrs[i]->mod_type,
- strlen (tmp->attrs[i]->mod_type)))
- {
- attrlist = get_attr_list_size (tmp->attrs[i]->mod_values);
- tmp->attrs[i]->mod_values =
- (char **) realloc (tmp->attrs[i]->mod_values,
- sizeof (char *) * (attrlist + 1));
-
- if (tmp->attrs[i]->mod_values == (char **) NULL)
- fatal("realloc");
-
- for (x = 0; tmp->attrs[i]->mod_values[x] != NULL; x++);
-
- tmp->attrs[i]->mod_values[x] = strdup (data);
- if (tmp->attrs[i]->mod_values[x] == NULL)
- fatal("strdup");
- tmp->attrs[i]->mod_values[x + 1] = NULL;
-
- return;
- }
- }
- tmp->attrs =
- (LDAPMod **) realloc (tmp->attrs,
- sizeof (LDAPMod) * ++(tmp->attrcnt));
- if (tmp->attrs == NULL)
- fatal("realloc");
-
- for (x = 0; tmp->attrs[x] != NULL; x++);
- tmp->attrs[x] = (LDAPMod *) malloc (sizeof (LDAPMod));
- if (tmp->attrs[x] == NULL)
- fatal("malloc");
- tmp->attrs[x]->mod_op = LDAP_MOD_ADD;
- tmp->attrs[x]->mod_type = strdup (ldap_type_buffer);
- tmp->attrs[x]->mod_values = (char **) calloc (sizeof (char *), 2);
-
- if (tmp->attrs[x]->mod_type == NULL ||
- tmp->attrs[x]->mod_values == (char **)NULL)
- fatal("strdup/calloc");
-
- tmp->attrs[x]->mod_values[0] = strdup (data);
- if (tmp->attrs[x]->mod_values[0] == NULL)
- fatal("strdup");
- tmp->attrs[x]->mod_values[1] = NULL;
- tmp->attrs[x + 1] = NULL;
- }
-}
-
-/* Size of a mod_values list, plus the terminating NULL field. */
-int
-get_attr_list_size (char **tmp)
-{
- int i = 0;
- char **ftmp = tmp;
- while (*ftmp != NULL)
- {
- i++;
- ftmp++;
- }
- return ++i;
-}
-
-
-/* take a hostname, and split it into a char ** of the dc parts,
- * example, we have www.domain.com, this function will return:
- * array[0] = com, array[1] = domain, array[2] = www. */
-
-char **
-hostname_to_dn_list (char *hostname, char *zone, unsigned int flags)
-{
- char *tmp;
- static char *dn_buffer[64];
- int i = 0;
- char *zname;
- char *hnamebuff;
-
- zname = strdup (hostname);
- if (zname == NULL)
- fatal("strdup");
-
- if (flags == DNS_OBJECT)
- {
-
- if (strlen (zname) != strlen (zone))
- {
- tmp = &zname[strlen (zname) - strlen (zone)];
- *--tmp = '\0';
- hnamebuff = strdup (zname);
- if (hnamebuff == NULL)
- fatal("strdup");
- zname = ++tmp;
- }
- else
- hnamebuff = "@";
- }
- else
- {
- zname = zone;
- hnamebuff = NULL;
- }
-
- for (tmp = strrchr (zname, '.'); tmp != (char *) 0;
- tmp = strrchr (zname, '.'))
- {
- *tmp++ = '\0';
- dn_buffer[i++] = tmp;
- }
- dn_buffer[i++] = zname;
- dn_buffer[i++] = hnamebuff;
- dn_buffer[i] = NULL;
-
- return dn_buffer;
-}
-
-
-/* build an sdb compatible LDAP DN from a "dc_list" (char **).
- * will append dNSTTL information to each RR Record, with the
- * exception of "@"/SOA. */
-
-char *
-build_dn_from_dc_list (char **dc_list, unsigned int ttl, int flag)
-{
- int size;
- int x;
- static char dn[1024];
- char tmp[128];
-
- bzero (tmp, sizeof (tmp));
- bzero (dn, sizeof (dn));
- size = get_attr_list_size (dc_list);
- for (x = size - 2; x > 0; x--)
- {
- if (flag == WI_SPEC)
- {
- if (x == (size - 2) && (strncmp (dc_list[x], "@", 1) == 0) && (ttl))
- sprintf (tmp, "relativeDomainName=%s + dNSTTL=%d,", dc_list[x], ttl);
- else if (x == (size - 2))
- sprintf(tmp, "relativeDomainName=%s,",dc_list[x]);
- else
- sprintf(tmp,"dc=%s,", dc_list[x]);
- }
- else
- {
- sprintf(tmp, "dc=%s,", dc_list[x]);
- }
-
-
- strlcat (dn, tmp, sizeof (dn));
- }
-
- sprintf (tmp, "dc=%s", dc_list[0]);
- strlcat (dn, tmp, sizeof (dn));
-
- fflush(NULL);
- return dn;
-}
-
-
-/* Initialize LDAP Conn */
-void
-init_ldap_conn ()
-{
- int result;
- conn = ldap_open (ldapsystem, LDAP_PORT);
- if (conn == NULL)
- {
- fprintf (stderr, "Error opening Ldap connection: %s\n",
- strerror (errno));
- exit (-1);
- }
-
- result = ldap_simple_bind_s (conn, binddn, bindpw);
- ldap_result_check ("ldap_simple_bind_s", "LDAP Bind", result);
-}
-
-/* Like isc_result_check, only for LDAP */
-void
-ldap_result_check (char *msg, char *dn, int err)
-{
- if ((err != LDAP_SUCCESS) && (err != LDAP_ALREADY_EXISTS))
- {
- fprintf(stderr, "Error while adding %s (%s):\n",
- dn, msg);
- ldap_perror (conn, dn);
- ldap_unbind_s (conn);
- exit (-1);
- }
-}
-
-
-
-/* For running the ldap_info run queue. */
-void
-add_ldap_values (ldap_info * ldinfo)
-{
- int result;
- char dnbuffer[1024];
-
-
- if (ldapbase != NULL)
- sprintf (dnbuffer, "%s,%s", ldinfo->dn, ldapbase);
- else
- sprintf (dnbuffer, "%s", ldinfo->dn);
-
- result = ldap_add_s (conn, dnbuffer, ldinfo->attrs);
- ldap_result_check ("ldap_add_s", dnbuffer, result);
-}
-
-
-
-
-/* name says it all */
-void
-usage ()
-{
- fprintf (stderr,
- "zone2ldap -D [BIND DN] -w [BIND PASSWORD] -b [BASE DN] -z [ZONE] -f [ZONE FILE] -h [LDAP HOST] "
- "[-c Create LDAP Base structure][-d Debug Output (lots !)] \n ");}
diff --git a/contrib/sdb/pgsql/pgsqldb.c b/contrib/sdb/pgsql/pgsqldb.c
deleted file mode 100644
index 726b0a39..00000000
--- a/contrib/sdb/pgsql/pgsqldb.c
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * Copyright (C) 2000, 2001, 2004, 2007, 2011, 2014, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-/* $Id: pgsqldb.c,v 1.17 2011/10/11 23:46:45 tbox Exp $ */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <pgsql/libpq-fe.h>
-
-#include <isc/mem.h>
-#include <isc/print.h>
-#include <isc/result.h>
-#include <isc/util.h>
-
-#include <dns/sdb.h>
-#include <dns/result.h>
-
-#include <named/globals.h>
-
-#include "pgsqldb.h"
-
-/*
- * A simple database driver that interfaces to a PostgreSQL database. This
- * is not complete, and not designed for general use. It opens one
- * connection to the database per zone, which is inefficient. It also may
- * not handle quoting correctly.
- *
- * The table must contain the fields "name", "rdtype", and "rdata", and
- * is expected to contain a properly constructed zone. The program "zonetodb"
- * creates such a table.
- */
-
-static dns_sdbimplementation_t *pgsqldb = NULL;
-
-struct dbinfo {
- PGconn *conn;
- char *database;
- char *table;
- char *host;
- char *user;
- char *passwd;
-};
-
-static void
-pgsqldb_destroy(const char *zone, void *driverdata, void **dbdata);
-
-/*
- * Canonicalize a string before writing it to the database.
- * "dest" must be an array of at least size 2*strlen(source) + 1.
- */
-static void
-quotestring(const char *source, char *dest) {
- while (*source != 0) {
- if (*source == '\'')
- *dest++ = '\'';
- /* SQL doesn't treat \ as special, but PostgreSQL does */
- else if (*source == '\\')
- *dest++ = '\\';
- *dest++ = *source++;
- }
- *dest++ = 0;
-}
-
-/*
- * Connect to the database.
- */
-static isc_result_t
-db_connect(struct dbinfo *dbi) {
- dbi->conn = PQsetdbLogin(dbi->host, NULL, NULL, NULL, dbi->database,
- dbi->user, dbi->passwd);
-
- if (PQstatus(dbi->conn) == CONNECTION_OK)
- return (ISC_R_SUCCESS);
- else
- return (ISC_R_FAILURE);
-}
-
-/*
- * Check to see if the connection is still valid. If not, attempt to
- * reconnect.
- */
-static isc_result_t
-maybe_reconnect(struct dbinfo *dbi) {
- if (PQstatus(dbi->conn) == CONNECTION_OK)
- return (ISC_R_SUCCESS);
-
- return (db_connect(dbi));
-}
-
-/*
- * This database operates on absolute names.
- *
- * Queries are converted into SQL queries and issued synchronously. Errors
- * are handled really badly.
- */
-#ifdef DNS_CLIENTINFO_VERSION
-static isc_result_t
-pgsqldb_lookup(const char *zone, const char *name, void *dbdata,
- dns_sdblookup_t *lookup, dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-#else
-static isc_result_t
-pgsqldb_lookup(const char *zone, const char *name, void *dbdata,
- dns_sdblookup_t *lookup)
-#endif /* DNS_CLIENTINFO_VERSION */
-{
- isc_result_t result;
- struct dbinfo *dbi = dbdata;
- PGresult *res;
- char str[1500];
- char *canonname;
- int i;
-
- UNUSED(zone);
-#ifdef DNS_CLIENTINFO_VERSION
- UNUSED(methods);
- UNUSED(clientinfo);
-#endif /* DNS_CLIENTINFO_VERSION */
-
- canonname = isc_mem_get(ns_g_mctx, strlen(name) * 2 + 1);
- if (canonname == NULL)
- return (ISC_R_NOMEMORY);
- quotestring(name, canonname);
- snprintf(str, sizeof(str),
- "SELECT TTL,RDTYPE,RDATA FROM \"%s\" WHERE "
- "lower(NAME) = lower('%s')", dbi->table, canonname);
- isc_mem_put(ns_g_mctx, canonname, strlen(name) * 2 + 1);
-
- result = maybe_reconnect(dbi);
- if (result != ISC_R_SUCCESS)
- return (result);
-
- res = PQexec(dbi->conn, str);
- if (!res || PQresultStatus(res) != PGRES_TUPLES_OK) {
- PQclear(res);
- return (ISC_R_FAILURE);
- }
- if (PQntuples(res) == 0) {
- PQclear(res);
- return (ISC_R_NOTFOUND);
- }
-
- for (i = 0; i < PQntuples(res); i++) {
- char *ttlstr = PQgetvalue(res, i, 0);
- char *type = PQgetvalue(res, i, 1);
- char *data = PQgetvalue(res, i, 2);
- dns_ttl_t ttl;
- char *endp;
- ttl = strtol(ttlstr, &endp, 10);
- if (*endp != '\0') {
- PQclear(res);
- return (DNS_R_BADTTL);
- }
- result = dns_sdb_putrr(lookup, type, ttl, data);
- if (result != ISC_R_SUCCESS) {
- PQclear(res);
- return (ISC_R_FAILURE);
- }
- }
-
- PQclear(res);
- return (ISC_R_SUCCESS);
-}
-
-/*
- * Issue an SQL query to return all nodes in the database and fill the
- * allnodes structure.
- */
-static isc_result_t
-pgsqldb_allnodes(const char *zone, void *dbdata, dns_sdballnodes_t *allnodes) {
- struct dbinfo *dbi = dbdata;
- PGresult *res;
- isc_result_t result;
- char str[1500];
- int i;
-
- UNUSED(zone);
-
- snprintf(str, sizeof(str),
- "SELECT TTL,NAME,RDTYPE,RDATA FROM \"%s\" ORDER BY NAME",
- dbi->table);
-
- result = maybe_reconnect(dbi);
- if (result != ISC_R_SUCCESS)
- return (result);
-
- res = PQexec(dbi->conn, str);
- if (!res || PQresultStatus(res) != PGRES_TUPLES_OK ) {
- PQclear(res);
- return (ISC_R_FAILURE);
- }
- if (PQntuples(res) == 0) {
- PQclear(res);
- return (ISC_R_NOTFOUND);
- }
-
- for (i = 0; i < PQntuples(res); i++) {
- char *ttlstr = PQgetvalue(res, i, 0);
- char *name = PQgetvalue(res, i, 1);
- char *type = PQgetvalue(res, i, 2);
- char *data = PQgetvalue(res, i, 3);
- dns_ttl_t ttl;
- char *endp;
- ttl = strtol(ttlstr, &endp, 10);
- if (*endp != '\0') {
- PQclear(res);
- return (DNS_R_BADTTL);
- }
- result = dns_sdb_putnamedrr(allnodes, name, type, ttl, data);
- if (result != ISC_R_SUCCESS) {
- PQclear(res);
- return (ISC_R_FAILURE);
- }
- }
-
- PQclear(res);
- return (ISC_R_SUCCESS);
-}
-
-/*
- * Create a connection to the database and save any necessary information
- * in dbdata.
- *
- * argv[0] is the name of the database
- * argv[1] is the name of the table
- * argv[2] (if present) is the name of the host to connect to
- * argv[3] (if present) is the name of the user to connect as
- * argv[4] (if present) is the name of the password to connect with
- */
-static isc_result_t
-pgsqldb_create(const char *zone, int argc, char **argv,
- void *driverdata, void **dbdata)
-{
- struct dbinfo *dbi;
- isc_result_t result;
-
- UNUSED(zone);
- UNUSED(driverdata);
-
- if (argc < 2)
- return (ISC_R_FAILURE);
-
- dbi = isc_mem_get(ns_g_mctx, sizeof(struct dbinfo));
- if (dbi == NULL)
- return (ISC_R_NOMEMORY);
- dbi->conn = NULL;
- dbi->database = NULL;
- dbi->table = NULL;
- dbi->host = NULL;
- dbi->user = NULL;
- dbi->passwd = NULL;
-
-#define STRDUP_OR_FAIL(target, source) \
- do { \
- target = isc_mem_strdup(ns_g_mctx, source); \
- if (target == NULL) { \
- result = ISC_R_NOMEMORY; \
- goto cleanup; \
- } \
- } while (0);
-
- STRDUP_OR_FAIL(dbi->database, argv[0]);
- STRDUP_OR_FAIL(dbi->table, argv[1]);
- if (argc > 2)
- STRDUP_OR_FAIL(dbi->host, argv[2]);
- if (argc > 3)
- STRDUP_OR_FAIL(dbi->user, argv[3]);
- if (argc > 4)
- STRDUP_OR_FAIL(dbi->passwd, argv[4]);
-
- result = db_connect(dbi);
- if (result != ISC_R_SUCCESS)
- goto cleanup;
-
- *dbdata = dbi;
- return (ISC_R_SUCCESS);
-
- cleanup:
- pgsqldb_destroy(zone, driverdata, (void **)&dbi);
- return (result);
-}
-
-/*
- * Close the connection to the database.
- */
-static void
-pgsqldb_destroy(const char *zone, void *driverdata, void **dbdata) {
- struct dbinfo *dbi = *dbdata;
-
- UNUSED(zone);
- UNUSED(driverdata);
-
- if (dbi->conn != NULL)
- PQfinish(dbi->conn);
- if (dbi->database != NULL)
- isc_mem_free(ns_g_mctx, dbi->database);
- if (dbi->table != NULL)
- isc_mem_free(ns_g_mctx, dbi->table);
- if (dbi->host != NULL)
- isc_mem_free(ns_g_mctx, dbi->host);
- if (dbi->user != NULL)
- isc_mem_free(ns_g_mctx, dbi->user);
- if (dbi->passwd != NULL)
- isc_mem_free(ns_g_mctx, dbi->passwd);
- if (dbi->database != NULL)
- isc_mem_free(ns_g_mctx, dbi->database);
- isc_mem_put(ns_g_mctx, dbi, sizeof(struct dbinfo));
-}
-
-/*
- * Since the SQL database corresponds to a zone, the authority data should
- * be returned by the lookup() function. Therefore the authority() function
- * is NULL.
- */
-static dns_sdbmethods_t pgsqldb_methods = {
- pgsqldb_lookup,
- NULL, /* authority */
- pgsqldb_allnodes,
- pgsqldb_create,
- pgsqldb_destroy,
- NULL /* lookup2 */
-};
-
-/*
- * Wrapper around dns_sdb_register().
- */
-isc_result_t
-pgsqldb_init(void) {
- unsigned int flags;
- flags = 0;
- return (dns_sdb_register("pgsql", &pgsqldb_methods, NULL, flags,
- ns_g_mctx, &pgsqldb));
-}
-
-/*
- * Wrapper around dns_sdb_unregister().
- */
-void
-pgsqldb_clear(void) {
- if (pgsqldb != NULL)
- dns_sdb_unregister(&pgsqldb);
-}
diff --git a/contrib/sdb/pgsql/pgsqldb.h b/contrib/sdb/pgsql/pgsqldb.h
deleted file mode 100644
index f74c8abb..00000000
--- a/contrib/sdb/pgsql/pgsqldb.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright (C) 2000, 2001, 2004, 2007, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-/* $Id: pgsqldb.h,v 1.5 2007/06/19 23:47:08 tbox Exp $ */
-
-#include <isc/types.h>
-
-isc_result_t pgsqldb_init(void);
-
-void pgsqldb_clear(void);
-
diff --git a/contrib/sdb/pgsql/zonetodb.c b/contrib/sdb/pgsql/zonetodb.c
deleted file mode 100644
index 5b9e236b..00000000
--- a/contrib/sdb/pgsql/zonetodb.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * Copyright (C) 2000-2002, 2004, 2005, 2007-2009, 2014, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-/* $Id: zonetodb.c,v 1.23 2009/09/02 23:48:01 tbox Exp $ */
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <isc/buffer.h>
-#include <isc/entropy.h>
-#include <isc/hash.h>
-#include <isc/mem.h>
-#include <isc/print.h>
-#include <isc/result.h>
-
-#include <dns/db.h>
-#include <dns/dbiterator.h>
-#include <dns/fixedname.h>
-#include <dns/name.h>
-#include <dns/rdata.h>
-#include <dns/rdataset.h>
-#include <dns/rdatasetiter.h>
-#include <dns/rdatatype.h>
-#include <dns/result.h>
-
-#include <pgsql/libpq-fe.h>
-
-/*
- * Generate a PostgreSQL table from a zone.
- *
- * This is compiled this with something like the following (assuming bind9 has
- * been installed):
- *
- * gcc -g `isc-config.sh --cflags isc dns` -c zonetodb.c
- * gcc -g -o zonetodb zonetodb.o `isc-config.sh --libs isc dns` -lpq
- */
-
-PGconn *conn = NULL;
-char *dbname, *dbtable;
-char str[10240];
-
-void
-closeandexit(int status) {
- if (conn != NULL)
- PQfinish(conn);
- exit(status);
-}
-
-void
-check_result(isc_result_t result, const char *message) {
- if (result != ISC_R_SUCCESS) {
- fprintf(stderr, "%s: %s\n", message,
- isc_result_totext(result));
- closeandexit(1);
- }
-}
-
-/*
- * Canonicalize a string before writing it to the database.
- * "dest" must be an array of at least size 2*strlen(source) + 1.
- */
-static void
-quotestring(const unsigned char *source, unsigned char *dest) {
- while (*source != 0) {
- if (*source == '\'')
- *dest++ = '\'';
- else if (*source == '\\')
- *dest++ = '\\';
- *dest++ = *source++;
- }
- *dest++ = 0;
-}
-
-void
-addrdata(dns_name_t *name, dns_ttl_t ttl, dns_rdata_t *rdata) {
- unsigned char namearray[DNS_NAME_MAXTEXT + 1];
- unsigned char canonnamearray[2 * DNS_NAME_MAXTEXT + 1];
- unsigned char typearray[20];
- unsigned char canontypearray[40];
- unsigned char dataarray[2048];
- unsigned char canondataarray[4096];
- isc_buffer_t b;
- isc_result_t result;
- PGresult *res;
-
- isc_buffer_init(&b, namearray, sizeof(namearray) - 1);
- result = dns_name_totext(name, ISC_TRUE, &b);
- check_result(result, "dns_name_totext");
- namearray[isc_buffer_usedlength(&b)] = 0;
- quotestring((const unsigned char *)namearray, canonnamearray);
-
- isc_buffer_init(&b, typearray, sizeof(typearray) - 1);
- result = dns_rdatatype_totext(rdata->type, &b);
- check_result(result, "dns_rdatatype_totext");
- typearray[isc_buffer_usedlength(&b)] = 0;
- quotestring((const unsigned char *)typearray, canontypearray);
-
- isc_buffer_init(&b, dataarray, sizeof(dataarray) - 1);
- result = dns_rdata_totext(rdata, NULL, &b);
- check_result(result, "dns_rdata_totext");
- dataarray[isc_buffer_usedlength(&b)] = 0;
- quotestring((const unsigned char *)dataarray, canondataarray);
-
- snprintf(str, sizeof(str),
- "INSERT INTO %s (NAME, TTL, RDTYPE, RDATA)"
- " VALUES ('%s', %d, '%s', '%s')",
- dbtable, canonnamearray, ttl, canontypearray, canondataarray);
- printf("%s\n", str);
- res = PQexec(conn, str);
- if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) {
- fprintf(stderr, "INSERT INTO command failed: %s\n",
- PQresultErrorMessage(res));
- PQclear(res);
- closeandexit(1);
- }
- PQclear(res);
-}
-
-int
-main(int argc, char **argv) {
- char *porigin, *zonefile;
- dns_fixedname_t forigin, fname;
- dns_name_t *origin, *name;
- dns_db_t *db = NULL;
- dns_dbiterator_t *dbiter;
- dns_dbnode_t *node;
- dns_rdatasetiter_t *rdsiter;
- dns_rdataset_t rdataset;
- dns_rdata_t rdata = DNS_RDATA_INIT;
- isc_mem_t *mctx = NULL;
- isc_entropy_t *ectx = NULL;
- isc_buffer_t b;
- isc_result_t result;
- PGresult *res;
-
- if (argc != 5) {
- printf("usage: %s origin file dbname dbtable\n", argv[0]);
- printf("Note that dbname must be an existing database.\n");
- exit(1);
- }
-
- porigin = argv[1];
- zonefile = argv[2];
- dbname = argv[3];
- dbtable = argv[4];
-
- dns_result_register();
-
- mctx = NULL;
- result = isc_mem_create(0, 0, &mctx);
- check_result(result, "isc_mem_create");
-
- result = isc_entropy_create(mctx, &ectx);
- check_result(result, "isc_entropy_create");
-
- result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
- check_result(result, "isc_hash_create");
-
- isc_buffer_init(&b, porigin, strlen(porigin));
- isc_buffer_add(&b, strlen(porigin));
- dns_fixedname_init(&forigin);
- origin = dns_fixedname_name(&forigin);
- result = dns_name_fromtext(origin, &b, dns_rootname, 0, NULL);
- check_result(result, "dns_name_fromtext");
-
- db = NULL;
- result = dns_db_create(mctx, "rbt", origin, dns_dbtype_zone,
- dns_rdataclass_in, 0, NULL, &db);
- check_result(result, "dns_db_create");
-
- result = dns_db_load(db, zonefile);
- if (result == DNS_R_SEENINCLUDE)
- result = ISC_R_SUCCESS;
- check_result(result, "dns_db_load");
-
- printf("Connecting to '%s'\n", dbname);
- conn = PQsetdb(NULL, NULL, NULL, NULL, dbname);
- if (PQstatus(conn) == CONNECTION_BAD) {
- fprintf(stderr, "Connection to database '%s' failed: %s\n",
- dbname, PQerrorMessage(conn));
- closeandexit(1);
- }
-
- snprintf(str, sizeof(str),
- "DROP TABLE %s", dbtable);
- printf("%s\n", str);
- res = PQexec(conn, str);
- if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
- fprintf(stderr, "DROP TABLE command failed: %s\n",
- PQresultErrorMessage(res));
- PQclear(res);
-
- snprintf(str, sizeof(str), "BEGIN");
- printf("%s\n", str);
- res = PQexec(conn, str);
- if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) {
- fprintf(stderr, "BEGIN command failed: %s\n",
- PQresultErrorMessage(res));
- PQclear(res);
- closeandexit(1);
- }
- PQclear(res);
-
- snprintf(str, sizeof(str),
- "CREATE TABLE %s "
- "(NAME TEXT, TTL INTEGER, RDTYPE TEXT, RDATA TEXT)",
- dbtable);
- printf("%s\n", str);
- res = PQexec(conn, str);
- if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) {
- fprintf(stderr, "CREATE TABLE command failed: %s\n",
- PQresultErrorMessage(res));
- PQclear(res);
- closeandexit(1);
- }
- PQclear(res);
-
- dbiter = NULL;
- result = dns_db_createiterator(db, 0, &dbiter);
- check_result(result, "dns_db_createiterator()");
-
- result = dns_dbiterator_first(dbiter);
- check_result(result, "dns_dbiterator_first");
-
- dns_fixedname_init(&fname);
- name = dns_fixedname_name(&fname);
- dns_rdataset_init(&rdataset);
- dns_rdata_init(&rdata);
-
- while (result == ISC_R_SUCCESS) {
- node = NULL;
- result = dns_dbiterator_current(dbiter, &node, name);
- if (result == ISC_R_NOMORE)
- break;
- check_result(result, "dns_dbiterator_current");
-
- rdsiter = NULL;
- result = dns_db_allrdatasets(db, node, NULL, 0, &rdsiter);
- check_result(result, "dns_db_allrdatasets");
-
- result = dns_rdatasetiter_first(rdsiter);
-
- while (result == ISC_R_SUCCESS) {
- dns_rdatasetiter_current(rdsiter, &rdataset);
- result = dns_rdataset_first(&rdataset);
- check_result(result, "dns_rdataset_first");
- while (result == ISC_R_SUCCESS) {
- dns_rdataset_current(&rdataset, &rdata);
- addrdata(name, rdataset.ttl, &rdata);
- dns_rdata_reset(&rdata);
- result = dns_rdataset_next(&rdataset);
- }
- dns_rdataset_disassociate(&rdataset);
- result = dns_rdatasetiter_next(rdsiter);
- }
- dns_rdatasetiter_destroy(&rdsiter);
- dns_db_detachnode(db, &node);
- result = dns_dbiterator_next(dbiter);
- }
-
- snprintf(str, sizeof(str), "COMMIT TRANSACTION");
- printf("%s\n", str);
- res = PQexec(conn, str);
- if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) {
- fprintf(stderr, "COMMIT command failed: %s\n",
- PQresultErrorMessage(res));
- PQclear(res);
- closeandexit(1);
- }
- PQclear(res);
- dns_dbiterator_destroy(&dbiter);
- dns_db_detach(&db);
- isc_hash_destroy();
- isc_entropy_detach(&ectx);
- isc_mem_destroy(&mctx);
- closeandexit(0);
- exit(0);
-}
diff --git a/contrib/sdb/sqlite/README.sdb_sqlite b/contrib/sdb/sqlite/README.sdb_sqlite
deleted file mode 100644
index 36128e19..00000000
--- a/contrib/sdb/sqlite/README.sdb_sqlite
+++ /dev/null
@@ -1,67 +0,0 @@
- SQLite BIND SDB driver
-
-The SQLite BIND SDB "driver" is intended as an alternative both to the
-pgsqldb and dirdb drivers, for situations that would like the management
-simplicity and convenience of single filesystem files, with the additional
-capability of SQL databases. It is also intended as an alternative to
-the standard dynamic DNS update capability in bind, which effectively
-requires use of DNSSEC keys for authorization and is limited to 'nsupdate'
-for updates. An sqlite database, by contrast, uses and requires only
-normal filesystem permissions, and may be updated however a typical SQLite
-database might be updated, e.g., via a web service with an SQLite backend.
-
-This driver is not considered suitable for very high volume public
-nameserver use, while likely useful for smaller private nameserver
-applications, whether or not in a production environment. It should
-generally be suitable wherever SQLite is preferable over larger database
-engines, and not suitable where SQLite is not preferable.
-
-Usage:
-
-o Use the named_sdb process ( put ENABLE_SDB=yes in /etc/sysconfig/named )
-
-o Edit your named.conf to contain a database zone, eg.:
-
-zone "mydomain.net." IN {
- type master;
- database "sqlite /etc/named.d/mydomain.db mydomain";
- # ^- DB file ^-Table
-};
-
-o Create the database zone table
- The table must contain the columns "name", "rdtype", and "rdata", and
- is expected to contain a properly constructed zone. The program
- "zone2sqlite" creates such a table.
-
- zone2sqlite usage:
-
- zone2sqlite origin zonefile dbfile dbtable
-
- where
- origin : zone origin, eg "mydomain.net."
- zonefile : master zone database file, eg. mydomain.net.zone
- dbfile : name of SQLite database file
- dbtable : name of table in database
-
----
-# mydomain.net.zone:
-$TTL 1H
-@ SOA localhost. root.localhost. ( 1
- 3H
- 1H
- 1W
- 1H )
- NS localhost.
-host1 A 192.168.2.1
-host2 A 192.168.2.2
-host3 A 192.168.2.3
-host4 A 192.168.2.4
-host5 A 192.168.2.5
-host6 A 192.168.2.6
-host7 A 192.168.2.7
----
-
-# zone2sqlite mydomain.net. mydomain.net.zone mydomain.net.db mydomain
-
-will create/update the 'mydomain' table in database file 'mydomain.net.db'.
-
diff --git a/contrib/sdb/sqlite/sqlitedb.c b/contrib/sdb/sqlite/sqlitedb.c
deleted file mode 100644
index fe21f33b..00000000
--- a/contrib/sdb/sqlite/sqlitedb.c
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- * Copyright (C) 2007, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-/* $Id: sqlitedb.c,v 1.2 2011/10/11 00:09:02 each Exp $ */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include <sqlite3.h>
-
-#include <isc/mem.h>
-#include <isc/print.h>
-#include <isc/result.h>
-#include <isc/util.h>
-
-#include <dns/sdb.h>
-#include <dns/result.h>
-
-#include <named/globals.h>
-
-#include "sqlitedb.h"
-
-/*
- * A simple database driver that interfaces to a SQLite database.
- *
- * The table must contain the fields "name", "rdtype", and "rdata", and
- * is expected to contain a properly constructed zone. The program "zonetodb"
- * creates such a table.
- */
-
-static dns_sdbimplementation_t *sqlitedb = NULL;
-
-typedef struct _dbinfo {
- sqlite3 *db;
- char *filename;
- char *table;
-} dbinfo_t;
-
-
-static isc_result_t
-db_connect(dbinfo_t *dbi)
-{
- if (sqlite3_open(dbi->filename, &dbi->db) == SQLITE_OK) {
- return (ISC_R_SUCCESS);
- } else {
- /* a connection is returned even if the open fails */
- sqlite3_close(dbi->db);
- dbi->db = NULL;
- return (ISC_R_FAILURE);
- }
-}
-
-
-typedef struct _lookup_parm_t {
- int i;
- dns_sdblookup_t *lookup;
- isc_result_t result;
-} lookup_parm_t;
-
-
-static int
-sqlitedb_lookup_cb(void *p, int cc, char **cv, char **cn)
-{
- lookup_parm_t *parm = p;
- dns_ttl_t ttl;
- char *endp;
-
- /* FIXME - check these(num/names); I'm assuming a mapping for now */
- char *ttlstr = cv[0];
- char *type = cv[1];
- char *data = cv[2];
-
- UNUSED(cc);
- UNUSED(cn);
-
- ttl = strtol(ttlstr, &endp, 10);
- if (*endp) {
- parm->result = DNS_R_BADTTL;
- return 1;
- }
-
- parm->result = dns_sdb_putrr(parm->lookup, type, ttl, data);
-
- if (parm->result != ISC_R_SUCCESS)
- return 1;
-
- (parm->i)++;
-
- return 0;
-}
-
-
-#ifdef DNS_CLIENTINFO_VERSION
-static isc_result_t
-sqlitedb_lookup(const char *zone, const char *name, void *dbdata,
- dns_sdblookup_t *lookup, dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-#else
-static isc_result_t
-sqlitedb_lookup(const char *zone, const char *name, void *dbdata,
- dns_sdblookup_t *lookup)
-#endif /* DNS_CLIENTINFO_VERSION */
-/*
- * synchronous absolute name lookup
- */
-{
- dbinfo_t *dbi = (dbinfo_t *) dbdata;
- char *sql;
- lookup_parm_t parm = { 0, lookup, ISC_R_SUCCESS };
- char *errmsg = NULL;
- int result;
-
- UNUSED(zone);
-#ifdef DNS_CLIENTINFO_VERSION
- UNUSED(methods);
- UNUSED(clientinfo);
-#endif /* DNS_CLIENTINFO_VERSION */
-
- sql = sqlite3_mprintf(
- "SELECT TTL,RDTYPE,RDATA FROM \"%q\" WHERE "
- "lower(NAME) = lower('%q')",
- dbi->table, name);
-
- result = sqlite3_exec(dbi->db, sql,
- &sqlitedb_lookup_cb, &parm,
- &errmsg);
- sqlite3_free(sql);
-
- if (result != SQLITE_OK)
- return (ISC_R_FAILURE);
- if (parm.i == 0)
- return (ISC_R_NOTFOUND);
-
- return (ISC_R_SUCCESS);
-}
-
-
-typedef struct _allnodes_parm_t {
- int i;
- dns_sdballnodes_t *allnodes;
- isc_result_t result;
-} allnodes_parm_t;
-
-
-static int
-sqlitedb_allnodes_cb(void *p, int cc, char **cv, char **cn)
-{
- allnodes_parm_t *parm = p;
- dns_ttl_t ttl;
- char *endp;
-
- /* FIXME - check these(num/names); I'm assuming a mapping for now */
- char *ttlstr = cv[0];
- char *name = cv[1];
- char *type = cv[2];
- char *data = cv[3];
-
- UNUSED(cc);
- UNUSED(cn);
-
- ttl = strtol(ttlstr, &endp, 10);
- if (*endp) {
- parm->result = DNS_R_BADTTL;
- return 1;
- }
-
- parm->result = dns_sdb_putnamedrr(parm->allnodes, name, type, ttl, data);
-
- if (parm->result != ISC_R_SUCCESS)
- return 1;
-
- (parm->i)++;
-
- return 0;
-}
-
-
-static isc_result_t
-sqlitedb_allnodes(const char *zone,
- void *dbdata,
- dns_sdballnodes_t *allnodes)
-{
- dbinfo_t *dbi = (dbinfo_t *) dbdata;
- char *sql;
- allnodes_parm_t parm = { 0, allnodes, ISC_R_SUCCESS };
- char *errmsg = NULL;
- int result;
-
- UNUSED(zone);
-
- sql = sqlite3_mprintf(
- "SELECT TTL,NAME,RDTYPE,RDATA FROM \"%q\" ORDER BY NAME",
- dbi->table);
-
- result = sqlite3_exec(dbi->db, sql,
- &sqlitedb_allnodes_cb, &parm,
- &errmsg);
- sqlite3_free(sql);
-
- if (result != SQLITE_OK)
- return (ISC_R_FAILURE);
- if (parm.i == 0)
- return (ISC_R_NOTFOUND);
-
- return (ISC_R_SUCCESS);
-}
-
-
-static void
-sqlitedb_destroy(const char *zone, void *driverdata, void **dbdata)
-{
- dbinfo_t *dbi = *dbdata;
-
- UNUSED(zone);
- UNUSED(driverdata);
-
- if (dbi->db != NULL)
- sqlite3_close(dbi->db);
- if (dbi->table != NULL)
- isc_mem_free(ns_g_mctx, dbi->table);
- if (dbi->filename != NULL)
- isc_mem_free(ns_g_mctx, dbi->filename);
-
- isc_mem_put(ns_g_mctx, dbi, sizeof(dbinfo_t));
-}
-
-
-#define STRDUP_OR_FAIL(target, source) \
- do { \
- target = isc_mem_strdup(ns_g_mctx, source); \
- if (target == NULL) { \
- result = ISC_R_NOMEMORY; \
- goto cleanup; \
- } \
- } while (0);
-
-/*
- * Create a connection to the database and save any necessary information
- * in dbdata.
- *
- * argv[0] is the name of the database file
- * argv[1] is the name of the table
- */
-static isc_result_t
-sqlitedb_create(const char *zone,
- int argc, char **argv,
- void *driverdata, void **dbdata)
-{
- dbinfo_t *dbi;
- isc_result_t result;
-
- UNUSED(zone);
- UNUSED(driverdata);
-
- if (argc < 2)
- return (ISC_R_FAILURE);
-
- dbi = isc_mem_get(ns_g_mctx, sizeof(dbinfo_t));
- if (dbi == NULL)
- return (ISC_R_NOMEMORY);
- dbi->db = NULL;
- dbi->filename = NULL;
- dbi->table = NULL;
-
- STRDUP_OR_FAIL(dbi->filename, argv[0]);
- STRDUP_OR_FAIL(dbi->table, argv[1]);
-
- result = db_connect(dbi);
- if (result != ISC_R_SUCCESS)
- goto cleanup;
-
- *dbdata = dbi;
- return (ISC_R_SUCCESS);
-
-cleanup:
- sqlitedb_destroy(zone, driverdata, (void **)&dbi);
- return (result);
-}
-
-
-/*
- * Since the SQL database corresponds to a zone, the authority data should
- * be returned by the lookup() function. Therefore the authority() function
- * is NULL.
- */
-static dns_sdbmethods_t sqlitedb_methods = {
- sqlitedb_lookup,
- NULL, /* authority */
- sqlitedb_allnodes,
- sqlitedb_create,
- sqlitedb_destroy,
- NULL /* lookup2 */
-};
-
-
-/*
- * Wrapper around dns_sdb_register().
- */
-isc_result_t
-sqlitedb_init(void)
-{
- unsigned int flags;
- flags = 0;
- return (dns_sdb_register("sqlite", &sqlitedb_methods, NULL, flags,
- ns_g_mctx, &sqlitedb));
-}
-
-
-/*
- * Wrapper around dns_sdb_unregister().
- */
-void
-sqlitedb_clear(void)
-{
- if (sqlitedb != NULL)
- dns_sdb_unregister(&sqlitedb);
-}
diff --git a/contrib/sdb/sqlite/sqlitedb.h b/contrib/sdb/sqlite/sqlitedb.h
deleted file mode 100644
index 713d06f6..00000000
--- a/contrib/sdb/sqlite/sqlitedb.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright (C) 2000-2002, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-/* $Id: sqlitedb.h,v 1.1 2007/03/05 05:30:22 marka Exp $ */
-
-#include <isc/types.h>
-
-isc_result_t sqlitedb_init(void);
-
-void sqlitedb_clear(void);
-
diff --git a/contrib/sdb/sqlite/zone2sqlite.c b/contrib/sdb/sqlite/zone2sqlite.c
deleted file mode 100644
index b2d09b4a..00000000
--- a/contrib/sdb/sqlite/zone2sqlite.c
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- * Copyright (C) 2007, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <isc/buffer.h>
-#include <isc/mem.h>
-#include <isc/print.h>
-#include <isc/result.h>
-
-#include <dns/db.h>
-#include <dns/dbiterator.h>
-#include <isc/entropy.h>
-#include <dns/fixedname.h>
-#include <isc/hash.h>
-#include <dns/name.h>
-#include <dns/rdata.h>
-#include <dns/rdataset.h>
-#include <dns/rdatasetiter.h>
-#include <dns/rdatatype.h>
-#include <dns/result.h>
-
-#include <sqlite3.h>
-
-#ifndef UNUSED
-#define UNUSED(x) (x) = (x)
-#endif
-
-/*
- * Generate an SQLite table from a zone.
- */
-
-typedef struct _dbinfo {
- sqlite3 *db;
- char *filename;
- char *table;
-} dbinfo_t;
-
-dbinfo_t dbi = { NULL, NULL, NULL };
-
-
-static void
-closeandexit(int status)
-{
- if (dbi.db) {
- sqlite3_close(dbi.db);
- dbi.db = NULL;
- }
- exit(status);
-}
-
-static void
-check_result(isc_result_t result, const char *message)
-{
- if (result != ISC_R_SUCCESS) {
- fprintf(stderr, "%s: %s\n", message,
- isc_result_totext(result));
- closeandexit(1);
- }
-}
-
-static isc_result_t
-db_connect(dbinfo_t *dbi)
-{
- if (sqlite3_open(dbi->filename, &dbi->db) == SQLITE_OK) {
- return (ISC_R_SUCCESS);
- } else {
- /* a connection is returned even if the open fails */
- sqlite3_close(dbi->db);
- dbi->db = NULL;
- return (ISC_R_FAILURE);
- }
-}
-
-static int
-add_rdata_cb(void *parm, int cc, char **cv, char **cn)
-{
- UNUSED(parm);
- UNUSED(cc);
- UNUSED(cv);
- UNUSED(cn);
-
- return 0;
-}
-
-
-static void
-addrdata(dns_name_t *name, dns_ttl_t ttl, dns_rdata_t *rdata)
-{
- unsigned char namearray[DNS_NAME_MAXTEXT + 1];
- unsigned char typearray[20];
- unsigned char dataarray[2048];
- isc_buffer_t b;
- isc_result_t result;
- char *sql;
- char *errmsg = NULL;
- int res;
-
- isc_buffer_init(&b, namearray, sizeof(namearray) - 1);
- result = dns_name_totext(name, ISC_TRUE, &b);
- check_result(result, "dns_name_totext");
- namearray[isc_buffer_usedlength(&b)] = 0;
-
- isc_buffer_init(&b, typearray, sizeof(typearray) - 1);
- result = dns_rdatatype_totext(rdata->type, &b);
- check_result(result, "dns_rdatatype_totext");
- typearray[isc_buffer_usedlength(&b)] = 0;
-
- isc_buffer_init(&b, dataarray, sizeof(dataarray) - 1);
- result = dns_rdata_totext(rdata, NULL, &b);
- check_result(result, "dns_rdata_totext");
- dataarray[isc_buffer_usedlength(&b)] = 0;
-
- sql = sqlite3_mprintf(
- "INSERT INTO %Q (NAME, TTL, RDTYPE, RDATA)"
- " VALUES ('%q', %d, '%q', '%q') ",
- dbi.table,
- namearray, ttl, typearray, dataarray);
- printf("%s\n", sql);
- res = sqlite3_exec(dbi.db, sql, add_rdata_cb, NULL, &errmsg);
- sqlite3_free(sql);
-
- if (res != SQLITE_OK) {
- fprintf(stderr, "INSERT failed: %s\n", errmsg);
- closeandexit(1);
- }
-}
-
-int
-main(int argc, char *argv[])
-{
- char *sql;
- int res;
- char *errmsg = NULL;
- char *porigin, *zonefile;
- dns_fixedname_t forigin, fname;
- dns_name_t *origin, *name;
- dns_db_t *db = NULL;
- dns_dbiterator_t *dbiter;
- dns_dbnode_t *node;
- dns_rdatasetiter_t *rdsiter;
- dns_rdataset_t rdataset;
- dns_rdata_t rdata = DNS_RDATA_INIT;
- isc_mem_t *mctx = NULL;
- isc_entropy_t *ectx = NULL;
- isc_buffer_t b;
- isc_result_t result;
-
- if (argc != 5) {
- printf("usage: %s <zone> <zonefile> <dbfile> <dbtable>\n", argv[0]);
- exit(1);
- }
-
- porigin = argv[1];
- zonefile = argv[2];
-
- dbi.filename = argv[3];
- dbi.table = argv[4];
-
- dns_result_register();
-
- result = isc_mem_create(0, 0, &mctx);
- check_result(result, "isc_mem_create");
- result = isc_entropy_create(mctx, &ectx);
- check_result(result, "isc_entropy_create");
- result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
- check_result(result, "isc_hash_create");
-
- isc_buffer_init(&b, porigin, strlen(porigin));
- isc_buffer_add(&b, strlen(porigin));
- dns_fixedname_init(&forigin);
- origin = dns_fixedname_name(&forigin);
- result = dns_name_fromtext(origin, &b, dns_rootname, 0, NULL);
- check_result(result, "dns_name_fromtext");
-
- db = NULL;
- result = dns_db_create(mctx, "rbt", origin, dns_dbtype_zone,
- dns_rdataclass_in, 0, NULL, &db);
- check_result(result, "dns_db_create");
-
- result = dns_db_load(db, zonefile);
- if (result == DNS_R_SEENINCLUDE)
- result = ISC_R_SUCCESS;
- check_result(result, "dns_db_load");
-
- printf("Connecting to '%s'\n", dbi.filename);
-
- if ((result = db_connect(&dbi)) != ISC_R_SUCCESS) {
- fprintf(stderr, "Connection to database '%s' failed\n",
- dbi.filename);
- closeandexit(1);
- }
-
- sql = sqlite3_mprintf("DROP TABLE %Q ", dbi.table);
- printf("%s\n", sql);
- res = sqlite3_exec(dbi.db, sql, NULL, NULL, &errmsg);
- sqlite3_free(sql);
-#if 0
- if (res != SQLITE_OK) {
- fprintf(stderr, "DROP TABLE %s failed: %s\n",
- dbi.table, errmsg);
- }
-#endif
-
-#if 0
- sql = sqlite3_mprintf(sql, "BEGIN TRANSACTION");
- printf("%s\n", sql);
- res = sqlite3_exec(dbi.db, sql, NULL, NULL, &errmsg);
- sqlite3_free(sql);
- if (res != SQLITE_OK) {
- fprintf(stderr, "BEGIN TRANSACTION failed: %s\n", errmsg);
- closeandexit(1);
- }
-#endif
-
- sql = sqlite3_mprintf(
- "CREATE TABLE %Q "
- "(NAME TEXT, TTL INTEGER, RDTYPE TEXT, RDATA TEXT) ",
- dbi.table);
- printf("%s\n", sql);
- res = sqlite3_exec(dbi.db, sql, NULL, NULL, &errmsg);
- sqlite3_free(sql);
- if (res != SQLITE_OK) {
- fprintf(stderr, "CREATE TABLE %s failed: %s\n",
- dbi.table, errmsg);
- closeandexit(1);
- }
-
- dbiter = NULL;
- result = dns_db_createiterator(db, 0, &dbiter);
- check_result(result, "dns_db_createiterator()");
-
- result = dns_dbiterator_first(dbiter);
- check_result(result, "dns_dbiterator_first");
-
- dns_fixedname_init(&fname);
- name = dns_fixedname_name(&fname);
- dns_rdataset_init(&rdataset);
- dns_rdata_init(&rdata);
-
- while (result == ISC_R_SUCCESS) {
- node = NULL;
- result = dns_dbiterator_current(dbiter, &node, name);
- if (result == ISC_R_NOMORE)
- break;
- check_result(result, "dns_dbiterator_current");
-
- rdsiter = NULL;
- result = dns_db_allrdatasets(db, node, NULL, 0, &rdsiter);
- check_result(result, "dns_db_allrdatasets");
-
- result = dns_rdatasetiter_first(rdsiter);
-
- while (result == ISC_R_SUCCESS) {
- dns_rdatasetiter_current(rdsiter, &rdataset);
- result = dns_rdataset_first(&rdataset);
- check_result(result, "dns_rdataset_first");
- while (result == ISC_R_SUCCESS) {
- dns_rdataset_current(&rdataset, &rdata);
- addrdata(name, rdataset.ttl, &rdata);
- dns_rdata_reset(&rdata);
- result = dns_rdataset_next(&rdataset);
- }
- dns_rdataset_disassociate(&rdataset);
- result = dns_rdatasetiter_next(rdsiter);
- }
- dns_rdatasetiter_destroy(&rdsiter);
- dns_db_detachnode(db, &node);
- result = dns_dbiterator_next(dbiter);
- }
-
-#if 0
- sql = sqlite3_mprintf(sql, "COMMIT TRANSACTION ");
- printf("%s\n", sql);
- res = sqlite3_exec(dbi.db, sql, NULL, NULL, &errmsg);
- sqlite3_free(sql);
- if (res != SQLITE_OK) {
- fprintf(stderr, "COMMIT TRANSACTION failed: %s\n", errmsg);
- closeandexit(1);
- }
-#endif
-
- dns_dbiterator_destroy(&dbiter);
- dns_db_detach(&db);
- isc_hash_destroy();
- isc_entropy_detach(&ectx);
- isc_mem_destroy(&mctx);
-
- closeandexit(0);
-
- exit(0);
-}
diff --git a/contrib/sdb/tcl/lookup.tcl b/contrib/sdb/tcl/lookup.tcl
deleted file mode 100644
index f3ec4fd4..00000000
--- a/contrib/sdb/tcl/lookup.tcl
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (C) 2000, 2001, 2004, 2007, 2012, 2016 Internet Systems Consortium, Inc. ("ISC")
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# $Id: lookup.tcl,v 1.10 2007/06/19 23:47:08 tbox Exp $
-
-#
-# Sample lookup procedure for tcldb
-#
-# This lookup procedure defines zones with identical SOA, NS, and MX
-# records at the apex and a single A record that varies from zone to
-# zone at the name "www".
-#
-# Something like this could be used by a web hosting company to serve
-# a number of domains without needing to create a separate master file
-# for each domain. Instead, all per-zone data (in this case, a single
-# IP address) specified in the named.conf file like this:
-#
-# zone "a.com." { type master; database "tcl 10.0.0.42"; };
-# zone "b.com." { type master; database "tcl 10.0.0.99"; };
-#
-# Since the tcldb driver doesn't support zone transfers, there should
-# be at least two identically configured master servers. In the
-# example below, they are assumed to be called ns1.isp.nil and
-# ns2.isp.nil.
-#
-
-proc lookup {zone name} {
- global dbargs
- switch -- $name {
- @ { return [list \
- {SOA 86400 "ns1.isp.nil. hostmaster.isp.nil. \
- 1 3600 1800 1814400 3600"} \
- {NS 86400 "ns1.isp.nil."} \
- {NS 86400 "ns2.isp.nil."} \
- {MX 86400 "10 mail.isp.nil."} ] }
- www { return [list [list A 3600 $dbargs($zone)] ] }
- }
- return NXDOMAIN
-}
diff --git a/contrib/sdb/tcl/tcldb.c b/contrib/sdb/tcl/tcldb.c
deleted file mode 100644
index 03456ee3..00000000
--- a/contrib/sdb/tcl/tcldb.c
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * Copyright (C) 2000, 2001, 2004, 2007, 2011, 2014, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-/* $Id: tcldb.c,v 1.12 2011/10/11 23:46:45 tbox Exp $ */
-
-/*
- * A simple database driver that calls a Tcl procedure to define
- * the contents of the DNS namespace. The procedure is loaded
- * from the file lookup.tcl; look at the comments there for
- * more information.
- */
-
-#include <config.h>
-
-#include <string.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/stat.h>
-
-#include <isc/mem.h>
-#include <isc/print.h>
-#include <isc/result.h>
-#include <isc/util.h>
-
-#include <dns/log.h>
-#include <dns/sdb.h>
-
-#include <named/globals.h>
-
-#include <tcl.h>
-
-#include <tcldb.h>
-
-#define CHECK(op) \
- do { result = (op); \
- if (result != ISC_R_SUCCESS) return (result); \
- } while (0)
-
-typedef struct tcldb_driver {
- isc_mem_t *mctx;
- Tcl_Interp *interp;
-} tcldb_driver_t;
-
-static tcldb_driver_t *the_driver = NULL;
-
-static dns_sdbimplementation_t *tcldb = NULL;
-
-static isc_result_t
-tcldb_driver_create(isc_mem_t *mctx, tcldb_driver_t **driverp) {
- int tclres;
- isc_result_t result = ISC_R_SUCCESS;
- tcldb_driver_t *driver = isc_mem_get(mctx, sizeof(tcldb_driver_t));
- if (driver == NULL)
- return (ISC_R_NOMEMORY);
- driver->mctx = mctx;
- driver->interp = Tcl_CreateInterp();
-
- tclres = Tcl_EvalFile(driver->interp, (char *) "lookup.tcl");
- if (tclres != TCL_OK) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL,
- DNS_LOGMODULE_SDB, ISC_LOG_ERROR,
- "initializing tcldb: "
- "loading 'lookup.tcl' failed: %s",
- driver->interp->result);
- result = ISC_R_FAILURE;
- goto cleanup;
- }
- *driverp = driver;
- return (ISC_R_SUCCESS);
-
- cleanup:
- isc_mem_put(mctx, driver, sizeof(tcldb_driver_t));
- return (result);
-
-}
-
-static void
-tcldb_driver_destroy(tcldb_driver_t **driverp) {
- tcldb_driver_t *driver = *driverp;
- Tcl_DeleteInterp(driver->interp);
- isc_mem_put(driver->mctx, driver, sizeof(tcldb_driver_t));
-}
-
-/*
- * Perform a lookup, by invoking the Tcl procedure "lookup".
- */
-#ifdef DNS_CLIENTINFO_VERSION
-static isc_result_t
-tcldb_lookup(const char *zone, const char *name, void *dbdata,
- dns_sdblookup_t *lookup, dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-#else
-static isc_result_t
-tcldb_lookup(const char *zone, const char *name, void *dbdata,
- dns_sdblookup_t *lookup)
-#endif /* DNS_CLIENTINFO_VERSION */
-{
- isc_result_t result = ISC_R_SUCCESS;
- int tclres;
- int rrc; /* RR count */
- char **rrv; /* RR vector */
- int i;
- char *cmdv[3];
- char *cmd;
-
-#ifdef DNS_CLIENTINFO_VERSION
- UNUSED(methods);
- UNUSED(clientinfo);
-#endif /* DNS_CLIENTINFO_VERSION */
-
- tcldb_driver_t *driver = (tcldb_driver_t *) dbdata;
-
- cmdv[0] = "lookup";
- cmdv[1] = zone;
- cmdv[2] = name;
- cmd = Tcl_Merge(3, cmdv);
- tclres = Tcl_Eval(driver->interp, cmd);
- Tcl_Free(cmd);
-
- if (tclres != TCL_OK) {
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL,
- DNS_LOGMODULE_SDB, ISC_LOG_ERROR,
- "zone '%s': tcl lookup function failed: %s",
- zone, driver->interp->result);
- return (ISC_R_FAILURE);
- }
-
- if (strcmp(driver->interp->result, "NXDOMAIN") == 0) {
- result = ISC_R_NOTFOUND;
- goto fail;
- }
-
- tclres = Tcl_SplitList(driver->interp, driver->interp->result,
- &rrc, &rrv);
- if (tclres != TCL_OK)
- goto malformed;
-
- for (i = 0; i < rrc; i++) {
- isc_result_t tmpres;
- int fieldc; /* Field count */
- char **fieldv; /* Field vector */
- tclres = Tcl_SplitList(driver->interp, rrv[i],
- &fieldc, &fieldv);
- if (tclres != TCL_OK) {
- tmpres = ISC_R_FAILURE;
- goto failrr;
- }
- if (fieldc != 3)
- goto malformed;
- tmpres = dns_sdb_putrr(lookup, fieldv[0], atoi(fieldv[1]),
- fieldv[2]);
- Tcl_Free((char *) fieldv);
- failrr:
- if (tmpres != ISC_R_SUCCESS)
- result = tmpres;
- }
- Tcl_Free((char *) rrv);
- if (result == ISC_R_SUCCESS)
- return (result);
-
- malformed:
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL,
- DNS_LOGMODULE_SDB, ISC_LOG_ERROR,
- "zone '%s': "
- "malformed return value from tcl lookup function: %s",
- zone, driver->interp->result);
- result = ISC_R_FAILURE;
- fail:
- return (result);
-}
-
-/*
- * Set up per-zone state. In our case, the database arguments of the
- * zone are collected into a Tcl list and assigned to an element of
- * the global array "dbargs".
- */
-static isc_result_t
-tcldb_create(const char *zone, int argc, char **argv,
- void *driverdata, void **dbdata)
-{
- tcldb_driver_t *driver = (tcldb_driver_t *) driverdata;
-
- char *list = Tcl_Merge(argc, argv);
-
- Tcl_SetVar2(driver->interp, (char *) "dbargs", (char *) zone, list, 0);
-
- Tcl_Free(list);
-
- *dbdata = driverdata;
-
- return (ISC_R_SUCCESS);
-}
-
-/*
- * This driver does not support zone transfer, so allnodes() is NULL.
- */
-static dns_sdbmethods_t tcldb_methods = {
- tcldb_lookup,
- NULL, /* authority */
- NULL, /* allnodes */
- tcldb_create,
- NULL, /* destroy */
- NULL /* lookup2 */
-};
-
-/*
- * Initialize the tcldb driver.
- */
-isc_result_t
-tcldb_init(void) {
- isc_result_t result;
- int flags = DNS_SDBFLAG_RELATIVEOWNER | DNS_SDBFLAG_RELATIVERDATA;
-
- result = tcldb_driver_create(ns_g_mctx, &the_driver);
- if (result != ISC_R_SUCCESS)
- return (result);
-
- return (dns_sdb_register("tcl", &tcldb_methods, the_driver, flags,
- ns_g_mctx, &tcldb));
-}
-
-/*
- * Wrapper around dns_sdb_unregister().
- */
-void
-tcldb_clear(void) {
- if (tcldb != NULL)
- dns_sdb_unregister(&tcldb);
- if (the_driver != NULL)
- tcldb_driver_destroy(&the_driver);
-}
diff --git a/contrib/sdb/tcl/tcldb.h b/contrib/sdb/tcl/tcldb.h
deleted file mode 100644
index 03b81ce5..00000000
--- a/contrib/sdb/tcl/tcldb.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright (C) 2000, 2001, 2004, 2007, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-/* $Id: tcldb.h,v 1.7 2007/06/19 23:47:10 tbox Exp $ */
-
-#include <isc/types.h>
-
-isc_result_t tcldb_init(void);
-
-void tcldb_clear(void);
-
diff --git a/contrib/sdb/time/timedb.c b/contrib/sdb/time/timedb.c
deleted file mode 100644
index 0af5ee5f..00000000
--- a/contrib/sdb/time/timedb.c
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright (C) 2000, 2001, 2004, 2007, 2011, 2014, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-/* $Id: timedb.c,v 1.12 2011/10/11 23:46:45 tbox Exp $ */
-
-/*
- * A simple database driver that enables the server to return the
- * current time in a DNS record.
- */
-
-#include <config.h>
-
-#include <string.h>
-#include <stdio.h>
-#include <time.h>
-
-#include <isc/print.h>
-#include <isc/result.h>
-#include <isc/util.h>
-
-#include <dns/sdb.h>
-
-#include <named/globals.h>
-
-#include "timedb.h"
-
-static dns_sdbimplementation_t *timedb = NULL;
-
-/*
- * This database operates on relative names.
- *
- * "time" and "@" return the time in a TXT record.
- * "clock" is a CNAME to "time"
- * "current" is a DNAME to "@" (try time.current.time)
- */
-#ifdef DNS_CLIENTINFO_VERSION
-static isc_result_t
-timedb_lookup(const char *zone, const char *name, void *dbdata,
- dns_sdblookup_t *lookup, dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo)
-#else
-static isc_result_t
-timedb_lookup(const char *zone, const char *name, void *dbdata,
- dns_sdblookup_t *lookup)
-#endif /* DNS_CLIENTINFO_VERSION */
-{
- isc_result_t result;
-
- UNUSED(zone);
- UNUSED(dbdata);
-#ifdef DNS_CLIENTINFO_VERSION
- UNUSED(methods);
- UNUSED(clientinfo);
-#endif /* DNS_CLIENTINFO_VERSION */
-
- if (strcmp(name, "@") == 0 || strcmp(name, "time") == 0) {
- time_t now = time(NULL);
- char buf[100];
- int n;
-
- /*
- * Call ctime to create the string, put it in quotes, and
- * remove the trailing newline.
- */
- n = snprintf(buf, sizeof(buf), "\"%s", ctime(&now));
- if (n < 0)
- return (ISC_R_FAILURE);
- buf[n - 1] = '\"';
- result = dns_sdb_putrr(lookup, "txt", 1, buf);
- if (result != ISC_R_SUCCESS)
- return (ISC_R_FAILURE);
- } else if (strcmp(name, "clock") == 0) {
- result = dns_sdb_putrr(lookup, "cname", 1, "time");
- if (result != ISC_R_SUCCESS)
- return (ISC_R_FAILURE);
- } else if (strcmp(name, "current") == 0) {
- result = dns_sdb_putrr(lookup, "dname", 1, "@");
- if (result != ISC_R_SUCCESS)
- return (ISC_R_FAILURE);
- } else
- return (ISC_R_NOTFOUND);
-
- return (ISC_R_SUCCESS);
-}
-
-/*
- * lookup() does not return SOA or NS records, so authority() must be defined.
- */
-static isc_result_t
-timedb_authority(const char *zone, void *dbdata, dns_sdblookup_t *lookup) {
- isc_result_t result;
-
- UNUSED(zone);
- UNUSED(dbdata);
-
- result = dns_sdb_putsoa(lookup, "localhost.", "root.localhost.", 0);
- if (result != ISC_R_SUCCESS)
- return (ISC_R_FAILURE);
-
- result = dns_sdb_putrr(lookup, "ns", 86400, "ns1.localdomain.");
- if (result != ISC_R_SUCCESS)
- return (ISC_R_FAILURE);
- result = dns_sdb_putrr(lookup, "ns", 86400, "ns2.localdomain.");
- if (result != ISC_R_SUCCESS)
- return (ISC_R_FAILURE);
-
- return (ISC_R_SUCCESS);
-}
-
-/*
- * This zone does not support zone transfer, so allnodes() is NULL. There
- * is no database specific data, so create() and destroy() are NULL.
- */
-static dns_sdbmethods_t timedb_methods = {
- timedb_lookup,
- timedb_authority,
- NULL, /* allnodes */
- NULL, /* create */
- NULL, /* destroy */
- NULL /* lookup2 */
-};
-
-/*
- * Wrapper around dns_sdb_register().
- */
-isc_result_t
-timedb_init(void) {
- unsigned int flags;
- flags = DNS_SDBFLAG_RELATIVEOWNER | DNS_SDBFLAG_RELATIVERDATA;
- return (dns_sdb_register("time", &timedb_methods, NULL, flags,
- ns_g_mctx, &timedb));
-}
-
-/*
- * Wrapper around dns_sdb_unregister().
- */
-void
-timedb_clear(void) {
- if (timedb != NULL)
- dns_sdb_unregister(&timedb);
-}
diff --git a/contrib/sdb/time/timedb.h b/contrib/sdb/time/timedb.h
deleted file mode 100644
index 0068f59f..00000000
--- a/contrib/sdb/time/timedb.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright (C) 2000, 2001, 2004, 2007, 2016 Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-/* $Id: timedb.h,v 1.5 2007/06/19 23:47:13 tbox Exp $ */
-
-#include <isc/types.h>
-
-isc_result_t timedb_init(void);
-
-void timedb_clear(void);
-
diff --git a/contrib/zkt-1.1.3/CHANGELOG b/contrib/zkt-1.1.3/CHANGELOG
deleted file mode 100644
index dcf903cb..00000000
--- a/contrib/zkt-1.1.3/CHANGELOG
+++ /dev/null
@@ -1,741 +0,0 @@
-zkt 1.1.3 -- 21. Nov 2014
-
-* func New Config Parameter DependFiles added.
- Contains a (comma separated) list of files which are
- included into the ZoneFile. The timestamps of this files
- are checked additional to the timestamp of the ZoneFile.
- Based on a suggestion from Sven Strickroth
-
-* misc Makefile changed to build tar file out of git repository
-
-* misc Minimum supported BIND version is now 9.8
-
-* bug Fixed bug in BIND version parsing (9.10.1 was parsed as 910
- which is similar to 9.1.0)
- Version 9.10.1 is parsed now as 091001
-
-* misc Remove flag to request large exponent when creating keys
- (BIND always creates keys with large exponents since BIND 9.5.0)
-
-* misc Project moved to github
- Thanks to Jakob Schlyter for doing the initial stuff
-
-zkt 1.1.2 -- 05. Dec 2012
-
-* bug Fixed bug introduced by changes on inc_soa_serial()
-
-zkt 1.1.1 -- 27. Nov 2012
-
-* bug Error fixed in zkt-conf in parsing the version number
-
-* misc inc_soa_serial() now returns 0 on success
-
-* bug Fixed bug in inc_serial()
- The zone file wasn't closed on succesful change of the soa record.
- Many thanks to Frederik Soderblom for fixing this.
-
-zkt 1.1 -- 30. Jan 2012
-
-* misc Release numbering changed to three level "major.minor.revison" scheme
-
-* bug REMOVE_HOLD_TIME was set to 10 days only (Thanks to Chris Thompson)
-
-* doc Improved README file (Thanks to Jan-Piet Mens)
-
-* misc Fixed some typos in log messages
-
-* bug Fixed error in rollover.c (return code of genfirstkey() wasn't checked)
-
-* misc Default of KeySetDir changed from NULL to ".." (best for hierarchical mode)
- Default Sig Lifetime changed from 10 days to 3 weeks (21 days)
- Default ZSK lifetime changed from 3 months to 4 times the sig lifetime
- Default KSK lifetime changed from 1 year to 2 years
- Parameter checks in checkconfig() adapted.
- KSK random device changed back from /dev/urandom to BIND default
- (Be aware of some possibly long delay in key generation)
-
-* func New configure option to set the bind utility path manually (--enable-bindutil_path)
- BIND_UTIL_PATH in config_zkt.h will no longer used
- (Thanks to Mans Nilsson)
-
-* bug If nsec3 is turned on and KeyAlgo (or AddKeyAlgo) is RSHASHA1
- or DSA, genkey() uses algorithm type NSECRSASHA1 or NSEC3DSA instead.
- (Thanks to Holger Wirtz)
-
-* bug Error in printconfigdiff() fixed. (Thanks to Holger Wirtz)
-
-* func Description added to (some of the) dnssec.conf parameters
-
-* func Adding a patch from Hrant Dadivanyan to always pre-publish ZSKs
-
-* misc Config file syntax changed to parameter names without underscores.
- zkt-conf uses ZKT_VERSION string as config version
-
-* bug "make install-man" now installs all man page
-
-* bug Bug fixed in zfparse.c. zkt-conf was unable to detect an already
- included dnskey.db file if another file was included.
-
-* misc destination dnssec-zkt removed from Makefile.in
-
-* func dki_prt_managedkeys() added to dki.c
- zkt_list_managedkeys() added to zkt.c
- zkt-ls has new option -M to print out a list of managed-keys
-
-* bug Bug fixed in the config parser (zconf.c). Couldn't parse
- agorithm RSASHA512 correctly (Thanks to Michael Sinatra)
-
-zkt 1.0 -- 15. June 2010
-
-* func "/dev/urandom" check added to checkconfig()
-
-* func Config compability switch (-C) added to zkt-conf
-
-* func zkt-ls has a new switch -s to change sorting of domains from
- subdomain before parent to subdomain below the parent
-
-* func "zkt-ls -T" prints only parent trust anchor
-
-zkt 1.0rc1 -- 1. Apr 2010 (The 1.0 release was sponsored by DOMINIC(r) )
-
-* func Several config parameter are printed now in a more consistent and
- user friendly form.
- SerialFormat "Incremental" could be abbreviated as "inc" on input.
-
-* bug use of AC_ARG_ENABLE macros changed in a way that it is possible
- to use it as a "--disable-FEATURE" switch.
-
-* port no longer checking for malloc() in configue script.
- Mainly because it checks only if malloc(0) is allowed and we do
- not need this.
-
-* port --disable-color-mode added to configure script
-
-* bug Makro PRINT_AGE_OF_YEAR renamed to PRINT_AGE_WITH_YEAR in configure.ac
-
-* misc man page zkt-keyman added
-
-* misc New command zkt-keyman added as replacement for dnssec-zkt's key
- management functionality
-
-* misc man page zkt-ls added
-
-* port Check for ncurses added to Makefile.in
-
-* misc Color mode (Option -C) added to zkt-ls (experimental)
- New source file tcap.c.
-
-* misc Deprecate "single linked list" version of ZKT. The binary tree
- version is the default for years, so the VERSION string does no
- longer contain a "T". Now, if someone insist on the single link
- list version (configure --disable-tree) a "S" is added to the
- version string.
- Anyway, the code for the single link list version does no longer
- have the same functionality and will be removed in one of the later
- releases.
-
-* misc New command zkt-ls added as replacement for dnssec-zkt's key
- listing functionality
-
-* func New key algorithms RSASHA256 and RSAHSHA512 added to dki.[ch]
- and zconf.c
- New parameter NSEC3 added. Now it's possible to configure
- an NSEC3_OPTOUT zone.
-
-* bug Token parsing function gettok() fixed to recognize tokens
- with dashes ("zone-statistics" was seen as "zone").
- Thanks to Andreas Baess for finding this bug.
-
-* bug Fixed bug in (re)salting dynamic zones.
- sig_zone() and gensalt() needs parameter change for this
-
-* func New option -a added to zkt-conf
-
-* func In zconf.c CONF_TIMEINT parameter are now able to recognize
- "unset" values (which is represented internaly as 0)
-
-* func Set Max_TTL to sig lifetime for dynamic zones or if Max_TTL
- is less than 1.
- max_ttl checks in checkconfig() fixed.
-
-* func printconfigdiff() added to zconf.c and used by zkt-conf.
- Now local configs are printed as diff to site wide config.
-
-* misc man page zkt-signer.8 changed to new command syntax
-
-* func Per domain logging added. Use parameter LogDomainDir to
- enable it. For more details see file README.logging.
-
-* func distribute.sh supports new action type "distkeys" but is
- currently not used
-
-* misc LOG_FNAMETMPL changed and moved from config_zkt.h to log.h
-
-* misc Default soa serial format changed from "Incremental"
- to "Unixtime"
-
-* func dnssec-signer command renamed to zkt-signer. Man page updated.
-
-* func New command zkt-conf added as replacement for dnssec-zkt -Z
-
-* misc timeint2str() is now global (zconf.c)
-
-* func zfparse.c - a rudimentary zone file parser
- scans minimum and maximum ttl values; adds $INCLUDE dnskey.db
-
-zkt 0.99d -- Not released
-
-* func Option SIG_DnsKeyKSK for DNSKEY signing with KSK only
- added (only useful with BIND9.7)
-
-* misc For BIND 9.7 compability:
- Run dnssec-signzone in compability mode ("-C") if
- SigGenerateDS is true.
- Run dnssec-keygen in compability mode ("-C -q")
- Add option -u to dnssec-signzone if NSEC3 chaining is requested
-
-zkt 0.99c -- 1. Aug 2009
-
-* misc dnssec-signer command line option vars changed to storage
- class static.
-
-* port setenv() replaced by putenv() in misc.c
-
-* misc Install binaries in prefix/bin instead of $HOME/bin.
- Fixing some spelling errors in dnssec-signzone.8 and
- dnssec-zkt.8.
- Thanks to Mans Nilsson.
-
-* port timegm() check added to configure.ac
-
-* misc configure.ac, Makefile.in, and doc is now part of distribution
-
-* bug off by one error fixed in splitpath()
-
-* misc is_dotfile() renamed to is_dotfilename() (misc.c)
-
-* misc inc_soaserial() sourced out to soaserial.c
-
-* misc reload() functions sourced out to nscomm.c
-
-* bug Introducing parameter "KeyAlgorithm" for both ZSK and
- KSK keys instead of separate KSK and ZSK algorithms.
- New functions dki_algo() and dki_findalgo().
-
-* bug Redirect stderr message (additionally to stdout) of
- dnssec-signzone command to pipe.
- Pick up last line of output for logging.
-
-* misc "Sig_GenerateDS" is no longer a hidden parameter.
-
-* misc "make clean" now remove the binary files
- New target "distclean" added to Makefile
-
-* bug Wrong typecast in zconf.c parsing CONF_TIMEINT (Thanks to Frederick
- Soderblum and Peter Norin for the patch)
- Changed all TIMEINT parameter values to long.
-
-* bug If someone changes the zone.db file in dynamic mode, this will be treated
- the same way as an initial setup, so the zone.db file will be used as new
- input file (Thanks to Shane Wegner for this patch)
-
-* bug Option nsec3_param added to dnssec-signzone command for dynamic zones.
-
-* func New option "NamedChrootDir" added to dnssec.conf to specify the
- directory of a chrooted named. Without such an option
- "dnssec-signer -N named.conf" couldn't find the zone file directory.
-
-* misc Default ZSK lifetime set to 12 weeks instead of 3 months (30days) to
- suppress the warning message about ZSK keysize of 512 bits.
-
-zkt 0.98 -- 28. Dec 2008
-
-* misc Target "install-man" added to Makefile
- man files moved to sub directory "man"
-
-* func If a BIND version greater equal 9.6.0 is used, option -d doesn't
- initiate a resigning of a zone. It's just for key rollover.
-
-* func New pseudo algorithms for NSEC3 DNSKEYS added.
- Support of NSEC3 hashing if a BIND version greater equal 9.6.0
- is used. New parameter "SaltBits" added to the config file to
- set the salt length in bits (default is 24 which means 6 hex nibbles).
- The number of hash iterations is set to the default value of
- dnssec-signzone which depends on key size.
-
-* misc Renaming of all example zone directories so that the directory
- name does not end with a dot (Necessary for installing the
- source tree in an MS-Windows environment).
- str_tolowerdup() renamed to domain_canonicdup() and code added
- to append a dot to the domain name if it's not already there.
-
-* misc Add 'sec' (second) qualifier to debug output in kskrollover().
-
-* bug Remove a trailing '/' at the -D argument.
-
-* misc Configure script now uses the BIND_UTIL_PATH out of config_zkt.h
- if the BIND dnssec-signzone command is not found
-
-* bug A zone with only a standby key signing key (which means w/o an
- active ksk) aborts the dnssec-signer command.
- Fixed by Shane Kerr.
-
-* func Changed inc_serial() so that the SOA record parser accepts a label
- other than '@' and an optional ttl value before the class and SOA
- RR identifier (Both are case insensitive). Thanks to Shane Kerr
- for the suggestion.
-
-* bug Change of global configured key liftetime during a zone signing
- key rollover results in unnecessary additional pre-published
- zone signing keys (Thanks to Frank Behrens for the patch)
-
-* misc Sig_Random config file parameter defaults now to false
-
-* bug The man page refers the wrong licence (GPL instead of BSD)
-
-zkt 0.97 -- 5. Aug 2008
-
-* bug LG_* logging level wasn't mapped to syslog level in lg_mesg().
- gettock() in ncparse.c did not recognize C single line comments "//"
- (Thanks to Frank Behrens for finding this out)
-
-* misc dist_and_reload () now calls the "Distribute_Cmd" twice:
- First with argument "distribute" for signed zone file distribution,
- second with argument "reload" to initiate a reload.
- Again see example/flat/dist.sh for an example script.
-
-* bug full KSK rollover will (mostly) also work for dynamic zones
- This is a hack and requires further investigation. Currently
- it will not work if someone is using non standard zone file
- names.
-
-* misc default ZSK lifetime set to 3 month
-
-* misc get_mtime() renamed to file_mtime()
-
-* func is_exec_ok() added and called in dist_and_reload ()
-
-* func New parameter "Distribute_Cmd" added for specifing a user
- defined distribution (and reload) command (See example/flat/dist.sh).
-
-* misc Changed wording to be a bit more consistent to
- draft-gudmundsson-life-of-dnskey-00.txt
- - State of published key will be print as "pub" instead of "pre"
- by dnssec-zkt.
- - Option --pre-publish of dnssec-zkt changed to --published.
- - Changed wording in all comments and log message from "pre-publish"
- to "published".
-
-* func Highly experimental code to do a full automatic ksk rollover
- in hierachical mode.
- ksk_rollover() added in rollover.c; parameter change for ksk_status()
-
-* misc Changed name of "dnssec-soaserial" to "zkt-soaserial"
-
-* bug Fixed verbose logging error if -N or -D option was used
-
-* func Some LG_INFO messages added about key status change
-
-* func Remove of function to register a new ksk (zktr.[ch])
-
-* misc Changed licence from GNU GPLv2 to BSD licence
-
-* bug Fixed bug in logging of ZSK rollover
-
-* misc Changed tar file to zipped one and archive the files with
- toplevel directory
-
-* bug Fixed use of uninitialized vars in zconf.c (line)
-
-* port Preparation for use of autoconf
- - config.h renamed to config_zkt.h and change of include directives
- - conditional include of config.h
- - ./configure script is able to determine BIND utility path
- (BIND_UTIL_PATH) and version (BIND_VERSION)
- - compile time options are settable via configure script (--enable-xxx)
- - For now, the configure script is not able to set the install dir.
-
-* bug ksk rollover phase2 did not trigger resigning of parent
- (the parent file was copied to the parent directory only
- after child zone resigning)
-
-* bug fixed bad notice message in zskstatus ()
-
-* func dnssec-zkt -Z print out syslog facility & level with
- upper case letter and without quotation marks
-
-* func Syslog facility DAEMON added
-
-zkt 0.96 -- 19. June 2008
-
-* func Config file option "SIG_Parameter" added.
-
-* func Function verbmesg() added and used for verbose logging
- to stdout and/or to syslog resp. file.
- Config file parameter VerboseLog added to config file.
-
-* bug Option -O wasn't recognized by dnssec-signer
-
-* func Better support of initial setup of dynamic signed
- zones (just create an empty "zone.db.dsigned" file
- and run dnssec-signer with option -d).
-
-* func Improved error logging; incr_soa() errors are written
- as clear text message instead of error number
-
-* func elog_mesg() function replaced by a more general
- logging mechanism.
- ErrorLog config parameter replaced by LogFile,
- LogLevel and SyslogFacility, SyslogLevel parameter
-
-* func New function filesize() added
-
-* func dki_prt_trustedkey print out old key id if key
- is revoked
-
-* func dki_new() writes gentime (GMT) and proposed key
- lifetime (days) as comment into the *.key file
-
-* bug Doing some housekeeping
-
-zkt 0.95 -- 19. April 2008
-
-* misc This is not a public released version of zkt.
-
-* func All config file option are now settable via
- commandline option -O (--option or --config-option)
-
-* misc Function fatal() now has an exit code of 127.
- This is necessary because values from 1 to 64 are
- reflecting the number of errors occured.
-
-* func Errorlog functionality added
- All dnssec-signer errors will be logged in the file
- specified by the Errorlog config file parameter or
- specified by the command line option -L (--errorlog).
- If a directory is given, then the logging will occur
- in a file within this directory which is named
- like "zkt-<current-date>.log".
- The dnssec-signer command has an exit code of 0 if
- no error occured, an exit code of 127 on fatal errors,
- an exit code from 1 to 63 reflecting the number of errors
- occured, or an exit code of 64 if more than 63 errors
- occured.
-
-* func dnssec-signer: Introducing long options
-
-* bug New skript added to example/views directory to
- read in the right config file
-
-* func New option -f (--lifetime) and -F (--setlifetime)
- added to dnssec-zkt.
-
-* func New option -e (--expire) added to dnssec-zkt.
- (Seems to be that the dnssec-zkt command is a little
- bit overloaded with options.)
-
-* func dki.c and zkt.c supports storage of key lifetime,
- generation time and expiration time as a comment in the
- .key file. With this, it's possible to change the default
- lifetime without any impact on already used keys.
-
-zkt 0.94 -- 6. Dec 2007
-
-* bug Case mismatch of zone name and key file name prevent
- dki_read() from reading the key.
- Thanks to Alan Clegg for finding this out.
- Added some additional error processing and convert
- zone name to lower case.
-
-* misc Builtin default for KSK_randfile changed
- from NULL to "/dev/urandom".
-
-* bug dnssec-signer has to use private keys for signing
- even if the revoke bit is set.
- To achieve this the file pattern K*.private is added
- to the dnssec-signzone run.
-
-* bug Uninitialized variable "len" in sign_zone().
-
-* func Default config file is settable via environment
- variable ZKT_CONFFILE
-
-* func Support of views added
- Link dnssec-zkt to dnssec-zkt-<view> and
- dnssec-signer to dnssec-signer-<view>.
- Option -V and --view added to dnssec-zkt.
- Option -V added to dnssec-signer.
- View support added to parse_namedconf().
-
-zkt 0.93 -- 1. Nov 2007
-
-* func The ksk registration mechanism is disabled by
- default (see REG_URL in config.h).
-
-* func Basic support for revoke flag added (RFC5011).
- Semantic of option -R of dnssec-zkt changed.
-
-* func Undocumented option -S changed to lower case.
- Pre-pulished KSK will be shown as "standby" key.
- New Option -S (standby) for pre-publish KSK.
-
-* func New command dnssec-soaserial added.
-
-* bug dnssec-signer do not print the incremented serial
- number anymore.
- time2str() fixed bug in time format (HAS_STRFTIME=0).
-
-* port New build dependencies "solaris", "macos" and "help"
- added to Makefile.
-
-zkt 0.92 -- 1. Oct 2007
-
-* func Parameter "Serialformat" in dnssec.conf added .
- Now it is possible to use the unixtime format for
- the SOA serial number. If you use BIND 9.4 or
- greater in conjunction with this, than there is no
- need for the special SOA serial formating in
- the zonefile. (Thanks to Jakob Schlyter for the
- -N option of dnssec-signzone and the suggestion to
- add the unixtime support to zkt)
-
-* func Option --ksk-roll-stat added.
-
-* port Added macro HAS_GETOPT_LONG to support OS with
- lack of getopt_long() (e.g. solaris).
- Options -[01239] added.
-
-* misc Unused macro HAS_ULONG removed from config.h.
- Deklaration of unsigned types moved from dki.h to
- config.h (so it will be available in _all_ source
- files). Thanks to Mans Nilsson.
- Unused macro isblank() (ncparse.c) removed.
-
-* bug In dosigning(): freeze the dynamic zone _before_ copying
- the zone file.
-
-zkt 0.91 -- 1. Apr 2007
-
-* doc --ksk-rollover option added to usage().
-
-* func some experimental code for dynamic zones added.
- new functions added: copyzonefile(), dyn_update_freeze().
- New option "-d" added.
-
-zkt 0.90 -- 6. Dec 2006
-
-* func CHECK_RESIGN interval added to config.h.
- This is the dnssec-signer calling interval (at least 1 day or 86400 sec).
-
-* func new function dki_destroy() added; semantic of dk_remove()
- changed to rename the key files instead of physical deletion.
-
-* doc Setup of new example directory (flat and hierarchical).
-
-* doc dnssec-zkt man page updated.
- Added some comments in misc.c
-
-* misc function strtaint() renamed to str_untaint(),
- dki_keycmp() renamed to dki_tagcmp().
-
-* func New parameter key_ttl added to dnssec.conf.
- New func dki_prt_dnskeyttl () added.
- Now dnskey.db is written with key_ttl value.
-
-* func dnssec-signer: In hierarchical mode sign_zone() copies the
- parent-file (if such a file exist) instead of the
- keyset-file to the parent directory.
-
-* func dnssec-zkt: Option --ksk-roll-phase[123] and function
- ksk_rollover() added.
-
-* misc zconf: default values for sigvalidity, resign_int etc. changed,
- new dnssec.conf example file created.
-
-* func dnssec-zkt: Long option support added.
-
-zkt 0.83 -- 11. Sep 2006
-
-* bug dosigning(): Fixed bug in the bug fixing of printing undefined
- serial number if incr_serial() failed. (Thanks to Randy McCasskill).
-
-zkt 0.82 -- 8. Sep 2006
-
-* bug Use option -e for dnssec-keygen calls in dki_new(), because
- an RSA exponent of 3 is vulnerable.
-
-* bug dosigning(): Fixed bug in printing undefined serial
- number if incr_serial() failed.
-
- an RSA exponent of 3 is vulnerable.
-
-* bug dosigning(): Fixed bug in printing undefined serial
- number if incr_serial() failed.
-
-zkt 0.81 -- 13. July 2006
-
-* bug The function ceatekey() won't work with USE_TREE.
- Size of MAX_DNAME increased.
-
-zkt 0.8 -- 09. July 2006
-
-* func Now a hierarchical directory structure with subdomains stored in
- subfolders of the parent domain are allowed. Added copyfile(),
- cmpfile() and new_keysetfiles() for that.
-
-* func Config parameter added to choose if the domain name is
- right or left justified listed by dnssec-zkt (printkeyinfo).
-
-* func New class of key added ("sep"). A SEP key is a (public) key file
- without the private counterpart. So we could use the key solely
- as an secure entry point. (dki.h, dki_read).
-
-zkt 0.70 -- 15. Sep 2005
-
-* func Experimental code added to use a binary search tree instead of a
- single linked list. This is mainly for performance improvement for large
- sites. If you don't want to use it, set USE_TREE in config.h to zero.
- In the first step only dnssec-zkt use the new data structure.
- The tree is build over the domain names and each node is the starting point
- of a linked list of keys.
- As a result, it's not possible anymore to search on key tags only. You have
- to specify the domain name plus the tag. :-(
-
-* func Function parseurl added.
-
-* func Experimental code to register a new ksk. Currently it's more like
- a key announcement because of the lack of identification and
- authentication.
-
-zkt 0.65 -- 22. Aug 2005
-
-* misc Rewrite of the domaincmp() function. Now it's round about 2 times faster.
- After some additional changes and the compiler option -O3 the dnssec-zkt
- on the ~ 12000 zones requires only a minute
- $ time dnssec-zkt -z -r sec > /dev/null
- real 0m58.287s
- user 0m54.610s
- sys 0m3.680s
-
-* func A keyset directory is introduced (experimental)
- The parameter -d is added to the call of the dnssec-signzone command
- if the config option KeySetDir is set.
- As a result, all dsset-, keyset- and dlvset- files are stored in one directory.
- The advantage is, that the chain of trust of all local subzone is build
- automatically (This is the reason why we sort the zones with the child zones
- first).
- The disadvantage is that we store many files in single directory (3 files
- per zone).
-
-zkt 0.64 -- 1. Aug 2005
-
-* bug The code for option -Z of dnssec-zkt should be executed before we read the
- complete directory tree. This is usefull if we have a very deep directory
- structure and the recursive flag is switched on.
-
-* func SIG_Pseudorand parameter added.
-
-* func ([KZ]SK)|(SIG)_randfile parameter added.
-
-* func measure the time used for signing of each zone.
-
-* bug function logflush() added to misc.c and called by dosigning().
-
-* misc some perfomance test made:
- - Directory structure "sec/<firstletter>/domain" with round about 12200 domains
- - One of the domain is a big one (~ 820000 RRs), the others are mostly very small ones
- - We use a dsa with 704 bits as ksk and a rsamd5 with 512 bits as zsk on each domain.
- - All test made on Sun Fire V440 with 4 CPU and 4x2GB main memory
-
- # sequential signing of all zones
- $ time dnssec-signer -v -v -f -D sec
- real 434m (~ 7h 14min)
- user 188
- sys 175
-
- # with option -p and -r /dev/urandom
- $ time dnssec-signer -v -v -f -D sec > log
- real 96m28.306s
- user 290m41.980s
- sys 6m13.790s
-
- # one process for each firstletter subdirectory
- $ time par_signer.sh
- real 394m12.334s
- user 295m58.390s
- sys 786m42.479s
-
- # with option -p and -r /dev/urandom
- $ time par_signer.sh
- real 78m49.323s
- user 284m58.350s
- sys 5m39.340s
-
-
- $ time dnssec-zkt -z -r sec > /dev/null
- real 2m5.722s
- user 2m0.060s
- sys 0m4.510s
-
-
- # signing the big (820000 RR) domain only
- $ time dnssec-signer -v -v -f -D sec/b/big-domain
- real 196m23.165 (~ 3h 16min)
- user 176m57.610
- sys 167m27.570
-
- # with option -p and -r /dev/urandom
- $ time dnssec-signer -v -v -f -D sec/b/big-domain
- real 49m53.152
- user 173m59.520
- sys 1m40.150
-
-zkt 0.63 -- 14. June 2005
-
-* bug allow TTL value in keyfiles (see TTL_IN_KEYFILES_ALLOWED
- in dki_readfile()).
-
-* misc function strchop() added to misc.c.
-
-zkt 0.62 -- 13. May 2005
-
-* func dnssec-signer: Option -o added.
- Now it works a bit more like dnssec-signzone.
-
-* func strlist.c: prepstrlist and unprepstrlist functions get a
- second parameter for the delimiter.
-
-* bug fixed some typos and inaccurate usage of symbolic constants.
- Doing some housekeeping.
-
-zkt 0.61 -- 3. May 2005
-
-* bug local config file will not be mentioned if -N switch is used.
-
-zkt 0.6 -- 1. May 2005
-
-* doc dnssec-signer: man page added.
-
-* func dnssec-signer: Print out a warning message if ksk lifetime is exceeded.
-
-* func dnssec-signer: Remaining arguments will be interpreted as zone names
- (in_strarr () added).
-
-* func dnssec-signer: Option -D added.
-
-
-zkt 0.51 -- 8. April 2005
-
-* func dnssec-signer: Option -N added.
-
-* func dnssec-signer: change of keystatus from pre-published to active
- resets timestamp of key, thus age of active key counts 0.
-
-* bug prepstrlist: resulting string was not terminated with '\0'.
-
-* bug dnssec-signer: do signing if there are additional keys, or the
- status of any key is changed (function check_keytimestamp).
-
-* func dnssec-zkt: -l <list> option added.
-
-* func dnssec-zkt: -p flag defaults to on in key creation mode (-C).
diff --git a/contrib/zkt-1.1.3/LICENSE b/contrib/zkt-1.1.3/LICENSE
deleted file mode 100644
index 1af01c77..00000000
--- a/contrib/zkt-1.1.3/LICENSE
+++ /dev/null
@@ -1,30 +0,0 @@
-Copyright (c) 2005 - 2008, Holger Zuleger HZnet. All rights reserved.
-
-This software is open source.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-
-Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation
-and/or other materials provided with the distribution.
-
-Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-be used to endorse or promote products derived from this software without
-specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
diff --git a/contrib/zkt-1.1.3/Makefile.in b/contrib/zkt-1.1.3/Makefile.in
deleted file mode 100644
index 2996d7e2..00000000
--- a/contrib/zkt-1.1.3/Makefile.in
+++ /dev/null
@@ -1,203 +0,0 @@
-#################################################################
-#
-# @(#) Makefile for dnssec zone key tool (c) Mar 2005 hoz
-#
-#################################################################
-
-prefix = @prefix@
-mandir = @mandir@
-
-CC = @CC@
-
-PROFILE = # -pg
-OPTIM = # -O3 -DNDEBUG
-
-#CFLAGS ?= @CFLAGS@ @DEFS@ -I@top_srcdir@
-CFLAGS += -g @DEFS@ -I@top_srcdir@
-CFLAGS += -Wall #-DDBG
-CFLAGS += -Wmissing-prototypes
-CFLAGS += $(PROFILE) $(OPTIM)
-LDFLAGS += $(PROFILE)
-LIBS = @LIBS@
-
-PROJECT = @PACKAGE_TARNAME@
-VERSION = @PACKAGE_VERSION@
-
-HEADER = dki.h misc.h domaincmp.h zconf.h config_zkt.h \
- config.h.in strlist.h zone.h zkt.h debug.h \
- ncparse.h log.h rollover.h nscomm.h soaserial.h \
- zfparse.h tcap.h
-SRC_ALL = dki.c misc.c domaincmp.c zconf.c log.c
-OBJ_ALL = $(SRC_ALL:.c=.o)
-
-SRC_SIG = zkt-signer.c zone.c ncparse.c rollover.c \
- nscomm.c soaserial.c
-OBJ_SIG = $(SRC_SIG:.c=.o)
-MAN_SIG = zkt-signer.8
-PROG_SIG= zkt-signer
-
-SRC_CNF = zkt-conf.c zfparse.c
-OBJ_CNF = $(SRC_CNF:.c=.o)
-MAN_CNF = zkt-conf.8
-PROG_CNF= zkt-conf
-
-# shared sources
-SRC_KLS = strlist.c zkt.c tcap.c
-OBJ_KLS = $(SRC_KLS:.c=.o)
-
-SRC_KEY = zkt-keyman.c
-OBJ_KEY = $(SRC_KEY:.c=.o) $(OBJ_KLS)
-MAN_KEY = zkt-keyman.8
-PROG_KEY= zkt-keyman
-
-SRC_LS = zkt-ls.c
-OBJ_LS = $(SRC_LS:.c=.o) $(OBJ_KLS)
-MAN_LS = zkt-ls.8
-PROG_LS= zkt-ls
-
-SRC_SER = zkt-soaserial.c
-OBJ_SER = $(SRC_SER:.c=.o)
-#MAN_SER = zkt-soaserial.8
-PROG_SER= zkt-soaserial
-
-SRC_PRG = $(SRC_SIG) $(SRC_CNF) $(SRC_LS) $(SRC_SER) $(SRC_KEY)
-OBJ_PRG = $(SRC_PRG:.c=.o)
-PROG_PRG= $(PROG_SIG) $(PROG_CNF) $(PROG_LS) $(PROG_SER) $(PROG_KEY)
-
-MAN_ALL = $(MAN_SIG) $(MAN_LS) $(MAN_CNF) $(MAN_KEY)
-OTHER = README README.logging TODO LICENSE CHANGELOG tags Makefile.in \
- configure distribute.sh examples
-SAVE = $(HEADER) $(SRC_ALL) $(SRC_SIG) $(SRC_CNF) $(SRC_KLS) \
- $(SRC_LS) $(SRC_KEY) $(SRC_SER) $(OTHER) \
- man configure.ac config.h.in doc
-#MNTSAVE = $(SAVE) configure.ac config.h.in doc
-
-
-all: $(PROG_CNF) $(PROG_LS) $(PROG_SIG) $(PROG_SER) $(PROG_KEY)
-
-macos: ## for MAC OS (depreciated)
-macos:
- $(MAKE) CFLAGS="$(CFLAGS) -D HAS_UTYPES=0" all
-
-solaris: ## for solaris (depreciated)
-solaris:
- @$(MAKE) CFLAGS="$(CFLAGS) -D HAVE_GETOPT_LONG=0" all
-
-linux: ## for linux (default)
-linux:
- @$(MAKE) all
-
-$(PROG_SIG): $(OBJ_SIG) $(OBJ_ALL) Makefile
- $(CC) $(LDFLAGS) $(OBJ_SIG) $(OBJ_ALL) -o $(PROG_SIG)
-
-$(PROG_CNF): $(OBJ_CNF) $(OBJ_ALL) Makefile
- $(CC) $(LDFLAGS) $(OBJ_CNF) $(OBJ_ALL) -o $(PROG_CNF)
-
-$(PROG_KEY): $(OBJ_KEY) $(OBJ_ALL) Makefile
- $(CC) $(LDFLAGS) $(LIBS) $(OBJ_KEY) $(OBJ_ALL) -o $(PROG_KEY)
-
-$(PROG_LS): $(OBJ_LS) $(OBJ_ALL) Makefile
- $(CC) $(LDFLAGS) $(LIBS) $(OBJ_LS) $(OBJ_ALL) -o $(PROG_LS)
-
-$(PROG_SER): $(OBJ_SER) Makefile
- $(CC) $(LDFLAGS) $(OBJ_SER) -o $(PROG_SER)
-
-install: ## install binaries in prefix/bin
-install: $(PROG_PRG)
- test -d $(prefix)/bin || mkdir -p $(prefix)/bin
- cp $(PROG_PRG) $(prefix)/bin/
-
-install-man: ## install man pages in mandir
-install-man:
- test -d $(mandir)/man8/ || mkdir -p $(mandir)/man8/
- cp -p man/$(MAN_LS) man/$(MAN_SIG) man/$(MAN_KEY) man/$(MAN_CNF) $(mandir)/man8/
-
-
-
-tags: ## create tags file
-#tags: $(SRC_ALL) $(SRC_PRG)
-tags: $(SRC_ALL) $(SRC_SIG) $(SRC_CNF) $(SRC_KEY) $(SRC_LS) $(SRC_SER) $(SRC_KLS)
- ctags $(SRC_ALL) $(SRC_SIG) $(SRC_CNF) $(SRC_KEY) $(SRC_LS) $(SRC_SER) $(SRC_KLS)
-
-clean: ## remove objectfiles and binaries
-clean:
- -rm -f $(OBJ_PRG) $(OBJ_ALL) $(PROG_PRG)
-
-distclean: ## remove objectfiles, binaries and distribution files
-distclean: clean
- -rm -f Makefile config.h config.log config.status config.cache \
- $(PROJECT)-$(VERSION).tar.gz
-
-tar: ## create tar file for distribution
-tar: $(PROJECT)-$(VERSION).tar.gz
-
-configure: ## create configure script
-configure: configure.ac Makefile.in
- autoconf && autoheader
-
-man: man/$(MAN_KEY).html man/$(MAN_KEY).pdf \
- man/$(MAN_SIG).html man/$(MAN_SIG).pdf \
- man/$(MAN_LS).html man/$(MAN_LS).pdf \
- man/$(MAN_CNF).html man/$(MAN_CNF).pdf
-
-man/$(MAN_KEY).html: man/$(MAN_KEY)
- groff -Thtml -man -mhtml man/$(MAN_KEY) > man/$(MAN_KEY).html
-man/$(MAN_KEY).pdf: man/$(MAN_KEY)
- groff -Tps -man man/$(MAN_KEY) | ps2pdf - man/$(MAN_KEY).pdf
-man/$(MAN_LS).html: man/$(MAN_LS)
- groff -Thtml -man -mhtml man/$(MAN_LS) > man/$(MAN_LS).html
-man/$(MAN_LS).pdf: man/$(MAN_LS)
- groff -Tps -man man/$(MAN_LS) | ps2pdf - man/$(MAN_LS).pdf
-man/$(MAN_SIG).html: man/$(MAN_SIG)
- groff -Thtml -man -mhtml man/$(MAN_SIG) > man/$(MAN_SIG).html
-man/$(MAN_SIG).pdf: man/$(MAN_SIG)
- groff -Tps -man man/$(MAN_SIG) | ps2pdf - man/$(MAN_SIG).pdf
-man/$(MAN_CNF).html: man/$(MAN_CNF)
- groff -Thtml -man -mhtml man/$(MAN_CNF) > man/$(MAN_CNF).html
-man/$(MAN_CNF).pdf: man/$(MAN_CNF)
- groff -Tps -man man/$(MAN_CNF) | ps2pdf - man/$(MAN_CNF).pdf
-
-# generation of tar file out of the git archive
-# (use v$(VERSION) instead of HEAD if the tar file should depend on a tagged revision)
-$(PROJECT)-$(VERSION).tar.gz: $(SAVE)
- @test "`git tag -l $(VERSION)`" != $(VERSION) && echo "no tag $(VERSION) found in repository" && exit
- git archive --format=tar --prefix="$(PROJECT)-$(VERSION)/" $(VERSION) | \
- gzip > $(PROJECT)-$(VERSION).tar.gz
- # git archive --format=tar --prefix="$(PROJECT)-$(VERSION)/" HEAD | \
- # cat > $(PROJECT)-$(VERSION).tar
-
-depend:
- $(CC) -MM $(CFLAGS) $(SRC_PRG) $(SRC_ALL)
-
-help:
- @grep "^.*:[ ]*##" Makefile
-
-## all dependicies
-#:r !make depend
-#gcc -MM -g -DHAVE_CONFIG_H -I. -Wall -Wmissing-prototypes zkt-signer.c zone.c ncparse.c rollover.c nscomm.c soaserial.c zkt-conf.c zfparse.c zkt-ls.c zkt-soaserial.c zkt-keyman.c dki.c misc.c domaincmp.c zconf.c log.c
-zkt-signer.o: zkt-signer.c config.h config_zkt.h zconf.h debug.h misc.h \
- ncparse.h nscomm.h zone.h dki.h log.h soaserial.h rollover.h
-zone.o: zone.c config.h config_zkt.h debug.h domaincmp.h misc.h zconf.h \
- dki.h zone.h
-ncparse.o: ncparse.c debug.h misc.h zconf.h log.h ncparse.h
-rollover.o: rollover.c config.h config_zkt.h zconf.h debug.h misc.h \
- zone.h dki.h log.h rollover.h
-nscomm.o: nscomm.c config.h config_zkt.h zconf.h nscomm.h zone.h dki.h \
- log.h misc.h debug.h
-soaserial.o: soaserial.c config.h config_zkt.h zconf.h log.h debug.h \
- soaserial.h
-zkt-conf.o: zkt-conf.c config.h config_zkt.h debug.h misc.h zconf.h \
- zfparse.h
-zfparse.o: zfparse.c config.h config_zkt.h zconf.h log.h debug.h \
- zfparse.h
-zkt-ls.o: zkt-ls.c config.h config_zkt.h debug.h misc.h zconf.h strlist.h \
- dki.h tcap.h zkt.h
-zkt-soaserial.o: zkt-soaserial.c config.h config_zkt.h
-zkt-keyman.o: zkt-keyman.c config.h config_zkt.h debug.h misc.h zconf.h \
- strlist.h dki.h zkt.h
-dki.o: dki.c config.h config_zkt.h debug.h domaincmp.h misc.h zconf.h \
- dki.h
-misc.o: misc.c config.h config_zkt.h zconf.h log.h debug.h misc.h
-domaincmp.o: domaincmp.c domaincmp.h
-zconf.o: zconf.c config.h config_zkt.h debug.h misc.h zconf.h dki.h
-log.o: log.c config.h config_zkt.h misc.h zconf.h debug.h log.h
diff --git a/contrib/zkt-1.1.3/README b/contrib/zkt-1.1.3/README
deleted file mode 100644
index c50699fc..00000000
--- a/contrib/zkt-1.1.3/README
+++ /dev/null
@@ -1,64 +0,0 @@
-#
-# README dnssec zone key tool
-#
-# (c) March 2005 - Aug 2014 by Holger Zuleger hznet
-# (c) domaincmp() Aug 2005 by Karle Boss & H. Zuleger (kaho)
-# (c) zconf.c by Jeroen Masar & Holger Zuleger
-#
-
-For more information about the DNSSEC Zone Key Tool please
-have a look at "http://www.hznet.de/dns/zkt/"
-
-You can also subscribe to the zkt-users@sourceforge.net mailing list
-on the following website: https://lists.sourceforge.net/lists/listinfo/zkt-users
-
-The ZKT software is licenced under BSD (see LICENCE file)
-
-To build the software:
-a) Get the current version of zkt
- $ wget http://www.hznet.de/dns/zkt/zkt-1.1.tar.gz
-
-b) Unpack
- $ tar xzvf zkt-1.1.tar.gz
-
-c) Change to source directory
- $ cd zkt-1.1
-
-d) Run configure script
- $ ./configure
-
-e) Compile
- $ make
-
-f) Install
- # make install
- # make install-man
-
-
-Prepare your setup:
-a) (optional) Install or rebuild the default dnssec.conf file
- $ zkt-conf -d -w # Install new file
- or
- $ zkt-conf -s -w # rebuild existing file
-
-b) (optional) Change default parameters
- $ zkt-conf -s -O "Zonedir: /var/named/zones" -w
- or use your prefered editor
- $ vi /var/named/dnssec.conf
- (optional) You'll probably want to have zkt-ls work recursively
- $ zkt-conf -s -O "Recursive: True" -w
-
-c) Prepare one of your zone for zkt
- $ cd /var/named/zones/net/example.net # change dir to zone directory
- $ cp <zonefile> zone.db # copy and rename existing zone file to "zone.db"
- $ zkt-conf -w zone.db # create local dnssec.conf file and include dnskey.db into zone file
-
-d) Prepare for initial signing
- $ cd /var/named/zones/net/example.net
- $ touch zone.db.signed
- $ zkt-signer -v -v -o example.net # -o is ORIGIN (i.e. zone name)
-
-e) Publish your zone
- @ add `zone.db.signed' as zone file to your name server
- @ publish DS contained in `dsset-example.net.' at your zone's parent
-
diff --git a/contrib/zkt-1.1.3/README.logging b/contrib/zkt-1.1.3/README.logging
deleted file mode 100644
index 1dc45819..00000000
--- a/contrib/zkt-1.1.3/README.logging
+++ /dev/null
@@ -1,103 +0,0 @@
-#
-# README.logging
-#
-# Introduction into the new logging feature
-# available since v0.96
-# Per domain logging is enabled since v1.0
-#
-
-In previous version of dnssec-signer every message was written
-to the default stdout and stderr channels, and the logging itself
-was handled by a redirection of those chanels to the logger command
-or to a file.
-
-Since v0.96, the dnssec-signer command is able to log all messages
-by itself. File and SYSLOG logging is supported.
-
-To enable the logging into a file channel, you have to specify
-the file or directory name via the commandline option -L (--logfile)
-or via the config file parameter "LogFile".
- LogFile: ""|"<file>"|"<directory>" (default is "")
-If a file is specified, than each run of dnssec-signer will append the
-messages to that file. If a directory is specified, than a file with a
-name of zkt-<ISOdate&timeUTC>+log" will be created on each dnssec-signer run.
-
-Since v1.0 per domain logging is possible.
-If the parameter "LogDomainDir:" is not empty, than the domain specific messages
-are written to a separate log file with a name like "zkt-<domainname>+log" in the
-directory specified by the parameter.
-If "LogDomainDir:" is set to ".", then the logfile will be created in the domain
-directory of the zone.
-
-Logging into the syslog channel could be enabled via the config file
-parameter "SyslogFacility".
- SyslogFacility: NONE|USER|DAEMON|LOCAL0|..|LOCAL7 (default is USER)
-
-For both channels, the log level could be set to one of six log levels:
- LG_FATAL, LG_ERROR, LG_WARNING
- LB_NOTICE, LG_INFO, LG_DEBUG
-
-The loglevel is settable via the config file parameter :
- SyslogLevel: FATAL|ERROR|WARNING|NOTICE|INFO|DEBUG
- (default is ERROR)
-and
- LogLevel: FATAL|ERROR|WARNING|NOTICE|INFO|DEBUG
- (default is NOTICE)
-
-All the log parameters are settable on the commandline via the generic
-option -O "optstring" (--config-option="optstring").
-
-A verbose message output to stdout could be achieved by the commandline
-option -v (or -v -v).
-If you like to have this verbose messages also logged with a level of LG_DEBUG
-you should enable this by setting the config file option
-"VerboseLog" to a value of 1 or 2.
-
-Current logging messages:
- LG_FATAL: Not all of the fatal errors are logged
- (e.g.: config file or command line option fatal errors are
- not logged)
- LG_ERROR: All error messages will be logged
- LG_WARNING: KSK lifetime expiration
- LG_NOTICE:
- Start and stop of dnssec-signer
- Re-signing events
- Key rollover events
- KSK key generation and revoking
- Zone reload resp. freeze/thaw of dynamic zone
- LG_INFO:
- Messages for key generation/removal and ksk rollover
- LG_DEBUG: all "verbose" (-v) and "very verbose" (-v -v) messages
-
-Some recomended and useful logging settings
-
-- The default setting
- LogFile: ""
- SyslogFacility: USER
- SyslogLevel: NOTICE
- VerboseLog: 0
-
-- Setting as in version v0.95
- LogFile: "zkt-error.log" # or a directory for separate logfiles
- LogLevel: ERROR
- SyslogFacility: NONE
- VerboseLog: 0
-
-- Setting as in previous versions
- LogFile: ""
- SyslogFacility: NONE
- VerboseLog: 0
-
-- Recommended setting for normal usage
- LogFile: "zkt.log" # or a directory for separate logfiles
- LogLevel: ERROR
- SyslogFacility: USER
- SyslogLevel: NOTICE
- VerboseLog: 0
-
-- Recommended setting for debugging
- LogFile: "zkt.log" # or a directory for separate logfiles
- LogLevel: DEBUG
- SyslogFacility: USER
- SyslogLevel: NOTICE
- VerboseLog: 2
diff --git a/contrib/zkt-1.1.3/TODO b/contrib/zkt-1.1.3/TODO
deleted file mode 100644
index 8b3104ed..00000000
--- a/contrib/zkt-1.1.3/TODO
+++ /dev/null
@@ -1,32 +0,0 @@
-TODO list as of zkt-1.1
-
-zkt-ls:
- feat option to specify the key age as remaining lifetime
- (Option -i inverse age ?).
-
-zkt-signer:
- bug Distribute_Cmd wouldn't work properly on dynamic zones
- (missing freeze, thaw; copy Keyfiles instead of signed zone file)
-
- bug Automatic KSK rollover of dynamic zones will only work if the parent
- uses the standard name for the signed zonefile (zonefile.db.signed).
-
- bug Phase3 of manual ksk rollover do not trigger a resigning of the zone
- (Key removal is not recognized by dosigning () function )
-
- bug There is no online checking of the key material by design.
- The signer command checks the status of the key as they
- are represented in the file system and not in the zone.
- The dnssec maintainer is responsible for the lifeliness of the
- data in the hosted domain.
- In other words: It's highly recommended to use the
- option -r when you use zkt-signer on a production zone.
- Than the time of propagation is (more or less) equal to the timestamp
- of the zone.db.signed file.
-
-zkt-rollover:
- feat New command to roll keys independent of zone signing
- (Usefull for dynamic zones managed by BIND9.7)
-
-dki:
- feat Use dynamic memory for dname in dki_t
diff --git a/contrib/zkt-1.1.3/config.h.in b/contrib/zkt-1.1.3/config.h.in
deleted file mode 100644
index 4301f255..00000000
--- a/contrib/zkt-1.1.3/config.h.in
+++ /dev/null
@@ -1,234 +0,0 @@
-/* config.h.in. Generated from configure.ac by autoheader. */
-
-/* Path to BIND utilities */
-#undef BIND_UTIL_PATH
-
-/* BIND version as integer number without dots */
-#undef BIND_VERSION
-
-/* Define to 1 if the `closedir' function returns void instead of `int'. */
-#undef CLOSEDIR_VOID
-
-/* zkt-ls with colors */
-#undef COLOR_MODE
-
-/* set path of config file (defaults to /var/named) */
-#undef CONFIG_PATH
-
-/* Define to 1 if you have the `alarm' function. */
-#undef HAVE_ALARM
-
-/* Define to 1 if you have the <curses.h> header file. */
-#undef HAVE_CURSES_H
-
-/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
- */
-#undef HAVE_DIRENT_H
-
-/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
-#undef HAVE_DOPRNT
-
-/* Define to 1 if you have the <fcntl.h> header file. */
-#undef HAVE_FCNTL_H
-
-/* Define to 1 if you have the <getopt.h> header file. */
-#undef HAVE_GETOPT_H
-
-/* Define to 1 if you have the `getopt_long' function. */
-#undef HAVE_GETOPT_LONG
-
-/* Define to 1 if you have the `gettimeofday' function. */
-#undef HAVE_GETTIMEOFDAY
-
-/* Define to 1 if you have the `getuid' function. */
-#undef HAVE_GETUID
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if you have the `ncurses' library (-lncurses). */
-#undef HAVE_LIBNCURSES
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define to 1 if you have the `memset' function. */
-#undef HAVE_MEMSET
-
-/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
-#undef HAVE_NDIR_H
-
-/* Define to 1 if you have the <netdb.h> header file. */
-#undef HAVE_NETDB_H
-
-/* Define to 1 if you have the `putenv' function. */
-#undef HAVE_PUTENV
-
-/* Define to 1 if you have the `socket' function. */
-#undef HAVE_SOCKET
-
-/* Define to 1 if `stat' has the bug that it succeeds when given the
- zero-length file name argument. */
-#undef HAVE_STAT_EMPTY_STRING_BUG
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the `strcasecmp' function. */
-#undef HAVE_STRCASECMP
-
-/* Define to 1 if you have the `strchr' function. */
-#undef HAVE_STRCHR
-
-/* Define to 1 if you have the `strdup' function. */
-#undef HAVE_STRDUP
-
-/* Define to 1 if you have the `strerror' function. */
-#undef HAVE_STRERROR
-
-/* Define to 1 if you have the `strftime' function. */
-#undef HAVE_STRFTIME
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the `strncasecmp' function. */
-#undef HAVE_STRNCASECMP
-
-/* Define to 1 if you have the `strrchr' function. */
-#undef HAVE_STRRCHR
-
-/* Define to 1 if you have the <syslog.h> header file. */
-#undef HAVE_SYSLOG_H
-
-/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
- */
-#undef HAVE_SYS_DIR_H
-
-/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
- */
-#undef HAVE_SYS_NDIR_H
-
-/* Define to 1 if you have the <sys/socket.h> header file. */
-#undef HAVE_SYS_SOCKET_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#undef HAVE_SYS_TIME_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <term.h> header file. */
-#undef HAVE_TERM_H
-
-/* Define to 1 if you have the `timegm' function. */
-#undef HAVE_TIMEGM
-
-/* Define to 1 if you have the `tzset' function. */
-#undef HAVE_TZSET
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define to 1 if you have the `utime' function. */
-#undef HAVE_UTIME
-
-/* Define to 1 if you have the <utime.h> header file. */
-#undef HAVE_UTIME_H
-
-/* Define to 1 if `utime(file, NULL)' sets file's timestamp to the present. */
-#undef HAVE_UTIME_NULL
-
-/* Define to 1 if you have the `vprintf' function. */
-#undef HAVE_VPRINTF
-
-/* log with level */
-#undef LOG_WITH_LEVEL
-
-/* log with progname */
-#undef LOG_WITH_PROGNAME
-
-/* log with timestamp */
-#undef LOG_WITH_TIMESTAMP
-
-/* Define to 1 if `lstat' dereferences a symlink specified with a trailing
- slash. */
-#undef LSTAT_FOLLOWS_SLASHED_SYMLINK
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the home page for this package. */
-#undef PACKAGE_URL
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* print age with year */
-#undef PRINT_AGE_WITH_YEAR
-
-/* print out timezone */
-#undef PRINT_TIMEZONE
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#undef TIME_WITH_SYS_TIME
-
-/* Define to 1 if your <sys/time.h> declares `struct tm'. */
-#undef TM_IN_SYS_TIME
-
-/* TTL in keyfiles allowed */
-#undef TTL_IN_KEYFILE_ALLOWED
-
-/* Use TREE data structure for dnssec-zkt */
-#undef USE_TREE
-
-/* ZKT copyright string */
-#undef ZKT_COPYRIGHT
-
-/* ZKT version string */
-#undef ZKT_VERSION
-
-/* Define to empty if `const' does not conform to ANSI C. */
-#undef const
-
-/* Define to `int' if <sys/types.h> doesn't define. */
-#undef gid_t
-
-/* Define to `unsigned int' if <sys/types.h> does not define. */
-#undef size_t
-
-/* Define to `unsigned char' if <sys/types.h> does not define. */
-#undef uchar
-
-/* Define to `int' if <sys/types.h> doesn't define. */
-#undef uid_t
-
-/* Define to `unsigned int' if <sys/types.h> does not define. */
-#undef uint
-
-/* Define to `unsigned long' if <sys/types.h> does not define. */
-#undef ulong
-
-/* Define to `unsigned short' if <sys/types.h> does not define. */
-#undef ushort
diff --git a/contrib/zkt-1.1.3/config_zkt.h b/contrib/zkt-1.1.3/config_zkt.h
deleted file mode 100644
index 76a5b5a3..00000000
--- a/contrib/zkt-1.1.3/config_zkt.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/*****************************************************************
-**
-** @(#) config_zkt.h -- config options for ZKT
-**
-** Copyright (c) Aug 2005, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-#ifndef CONFIG_ZKT_H
-# define CONFIG_ZKT_H
-
-/* don't change anything below this */
-/* the values here are determined or settable via the ./configure script */
-
-#ifndef HAS_UTYPES
-# define HAS_UTYPES 1
-#endif
-
-/* # define HAVE_TIMEGM 1 */
-/* # define HAVE_GETOPT_LONG 1 */
-/* # define HAVE_STRFTIME 1 */
-
-#ifndef COLOR_MODE
-# define COLOR_MODE 1
-#endif
-
-#ifndef TTL_IN_KEYFILE_ALLOWED
-# define TTL_IN_KEYFILE_ALLOWED 1
-#endif
-
-#ifndef PRINT_TIMEZONE
-# define PRINT_TIMEZONE 0
-#endif
-
-#ifndef PRINT_AGE_WITH_YEAR
-# define PRINT_AGE_WITH_YEAR 0
-#endif
-
-#ifndef LOG_WITH_PROGNAME
-# define LOG_WITH_PROGNAME 0
-#endif
-
-#ifndef LOG_WITH_TIMESTAMP
-# define LOG_WITH_TIMESTAMP 1
-#endif
-
-#ifndef LOG_WITH_LEVEL
-# define LOG_WITH_LEVEL 1
-#endif
-
-#ifndef ALWAYS_CHECK_KEYSETFILES
-# define ALWAYS_CHECK_KEYSETFILES 1
-#endif
-
-#ifndef ALLOW_ALWAYS_PREPUBLISH_ZSK
-# define ALLOW_ALWAYS_PREPUBLISH_ZSK 1
-#endif
-
-#ifndef CONFIG_PATH
-# define CONFIG_PATH "/var/named/"
-#endif
-
-/* tree usage is setable by configure script parameter */
-#ifndef USE_TREE
-# define USE_TREE 1
-#endif
-
-/* BIND version and utility path *must* be set by ./configure script */
-#ifndef BIND_UTIL_PATH
-# error ("BIND_UTIL_PATH not set. Please run configure with --enable-bind_util_path=");
-#endif
-#ifndef BIND_VERSION
-# define BIND_VERSION 980
-#endif
-
-#ifndef ZKT_VERSION
-# if defined(USE_TREE) && USE_TREE
-# define ZKT_VERSION "vT1.1.0 (c) Feb 2005 - Jan 2012 Holger Zuleger hznet.de"
-# else
-# define ZKT_VERSION "v1.1.0 (c) Feb 2005 - Jan 2012 Holger Zuleger hznet.de"
-# endif
-#endif
-
-
-#if !defined(HAS_UTYPES) || !HAS_UTYPES
-typedef unsigned long ulong;
-typedef unsigned int uint;
-typedef unsigned short ushort;
-typedef unsigned char uchar;
-#endif
-
-#endif
diff --git a/contrib/zkt-1.1.3/configure b/contrib/zkt-1.1.3/configure
deleted file mode 100755
index 07fa85a2..00000000
--- a/contrib/zkt-1.1.3/configure
+++ /dev/null
@@ -1,6078 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for ZKT 1.1.3.
-#
-# Report bugs to <Holger Zuleger hznet.de>.
-#
-#
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
-#
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# Use a proper internal environment variable to ensure we don't fall
- # into an infinite loop, continuously re-executing ourselves.
- if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
- _as_can_reexec=no; export _as_can_reexec;
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
- fi
- # We don't want this to propagate to other subprocesses.
- { _as_can_reexec=; unset _as_can_reexec;}
-if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '\${1+\"\$@\"}'='\"\$@\"'
- setopt NO_GLOB_SUBST
-else
- case \`(set -o) 2>/dev/null\` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-"
- as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
- exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
- as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
- as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
- eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
- test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
- as_have_required=yes
-else
- as_have_required=no
-fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- as_found=:
- case $as_dir in #(
- /*)
- for as_base in sh bash ksh sh5; do
- # Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
- CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
- break 2
-fi
-fi
- done;;
- esac
- as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
- if test "x$CONFIG_SHELL" != x; then :
- export CONFIG_SHELL
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
-fi
-
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
- else
- $as_echo "$0: Please tell bug-autoconf@gnu.org and Holger Zuleger
-$0: hznet.de about your system, including any error
-$0: possibly output before this message. Then install a
-$0: modern shell, or manually run the script under such a
-$0: shell if you do have one."
- fi
- exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-
- as_lineno_1=$LINENO as_lineno_1a=$LINENO
- as_lineno_2=$LINENO as_lineno_2a=$LINENO
- eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
- test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
- # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
- # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
- # already done that, so ensure we don't try to do so again and fall
- # in an infinite loop. This has already happened in practice.
- _as_can_reexec=no; export _as_can_reexec
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME='ZKT'
-PACKAGE_TARNAME='zkt'
-PACKAGE_VERSION='1.1.3'
-PACKAGE_STRING='ZKT 1.1.3'
-PACKAGE_BUGREPORT='Holger Zuleger hznet.de'
-PACKAGE_URL=''
-
-ac_unique_file="zkt-signer.c"
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-# endif
-#endif
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-# include <memory.h>
-# endif
-# include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-ac_header_list=
-ac_func_list=
-ac_subst_vars='LTLIBOBJS
-LIBOBJS
-EGREP
-GREP
-CPP
-SIGNZONE_PROG
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-enable_bind_util_path
-enable_color_mode
-with_curses
-enable_printtimezone
-enable_printyear
-enable_logprogname
-enable_logtimestamp
-enable_loglevel
-enable_ttl_in_keyfile
-enable_configpath
-enable_tree
-'
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CPP'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval $ac_prev=\$ac_option
- ac_prev=
- continue
- fi
-
- case $ac_option in
- *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *=) ac_optarg= ;;
- *) ac_optarg=yes ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir=$ac_optarg ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build_alias ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build_alias=$ac_optarg ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file=$ac_optarg ;;
-
- --config-cache | -C)
- cache_file=config.cache ;;
-
- -datadir | --datadir | --datadi | --datad)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=*)
- datadir=$ac_optarg ;;
-
- -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
- | --dataroo | --dataro | --datar)
- ac_prev=datarootdir ;;
- -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
- | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
- datarootdir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
- -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
- docdir=$ac_optarg ;;
-
- -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
- ac_prev=dvidir ;;
- -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
- dvidir=$ac_optarg ;;
-
- -enable-* | --enable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=\$ac_optarg ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix=$ac_optarg ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he | -h)
- ac_init_help=long ;;
- -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
- ac_init_help=recursive ;;
- -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
- ac_init_help=short ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host_alias ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host_alias=$ac_optarg ;;
-
- -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
- ac_prev=htmldir ;;
- -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
- | --ht=*)
- htmldir=$ac_optarg ;;
-
- -includedir | --includedir | --includedi | --included | --include \
- | --includ | --inclu | --incl | --inc)
- ac_prev=includedir ;;
- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
- | --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir=$ac_optarg ;;
-
- -infodir | --infodir | --infodi | --infod | --info | --inf)
- ac_prev=infodir ;;
- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir=$ac_optarg ;;
-
- -libdir | --libdir | --libdi | --libd)
- ac_prev=libdir ;;
- -libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir=$ac_optarg ;;
-
- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
- | --libexe | --libex | --libe)
- ac_prev=libexecdir ;;
- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
- | --libexe=* | --libex=* | --libe=*)
- libexecdir=$ac_optarg ;;
-
- -localedir | --localedir | --localedi | --localed | --locale)
- ac_prev=localedir ;;
- -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
- localedir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst | --locals)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
- localstatedir=$ac_optarg ;;
-
- -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
- ac_prev=mandir ;;
- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir=$ac_optarg ;;
-
- -nfp | --nfp | --nf)
- # Obsolete; use --without-fp.
- with_fp=no ;;
-
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c | -n)
- no_create=yes ;;
-
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
- no_recursion=yes ;;
-
- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
- | --oldin | --oldi | --old | --ol | --o)
- ac_prev=oldincludedir ;;
- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir=$ac_optarg ;;
-
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix=$ac_optarg ;;
-
- -program-prefix | --program-prefix | --program-prefi | --program-pref \
- | --program-pre | --program-pr | --program-p)
- ac_prev=program_prefix ;;
- -program-prefix=* | --program-prefix=* | --program-prefi=* \
- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix=$ac_optarg ;;
-
- -program-suffix | --program-suffix | --program-suffi | --program-suff \
- | --program-suf | --program-su | --program-s)
- ac_prev=program_suffix ;;
- -program-suffix=* | --program-suffix=* | --program-suffi=* \
- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix=$ac_optarg ;;
-
- -program-transform-name | --program-transform-name \
- | --program-transform-nam | --program-transform-na \
- | --program-transform-n | --program-transform- \
- | --program-transform | --program-transfor \
- | --program-transfo | --program-transf \
- | --program-trans | --program-tran \
- | --progr-tra | --program-tr | --program-t)
- ac_prev=program_transform_name ;;
- -program-transform-name=* | --program-transform-name=* \
- | --program-transform-nam=* | --program-transform-na=* \
- | --program-transform-n=* | --program-transform-=* \
- | --program-transform=* | --program-transfor=* \
- | --program-transfo=* | --program-transf=* \
- | --program-trans=* | --program-tran=* \
- | --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name=$ac_optarg ;;
-
- -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
- ac_prev=pdfdir ;;
- -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
- pdfdir=$ac_optarg ;;
-
- -psdir | --psdir | --psdi | --psd | --ps)
- ac_prev=psdir ;;
- -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
- psdir=$ac_optarg ;;
-
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- silent=yes ;;
-
- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
- ac_prev=sbindir ;;
- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
- | --sbi=* | --sb=*)
- sbindir=$ac_optarg ;;
-
- -sharedstatedir | --sharedstatedir | --sharedstatedi \
- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
- | --sharedst | --shareds | --shared | --share | --shar \
- | --sha | --sh)
- ac_prev=sharedstatedir ;;
- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
- | --sha=* | --sh=*)
- sharedstatedir=$ac_optarg ;;
-
- -site | --site | --sit)
- ac_prev=site ;;
- -site=* | --site=* | --sit=*)
- site=$ac_optarg ;;
-
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir=$ac_optarg ;;
-
- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
- | --syscon | --sysco | --sysc | --sys | --sy)
- ac_prev=sysconfdir ;;
- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir=$ac_optarg ;;
-
- -target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target_alias ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target_alias=$ac_optarg ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers | -V)
- ac_init_version=: ;;
-
- -with-* | --with-*)
- ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=\$ac_optarg ;;
-
- -without-* | --without-*)
- ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=no ;;
-
- --x)
- # Obsolete; use --with-x.
- with_x=yes ;;
-
- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
- | --x-incl | --x-inc | --x-in | --x-i)
- ac_prev=x_includes ;;
- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes=$ac_optarg ;;
-
- -x-libraries | --x-libraries | --x-librarie | --x-librari \
- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
- ac_prev=x_libraries ;;
- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries=$ac_optarg ;;
-
- -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- case $ac_envvar in #(
- '' | [0-9]* | *[!_$as_cr_alnum]* )
- as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
- esac
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
- : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- ac_option=--`echo $ac_prev | sed 's/_/-/g'`
- as_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
- case $enable_option_checking in
- no) ;;
- fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
- esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
-do
- eval ac_val=\$$ac_var
- # Remove trailing slashes.
- case $ac_val in
- */ )
- ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
- eval $ac_var=\$ac_val;;
- esac
- # Be sure to have absolute directory names.
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
- esac
- as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
- if test "x$build_alias" = x; then
- cross_compiling=maybe
- elif test "x$build_alias" != "x$host_alias"; then
- cross_compiling=yes
- fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- as_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- as_fn_error $? "pwd does not report name of working directory"
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
- ac_srcdir_defaulted=yes
- # Try the directory containing this script, then the parent directory.
- ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_myself" : 'X\(//\)[^/]' \| \
- X"$as_myself" : 'X\(//\)$' \| \
- X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- srcdir=$ac_confdir
- if test ! -r "$srcdir/$ac_unique_file"; then
- srcdir=..
- fi
-else
- ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
- pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
- srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
- eval ac_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_env_${ac_var}_value=\$${ac_var}
- eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat <<_ACEOF
-\`configure' configures ZKT 1.1.3 to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE. See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
- -h, --help display this help and exit
- --help=short display options specific to this package
- --help=recursive display the short help of all the included packages
- -V, --version display version information and exit
- -q, --quiet, --silent do not print \`checking ...' messages
- --cache-file=FILE cache test results in FILE [disabled]
- -C, --config-cache alias for \`--cache-file=config.cache'
- -n, --no-create do not create output files
- --srcdir=DIR find the sources in DIR [configure dir or \`..']
-
-Installation directories:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc [/usr/include]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/zkt]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_ACEOF
-
- cat <<\_ACEOF
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
- case $ac_init_help in
- short | recursive ) echo "Configuration of ZKT 1.1.3:";;
- esac
- cat <<\_ACEOF
-
-Optional Features:
- --disable-option-checking ignore unrecognized --enable/--with options
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --enable-bind_util_path=PATH
- Define path to BIND utilities, default is path to
- dnssec-signzone
- --disable-color-mode zkt without colors
- --enable-print-timezone print out timezone
- --enable-print-age print age with year
- --enable-log-progname log with progname
- --disable-log-timestamp do not log with timestamp
- --disable-log-level do not log with level
- --disable-ttl-in-keyfiles
- do not allow TTL values in keyfiles
- --enable-configpath=PATH
- set path of config file (defaults to /var/named)
- --disable-tree use single linked list instead of binary tree data
- structure for dnssec-zkt
-
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --without-curses Ignore presence of curses and disable color mode
-
-Some influential environment variables:
- CC C compiler command
- CFLAGS C compiler flags
- LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
- nonstandard directory <lib dir>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
- CPP C preprocessor
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to <Holger Zuleger hznet.de>.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" ||
- { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
- continue
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
- cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
- if test -f "$ac_srcdir/configure.gnu"; then
- echo &&
- $SHELL "$ac_srcdir/configure.gnu" --help=recursive
- elif test -f "$ac_srcdir/configure"; then
- echo &&
- $SHELL "$ac_srcdir/configure" --help=recursive
- else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
- done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
- cat <<\_ACEOF
-ZKT configure 1.1.3
-generated by GNU Autoconf 2.69
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
- exit
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
- if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_compile
-
-# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
-# -------------------------------------------
-# Tests whether TYPE exists after having included INCLUDES, setting cache
-# variable VAR accordingly.
-ac_fn_c_check_type ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- eval "$3=no"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-if (sizeof ($2))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-if (sizeof (($2)))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- eval "$3=yes"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_type
-
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } > conftest.i && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then :
- ac_retval=0
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=$ac_status
-fi
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_run
-
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- eval "$3=yes"
-else
- eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_compile
-
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext conftest$ac_exeext
- if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- test -x conftest$ac_exeext
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
- # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
- # interfere with the next link command; also delete a directory that is
- # left behind by Apple's compiler. We do this before executing the actions.
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_link
-
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if eval \${$3+:} false; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
- # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_header_compiler=yes
-else
- ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- ac_header_preproc=yes
-else
- ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
- yes:no: )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
- no:yes:* )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-( $as_echo "## -------------------------------------- ##
-## Report this to Holger Zuleger hznet.de ##
-## -------------------------------------- ##"
- ) | sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_mongrel
-
-# ac_fn_c_check_func LINENO FUNC VAR
-# ----------------------------------
-# Tests whether FUNC exists, setting the cache variable VAR accordingly
-ac_fn_c_check_func ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $2 innocuous_$2
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $2 (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $2
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $2 ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_$2 || defined __stub___$2
-choke me
-#endif
-
-int
-main ()
-{
-return $2 ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- eval "$3=yes"
-else
- eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_func
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by ZKT $as_me 1.1.3, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
-
-/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
-/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
-/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
- done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
- for ac_arg
- do
- case $ac_arg in
- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- continue ;;
- *\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
- 2)
- as_fn_append ac_configure_args1 " '$ac_arg'"
- if test $ac_must_keep_next = true; then
- ac_must_keep_next=false # Got value, back to normal.
- else
- case $ac_arg in
- *=* | --config-cache | -C | -disable-* | --disable-* \
- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
- | -with-* | --with-* | -without-* | --without-* | --x)
- case "$ac_configure_args0 " in
- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
- esac
- ;;
- -* ) ac_must_keep_next=true ;;
- esac
- fi
- as_fn_append ac_configure_args " '$ac_arg'"
- ;;
- esac
- done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset ac_configure_args1;}
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log. We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
- echo
- # The following way of writing the cache mishandles newlines in values,
-(
- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
- (set) 2>&1 |
- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- sed -n \
- "s/'\''/'\''\\\\'\'''\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
- ;; #(
- *)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-)
- echo
-
- $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
- echo
- cat confdefs.h
- echo
- fi
- test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
-elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
-else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
- fi
-done
-
-if test -r "$cache_file"; then
- # Some versions of bash will fail to source /dev/null (special files
- # actually), so we avoid doing that. DJGPP emulates it as a regular file.
- if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
- esac
- fi
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
- >$cache_file
-fi
-
-as_fn_append ac_header_list " sys/time.h"
-as_fn_append ac_header_list " unistd.h"
-as_fn_append ac_func_list " alarm"
-as_fn_append ac_header_list " utime.h"
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
- eval ac_old_set=\$ac_cv_env_${ac_var}_set
- eval ac_new_set=\$ac_env_${ac_var}_set
- eval ac_old_val=\$ac_cv_env_${ac_var}_value
- eval ac_new_val=\$ac_env_${ac_var}_value
- case $ac_old_set,$ac_new_set in
- set,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,);;
- *)
- if test "x$ac_old_val" != "x$ac_new_val"; then
- # differences in whitespace do not lead to failure.
- ac_old_val_w=`echo x $ac_old_val`
- ac_new_val_w=`echo x $ac_new_val`
- if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- ac_cache_corrupted=:
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
- eval $ac_var=\$ac_old_val
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
- *) ac_arg=$ac_var=$ac_new_val ;;
- esac
- case " $ac_configure_args " in
- *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
- *) as_fn_append ac_configure_args " '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-### Files to test to check if src dir contains the package
-
-ac_config_headers="$ac_config_headers config.h"
-
-
-
-### Checks for programs.
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-else
- CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- fi
-fi
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# != 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- fi
- rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
- break;;
- * )
- break;;
- esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
- ac_file=''
-fi
-if test -z "$ac_file"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
-done
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
- { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if { ac_try='./conftest$ac_cv_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-else
- CFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-### find out the path to BIND utils and version
-# Check whether --enable-bind_util_path was given.
-if test "${enable_bind_util_path+set}" = set; then :
- enableval=$enable_bind_util_path; bind_util_path=$enableval
-fi
-
-if test -n "$bind_util_path"
-then
- if test -x "$bind_util_path/dnssec-signzone"
- then
- { $as_echo "$as_me:${as_lineno-$LINENO}: BIND utilities path successfully set to $bind_util_path." >&5
-$as_echo "$as_me: BIND utilities path successfully set to $bind_util_path." >&6;}
- SIGNZONE_PROG=$bind_util_path/dnssec-signzone
- else
- as_fn_error $? "*** 'BIND utility not found in $bind_util_path, please use --enable-bind_util_path= to set it manually' ***" "$LINENO" 5
- fi
-else
- # Extract the first word of "dnssec-signzone", so it can be a program name with args.
-set dummy dnssec-signzone; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_SIGNZONE_PROG+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $SIGNZONE_PROG in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_SIGNZONE_PROG="$SIGNZONE_PROG" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_SIGNZONE_PROG="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-SIGNZONE_PROG=$ac_cv_path_SIGNZONE_PROG
-if test -n "$SIGNZONE_PROG"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SIGNZONE_PROG" >&5
-$as_echo "$SIGNZONE_PROG" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: BIND utility $SIGNZONE_PROG found" >&5
-$as_echo "$as_me: BIND utility $SIGNZONE_PROG found" >&6;}
- if test -n "$SIGNZONE_PROG"
- then
- bind_util_path=`dirname "$SIGNZONE_PROG"`
- { $as_echo "$as_me:${as_lineno-$LINENO}: BIND utilities path automatically set to $bind_util_path." >&5
-$as_echo "$as_me: BIND utilities path automatically set to $bind_util_path." >&6;}
- else
- as_fn_error $? "*** 'could not determine BIND utility path, please use --enable-bind_util_path= ' to set it manually ***" "$LINENO" 5
- fi
-fi
-### By now, we have a path. We'll use it.
-# define BIND_UTIL_PATH in config.h.in
-
-cat >>confdefs.h <<_ACEOF
-#define BIND_UTIL_PATH "$bind_util_path/"
-_ACEOF
-
-
-# define BIND_VERSION in config.h.in
-bind_version=`$SIGNZONE_PROG 2>&1 | awk -F: '/^Version:/ { split ($2, v, "."); printf ("%2d%02d%02d\n", atoi (v[1]), atoi (v[2]), atoi (v[3])); };'`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: BIND_VERSION string set to $bind_version." >&5
-$as_echo "$as_me: BIND_VERSION string set to $bind_version." >&6;}
-
-cat >>confdefs.h <<_ACEOF
-#define BIND_VERSION $bind_version
-_ACEOF
-
-if test $bind_version -lt "90800"
-then
- as_fn_error $? "*** 'This version of ZKT requires a BIND version greater 9.7' ***" "$LINENO" 5
-fi
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if ${ac_cv_prog_CPP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
- break
-fi
-
- done
- ac_cv_prog_CPP=$CPP
-
-fi
- CPP=$ac_cv_prog_CPP
-else
- ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -z "$GREP"; then
- ac_path_GREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'GREP' >> "conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_GREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_GREP="$ac_path_GREP"
- ac_path_GREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_GREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_GREP"; then
- as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
- then ac_cv_path_EGREP="$GREP -E"
- else
- if test -z "$EGREP"; then
- ac_path_EGREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in egrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
- # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'EGREP' >> "conftest.nl"
- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_EGREP="$ac_path_EGREP"
- ac_path_EGREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_EGREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_EGREP"; then
- as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_EGREP=$EGREP
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then :
- :
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-ac_fn_c_check_type "$LINENO" "uint" "ac_cv_type_uint" "$ac_includes_default"
-if test "x$ac_cv_type_uint" = xyes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define uint unsigned int
-_ACEOF
-
-fi
-
-ac_fn_c_check_type "$LINENO" "ulong" "ac_cv_type_ulong" "$ac_includes_default"
-if test "x$ac_cv_type_ulong" = xyes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define ulong unsigned long
-_ACEOF
-
-fi
-
-ac_fn_c_check_type "$LINENO" "ushort" "ac_cv_type_ushort" "$ac_includes_default"
-if test "x$ac_cv_type_ushort" = xyes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define ushort unsigned short
-_ACEOF
-
-fi
-
-ac_fn_c_check_type "$LINENO" "uchar" "ac_cv_type_uchar" "$ac_includes_default"
-if test "x$ac_cv_type_uchar" = xyes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define uchar unsigned char
-_ACEOF
-
-fi
-
-
-### define configure arguments
-# Check whether --enable-color_mode was given.
-if test "${enable_color_mode+set}" = set; then :
- enableval=$enable_color_mode;
-fi
-
-color_mode=1
-if test "$enable_color_mode" = "no"; then :
- color_mode=0
-fi
-
-
-# Check whether --with-curses was given.
-if test "${with_curses+set}" = set; then :
- withval=$with_curses;
-fi
-
-
-if test "x$with_curses" != "xno"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncurses" >&5
-$as_echo_n "checking for tgetent in -lncurses... " >&6; }
-if ${ac_cv_lib_ncurses_tgetent+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lncurses $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char tgetent ();
-int
-main ()
-{
-return tgetent ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_ncurses_tgetent=yes
-else
- ac_cv_lib_ncurses_tgetent=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncurses_tgetent" >&5
-$as_echo "$ac_cv_lib_ncurses_tgetent" >&6; }
-if test "x$ac_cv_lib_ncurses_tgetent" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBNCURSES 1
-_ACEOF
-
- LIBS="-lncurses $LIBS"
-
-fi
-
-else
- HAVE_LIB_NCURSES=0; color_mode=0
-fi
-
-
-cat >>confdefs.h <<_ACEOF
-#define COLOR_MODE $color_mode
-_ACEOF
-
-
-
-# Check whether --enable-printtimezone was given.
-if test "${enable_printtimezone+set}" = set; then :
- enableval=$enable_printtimezone;
-fi
-
-printtimezone=0
-if test "$enable_printtimezone" = "yes"; then :
- printtimezone=1
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define PRINT_TIMEZONE $printtimezone
-_ACEOF
-
-
-# Check whether --enable-printyear was given.
-if test "${enable_printyear+set}" = set; then :
- enableval=$enable_printyear;
-fi
-
-printyear=0
-if test "$enable_printyear" = "yes"; then :
- printyear=1
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define PRINT_AGE_WITH_YEAR $printyear
-_ACEOF
-
-
-# Check whether --enable-logprogname was given.
-if test "${enable_logprogname+set}" = set; then :
- enableval=$enable_logprogname;
-fi
-
-logprogname=0
-if test "$enable_logprogname" = "yes"; then :
- logprogname=1
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define LOG_WITH_PROGNAME $logprogname
-_ACEOF
-
-
-# Check whether --enable-logtimestamp was given.
-if test "${enable_logtimestamp+set}" = set; then :
- enableval=$enable_logtimestamp;
-fi
-
-logtimestamp=1
-if test "$enable_logtimestamp" = "no"; then :
- logtimestamp=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define LOG_WITH_TIMESTAMP $logtimestamp
-_ACEOF
-
-
-# Check whether --enable-loglevel was given.
-if test "${enable_loglevel+set}" = set; then :
- enableval=$enable_loglevel;
-fi
-
-loglevel=1
-if test "$enable_loglevel" = "no"; then :
- loglevel=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define LOG_WITH_LEVEL $loglevel
-_ACEOF
-
-
-# Check whether --enable-ttl_in_keyfile was given.
-if test "${enable_ttl_in_keyfile+set}" = set; then :
- enableval=$enable_ttl_in_keyfile;
-fi
-
-ttl_in_keyfile=1
-if test "$enable_ttl_in_keyfile" = "no"; then :
- ttl_in_keyfile=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define TTL_IN_KEYFILE_ALLOWED $ttl_in_keyfile
-_ACEOF
-
-
-configpath="/var/named"
-# Check whether --enable-configpath was given.
-if test "${enable_configpath+set}" = set; then :
- enableval=$enable_configpath; configpath=$enableval
-fi
-
-case "$configpath" in
-yes)
- configpath="/var/named"
- ;;
-no)
- configpath=""
- ;;
-*)
- ;;
-esac
-
-cat >>confdefs.h <<_ACEOF
-#define CONFIG_PATH "$configpath/"
-_ACEOF
-
-
-usetree=1
-t=""
-# Check whether --enable-tree was given.
-if test "${enable_tree+set}" = set; then :
- enableval=$enable_tree; usetree=$enableval
-fi
-
-if test "$usetree" = no
-then
- usetree=0
- t="S"
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define USE_TREE $usetree
-_ACEOF
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define ZKT_VERSION "$t$PACKAGE_VERSION"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define ZKT_COPYRIGHT "(c) Feb 2005 - Nov 2012 Holger Zuleger hznet.de"
-_ACEOF
-
-
-### Checks for libraries.
-
-### Checks for header files.
-ac_header_dirent=no
-for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
- as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5
-$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; }
-if eval \${$as_ac_Header+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <$ac_hdr>
-
-int
-main ()
-{
-if ((DIR *) 0)
-return 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- eval "$as_ac_Header=yes"
-else
- eval "$as_ac_Header=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$as_ac_Header
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
-_ACEOF
-
-ac_header_dirent=$ac_hdr; break
-fi
-
-done
-# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
-if test $ac_header_dirent = dirent.h; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
-$as_echo_n "checking for library containing opendir... " >&6; }
-if ${ac_cv_search_opendir+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char opendir ();
-int
-main ()
-{
-return opendir ();
- ;
- return 0;
-}
-_ACEOF
-for ac_lib in '' dir; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_opendir=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- if ${ac_cv_search_opendir+:} false; then :
- break
-fi
-done
-if ${ac_cv_search_opendir+:} false; then :
-
-else
- ac_cv_search_opendir=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
-$as_echo "$ac_cv_search_opendir" >&6; }
-ac_res=$ac_cv_search_opendir
-if test "$ac_res" != no; then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
-$as_echo_n "checking for library containing opendir... " >&6; }
-if ${ac_cv_search_opendir+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char opendir ();
-int
-main ()
-{
-return opendir ();
- ;
- return 0;
-}
-_ACEOF
-for ac_lib in '' x; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_opendir=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- if ${ac_cv_search_opendir+:} false; then :
- break
-fi
-done
-if ${ac_cv_search_opendir+:} false; then :
-
-else
- ac_cv_search_opendir=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
-$as_echo "$ac_cv_search_opendir" >&6; }
-ac_res=$ac_cv_search_opendir
-if test "$ac_res" != no; then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then :
- :
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-for ac_header in fcntl.h netdb.h stdlib.h getopt.h string.h strings.h sys/socket.h sys/time.h sys/types.h syslog.h unistd.h utime.h term.h curses.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-### Checks for typedefs, structures, and compiler characteristics.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
-$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if ${ac_cv_c_const+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
-#ifndef __cplusplus
- /* Ultrix mips cc rejects this sort of thing. */
- typedef int charset[2];
- const charset cs = { 0, 0 };
- /* SunOS 4.1.1 cc rejects this. */
- char const *const *pcpcc;
- char **ppc;
- /* NEC SVR4.0.2 mips cc rejects this. */
- struct point {int x, y;};
- static struct point const zero = {0,0};
- /* AIX XL C 1.02.0.0 rejects this.
- It does not let you subtract one const X* pointer from another in
- an arm of an if-expression whose if-part is not a constant
- expression */
- const char *g = "string";
- pcpcc = &g + (g ? g-g : 0);
- /* HPUX 7.0 cc rejects these. */
- ++pcpcc;
- ppc = (char**) pcpcc;
- pcpcc = (char const *const *) ppc;
- { /* SCO 3.2v4 cc rejects this sort of thing. */
- char tx;
- char *t = &tx;
- char const *s = 0 ? (char *) 0 : (char const *) 0;
-
- *t++ = 0;
- if (s) return 0;
- }
- { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
- int x[] = {25, 17};
- const int *foo = &x[0];
- ++foo;
- }
- { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
- typedef const int *iptr;
- iptr p = 0;
- ++p;
- }
- { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
- "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
- struct s { int j; const int *ap[3]; } bx;
- struct s *b = &bx; b->j = 5;
- }
- { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
- const int foo = 10;
- if (!foo) return 0;
- }
- return !cs[0] && !zero.x;
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_const=yes
-else
- ac_cv_c_const=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
-$as_echo "$ac_cv_c_const" >&6; }
-if test $ac_cv_c_const = no; then
-
-$as_echo "#define const /**/" >>confdefs.h
-
-fi
-
-ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = xyes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define size_t unsigned int
-_ACEOF
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
-$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
-if ${ac_cv_header_time+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <sys/time.h>
-#include <time.h>
-
-int
-main ()
-{
-if ((struct tm *) 0)
-return 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_time=yes
-else
- ac_cv_header_time=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5
-$as_echo "$ac_cv_header_time" >&6; }
-if test $ac_cv_header_time = yes; then
-
-$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5
-$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; }
-if ${ac_cv_struct_tm+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <time.h>
-
-int
-main ()
-{
-struct tm tm;
- int *p = &tm.tm_sec;
- return !p;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_struct_tm=time.h
-else
- ac_cv_struct_tm=sys/time.h
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5
-$as_echo "$ac_cv_struct_tm" >&6; }
-if test $ac_cv_struct_tm = sys/time.h; then
-
-$as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5
-$as_echo_n "checking for uid_t in sys/types.h... " >&6; }
-if ${ac_cv_type_uid_t+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "uid_t" >/dev/null 2>&1; then :
- ac_cv_type_uid_t=yes
-else
- ac_cv_type_uid_t=no
-fi
-rm -f conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5
-$as_echo "$ac_cv_type_uid_t" >&6; }
-if test $ac_cv_type_uid_t = no; then
-
-$as_echo "#define uid_t int" >>confdefs.h
-
-
-$as_echo "#define gid_t int" >>confdefs.h
-
-fi
-
-
-
-### Checks for library functions.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether closedir returns void" >&5
-$as_echo_n "checking whether closedir returns void... " >&6; }
-if ${ac_cv_func_closedir_void+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- ac_cv_func_closedir_void=yes
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_includes_default
-#include <$ac_header_dirent>
-#ifndef __cplusplus
-int closedir ();
-#endif
-
-int
-main ()
-{
-return closedir (opendir (".")) != 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_func_closedir_void=no
-else
- ac_cv_func_closedir_void=yes
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_closedir_void" >&5
-$as_echo "$ac_cv_func_closedir_void" >&6; }
-if test $ac_cv_func_closedir_void = yes; then
-
-$as_echo "#define CLOSEDIR_VOID 1" >>confdefs.h
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5
-$as_echo_n "checking for error_at_line... " >&6; }
-if ${ac_cv_lib_error_at_line+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <error.h>
-int
-main ()
-{
-error_at_line (0, 0, "", 0, "an error occurred");
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_error_at_line=yes
-else
- ac_cv_lib_error_at_line=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_error_at_line" >&5
-$as_echo "$ac_cv_lib_error_at_line" >&6; }
-if test $ac_cv_lib_error_at_line = no; then
- case " $LIBOBJS " in
- *" error.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS error.$ac_objext"
- ;;
-esac
-
-fi
-
-
-
-
- for ac_header in $ac_header_list
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-
-
-
-
-
- for ac_func in $ac_func_list
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mktime" >&5
-$as_echo_n "checking for working mktime... " >&6; }
-if ${ac_cv_func_working_mktime+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- ac_cv_func_working_mktime=no
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Test program from Paul Eggert and Tony Leneis. */
-#ifdef TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# ifdef HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-#endif
-
-#include <limits.h>
-#include <stdlib.h>
-
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#ifndef HAVE_ALARM
-# define alarm(X) /* empty */
-#endif
-
-/* Work around redefinition to rpl_putenv by other config tests. */
-#undef putenv
-
-static time_t time_t_max;
-static time_t time_t_min;
-
-/* Values we'll use to set the TZ environment variable. */
-static const char *tz_strings[] = {
- (const char *) 0, "TZ=GMT0", "TZ=JST-9",
- "TZ=EST+3EDT+2,M10.1.0/00:00:00,M2.3.0/00:00:00"
-};
-#define N_STRINGS (sizeof (tz_strings) / sizeof (tz_strings[0]))
-
-/* Return 0 if mktime fails to convert a date in the spring-forward gap.
- Based on a problem report from Andreas Jaeger. */
-static int
-spring_forward_gap ()
-{
- /* glibc (up to about 1998-10-07) failed this test. */
- struct tm tm;
-
- /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0"
- instead of "TZ=America/Vancouver" in order to detect the bug even
- on systems that don't support the Olson extension, or don't have the
- full zoneinfo tables installed. */
- putenv ((char*) "TZ=PST8PDT,M4.1.0,M10.5.0");
-
- tm.tm_year = 98;
- tm.tm_mon = 3;
- tm.tm_mday = 5;
- tm.tm_hour = 2;
- tm.tm_min = 0;
- tm.tm_sec = 0;
- tm.tm_isdst = -1;
- return mktime (&tm) != (time_t) -1;
-}
-
-static int
-mktime_test1 (time_t now)
-{
- struct tm *lt;
- return ! (lt = localtime (&now)) || mktime (lt) == now;
-}
-
-static int
-mktime_test (time_t now)
-{
- return (mktime_test1 (now)
- && mktime_test1 ((time_t) (time_t_max - now))
- && mktime_test1 ((time_t) (time_t_min + now)));
-}
-
-static int
-irix_6_4_bug ()
-{
- /* Based on code from Ariel Faigon. */
- struct tm tm;
- tm.tm_year = 96;
- tm.tm_mon = 3;
- tm.tm_mday = 0;
- tm.tm_hour = 0;
- tm.tm_min = 0;
- tm.tm_sec = 0;
- tm.tm_isdst = -1;
- mktime (&tm);
- return tm.tm_mon == 2 && tm.tm_mday == 31;
-}
-
-static int
-bigtime_test (int j)
-{
- struct tm tm;
- time_t now;
- tm.tm_year = tm.tm_mon = tm.tm_mday = tm.tm_hour = tm.tm_min = tm.tm_sec = j;
- now = mktime (&tm);
- if (now != (time_t) -1)
- {
- struct tm *lt = localtime (&now);
- if (! (lt
- && lt->tm_year == tm.tm_year
- && lt->tm_mon == tm.tm_mon
- && lt->tm_mday == tm.tm_mday
- && lt->tm_hour == tm.tm_hour
- && lt->tm_min == tm.tm_min
- && lt->tm_sec == tm.tm_sec
- && lt->tm_yday == tm.tm_yday
- && lt->tm_wday == tm.tm_wday
- && ((lt->tm_isdst < 0 ? -1 : 0 < lt->tm_isdst)
- == (tm.tm_isdst < 0 ? -1 : 0 < tm.tm_isdst))))
- return 0;
- }
- return 1;
-}
-
-static int
-year_2050_test ()
-{
- /* The correct answer for 2050-02-01 00:00:00 in Pacific time,
- ignoring leap seconds. */
- unsigned long int answer = 2527315200UL;
-
- struct tm tm;
- time_t t;
- tm.tm_year = 2050 - 1900;
- tm.tm_mon = 2 - 1;
- tm.tm_mday = 1;
- tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
- tm.tm_isdst = -1;
-
- /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0"
- instead of "TZ=America/Vancouver" in order to detect the bug even
- on systems that don't support the Olson extension, or don't have the
- full zoneinfo tables installed. */
- putenv ((char*) "TZ=PST8PDT,M4.1.0,M10.5.0");
-
- t = mktime (&tm);
-
- /* Check that the result is either a failure, or close enough
- to the correct answer that we can assume the discrepancy is
- due to leap seconds. */
- return (t == (time_t) -1
- || (0 < t && answer - 120 <= t && t <= answer + 120));
-}
-
-int
-main ()
-{
- time_t t, delta;
- int i, j;
-
- /* This test makes some buggy mktime implementations loop.
- Give up after 60 seconds; a mktime slower than that
- isn't worth using anyway. */
- alarm (60);
-
- for (;;)
- {
- t = (time_t_max << 1) + 1;
- if (t <= time_t_max)
- break;
- time_t_max = t;
- }
- time_t_min = - ((time_t) ~ (time_t) 0 == (time_t) -1) - time_t_max;
-
- delta = time_t_max / 997; /* a suitable prime number */
- for (i = 0; i < N_STRINGS; i++)
- {
- if (tz_strings[i])
- putenv ((char*) tz_strings[i]);
-
- for (t = 0; t <= time_t_max - delta; t += delta)
- if (! mktime_test (t))
- return 1;
- if (! (mktime_test ((time_t) 1)
- && mktime_test ((time_t) (60 * 60))
- && mktime_test ((time_t) (60 * 60 * 24))))
- return 1;
-
- for (j = 1; ; j <<= 1)
- if (! bigtime_test (j))
- return 1;
- else if (INT_MAX / 2 < j)
- break;
- if (! bigtime_test (INT_MAX))
- return 1;
- }
- return ! (irix_6_4_bug () && spring_forward_gap () && year_2050_test ());
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_func_working_mktime=yes
-else
- ac_cv_func_working_mktime=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_working_mktime" >&5
-$as_echo "$ac_cv_func_working_mktime" >&6; }
-if test $ac_cv_func_working_mktime = no; then
- case " $LIBOBJS " in
- *" mktime.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS mktime.$ac_objext"
- ;;
-esac
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5
-$as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; }
-if ${ac_cv_func_lstat_dereferences_slashed_symlink+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- rm -f conftest.sym conftest.file
-echo >conftest.file
-if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then
- if test "$cross_compiling" = yes; then :
- ac_cv_func_lstat_dereferences_slashed_symlink=no
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-struct stat sbuf;
- /* Linux will dereference the symlink and fail, as required by POSIX.
- That is better in the sense that it means we will not
- have to compile and use the lstat wrapper. */
- return lstat ("conftest.sym/", &sbuf) == 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_func_lstat_dereferences_slashed_symlink=yes
-else
- ac_cv_func_lstat_dereferences_slashed_symlink=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-else
- # If the `ln -s' command failed, then we probably don't even
- # have an lstat function.
- ac_cv_func_lstat_dereferences_slashed_symlink=no
-fi
-rm -f conftest.sym conftest.file
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5
-$as_echo "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; }
-
-test $ac_cv_func_lstat_dereferences_slashed_symlink = yes &&
-
-cat >>confdefs.h <<_ACEOF
-#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1
-_ACEOF
-
-
-if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then
- case " $LIBOBJS " in
- *" lstat.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS lstat.$ac_objext"
- ;;
-esac
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat accepts an empty string" >&5
-$as_echo_n "checking whether stat accepts an empty string... " >&6; }
-if ${ac_cv_func_stat_empty_string_bug+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- ac_cv_func_stat_empty_string_bug=yes
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-struct stat sbuf;
- return stat ("", &sbuf) == 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_func_stat_empty_string_bug=no
-else
- ac_cv_func_stat_empty_string_bug=yes
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_stat_empty_string_bug" >&5
-$as_echo "$ac_cv_func_stat_empty_string_bug" >&6; }
-if test $ac_cv_func_stat_empty_string_bug = yes; then
- case " $LIBOBJS " in
- *" stat.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS stat.$ac_objext"
- ;;
-esac
-
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STAT_EMPTY_STRING_BUG 1
-_ACEOF
-
-fi
-
-for ac_func in strftime
-do :
- ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime"
-if test "x$ac_cv_func_strftime" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_STRFTIME 1
-_ACEOF
-
-else
- # strftime is in -lintl on SCO UNIX.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for strftime in -lintl" >&5
-$as_echo_n "checking for strftime in -lintl... " >&6; }
-if ${ac_cv_lib_intl_strftime+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lintl $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char strftime ();
-int
-main ()
-{
-return strftime ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_intl_strftime=yes
-else
- ac_cv_lib_intl_strftime=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_strftime" >&5
-$as_echo "$ac_cv_lib_intl_strftime" >&6; }
-if test "x$ac_cv_lib_intl_strftime" = xyes; then :
- $as_echo "#define HAVE_STRFTIME 1" >>confdefs.h
-
-LIBS="-lintl $LIBS"
-fi
-
-fi
-done
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether utime accepts a null argument" >&5
-$as_echo_n "checking whether utime accepts a null argument... " >&6; }
-if ${ac_cv_func_utime_null+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- rm -f conftest.data; >conftest.data
-# Sequent interprets utime(file, 0) to mean use start of epoch. Wrong.
-if test "$cross_compiling" = yes; then :
- ac_cv_func_utime_null='guessing yes'
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_includes_default
- #ifdef HAVE_UTIME_H
- # include <utime.h>
- #endif
-int
-main ()
-{
-struct stat s, t;
- return ! (stat ("conftest.data", &s) == 0
- && utime ("conftest.data", 0) == 0
- && stat ("conftest.data", &t) == 0
- && t.st_mtime >= s.st_mtime
- && t.st_mtime - s.st_mtime < 120);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_func_utime_null=yes
-else
- ac_cv_func_utime_null=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_utime_null" >&5
-$as_echo "$ac_cv_func_utime_null" >&6; }
-if test "x$ac_cv_func_utime_null" != xno; then
- ac_cv_func_utime_null=yes
-
-$as_echo "#define HAVE_UTIME_NULL 1" >>confdefs.h
-
-fi
-rm -f conftest.data
-
-for ac_func in vprintf
-do :
- ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf"
-if test "x$ac_cv_func_vprintf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_VPRINTF 1
-_ACEOF
-
-ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt"
-if test "x$ac_cv_func__doprnt" = xyes; then :
-
-$as_echo "#define HAVE_DOPRNT 1" >>confdefs.h
-
-fi
-
-fi
-done
-
-
-# 2008-07-04 getopt_long added
-# 2009-07-30 timegm added
-for ac_func in getopt_long gettimeofday memset putenv socket strcasecmp strchr strdup strerror strncasecmp strrchr tzset utime getuid timegm
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-
-ac_config_files="$ac_config_files Makefile"
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems. If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
- for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
-
- (set) 2>&1 |
- case $as_nl`(ac_space=' '; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- # `set' does not quote correctly, so add quotes: double-quote
- # substitution turns \\\\ into \\, and sed turns \\ into \.
- sed -n \
- "s/'/'\\\\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
- ;; #(
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
- if test ! -f "$cache_file" || test -h "$cache_file"; then
- cat confcache >"$cache_file"
- else
- case $cache_file in #(
- */* | ?:*)
- mv -f confcache "$cache_file"$$ &&
- mv -f "$cache_file"$$ "$cache_file" ;; #(
- *)
- mv -f confcache "$cache_file" ;;
- esac
- fi
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
- fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-
-SHELL=\${CONFIG_SHELL-$SHELL}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by ZKT $as_me 1.1.3, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-case $ac_config_headers in *"
-"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
-esac
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_headers="$ac_config_headers"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration. Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- --config print configuration, then exit
- -q, --quiet, --silent
- do not print progress messages
- -d, --debug don't remove temporary files
- --recheck update $as_me by reconfiguring in the same conditions
- --file=FILE[:TEMPLATE]
- instantiate the configuration file FILE
- --header=FILE[:TEMPLATE]
- instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Report bugs to <Holger Zuleger hznet.de>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-ZKT config.status 1.1.3
-configured by $0, generated by GNU Autoconf 2.69,
- with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
- case $1 in
- --*=?*)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
- ac_shift=:
- ;;
- --*=)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=
- ac_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
- --config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- '') as_fn_error $? "missing file argument" ;;
- esac
- as_fn_append CONFIG_FILES " '$ac_optarg'"
- ac_need_defaults=false;;
- --header | --heade | --head | --hea )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- as_fn_append CONFIG_HEADERS " '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h)
- # Conflict between --help and --header
- as_fn_error $? "ambiguous option: \`$1'
-Try \`$0 --help' for more information.";;
- --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
- *) as_fn_append ac_config_targets " $1"
- ac_need_defaults=false ;;
-
- esac
- shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
- exec 6>/dev/null
- ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
- set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
- shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
- CONFIG_SHELL='$SHELL'
- export CONFIG_SHELL
- exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
- $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-
- *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
- esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used. Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
- test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
- tmp= ac_tmp=
- trap 'exit_status=$?
- : "${ac_tmp:=$tmp}"
- { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
- trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
- eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
- ac_cs_awk_cr='\\r'
-else
- ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
- echo "cat >conf$$subs.awk <<_ACEOF" &&
- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
- echo "_ACEOF"
-} >conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- . ./conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
- ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
- if test $ac_delim_n = $ac_delim_num; then
- break
- elif $ac_last_try; then
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
- N
- s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
- for (key in S) S_is_set[key] = 1
- FS = ""
-
-}
-{
- line = $ 0
- nfields = split(line, field, "@")
- substed = 0
- len = length(field[1])
- for (i = 2; i < nfields; i++) {
- key = field[i]
- keylen = length(key)
- if (S_is_set[key]) {
- value = S[key]
- line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
- len += length(value) + length(field[++i])
- substed = 1
- } else
- len += 1 + keylen
- }
-
- print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
- sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
- cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
- || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
-h
-s///
-s/^/:/
-s/[ ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[ ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[ ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-_ACEOF
-
-# Transform confdefs.h into an awk script `defines.awk', embedded as
-# here-document in config.status, that substitutes the proper values into
-# config.h.in to produce config.h.
-
-# Create a delimiter string that does not exist in confdefs.h, to ease
-# handling of long lines.
-ac_delim='%!_!# '
-for ac_last_try in false false :; do
- ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
- if test -z "$ac_tt"; then
- break
- elif $ac_last_try; then
- as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-
-# For the awk script, D is an array of macro values keyed by name,
-# likewise P contains macro parameters if any. Preserve backslash
-# newline sequences.
-
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-sed -n '
-s/.\{148\}/&'"$ac_delim"'/g
-t rset
-:rset
-s/^[ ]*#[ ]*define[ ][ ]*/ /
-t def
-d
-:def
-s/\\$//
-t bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3"/p
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
-d
-:bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3\\\\\\n"\\/p
-t cont
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
-t cont
-d
-:cont
-n
-s/.\{148\}/&'"$ac_delim"'/g
-t clear
-:clear
-s/\\$//
-t bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/"/p
-d
-:bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
-b cont
-' <confdefs.h | sed '
-s/'"$ac_delim"'/"\\\
-"/g' >>$CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- for (key in D) D_is_set[key] = 1
- FS = ""
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
- line = \$ 0
- split(line, arg, " ")
- if (arg[1] == "#") {
- defundef = arg[2]
- mac1 = arg[3]
- } else {
- defundef = substr(arg[1], 2)
- mac1 = arg[2]
- }
- split(mac1, mac2, "(") #)
- macro = mac2[1]
- prefix = substr(line, 1, index(line, defundef) - 1)
- if (D_is_set[macro]) {
- # Preserve the white space surrounding the "#".
- print prefix "define", macro P[macro] D[macro]
- next
- } else {
- # Replace #undef with comments. This is necessary, for example,
- # in the case of _POSIX_SOURCE, which is predefined and required
- # on some systems where configure will not decide to define it.
- if (defundef == "undef") {
- print "/*", prefix defundef, macro, "*/"
- next
- }
- }
-}
-{ print }
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
- as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
-fi # test -n "$CONFIG_HEADERS"
-
-
-eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS "
-shift
-for ac_tag
-do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
- :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
- esac
- ac_save_IFS=$IFS
- IFS=:
- set x $ac_tag
- IFS=$ac_save_IFS
- shift
- ac_file=$1
- shift
-
- case $ac_mode in
- :L) ac_source=$1;;
- :[FH])
- ac_file_inputs=
- for ac_f
- do
- case $ac_f in
- -) ac_f="$ac_tmp/stdin";;
- *) # Look for the file first in the build tree, then in the source tree
- # (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
- test -f "$ac_f" ||
- case $ac_f in
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
- as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
- esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
- as_fn_append ac_file_inputs " '$ac_f'"
- done
-
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
- `' by configure.'
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
- fi
- # Neutralize special characters interpreted by sed in replacement strings.
- case $configure_input in #(
- *\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
- sed 's/[\\\\&|]/\\\\&/g'`;; #(
- *) ac_sed_conf_input=$configure_input;;
- esac
-
- case $ac_tag in
- *:-:* | *:-) cat >"$ac_tmp/stdin" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
- esac
- ;;
- esac
-
- ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- as_dir="$ac_dir"; as_fn_mkdir_p
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
- p
- q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
- s&@infodir@&$infodir&g
- s&@localedir@&$localedir&g
- s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
- >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
- "$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&2;}
-
- rm -f "$ac_tmp/stdin"
- case $ac_file in
- -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
- *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
- esac \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
- :H)
- #
- # CONFIG_HEADER
- #
- if test x"$ac_file" != x-; then
- {
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
- } >"$ac_tmp/config.h" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
- else
- rm -f "$ac_file"
- mv "$ac_tmp/config.h" "$ac_file" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- fi
- else
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
- || as_fn_error $? "could not create -" "$LINENO" 5
- fi
- ;;
-
-
- esac
-
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
- as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded. So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status. When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
- ac_cs_success=:
- ac_config_status_args=
- test "$silent" = yes &&
- ac_config_status_args="$ac_config_status_args --quiet"
- exec 5>/dev/null
- $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
- exec 5>>config.log
- # Use ||, not &&, to avoid exiting from the if with $? = 1, which
- # would make configure fail if this is the last instruction.
- $ac_cs_success || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
diff --git a/contrib/zkt-1.1.3/configure.ac b/contrib/zkt-1.1.3/configure.ac
deleted file mode 100644
index b14a1e01..00000000
--- a/contrib/zkt-1.1.3/configure.ac
+++ /dev/null
@@ -1,183 +0,0 @@
-# -*- Autoconf -*-
-# Process this file with autoconf to produce a configure script.
-#
-# @(#) configure.ac
-#
-# 2008-06-27 initial setup
-# 2008-06-29 add of BIND path checking
-# 2008-06-30 add of arg checkings
-# 2008-07-02 additional arg checkings
-# 2008-07-04 check for getopt_long() added
-# 2008-08-30 check for unsigned integer types
-# 2008-10-01 if BIND_UTIL_PATH check failed, use config_zkt.h setting as last resort
-# 2009-07-30 check for timegm() added
-# 2009-12-02 the tr command in bind_version= didn't work well under solaris
-# 2010-10-14 new option to specify BIND_UTIL_PATH on command line (thanks to Mans Nilsson)
-# No build in default BIND_UTIL_PATH used anymore
-#
-
-dnl AC_PREREQ(2.59)
-
-### Package name and current version
-AC_INIT(ZKT, 1.1.3, Holger Zuleger hznet.de)
-dnl AC_REVISION($Revision: 1.397 $)
-
-### Files to test to check if src dir contains the package
-AC_CONFIG_SRCDIR([zkt-signer.c])
-AC_CONFIG_HEADER([config.h])
-
-
-### Checks for programs.
-AC_PROG_CC
-
-### find out the path to BIND utils and version
-AC_ARG_ENABLE([bind_util_path], AS_HELP_STRING( [--enable-bind_util_path=PATH], [Define path to BIND utilities, default is path to dnssec-signzone]), [bind_util_path=$enableval])
-if test -n "$bind_util_path"
-then
- if test -x "$bind_util_path/dnssec-signzone"
- then
- AC_MSG_NOTICE([BIND utilities path successfully set to $bind_util_path.])
- SIGNZONE_PROG=$bind_util_path/dnssec-signzone
- else
- AC_MSG_ERROR([*** 'BIND utility not found in $bind_util_path, please use --enable-bind_util_path= to set it manually' ***])
- fi
-else
- AC_PATH_PROG([SIGNZONE_PROG], dnssec-signzone)
- AC_MSG_NOTICE([BIND utility $SIGNZONE_PROG found])
- if test -n "$SIGNZONE_PROG"
- then
- bind_util_path=`dirname "$SIGNZONE_PROG"`
- AC_MSG_NOTICE([BIND utilities path automatically set to $bind_util_path.])
- else
- AC_MSG_ERROR([*** 'could not determine BIND utility path, please use --enable-bind_util_path= ' to set it manually ***])
- fi
-fi
-### By now, we have a path. We'll use it.
-# define BIND_UTIL_PATH in config.h.in
-AC_DEFINE_UNQUOTED(BIND_UTIL_PATH, "$bind_util_path/", Path to BIND utilities)
-
-# define BIND_VERSION in config.h.in
-bind_version=`$SIGNZONE_PROG 2>&1 | awk -F: '/^Version:/ { split ($2, v, "."); printf ("%2d%02d%02d\n", atoi (v[[1]]), atoi (v[[2]]), atoi (v[[3]])); };'`
-AC_MSG_NOTICE([BIND_VERSION string set to $bind_version.])
-AC_DEFINE_UNQUOTED(BIND_VERSION, $bind_version, BIND version as integer number without dots)
-if test $bind_version -lt "90800"
-then
- AC_MSG_ERROR([*** 'This version of ZKT requires a BIND version greater 9.7' ***])
-fi
-
-
-AC_CHECK_TYPE(uint, unsigned int)
-AC_CHECK_TYPE(ulong, unsigned long)
-AC_CHECK_TYPE(ushort, unsigned short)
-AC_CHECK_TYPE(uchar, unsigned char)
-
-### define configure arguments
-AC_ARG_ENABLE([color_mode], AS_HELP_STRING([--disable-color-mode], [zkt without colors]))
-color_mode=1
-AS_IF([test "$enable_color_mode" = "no"], [color_mode=0])
-
-AC_ARG_WITH([curses],
- AS_HELP_STRING([--without-curses], [Ignore presence of curses and disable color mode]))
-
-AS_IF([test "x$with_curses" != "xno"],
- [AC_CHECK_LIB([ncurses],[tgetent])],
- [HAVE_LIB_NCURSES=0; color_mode=0])
-
-AC_DEFINE_UNQUOTED(COLOR_MODE, $color_mode, zkt-ls with colors)
-
-
-dnl printtimezone is a default-disabled feature
-AC_ARG_ENABLE([printtimezone], AS_HELP_STRING( [--enable-print-timezone], [print out timezone]))
-printtimezone=0
-AS_IF([test "$enable_printtimezone" = "yes"], [printtimezone=1])
-AC_DEFINE_UNQUOTED(PRINT_TIMEZONE, $printtimezone, print out timezone)
-
-AC_ARG_ENABLE([printyear], AS_HELP_STRING( [--enable-print-age], [print age with year]))
-printyear=0
-AS_IF([test "$enable_printyear" = "yes"], [printyear=1])
-AC_DEFINE_UNQUOTED(PRINT_AGE_WITH_YEAR, $printyear, print age with year)
-
-AC_ARG_ENABLE([logprogname], AS_HELP_STRING( [--enable-log-progname], [log with progname]))
-logprogname=0
-AS_IF([test "$enable_logprogname" = "yes"], [logprogname=1])
-AC_DEFINE_UNQUOTED(LOG_WITH_PROGNAME, $logprogname, log with progname)
-
-dnl logtimestamp is a default-enabled feature
-AC_ARG_ENABLE([logtimestamp], AS_HELP_STRING([--disable-log-timestamp], [do not log with timestamp]))
-logtimestamp=1
-AS_IF([test "$enable_logtimestamp" = "no"], [logtimestamp=0])
-AC_DEFINE_UNQUOTED(LOG_WITH_TIMESTAMP, $logtimestamp, log with timestamp)
-
-AC_ARG_ENABLE([loglevel], AS_HELP_STRING([--disable-log-level], [do not log with level]))
-loglevel=1
-AS_IF([test "$enable_loglevel" = "no"], [loglevel=0])
-AC_DEFINE_UNQUOTED(LOG_WITH_LEVEL, $loglevel, log with level)
-
-AC_ARG_ENABLE([ttl_in_keyfile], AS_HELP_STRING([--disable-ttl-in-keyfiles], [do not allow TTL values in keyfiles]))
-ttl_in_keyfile=1
-AS_IF([test "$enable_ttl_in_keyfile" = "no"], [ttl_in_keyfile=0])
-AC_DEFINE_UNQUOTED(TTL_IN_KEYFILE_ALLOWED, $ttl_in_keyfile, TTL in keyfiles allowed)
-
-configpath="/var/named"
-AC_ARG_ENABLE([configpath],
- AS_HELP_STRING( [--enable-configpath=PATH], [set path of config file (defaults to /var/named)]),
- [configpath=$enableval])
-case "$configpath" in
-yes)
- configpath="/var/named"
- ;;
-no)
- configpath=""
- ;;
-*)
- ;;
-esac
-AC_DEFINE_UNQUOTED(CONFIG_PATH, "$configpath/", [set path of config file (defaults to /var/named)])
-
-usetree=1
-t=""
-AC_ARG_ENABLE([tree],
- AS_HELP_STRING( [--disable-tree], [use single linked list instead of binary tree data structure for dnssec-zkt]),
- [usetree=$enableval])
-if test "$usetree" = no
-then
- usetree=0
- t="S"
-fi
-AC_DEFINE_UNQUOTED(USE_TREE, $usetree, Use TREE data structure for dnssec-zkt)
-
-AC_DEFINE_UNQUOTED(ZKT_VERSION, "$t$PACKAGE_VERSION", ZKT version string)
-AC_DEFINE_UNQUOTED(ZKT_COPYRIGHT, "(c) Feb 2005 - Nov 2012 Holger Zuleger hznet.de", ZKT copyright string)
-
-### Checks for libraries.
-
-### Checks for header files.
-AC_HEADER_DIRENT
-AC_HEADER_STDC
-AC_CHECK_HEADERS([fcntl.h netdb.h stdlib.h getopt.h string.h strings.h sys/socket.h sys/time.h sys/types.h syslog.h unistd.h utime.h term.h curses.h])
-
-
-### Checks for typedefs, structures, and compiler characteristics.
-AC_C_CONST
-AC_TYPE_SIZE_T
-AC_HEADER_TIME
-AC_STRUCT_TM
-AC_TYPE_UID_T
-
-
-### Checks for library functions.
-dnl AC_FUNC_MALLOC
-AC_FUNC_CLOSEDIR_VOID
-AC_FUNC_ERROR_AT_LINE
-AC_FUNC_MKTIME
-AC_FUNC_STAT
-AC_FUNC_STRFTIME
-AC_FUNC_UTIME_NULL
-AC_FUNC_VPRINTF
-# 2008-07-04 getopt_long added
-# 2009-07-30 timegm added
-AC_CHECK_FUNCS([getopt_long gettimeofday memset putenv socket strcasecmp strchr strdup strerror strncasecmp strrchr tzset utime getuid timegm])
-
-
-AC_CONFIG_FILES([Makefile])
-AC_OUTPUT
diff --git a/contrib/zkt-1.1.3/debug.h b/contrib/zkt-1.1.3/debug.h
deleted file mode 100644
index e0c47dc2..00000000
--- a/contrib/zkt-1.1.3/debug.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*****************************************************************
-**
-** @(#) debug.h -- macros for debug messages
-**
-** compile with cc -DDBG to activate
-**
-** Copyright (c) Jan 2005, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-#ifndef DEBUG_H
-# define DEBUG_H
-
-# ifdef DBG
-# define dbg_line() fprintf (stderr, "DBG: %s(%d) reached\n", __FILE__, __LINE__)
-# define dbg_msg(msg) fprintf (stderr, "DBG: %s(%d) %s\n", __FILE__, __LINE__, msg)
-# define dbg_val0(text) fprintf (stderr, "DBG: %s(%d) %s", __FILE__, __LINE__, text)
-# define dbg_val1(fmt, var) dbg_val (fmt, var)
-# define dbg_val(fmt, var) fprintf (stderr, "DBG: %s(%d) " fmt, __FILE__, __LINE__, var)
-# define dbg_val2(fmt, v1, v2) fprintf (stderr, "DBG: %s(%d) " fmt, __FILE__, __LINE__, v1, v2)
-# define dbg_val3(fmt, v1, v2, v3) fprintf (stderr, "DBG: %s(%d) " fmt, __FILE__, __LINE__, v1, v2, v3)
-# define dbg_val4(fmt, v1, v2, v3, v4) fprintf (stderr, "DBG: %s(%d) " fmt, __FILE__, __LINE__, v1, v2, v3, v4)
-# define dbg_val5(fmt, v1, v2, v3, v4, v5) fprintf (stderr, "DBG: %s(%d) " fmt, __FILE__, __LINE__, v1, v2, v3, v4, v5)
-# define dbg_val6(fmt, v1, v2, v3, v4, v5, v6) fprintf (stderr, "DBG: %s(%d) " fmt, __FILE__, __LINE__, v1, v2, v3, v4, v5, v6)
-# else
-# define dbg_line()
-# define dbg_msg(msg)
-# define dbg_val0(text)
-# define dbg_val1(fmt, var)
-# define dbg_val(fmt, str)
-# define dbg_val2(fmt, v1, v2)
-# define dbg_val3(fmt, v1, v2, v3)
-# define dbg_val4(fmt, v1, v2, v3, v4)
-# define dbg_val5(fmt, v1, v2, v3, v4, v5)
-# define dbg_val6(fmt, v1, v2, v3, v4, v5, v6)
-# endif
-
-#endif
diff --git a/contrib/zkt-1.1.3/distribute.sh b/contrib/zkt-1.1.3/distribute.sh
deleted file mode 100755
index d9e95895..00000000
--- a/contrib/zkt-1.1.3/distribute.sh
+++ /dev/null
@@ -1,82 +0,0 @@
-#################################################################
-#
-# @(#) distribute.sh -- distribute and reload command for dnssec-signer
-#
-# (c) Jul 2008 Holger Zuleger hznet.de
-#
-# Feb 2010 action "distkeys" added but currently not used
-#
-# This shell script will be run by zkt-signer as a distribution
-# and reload command if:
-#
-# a) the dnssec.conf file parameter Distribute_Cmd: points
-# to this file
-# and
-# b) the user running the zkt-signer command is not
-# root (uid==0)
-# and
-# c) the owner of this shell script is the same as the
-# running user and the access rights don't allow writing
-# for anyone except the owner
-# or
-# d) the group of this shell script is the same as the
-# running user and the access rights don't allow writing
-# for anyone except the group
-#
-#################################################################
-
-# set path to rndc and scp
-PATH="/bin:/usr/bin:/usr/local/sbin"
-
-# remote server and directory
-server=localhost # fqdn of remote name server
-dir=/var/named # zone directory on remote name server
-
-progname=$0
-usage()
-{
- echo "usage: $progname distkeys|distribute|reload <zone> <path_to_zonefile> [<viewname>]" 1>&2
- test $# -gt 0 && echo $* 1>&2
- exit 1
-}
-
-if test $# -lt 3
-then
- usage
-fi
-action="$1"
-zone="$2"
-zonefile="$3"
-view=""
-test $# -gt 3 && view="$4"
-
-case $action in
-distkeys)
- if test -n "$view"
- then
- : echo "scp K$zone+* $server:$dir/$view/$zone/"
- scp K$zone+* $server:$dir/$view/$zone/
- else
- : echo "scp K$zone+* $server:$dir/$zone/"
- scp K$zone+* $server:$dir/$zone/
- fi
- ;;
-distribute)
- if test -n "$view"
- then
- : echo "scp $zonefile $server:$dir/$view/$zone/"
- scp $zonefile $server:$dir/$view/$zone/
- else
- : echo "scp $zonefile $server:$dir/$zone/"
- scp $zonefile $server:$dir/$zone/
- fi
- ;;
-reload)
- : echo "rndc $action $zone $view"
- rndc $action $zone $view
- ;;
-*)
- usage "illegal action $action"
- ;;
-esac
-
diff --git a/contrib/zkt-1.1.3/dki.c b/contrib/zkt-1.1.3/dki.c
deleted file mode 100644
index e85239d1..00000000
--- a/contrib/zkt-1.1.3/dki.c
+++ /dev/null
@@ -1,1256 +0,0 @@
-/*****************************************************************
-**
-** @(#) dki.c (c) Jan 2005 Holger Zuleger hznet.de
-**
-** A library for managing BIND dnssec key files.
-**
-** Copyright (c) Jan 2005, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-**
-*****************************************************************/
-
-# include <stdio.h>
-# include <string.h>
-# include <ctype.h> /* tolower(), ... */
-# include <unistd.h> /* link(), unlink(), ... */
-# include <stdlib.h>
-# include <sys/types.h>
-# include <sys/time.h>
-# include <sys/stat.h>
-# include <dirent.h>
-# include <assert.h>
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-# include "config_zkt.h"
-# include "debug.h"
-# include "domaincmp.h"
-# include "misc.h"
-# include "zconf.h"
-#define extern
-# include "dki.h"
-#undef extern
-
-/*****************************************************************
-** private (static) function declaration and definition
-*****************************************************************/
-static char dki_estr[255+1];
-
-static dki_t *dki_alloc ()
-{
- dki_estr[0] = '\0';
- dki_t *dkp = malloc (sizeof (dki_t));
-
- if ( (dkp = malloc (sizeof (dki_t))) )
- {
- memset (dkp, 0, sizeof (dki_t));
- return dkp;
- }
-
- snprintf (dki_estr, sizeof (dki_estr),
- "dki_alloc: Out of memory");
- return NULL;
-}
-
-static int dki_readfile (FILE *fp, dki_t *dkp)
-{
- int algo, flags, type;
- int c;
- char *p;
- char buf[4095+1];
- char tag[25+1];
- char val[14+1]; /* e.g. "YYYYMMDDhhmmss" | "60d" */
-
- assert (dkp != NULL);
- assert (fp != NULL);
-
- while ( (c = getc (fp)) == ';' ) /* line start with comment ? */
- {
- tag[0] = val[0] = '\0';
- if ( (c = getc (fp)) == '%' ) /* special comment? */
- {
- while ( (c = getc (fp)) == ' ' || c == '\t' )
- ;
- ungetc (c, fp);
- /* then try to read in the creation, expire and lifetime */
- if ( fscanf (fp, "%25[a-zA-Z]=%14s", tag, val) == 2 )
- {
- dbg_val2 ("dki_readfile: tag=%s val=%s \n", tag, val);
- switch ( tolower (tag[0]) )
- {
- case 'g': dkp->gentime = timestr2time (val); break;
- case 'e': dkp->exptime = timestr2time (val); break;
- case 'l': dkp->lifetime = atoi (val) * DAYSEC; break;
- }
- }
- }
- else
- ungetc (c, fp);
- while ( (c = getc (fp)) != EOF && c != '\n' ) /* eat up rest of the line */
- ;
- }
- ungetc (c, fp); /* push back last char */
-
- if ( fscanf (fp, "%4095s", buf) != 1 ) /* read label */
- return -1;
-
- if ( strcmp (buf, dkp->name) != 0 )
- return -2;
-
-#if defined(TTL_IN_KEYFILE_ALLOWED) && TTL_IN_KEYFILE_ALLOWED
- /* skip optional TTL value */
- while ( (c = getc (fp)) != EOF && isspace (c) ) /* skip spaces */
- ;
- if ( isdigit (c) ) /* skip ttl */
- fscanf (fp, "%*d");
- else
- ungetc (c, fp); /* oops, no ttl */
-#endif
-
- if ( (c = fscanf (fp, " IN DNSKEY %d %d %d", &flags, &type, &algo)) != 3 &&
- (c = fscanf (fp, "KEY %d %d %d", &flags, &type, &algo)) != 3 )
- return -3;
- if ( type != 3 || algo != dkp->algo )
- return -4; /* no DNSKEY or algorithm mismatch */
- if ( ((flags >> 8) & 0xFF) != 01 )
- return -5; /* no ZONE key */
- dkp->flags = flags;
-
- if ( fgets (buf, sizeof buf, fp) == NULL || buf[0] == '\0' )
- return -6;
- p = buf + strlen (buf);
- *--p = '\0'; /* delete trailing \n */
- /* delete leading ws */
- for ( p = buf; *p && isspace (*p); p++ )
- ;
-
- dkp->pubkey = strdup (p);
-
- return 0;
-}
-
-static int dki_writeinfo (const dki_t *dkp, const char *path)
-{
- FILE *fp;
-
- assert (dkp != NULL);
- assert (path != NULL && path[0] != '\0');
-
- if ( (fp = fopen (path, "w")) == NULL )
- return 0;
- dbg_val1 ("dki_writeinfo %s\n", path);
- if ( dki_prt_dnskey_raw (dkp, fp) == 0 )
- return 0;
- fclose (fp);
- touch (path, dkp->time); /* restore time of key file */
-
- return 1;
-}
-
-static int dki_setstat (dki_t *dkp, int status, int preserve_time);
-
-/*****************************************************************
-** public function definition
-*****************************************************************/
-
-/*****************************************************************
-** dki_free ()
-*****************************************************************/
-void dki_free (dki_t *dkp)
-{
- assert (dkp != NULL);
-
- if ( dkp->pubkey )
- free (dkp->pubkey);
- free (dkp);
-}
-
-/*****************************************************************
-** dki_freelist ()
-*****************************************************************/
-void dki_freelist (dki_t **listp)
-{
- dki_t *curr;
- dki_t *next;
-
- assert (listp != NULL);
-
- curr = *listp;
- while ( curr )
- {
- next = curr->next;
- dki_free (curr);
- curr = next;
- }
- if ( *listp )
- *listp = NULL;
-}
-
-#if defined(USE_TREE) && USE_TREE
-/*****************************************************************
-** dki_tfree ()
-*****************************************************************/
-void dki_tfree (dki_t **tree)
-{
- assert (tree != NULL);
- // TODO: tdestroy is a GNU extension
- // tdestroy (*tree, dki_free);
-}
-#endif
-
-# define KEYGEN_COMPMODE "-C -q " /* this is the compability mode needed since BIND 9.7 */
-/*****************************************************************
-** dki_new ()
-** create new keyfile
-** allocate memory for new dki key and init with keyfile
-*****************************************************************/
-dki_t *dki_new (const char *dir, const char *name, int ksk, int algo, int bitsize, const char *rfile, int lf_days)
-{
- char cmdline[511+1];
- char fname[254+1];
- char randfile[254+1];
- FILE *fp;
- int len;
- char *flag = "";
- char *expflag = "";
- dki_t *new;
-
- if ( ksk )
- flag = "-f KSK";
-
- randfile[0] = '\0';
- if ( rfile && *rfile )
- snprintf (randfile, sizeof (randfile), "-r %.250s ", rfile);
-
-#if defined(BIND_VERSION) && BIND_VERSION < 90902
- if ( algo == DK_ALGO_RSA || algo == DK_ALGO_RSASHA1 || algo == DK_ALGO_RSASHA256 || algo == DK_ALGO_RSASHA512 )
- expflag = "-e ";
-#endif
- if ( dir && *dir )
- snprintf (cmdline, sizeof (cmdline), "cd %s ; %s %s%s%s-n ZONE -a %s -b %d %s %s",
- dir, KEYGENCMD, KEYGEN_COMPMODE, randfile, expflag, dki_algo2str(algo), bitsize, flag, name);
- else
- snprintf (cmdline, sizeof (cmdline), "%s %s%s%s-n ZONE -a %s -b %d %s %s",
- KEYGENCMD, KEYGEN_COMPMODE, randfile, expflag, dki_algo2str(algo), bitsize, flag, name);
-
- dbg_msg (cmdline);
-
- if ( (fp = popen (cmdline, "r")) == NULL || fgets (fname, sizeof fname, fp) == NULL )
- return NULL;
- pclose (fp);
-
- len = strlen (fname) - 1;
- if ( len >= 0 && fname[len] == '\n' )
- fname[len] = '\0';
-
- new = dki_read (dir, fname);
- if ( new )
- dki_setlifetime (new, lf_days); /* sets gentime + proposed lifetime */
-
- return new;
-}
-
-/*****************************************************************
-** dki_read ()
-** read key from file 'filename' (independed of the extension)
-*****************************************************************/
-dki_t *dki_read (const char *dirname, const char *filename)
-{
- dki_t *dkp;
- FILE *fp;
- struct stat st;
- int len;
- int err;
- char fname[MAX_FNAMESIZE+1];
- char path[MAX_PATHSIZE+1];
-
- dki_estr[0] = '\0';
- if ( (dkp = dki_alloc ()) == NULL )
- return (NULL);
-
- len = sizeof (fname) - 1;
- fname[len] = '\0';
- strncpy (fname, filename, len);
-
- len = strlen (fname); /* delete extension */
- if ( len > 4 && strcmp (&fname[len - 4], DKI_KEY_FILEEXT) == 0 )
- fname[len - 4] = '\0';
- else if ( len > 10 && strcmp (&fname[len - 10], DKI_PUB_FILEEXT) == 0 )
- fname[len - 10] = '\0';
- else if ( len > 8 && strcmp (&fname[len - 8], DKI_ACT_FILEEXT) == 0 )
- fname[len - 8] = '\0';
- else if ( len > 12 && strcmp (&fname[len - 12], DKI_DEP_FILEEXT) == 0 )
- fname[len - 12] = '\0';
- dbg_line ();
-
- assert (strlen (dirname)+1 < sizeof (dkp->dname));
- strcpy (dkp->dname, dirname);
-
- assert (strlen (fname)+1 < sizeof (dkp->fname));
- strcpy (dkp->fname, fname);
- dbg_line ();
- if ( sscanf (fname, "K%254[^+]+%hd+%d", dkp->name, &dkp->algo, &dkp->tag) != 3 )
- {
- snprintf (dki_estr, sizeof (dki_estr),
- "dki_read: Filename don't match expected format (%s)", fname);
- return (NULL);
- }
-
- pathname (path, sizeof (path), dkp->dname, dkp->fname, DKI_KEY_FILEEXT);
- dbg_val ("dki_read: path \"%s\"\n", path);
- if ( (fp = fopen (path, "r")) == NULL )
- {
- snprintf (dki_estr, sizeof (dki_estr),
- "dki_read: Can\'t open file \"%s\" for reading", path);
- return (NULL);
- }
-
- dbg_line ();
- if ( (err = dki_readfile (fp, dkp)) != 0 )
- {
- dbg_line ();
- snprintf (dki_estr, sizeof (dki_estr),
- "dki_read: Can\'t read key from file %s (errno %d)", path, err);
- fclose (fp);
- return (NULL);
- }
-
- dbg_line ();
- if ( fstat (fileno(fp), &st) )
- {
- snprintf (dki_estr, sizeof (dki_estr),
- "dki_read: Can\'t stat file %s", fname);
- return (NULL);
- }
- dkp->time = st.st_mtime;
-
- dbg_line ();
- pathname (path, sizeof (path), dkp->dname, dkp->fname, DKI_ACT_FILEEXT);
- if ( fileexist (path) )
- {
- if ( dki_isrevoked (dkp) )
- dkp->status = DKI_REV;
- else
- dkp->status = DKI_ACT;
- }
- else
- {
- pathname (path, sizeof (path), dkp->dname, dkp->fname, DKI_PUB_FILEEXT);
- if ( fileexist (path) )
- dkp->status = DKI_PUB;
- else
- {
- pathname (path, sizeof (path), dkp->dname, dkp->fname, DKI_DEP_FILEEXT);
- if ( fileexist (path) )
- dkp->status = DKI_DEP;
- else
- dkp->status = DKI_SEP;
- }
- }
-
- dbg_line ();
- fclose (fp);
-
- dbg_line ();
- return dkp;
-}
-
-/*****************************************************************
-** dki_readdir ()
-** read key files from directory 'dir' and, if recursive is
-** true, from all directorys below that.
-*****************************************************************/
-int dki_readdir (const char *dir, dki_t **listp, int recursive)
-{
- dki_t *dkp;
- DIR *dirp;
- struct dirent *dentp;
- char path[MAX_PATHSIZE+1];
-
- dbg_val ("directory: opendir(%s)\n", dir);
- if ( (dirp = opendir (dir)) == NULL )
- return 0;
-
- while ( (dentp = readdir (dirp)) != NULL )
- {
- if ( is_dotfilename (dentp->d_name) )
- continue;
-
- dbg_val ("directory: check %s\n", dentp->d_name);
- pathname (path, sizeof (path), dir, dentp->d_name, NULL);
- if ( is_directory (path) && recursive )
- {
- dbg_val ("directory: recursive %s\n", path);
- dki_readdir (path, listp, recursive);
- }
- else if ( is_keyfilename (dentp->d_name) )
- if ( (dkp = dki_read (dir, dentp->d_name)) )
- dki_add (listp, dkp);
- }
- closedir (dirp);
- return 1;
-}
-
-/*****************************************************************
-** dki_setstatus_preservetime ()
-** set status of key and change extension to
-** ".published", ".private" or ".depreciated"
-*****************************************************************/
-int dki_setstatus_preservetime (dki_t *dkp, int status)
-{
- return dki_setstat (dkp, status, 1);
-}
-
-/*****************************************************************
-** dki_setstatus ()
-** set status of key and change extension to
-** ".published", ".private" or ".depreciated"
-*****************************************************************/
-int dki_setstatus (dki_t *dkp, int status)
-{
- return dki_setstat (dkp, status, 0);
-}
-
-/*****************************************************************
-** dki_setstat ()
-** low level function of dki_setstatus and dki_setstatus_preservetime
-*****************************************************************/
-static int dki_setstat (dki_t *dkp, int status, int preserve_time)
-{
- char frompath[MAX_PATHSIZE+1];
- char topath[MAX_PATHSIZE+1];
- time_t totime;
-
- if ( dkp == NULL )
- return 0;
-
- status = tolower (status);
- switch ( dkp->status ) /* look at old status */
- {
- case 'r':
- if ( status == 'r' )
- return 1;
- break;
- case 'a':
- if ( status == 'a' )
- return 1;
- pathname (frompath, sizeof (frompath), dkp->dname, dkp->fname, DKI_ACT_FILEEXT);
- break;
- case 'd':
- if ( status == 'd' )
- return 1;
- pathname (frompath, sizeof (frompath), dkp->dname, dkp->fname, DKI_DEP_FILEEXT);
- break;
- case 'p': /* or 's' */
- if ( status == 'p' || status == 's' )
- return 1;
- pathname (frompath, sizeof (frompath), dkp->dname, dkp->fname, DKI_PUB_FILEEXT);
- break;
- default:
- /* TODO: set error code */
- return 0;
- }
-
- dbg_val ("dki_setstat: \"%s\"\n", frompath);
- dbg_val ("dki_setstat: to status \"%c\"\n", status);
-
- /* a state change could result in different things: */
- /* 1) write a new keyfile when the REVOKE bit is set or unset */
- if ( status == 'r' || (status == 'a' && dki_isrevoked (dkp)) )
- {
- pathname (topath, sizeof (topath), dkp->dname, dkp->fname, DKI_KEY_FILEEXT);
-
- if ( status == 'r' )
- dki_setflag (dkp, DK_FLAG_REVOKE); /* set REVOKE bit */
- else
- dki_unsetflag (dkp, DK_FLAG_REVOKE); /* clear REVOKE bit */
-
-
- dki_writeinfo (dkp, topath); /* ..and write it to the key file */
-
- if ( !preserve_time )
- touch (topath, time (NULL));
-
- return 0;
- }
-
-
- /* 2) change the filename of the private key in all other cases */
- totime = 0L;
- if ( preserve_time )
- totime = file_mtime (frompath); /* get original timestamp */
- topath[0] = '\0';
- switch ( status )
- {
- case 'a':
- pathname (topath, sizeof (topath), dkp->dname, dkp->fname, DKI_ACT_FILEEXT);
- break;
- case 'd':
- pathname (topath, sizeof (topath), dkp->dname, dkp->fname, DKI_DEP_FILEEXT);
- break;
- case 's': /* standby means a "published KSK" */
- if ( !dki_isksk (dkp) )
- return 2;
- status = 'p';
- /* fall through */
- case 'p':
- pathname (topath, sizeof (topath), dkp->dname, dkp->fname, DKI_PUB_FILEEXT);
- break;
- }
-
- if ( topath[0] )
- {
- dbg_val ("dki_setstat: to \"%s\"\n", topath);
- if ( link (frompath, topath) == 0 )
- unlink (frompath);
- dkp->status = status;
- if ( !totime )
- totime = time (NULL); /* set .key file to current time */
- pathname (topath, sizeof (topath), dkp->dname, dkp->fname, DKI_KEY_FILEEXT);
- touch (topath, totime); /* store/restore time of status change */
- }
-
- return 0;
-}
-
-/*****************************************************************
-** dki_remove ()
-** rename files associated with key, so that the keys are not
-** recognized by the zkt tools e.g.
-** Kdo.ma.in.+001+12345.key ==> kdo.ma.in.+001+12345.key
-** (second one starts with a lower case 'k')
-*****************************************************************/
-dki_t *dki_remove (dki_t *dkp)
-{
- char path[MAX_PATHSIZE+1];
- char newpath[MAX_PATHSIZE+1];
- char newfile[MAX_FNAMESIZE+1];
- dki_t *next;
- const char **pext;
- static const char *ext[] = {
- DKI_KEY_FILEEXT, DKI_PUB_FILEEXT,
- DKI_ACT_FILEEXT, DKI_DEP_FILEEXT,
- NULL
- };
-
- if ( dkp == NULL )
- return NULL;
-
- strncpy (newfile, dkp->fname, sizeof (newfile));
- *newfile = tolower (*newfile);
- for ( pext = ext; *pext; pext++ )
- {
- pathname (path, sizeof (path), dkp->dname, dkp->fname, *pext);
- if ( fileexist (path) )
- {
- pathname (newpath, sizeof (newpath), dkp->dname, newfile, *pext);
-
- dbg_val2 ("dki_remove: %s ==> %s \n", path, newpath);
- rename (path, newpath);
- }
- }
- next = dkp->next;
- dki_free (dkp);
-
- return next;
-}
-
-/*****************************************************************
-** dki_destroy ()
-** delete files associated with key and free allocated memory
-*****************************************************************/
-dki_t *dki_destroy (dki_t *dkp)
-{
- char path[MAX_PATHSIZE+1];
- dki_t *next;
- const char **pext;
- static const char *ext[] = {
- DKI_KEY_FILEEXT, DKI_PUB_FILEEXT,
- DKI_ACT_FILEEXT, DKI_DEP_FILEEXT,
- NULL
- };
-
- if ( dkp == NULL )
- return NULL;
-
- for ( pext = ext; *pext; pext++ )
- {
- pathname (path, sizeof (path), dkp->dname, dkp->fname, *pext);
- if ( fileexist (path) )
- {
- dbg_val ("dki_remove: %s \n", path);
- unlink (path);
- }
- }
- next = dkp->next;
- dki_free (dkp);
-
- return next;
-}
-
-/*****************************************************************
-** dki_algo2str ()
-** return a string describing the key algorithm
-*****************************************************************/
-char *dki_algo2str (int algo)
-{
- switch ( algo )
- {
- case DK_ALGO_RSA: return ("RSAMD5");
- case DK_ALGO_DH: return ("DH");
- case DK_ALGO_DSA: return ("DSA");
- case DK_ALGO_EC: return ("EC");
- case DK_ALGO_RSASHA1: return ("RSASHA1");
- case DK_ALGO_NSEC3DSA: return ("NSEC3DSA");
- case DK_ALGO_NSEC3RSASHA1: return ("NSEC3RSASHA1");
- case DK_ALGO_RSASHA256: return ("RSASHA256");
- case DK_ALGO_RSASHA512: return ("RSASHA512");
- }
- return ("unknown");
-}
-
-/*****************************************************************
-** dki_algo2sstr ()
-** return a short string describing the key algorithm
-*****************************************************************/
-char *dki_algo2sstr (int algo)
-{
- switch ( algo )
- {
- case DK_ALGO_RSA: return ("RSAMD5");
- case DK_ALGO_DH: return ("DH");
- case DK_ALGO_DSA: return ("DSA");
- case DK_ALGO_EC: return ("EC");
- case DK_ALGO_RSASHA1: return ("RSASHA1");
- case DK_ALGO_NSEC3DSA: return ("N3DSA");
- case DK_ALGO_NSEC3RSASHA1: return ("N3RSA1");
- case DK_ALGO_RSASHA256: return ("RSASHA2");
- case DK_ALGO_RSASHA512: return ("RSASHA5");
- }
- return ("unknown");
-}
-
-/*****************************************************************
-** dki_geterrstr ()
-** return error string
-*****************************************************************/
-const char *dki_geterrstr ()
-{
- return dki_estr;
-}
-
-/*****************************************************************
-** dki_prt_dnskey ()
-*****************************************************************/
-int dki_prt_dnskey (const dki_t *dkp, FILE *fp)
-{
- return dki_prt_dnskeyttl (dkp, fp, 0);
-}
-
-/*****************************************************************
-** dki_prt_dnskeyttl ()
-*****************************************************************/
-int dki_prt_dnskeyttl (const dki_t *dkp, FILE *fp, int ttl)
-{
- char *p;
-
- if ( dkp == NULL )
- return 0;
-
- fprintf (fp, "%s ", dkp->name);
- if ( ttl > 0 )
- fprintf (fp, "%d ", ttl);
- fprintf (fp, "IN DNSKEY ");
- fprintf (fp, "%d 3 %d (", dkp->flags, dkp->algo);
- fprintf (fp, "\n\t\t\t");
- for ( p = dkp->pubkey; *p ; p++ )
- if ( *p == ' ' )
- fprintf (fp, "\n\t\t\t");
- else
- putc (*p, fp);
- fprintf (fp, "\n\t\t");
- if ( dki_isrevoked (dkp) )
- fprintf (fp, ") ; key id = %u (original key id = %u)", (dkp->tag + 128) % 65535, dkp->tag);
- else
- fprintf (fp, ") ; key id = %u", dkp->tag);
- fprintf (fp, "\n");
-
- return 1;
-}
-
-/*****************************************************************
-** dki_prt_dnskey_raw ()
-*****************************************************************/
-int dki_prt_dnskey_raw (const dki_t *dkp, FILE *fp)
-{
- int days;
-
- if ( dkp == NULL )
- return 0;
-
- if ( dkp->gentime )
- fprintf (fp, ";%%\tgenerationtime=%s\n", time2isostr (dkp->gentime, 's'));
- if ( (days = dki_lifetimedays (dkp)) )
- fprintf (fp, ";%%\tlifetime=%dd\n", days);
- if ( dkp->exptime )
- fprintf (fp, ";%%\texpirationtime=%s\n", time2isostr (dkp->exptime, 's'));
-
- fprintf (fp, "%s ", dkp->name);
-#if 0
- if ( ttl > 0 )
- fprintf (fp, "%d ", ttl);
-#endif
- fprintf (fp, "IN DNSKEY ");
- fprintf (fp, "%d 3 %d ", dkp->flags, dkp->algo);
- fprintf (fp, "%s\n", dkp->pubkey);
-
- return 1;
-}
-
-/*****************************************************************
-** dki_prt_comment ()
-*****************************************************************/
-int dki_prt_comment (const dki_t *dkp, FILE *fp)
-{
- int len = 0;
-
- if ( dkp == NULL )
- return len;
- len += fprintf (fp, "; %s ", dkp->name);
- len += fprintf (fp, "tag=%u ", dkp->tag);
- len += fprintf (fp, "algo=%s ", dki_algo2str(dkp->algo));
- len += fprintf (fp, "generated %s\n", time2str (dkp->time, 's'));
-
- return len;
-}
-
-/*****************************************************************
-** dki_prt_trustedkey ()
-*****************************************************************/
-int dki_prt_trustedkey (const dki_t *dkp, FILE *fp)
-{
- char *p;
- int spaces;
- int len = 0;
-
- if ( dkp == NULL )
- return len;
- len += fprintf (fp, "\"%s\" ", dkp->name);
- spaces = 22 - (strlen (dkp->name) + 3);
- len += fprintf (fp, "%*s", spaces > 0 ? spaces : 0 , " ");
- len += fprintf (fp, "%d 3 %d ", dkp->flags, dkp->algo);
- if ( spaces < 0 )
- len += fprintf (fp, "\n\t\t\t%7s", " ");
- len += fprintf (fp, "\"");
- for ( p = dkp->pubkey; *p ; p++ )
- if ( *p == ' ' )
- len += fprintf (fp, "\n\t\t\t\t");
- else
- putc (*p, fp), len += 1;
-
- if ( dki_isrevoked (dkp) )
- len += fprintf (fp, "\" ; # key id = %u (original key id = %u)\n\n", (dkp->tag + 128) % 65535, dkp->tag);
- else
- len += fprintf (fp, "\" ; # key id = %u\n\n", dkp->tag);
- return len;
-}
-
-/*****************************************************************
-** dki_prt_managedkey ()
-*****************************************************************/
-int dki_prt_managedkey (const dki_t *dkp, FILE *fp)
-{
- char *p;
- int spaces;
- int len = 0;
-
- if ( dkp == NULL )
- return len;
- len += fprintf (fp, "\"%s\" ", dkp->name);
- spaces = 22 - (strlen (dkp->name) + 3);
- len += fprintf (fp, "initial-key ");
- spaces -= 13;
- len += fprintf (fp, "%*s", spaces > 0 ? spaces : 0 , " ");
- len += fprintf (fp, "%d 3 %d ", dkp->flags, dkp->algo);
- if ( spaces < 0 )
- len += fprintf (fp, "\n\t\t\t%7s", " ");
- len += fprintf (fp, "\"");
- for ( p = dkp->pubkey; *p ; p++ )
- if ( *p == ' ' )
- len += fprintf (fp, "\n\t\t\t\t");
- else
- putc (*p, fp), len += 1;
-
- if ( dki_isrevoked (dkp) )
- len += fprintf (fp, "\" ; # key id = %u (original key id = %u)\n\n", (dkp->tag + 128) % 65535, dkp->tag);
- else
- len += fprintf (fp, "\" ; # key id = %u\n\n", dkp->tag);
- return len;
-}
-
-
-/*****************************************************************
-** dki_cmp () return <0 | 0 | >0
-*****************************************************************/
-int dki_cmp (const dki_t *a, const dki_t *b)
-{
- int res;
-
- if ( a == NULL ) return -1;
- if ( b == NULL ) return 1;
-
- /* sort by domain name, */
- if ( (res = domaincmp (a->name, b->name)) != 0 )
- return res;
-
- /* then by key type, */
- if ( (res = dki_isksk (b) - dki_isksk (a)) != 0 )
- return res;
-
- /* and last by creation time, */
- return (ulong)a->time - (ulong)b->time;
-}
-
-#if defined(USE_TREE) && USE_TREE
-/*****************************************************************
-** dki_allcmp () return <0 | 0 | >0
-*****************************************************************/
-int dki_allcmp (const dki_t *a, const dki_t *b)
-{
- int res;
-
- if ( a == NULL ) return -1;
- if ( b == NULL ) return 1;
-
-// fprintf (stderr, "dki_allcmp %s, %s)\n", a->name, b->name);
- /* sort by domain name, */
- if ( (res = domaincmp (a->name, b->name)) != 0 )
- return res;
-
- /* then by key type, */
- if ( (res = dki_isksk (b) - dki_isksk (a)) != 0 )
- return res;
-
- /* creation time, */
- if ( (res = (ulong)a->time - (ulong)b->time) != 0 )
- return res;
-
- /* and last by tag */
- return a->tag - b->tag;
-}
-
-/*****************************************************************
-** dki_namecmp () return <0 | 0 | >0
-*****************************************************************/
-int dki_namecmp (const dki_t *a, const dki_t *b)
-{
- if ( a == NULL ) return -1;
- if ( b == NULL ) return 1;
-
- return domaincmp (a->name, b->name);
-}
-
-/*****************************************************************
-** dki_revnamecmp () return <0 | 0 | >0
-*****************************************************************/
-int dki_revnamecmp (const dki_t *a, const dki_t *b)
-{
- if ( a == NULL ) return -1;
- if ( b == NULL ) return 1;
-
- return domaincmp_dir (a->name, b->name, 0);
-}
-
-/*****************************************************************
-** dki_tagcmp () return <0 | 0 | >0
-*****************************************************************/
-int dki_tagcmp (const dki_t *a, const dki_t *b)
-{
- if ( a == NULL ) return -1;
- if ( b == NULL ) return 1;
-
- return a->tag - b->tag;
-}
-#endif
-
-/*****************************************************************
-** dki_timecmp ()
-*****************************************************************/
-int dki_timecmp (const dki_t *a, const dki_t *b)
-{
- if ( a == NULL ) return -1;
- if ( b == NULL ) return 1;
-
- return ((ulong)a->time - (ulong)b->time);
-}
-
-/*****************************************************************
-** dki_algo () return the algorithm of the key
-*****************************************************************/
-time_t dki_algo (const dki_t *dkp)
-{
- assert (dkp != NULL);
- return (dkp->algo);
-}
-
-/*****************************************************************
-** dki_time () return the timestamp of the key
-*****************************************************************/
-time_t dki_time (const dki_t *dkp)
-{
- assert (dkp != NULL);
- return (dkp->time);
-}
-
-/*****************************************************************
-** dki_exptime () return the expiration timestamp of the key
-*****************************************************************/
-time_t dki_exptime (const dki_t *dkp)
-{
- assert (dkp != NULL);
- return (dkp->exptime);
-}
-
-/*****************************************************************
-** dki_lifetime (dkp) return the lifetime of the key in sec!
-*****************************************************************/
-time_t dki_lifetime (const dki_t *dkp)
-{
- assert (dkp != NULL);
- return (dkp->lifetime);
-}
-
-/*****************************************************************
-** dki_lifetimedays (dkp) return the lifetime of the key in days!
-*****************************************************************/
-ushort dki_lifetimedays (const dki_t *dkp)
-{
- assert (dkp != NULL);
- return (dkp->lifetime / DAYSEC);
-}
-
-/*****************************************************************
-** dki_gentime (dkp) return the generation timestamp of the key
-*****************************************************************/
-time_t dki_gentime (const dki_t *dkp)
-{
- assert (dkp != NULL);
- return (dkp->gentime > 0L ? dkp->gentime: dkp->time);
-}
-
-/*****************************************************************
-** dki_setlifetime (dkp, int days)
-** set the lifetime in days (and also the gentime if not set)
-** return the old lifetime of the key in days!
-*****************************************************************/
-ushort dki_setlifetime (dki_t *dkp, int days)
-{
- ulong lifetsec;
- char path[MAX_PATHSIZE+1];
-
- assert (dkp != NULL);
-
- lifetsec = dkp->lifetime; /* old lifetime */
- dkp->lifetime = days * DAYSEC; /* set new lifetime */
-
- dbg_val1 ("dki_setlifetime (%d)\n", days);
- if ( lifetsec == 0 ) /* initial setup (old lifetime was zero)? */
- dkp->gentime = dkp->time;
-
- pathname (path, sizeof (path), dkp->dname, dkp->fname, DKI_KEY_FILEEXT);
- dki_writeinfo (dkp, path);
-
- return (lifetsec / DAYSEC);
-}
-
-/*****************************************************************
-** dki_setexptime (dkp, time_t sec)
-** set the expiration time of the key in seconds since the epoch
-** return the old exptime
-*****************************************************************/
-time_t dki_setexptime (dki_t *dkp, time_t sec)
-{
- char path[MAX_PATHSIZE+1];
- time_t oldexptime;
-
- assert (dkp != NULL);
-
- dbg_val1 ("dki_setexptime (%ld)\n", sec);
- oldexptime = dkp->exptime;
- dkp->exptime = sec;
-
- pathname (path, sizeof (path), dkp->dname, dkp->fname, DKI_KEY_FILEEXT);
- dki_writeinfo (dkp, path);
-
-#if 0 /* not necessary ? */
- touch (path, time (NULL));
-#endif
- return (oldexptime);
-}
-
-/*****************************************************************
-** dki_age () return age of key in seconds since 'curr'
-*****************************************************************/
-int dki_age (const dki_t *dkp, time_t curr)
-{
- assert (dkp != NULL);
- return ((ulong)curr - (ulong)dkp->time);
-}
-
-/*****************************************************************
-** dki_getflag () return the flags field of a key
-*****************************************************************/
-dk_flag_t dki_getflag (const dki_t *dkp, time_t curr)
-{
- return dkp->flags;
-}
-
-/*****************************************************************
-** dki_setflag () set a flag of a key
-*****************************************************************/
-dk_flag_t dki_setflag (dki_t *dkp, dk_flag_t flag)
-{
- return dkp->flags |= (ushort)flag;
-}
-
-/*****************************************************************
-** dki_unsetflag () unset a flag of a key
-*****************************************************************/
-dk_flag_t dki_unsetflag (dki_t *dkp, dk_flag_t flag)
-{
- return dkp->flags &= ~((ushort)flag);
-}
-
-/*****************************************************************
-** dki_isksk ()
-*****************************************************************/
-int dki_isksk (const dki_t *dkp)
-{
- assert (dkp != NULL);
- return (dkp->flags & DK_FLAG_KSK) == DK_FLAG_KSK;
-}
-
-/*****************************************************************
-** dki_isrevoked ()
-*****************************************************************/
-int dki_isrevoked (const dki_t *dkp)
-{
- assert (dkp != NULL);
- return (dkp->flags & DK_FLAG_REVOKE) == DK_FLAG_REVOKE;
-}
-
-/*****************************************************************
-** dki_isdepreciated ()
-*****************************************************************/
-int dki_isdepreciated (const dki_t *dkp)
-{
- return dki_status (dkp) == DKI_DEPRECIATED;
-}
-
-/*****************************************************************
-** dki_isactive ()
-*****************************************************************/
-int dki_isactive (const dki_t *dkp)
-{
- return dki_status (dkp) == DKI_ACTIVE;
-}
-
-/*****************************************************************
-** dki_ispublished ()
-*****************************************************************/
-int dki_ispublished (const dki_t *dkp)
-{
- return dki_status (dkp) == DKI_PUBLISHED;
-}
-
-
-/*****************************************************************
-** dki_status () return key status
-*****************************************************************/
-dk_status_t dki_status (const dki_t *dkp)
-{
- assert (dkp != NULL);
- return (dkp->status);
-}
-
-/*****************************************************************
-** dki_statusstr () return key status as string
-*****************************************************************/
-const char *dki_statusstr (const dki_t *dkp)
-{
- assert (dkp != NULL);
- switch ( dkp->status )
- {
- case DKI_ACT: return "active";
- case DKI_PUB: if ( dki_isksk (dkp) )
- return "standby";
- else
- return "published";
- case DKI_DEP: return "depreciated";
- case DKI_REV: return "revoked";
- case DKI_SEP: return "sep";
- }
- return "unknown";
-}
-
-/*****************************************************************
-** dki_add () add a key to the given list
-*****************************************************************/
-dki_t *dki_add (dki_t **list, dki_t *new)
-{
- dki_t *curr;
- dki_t *last;
-
- if ( list == NULL )
- return NULL;
- if ( new == NULL )
- return *list;
-
- last = curr = *list;
- while ( curr && dki_cmp (curr, new) < 0 )
- {
- last = curr;
- curr = curr->next;
- }
-
- if ( curr == *list ) /* add node at start of list */
- *list = new;
- else /* add node at end or between two nodes */
- last->next = new;
- new->next = curr;
-
- return *list;
-}
-
-/*****************************************************************
-** dki_search () search a key with the given tag, or the first
-** occurence of a key with the given name
-*****************************************************************/
-const dki_t *dki_search (const dki_t *list, int tag, const char *name)
-{
- const dki_t *curr;
-
- curr = list;
- if ( tag )
- while ( curr && (tag != curr->tag ||
- (name && *name && strcmp (name, curr->name) != 0)) )
- curr = curr->next;
- else if ( name && *name )
- while ( curr && strcmp (name, curr->name) != 0 )
- curr = curr->next;
- else
- curr = NULL;
-
- return curr;
-}
-
-#if defined(USE_TREE) && USE_TREE
-/*****************************************************************
-** dki_tadd () add a key to the given tree
-*****************************************************************/
-dki_t *dki_tadd (dki_t **tree, dki_t *new, int sub_before)
-{
- dki_t **p;
-
- if ( sub_before )
- p = tsearch (new, tree, dki_namecmp);
- else
- p = tsearch (new, tree, dki_revnamecmp);
- if ( *p == new )
- dbg_val ("dki_tadd: New entry %s added\n", new->name);
- else
- {
- dbg_val ("dki_tadd: New key added to %s\n", new->name);
- dki_add (p, new);
- }
-
- return *p;
-}
-
-/*****************************************************************
-** dki_tsearch () search a key with the given tag, or the first
-** occurence of a key with the given name
-*****************************************************************/
-const dki_t *dki_tsearch (const dki_t *tree, int tag, const char *name)
-{
- dki_t search;
- dki_t **p;
-
- search.tag = tag;
- snprintf (search.name, sizeof (search.name), "%s", name);
- p = tfind (&search, &tree, dki_namecmp);
- if ( p == NULL )
- return NULL;
-
- return dki_search (*p, tag, name);
-}
-#endif
-
-/*****************************************************************
-** dki_find () find the n'th ksk or zsk key with given status
-*****************************************************************/
-const dki_t *dki_find (const dki_t *list, int ksk, int status, int no)
-{
- const dki_t *dkp;
- const dki_t *last;
-
- last = NULL;
- for ( dkp = list; no > 0 && dkp; dkp = dkp->next )
- if ( dki_isksk (dkp) == ksk && dki_status (dkp) == status )
- {
- no--;
- last = dkp;
- }
-
- return last;
-}
-
-/*****************************************************************
-** dki_findalgo () find the n'th ksk or zsk key with given
-** algorithm and status
-*****************************************************************/
-const dki_t *dki_findalgo (const dki_t *list, int ksk, int alg, int status, int no)
-{
- const dki_t *dkp;
- const dki_t *last;
-
- last = NULL;
- for ( dkp = list; no > 0 && dkp; dkp = dkp->next )
- if ( dki_isksk (dkp) == ksk && dki_algo (dkp) == alg &&
- dki_status (dkp) == status )
- {
- no--;
- last = dkp;
- }
-
- return last;
-}
diff --git a/contrib/zkt-1.1.3/dki.h b/contrib/zkt-1.1.3/dki.h
deleted file mode 100644
index caedddb4..00000000
--- a/contrib/zkt-1.1.3/dki.h
+++ /dev/null
@@ -1,196 +0,0 @@
-/*****************************************************************
-**
-** @(#) dki.h -- Header file for DNSsec Key info/manipulation
-**
-** Copyright (c) July 2004 - Jan 2005, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-#ifndef DKI_H
-# define DKI_H
-
-# ifndef TYPES_H
-# include <sys/types.h>
-# include <stdio.h>
-# include <time.h>
-# endif
-
-# define MAX_LABELSIZE (255)
-# define MAX_FNAMESIZE (1+255+2+3+1+5+1+11)
- /* Kdomain.+ALG+KEYID.type */
- /* domain == FQDN (max 255) */
- /* ALG == 3; KEYID == 5 chars */
- /* type == key||published|private|depreciated == 11 chars */
-//# define MAX_DNAMESIZE (254)
-# define MAX_DNAMESIZE (1023)
- /* /path/name / filename */
-# define MAX_PATHSIZE (MAX_DNAMESIZE + 1 + MAX_FNAMESIZE)
-
-/* algorithm types */
-# define DK_ALGO_RSA 1 /* RFC2537 */
-# define DK_ALGO_DH 2 /* RFC2539 */
-# define DK_ALGO_DSA 3 /* RFC2536 (mandatory) */
-# define DK_ALGO_EC 4 /* */
-# define DK_ALGO_RSASHA1 5 /* RFC3110 */
-# define DK_ALGO_NSEC3DSA 6 /* symlink to alg 3 RFC5155 */
-# define DK_ALGO_NSEC3RSASHA1 7 /* symlink to alg 5 RFC5155 */
-# define DK_ALGO_RSASHA256 8 /* RFCxxx */
-# define DK_ALGO_RSASHA512 10 /* RFCxxx */
-# define DK_ALGO_NSEC3RSASHA256 DK_ALGO_RSASHA256 /* same as non nsec algorithm RFCxxx */
-# define DK_ALGO_NSEC3RSASHA512 DK_ALGO_RSASHA512 /* same as non nsec algorithm RFCxxx */
-
-/* protocol types */
-# define DK_PROTO_DNS 3
-
-/* flag bits */
-typedef enum { /* 11 1111 */
- /* 0123 4567 8901 2345 */
- DK_FLAG_KSK= 01, /* 0000 0000 0000 0001 Bit 15 RFC4034/RFC3757 */
- DK_FLAG_REVOKE= 0200, /* 0000 0000 1000 0000 Bit 8 RFC5011 */
- DK_FLAG_ZONE= 0400, /* 0000 0001 0000 0000 Bit 7 RFC4034 */
-} dk_flag_t;
-
-/* status types */
-typedef enum {
- DKI_SEP= 'e',
- DKI_SECUREENTRYPOINT= 'e',
- DKI_PUB= 'p',
- DKI_PUBLISHED= 'p',
- DKI_ACT= 'a',
- DKI_ACTIVE= 'a',
- DKI_DEP= 'd',
- DKI_DEPRECIATED= 'd',
- DKI_REV= 'r',
- DKI_REVOKED= 'r',
-} dk_status_t;
-
-# define DKI_KEY_FILEEXT ".key"
-# define DKI_PUB_FILEEXT ".published"
-# define DKI_ACT_FILEEXT ".private"
-# define DKI_DEP_FILEEXT ".depreciated"
-
-# define DKI_KSK 1
-# define DKI_ZSK 0
-
-typedef struct dki {
- char dname[MAX_DNAMESIZE+1]; /* directory */
- char fname[MAX_FNAMESIZE+1]; /* file name without extension */
- char name[MAX_LABELSIZE+1]; /* domain name or label */
- ushort algo; /* key algorithm */
- ushort proto; /* must be 3 (DNSSEC) */
- dk_flag_t flags; /* ZONE, optional SEP or REVOKE flag */
- time_t time; /* key file time */
- time_t gentime; /* key generation time (will be set on key generation and never changed) */
- time_t exptime; /* time the key was expired (0L if not) */
- ulong lifetime; /* proposed key life time at time of generation */
- uint tag; /* key id */
- dk_status_t status; /* key exist (".key") and name of private */
- /* key file is ".published", ".private" */
- /* or ".depreciated" */
- char *pubkey; /* base64 public key */
- struct dki *next; /* ptr to next entry in list */
-} dki_t;
-
-#if defined(USE_TREE) && USE_TREE
-/*
- * Instead of including <search.h>, which contains horrible false function
- * declarations, we declared it for our usage (Yes, these functions return
- * the adress of a pointer variable)
- */
-typedef enum
-{
- /* we change the naming to the new, and more predictive one, used by Knuth */
- PREORDER, /* preorder, */
- INORDER, /* postorder, */
- POSTORDER, /* endorder, */
- LEAF /* leaf */
-}
-VISIT;
-
-dki_t **tsearch (const dki_t *dkp, dki_t **tree, int(*compar)(const dki_t *, const dki_t *));
-dki_t **tfind (const dki_t *dkp, const dki_t **tree, int(*compar)(const dki_t *, const dki_t *));
-dki_t **tdelete (const dki_t *dkp, dki_t **tree, int(*compar)(const dki_t *, const dki_t *));
-void twalk (const dki_t *root, void (*action)(const dki_t **nodep, VISIT which, int depth));
-
-extern void dki_tfree (dki_t **tree);
-extern dki_t *dki_tadd (dki_t **tree, dki_t *new, int sub_before);
-extern int dki_tagcmp (const dki_t *a, const dki_t *b);
-extern int dki_namecmp (const dki_t *a, const dki_t *b);
-extern int dki_revnamecmp (const dki_t *a, const dki_t *b);
-extern int dki_allcmp (const dki_t *a, const dki_t *b);
-#endif
-
-extern dki_t *dki_read (const char *dir, const char *fname);
-extern int dki_readdir (const char *dir, dki_t **listp, int recursive);
-extern int dki_prt_trustedkey (const dki_t *dkp, FILE *fp);
-extern int dki_prt_managedkey (const dki_t *dkp, FILE *fp);
-extern int dki_prt_dnskey (const dki_t *dkp, FILE *fp);
-extern int dki_prt_dnskeyttl (const dki_t *dkp, FILE *fp, int ttl);
-extern int dki_prt_dnskey_raw (const dki_t *dkp, FILE *fp);
-extern int dki_prt_comment (const dki_t *dkp, FILE *fp);
-extern int dki_cmp (const dki_t *a, const dki_t *b);
-extern int dki_timecmp (const dki_t *a, const dki_t *b);
-extern int dki_age (const dki_t *dkp, time_t curr);
-extern dk_flag_t dki_getflag (const dki_t *dkp, time_t curr);
-extern dk_flag_t dki_setflag (dki_t *dkp, dk_flag_t flag);
-extern dk_flag_t dki_unsetflag (dki_t *dkp, dk_flag_t flag);
-extern dk_status_t dki_status (const dki_t *dkp);
-extern const char *dki_statusstr (const dki_t *dkp);
-extern int dki_isksk (const dki_t *dkp);
-extern int dki_isdepreciated (const dki_t *dkp);
-extern int dki_isrevoked (const dki_t *dkp);
-extern int dki_isactive (const dki_t *dkp);
-extern int dki_ispublished (const dki_t *dkp);
-extern time_t dki_algo (const dki_t *dkp);
-extern time_t dki_time (const dki_t *dkp);
-extern time_t dki_exptime (const dki_t *dkp);
-extern time_t dki_gentime (const dki_t *dkp);
-extern time_t dki_lifetime (const dki_t *dkp);
-extern ushort dki_lifetimedays (const dki_t *dkp);
-extern ushort dki_setlifetime (dki_t *dkp, int days);
-extern time_t dki_setexptime (dki_t *dkp, time_t sec);
-extern dki_t *dki_new (const char *dir, const char *name, int ksk, int algo, int bitsize, const char *rfile, int lf_days);
-extern dki_t *dki_remove (dki_t *dkp);
-extern dki_t *dki_destroy (dki_t *dkp);
-extern int dki_setstatus (dki_t *dkp, int status);
-extern int dki_setstatus_preservetime (dki_t *dkp, int status);
-extern dki_t *dki_add (dki_t **dkp, dki_t *new);
-extern const dki_t *dki_tsearch (const dki_t *tree, int tag, const char *name);
-extern const dki_t *dki_search (const dki_t *list, int tag, const char *name);
-extern const dki_t *dki_find (const dki_t *list, int ksk, int status, int first);
-extern const dki_t *dki_findalgo (const dki_t *list, int ksk, int alg, int status, int no);
-extern void dki_free (dki_t *dkp);
-extern void dki_freelist (dki_t **listp);
-extern char *dki_algo2str (int algo);
-extern char *dki_algo2sstr (int algo);
-extern const char *dki_geterrstr (void);
-
-#endif
diff --git a/contrib/zkt-1.1.3/doc/KeyRollover.ms b/contrib/zkt-1.1.3/doc/KeyRollover.ms
deleted file mode 100644
index d6d1a348..00000000
--- a/contrib/zkt-1.1.3/doc/KeyRollover.ms
+++ /dev/null
@@ -1,95 +0,0 @@
-.NH 1
-DNS Key Status Types and Filenames
-.PP
-.TS
-cfB | cfB s | cfB s | cfB | cfB
-cfB | cfB | cfB | cfB | cfB | cfB | cfB
-l | l | n | l | l | c | lfCW .
-Status Key Filename used for dnssec-zkt
-\^ Type Flags public private signing? label
-_
-active ZSK 256 .key .private y act ive
- KSK 257 .key .private y act ive
-.sp 0.2
-published ZSK 256 .key .published n pub lished
- KSK 257 .key .private n sta ndby
-.sp 0.2
-depreciated (retired) ZSK 256 .key .depreciated n dep reciated
-.sp 0.2
-revoked KSK 385 .key .private y rev oked
-.sp 0.2
-removed KSK 257 k*.key k*.private n -
-.sp 0.2
-sep KSK 257 .key - n sep
-.ig
-.sp 0.2
-(master KSK 257 M...key .private n -)
-..
-.TE
-.SP 2
-.NH 1
-Key rollover
-.PP
-.NH 2
-Zone signing key rollover (pre-publish RFC4641)
-.PP
-.TS
-rfB cfB |cfB |cfB |cfB
-lfB |cfB |cfB |cfB |cfB
-l |l |l |l |l .
-action create change remove
-keys newkey sig key old key
-_
-zsk1 active active depreciated
-zsk2 published active active
-.sp 0.3
-RRSIG zsk1 zsk1 zsk2 zsk2
-.TE
-.SP 2
-.NH 2
-Key signing key rollover (double signature RFC4641)
-.PP
-.TS
-rfB cfB |cfB |cfB |cfB
-lfB |cfB |cfB |cfB |cfB
-l |l |l |l |l .
-action create change remove
-keys newkey delegation old key
-_
-ksk\d1\u active active active
-ksk\d2\u active active active
-.sp 0.3
-DNSKEY RRSIG ksk1 ksk1,ksk2 ksk1,ksk2 ksk2
-.sp 0.3
-DS at parent DS\d1\u DS\d1\u DS\d2\u DS\d2\u
-.TE
-.\"RRSIG DNSKEY\dksk1\u DNSKEY\dksk1,ksk2\u DNSKEY\dksk1,ksk2\u DNSKEY\dksk2\u
-.SP 2
-.NH 2
-Key signing key rollover (rfc5011)
-.PP
-.TS
-rfB cfB |cfB |cfB
-lfB |cfB |cfB |cfB
-l |l |l |l .
-action newkey change delegation
-keys & rollover & remove old key
-_
-ksk\d1\u active revoke\v'-0.2'\(dg\v'+0.2'
-ksk\d2\u standby active active
-ksk\d3\u standby\v'-0.2'\(dd\v'+0.2' standby
-.sp 0.3
-DNSKEY RRSIG ksk1 ksk1,ksk2 ksk2
-.sp 0.3
-Parent DS DS\d1\u DS\d1\u DS\d2\u
- DS\d2\u DS\d2\u DS\d3\u
-.TE
-.LP
-\v'-0.2'\(dg\v'0.2'
-Have to remain until the remove hold-down time is expired,
-which is 30days at a minimum.
-.LP
-\v'-0.2'\(dd\v'0.2'
-Will be the standby key after the hold-down time is expired
-.br
-Add holdtime \(eq max(30days, TTL of DNSKEY)
diff --git a/contrib/zkt-1.1.3/doc/KeyRollover.ps b/contrib/zkt-1.1.3/doc/KeyRollover.ps
deleted file mode 100644
index 7f22fdea..00000000
--- a/contrib/zkt-1.1.3/doc/KeyRollover.ps
+++ /dev/null
@@ -1,304 +0,0 @@
-%!PS-Adobe-3.0
-%%Creator: groff version 1.19.2
-%%CreationDate: Mon Jul 14 23:23:30 2008
-%%DocumentNeededResources: font Times-Bold
-%%+ font Times-Roman
-%%+ font Courier
-%%+ font Symbol
-%%DocumentSuppliedResources: procset grops 1.19 2
-%%Pages: 1
-%%PageOrder: Ascend
-%%DocumentMedia: Default 595 842 0 () ()
-%%Orientation: Portrait
-%%EndComments
-%%BeginDefaults
-%%PageMedia: Default
-%%EndDefaults
-%%BeginProlog
-%%BeginResource: procset grops 1.19 2
-%!PS-Adobe-3.0 Resource-ProcSet
-/setpacking where{
-pop
-currentpacking
-true setpacking
-}if
-/grops 120 dict dup begin
-/SC 32 def
-/A/show load def
-/B{0 SC 3 -1 roll widthshow}bind def
-/C{0 exch ashow}bind def
-/D{0 exch 0 SC 5 2 roll awidthshow}bind def
-/E{0 rmoveto show}bind def
-/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
-/G{0 rmoveto 0 exch ashow}bind def
-/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
-/I{0 exch rmoveto show}bind def
-/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
-/K{0 exch rmoveto 0 exch ashow}bind def
-/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
-/M{rmoveto show}bind def
-/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
-/O{rmoveto 0 exch ashow}bind def
-/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
-/Q{moveto show}bind def
-/R{moveto 0 SC 3 -1 roll widthshow}bind def
-/S{moveto 0 exch ashow}bind def
-/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
-/SF{
-findfont exch
-[exch dup 0 exch 0 exch neg 0 0]makefont
-dup setfont
-[exch/setfont cvx]cvx bind def
-}bind def
-/MF{
-findfont
-[5 2 roll
-0 3 1 roll
-neg 0 0]makefont
-dup setfont
-[exch/setfont cvx]cvx bind def
-}bind def
-/level0 0 def
-/RES 0 def
-/PL 0 def
-/LS 0 def
-/MANUAL{
-statusdict begin/manualfeed true store end
-}bind def
-/PLG{
-gsave newpath clippath pathbbox grestore
-exch pop add exch pop
-}bind def
-/BP{
-/level0 save def
-1 setlinecap
-1 setlinejoin
-72 RES div dup scale
-LS{
-90 rotate
-}{
-0 PL translate
-}ifelse
-1 -1 scale
-}bind def
-/EP{
-level0 restore
-showpage
-}def
-/DA{
-newpath arcn stroke
-}bind def
-/SN{
-transform
-.25 sub exch .25 sub exch
-round .25 add exch round .25 add exch
-itransform
-}bind def
-/DL{
-SN
-moveto
-SN
-lineto stroke
-}bind def
-/DC{
-newpath 0 360 arc closepath
-}bind def
-/TM matrix def
-/DE{
-TM currentmatrix pop
-translate scale newpath 0 0 .5 0 360 arc closepath
-TM setmatrix
-}bind def
-/RC/rcurveto load def
-/RL/rlineto load def
-/ST/stroke load def
-/MT/moveto load def
-/CL/closepath load def
-/Fr{
-setrgbcolor fill
-}bind def
-/setcmykcolor where{
-pop
-/Fk{
-setcmykcolor fill
-}bind def
-}if
-/Fg{
-setgray fill
-}bind def
-/FL/fill load def
-/LW/setlinewidth load def
-/Cr/setrgbcolor load def
-/setcmykcolor where{
-pop
-/Ck/setcmykcolor load def
-}if
-/Cg/setgray load def
-/RE{
-findfont
-dup maxlength 1 index/FontName known not{1 add}if dict begin
-{
-1 index/FID ne{def}{pop pop}ifelse
-}forall
-/Encoding exch def
-dup/FontName exch def
-currentdict end definefont pop
-}bind def
-/DEFS 0 def
-/EBEGIN{
-moveto
-DEFS begin
-}bind def
-/EEND/end load def
-/CNT 0 def
-/level1 0 def
-/PBEGIN{
-/level1 save def
-translate
-div 3 1 roll div exch scale
-neg exch neg exch translate
-0 setgray
-0 setlinecap
-1 setlinewidth
-0 setlinejoin
-10 setmiterlimit
-[]0 setdash
-/setstrokeadjust where{
-pop
-false setstrokeadjust
-}if
-/setoverprint where{
-pop
-false setoverprint
-}if
-newpath
-/CNT countdictstack def
-userdict begin
-/showpage{}def
-/setpagedevice{}def
-}bind def
-/PEND{
-countdictstack CNT sub{end}repeat
-level1 restore
-}bind def
-end def
-/setpacking where{
-pop
-setpacking
-}if
-%%EndResource
-%%EndProlog
-%%BeginSetup
-%%BeginFeature: *PageSize Default
-<< /PageSize [ 595 842 ] /ImagingBBox null >> setpagedevice
-%%EndFeature
-%%IncludeResource: font Times-Bold
-%%IncludeResource: font Times-Roman
-%%IncludeResource: font Courier
-%%IncludeResource: font Symbol
-grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
-def/PL 841.89 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron
-/Zcaron/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef
-/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
-/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
-/.notdef/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
-/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
-/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
-/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
-/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
-/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
-/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
-/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
-/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
-/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
-/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
-/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
-/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
-/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
-/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
-/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
-/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
-/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
-/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
-/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
-/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
-/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
-/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
-/Courier@0 ENC0/Courier RE/Times-Roman@0 ENC0/Times-Roman RE
-/Times-Bold@0 ENC0/Times-Bold RE
-%%EndSetup
-%%Page: 1 1
-%%BeginPageSetup
-BP
-%%EndPageSetup
-/F0 10/Times-Bold@0 SF 2.5(1. DNS)72 84 R -.25(Ke)2.5 G 2.5(yS).25 G
-(tatus T)-2.5 E(ypes and Filenames)-.74 E -.25(Ke)189.22 105.6 S 63.235
-(yF).25 G 40.415(ilename used)-63.235 F -.25(fo)2.5 G 29.33(rd).25 G
-(nssec-zkt)-29.33 E -.74(Ty)168.35 117.6 S 12.5(pe Flags).74 F 23.57
-(public pri)16.95 F -.1(va)-.1 G 21.62(te signing?).1 F(label)40.72 E
-(Status)99.34 111.6 Q .4 LW 473.8 122.1 72 122.1 DL/F1 10/Times-Roman@0
-SF(acti)72 131.6 Q 70.67 -.15(ve Z)-.25 H 18.43(SK 256).15 F(.k)18.89 E
-26.69 -.15(ey .)-.1 H(pri).15 E -.25(va)-.25 G 46.605(te y).25 F/F2 10
-/Courier@0 SF(act ive)30.285 E F1 17.32(KSK 257)168.35 143.6 R(.k)18.89
-E 26.69 -.15(ey .)-.1 H(pri).15 E -.25(va)-.25 G 46.605(te y).25 F F2
-(act ive)30.285 E F1 54.96(published ZSK)72 158 R 16.39(256 .k)20.93 F
-26.69 -.15(ey .)-.1 H 34.985(published n).15 F F2(pub lished)30.285 E F1
-17.32(KSK 257)168.35 170 R(.k)18.89 E 26.69 -.15(ey .)-.1 H(pri).15 E
--.25(va)-.25 G 46.605(te n).25 F F2(sta ndby)30.285 E F1
-(depreciated \(retired\))72 184.4 Q 18.43(ZSK 256)15 F(.k)18.89 E 26.69
--.15(ey .)-.1 H 27.785(depreciated n).15 F F2(dep reciated)30.285 E F1
-(re)72 198.8 Q -.2(vo)-.25 G -.1(ke).2 G 64.69(dK).1 G 17.32(SK 385)
--64.69 F(.k)18.89 E 26.69 -.15(ey .)-.1 H(pri).15 E -.25(va)-.25 G
-46.605(te y).25 F F2(rev oked)30.285 E F1(remo)72 213.2 Q -.15(ve)-.15 G
-61.66(dK).15 G 17.32(SK 257)-61.66 F(k*.k)18.89 E 16.69 -.15(ey k)-.1 H
-(*.pri).15 E -.25(va)-.25 G 36.605(te n).25 F F2(-)30.285 E F1 80.52
-(sep KSK)72 227.6 R 16.39(257 .k)19.82 F 26.69 -.15(ey -)-.1 H(n)75.695
-E F2(sep)30.285 E 394.3 96.1 394.3 230.1 DL 343.73 96.1 343.73 230.1 DL
-280.14 108.1 280.14 230.1 DL 234.56 96.1 234.56 230.1 DL 196.78 108.1
-196.78 230.1 DL 160.85 96.1 160.85 230.1 DL F0 2.5(2. K)72 257.6 R(ey r)
--.25 E(ollo)-.18 E -.1(ve)-.1 G(r).1 E 2.5(2.1. Zone)72 285.2 R
-(signing k)2.5 E(ey r)-.1 E(ollo)-.18 E -.1(ve)-.1 G 2.5(r\().1 G(pr)
--2.5 E(e-publish RFC4641\))-.18 E 57.47(action cr)75.34 306.8 R 27.035
-(eate change)-.18 F -.18(re)23.045 G(mo).18 E -.1(ve)-.1 G -.1(ke)72
-318.8 S 65.025(ys newk).1 F 24.395(ey sig)-.1 F -.1(ke)2.5 G 23.775(yo)
-.1 G(ld k)-23.775 E(ey)-.1 E 301.18 323.3 72 323.3 DL F1 23.62
-(zsk1 acti)72 332.8 R 12.8 -.15(ve a)-.25 H(cti).15 E 28.21 -.15(ve d)
--.25 H(epreciated).15 E 62.1(zsk2 published)72 344.8 R(acti)15 E 35.41
--.15(ve a)-.25 H(cti).15 E -.15(ve)-.25 G 12.5(RRSIG zsk1)72 360.4 R
-33.06(zsk1 zsk2)20.15 F(zsk2)42.76 E 262.41 297.3 262.41 362.9 DL 201.32
-297.3 201.32 362.9 DL 147.43 297.3 147.43 362.9 DL 108.95 309.3 108.95
-362.9 DL F0 2.5(2.2. K)72 390.4 R(ey signing k)-.25 E(ey r)-.1 E(ollo)
--.18 E -.1(ve)-.1 G 2.5(r\().1 G(double signatur)-2.5 E 2.5(eR)-.18 G
-(FC4641\))-2.5 E 58.165(action cr)118.39 412 R 26.63(eate change)-.18 F
--.18(re)21.945 G(mo).18 E -.1(ve)-.1 G -.1(ke)72 424 S 108.77(ys newk).1
-F 16.58(ey delegation)-.1 F(old k)15.265 E(ey)-.1 E 343.42 428.5 72
-428.5 DL F1(ksk)72 438 Q(1)5 I(acti)68.61 -5 M 12.8 -.15(ve a)-.25 H
-(cti).15 E 29.6 -.15(ve a)-.25 H(cti).15 E -.15(ve)-.25 G(ksk)72 450 Q
-(2)5 I(acti)107.09 -5 M 29.6 -.15(ve a)-.25 H(cti).15 E 33.21 -.15(ve a)
--.25 H(cti).15 E -.15(ve)-.25 G(DNSKEY RRSIG)72 465.6 Q 17.09
-(ksk1 ksk1,ksk2)15 F 16.11(ksk1,ksk2 ksk2)15 F(DS at parent)72 481.2 Q
-(DS)37.51 E(1)5 I(DS)20.7 -5 M(1)5 I(DS)37.5 -5 M(2)5 I(DS)41.11 -5 M(2)
-5 I 304.65 402.5 304.65 483.7 DL 245.76 402.5 245.76 483.7 DL 190.48
-402.5 190.48 483.7 DL 152 414.5 152 483.7 DL F0 2.5(2.3. K)72 511.2 R
-(ey signing k)-.25 E(ey r)-.1 E(ollo)-.18 E -.1(ve)-.1 G 2.5(r\().1 G
-(rfc5011\))-2.5 E 63.465(action newk)118.39 532.8 R 19.855(ey change)-.1
-F(delegation)2.5 E -.1(ke)72 544.8 S 112.32(ys &).1 F -.18(ro)2.5 G(llo)
-.18 E -.1(ve)-.1 G 15.525(r&).1 G -.18(re)-13.025 G(mo).18 E .2 -.1
-(ve o)-.1 H(ld k).1 E(ey)-.1 E 341.33 549.3 72 549.3 DL F1(ksk)72 558.8
-Q(1)5 I(acti)68.61 -5 M 20.43 -.15(ve r)-.25 H -2.2 -.25(ev o).15 H -.1
-(ke).25 G<87>.1 -2.4 M(ksk)72 570.8 Q(2)5 I 12.5(standby acti)68.61 -5 N
-33.65 -.15(ve a)-.25 H(cti).15 E -.15(ve)-.25 G(ksk)72 582.8 Q(3)5 I
-(standby)114.72 -5 M<88>-2.4 I(standby)23.22 2.4 M(DNSKEY RRSIG)72 598.4
-Q 24.72(ksk1 ksk1,ksk2)15 F(ksk2)19.05 E -.15(Pa)72 614 S(rent DS).15 E
-(DS)46.82 E(1)5 I(DS)28.33 -5 M(1)5 I(DS)41.55 -5 M(2)5 I(DS)159.5 626 Q
-(2)5 I(DS)28.33 -5 M(2)5 I(DS)41.55 -5 M(3)5 I 257.44 523.3 257.44 628.5
-DL 198.11 523.3 198.11 628.5 DL 152 535.3 152 628.5 DL<87>72 645.2 Q(Ha)
-2.5 2.4 M .3 -.15(ve t)-.2 H 2.5(or).15 G(emain until the remo)-2.5 E .3
--.15(ve h)-.15 H(old-do).15 E(wn time is e)-.25 E
-(xpired, which is 30days at a minimum.)-.15 E<88>72 660.8 Q -.4(Wi)2.5
-2.4 O(ll be the standby k).4 E .3 -.15(ey a)-.1 H(fter the hold-do).15 E
-(wn time is e)-.25 E(xpired)-.15 E(Add holdtime)72 675.2 Q/F3 10/Symbol
-SF(=)2.5 E F1(max\(30days, TTL of DNSKEY\))2.5 E 0 Cg EP
-%%Trailer
-end
-%%EOF
diff --git a/contrib/zkt-1.1.3/doc/draft-gudmundsson-life-of-dnskey-00.txt b/contrib/zkt-1.1.3/doc/draft-gudmundsson-life-of-dnskey-00.txt
deleted file mode 100644
index 18cda6c7..00000000
--- a/contrib/zkt-1.1.3/doc/draft-gudmundsson-life-of-dnskey-00.txt
+++ /dev/null
@@ -1,616 +0,0 @@
-
-
-
-Intended Status: Informational O. Gudmundsson
-Network Working Group OGUD Consulting LLC
-Internet-Draft J. Ihren
-Expires: August 21, 2008 AAB
- February 18, 2008
-
-
- Names of States in the life of a DNSKEY
- draft-gudmundsson-life-of-dnskey-00
-
-Status of this Memo
-
- By submitting this Internet-Draft, each author represents that any
- applicable patent or other IPR claims of which he or she is aware
- have been or will be disclosed, and any of which he or she becomes
- aware will be disclosed, in accordance with Section 6 of BCP 79.
-
- Internet-Drafts are working documents of the Internet Engineering
- Task Force (IETF), its areas, and its working groups. Note that
- other groups may also distribute working documents as Internet-
- Drafts.
-
- Internet-Drafts are draft documents valid for a maximum of six months
- and may be updated, replaced, or obsoleted by other documents at any
- time. It is inappropriate to use Internet-Drafts as reference
- material or to cite them other than as "work in progress."
-
- The list of current Internet-Drafts can be accessed at
- http://www.ietf.org/ietf/1id-abstracts.txt.
-
- The list of Internet-Draft Shadow Directories can be accessed at
- http://www.ietf.org/shadow.html.
-
- This Internet-Draft will expire on August 21, 2008.
-
-Copyright Notice
-
- Copyright (C) The IETF Trust (2008).
-
-
-
-
-
-
-
-
-
-
-
-
-
-Gudmundsson & Ihren Expires August 21, 2008 [Page 1]
-
-Internet-Draft DNSSEC Key life stages. February 2008
-
-
-Abstract
-
- This document recommends a specific terminology to use when
- expressing the state that a DNSKEY is in at particular time. This
- does not affect how the protocol operates in any way.
-
-
-Table of Contents
-
- 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
- 2. DNSKEY timeline . . . . . . . . . . . . . . . . . . . . . . . 4
- 3. Life stages of a DNSKEY . . . . . . . . . . . . . . . . . . . 5
- 3.1. Generated . . . . . . . . . . . . . . . . . . . . . . . . 5
- 3.2. Published . . . . . . . . . . . . . . . . . . . . . . . . 5
- 3.2.1. Pre-Publication . . . . . . . . . . . . . . . . . . . 5
- 3.2.2. Out-Of-Band Publication . . . . . . . . . . . . . . . 5
- 3.3. Active . . . . . . . . . . . . . . . . . . . . . . . . . . 5
- 3.4. Retired . . . . . . . . . . . . . . . . . . . . . . . . . 5
- 3.5. Removed . . . . . . . . . . . . . . . . . . . . . . . . . 6
- 3.5.1. Lame . . . . . . . . . . . . . . . . . . . . . . . . . 6
- 3.5.2. Stale . . . . . . . . . . . . . . . . . . . . . . . . 6
- 3.6. Revoked . . . . . . . . . . . . . . . . . . . . . . . . . 6
- 4. Security considerations . . . . . . . . . . . . . . . . . . . 7
- 5. IANA considerations . . . . . . . . . . . . . . . . . . . . . 8
- 6. References . . . . . . . . . . . . . . . . . . . . . . . . . . 9
- 6.1. Normative References . . . . . . . . . . . . . . . . . . . 9
- 6.2. Informative References . . . . . . . . . . . . . . . . . . 9
- Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 10
- Intellectual Property and Copyright Statements . . . . . . . . . . 11
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Gudmundsson & Ihren Expires August 21, 2008 [Page 2]
-
-Internet-Draft DNSSEC Key life stages. February 2008
-
-
-1. Introduction
-
- When the editors of this document where comparing their DNSSEC key
- management projects they discovered that they where discussing
- roughly the same thing but using different terminology.
-
- This document presents a unified terminology to use when describing
- the current state of a DNSKEY.
-
- The DNSSEC standards documents ([1], [2] and [3]) do not address the
- required states for the key management of a DNSSEC key. The DNSSEC
- Operational Practices [4] document does propose that keys be
- published before use but uses inconsistent or confusing terms. This
- document assumes basic understanding of DNSSEC and key management.
-
- The terms proposed in this document attempt to avoid any confusion
- and make the states of keys to be as clear as possible. The terms
- used in this document are intended as a operational supplement to the
- terms defined in Section 2 of [1].
-
- To large extent this discussion is motivated by Trust anchor keys but
- the same terminology can be used for zone signing keys.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Gudmundsson & Ihren Expires August 21, 2008 [Page 3]
-
-Internet-Draft DNSSEC Key life stages. February 2008
-
-
-2. DNSKEY timeline
-
- The model in this document is that keys progress through a state
- machine along a one-way path, keys never move to an earlier states.
-
-
-
- GENERATED----------> PUBLISHED ---> ACTIVE ---> RETIRED --> REMOVED
- | ^ | | | ^
- | | | | v |
- +--> Pre-PUBLISHED--+ +--------+---------> REVOKED ---+
-
-
- DNSKEY time line.
-
- There are few more states that are defined below but these apply only
- to the publisher of TA's and the consumer of TA's. Two of these are
- sub-sets of the Published state, the other two are error states.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Gudmundsson & Ihren Expires August 21, 2008 [Page 4]
-
-Internet-Draft DNSSEC Key life stages. February 2008
-
-
-3. Life stages of a DNSKEY
-
-3.1. Generated
-
- Once a key is generated it enters state Generated and stays there
- until the next state. While in this state only the owner of the key
- is aware of its existence and can prepare for its future use.
-
-3.2. Published
-
- Once the key is added to the DNSKEY set of a zone the key is there
- for the world to see, or published. The key needs to remain in this
- state for some time to propagate to all validators that have cached
- the prior version of the DNSKEY set. In the case of KSK the key
- should remain in this state for a longer time as documented in DNSSEC
- Timers RFC [5].
-
-3.2.1. Pre-Publication
-
- In certain circumstances a zone owner may want to give out a new
- Trust Anchor before exposing the actual public key. In this case the
- zone can publish a DS record of the key. This allows others to
- configure the trust anchor but will not be able to use the key until
- the key is published in the DNSKEY RRset.
-
-3.2.2. Out-Of-Band Publication
-
- In certain circumstances a domain may want to give out a new Trust
- Anchor outside DNS to give others a long lead time to configure the
- new key as trust anchor. The reason people may want to do this is to
- keep the size of the DNSKEY set smaller and only add new trust anchor
- just before the key goes into use. One likely use for this is the
- DNS "." root key as it does not have a parent that can publish a DS
- record for it. The publication mechanism does not matter it can be
- any one of web-site, advertisement in Financial Times and other
- international publication, e-mail to DNS related mailing lists, etc..
-
-3.3. Active
-
- The key is in ACTIVE state while it is actively signing data in the
- zone it resides in. It is one of the the keys that are signing the
- zone or parts of the zone.
-
-3.4. Retired
-
- When the key is no longer used for signing the zone it enters state
- Retired. In this state there may still be signatures by the key in
- cached data from the zone available at recursive servers, but the
-
-
-
-Gudmundsson & Ihren Expires August 21, 2008 [Page 5]
-
-Internet-Draft DNSSEC Key life stages. February 2008
-
-
- authoritative servers for the zone do no longer carry any signatures
- generated by the key.
-
-3.5. Removed
-
- Once the key is removed from the DNSKEY RRset it enters the state
- Removed. At this point all signatures by the key that may still be
- temporarily valid will fail to verify once the validator refreshes
- the DNSKEY RRset in its memory.
-
- Therefore "removal" of a key is typically not done until all the
- cached signatures have expired. Entering this state too early may
- cause number of validators to end up with STALE Trust Anchors.
-
-3.5.1. Lame
-
- A Trust Anchor is Lame if the parent continues to publish DS pointing
- to the key after it has been removed from the DNSKEY RRset. A Trust
- Anchor is arguably Lame if there are no signatures by a Retired KSK
- in the zone.
-
-3.5.2. Stale
-
- A Stale Trust Anchor is an old TA that remains in a validators list
- of active key(s) after the key has been removed from the zone's
- DNSKEY RRset.
-
-3.6. Revoked
-
- There are times when a zone wants to signal that a particular key
- should not be used at all. The mechanism to do this is to set the
- REVOKE bit [5]. Any key in any of the while the key is the DNSSKEY
- set can be exited to Revoked state. After some time in the Revoke
- state the key will be Removed.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Gudmundsson & Ihren Expires August 21, 2008 [Page 6]
-
-Internet-Draft DNSSEC Key life stages. February 2008
-
-
-4. Security considerations
-
- TBD
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Gudmundsson & Ihren Expires August 21, 2008 [Page 7]
-
-Internet-Draft DNSSEC Key life stages. February 2008
-
-
-5. IANA considerations
-
- This document does not have any IANA actions.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Gudmundsson & Ihren Expires August 21, 2008 [Page 8]
-
-Internet-Draft DNSSEC Key life stages. February 2008
-
-
-6. References
-
-6.1. Normative References
-
-6.2. Informative References
-
- [1] Arends, R., Austein, R., Larson, M., Massey, D., and S. Rose,
- "DNS Security Introduction and Requirements", RFC 4033,
- March 2005.
-
- [2] Arends, R., Austein, R., Larson, M., Massey, D., and S. Rose,
- "Resource Records for the DNS Security Extensions", RFC 4034,
- March 2005.
-
- [3] Arends, R., Austein, R., Larson, M., Massey, D., and S. Rose,
- "Protocol Modifications for the DNS Security Extensions",
- RFC 4035, March 2005.
-
- [4] Kolkman, O. and R. Gieben, "DNSSEC Operational Practices",
- RFC 4641, September 2006.
-
- [5] StJohns, M., "Automated Updates of DNS Security (DNSSEC) Trust
- Anchors", RFC 5011, September 2007.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Gudmundsson & Ihren Expires August 21, 2008 [Page 9]
-
-Internet-Draft DNSSEC Key life stages. February 2008
-
-
-Authors' Addresses
-
- Olafur Gudmundsson
- OGUD Consulting LLC
- 3821 Village Park Drive
- Chevy Chase, MD 20815
- USA
-
- Email: ogud@ogud.com
-
-
- Johan Ihren
- Automatica, AB
- Bellmansgatan 30
- Stockholm, SE-118 47
- Sweden
-
- Email: johani@automatica.se
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Gudmundsson & Ihren Expires August 21, 2008 [Page 10]
-
-Internet-Draft DNSSEC Key life stages. February 2008
-
-
-Full Copyright Statement
-
- Copyright (C) The IETF Trust (2008).
-
- This document is subject to the rights, licenses and restrictions
- contained in BCP 78, and except as set forth therein, the authors
- retain all their rights.
-
- This document and the information contained herein are provided on an
- "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
- OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
- THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS
- OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
- THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
- WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-
-
-Intellectual Property
-
- The IETF takes no position regarding the validity or scope of any
- Intellectual Property Rights or other rights that might be claimed to
- pertain to the implementation or use of the technology described in
- this document or the extent to which any license under such rights
- might or might not be available; nor does it represent that it has
- made any independent effort to identify any such rights. Information
- on the procedures with respect to rights in RFC documents can be
- found in BCP 78 and BCP 79.
-
- Copies of IPR disclosures made to the IETF Secretariat and any
- assurances of licenses to be made available, or the result of an
- attempt made to obtain a general license or permission for the use of
- such proprietary rights by implementers or users of this
- specification can be obtained from the IETF on-line IPR repository at
- http://www.ietf.org/ipr.
-
- The IETF invites any interested party to bring to its attention any
- copyrights, patents or patent applications, or other proprietary
- rights that may cover technology that may be required to implement
- this standard. Please address the information to the IETF at
- ietf-ipr@ietf.org.
-
-
-Acknowledgment
-
- Funding for the RFC Editor function is provided by the IETF
- Administrative Support Activity (IASA).
-
-
-
-
-
-Gudmundsson & Ihren Expires August 21, 2008 [Page 11]
-
diff --git a/contrib/zkt-1.1.3/doc/draft-ietf-dnsop-rfc4641bis-01.txt b/contrib/zkt-1.1.3/doc/draft-ietf-dnsop-rfc4641bis-01.txt
deleted file mode 100644
index f7d83e9d..00000000
--- a/contrib/zkt-1.1.3/doc/draft-ietf-dnsop-rfc4641bis-01.txt
+++ /dev/null
@@ -1,2128 +0,0 @@
-
-
-
-DNSOP O. Kolkman
-Internet-Draft NLnet Labs
-Obsoletes: 2541 (if approved) R. Gieben
-Intended status: BCP
-Expires: September 8, 2009 March 7, 2009
-
-
- DNSSEC Operational Practices, Version 2
- draft-ietf-dnsop-rfc4641bis-01
-
-Status of This Memo
-
- This Internet-Draft is submitted to IETF in full conformance with the
- provisions of BCP 78 and BCP 79. This document may contain material
- from IETF Documents or IETF Contributions published or made publicly
- available before November 10, 2008. The person(s) controlling the
- copyright in some of this material may not have granted the IETF
- Trust the right to allow modifications of such material outside the
- IETF Standards Process. Without obtaining an adequate license from
- the person(s) controlling the copyright in such materials, this
- document may not be modified outside the IETF Standards Process, and
- derivative works of it may not be created outside the IETF Standards
- Process, except to format it for publication as an RFC or to
- translate it into languages other than English.
-
- Internet-Drafts are working documents of the Internet Engineering
- Task Force (IETF), its areas, and its working groups. Note that
- other groups may also distribute working documents as Internet-
- Drafts.
-
- Internet-Drafts are draft documents valid for a maximum of six months
- and may be updated, replaced, or obsoleted by other documents at any
- time. It is inappropriate to use Internet-Drafts as reference
- material or to cite them other than as "work in progress."
-
- The list of current Internet-Drafts can be accessed at
- http://www.ietf.org/ietf/1id-abstracts.txt.
-
- The list of Internet-Draft Shadow Directories can be accessed at
- http://www.ietf.org/shadow.html.
-
- This Internet-Draft will expire on September 8, 2009.
-
-Copyright Notice
-
- Copyright (c) 2009 IETF Trust and the persons identified as the
- document authors. All rights reserved.
-
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 1]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- This document is subject to BCP 78 and the IETF Trust's Legal
- Provisions Relating to IETF Documents in effect on the date of
- publication of this document (http://trustee.ietf.org/license-info).
- Please review these documents carefully, as they describe your rights
- and restrictions with respect to this document.
-
-Abstract
-
- This document describes a set of practices for operating the DNS with
- security extensions (DNSSEC). The target audience is zone
- administrators deploying DNSSEC.
-
- The document discusses operational aspects of using keys and
- signatures in the DNS. It discusses issues of key generation, key
- storage, signature generation, key rollover, and related policies.
-
- This document obsoletes RFC 2541, as it covers more operational
- ground and gives more up-to-date requirements with respect to key
- sizes and the new DNSSEC specification.
-
-Table of Contents
-
- 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4
- 1.1. The Use of the Term 'key' . . . . . . . . . . . . . . . . 5
- 1.2. Time Definitions . . . . . . . . . . . . . . . . . . . . . 5
- 2. Keeping the Chain of Trust Intact . . . . . . . . . . . . . . 5
- 3. Keys Generation and Storage . . . . . . . . . . . . . . . . . 6
- 3.1. Zone and Key Signing Keys . . . . . . . . . . . . . . . . 6
- 3.1.1. Motivations for the KSK and ZSK Separation . . . . . . 7
- 3.1.2. Differentiation for 'High-Level' Zones . . . . . . . . 9
- 3.2. Key Generation . . . . . . . . . . . . . . . . . . . . . . 9
- 3.3. Key Effectivity Period . . . . . . . . . . . . . . . . . . 9
- 3.4. Key Algorithm . . . . . . . . . . . . . . . . . . . . . . 10
- 3.5. Key Sizes . . . . . . . . . . . . . . . . . . . . . . . . 10
- 3.6. Private Key Storage . . . . . . . . . . . . . . . . . . . 11
- 4. Signature Generation, Key Rollover, and Related Policies . . . 12
- 4.1. Time in DNSSEC . . . . . . . . . . . . . . . . . . . . . . 12
- 4.1.1. Time Considerations . . . . . . . . . . . . . . . . . 13
- 4.2. Key Rollovers . . . . . . . . . . . . . . . . . . . . . . 15
- 4.2.1. Zone Signing Key Rollovers . . . . . . . . . . . . . . 15
- 4.2.1.1. Pre-Publish Key Rollover . . . . . . . . . . . . . 15
- 4.2.1.2. Double Signature Zone Signing Key Rollover . . . . 17
- 4.2.1.3. Pros and Cons of the Schemes . . . . . . . . . . . 19
- 4.2.2. Key Signing Key Rollovers . . . . . . . . . . . . . . 19
- 4.2.3. Difference Between ZSK and KSK Rollovers . . . . . . . 21
- 4.2.4. Key algorithm rollover . . . . . . . . . . . . . . . . 22
- 4.2.5. Automated Key Rollovers . . . . . . . . . . . . . . . 23
- 4.3. Planning for Emergency Key Rollover . . . . . . . . . . . 24
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 2]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- 4.3.1. KSK Compromise . . . . . . . . . . . . . . . . . . . . 24
- 4.3.1.1. Keeping the Chain of Trust Intact . . . . . . . . 25
- 4.3.1.2. Breaking the Chain of Trust . . . . . . . . . . . 26
- 4.3.2. ZSK Compromise . . . . . . . . . . . . . . . . . . . . 26
- 4.3.3. Compromises of Keys Anchored in Resolvers . . . . . . 26
- 4.4. Parental Policies . . . . . . . . . . . . . . . . . . . . 27
- 4.4.1. Initial Key Exchanges and Parental Policies
- Considerations . . . . . . . . . . . . . . . . . . . . 27
- 4.4.2. Storing Keys or Hashes? . . . . . . . . . . . . . . . 27
- 4.4.3. Security Lameness . . . . . . . . . . . . . . . . . . 28
- 4.4.4. DS Signature Validity Period . . . . . . . . . . . . . 28
- 4.4.5. (Non) Cooperating Registrars . . . . . . . . . . . . . 29
- 5. Security Considerations . . . . . . . . . . . . . . . . . . . 30
- 6. IANA considerations . . . . . . . . . . . . . . . . . . . . . 30
- 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 30
- 8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 31
- 8.1. Normative References . . . . . . . . . . . . . . . . . . . 31
- 8.2. Informative References . . . . . . . . . . . . . . . . . . 31
- Appendix A. Terminology . . . . . . . . . . . . . . . . . . . . . 32
- Appendix B. Zone Signing Key Rollover How-To . . . . . . . . . . 34
- Appendix C. Typographic Conventions . . . . . . . . . . . . . . . 34
- Appendix D. Document Editing History . . . . . . . . . . . . . . 37
- D.1. draft-ietf-dnsop-rfc4641-00 . . . . . . . . . . . . . . . 37
- D.2. version 0->1 . . . . . . . . . . . . . . . . . . . . . . . 37
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 3]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
-1. Introduction
-
- This document describes how to run a DNS Security (DNSSEC)-enabled
- environment. It is intended for operators who have knowledge of the
- DNS (see RFC 1034 [1] and RFC 1035 [2]) and want to deploy DNSSEC.
- See RFC 4033 [3] for an introduction to DNSSEC, RFC 4034 [4] for the
- newly introduced Resource Records (RRs), and RFC 4035 [5] for the
- protocol changes.
-
- During workshops and early operational deployment tests, operators
- and system administrators have gained experience about operating the
- DNS with security extensions (DNSSEC). This document translates
- these experiences into a set of practices for zone administrators.
- At the time of writing, there exists very little experience with
- DNSSEC in production environments; this document should therefore
- explicitly not be seen as representing 'Best Current Practices'.
- [OK: Is this document ripe enough to shoot for BCP?]
-
- The procedures herein are focused on the maintenance of signed zones
- (i.e., signing and publishing zones on authoritative servers). It is
- intended that maintenance of zones such as re-signing or key
- rollovers be transparent to any verifying clients on the Internet.
-
- The structure of this document is as follows. In Section 2, we
- discuss the importance of keeping the "chain of trust" intact.
- Aspects of key generation and storage of private keys are discussed
- in Section 3; the focus in this section is mainly on the private part
- of the key(s). Section 4 describes considerations concerning the
- public part of the keys. Since these public keys appear in the DNS
- one has to take into account all kinds of timing issues, which are
- discussed in Section 4.1. Section 4.2 and Section 4.3 deal with the
- rollover, or supercession, of keys. Finally, Section 4.4 discusses
- considerations on how parents deal with their children's public keys
- in order to maintain chains of trust.
-
- The typographic conventions used in this document are explained in
- Appendix C.
-
- Since this is a document with operational suggestions and there are
- no protocol specifications, the RFC 2119 [6] language does not apply.
-
- This document [OK: when approved] obsoletes RFC 4641 [16].
-
- [OK: Editorial comments and questions are indicated by square
- brackets and editor innitials]
-
-
-
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 4]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
-1.1. The Use of the Term 'key'
-
- It is assumed that the reader is familiar with the concept of
- asymmetric keys on which DNSSEC is based (public key cryptography
- RFC4949 [17]). Therefore, this document will use the term 'key'
- rather loosely. Where it is written that 'a key is used to sign
- data' it is assumed that the reader understands that it is the
- private part of the key pair that is used for signing. It is also
- assumed that the reader understands that the public part of the key
- pair is published in the DNSKEY Resource Record and that it is the
- public part that is used in key exchanges.
-
-1.2. Time Definitions
-
- In this document, we will be using a number of time-related terms.
- The following definitions apply:
-
- o "Signature validity period" The period that a signature is valid.
- It starts at the time specified in the signature inception field
- of the RRSIG RR and ends at the time specified in the expiration
- field of the RRSIG RR.
-
- o "Signature publication period" Time after which a signature (made
- with a specific key) is replaced with a new signature (made with
- the same key). This replacement takes place by publishing the
- relevant RRSIG in the master zone file. After one stops
- publishing an RRSIG in a zone, it may take a while before the
- RRSIG has expired from caches and has actually been removed from
- the DNS.
-
- o "Key effectivity period" The period during which a key pair is
- expected to be effective. This period is defined as the time
- between the first inception time stamp and the last expiration
- date of any signature made with this key, regardless of any
- discontinuity in the use of the key. The key effectivity period
- can span multiple signature validity periods.
-
- o "Maximum/Minimum Zone Time to Live (TTL)" The maximum or minimum
- value of the TTLs from the complete set of RRs in a zone. Note
- that the minimum TTL is not the same as the MINIMUM field in the
- SOA RR. See [9] for more information.
-
-2. Keeping the Chain of Trust Intact
-
- Maintaining a valid chain of trust is important because broken chains
- of trust will result in data being marked as Bogus (as defined in [3]
- Section 5), which may cause entire (sub)domains to become invisible
- to verifying clients. The administrators of secured zones have to
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 5]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- realize that their zone is, to verifying clients, part of a chain of
- trust.
-
- As mentioned in the introduction, the procedures herein are intended
- to ensure that maintenance of zones, such as re-signing or key
- rollovers, will be transparent to the verifying clients on the
- Internet.
-
- Administrators of secured zones will have to keep in mind that data
- published on an authoritative primary server will not be immediately
- seen by verifying clients; it may take some time for the data to be
- transferred to other secondary authoritative nameservers and clients
- may be fetching data from caching non-authoritative servers. In this
- light, note that the time for a zone transfer from master to slave is
- negligible when using NOTIFY [8] and incremental transfer (IXFR) [7].
- It increases when full zone transfers (AXFR) are used in combination
- with NOTIFY. It increases even more if you rely on full zone
- transfers based on only the SOA timing parameters for refresh.
-
- For the verifying clients, it is important that data from secured
- zones can be used to build chains of trust regardless of whether the
- data came directly from an authoritative server, a caching
- nameserver, or some middle box. Only by carefully using the
- available timing parameters can a zone administrator ensure that the
- data necessary for verification can be obtained.
-
- The responsibility for maintaining the chain of trust is shared by
- administrators of secured zones in the chain of trust. This is most
- obvious in the case of a 'key compromise' when a trade-off between
- maintaining a valid chain of trust and replacing the compromised keys
- as soon as possible must be made. Then zone administrators will have
- to make a trade-off, between keeping the chain of trust intact --
- thereby allowing for attacks with the compromised key -- or
- deliberately breaking the chain of trust and making secured
- subdomains invisible to security-aware resolvers. Also see
- Section 4.3.
-
-3. Keys Generation and Storage
-
- This section describes a number of considerations with respect to the
- security of keys. It deals with the generation, effectivity period,
- size, and storage of private keys.
-
-3.1. Zone and Key Signing Keys
-
- The DNSSEC validation protocol does not distinguish between different
- types of DNSKEYs. All DNSKEYs can be used during the validation. In
- practice, operators use Key Signing and Zone Signing Keys and use the
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 6]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- so-called Secure Entry Point (SEP) [5] flag to distinguish between
- them during operations. The dynamics and considerations are
- discussed below.
-
- To make zone re-signing and key rollover procedures easier to
- implement, it is possible to use one or more keys as Key Signing Keys
- (KSKs). These keys will only sign the apex DNSKEY RRSet in a zone.
- Other keys can be used to sign all the RRSets in a zone and are
- referred to as Zone Signing Keys (ZSKs). In this document, we assume
- that KSKs are the subset of keys that are used for key exchanges with
- the parent and potentially for configuration as trusted anchors --
- the SEP keys. In this document, we assume a one-to-one mapping
- between KSK and SEP keys and we assume the SEP flag to be set on all
- KSKs.
-
-3.1.1. Motivations for the KSK and ZSK Separation
-
- Differentiating between the KSK and ZSK functions has several
- advantages:
-
- o No parent/child interaction is required when ZSKs are updated.
-
- o [OK: Bullet removed, strawman Paul Hoffman]
-
- o As the KSK is only used to sign a key set, which is most probably
- updated less frequently than other data in the zone, it can be
- stored separately from and in a safer location than the ZSK.
-
- o A KSK can have a longer key effectivity period.
-
- For almost any method of key management and zone signing, the KSK is
- used less frequently than the ZSK. Once a key set is signed with the
- KSK, all the keys in the key set can be used as ZSKs. If a ZSK is
- compromised, it can be simply dropped from the key set. The new key
- set is then re-signed with the KSK.
-
- Given the assumption that for KSKs the SEP flag is set, the KSK can
- be distinguished from a ZSK by examining the flag field in the DNSKEY
- RR. If the flag field is an odd number it is a KSK. If it is an
- even number it is a ZSK.
-
- The Zone Signing Key can be used to sign all the data in a zone on a
- regular basis. When a Zone Signing Key is to be rolled, no
- interaction with the parent is needed. This allows for signature
- validity periods on the order of days.
-
- The Key Signing Key is only to be used to sign the DNSKEY RRs in a
- zone. If a Key Signing Key is to be rolled over, there will be
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 7]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- interactions with parties other than the zone administrator. If
- there is a parent zone, these can include the registry of the parent
- zone or administrators of verifying resolvers that have the
- particular key configured as secure entry points. If this is a trust
- anchor, everyone relying on the trust anchor needs to roll over to
- the new key. The latter may be subject to stability costs if
- automated trust-anchor rollover mechanisms (such as e.g. RFC5011
- [18]) are not in place. Hence, the key effectivity period of these
- keys can and should be made much longer.
-
- There are two schools of thought on rolling a KSK that is not a trust
- anchor [OK: One can never be sure a KSK is _not_ a trust anchor]:
-
- o It should be done regularly (possibly every few months) so that a
- key rollover remains an operational routine.
-
- o It should only be done when it is known or strongly suspected that
- the key has been compromised in order to reduce the stability
- issues on systems where the rollover does not happen cleanly.
-
- There is no widespread agreement on which of these two schools of
- thought is better for different deployments of DNSSEC. There is a
- stability cost every time a non-anchor KSK is rolled over, but it is
- possibly low if the communication between the child and the parent is
- good. On the other hand, the only completely effective way to tell
- if the communication is good is to test it periodically. Thus,
- rolling a KSK with a parent is only done for two reasons: to test and
- verify the rolling system to prepare for an emergency, and in the
- case of an actual emergency.
-
- [OK: The paragraph below is a straw-man by Paul Hoffman] Because of
- the difficulty of getting all users of a trust anchor to replace an
- old trust anchor with a new one, a KSK that is a trust anchor should
- never be rolled unless it is known or strongly suspected that the key
- has been compromised.
-
- [OK: This is an alternative straw-man by Olaf Kolkman] The same
- operational concerns apply to the rollover of KSKs that are used as
- trust-anchors. Since the administrator of a zone can not be certain
- that the zone's KSK is in use as a trust-anchor she will have to
- assume that a rollover will cause a stability cost for the users that
- did configure her key as a trust-anchor. Those costs can be
- minimized by automating the rollover RFC5011 [18] and by rolling the
- key regularly, and advertising such, so that the operators of
- recursive nameservers will put the appropriate mechanism in place to
- deal with these stability costs, or, in other words, budget for these
- costs instead of incuring them unexpectedly.
-
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 8]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
-3.1.2. Differentiation for 'High-Level' Zones
-
- In an earlier version of this document we made a differentiation
- between KSKs used for zones that are high in the DNS hierarchy versus
- KSKs used for zones low in that hierarchy. We have come to realize
- that there are other considerations that argue such differentiation
- does not need to be made.
-
- Longer keys are not useful because the crypto guidance is that
- everyone should use keys that no one can break. Also, it is
- impossible to judge which zones are more or less valuable to an
- attacker. An attack can only be used if the compromise is unnoticed
- and the attacker can act as an man-in-the-middle attack (MITM) in an
- unnoticed way. If .example is compromised and the attacker forges
- answers for somebank.example and sends them out as an MITM, when the
- attack is discovered it will be simple to prove that .example has
- been compromised and the KSK will be rolled. Defining a long-term
- successful attack is difficult for keys at any level.
-
-3.2. Key Generation
-
- Careful generation of all keys is a sometimes overlooked but
- absolutely essential element in any cryptographically secure system.
- The strongest algorithms used with the longest keys are still of no
- use if an adversary can guess enough to lower the size of the likely
- key space so that it can be exhaustively searched. Technical
- suggestions for the generation of random keys will be found in RFC
- 4086 [14] and NIST SP 800-900 [20]. One should carefully assess if
- the random number generator used during key generation adheres to
- these suggestions.
-
- Keys with a long effectivity period are particularly sensitive as
- they will represent a more valuable target and be subject to attack
- for a longer time than short-period keys. It is strongly recommended
- that long-term key generation occur off-line in a manner isolated
- from the network via an air gap or, at a minimum, high-level secure
- hardware.
-
-3.3. Key Effectivity Period
-
- From a purely operational perspective, a reasonable key effectivity
- period for KSKs that have a parent zone is 13 months, with the intent
- to replace them after 12 months. An intended key effectivity period
- of a month is reasonable for Zone Signing Keys. This annual rollover
- gives operational practice to rollovers.
-
- Ignoring the operational perspective, a reasonable effectivity period
- for KSKs that have a parent zone is of the order of 2 decades or
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 9]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- longer. That is, if one does not plan to test the rollover
- procedure, the key should be effective essentially forever, and then
- only rolled over in case of emergency.
-
- The "operational habit" argument also applies to trust anchor
- reconfiguration. If a short key effectivity period is used and the
- trust anchor configuration has to be revisited on a regular basis,
- the odds that the configuration tends to be forgotten is smaller.
- The trade-off is against a system that is so dynamic that
- administrators of the validating clients will not be able to follow
- the modifications.Note that if a trust anchor replacement is done
- incorrectly, the entire zone that the trust anchor covers will become
- bogus until the trust anchor is corrected.
-
- Key effectivity periods can be made very short, as in a few minutes.
- But when replacing keys one has to take the considerations from
- Section 4.1 and Section 4.2 into account.
-
-3.4. Key Algorithm
-
- There are currently two types of signature algorithms that can be
- used in DNSSEC: RSA and DSA. Both are fully specified in many
- freely-available documents, and both are widely considered to be
- patent-free. The creation of signatures wiht RSA and DSA takes
- roughly the same time, but DSA is about ten times slower for
- signature verification.
-
- We suggest the use of either RSA/SHA-1 or RSA/SHA-256 as the
- preferred signature algorithms. Both have advantages and
- disadvantages. RSA/SHA-1 has been deployed for many years, while
- RSA/SHA-256 has only begun to be deployed. On the other hand, it is
- expected that if effective attacks on either algorithm appeark, they
- will appear for RSA/SHA-1 first. RSA/MD5 should not be considered
- for use because RSA/MD5 will very likely be the first common-use
- signature algorithm to have an effective attack.
-
- At the time of publication, it is known that the SHA-1 hash has
- cryptanalysis issues. There is work in progress on addressing these
- issues. We recommend the use of public key algorithms based on
- hashes stronger than SHA-1 (e.g., SHA-256), as soon as these
- algorithms are available in protocol specifications (see [21] and
- [22]) and implementations.
-
-3.5. Key Sizes
-
- DNSSEC signing keys should be large enough to avoid all know
- cryptographic attacks during the lifetime of the key. To date,
- despite huge efforts, no one has broken a regular 1024-bit key; in
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 10]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- fact, the best completed attack is estimated to be the equivalent of
- a 700-bit key. An attacker breaking a 1024-bit signing key would
- need expend phenominal amounts of networked computing power in a way
- that would not be detected in order to break a single key. Because
- of this, it is estimated that most zones can safely use 1024-bit keys
- for at least the next ten years. A 1024-bit asymmetric key has an
- approximate equivalent strength of a symmetric 80-bit key.
-
- Keys that are used as extremely high value trust anchors, or non-
- anchor keys that may be difficult to roll over, may want to use
- lengths longer than 1024 bits. Typically, the next larger key size
- used is 2048 bits, which have the approximate equivalent strength of
- a symmetric 112-bit key. In a standard CPU, it takes about four
- times as long to sign or verify with a 2048-bit key as it does with a
- 1024-bit key.
-
- Another way to decide on the size of key to use is to remember that
- the phenominal effort it takes for an attacker to break a 1024-bit
- key is the same regardless of how the key is used. If an attacker
- has the capability of breaking a 1024-bit DNSSEC key, he also has the
- capability of breaking one of the many 1024-bit TLS trust anchor keys
- that are installed with web browsers. If the value of a DNSSEC key
- is lower to the attacker than the value of a TLS trust anchor, the
- attacker will use the resources to attack the TLS trust anchor.
-
- It is possible that there is a unexpected improvement in the ability
- for attackers to beak keys, and that such an attack would make it
- feasible to break 1024-bit keys but not 2048-bit keys. If such an
- improvement happens, it is likely that there will be a huge amount of
- publicity, particularly because of the large number of 1024-bit TLS
- trust anchors build into popular web browsers. At that time, all
- 1024-bit keys (both ones with parent zones and ones that are trust
- anchors) can be rolled over and replaced with larger keys.
-
- Earlier documents (including the previous version of this document)
- urged the use of longer keys in situations where a particular key was
- "heavily used". That advice may have been true 15 years ago, but it
- is not true today when using RSA or DSA algorithms and keys of 1024
- bits or higher.
-
-3.6. Private Key Storage
-
- It is recommended that, where possible, zone private keys and the
- zone file master copy that is to be signed be kept and used in off-
- line, non-network-connected, physically secure machines only.
- Periodically, an application can be run to add authentication to a
- zone by adding RRSIG and NSEC RRs. Then the augmented file can be
- transferred.
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 11]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- When relying on dynamic update to manage a signed zone [11], be aware
- that at least one private key of the zone will have to reside on the
- master server. This key is only as secure as the amount of exposure
- the server receives to unknown clients and the security of the host.
- Although not mandatory, one could administer the DNS in the following
- way. The master that processes the dynamic updates is unavailable
- from generic hosts on the Internet, it is not listed in the NS RRSet,
- although its name appears in the SOA RRs MNAME field. The
- nameservers in the NS RRSet are able to receive zone updates through
- NOTIFY, IXFR, AXFR, or an out-of-band distribution mechanism. This
- approach is known as the "hidden master" setup.
-
- The ideal situation is to have a one-way information flow to the
- network to avoid the possibility of tampering from the network.
- Keeping the zone master file on-line on the network and simply
- cycling it through an off-line signer does not do this. The on-line
- version could still be tampered with if the host it resides on is
- compromised. For maximum security, the master copy of the zone file
- should be off-net and should not be updated based on an unsecured
- network mediated communication.
-
- In general, keeping a zone file off-line will not be practical and
- the machines on which zone files are maintained will be connected to
- a network. Operators are advised to take security measures to shield
- unauthorized access to the master copy.
-
- For dynamically updated secured zones [11], both the master copy and
- the private key that is used to update signatures on updated RRs will
- need to be on-line.
-
-4. Signature Generation, Key Rollover, and Related Policies
-
-4.1. Time in DNSSEC
-
- Without DNSSEC, all times in the DNS are relative. The SOA fields
- REFRESH, RETRY, and EXPIRATION are timers used to determine the time
- elapsed after a slave server synchronized with a master server. The
- Time to Live (TTL) value and the SOA RR minimum TTL parameter [9] are
- used to determine how long a forwarder should cache data after it has
- been fetched from an authoritative server. By using a signature
- validity period, DNSSEC introduces the notion of an absolute time in
- the DNS. Signatures in DNSSEC have an expiration date after which
- the signature is marked as invalid and the signed data is to be
- considered Bogus.
-
-
-
-
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 12]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
-4.1.1. Time Considerations
-
- Because of the expiration of signatures, one should consider the
- following:
-
- o We suggest the Maximum Zone TTL of your zone data to be a fraction
- of your signature validity period.
-
- If the TTL would be of similar order as the signature validity
- period, then all RRSets fetched during the validity period
- would be cached until the signature expiration time. Section
- 7.1 of [3] suggests that "the resolver may use the time
- remaining before expiration of the signature validity period of
- a signed RRSet as an upper bound for the TTL". As a result,
- query load on authoritative servers would peak at signature
- expiration time, as this is also the time at which records
- simultaneously expire from caches.
-
- To avoid query load peaks, we suggest the TTL on all the RRs in
- your zone to be at least a few times smaller than your
- signature validity period.
-
- o We suggest the signature publication period to end at least one
- Maximum Zone TTL duration before the end of the signature validity
- period.
-
- Re-signing a zone shortly before the end of the signature
- validity period may cause simultaneous expiration of data from
- caches. This in turn may lead to peaks in the load on
- authoritative servers.
-
- o We suggest the Minimum Zone TTL to be long enough to both fetch
- and verify all the RRs in the trust chain. In workshop
- environments, it has been demonstrated [19] that a low TTL (under
- 5 to 10 minutes) caused disruptions because of the following two
- problems:
-
- 1. During validation, some data may expire before the
- validation is complete. The validator should be able to keep
- all data until it is completed. This applies to all RRs needed
- to complete the chain of trust: DSes, DNSKEYs, RRSIGs, and the
- final answers, i.e., the RRSet that is returned for the initial
- query.
-
- 2. Frequent verification causes load on recursive nameservers.
- Data at delegation points, DSes, DNSKEYs, and RRSIGs benefit
- from caching. The TTL on those should be relatively long.
-
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 13]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- o Slave servers will need to be able to fetch newly signed zones
- well before the RRSIGs in the zone served by the slave server pass
- their signature expiration time.
-
- When a slave server is out of sync with its master and data in
- a zone is signed by expired signatures, it may be better for
- the slave server not to give out any answer.
-
- Normally, a slave server that is not able to contact a master
- server for an extended period will expire a zone. When that
- happens, the server will respond differently to queries for
- that zone. Some servers issue SERVFAIL, whereas others turn
- off the 'AA' bit in the answers. The time of expiration is set
- in the SOA record and is relative to the last successful
- refresh between the master and the slave servers. There exists
- no coupling between the signature expiration of RRSIGs in the
- zone and the expire parameter in the SOA.
-
- If the server serves a DNSSEC zone, then it may well happen
- that the signatures expire well before the SOA expiration timer
- counts down to zero. It is not possible to completely prevent
- this from happening by tweaking the SOA parameters.
-
- However, the effects can be minimized where the SOA expiration
- time is equal to or shorter than the signature validity period.
-
- The consequence of an authoritative server not being able to
- update a zone, whilst that zone includes expired signatures, is
- that non-secure resolvers will continue to be able to resolve
- data served by the particular slave servers while security-
- aware resolvers will experience problems because of answers
- being marked as Bogus.
-
- We suggest the SOA expiration timer being approximately one
- third or one fourth of the signature validity period. It will
- allow problems with transfers from the master server to be
- noticed before the actual signature times out.
-
- We also suggest that operators of nameservers that supply
- secondary services develop 'watch dogs' to spot upcoming
- signature expirations in zones they slave, and take appropriate
- action.
-
- When determining the value for the expiration parameter one has
- to take the following into account: What are the chances that
- all my secondaries expire the zone? How quickly can I reach an
- administrator of secondary servers to load a valid zone? These
- questions are not DNSSEC specific but may influence the choice
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 14]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- of your signature validity intervals.
-
-4.2. Key Rollovers
-
- Regardless of whether a zone uses periodic key rollovers in order to
- practice for emergencies, or only rolls over keys in an emergency,
- key rollovers are a fact of life when using DNSSEC. Zone
- administrators who are in the process of rolling their keys have to
- take into account that data published in previous versions of their
- zone still lives in caches. When deploying DNSSEC, this becomes an
- important consideration; ignoring data that may be in caches may lead
- to loss of service for clients.
-
- The most pressing example of this occurs when zone material signed
- with an old key is being validated by a resolver that does not have
- the old zone key cached. If the old key is no longer present in the
- current zone, this validation fails, marking the data "Bogus".
- Alternatively, an attempt could be made to validate data that is
- signed with a new key against an old key that lives in a local cache,
- also resulting in data being marked "Bogus".
-
-4.2.1. Zone Signing Key Rollovers
-
- For "Zone Signing Key rollovers", there are two ways to make sure
- that during the rollover data still cached can be verified with the
- new key sets or newly generated signatures can be verified with the
- keys still in caches. One schema, described in Section 4.2.1.2, uses
- double signatures; the other uses key pre-publication
- (Section 4.2.1.1). The pros, cons, and recommendations are described
- in Section 4.2.1.3.
-
-4.2.1.1. Pre-Publish Key Rollover
-
- This section shows how to perform a ZSK rollover without the need to
- sign all the data in a zone twice -- the "pre-publish key rollover".
- This method has advantages in the case of a key compromise. If the
- old key is compromised, the new key has already been distributed in
- the DNS. The zone administrator is then able to quickly switch to
- the new key and remove the compromised key from the zone. Another
- major advantage is that the zone size does not double, as is the case
- with the double signature ZSK rollover. A small "how-to" for this
- kind of rollover can be found in Appendix B.
-
-
-
-
-
-
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 15]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- Pre-publish key rollover involves four stages as follows:
-
- ----------------------------------------------------------------
- initial new DNSKEY new RRSIGs DNSKEY removal
- ----------------------------------------------------------------
- SOA0 SOA1 SOA2 SOA3
- RRSIG10(SOA0) RRSIG10(SOA1) RRSIG11(SOA2) RRSIG11(SOA3)
-
- DNSKEY1 DNSKEY1 DNSKEY1 DNSKEY1
- DNSKEY10 DNSKEY10 DNSKEY10 DNSKEY11
- DNSKEY11 DNSKEY11
- RRSIG1 (DNSKEY) RRSIG1 (DNSKEY) RRSIG1(DNSKEY) RRSIG1 (DNSKEY)
- RRSIG10(DNSKEY) RRSIG10(DNSKEY) RRSIG11(DNSKEY) RRSIG11(DNSKEY)
- ----------------------------------------------------------------
-
- Pre-Publish Key Rollover
-
- initial: Initial version of the zone: DNSKEY 1 is the Key Signing
- Key. DNSKEY 10 is used to sign all the data of the zone, the Zone
- Signing Key.
-
- new DNSKEY: DNSKEY 11 is introduced into the key set. Note that no
- signatures are generated with this key yet, but this does not
- secure against brute force attacks on the public key. The minimum
- duration of this pre-roll phase is the time it takes for the data
- to propagate to the authoritative servers plus TTL value of the
- key set.
-
- new RRSIGs: At the "new RRSIGs" stage (SOA serial 2), DNSKEY 11 is
- used to sign the data in the zone exclusively (i.e., all the
- signatures from DNSKEY 10 are removed from the zone). DNSKEY 10
- remains published in the key set. This way data that was loaded
- into caches from version 1 of the zone can still be verified with
- key sets fetched from version 2 of the zone. The minimum time
- that the key set including DNSKEY 10 is to be published is the
- time that it takes for zone data from the previous version of the
- zone to expire from old caches, i.e., the time it takes for this
- zone to propagate to all authoritative servers plus the Maximum
- Zone TTL value of any of the data in the previous version of the
- zone.
-
- DNSKEY removal: DNSKEY 10 is removed from the zone. The key set,
- now only containing DNSKEY 1 and DNSKEY 11, is re-signed with the
- DNSKEY 1.
-
- The above scheme can be simplified by always publishing the "future"
- key immediately after the rollover. The scheme would look as follows
- (we show two rollovers); the future key is introduced in "new DNSKEY"
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 16]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- as DNSKEY 12 and again a newer one, numbered 13, in "new DNSKEY
- (II)":
-
-
- initial new RRSIGs new DNSKEY
- -----------------------------------------------------------------
- SOA0 SOA1 SOA2
- RRSIG10(SOA0) RRSIG11(SOA1) RRSIG11(SOA2)
-
- DNSKEY1 DNSKEY1 DNSKEY1
- DNSKEY10 DNSKEY10 DNSKEY11
- DNSKEY11 DNSKEY11 DNSKEY12
- RRSIG1(DNSKEY) RRSIG1 (DNSKEY) RRSIG1(DNSKEY)
- RRSIG10(DNSKEY) RRSIG11(DNSKEY) RRSIG11(DNSKEY)
- ----------------------------------------------------------------
-
- ----------------------------------------------------------------
- new RRSIGs (II) new DNSKEY (II)
- ----------------------------------------------------------------
- SOA3 SOA4
- RRSIG12(SOA3) RRSIG12(SOA4)
-
- DNSKEY1 DNSKEY1
- DNSKEY11 DNSKEY12
- DNSKEY12 DNSKEY13
- RRSIG1(DNSKEY) RRSIG1(DNSKEY)
- RRSIG12(DNSKEY) RRSIG12(DNSKEY)
- ----------------------------------------------------------------
-
- Pre-Publish Key Rollover, Showing Two Rollovers
-
- Note that the key introduced in the "new DNSKEY" phase is not used
- for production yet; the private key can thus be stored in a
- physically secure manner and does not need to be 'fetched' every time
- a zone needs to be signed.
-
-4.2.1.2. Double Signature Zone Signing Key Rollover
-
- This section shows how to perform a ZSK key rollover using the double
- zone data signature scheme, aptly named "double signature rollover".
-
- During the "new DNSKEY" stage the new version of the zone file will
- need to propagate to all authoritative servers and the data that
- exists in (distant) caches will need to expire, requiring at least
- the Maximum Zone TTL.
-
-
-
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 17]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- Double signature ZSK rollover involves three stages as follows:
-
- ----------------------------------------------------------------
- initial new DNSKEY DNSKEY removal
- ----------------------------------------------------------------
- SOA0 SOA1 SOA2
- RRSIG10(SOA0) RRSIG10(SOA1) RRSIG11(SOA2)
- RRSIG11(SOA1)
- DNSKEY1 DNSKEY1 DNSKEY1
- DNSKEY10 DNSKEY10 DNSKEY11
- DNSKEY11
- RRSIG1(DNSKEY) RRSIG1(DNSKEY) RRSIG1(DNSKEY)
- RRSIG10(DNSKEY) RRSIG10(DNSKEY) RRSIG11(DNSKEY)
- RRSIG11(DNSKEY)
- ----------------------------------------------------------------
-
- Double Signature Zone Signing Key Rollover
-
- initial: Initial Version of the zone: DNSKEY 1 is the Key Signing
- Key. DNSKEY 10 is used to sign all the data of the zone, the Zone
- Signing Key.
-
- new DNSKEY: At the "New DNSKEY" stage (SOA serial 1) DNSKEY 11 is
- introduced into the key set and all the data in the zone is signed
- with DNSKEY 10 and DNSKEY 11. The rollover period will need to
- continue until all data from version 0 of the zone has expired
- from remote caches. This will take at least the Maximum Zone TTL
- of version 0 of the zone.
-
- DNSKEY removal: DNSKEY 10 is removed from the zone. All the
- signatures from DNSKEY 10 are removed from the zone. The key set,
- now only containing DNSKEY 11, is re-signed with DNSKEY 1.
-
- At every instance, RRSIGs from the previous version of the zone can
- be verified with the DNSKEY RRSet from the current version and the
- other way around. The data from the current version can be verified
- with the data from the previous version of the zone. The duration of
- the "new DNSKEY" phase and the period between rollovers should be at
- least the Maximum Zone TTL.
-
- Making sure that the "new DNSKEY" phase lasts until the signature
- expiration time of the data in the initial version of the zone is
- recommended. This way all caches are cleared of the old signatures.
- However, this duration could be considerably longer than the Maximum
- Zone TTL, making the rollover a lengthy procedure.
-
- Note that in this example we assumed that the zone was not modified
- during the rollover. New data can be introduced in the zone as long
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 18]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- as it is signed with both keys.
-
-4.2.1.3. Pros and Cons of the Schemes
-
- Pre-publish key rollover: This rollover does not involve signing the
- zone data twice. Instead, before the actual rollover, the new key
- is published in the key set and thus is available for
- cryptanalysis attacks. A small disadvantage is that this process
- requires four steps. Also the pre-publish scheme involves more
- parental work when used for KSK rollovers as explained in
- Section 4.2.3.
-
- Double signature ZSK rollover: The drawback of this signing scheme
- is that during the rollover the number of signatures in your zone
- doubles; this may be prohibitive if you have very big zones. An
- advantage is that it only requires three steps.
-
-4.2.2. Key Signing Key Rollovers
-
- For the rollover of a Key Signing Key, the same considerations as for
- the rollover of a Zone Signing Key apply. However, we can use a
- double signature scheme to guarantee that old data (only the apex key
- set) in caches can be verified with a new key set and vice versa.
- Since only the key set is signed with a KSK, zone size considerations
- do not apply.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 19]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- --------------------------------------------------------------------
- initial new DNSKEY DS change DNSKEY removal
- --------------------------------------------------------------------
- Parent:
- SOA0 --------> SOA1 -------->
- RRSIGpar(SOA0) --------> RRSIGpar(SOA1) -------->
- DS1 --------> DS2 -------->
- RRSIGpar(DS) --------> RRSIGpar(DS) -------->
-
-
- Child:
- SOA0 SOA1 --------> SOA2
- RRSIG10(SOA0) RRSIG10(SOA1) --------> RRSIG10(SOA2)
- -------->
- DNSKEY1 DNSKEY1 --------> DNSKEY2
- DNSKEY2 -------->
- DNSKEY10 DNSKEY10 --------> DNSKEY10
- RRSIG1 (DNSKEY) RRSIG1 (DNSKEY) --------> RRSIG2 (DNSKEY)
- RRSIG2 (DNSKEY) -------->
- RRSIG10(DNSKEY) RRSIG10(DNSKEY) --------> RRSIG10(DNSKEY)
- --------------------------------------------------------------------
-
- Stages of Deployment for a Double Signature Key Signing Key Rollover
-
- initial: Initial version of the zone. The parental DS points to
- DNSKEY1. Before the rollover starts, the child will have to
- verify what the TTL is of the DS RR that points to DNSKEY1 -- it
- is needed during the rollover and we refer to the value as TTL_DS.
-
- new DNSKEY: During the "new DNSKEY" phase, the zone administrator
- generates a second KSK, DNSKEY2. The key is provided to the
- parent, and the child will have to wait until a new DS RR has been
- generated that points to DNSKEY2. After that DS RR has been
- published on all servers authoritative for the parent's zone, the
- zone administrator has to wait at least TTL_DS to make sure that
- the old DS RR has expired from caches.
-
- DS change: The parent replaces DS1 with DS2.
-
- DNSKEY removal: DNSKEY1 has been removed.
-
- The scenario above puts the responsibility for maintaining a valid
- chain of trust with the child. It also is based on the premise that
- the parent only has one DS RR (per algorithm) per zone. An
- alternative mechanism has been considered. Using an established
- trust relation, the interaction can be performed in-band, and the
- removal of the keys by the child can possibly be signaled by the
- parent. In this mechanism, there are periods where there are two DS
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 20]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- RRs at the parent. Since at the moment of writing the protocol for
- this interaction has not been developed, further discussion is out of
- scope for this document.
-
-4.2.3. Difference Between ZSK and KSK Rollovers
-
- Note that KSK rollovers and ZSK rollovers are different in the sense
- that a KSK rollover requires interaction with the parent (and
- possibly replacing of trust anchors) and the ensuing delay while
- waiting for it.
-
- A zone key rollover can be handled in two different ways: pre-publish
- (Section 4.2.1.1) and double signature (Section 4.2.1.2).
-
- As the KSK is used to validate the key set and because the KSK is not
- changed during a ZSK rollover, a cache is able to validate the new
- key set of the zone. The pre-publish method would also work for a
- KSK rollover. The records that are to be pre-published are the
- parental DS RRs. The pre-publish method has some drawbacks for KSKs.
- We first describe the rollover scheme and then indicate these
- drawbacks.
-
-
- --------------------------------------------------------------------
- initial new DS new DNSKEY DS/DNSKEY removal
- --------------------------------------------------------------------
- Parent:
- SOA0 SOA1 --------> SOA2
- RRSIGpar(SOA0) RRSIGpar(SOA1) --------> RRSIGpar(SOA2)
- DS1 DS1 --------> DS2
- DS2 -------->
- RRSIGpar(DS) RRSIGpar(DS) --------> RRSIGpar(DS)
-
- Child:
- SOA0 --------> SOA1 SOA1
- RRSIG10(SOA0) --------> RRSIG10(SOA1) RRSIG10(SOA1)
- -------->
- DNSKEY1 --------> DNSKEY2 DNSKEY2
- -------->
- DNSKEY10 --------> DNSKEY10 DNSKEY10
- RRSIG1 (DNSKEY) --------> RRSIG2(DNSKEY) RRSIG2 (DNSKEY)
- RRSIG10(DNSKEY) --------> RRSIG10(DNSKEY) RRSIG10(DNSKEY)
- --------------------------------------------------------------------
-
- Stages of Deployment for a Pre-Publish Key Signing Key Rollover
-
- When the child zone wants to roll, it notifies the parent during the
- "new DS" phase and submits the new key (or the corresponding DS) to
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 21]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- the parent. The parent publishes DS1 and DS2, pointing to DNSKEY1
- and DNSKEY2, respectively. During the rollover ("new DNSKEY" phase),
- which can take place as soon as the new DS set propagated through the
- DNS, the child replaces DNSKEY1 with DNSKEY2. Immediately after that
- ("DS/DNSKEY removal" phase), it can notify the parent that the old DS
- record can be deleted.
-
- The drawbacks of this scheme are that during the "new DS" phase the
- parent cannot verify the match between the DS2 RR and DNSKEY2 using
- the DNS -- as DNSKEY2 is not yet published. Besides, we introduce a
- "security lame" key (see Section 4.4.3). Finally, the child-parent
- interaction consists of two steps. The "double signature" method
- only needs one interaction.
-
-4.2.4. Key algorithm rollover
-
- [OK: The txt of this section is a strawman for the issue in: http://
- www.nlnetlabs.nl/svn/rfc4641bis/trunk/open-issues/Key_algorithm_roll
- ]
-
- A special class of keyrollover is the rollover of key algorithms
- (either adding a new algorithm, removing an old algorithm, or both),
- additional steps are needed to retain integrity during the rollover.
-
- Because of the algorithm downgrade protection in RFC4035 section 2.2,
- you may not have a key of an algorithm for which you do not have
- signatures.
-
- When adding a new algorithm, the signatures should be added first.
- After the TTL has expired, and caches have dropped the old data
- covered by those signatures, the DNSKEY with the new algorithm can be
- added. When removing an old algorithm, the DNSKEY should be removed
- first.
-
- To do both, the following steps can be used. For simplicity, we use
- a zone that is only signed by one zone signing key.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 22]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- ----------------------------------------------------------------
- 1 Initial 2 New RRSIGS 3 New DNSKEY
- ----------------------------------------------------------------
- SOA0 SOA1 SOA2
- RRSIG1(SOA0) RRSIG1(SOA1) RRSIG1(SOA2)
- RRSIG2(SOA1) RRSIG2(SOA2)
-
- DNSKEY1 DNSKEY1 DNSKEY1
- RRSIG1(DNSKEY) RRSIG1(DNSKEY) DNSKEY2
- RRSIG2(DNSKEY) RRSIG1(DNSKEY)
- RRSIG2(DNSKEY)
- ----------------------------------------------------------------
- 4 Remove DNSKEY 5 Remove RRSIGS
- ----------------------------------------------------------------
- SOA3 SOA4
- RRSIG1(SOA3) RRSIG2(SOA4)
- RRSIG2(SOA3)
-
- DNSKEY2 DNSKEY2
- RRSIG1(DNSKEY) RRSIG2(DNSKEY)
- RRSIG2(DNSKEY)
- ----------------------------------------------------------------
-
- Stages of Deployment during an Algorithm Rollover.
-
- In step 2, the signatures for the new key are added, but the key
- itself is not. While in theory, the signatures of the keyset should
- always be synchronized with the keyset itself, it can be possible
- that RRSIGS are requested separately, so it might be prudent to also
- sign the DNSKEY set with the new signature.
-
- After the cache data has expired, the new key can be added to the
- zone, as done in step 3.
-
- The next step is to remove the old algorithm. This time the key
- needs to be removed first, before removing the signatures. The key
- is removed in step 4, and after the cache data has expired, the
- signatures can be removed in step 5.
-
- The above steps ensure that during the rollover to a new algorithm,
- the integrity of the zone is never broken.
-
-4.2.5. Automated Key Rollovers
-
- As keys must be renewed periodically, there is some motivation to
- automate the rollover process. Consider the following:
-
-
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 23]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- o ZSK rollovers are easy to automate as only the child zone is
- involved.
-
- o A KSK rollover needs interaction between parent and child. Data
- exchange is needed to provide the new keys to the parent;
- consequently, this data must be authenticated and integrity must
- be guaranteed in order to avoid attacks on the rollover.
-
-4.3. Planning for Emergency Key Rollover
-
- This section deals with preparation for a possible key compromise.
- Our advice is to have a documented procedure ready for when a key
- compromise is suspected or confirmed.
-
- When the private material of one of your keys is compromised it can
- be used for as long as a valid trust chain exists. A trust chain
- remains intact for
-
- o as long as a signature over the compromised key in the trust chain
- is valid,
-
- o as long as a parental DS RR (and signature) points to the
- compromised key,
-
- o as long as the key is anchored in a resolver and is used as a
- starting point for validation (this is generally the hardest to
- update).
-
- While a trust chain to your compromised key exists, your namespace is
- vulnerable to abuse by anyone who has obtained illegitimate
- possession of the key. Zone operators have to make a trade-off if
- the abuse of the compromised key is worse than having data in caches
- that cannot be validated. If the zone operator chooses to break the
- trust chain to the compromised key, data in caches signed with this
- key cannot be validated. However, if the zone administrator chooses
- to take the path of a regular rollover, the malicious key holder can
- spoof data so that it appears to be valid.
-
-4.3.1. KSK Compromise
-
- A zone containing a DNSKEY RRSet with a compromised KSK is vulnerable
- as long as the compromised KSK is configured as trust anchor or a
- parental DS points to it.
-
- A compromised KSK can be used to sign the key set of an attacker's
- zone. That zone could be used to poison the DNS.
-
- Therefore, when the KSK has been compromised, the trust anchor or the
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 24]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- parental DS should be replaced as soon as possible. It is local
- policy whether to break the trust chain during the emergency
- rollover. The trust chain would be broken when the compromised KSK
- is removed from the child's zone while the parent still has a DS
- pointing to the compromised KSK (the assumption is that there is only
- one DS at the parent. If there are multiple DSes this does not apply
- -- however the chain of trust of this particular key is broken).
-
- Note that an attacker's zone still uses the compromised KSK and the
- presence of a parental DS would cause the data in this zone to appear
- as valid. Removing the compromised key would cause the attacker's
- zone to appear as valid and the child's zone as Bogus. Therefore, we
- advise not to remove the KSK before the parent has a DS to a new KSK
- in place.
-
-4.3.1.1. Keeping the Chain of Trust Intact
-
- If we follow this advice, the timing of the replacement of the KSK is
- somewhat critical. The goal is to remove the compromised KSK as soon
- as the new DS RR is available at the parent. And also make sure that
- the signature made with a new KSK over the key set with the
- compromised KSK in it expires just after the new DS appears at the
- parent, thus removing the old cruft in one swoop.
-
- The procedure is as follows:
-
- 1. Introduce a new KSK into the key set, keep the compromised KSK in
- the key set.
-
- 2. Sign the key set, with a short validity period. The validity
- period should expire shortly after the DS is expected to appear
- in the parent and the old DSes have expired from caches.
-
- 3. Upload the DS for this new key to the parent.
-
- 4. Follow the procedure of the regular KSK rollover: Wait for the DS
- to appear in the authoritative servers and then wait as long as
- the TTL of the old DS RRs. If necessary re-sign the DNSKEY RRSet
- and modify/extend the expiration time.
-
- 5. Remove the compromised DNSKEY RR from the zone and re-sign the
- key set using your "normal" validity interval.
-
- An additional danger of a key compromise is that the compromised key
- could be used to facilitate a legitimate DNSKEY/DS rollover and/or
- nameserver changes at the parent. When that happens, the domain may
- be in dispute. An authenticated out-of-band and secure notify
- mechanism to contact a parent is needed in this case.
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 25]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- Note that this is only a problem when the DNSKEY and or DS records
- are used for authentication at the parent.
-
-4.3.1.2. Breaking the Chain of Trust
-
- There are two methods to break the chain of trust. The first method
- causes the child zone to appear 'Bogus' to validating resolvers. The
- other causes the child zone to appear 'insecure'. These are
- described below.
-
- In the method that causes the child zone to appear 'Bogus' to
- validating resolvers, the child zone replaces the current KSK with a
- new one and re-signs the key set. Next it sends the DS of the new
- key to the parent. Only after the parent has placed the new DS in
- the zone is the child's chain of trust repaired.
-
- An alternative method of breaking the chain of trust is by removing
- the DS RRs from the parent zone altogether. As a result, the child
- zone would become insecure.
-
-4.3.2. ZSK Compromise
-
- Primarily because there is no parental interaction required when a
- ZSK is compromised, the situation is less severe than with a KSK
- compromise. The zone must still be re-signed with a new ZSK as soon
- as possible. As this is a local operation and requires no
- communication between the parent and child, this can be achieved
- fairly quickly. However, one has to take into account that just as
- with a normal rollover the immediate disappearance of the old
- compromised key may lead to verification problems. Also note that as
- long as the RRSIG over the compromised ZSK is not expired the zone
- may be still at risk.
-
-4.3.3. Compromises of Keys Anchored in Resolvers
-
- A key can also be pre-configured in resolvers. For instance, if
- DNSSEC is successfully deployed the root key may be pre-configured in
- most security aware resolvers.
-
- If trust-anchor keys are compromised, the resolvers using these keys
- should be notified of this fact. Zone administrators may consider
- setting up a mailing list to communicate the fact that a SEP key is
- about to be rolled over. This communication will of course need to
- be authenticated, e.g., by using digital signatures.
-
- End-users faced with the task of updating an anchored key should
- always validate the new key. New keys should be authenticated out-
- of-band, for example, through the use of an announcement website that
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 26]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- is secured using secure sockets (TLS) [23].
-
-4.4. Parental Policies
-
-4.4.1. Initial Key Exchanges and Parental Policies Considerations
-
- The initial key exchange is always subject to the policies set by the
- parent. When designing a key exchange policy one should take into
- account that the authentication and authorization mechanisms used
- during a key exchange should be as strong as the authentication and
- authorization mechanisms used for the exchange of delegation
- information between parent and child. That is, there is no implicit
- need in DNSSEC to make the authentication process stronger than it
- was in DNS.
-
- Using the DNS itself as the source for the actual DNSKEY material,
- with an out-of-band check on the validity of the DNSKEY, has the
- benefit that it reduces the chances of user error. A DNSKEY query
- tool can make use of the SEP bit [5] to select the proper key from a
- DNSSEC key set, thereby reducing the chance that the wrong DNSKEY is
- sent. It can validate the self-signature over a key; thereby
- verifying the ownership of the private key material. Fetching the
- DNSKEY from the DNS ensures that the chain of trust remains intact
- once the parent publishes the DS RR indicating the child is secure.
-
- Note: the out-of-band verification is still needed when the key
- material is fetched via the DNS. The parent can never be sure
- whether or not the DNSKEY RRs have been spoofed.
-
-4.4.2. Storing Keys or Hashes?
-
- When designing a registry system one should consider which of the
- DNSKEYs and/or the corresponding DSes to store. Since a child zone
- might wish to have a DS published using a message digest algorithm
- not yet understood by the registry, the registry can't count on being
- able to generate the DS record from a raw DNSKEY. Thus, we recommend
- that registry systems at least support storing DS records.
-
- It may also be useful to store DNSKEYs, since having them may help
- during troubleshooting and, as long as the child's chosen message
- digest is supported, the overhead of generating DS records from them
- is minimal. Having an out-of-band mechanism, such as a registry
- directory (e.g., Whois), to find out which keys are used to generate
- DS Resource Records for specific owners and/or zones may also help
- with troubleshooting.
-
- The storage considerations also relate to the design of the customer
- interface and the method by which data is transferred between
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 27]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- registrant and registry; Will the child zone administrator be able to
- upload DS RRs with unknown hash algorithms or does the interface only
- allow DNSKEYs? In the registry-registrar model, one can use the
- DNSSEC extensions to the Extensible Provisioning Protocol (EPP) [15],
- which allows transfer of DS RRs and optionally DNSKEY RRs.
-
-4.4.3. Security Lameness
-
- Security lameness is defined as what happens when a parent has a DS
- RR pointing to a non-existing DNSKEY RR. When this happens, the
- child's zone may be marked "Bogus" by verifying DNS clients.
-
- As part of a comprehensive delegation check, the parent could, at key
- exchange time, verify that the child's key is actually configured in
- the DNS. However, if a parent does not understand the hashing
- algorithm used by child, the parental checks are limited to only
- comparing the key id.
-
- Child zones should be very careful in removing DNSKEY material,
- specifically SEP keys, for which a DS RR exists.
-
- Once a zone is "security lame", a fix (e.g., removing a DS RR) will
- take time to propagate through the DNS.
-
-4.4.4. DS Signature Validity Period
-
- Since the DS can be replayed as long as it has a valid signature, a
- short signature validity period over the DS minimizes the time a
- child is vulnerable in the case of a compromise of the child's
- KSK(s). A signature validity period that is too short introduces the
- possibility that a zone is marked "Bogus" in case of a configuration
- error in the signer. There may not be enough time to fix the
- problems before signatures expire. Something as mundane as operator
- unavailability during weekends shows the need for DS signature
- validity periods longer than 2 days. We recommend an absolute
- minimum for a DS signature validity period of a few days.
-
- The maximum signature validity period of the DS record depends on how
- long child zones are willing to be vulnerable after a key compromise.
- On the other hand, shortening the DS signature validity interval
- increases the operational risk for the parent. Therefore, the parent
- may have policy to use a signature validity interval that is
- considerably longer than the child would hope for.
-
- A compromise between the operational constraints of the parent and
- minimizing damage for the child may result in a DS signature validity
- period somewhere between a week and months.
-
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 28]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- In addition to the signature validity period, which sets a lower
- bound on the number of times the zone owner will need to sign the
- zone data and which sets an upper bound to the time a child is
- vulnerable after key compromise, there is the TTL value on the DS
- RRs. Shortening the TTL means that the authoritative servers will
- see more queries. But on the other hand, a short TTL lowers the
- persistence of DS RRSets in caches thereby increasing the speed with
- which updated DS RRSets propagate through the DNS.
-
-4.4.5. (Non) Cooperating Registrars
-
- [OK: this is a first strawman, and is intended to start the
- discussion of the issue. By no means this is intended to be a final
- text.]
-
- The parent-child relation is often described in terms of a (thin)
- registry model. Where a registry maintains the parent zone, and the
- registrant (the user of the child-domain name), deals with the
- registry through an intermediary called a registrar. (See [12] for a
- comprehensive definition). Registrants may out-source the
- maintenance of their DNS system, including the maintenance of DNSSEC
- key material, to the registrar or to another third party. The entity
- that has control over the DNS zone and its keys may prevent the
- registrant to make a timely move to a different registrar. [OK: I
- use the term registrar below while it is the operator of the DNS zone
- who is the actual culprit. For instance, the case also applies when
- a registrant passes a zone to another registrant. Should I just use
- "DNS Administrator"?]
-
- Suppose that the registrant wants to move from losing registrar A to
- gaining registrar B. Let us first look what would happen in a
- cooperative environment. The assumption is that registrar A will not
- hand off any private key material to registrar B because that would
- be a trivial case.
-
- In a cooperating environment one could proceed with a pre-publish ZSK
- rollover whereby registrar A pre-publishes the ZSK of registrar B,
- combined with a double signature KSK rollover where the two
- registrars exchange public keys and independently generate a
- signature over the keysets that they combine and both publish in the
- zone.
-
- In the non-cooperative case matters are more complicated. The
- loosing registrar A may not cooperate and leave the data in the DNS
- as is. In the extreme case registrar A may become obstructive and
- publish a DNSKEY RR with a high TTL and corresponding signature
- validity so that registrar A's DNSKEY, would end up in caches for, in
- theory, tens of years.
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 29]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- The problem arises when a validator tries to validate with A's key
- and there is no signature material produced with Registrars A
- available in the delegation path after redelegation from registrar A
- to registrar B has taken place. One could imagine a rollover
- scenario where registrar B pulls all RRSIGs created by registar A and
- publishes those in conjunction with its own signatures, but that
- would not allow any changes in the zone content. Since a
- redelegation took place the NS RRset has -- per definition-- changed
- so such rollover scenario will not work. Besides if zone transfers
- are not allowed by A and NSEC3 is deployed in the A's zone then
- registrar B will not have certainty that all of A's RRSIGs are
- transfered.
-
- The only viable option for the registrant is to publish its zone
- unsigned and ask the registry to remove the DS pointing to registrar
- A for as long as the DNSKEY of registrar A, or any of the signatures
- produced by registrar A are likely to appear in caches, which as
- mentioned above could in theory be for tens of years. [OK: Some
- implementations limit the time data is cached. Although that is not
- a protocol requirement (and may even be considered a protocol
- violation) it seems that that practice may limit the impact of this
- problem, is that worth mentioning?]
-
- [OK: This is really the point that I'm trying to make, is the above
- text needed?] There is no operational methodology to work around
- this business issue and proper contractual relations ships between
- registrants and their registrars seem to be the only solution to cope
- with these problems.
-
-5. Security Considerations
-
- DNSSEC adds data integrity to the DNS. This document tries to assess
- the operational considerations to maintain a stable and secure DNSSEC
- service. Not taking into account the 'data propagation' properties
- in the DNS will cause validation failures and may make secured zones
- unavailable to security-aware resolvers.
-
-6. IANA considerations
-
- There are no IANA considerations with respect to this document
-
-7. Acknowledgments
-
- Most of the text of this document is copied from RFC4641 [16] people
- involved in that work were in random order: Rip Loomis, Olafur
- Gudmundsson, Wesley Griffin, Michael Richardson, Scott Rose, Rick van
- Rein, Tim McGinnis, Gilles Guette Olivier Courtay, Sam Weiler, Jelte
- Jansen, Niall O'Reilly, Holger Zuleger, Ed Lewis, Hilarie Orman,
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 30]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- Marcos Sanz, Peter Koch, Mike StJohns, Emmar Bretherick, Adrian
- Bedford, and Lindy Foster, G. Guette, and O. Courtay.
-
- For this version of the document we would like to acknowldge:
-
- o Paul Hoffman for his contribution on the choice of cryptographic
- paramenters and addressing some of the trust anchor issues.
-
- o Jelte Jansen provided the text in Section 4.2.4
-
-8. References
-
-8.1. Normative References
-
- [1] Mockapetris, P., "Domain names - concepts and facilities",
- STD 13, RFC 1034, November 1987.
-
- [2] Mockapetris, P., "Domain names - implementation and
- specification", STD 13, RFC 1035, November 1987.
-
- [3] Arends, R., Austein, R., Larson, M., Massey, D., and S. Rose,
- "DNS Security Introduction and Requirements", RFC 4033,
- March 2005.
-
- [4] Arends, R., Austein, R., Larson, M., Massey, D., and S. Rose,
- "Resource Records for the DNS Security Extensions", RFC 4034,
- March 2005.
-
- [5] Arends, R., Austein, R., Larson, M., Massey, D., and S. Rose,
- "Protocol Modifications for the DNS Security Extensions",
- RFC 4035, March 2005.
-
-8.2. Informative References
-
- [6] Bradner, S., "Key words for use in RFCs to Indicate Requirement
- Levels", BCP 14, RFC 2119, March 1997.
-
- [7] Ohta, M., "Incremental Zone Transfer in DNS", RFC 1995,
- August 1996.
-
- [8] Vixie, P., "A Mechanism for Prompt Notification of Zone Changes
- (DNS NOTIFY)", RFC 1996, August 1996.
-
- [9] Andrews, M., "Negative Caching of DNS Queries (DNS NCACHE)",
- RFC 2308, March 1998.
-
- [10] Eastlake, D., "DNS Security Operational Considerations",
- RFC 2541, March 1999.
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 31]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- [11] Wellington, B., "Secure Domain Name System (DNS) Dynamic
- Update", RFC 3007, November 2000.
-
- [12] Hollenbeck, S., "Generic Registry-Registrar Protocol
- Requirements", RFC 3375, September 2002.
-
- [13] Orman, H. and P. Hoffman, "Determining Strengths For Public
- Keys Used For Exchanging Symmetric Keys", BCP 86, RFC 3766,
- April 2004.
-
- [14] Eastlake, D., Schiller, J., and S. Crocker, "Randomness
- Requirements for Security", BCP 106, RFC 4086, June 2005.
-
- [15] Hollenbeck, S., "Domain Name System (DNS) Security Extensions
- Mapping for the Extensible Provisioning Protocol (EPP)",
- RFC 4310, December 2005.
-
- [16] Kolkman, O. and R. Gieben, "DNSSEC Operational Practices",
- RFC 4641, September 2006.
-
- [17] Shirey, R., "Internet Security Glossary, Version 2", RFC 4949,
- August 2007.
-
- [18] StJohns, M., "Automated Updates of DNS Security (DNSSEC) Trust
- Anchors", RFC 5011, September 2007.
-
- [19] Rose, S., "NIST DNSSEC workshop notes", , June 2001.
-
- [20] Barker, E. and J. Kelsey, "Recommendation for Random Number
- Generation Using Deterministic Random Bit Generators
- (Revised)", Nist Special Publication 800-90, March 2007.
-
- [21] Jansen, J., "Use of SHA-2 algorithms with RSA in DNSKEY and
- RRSIG Resource Records for DNSSEC",
- draft-ietf-dnsext-dnssec-rsasha256-05 (work in progress),
- July 2008.
-
- [22] Hardaker, W., "Use of SHA-256 in DNSSEC Delegation Signer (DS)
- Resource Records (RRs)", RFC 4509, May 2006.
-
- [23] Blake-Wilson, S., Nystrom, M., Hopwood, D., Mikkelsen, J., and
- T. Wright, "Transport Layer Security (TLS) Extensions",
- RFC 4366, April 2006.
-
-Appendix A. Terminology
-
- In this document, there is some jargon used that is defined in other
- documents. In most cases, we have not copied the text from the
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 32]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- documents defining the terms but have given a more elaborate
- explanation of the meaning. Note that these explanations should not
- be seen as authoritative.
-
- Anchored key: A DNSKEY configured in resolvers around the globe.
- This key is hard to update, hence the term anchored.
-
- Bogus: Also see Section 5 of [3]. An RRSet in DNSSEC is marked
- "Bogus" when a signature of an RRSet does not validate against a
- DNSKEY.
-
- Key Signing Key or KSK: A Key Signing Key (KSK) is a key that is
- used exclusively for signing the apex key set. The fact that a
- key is a KSK is only relevant to the signing tool.
-
- Key size: The term 'key size' can be substituted by 'modulus size'
- throughout the document. It is mathematically more correct to use
- modulus size, but as this is a document directed at operators we
- feel more at ease with the term key size.
-
- Private and public keys: DNSSEC secures the DNS through the use of
- public key cryptography. Public key cryptography is based on the
- existence of two (mathematically related) keys, a public key and a
- private key. The public keys are published in the DNS by use of
- the DNSKEY Resource Record (DNSKEY RR). Private keys should
- remain private.
-
- Key rollover: A key rollover (also called key supercession in some
- environments) is the act of replacing one key pair with another at
- the end of a key effectivity period.
-
- Secure Entry Point (SEP) key: A KSK that has a parental DS record
- pointing to it or is configured as a trust anchor. Although not
- required by the protocol, we recommend that the SEP flag [5] is
- set on these keys.
-
- Self-signature: This only applies to signatures over DNSKEYs; a
- signature made with DNSKEY x, over DNSKEY x is called a self-
- signature. Note: without further information, self-signatures
- convey no trust. They are useful to check the authenticity of the
- DNSKEY, i.e., they can be used as a hash.
-
- Singing the zone file: The term used for the event where an
- administrator joyfully signs its zone file while producing melodic
- sound patterns.
-
-
-
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 33]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- Signer: The system that has access to the private key material and
- signs the Resource Record sets in a zone. A signer may be
- configured to sign only parts of the zone, e.g., only those RRSets
- for which existing signatures are about to expire.
-
- Zone Signing Key (ZSK): A key that is used for signing all data in a
- zone (except, perhaps, the DNSKEY RRSet). The fact that a key is
- a ZSK is only relevant to the signing tool.
-
- Zone administrator: The 'role' that is responsible for signing a
- zone and publishing it on the primary authoritative server.
-
-Appendix B. Zone Signing Key Rollover How-To
-
- Using the pre-published signature scheme and the most conservative
- method to assure oneself that data does not live in caches, here
- follows the "how-to".
-
- Step 0: The preparation: Create two keys and publish both in your
- key set. Mark one of the keys "active" and the other "published".
- Use the "active" key for signing your zone data. Store the
- private part of the "published" key, preferably off-line. The
- protocol does not provide for attributes to mark a key as active
- or published. This is something you have to do on your own,
- through the use of a notebook or key management tool.
-
- Step 1: Determine expiration: At the beginning of the rollover make
- a note of the highest expiration time of signatures in your zone
- file created with the current key marked as active. Wait until
- the expiration time marked in Step 1 has passed.
-
- Step 2: Then start using the key that was marked "published" to sign
- your data (i.e., mark it "active"). Stop using the key that was
- marked "active"; mark it "rolled".
-
- Step 3: It is safe to engage in a new rollover (Step 1) after at
- least one signature validity period.
-
-Appendix C. Typographic Conventions
-
- The following typographic conventions are used in this document:
-
- Key notation: A key is denoted by DNSKEYx, where x is a number or an
- identifier, x could be thought of as the key id.
-
-
-
-
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 34]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- RRSet notations: RRs are only denoted by the type. All other
- information -- owner, class, rdata, and TTL -- is left out. Thus:
- "example.com 3600 IN A 192.0.2.1" is reduced to "A". RRSets are a
- list of RRs. A example of this would be "A1, A2", specifying the
- RRSet containing two "A" records. This could again be abbreviated
- to just "A".
-
- Signature notation: Signatures are denoted as RRSIGx(RRSet), which
- means that RRSet is signed with DNSKEYx.
-
- Zone representation: Using the above notation we have simplified the
- representation of a signed zone by leaving out all unnecessary
- details such as the names and by representing all data by "SOAx"
-
- SOA representation: SOAs are represented as SOAx, where x is the
- serial number.
-
- Using this notation the following signed zone:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 35]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- example.net. 86400 IN SOA ns.example.net. bert.example.net. (
- 2006022100 ; serial
- 86400 ; refresh ( 24 hours)
- 7200 ; retry ( 2 hours)
- 3600000 ; expire (1000 hours)
- 28800 ) ; minimum ( 8 hours)
- 86400 RRSIG SOA 5 2 86400 20130522213204 (
- 20130422213204 14 example.net.
- cmL62SI6iAX46xGNQAdQ... )
- 86400 NS a.example.net.
- 86400 NS b.example.net.
- 86400 RRSIG NS 5 2 86400 20130507213204 (
- 20130407213204 14 example.net.
- SO5epiJei19AjXoUpFnQ ... )
- 86400 DNSKEY 256 3 5 (
- EtRB9MP5/AvOuVO0I8XDxy0... ) ; id = 14
- 86400 DNSKEY 257 3 5 (
- gsPW/Yy19GzYIY+Gnr8HABU... ) ; id = 15
- 86400 RRSIG DNSKEY 5 2 86400 20130522213204 (
- 20130422213204 14 example.net.
- J4zCe8QX4tXVGjV4e1r9... )
- 86400 RRSIG DNSKEY 5 2 86400 20130522213204 (
- 20130422213204 15 example.net.
- keVDCOpsSeDReyV6O... )
- 86400 RRSIG NSEC 5 2 86400 20130507213204 (
- 20130407213204 14 example.net.
- obj3HEp1GjnmhRjX... )
- a.example.net. 86400 IN TXT "A label"
- 86400 RRSIG TXT 5 3 86400 20130507213204 (
- 20130407213204 14 example.net.
- IkDMlRdYLmXH7QJnuF3v... )
- 86400 NSEC b.example.com. TXT RRSIG NSEC
- 86400 RRSIG NSEC 5 3 86400 20130507213204 (
- 20130407213204 14 example.net.
- bZMjoZ3bHjnEz0nIsPMM... )
- ...
-
- is reduced to the following representation:
-
- SOA2006022100
- RRSIG14(SOA2006022100)
- DNSKEY14
- DNSKEY15
-
- RRSIG14(KEY)
- RRSIG15(KEY)
-
- The rest of the zone data has the same signature as the SOA record,
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 36]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- i.e., an RRSIG created with DNSKEY 14.
-
-Appendix D. Document Editing History
-
- [To be removed prior to publication as an RFC]
-
-D.1. draft-ietf-dnsop-rfc4641-00
-
- Version 0 was differs from RFC4641 in the following ways.
-
- o Status of this memo appropriate for I-D
-
- o TOC formatting differs.
-
- o Whitespaces, linebreaks, and pagebreaks may be slightly different
- because of xml2rfc generation.
-
- o References slightly reordered.
-
- o Applied the errata from
- http://www.rfc-editor.org/errata_search.php?rfc=4641
-
- o Inserted trivial "IANA considertations" section.
-
- In other words it should not contain substantive changes in content
- as intended by the workinggroup for the original RFC4641.
-
-D.2. version 0->1
-
- Cryptography details rewritten. (See http://www.nlnetlabs.nl/svn/
- rfc4641bis/trunk/open-issues/cryptography_flawed)
-
- o Reference to NIST 800-90 added
-
- o RSA/SHA256 is being recommended in addition to RSA/SHA1.
-
- o Complete rewrite of Section 3.5 removing the table and suggesting
- a keysize of 1024 for keys in use for less than 8 years, issued up
- to at least 2015.
-
- o Replaced the reference to Schneiers' applied cryptograpy with a
- reference to RFC4949.
-
- o Removed the KSK for high level zones consideration
-
- Applied some differentiation with respect of the use of a KSK for
- parent or trust-anchor relation http://www.nlnetlabs.nl/svn/
- rfc4641bis/trunk/open-issues/differentiation_trustanchor_parent
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 37]
-
-Internet-Draft DNSSEC Operational Practices, Version 2 March 2009
-
-
- http://www.nlnetlabs.nl/svn/rfc4641bis/trunk/open-issues/
- rollover_assumptions
-
- Added Section 4.2.4 as suggested by Jelte Jansen in http://
- www.nlnetlabs.nl/svn/rfc4641bis/trunk/open-issues/Key_algorithm_roll
-
- Added Section 4.4.5 Issue identified by Antoin Verschuur http://
- www.nlnetlabs.nl/svn/rfc4641bis/trunk/open-issues/
- non-cooperative-registrars
-
- In Appendix A: ZSK does not nescessarily sign the DNSKEY RRset.
-
- $Id: draft-ietf-dnsop-rfc4641bis-01.txt 28 2009-03-06 14:03:57Z olaf $
-
-Authors' Addresses
-
- Olaf M. Kolkman
- NLnet Labs
- Kruislaan 419
- Amsterdam 1098 VA
- The Netherlands
-
- EMail: olaf@nlnetlabs.nl
- URI: http://www.nlnetlabs.nl
-
-
- Miek Gieben
-
-
- EMail: miek@miek.nl
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Kolkman & Gieben Expires September 8, 2009 [Page 38]
-
diff --git a/contrib/zkt-1.1.3/doc/rfc4641.txt b/contrib/zkt-1.1.3/doc/rfc4641.txt
deleted file mode 100644
index 0a013bcb..00000000
--- a/contrib/zkt-1.1.3/doc/rfc4641.txt
+++ /dev/null
@@ -1,1963 +0,0 @@
-
-
-
-
-
-
-Network Working Group O. Kolkman
-Request for Comments: 4641 R. Gieben
-Obsoletes: 2541 NLnet Labs
-Category: Informational September 2006
-
-
- DNSSEC Operational Practices
-
-Status of This Memo
-
- This memo provides information for the Internet community. It does
- not specify an Internet standard of any kind. Distribution of this
- memo is unlimited.
-
-Copyright Notice
-
- Copyright (C) The Internet Society (2006).
-
-Abstract
-
- This document describes a set of practices for operating the DNS with
- security extensions (DNSSEC). The target audience is zone
- administrators deploying DNSSEC.
-
- The document discusses operational aspects of using keys and
- signatures in the DNS. It discusses issues of key generation, key
- storage, signature generation, key rollover, and related policies.
-
- This document obsoletes RFC 2541, as it covers more operational
- ground and gives more up-to-date requirements with respect to key
- sizes and the new DNSSEC specification.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Kolkman & Gieben Informational [Page 1]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
-Table of Contents
-
- 1. Introduction ....................................................3
- 1.1. The Use of the Term 'key' ..................................4
- 1.2. Time Definitions ...........................................4
- 2. Keeping the Chain of Trust Intact ...............................5
- 3. Keys Generation and Storage .....................................6
- 3.1. Zone and Key Signing Keys ..................................6
- 3.1.1. Motivations for the KSK and ZSK Separation ..........6
- 3.1.2. KSKs for High-Level Zones ...........................7
- 3.2. Key Generation .............................................8
- 3.3. Key Effectivity Period .....................................8
- 3.4. Key Algorithm ..............................................9
- 3.5. Key Sizes ..................................................9
- 3.6. Private Key Storage .......................................11
- 4. Signature Generation, Key Rollover, and Related Policies .......12
- 4.1. Time in DNSSEC ............................................12
- 4.1.1. Time Considerations ................................12
- 4.2. Key Rollovers .............................................14
- 4.2.1. Zone Signing Key Rollovers .........................14
- 4.2.1.1. Pre-Publish Key Rollover ..................15
- 4.2.1.2. Double Signature Zone Signing Key
- Rollover ..................................17
- 4.2.1.3. Pros and Cons of the Schemes ..............18
- 4.2.2. Key Signing Key Rollovers ..........................18
- 4.2.3. Difference Between ZSK and KSK Rollovers ...........20
- 4.2.4. Automated Key Rollovers ............................21
- 4.3. Planning for Emergency Key Rollover .......................21
- 4.3.1. KSK Compromise .....................................22
- 4.3.1.1. Keeping the Chain of Trust Intact .........22
- 4.3.1.2. Breaking the Chain of Trust ...............23
- 4.3.2. ZSK Compromise .....................................23
- 4.3.3. Compromises of Keys Anchored in Resolvers ..........24
- 4.4. Parental Policies .........................................24
- 4.4.1. Initial Key Exchanges and Parental Policies
- Considerations .....................................24
- 4.4.2. Storing Keys or Hashes? ............................25
- 4.4.3. Security Lameness ..................................25
- 4.4.4. DS Signature Validity Period .......................26
- 5. Security Considerations ........................................26
- 6. Acknowledgments ................................................26
- 7. References .....................................................27
- 7.1. Normative References ......................................27
- 7.2. Informative References ....................................28
- Appendix A. Terminology ...........................................30
- Appendix B. Zone Signing Key Rollover How-To ......................31
- Appendix C. Typographic Conventions ...............................32
-
-
-
-
-Kolkman & Gieben Informational [Page 2]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
-1. Introduction
-
- This document describes how to run a DNS Security (DNSSEC)-enabled
- environment. It is intended for operators who have knowledge of the
- DNS (see RFC 1034 [1] and RFC 1035 [2]) and want to deploy DNSSEC.
- See RFC 4033 [4] for an introduction to DNSSEC, RFC 4034 [5] for the
- newly introduced Resource Records (RRs), and RFC 4035 [6] for the
- protocol changes.
-
- During workshops and early operational deployment tests, operators
- and system administrators have gained experience about operating the
- DNS with security extensions (DNSSEC). This document translates
- these experiences into a set of practices for zone administrators.
- At the time of writing, there exists very little experience with
- DNSSEC in production environments; this document should therefore
- explicitly not be seen as representing 'Best Current Practices'.
-
- The procedures herein are focused on the maintenance of signed zones
- (i.e., signing and publishing zones on authoritative servers). It is
- intended that maintenance of zones such as re-signing or key
- rollovers be transparent to any verifying clients on the Internet.
-
- The structure of this document is as follows. In Section 2, we
- discuss the importance of keeping the "chain of trust" intact.
- Aspects of key generation and storage of private keys are discussed
- in Section 3; the focus in this section is mainly on the private part
- of the key(s). Section 4 describes considerations concerning the
- public part of the keys. Since these public keys appear in the DNS
- one has to take into account all kinds of timing issues, which are
- discussed in Section 4.1. Section 4.2 and Section 4.3 deal with the
- rollover, or supercession, of keys. Finally, Section 4.4 discusses
- considerations on how parents deal with their children's public keys
- in order to maintain chains of trust.
-
- The typographic conventions used in this document are explained in
- Appendix C.
-
- Since this is a document with operational suggestions and there are
- no protocol specifications, the RFC 2119 [7] language does not apply.
-
- This document obsoletes RFC 2541 [12] to reflect the evolution of the
- underlying DNSSEC protocol since then. Changes in the choice of
- cryptographic algorithms, DNS record types and type names, and the
- parent-child key and signature exchange demanded a major rewrite and
- additional information and explanation.
-
-
-
-
-
-
-Kolkman & Gieben Informational [Page 3]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
-1.1. The Use of the Term 'key'
-
- It is assumed that the reader is familiar with the concept of
- asymmetric keys on which DNSSEC is based (public key cryptography
- [17]). Therefore, this document will use the term 'key' rather
- loosely. Where it is written that 'a key is used to sign data' it is
- assumed that the reader understands that it is the private part of
- the key pair that is used for signing. It is also assumed that the
- reader understands that the public part of the key pair is published
- in the DNSKEY Resource Record and that it is the public part that is
- used in key exchanges.
-
-1.2. Time Definitions
-
- In this document, we will be using a number of time-related terms.
- The following definitions apply:
-
- o "Signature validity period" The period that a signature is valid.
- It starts at the time specified in the signature inception field
- of the RRSIG RR and ends at the time specified in the expiration
- field of the RRSIG RR.
-
- o "Signature publication period" Time after which a signature (made
- with a specific key) is replaced with a new signature (made with
- the same key). This replacement takes place by publishing the
- relevant RRSIG in the master zone file. After one stops
- publishing an RRSIG in a zone, it may take a while before the
- RRSIG has expired from caches and has actually been removed from
- the DNS.
-
- o "Key effectivity period" The period during which a key pair is
- expected to be effective. This period is defined as the time
- between the first inception time stamp and the last expiration
- date of any signature made with this key, regardless of any
- discontinuity in the use of the key. The key effectivity period
- can span multiple signature validity periods.
-
- o "Maximum/Minimum Zone Time to Live (TTL)" The maximum or minimum
- value of the TTLs from the complete set of RRs in a zone. Note
- that the minimum TTL is not the same as the MINIMUM field in the
- SOA RR. See [11] for more information.
-
-
-
-
-
-
-
-
-
-
-Kolkman & Gieben Informational [Page 4]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
-2. Keeping the Chain of Trust Intact
-
- Maintaining a valid chain of trust is important because broken chains
- of trust will result in data being marked as Bogus (as defined in [4]
- Section 5), which may cause entire (sub)domains to become invisible
- to verifying clients. The administrators of secured zones have to
- realize that their zone is, to verifying clients, part of a chain of
- trust.
-
- As mentioned in the introduction, the procedures herein are intended
- to ensure that maintenance of zones, such as re-signing or key
- rollovers, will be transparent to the verifying clients on the
- Internet.
-
- Administrators of secured zones will have to keep in mind that data
- published on an authoritative primary server will not be immediately
- seen by verifying clients; it may take some time for the data to be
- transferred to other secondary authoritative nameservers and clients
- may be fetching data from caching non-authoritative servers. In this
- light, note that the time for a zone transfer from master to slave is
- negligible when using NOTIFY [9] and incremental transfer (IXFR) [8].
- It increases when full zone transfers (AXFR) are used in combination
- with NOTIFY. It increases even more if you rely on full zone
- transfers based on only the SOA timing parameters for refresh.
-
- For the verifying clients, it is important that data from secured
- zones can be used to build chains of trust regardless of whether the
- data came directly from an authoritative server, a caching
- nameserver, or some middle box. Only by carefully using the
- available timing parameters can a zone administrator ensure that the
- data necessary for verification can be obtained.
-
- The responsibility for maintaining the chain of trust is shared by
- administrators of secured zones in the chain of trust. This is most
- obvious in the case of a 'key compromise' when a trade-off between
- maintaining a valid chain of trust and replacing the compromised keys
- as soon as possible must be made. Then zone administrators will have
- to make a trade-off, between keeping the chain of trust intact --
- thereby allowing for attacks with the compromised key -- or
- deliberately breaking the chain of trust and making secured
- subdomains invisible to security-aware resolvers. Also see Section
- 4.3.
-
-
-
-
-
-
-
-
-
-Kolkman & Gieben Informational [Page 5]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
-3. Keys Generation and Storage
-
- This section describes a number of considerations with respect to the
- security of keys. It deals with the generation, effectivity period,
- size, and storage of private keys.
-
-3.1. Zone and Key Signing Keys
-
- The DNSSEC validation protocol does not distinguish between different
- types of DNSKEYs. All DNSKEYs can be used during the validation. In
- practice, operators use Key Signing and Zone Signing Keys and use the
- so-called Secure Entry Point (SEP) [3] flag to distinguish between
- them during operations. The dynamics and considerations are
- discussed below.
-
- To make zone re-signing and key rollover procedures easier to
- implement, it is possible to use one or more keys as Key Signing Keys
- (KSKs). These keys will only sign the apex DNSKEY RRSet in a zone.
- Other keys can be used to sign all the RRSets in a zone and are
- referred to as Zone Signing Keys (ZSKs). In this document, we assume
- that KSKs are the subset of keys that are used for key exchanges with
- the parent and potentially for configuration as trusted anchors --
- the SEP keys. In this document, we assume a one-to-one mapping
- between KSK and SEP keys and we assume the SEP flag to be set on all
- KSKs.
-
-3.1.1. Motivations for the KSK and ZSK Separation
-
- Differentiating between the KSK and ZSK functions has several
- advantages:
-
- o No parent/child interaction is required when ZSKs are updated.
-
- o The KSK can be made stronger (i.e., using more bits in the key
- material). This has little operational impact since it is only
- used to sign a small fraction of the zone data. Also, the KSK is
- only used to verify the zone's key set, not for other RRSets in
- the zone.
-
- o As the KSK is only used to sign a key set, which is most probably
- updated less frequently than other data in the zone, it can be
- stored separately from and in a safer location than the ZSK.
-
- o A KSK can have a longer key effectivity period.
-
- For almost any method of key management and zone signing, the KSK is
- used less frequently than the ZSK. Once a key set is signed with the
- KSK, all the keys in the key set can be used as ZSKs. If a ZSK is
-
-
-
-Kolkman & Gieben Informational [Page 6]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
- compromised, it can be simply dropped from the key set. The new key
- set is then re-signed with the KSK.
-
- Given the assumption that for KSKs the SEP flag is set, the KSK can
- be distinguished from a ZSK by examining the flag field in the DNSKEY
- RR. If the flag field is an odd number it is a KSK. If it is an
- even number it is a ZSK.
-
- The Zone Signing Key can be used to sign all the data in a zone on a
- regular basis. When a Zone Signing Key is to be rolled, no
- interaction with the parent is needed. This allows for signature
- validity periods on the order of days.
-
- The Key Signing Key is only to be used to sign the DNSKEY RRs in a
- zone. If a Key Signing Key is to be rolled over, there will be
- interactions with parties other than the zone administrator. These
- can include the registry of the parent zone or administrators of
- verifying resolvers that have the particular key configured as secure
- entry points. Hence, the key effectivity period of these keys can
- and should be made much longer. Although, given a long enough key,
- the key effectivity period can be on the order of years, we suggest
- planning for a key effectivity on the order of a few months so that a
- key rollover remains an operational routine.
-
-3.1.2. KSKs for High-Level Zones
-
- Higher-level zones are generally more sensitive than lower-level
- zones. Anyone controlling or breaking the security of a zone thereby
- obtains authority over all of its subdomains (except in the case of
- resolvers that have locally configured the public key of a subdomain,
- in which case this, and only this, subdomain wouldn't be affected by
- the compromise of the parent zone). Therefore, extra care should be
- taken with high-level zones, and strong keys should be used.
-
- The root zone is the most critical of all zones. Someone controlling
- or compromising the security of the root zone would control the
- entire DNS namespace of all resolvers using that root zone (except in
- the case of resolvers that have locally configured the public key of
- a subdomain). Therefore, the utmost care must be taken in the
- securing of the root zone. The strongest and most carefully handled
- keys should be used. The root zone private key should always be kept
- off-line.
-
- Many resolvers will start at a root server for their access to and
- authentication of DNS data. Securely updating the trust anchors in
- an enormous population of resolvers around the world will be
- extremely difficult.
-
-
-
-
-Kolkman & Gieben Informational [Page 7]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
-3.2. Key Generation
-
- Careful generation of all keys is a sometimes overlooked but
- absolutely essential element in any cryptographically secure system.
- The strongest algorithms used with the longest keys are still of no
- use if an adversary can guess enough to lower the size of the likely
- key space so that it can be exhaustively searched. Technical
- suggestions for the generation of random keys will be found in RFC
- 4086 [14]. One should carefully assess if the random number
- generator used during key generation adheres to these suggestions.
-
- Keys with a long effectivity period are particularly sensitive as
- they will represent a more valuable target and be subject to attack
- for a longer time than short-period keys. It is strongly recommended
- that long-term key generation occur off-line in a manner isolated
- from the network via an air gap or, at a minimum, high-level secure
- hardware.
-
-3.3. Key Effectivity Period
-
- For various reasons, keys in DNSSEC need to be changed once in a
- while. The longer a key is in use, the greater the probability that
- it will have been compromised through carelessness, accident,
- espionage, or cryptanalysis. Furthermore, when key rollovers are too
- rare an event, they will not become part of the operational habit and
- there is risk that nobody on-site will remember the procedure for
- rollover when the need is there.
-
- From a purely operational perspective, a reasonable key effectivity
- period for Key Signing Keys is 13 months, with the intent to replace
- them after 12 months. An intended key effectivity period of a month
- is reasonable for Zone Signing Keys.
-
- For key sizes that match these effectivity periods, see Section 3.5.
-
- As argued in Section 3.1.2, securely updating trust anchors will be
- extremely difficult. On the other hand, the "operational habit"
- argument does also apply to trust anchor reconfiguration. If a short
- key effectivity period is used and the trust anchor configuration has
- to be revisited on a regular basis, the odds that the configuration
- tends to be forgotten is smaller. The trade-off is against a system
- that is so dynamic that administrators of the validating clients will
- not be able to follow the modifications.
-
- Key effectivity periods can be made very short, as in a few minutes.
- But when replacing keys one has to take the considerations from
- Section 4.1 and Section 4.2 into account.
-
-
-
-
-Kolkman & Gieben Informational [Page 8]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
-3.4. Key Algorithm
-
- There are currently three different types of algorithms that can be
- used in DNSSEC: RSA, DSA, and elliptic curve cryptography. The
- latter is fairly new and has yet to be standardized for usage in
- DNSSEC.
-
- RSA has been developed in an open and transparent manner. As the
- patent on RSA expired in 2000, its use is now also free.
-
- DSA has been developed by the National Institute of Standards and
- Technology (NIST). The creation of signatures takes roughly the same
- time as with RSA, but is 10 to 40 times as slow for verification
- [17].
-
- We suggest the use of RSA/SHA-1 as the preferred algorithm for the
- key. The current known attacks on RSA can be defeated by making your
- key longer. As the MD5 hashing algorithm is showing cracks, we
- recommend the usage of SHA-1.
-
- At the time of publication, it is known that the SHA-1 hash has
- cryptanalysis issues. There is work in progress on addressing these
- issues. We recommend the use of public key algorithms based on
- hashes stronger than SHA-1 (e.g., SHA-256), as soon as these
- algorithms are available in protocol specifications (see [19] and
- [20]) and implementations.
-
-3.5. Key Sizes
-
- When choosing key sizes, zone administrators will need to take into
- account how long a key will be used, how much data will be signed
- during the key publication period (see Section 8.10 of [17]), and,
- optionally, how large the key size of the parent is. As the chain of
- trust really is "a chain", there is not much sense in making one of
- the keys in the chain several times larger then the others. As
- always, it's the weakest link that defines the strength of the entire
- chain. Also see Section 3.1.1 for a discussion of how keys serving
- different roles (ZSK vs. KSK) may need different key sizes.
-
- Generating a key of the correct size is a difficult problem; RFC 3766
- [13] tries to deal with that problem. The first part of the
- selection procedure in Section 1 of the RFC states:
-
- 1. Determine the attack resistance necessary to satisfy the
- security requirements of the application. Do this by
- estimating the minimum number of computer operations that the
- attacker will be forced to do in order to compromise the
-
-
-
-
-Kolkman & Gieben Informational [Page 9]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
- security of the system and then take the logarithm base two of
- that number. Call that logarithm value "n".
-
- A 1996 report recommended 90 bits as a good all-around choice
- for system security. The 90 bit number should be increased by
- about 2/3 bit/year, or about 96 bits in 2005.
-
- [13] goes on to explain how this number "n" can be used to calculate
- the key sizes in public key cryptography. This culminated in the
- table given below (slightly modified for our purpose):
-
- +-------------+-----------+--------------+
- | System | | |
- | requirement | Symmetric | RSA or DSA |
- | for attack | key size | modulus size |
- | resistance | (bits) | (bits) |
- | (bits) | | |
- +-------------+-----------+--------------+
- | 70 | 70 | 947 |
- | 80 | 80 | 1228 |
- | 90 | 90 | 1553 |
- | 100 | 100 | 1926 |
- | 150 | 150 | 4575 |
- | 200 | 200 | 8719 |
- | 250 | 250 | 14596 |
- +-------------+-----------+--------------+
-
- The key sizes given are rather large. This is because these keys are
- resilient against a trillionaire attacker. Assuming this rich
- attacker will not attack your key and that the key is rolled over
- once a year, we come to the following recommendations about KSK
- sizes: 1024 bits for low-value domains, 1300 bits for medium-value
- domains, and 2048 bits for high-value domains.
-
- Whether a domain is of low, medium, or high value depends solely on
- the views of the zone owner. One could, for instance, view leaf
- nodes in the DNS as of low value, and top-level domains (TLDs) or the
- root zone of high value. The suggested key sizes should be safe for
- the next 5 years.
-
- As ZSKs can be rolled over more easily (and thus more often), the key
- sizes can be made smaller. But as said in the introduction of this
- paragraph, making the ZSKs' key sizes too small (in relation to the
- KSKs' sizes) doesn't make much sense. Try to limit the difference in
- size to about 100 bits.
-
-
-
-
-
-
-Kolkman & Gieben Informational [Page 10]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
- Note that nobody can see into the future and that these key sizes are
- only provided here as a guide. Further information can be found in
- [16] and Section 7.5 of [17]. It should be noted though that [16] is
- already considered overly optimistic about what key sizes are
- considered safe.
-
- One final note concerning key sizes. Larger keys will increase the
- sizes of the RRSIG and DNSKEY records and will therefore increase the
- chance of DNS UDP packet overflow. Also, the time it takes to
- validate and create RRSIGs increases with larger keys, so don't
- needlessly double your key sizes.
-
-3.6. Private Key Storage
-
- It is recommended that, where possible, zone private keys and the
- zone file master copy that is to be signed be kept and used in off-
- line, non-network-connected, physically secure machines only.
- Periodically, an application can be run to add authentication to a
- zone by adding RRSIG and NSEC RRs. Then the augmented file can be
- transferred.
-
- When relying on dynamic update to manage a signed zone [10], be aware
- that at least one private key of the zone will have to reside on the
- master server. This key is only as secure as the amount of exposure
- the server receives to unknown clients and the security of the host.
- Although not mandatory, one could administer the DNS in the following
- way. The master that processes the dynamic updates is unavailable
- from generic hosts on the Internet, it is not listed in the NS RR
- set, although its name appears in the SOA RRs MNAME field. The
- nameservers in the NS RRSet are able to receive zone updates through
- NOTIFY, IXFR, AXFR, or an out-of-band distribution mechanism. This
- approach is known as the "hidden master" setup.
-
- The ideal situation is to have a one-way information flow to the
- network to avoid the possibility of tampering from the network.
- Keeping the zone master file on-line on the network and simply
- cycling it through an off-line signer does not do this. The on-line
- version could still be tampered with if the host it resides on is
- compromised. For maximum security, the master copy of the zone file
- should be off-net and should not be updated based on an unsecured
- network mediated communication.
-
- In general, keeping a zone file off-line will not be practical and
- the machines on which zone files are maintained will be connected to
- a network. Operators are advised to take security measures to shield
- unauthorized access to the master copy.
-
-
-
-
-
-Kolkman & Gieben Informational [Page 11]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
- For dynamically updated secured zones [10], both the master copy and
- the private key that is used to update signatures on updated RRs will
- need to be on-line.
-
-4. Signature Generation, Key Rollover, and Related Policies
-
-4.1. Time in DNSSEC
-
- Without DNSSEC, all times in the DNS are relative. The SOA fields
- REFRESH, RETRY, and EXPIRATION are timers used to determine the time
- elapsed after a slave server synchronized with a master server. The
- Time to Live (TTL) value and the SOA RR minimum TTL parameter [11]
- are used to determine how long a forwarder should cache data after it
- has been fetched from an authoritative server. By using a signature
- validity period, DNSSEC introduces the notion of an absolute time in
- the DNS. Signatures in DNSSEC have an expiration date after which
- the signature is marked as invalid and the signed data is to be
- considered Bogus.
-
-4.1.1. Time Considerations
-
- Because of the expiration of signatures, one should consider the
- following:
-
- o We suggest the Maximum Zone TTL of your zone data to be a fraction
- of your signature validity period.
-
- If the TTL would be of similar order as the signature validity
- period, then all RRSets fetched during the validity period
- would be cached until the signature expiration time. Section
- 7.1 of [4] suggests that "the resolver may use the time
- remaining before expiration of the signature validity period of
- a signed RRSet as an upper bound for the TTL". As a result,
- query load on authoritative servers would peak at signature
- expiration time, as this is also the time at which records
- simultaneously expire from caches.
-
- To avoid query load peaks, we suggest the TTL on all the RRs in
- your zone to be at least a few times smaller than your
- signature validity period.
-
- o We suggest the signature publication period to end at least one
- Maximum Zone TTL duration before the end of the signature validity
- period.
-
-
-
-
-
-
-
-Kolkman & Gieben Informational [Page 12]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
- Re-signing a zone shortly before the end of the signature
- validity period may cause simultaneous expiration of data from
- caches. This in turn may lead to peaks in the load on
- authoritative servers.
-
- o We suggest the Minimum Zone TTL to be long enough to both fetch
- and verify all the RRs in the trust chain. In workshop
- environments, it has been demonstrated [18] that a low TTL (under
- 5 to 10 minutes) caused disruptions because of the following two
- problems:
-
- 1. During validation, some data may expire before the
- validation is complete. The validator should be able to
- keep all data until it is completed. This applies to all
- RRs needed to complete the chain of trust: DSes, DNSKEYs,
- RRSIGs, and the final answers, i.e., the RRSet that is
- returned for the initial query.
-
- 2. Frequent verification causes load on recursive nameservers.
- Data at delegation points, DSes, DNSKEYs, and RRSIGs
- benefit from caching. The TTL on those should be
- relatively long.
-
- o Slave servers will need to be able to fetch newly signed zones
- well before the RRSIGs in the zone served by the slave server pass
- their signature expiration time.
-
- When a slave server is out of sync with its master and data in
- a zone is signed by expired signatures, it may be better for
- the slave server not to give out any answer.
-
- Normally, a slave server that is not able to contact a master
- server for an extended period will expire a zone. When that
- happens, the server will respond differently to queries for
- that zone. Some servers issue SERVFAIL, whereas others turn
- off the 'AA' bit in the answers. The time of expiration is set
- in the SOA record and is relative to the last successful
- refresh between the master and the slave servers. There exists
- no coupling between the signature expiration of RRSIGs in the
- zone and the expire parameter in the SOA.
-
- If the server serves a DNSSEC zone, then it may well happen
- that the signatures expire well before the SOA expiration timer
- counts down to zero. It is not possible to completely prevent
- this from happening by tweaking the SOA parameters. However,
- the effects can be minimized where the SOA expiration time is
- equal to or shorter than the signature validity period. The
- consequence of an authoritative server not being able to update
-
-
-
-Kolkman & Gieben Informational [Page 13]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
- a zone, whilst that zone includes expired signatures, is that
- non-secure resolvers will continue to be able to resolve data
- served by the particular slave servers while security-aware
- resolvers will experience problems because of answers being
- marked as Bogus.
-
- We suggest the SOA expiration timer being approximately one
- third or one fourth of the signature validity period. It will
- allow problems with transfers from the master server to be
- noticed before the actual signature times out. We also suggest
- that operators of nameservers that supply secondary services
- develop 'watch dogs' to spot upcoming signature expirations in
- zones they slave, and take appropriate action.
-
- When determining the value for the expiration parameter one has
- to take the following into account: What are the chances that
- all my secondaries expire the zone? How quickly can I reach an
- administrator of secondary servers to load a valid zone? These
- questions are not DNSSEC specific but may influence the choice
- of your signature validity intervals.
-
-4.2. Key Rollovers
-
- A DNSSEC key cannot be used forever (see Section 3.3). So key
- rollovers -- or supercessions, as they are sometimes called -- are a
- fact of life when using DNSSEC. Zone administrators who are in the
- process of rolling their keys have to take into account that data
- published in previous versions of their zone still lives in caches.
- When deploying DNSSEC, this becomes an important consideration;
- ignoring data that may be in caches may lead to loss of service for
- clients.
-
- The most pressing example of this occurs when zone material signed
- with an old key is being validated by a resolver that does not have
- the old zone key cached. If the old key is no longer present in the
- current zone, this validation fails, marking the data "Bogus".
- Alternatively, an attempt could be made to validate data that is
- signed with a new key against an old key that lives in a local cache,
- also resulting in data being marked "Bogus".
-
-4.2.1. Zone Signing Key Rollovers
-
- For "Zone Signing Key rollovers", there are two ways to make sure
- that during the rollover data still cached can be verified with the
- new key sets or newly generated signatures can be verified with the
- keys still in caches. One schema, described in Section 4.2.1.2, uses
-
-
-
-
-
-Kolkman & Gieben Informational [Page 14]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
- double signatures; the other uses key pre-publication (Section
- 4.2.1.1). The pros, cons, and recommendations are described in
- Section 4.2.1.3.
-
-4.2.1.1. Pre-Publish Key Rollover
-
- This section shows how to perform a ZSK rollover without the need to
- sign all the data in a zone twice -- the "pre-publish key rollover".
- This method has advantages in the case of a key compromise. If the
- old key is compromised, the new key has already been distributed in
- the DNS. The zone administrator is then able to quickly switch to
- the new key and remove the compromised key from the zone. Another
- major advantage is that the zone size does not double, as is the case
- with the double signature ZSK rollover. A small "how-to" for this
- kind of rollover can be found in Appendix B.
-
- Pre-publish key rollover involves four stages as follows:
-
- ----------------------------------------------------------------
- initial new DNSKEY new RRSIGs DNSKEY removal
- ----------------------------------------------------------------
- SOA0 SOA1 SOA2 SOA3
- RRSIG10(SOA0) RRSIG10(SOA1) RRSIG11(SOA2) RRSIG11(SOA3)
-
- DNSKEY1 DNSKEY1 DNSKEY1 DNSKEY1
- DNSKEY10 DNSKEY10 DNSKEY10 DNSKEY11
- DNSKEY11 DNSKEY11
- RRSIG1 (DNSKEY) RRSIG1 (DNSKEY) RRSIG1(DNSKEY) RRSIG1 (DNSKEY)
- RRSIG10(DNSKEY) RRSIG10(DNSKEY) RRSIG11(DNSKEY) RRSIG11(DNSKEY)
- ----------------------------------------------------------------
-
- Pre-Publish Key Rollover
-
- initial: Initial version of the zone: DNSKEY 1 is the Key Signing
- Key. DNSKEY 10 is used to sign all the data of the zone, the Zone
- Signing Key.
-
- new DNSKEY: DNSKEY 11 is introduced into the key set. Note that no
- signatures are generated with this key yet, but this does not
- secure against brute force attacks on the public key. The minimum
- duration of this pre-roll phase is the time it takes for the data
- to propagate to the authoritative servers plus TTL value of the
- key set.
-
- new RRSIGs: At the "new RRSIGs" stage (SOA serial 2), DNSKEY 11 is
- used to sign the data in the zone exclusively (i.e., all the
- signatures from DNSKEY 10 are removed from the zone). DNSKEY 10
- remains published in the key set. This way data that was loaded
-
-
-
-Kolkman & Gieben Informational [Page 15]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
- into caches from version 1 of the zone can still be verified with
- key sets fetched from version 2 of the zone. The minimum time
- that the key set including DNSKEY 10 is to be published is the
- time that it takes for zone data from the previous version of the
- zone to expire from old caches, i.e., the time it takes for this
- zone to propagate to all authoritative servers plus the Maximum
- Zone TTL value of any of the data in the previous version of the
- zone.
-
- DNSKEY removal: DNSKEY 10 is removed from the zone. The key set, now
- only containing DNSKEY 1 and DNSKEY 11, is re-signed with the
- DNSKEY 1.
-
- The above scheme can be simplified by always publishing the "future"
- key immediately after the rollover. The scheme would look as follows
- (we show two rollovers); the future key is introduced in "new DNSKEY"
- as DNSKEY 12 and again a newer one, numbered 13, in "new DNSKEY
- (II)":
-
- ----------------------------------------------------------------
- initial new RRSIGs new DNSKEY
- ----------------------------------------------------------------
- SOA0 SOA1 SOA2
- RRSIG10(SOA0) RRSIG11(SOA1) RRSIG11(SOA2)
-
- DNSKEY1 DNSKEY1 DNSKEY1
- DNSKEY10 DNSKEY10 DNSKEY11
- DNSKEY11 DNSKEY11 DNSKEY12
- RRSIG1(DNSKEY) RRSIG1 (DNSKEY) RRSIG1(DNSKEY)
- RRSIG10(DNSKEY) RRSIG11(DNSKEY) RRSIG11(DNSKEY)
- ----------------------------------------------------------------
-
- ----------------------------------------------------------------
- new RRSIGs (II) new DNSKEY (II)
- ----------------------------------------------------------------
- SOA3 SOA4
- RRSIG12(SOA3) RRSIG12(SOA4)
-
- DNSKEY1 DNSKEY1
- DNSKEY11 DNSKEY12
- DNSKEY12 DNSKEY13
- RRSIG1(DNSKEY) RRSIG1(DNSKEY)
- RRSIG12(DNSKEY) RRSIG12(DNSKEY)
- ----------------------------------------------------------------
-
- Pre-Publish Key Rollover, Showing Two Rollovers
-
-
-
-
-
-Kolkman & Gieben Informational [Page 16]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
- Note that the key introduced in the "new DNSKEY" phase is not used
- for production yet; the private key can thus be stored in a
- physically secure manner and does not need to be 'fetched' every time
- a zone needs to be signed.
-
-4.2.1.2. Double Signature Zone Signing Key Rollover
-
- This section shows how to perform a ZSK key rollover using the double
- zone data signature scheme, aptly named "double signature rollover".
-
- During the "new DNSKEY" stage the new version of the zone file will
- need to propagate to all authoritative servers and the data that
- exists in (distant) caches will need to expire, requiring at least
- the Maximum Zone TTL.
-
- Double signature ZSK rollover involves three stages as follows:
-
- ----------------------------------------------------------------
- initial new DNSKEY DNSKEY removal
- ----------------------------------------------------------------
- SOA0 SOA1 SOA2
- RRSIG10(SOA0) RRSIG10(SOA1) RRSIG11(SOA2)
- RRSIG11(SOA1)
-
- DNSKEY1 DNSKEY1 DNSKEY1
- DNSKEY10 DNSKEY10 DNSKEY11
- DNSKEY11
- RRSIG1(DNSKEY) RRSIG1(DNSKEY) RRSIG1(DNSKEY)
- RRSIG10(DNSKEY) RRSIG10(DNSKEY) RRSIG11(DNSKEY)
- RRSIG11(DNSKEY)
- ----------------------------------------------------------------
-
- Double Signature Zone Signing Key Rollover
-
- initial: Initial Version of the zone: DNSKEY 1 is the Key Signing
- Key. DNSKEY 10 is used to sign all the data of the zone, the Zone
- Signing Key.
-
- new DNSKEY: At the "New DNSKEY" stage (SOA serial 1) DNSKEY 11 is
- introduced into the key set and all the data in the zone is signed
- with DNSKEY 10 and DNSKEY 11. The rollover period will need to
- continue until all data from version 0 of the zone has expired
- from remote caches. This will take at least the Maximum Zone TTL
- of version 0 of the zone.
-
- DNSKEY removal: DNSKEY 10 is removed from the zone. All the
- signatures from DNSKEY 10 are removed from the zone. The key set,
- now only containing DNSKEY 11, is re-signed with DNSKEY 1.
-
-
-
-Kolkman & Gieben Informational [Page 17]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
- At every instance, RRSIGs from the previous version of the zone can
- be verified with the DNSKEY RRSet from the current version and the
- other way around. The data from the current version can be verified
- with the data from the previous version of the zone. The duration of
- the "new DNSKEY" phase and the period between rollovers should be at
- least the Maximum Zone TTL.
-
- Making sure that the "new DNSKEY" phase lasts until the signature
- expiration time of the data in initial version of the zone is
- recommended. This way all caches are cleared of the old signatures.
- However, this duration could be considerably longer than the Maximum
- Zone TTL, making the rollover a lengthy procedure.
-
- Note that in this example we assumed that the zone was not modified
- during the rollover. New data can be introduced in the zone as long
- as it is signed with both keys.
-
-4.2.1.3. Pros and Cons of the Schemes
-
- Pre-publish key rollover: This rollover does not involve signing the
- zone data twice. Instead, before the actual rollover, the new key
- is published in the key set and thus is available for
- cryptanalysis attacks. A small disadvantage is that this process
- requires four steps. Also the pre-publish scheme involves more
- parental work when used for KSK rollovers as explained in Section
- 4.2.3.
-
- Double signature ZSK rollover: The drawback of this signing scheme is
- that during the rollover the number of signatures in your zone
- doubles; this may be prohibitive if you have very big zones. An
- advantage is that it only requires three steps.
-
-4.2.2. Key Signing Key Rollovers
-
- For the rollover of a Key Signing Key, the same considerations as for
- the rollover of a Zone Signing Key apply. However, we can use a
- double signature scheme to guarantee that old data (only the apex key
- set) in caches can be verified with a new key set and vice versa.
- Since only the key set is signed with a KSK, zone size considerations
- do not apply.
-
-
-
-
-
-
-
-
-
-
-
-Kolkman & Gieben Informational [Page 18]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
- --------------------------------------------------------------------
- initial new DNSKEY DS change DNSKEY removal
- --------------------------------------------------------------------
- Parent:
- SOA0 --------> SOA1 -------->
- RRSIGpar(SOA0) --------> RRSIGpar(SOA1) -------->
- DS1 --------> DS2 -------->
- RRSIGpar(DS) --------> RRSIGpar(DS) -------->
-
-
- Child:
- SOA0 SOA1 --------> SOA2
- RRSIG10(SOA0) RRSIG10(SOA1) --------> RRSIG10(SOA2)
- -------->
- DNSKEY1 DNSKEY1 --------> DNSKEY2
- DNSKEY2 -------->
- DNSKEY10 DNSKEY10 --------> DNSKEY10
- RRSIG1 (DNSKEY) RRSIG1 (DNSKEY) --------> RRSIG2 (DNSKEY)
- RRSIG2 (DNSKEY) -------->
- RRSIG10(DNSKEY) RRSIG10(DNSKEY) --------> RRSIG10(DNSKEY)
- --------------------------------------------------------------------
-
- Stages of Deployment for a Double Signature Key Signing Key Rollover
-
- initial: Initial version of the zone. The parental DS points to
- DNSKEY1. Before the rollover starts, the child will have to
- verify what the TTL is of the DS RR that points to DNSKEY1 -- it
- is needed during the rollover and we refer to the value as TTL_DS.
-
- new DNSKEY: During the "new DNSKEY" phase, the zone administrator
- generates a second KSK, DNSKEY2. The key is provided to the
- parent, and the child will have to wait until a new DS RR has been
- generated that points to DNSKEY2. After that DS RR has been
- published on all servers authoritative for the parent's zone, the
- zone administrator has to wait at least TTL_DS to make sure that
- the old DS RR has expired from caches.
-
- DS change: The parent replaces DS1 with DS2.
-
- DNSKEY removal: DNSKEY1 has been removed.
-
- The scenario above puts the responsibility for maintaining a valid
- chain of trust with the child. It also is based on the premise that
- the parent only has one DS RR (per algorithm) per zone. An
- alternative mechanism has been considered. Using an established
- trust relation, the interaction can be performed in-band, and the
- removal of the keys by the child can possibly be signaled by the
- parent. In this mechanism, there are periods where there are two DS
-
-
-
-Kolkman & Gieben Informational [Page 19]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
- RRs at the parent. Since at the moment of writing the protocol for
- this interaction has not been developed, further discussion is out of
- scope for this document.
-
-4.2.3. Difference Between ZSK and KSK Rollovers
-
- Note that KSK rollovers and ZSK rollovers are different in the sense
- that a KSK rollover requires interaction with the parent (and
- possibly replacing of trust anchors) and the ensuing delay while
- waiting for it.
-
- A zone key rollover can be handled in two different ways: pre-publish
- (Section 4.2.1.1) and double signature (Section 4.2.1.2).
-
- As the KSK is used to validate the key set and because the KSK is not
- changed during a ZSK rollover, a cache is able to validate the new
- key set of the zone. The pre-publish method would also work for a
- KSK rollover. The records that are to be pre-published are the
- parental DS RRs. The pre-publish method has some drawbacks for KSKs.
- We first describe the rollover scheme and then indicate these
- drawbacks.
-
- --------------------------------------------------------------------
- initial new DS new DNSKEY DS/DNSKEY removal
- --------------------------------------------------------------------
- Parent:
- SOA0 SOA1 --------> SOA2
- RRSIGpar(SOA0) RRSIGpar(SOA1) --------> RRSIGpar(SOA2)
- DS1 DS1 --------> DS2
- DS2 -------->
- RRSIGpar(DS) RRSIGpar(DS) --------> RRSIGpar(DS)
-
-
- Child:
- SOA0 --------> SOA1 SOA1
- RRSIG10(SOA0) --------> RRSIG10(SOA1) RRSIG10(SOA1)
- -------->
- DNSKEY1 --------> DNSKEY2 DNSKEY2
- -------->
- DNSKEY10 --------> DNSKEY10 DNSKEY10
- RRSIG1 (DNSKEY) --------> RRSIG2(DNSKEY) RRSIG2 (DNSKEY)
- RRSIG10(DNSKEY) --------> RRSIG10(DNSKEY) RRSIG10(DNSKEY)
- --------------------------------------------------------------------
-
- Stages of Deployment for a Pre-Publish Key Signing Key Rollover
-
-
-
-
-
-
-Kolkman & Gieben Informational [Page 20]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
- When the child zone wants to roll, it notifies the parent during the
- "new DS" phase and submits the new key (or the corresponding DS) to
- the parent. The parent publishes DS1 and DS2, pointing to DNSKEY1
- and DNSKEY2, respectively. During the rollover ("new DNSKEY" phase),
- which can take place as soon as the new DS set propagated through the
- DNS, the child replaces DNSKEY1 with DNSKEY2. Immediately after that
- ("DS/DNSKEY removal" phase), it can notify the parent that the old DS
- record can be deleted.
-
- The drawbacks of this scheme are that during the "new DS" phase the
- parent cannot verify the match between the DS2 RR and DNSKEY2 using
- the DNS -- as DNSKEY2 is not yet published. Besides, we introduce a
- "security lame" key (see Section 4.4.3). Finally, the child-parent
- interaction consists of two steps. The "double signature" method
- only needs one interaction.
-
-4.2.4. Automated Key Rollovers
-
- As keys must be renewed periodically, there is some motivation to
- automate the rollover process. Consider the following:
-
- o ZSK rollovers are easy to automate as only the child zone is
- involved.
-
- o A KSK rollover needs interaction between parent and child. Data
- exchange is needed to provide the new keys to the parent;
- consequently, this data must be authenticated and integrity must
- be guaranteed in order to avoid attacks on the rollover.
-
-4.3. Planning for Emergency Key Rollover
-
- This section deals with preparation for a possible key compromise.
- Our advice is to have a documented procedure ready for when a key
- compromise is suspected or confirmed.
-
- When the private material of one of your keys is compromised it can
- be used for as long as a valid trust chain exists. A trust chain
- remains intact for
-
- o as long as a signature over the compromised key in the trust chain
- is valid,
-
- o as long as a parental DS RR (and signature) points to the
- compromised key,
-
- o as long as the key is anchored in a resolver and is used as a
- starting point for validation (this is generally the hardest to
- update).
-
-
-
-Kolkman & Gieben Informational [Page 21]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
- While a trust chain to your compromised key exists, your namespace is
- vulnerable to abuse by anyone who has obtained illegitimate
- possession of the key. Zone operators have to make a trade-off if
- the abuse of the compromised key is worse than having data in caches
- that cannot be validated. If the zone operator chooses to break the
- trust chain to the compromised key, data in caches signed with this
- key cannot be validated. However, if the zone administrator chooses
- to take the path of a regular rollover, the malicious key holder can
- spoof data so that it appears to be valid.
-
-4.3.1. KSK Compromise
-
- A zone containing a DNSKEY RRSet with a compromised KSK is vulnerable
- as long as the compromised KSK is configured as trust anchor or a
- parental DS points to it.
-
- A compromised KSK can be used to sign the key set of an attacker's
- zone. That zone could be used to poison the DNS.
-
- Therefore, when the KSK has been compromised, the trust anchor or the
- parental DS should be replaced as soon as possible. It is local
- policy whether to break the trust chain during the emergency
- rollover. The trust chain would be broken when the compromised KSK
- is removed from the child's zone while the parent still has a DS
- pointing to the compromised KSK (the assumption is that there is only
- one DS at the parent. If there are multiple DSes this does not apply
- -- however the chain of trust of this particular key is broken).
-
- Note that an attacker's zone still uses the compromised KSK and the
- presence of a parental DS would cause the data in this zone to appear
- as valid. Removing the compromised key would cause the attacker's
- zone to appear as valid and the child's zone as Bogus. Therefore, we
- advise not to remove the KSK before the parent has a DS to a new KSK
- in place.
-
-4.3.1.1. Keeping the Chain of Trust Intact
-
- If we follow this advice, the timing of the replacement of the KSK is
- somewhat critical. The goal is to remove the compromised KSK as soon
- as the new DS RR is available at the parent. And also make sure that
- the signature made with a new KSK over the key set with the
- compromised KSK in it expires just after the new DS appears at the
- parent, thus removing the old cruft in one swoop.
-
- The procedure is as follows:
-
- 1. Introduce a new KSK into the key set, keep the compromised KSK in
- the key set.
-
-
-
-Kolkman & Gieben Informational [Page 22]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
- 2. Sign the key set, with a short validity period. The validity
- period should expire shortly after the DS is expected to appear
- in the parent and the old DSes have expired from caches.
-
- 3. Upload the DS for this new key to the parent.
-
- 4. Follow the procedure of the regular KSK rollover: Wait for the DS
- to appear in the authoritative servers and then wait as long as
- the TTL of the old DS RRs. If necessary re-sign the DNSKEY RRSet
- and modify/extend the expiration time.
-
- 5. Remove the compromised DNSKEY RR from the zone and re-sign the
- key set using your "normal" validity interval.
-
- An additional danger of a key compromise is that the compromised key
- could be used to facilitate a legitimate DNSKEY/DS rollover and/or
- nameserver changes at the parent. When that happens, the domain may
- be in dispute. An authenticated out-of-band and secure notify
- mechanism to contact a parent is needed in this case.
-
- Note that this is only a problem when the DNSKEY and or DS records
- are used for authentication at the parent.
-
-4.3.1.2. Breaking the Chain of Trust
-
- There are two methods to break the chain of trust. The first method
- causes the child zone to appear 'Bogus' to validating resolvers. The
- other causes the child zone to appear 'insecure'. These are
- described below.
-
- In the method that causes the child zone to appear 'Bogus' to
- validating resolvers, the child zone replaces the current KSK with a
- new one and re-signs the key set. Next it sends the DS of the new
- key to the parent. Only after the parent has placed the new DS in
- the zone is the child's chain of trust repaired.
-
- An alternative method of breaking the chain of trust is by removing
- the DS RRs from the parent zone altogether. As a result, the child
- zone would become insecure.
-
-4.3.2. ZSK Compromise
-
- Primarily because there is no parental interaction required when a
- ZSK is compromised, the situation is less severe than with a KSK
- compromise. The zone must still be re-signed with a new ZSK as soon
- as possible. As this is a local operation and requires no
- communication between the parent and child, this can be achieved
- fairly quickly. However, one has to take into account that just as
-
-
-
-Kolkman & Gieben Informational [Page 23]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
- with a normal rollover the immediate disappearance of the old
- compromised key may lead to verification problems. Also note that as
- long as the RRSIG over the compromised ZSK is not expired the zone
- may be still at risk.
-
-4.3.3. Compromises of Keys Anchored in Resolvers
-
- A key can also be pre-configured in resolvers. For instance, if
- DNSSEC is successfully deployed the root key may be pre-configured in
- most security aware resolvers.
-
- If trust-anchor keys are compromised, the resolvers using these keys
- should be notified of this fact. Zone administrators may consider
- setting up a mailing list to communicate the fact that a SEP key is
- about to be rolled over. This communication will of course need to
- be authenticated, e.g., by using digital signatures.
-
- End-users faced with the task of updating an anchored key should
- always validate the new key. New keys should be authenticated out-
- of-band, for example, through the use of an announcement website that
- is secured using secure sockets (TLS) [21].
-
-4.4. Parental Policies
-
-4.4.1. Initial Key Exchanges and Parental Policies Considerations
-
- The initial key exchange is always subject to the policies set by the
- parent. When designing a key exchange policy one should take into
- account that the authentication and authorization mechanisms used
- during a key exchange should be as strong as the authentication and
- authorization mechanisms used for the exchange of delegation
- information between parent and child. That is, there is no implicit
- need in DNSSEC to make the authentication process stronger than it
- was in DNS.
-
- Using the DNS itself as the source for the actual DNSKEY material,
- with an out-of-band check on the validity of the DNSKEY, has the
- benefit that it reduces the chances of user error. A DNSKEY query
- tool can make use of the SEP bit [3] to select the proper key from a
- DNSSEC key set, thereby reducing the chance that the wrong DNSKEY is
- sent. It can validate the self-signature over a key; thereby
- verifying the ownership of the private key material. Fetching the
- DNSKEY from the DNS ensures that the chain of trust remains intact
- once the parent publishes the DS RR indicating the child is secure.
-
- Note: the out-of-band verification is still needed when the key
- material is fetched via the DNS. The parent can never be sure
- whether or not the DNSKEY RRs have been spoofed.
-
-
-
-Kolkman & Gieben Informational [Page 24]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
-4.4.2. Storing Keys or Hashes?
-
- When designing a registry system one should consider which of the
- DNSKEYs and/or the corresponding DSes to store. Since a child zone
- might wish to have a DS published using a message digest algorithm
- not yet understood by the registry, the registry can't count on being
- able to generate the DS record from a raw DNSKEY. Thus, we recommend
- that registry systems at least support storing DS records.
-
- It may also be useful to store DNSKEYs, since having them may help
- during troubleshooting and, as long as the child's chosen message
- digest is supported, the overhead of generating DS records from them
- is minimal. Having an out-of-band mechanism, such as a registry
- directory (e.g., Whois), to find out which keys are used to generate
- DS Resource Records for specific owners and/or zones may also help
- with troubleshooting.
-
- The storage considerations also relate to the design of the customer
- interface and the method by which data is transferred between
- registrant and registry; Will the child zone administrator be able to
- upload DS RRs with unknown hash algorithms or does the interface only
- allow DNSKEYs? In the registry-registrar model, one can use the
- DNSSEC extensions to the Extensible Provisioning Protocol (EPP) [15],
- which allows transfer of DS RRs and optionally DNSKEY RRs.
-
-4.4.3. Security Lameness
-
- Security lameness is defined as what happens when a parent has a DS
- RR pointing to a non-existing DNSKEY RR. When this happens, the
- child's zone may be marked "Bogus" by verifying DNS clients.
-
- As part of a comprehensive delegation check, the parent could, at key
- exchange time, verify that the child's key is actually configured in
- the DNS. However, if a parent does not understand the hashing
- algorithm used by child, the parental checks are limited to only
- comparing the key id.
-
- Child zones should be very careful in removing DNSKEY material,
- specifically SEP keys, for which a DS RR exists.
-
- Once a zone is "security lame", a fix (e.g., removing a DS RR) will
- take time to propagate through the DNS.
-
-
-
-
-
-
-
-
-
-Kolkman & Gieben Informational [Page 25]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
-4.4.4. DS Signature Validity Period
-
- Since the DS can be replayed as long as it has a valid signature, a
- short signature validity period over the DS minimizes the time a
- child is vulnerable in the case of a compromise of the child's
- KSK(s). A signature validity period that is too short introduces the
- possibility that a zone is marked "Bogus" in case of a configuration
- error in the signer. There may not be enough time to fix the
- problems before signatures expire. Something as mundane as operator
- unavailability during weekends shows the need for DS signature
- validity periods longer than 2 days. We recommend an absolute
- minimum for a DS signature validity period of a few days.
-
- The maximum signature validity period of the DS record depends on how
- long child zones are willing to be vulnerable after a key compromise.
- On the other hand, shortening the DS signature validity interval
- increases the operational risk for the parent. Therefore, the parent
- may have policy to use a signature validity interval that is
- considerably longer than the child would hope for.
-
- A compromise between the operational constraints of the parent and
- minimizing damage for the child may result in a DS signature validity
- period somewhere between a week and months.
-
- In addition to the signature validity period, which sets a lower
- bound on the number of times the zone owner will need to sign the
- zone data and which sets an upper bound to the time a child is
- vulnerable after key compromise, there is the TTL value on the DS
- RRs. Shortening the TTL means that the authoritative servers will
- see more queries. But on the other hand, a short TTL lowers the
- persistence of DS RRSets in caches thereby increasing the speed with
- which updated DS RRSets propagate through the DNS.
-
-5. Security Considerations
-
- DNSSEC adds data integrity to the DNS. This document tries to assess
- the operational considerations to maintain a stable and secure DNSSEC
- service. Not taking into account the 'data propagation' properties
- in the DNS will cause validation failures and may make secured zones
- unavailable to security-aware resolvers.
-
-6. Acknowledgments
-
- Most of the ideas in this document were the result of collective
- efforts during workshops, discussions, and tryouts.
-
- At the risk of forgetting individuals who were the original
- contributors of the ideas, we would like to acknowledge people who
-
-
-
-Kolkman & Gieben Informational [Page 26]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
- were actively involved in the compilation of this document. In
- random order: Rip Loomis, Olafur Gudmundsson, Wesley Griffin, Michael
- Richardson, Scott Rose, Rick van Rein, Tim McGinnis, Gilles Guette
- Olivier Courtay, Sam Weiler, Jelte Jansen, Niall O'Reilly, Holger
- Zuleger, Ed Lewis, Hilarie Orman, Marcos Sanz, and Peter Koch.
-
- Some material in this document has been copied from RFC 2541 [12].
-
- Mike StJohns designed the key exchange between parent and child
- mentioned in the last paragraph of Section 4.2.2
-
- Section 4.2.4 was supplied by G. Guette and O. Courtay.
-
- Emma Bretherick, Adrian Bedford, and Lindy Foster corrected many of
- the spelling and style issues.
-
- Kolkman and Gieben take the blame for introducing all miscakes (sic).
-
- While working on this document, Kolkman was employed by the RIPE NCC
- and Gieben was employed by NLnet Labs.
-
-7. References
-
-7.1. Normative References
-
- [1] Mockapetris, P., "Domain names - concepts and facilities", STD
- 13, RFC 1034, November 1987.
-
- [2] Mockapetris, P., "Domain names - implementation and
- specification", STD 13, RFC 1035, November 1987.
-
- [3] Kolkman, O., Schlyter, J., and E. Lewis, "Domain Name System
- KEY (DNSKEY) Resource Record (RR) Secure Entry Point (SEP)
- Flag", RFC 3757, May 2004.
-
- [4] Arends, R., Austein, R., Larson, M., Massey, D., and S. Rose,
- "DNS Security Introduction and Requirements", RFC 4033, March
- 2005.
-
- [5] Arends, R., Austein, R., Larson, M., Massey, D., and S. Rose,
- "Resource Records for the DNS Security Extensions", RFC 4034,
- March 2005.
-
- [6] Arends, R., Austein, R., Larson, M., Massey, D., and S. Rose,
- "Protocol Modifications for the DNS Security Extensions", RFC
- 4035, March 2005.
-
-
-
-
-
-Kolkman & Gieben Informational [Page 27]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
-7.2. Informative References
-
- [7] Bradner, S., "Key words for use in RFCs to Indicate Requirement
- Levels", BCP 14, RFC 2119, March 1997.
-
- [8] Ohta, M., "Incremental Zone Transfer in DNS", RFC 1995, August
- 1996.
-
- [9] Vixie, P., "A Mechanism for Prompt Notification of Zone Changes
- (DNS NOTIFY)", RFC 1996, August 1996.
-
- [10] Wellington, B., "Secure Domain Name System (DNS) Dynamic
- Update", RFC 3007, November 2000.
-
- [11] Andrews, M., "Negative Caching of DNS Queries (DNS NCACHE)",
- RFC 2308, March 1998.
-
- [12] Eastlake, D., "DNS Security Operational Considerations", RFC
- 2541, March 1999.
-
- [13] Orman, H. and P. Hoffman, "Determining Strengths For Public
- Keys Used For Exchanging Symmetric Keys", BCP 86, RFC 3766,
- April 2004.
-
- [14] Eastlake, D., Schiller, J., and S. Crocker, "Randomness
- Requirements for Security", BCP 106, RFC 4086, June 2005.
-
- [15] Hollenbeck, S., "Domain Name System (DNS) Security Extensions
- Mapping for the Extensible Provisioning Protocol (EPP)", RFC
- 4310, December 2005.
-
- [16] Lenstra, A. and E. Verheul, "Selecting Cryptographic Key
- Sizes", The Journal of Cryptology 14 (255-293), 2001.
-
- [17] Schneier, B., "Applied Cryptography: Protocols, Algorithms, and
- Source Code in C", ISBN (hardcover) 0-471-12845-7, ISBN
- (paperback) 0-471-59756-2, Published by John Wiley & Sons Inc.,
- 1996.
-
- [18] Rose, S., "NIST DNSSEC workshop notes", June 2001.
-
- [19] Jansen, J., "Use of RSA/SHA-256 DNSKEY and RRSIG Resource
- Records in DNSSEC", Work in Progress, January 2006.
-
- [20] Hardaker, W., "Use of SHA-256 in DNSSEC Delegation Signer (DS)
- Resource Records (RRs)", RFC 4509, May 2006.
-
-
-
-
-
-Kolkman & Gieben Informational [Page 28]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
- [21] Blake-Wilson, S., Nystrom, M., Hopwood, D., Mikkelsen, J., and
- T. Wright, "Transport Layer Security (TLS) Extensions", RFC
- 4366, April 2006.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Kolkman & Gieben Informational [Page 29]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
-Appendix A. Terminology
-
- In this document, there is some jargon used that is defined in other
- documents. In most cases, we have not copied the text from the
- documents defining the terms but have given a more elaborate
- explanation of the meaning. Note that these explanations should not
- be seen as authoritative.
-
- Anchored key: A DNSKEY configured in resolvers around the globe.
- This key is hard to update, hence the term anchored.
-
- Bogus: Also see Section 5 of [4]. An RRSet in DNSSEC is marked
- "Bogus" when a signature of an RRSet does not validate against a
- DNSKEY.
-
- Key Signing Key or KSK: A Key Signing Key (KSK) is a key that is used
- exclusively for signing the apex key set. The fact that a key is
- a KSK is only relevant to the signing tool.
-
- Key size: The term 'key size' can be substituted by 'modulus size'
- throughout the document. It is mathematically more correct to use
- modulus size, but as this is a document directed at operators we
- feel more at ease with the term key size.
-
- Private and public keys: DNSSEC secures the DNS through the use of
- public key cryptography. Public key cryptography is based on the
- existence of two (mathematically related) keys, a public key and a
- private key. The public keys are published in the DNS by use of
- the DNSKEY Resource Record (DNSKEY RR). Private keys should
- remain private.
-
- Key rollover: A key rollover (also called key supercession in some
- environments) is the act of replacing one key pair with another at
- the end of a key effectivity period.
-
- Secure Entry Point (SEP) key: A KSK that has a parental DS record
- pointing to it or is configured as a trust anchor. Although not
- required by the protocol, we recommend that the SEP flag [3] is
- set on these keys.
-
- Self-signature: This only applies to signatures over DNSKEYs; a
- signature made with DNSKEY x, over DNSKEY x is called a self-
- signature. Note: without further information, self-signatures
- convey no trust. They are useful to check the authenticity of the
- DNSKEY, i.e., they can be used as a hash.
-
-
-
-
-
-
-Kolkman & Gieben Informational [Page 30]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
- Singing the zone file: The term used for the event where an
- administrator joyfully signs its zone file while producing melodic
- sound patterns.
-
- Signer: The system that has access to the private key material and
- signs the Resource Record sets in a zone. A signer may be
- configured to sign only parts of the zone, e.g., only those RRSets
- for which existing signatures are about to expire.
-
- Zone Signing Key (ZSK): A key that is used for signing all data in a
- zone. The fact that a key is a ZSK is only relevant to the
- signing tool.
-
- Zone administrator: The 'role' that is responsible for signing a zone
- and publishing it on the primary authoritative server.
-
-Appendix B. Zone Signing Key Rollover How-To
-
- Using the pre-published signature scheme and the most conservative
- method to assure oneself that data does not live in caches, here
- follows the "how-to".
-
- Step 0: The preparation: Create two keys and publish both in your key
- set. Mark one of the keys "active" and the other "published".
- Use the "active" key for signing your zone data. Store the
- private part of the "published" key, preferably off-line. The
- protocol does not provide for attributes to mark a key as active
- or published. This is something you have to do on your own,
- through the use of a notebook or key management tool.
-
- Step 1: Determine expiration: At the beginning of the rollover make a
- note of the highest expiration time of signatures in your zone
- file created with the current key marked as active. Wait until
- the expiration time marked in Step 1 has passed.
-
- Step 2: Then start using the key that was marked "published" to sign
- your data (i.e., mark it "active"). Stop using the key that was
- marked "active"; mark it "rolled".
-
- Step 3: It is safe to engage in a new rollover (Step 1) after at
- least one signature validity period.
-
-
-
-
-
-
-
-
-
-
-Kolkman & Gieben Informational [Page 31]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
-Appendix C. Typographic Conventions
-
- The following typographic conventions are used in this document:
-
- Key notation: A key is denoted by DNSKEYx, where x is a number or an
- identifier, x could be thought of as the key id.
-
- RRSet notations: RRs are only denoted by the type. All other
- information -- owner, class, rdata, and TTL--is left out. Thus:
- "example.com 3600 IN A 192.0.2.1" is reduced to "A". RRSets are a
- list of RRs. A example of this would be "A1, A2", specifying the
- RRSet containing two "A" records. This could again be abbreviated to
- just "A".
-
- Signature notation: Signatures are denoted as RRSIGx(RRSet), which
- means that RRSet is signed with DNSKEYx.
-
- Zone representation: Using the above notation we have simplified the
- representation of a signed zone by leaving out all unnecessary
- details such as the names and by representing all data by "SOAx"
-
- SOA representation: SOAs are represented as SOAx, where x is the
- serial number.
-
- Using this notation the following signed zone:
-
- example.net. 86400 IN SOA ns.example.net. bert.example.net. (
- 2006022100 ; serial
- 86400 ; refresh ( 24 hours)
- 7200 ; retry ( 2 hours)
- 3600000 ; expire (1000 hours)
- 28800 ) ; minimum ( 8 hours)
- 86400 RRSIG SOA 5 2 86400 20130522213204 (
- 20130422213204 14 example.net.
- cmL62SI6iAX46xGNQAdQ... )
- 86400 NS a.iana-servers.net.
- 86400 NS b.iana-servers.net.
- 86400 RRSIG NS 5 2 86400 20130507213204 (
- 20130407213204 14 example.net.
- SO5epiJei19AjXoUpFnQ ... )
- 86400 DNSKEY 256 3 5 (
- EtRB9MP5/AvOuVO0I8XDxy0... ) ; id = 14
- 86400 DNSKEY 257 3 5 (
- gsPW/Yy19GzYIY+Gnr8HABU... ) ; id = 15
- 86400 RRSIG DNSKEY 5 2 86400 20130522213204 (
- 20130422213204 14 example.net.
- J4zCe8QX4tXVGjV4e1r9... )
-
-
-
-
-Kolkman & Gieben Informational [Page 32]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
- 86400 RRSIG DNSKEY 5 2 86400 20130522213204 (
- 20130422213204 15 example.net.
- keVDCOpsSeDReyV6O... )
- 86400 RRSIG NSEC 5 2 86400 20130507213204 (
- 20130407213204 14 example.net.
- obj3HEp1GjnmhRjX... )
- a.example.net. 86400 IN TXT "A label"
- 86400 RRSIG TXT 5 3 86400 20130507213204 (
- 20130407213204 14 example.net.
- IkDMlRdYLmXH7QJnuF3v... )
- 86400 NSEC b.example.com. TXT RRSIG NSEC
- 86400 RRSIG NSEC 5 3 86400 20130507213204 (
- 20130407213204 14 example.net.
- bZMjoZ3bHjnEz0nIsPMM... )
- ...
-
- is reduced to the following representation:
-
- SOA2006022100
- RRSIG14(SOA2006022100)
- DNSKEY14
- DNSKEY15
-
- RRSIG14(KEY)
- RRSIG15(KEY)
-
- The rest of the zone data has the same signature as the SOA record,
- i.e., an RRSIG created with DNSKEY 14.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Kolkman & Gieben Informational [Page 33]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
-Authors' Addresses
-
- Olaf M. Kolkman
- NLnet Labs
- Kruislaan 419
- Amsterdam 1098 VA
- The Netherlands
-
- EMail: olaf@nlnetlabs.nl
- URI: http://www.nlnetlabs.nl
-
-
- R. (Miek) Gieben
-
- EMail: miek@miek.nl
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Kolkman & Gieben Informational [Page 34]
-
-RFC 4641 DNSSEC Operational Practices September 2006
-
-
-Full Copyright Statement
-
- Copyright (C) The Internet Society (2006).
-
- This document is subject to the rights, licenses and restrictions
- contained in BCP 78, and except as set forth therein, the authors
- retain all their rights.
-
- This document and the information contained herein are provided on an
- "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
- OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
- ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
- INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
- INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
- WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-
-Intellectual Property
-
- The IETF takes no position regarding the validity or scope of any
- Intellectual Property Rights or other rights that might be claimed to
- pertain to the implementation or use of the technology described in
- this document or the extent to which any license under such rights
- might or might not be available; nor does it represent that it has
- made any independent effort to identify any such rights. Information
- on the procedures with respect to rights in RFC documents can be
- found in BCP 78 and BCP 79.
-
- Copies of IPR disclosures made to the IETF Secretariat and any
- assurances of licenses to be made available, or the result of an
- attempt made to obtain a general license or permission for the use of
- such proprietary rights by implementers or users of this
- specification can be obtained from the IETF on-line IPR repository at
- http://www.ietf.org/ipr.
-
- The IETF invites any interested party to bring to its attention any
- copyrights, patents or patent applications, or other proprietary
- rights that may cover technology that may be required to implement
- this standard. Please address the information to the IETF at
- ietf-ipr@ietf.org.
-
-Acknowledgement
-
- Funding for the RFC Editor function is provided by the IETF
- Administrative Support Activity (IASA).
-
-
-
-
-
-
-
-Kolkman & Gieben Informational [Page 35]
-
diff --git a/contrib/zkt-1.1.3/doc/rfc5011.txt b/contrib/zkt-1.1.3/doc/rfc5011.txt
deleted file mode 100644
index 42235e97..00000000
--- a/contrib/zkt-1.1.3/doc/rfc5011.txt
+++ /dev/null
@@ -1,787 +0,0 @@
-
-
-
-
-
-
-Network Working Group M. StJohns
-Request for Comments: 5011 Independent
-Category: Standards Track September 2007
-
-
- Automated Updates of DNS Security (DNSSEC) Trust Anchors
-
-Status of This Memo
-
- This document specifies an Internet standards track protocol for the
- Internet community, and requests discussion and suggestions for
- improvements. Please refer to the current edition of the "Internet
- Official Protocol Standards" (STD 1) for the standardization state
- and status of this protocol. Distribution of this memo is unlimited.
-
-Abstract
-
- This document describes a means for automated, authenticated, and
- authorized updating of DNSSEC "trust anchors". The method provides
- protection against N-1 key compromises of N keys in the trust point
- key set. Based on the trust established by the presence of a current
- anchor, other anchors may be added at the same place in the
- hierarchy, and, ultimately, supplant the existing anchor(s).
-
- This mechanism will require changes to resolver management behavior
- (but not resolver resolution behavior), and the addition of a single
- flag bit to the DNSKEY record.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-StJohns Standards Track [Page 1]
-
-RFC 5011 Trust Anchor Update September 2007
-
-
-Table of Contents
-
- 1. Introduction ....................................................2
- 1.1. Compliance Nomenclature ....................................3
- 2. Theory of Operation .............................................3
- 2.1. Revocation .................................................4
- 2.2. Add Hold-Down ..............................................4
- 2.3. Active Refresh .............................................5
- 2.4. Resolver Parameters ........................................6
- 2.4.1. Add Hold-Down Time ..................................6
- 2.4.2. Remove Hold-Down Time ...............................6
- 2.4.3. Minimum Trust Anchors per Trust Point ...............6
- 3. Changes to DNSKEY RDATA Wire Format .............................6
- 4. State Table .....................................................6
- 4.1. Events .....................................................7
- 4.2. States .....................................................7
- 5. Trust Point Deletion ............................................8
- 6. Scenarios - Informative .........................................9
- 6.1. Adding a Trust Anchor ......................................9
- 6.2. Deleting a Trust Anchor ....................................9
- 6.3. Key Roll-Over .............................................10
- 6.4. Active Key Compromised ....................................10
- 6.5. Stand-by Key Compromised ..................................10
- 6.6. Trust Point Deletion ......................................10
- 7. IANA Considerations ............................................11
- 8. Security Considerations ........................................11
- 8.1. Key Ownership vs. Acceptance Policy .......................11
- 8.2. Multiple Key Compromise ...................................12
- 8.3. Dynamic Updates ...........................................12
- 9. Normative References ...........................................12
- 10. Informative References ........................................12
-
-1. Introduction
-
- As part of the reality of fielding DNSSEC (Domain Name System
- Security Extensions) [RFC4033] [RFC4034] [RFC4035], the community has
- come to the realization that there will not be one signed name space,
- but rather islands of signed name spaces each originating from
- specific points (i.e., 'trust points') in the DNS tree. Each of
- those islands will be identified by the trust point name, and
- validated by at least one associated public key. For the purpose of
- this document, we'll call the association of that name and a
- particular key a 'trust anchor'. A particular trust point can have
- more than one key designated as a trust anchor.
-
- For a DNSSEC-aware resolver to validate information in a DNSSEC
- protected branch of the hierarchy, it must have knowledge of a trust
- anchor applicable to that branch. It may also have more than one
-
-
-
-StJohns Standards Track [Page 2]
-
-RFC 5011 Trust Anchor Update September 2007
-
-
- trust anchor for any given trust point. Under current rules, a chain
- of trust for DNSSEC-protected data that chains its way back to ANY
- known trust anchor is considered 'secure'.
-
- Because of the probable balkanization of the DNSSEC tree due to
- signing voids at key locations, a resolver may need to know literally
- thousands of trust anchors to perform its duties (e.g., consider an
- unsigned ".COM"). Requiring the owner of the resolver to manually
- manage these many relationships is problematic. It's even more
- problematic when considering the eventual requirement for key
- replacement/update for a given trust anchor. The mechanism described
- herein won't help with the initial configuration of the trust anchors
- in the resolvers, but should make trust point key
- replacement/rollover more viable.
-
- As mentioned above, this document describes a mechanism whereby a
- resolver can update the trust anchors for a given trust point, mainly
- without human intervention at the resolver. There are some corner
- cases discussed (e.g., multiple key compromise) that may require
- manual intervention, but they should be few and far between. This
- document DOES NOT discuss the general problem of the initial
- configuration of trust anchors for the resolver.
-
-1.1. Compliance Nomenclature
-
- The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
- "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
- document are to be interpreted as described in BCP 14, [RFC2119].
-
-2. Theory of Operation
-
- The general concept of this mechanism is that existing trust anchors
- can be used to authenticate new trust anchors at the same point in
- the DNS hierarchy. When a zone operator adds a new SEP key (i.e., a
- DNSKEY with the Secure Entry Point bit set) (see [RFC4034], Section
- 2.1.1) to a trust point DNSKEY RRSet, and when that RRSet is
- validated by an existing trust anchor, then the resolver can add the
- new key to its set of valid trust anchors for that trust point.
-
- There are some issues with this approach that need to be mitigated.
- For example, a compromise of one of the existing keys could allow an
- attacker to add their own 'valid' data. This implies a need for a
- method to revoke an existing key regardless of whether or not that
- key is compromised. As another example, assuming a single key
- compromise, we need to prevent an attacker from adding a new key and
- revoking all the other old keys.
-
-
-
-
-
-StJohns Standards Track [Page 3]
-
-RFC 5011 Trust Anchor Update September 2007
-
-
-2.1. Revocation
-
- Assume two trust anchor keys A and B. Assume that B has been
- compromised. Without a specific revocation bit, B could invalidate A
- simply by sending out a signed trust point key set that didn't
- contain A. To fix this, we add a mechanism that requires knowledge
- of the private key of a DNSKEY to revoke that DNSKEY.
-
- A key is considered revoked when the resolver sees the key in a
- self-signed RRSet and the key has the REVOKE bit (see Section 7
- below) set to '1'. Once the resolver sees the REVOKE bit, it MUST
- NOT use this key as a trust anchor or for any other purpose except to
- validate the RRSIG it signed over the DNSKEY RRSet specifically for
- the purpose of validating the revocation. Unlike the 'Add' operation
- below, revocation is immediate and permanent upon receipt of a valid
- revocation at the resolver.
-
- A self-signed RRSet is a DNSKEY RRSet that contains the specific
- DNSKEY and for which there is a corresponding validated RRSIG record.
- It's not a special DNSKEY RRSet, just a way of describing the
- validation requirements for that RRSet.
-
- N.B.: A DNSKEY with the REVOKE bit set has a different fingerprint
- than one without the bit set. This affects the matching of a DNSKEY
- to DS records in the parent [RFC3755], or the fingerprint stored at a
- resolver used to configure a trust point.
-
- In the given example, the attacker could revoke B because it has
- knowledge of B's private key, but could not revoke A.
-
-2.2. Add Hold-Down
-
- Assume two trust point keys A and B. Assume that B has been
- compromised. An attacker could generate and add a new trust anchor
- key C (by adding C to the DNSKEY RRSet and signing it with B), and
- then invalidate the compromised key. This would result in both the
- attacker and owner being able to sign data in the zone and have it
- accepted as valid by resolvers.
-
- To mitigate but not completely solve this problem, we add a hold-down
- time to the addition of the trust anchor. When the resolver sees a
- new SEP key in a validated trust point DNSKEY RRSet, the resolver
- starts an acceptance timer, and remembers all the keys that validated
- the RRSet. If the resolver ever sees the DNSKEY RRSet without the
- new key but validly signed, it stops the acceptance process for that
- key and resets the acceptance timer. If all of the keys that were
-
-
-
-
-
-StJohns Standards Track [Page 4]
-
-RFC 5011 Trust Anchor Update September 2007
-
-
- originally used to validate this key are revoked prior to the timer
- expiring, the resolver stops the acceptance process and resets the
- timer.
-
- Once the timer expires, the new key will be added as a trust anchor
- the next time the validated RRSet with the new key is seen at the
- resolver. The resolver MUST NOT treat the new key as a trust anchor
- until the hold-down time expires AND it has retrieved and validated a
- DNSKEY RRSet after the hold-down time that contains the new key.
-
- N.B.: Once the resolver has accepted a key as a trust anchor, the key
- MUST be considered a valid trust anchor by that resolver until
- explicitly revoked as described above.
-
- In the given example, the zone owner can recover from a compromise by
- revoking B and adding a new key D and signing the DNSKEY RRSet with
- both A and B.
-
- The reason this does not completely solve the problem has to do with
- the distributed nature of DNS. The resolver only knows what it sees.
- A determined attacker who holds one compromised key could keep a
- single resolver from realizing that the key had been compromised by
- intercepting 'real' data from the originating zone and substituting
- their own (e.g., using the example, signed only by B). This is no
- worse than the current situation assuming a compromised key.
-
-2.3. Active Refresh
-
- A resolver that has been configured for an automatic update of keys
- from a particular trust point MUST query that trust point (e.g., do a
- lookup for the DNSKEY RRSet and related RRSIG records) no less often
- than the lesser of 15 days, half the original TTL for the DNSKEY
- RRSet, or half the RRSIG expiration interval and no more often than
- once per hour. The expiration interval is the amount of time from
- when the RRSIG was last retrieved until the expiration time in the
- RRSIG. That is, queryInterval = MAX(1 hr, MIN (15 days, 1/2*OrigTTL,
- 1/2*RRSigExpirationInterval))
-
- If the query fails, the resolver MUST repeat the query until
- satisfied no more often than once an hour and no less often than the
- lesser of 1 day, 10% of the original TTL, or 10% of the original
- expiration interval. That is, retryTime = MAX (1 hour, MIN (1 day,
- .1 * origTTL, .1 * expireInterval)).
-
-
-
-
-
-
-
-
-StJohns Standards Track [Page 5]
-
-RFC 5011 Trust Anchor Update September 2007
-
-
-2.4. Resolver Parameters
-
-2.4.1. Add Hold-Down Time
-
- The add hold-down time is 30 days or the expiration time of the
- original TTL of the first trust point DNSKEY RRSet that contained the
- new key, whichever is greater. This ensures that at least two
- validated DNSKEY RRSets that contain the new key MUST be seen by the
- resolver prior to the key's acceptance.
-
-2.4.2. Remove Hold-Down Time
-
- The remove hold-down time is 30 days. This parameter is solely a key
- management database bookeeping parameter. Failure to remove
- information about the state of defunct keys from the database will
- not adversely impact the security of this protocol, but may end up
- with a database cluttered with obsolete key information.
-
-2.4.3. Minimum Trust Anchors per Trust Point
-
- A compliant resolver MUST be able to manage at least five SEP keys
- per trust point.
-
-3. Changes to DNSKEY RDATA Wire Format
-
- Bit 8 of the DNSKEY Flags field is designated as the 'REVOKE' flag.
- If this bit is set to '1', AND the resolver sees an RRSIG(DNSKEY)
- signed by the associated key, then the resolver MUST consider this
- key permanently invalid for all purposes except for validating the
- revocation.
-
-4. State Table
-
- The most important thing to understand is the resolver's view of any
- key at a trust point. The following state table describes this view
- at various points in the key's lifetime. The table is a normative
- part of this specification. The initial state of the key is 'Start'.
- The resolver's view of the state of the key changes as various events
- occur.
-
- This is the state of a trust-point key as seen from the resolver.
- The column on the left indicates the current state. The header at
- the top shows the next state. The intersection of the two shows the
- event that will cause the state to transition from the current state
- to the next.
-
-
-
-
-
-
-StJohns Standards Track [Page 6]
-
-RFC 5011 Trust Anchor Update September 2007
-
-
- NEXT STATE
- --------------------------------------------------
- FROM |Start |AddPend |Valid |Missing|Revoked|Removed|
- ----------------------------------------------------------
- Start | |NewKey | | | | |
- ----------------------------------------------------------
- AddPend |KeyRem | |AddTime| | | |
- ----------------------------------------------------------
- Valid | | | |KeyRem |Revbit | |
- ----------------------------------------------------------
- Missing | | |KeyPres| |Revbit | |
- ----------------------------------------------------------
- Revoked | | | | | |RemTime|
- ----------------------------------------------------------
- Removed | | | | | | |
- ----------------------------------------------------------
-
- State Table
-
-4.1. Events
-
- NewKey The resolver sees a valid DNSKEY RRSet with a new SEP key.
- That key will become a new trust anchor for the named trust
- point after it's been present in the RRSet for at least 'add
- time'.
-
- KeyPres The key has returned to the valid DNSKEY RRSet.
-
- KeyRem The resolver sees a valid DNSKEY RRSet that does not contain
- this key.
-
- AddTime The key has been in every valid DNSKEY RRSet seen for at
- least the 'add time'.
-
- RemTime A revoked key has been missing from the trust-point DNSKEY
- RRSet for sufficient time to be removed from the trust set.
-
- RevBit The key has appeared in the trust anchor DNSKEY RRSet with
- its "REVOKED" bit set, and there is an RRSig over the DNSKEY
- RRSet signed by this key.
-
-4.2. States
-
- Start The key doesn't yet exist as a trust anchor at the resolver.
- It may or may not exist at the zone server, but either
- hasn't yet been seen at the resolver or was seen but was
- absent from the last DNSKEY RRSet (e.g., KeyRem event).
-
-
-
-
-StJohns Standards Track [Page 7]
-
-RFC 5011 Trust Anchor Update September 2007
-
-
- AddPend The key has been seen at the resolver, has its 'SEP' bit
- set, and has been included in a validated DNSKEY RRSet.
- There is a hold-down time for the key before it can be used
- as a trust anchor.
-
- Valid The key has been seen at the resolver and has been included
- in all validated DNSKEY RRSets from the time it was first
- seen through the hold-down time. It is now valid for
- verifying RRSets that arrive after the hold-down time.
- Clarification: The DNSKEY RRSet does not need to be
- continuously present at the resolver (e.g., its TTL might
- expire). If the RRSet is seen and is validated (i.e.,
- verifies against an existing trust anchor), this key MUST be
- in the RRSet, otherwise a 'KeyRem' event is triggered.
-
- Missing This is an abnormal state. The key remains a valid trust-
- point key, but was not seen at the resolver in the last
- validated DNSKEY RRSet. This is an abnormal state because
- the zone operator should be using the REVOKE bit prior to
- removal.
-
- Revoked This is the state a key moves to once the resolver sees an
- RRSIG(DNSKEY) signed by this key where that DNSKEY RRSet
- contains this key with its REVOKE bit set to '1'. Once in
- this state, this key MUST permanently be considered invalid
- as a trust anchor.
-
- Removed After a fairly long hold-down time, information about this
- key may be purged from the resolver. A key in the removed
- state MUST NOT be considered a valid trust anchor. (Note:
- this state is more or less equivalent to the "Start" state,
- except that it's bad practice to re-introduce previously
- used keys -- think of this as the holding state for all the
- old keys for which the resolver no longer needs to track
- state.)
-
-5. Trust Point Deletion
-
- A trust point that has all of its trust anchors revoked is considered
- deleted and is treated as if the trust point was never configured.
- If there are no superior configured trust points, data at and below
- the deleted trust point are considered insecure by the resolver. If
- there ARE superior configured trust points, data at and below the
- deleted trust point are evaluated with respect to the superior trust
- point(s).
-
- Alternately, a trust point that is subordinate to another configured
- trust point MAY be deleted by a resolver after 180 days, where such a
-
-
-
-StJohns Standards Track [Page 8]
-
-RFC 5011 Trust Anchor Update September 2007
-
-
- subordinate trust point validly chains to a superior trust point.
- The decision to delete the subordinate trust anchor is a local
- configuration decision. Once the subordinate trust point is deleted,
- validation of the subordinate zone is dependent on validating the
- chain of trust to the superior trust point.
-
-6. Scenarios - Informative
-
- The suggested model for operation is to have one active key and one
- stand-by key at each trust point. The active key will be used to
- sign the DNSKEY RRSet. The stand-by key will not normally sign this
- RRSet, but the resolver will accept it as a trust anchor if/when it
- sees the signature on the trust point DNSKEY RRSet.
-
- Since the stand-by key is not in active signing use, the associated
- private key may (and should) be provided with additional protections
- not normally available to a key that must be used frequently (e.g.,
- locked in a safe, split among many parties, etc). Notionally, the
- stand-by key should be less subject to compromise than an active key,
- but that will be dependent on operational concerns not addressed
- here.
-
-6.1. Adding a Trust Anchor
-
- Assume an existing trust anchor key 'A'.
-
- 1. Generate a new key pair.
-
- 2. Create a DNSKEY record from the key pair and set the SEP and Zone
- Key bits.
-
- 3. Add the DNSKEY to the RRSet.
-
- 4. Sign the DNSKEY RRSet ONLY with the existing trust anchor key -
- 'A'.
-
- 5. Wait for various resolvers' timers to go off and for them to
- retrieve the new DNSKEY RRSet and signatures.
-
- 6. The new trust anchor will be populated at the resolvers on the
- schedule described by the state table and update algorithm -- see
- Sections 2 and 4 above.
-
-6.2. Deleting a Trust Anchor
-
- Assume existing trust anchors 'A' and 'B' and that you want to revoke
- and delete 'A'.
-
-
-
-
-StJohns Standards Track [Page 9]
-
-RFC 5011 Trust Anchor Update September 2007
-
-
- 1. Set the revocation bit on key 'A'.
-
- 2. Sign the DNSKEY RRSet with both 'A' and 'B'. 'A' is now revoked.
- The operator should include the revoked 'A' in the RRSet for at
- least the remove hold-down time, but then may remove it from the
- DNSKEY RRSet.
-
-6.3. Key Roll-Over
-
- Assume existing keys A and B. 'A' is actively in use (i.e. has been
- signing the DNSKEY RRSet). 'B' was the stand-by key. (i.e. has been
- in the DNSKEY RRSet and is a valid trust anchor, but wasn't being
- used to sign the RRSet).
-
- 1. Generate a new key pair 'C'.
- 2. Add 'C' to the DNSKEY RRSet.
- 3. Set the revocation bit on key 'A'.
- 4. Sign the RRSet with 'A' and 'B'.
-
- 'A' is now revoked, 'B' is now the active key, and 'C' will be the
- stand-by key once the hold-down expires. The operator should include
- the revoked 'A' in the RRSet for at least the remove hold-down time,
- but may then remove it from the DNSKEY RRSet.
-
-6.4. Active Key Compromised
-
- This is the same as the mechanism for Key Roll-Over (Section 6.3)
- above, assuming 'A' is the active key.
-
-6.5. Stand-by Key Compromised
-
- Using the same assumptions and naming conventions as Key Roll-Over
- (Section 6.3) above:
-
- 1. Generate a new key pair 'C'.
- 2. Add 'C' to the DNSKEY RRSet.
- 3. Set the revocation bit on key 'B'.
- 4. Sign the RRSet with 'A' and 'B'.
-
- 'B' is now revoked, 'A' remains the active key, and 'C' will be the
- stand-by key once the hold-down expires. 'B' should continue to be
- included in the RRSet for the remove hold-down time.
-
-6.6. Trust Point Deletion
-
- To delete a trust point that is subordinate to another configured
- trust point (e.g., example.com to .com) requires some juggling of the
- data. The specific process is:
-
-
-
-StJohns Standards Track [Page 10]
-
-RFC 5011 Trust Anchor Update September 2007
-
-
- 1. Generate a new DNSKEY and DS record and provide the DS record to
- the parent along with DS records for the old keys.
-
- 2. Once the parent has published the DSs, add the new DNSKEY to the
- RRSet and revoke ALL of the old keys at the same time, while
- signing the DNSKEY RRSet with all of the old and new keys.
-
- 3. After 30 days, stop publishing the old, revoked keys and remove
- any corresponding DS records in the parent.
-
- Revoking the old trust-point keys at the same time as adding new keys
- that chain to a superior trust prevents the resolver from adding the
- new keys as trust anchors. Adding DS records for the old keys avoids
- a race condition where either the subordinate zone becomes unsecure
- (because the trust point was deleted) or becomes bogus (because it
- didn't chain to the superior zone).
-
-7. IANA Considerations
-
- The IANA has assigned a bit in the DNSKEY flags field (see Section 7
- of [RFC4034]) for the REVOKE bit (8).
-
-8. Security Considerations
-
- In addition to the following sections, see also Theory of Operation
- above (Section 2) and especially Section 2.2 for related discussions.
-
- Security considerations for trust anchor rollover not specific to
- this protocol are discussed in [RFC4986].
-
-8.1. Key Ownership vs. Acceptance Policy
-
- The reader should note that, while the zone owner is responsible for
- creating and distributing keys, it's wholly the decision of the
- resolver owner as to whether to accept such keys for the
- authentication of the zone information. This implies the decision to
- update trust-anchor keys based on trusting a current trust-anchor key
- is also the resolver owner's decision.
-
- The resolver owner (and resolver implementers) MAY choose to permit
- or prevent key status updates based on this mechanism for specific
- trust points. If they choose to prevent the automated updates, they
- will need to establish a mechanism for manual or other out-of-band
- updates, which are outside the scope of this document.
-
-
-
-
-
-
-
-StJohns Standards Track [Page 11]
-
-RFC 5011 Trust Anchor Update September 2007
-
-
-8.2. Multiple Key Compromise
-
- This scheme permits recovery as long as at least one valid trust-
- anchor key remains uncompromised, e.g., if there are three keys, you
- can recover if two of them are compromised. The zone owner should
- determine their own level of comfort with respect to the number of
- active, valid trust anchors in a zone and should be prepared to
- implement recovery procedures once they detect a compromise. A
- manual or other out-of-band update of all resolvers will be required
- if all trust-anchor keys at a trust point are compromised.
-
-8.3. Dynamic Updates
-
- Allowing a resolver to update its trust anchor set based on in-band
- key information is potentially less secure than a manual process.
- However, given the nature of the DNS, the number of resolvers that
- would require update if a trust anchor key were compromised, and the
- lack of a standard management framework for DNS, this approach is no
- worse than the existing situation.
-
-9. Normative References
-
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
- Requirement Levels", BCP 14, RFC 2119, March 1997.
-
- [RFC3755] Weiler, S., "Legacy Resolver Compatibility for Delegation
- Signer (DS)", RFC 3755, May 2004.
-
- [RFC4033] Arends, R., Austein, R., Larson, M., Massey, D., and S.
- Rose, "DNS Security Introduction and Requirements", RFC
- 4033, March 2005.
-
- [RFC4034] Arends, R., Austein, R., Larson, M., Massey, D., and S.
- Rose, "Resource Records for the DNS Security Extensions",
- RFC 4034, March 2005.
-
- [RFC4035] Arends, R., Austein, R., Larson, M., Massey, D., and S.
- Rose, "Protocol Modifications for the DNS Security
- Extensions", RFC 4035, March 2005.
-
-10. Informative References
-
- [RFC4986] Eland, H., Mundy, R., Crocker, S., and S. Krishnaswamy,
- "Requirements Related to DNS Security (DNSSEC) Trust
- Anchor Rollover", RFC 4986, August 2007.
-
-
-
-
-
-
-StJohns Standards Track [Page 12]
-
-RFC 5011 Trust Anchor Update September 2007
-
-
-Author's Address
-
- Michael StJohns
- Independent
-
- EMail: mstjohns@comcast.net
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-StJohns Standards Track [Page 13]
-
-RFC 5011 Trust Anchor Update September 2007
-
-
-Full Copyright Statement
-
- Copyright (C) The IETF Trust (2007).
-
- This document is subject to the rights, licenses and restrictions
- contained in BCP 78, and except as set forth therein, the authors
- retain all their rights.
-
- This document and the information contained herein are provided on an
- "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
- OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
- THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS
- OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
- THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
- WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-
-Intellectual Property
-
- The IETF takes no position regarding the validity or scope of any
- Intellectual Property Rights or other rights that might be claimed to
- pertain to the implementation or use of the technology described in
- this document or the extent to which any license under such rights
- might or might not be available; nor does it represent that it has
- made any independent effort to identify any such rights. Information
- on the procedures with respect to rights in RFC documents can be
- found in BCP 78 and BCP 79.
-
- Copies of IPR disclosures made to the IETF Secretariat and any
- assurances of licenses to be made available, or the result of an
- attempt made to obtain a general license or permission for the use of
- such proprietary rights by implementers or users of this
- specification can be obtained from the IETF on-line IPR repository at
- http://www.ietf.org/ipr.
-
- The IETF invites any interested party to bring to its attention any
- copyrights, patents or patent applications, or other proprietary
- rights that may cover technology that may be required to implement
- this standard. Please address the information to the IETF at
- ietf-ipr@ietf.org.
-
-
-
-
-
-
-
-
-
-
-
-
-StJohns Standards Track [Page 14]
-
diff --git a/contrib/zkt-1.1.3/domaincmp.c b/contrib/zkt-1.1.3/domaincmp.c
deleted file mode 100644
index 3337a117..00000000
--- a/contrib/zkt-1.1.3/domaincmp.c
+++ /dev/null
@@ -1,332 +0,0 @@
-/*****************************************************************
-**
-** @(#) domaincmp.c -- compare two domain names
-**
-** Copyright (c) Aug 2005, Karle Boss, Holger Zuleger (kaho).
-** isparentdomain() (c) Mar 2010 by Holger Zuleger
-** All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Karle Boss or Holger Zuleger (kaho) nor the
-** names of its contributors may be used to endorse or promote products
-** derived from this software without specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-# include <stdio.h>
-# include <string.h>
-# include <assert.h>
-# include <ctype.h>
-#define extern
-# include "domaincmp.h"
-#undef extern
-
-
-#define goto_labelstart(str, p) while ( (p) > (str) && *((p)-1) != '.' ) \
- (p)--
-
-/*****************************************************************
-** int domaincmp (a, b)
-** compare a and b as fqdns.
-** return <0 | 0 | >0 as in strcmp
-** A subdomain is less than the corresponding parent domain,
-** thus domaincmp ("z.example.net", "example.net") return < 0 !!
-*****************************************************************/
-int domaincmp (const char *a, const char *b)
-{
- return domaincmp_dir (a, b, 1);
-}
-
-/*****************************************************************
-** int domaincmp_dir (a, b, subdomain_above)
-** compare a and b as fqdns.
-** return <0 | 0 | >0 as in strcmp
-** A subdomain is less than the corresponding parent domain,
-** thus domaincmp ("z.example.net", "example.net") return < 0 !!
-*****************************************************************/
-int domaincmp_dir (const char *a, const char *b, int subdomain_above)
-{
- register const char *pa;
- register const char *pb;
- int dir;
-
- if ( a == NULL ) return -1;
- if ( b == NULL ) return 1;
-
- if ( subdomain_above )
- dir = 1;
- else
- dir = -1;
-
- if ( *a == '.' ) /* skip a leading dot */
- a++;
- if ( *b == '.' ) /* same at the other string */
- b++;
-
- /* let pa and pb point to the last non dot char */
- pa = a + strlen (a);
- do
- pa--;
- while ( pa > a && *pa == '.' );
-
- pb = b + strlen (b);
- do
- pb--;
- while ( pb > b && *pb == '.' );
-
- /* cmp both domains starting at the end */
- while ( *pa == *pb && pa > a && pb > b )
- pa--, pb--;
-
- if ( *pa != *pb ) /* both domains are different ? */
- {
- if ( *pa == '.' )
- pa++; /* set to beginning of next label */
- else
- goto_labelstart (a, pa); /* find begin of current label */
- if ( *pb == '.' )
- pb++; /* set to beginning of next label */
- else
- goto_labelstart (b, pb); /* find begin of current label */
- }
- else /* maybe one of them has a subdomain */
- {
- if ( pa > a )
- if ( pa[-1] == '.' )
- return -1 * dir;
- else
- goto_labelstart (a, pa);
- else if ( pb > b )
- if ( pb[-1] == '.' )
- return 1 * dir;
- else
- goto_labelstart (b, pb);
- else
- return 0; /* both are at the beginning, so they are equal */
- }
-
- /* both domains are definitly unequal */
- while ( *pa == *pb ) /* so we have to look at the point where they differ */
- pa++, pb++;
-
- return *pa - *pb;
-}
-
-/*****************************************************************
-**
-** int issubdomain ("child", "parent")
-**
-** "child" and "parent" are standardized domain names in such
-** a way that even both domain names are ending with a dot,
-** or none of them.
-**
-** returns 1 if "child" is a subdomain of "parent"
-** returns 0 if "child" is not a subdomain of "parent"
-**
-*****************************************************************/
-int issubdomain (const char *child, const char *parent)
-{
- const char *p;
- const char *cdot;
- int ccnt;
- int pcnt;
-
- if ( !child || !parent || *child == '\0' || *parent == '\0' )
- return 0;
-
- cdot = NULL;
- pcnt = 0;
- for ( p = parent; *p; p++ )
- if ( *p == '.' )
- pcnt++;
-
- ccnt = 0;
- for ( p = child; *p; p++ )
- if ( *p == '.' )
- {
- if ( ccnt == 0 )
- cdot = p;
- ccnt++;
- }
- if ( ccnt == 0 ) /* child is not a fqdn or is not deep enough ? */
- return 0;
- if ( pcnt == 0 ) /* parent is not a fqdn ? */
- return 0;
-
- if ( pcnt >= ccnt ) /* parent has more levels than child ? */
- return 0;
-
- /* is child a (one level) subdomain of parent ? */
- if ( strcmp (cdot+1, parent) == 0 ) /* the domains are equal ? */
- return 1;
-
- return 0;
-}
-
-/*****************************************************************
-**
-** int isparentdomain ("child", "parent", level)
-**
-** "child" and "parent" are standardized domain names in such
-** a way that even both domain names are ending with a dot,
-** or none of them.
-**
-** returns 1 if "child" is a subdomain of "parent"
-** returns 0 if "child" is not a subdomain of "parent"
-** returns -1 if "child" and "parent" are the same domain
-**
-*****************************************************************/
-int isparentdomain (const char *child, const char *parent, int level)
-{
- const char *p;
- const char *cdot;
- const char *pdot;
- int ccnt;
- int pcnt;
-
- if ( !child || !parent || *child == '\0' || *parent == '\0' )
- return 0;
-
- pdot = cdot = NULL;
- pcnt = 0;
- for ( p = parent; *p; p++ )
- if ( *p == '.' )
- {
- if ( pcnt == 0 )
- pdot = p;
- pcnt++;
- }
-
- ccnt = 0;
- for ( p = child; *p; p++ )
- if ( *p == '.' )
- {
- if ( ccnt == 0 )
- cdot = p;
- ccnt++;
- }
- if ( ccnt == 0 || ccnt < level ) /* child is not a fqdn or is not deep enough ? */
- return 0;
- if ( pcnt == 0 ) /* parent is not a fqdn ? */
- return 0;
-
- if ( pcnt > ccnt ) /* parent has more levels than child ? */
- return 0;
-
- if ( pcnt == ccnt ) /* both are at the same level ? */
- {
- /* let's check the domain part */
- if ( strcmp (cdot, pdot) == 0 ) /* the domains are equal ? */
- return -1;
- return 0;
- }
-
- if ( pcnt > ccnt ) /* parent has more levels than child ? */
- return 0;
-
- /* is child a (one level) subdomain of parent ? */
- if ( strcmp (cdot+1, parent) == 0 ) /* the domains are equal ? */
- return 1;
-
- return 0;
-}
-
-#ifdef DOMAINCMP_TEST
-static struct {
- char *a;
- char *b;
- int res;
-} ex[] = {
- { ".", ".", 0 },
- { "test", "", 1 },
- { "", "test2", -1 },
- { "", "", 0 },
- { "de", "de", 0 },
- { ".de", "de", 0 },
- { "de.", "de.", 0 },
- { ".de", ".de", 0 },
- { ".de.", ".de.", 0 },
- { ".de", "zde", -1 },
- { ".de", "ade", 1 },
- { "zde", ".de", 1 },
- { "ade", ".de", -1 },
- { "a.de", ".de", -1 },
- { ".de", "a.de", 1 },
- { "a.de", "b.de", -1 },
- { "a.de.", "b.de", -1 },
- { "a.de", "b.de.", -1 },
- { "a.de", "a.de.", 0 },
- { "aa.de", "b.de", -1 },
- { "ba.de", "b.de", 1 },
- { "a.de", "a.dk", -1 },
- { "anna.example.de", "anna.example.de", 0 },
- { "anna.example.de", "annamirl.example.de", -1 },
- { "anna.example.de", "ann.example.de", 1 },
- { "example.de.", "xy.example.de.", 1 },
- { "example.de.", "ab.example.de.", 1 },
- { "example.de", "ab.example.de", 1 },
- { "xy.example.de.", "example.de.", -1 },
- { "ab.example.de.", "example.de.", -1 },
- { "ab.example.de", "example.de", -1 },
- { "ab.mast.de", "axt.de", 1 },
- { "ab.mast.de", "obt.de", -1 },
- { "abc.example.de.", "xy.example.de.", -1 },
- { NULL, NULL, 0 }
-};
-
-const char *progname;
-main (int argc, char *argv[])
-{
-
- int expect;
- int res;
- int c;
- int i;
-
- progname = *argv;
-
- for ( i = 0; ex[i].a; i++ )
- {
- expect = ex[i].res;
- if ( expect < 0 )
- c = '<';
- else if ( expect > 0 )
- c = '>';
- else
- c = '=';
- printf ("%-20s %-20s ", ex[i].a, ex[i].b);
- printf ("%3d ", issubdomain (ex[i].a, ex[i].b));
- printf ("\t==> 0 %c ", c);
- fflush (stdout);
- res = domaincmp (ex[i].a, ex[i].b);
- printf ("%3d ", res);
- if ( res < 0 && expect < 0 || res > 0 && expect > 0 || res == 0 && expect == 0 )
- puts ("ok");
- else
- puts ("not ok");
- }
-}
-#endif
diff --git a/contrib/zkt-1.1.3/domaincmp.h b/contrib/zkt-1.1.3/domaincmp.h
deleted file mode 100644
index 8c065602..00000000
--- a/contrib/zkt-1.1.3/domaincmp.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*****************************************************************
-**
-** @(#) domaincmp.h -- compare two domain names
-**
-** Copyright (c) Aug 2005, Karle Boss (kaho). All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-#ifndef DOMAINCMP_H
-# define DOMAINCMP_H
-extern int domaincmp (const char *a, const char *b);
-extern int domaincmp_dir (const char *a, const char *b, int subdomain_above);
-extern int isparentdomain (const char *child, const char *parent, int level);
-extern int issubdomain (const char *child, const char *parent);
-#endif
diff --git a/contrib/zkt-1.1.3/examples/clean.sh b/contrib/zkt-1.1.3/examples/clean.sh
deleted file mode 100644
index 38e2e703..00000000
--- a/contrib/zkt-1.1.3/examples/clean.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-
-{
- find . -name "dnskey.db"
- find . -name "dsset-*"
- find . -name "keyset-*"
- find . -name "K*"
-} | xargs rm
-
-
-for file in `find . -name "zone.db.signed"`
-do
- cp /dev/null $file
-done
diff --git a/contrib/zkt-1.1.3/examples/flat/dist.sh b/contrib/zkt-1.1.3/examples/flat/dist.sh
deleted file mode 100755
index c676ac68..00000000
--- a/contrib/zkt-1.1.3/examples/flat/dist.sh
+++ /dev/null
@@ -1,82 +0,0 @@
-#################################################################
-#
-# @(#) dist.sh -- distribute and reload command for dnssec-signer
-#
-# (c) Jul 2008 Holger Zuleger hznet.de
-#
-# Feb 2010 action "distkeys" added
-#
-# This shell script will be run by dnssec-signer as a distribution
-# and reload command if:
-#
-# a) the dnssec.conf file parameter Distribute_Cmd: points
-# to this file
-# and
-# b) the user running the dnssec-signer command is not
-# root (uid==0)
-# and
-# c) the owner of this shell script is the same as the
-# running user and the access rights don't allow writing
-# for anyone except the owner
-# or
-# d) the group of this shell script is the same as the
-# running user and the access rights don't allow writing
-# for anyone except the group
-#
-#################################################################
-
-# set path to rndc and scp
-PATH="/bin:/usr/bin:/usr/local/sbin"
-
-# remote server and directory
-server=localhost # fqdn of remote name server
-dir=/var/named # zone directory on remote name server
-
-progname=$0
-usage()
-{
- echo "usage: $progname distribute|reload <domain> <path_to_zonefile> [<viewname>]" 1>&2
- test $# -gt 0 && echo $* 1>&2
- exit 1
-}
-
-if test $# -lt 3
-then
- usage
-fi
-action="$1"
-domain="$2"
-zonefile="$3"
-view=""
-test $# -gt 3 && view="$4"
-
-case $action in
-distkeys)
- if test -n "$view"
- then
- echo "scp K$zone+* $server:$dir/$view/$zone/"
- : scp K$zone+* $server:$dir/$view/$zone/
- else
- echo "scp K$zone+* $server:$dir/$zone/"
- : scp K$zone+* $server:$dir/$zone/
- fi
- ;;
-distribute)
- if test -n "$view"
- then
- echo "scp $zonefile $server:$dir/$view/$domain/"
- : scp $zonefile $server:$dir/$view/$domain/
- else
- echo "scp $zonefile $server:$dir/$domain/"
- : scp $zonefile $server:$dir/$domain/
- fi
- ;;
-reload)
- echo "rndc $action $domain $view"
- : rndc $action $domain $view
- ;;
-*)
- usage "illegal action $action"
- ;;
-esac
-
diff --git a/contrib/zkt-1.1.3/examples/flat/dnssec.conf b/contrib/zkt-1.1.3/examples/flat/dnssec.conf
deleted file mode 100644
index 53849784..00000000
--- a/contrib/zkt-1.1.3/examples/flat/dnssec.conf
+++ /dev/null
@@ -1,45 +0,0 @@
-#
-# @(#) dnssec.conf T1.0rc1 (c) Feb 2005 - Mar 2010 Holger Zuleger hznet.de
-#
-
-# dnssec-zkt options
-Zonedir: "."
-Recursive: True
-PrintTime: False
-PrintAge: True
-LeftJustify: False
-
-# zone specific values
-ResignInterval: 2d # (172800 seconds)
-Sigvalidity: 6d # (518400 seconds)
-Max_TTL: 8h # (28800 seconds)
-Propagation: 5m # (300 seconds)
-KEY_TTL: 1h # (3600 seconds)
-Serialformat: incremental
-
-# signing key parameters
-Key_Algo: RSASHA512
-KSK_lifetime: 60d # (5184000 seconds)
-KSK_bits: 1300
-KSK_randfile: "/dev/urandom"
-ZSK_lifetime: 2w # (1209600 seconds)
-ZSK_bits: 1024
-ZSK_randfile: "/dev/urandom"
-SaltBits: 24
-
-# dnssec-signer options
-LogFile: "zkt.log"
-LogLevel: DEBUG
-LogDomainDir: "."
-SyslogFacility: USER
-SyslogLevel: NOTICE
-VerboseLog: 2
-Keyfile: "dnskey.db"
-Zonefile: "zone.db"
-KeySetDir: "../keysets"
-DLV_Domain: ""
-Sig_Pseudorand: True
-Sig_GenerateDS: True
-Sig_DnsKeyKSK: False
-Sig_Parameter: "-n 1"
-Distribute_Cmd: "./dist.sh"
diff --git a/contrib/zkt-1.1.3/examples/flat/dyn.example.net/dnssec.conf b/contrib/zkt-1.1.3/examples/flat/dyn.example.net/dnssec.conf
deleted file mode 100644
index c3be73e5..00000000
--- a/contrib/zkt-1.1.3/examples/flat/dyn.example.net/dnssec.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-Key_Algo: NSEC3RSASHA1 # (Algorithm ID 7)
-KSK_lifetime: 60d # (5184000 seconds)
-KSK_bits: 1024
diff --git a/contrib/zkt-1.1.3/examples/flat/dyn.example.net/zktlog-dyn.example.net. b/contrib/zkt-1.1.3/examples/flat/dyn.example.net/zktlog-dyn.example.net.
deleted file mode 100644
index 24643def..00000000
--- a/contrib/zkt-1.1.3/examples/flat/dyn.example.net/zktlog-dyn.example.net.
+++ /dev/null
@@ -1,161 +0,0 @@
-2010-02-21 19:43:15.018: debug: Check RFC5011 status
-2010-02-21 19:43:15.018: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-21 19:43:15.018: debug: Check KSK status
-2010-02-21 19:43:15.018: debug: No active KSK found: generate new one
-2010-02-21 19:43:15.330: info: "dyn.example.net.": generated new KSK 52935
-2010-02-21 19:43:15.330: debug: Check ZSK status
-2010-02-21 19:43:15.330: debug: No active ZSK found: generate new one
-2010-02-21 19:43:15.368: info: "dyn.example.net.": generated new ZSK 30323
-2010-02-21 19:43:15.368: debug: Re-signing necessary: Modfied zone key set
-2010-02-21 19:43:15.368: notice: "dyn.example.net.": re-signing triggered: Modfied zone key set
-2010-02-21 19:43:15.368: debug: Writing key file "./dyn.example.net/dnskey.db"
-2010-02-21 19:43:15.368: debug: Signing zone "dyn.example.net."
-2010-02-21 19:43:15.368: notice: "dyn.example.net.": freeze dynamic zone
-2010-02-21 19:43:15.368: debug: freeze dynamic zone "dyn.example.net."
-2010-02-21 19:43:15.368: debug: Run cmd "/usr/local/sbin/rndc freeze dyn.example.net."
-2010-02-21 19:43:15.374: debug: Dynamic Zone signing: copy old signed zone file ./dyn.example.net/zone.db.dsigned to new input file ./dyn.example.net/zone.db
-2010-02-21 19:43:15.374: debug: Run cmd "cd ./dyn.example.net; /usr/local/sbin/dnssec-signzone -n 1 -3 76931F -C -g -p -d ../keysets -o dyn.example.net. -e +518400 -N increment -f zone.db.dsigned zone.db K*.private 2>&1"
-2010-02-21 19:43:15.382: debug: Cmd dnssec-signzone return: "dnssec-signzone: fatal: Zone contains NSEC records. Use -u to update to NSEC3."
-2010-02-21 19:43:15.382: error: "dyn.example.net.": signing failed!
-2010-02-21 19:43:15.382: notice: "dyn.example.net.": thaw dynamic zone
-2010-02-21 19:43:15.382: debug: thaw dynamic zone "dyn.example.net."
-2010-02-21 19:43:15.382: debug: Run cmd "/usr/local/sbin/rndc thaw dyn.example.net."
-2010-02-21 19:45:36.415: debug: Check RFC5011 status
-2010-02-21 19:45:36.416: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-21 19:45:36.416: debug: Check KSK status
-2010-02-21 19:45:36.416: debug: Check ZSK status
-2010-02-21 19:45:36.416: debug: Re-signing not necessary!
-2010-02-21 19:45:36.416: debug: Check if there is a parent file to copy
-2010-02-21 19:45:41.448: debug: Check RFC5011 status
-2010-02-21 19:45:41.448: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-21 19:45:41.448: debug: Check KSK status
-2010-02-21 19:45:41.448: debug: Check ZSK status
-2010-02-21 19:45:41.448: debug: Re-signing necessary: Option -f
-2010-02-21 19:45:41.448: notice: "dyn.example.net.": re-signing triggered: Option -f
-2010-02-21 19:45:41.448: debug: Writing key file "./dyn.example.net/dnskey.db"
-2010-02-21 19:45:41.448: debug: Signing zone "dyn.example.net."
-2010-02-21 19:45:41.448: notice: "dyn.example.net.": freeze dynamic zone
-2010-02-21 19:45:41.448: debug: freeze dynamic zone "dyn.example.net."
-2010-02-21 19:45:41.448: debug: Run cmd "/usr/local/sbin/rndc freeze dyn.example.net."
-2010-02-21 19:45:41.457: debug: Dynamic Zone signing: copy old signed zone file ./dyn.example.net/zone.db.dsigned to new input file ./dyn.example.net/zone.db
-2010-02-21 19:45:41.458: debug: Run cmd "cd ./dyn.example.net; /usr/local/sbin/dnssec-signzone -n 1 -3 76931F -C -g -p -d ../keysets -o dyn.example.net. -e +518400 -N increment -f zone.db.dsigned zone.db K*.private 2>&1"
-2010-02-21 19:45:41.473: debug: Cmd dnssec-signzone return: "dnssec-signzone: fatal: NSEC3 generation requested with NSEC only DNSKEY"
-2010-02-21 19:45:41.473: error: "dyn.example.net.": signing failed!
-2010-02-21 19:45:41.473: notice: "dyn.example.net.": thaw dynamic zone
-2010-02-21 19:45:41.473: debug: thaw dynamic zone "dyn.example.net."
-2010-02-21 19:45:41.473: debug: Run cmd "/usr/local/sbin/rndc thaw dyn.example.net."
-2010-02-21 19:47:06.899: debug: Check RFC5011 status
-2010-02-21 19:47:06.899: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-21 19:47:06.899: debug: Check KSK status
-2010-02-21 19:47:06.899: debug: Check ZSK status
-2010-02-21 19:47:06.899: debug: Re-signing necessary: Option -f
-2010-02-21 19:47:06.899: notice: "dyn.example.net.": re-signing triggered: Option -f
-2010-02-21 19:47:06.899: debug: Writing key file "./dyn.example.net/dnskey.db"
-2010-02-21 19:47:06.900: debug: Signing zone "dyn.example.net."
-2010-02-21 19:47:06.900: notice: "dyn.example.net.": freeze dynamic zone
-2010-02-21 19:47:06.900: debug: freeze dynamic zone "dyn.example.net."
-2010-02-21 19:47:06.900: debug: Run cmd "/usr/local/sbin/rndc freeze dyn.example.net."
-2010-02-21 19:47:06.910: debug: Dynamic Zone signing: copy old signed zone file ./dyn.example.net/zone.db.dsigned to new input file ./dyn.example.net/zone.db
-2010-02-21 19:47:06.910: debug: Run cmd "cd ./dyn.example.net; /usr/local/sbin/dnssec-signzone -n 1 -3 76931F -C -g -p -d ../keysets -o dyn.example.net. -e +518400 -N increment -f zone.db.dsigned zone.db K*.private 2>&1"
-2010-02-21 19:47:06.926: debug: Cmd dnssec-signzone return: "dnssec-signzone: fatal: NSEC3 iterations too big for weakest DNSKEY strength. Maximum iterations allowed 0."
-2010-02-21 19:47:06.926: error: "dyn.example.net.": signing failed!
-2010-02-21 19:47:06.926: notice: "dyn.example.net.": thaw dynamic zone
-2010-02-21 19:47:06.926: debug: thaw dynamic zone "dyn.example.net."
-2010-02-21 19:47:06.926: debug: Run cmd "/usr/local/sbin/rndc thaw dyn.example.net."
-2010-02-21 19:58:40.972: debug: Check RFC5011 status
-2010-02-21 19:58:40.972: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-21 19:58:40.972: debug: Check KSK status
-2010-02-21 19:58:40.972: debug: Check ZSK status
-2010-02-21 19:58:40.973: debug: Re-signing necessary: Option -f
-2010-02-21 19:58:40.973: notice: "dyn.example.net.": re-signing triggered: Option -f
-2010-02-21 19:58:40.973: debug: Writing key file "./dyn.example.net/dnskey.db"
-2010-02-21 19:58:40.973: debug: Signing zone "dyn.example.net."
-2010-02-21 19:58:40.973: notice: "dyn.example.net.": freeze dynamic zone
-2010-02-21 19:58:40.973: debug: freeze dynamic zone "dyn.example.net."
-2010-02-21 19:58:40.973: debug: Run cmd "/usr/local/sbin/rndc freeze dyn.example.net."
-2010-02-21 19:58:40.982: debug: Dynamic Zone signing: zone file manually edited: Use it as new input file
-2010-02-21 19:58:40.982: debug: Dynamic Zone signing: copy old signed zone file ./dyn.example.net/zone.db.dsigned to new input file ./dyn.example.net/zone.db
-2010-02-21 19:58:40.983: debug: Run cmd "cd ./dyn.example.net; /usr/local/sbin/dnssec-signzone -n 1 -3 76931F -C -g -p -d ../keysets -o dyn.example.net. -e +518400 -N increment -f zone.db.dsigned zone.db K*.private 2>&1"
-2010-02-21 19:58:40.999: debug: Cmd dnssec-signzone return: "dnssec-signzone: fatal: NSEC3 iterations too big for weakest DNSKEY strength. Maximum iterations allowed 0."
-2010-02-21 19:58:40.999: error: "dyn.example.net.": signing failed!
-2010-02-21 19:58:40.999: notice: "dyn.example.net.": thaw dynamic zone
-2010-02-21 19:58:40.999: debug: thaw dynamic zone "dyn.example.net."
-2010-02-21 19:58:40.999: debug: Run cmd "/usr/local/sbin/rndc thaw dyn.example.net."
-2010-02-21 20:00:48.833: debug: Check RFC5011 status
-2010-02-21 20:00:48.833: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-21 20:00:48.833: debug: Check KSK status
-2010-02-21 20:00:48.833: debug: Check ZSK status
-2010-02-21 20:00:48.833: debug: Re-signing necessary: Option -f
-2010-02-21 20:00:48.833: notice: "dyn.example.net.": re-signing triggered: Option -f
-2010-02-21 20:00:48.833: debug: Writing key file "./dyn.example.net/dnskey.db"
-2010-02-21 20:00:48.834: debug: Signing zone "dyn.example.net."
-2010-02-21 20:00:48.834: notice: "dyn.example.net.": freeze dynamic zone
-2010-02-21 20:00:48.834: debug: freeze dynamic zone "dyn.example.net."
-2010-02-21 20:00:48.834: debug: Run cmd "/usr/local/sbin/rndc freeze dyn.example.net."
-2010-02-21 20:00:48.844: debug: Dynamic Zone signing: copy old signed zone file ./dyn.example.net/zone.db.dsigned to new input file ./dyn.example.net/zone.db
-2010-02-21 20:00:48.844: debug: Run cmd "cd ./dyn.example.net; /usr/local/sbin/dnssec-signzone -n 1 -3 76931F -C -g -p -d ../keysets -o dyn.example.net. -e +518400 -N increment -f zone.db.dsigned zone.db K*.private 2>&1"
-2010-02-21 20:00:48.878: debug: Cmd dnssec-signzone return: "zone.db.dsigned"
-2010-02-21 20:00:48.878: notice: "dyn.example.net.": thaw dynamic zone
-2010-02-21 20:00:48.878: debug: thaw dynamic zone "dyn.example.net."
-2010-02-21 20:00:48.878: debug: Run cmd "/usr/local/sbin/rndc thaw dyn.example.net."
-2010-02-21 20:00:48.884: debug: Signing completed after 0s.
-2010-02-21 20:01:11.175: debug: Check RFC5011 status
-2010-02-21 20:01:11.175: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-21 20:01:11.175: debug: Check KSK status
-2010-02-21 20:01:11.175: debug: Check ZSK status
-2010-02-21 20:01:11.176: debug: Re-signing necessary: Option -f
-2010-02-21 20:01:11.176: notice: "dyn.example.net.": re-signing triggered: Option -f
-2010-02-21 20:01:11.176: debug: Writing key file "./dyn.example.net/dnskey.db"
-2010-02-21 20:01:11.176: debug: Signing zone "dyn.example.net."
-2010-02-21 20:01:11.176: notice: "dyn.example.net.": freeze dynamic zone
-2010-02-21 20:01:11.176: debug: freeze dynamic zone "dyn.example.net."
-2010-02-21 20:01:11.176: debug: Run cmd "/usr/local/sbin/rndc freeze dyn.example.net."
-2010-02-21 20:01:11.181: debug: Dynamic Zone signing: copy old signed zone file ./dyn.example.net/zone.db.dsigned to new input file ./dyn.example.net/zone.db
-2010-02-21 20:01:11.181: debug: Run cmd "cd ./dyn.example.net; /usr/local/sbin/dnssec-signzone -n 1 -3 76931F -C -g -p -d ../keysets -o dyn.example.net. -e +518400 -N increment -f zone.db.dsigned zone.db K*.private 2>&1"
-2010-02-21 20:01:11.202: debug: Cmd dnssec-signzone return: "zone.db.dsigned"
-2010-02-21 20:01:11.202: notice: "dyn.example.net.": thaw dynamic zone
-2010-02-21 20:01:11.203: debug: thaw dynamic zone "dyn.example.net."
-2010-02-21 20:01:11.203: debug: Run cmd "/usr/local/sbin/rndc thaw dyn.example.net."
-2010-02-21 20:01:11.208: debug: Signing completed after 0s.
-2010-02-21 20:01:17.175: debug: Check RFC5011 status
-2010-02-21 20:01:17.175: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-21 20:01:17.175: debug: Check KSK status
-2010-02-21 20:01:17.175: debug: Check ZSK status
-2010-02-21 20:01:17.176: debug: Re-signing not necessary!
-2010-02-21 20:01:17.176: debug: Check if there is a parent file to copy
-2010-02-25 23:42:29.326: debug: Check RFC5011 status
-2010-02-25 23:42:29.326: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-25 23:42:29.326: debug: Check KSK status
-2010-02-25 23:42:29.326: debug: Check ZSK status
-2010-02-25 23:42:29.326: debug: Re-signing necessary: re-signing interval (2d) reached
-2010-02-25 23:42:29.326: notice: "dyn.example.net.": re-signing triggered: re-signing interval (2d) reached
-2010-02-25 23:42:29.326: debug: Writing key file "./dyn.example.net/dnskey.db"
-2010-02-25 23:42:29.327: debug: Signing zone "dyn.example.net."
-2010-02-25 23:42:29.327: notice: "dyn.example.net.": freeze dynamic zone
-2010-02-25 23:42:29.327: debug: freeze dynamic zone "dyn.example.net."
-2010-02-25 23:42:29.327: debug: Run cmd "/usr/local/sbin/rndc freeze dyn.example.net."
-2010-02-25 23:42:29.388: debug: Dynamic Zone signing: copy old signed zone file ./dyn.example.net/zone.db.dsigned to new input file ./dyn.example.net/zone.db
-2010-02-25 23:42:29.425: debug: Run cmd "cd ./dyn.example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -3 76931F -C -g -p -d ../keysets -o dyn.example.net. -e +518400 -N increment -f zone.db.dsigned zone.db K*.private 2>&1"
-2010-02-25 23:42:29.471: debug: Cmd dnssec-signzone return: "zone.db.dsigned"
-2010-02-25 23:42:29.471: notice: "dyn.example.net.": thaw dynamic zone
-2010-02-25 23:42:29.471: debug: thaw dynamic zone "dyn.example.net."
-2010-02-25 23:42:29.471: debug: Run cmd "/usr/local/sbin/rndc thaw dyn.example.net."
-2010-02-25 23:42:29.486: debug: Signing completed after 0s.
-2010-03-02 10:59:46.770: debug: Check RFC5011 status
-2010-03-02 10:59:46.770: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-03-02 10:59:46.770: debug: Check KSK status
-2010-03-02 10:59:46.770: debug: Check ZSK status
-2010-03-02 10:59:46.770: debug: Re-signing necessary: re-signing interval (2d) reached
-2010-03-02 10:59:46.770: notice: "dyn.example.net.": re-signing triggered: re-signing interval (2d) reached
-2010-03-02 10:59:46.770: debug: Writing key file "./dyn.example.net/dnskey.db"
-2010-03-02 10:59:46.770: debug: Signing zone "dyn.example.net."
-2010-03-02 10:59:46.770: notice: "dyn.example.net.": freeze dynamic zone
-2010-03-02 10:59:46.770: debug: freeze dynamic zone "dyn.example.net."
-2010-03-02 10:59:46.770: debug: Run cmd "/usr/local/sbin/rndc freeze dyn.example.net."
-2010-03-02 10:59:46.852: debug: Dynamic Zone signing: copy old signed zone file ./dyn.example.net/zone.db.dsigned to new input file ./dyn.example.net/zone.db
-2010-03-02 10:59:46.875: debug: Run cmd "cd ./dyn.example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -3 76931F -C -g -p -d ../keysets -o dyn.example.net. -e +518400 -N increment -f zone.db.dsigned zone.db K*.private 2>&1"
-2010-03-02 10:59:46.950: debug: Cmd dnssec-signzone return: "zone.db.dsigned"
-2010-03-02 10:59:46.950: notice: "dyn.example.net.": thaw dynamic zone
-2010-03-02 10:59:46.950: debug: thaw dynamic zone "dyn.example.net."
-2010-03-02 10:59:46.950: debug: Run cmd "/usr/local/sbin/rndc thaw dyn.example.net."
-2010-03-02 10:59:46.964: debug: Signing completed after 0s.
diff --git a/contrib/zkt-1.1.3/examples/flat/dyn.example.net/zone.db b/contrib/zkt-1.1.3/examples/flat/dyn.example.net/zone.db
deleted file mode 100644
index e0025769..00000000
--- a/contrib/zkt-1.1.3/examples/flat/dyn.example.net/zone.db
+++ /dev/null
@@ -1,135 +0,0 @@
-; File written on Thu Feb 25 23:42:29 2010
-; dnssec_signzone version 9.7.0
-dyn.example.net. 7200 IN SOA ns1.example.net. hostmaster.example.net. (
- 18 ; serial
- 43200 ; refresh (12 hours)
- 1800 ; retry (30 minutes)
- 1209600 ; expire (2 weeks)
- 7200 ; minimum (2 hours)
- )
- 7200 RRSIG SOA 7 3 7200 20100303214229 (
- 20100225214229 30323 dyn.example.net.
- Ih9WgRBKZVDT3zJR9eFcB0VKU0o2G7h13XHZ
- W6j2Jr1H4Db5IC1xiHXq+hI9UMkVQA3fu1Ub
- +tjqAJE+y3hUFg== )
- 7200 NS ns1.example.net.
- 7200 NS ns2.example.net.
- 7200 RRSIG NS 7 3 7200 20100227180048 (
- 20100221180048 30323 dyn.example.net.
- uvTn2MCWjTfS/piH3kKEmF1gPoeN8jIdcFFJ
- 5t3b8RIwjorD81gWIRmzkGDE59hoL4mMvEnO
- 32sAi8qkYhvBOA== )
- 3600 DNSKEY 256 3 7 (
- AwEAAfqG0rb9Ear+Pv7xBg9lc9czF+2YUa8R
- is63E/oRRGQEH5U/ZS3Axz3aOhPFKzAAhjfa
- G3vTNW3Wl4bl4ITFZrk=
- ) ; key id = 30323
- 3600 DNSKEY 257 3 7 (
- AwEAAeqEDYgA5lns1VsMJiZfTWMEguameVmO
- oBYx8s1uLzmS/3APsh1eWCeoBgAjRry1tpM/
- bPowyuygE4H0LpzNQLm9RbjDmpDN8Gwi3AjE
- nG4HCT58TuAVxjiefN+vb1pvyFlAL58YOkuG
- f9tG/NJMNc+XrULAU1ey2dT9Fh+SCVO3
- ) ; key id = 52935
- 3600 RRSIG DNSKEY 7 3 3600 20100227180048 (
- 20100221180048 30323 dyn.example.net.
- je5kBhDdp9b9fjH/lJ1o9WDBL2YxZ+6UNuF9
- zNbeeDlfBHe7XlTGw9MHyvZh46wx2OUmLoGM
- DFhPfIwUwtttUA== )
- 3600 RRSIG DNSKEY 7 3 3600 20100227180048 (
- 20100221180048 52935 dyn.example.net.
- MuyIUCa3XlttWuSnaQegQnRgTrTsx0Mj4EGI
- fwtZs2H3L079Y/brqMvtlIGxtlr9meLg43oo
- jX1w48ilerzf1PwYhUVpFefZTgmClK0h2ej4
- Ho9Qh4/6snesVj06kWsQDkhuVs58zHmhRtEy
- P4YlqP/R1CAk166RhwSmGuSx1O8= )
- 0 NSEC3PARAM 1 0 10 76931F
- 0 RRSIG NSEC3PARAM 7 3 0 20100227180048 (
- 20100221180048 30323 dyn.example.net.
- LGD8bq/sX9yvDUpmyaRczfTshrR6T9HmQ5/a
- MwMSY+5LDAD/YdwtpVF7uNwdMa6ydJFQW37u
- Rma0TxEqKPGPyQ== )
-localhost.dyn.example.net. 7200 IN A 127.0.0.1
- 7200 RRSIG A 7 4 7200 20100227180048 (
- 20100221180048 30323 dyn.example.net.
- SHLL1lIJZaEGKphkFm3NShS6H33mBnwwACkH
- eF3JE5vWwTuT7hffdJlwcahYQfcr3egPv64d
- iyCNYNjdvlJpsg== )
-ns1.dyn.example.net. 7200 IN A 1.0.0.5
- 7200 RRSIG A 7 4 7200 20100227180048 (
- 20100221180048 30323 dyn.example.net.
- 6PF5dGgOJdolEyxrHqyA66BFLrUORQLZvVBw
- 9fX9uGWWKiu6yRR3i4LwIkQ+VelTpCbTsLh4
- gm+rcSMFNeOtxA== )
- 7200 AAAA 2001:db8::53
- 7200 RRSIG AAAA 7 4 7200 20100227180048 (
- 20100221180048 30323 dyn.example.net.
- dk1DfG0y9qjCi3VD4e9B1NGKWEig7q8hFdaR
- 3hElCIzGlflvgHRiE7iTJxDMB+kTA0by4BMZ
- yssUuXP2FMlB2g== )
-ns2.dyn.example.net. 7200 IN A 1.2.0.6
- 7200 RRSIG A 7 4 7200 20100227180048 (
- 20100221180048 30323 dyn.example.net.
- Ei5VGwE7CNBQ7ZOHpyKZXtuC8I7lusZ4d+gx
- MwpLROH+6OSu26x2ScPdwg1qpZ5Mui01ss6O
- IcJL36PRqAM26A== )
-x.dyn.example.net. 7200 IN A 1.2.3.4
- 7200 RRSIG A 7 4 7200 20100227180048 (
- 20100221180048 30323 dyn.example.net.
- ieiExNeDjeucDjtMVj0F9kwIsL0ngZfAmEU/
- /UlYe8/8pg2NzFulOviI09ekgOOnMfcnb4n4
- /pRIkFddCEOt0g== )
-y.dyn.example.net. 7200 IN A 1.2.3.5
- 7200 RRSIG A 7 4 7200 20100227180048 (
- 20100221180048 30323 dyn.example.net.
- NfDUCrArDXCTPrTpiesQYCoZ039YE/KwlN25
- EZ9vOVt6dE2R9KkAWezkdY9zDmJMGTN1XYI/
- vgd56J8B5Y/uQQ== )
-z.dyn.example.net. 7200 IN A 1.2.3.6
- 7200 RRSIG A 7 4 7200 20100227180048 (
- 20100221180048 30323 dyn.example.net.
- VH3BsA8JLlqmL0xkXgXlPXT0xfRcdFy7vPYh
- 27exw16LDbQF15KjkHvUJ+Bkei/SmRa20Dll
- Yy536Dj+ar5ABQ== )
-A54T6DKFVU4QCAFFNJ0KEU0FH0I4OJSN.dyn.example.net. 7200 IN NSEC3 1 0 10 76931F AJHVGTICN6K0VDA53GCHFMT219SRRQLM A RRSIG
- 7200 RRSIG NSEC3 7 4 7200 20100227180048 (
- 20100221180048 30323 dyn.example.net.
- 9BhZcQdLwRPU/Dz38uMis/nCcddyhKEm0Zb+
- Mhh3V3OsGI202cebTaxbwVEbQQOeowpUmf8l
- AmK/cNX7+IS2rw== )
-AJHVGTICN6K0VDA53GCHFMT219SRRQLM.dyn.example.net. 7200 IN NSEC3 1 0 10 76931F FQ7RBG86KRMACA1NAAKP2KQRQALBA0C7 A RRSIG
- 7200 RRSIG NSEC3 7 4 7200 20100227180048 (
- 20100221180048 30323 dyn.example.net.
- lVyEaxejO5qFlyyBp8gYyQnG+DkIm8vofj+B
- SuTxalc2l+TYen1RnSTeeXfMqc9YpGu4SCaG
- Fyznu1K88oUhMg== )
-FQ7RBG86KRMACA1NAAKP2KQRQALBA0C7.dyn.example.net. 7200 IN NSEC3 1 0 10 76931F I7A7A184GGMI35K1E3IR650LKO7NOB5R A AAAA RRSIG
- 7200 RRSIG NSEC3 7 4 7200 20100227180048 (
- 20100221180048 30323 dyn.example.net.
- 577WZnTQemStx+ciON9rEGXAGnU7C0KLjrFL
- VyhocnBnNtxJS8eRMSWvb9XuYCMNhYKOurtt
- Ar4qh4VW1+unmA== )
-I7A7A184GGMI35K1E3IR650LKO7NOB5R.dyn.example.net. 7200 IN NSEC3 1 0 10 76931F IMQ912BREQP1POLAH3RMONG3UED541AS A RRSIG
- 7200 RRSIG NSEC3 7 4 7200 20100227180048 (
- 20100221180048 30323 dyn.example.net.
- +PKntiPlw2om9e0KJX/L2VxSCbxL95eIV2f+
- 5YBMq3npDguHaUiBwan8Vsm+aNsdr1NDDLY/
- HdJzEfVmSNGs7Q== )
-IMQ912BREQP1POLAH3RMONG3UED541AS.dyn.example.net. 7200 IN NSEC3 1 0 10 76931F S3USV4M1HLVJ8F88EDSG8N9PVQRQ20N7 A RRSIG
- 7200 RRSIG NSEC3 7 4 7200 20100227180048 (
- 20100221180048 30323 dyn.example.net.
- smsg35snQ9PpeG2r8ZGxBl44pwSReh/1rIil
- u/n8aa5nKbBpkqtbcc7q1OpUgb1Q7+Tl/wes
- kB6bohsRdrwEJA== )
-S3USV4M1HLVJ8F88EDSG8N9PVQRQ20N7.dyn.example.net. 7200 IN NSEC3 1 0 10 76931F T320G5LC07QE1BLR074KORIJTG9DPTI9 A RRSIG
- 7200 RRSIG NSEC3 7 4 7200 20100227180048 (
- 20100221180048 30323 dyn.example.net.
- XalRIESpdeVK1aNbwu9ym2Spk981Y127rKua
- xsoals0Zn2tTjF9wpOYVGVOto3FcWBbyKD1g
- 69BTRlv634UIOw== )
-T320G5LC07QE1BLR074KORIJTG9DPTI9.dyn.example.net. 7200 IN NSEC3 1 0 10 76931F A54T6DKFVU4QCAFFNJ0KEU0FH0I4OJSN NS SOA RRSIG DNSKEY NSEC3PARAM
- 7200 RRSIG NSEC3 7 4 7200 20100227180048 (
- 20100221180048 30323 dyn.example.net.
- D3xq+CkK/a8YSbh9o8WwWnenjDQ3weVdtZ0x
- i6bOv3iRITOfCRjYgbeIYtjMFb1rZwgCPD40
- JQgGu5mx1TjnGA== )
diff --git a/contrib/zkt-1.1.3/examples/flat/dyn.example.net/zone.db.dsigned b/contrib/zkt-1.1.3/examples/flat/dyn.example.net/zone.db.dsigned
deleted file mode 100644
index 24511a5e..00000000
--- a/contrib/zkt-1.1.3/examples/flat/dyn.example.net/zone.db.dsigned
+++ /dev/null
@@ -1,135 +0,0 @@
-; File written on Tue Mar 2 10:59:46 2010
-; dnssec_signzone version 9.7.0
-dyn.example.net. 7200 IN SOA ns1.example.net. hostmaster.example.net. (
- 19 ; serial
- 43200 ; refresh (12 hours)
- 1800 ; retry (30 minutes)
- 1209600 ; expire (2 weeks)
- 7200 ; minimum (2 hours)
- )
- 7200 RRSIG SOA 7 3 7200 20100308085946 (
- 20100302085946 30323 dyn.example.net.
- eNZruaQkUB/jteZtRkZ957BX65zjXIGaKlkf
- Bq0XW8OgyHYCvJiB7waJYyiWKeQskp0Z90JF
- 34WMUztuTvWUTA== )
- 7200 NS ns1.example.net.
- 7200 NS ns2.example.net.
- 7200 RRSIG NS 7 3 7200 20100308085946 (
- 20100302085946 30323 dyn.example.net.
- obQoowLwuBixnopoSvUsXvwveB7Pqmeblt2S
- 5SXo7ztPNcM1hTdWfIEwRDpQ2DhOfGYi0Ov0
- xEmMlPheVZkW6g== )
- 3600 DNSKEY 256 3 7 (
- AwEAAfqG0rb9Ear+Pv7xBg9lc9czF+2YUa8R
- is63E/oRRGQEH5U/ZS3Axz3aOhPFKzAAhjfa
- G3vTNW3Wl4bl4ITFZrk=
- ) ; key id = 30323
- 3600 DNSKEY 257 3 7 (
- AwEAAeqEDYgA5lns1VsMJiZfTWMEguameVmO
- oBYx8s1uLzmS/3APsh1eWCeoBgAjRry1tpM/
- bPowyuygE4H0LpzNQLm9RbjDmpDN8Gwi3AjE
- nG4HCT58TuAVxjiefN+vb1pvyFlAL58YOkuG
- f9tG/NJMNc+XrULAU1ey2dT9Fh+SCVO3
- ) ; key id = 52935
- 3600 RRSIG DNSKEY 7 3 3600 20100308085946 (
- 20100302085946 30323 dyn.example.net.
- 4xQy+G1g8IHVp3NTxHtUIaz/G+h6+ce4SRum
- bftLFS9rXV13wSa761J1YoDYx8lj98IDBuED
- 94980qJWjgNfdw== )
- 3600 RRSIG DNSKEY 7 3 3600 20100308085946 (
- 20100302085946 52935 dyn.example.net.
- VmL0mzUoBzSX+5gB/9MsHUFWBbHrVoyMUjnw
- mR7FyrZMfNgz4rf6J2bZ8a8zYGvSXEBrangQ
- kkPlxuvNxzn2s+Ji+crfUNa2ZFzRKA8BBczU
- 0WLETC5QKonjiAzofCcP15OPN4H18y9WMfE/
- wU0oPhcd8d31Ckf2jPaSdTS8NMk= )
- 0 NSEC3PARAM 1 0 10 76931F
- 0 RRSIG NSEC3PARAM 7 3 0 20100308085946 (
- 20100302085946 30323 dyn.example.net.
- GSTGjHni3oZ1Nod57kXFkxcOiKXTzjfJ0PDy
- hjDfzYS1QKtKA6LzkaBzyl5HK+Yy3DOcep7G
- dj7VJG8bsa9S/A== )
-localhost.dyn.example.net. 7200 IN A 127.0.0.1
- 7200 RRSIG A 7 4 7200 20100308085946 (
- 20100302085946 30323 dyn.example.net.
- N5t+OxMeH2rozoIM1ZtXUpnpSep3Qd1J/KUE
- LjkisP6KvmwVhkbdcv44KbgS5aR16RJOlFdW
- +ilc8QpZ4bvqlQ== )
-ns1.dyn.example.net. 7200 IN A 1.0.0.5
- 7200 RRSIG A 7 4 7200 20100308085946 (
- 20100302085946 30323 dyn.example.net.
- 2DoRBkfIQEBmEeo2Z02SA329ebgp2lFQ2Ykl
- Qe5S+J6ZMjVdZyjW8XqBCiqEg6fNbQyUFn3X
- pSVvabUPjJpHWA== )
- 7200 AAAA 2001:db8::53
- 7200 RRSIG AAAA 7 4 7200 20100308085946 (
- 20100302085946 30323 dyn.example.net.
- XD+JHAergnT3NDQqEUGv52GNdcF1U1SitccE
- y5iL4Dk0qVu+uEA4TVupnMhwOK+wl8759Yw/
- SF6h6CzzKx0Eiw== )
-ns2.dyn.example.net. 7200 IN A 1.2.0.6
- 7200 RRSIG A 7 4 7200 20100308085946 (
- 20100302085946 30323 dyn.example.net.
- S+CpXVolhedS2bFTNdoNAPd+T2Bi/5iKVcKJ
- 9S27k/tpifBNVjAQPktM9iya60upXxuOkHqt
- /uuF4iTlh9Yukw== )
-x.dyn.example.net. 7200 IN A 1.2.3.4
- 7200 RRSIG A 7 4 7200 20100308085946 (
- 20100302085946 30323 dyn.example.net.
- Fb+8g0K+/6ZkXctNOprGKyJC1Y5pFizibI3o
- k2E6aDN8hUJ5FK/1fkRl5IQ7HDpAUZviWaQp
- j9tfr9r9xW0bMw== )
-y.dyn.example.net. 7200 IN A 1.2.3.5
- 7200 RRSIG A 7 4 7200 20100308085946 (
- 20100302085946 30323 dyn.example.net.
- S1l/dM/Ez91B4Py7mI/GESjgqccGIwi9clyc
- Vj3S40uF4dGaAgxoCDS0pMvyS0k7ir0g1qbK
- /csopbL0wHSaVg== )
-z.dyn.example.net. 7200 IN A 1.2.3.6
- 7200 RRSIG A 7 4 7200 20100308085946 (
- 20100302085946 30323 dyn.example.net.
- SgorWJQS6SiDvv6KRmWQEcUaaCkMCHZDcSMx
- JiOT84ygkUBCzwTykQskoNtbUSIfAASU3lE7
- e31RZotcxlkirQ== )
-A54T6DKFVU4QCAFFNJ0KEU0FH0I4OJSN.dyn.example.net. 7200 IN NSEC3 1 0 10 76931F AJHVGTICN6K0VDA53GCHFMT219SRRQLM A RRSIG
- 7200 RRSIG NSEC3 7 4 7200 20100308085946 (
- 20100302085946 30323 dyn.example.net.
- hp879kZpD/Qe+d4FoanRewI4CXMuTOMcao5G
- S7quT3mr+Mgi1nrSSz+/IBhlzCipziFjY42a
- TNt8FoYo9Z8irw== )
-AJHVGTICN6K0VDA53GCHFMT219SRRQLM.dyn.example.net. 7200 IN NSEC3 1 0 10 76931F FQ7RBG86KRMACA1NAAKP2KQRQALBA0C7 A RRSIG
- 7200 RRSIG NSEC3 7 4 7200 20100308085946 (
- 20100302085946 30323 dyn.example.net.
- 1MC5bqNXkVG4gaFKJQJBG7v4ZKOht6EJEkUZ
- nAwTF2Nw5mWFFMBbOwVMtbJFA+ewHrebB6cK
- FitvPi3yLDW8aA== )
-FQ7RBG86KRMACA1NAAKP2KQRQALBA0C7.dyn.example.net. 7200 IN NSEC3 1 0 10 76931F I7A7A184GGMI35K1E3IR650LKO7NOB5R A AAAA RRSIG
- 7200 RRSIG NSEC3 7 4 7200 20100308085946 (
- 20100302085946 30323 dyn.example.net.
- 7Y+yhH11EojLDu43C8dCuD6D0F4RZYUt9J0+
- KUfRVUMhftYsMl6G2qgkfsgJE+FG1Nj/nI+b
- pO7VSJGfV5Za4A== )
-I7A7A184GGMI35K1E3IR650LKO7NOB5R.dyn.example.net. 7200 IN NSEC3 1 0 10 76931F IMQ912BREQP1POLAH3RMONG3UED541AS A RRSIG
- 7200 RRSIG NSEC3 7 4 7200 20100308085946 (
- 20100302085946 30323 dyn.example.net.
- K0ggT6yH7z1YshOb08se84cRWvWWeQFdMTDG
- XhA/2UEamfE1NHetPuYzJZQdrVPeX3tgjCjS
- Jmb3YuSE1XD3zQ== )
-IMQ912BREQP1POLAH3RMONG3UED541AS.dyn.example.net. 7200 IN NSEC3 1 0 10 76931F S3USV4M1HLVJ8F88EDSG8N9PVQRQ20N7 A RRSIG
- 7200 RRSIG NSEC3 7 4 7200 20100308085946 (
- 20100302085946 30323 dyn.example.net.
- mQoG3VBXfi7u2+zlmJttsGaStP3WvDPDQ99T
- l2ha4zmpZPd1JUKHMXYTLTlUuWAq7BcS9MUn
- hfhXcmSEr96K1Q== )
-S3USV4M1HLVJ8F88EDSG8N9PVQRQ20N7.dyn.example.net. 7200 IN NSEC3 1 0 10 76931F T320G5LC07QE1BLR074KORIJTG9DPTI9 A RRSIG
- 7200 RRSIG NSEC3 7 4 7200 20100308085946 (
- 20100302085946 30323 dyn.example.net.
- 0/TWe9HMZiA+yW0oLHkYKeIXrrXU/1ec8XDy
- cbZM1IGPjHlMEjKKorZgx983FuiyKFLa97+3
- bB3abnKo7e2yRQ== )
-T320G5LC07QE1BLR074KORIJTG9DPTI9.dyn.example.net. 7200 IN NSEC3 1 0 10 76931F A54T6DKFVU4QCAFFNJ0KEU0FH0I4OJSN NS SOA RRSIG DNSKEY NSEC3PARAM
- 7200 RRSIG NSEC3 7 4 7200 20100308085946 (
- 20100302085946 30323 dyn.example.net.
- BXRjHUGEmoz1cMAXSCmfFVe6+qCYVyivjeAT
- 7hPcfB8iS2ck8Sq/CjOAKBu0BeSBim+9Oduu
- kKNL3thgyMPcug== )
diff --git a/contrib/zkt-1.1.3/examples/flat/dyn.example.net/zone.org b/contrib/zkt-1.1.3/examples/flat/dyn.example.net/zone.org
deleted file mode 100644
index c536fc87..00000000
--- a/contrib/zkt-1.1.3/examples/flat/dyn.example.net/zone.org
+++ /dev/null
@@ -1,30 +0,0 @@
-;-----------------------------------------------------------------
-;
-; @(#) dyn.example.net/zone.org
-;
-;-----------------------------------------------------------------
-
-$TTL 7200
-
-@ IN SOA ns1.example.net. hostmaster.example.net. (
- 1 ; Serial
- 43200 ; Refresh
- 1800 ; Retry
- 2W ; Expire
- 7200 ) ; Minimum
-
- IN NS ns1.example.net.
- IN NS ns2.example.net.
-
-ns1 IN A 1.0.0.5
- IN AAAA 2001:db8::53
-ns2 IN A 1.2.0.6
-
-localhost IN A 127.0.0.1
-
-x IN A 1.2.3.4
-y IN A 1.2.3.5
-z IN A 1.2.3.6
-
-$INCLUDE dnskey.db
-
diff --git a/contrib/zkt-1.1.3/examples/flat/example.net/dnskey.db b/contrib/zkt-1.1.3/examples/flat/example.net/dnskey.db
deleted file mode 100644
index 3bf01614..00000000
--- a/contrib/zkt-1.1.3/examples/flat/example.net/dnskey.db
+++ /dev/null
@@ -1,33 +0,0 @@
-;
-; !!! Don't edit this file by hand.
-; !!! It will be generated by zkt-signer.
-;
-; Last generation time Nov 17 2014 19:14:01
-;
-
-; *** List of Key Signing Keys ***
-; example.net. tag=44671 algo=RSASHA256 generated Nov 14 2014 18:09:16
-example.net. 3600 IN DNSKEY 257 3 8 (
- AwEAAQ5RiqQEKys2xlo5nK3n9tnWeGg/tHSTbaFw6AN1QPLlaEVLNXDa
- YKcpefu6ewNamaInrjBrkkbqRnwKTuLCwJ9aA/hyFzocCOPh+he9dEQH
- bRTKDdTkjD3PqkOK97a+s1grWIdkRcceT3MXEsAwyjlasXPRKt/4v1sq
- S7592eyo6wTcbeaoPYo6KMQLfcA9AHso9LBaRpqv7GlSjl5IV51mcU8=
- ) ; key id = 44671
-
-; *** List of Zone Signing Keys ***
-; example.net. tag=7929 algo=RSASHA256 generated Nov 14 2014 18:09:16
-example.net. 3600 IN DNSKEY 256 3 8 (
- AwEAAaFO1yW7cx3/4SBRganmyOEs2eIeAE25CgXYrtLALzFdgi+gRfl+
- QEOzMZBk/LmgKFcgp4GfgtuzKA08VGNmLUEGI+UBSP+DUezQfK/lxPCX
- uRMh0BJgAjnlo+jGaI2fpfKXBp+5uLiY3pbkdm6LiaJb/s4v0DJjglGW
- iiPMIxyR
- ) ; key id = 7929
-
-; example.net. tag=2253 algo=RSASHA256 generated Nov 14 2014 18:09:16
-example.net. 3600 IN DNSKEY 256 3 8 (
- AwEAAZF8FdZfjdp4pyHk53/qvnzROy2lhF0cJ0XbRaIgeIYHYMIUmMLr
- sazBQ7/3ZdFoQjgEWz2BbKyfroJmE+VrCc1dBJ50PJUm3vcBbUwMgy4y
- Xq3PtmwKzlr3YGMUgE31cByog0QRnW6myNdEfDLf74yxRiPgIwk1rEmI
- YFUI4x69
- ) ; key id = 2253
-
diff --git a/contrib/zkt-1.1.3/examples/flat/example.net/dnssec.conf b/contrib/zkt-1.1.3/examples/flat/example.net/dnssec.conf
deleted file mode 100644
index 52799693..00000000
--- a/contrib/zkt-1.1.3/examples/flat/example.net/dnssec.conf
+++ /dev/null
@@ -1,5 +0,0 @@
-Key_Algo: RSASHA256 # (Algorithm ID 8)
-NSEC3: OPTOUT
-ZSKpermanent: true
-DependFiles: "zone.localhost, zone.hosts"
-MaximumTTL: 2h # (7200 seconds)
diff --git a/contrib/zkt-1.1.3/examples/flat/example.net/zktlog-example.net. b/contrib/zkt-1.1.3/examples/flat/example.net/zktlog-example.net.
deleted file mode 100644
index cc04a734..00000000
--- a/contrib/zkt-1.1.3/examples/flat/example.net/zktlog-example.net.
+++ /dev/null
@@ -1,687 +0,0 @@
-2010-02-06 00:26:54.533: debug: Check RFC5011 status
-2010-02-06 00:26:54.533: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-06 00:26:54.533: debug: Check KSK status
-2010-02-06 00:26:54.533: debug: Check ZSK status
-2010-02-06 00:26:54.533: debug: Re-signing not necessary!
-2010-02-06 00:26:54.533: debug: Check if there is a parent file to copy
-2010-02-06 00:29:31.291: debug: Check RFC5011 status
-2010-02-06 00:29:31.291: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-06 00:29:31.291: debug: Check KSK status
-2010-02-06 00:29:31.292: debug: Check ZSK status
-2010-02-06 00:29:31.292: debug: Re-signing not necessary!
-2010-02-06 00:29:31.292: debug: Check if there is a parent file to copy
-2010-02-06 00:40:35.043: debug: Check RFC5011 status
-2010-02-06 00:40:35.043: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-06 00:40:35.043: debug: Check KSK status
-2010-02-06 00:40:35.043: debug: Check ZSK status
-2010-02-06 00:40:35.043: debug: Re-signing not necessary!
-2010-02-06 00:40:35.043: debug: Check if there is a parent file to copy
-2010-02-06 00:52:55.403: debug: Check RFC5011 status
-2010-02-06 00:52:55.403: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-06 00:52:55.403: debug: Check KSK status
-2010-02-06 00:52:55.403: debug: Check ZSK status
-2010-02-06 00:52:55.403: debug: Re-signing not necessary!
-2010-02-06 00:52:55.403: debug: Check if there is a parent file to copy
-2010-02-07 13:53:48.304: debug: Check RFC5011 status
-2010-02-07 13:53:48.304: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-07 13:53:48.304: debug: Check KSK status
-2010-02-07 13:53:48.304: debug: Check ZSK status
-2010-02-07 13:53:48.304: debug: Re-signing not necessary!
-2010-02-07 13:53:48.304: debug: Check if there is a parent file to copy
-2010-02-07 13:54:03.466: debug: Check RFC5011 status
-2010-02-07 13:54:03.466: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-07 13:54:03.466: debug: Check KSK status
-2010-02-07 13:54:03.466: debug: Check ZSK status
-2010-02-07 13:54:03.466: debug: Re-signing not necessary!
-2010-02-07 13:54:03.466: debug: Check if there is a parent file to copy
-2010-02-07 13:54:08.019: debug: Check RFC5011 status
-2010-02-07 13:54:08.019: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-07 13:54:08.020: debug: Check KSK status
-2010-02-07 13:54:08.020: debug: Check ZSK status
-2010-02-07 13:54:08.020: debug: Re-signing necessary: Option -f
-2010-02-07 13:54:08.020: notice: "example.net.": re-signing triggered: Option -f
-2010-02-07 13:54:08.020: debug: Writing key file "./example.net/dnskey.db"
-2010-02-07 13:54:08.020: debug: Incrementing serial number in file "./example.net/zone.db"
-2010-02-07 13:54:08.020: debug: Signing zone "example.net."
-2010-02-07 13:54:08.021: debug: Run cmd "cd ./example.net; /usr/local/sbin/dnssec-signzone -n 1 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2010-02-07 13:54:08.125: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2010-02-07 13:54:08.125: debug: Signing completed after 0s.
-2010-02-07 13:54:08.125: notice: "example.net.": distribution triggered
-2010-02-07 13:54:08.125: debug: Distribute zone "example.net."
-2010-02-07 13:54:08.125: debug: Run cmd "./dist.sh distribute example.net. ./example.net/zone.db.signed "
-2010-02-07 13:54:08.129: debug: ./dist.sh distribute return: "scp ./example.net/zone.db.signed localhost:/var/named/example.net./"
-2010-02-07 13:54:08.129: notice: "example.net.": reload triggered
-2010-02-07 13:54:08.129: debug: Reload zone "example.net."
-2010-02-07 13:54:08.129: debug: Run cmd "./dist.sh reload example.net. ./example.net/zone.db.signed "
-2010-02-07 13:54:08.139: debug: ./dist.sh reload return: "rndc reload example.net. "
-2010-02-07 14:06:27.670: debug: Check RFC5011 status
-2010-02-07 14:06:27.670: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-07 14:06:27.670: debug: Check KSK status
-2010-02-07 14:06:27.670: debug: Check ZSK status
-2010-02-07 14:06:27.670: debug: Re-signing not necessary!
-2010-02-07 14:06:27.671: debug: Check if there is a parent file to copy
-2010-02-07 14:06:33.753: debug: Check RFC5011 status
-2010-02-07 14:06:33.753: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-07 14:06:33.753: debug: Check KSK status
-2010-02-07 14:06:33.753: debug: Check ZSK status
-2010-02-07 14:06:33.753: debug: Re-signing necessary: Option -f
-2010-02-07 14:06:33.753: notice: "example.net.": re-signing triggered: Option -f
-2010-02-07 14:06:33.753: debug: Writing key file "./example.net/dnskey.db"
-2010-02-07 14:06:33.754: debug: Incrementing serial number in file "./example.net/zone.db"
-2010-02-07 14:06:33.754: debug: Signing zone "example.net."
-2010-02-07 14:06:33.754: debug: Run cmd "cd ./example.net; /usr/local/sbin/dnssec-signzone -n 1 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2010-02-07 14:06:33.790: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2010-02-07 14:06:33.790: debug: Signing completed after 0s.
-2010-02-07 14:06:33.790: notice: "example.net.": distribution triggered
-2010-02-07 14:06:33.790: debug: Distribute zone "example.net."
-2010-02-07 14:06:33.790: debug: Run cmd "./dist.sh distribute example.net. ./example.net/zone.db.signed "
-2010-02-07 14:06:33.794: debug: ./dist.sh distribute return: "scp ./example.net/zone.db.signed localhost:/var/named/example.net./"
-2010-02-07 14:06:33.794: notice: "example.net.": reload triggered
-2010-02-07 14:06:33.794: debug: Reload zone "example.net."
-2010-02-07 14:06:33.794: debug: Run cmd "./dist.sh reload example.net. ./example.net/zone.db.signed "
-2010-02-07 14:06:33.797: debug: ./dist.sh reload return: "rndc reload example.net. "
-2010-02-21 12:50:43.587: debug: Check RFC5011 status
-2010-02-21 12:50:43.587: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-21 12:50:43.587: debug: Check KSK status
-2010-02-21 12:50:43.587: debug: Check ZSK status
-2010-02-21 12:50:43.587: debug: Lifetime(1209600 +/-150 sec) of active key 33002 exceeded (2394625 sec)
-2010-02-21 12:50:43.587: debug: ->depreciate it
-2010-02-21 12:50:43.587: debug: ->activate published key 29240
-2010-02-21 12:50:43.587: notice: "example.net.": lifetime of zone signing key 33002 exceeded: ZSK rollover done
-2010-02-21 12:50:43.587: debug: New key for publishing needed
-2010-02-21 12:50:43.658: debug: ->creating new key 5525
-2010-02-21 12:50:43.658: info: "example.net.": new key 5525 generated for publishing
-2010-02-21 12:50:43.658: debug: Re-signing necessary: Modfied zone key set
-2010-02-21 12:50:43.658: notice: "example.net.": re-signing triggered: Modfied zone key set
-2010-02-21 12:50:43.658: debug: Writing key file "./example.net/dnskey.db"
-2010-02-21 12:50:43.665: debug: Incrementing serial number in file "./example.net/zone.db"
-2010-02-21 12:50:43.665: debug: Signing zone "example.net."
-2010-02-21 12:50:43.665: debug: Run cmd "cd ./example.net; /usr/local/sbin/dnssec-signzone -n 1 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2010-02-21 12:50:43.733: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2010-02-21 12:50:43.733: debug: Signing completed after 0s.
-2010-02-21 12:50:51.205: debug: Check RFC5011 status
-2010-02-21 12:50:51.205: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-21 12:50:51.205: debug: Check KSK status
-2010-02-21 12:50:51.205: debug: Check ZSK status
-2010-02-21 12:50:51.205: debug: Re-signing not necessary!
-2010-02-21 12:50:51.205: debug: Check if there is a parent file to copy
-2010-02-21 12:51:23.497: debug: Check RFC5011 status
-2010-02-21 12:51:23.497: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-21 12:51:23.497: debug: Check KSK status
-2010-02-21 12:51:23.497: debug: Check ZSK status
-2010-02-21 12:51:23.497: debug: Re-signing not necessary!
-2010-02-21 12:51:23.497: debug: Check if there is a parent file to copy
-2010-02-21 19:16:18.594: debug: Check RFC5011 status
-2010-02-21 19:16:18.594: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-21 19:16:18.594: debug: Check KSK status
-2010-02-21 19:16:18.594: debug: Check ZSK status
-2010-02-21 19:16:18.594: debug: Re-signing not necessary!
-2010-02-21 19:16:18.594: debug: Check if there is a parent file to copy
-2010-02-21 19:32:11.378: debug: Check RFC5011 status
-2010-02-21 19:32:11.378: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-21 19:32:11.378: debug: Check KSK status
-2010-02-21 19:32:11.378: debug: Check ZSK status
-2010-02-21 19:32:11.378: debug: Re-signing not necessary!
-2010-02-21 19:32:11.378: debug: Check if there is a parent file to copy
-2010-02-21 19:32:15.982: debug: Check RFC5011 status
-2010-02-21 19:32:15.982: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-21 19:32:15.982: debug: Check KSK status
-2010-02-21 19:32:15.982: debug: Check ZSK status
-2010-02-21 19:32:15.982: debug: Re-signing necessary: Option -f
-2010-02-21 19:32:15.982: notice: "example.net.": re-signing triggered: Option -f
-2010-02-21 19:32:15.982: debug: Writing key file "./example.net/dnskey.db"
-2010-02-21 19:32:15.982: debug: Incrementing serial number in file "./example.net/zone.db"
-2010-02-21 19:32:15.982: debug: Signing zone "example.net."
-2010-02-21 19:32:15.982: debug: Run cmd "cd ./example.net; /usr/local/sbin/dnssec-signzone -n 1 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2010-02-21 19:32:16.019: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2010-02-21 19:32:16.019: debug: Signing completed after 1s.
-2010-02-21 19:32:32.232: debug: Check RFC5011 status
-2010-02-21 19:32:32.232: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-21 19:32:32.233: debug: Check KSK status
-2010-02-21 19:32:32.233: debug: Check ZSK status
-2010-02-21 19:32:32.233: debug: Re-signing necessary: Option -f
-2010-02-21 19:32:32.233: notice: "example.net.": re-signing triggered: Option -f
-2010-02-21 19:32:32.233: debug: Writing key file "./example.net/dnskey.db"
-2010-02-21 19:32:32.233: debug: Incrementing serial number in file "./example.net/zone.db"
-2010-02-21 19:32:32.233: debug: Signing zone "example.net."
-2010-02-21 19:32:32.233: debug: Run cmd "cd ./example.net; /usr/local/sbin/dnssec-signzone -n 1 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2010-02-21 19:32:32.273: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2010-02-21 19:32:32.273: debug: Signing completed after 0s.
-2010-02-25 00:12:27.060: debug: Check RFC5011 status
-2010-02-25 00:12:27.060: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-25 00:12:27.060: debug: Check KSK status
-2010-02-25 00:12:27.060: debug: Check ZSK status
-2010-02-25 00:12:27.060: debug: Lifetime(29100 sec) of depreciated key 33002 exceeded (300104 sec)
-2010-02-25 00:12:27.060: info: "example.net.": old ZSK 33002 removed
-2010-02-25 00:12:27.081: debug: ->remove it
-2010-02-25 00:12:27.082: debug: Re-signing necessary: Modfied zone key set
-2010-02-25 00:12:27.082: notice: "example.net.": re-signing triggered: Modfied zone key set
-2010-02-25 00:12:27.082: debug: Writing key file "./example.net/dnskey.db"
-2010-02-25 00:12:27.086: debug: Incrementing serial number in file "./example.net/zone.db"
-2010-02-25 00:12:27.086: debug: Signing zone "example.net."
-2010-02-25 00:12:27.086: debug: Run cmd "cd ./example.net; /usr/local/sbin/dnssec-signzone -n 1 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2010-02-25 00:12:27.173: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2010-02-25 00:12:27.174: debug: Signing completed after 0s.
-2010-02-25 23:42:21.013: debug: Check RFC5011 status
-2010-02-25 23:42:21.013: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-02-25 23:42:21.013: debug: Check KSK status
-2010-02-25 23:42:21.013: debug: Check ZSK status
-2010-02-25 23:42:21.013: debug: Re-signing not necessary!
-2010-02-25 23:42:21.013: debug: Check if there is a parent file to copy
-2010-03-02 10:59:12.416: debug: Check RFC5011 status
-2010-03-02 10:59:12.416: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-03-02 10:59:12.416: debug: Check KSK status
-2010-03-02 10:59:12.416: debug: Check ZSK status
-2010-03-02 10:59:12.416: debug: Re-signing necessary: re-signing interval (2d) reached
-2010-03-02 10:59:12.416: notice: "example.net.": re-signing triggered: re-signing interval (2d) reached
-2010-03-02 10:59:12.416: debug: Writing key file "./example.net/dnskey.db"
-2010-03-02 10:59:12.449: debug: Incrementing serial number in file "./example.net/zone.db"
-2010-03-02 10:59:12.449: debug: Signing zone "example.net."
-2010-03-02 10:59:12.450: debug: Run cmd "cd ./example.net; /usr/local/sbin/dnssec-signzone -n 1 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2010-03-02 10:59:12.530: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2010-03-02 10:59:12.530: debug: Signing completed after 0s.
-2010-03-03 23:22:00.415: debug: Check RFC5011 status
-2010-03-03 23:22:00.415: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-03-03 23:22:00.415: debug: Check KSK status
-2010-03-03 23:22:00.415: debug: Check ZSK status
-2010-03-03 23:22:00.416: debug: Re-signing not necessary!
-2010-03-03 23:22:00.416: debug: Check if there is a parent file to copy
-2010-03-08 23:11:50.170: debug: Check RFC5011 status
-2010-03-08 23:11:50.170: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-03-08 23:11:50.170: debug: Check KSK status
-2010-03-08 23:11:50.170: debug: Check ZSK status
-2010-03-08 23:11:50.171: debug: Lifetime(1209600 +/-150 sec) of active key 29240 exceeded (1333267 sec)
-2010-03-08 23:11:50.171: debug: ->depreciate it
-2010-03-08 23:11:50.171: debug: ->activate published key 5525
-2010-03-08 23:11:50.171: notice: "example.net.": lifetime of zone signing key 29240 exceeded: ZSK rollover done
-2010-03-08 23:11:50.171: debug: New key for publishing needed
-2010-03-08 23:11:50.228: debug: ->creating new key 21482
-2010-03-08 23:11:50.228: info: "example.net.": new key 21482 generated for publishing
-2010-03-08 23:11:50.228: debug: Re-signing necessary: Modfied zone key set
-2010-03-08 23:11:50.228: notice: "example.net.": re-signing triggered: Modfied zone key set
-2010-03-08 23:11:50.228: debug: Writing key file "././example.net/dnskey.db"
-2010-03-08 23:11:50.235: debug: Incrementing serial number in file "././example.net/zone.db"
-2010-03-08 23:11:50.235: debug: Signing zone "example.net."
-2010-03-08 23:11:50.235: debug: Run cmd "cd ././example.net; /usr/local/sbin/dnssec-signzone -n 1 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2010-03-08 23:11:50.294: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2010-03-08 23:11:50.294: debug: Signing completed after 0s.
-2010-03-08 23:12:56.212: debug: Check RFC5011 status
-2010-03-08 23:12:56.212: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-03-08 23:12:56.212: debug: Check KSK status
-2010-03-08 23:12:56.212: debug: Check ZSK status
-2010-03-08 23:12:56.212: debug: Re-signing necessary: Modfied zone key set
-2010-03-08 23:12:56.212: notice: "example.net.": re-signing triggered: Modfied zone key set
-2010-03-08 23:12:56.212: debug: Writing key file "././example.net/dnskey.db"
-2010-03-08 23:12:56.213: debug: Incrementing serial number in file "././example.net/zone.db"
-2010-03-08 23:12:56.213: debug: Signing zone "example.net."
-2010-03-08 23:12:56.213: debug: Run cmd "cd ././example.net; /usr/local/sbin/dnssec-signzone -n 1 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2010-03-08 23:12:56.278: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2010-03-08 23:12:56.279: debug: Signing completed after 0s.
-2010-03-08 23:13:36.984: debug: Check RFC5011 status
-2010-03-08 23:13:36.984: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-03-08 23:13:36.984: debug: Check KSK status
-2010-03-08 23:13:36.984: debug: Check ZSK status
-2010-03-08 23:13:36.985: debug: Re-signing not necessary!
-2010-03-08 23:13:36.985: debug: Check if there is a parent file to copy
-2010-03-08 23:18:52.287: debug: Check RFC5011 status
-2010-03-08 23:18:52.287: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-03-08 23:18:52.287: debug: Check KSK status
-2010-03-08 23:18:52.287: debug: Check ZSK status
-2010-03-08 23:18:52.287: debug: Re-signing not necessary!
-2010-03-08 23:18:52.287: debug: Check if there is a parent file to copy
-2010-03-11 23:46:35.831: debug: Check RFC5011 status
-2010-03-11 23:46:35.831: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-03-11 23:46:35.831: debug: Check KSK status
-2010-03-11 23:46:35.831: debug: Check ZSK status
-2010-03-11 23:46:35.831: debug: Lifetime(29100 sec) of depreciated key 29240 exceeded (261285 sec)
-2010-03-11 23:46:35.831: info: "example.net.": old ZSK 29240 removed
-2010-03-11 23:46:35.832: debug: ->remove it
-2010-03-11 23:46:35.832: debug: Re-signing necessary: Modfied zone key set
-2010-03-11 23:46:35.832: notice: "example.net.": re-signing triggered: Modfied zone key set
-2010-03-11 23:46:35.832: debug: Writing key file "./example.net/dnskey.db"
-2010-03-11 23:46:35.841: debug: Incrementing serial number in file "./example.net/zone.db"
-2010-03-11 23:46:35.841: debug: Signing zone "example.net."
-2010-03-11 23:46:35.841: debug: Run cmd "cd ./example.net; /usr/local/sbin/dnssec-signzone -n 1 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2010-03-11 23:46:35.929: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2010-03-11 23:46:35.929: debug: Signing completed after 0s.
-2010-03-11 23:52:33.132: debug: Check RFC5011 status
-2010-03-11 23:52:33.132: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-03-11 23:52:33.133: debug: Check KSK status
-2010-03-11 23:52:33.133: debug: No active KSK found: generate new one
-2010-03-11 23:52:33.374: info: "example.net.": generated new KSK 8406
-2010-03-11 23:52:33.374: debug: Check ZSK status
-2010-03-11 23:52:33.374: debug: No active ZSK found: generate new one
-2010-03-11 23:52:33.400: info: "example.net.": generated new ZSK 36257
-2010-03-11 23:52:33.400: debug: Re-signing necessary: Modfied zone key set
-2010-03-11 23:52:33.400: notice: "example.net.": re-signing triggered: Modfied zone key set
-2010-03-11 23:52:33.400: debug: Writing key file "./example.net/dnskey.db"
-2010-03-11 23:52:33.400: debug: Incrementing serial number in file "./example.net/zone.db"
-2010-03-11 23:52:33.400: debug: Signing zone "example.net."
-2010-03-11 23:52:33.400: debug: Run cmd "cd ./example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -A -3 69AE05 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2010-03-11 23:52:33.408: debug: Cmd dnssec-signzone return: "dnssec-signzone: fatal: NSEC3 generation requested with NSEC only DNSKEY"
-2010-03-11 23:52:33.408: error: "example.net.": signing failed!
-2010-03-11 23:53:27.856: debug: Check RFC5011 status
-2010-03-11 23:53:27.856: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-03-11 23:53:27.856: debug: Check KSK status
-2010-03-11 23:53:27.856: debug: Check ZSK status
-2010-03-11 23:53:27.856: debug: Re-signing necessary: Modified keys
-2010-03-11 23:53:27.856: notice: "example.net.": re-signing triggered: Modified keys
-2010-03-11 23:53:27.856: debug: Writing key file "./example.net/dnskey.db"
-2010-03-11 23:53:27.856: debug: Incrementing serial number in file "./example.net/zone.db"
-2010-03-11 23:53:27.856: debug: Signing zone "example.net."
-2010-03-11 23:53:27.856: debug: Run cmd "cd ./example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -A -3 67AA7F -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2010-03-11 23:53:27.920: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2010-03-11 23:53:27.920: debug: Signing completed after 0s.
-2010-07-05 08:15:24.179: debug: Check RFC5011 status
-2010-07-05 08:15:24.179: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-07-05 08:15:24.179: debug: Check KSK status
-2010-07-05 08:15:24.179: warning: "example.net.": lifetime of key signing key 8406 exceeded since 4w5d12h49m44s
-2010-07-05 08:15:24.179: debug: Check ZSK status
-2010-07-05 08:15:24.179: debug: Lifetime(1209600 +/-150 sec) of active key 36257 exceeded (8081384 sec)
-2010-07-05 08:15:24.179: debug: ->waiting for published key
-2010-07-05 08:15:24.179: notice: "example.net.": lifetime of zone signing key 36257 exceeded since 11w2d12h49m44s: ZSK rollover deferred: waiting for published key
-2010-07-05 08:15:24.179: debug: New key for publishing needed
-2010-07-05 08:15:24.278: debug: ->creating new key 48476
-2010-07-05 08:15:24.278: info: "example.net.": new key 48476 generated for publishing
-2010-07-05 08:15:24.278: debug: Re-signing necessary: Modfied zone key set
-2010-07-05 08:15:24.278: notice: "example.net.": re-signing triggered: Modfied zone key set
-2010-07-05 08:15:24.278: debug: Writing key file "./example.net/dnskey.db"
-2010-07-05 08:15:24.278: debug: Incrementing serial number in file "./example.net/zone.db"
-2010-07-05 08:15:24.278: debug: Signing zone "example.net."
-2010-07-05 08:15:24.278: debug: Run cmd "cd ./example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -A -3 5816F0 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2010-07-05 08:15:24.315: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2010-07-05 08:15:24.315: debug: Signing completed after 0s.
-2010-07-05 08:15:28.174: debug: Check RFC5011 status
-2010-07-05 08:15:28.174: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-07-05 08:15:28.174: debug: Check KSK status
-2010-07-05 08:15:28.174: warning: "example.net.": lifetime of key signing key 8406 exceeded since 4w5d12h49m48s
-2010-07-05 08:15:28.174: debug: Check ZSK status
-2010-07-05 08:15:28.174: debug: Lifetime(1209600 +/-150 sec) of active key 36257 exceeded (8081388 sec)
-2010-07-05 08:15:28.174: debug: ->waiting for published key
-2010-07-05 08:15:28.174: notice: "example.net.": lifetime of zone signing key 36257 exceeded since 11w2d12h49m48s: ZSK rollover deferred: waiting for published key
-2010-07-05 08:15:28.174: debug: Re-signing not necessary!
-2010-07-05 08:15:28.174: debug: Check if there is a parent file to copy
-2010-07-05 08:15:58.502: debug: Check RFC5011 status
-2010-07-05 08:15:58.502: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-07-05 08:15:58.503: debug: Check KSK status
-2010-07-05 08:15:58.503: warning: "example.net.": lifetime of key signing key 8406 exceeded since 4w5d12h50m18s
-2010-07-05 08:15:58.503: debug: Check ZSK status
-2010-07-05 08:15:58.503: debug: Lifetime(1209600 +/-150 sec) of active key 36257 exceeded (8081418 sec)
-2010-07-05 08:15:58.503: debug: ->waiting for published key
-2010-07-05 08:15:58.503: notice: "example.net.": lifetime of zone signing key 36257 exceeded since 11w2d12h50m18s: ZSK rollover deferred: waiting for published key
-2010-07-05 08:15:58.503: debug: Re-signing not necessary!
-2010-07-05 08:15:58.503: debug: Check if there is a parent file to copy
-2010-07-05 08:16:04.937: debug: Check RFC5011 status
-2010-07-05 08:16:04.937: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-07-05 08:16:04.937: debug: Check KSK status
-2010-07-05 08:16:04.937: warning: "example.net.": lifetime of key signing key 8406 exceeded since 4w5d12h50m24s
-2010-07-05 08:16:04.937: debug: Check ZSK status
-2010-07-05 08:16:04.937: debug: Lifetime(1209600 +/-150 sec) of active key 36257 exceeded (8081424 sec)
-2010-07-05 08:16:04.937: debug: ->waiting for published key
-2010-07-05 08:16:04.937: notice: "example.net.": lifetime of zone signing key 36257 exceeded since 11w2d12h50m24s: ZSK rollover deferred: waiting for published key
-2010-07-05 08:16:04.937: debug: Re-signing necessary: Option -f
-2010-07-05 08:16:04.937: notice: "example.net.": re-signing triggered: Option -f
-2010-07-05 08:16:04.937: debug: Writing key file "./example.net/dnskey.db"
-2010-07-05 08:16:04.937: debug: Incrementing serial number in file "./example.net/zone.db"
-2010-07-05 08:16:04.937: debug: Signing zone "example.net."
-2010-07-05 08:16:04.937: debug: Run cmd "cd ./example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -A -3 C58544 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2010-07-05 08:16:04.993: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2010-07-05 08:16:04.993: debug: Signing completed after 0s.
-2010-07-05 08:16:33.604: debug: Check RFC5011 status
-2010-07-05 08:16:33.604: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-07-05 08:16:33.604: debug: Check KSK status
-2010-07-05 08:16:33.604: warning: "example.net.": lifetime of key signing key 8406 exceeded since 4w5d12h50m53s
-2010-07-05 08:16:33.604: debug: Check ZSK status
-2010-07-05 08:16:33.604: debug: Lifetime(1209600 +/-150 sec) of active key 36257 exceeded (8081453 sec)
-2010-07-05 08:16:33.604: debug: ->waiting for published key
-2010-07-05 08:16:33.604: notice: "example.net.": lifetime of zone signing key 36257 exceeded since 11w2d12h50m53s: ZSK rollover deferred: waiting for published key
-2010-07-05 08:16:33.604: debug: Re-signing necessary: Option -f
-2010-07-05 08:16:33.604: notice: "example.net.": re-signing triggered: Option -f
-2010-07-05 08:16:33.604: debug: Writing key file "./example.net/dnskey.db"
-2010-07-05 08:16:33.605: debug: Incrementing serial number in file "./example.net/zone.db"
-2010-07-05 08:16:33.605: debug: Signing zone "example.net."
-2010-07-05 08:16:33.605: debug: Run cmd "cd ./example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -A -3 FCB8E2 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2010-07-05 08:16:33.648: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2010-07-05 08:16:33.648: debug: Signing completed after 0s.
-2010-07-30 01:30:55.411: debug: Check RFC5011 status
-2010-07-30 01:30:55.411: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-07-30 01:30:55.411: debug: Check KSK status
-2010-07-30 01:30:55.411: debug: Check ZSK status
-2010-07-30 01:30:55.411: debug: Lifetime(1209600 +/-150 sec) of active key 36257 exceeded (2130473 sec)
-2010-07-30 01:30:55.411: debug: ->depreciate it
-2010-07-30 01:30:55.411: debug: ->activate published key 48476
-2010-07-30 01:30:55.411: notice: "example.net.": lifetime of zone signing key 36257 exceeded: ZSK rollover done
-2010-07-30 01:30:55.411: debug: New key for publishing needed
-2010-07-30 01:30:55.493: debug: ->creating new key 1775
-2010-07-30 01:30:55.493: info: "example.net.": new key 1775 generated for publishing
-2010-07-30 01:30:55.493: debug: Re-signing necessary: Modfied zone key set
-2010-07-30 01:30:55.493: notice: "example.net.": re-signing triggered: Modfied zone key set
-2010-07-30 01:30:55.493: debug: Writing key file "./example.net/dnskey.db"
-2010-07-30 01:30:55.493: debug: Incrementing serial number in file "./example.net/zone.db"
-2010-07-30 01:30:55.493: debug: Signing zone "example.net."
-2010-07-30 01:30:55.494: debug: Run cmd "cd ./example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -A -3 3723BA -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2010-07-30 01:30:55.563: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2010-07-30 01:30:55.563: debug: Signing completed after 0s.
-2010-08-26 22:52:09.539: debug: Check RFC5011 status
-2010-08-26 22:52:09.539: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-08-26 22:52:09.539: debug: Check KSK status
-2010-08-26 22:52:09.539: debug: Check ZSK status
-2010-08-26 22:52:09.539: debug: Lifetime(29100 sec) of depreciated key 36257 exceeded (2409674 sec)
-2010-08-26 22:52:09.539: info: "example.net.": old ZSK 36257 removed
-2010-08-26 22:52:09.572: debug: ->remove it
-2010-08-26 22:52:09.572: debug: Lifetime(1209600 +/-150 sec) of active key 48476 exceeded (2409674 sec)
-2010-08-26 22:52:09.572: debug: ->depreciate it
-2010-08-26 22:52:09.572: debug: ->activate published key 1775
-2010-08-26 22:52:09.572: notice: "example.net.": lifetime of zone signing key 48476 exceeded: ZSK rollover done
-2010-08-26 22:52:09.572: debug: New key for publishing needed
-2010-08-26 22:52:09.640: debug: ->creating new key 26477
-2010-08-26 22:52:09.640: info: "example.net.": new key 26477 generated for publishing
-2010-08-26 22:52:09.640: debug: Re-signing necessary: Modfied zone key set
-2010-08-26 22:52:09.640: notice: "example.net.": re-signing triggered: Modfied zone key set
-2010-08-26 22:52:09.640: debug: Writing key file "./example.net/dnskey.db"
-2010-08-26 22:52:09.641: debug: Incrementing serial number in file "./example.net/zone.db"
-2010-08-26 22:52:09.641: debug: Signing zone "example.net."
-2010-08-26 22:52:09.641: debug: Run cmd "cd ./example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -A -3 2F41F9 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2010-08-26 22:52:09.704: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2010-08-26 22:52:09.704: debug: Signing completed after 0s.
-2010-08-26 22:56:02.938: debug: Check RFC5011 status
-2010-08-26 22:56:02.938: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-08-26 22:56:02.938: debug: Check KSK status
-2010-08-26 22:56:02.938: debug: Check ZSK status
-2010-08-26 22:56:02.938: debug: Re-signing not necessary!
-2010-08-26 22:56:02.938: debug: Check if there is a parent file to copy
-2010-08-26 23:06:00.593: debug: Check RFC5011 status
-2010-08-26 23:06:00.593: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-08-26 23:06:00.593: debug: Check KSK status
-2010-08-26 23:06:00.593: debug: Check ZSK status
-2010-08-26 23:06:00.593: debug: New key for publishing needed
-2010-08-26 23:06:00.631: debug: ->creating new key 18026
-2010-08-26 23:06:00.631: info: "example.net.": new key 18026 generated for publishing
-2010-08-26 23:06:00.631: debug: Re-signing necessary: Modfied zone key set
-2010-08-26 23:06:00.631: notice: "example.net.": re-signing triggered: Modfied zone key set
-2010-08-26 23:06:00.631: debug: Writing key file "./example.net/dnskey.db"
-2010-08-26 23:06:00.631: debug: Incrementing serial number in file "./example.net/zone.db"
-2010-08-26 23:06:00.631: debug: Signing zone "example.net."
-2010-08-26 23:06:00.631: debug: Run cmd "cd ./example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -A -3 5EA89E -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2010-08-26 23:06:00.672: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2010-08-26 23:06:00.672: debug: Signing completed after 0s.
-2010-08-26 23:11:33.808: debug: Check RFC5011 status
-2010-08-26 23:11:33.808: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-08-26 23:11:33.809: debug: Check KSK status
-2010-08-26 23:11:33.809: debug: Check ZSK status
-2010-08-26 23:11:33.809: debug: Re-signing not necessary!
-2010-08-26 23:11:33.809: debug: Check if there is a parent file to copy
-2010-08-26 23:12:51.012: debug: Check RFC5011 status
-2010-08-26 23:12:51.012: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-08-26 23:12:51.012: debug: Check KSK status
-2010-08-26 23:12:51.012: debug: Check ZSK status
-2010-08-26 23:12:51.012: debug: Re-signing not necessary!
-2010-08-26 23:12:51.012: debug: Check if there is a parent file to copy
-2010-08-26 23:23:47.886: debug: Check RFC5011 status
-2010-08-26 23:23:47.886: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-08-26 23:23:47.886: debug: Check KSK status
-2010-08-26 23:23:47.886: debug: Check ZSK status
-2010-08-26 23:23:47.886: debug: Re-signing not necessary!
-2010-08-26 23:23:47.886: debug: Check if there is a parent file to copy
-2010-08-26 23:50:15.724: debug: Check RFC5011 status
-2010-08-26 23:50:15.724: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-08-26 23:50:15.724: debug: Check KSK status
-2010-08-26 23:50:15.724: debug: Check ZSK status
-2010-08-26 23:50:15.725: debug: Re-signing not necessary!
-2010-08-26 23:50:15.725: debug: Check if there is a parent file to copy
-2010-08-26 23:50:55.124: debug: Check RFC5011 status
-2010-08-26 23:50:55.124: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-08-26 23:50:55.124: debug: Check KSK status
-2010-08-26 23:50:55.124: debug: Check ZSK status
-2010-08-26 23:50:55.124: debug: Re-signing not necessary!
-2010-08-26 23:50:55.124: debug: Check if there is a parent file to copy
-2010-08-26 23:51:46.719: debug: Check RFC5011 status
-2010-08-26 23:51:46.719: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-08-26 23:51:46.719: debug: Check KSK status
-2010-08-26 23:51:46.719: debug: Check ZSK status
-2010-08-26 23:51:46.719: debug: Re-signing not necessary!
-2010-08-26 23:51:46.719: debug: Check if there is a parent file to copy
-2010-08-26 23:54:22.824: debug: Check RFC5011 status
-2010-08-26 23:54:22.824: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-08-26 23:54:22.824: debug: Check KSK status
-2010-08-26 23:54:22.824: debug: Check ZSK status
-2010-08-26 23:54:22.824: debug: Re-signing not necessary!
-2010-08-26 23:54:22.825: debug: Check if there is a parent file to copy
-2010-08-26 23:55:00.018: debug: Check RFC5011 status
-2010-08-26 23:55:00.018: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-08-26 23:55:00.018: debug: Check KSK status
-2010-08-26 23:55:00.018: debug: Check ZSK status
-2010-08-26 23:55:00.018: debug: New key for pre-publishing needed
-2010-08-26 23:55:00.110: debug: ->creating new key 18293
-2010-08-26 23:55:00.110: info: "example.net.": new key 18293 generated for pre-publishing
-2010-08-26 23:55:00.110: debug: Re-signing necessary: Modfied zone key set
-2010-08-26 23:55:00.110: notice: "example.net.": re-signing triggered: Modfied zone key set
-2010-08-26 23:55:00.110: debug: Writing key file "./example.net/dnskey.db"
-2010-08-26 23:55:00.110: debug: Incrementing serial number in file "./example.net/zone.db"
-2010-08-26 23:55:00.110: debug: Signing zone "example.net."
-2010-08-26 23:55:00.111: debug: Run cmd "cd ./example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -A -3 EBE919 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2010-08-26 23:55:00.168: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2010-08-26 23:55:00.169: debug: Signing completed after 0s.
-2010-08-26 23:56:17.466: debug: Check RFC5011 status
-2010-08-26 23:56:17.466: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-08-26 23:56:17.466: debug: Check KSK status
-2010-08-26 23:56:17.466: debug: Check ZSK status
-2010-08-26 23:56:17.466: debug: Re-signing necessary: Modfied zone key set
-2010-08-26 23:56:17.466: notice: "example.net.": re-signing triggered: Modfied zone key set
-2010-08-26 23:56:17.466: debug: Writing key file "./example.net/dnskey.db"
-2010-08-26 23:56:17.467: debug: Incrementing serial number in file "./example.net/zone.db"
-2010-08-26 23:56:17.467: debug: Signing zone "example.net."
-2010-08-26 23:56:17.467: debug: Run cmd "cd ./example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -A -3 A876E5 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2010-08-26 23:56:17.531: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2010-08-26 23:56:17.531: debug: Signing completed after 0s.
-2010-08-26 23:57:00.178: debug: Check RFC5011 status
-2010-08-26 23:57:00.178: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-08-26 23:57:00.178: debug: Check KSK status
-2010-08-26 23:57:00.178: debug: Check ZSK status
-2010-08-26 23:57:00.178: debug: Re-signing not necessary!
-2010-08-26 23:57:00.178: debug: Check if there is a parent file to copy
-2010-10-21 14:01:35.546: debug: Check RFC5011 status
-2010-10-21 14:01:35.546: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-10-21 14:01:35.546: debug: Check KSK status
-2010-10-21 14:01:35.546: debug: Check ZSK status
-2010-10-21 14:01:35.546: debug: Re-signing necessary: re-signing interval (2d) reached
-2010-10-21 14:01:35.546: notice: "example.net.": re-signing triggered: re-signing interval (2d) reached
-2010-10-21 14:01:35.546: debug: Writing key file "./example.net/dnskey.db"
-2010-10-21 14:01:35.607: debug: Incrementing serial number in file "./example.net/zone.db"
-2010-10-21 14:01:35.607: debug: Signing zone "example.net."
-2010-10-21 14:01:35.607: debug: Run cmd "cd ./example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -A -3 9FC981 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2010-10-21 14:01:35.761: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2010-10-21 14:01:35.761: debug: Signing completed after 0s.
-2010-10-21 14:02:09.209: debug: Check RFC5011 status
-2010-10-21 14:02:09.209: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-10-21 14:02:09.209: debug: Check KSK status
-2010-10-21 14:02:09.209: debug: Check ZSK status
-2010-10-21 14:02:09.209: debug: Re-signing not necessary!
-2010-10-21 14:02:09.209: debug: Check if there is a parent file to copy
-2010-10-21 14:05:36.170: debug: Check RFC5011 status
-2010-10-21 14:05:36.170: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-10-21 14:05:36.170: debug: Check KSK status
-2010-10-21 14:05:36.170: debug: Check ZSK status
-2010-10-21 14:05:36.170: debug: Re-signing not necessary!
-2010-10-21 14:05:36.170: debug: Check if there is a parent file to copy
-2010-10-21 14:30:43.892: debug: Check RFC5011 status
-2010-10-21 14:30:43.892: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-10-21 14:30:43.892: debug: Check KSK status
-2010-10-21 14:30:43.892: debug: Check ZSK status
-2010-10-21 14:30:43.892: debug: Re-signing not necessary!
-2010-10-21 14:30:43.892: debug: Check if there is a parent file to copy
-2014-11-14 18:04:37.729: debug: Check RFC5011 status
-2014-11-14 18:04:37.729: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-14 18:04:37.729: debug: Check KSK status
-2014-11-14 18:04:37.729: debug: Check ZSK status
-2014-11-14 18:04:37.729: debug: Re-signing necessary: Modified keys
-2014-11-14 18:04:37.729: notice: "example.net.": re-signing triggered: Modified keys
-2014-11-14 18:04:37.729: debug: Writing key file "./example.net/dnskey.db"
-2014-11-14 18:04:37.730: debug: Incrementing serial number in file "./example.net/zone.db"
-2014-11-14 18:04:37.730: debug: Signing zone "example.net."
-2014-11-14 18:04:37.730: debug: Run cmd "cd ./example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -A -3 97195D -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2014-11-14 18:04:37.827: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2014-11-14 18:04:37.827: debug: Signing completed after 0s.
-2014-11-14 18:09:16.427: debug: Check RFC5011 status
-2014-11-14 18:09:16.427: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-14 18:09:16.427: debug: Check KSK status
-2014-11-14 18:09:16.428: debug: No active KSK found: generate new one
-2014-11-14 18:09:16.495: info: "example.net.": generated new KSK 44671
-2014-11-14 18:09:16.495: debug: Check ZSK status
-2014-11-14 18:09:16.495: debug: No active ZSK found: generate new one
-2014-11-14 18:09:16.515: info: "example.net.": generated new ZSK 7929
-2014-11-14 18:09:16.515: debug: New key for pre-publishing needed
-2014-11-14 18:09:16.546: debug: ->creating new key 2253
-2014-11-14 18:09:16.546: info: "example.net.": new key 2253 generated for pre-publishing
-2014-11-14 18:09:16.546: debug: Re-signing necessary: Modified zone key set
-2014-11-14 18:09:16.546: notice: "example.net.": re-signing triggered: Modified zone key set
-2014-11-14 18:09:16.547: debug: Writing key file "./example.net/dnskey.db"
-2014-11-14 18:09:16.547: debug: Incrementing serial number in file "./example.net/zone.db"
-2014-11-14 18:09:16.547: debug: Signing zone "example.net."
-2014-11-14 18:09:16.547: debug: Run cmd "cd ./example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -A -3 B26BB7 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2014-11-14 18:09:16.646: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2014-11-14 18:09:16.646: debug: Signing completed after 0s.
-2014-11-14 18:11:40.877: debug: Check RFC5011 status
-2014-11-14 18:11:40.877: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-14 18:11:40.877: debug: Check KSK status
-2014-11-14 18:11:40.877: debug: Check ZSK status
-2014-11-14 18:11:40.877: debug: Re-signing not necessary!
-2014-11-14 18:11:40.877: debug: Check if there is a parent file to copy
-2014-11-14 18:11:46.599: debug: Check RFC5011 status
-2014-11-14 18:11:46.599: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-14 18:11:46.599: debug: Check KSK status
-2014-11-14 18:11:46.599: debug: Check ZSK status
-2014-11-14 18:11:46.599: debug: Re-signing not necessary!
-2014-11-14 18:11:46.599: debug: Check if there is a parent file to copy
-2014-11-14 18:15:54.380: debug: Check RFC5011 status
-2014-11-14 18:15:54.380: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-14 18:15:54.380: debug: Check KSK status
-2014-11-14 18:15:54.380: debug: Check ZSK status
-2014-11-14 18:15:54.380: debug: Re-signing not necessary!
-2014-11-14 18:15:54.380: debug: Check if there is a parent file to copy
-2014-11-14 18:31:09.365: debug: Check RFC5011 status
-2014-11-14 18:31:09.365: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-14 18:31:09.365: debug: Check KSK status
-2014-11-14 18:31:09.365: debug: Check ZSK status
-2014-11-14 18:31:09.365: debug: Re-signing necessary: Modified keys
-2014-11-14 18:31:09.365: notice: "example.net.": re-signing triggered: Modified keys
-2014-11-14 18:31:09.365: debug: Writing key file "././example.net/dnskey.db"
-2014-11-14 18:31:09.366: debug: Incrementing serial number in file "././example.net/zone.db"
-2014-11-14 18:31:09.366: debug: Signing zone "example.net."
-2014-11-14 18:31:09.366: debug: Run cmd "cd ././example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -A -3 8B4599 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2014-11-14 18:31:09.488: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2014-11-14 18:31:09.488: debug: Signing completed after 0s.
-2014-11-14 18:31:27.335: debug: Check RFC5011 status
-2014-11-14 18:31:27.335: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-14 18:31:27.335: debug: Check KSK status
-2014-11-14 18:31:27.335: debug: Check ZSK status
-2014-11-14 18:31:27.335: debug: Re-signing not necessary!
-2014-11-14 18:31:27.335: debug: Check if there is a parent file to copy
-2014-11-14 18:38:16.356: debug: Check RFC5011 status
-2014-11-14 18:38:16.356: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-14 18:38:16.356: debug: Check KSK status
-2014-11-14 18:38:16.356: debug: Check ZSK status
-2014-11-14 18:38:16.356: debug: Re-signing necessary: Modified keys
-2014-11-14 18:38:16.356: notice: "example.net.": re-signing triggered: Modified keys
-2014-11-14 18:38:16.356: debug: Writing key file "././example.net/dnskey.db"
-2014-11-14 18:38:16.356: debug: Incrementing serial number in file "././example.net/zone.db"
-2014-11-14 18:38:16.356: debug: Signing zone "example.net."
-2014-11-14 18:38:16.356: debug: Run cmd "cd ././example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -A -3 BEBFB0 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2014-11-14 18:38:16.484: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2014-11-14 18:38:16.484: debug: Signing completed after 0s.
-2014-11-15 18:16:50.572: debug: Check RFC5011 status
-2014-11-15 18:16:50.572: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-15 18:16:50.572: debug: Check KSK status
-2014-11-15 18:16:50.572: debug: Check ZSK status
-2014-11-15 18:16:50.573: debug: Re-signing necessary: Modified keys
-2014-11-15 18:16:50.573: notice: "example.net.": re-signing triggered: Modified keys
-2014-11-15 18:16:50.573: debug: Writing key file "././example.net/dnskey.db"
-2014-11-15 18:16:50.573: debug: Incrementing serial number in file "././example.net/zone.db"
-2014-11-15 18:16:50.573: debug: Signing zone "example.net."
-2014-11-15 18:16:50.573: debug: Run cmd "cd ././example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -A -3 DC5680 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2014-11-15 18:16:50.715: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2014-11-15 18:16:50.715: debug: Signing completed after 0s.
-2014-11-15 18:16:54.202: debug: Check RFC5011 status
-2014-11-15 18:16:54.202: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-15 18:16:54.202: debug: Check KSK status
-2014-11-15 18:16:54.203: debug: Check ZSK status
-2014-11-15 18:16:54.203: debug: Re-signing not necessary!
-2014-11-15 18:16:54.203: debug: Check if there is a parent file to copy
-2014-11-15 18:17:06.919: debug: Check RFC5011 status
-2014-11-15 18:17:06.919: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-15 18:17:06.919: debug: Check KSK status
-2014-11-15 18:17:06.919: debug: Check ZSK status
-2014-11-15 18:17:06.919: debug: Re-signing necessary: Modified keys
-2014-11-15 18:17:06.919: notice: "example.net.": re-signing triggered: Modified keys
-2014-11-15 18:17:06.919: debug: Writing key file "././example.net/dnskey.db"
-2014-11-15 18:17:06.919: debug: Incrementing serial number in file "././example.net/zone.db"
-2014-11-15 18:17:06.919: debug: Signing zone "example.net."
-2014-11-15 18:17:06.919: debug: Run cmd "cd ././example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -A -3 D82F90 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2014-11-15 18:17:07.040: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2014-11-15 18:17:07.040: debug: Signing completed after 1s.
-2014-11-15 18:17:17.242: debug: Check RFC5011 status
-2014-11-15 18:17:17.242: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-15 18:17:17.242: debug: Check KSK status
-2014-11-15 18:17:17.243: debug: Check ZSK status
-2014-11-15 18:17:17.243: debug: Re-signing necessary: Zone file edited
-2014-11-15 18:17:17.243: notice: "example.net.": re-signing triggered: Zone file edited
-2014-11-15 18:17:17.243: debug: Writing key file "././example.net/dnskey.db"
-2014-11-15 18:17:17.243: debug: Incrementing serial number in file "././example.net/zone.db"
-2014-11-15 18:17:17.243: debug: Signing zone "example.net."
-2014-11-15 18:17:17.243: debug: Run cmd "cd ././example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -A -3 603310 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2014-11-15 18:17:17.365: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2014-11-15 18:17:17.365: debug: Signing completed after 0s.
-2014-11-17 19:12:44.250: debug: Check RFC5011 status
-2014-11-17 19:12:44.250: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-17 19:12:44.250: debug: Check KSK status
-2014-11-17 19:12:44.250: debug: Check ZSK status
-2014-11-17 19:12:44.250: debug: Re-signing necessary: re-signing interval (2d) reached
-2014-11-17 19:12:44.250: notice: "example.net.": re-signing triggered: re-signing interval (2d) reached
-2014-11-17 19:12:44.250: debug: Writing key file "./example.net/dnskey.db"
-2014-11-17 19:12:44.251: debug: Incrementing serial number in file "./example.net/zone.db"
-2014-11-17 19:12:44.251: debug: Signing zone "example.net."
-2014-11-17 19:12:44.251: debug: Run cmd "cd ./example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -A -3 9F5882 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2014-11-17 19:12:44.392: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2014-11-17 19:12:44.392: debug: Signing completed after 0s.
-2014-11-17 19:12:49.692: debug: Check RFC5011 status
-2014-11-17 19:12:49.692: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-17 19:12:49.692: debug: Check KSK status
-2014-11-17 19:12:49.692: debug: Check ZSK status
-2014-11-17 19:12:49.692: debug: Re-signing not necessary!
-2014-11-17 19:12:49.692: debug: Check if there is a parent file to copy
-2014-11-17 19:13:02.603: debug: Check RFC5011 status
-2014-11-17 19:13:02.603: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-17 19:13:02.603: debug: Check KSK status
-2014-11-17 19:13:02.603: debug: Check ZSK status
-2014-11-17 19:13:02.603: debug: Re-signing not necessary!
-2014-11-17 19:13:02.603: debug: Check if there is a parent file to copy
-2014-11-17 19:13:50.410: debug: Check RFC5011 status
-2014-11-17 19:13:50.410: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-17 19:13:50.410: debug: Check KSK status
-2014-11-17 19:13:50.410: debug: Check ZSK status
-2014-11-17 19:13:50.410: debug: Re-signing necessary: Modified keys
-2014-11-17 19:13:50.410: notice: "example.net.": re-signing triggered: Modified keys
-2014-11-17 19:13:50.410: debug: Writing key file "./example.net/dnskey.db"
-2014-11-17 19:13:50.410: debug: Incrementing serial number in file "./example.net/zone.db"
-2014-11-17 19:13:50.410: debug: Signing zone "example.net."
-2014-11-17 19:13:50.411: debug: Run cmd "cd ./example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -A -3 053453 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2014-11-17 19:13:50.525: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2014-11-17 19:13:50.525: debug: Signing completed after 0s.
-2014-11-17 19:13:54.302: debug: Check RFC5011 status
-2014-11-17 19:13:54.302: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-17 19:13:54.302: debug: Check KSK status
-2014-11-17 19:13:54.302: debug: Check ZSK status
-2014-11-17 19:13:54.302: debug: Re-signing not necessary!
-2014-11-17 19:13:54.302: debug: Check if there is a parent file to copy
-2014-11-17 19:14:01.846: debug: Check RFC5011 status
-2014-11-17 19:14:01.846: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-17 19:14:01.846: debug: Check KSK status
-2014-11-17 19:14:01.846: debug: Check ZSK status
-2014-11-17 19:14:01.846: debug: Re-signing necessary: Zone file edited
-2014-11-17 19:14:01.846: notice: "example.net.": re-signing triggered: Zone file edited
-2014-11-17 19:14:01.846: debug: Writing key file "./example.net/dnskey.db"
-2014-11-17 19:14:01.846: debug: Incrementing serial number in file "./example.net/zone.db"
-2014-11-17 19:14:01.846: debug: Signing zone "example.net."
-2014-11-17 19:14:01.847: debug: Run cmd "cd ./example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -A -3 7CF530 -C -g -p -d ../keysets -o example.net. -e +518400 zone.db K*.private 2>&1"
-2014-11-17 19:14:01.969: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2014-11-17 19:14:01.969: debug: Signing completed after 0s.
diff --git a/contrib/zkt-1.1.3/examples/flat/example.net/zone.db b/contrib/zkt-1.1.3/examples/flat/example.net/zone.db
deleted file mode 100644
index b8920376..00000000
--- a/contrib/zkt-1.1.3/examples/flat/example.net/zone.db
+++ /dev/null
@@ -1,39 +0,0 @@
-;-----------------------------------------------------------------
-;
-; @(#) example.net/zone.db
-;
-;-----------------------------------------------------------------
-
-$TTL 7200
-
-; Ensure that the serial number below is left
-; justified in a field of at least 10 chars!!
-; 0123456789;
-; It's also possible to use the date format e.g. 2005040101
-@ IN SOA ns1.example.net. hostmaster.example.net. (
- 396 ; Serial
- 43200 ; Refresh
- 1800 ; Retry
- 2W ; Expire
- 7200 ) ; Minimum
-
- IN NS ns1.example.net.
- IN NS ns2.example.net.
-
-ns1 IN A 1.0.0.5
- IN AAAA 2001:db8::53
-ns2 IN A 1.2.0.6
-
-; Delegation to secure zone; The DS resource record will
-; be added by dnssec-signzone automatically if the
-; keyset-sub.example.net file is present (run dnssec-signzone
-; with option -g or use the dnssec-signer tool) ;-)
-sub IN NS ns1.example.net.
-
-; this file will contain all the zone keys
-$INCLUDE dnskey.db
-
-$INCLUDE zone.localhost
-$INCLUDE zone.hosts
-
-
diff --git a/contrib/zkt-1.1.3/examples/flat/example.net/zone.db.signed b/contrib/zkt-1.1.3/examples/flat/example.net/zone.db.signed
deleted file mode 100644
index 09ddb9cb..00000000
--- a/contrib/zkt-1.1.3/examples/flat/example.net/zone.db.signed
+++ /dev/null
@@ -1,236 +0,0 @@
-; File written on Mon Nov 17 19:14:01 2014
-; dnssec_signzone version 9.10.1b1
-example.net. 7200 IN SOA ns1.example.net. hostmaster.example.net. (
- 396 ; serial
- 43200 ; refresh (12 hours)
- 1800 ; retry (30 minutes)
- 1209600 ; expire (2 weeks)
- 7200 ; minimum (2 hours)
- )
- 7200 RRSIG SOA 8 2 7200 (
- 20141123171401 20141117171401 7929 example.net.
- nSDd2lzZOipVaXTc2gvg4MICjFPg1+57qFwF
- n3dofSvjNE9lbmKBsWY9KbawRmcvieFj9Lw/
- +xmGlzQya1THGUHom7JoH2u0nO6vWMD+i7HT
- 0xHOg2+FjIqNvG0VFwSg//ASdSzZ6zzyY+iU
- oZcT6fSAQCXLo52AAbsNwM7E0UM= )
- 7200 NS ns1.example.net.
- 7200 NS ns2.example.net.
- 7200 RRSIG NS 8 2 7200 (
- 20141123171401 20141117171401 7929 example.net.
- eSQSoaLKL/JxYimCdpoPouWtbQVvodzNMolg
- e1fG8U7GLgP2MMNUk/E/OlGYYft53dbQN8XD
- 2PdXi9fqH6n4jaOR+eHClAq4xUN3He9gq8GU
- tRc0Yj5D4VLKs7gBjPSVKkEDeVJFMCxXhIvO
- c4r2k7TPw3oi2WQdw4+jPoYu0SQ= )
- 3600 DNSKEY 256 3 8 (
- AwEAAZF8FdZfjdp4pyHk53/qvnzROy2lhF0c
- J0XbRaIgeIYHYMIUmMLrsazBQ7/3ZdFoQjgE
- Wz2BbKyfroJmE+VrCc1dBJ50PJUm3vcBbUwM
- gy4yXq3PtmwKzlr3YGMUgE31cByog0QRnW6m
- yNdEfDLf74yxRiPgIwk1rEmIYFUI4x69
- ) ; ZSK; alg = RSASHA256; key id = 2253
- 3600 DNSKEY 256 3 8 (
- AwEAAaFO1yW7cx3/4SBRganmyOEs2eIeAE25
- CgXYrtLALzFdgi+gRfl+QEOzMZBk/LmgKFcg
- p4GfgtuzKA08VGNmLUEGI+UBSP+DUezQfK/l
- xPCXuRMh0BJgAjnlo+jGaI2fpfKXBp+5uLiY
- 3pbkdm6LiaJb/s4v0DJjglGWiiPMIxyR
- ) ; ZSK; alg = RSASHA256; key id = 7929
- 3600 DNSKEY 257 3 8 (
- AwEAAQ5RiqQEKys2xlo5nK3n9tnWeGg/tHST
- baFw6AN1QPLlaEVLNXDaYKcpefu6ewNamaIn
- rjBrkkbqRnwKTuLCwJ9aA/hyFzocCOPh+he9
- dEQHbRTKDdTkjD3PqkOK97a+s1grWIdkRcce
- T3MXEsAwyjlasXPRKt/4v1sqS7592eyo6wTc
- beaoPYo6KMQLfcA9AHso9LBaRpqv7GlSjl5I
- V51mcU8=
- ) ; KSK; alg = RSASHA256; key id = 44671
- 3600 RRSIG DNSKEY 8 2 3600 (
- 20141123171401 20141117171401 7929 example.net.
- FA+VaaIn6SThjdlGRxlmYtqsXe3c7QAO0UAg
- LIGjdfs0yO8cSz07jzT1UsZancDhyprCdinl
- u9eOl0Lf9sPPKZFJUFYofKZmXCvtI7z8t1o7
- h74BwQlUeRAwG8vgK8flo09UMZ/wuT39ArAr
- ZCtXC/6DqiWZmmbAZ7igLIo36kA= )
- 3600 RRSIG DNSKEY 8 2 3600 (
- 20141123171401 20141117171401 44671 example.net.
- BacfHSvqUyB6q7Ynkf9tTFjA+kYhmHLV7acO
- Ua/I+tAs1ELtCLLJLv+1d449ovmSTm0RYRwO
- cGlpggtL8qGa5wl/BA5sobzxIkREKj0c1cud
- taViyZ4PaDO86Q4ZmZChQafbIxbLYqsL/v8z
- 517NzZ2xtZetnv5NtKzKvrVblVPaV0IyJHLK
- KvdHsU0eCqPSHfPYbMg3uusZhL618tARxQn3
- 8g== )
- 0 NSEC3PARAM 1 0 10 7CF530
- 0 RRSIG NSEC3PARAM 8 2 0 (
- 20141123171401 20141117171401 7929 example.net.
- MdriHagoMqEW0VoINMPaATPCsYZYiKVHUN56
- Bl8kCNFlNaVD8Pn32z+Ewh1I/m5OxCUry10J
- BPEFZmXlKDiJ36/bzAFDUPBBsvjCPIGHedZT
- oyPwZ6JVoDrBEmQWHaoq5YTsVcNy0E4zC/Md
- 4FKPNZnCiExDX0h8MGxMAVTZG5I= )
-a.example.net. 7200 IN A 1.2.3.1
- 7200 RRSIG A 8 3 7200 (
- 20141123171401 20141117171401 7929 example.net.
- C7WKU0ffs8VpzaYt2CqdnUgQMjfwXAHIzmbR
- Q3EOqzg66u2Jz1jdO+CwPRizTb2u+vh7/uDL
- bDPn0YEDHDgmfTYu03aWf5Lpo50QlKQrCFIE
- stdhE2IH1wyej/vqlthXA0ZH7xr4EHwGFPRv
- GfYOIBiXs8K1drY1tp7qxFX9Mro= )
-b.example.net. 7200 IN MX 10 a.example.net.
- 7200 RRSIG MX 8 3 7200 (
- 20141123171401 20141117171401 7929 example.net.
- BRSj7EugAKkgnFCoChaM764Vh25FOjQIhB91
- dRfm9/vrcJ+48DXPo3ag/SpNzV4d37UokEl6
- YXvpb4HiwFsPB0Dvvvct6yicR2UjGCNatKGx
- 4IAmLmbT2sViBGnXBlD349FFl32oeeXEIu2J
- B9q6NtrP65FFXINY+oFoxi+aYMI= )
-d.example.net. 7200 IN A 1.2.3.3
- 7200 RRSIG A 8 3 7200 (
- 20141123171401 20141117171401 7929 example.net.
- ek0mcsVZAxWO6xsjw6eObrkEYfGIUDglNH5T
- VgpNIrR7lb2XywLfdyz4PuCb/0ZEN7niY6VW
- rza4v+3dJGoqOKxu4QDY4iRrWChy/F3St0ZA
- vDiLWWmxnhpTo9l+M34kuCrbx0NahwUfejBw
- Chp1sLTWJM6OF+qsTKotRdfbLeM= )
- 7200 AAAA 2001:db8::3
- 7200 RRSIG AAAA 8 3 7200 (
- 20141123171401 20141117171401 7929 example.net.
- h34UzUI64yyIsI1MbqeSMuRqHL9jCAikW7i+
- MWYtXptQ0XB2416yB+w7fcC8ctl9v2H1244V
- XeJOJV85HHwKfEOP1G9kCvS5b9iEoDFfVDUt
- PwLMFhKe94XQ+aUA81RYoAJnzdj84Bi3YZ3g
- U1Yv4tv/oW0dd/W4Pvo/UVadybA= )
-localhost.example.net. 7200 IN A 127.0.0.1
- 7200 RRSIG A 8 3 7200 (
- 20141123171401 20141117171401 7929 example.net.
- OQMFtldAekpNnf4cUqlw8rmSrjPQjjPlVb3i
- ktCiez0s+s9PG18lbMsfYFZvEm+deDit8fR9
- lDKdUWwvxSkjeeCeABsg0kd1FLEuFKOv1HGP
- ql1dAA0/X+XTQ7FSfAuZmsmKTUYOgZjgmeBY
- EOkXYfa/IMDPauDWJbtbRsfuEzA= )
-ns1.example.net. 7200 IN A 1.0.0.5
- 7200 RRSIG A 8 3 7200 (
- 20141123171401 20141117171401 7929 example.net.
- Tv5nLzFdIM6tU8BYb+twJ+2d+5b+VyuED977
- 6wcDI2sb79Y9RwySP4UE+x4Zbm6P+lgqTI2y
- ITCWvVDyTqOcUUbWGX62KDVD+4nK0EK59jro
- VghtBWH3RLB0vSb59xNKPgOpgP4tTbWLyN5J
- OaVHNxmOu24ygvDRYMEQYHgRKtE= )
- 7200 AAAA 2001:db8::53
- 7200 RRSIG AAAA 8 3 7200 (
- 20141123171401 20141117171401 7929 example.net.
- OkW0vncVMFb0Fw6yxcpQ38AzPc2yxoekLDCi
- 1VmSMfBzCQRekqUIE3TtqBpJtaUP4JMANIXb
- xvmbL1wl/IT4BqSg8faDg4DBsYeCr70ucUUj
- NDKbeYtKdNkYIZGX8U27wflFOAISR4TEguZe
- TqxoBuoWmyo4+Yrk4skFFa30Qsk= )
-ns2.example.net. 7200 IN A 1.2.0.6
- 7200 RRSIG A 8 3 7200 (
- 20141123171401 20141117171401 7929 example.net.
- Mt6BRM5elYbfPQOQgfiJ8PAkJbwdfhUedXug
- M7eTDcxjXTtxraMxheWIuEcgZ7UtQuX1/gUy
- Fl98gixX05g80F9YdyB/dnzMK0k2hHMWxr4j
- DD1e5rAsnCfT+PnZGVEkhPWCRM6Uw8qOdXOx
- PktCHwWV1XnfxLAi0YZXJoJGlYs= )
-sub.example.net. 7200 IN NS ns1.example.net.
- 7200 DS 33936 7 1 (
- 8E06D0C044A15C396F43E1743EDC0C0772F1
- 19A7 )
- 7200 DS 33936 7 2 (
- 496F56E015F74A955A1B277255DE56C564DC
- C5AF559DAAA40C4DE01933E073E7 )
- 7200 DS 60396 10 1 (
- 00A6EDBD5687D69DB7636749A057ABB43A13
- 576E )
- 7200 DS 60396 10 2 (
- FE01A3C47B2D3F19CAB32451986B36C2ADEF
- 2C4247B7B24DEB77EDB90EE1CB4C )
- 7200 RRSIG DS 8 3 7200 (
- 20141123171401 20141117171401 7929 example.net.
- S+ognL1Unax/NnfRIcnq53uHltBCquHMKgkS
- JMnQYGJcXZzUlUpKkXCXR9kZfZFfWjNV72FA
- lqgV9+AXi9bIO1HmLWXQ0AFkS1g6wkBvcrGT
- 95IbQRlL1hOySNmnILA/RyOKaHEM3Vxjl0CM
- lOSEX34CAAsj/0srNJWWhaNgUFI= )
-CP5JT7EV1K7R3VBGJ54G2FALVGI94Q9A.example.net. 7200 IN NSEC3 1 1 10 7CF530 (
- GH4PQAVJQD10HL7KI3S4CTURR9E3V4B4
- NS SOA RRSIG DNSKEY NSEC3PARAM )
- 7200 RRSIG NSEC3 8 3 7200 (
- 20141123171401 20141117171401 7929 example.net.
- KvHTjmmjBwYgJvTQUTpOmtA+1nEfefVMgYV5
- I2OMDZ5/dhgrktETUchyHiqS6J9nQeS7HiqC
- 2/fftgueMyofDAbhjQ0yf9hpWdNpquI1vKID
- UZKZUIWTtcH9vbEST80qxlKJdwUHwlZwnTHf
- +ZUj3mVn+Vrb7g6yQt1jBmihcao= )
-GH4PQAVJQD10HL7KI3S4CTURR9E3V4B4.example.net. 7200 IN NSEC3 1 1 10 7CF530 (
- KIMJV7K0CDS0O96IHHOF7H6PIJ40T4J2
- A RRSIG )
- 7200 RRSIG NSEC3 8 3 7200 (
- 20141123171401 20141117171401 7929 example.net.
- LaIQC6orUjlak00kA9dySq0qphgvcKllGGf2
- 5BrENDnYVN0RPCwzMfXPxzHDIG7o4GGRvFpx
- dpxChETPSoPObVJpwmgUHILPrrcAkwYIcH0T
- KETpGHgmixCDwZE9kUHzy6FGZcWQDezQT7CD
- +EsC6GWCswWnyetA9R7ZY5N7OPY= )
-KIMJV7K0CDS0O96IHHOF7H6PIJ40T4J2.example.net. 7200 IN NSEC3 1 1 10 7CF530 (
- MG6NM7AJN6AMBK227QBFBHPD726L69B2
- NS DS RRSIG )
- 7200 RRSIG NSEC3 8 3 7200 (
- 20141123171401 20141117171401 7929 example.net.
- PAlwSBhhkusXgnZOG9IpG9u5lVSfIWGaRxFk
- nhaBMW8AL/sjZFl7yMIP4Vsqnv1QW1EB+wa6
- zC7AzG80FvQcU4anxuUlPSkWyxQ8T8cVZHu3
- 9HMGs++pvNdta+iBeV8F4zjVw73TWFQ4yX1u
- 04AKmsNnNhCnTQmxEGO7LJ9ras0= )
-MG6NM7AJN6AMBK227QBFBHPD726L69B2.example.net. 7200 IN NSEC3 1 1 10 7CF530 (
- QTFSVH9JGRG31JP59190G8AD6SKQELK7
- A AAAA RRSIG )
- 7200 RRSIG NSEC3 8 3 7200 (
- 20141123171401 20141117171401 7929 example.net.
- eG4jlpmAJg/OT56On/WfZYmYuthPjc5u4rYr
- eSXnpjjreFfQuGhj0or2yedAOgIYXktJ2Dtc
- TWIl4ppySs7mwzn2QQAMRjh5PovVasdxGVAG
- pPd5Q/SlPuQ6/szIn66y+wobGT948oaPbXRm
- ptmofvmb6T5NqSFGM7LWXmElHfk= )
-QTFSVH9JGRG31JP59190G8AD6SKQELK7.example.net. 7200 IN NSEC3 1 1 10 7CF530 (
- R0VERQHHM272SRP6M3CJFOE3FGK2A5DC
- MX RRSIG )
- 7200 RRSIG NSEC3 8 3 7200 (
- 20141123171401 20141117171401 7929 example.net.
- UgYYu5vLwPg8DJ3C8ye5qZ5SlBWS8cri/0W3
- uhsmZNpmgN7DoM37tymSAE9ilsNOCUOMfP2n
- vOP1KBnhPwHhcgKhh6UqtTchr/qPThG51XJA
- uKxsrY/hY5mIE5Fk7n84DV4OpFGdFdmgtraq
- Vj7Y/RFukf2W4y5zzsh3f1RfJBo= )
-R0VERQHHM272SRP6M3CJFOE3FGK2A5DC.example.net. 7200 IN NSEC3 1 1 10 7CF530 (
- SPNT3RTA99QNKF4OPN46CKHN6T498NFU
- A RRSIG )
- 7200 RRSIG NSEC3 8 3 7200 (
- 20141123171401 20141117171401 7929 example.net.
- gkqYtdVKHOIthI2QMIURdiWsTRGrmBPxRDpC
- orUkxgnwYvu124S9T7xnu6ImhoaDCcn1XH0L
- ekhOOCT+7phOAKu60Q4wOYIs7je9H6baJUzL
- OJFlcaheGSGAkW+X+vJqkABJ/cNy39O8BcE1
- 3+GtsHBfmvCaFBDbXPX8TynH5qY= )
-SPNT3RTA99QNKF4OPN46CKHN6T498NFU.example.net. 7200 IN NSEC3 1 1 10 7CF530 (
- UUS79RPELAT8G2MR1SKQJURUST94FD4H
- A AAAA RRSIG )
- 7200 RRSIG NSEC3 8 3 7200 (
- 20141123171401 20141117171401 7929 example.net.
- JyfcdxODrVWXS4PNNMZ7URyYRlEFjVBssCB4
- 8eZ/wqIdMnEgY8VVlnsutZHett3wbrG1NChH
- xtdYENYV8U4KcjrVnmHNFjkAnXsQe2ZqLXVX
- /LWgY19BqoioSnKeL6ZEwTCZmWmCv/8bF9Ju
- rrtpRrLAzRo5aeDnoMxSwteKiko= )
-UUS79RPELAT8G2MR1SKQJURUST94FD4H.example.net. 7200 IN NSEC3 1 1 10 7CF530 (
- CP5JT7EV1K7R3VBGJ54G2FALVGI94Q9A
- A RRSIG )
- 7200 RRSIG NSEC3 8 3 7200 (
- 20141123171401 20141117171401 7929 example.net.
- HxoUXP1Dt9c0Ass7uGGOpTKKG3vIXY3cHS56
- 4TTi8AOl9bV9Hf6awiYUw4qBby8+M6sXeRmP
- zYTNCfwIaBx9QhSJnaRXcUqC7T3Rnjk/ST/W
- flKzVLqV83K6h8aYQCKaV4FCatNrQimbt+8G
- NwUd565/EsJ77HRJCOYLWuBG28o= )
diff --git a/contrib/zkt-1.1.3/examples/flat/example.net/zone.hosts b/contrib/zkt-1.1.3/examples/flat/example.net/zone.hosts
deleted file mode 100644
index 11c33de5..00000000
--- a/contrib/zkt-1.1.3/examples/flat/example.net/zone.hosts
+++ /dev/null
@@ -1,5 +0,0 @@
-a IN A 1.2.3.1
-b IN MX 10 a
-;c IN A 1.2.3.2
-d IN A 1.2.3.3
- IN AAAA 2001:0db8::3
diff --git a/contrib/zkt-1.1.3/examples/flat/example.net/zone.localhost b/contrib/zkt-1.1.3/examples/flat/example.net/zone.localhost
deleted file mode 100644
index 384e4102..00000000
--- a/contrib/zkt-1.1.3/examples/flat/example.net/zone.localhost
+++ /dev/null
@@ -1,2 +0,0 @@
-
-localhost IN A 127.0.0.1
diff --git a/contrib/zkt-1.1.3/examples/flat/keysets/dlvset-sub.example.net. b/contrib/zkt-1.1.3/examples/flat/keysets/dlvset-sub.example.net.
deleted file mode 100644
index 5a70921e..00000000
--- a/contrib/zkt-1.1.3/examples/flat/keysets/dlvset-sub.example.net.
+++ /dev/null
@@ -1,4 +0,0 @@
-sub.example.net.dlv.trusted-keys.de. IN DLV 42834 7 1 9660E85E9542C823D4E9860D778350AA5D8904E9
-sub.example.net.dlv.trusted-keys.de. IN DLV 42834 7 2 1337FB51C697B7CD20C8D6BBC498310588C78B3595FB53F35C871DBF EC86DAAE
-sub.example.net.dlv.trusted-keys.de. IN DLV 48516 7 1 CC5E20F75F02BE11BC040960669A3F5058F30DC0
-sub.example.net.dlv.trusted-keys.de. IN DLV 48516 7 2 D124B0B50CF51780707FFBF91DC305617832C09E21F32F28B8A88EFB E1F03ACE
diff --git a/contrib/zkt-1.1.3/examples/flat/keysets/dsset-example.net. b/contrib/zkt-1.1.3/examples/flat/keysets/dsset-example.net.
deleted file mode 100644
index 1bbe1a07..00000000
--- a/contrib/zkt-1.1.3/examples/flat/keysets/dsset-example.net.
+++ /dev/null
@@ -1,2 +0,0 @@
-example.net. IN DS 44671 8 1 C29F02EF0E0C4AB5AFDDB5220DC35149CBB9067E
-example.net. IN DS 44671 8 2 2CA230B1D3BB0DC700B75152B403BE83E4CC3410AFEC38EAF00177BC 9692ADFA
diff --git a/contrib/zkt-1.1.3/examples/flat/keysets/dsset-sub.example.net. b/contrib/zkt-1.1.3/examples/flat/keysets/dsset-sub.example.net.
deleted file mode 100644
index 10801883..00000000
--- a/contrib/zkt-1.1.3/examples/flat/keysets/dsset-sub.example.net.
+++ /dev/null
@@ -1,4 +0,0 @@
-sub.example.net. IN DS 33936 7 1 8E06D0C044A15C396F43E1743EDC0C0772F119A7
-sub.example.net. IN DS 33936 7 2 496F56E015F74A955A1B277255DE56C564DCC5AF559DAAA40C4DE019 33E073E7
-sub.example.net. IN DS 60396 10 1 00A6EDBD5687D69DB7636749A057ABB43A13576E
-sub.example.net. IN DS 60396 10 2 FE01A3C47B2D3F19CAB32451986B36C2ADEF2C4247B7B24DEB77EDB9 0EE1CB4C
diff --git a/contrib/zkt-1.1.3/examples/flat/keysets/keyset-example.net. b/contrib/zkt-1.1.3/examples/flat/keysets/keyset-example.net.
deleted file mode 100644
index 3c07ff32..00000000
--- a/contrib/zkt-1.1.3/examples/flat/keysets/keyset-example.net.
+++ /dev/null
@@ -1,10 +0,0 @@
-$ORIGIN .
-example.net 7200 IN DNSKEY 257 3 8 (
- AwEAAQ5RiqQEKys2xlo5nK3n9tnWeGg/tHST
- baFw6AN1QPLlaEVLNXDaYKcpefu6ewNamaIn
- rjBrkkbqRnwKTuLCwJ9aA/hyFzocCOPh+he9
- dEQHbRTKDdTkjD3PqkOK97a+s1grWIdkRcce
- T3MXEsAwyjlasXPRKt/4v1sqS7592eyo6wTc
- beaoPYo6KMQLfcA9AHso9LBaRpqv7GlSjl5I
- V51mcU8=
- ) ; KSK; alg = RSASHA256; key id = 44671
diff --git a/contrib/zkt-1.1.3/examples/flat/keysets/keyset-sub.example.net. b/contrib/zkt-1.1.3/examples/flat/keysets/keyset-sub.example.net.
deleted file mode 100644
index 213cf67c..00000000
--- a/contrib/zkt-1.1.3/examples/flat/keysets/keyset-sub.example.net.
+++ /dev/null
@@ -1,15 +0,0 @@
-$ORIGIN .
-sub.example.net 7200 IN DNSKEY 257 3 7 (
- AwEAAcN3xHB1ZkrRCdxMWoogYdMx9NXO5pu2
- U41Terw/v9/tBQQ8ZCwq3KyBMTlwow1n1+ri
- NDi3jhJInw+obqUgvxEYU1+xkbAUXU26KqGD
- 7fe+PEk+UlVQ0LHY65yFHTWNc4/3DnEei++V
- uiJ1o7V7sSkQGDJC6L4U+e7vbHi3cBmx
- ) ; KSK; alg = NSEC3RSASHA1; key id = 33936
- 7200 IN DNSKEY 257 3 10 (
- AwEAAeTP9f5eCzD71+u4oa7XIjEz/IAD4OQB
- D+DgiflOGKrBRnU8uHVqIdqwPhaDqWdutMoZ
- abBDlABe/NB7y55ea7s8RCQzQ2dLFGEL3/+G
- cebakcATH8e6Fp5+QLCSpyRJhfSZZF6qDJ/p
- i2RCS2/VfwCwr+N7VRelFCzri6v+EEeV
- ) ; KSK; alg = RSASHA512; key id = 60396
diff --git a/contrib/zkt-1.1.3/examples/flat/named.conf b/contrib/zkt-1.1.3/examples/flat/named.conf
deleted file mode 100644
index f672fc63..00000000
--- a/contrib/zkt-1.1.3/examples/flat/named.conf
+++ /dev/null
@@ -1,111 +0,0 @@
-/*****************************************************************
-**
-** #(@) named.conf (c) 6. May 2004 (hoz)
-**
-*****************************************************************/
-
-/*****************************************************************
-** logging options
-*****************************************************************/
-logging {
- channel "named-log" {
- file "/var/log/named" versions 3 size 2m;
- print-time yes;
- print-category yes;
- print-severity yes;
- severity info;
- };
- channel "resolver-log" {
- file "/var/log/named";
- print-time yes;
- print-category yes;
- print-severity yes;
- severity debug 1;
- };
- channel "dnssec-log" {
-# file "/var/log/named-dnssec" ;
- file "/var/log/named" ;
- print-time yes;
- print-category yes;
- print-severity yes;
- severity debug 3;
- };
- category "dnssec" { "dnssec-log"; };
- category "default" { "named-log"; };
- category "resolver" { "resolver-log"; };
- category "client" { "resolver-log"; };
- category "queries" { "resolver-log"; };
-};
-
-/*****************************************************************
-** name server options
-*****************************************************************/
-options {
- directory ".";
-
- dump-file "/var/log/named_dump.db";
- statistics-file "/var/log/named.stats";
-
- listen-on-v6 { any; };
-
- query-source address * port 53;
- transfer-source * port 53;
- notify-source * port 53;
-
- recursion yes;
- dnssec-enable yes;
- edns-udp-size 4096;
-
-# dnssec-lookaside "." trust-anchor "trusted-keys.de.";
-
- querylog yes;
-
-};
-
-/*****************************************************************
-** include shared secrets...
-*****************************************************************/
-/** for control sessions ... **/
-controls {
- inet 127.0.0.1
- allow { localhost; };
- inet ::1
- allow { localhost; };
-};
-
-/*****************************************************************
-** ... and trusted_keys
-*****************************************************************/
-# include "trusted-keys.conf" ;
-
-/*****************************************************************
-** root server hints and required 127 stuff
-*****************************************************************/
-zone "." in {
- type hint;
- file "root.hint";
-};
-
-zone "localhost" in {
- type master;
- file "localhost.zone";
-};
-
-zone "0.0.127.in-addr.ARPA" in {
- type master;
- file "127.0.0.zone";
-};
-
-#include "zone.conf";
-
-zone "example.NET." in {
- type master;
- file "example.net/zone.db.signed";
- zone-statistics yes;
-};
-
-zone "sub.example.NET." in {
- type master;
- file "sub.example.net/zone.db.signed";
- zone-statistics no;
-};
diff --git a/contrib/zkt-1.1.3/examples/flat/sub.example.net/dlvset-sub.example.net. b/contrib/zkt-1.1.3/examples/flat/sub.example.net/dlvset-sub.example.net.
deleted file mode 100644
index b9d00174..00000000
--- a/contrib/zkt-1.1.3/examples/flat/sub.example.net/dlvset-sub.example.net.
+++ /dev/null
@@ -1,2 +0,0 @@
-sub.example.net.dlv.trusted-keys.de. IN DLV 48516 7 1 CC5E20F75F02BE11BC040960669A3F5058F30DC0
-sub.example.net.dlv.trusted-keys.de. IN DLV 48516 7 2 D124B0B50CF51780707FFBF91DC305617832C09E21F32F28B8A88EFB E1F03ACE
diff --git a/contrib/zkt-1.1.3/examples/flat/sub.example.net/dnskey.db b/contrib/zkt-1.1.3/examples/flat/sub.example.net/dnskey.db
deleted file mode 100644
index 5ab4653a..00000000
--- a/contrib/zkt-1.1.3/examples/flat/sub.example.net/dnskey.db
+++ /dev/null
@@ -1,47 +0,0 @@
-;
-; !!! Don't edit this file by hand.
-; !!! It will be generated by zkt-signer.
-;
-; Last generation time Nov 17 2014 19:12:44
-;
-
-; *** List of Key Signing Keys ***
-; sub.example.net. tag=60396 algo=RSASHA512 generated Nov 14 2014 18:09:16
-sub.example.net. 3600 IN DNSKEY 257 3 10 (
- AwEAAeTP9f5eCzD71+u4oa7XIjEz/IAD4OQBD+DgiflOGKrBRnU8uHVq
- IdqwPhaDqWdutMoZabBDlABe/NB7y55ea7s8RCQzQ2dLFGEL3/+Gceba
- kcATH8e6Fp5+QLCSpyRJhfSZZF6qDJ/pi2RCS2/VfwCwr+N7VRelFCzr
- i6v+EEeV
- ) ; key id = 60396
-
-; sub.example.net. tag=33936 algo=NSEC3RSASHA1 generated Nov 14 2014 18:11:13
-sub.example.net. 3600 IN DNSKEY 257 3 7 (
- AwEAAcN3xHB1ZkrRCdxMWoogYdMx9NXO5pu2U41Terw/v9/tBQQ8ZCwq
- 3KyBMTlwow1n1+riNDi3jhJInw+obqUgvxEYU1+xkbAUXU26KqGD7fe+
- PEk+UlVQ0LHY65yFHTWNc4/3DnEei++VuiJ1o7V7sSkQGDJC6L4U+e7v
- bHi3cBmx
- ) ; key id = 33936
-
-; *** List of Zone Signing Keys ***
-; sub.example.net. tag=21503 algo=RSASHA512 generated Nov 14 2014 18:09:16
-sub.example.net. 3600 IN DNSKEY 256 3 10 (
- AwEAAahmSxE4IXfSeRORsgUxextvSLXIqa790jXejxDQoSmv+Tb7mHsK
- sB65qxMjXYwIWmh4lbx66g/yVL9NaIMw6o01jdH3zYi0p3grqvGB8Z+s
- 4PodN5v1xmSEEqXjYXsjHucg+hQgMkrvls3uwl//gz9t5iQx7/FQ56dD
- zpPyxti5
- ) ; key id = 21503
-
-; sub.example.net. tag=6419 algo=NSEC3RSASHA1 generated Nov 14 2014 18:11:13
-sub.example.net. 3600 IN DNSKEY 256 3 7 (
- AwEAAbv1lSpyfRbHCrGs667jxg8+IYrU8GqZ8NPy1CGj3yxtFH1xCvd7
- E9gYjtcPaqse+FsCrChUi/2RQGIPaB0PbyM=
- ) ; key id = 6419
-
-; sub.example.net. tag=53867 algo=RSASHA512 generated Nov 17 2014 19:12:44
-sub.example.net. 3600 IN DNSKEY 256 3 10 (
- AwEAAeweX3J5rUFFMZMN06/70lion/SSy6i6HVAveLAgXMQVJBRngAQp
- 2TVxfh0Dxjjywu1NkEokr5FUB9kqL36SwwMTzoZ3yuJjylw+GS8dw/Z9
- PFEw0aNMP3qXnL5wHVuzatBnpGo9jAzy6PtRkJal/WiNPl8tdlIaxhi5
- X0EnQ2cf
- ) ; key id = 53867
-
diff --git a/contrib/zkt-1.1.3/examples/flat/sub.example.net/dnssec.conf b/contrib/zkt-1.1.3/examples/flat/sub.example.net/dnssec.conf
deleted file mode 100644
index f1f8dec3..00000000
--- a/contrib/zkt-1.1.3/examples/flat/sub.example.net/dnssec.conf
+++ /dev/null
@@ -1,7 +0,0 @@
-ResignInterval: 1d # (86400 seconds)
-SigValidity: 2d # (172800 seconds)
-MaximumTTL: 90s # (90 seconds)
-KSKlifetime: 1w # (604800 seconds)
-KSKbits: 1024
-ZSKlifetime: 3d # (259200 seconds)
-NSEC3: On # (On|Off|OptOut)
diff --git a/contrib/zkt-1.1.3/examples/flat/sub.example.net/maxhexsalt b/contrib/zkt-1.1.3/examples/flat/sub.example.net/maxhexsalt
deleted file mode 100644
index 94bc5aff..00000000
--- a/contrib/zkt-1.1.3/examples/flat/sub.example.net/maxhexsalt
+++ /dev/null
@@ -1 +0,0 @@
-1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDE \ No newline at end of file
diff --git a/contrib/zkt-1.1.3/examples/flat/sub.example.net/maxhexsalt+1 b/contrib/zkt-1.1.3/examples/flat/sub.example.net/maxhexsalt+1
deleted file mode 100644
index 6f1f3b5c..00000000
--- a/contrib/zkt-1.1.3/examples/flat/sub.example.net/maxhexsalt+1
+++ /dev/null
@@ -1 +0,0 @@
-1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDF1234567890ABCDE1 \ No newline at end of file
diff --git a/contrib/zkt-1.1.3/examples/flat/sub.example.net/zktlog-sub.example.net. b/contrib/zkt-1.1.3/examples/flat/sub.example.net/zktlog-sub.example.net.
deleted file mode 100644
index 709d18e1..00000000
--- a/contrib/zkt-1.1.3/examples/flat/sub.example.net/zktlog-sub.example.net.
+++ /dev/null
@@ -1,218 +0,0 @@
-2010-10-21 14:01:35.486: debug: Check RFC5011 status
-2010-10-21 14:01:35.486: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-10-21 14:01:35.486: debug: Check KSK status
-2010-10-21 14:01:35.486: debug: Check ZSK status
-2010-10-21 14:01:35.486: debug: No active ZSK found: generate new one
-2010-10-21 14:01:35.495: error: sub.example.net.": can't generate new ZSK
-2010-10-21 14:01:35.495: debug: Re-signing necessary: Modfied zone key set
-2010-10-21 14:01:35.496: notice: "sub.example.net.": re-signing triggered: Modfied zone key set
-2010-10-21 14:01:35.496: debug: Writing key file "./sub.example.net/dnskey.db"
-2010-10-21 14:01:35.496: debug: Incrementing serial number in file "./sub.example.net/zone.db"
-2010-10-21 14:01:35.496: debug: Signing zone "sub.example.net."
-2010-10-21 14:01:35.496: debug: Run cmd "cd ./sub.example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -3 9FC981 -C -g -p -d ../keysets -o sub.example.net. -e +172800 zone.db K*.private 2>&1"
-2010-10-21 14:01:35.546: debug: Cmd dnssec-signzone return: "dnssec-signzone: fatal: DNSSEC completeness test failed."
-2010-10-21 14:01:35.546: error: "sub.example.net.": signing failed!
-2010-10-21 14:02:09.146: debug: Check RFC5011 status
-2010-10-21 14:02:09.146: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-10-21 14:02:09.146: debug: Check KSK status
-2010-10-21 14:02:09.146: debug: Check ZSK status
-2010-10-21 14:02:09.146: debug: No active ZSK found: generate new one
-2010-10-21 14:02:09.156: error: sub.example.net.": can't generate new ZSK
-2010-10-21 14:02:09.156: debug: Re-signing necessary: Modified keys
-2010-10-21 14:02:09.156: notice: "sub.example.net.": re-signing triggered: Modified keys
-2010-10-21 14:02:09.156: debug: Writing key file "./sub.example.net/dnskey.db"
-2010-10-21 14:02:09.157: debug: Incrementing serial number in file "./sub.example.net/zone.db"
-2010-10-21 14:02:09.157: debug: Signing zone "sub.example.net."
-2010-10-21 14:02:09.157: debug: Run cmd "cd ./sub.example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -3 BD326D -C -g -p -d ../keysets -o sub.example.net. -e +172800 zone.db K*.private 2>&1"
-2010-10-21 14:02:09.208: debug: Cmd dnssec-signzone return: "dnssec-signzone: fatal: DNSSEC completeness test failed."
-2010-10-21 14:02:09.208: error: "sub.example.net.": signing failed!
-2010-10-21 14:05:35.988: debug: Check RFC5011 status
-2010-10-21 14:05:35.988: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-10-21 14:05:35.988: debug: Check KSK status
-2010-10-21 14:05:35.988: debug: Check ZSK status
-2010-10-21 14:05:35.988: debug: No active ZSK found: generate new one
-2010-10-21 14:05:36.091: info: "sub.example.net.": generated new ZSK 7987
-2010-10-21 14:05:36.091: debug: Re-signing necessary: Modfied zone key set
-2010-10-21 14:05:36.091: notice: "sub.example.net.": re-signing triggered: Modfied zone key set
-2010-10-21 14:05:36.091: debug: Writing key file "./sub.example.net/dnskey.db"
-2010-10-21 14:05:36.091: debug: Incrementing serial number in file "./sub.example.net/zone.db"
-2010-10-21 14:05:36.091: debug: Signing zone "sub.example.net."
-2010-10-21 14:05:36.091: debug: Run cmd "cd ./sub.example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -3 75DE06 -C -g -p -d ../keysets -o sub.example.net. -e +172800 zone.db K*.private 2>&1"
-2010-10-21 14:05:36.170: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2010-10-21 14:05:36.170: debug: Signing completed after 0s.
-2010-10-21 14:30:43.892: debug: Check RFC5011 status
-2010-10-21 14:30:43.892: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2010-10-21 14:30:43.892: debug: Check KSK status
-2010-10-21 14:30:43.892: debug: Check ZSK status
-2010-10-21 14:30:43.892: debug: Re-signing not necessary!
-2010-10-21 14:30:43.892: debug: Check if there is a parent file to copy
-2014-11-14 18:04:37.686: debug: Check RFC5011 status
-2014-11-14 18:04:37.686: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-14 18:04:37.686: debug: Check KSK status
-2014-11-14 18:04:37.686: warning: "sub.example.net.": lifetime of key signing key 33176 exceeded since 4d8h26m2s
-2014-11-14 18:04:37.686: debug: Check ZSK status
-2014-11-14 18:04:37.686: debug: Lifetime(259200 +/-150 sec) of active key 7987 exceeded (980762 sec)
-2014-11-14 18:04:37.686: debug: ->waiting for published key
-2014-11-14 18:04:37.686: notice: "sub.example.net.": lifetime of zone signing key 7987 exceeded since 1w1d8h26m2s: ZSK rollover deferred: waiting for published key
-2014-11-14 18:04:37.686: debug: New ZSK for publishing needed
-2014-11-14 18:04:37.721: debug: ->creating new key 39632
-2014-11-14 18:04:37.721: info: "sub.example.net.": new zone signing key 39632 generated for publishing
-2014-11-14 18:04:37.721: debug: Re-signing necessary: Modified zone key set
-2014-11-14 18:04:37.721: notice: "sub.example.net.": re-signing triggered: Modified zone key set
-2014-11-14 18:04:37.721: debug: Writing key file "./sub.example.net/dnskey.db"
-2014-11-14 18:04:37.721: debug: Incrementing serial number in file "./sub.example.net/zone.db"
-2014-11-14 18:04:37.721: debug: Signing zone "sub.example.net."
-2014-11-14 18:04:37.722: debug: Run cmd "cd ./sub.example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -3 97195D -C -g -p -d ../keysets -o sub.example.net. -e +172800 zone.db K*.private 2>&1"
-2014-11-14 18:04:37.729: debug: Cmd dnssec-signzone return: "dnssec-signzone: fatal: NSEC3 generation requested with NSEC-only DNSKEY"
-2014-11-14 18:04:37.729: error: "sub.example.net.": signing failed!
-2014-11-14 18:09:16.251: debug: Check RFC5011 status
-2014-11-14 18:09:16.251: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-14 18:09:16.251: debug: Check KSK status
-2014-11-14 18:09:16.251: debug: No active KSK found: generate new one
-2014-11-14 18:09:16.288: info: "sub.example.net.": generated new KSK 60396
-2014-11-14 18:09:16.288: debug: Check ZSK status
-2014-11-14 18:09:16.288: debug: No active ZSK found: generate new one
-2014-11-14 18:09:16.329: info: "sub.example.net.": generated new ZSK 21503
-2014-11-14 18:09:16.329: debug: Re-signing necessary: Modified zone key set
-2014-11-14 18:09:16.329: notice: "sub.example.net.": re-signing triggered: Modified zone key set
-2014-11-14 18:09:16.329: debug: Writing key file "./sub.example.net/dnskey.db"
-2014-11-14 18:09:16.330: debug: Incrementing serial number in file "./sub.example.net/zone.db"
-2014-11-14 18:09:16.330: debug: Signing zone "sub.example.net."
-2014-11-14 18:09:16.330: debug: Run cmd "cd ./sub.example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -3 B26BB7 -C -g -p -d ../keysets -o sub.example.net. -e +172800 zone.db K*.private 2>&1"
-2014-11-14 18:09:16.427: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2014-11-14 18:09:16.427: debug: Signing completed after 0s.
-2014-11-14 18:11:40.699: debug: Check RFC5011 status
-2014-11-14 18:11:40.699: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-14 18:11:40.699: debug: Check KSK status
-2014-11-14 18:11:40.699: debug: Check ZSK status
-2014-11-14 18:11:40.699: debug: Re-signing necessary: Modified keys
-2014-11-14 18:11:40.699: notice: "sub.example.net.": re-signing triggered: Modified keys
-2014-11-14 18:11:40.699: debug: Writing key file "././sub.example.net/dnskey.db"
-2014-11-14 18:11:40.699: debug: Incrementing serial number in file "././sub.example.net/zone.db"
-2014-11-14 18:11:40.699: debug: Signing zone "sub.example.net."
-2014-11-14 18:11:40.699: debug: Run cmd "cd ././sub.example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -3 E8CBA9 -C -g -p -d ../keysets -o sub.example.net. -e +172800 zone.db K*.private 2>&1"
-2014-11-14 18:11:40.876: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2014-11-14 18:11:40.876: debug: Signing completed after 0s.
-2014-11-14 18:11:46.599: debug: Check RFC5011 status
-2014-11-14 18:11:46.599: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-14 18:11:46.599: debug: Check KSK status
-2014-11-14 18:11:46.599: debug: Check ZSK status
-2014-11-14 18:11:46.599: debug: Re-signing not necessary!
-2014-11-14 18:11:46.599: debug: Check if there is a parent file to copy
-2014-11-14 18:15:54.379: debug: Check RFC5011 status
-2014-11-14 18:15:54.379: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-14 18:15:54.379: debug: Check KSK status
-2014-11-14 18:15:54.379: debug: Check ZSK status
-2014-11-14 18:15:54.379: debug: Re-signing not necessary!
-2014-11-14 18:15:54.379: debug: Check if there is a parent file to copy
-2014-11-14 18:31:09.365: debug: Check RFC5011 status
-2014-11-14 18:31:09.365: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-14 18:31:09.365: debug: Check KSK status
-2014-11-14 18:31:09.365: debug: Check ZSK status
-2014-11-14 18:31:09.365: debug: Re-signing not necessary!
-2014-11-14 18:31:09.365: debug: Check if there is a parent file to copy
-2014-11-14 18:31:27.335: debug: Check RFC5011 status
-2014-11-14 18:31:27.335: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-14 18:31:27.335: debug: Check KSK status
-2014-11-14 18:31:27.335: debug: Check ZSK status
-2014-11-14 18:31:27.335: debug: Re-signing not necessary!
-2014-11-14 18:31:27.335: debug: Check if there is a parent file to copy
-2014-11-14 18:38:16.355: debug: Check RFC5011 status
-2014-11-14 18:38:16.355: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-14 18:38:16.355: debug: Check KSK status
-2014-11-14 18:38:16.355: debug: Check ZSK status
-2014-11-14 18:38:16.355: debug: Re-signing not necessary!
-2014-11-14 18:38:16.356: debug: Check if there is a parent file to copy
-2014-11-15 18:16:50.447: debug: Check RFC5011 status
-2014-11-15 18:16:50.447: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-15 18:16:50.447: debug: Check KSK status
-2014-11-15 18:16:50.447: debug: Check ZSK status
-2014-11-15 18:16:50.447: debug: Re-signing necessary: re-signing interval (1d) reached
-2014-11-15 18:16:50.447: notice: "sub.example.net.": re-signing triggered: re-signing interval (1d) reached
-2014-11-15 18:16:50.447: debug: Writing key file "././sub.example.net/dnskey.db"
-2014-11-15 18:16:50.447: debug: Incrementing serial number in file "././sub.example.net/zone.db"
-2014-11-15 18:16:50.447: debug: Signing zone "sub.example.net."
-2014-11-15 18:16:50.448: debug: Run cmd "cd ././sub.example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -3 DC5680 -C -g -p -d ../keysets -o sub.example.net. -e +172800 zone.db K*.private 2>&1"
-2014-11-15 18:16:50.572: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2014-11-15 18:16:50.572: debug: Signing completed after 0s.
-2014-11-15 18:16:54.202: debug: Check RFC5011 status
-2014-11-15 18:16:54.202: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-15 18:16:54.202: debug: Check KSK status
-2014-11-15 18:16:54.202: debug: Check ZSK status
-2014-11-15 18:16:54.202: debug: Re-signing not necessary!
-2014-11-15 18:16:54.202: debug: Check if there is a parent file to copy
-2014-11-15 18:17:06.918: debug: Check RFC5011 status
-2014-11-15 18:17:06.918: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-15 18:17:06.918: debug: Check KSK status
-2014-11-15 18:17:06.918: debug: Check ZSK status
-2014-11-15 18:17:06.918: debug: Re-signing not necessary!
-2014-11-15 18:17:06.918: debug: Check if there is a parent file to copy
-2014-11-15 18:17:17.242: debug: Check RFC5011 status
-2014-11-15 18:17:17.242: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-15 18:17:17.242: debug: Check KSK status
-2014-11-15 18:17:17.242: debug: Check ZSK status
-2014-11-15 18:17:17.242: debug: Re-signing not necessary!
-2014-11-15 18:17:17.242: debug: Check if there is a parent file to copy
-2014-11-17 19:12:44.029: debug: Check RFC5011 status
-2014-11-17 19:12:44.029: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-17 19:12:44.029: debug: Check KSK status
-2014-11-17 19:12:44.029: debug: Check ZSK status
-2014-11-17 19:12:44.029: debug: Lifetime(259200 +/-150 sec) of active key 21503 exceeded (263008 sec)
-2014-11-17 19:12:44.029: debug: ->waiting for published key
-2014-11-17 19:12:44.029: notice: "sub.example.net.": lifetime of zone signing key 21503 exceeded since 1h3m28s: ZSK rollover deferred: waiting for published key
-2014-11-17 19:12:44.029: debug: New ZSK for publishing needed
-2014-11-17 19:12:44.110: debug: ->creating new key 53867
-2014-11-17 19:12:44.110: info: "sub.example.net.": new zone signing key 53867 generated for publishing
-2014-11-17 19:12:44.110: debug: Re-signing necessary: Modified zone key set
-2014-11-17 19:12:44.110: notice: "sub.example.net.": re-signing triggered: Modified zone key set
-2014-11-17 19:12:44.110: debug: Writing key file "./sub.example.net/dnskey.db"
-2014-11-17 19:12:44.111: debug: Incrementing serial number in file "./sub.example.net/zone.db"
-2014-11-17 19:12:44.111: debug: Signing zone "sub.example.net."
-2014-11-17 19:12:44.111: debug: Run cmd "cd ./sub.example.net; /usr/local/sbin/dnssec-signzone -n 1 -u -3 9F5882 -C -g -p -d ../keysets -o sub.example.net. -e +172800 zone.db K*.private 2>&1"
-2014-11-17 19:12:44.250: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2014-11-17 19:12:44.250: debug: Signing completed after 0s.
-2014-11-17 19:12:49.691: debug: Check RFC5011 status
-2014-11-17 19:12:49.691: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-17 19:12:49.691: debug: Check KSK status
-2014-11-17 19:12:49.691: debug: Check ZSK status
-2014-11-17 19:12:49.691: debug: Lifetime(259200 +/-150 sec) of active key 21503 exceeded (263013 sec)
-2014-11-17 19:12:49.691: debug: ->waiting for published key
-2014-11-17 19:12:49.691: notice: "sub.example.net.": lifetime of zone signing key 21503 exceeded since 1h3m33s: ZSK rollover deferred: waiting for published key
-2014-11-17 19:12:49.692: debug: Re-signing not necessary!
-2014-11-17 19:12:49.692: debug: Check if there is a parent file to copy
-2014-11-17 19:13:02.603: debug: Check RFC5011 status
-2014-11-17 19:13:02.603: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-17 19:13:02.603: debug: Check KSK status
-2014-11-17 19:13:02.603: debug: Check ZSK status
-2014-11-17 19:13:02.603: debug: Lifetime(259200 +/-150 sec) of active key 21503 exceeded (263026 sec)
-2014-11-17 19:13:02.603: debug: ->waiting for published key
-2014-11-17 19:13:02.603: notice: "sub.example.net.": lifetime of zone signing key 21503 exceeded since 1h3m46s: ZSK rollover deferred: waiting for published key
-2014-11-17 19:13:02.603: debug: Re-signing not necessary!
-2014-11-17 19:13:02.603: debug: Check if there is a parent file to copy
-2014-11-17 19:13:50.409: debug: Check RFC5011 status
-2014-11-17 19:13:50.409: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-17 19:13:50.409: debug: Check KSK status
-2014-11-17 19:13:50.409: debug: Check ZSK status
-2014-11-17 19:13:50.409: debug: Lifetime(259200 +/-150 sec) of active key 21503 exceeded (263074 sec)
-2014-11-17 19:13:50.409: debug: ->waiting for published key
-2014-11-17 19:13:50.409: notice: "sub.example.net.": lifetime of zone signing key 21503 exceeded since 1h4m34s: ZSK rollover deferred: waiting for published key
-2014-11-17 19:13:50.409: debug: Re-signing not necessary!
-2014-11-17 19:13:50.409: debug: Check if there is a parent file to copy
-2014-11-17 19:13:54.302: debug: Check RFC5011 status
-2014-11-17 19:13:54.302: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-17 19:13:54.302: debug: Check KSK status
-2014-11-17 19:13:54.302: debug: Check ZSK status
-2014-11-17 19:13:54.302: debug: Lifetime(259200 +/-150 sec) of active key 21503 exceeded (263078 sec)
-2014-11-17 19:13:54.302: debug: ->waiting for published key
-2014-11-17 19:13:54.302: notice: "sub.example.net.": lifetime of zone signing key 21503 exceeded since 1h4m38s: ZSK rollover deferred: waiting for published key
-2014-11-17 19:13:54.302: debug: Re-signing not necessary!
-2014-11-17 19:13:54.302: debug: Check if there is a parent file to copy
-2014-11-17 19:14:01.845: debug: Check RFC5011 status
-2014-11-17 19:14:01.846: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2014-11-17 19:14:01.846: debug: Check KSK status
-2014-11-17 19:14:01.846: debug: Check ZSK status
-2014-11-17 19:14:01.846: debug: Lifetime(259200 +/-150 sec) of active key 21503 exceeded (263085 sec)
-2014-11-17 19:14:01.846: debug: ->waiting for published key
-2014-11-17 19:14:01.846: notice: "sub.example.net.": lifetime of zone signing key 21503 exceeded since 1h4m45s: ZSK rollover deferred: waiting for published key
-2014-11-17 19:14:01.846: debug: Re-signing not necessary!
-2014-11-17 19:14:01.846: debug: Check if there is a parent file to copy
diff --git a/contrib/zkt-1.1.3/examples/flat/sub.example.net/zone.db b/contrib/zkt-1.1.3/examples/flat/sub.example.net/zone.db
deleted file mode 100644
index 47c1dd9e..00000000
--- a/contrib/zkt-1.1.3/examples/flat/sub.example.net/zone.db
+++ /dev/null
@@ -1,25 +0,0 @@
-;-----------------------------------------------------------------
-;
-; @(#) sub.example.net/zone.db
-;
-;-----------------------------------------------------------------
-
-$TTL 7200
-
-@ IN SOA ns1.example.net. hostmaster.example.net. (
- 13 ; Serial
- 86400 ; Refresh (RIPE recommendation if NOTIFY is used)
- 1800 ; Retry
- 2W ; Expire
- 7200 ) ; Minimum
-
-
- IN NS ns1.example.net.
-
-$INCLUDE dnskey.db
-
-localhost IN A 127.0.0.1
-
-a IN A 1.2.3.4
-b IN A 1.2.3.5
-c IN A 1.2.3.6
diff --git a/contrib/zkt-1.1.3/examples/flat/sub.example.net/zone.db.signed b/contrib/zkt-1.1.3/examples/flat/sub.example.net/zone.db.signed
deleted file mode 100644
index 7b906635..00000000
--- a/contrib/zkt-1.1.3/examples/flat/sub.example.net/zone.db.signed
+++ /dev/null
@@ -1,233 +0,0 @@
-; File written on Mon Nov 17 19:12:44 2014
-; dnssec_signzone version 9.10.1b1
-sub.example.net. 7200 IN SOA ns1.example.net. hostmaster.example.net. (
- 13 ; serial
- 86400 ; refresh (1 day)
- 1800 ; retry (30 minutes)
- 1209600 ; expire (2 weeks)
- 7200 ; minimum (2 hours)
- )
- 7200 RRSIG SOA 7 3 7200 (
- 20141119171244 20141117171244 6419 sub.example.net.
- PttXCUlP7dbMYWpsFuMsy+/VN7HZp0TOWgmr
- wvQHmb9Ju/y/ez3qHLjaqPun3osNEsjoDMB1
- lB40pJzb0ghHyA== )
- 7200 RRSIG SOA 10 3 7200 (
- 20141119171244 20141117171244 21503 sub.example.net.
- Gmcf5fw7E3qZH+qMzAM/AbUPk5bSE5NeOcBq
- iRu6ArSiTZOQOVzh/vtcqZxaRYhGRmcP09Y1
- r0bfxPRwxonM/68How2/KaYXDtK1c/X7Xtiu
- hqh5E7Cd9952qEU1QzKPTq5q9b7tvW/vHbf0
- wNK6WgfXiupZUtTt5DdA1AVXnuk= )
- 7200 NS ns1.example.net.
- 7200 RRSIG NS 7 3 7200 (
- 20141119171244 20141117171244 6419 sub.example.net.
- dX8h35oAdqhsHi/XrkvzSb+CjrUKCmIIcFhQ
- W3LBXeG1A2u0qvaWBTjCZlL+P82+drBEpHe9
- mWAlkZX2QUIXBg== )
- 7200 RRSIG NS 10 3 7200 (
- 20141119171244 20141117171244 21503 sub.example.net.
- OjicLog1suU6mLdK3AhYv3HXFmE30z/DcWWS
- tSj2Gl8jCwVsIs6ckUi1OWTNxyelHXpv+yLd
- eDFp8j080Txe/vxoLSb/p1Cny+y8JIepAeHU
- u74MFmRqEchHoYD2r3Pz2eoW49vqHKEHnuS0
- 2N7vrkQpUbhPE3FK+BzfUz8oHnM= )
- 3600 DNSKEY 256 3 7 (
- AwEAAbv1lSpyfRbHCrGs667jxg8+IYrU8GqZ
- 8NPy1CGj3yxtFH1xCvd7E9gYjtcPaqse+FsC
- rChUi/2RQGIPaB0PbyM=
- ) ; ZSK; alg = NSEC3RSASHA1; key id = 6419
- 3600 DNSKEY 256 3 10 (
- AwEAAahmSxE4IXfSeRORsgUxextvSLXIqa79
- 0jXejxDQoSmv+Tb7mHsKsB65qxMjXYwIWmh4
- lbx66g/yVL9NaIMw6o01jdH3zYi0p3grqvGB
- 8Z+s4PodN5v1xmSEEqXjYXsjHucg+hQgMkrv
- ls3uwl//gz9t5iQx7/FQ56dDzpPyxti5
- ) ; ZSK; alg = RSASHA512; key id = 21503
- 3600 DNSKEY 256 3 10 (
- AwEAAeweX3J5rUFFMZMN06/70lion/SSy6i6
- HVAveLAgXMQVJBRngAQp2TVxfh0Dxjjywu1N
- kEokr5FUB9kqL36SwwMTzoZ3yuJjylw+GS8d
- w/Z9PFEw0aNMP3qXnL5wHVuzatBnpGo9jAzy
- 6PtRkJal/WiNPl8tdlIaxhi5X0EnQ2cf
- ) ; ZSK; alg = RSASHA512; key id = 53867
- 3600 DNSKEY 257 3 7 (
- AwEAAcN3xHB1ZkrRCdxMWoogYdMx9NXO5pu2
- U41Terw/v9/tBQQ8ZCwq3KyBMTlwow1n1+ri
- NDi3jhJInw+obqUgvxEYU1+xkbAUXU26KqGD
- 7fe+PEk+UlVQ0LHY65yFHTWNc4/3DnEei++V
- uiJ1o7V7sSkQGDJC6L4U+e7vbHi3cBmx
- ) ; KSK; alg = NSEC3RSASHA1; key id = 33936
- 3600 DNSKEY 257 3 10 (
- AwEAAeTP9f5eCzD71+u4oa7XIjEz/IAD4OQB
- D+DgiflOGKrBRnU8uHVqIdqwPhaDqWdutMoZ
- abBDlABe/NB7y55ea7s8RCQzQ2dLFGEL3/+G
- cebakcATH8e6Fp5+QLCSpyRJhfSZZF6qDJ/p
- i2RCS2/VfwCwr+N7VRelFCzri6v+EEeV
- ) ; KSK; alg = RSASHA512; key id = 60396
- 3600 RRSIG DNSKEY 7 3 3600 (
- 20141119171244 20141117171244 6419 sub.example.net.
- KZIpG5rY8FipKmTaz1mT1rU7Wf/alUa0REGs
- eIBU2Cj3niDZCN3q72uwls28s+ZLBiHRupiz
- VB27b+2EwnyXUw== )
- 3600 RRSIG DNSKEY 7 3 3600 (
- 20141119171244 20141117171244 33936 sub.example.net.
- cGyrJmadXCZXA+8q5Kn9AExvv5okZQuUvjuR
- iJn3NGjVfaCkQdAmpzG1JCRLka0SIoNUfR3L
- M6AUlnebGeLTTroQpUhc+9xzGh+j6ZG34Oy4
- z5eGneO9zKCxHo7RS5QKtBMX/B4jGBA1ZXrH
- 8cznGrJP5lXmG0/Slqx5VkZpGZs= )
- 3600 RRSIG DNSKEY 10 3 3600 (
- 20141119171244 20141117171244 21503 sub.example.net.
- WSKwZuoi/R5FbUAXbPi2Qzb1X9NmQlvgl/NS
- BtNZPj0F6IkokKgAt+uTCb0yUFY5LAK5Au+Q
- UhO8KRpU6tvgpXl3EDjoS2w4cB3x+lv5TNyb
- pGVfUZoPcHUrkb+TbcuQfGwJwZff6nd7HmrA
- rctHg958+q2bZZw1pqY+cJLUAyE= )
- 3600 RRSIG DNSKEY 10 3 3600 (
- 20141119171244 20141117171244 60396 sub.example.net.
- rxtIgcBHPI3tvqEVA2P788Nh0amVHy0v/T57
- fcwTbTLEnKDyd+uj1uYYiWkOvXu/1ooVzQu8
- 7KqXjKIxL0qheqladlUMQtBfh9Obz1pcQ6Jn
- xE53Xkq+g4FNy06Fr6OXBjKCPgMWvF0AhGAy
- 1vZVLWcAjm27D3LwXD3dK52rmw8= )
- 0 NSEC3PARAM 1 0 10 9F5882
- 0 RRSIG NSEC3PARAM 7 3 0 (
- 20141119171244 20141117171244 6419 sub.example.net.
- PKdn/FXU0FoVS+cspg+YPlHamyZ6HHFsspZM
- LDF7HxxDSp0dh1tRczCLZbqGqcCXHnNZcpC0
- u7U07psBmVflrg== )
- 0 RRSIG NSEC3PARAM 10 3 0 (
- 20141119171244 20141117171244 21503 sub.example.net.
- OMwvPQ2mJh07YkZqG93wdx0lxpJ7lVvWBpvZ
- dCOxD/hkUJ2GiOnleheXyBymNBb6NeipjhP4
- v2GzL0V6zxMMiP95jgFiH0QA0VZulfZBYgLt
- Q4/OzAVmsoF6rWDON64AjeW4K9739dEzIUVZ
- LZIFQXisPdhvrn4NgJrdnpRuwk0= )
-a.sub.example.net. 7200 IN A 1.2.3.4
- 7200 RRSIG A 7 4 7200 (
- 20141119171244 20141117171244 6419 sub.example.net.
- TSpw1C3Cm6GHT+Si/FnQy3+jVhl3OzSNSjYg
- 4wpfrs36/ZhOfeIf1Gy/G1yQfwD6WVZ3+wEw
- pZMXXWcz7HQIHg== )
- 7200 RRSIG A 10 4 7200 (
- 20141119171244 20141117171244 21503 sub.example.net.
- J+lF2TQCLSTmwI9RT7RsWiavgorqcRGJ/ad3
- 7EwonF2CtZ29I8eVSTzUgtgNOHPOXlfK7UC5
- 6whoZE+peok5rTQu2GXHrmYdpEA4yTVXV+Mt
- VVizFAlRVojCIuNAd8V033XKj5xp0DVJVD8M
- s4n+IQ1C/re3qxj05mRWTGWDZAs= )
-b.sub.example.net. 7200 IN A 1.2.3.5
- 7200 RRSIG A 7 4 7200 (
- 20141119171244 20141117171244 6419 sub.example.net.
- d2SGbYnahENadQt9lMpXNhwjvTKLvzmVO2WA
- H4I6CrX4OB9q1CiyivNUWznvUej7391j+oF+
- 91tNmiea7NXkbg== )
- 7200 RRSIG A 10 4 7200 (
- 20141119171244 20141117171244 21503 sub.example.net.
- UNYfWh3nPXc3/cLJkVxYxgD73gV9NaqbNHTp
- AtYOnyOHxQ/p4IPF+RlOzaFK0nHAdmGnW/cN
- A8VZwWloyZBDhx2DjwrBTkDpFI/nqi1VdI53
- A72aLjuFoHo/sUWkC0DNyYrOOWfv7ief3n7g
- o9zYZ6AYMzHU15/MOLFo026M72s= )
-c.sub.example.net. 7200 IN A 1.2.3.6
- 7200 RRSIG A 7 4 7200 (
- 20141119171244 20141117171244 6419 sub.example.net.
- IgLll78E6Eh6wQFG8DjR9r5f1+tOfd7w54Z8
- ZJn6NMXKpI9htEz4wc2uhYitTfQMkjhHs713
- l9hDzj/N7ZUq4w== )
- 7200 RRSIG A 10 4 7200 (
- 20141119171244 20141117171244 21503 sub.example.net.
- AJMY0J1QS68a43GKWOxBycEF4vmqYU4xG7mx
- oLVs3W5zP4oWLc9L2KalGVSpc3tfgQEYMpaf
- YMC/6lOV/jYVgu3tJHjXTXyXuakO1HmbUmz4
- dsYwxqi2gCpUTrmqcRlh8aEvOXvLmsCS4Z4W
- h9xDAguwKZO+FuH98GdjvYIBxZQ= )
-localhost.sub.example.net. 7200 IN A 127.0.0.1
- 7200 RRSIG A 7 4 7200 (
- 20141119171244 20141117171244 6419 sub.example.net.
- NqMM+MGnzC3pw27cKVFE5P2gFv1rkHYj1sAU
- XFk2qAlV6TodM4pJD+Tc1QfQxs5FzJiNGY5M
- ko7d1aGFx3f/0A== )
- 7200 RRSIG A 10 4 7200 (
- 20141119171244 20141117171244 21503 sub.example.net.
- iGO6C0oU4frEi+JgR5I09jE0vRB7SKZUmeE9
- HVAQeYwvUxUZ/CxANrdRddLTRS56WEXZh8/0
- SftcbcRzBgcR9B6nJBNm4C2r8ERCU0PBLuz5
- qtCMjYE+522ix1rhjKeyRIAmljv5J8TvDVGB
- H/wMfmFRH/RkLcN/NeGcoWdyh/I= )
-48I3NCI84TCLKJ9NNME64BPAJFNDGLQA.sub.example.net. 7200 IN NSEC3 1 0 10 9F5882 (
- 4BAC6PP7TNBHPHB5NF8CPM9TCFCGBR6R
- A RRSIG )
- 7200 RRSIG NSEC3 7 4 7200 (
- 20141119171244 20141117171244 6419 sub.example.net.
- cUUKJ2t2Jwj37BnhN3OiPmP+Vx8svGXQ+A8u
- wupiN+hkyZq30MvAIOOfw9iwrlb7ViDoywJD
- QXqlAzmnko1BPQ== )
- 7200 RRSIG NSEC3 10 4 7200 (
- 20141119171244 20141117171244 21503 sub.example.net.
- mPc1t/mshOCMCAlnm3ADUiPdQz0FQQNW9e9C
- D+uKsibGyiTY0lTfmWy9h8DuLQZ+NAPcmk48
- IXyopP3GiqBRNuVLU18B4plmP4+BqSK43iMa
- E9wPKzdYkWKrYQtpExrJOGcdKgEKYokrNLX3
- AjeweKQlF0XsfXK+zR/Sw9ZfibY= )
-4BAC6PP7TNBHPHB5NF8CPM9TCFCGBR6R.sub.example.net. 7200 IN NSEC3 1 0 10 9F5882 (
- 4LG74TG924990NI8BHBJU9FAV4TUMCLT
- A RRSIG )
- 7200 RRSIG NSEC3 7 4 7200 (
- 20141119171244 20141117171244 6419 sub.example.net.
- ZGKw78T9mj+71tdtaJPqzhJojkmSREbnNDPM
- Ze/XTdHV0AgE0tFpIY3k7deUJGGUzow9cz8e
- ro396x1UGvd4WA== )
- 7200 RRSIG NSEC3 10 4 7200 (
- 20141119171244 20141117171244 21503 sub.example.net.
- hFjoFcD//EmH8J+dYCV3Fcupmxdao0BNjWWp
- odVSTCRtJJCZhmkrz3ZM4nbqD8sSZII20M7H
- D7aFzm2H5YPpbgUpvLfLA40gk/9tP2ybbRET
- ii76RzSSIO69VgadjBNyBjmnuoRm65reKLA6
- HRz5J+AIkapoAAXLPjN6CzW1C8s= )
-4LG74TG924990NI8BHBJU9FAV4TUMCLT.sub.example.net. 7200 IN NSEC3 1 0 10 9F5882 (
- 6DNQUL36M576R5AMAB52O7QOVASKN098
- A RRSIG )
- 7200 RRSIG NSEC3 7 4 7200 (
- 20141119171244 20141117171244 6419 sub.example.net.
- qjS10ICZ+si7lO1hi0XcfUts8azgDIhG52PI
- CG3/GRi2Gf/M7+3/y+SGbDVPIbt7iGv46rgY
- aQA0von+Q/LrFQ== )
- 7200 RRSIG NSEC3 10 4 7200 (
- 20141119171244 20141117171244 21503 sub.example.net.
- M/bEtsoBAWrH+e4u4pxvnVUiE2AusGn/IwOy
- y8k6raRQUFymw8280X1Qu/fI85EHbmdS87Y8
- QHwx364jmImIB/9ikGnb32Yq10yTUgli4j9I
- SkjKnTXZQrGeDm91lOT66HkOqqx6alsE+uJC
- 0zTOrU5hImZKr71K6rnePPQ7paQ= )
-6DNQUL36M576R5AMAB52O7QOVASKN098.sub.example.net. 7200 IN NSEC3 1 0 10 9F5882 (
- 94U6S8HHE6P1CI9JFL15CTOTRRJM8NC0
- A RRSIG )
- 7200 RRSIG NSEC3 7 4 7200 (
- 20141119171244 20141117171244 6419 sub.example.net.
- IbPLI7qRuG0jfJd2Fe7ce9YG2PignyaijdFG
- iHsYYHvk4Gd/3TCpH69umTZ9Pt8IG615uHRI
- 0AdOEM+nCl70RA== )
- 7200 RRSIG NSEC3 10 4 7200 (
- 20141119171244 20141117171244 21503 sub.example.net.
- e56NrfBDTS/h70xgFK4e3G6MXnosP/14Xbw5
- IDV9gLd3FsIMMi9aMKh8XJjI228nlb7mw3KB
- zNv/z6Vf/ABGy11hmKI7MbColDQOuM+ehkvy
- UpQfPcuros7wfREWcnUOQqggrbazJsyLbwJB
- GsZJiiy9iase+rd4l7a7ov7F0Vk= )
-94U6S8HHE6P1CI9JFL15CTOTRRJM8NC0.sub.example.net. 7200 IN NSEC3 1 0 10 9F5882 (
- 48I3NCI84TCLKJ9NNME64BPAJFNDGLQA
- NS SOA RRSIG DNSKEY NSEC3PARAM )
- 7200 RRSIG NSEC3 7 4 7200 (
- 20141119171244 20141117171244 6419 sub.example.net.
- t/LkG2Osw1ennr5tkbT/Top9iiU5oOajG83q
- QvnBwE7UVYBQPuvYNEBmzEPPjYJmh95Ysb77
- Q4tvNGTeYmhE2A== )
- 7200 RRSIG NSEC3 10 4 7200 (
- 20141119171244 20141117171244 21503 sub.example.net.
- H3daA7IcfSXZPTsbszyf7Os/PMdsx58nNgXq
- rlaIJA79Mttlrkyp7YK3W9+b41OaoDo4QTza
- 7pwP4ZfMJmYRVmaYSc3/tukKuRmM0POE+ZFD
- yE0Y+qx+9J8uXQ3VeIF+F4JRgMKPp7uGvI+d
- 1ut1c8O+8PN6JZ3AaLKlRzd2KkA= )
diff --git a/contrib/zkt-1.1.3/examples/flat/zkt-ls b/contrib/zkt-1.1.3/examples/flat/zkt-ls
deleted file mode 120000
index c5139805..00000000
--- a/contrib/zkt-1.1.3/examples/flat/zkt-ls
+++ /dev/null
@@ -1 +0,0 @@
-../zkt-ls.sh \ No newline at end of file
diff --git a/contrib/zkt-1.1.3/examples/flat/zkt-signer b/contrib/zkt-1.1.3/examples/flat/zkt-signer
deleted file mode 120000
index b5f367de..00000000
--- a/contrib/zkt-1.1.3/examples/flat/zkt-signer
+++ /dev/null
@@ -1 +0,0 @@
-../zkt-signer.sh \ No newline at end of file
diff --git a/contrib/zkt-1.1.3/examples/flat/zone.conf b/contrib/zkt-1.1.3/examples/flat/zone.conf
deleted file mode 100644
index 54487af2..00000000
--- a/contrib/zkt-1.1.3/examples/flat/zone.conf
+++ /dev/null
@@ -1,10 +0,0 @@
-
-zone "example.NET." in {
- type master;
- file "example.net/zone.db.signed";
-};
-
-zone "sub.example.NET." in {
- type master;
- file "sub.example.net/zone.db.signed";
-};
diff --git a/contrib/zkt-1.1.3/examples/hierarchical/de/example.de/sub.example.de/dlvset-sub.example.de. b/contrib/zkt-1.1.3/examples/hierarchical/de/example.de/sub.example.de/dlvset-sub.example.de.
deleted file mode 100644
index 18f078c6..00000000
--- a/contrib/zkt-1.1.3/examples/hierarchical/de/example.de/sub.example.de/dlvset-sub.example.de.
+++ /dev/null
@@ -1,12 +0,0 @@
-sub.example.de.dlv.trusted-keys.net. IN DLV 8544 5 1 676E635D2DE4DB57348E6EA4D47B5A187077B30E
-sub.example.de.dlv.trusted-keys.net. IN DLV 8544 5 2 15903EA9128343053FB37761B806705818527648201F8EA0B039716E EB199DF7
-sub.example.de.dlv.trusted-keys.net. IN DLV 27861 5 1 A70BD190C8BA61C1D867B2A0788FB1011EB39689
-sub.example.de.dlv.trusted-keys.net. IN DLV 27861 5 2 B7BCDAC3AADF8B46F57B9A999BDF6DDA00AAE87C2504704B639407CF 0C9C2149
-sub.example.de.dlv.trusted-keys.net. IN DLV 32679 5 1 B2B115076F5BC2F2864D8ED1D63279193E5E7999
-sub.example.de.dlv.trusted-keys.net. IN DLV 32679 5 2 71B3896274A524028F131983D780C12CB38EA40E435815E9CC301749 26BFD367
-sub.example.de.dlv.trusted-keys.net. IN DLV 38331 5 1 8F7E90EE2686DAE4D31CEE40142AD6A25670B0A0
-sub.example.de.dlv.trusted-keys.net. IN DLV 38331 5 2 7B791220D03926DC6D3531CD155EF1E2AB202CE5955DF61079BEDD48 67400707
-sub.example.de.dlv.trusted-keys.net. IN DLV 42639 5 1 4BF75E73D98DDD2EA51761C78180E5501CD6C160
-sub.example.de.dlv.trusted-keys.net. IN DLV 42639 5 2 23C39209F8D53D76AD86283B4553AEA5419E47494B40FAE1707B18D5 EBD47B07
-sub.example.de.dlv.trusted-keys.net. IN DLV 51846 5 1 F0B3607F13FFE0C5AEF2ED24978FC8D42B391361
-sub.example.de.dlv.trusted-keys.net. IN DLV 51846 5 2 B067543FEAC9F203E9508672D802DEFD9F8AFF6CDBCC298B25C2CCED EDC813D8
diff --git a/contrib/zkt-1.1.3/examples/hierarchical/de/example.de/sub.example.de/dnssec.conf b/contrib/zkt-1.1.3/examples/hierarchical/de/example.de/sub.example.de/dnssec.conf
deleted file mode 100644
index ef2b668e..00000000
--- a/contrib/zkt-1.1.3/examples/hierarchical/de/example.de/sub.example.de/dnssec.conf
+++ /dev/null
@@ -1,16 +0,0 @@
-##
-## dnssec-zkt v0.4 (c) Jan 2005 hoz <at> hznet <dot> de ##
-##
-
-resigninterval 12h
-sigvalidity 1d
-max_ttl 90s
-
-ksk_lifetime 7d
-key_algo RSASHA1
-ksk_bits 1024
-
-zsk_lifetime 3d
-zsk_bits 512
-
-dlv_domain "dlv.trusted-keys.net"
diff --git a/contrib/zkt-1.1.3/examples/hierarchical/de/example.de/sub.example.de/parent-sub.example.de. b/contrib/zkt-1.1.3/examples/hierarchical/de/example.de/sub.example.de/parent-sub.example.de.
deleted file mode 100644
index 0f8ffb14..00000000
--- a/contrib/zkt-1.1.3/examples/hierarchical/de/example.de/sub.example.de/parent-sub.example.de.
+++ /dev/null
@@ -1,7 +0,0 @@
-; KSK rollover phase2 (this is the new key)
-sub.example.de. 14400 IN DNSKEY 257 3 5 (
- BQEAAAAB2CMCmaITzL7L6UmI0Y+u16LiyINgkYc3dxYunDYWK0FEXGa5
- L7ss8jepJnBM6KD/rekwqb5wgso/5VnSprhUUnQqec6ESuJ/9/ThI6i7
- zD6AnwdtXagTOaTRqWhUEcjgMIG4oJK/Pb5mZAlXvzPqmRkyeStRw0cU
- AEWQvdtuDcc=
- ) ; key id = 51846
diff --git a/contrib/zkt-1.1.3/examples/hierarchical/de/example.de/sub.example.de/zone.db b/contrib/zkt-1.1.3/examples/hierarchical/de/example.de/sub.example.de/zone.db
deleted file mode 100644
index d4611a5d..00000000
--- a/contrib/zkt-1.1.3/examples/hierarchical/de/example.de/sub.example.de/zone.db
+++ /dev/null
@@ -1,25 +0,0 @@
-;-----------------------------------------------------------------
-;
-; @(#) sub.example.de/zone.db
-;
-;-----------------------------------------------------------------
-
-$TTL 7200
-
-@ IN SOA ns1.example.de. hostmaster.example.de. (
- 2011012503; Serial (up to 10 digits)
- 86400 ; Refresh (RIPE recommendation if NOTIFY is used)
- 1800 ; Retry
- 2W ; Expire
- 7200 ) ; Minimum
-
-
- IN NS ns1.example.de.
-
-$INCLUDE dnskey.db
-
-localhost IN A 127.0.0.1
-
-a IN A 1.2.3.4
-b IN A 1.2.3.5
-c IN A 1.2.3.6
diff --git a/contrib/zkt-1.1.3/examples/hierarchical/de/example.de/sub.example.de/zone.db.signed b/contrib/zkt-1.1.3/examples/hierarchical/de/example.de/sub.example.de/zone.db.signed
deleted file mode 100644
index e69de29b..00000000
--- a/contrib/zkt-1.1.3/examples/hierarchical/de/example.de/sub.example.de/zone.db.signed
+++ /dev/null
diff --git a/contrib/zkt-1.1.3/examples/hierarchical/de/example.de/zone.db b/contrib/zkt-1.1.3/examples/hierarchical/de/example.de/zone.db
deleted file mode 100644
index 3a140b2c..00000000
--- a/contrib/zkt-1.1.3/examples/hierarchical/de/example.de/zone.db
+++ /dev/null
@@ -1,38 +0,0 @@
-;-----------------------------------------------------------------
-;
-; @(#) example.de/zone.db
-;
-;-----------------------------------------------------------------
-
-$TTL 7200
-
-; Ensure that the serial number below is left
-; justified in a field of at least 10 chars!!
-; 0123456789;
-; It's also possible to use the date format e.g. 2005040101
-@ IN SOA ns1.example.de. hostmaster.example.de. (
- 315 ; Serial
- 43200 ; Refresh
- 1800 ; Retry
- 2W ; Expire
- 7200 ) ; Minimum
-
-
- IN NS ns1.example.de.
- IN NS ns2.example.de.
-
-ns1 IN A 1.0.0.5
- IN AAAA 2001:db8::53
-ns2 IN A 1.2.0.6
-
-localhost IN A 127.0.0.1
-
-; Delegation to secure zone; The DS resource record will
-; be added by dnssec-signzone automatically if the
-; keyset-sub.example.de file is present (run dnssec-signzone
-; with option -g or use the dnssec-signer tool) ;-)
-sub IN NS ns1.example.de.
-
-; this file will contain all the zone keys
-$INCLUDE dnskey.db
-
diff --git a/contrib/zkt-1.1.3/examples/hierarchical/de/example.de/zone.db.signed b/contrib/zkt-1.1.3/examples/hierarchical/de/example.de/zone.db.signed
deleted file mode 100644
index e69de29b..00000000
--- a/contrib/zkt-1.1.3/examples/hierarchical/de/example.de/zone.db.signed
+++ /dev/null
diff --git a/contrib/zkt-1.1.3/examples/hierarchical/de/example.de/zone.soa b/contrib/zkt-1.1.3/examples/hierarchical/de/example.de/zone.soa
deleted file mode 100644
index 9b200c1b..00000000
--- a/contrib/zkt-1.1.3/examples/hierarchical/de/example.de/zone.soa
+++ /dev/null
@@ -1,10 +0,0 @@
-; Be sure that the serial number below is left
-; justified in a field of at least 10 chars!!
-; 0123456789;
-; It's also possible to use the date form e.g. 2005040101
-@ IN SOA ns1.example.de. hostmaster.example.de. (
- 267 ; Serial
- 43200 ; Refresh
- 1800 ; Retry
- 2W ; Expire
- 7200 ) ; Minimum
diff --git a/contrib/zkt-1.1.3/examples/hierarchical/dnssec.conf b/contrib/zkt-1.1.3/examples/hierarchical/dnssec.conf
deleted file mode 100644
index 76dc458b..00000000
--- a/contrib/zkt-1.1.3/examples/hierarchical/dnssec.conf
+++ /dev/null
@@ -1,44 +0,0 @@
-#
-# @(#) dnssec.conf T1.0rc1 (c) Feb 2005 - Mar 2010 Holger Zuleger hznet.de
-#
-
-# dnssec-zkt options
-Zonedir: "."
-Recursive: True
-PrintTime: False
-PrintAge: True
-LeftJustify: False
-
-# zone specific values
-ResignInterval: 1w # (604800 seconds)
-Sigvalidity: 10d # (864000 seconds)
-Max_TTL: 6h # (21600 seconds)
-Propagation: 5m # (300 seconds)
-KEY_TTL: 1h # (3600 seconds)
-Serialformat: incremental
-
-# signing key parameters
-Key_Algo: RSASHA1 # (Algorithm ID 5)
-KSK_lifetime: 30d
-KSK_bits: 1300
-KSK_randfile: "/dev/urandom"
-ZSK_lifetime: 10d
-ZSK_bits: 512
-ZSK_randfile: "/dev/urandom"
-SaltBits: 24
-
-# dnssec-signer options
-LogFile: "log"
-LogLevel: INFO
-LogDomainDir: "log"
-SyslogFacility: USER
-SyslogLevel: NOTICE
-VerboseLog: 0
-Keyfile: "dnskey.db"
-Zonefile: "zone.db"
-KeySetDir: ".."
-DLV_Domain: ""
-Sig_Pseudorand: True
-Sig_GenerateDS: True
-Sig_DnsKeyKSK: True
-Sig_Parameter: ""
diff --git a/contrib/zkt-1.1.3/examples/hierarchical/named.conf b/contrib/zkt-1.1.3/examples/hierarchical/named.conf
deleted file mode 100644
index 8bd3f9db..00000000
--- a/contrib/zkt-1.1.3/examples/hierarchical/named.conf
+++ /dev/null
@@ -1,102 +0,0 @@
-/*****************************************************************
-**
-** #(@) named.conf (c) 6. May 2004 (hoz)
-**
-*****************************************************************/
-
-/*****************************************************************
-** logging options
-*****************************************************************/
-logging {
- channel "named-log" {
- file "/var/log/named" versions 3 size 2m;
- print-time yes;
- print-category yes;
- print-severity yes;
- severity info;
- };
- channel "resolver-log" {
- file "/var/log/named";
- print-time yes;
- print-category yes;
- print-severity yes;
- severity debug 1;
- };
- channel "dnssec-log" {
-# file "/var/log/named-dnssec" ;
- file "/var/log/named" ;
- print-time yes;
- print-category yes;
- print-severity yes;
- severity debug 3;
- };
- category "dnssec" { "dnssec-log"; };
- category "default" { "named-log"; };
- category "resolver" { "resolver-log"; };
- category "client" { "resolver-log"; };
- category "queries" { "resolver-log"; };
-};
-
-/*****************************************************************
-** name server options
-*****************************************************************/
-options {
- directory ".";
-
- dump-file "/var/log/named_dump.db";
- statistics-file "/var/log/named.stats";
-
- listen-on-v6 { any; };
-
- query-source address * port 53;
- transfer-source * port 53;
- notify-source * port 53;
-
- recursion yes;
- dnssec-enable yes;
- edns-udp-size 4096;
-
-# dnssec-lookaside "." trust-anchor "trusted-keys.de.";
-
- querylog yes;
-
-};
-
-/*****************************************************************
-** include shared secrets...
-*****************************************************************/
-/** for control sessions ... **/
-# include "rndc.key";
-controls {
- inet 127.0.0.1
- allow { localhost; }
- keys { "rndc-key"; };
- inet ::1
- allow { localhost; }
- keys { "rndc-key"; };
-};
-
-/*****************************************************************
-** ... and trusted_keys
-*****************************************************************/
-# include "trusted-keys.conf" ;
-
-/*****************************************************************
-** root server hints and required 127 stuff
-*****************************************************************/
-zone "." in {
- type hint;
- file "root.hint";
-};
-
-zone "localhost" in {
- type master;
- file "localhost.zone";
-};
-
-zone "0.0.127.in-addr.arpa" in {
- type master;
- file "127.0.0.zone";
-};
-
-include "zone.conf";
diff --git a/contrib/zkt-1.1.3/examples/hierarchical/zkt-ls b/contrib/zkt-1.1.3/examples/hierarchical/zkt-ls
deleted file mode 120000
index c5139805..00000000
--- a/contrib/zkt-1.1.3/examples/hierarchical/zkt-ls
+++ /dev/null
@@ -1 +0,0 @@
-../zkt-ls.sh \ No newline at end of file
diff --git a/contrib/zkt-1.1.3/examples/hierarchical/zkt-signer b/contrib/zkt-1.1.3/examples/hierarchical/zkt-signer
deleted file mode 120000
index b5f367de..00000000
--- a/contrib/zkt-1.1.3/examples/hierarchical/zkt-signer
+++ /dev/null
@@ -1 +0,0 @@
-../zkt-signer.sh \ No newline at end of file
diff --git a/contrib/zkt-1.1.3/examples/hierarchical/zone.conf b/contrib/zkt-1.1.3/examples/hierarchical/zone.conf
deleted file mode 100644
index afd5a739..00000000
--- a/contrib/zkt-1.1.3/examples/hierarchical/zone.conf
+++ /dev/null
@@ -1,10 +0,0 @@
-
-zone "example.de." in {
- type master;
- file "de/example.de/zone.db.signed";
-};
-
-zone "sub.example.de." in {
- type master;
- file "de/example.de/sub.example.de/zone.db.signed";
-};
diff --git a/contrib/zkt-1.1.3/examples/views/dnssec-extern.conf b/contrib/zkt-1.1.3/examples/views/dnssec-extern.conf
deleted file mode 100644
index 728dcc94..00000000
--- a/contrib/zkt-1.1.3/examples/views/dnssec-extern.conf
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# @(#) dnssec.conf vT0.96 (c) Feb 2005 - May 2008 Holger Zuleger hznet.de
-#
-
-# dnssec-zkt options
-Zonedir: "extern"
-Recursive: True
-PrintTime: False
-PrintAge: True
-LeftJustify: False
-
-# zone specific values
-ResignInterval: 1w # (604800 seconds)
-Sigvalidity: 10d # (864000 seconds)
-Max_TTL: 8h # (28800 seconds)
-Propagation: 5m # (300 seconds)
-KEY_TTL: 1h # (3600 seconds)
-Serialformat: unixtime
-
-# signing key parameters
-KSK_lifetime: 1y # (31536000 seconds)
-KSK_algo: RSASHA1 # (Algorithm ID 5)
-KSK_bits: 1300
-KSK_randfile: "/dev/urandom"
-ZSK_lifetime: 30d # (2592000 seconds)
-ZSK_algo: RSASHA1 # (Algorithm ID 5)
-ZSK_bits: 512
-ZSK_randfile: "/dev/urandom"
-
-# dnssec-signer options
-LogFile: "zkt-ext.log"
-LogLevel: "debug"
-SyslogFacility: "none"
-SyslogLevel: "notice"
-VerboseLog: 2
-Keyfile: "dnskey.db"
-Zonefile: "zone.db"
-DLV_Domain: ""
-Sig_Pseudorand: True
diff --git a/contrib/zkt-1.1.3/examples/views/dnssec-intern.conf b/contrib/zkt-1.1.3/examples/views/dnssec-intern.conf
deleted file mode 100644
index d49fc946..00000000
--- a/contrib/zkt-1.1.3/examples/views/dnssec-intern.conf
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# @(#) dnssec.conf vT0.96 (c) Feb 2005 - May 2008 Holger Zuleger hznet.de
-#
-
-# dnssec-zkt options
-Zonedir: "intern"
-Recursive: True
-PrintTime: False
-PrintAge: True
-LeftJustify: False
-
-# zone specific values
-ResignInterval: 5h # (18000 seconds)
-Sigvalidity: 1d # (86400 seconds)
-Max_TTL: 30m # (1800 seconds)
-Propagation: 1m # (60 seconds)
-KEY_TTL: 30m # (1800 seconds)
-Serialformat: unixtime
-
-# signing key parameters
-KSK_lifetime: 1y # (31536000 seconds)
-KSK_algo: RSASHA1 # (Algorithm ID 5)
-KSK_bits: 1300
-KSK_randfile: "/dev/urandom"
-ZSK_lifetime: 30d # (2592000 seconds)
-ZSK_algo: RSASHA1 # (Algorithm ID 5)
-ZSK_bits: 512
-ZSK_randfile: "/dev/urandom"
-
-# dnssec-signer options
-LogFile: "zkt-int.log"
-LogLevel: "debug"
-SyslogFacility: "none"
-SyslogLevel: "notice"
-VerboseLog: 2
-Keyfile: "dnskey.db"
-Zonefile: "zone.db"
-DLV_Domain: ""
-Sig_Pseudorand: True
diff --git a/contrib/zkt-1.1.3/examples/views/dnssec-signer-extern b/contrib/zkt-1.1.3/examples/views/dnssec-signer-extern
deleted file mode 100644
index 910e82aa..00000000
--- a/contrib/zkt-1.1.3/examples/views/dnssec-signer-extern
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-#
-# Shell script to start the dnssec-signer
-# command out of the view directory
-#
-
-ZKT_CONFFILE=`pwd`/dnssec.conf ../../dnssec-signer -V extern "$@"
diff --git a/contrib/zkt-1.1.3/examples/views/dnssec-signer-intern b/contrib/zkt-1.1.3/examples/views/dnssec-signer-intern
deleted file mode 100644
index 915ed153..00000000
--- a/contrib/zkt-1.1.3/examples/views/dnssec-signer-intern
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-#
-# Shell script to start the dnssec-signer
-# command out of the view directory
-#
-
-ZKT_CONFFILE=`pwd`/dnssec.conf ../../dnssec-signer -V intern "$@"
diff --git a/contrib/zkt-1.1.3/examples/views/dnssec-zkt-extern b/contrib/zkt-1.1.3/examples/views/dnssec-zkt-extern
deleted file mode 100644
index 129b4e10..00000000
--- a/contrib/zkt-1.1.3/examples/views/dnssec-zkt-extern
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-#
-# Shell script to start the dnssec-zkt command
-# out of the view directory
-#
-
-ZKT_CONFFILE=`pwd`/dnssec.conf ../../dnssec-zkt --view extern "$@"
diff --git a/contrib/zkt-1.1.3/examples/views/dnssec-zkt-intern b/contrib/zkt-1.1.3/examples/views/dnssec-zkt-intern
deleted file mode 100644
index 1836840f..00000000
--- a/contrib/zkt-1.1.3/examples/views/dnssec-zkt-intern
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-#
-# Shell script to start the dnssec-zkt command
-# out of the view directory
-#
-
-ZKT_CONFFILE=`pwd`/dnssec.conf ../../dnssec-zkt --view intern "$@"
diff --git a/contrib/zkt-1.1.3/examples/views/extern/example.net/zone.db b/contrib/zkt-1.1.3/examples/views/extern/example.net/zone.db
deleted file mode 100644
index 4c72928f..00000000
--- a/contrib/zkt-1.1.3/examples/views/extern/example.net/zone.db
+++ /dev/null
@@ -1,33 +0,0 @@
-;-----------------------------------------------------------------
-;
-; @(#) extern/example.net/zone.db
-;
-;-----------------------------------------------------------------
-
-$TTL 7200
-
-@ IN SOA ns1.example.net. hostmaster.example.net. (
- 0 ; Serial
- 43200 ; Refresh
- 1800 ; Retry
- 2W ; Expire
- 7200 ) ; Minimum
-
- IN NS ns1.example.net.
- IN NS ns2.example.net.
-
-ns1 IN A 1.0.0.5
- IN AAAA 2001:db8::53
-ns2 IN A 1.2.0.6
-
-localhost IN A 127.0.0.1
-
-; Delegation to secure zone; The DS resource record will
-; be added by dnssec-signzone automatically if the
-; keyset-sub.example.net file is present (run dnssec-signzone
-; with option -g or use the dnssec-signer tool) ;-)
-sub IN NS ns1.example.net.
-
-; this file will have all the zone keys
-$INCLUDE dnskey.db
-
diff --git a/contrib/zkt-1.1.3/examples/views/extern/example.net/zone.db.signed b/contrib/zkt-1.1.3/examples/views/extern/example.net/zone.db.signed
deleted file mode 100644
index e69de29b..00000000
--- a/contrib/zkt-1.1.3/examples/views/extern/example.net/zone.db.signed
+++ /dev/null
diff --git a/contrib/zkt-1.1.3/examples/views/extern/zkt-ext.log b/contrib/zkt-1.1.3/examples/views/extern/zkt-ext.log
deleted file mode 100644
index d070ca23..00000000
--- a/contrib/zkt-1.1.3/examples/views/extern/zkt-ext.log
+++ /dev/null
@@ -1,51 +0,0 @@
-2008-06-12 17:59:04.194: notice: running as ../../dnssec-signer -V extern -v -v
-2008-06-12 17:59:04.195: debug: parsing zone "example.net." in dir "extern/example.net."
-2008-06-12 17:59:04.196: debug: Check RFC5011 status
-2008-06-12 17:59:04.196: debug: ->ksk5011status returns 0
-2008-06-12 17:59:04.196: debug: Check ksk status
-2008-06-12 17:59:04.196: debug: Re-signing not necessary!
-2008-06-12 17:59:04.196: notice: end of run: 0 errors occured
-2008-06-12 17:59:17.435: notice: running as ../../dnssec-signer -V extern -v -v
-2008-06-12 17:59:17.436: debug: parsing zone "example.net." in dir "extern/example.net."
-2008-06-12 17:59:17.436: debug: Check RFC5011 status
-2008-06-12 17:59:17.436: debug: ->ksk5011status returns 0
-2008-06-12 17:59:17.436: debug: Check ksk status
-2008-06-12 17:59:17.436: debug: Re-signing not necessary!
-2008-06-12 17:59:17.436: notice: end of run: 0 errors occured
-2008-06-12 18:00:07.818: notice: running as ../../dnssec-signer -V extern -v -v
-2008-06-12 18:00:07.819: debug: parsing zone "example.net." in dir "extern/example.net."
-2008-06-12 18:00:07.819: debug: Check RFC5011 status
-2008-06-12 18:00:07.819: debug: ->ksk5011status returns 0
-2008-06-12 18:00:07.819: debug: Check ksk status
-2008-06-12 18:00:07.819: debug: Re-signing not necessary!
-2008-06-12 18:00:07.819: notice: end of run: 0 errors occured
-2008-06-12 18:00:39.019: notice: running as ../../dnssec-signer -V extern -v -v
-2008-06-12 18:00:39.020: debug: parsing zone "example.net." in dir "extern/example.net."
-2008-06-12 18:00:39.020: debug: Check RFC5011 status
-2008-06-12 18:00:39.020: debug: ->ksk5011status returns 0
-2008-06-12 18:00:39.020: debug: Check ksk status
-2008-06-12 18:00:39.020: debug: Re-signing not necessary!
-2008-06-12 18:00:39.020: notice: end of run: 0 errors occured
-2008-10-03 01:00:45.544: notice: ------------------------------------------------------------
-2008-10-03 01:00:45.544: notice: running ../../dnssec-signer -V extern -v -v
-2008-10-03 01:00:45.545: debug: parsing zone "example.net" in dir "extern/example.net"
-2008-10-03 01:00:45.545: debug: Check RFC5011 status
-2008-10-03 01:00:45.545: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2008-10-03 01:00:45.545: debug: Check KSK status
-2008-10-03 01:00:45.545: debug: Check ZSK status
-2008-10-03 01:00:45.545: debug: Lifetime(2592000 +/-150 sec) of active key 35744 exceeded (5018328 sec)
-2008-10-03 01:00:45.546: debug: ->depreciate it
-2008-10-03 01:00:45.546: debug: ->activate published key 10367
-2008-10-03 01:00:45.546: notice: "example.net": lifetime of zone signing key 35744 exceeded: ZSK rollover done
-2008-10-03 01:00:45.546: debug: New key for publishing needed
-2008-10-03 01:00:45.614: debug: ->creating new key 14714
-2008-10-03 01:00:45.614: info: "example.net": new key 14714 generated for publishing
-2008-10-03 01:00:45.614: debug: Re-signing necessary: New zone key
-2008-10-03 01:00:45.614: notice: "example.net": re-signing triggered: New zone key
-2008-10-03 01:00:45.614: debug: Writing key file "extern/example.net/dnskey.db"
-2008-10-03 01:00:45.614: debug: Signing zone "example.net"
-2008-10-03 01:00:45.614: debug: Run cmd "cd extern/example.net; /usr/local/sbin/dnssec-signzone -g -p -o example.net -e +864000 -N unixtime zone.db K*.private"
-2008-10-03 01:00:46.114: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2008-10-03 01:00:46.114: debug: Signing completed after 1s.
-2008-10-03 01:00:46.114: debug:
-2008-10-03 01:00:46.114: notice: end of run: 0 errors occured
diff --git a/contrib/zkt-1.1.3/examples/views/intern/example.net/zone.db b/contrib/zkt-1.1.3/examples/views/intern/example.net/zone.db
deleted file mode 100644
index af4861b5..00000000
--- a/contrib/zkt-1.1.3/examples/views/intern/example.net/zone.db
+++ /dev/null
@@ -1,33 +0,0 @@
-;-----------------------------------------------------------------
-;
-; @(#) intern/example.net/zone.db
-;
-;-----------------------------------------------------------------
-
-$TTL 7200
-
-@ IN SOA ns1.example.net. hostmaster.example.net. (
- 0 ; Serial
- 43200 ; Refresh
- 1800 ; Retry
- 2W ; Expire
- 7200 ) ; Minimum
-
- IN NS ns1.example.net.
- IN NS ns2.example.net.
-
-ns1 IN A 192.168.1.53
- IN AAAA fd12:063c:cdbb::53
-ns2 IN A 10.1.2.3
-
-localhost IN A 127.0.0.1
-
-; Delegation to secure zone; The DS resource record will
-; be added by dnssec-signzone automatically if the
-; keyset-sub.example.net file is present (run dnssec-signzone
-; with option -g or use the dnssec-signer tool) ;-)
-sub IN NS ns1.example.net.
-
-; this file will have all the zone keys
-$INCLUDE dnskey.db
-
diff --git a/contrib/zkt-1.1.3/examples/views/intern/example.net/zone.db.signed b/contrib/zkt-1.1.3/examples/views/intern/example.net/zone.db.signed
deleted file mode 100644
index e69de29b..00000000
--- a/contrib/zkt-1.1.3/examples/views/intern/example.net/zone.db.signed
+++ /dev/null
diff --git a/contrib/zkt-1.1.3/examples/views/intern/zkt-int.log b/contrib/zkt-1.1.3/examples/views/intern/zkt-int.log
deleted file mode 100644
index d6d4593c..00000000
--- a/contrib/zkt-1.1.3/examples/views/intern/zkt-int.log
+++ /dev/null
@@ -1,192 +0,0 @@
-2008-06-12 18:02:13.593: notice: running as ../../dnssec-signer -V intern -v -v
-2008-06-12 18:02:13.594: debug: parsing zone "example.net." in dir "intern/example.net."
-2008-06-12 18:02:13.594: debug: Check RFC5011 status
-2008-06-12 18:02:13.595: debug: ->ksk5011status returns 0
-2008-06-12 18:02:13.595: debug: Check ksk status
-2008-06-12 18:02:13.595: debug: Lifetime(2592000 +/-150 sec) of active key 5972 exceeded (17727466 sec)
-2008-06-12 18:02:13.595: debug: ->waiting for pre-publish key
-2008-06-12 18:02:13.595: notice: "example.net.": lifetime of zone signing key 5972 exceeded since 25w4h17m46s: ZSK rollover deferred: waiting for pre-publish key
-2008-06-12 18:02:13.595: debug: Re-signing necessary: Modified keys
-2008-06-12 18:02:13.595: notice: "example.net.": re-signing triggered: Modified keys
-2008-06-12 18:02:13.595: debug: Writing key file "intern/example.net./dnskey.db"
-2008-06-12 18:02:13.596: debug: Signing zone "example.net."
-2008-06-12 18:02:13.596: debug: Run cmd "cd intern/example.net.; /usr/local/sbin/dnssec-signzone -p -o example.net. -e +86400 -g -N unixtime zone.db K*.private"
-2008-06-12 18:02:13.705: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2008-06-12 18:02:13.705: debug: Signing completed after 0s.
-2008-06-12 18:02:13.705: debug:
-2008-06-12 18:02:13.705: notice: end of run: 0 errors occured
-2008-06-12 18:03:13.208: notice: running as ../../dnssec-signer -V intern -r -v -v
-2008-06-12 18:03:13.209: debug: parsing zone "example.net." in dir "intern/example.net."
-2008-06-12 18:03:13.209: debug: Check RFC5011 status
-2008-06-12 18:03:13.209: debug: ->ksk5011status returns 0
-2008-06-12 18:03:13.209: debug: Check ksk status
-2008-06-12 18:03:13.209: debug: Lifetime(2592000 +/-150 sec) of active key 5972 exceeded (17727526 sec)
-2008-06-12 18:03:13.209: debug: ->waiting for pre-publish key
-2008-06-12 18:03:13.209: notice: "example.net.": lifetime of zone signing key 5972 exceeded since 25w4h18m46s: ZSK rollover deferred: waiting for pre-publish key
-2008-06-12 18:03:13.209: debug: Re-signing not necessary!
-2008-06-12 18:03:13.209: notice: end of run: 0 errors occured
-2008-06-12 18:03:19.287: notice: running as ../../dnssec-signer -V intern -r -v -v
-2008-06-12 18:03:19.288: debug: parsing zone "example.net." in dir "intern/example.net."
-2008-06-12 18:03:19.288: debug: Check RFC5011 status
-2008-06-12 18:03:19.289: debug: ->ksk5011status returns 0
-2008-06-12 18:03:19.289: debug: Check ksk status
-2008-06-12 18:03:19.289: debug: Lifetime(2592000 +/-150 sec) of active key 5972 exceeded (17727532 sec)
-2008-06-12 18:03:19.289: debug: ->waiting for pre-publish key
-2008-06-12 18:03:19.289: notice: "example.net.": lifetime of zone signing key 5972 exceeded since 25w4h18m52s: ZSK rollover deferred: waiting for pre-publish key
-2008-06-12 18:03:19.289: debug: Re-signing not necessary!
-2008-06-12 18:03:19.289: notice: end of run: 0 errors occured
-2008-06-12 18:03:23.617: notice: running as ../../dnssec-signer -V intern -f -r -v -v
-2008-06-12 18:03:23.618: debug: parsing zone "example.net." in dir "intern/example.net."
-2008-06-12 18:03:23.618: debug: Check RFC5011 status
-2008-06-12 18:03:23.618: debug: ->ksk5011status returns 0
-2008-06-12 18:03:23.618: debug: Check ksk status
-2008-06-12 18:03:23.618: debug: Lifetime(2592000 +/-150 sec) of active key 5972 exceeded (17727536 sec)
-2008-06-12 18:03:23.618: debug: ->waiting for pre-publish key
-2008-06-12 18:03:23.618: notice: "example.net.": lifetime of zone signing key 5972 exceeded since 25w4h18m56s: ZSK rollover deferred: waiting for pre-publish key
-2008-06-12 18:03:23.618: debug: Re-signing necessary: Option -f
-2008-06-12 18:03:23.618: notice: "example.net.": re-signing triggered: Option -f
-2008-06-12 18:03:23.618: debug: Writing key file "intern/example.net./dnskey.db"
-2008-06-12 18:03:23.619: debug: Signing zone "example.net."
-2008-06-12 18:03:23.619: debug: Run cmd "cd intern/example.net.; /usr/local/sbin/dnssec-signzone -p -o example.net. -e +86400 -g -N unixtime zone.db K*.private"
-2008-06-12 18:03:23.719: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2008-06-12 18:03:23.719: debug: Signing completed after 0s.
-2008-06-12 18:03:23.720: notice: ""example.net." in view "intern"": reload triggered
-2008-06-12 18:03:23.772: debug:
-2008-06-12 18:03:23.772: notice: end of run: 0 errors occured
-2008-06-12 18:05:39.532: notice: running as ../../dnssec-signer -V intern -f -r -v -v
-2008-06-12 18:05:39.533: debug: parsing zone "example.net." in dir "intern/example.net."
-2008-06-12 18:05:39.533: debug: Check RFC5011 status
-2008-06-12 18:05:39.533: debug: ->ksk5011status returns 0
-2008-06-12 18:05:39.533: debug: Check ksk status
-2008-06-12 18:05:39.533: debug: Lifetime(2592000 +/-150 sec) of active key 5972 exceeded (17727672 sec)
-2008-06-12 18:05:39.533: debug: ->waiting for pre-publish key
-2008-06-12 18:05:39.533: notice: "example.net.": lifetime of zone signing key 5972 exceeded since 25w4h21m12s: ZSK rollover deferred: waiting for pre-publish key
-2008-06-12 18:05:39.533: debug: Re-signing necessary: Option -f
-2008-06-12 18:05:39.533: notice: "example.net.": re-signing triggered: Option -f
-2008-06-12 18:05:39.533: debug: Writing key file "intern/example.net./dnskey.db"
-2008-06-12 18:05:39.534: debug: Signing zone "example.net."
-2008-06-12 18:05:39.534: debug: Run cmd "cd intern/example.net.; /usr/local/sbin/dnssec-signzone -p -o example.net. -e +86400 -g -N unixtime zone.db K*.private"
-2008-06-12 18:05:39.629: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2008-06-12 18:05:39.630: debug: Signing completed after 0s.
-2008-06-12 18:05:39.630: notice: ""example.net."": reload triggered
-2008-06-12 18:05:39.640: debug:
-2008-06-12 18:05:39.640: notice: end of run: 0 errors occured
-2008-06-12 18:07:47.753: notice: running as ../../dnssec-signer -V intern -f -r -v -v
-2008-06-12 18:07:47.754: debug: parsing zone "example.net." in dir "intern/example.net."
-2008-06-12 18:07:47.754: debug: Check RFC5011 status
-2008-06-12 18:07:47.754: debug: ->ksk5011status returns 0
-2008-06-12 18:07:47.754: debug: Check ksk status
-2008-06-12 18:07:47.754: debug: Lifetime(2592000 +/-150 sec) of active key 5972 exceeded (17727800 sec)
-2008-06-12 18:07:47.754: debug: ->waiting for pre-publish key
-2008-06-12 18:07:47.754: notice: "example.net.": lifetime of zone signing key 5972 exceeded since 25w4h23m20s: ZSK rollover deferred: waiting for pre-publish key
-2008-06-12 18:07:47.754: debug: Re-signing necessary: Option -f
-2008-06-12 18:07:47.754: notice: "example.net.": re-signing triggered: Option -f
-2008-06-12 18:07:47.754: debug: Writing key file "intern/example.net./dnskey.db"
-2008-06-12 18:07:47.754: debug: Signing zone "example.net."
-2008-06-12 18:07:47.754: debug: Run cmd "cd intern/example.net.; /usr/local/sbin/dnssec-signzone -p -o example.net. -e +86400 -g -N unixtime zone.db K*.private"
-2008-06-12 18:07:47.856: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2008-06-12 18:07:47.856: debug: Signing completed after 0s.
-2008-06-12 18:07:47.856: notice: ""example.net."": reload triggered
-2008-06-12 18:07:47.866: debug:
-2008-06-12 18:07:47.867: notice: end of run: 0 errors occured
-2008-06-12 18:10:57.978: notice: running as ../../dnssec-signer -V intern -f -r -v -v
-2008-06-12 18:10:57.978: debug: parsing zone "example.net." in dir "intern/example.net."
-2008-06-12 18:10:57.978: debug: Check RFC5011 status
-2008-06-12 18:10:57.978: debug: ->ksk5011status returns 0
-2008-06-12 18:10:57.978: debug: Check ksk status
-2008-06-12 18:10:57.978: debug: Lifetime(2592000 +/-150 sec) of active key 5972 exceeded (17727990 sec)
-2008-06-12 18:10:57.978: debug: ->waiting for pre-publish key
-2008-06-12 18:10:57.978: notice: "example.net.": lifetime of zone signing key 5972 exceeded since 25w4h26m30s: ZSK rollover deferred: waiting for pre-publish key
-2008-06-12 18:10:57.978: debug: Re-signing necessary: Option -f
-2008-06-12 18:10:57.978: notice: "example.net.": re-signing triggered: Option -f
-2008-06-12 18:10:57.978: debug: Writing key file "intern/example.net./dnskey.db"
-2008-06-12 18:10:57.979: debug: Signing zone "example.net."
-2008-06-12 18:10:57.979: debug: Run cmd "cd intern/example.net.; /usr/local/sbin/dnssec-signzone -p -o example.net. -e +86400 -g -N unixtime zone.db K*.private"
-2008-06-12 18:10:58.081: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2008-06-12 18:10:58.081: debug: Signing completed after 1s.
-2008-06-12 18:10:58.081: notice: ""example.net." in view "intern"": reload triggered
-2008-06-12 18:10:58.093: debug:
-2008-06-12 18:10:58.093: notice: end of run: 0 errors occured
-2008-06-12 18:13:29.511: notice: running as ../../dnssec-signer -V intern -f -r -v -v
-2008-06-12 18:13:29.512: debug: parsing zone "example.net." in dir "intern/example.net."
-2008-06-12 18:13:29.512: debug: Check RFC5011 status
-2008-06-12 18:13:29.512: debug: ->ksk5011status returns 0
-2008-06-12 18:13:29.512: debug: Check ksk status
-2008-06-12 18:13:29.512: debug: Lifetime(2592000 +/-150 sec) of active key 5972 exceeded (17728142 sec)
-2008-06-12 18:13:29.512: debug: ->waiting for pre-publish key
-2008-06-12 18:13:29.512: notice: "example.net.": lifetime of zone signing key 5972 exceeded since 25w4h29m2s: ZSK rollover deferred: waiting for pre-publish key
-2008-06-12 18:13:29.512: debug: Re-signing necessary: Option -f
-2008-06-12 18:13:29.512: notice: "example.net.": re-signing triggered: Option -f
-2008-06-12 18:13:29.512: debug: Writing key file "intern/example.net./dnskey.db"
-2008-06-12 18:13:29.513: debug: Signing zone "example.net."
-2008-06-12 18:13:29.513: debug: Run cmd "cd intern/example.net.; /usr/local/sbin/dnssec-signzone -p -o example.net. -e +86400 -g -N unixtime zone.db K*.private"
-2008-06-12 18:13:29.612: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2008-06-12 18:13:29.612: debug: Signing completed after 0s.
-2008-06-12 18:13:29.612: notice: ""example.net." in view "intern"": reload triggered
-2008-06-12 18:13:29.612: debug: Reload zone "example.net." in view "intern"
-2008-06-12 18:13:29.612: debug: Run cmd "/usr/local/sbin/rndc reload example.net. IN intern"
-2008-06-12 18:13:29.623: debug:
-2008-06-12 18:13:29.623: notice: end of run: 0 errors occured
-2008-06-12 18:13:38.707: notice: running as ../../dnssec-signer -V intern -f -r -v
-2008-06-12 18:13:38.708: debug: parsing zone "example.net." in dir "intern/example.net."
-2008-06-12 18:13:38.709: debug: Check RFC5011 status
-2008-06-12 18:13:38.709: debug: ->ksk5011status returns 0
-2008-06-12 18:13:38.709: debug: Check ksk status
-2008-06-12 18:13:38.709: debug: Lifetime(2592000 +/-150 sec) of active key 5972 exceeded (17728151 sec)
-2008-06-12 18:13:38.709: debug: ->waiting for pre-publish key
-2008-06-12 18:13:38.709: notice: "example.net.": lifetime of zone signing key 5972 exceeded since 25w4h29m11s: ZSK rollover deferred: waiting for pre-publish key
-2008-06-12 18:13:38.709: debug: Re-signing necessary: Option -f
-2008-06-12 18:13:38.709: notice: "example.net.": re-signing triggered: Option -f
-2008-06-12 18:13:38.709: debug: Writing key file "intern/example.net./dnskey.db"
-2008-06-12 18:13:38.710: debug: Signing zone "example.net."
-2008-06-12 18:13:38.710: debug: Run cmd "cd intern/example.net.; /usr/local/sbin/dnssec-signzone -p -o example.net. -e +86400 -g -N unixtime zone.db K*.private"
-2008-06-12 18:13:39.163: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2008-06-12 18:13:39.163: debug: Signing completed after 1s.
-2008-06-12 18:13:39.163: notice: ""example.net." in view "intern"": reload triggered
-2008-06-12 18:13:39.163: debug: Reload zone "example.net." in view "intern"
-2008-06-12 18:13:39.163: debug: Run cmd "/usr/local/sbin/rndc reload example.net. IN intern"
-2008-06-12 18:13:39.174: debug:
-2008-06-12 18:13:39.174: notice: end of run: 0 errors occured
-2008-06-12 18:13:43.163: notice: running as ../../dnssec-signer -V intern -f -r -v -v
-2008-06-12 18:13:43.164: debug: parsing zone "example.net." in dir "intern/example.net."
-2008-06-12 18:13:43.164: debug: Check RFC5011 status
-2008-06-12 18:13:43.164: debug: ->ksk5011status returns 0
-2008-06-12 18:13:43.164: debug: Check ksk status
-2008-06-12 18:13:43.164: debug: Lifetime(2592000 +/-150 sec) of active key 5972 exceeded (17728156 sec)
-2008-06-12 18:13:43.164: debug: ->waiting for pre-publish key
-2008-06-12 18:13:43.164: notice: "example.net.": lifetime of zone signing key 5972 exceeded since 25w4h29m16s: ZSK rollover deferred: waiting for pre-publish key
-2008-06-12 18:13:43.164: debug: Re-signing necessary: Option -f
-2008-06-12 18:13:43.164: notice: "example.net.": re-signing triggered: Option -f
-2008-06-12 18:13:43.164: debug: Writing key file "intern/example.net./dnskey.db"
-2008-06-12 18:13:43.164: debug: Signing zone "example.net."
-2008-06-12 18:13:43.164: debug: Run cmd "cd intern/example.net.; /usr/local/sbin/dnssec-signzone -p -o example.net. -e +86400 -g -N unixtime zone.db K*.private"
-2008-06-12 18:13:43.262: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2008-06-12 18:13:43.262: debug: Signing completed after 0s.
-2008-06-12 18:13:43.262: notice: ""example.net." in view "intern"": reload triggered
-2008-06-12 18:13:43.262: debug: Reload zone "example.net." in view "intern"
-2008-06-12 18:13:43.262: debug: Run cmd "/usr/local/sbin/rndc reload example.net. IN intern"
-2008-06-12 18:13:43.273: debug:
-2008-06-12 18:13:43.273: notice: end of run: 0 errors occured
-2008-10-03 01:00:38.404: notice: ------------------------------------------------------------
-2008-10-03 01:00:38.404: notice: running ../../dnssec-signer -V intern
-2008-10-03 01:00:38.405: debug: parsing zone "example.net" in dir "intern/example.net"
-2008-10-03 01:00:38.405: debug: Check RFC5011 status
-2008-10-03 01:00:38.405: debug: ->not a rfc5011 zone, looking for a regular ksk rollover
-2008-10-03 01:00:38.405: debug: Check KSK status
-2008-10-03 01:00:38.405: debug: Check ZSK status
-2008-10-03 01:00:38.405: debug: Lifetime(2592000 +/-150 sec) of active key 5972 exceeded (5018321 sec)
-2008-10-03 01:00:38.405: debug: ->depreciate it
-2008-10-03 01:00:38.405: debug: ->activate published key 23375
-2008-10-03 01:00:38.405: notice: "example.net": lifetime of zone signing key 5972 exceeded: ZSK rollover done
-2008-10-03 01:00:38.405: debug: New key for publishing needed
-2008-10-03 01:00:38.491: debug: ->creating new key 55745
-2008-10-03 01:00:38.492: info: "example.net": new key 55745 generated for publishing
-2008-10-03 01:00:38.492: debug: Re-signing necessary: New zone key
-2008-10-03 01:00:38.492: notice: "example.net": re-signing triggered: New zone key
-2008-10-03 01:00:38.492: debug: Writing key file "intern/example.net/dnskey.db"
-2008-10-03 01:00:38.492: debug: Signing zone "example.net"
-2008-10-03 01:00:38.492: debug: Run cmd "cd intern/example.net; /usr/local/sbin/dnssec-signzone -g -p -o example.net -e +86400 -N unixtime zone.db K*.private"
-2008-10-03 01:00:38.796: debug: Cmd dnssec-signzone return: "zone.db.signed"
-2008-10-03 01:00:38.796: debug: Signing completed after 0s.
-2008-10-03 01:00:38.796: debug:
-2008-10-03 01:00:38.796: notice: end of run: 0 errors occured
diff --git a/contrib/zkt-1.1.3/examples/views/named.conf b/contrib/zkt-1.1.3/examples/views/named.conf
deleted file mode 100644
index c7034e2f..00000000
--- a/contrib/zkt-1.1.3/examples/views/named.conf
+++ /dev/null
@@ -1,97 +0,0 @@
-/*****************************************************************
-**
-** #(@) named.conf (c) 6. May 2004 (hoz)
-*****************************************************************/
-
-/*****************************************************************
-** logging options
-*****************************************************************/
-logging {
- channel "named-log" {
- file "named.log";
- print-time yes;
- print-category yes;
- print-severity yes;
- severity info;
- };
- category "dnssec" { "named-log"; };
- category "edns-disabled" { "named-log"; };
- category "default" { "named-log"; };
-};
-
-/*****************************************************************
-** name server options
-*****************************************************************/
-options {
- directory ".";
-
- pid-file "named.pid";
- listen-on-v6 port 1053 { any; };
- listen-on port 1053 { any; };
-
- empty-zones-enable no;
-
- port 1053;
- query-source address * port 1053;
- query-source-v6 address * port 1053;
- transfer-source * port 53;
- transfer-source-v6 * port 53;
- use-alt-transfer-source no;
- notify-source * port 53;
- notify-source-v6 * port 53;
-
- recursion yes;
- dnssec-enable yes;
- dnssec-validation yes; /* required by BIND 9.4.0 */
- dnssec-accept-expired false; /* added since BIND 9.5.0 */
- edns-udp-size 1460; /* (M4) */
- max-udp-size 1460; /* (M5) */
-
- # allow-query { localhost; }; /* default in 9.4.0 */
- # allow-query-cache { localhost; }; /* default in 9.4.0 */
-
- dnssec-must-be-secure "." no;
-
- querylog yes;
-
- stats-server 127.0.0.1 port 8881; /* added since BIND 9.5.0 */
-};
-
-/*****************************************************************
-** view intern
-*****************************************************************/
-view "intern" {
- match-clients { 127.0.0.1; ::1; };
- recursion yes;
- zone "." in {
- type hint;
- file "root.hint";
- };
-
- zone "0.0.127.in-addr.arpa" in {
- type master;
- file "127.0.0.zone";
- };
-
- zone "example.net" in {
- type master;
- file "intern/example.net/zone.db.signed";
- };
-};
-
-/*****************************************************************
-** view extern
-*****************************************************************/
-view "extern" {
- match-clients { any; };
- recursion no;
- zone "." in {
- type hint;
- file "root.hint";
- };
-
- zone "example.net" in {
- type master;
- file "extern/example.net/zone.db.signed";
- };
-};
diff --git a/contrib/zkt-1.1.3/examples/views/named.log b/contrib/zkt-1.1.3/examples/views/named.log
deleted file mode 100644
index 15d5f7b9..00000000
--- a/contrib/zkt-1.1.3/examples/views/named.log
+++ /dev/null
@@ -1,17 +0,0 @@
-20-Nov-2007 17:12:58.092 general: critical: couldn't open pid file '/var/run/named.pid': Permission denied
-20-Nov-2007 17:12:58.092 general: critical: exiting (due to early fatal error)
-20-Nov-2007 17:20:24.941 general: critical: couldn't open pid file '/var/run/named.pid': Permission denied
-20-Nov-2007 17:20:24.941 general: critical: exiting (due to early fatal error)
-20-Nov-2007 17:28:22.686 general: critical: couldn't open pid file '/var/run/named.pid': Permission denied
-20-Nov-2007 17:28:22.686 general: critical: exiting (due to early fatal error)
-20-Nov-2007 17:40:12.389 general: error: zone 0.0.127.in-addr.arpa/IN/intern: loading from master file 127.0.0.zone failed: file not found
-20-Nov-2007 17:40:12.391 general: info: zone example.net/IN/intern: loaded serial 1195574789 (signed)
-20-Nov-2007 17:40:12.393 general: info: zone example.net/IN/extern: loaded serial 1195561217 (signed)
-20-Nov-2007 17:40:12.393 general: notice: running
-20-Nov-2007 17:40:12.393 notify: info: zone example.net/IN/intern: sending notifies (serial 1195574789)
-20-Nov-2007 17:40:12.394 notify: info: zone example.net/IN/extern: sending notifies (serial 1195561217)
-20-Nov-2007 19:07:04.016 general: info: shutting down
-20-Nov-2007 19:07:04.017 network: info: no longer listening on ::#1053
-20-Nov-2007 19:07:04.017 network: info: no longer listening on 127.0.0.1#1053
-20-Nov-2007 19:07:04.017 network: info: no longer listening on 145.253.100.51#1053
-20-Nov-2007 19:07:04.020 general: notice: exiting
diff --git a/contrib/zkt-1.1.3/examples/views/root.hint b/contrib/zkt-1.1.3/examples/views/root.hint
deleted file mode 100644
index 2b5c167a..00000000
--- a/contrib/zkt-1.1.3/examples/views/root.hint
+++ /dev/null
@@ -1,45 +0,0 @@
-; <<>> DiG 9.5.0a6 <<>> ns . @a.root-servers.net
-;; global options: printcmd
-;; Got answer:
-;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33355
-;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13
-;; WARNING: recursion requested but not available
-
-;; QUESTION SECTION:
-;. IN NS
-
-;; ANSWER SECTION:
-. 518400 IN NS H.ROOT-SERVERS.NET.
-. 518400 IN NS I.ROOT-SERVERS.NET.
-. 518400 IN NS J.ROOT-SERVERS.NET.
-. 518400 IN NS K.ROOT-SERVERS.NET.
-. 518400 IN NS L.ROOT-SERVERS.NET.
-. 518400 IN NS M.ROOT-SERVERS.NET.
-. 518400 IN NS A.ROOT-SERVERS.NET.
-. 518400 IN NS B.ROOT-SERVERS.NET.
-. 518400 IN NS C.ROOT-SERVERS.NET.
-. 518400 IN NS D.ROOT-SERVERS.NET.
-. 518400 IN NS E.ROOT-SERVERS.NET.
-. 518400 IN NS F.ROOT-SERVERS.NET.
-. 518400 IN NS G.ROOT-SERVERS.NET.
-
-;; ADDITIONAL SECTION:
-A.ROOT-SERVERS.NET. 3600000 IN A 198.41.0.4
-B.ROOT-SERVERS.NET. 3600000 IN A 192.228.79.201
-C.ROOT-SERVERS.NET. 3600000 IN A 192.33.4.12
-D.ROOT-SERVERS.NET. 3600000 IN A 128.8.10.90
-E.ROOT-SERVERS.NET. 3600000 IN A 192.203.230.10
-F.ROOT-SERVERS.NET. 3600000 IN A 192.5.5.241
-G.ROOT-SERVERS.NET. 3600000 IN A 192.112.36.4
-H.ROOT-SERVERS.NET. 3600000 IN A 128.63.2.53
-I.ROOT-SERVERS.NET. 3600000 IN A 192.36.148.17
-J.ROOT-SERVERS.NET. 3600000 IN A 192.58.128.30
-K.ROOT-SERVERS.NET. 3600000 IN A 193.0.14.129
-L.ROOT-SERVERS.NET. 3600000 IN A 199.7.83.42
-M.ROOT-SERVERS.NET. 3600000 IN A 202.12.27.33
-
-;; Query time: 114 msec
-;; SERVER: 198.41.0.4#53(198.41.0.4)
-;; WHEN: Mon Nov 5 07:28:00 2007
-;; MSG SIZE rcvd: 436
-
diff --git a/contrib/zkt-1.1.3/examples/views/viewtest.sh b/contrib/zkt-1.1.3/examples/views/viewtest.sh
deleted file mode 100644
index f0a17543..00000000
--- a/contrib/zkt-1.1.3/examples/views/viewtest.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-ZKT_CONFFILE=dnssec.conf
-export ZKT_CONFFILE
-
-if true
-then
- echo "All internal keys:"
- ./dnssec-zkt-intern
- echo
-
- echo "All external keys:"
- ./dnssec-zkt-extern
- echo
-fi
-
-echo "Sign both views"
-./dnssec-signer-intern -v -v -f -r
-echo
-./dnssec-signer-extern -v -v
diff --git a/contrib/zkt-1.1.3/examples/zkt-ls.sh b/contrib/zkt-1.1.3/examples/zkt-ls.sh
deleted file mode 100755
index c784a868..00000000
--- a/contrib/zkt-1.1.3/examples/zkt-ls.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-#
-# Shell script to start the zkt-ls command
-# out of the example directory
-#
-
-if test ! -f dnssec.conf
-then
- echo Please start this skript out of the flat or hierarchical sub directory
- exit 1
-fi
-ZKT_CONFFILE=`pwd`/dnssec.conf ../../zkt-ls "$@"
diff --git a/contrib/zkt-1.1.3/examples/zkt-signer.sh b/contrib/zkt-1.1.3/examples/zkt-signer.sh
deleted file mode 100755
index 12fc9265..00000000
--- a/contrib/zkt-1.1.3/examples/zkt-signer.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-#
-# Shell script to start the zkt-signer
-# command out of the example directory
-#
-
-if test ! -f dnssec.conf
-then
- echo Please start this skript out of the flat or hierarchical sub directory
- exit 1
-fi
-ZKT_CONFFILE=`pwd`/dnssec.conf ../../zkt-signer "$@"
diff --git a/contrib/zkt-1.1.3/log.c b/contrib/zkt-1.1.3/log.c
deleted file mode 100644
index f72ac6c1..00000000
--- a/contrib/zkt-1.1.3/log.c
+++ /dev/null
@@ -1,485 +0,0 @@
-/*****************************************************************
-**
-** @(#) log.c -- The ZKT error logging module
-**
-** Copyright (c) June 2008, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-**
-*****************************************************************/
-# include <stdio.h>
-# include <string.h>
-# include <stdlib.h>
-# include <ctype.h>
-# include <sys/types.h>
-# include <sys/stat.h>
-# include <sys/time.h>
-# include <time.h>
-# include <assert.h>
-# include <errno.h>
-# include <syslog.h>
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-# include "config_zkt.h"
-# include "misc.h"
-# include "debug.h"
-#define extern
-# include "log.h"
-#undef extern
-
-/*****************************************************************
-** module internal vars & declarations
-*****************************************************************/
-static FILE *lg_fp;
-static FILE *lg_fpsave;
-static int lg_minfilelevel;
-static int lg_syslogging;
-static int lg_minsyslevel;
-static long lg_errcnt;
-static const char *lg_progname;
-
-typedef struct {
- lg_lvl_t level;
- const char *str;
- int syslog_level;
-} lg_symtbl_t;
-
-static lg_symtbl_t symtbl[] = {
- { LG_NONE, "none", -1 },
- { LG_DEBUG, "debug", LOG_DEBUG },
- { LG_INFO, "info", LOG_INFO },
- { LG_NOTICE, "notice", LOG_NOTICE },
- { LG_WARNING, "warning", LOG_WARNING },
- { LG_ERROR, "error", LOG_ERR },
- { LG_FATAL, "fatal", LOG_CRIT },
-
- { LG_NONE, "user", LOG_USER },
- { LG_NONE, "daemon", LOG_DAEMON },
- { LG_NONE, "local0", LOG_LOCAL0 },
- { LG_NONE, "local1", LOG_LOCAL1 },
- { LG_NONE, "local2", LOG_LOCAL2 },
- { LG_NONE, "local3", LOG_LOCAL3 },
- { LG_NONE, "local4", LOG_LOCAL4 },
- { LG_NONE, "local5", LOG_LOCAL5 },
- { LG_NONE, "local6", LOG_LOCAL6 },
- { LG_NONE, "local7", LOG_LOCAL7 },
- { LG_NONE, NULL, -1 }
-};
-
-# define MAXFNAME (1023)
-/*****************************************************************
-** function definitions (for function declarations see log.h)
-*****************************************************************/
-
-/*****************************************************************
-** lg_fileopen (path, name) -- open the log file
-** Name is a (absolute or relative) file or directory name.
-** If path is given and name is a relative path name then path
-** is prepended to name.
-** returns the open file pointer or NULL on error
-*****************************************************************/
-static FILE *lg_fileopen (const char *path, const char *name)
-{
- int len;
- FILE *fp;
- struct tm *t;
- time_t sec;
- char fname[MAXFNAME+1];
-
- if ( name == NULL || *name == '\0' )
- return NULL;
- else if ( *name == '/' || path == NULL )
- snprintf (fname, MAXFNAME, "%s", name);
- else
- snprintf (fname, MAXFNAME, "%s/%s", path, name);
-
-# ifdef LOG_TEST
- fprintf (stderr, "\t ==> \"%s\"", fname);
-# endif
- if ( is_directory (fname) )
- {
- len = strlen (fname);
-
- time (&sec);
- t = gmtime (&sec);
- snprintf (fname+len, MAXFNAME-len, LOG_FNAMETMPL,
- t->tm_year + 1900, t->tm_mon+1, t->tm_mday,
- t->tm_hour, t->tm_min, t->tm_sec);
-# ifdef LOG_TEST
- fprintf (stderr, " isdir \"%s\"", fname);
-# endif
- }
-
-# ifdef LOG_TEST
- fprintf (stderr, "\n");
-# endif
-
- if ( (fp = fopen (fname, "a")) == NULL )
- return NULL;
-
- return fp;
-}
-
-/*****************************************************************
-** lg_str2lvl (level_name)
-*****************************************************************/
-lg_lvl_t lg_str2lvl (const char *name)
-{
- lg_symtbl_t *p;
-
- if ( !name )
- return LG_NONE;
-
- for ( p = symtbl; p->str; p++ )
- if ( strcasecmp (name, p->str) == 0 )
- return p->level;
-
- return LG_NONE;
-}
-
-/*****************************************************************
-** lg_lvl2syslog (level)
-*****************************************************************/
-lg_lvl_t lg_lvl2syslog (lg_lvl_t level)
-{
- lg_symtbl_t *p;
-
- for ( p = symtbl; p->str; p++ )
- if ( level == p->level )
- return p->syslog_level;
-
- assert ( p->str != NULL ); /* we assume not to reach this! */
-
- return LOG_DEBUG; /* if not found, return DEBUG as default */
-}
-
-/*****************************************************************
-** lg_str2syslog (facility_name)
-*****************************************************************/
-int lg_str2syslog (const char *facility)
-{
- lg_symtbl_t *p;
-
- dbg_val1 ("lg_str2syslog (%s)\n", facility);
- if ( !facility )
- return LG_NONE;
-
- for ( p = symtbl; p->str; p++ )
- if ( strcasecmp (facility, p->str) == 0 )
- return p->syslog_level;
-
- return LG_NONE;
-}
-
-/*****************************************************************
-** lg_lvl2str (level)
-*****************************************************************/
-const char *lg_lvl2str (lg_lvl_t level)
-{
- lg_symtbl_t *p;
-
- if ( level < LG_DEBUG )
- return "none";
-
- for ( p = symtbl; p->str; p++ )
- if ( level == p->level )
- return p->str;
- return "fatal";
-}
-
-/*****************************************************************
-** lg_geterrcnt () -- returns the current value of the internal
-** error counter
-*****************************************************************/
-long lg_geterrcnt ()
-{
- return lg_errcnt;
-}
-
-/*****************************************************************
-** lg_seterrcnt () -- sets the internal error counter
-** returns the current value
-*****************************************************************/
-long lg_seterrcnt (long value)
-{
- return lg_errcnt = value;
-}
-
-/*****************************************************************
-** lg_reseterrcnt () -- resets the internal error counter to 0
-** returns the current value
-*****************************************************************/
-long lg_reseterrcnt ()
-{
- return lg_seterrcnt (0L);
-}
-
-
-/*****************************************************************
-** lg_open (prog, facility, syslevel, path, file, filelevel)
-** -- open the log channel
-** return values:
-** 0 on success
-** -1 on file open error
-*****************************************************************/
-int lg_open (const char *progname, const char *facility, const char *syslevel, const char *path, const char *file, const char *filelevel)
-{
- int sysfacility;
-
- dbg_val6 ("lg_open (%s, %s, %s, %s, %s, %s)\n", progname, facility, syslevel, path, file, filelevel);
-
- lg_minsyslevel = lg_str2lvl (syslevel);
- lg_minfilelevel = lg_str2lvl (filelevel);
-
- sysfacility = lg_str2syslog (facility);
- if ( sysfacility >= 0 )
- {
- lg_syslogging = 1;
- dbg_val2 ("lg_open: openlog (%s, LOG_NDELAY, %d)\n", progname, lg_str2syslog (facility));
- openlog (progname, LOG_NDELAY, lg_str2syslog (facility));
- }
- if ( file && * file )
- {
- if ( (lg_fp = lg_fileopen (path, file)) == NULL )
- return -1;
- lg_progname = progname;
- }
-
- return 0;
-}
-
-/*****************************************************************
-** lg_close () -- close the open filepointer for error logging
-** return 0 if no error log file is currently open,
-** otherwise the return code of fclose is returned.
-*****************************************************************/
-int lg_close ()
-{
- int ret = 0;
-
- if ( lg_syslogging )
- {
- closelog ();
- lg_syslogging = 0;
- }
- if ( lg_fp )
- {
- ret = fclose (lg_fp);
- lg_fp = NULL;
- }
-
- return ret;
-}
-
-/*****************************************************************
-** lg_zone_start (domain)
-** -- reopen the log channel
-** return values:
-** 0 on success
-** -1 on file open error
-*****************************************************************/
-int lg_zone_start (const char *dir, const char *domain)
-{
- char fname[255+1];
-
- dbg_val2 ("lg_zone_start (%s, %s)\n", dir, domain);
-
- snprintf (fname, sizeof (fname), LOG_DOMAINTMPL, domain);
- if ( lg_fp )
- lg_fpsave = lg_fp;
- lg_fp = lg_fileopen (dir, fname);
-
- return lg_fp != NULL;
-}
-
-/*****************************************************************
-** lg_zone_end (domain)
-** -- close the (reopened) log channel
-** return values:
-** 0 on success
-** -1 on file open error
-*****************************************************************/
-int lg_zone_end ()
-{
- if ( lg_fp && lg_fpsave )
- {
- lg_close ();
- lg_fp = lg_fpsave;
- lg_fpsave = NULL;
- return 1;
- }
-
- return 0;
-}
-
-/*****************************************************************
-**
-** lg_args (level, argc, argv[])
-** log all command line arguments (up to a length of 511 chars)
-** with priority level
-**
-*****************************************************************/
-void lg_args (lg_lvl_t level, int argc, char * const argv[])
-{
- char cmdline[511+1];
- int len;
- int i;
-
- len = 0;
- for ( i = 0; i < argc && len < sizeof (cmdline); i++ )
- len += snprintf (cmdline+len, sizeof (cmdline) - len, " %s", argv[i]);
-
-#if 1
- lg_mesg (level, "------------------------------------------------------------");
-#else
- lg_mesg (level, "");
-#endif
- lg_mesg (level, "running%s ", cmdline);
-}
-
-/*****************************************************************
-**
-** lg_mesg (level, fmt, ...)
-**
-** Write a given message to the error log file and counts
-** all messages written with an level greater than LOG_ERR.
-**
-** All messages will be on one line in the logfile, so it's
-** not necessary to add an '\n' to the message.
-**
-** To call this function before an elog_open() is called is
-** useless!
-**
-*****************************************************************/
-void lg_mesg (int priority, char *fmt, ...)
-{
- va_list ap;
- struct timeval tv;
- struct tm *t;
- char format[256];
-
- assert (fmt != NULL);
- assert (priority >= LG_DEBUG && priority <= LG_FATAL);
-
- format[0] ='\0';
-
- dbg_val3 ("syslog = %d prio = %d >= sysmin = %d\n", lg_syslogging, priority, lg_minsyslevel);
- if ( lg_syslogging && priority >= lg_minsyslevel )
- {
-#if defined (LOG_WITH_LEVEL) && LOG_WITH_LEVEL
- snprintf (format, sizeof (format), "%s: %s", lg_lvl2str(priority), fmt);
- fmt = format;
-#endif
- va_start(ap, fmt);
- vsyslog (lg_lvl2syslog (priority), fmt, ap);
- va_end(ap);
- }
-
- dbg_val3 ("filelg = %d prio = %d >= filmin = %d\n", lg_fp!=NULL, priority, lg_minfilelevel);
- if ( lg_fp && priority >= lg_minfilelevel )
- {
-#if defined (LOG_WITH_TIMESTAMP) && LOG_WITH_TIMESTAMP
- gettimeofday (&tv, NULL);
- t = localtime ((time_t *) &tv.tv_sec);
- fprintf (lg_fp, "%04d-%02d-%02d ",
- t->tm_year+1900, t->tm_mon+1, t->tm_mday);
- fprintf (lg_fp, "%02d:%02d:%02d.%03ld: ",
- t->tm_hour, t->tm_min, t->tm_sec, tv.tv_usec / 1000);
-#endif
-#if defined (LOG_WITH_PROGNAME) && LOG_WITH_PROGNAME
- if ( lg_progname )
- fprintf (lg_fp, "%s: ", lg_progname);
-#endif
-#if defined (LOG_WITH_LEVEL) && LOG_WITH_LEVEL
- if ( fmt != format ) /* level is not in fmt string */
- fprintf (lg_fp, "%s: ", lg_lvl2str(priority));
-#endif
- va_start(ap, fmt);
- vfprintf (lg_fp, fmt, ap);
- va_end(ap);
- fprintf (lg_fp, "\n");
- }
-
- if ( priority >= LG_ERROR )
- lg_errcnt++;
-}
-
-
-#ifdef LOG_TEST
-const char *progname;
-int main (int argc, char *argv[])
-{
- const char *levelstr;
- const char *newlevelstr;
- int level;
- int err;
-
- progname = *argv;
-
- if ( --argc )
- levelstr = *++argv;
- else
- levelstr = "fatal";
-
- level = lg_str2lvl (levelstr);
- newlevelstr = lg_lvl2str (level+1);
- dbg_val4 ("base level = %s(%d) newlevel = %s(%d)\n", levelstr, level, newlevelstr, level+1);
- if ( (err = lg_open (progname,
-#if 1
- "user",
-#else
- "none",
-#endif
- levelstr, ".",
-#if 1
- "test.log",
-#else
- NULL,
-#endif
- newlevelstr)) )
- fprintf (stderr, "\topen error %d\n", err);
- else
- {
- lg_mesg (LG_DEBUG, "debug message");
- lg_mesg (LG_INFO, "INFO message");
- lg_mesg (LG_NOTICE, "Notice message");
- lg_mesg (LG_WARNING, "Warning message");
- lg_mesg (LG_ERROR, "Error message");
- lg_mesg (LG_FATAL, "Fatal message ");
- }
-
- if ( (err = lg_close ()) < 0 )
- fprintf (stderr, "\tclose error %d\n", err);
-
- return 0;
-}
-#endif
diff --git a/contrib/zkt-1.1.3/log.h b/contrib/zkt-1.1.3/log.h
deleted file mode 100644
index 754ba781..00000000
--- a/contrib/zkt-1.1.3/log.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*****************************************************************
-**
-** @(#) log.h (c) June 2008 Holger Zuleger hznet.de
-**
-** Copyright (c) June 2008, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-#ifndef LOG_H
-# define LOG_H
-# include <sys/types.h>
-# include <stdarg.h>
-# include <stdio.h>
-# include <time.h>
-# include <syslog.h>
-
-#ifndef LOG_FNAMETMPL
-# define LOG_FNAMETMPL "/zkt-%04d-%02d-%02dT%02d%02d%02dZ+log"
-#endif
-
-#ifndef LOG_DOMAINTMPL
-# define LOG_DOMAINTMPL "zktlog-%s"
-#endif
-
-
-typedef enum {
- LG_NONE = 0,
- LG_DEBUG,
- LG_INFO,
- LG_NOTICE,
- LG_WARNING,
- LG_ERROR,
- LG_FATAL
-} lg_lvl_t;
-
-extern lg_lvl_t lg_str2lvl (const char *name);
-extern int lg_str2syslog (const char *facility);
-extern const char *lg_lvl2str (lg_lvl_t level);
-extern lg_lvl_t lg_lvl2syslog (lg_lvl_t level);
-extern long lg_geterrcnt (void);
-extern long lg_seterrcnt (long value);
-extern long lg_reseterrcnt (void);
-extern int lg_open (const char *progname, const char *facility, const char *syslevel, const char *path, const char *file, const char *filelevel);
-extern int lg_close (void);
-extern int lg_zone_start (const char *dir, const char *domain);
-extern int lg_zone_end (void);
-extern void lg_args (lg_lvl_t level, int argc, char * const argv[]);
-extern void lg_mesg (int level, char *fmt, ...);
-#endif
diff --git a/contrib/zkt-1.1.3/man/dnssec-zkt.8 b/contrib/zkt-1.1.3/man/dnssec-zkt.8
deleted file mode 100644
index 790f59a2..00000000
--- a/contrib/zkt-1.1.3/man/dnssec-zkt.8
+++ /dev/null
@@ -1,485 +0,0 @@
-.TH dnssec-zkt 8 "August 1, 2009" "ZKT 0.99b" ""
-\" turn off hyphenation
-.\" if n .nh
-.nh
-.SH NAME
-dnssec-zkt \(em Secure DNS zone key tool
-
-.SH SYNOPSYS
-.na
-.B dnssec-zkt
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-l
-.IR "list" ]
-.RB [ \-adefhkLrptz ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-
-.B dnssec-zkt
-.BR \-C <label>
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-krpz ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-.br
-.B dnssec-zkt
-.BR \-\-create= <label>
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-krpz ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-
-.B dnssec-zkt
-.BR \- { P | A | D | R } <keytag>
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-r ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-.br
-.B dnssec-zkt
-.BR \-\-published= <keytag>
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-r ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-.br
-.B dnssec-zkt
-.BR \-\-active= <keytag>
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-r ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-.br
-.B dnssec-zkt
-.BR \-\-depreciate= <keytag>
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-r ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-.br
-.B dnssec-zkt
-.BR \-\-rename= <keytag>
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-r ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-
-.B dnssec-zkt
-.BR \-\-destroy= <keytag>
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-r ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-
-.B dnssec-zkt
-.B \-T
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-l
-.IR "list" ]
-.RB [ \-hr ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-.br
-.B dnssec-zkt
-.B \-\-list-trustedkeys
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-l
-.IR "list" ]
-.RB [ \-hr ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-
-.B dnssec-zkt
-.B \-K
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-l
-.IR "list" ]
-.RB [ \-hkzr ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-.br
-.B dnssec-zkt
-.B \-\-list-dnskeys
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-l
-.IR "list" ]
-.RB [ \-hkzr ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-
-.B dnssec-zkt
-.B \-Z
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.br
-.B dnssec-zkt
-.B \-\-zone-config
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-
-.B dnssec-zkt
-.B \-9 | \-\-ksk-rollover
-.br
-.B dnssec-zkt
-.B \-1 | \-\-ksk-roll-phase1
-.I "do.ma.in."
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.br
-.B dnssec-zkt
-.B \-2 | \-\-ksk-roll-phase2
-.I "do.ma.in."
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.br
-.B dnssec-zkt
-.B \-3 | \-\-ksk-roll-phase3
-.I do.ma.in.
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.br
-.B dnssec-zkt
-.B \-0 | \-\-ksk-roll-stat
-.I do.ma.in.
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.br
-.ad
-
-.SH DESCRIPTION
-The
-.I dnssec-zkt
-command is a wrapper around
-.I dnssec-keygen(8)
-to assist in dnssec zone key management.
-.PP
-In the common usage the command prints out information about
-all dnssec (zone) keys found in the given (or predefined default) directory.
-It is also possible to specify keyfiles (K*.key) as arguments.
-With option
-.B \-r
-subdirectories will be searched recursively, and all dnssec keys found
-will be listed sorted by domain name, key type and generation time.
-In that mode the use of the
-.B \-p
-option may be helpful to find the location of the keyfile in the directory tree.
-.PP
-Other forms of the command print out keys in a format suitable for
-a trusted-key section or as a DNSKEY resource record.
-.PP
-The command is also useful in dns key management.
-It offers monitoring of key lifetime and modification of key status.
-
-.SH GENERAL OPTIONS
-.TP
-.BI \-V " view" ", \-\-view=" view
-Try to read the default configuration out of a file named
-.I dnssec-<view>.conf .
-Instead of specifying the \-V or --view option every time,
-it is also possible to create a hard or softlink to the
-executable file to give it an additional name like
-.I dnssec-zkt-<view> .
-.TP
-.BI \-c " file" ", \-\-config=" file
-Read default values from the specified config file.
-Otherwise the default config file is read or build in defaults
-will be used.
-.TP
-.BI \-O " optstr" ", \-\-config-option=" optstr
-Set any config file option via the commandline.
-Several config file options could be specified at the argument string
-but have to be delimited by semicolon (or newline).
-.TP
-.BI \-l " list"
-Print out information solely about domains given in the comma or space separated
-list.
-Take care of, that every domain name has a trailing dot.
-.TP
-.BR \-d ", " \-\-directory
-Skip directory arguments.
-This will be useful in combination with wildcard arguments
-to prevent dnsssec-zkt to list all keys found in subdirectories.
-For example "dnssec-zkt -d *" will print out a list of all keys only found in
-the current directory.
-Maybe it is easier to use "dnssec-zkt ." instead (without -r set).
-The option works similar to the \-d option of
-.IR ls(1) .
-.TP
-.BR \-L ", " \-\-left-justify
-Print out the domain name left justified.
-.TP
-.BR \-k ", " \-\-ksk
-Select and print key signing keys only (default depends on command mode).
-.TP
-.BR \-z ", " \-\-zsk
-Select and print zone signing keys only (default depends on command mode).
-.TP
-.BR \-r ", " \-\-recursive
-Recursive mode (default is off).
-.br
-Also settable in the dnssec.conf file (Parameter: Recursive).
-.TP
-.BR \-p ", " \-\-path
-Print pathname in listing mode.
-In -C mode, don't create the new key in the same directory as (already existing)
-keys with the same label.
-.TP
-.BR \-a ", " \-\-age
-Print age of key in weeks, days, hours, minutes and seconds (default is off).
-.br
-Also settable in the dnssec.conf file (Parameter: PrintAge).
-.TP
-.BR \-f ", " \-\-lifetime
-Print the key lifetime.
-.TP
-.BR \-F ", " \-\-setlifetime
-Set the key lifetime of all the selected keys.
-Use option -k, -z, -l or the file and dir argument for key selection.
-.TP
-.BR \-e ", " \-\-exptime
-Print the key expiration time.
-.TP
-.BR \-t ", " \-\-time
-Print the key generation time (default is on).
-.br
-Also settable in the dnssec.conf file (Parameter: PrintTime).
-.TP
-.B \-h
-No header or trusted-key section header and trailer in -T mode
-.PP
-
-.SH COMMAND OPTIONS
-.TP
-.BR \-H ", " \-\-help
-Print out the online help.
-.TP
-.BR \-T ", " \-\-list-trustedkeys
-List all key signing keys as a
-.I named.conf
-trusted-key section.
-Use
-.B \-h
-to supress the section header/trailer.
-.TP
-.BR \-K ", " \-\-list-dnskeys
-List the public part of all the keys in DNSKEY resource record format.
-Use
-.B \-h
-to suppress comment lines.
-.TP
-.BI \-C " zone" ", \-\-create=" zone
-Create a new zone signing key for the given zone.
-Add option
-.B \-k
-to create a key signing key.
-The key algorithm and key length will be examined from built-in default values
-or from the parameter settings in the
-.I dnssec.conf
-file.
-.br
-The keyfile will be created in the current directory if
-the
-.B \-p
-option is specified.
-.TP
-.BI \-R " keyid" ", \-\-revoke=" keyid
-Revoke the key signing key with the given keyid.
-A revoked key has bit 8 in the flags filed set (see RFC5011).
-The keyid is the numeric keytag with an optionally added zone name separated by a colon.
-.TP
-.BI \-\-rename=" keyid
-Rename the key files of the key with the given keyid
-(Look at key file names starting with an lower 'k').
-The keyid is the numeric keytag with an optionally added zone name separated by a colon.
-.TP
-.BI \-\-destroy= keyid
-Deletes the key with the given keyid.
-The keyid is the numeric keytag with an optionally added zone name separated by a colon.
-Beware that this deletes both private and public keyfiles, thus the key is
-unrecoverable lost.
-.TP
-.BI \-P|A|D " keyid," " \-\-published=" keyid, " \-\-active=" keyid, " \-\-depreciated=" keyid
-Change the status of the given dnssec key to
-published
-.RB ( \-P ),
-active
-.RB ( \-A )
-or depreciated
-.RB ( \-D ).
-The
-.I keyid
-is the numeric keytag with an optionally added zone name separated by a colon.
-Setting the status to "published" or "depreciate" will change the filename
-of the private key file to ".published" or ".depreciated" respectivly.
-This prevents the usage of the key as a signing key by the use of
-.IR dnssec-signzone(8) .
-The time of status change will be stored in the 'mtime' field of the corresponding
-".key" file.
-Key activation via option
-.B \-A
-will restore the original timestamp and file name (".private").
-.TP
-.BR \-Z ", " \-\-zone-config
-Write all config parameters to stdout.
-The output is suitable as a template for the
-.I dnssec.conf
-file, so the easiest way to create a
-.I dnssec.conf
-file is to redirect the standard output of the above command.
-Pay attention not to overwrite an existing file.
-.TP
-.BI \-\-ksk-roll-phase[123] " do.ma.in."
-Initiate a key signing key rollover of the specified domain.
-This feature is currently in experimental status and is mainly for the use
-in an hierachical environment.
-Use --ksk-rollover for a little more detailed description.
-
-
-.SH SAMPLE USAGE
-.TP
-.fam C
-.B "dnssec-zkt \-r .
-.fam T
-Print out a list of all zone keys found below the current directory.
-.TP
-.fam C
-.B "dnssec-zkt \-Z \-c """"
-.fam T
-Print out the compiled in default parameters.
-.TP
-.fam C
-.B "dnssec-zkt \-C example.net \-k \-r ./zonedir
-.fam T
-Create a new key signing key for the zone "example.net".
-Store the key in the same directory below "zonedir" where the other
-"example.net" keys live.
-.TP
-.fam C
-.B "dnssec-zkt \-T ./zonedir/example.net
-.fam T
-Print out a trusted-key section containing the key signing keys of "example.net".
-.TP
-.fam C
-.B "dnssec-zkt \-D 123245 \-r .
-.fam T
-Depreciate the key with tag "12345" below the current directory,
-.TP
-.fam C
-.B "dnssec-zkt --view intern
-.fam T
-Print out a list of all zone keys found below the directory where all
-the zones of view intern live.
-There should be a seperate dnssec config file
-.I dnssec-intern.conf
-with a directory option to take affect of this.
-.TP
-.fam C
-.B "dnssec-zkt-intern
-.fam T
-Same as above.
-The binary file
-.I dnssec-zkt
-has another link, named
-.I dnssec-zkt-intern
-made, and
-.I dnssec-zkt
-examines argv[0] to find a view whose zones it proceeds to process.
-
-.SH ENVIRONMENT VARIABLES
-.TP
-ZKT_CONFFILE
-Specifies the name of the default global configuration files.
-
-.SH FILES
-.TP
-.I /var/named/dnssec.conf
-Built-in default global configuration file.
-The name of the default global config file is settable via
-the environment variable ZKT_CONFFILE.
-.TP
-.I /var/named/dnssec-<view>.conf
-View specific global configuration file.
-.TP
-.I ./dnssec.conf
-Local configuration file (only used in
-.B \-C
-mode).
-
-.SH BUGS
-.PP
-Some of the general options will not be meaningful in all of the command modes.
-.br
-The option
-.B \-l
-and the ksk rollover options
-insist on domain names ending with a dot.
-.PP
-
-.SH AUTHORS
-Holger Zuleger, Mans Nilsson
-
-.SH COPYRIGHT
-Copyright (c) 2005 \- 2008 by Holger Zuleger.
-Licensed under the BSD Licences. There is NO warranty; not even for MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.
-.\"--------------------------------------------------
-.SH SEE ALSO
-dnssec-keygen(8), dnssec-signzone(8), rndc(8), named.conf(5), dnssec-signer(8),
-.br
-RFC4641
-"DNSSEC Operational Practices" by Miek Gieben and Olaf Kolkman,
-.br
-DNSSEC HOWTO Tutorial by Olaf Kolkman, RIPE NCC
-.br
-(http://www.nlnetlabs.nl/dnssec_howto/)
diff --git a/contrib/zkt-1.1.3/man/zkt-conf.8 b/contrib/zkt-1.1.3/man/zkt-conf.8
deleted file mode 100644
index c989fa2a..00000000
--- a/contrib/zkt-1.1.3/man/zkt-conf.8
+++ /dev/null
@@ -1,247 +0,0 @@
-.TH zkt-conf 8 "February 22, 2010" "ZKT 1.0" ""
-\" turn off hyphenation
-.\" if n .nh
-.nh
-.SH NAME
-zkt-conf \(em Secure DNS zone key config tool
-
-.SH SYNOPSYS
-.na
-.B zkt-conf
-.RB [ \-V
-.IR "name" ]
-.RB [ \-w ]
-.B \-d
-.RB [ \-O
-.IR "optstr" ]
-.br
-.B zkt-conf
-.RB [ \-V
-.IR "name" ]
-.RB [ \-w ]
-.RB [ \-s ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-O
-.IR "optstr" ]
-.br
-.B zkt-conf
-.RB [ \-V
-.IR "name" ]
-.RB [ \-w ]
-.B \-l
-.RB [ \-a ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-O
-.IR "optstr" ]
-
-.B zkt-conf
-.RB [ \-c
-.IR "file" ]
-.RB [ \-w ]
-.I "zonefile"
-
-.br
-.ad
-.SH DESCRIPTION
-The
-.I zkt-conf
-command helps to create and show a config file for use by
-the Zone Key Tool commands, which are currently
-.I zkt-ls(8) ,
-.I zkt-keyman(8) ,
-and
-.IR zkt-signer(8) .
-.PP
-In general, the ZKT commands uses up to three consequitive sources for config
-parameter settings:
-.IP
-a)
-The build-in default parameters
-.IP
-b)
-The side wide config file or the file specified with option -c
-overloads the built-in vars.
-The file is
-.I /var/named/dnssec.conf
-or the one set by the environment variable ZKT_CONFFILE.
-.IP
-c)
-The local config file
-.I dnssec.conf
-in the current zone directory also overloads the parameter read so far.
-.PP
-Because of the overload feature, none of the config files has to have
-a complete parameter set.
-Typically the local config file will have only those parameters which are
-different from the global or built-in ones.
-.PP
-The default operation of
-.I zkt-conf(8)
-is to print the site wide config file (same as option
-.BR \-s ).
-Option
-.B \-d
-will print out the built-in defaults while
-.B \-l
-print those local parameters which are different to the global ones.
-In the last case
-.B \-a
-gives the fully
-.RB ( \-\-all )
-parameter list.
-.PP
-In all forms of the command, the parameters are changeable via option
-.B \-O
-.RB ( \-\-config-option ).
-.PP
-With option
-.B \-w
-.RB ( \-\-write )
-the confg parameters are written back to the config file.
-This is useful in case of an ZKT upgrade or if one or more parameters are changed
-by option
-.BR \-O .
-.PP
-Option
-.B \-t
-checks some of the parameter for reasonable values.
-.PP
-.PP
-Which config file is shown (or modified or checked) is determined by an option.
-.B \-d
-means the built-in defaults, option
-.B \-l
-is for the local config file and
-.B \-s
-specifies the site wide config file.
-Option
-.B \-s
-is the default.
-.PP
-In the last form of the command, the
-maximum TTL value of all the resource records of
-.I zonefile
-is calculated and print on stdout.
-Additional, the zonefile is checked if the key database
-.RI ( dnskey.db )
-is included in the zone file.
-If option
-.B \-w
-is set, than the INCLUDE directive will be added to the zone file if
-necessary, and the maximum ttl value is written to a local config file.
-
-.SH COMMAND OPTIONS
-.TP
-.BR \-h ", " \-\-help
-Print out the online help.
-.TP
-.BR \-d ", " \-\-built-in-defaults
-List all the built-in default parameter.
-.TP
-.BR \-s ", " \-\-sitecfg
-List all site wide config parameter (this is the default).
-.TP
-.BR \-l ", " \-\-localcfg
-List local config parameter which are different to the site wide config
-parameter.
-With otion
-.B \-a
-.RB ( \-\-all )
-all config parameters will be shown.
-
-.SH OPTIONS
-.TP
-.BI \-V " view" ", \-\-view=" view
-Try to read the default configuration out of a file named
-.I dnssec-<view>.conf .
-Instead of specifying the
-.B \-V
-or
-.B \-\-view
-option every time, it is also possible to create a hard or softlink to the
-executable file and name it like
-.I zkt-conf-<view> .
-.TP
-.BI \-c " file" ", \-\-config=" file
-Read all parameter from the specified config file.
-Otherwise the default config file is read or build in defaults
-will be used.
-.TP
-.BI \-O " optstr" ", \-\-config-option=" optstr
-Set any config file parameter via the commandline.
-Several config file options could be specified at the argument string
-but have to be delimited by semicolon (or newline).
-.TP
-.BR \-a ", " \-\-all
-In case of showing the local config file parameter
-.RB ( \-l )
-this prints all parameter, not just the ones different to the site wide
-or built-in defaults.
-
-.SH SAMPLE USAGE
-.TP
-.fam C
-.B "zkt-conf \-d
-.fam T
-Print the built-in default config pars.
-.TP
-.fam C
-.B "zkt-conf \-d \-w
-.fam T
-Write all the built-in defaults into the site wide config file.
-.TP
-.fam C
-.B "zkt-conf \-s \-O ""SerialFormat: Incremental; Zonedir: /var/named/zones"" \-w"
-.fam T
-Change two parameters in the site wide
-.I dnssec.conf
-file.
-.TP
-.fam C
-.B "zkt-conf \-w zone.db
-.fam T
-Add
-.B "$INCLUDE dnskey.db"
-to the zone file and set the maximum ttl paramter in the local config file
-to the maximum ttl fond in any RR of
-.IR zone.db .
-
-.SH ENVIRONMENT VARIABLES
-.TP
-ZKT_CONFFILE
-Specifies the name of the default global configuration files.
-
-.SH FILES
-.TP
-.I /var/named/dnssec.conf
-Default global configuration file.
-The name of the default global config file is settable via
-the environment variable ZKT_CONFFILE.
-.TP
-.I /var/named/dnssec-<view>.conf
-View specific global configuration file.
-.TP
-.I ./dnssec.conf
-Local configuration file (additionally used in
-.B \-l
-mode).
-
-.SH AUTHORS
-Holger Zuleger
-
-.SH COPYRIGHT
-Copyright (c) 2005 \- 2010 by Holger Zuleger.
-Licensed under the BSD Licences. There is NO warranty; not even for MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.
-.\"--------------------------------------------------
-.SH SEE ALSO
-dnssec-keygen(8), dnssec-signzone(8), rndc(8), named.conf(5), zkt-signer(8), zkt-ls(8), zkt-keyman(8),
-.br
-RFC4641
-"DNSSEC Operational Practices" by Miek Gieben and Olaf Kolkman,
-.br
-DNSSEC HOWTO Tutorial by Olaf Kolkman, RIPE NCC
-.br
-(http://www.nlnetlabs.nl/dnssec_howto/)
diff --git a/contrib/zkt-1.1.3/man/zkt-conf.8.html b/contrib/zkt-1.1.3/man/zkt-conf.8.html
deleted file mode 100644
index 9b188078..00000000
--- a/contrib/zkt-1.1.3/man/zkt-conf.8.html
+++ /dev/null
@@ -1,312 +0,0 @@
-<!-- Creator : groff version 1.20.1 -->
-<!-- CreationDate: Wed Mar 31 18:15:57 2010 -->
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta name="generator" content="groff -Thtml, see www.gnu.org">
-<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<meta name="Content-Style" content="text/css">
-<style type="text/css">
- p { margin-top: 0; margin-bottom: 0; vertical-align: top }
- pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
- table { margin-top: 0; margin-bottom: 0; vertical-align: top }
- h1 { text-align: center }
-</style>
-<title>zkt-conf</title>
-
-</head>
-<body>
-
-<h1 align="center">zkt-conf</h1>
-
-<a href="#NAME">NAME</a><br>
-<a href="#SYNOPSYS">SYNOPSYS</a><br>
-<a href="#DESCRIPTION">DESCRIPTION</a><br>
-<a href="#COMMAND OPTIONS">COMMAND OPTIONS</a><br>
-<a href="#OPTIONS">OPTIONS</a><br>
-<a href="#SAMPLE USAGE">SAMPLE USAGE</a><br>
-<a href="#ENVIRONMENT VARIABLES">ENVIRONMENT VARIABLES</a><br>
-<a href="#FILES">FILES</a><br>
-<a href="#AUTHORS">AUTHORS</a><br>
-<a href="#COPYRIGHT">COPYRIGHT</a><br>
-<a href="#SEE ALSO">SEE ALSO</a><br>
-
-<hr>
-
-
-<h2>NAME
-<a name="NAME"></a>
-</h2>
-
-
-<p style="margin-left:11%; margin-top: 1em">zkt-conf
-&mdash; Secure DNS zone key config tool</p>
-
-<h2>SYNOPSYS
-<a name="SYNOPSYS"></a>
-</h2>
-
-
-
-<p style="margin-left:11%; margin-top: 1em"><b>zkt-conf</b>
-[<b>&minus;V</b> <i>name</i>] [<b>&minus;w</b>]
-<b>&minus;d</b> [<b>&minus;O</b> <i>optstr</i>] <b><br>
-zkt-conf</b> [<b>&minus;V</b> <i>name</i>] [<b>&minus;w</b>]
-[<b>&minus;s</b>] [<b>&minus;c</b> <i>file</i>]
-[<b>&minus;O</b> <i>optstr</i>] <b><br>
-zkt-conf</b> [<b>&minus;V</b> <i>name</i>] [<b>&minus;w</b>]
-<b>&minus;l</b> [<b>&minus;a</b>] [<b>&minus;c</b>
-<i>file</i>] [<b>&minus;O</b> <i>optstr</i>]</p>
-
-
-<p style="margin-left:11%; margin-top: 1em"><b>zkt-conf</b>
-[<b>&minus;c</b> <i>file</i>] [<b>&minus;w</b>]
-<i>zonefile</i></p>
-
-<h2>DESCRIPTION
-<a name="DESCRIPTION"></a>
-</h2>
-
-
-<p style="margin-left:11%; margin-top: 1em">The
-<i>zkt-conf</i> command helps to create and show a config
-file for use by the Zone Key Tool commands, which are
-currently <i>zkt-ls(8) , zkt-keyman(8) ,</i> and
-<i>zkt-signer(8)</i>.</p>
-
-<p style="margin-left:11%; margin-top: 1em">In general, the
-ZKT commands uses up to three consequitive sources for
-config parameter settings:</p>
-
-<p style="margin-left:22%; margin-top: 1em">a) The build-in
-default parameters</p>
-
-<p style="margin-left:22%; margin-top: 1em">b) The side
-wide config file or the file specified with option -c
-overloads the built-in vars. The file is
-<i>/var/named/dnssec.conf</i> or the one set by the
-environment variable ZKT_CONFFILE.</p>
-
-<p style="margin-left:22%; margin-top: 1em">c) The local
-config file <i>dnssec.conf</i> in the current zone directory
-also overloads the parameter read so far.</p>
-
-<p style="margin-left:11%; margin-top: 1em">Because of the
-overload feature, none of the config files has to have a
-complete parameter set. Typically the local config file will
-have only those parameters which are different from the
-global or built-in ones.</p>
-
-<p style="margin-left:11%; margin-top: 1em">The default
-operation of <i>zkt-conf(8)</i> is to print the site wide
-config file (same as option <b>&minus;s</b>). Option
-<b>&minus;d</b> will print out the built-in defaults while
-<b>&minus;l</b> print those local parameters which are
-different to the global ones. In the last case
-<b>&minus;a</b> gives the fully (<b>&minus;&minus;all</b>)
-parameter list.</p>
-
-<p style="margin-left:11%; margin-top: 1em">In all forms of
-the command, the parameters are changeable via option
-<b>&minus;O</b> (<b>&minus;&minus;config-option</b>).</p>
-
-<p style="margin-left:11%; margin-top: 1em">With option
-<b>&minus;w</b> (<b>&minus;&minus;write</b>) the confg
-parameters are written back to the config file. This is
-useful in case of an ZKT upgrade or if one or more
-parameters are changed by option <b>&minus;O</b>.</p>
-
-<p style="margin-left:11%; margin-top: 1em">Option
-<b>&minus;t</b> checks some of the parameter for reasonable
-values.</p>
-
-<p style="margin-left:11%; margin-top: 1em">Which config
-file is shown (or modified or checked) is determined by an
-option. <b>&minus;d</b> means the built-in defaults, option
-<b>&minus;l</b> is for the local config file and
-<b>&minus;s</b> specifies the site wide config file. Option
-<b>&minus;s</b> is the default.</p>
-
-<p style="margin-left:11%; margin-top: 1em">In the last
-form of the command, the maximum TTL value of all the
-resource records of <i>zonefile</i> is calculated and print
-on stdout. Additional, the zonefile is checked if the key
-database (<i>dnskey.db</i>) is included in the zone file. If
-option <b>&minus;w</b> is set, than the INCLUDE directive
-will be added to the zone file if necessary, and the maximum
-ttl value is written to a local config file.</p>
-
-<h2>COMMAND OPTIONS
-<a name="COMMAND OPTIONS"></a>
-</h2>
-
-
-
-<p style="margin-left:11%; margin-top: 1em"><b>&minus;h</b>,
-<b>&minus;&minus;help</b></p>
-
-<p style="margin-left:22%;">Print out the online help.</p>
-
-<p style="margin-left:11%;"><b>&minus;d</b>,
-<b>&minus;&minus;built-in-defaults</b></p>
-
-<p style="margin-left:22%;">List all the built-in default
-parameter.</p>
-
-<p style="margin-left:11%;"><b>&minus;s</b>,
-<b>&minus;&minus;sitecfg</b></p>
-
-<p style="margin-left:22%;">List all site wide config
-parameter (this is the default).</p>
-
-<p style="margin-left:11%;"><b>&minus;l</b>,
-<b>&minus;&minus;localcfg</b></p>
-
-<p style="margin-left:22%;">List local config parameter
-which are different to the site wide config parameter. With
-otion <b>&minus;a</b> (<b>&minus;&minus;all</b>) all config
-parameters will be shown.</p>
-
-<h2>OPTIONS
-<a name="OPTIONS"></a>
-</h2>
-
-
-
-<p style="margin-left:11%; margin-top: 1em"><b>&minus;V</b>
-<i>view</i><b>, &minus;&minus;view=</b><i>view</i></p>
-
-<p style="margin-left:22%;">Try to read the default
-configuration out of a file named
-<i>dnssec-&lt;view&gt;.conf .</i> Instead of specifying the
-<b>&minus;V</b> or <b>&minus;&minus;view</b> option every
-time, it is also possible to create a hard or softlink to
-the executable file and name it like
-<i>zkt-conf-&lt;view&gt; .</i></p>
-
-<p style="margin-left:11%;"><b>&minus;c</b> <i>file</i><b>,
-&minus;&minus;config=</b><i>file</i></p>
-
-<p style="margin-left:22%;">Read all parameter from the
-specified config file. Otherwise the default config file is
-read or build in defaults will be used.</p>
-
-<p style="margin-left:11%;"><b>&minus;O</b>
-<i>optstr</i><b>,
-&minus;&minus;config-option=</b><i>optstr</i></p>
-
-<p style="margin-left:22%;">Set any config file parameter
-via the commandline. Several config file options could be
-specified at the argument string but have to be delimited by
-semicolon (or newline).</p>
-
-<p style="margin-left:11%;"><b>&minus;a</b>,
-<b>&minus;&minus;all</b></p>
-
-<p style="margin-left:22%;">In case of showing the local
-config file parameter (<b>&minus;l</b>) this prints all
-parameter, not just the ones different to the site wide or
-built-in defaults.</p>
-
-<h2>SAMPLE USAGE
-<a name="SAMPLE USAGE"></a>
-</h2>
-
-
-<p style="margin-left:11%; margin-top: 1em"><b>zkt-conf
-&minus;d</b></p>
-
-<p style="margin-left:22%;">Print the built-in default
-config pars.</p>
-
-<p style="margin-left:11%;"><b>zkt-conf &minus;d
-&minus;w</b></p>
-
-<p style="margin-left:22%;">Write all the built-in defaults
-into the site wide config file.</p>
-
-<p style="margin-left:11%;"><b>zkt-conf &minus;s &minus;O
-&quot;SerialFormat: Incremental; Zonedir:
-/var/named/zones&quot; <br>
-&minus;w</b></p>
-
-<p style="margin-left:22%;">Change two parameters in the
-site wide <i>dnssec.conf</i> file.</p>
-
-<p style="margin-left:11%;"><b>zkt-conf &minus;w
-zone.db</b></p>
-
-<p style="margin-left:22%;">Add <b>$INCLUDE dnskey.db</b>
-to the zone file and set the maximum ttl paramter in the
-local config file to the maximum ttl fond in any RR of
-<i>zone.db</i>.</p>
-
-<h2>ENVIRONMENT VARIABLES
-<a name="ENVIRONMENT VARIABLES"></a>
-</h2>
-
-
-
-<p style="margin-left:11%; margin-top: 1em">ZKT_CONFFILE</p>
-
-<p style="margin-left:22%;">Specifies the name of the
-default global configuration files.</p>
-
-<h2>FILES
-<a name="FILES"></a>
-</h2>
-
-
-
-<p style="margin-left:11%; margin-top: 1em"><i>/var/named/dnssec.conf</i></p>
-
-<p style="margin-left:22%;">Default global configuration
-file. The name of the default global config file is settable
-via the environment variable ZKT_CONFFILE.</p>
-
-
-<p style="margin-left:11%;"><i>/var/named/dnssec-&lt;view&gt;.conf</i></p>
-
-<p style="margin-left:22%;">View specific global
-configuration file.</p>
-
-<p style="margin-left:11%;"><i>./dnssec.conf</i></p>
-
-<p style="margin-left:22%;">Local configuration file
-(additionally used in <b>&minus;l</b> mode).</p>
-
-<h2>AUTHORS
-<a name="AUTHORS"></a>
-</h2>
-
-
-<p style="margin-left:11%; margin-top: 1em">Holger
-Zuleger</p>
-
-<h2>COPYRIGHT
-<a name="COPYRIGHT"></a>
-</h2>
-
-
-<p style="margin-left:11%; margin-top: 1em">Copyright (c)
-2005 &minus; 2010 by Holger Zuleger. Licensed under the BSD
-Licences. There is NO warranty; not even for MERCHANTABILITY
-or FITNESS FOR A PARTICULAR PURPOSE.</p>
-
-<h2>SEE ALSO
-<a name="SEE ALSO"></a>
-</h2>
-
-
-
-<p style="margin-left:11%; margin-top: 1em">dnssec-keygen(8),
-dnssec-signzone(8), rndc(8), named.conf(5), zkt-signer(8),
-zkt-ls(8), zkt-keyman(8), <br>
-RFC4641 &quot;DNSSEC Operational Practices&quot; by Miek
-Gieben and Olaf Kolkman, <br>
-DNSSEC HOWTO Tutorial by Olaf Kolkman, RIPE NCC <br>
- (http://www.nlnetlabs.nl/dnssec_howto/)</p>
-<hr>
-</body>
-</html>
diff --git a/contrib/zkt-1.1.3/man/zkt-conf.8.org b/contrib/zkt-1.1.3/man/zkt-conf.8.org
deleted file mode 100644
index 617f10eb..00000000
--- a/contrib/zkt-1.1.3/man/zkt-conf.8.org
+++ /dev/null
@@ -1,227 +0,0 @@
-.TH zkt-conf 8 "February 22, 2010" "ZKT 1.0" ""
-\" turn off hyphenation
-.\" if n .nh
-.nh
-.SH NAME
-zkt-conf \(em Secure DNS zone key config tool
-
-.SH SYNOPSYS
-.na
-.B zkt-conf
-.RB [ \-V|\-\-view
-.IR "name" ]
-.RB [ \-w|\-\-write ]
-.B \-d|\-\-default
-.RB [ \-O|\-\-option
-.IR "optstr" ]
-.br
-.B zkt-conf
-.RB [ \-V|\-\-view
-.IR "name" ]
-.RB [ \-w|\-\-write ]
-.RB [ \-s ]
-.RB [ \-c|\-\-config
-.IR "file" ]
-.RB [ \-O|\-\-option
-.IR "optstr" ]
-.br
-.B zkt-conf
-.RB [ \-V|\-\-view
-.IR "name" ]
-.RB [ \-w|\-\-write ]
-.B \-l|\-\-local
-.RB [ \-c|\-\-config
-.IR "file" ]
-.RB [ \-O|\-\-option
-.IR "optstr" ]
-
-.B zkt-conf
-.RB [ \-c
-.IR "file" ]
-.RB [ \-w|\-\-write ]
-.I "zonefile"
-
-.br
-.ad
-
-.SH DESCRIPTION
-The
-.I zkt-conf
-command helps to create and show a config file for use by
-the Zone Key Tool commands, which are currently
-.I dnssec-zkt(8)
-and
-.IR zkt-signer(8) .
-.PP
-In general, the ZKT commands uses three sources for the config parameters:
-.HP 3
-a)
-The build-in default parameters
-.HP 3
-b)
-The side wide config file or the file specified with option -c
-will overload the built-in vars.
-The site wide config file is the file
-.I /var/named/dnssec.conf
-or the one set by the environment variable ZKT_CONF.
-.HP 3
-c)
-The local config file
-.I dnssec.conf
-in the current zone directory will also overload the parameters read so far.
-.PP
-Because of this overloading feature, none of the config files has to have
-a complete parameter set.
-Typically the local config file will have only those parameters which are
-different from the global or built-in ones.
-.PP
-The default operation of
-.I zkt-conf(8)
-is to print the site wide config file (same as option
-.BR \-s ).
-Option
-.B \-d
-will print out the built-in defaults while
-.B \-l
-just print the local config parameters which are different to the global ones.
-In the last case
-.B \-a
-gives the complete
-.RB ( \-\-all )
-parameter list.
-.PP
-In all forms of the command, the parameters are changeable via option
-.B \-O
-.RB ( \-\-config-option ).
-.PP
-With option
-.B \-w
-.RB ( \-\-write )
-the parameters will be written back to the config file.
-This is useful in case of an ZKT upgrade or if one or more parameters are changed
-by option
-.BR \-O .
-.PP
-Option
-.B \-t
-checks some of the parameter for reasonable values.
-.PP
-If the option
-.B \-t
-is given, all config parameters are checked against reasonable values.
-.PP
-Which config file is shown (or modified or checked) is determined by option
-.B \-d
-which means the built-in defaults, option
-.B \-l
-which means the local config file or
-.B \-s
-which specifies the site wide config file.
-Option
-.B \-s
-is the default.
-
-.SH GENERAL OPTIONS
-.TP
-.BI \-V " view" ", \-\-view=" view
-Try to read the default configuration out of a file named
-.I dnssec-<view>.conf .
-Instead of specifying the \-V or \-\-view option every time,
-it is also possible to create a hard or softlink to the
-executable file to give it an additional name like
-.I zkt-conf-<view> .
-.TP
-.BI \-c " file" ", \-\-config=" file
-Read all parameter from the specified config file.
-Otherwise the default config file is read or build in defaults
-will be used.
-.TP
-.BI \-O " optstr" ", \-\-config-option=" optstr
-Set any config file parameter via the commandline.
-Several config file options could be specified at the argument string
-but have to be delimited by semicolon (or newline).
-.TP
-.BR \-a ", " \-\-all
-In case of showing the local config file parameter
-.RI ( \-l )
-print all parameter, not just the ones different o the site wide or built-in defaults.
-
-.SH COMMAND OPTIONS
-.TP
-.BR \-h ", " \-\-help
-Print out the online help.
-.TP
-.BR \-d ", " \-\-built-in-defaults
-List all the built-in default paremeter.
-.TP
-.BR \-s ", " \-\-sidecfg
-List all side wide config parameters (this is the default).
-.TP
-.BR \-l ", " \-\-localconf
-List all local config parameters which are different to the site-wide config
-parameters.
-With otion
-.B \-a
-.RB ( \-\-all )
-all config parameters will be shown.
-
-
-.SH SAMPLE USAGE
-.TP
-.fam C
-.B "zkt-conf \-d
-.fam T
-Print the built-in default config pars.
-.TP
-.fam C
-.B "zkt-conf \-d \-w
-.fam T
-Write all the built-in defaults into the site wide config file.
-.TP
-.fam C
-.B "zkt-conf \-s \-\--option "SerialFormat: unixtime; Zonedir: /var/named/zones" "\-w
-.fam T
-Change two parameters in the site wide dnssec.conf file.
-
-.SH ENVIRONMENT VARIABLES
-.TP
-ZKT_CONFFILE
-Specifies the name of the default global configuration files.
-
-.SH FILES
-.TP
-.I /var/named/dnssec.conf
-Default global configuration file.
-The name of the default global config file is settable via
-the environment variable ZKT_CONFFILE.
-.TP
-.I /var/named/dnssec-<view>.conf
-View specific global configuration file.
-.TP
-.I ./dnssec.conf
-Local configuration file (additionallx used in
-.B \-l
-mode).
-
-.SH BUGS
-.PP
-Some of the general options will not be meaningful in all of the command modes.
-.PP
-
-.SH AUTHORS
-Holger Zuleger
-
-.SH COPYRIGHT
-Copyright (c) 2010 by Holger Zuleger.
-Licensed under the BSD Licences. There is NO warranty; not even for MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.
-.\"--------------------------------------------------
-.SH SEE ALSO
-dnssec-keygen(8), dnssec-signzone(8), rndc(8), named.conf(5), zkt-signer(8), dnssec-zkt(8),
-.br
-RFC4641
-"DNSSEC Operational Practices" by Miek Gieben and Olaf Kolkman,
-.br
-DNSSEC HOWTO Tutorial by Olaf Kolkman, RIPE NCC
-.br
-(http://www.nlnetlabs.nl/dnssec_howto/)
diff --git a/contrib/zkt-1.1.3/man/zkt-conf.8.pdf b/contrib/zkt-1.1.3/man/zkt-conf.8.pdf
deleted file mode 100644
index 2ae54ed0..00000000
--- a/contrib/zkt-1.1.3/man/zkt-conf.8.pdf
+++ /dev/null
Binary files differ
diff --git a/contrib/zkt-1.1.3/man/zkt-keyman.8 b/contrib/zkt-1.1.3/man/zkt-keyman.8
deleted file mode 100644
index 69093117..00000000
--- a/contrib/zkt-1.1.3/man/zkt-keyman.8
+++ /dev/null
@@ -1,316 +0,0 @@
-.TH zkt\-keyman 8 "Apr 1, 2010" "ZKT 1.0" ""
-\" turn off hyphenation
-.\" if n .nh
-.nh
-.SH NAME
-zkt\-keyman \(em A DNSSEC key management tool
-
-.SH SYNOPSYS
-.na
-.B zkt\-keyman
-.BR \-C <label>
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-krpz ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-.br
-.B zkt\-keyman
-.BR \-\-create= <label>
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-krpz ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-
-.B zkt\-keyman
-.BR \- { P | A | D | R } <keytag>
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-r ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-.br
-.B zkt\-keyman
-.BR \-\-published= <keytag>
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-r ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-.br
-.B zkt\-keyman
-.BR \-\-active= <keytag>
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-r ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-.br
-.B zkt\-keyman
-.BR \-\-depreciate= <keytag>
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-r ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-.br
-.B zkt\-keyman
-.BR \-\-rename= <keytag>
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-r ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-
-.B zkt\-keyman
-.BR \-\-destroy= <keytag>
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-r ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-
-.B zkt\-keyman
-.B \-9 | \-\-ksk-rollover
-.br
-.B zkt\-keyman
-.B \-1 | \-\-ksk-roll-phase1
-.I "do.ma.in."
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.br
-.B zkt\-keyman
-.B \-2 | \-\-ksk-roll-phase2
-.I "do.ma.in."
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.br
-.B zkt\-keyman
-.B \-3 | \-\-ksk-roll-phase3
-.I do.ma.in.
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.br
-.B zkt\-keyman
-.B \-0 | \-\-ksk-roll-stat
-.I do.ma.in.
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.br
-.ad
-
-.SH DESCRIPTION
-The
-.I zkt\-keyman
-command is a wrapper around
-.I dnssec-keygen(8)
-to assist in dnssec zone key management.
-.PP
-The command is useful in dns key management.
-It is suitable for modification of key status.
-
-.SH GENERAL OPTIONS
-.TP
-.BI \-V " view" ", \-\-view=" view
-Try to read the default configuration out of a file named
-.I dnssec-<view>.conf .
-Instead of specifying the \-V or --view option every time,
-it is also possible to create a hard or softlink to the
-executable file to give it an additional name like
-.I zkt\-keyman\-<view> .
-.TP
-.BI \-c " file" ", \-\-config=" file
-Read default values from the specified config file.
-Otherwise the default config file is read or build in defaults
-will be used.
-.TP
-.BI \-O " optstr" ", \-\-config-option=" optstr
-Set any config file option via the commandline.
-Several config file options could be specified at the argument string
-but have to be delimited by semicolon (or newline).
-.TP
-.BR \-d ", " \-\-directory
-Skip directory arguments.
-This will be useful in combination with wildcard arguments
-to prevent dnsssec-zkt to list all keys found in subdirectories.
-For example "zkt\-keyman -d *" will print out a list of all keys only found in
-the current directory.
-Maybe it is easier to use "zkt\-keyman ." instead (without -r set).
-The option works similar to the \-d option of
-.IR ls(1) .
-.TP
-.BR \-k ", " \-\-ksk
-Select key signing keys only (default depends on command mode).
-.TP
-.BR \-z ", " \-\-zsk
-Select zone signing keys only (default depends on command mode).
-.TP
-.BR \-r ", " \-\-recursive
-Recursive mode (default is off).
-.br
-Also settable in the dnssec.conf file (Parameter: Recursive).
-.TP
-.BR \-F ", " \-\-setlifetime
-Set the key lifetime of all the selected keys.
-Use option -k, -z, -l or the file and dir argument for key selection.
-.PP
-
-.SH COMMAND OPTIONS
-.TP
-.BR \-h ", " \-\-help
-Print out the online help.
-.TP
-.BI \-C " zone" ", \-\-create=" zone
-Create a new zone signing key for the given zone.
-Add option
-.B \-k
-to create a key signing key.
-The key algorithm and key length will be examined from built-in default values
-or from the parameter settings in the
-.I dnssec.conf
-file.
-.br
-The keyfile will be created in the current directory if
-the
-.B \-p
-option is specified.
-.TP
-.BI \-R " keyid" ", \-\-revoke=" keyid
-Revoke the key signing key with the given keyid.
-A revoked key has bit 8 in the flags field set (see RFC5011).
-The keyid is the numeric keytag with an optionally added zone name separated by a colon.
-.TP
-.BI \-\-rename=" keyid
-Rename the key files of the key with the given keyid
-(Look at key file names starting with an lower 'k').
-The keyid is the numeric keytag with an optionally added zone name separated by a colon.
-.TP
-.BI \-\-destroy= keyid
-Deletes the key with the given keyid.
-The keyid is the numeric keytag with an optionally added zone name separated by a colon.
-Beware that this deletes both private and public keyfiles, thus the key is
-unrecoverable lost.
-.TP
-.BI \-P|A|D " keyid," " \-\-published=" keyid, " \-\-active=" keyid, " \-\-depreciated=" keyid
-Change the status of the given dnssec key to
-published
-.RB ( \-P ),
-active
-.RB ( \-A )
-or depreciated
-.RB ( \-D ).
-The
-.I keyid
-is the numeric keytag with an optionally added zone name separated by a colon.
-Setting the status to "published" or "depreciate" will change the filename
-of the private key file to ".published" or ".depreciated" respectivly.
-This prevents the usage of the key as a signing key by the use of
-.IR dnssec-signzone(8) .
-The time of status change will be stored in the 'mtime' field of the corresponding
-".key" file.
-Key activation via option
-.B \-A
-will restore the original timestamp and file name (".private").
-.TP
-.BI \-\-ksk-roll-phase[123] " do.ma.in."
-Initiate a key signing key rollover of the specified domain.
-This feature is currently in experimental status and is mainly for the use
-in an hierachical environment.
-Use --ksk-rollover for a little more detailed description.
-
-
-.SH SAMPLE USAGE
-.TP
-.fam C
-.B "zkt-keyman \-C example.net \-k \-r ./zonedir
-.fam T
-Create a new key signing key for the zone "example.net".
-Store the key in the same directory below "zonedir" where the other
-"example.net" keys life.
-.TP
-.fam C
-.B "zkt-keyman \-D 123245 \-r .
-.fam T
-Depreciate the key with tag "12345" below the current directory,
-.TP
-.fam C
-.B "zkt-keyman --view intern \-C example.net
-.fam T
-Create a new zone key for the internal zone example.net.
-.TP
-.fam C
-.B "zkt-keyman-intern
-.fam T
-Same as above.
-The binary file
-.I zkt\-keyman
-has another link, named
-.I zkt-keyman-intern
-made, and
-.I zkt\-keyman
-examines argv[0] to find a view whose zones it proceeds to process.
-
-.SH ENVIRONMENT VARIABLES
-.TP
-ZKT_CONFFILE
-Specifies the name of the default global configuration files.
-
-.SH FILES
-.TP
-.I /var/named/dnssec.conf
-Built-in default global configuration file.
-The name of the default global config file is settable via
-the environment variable ZKT_CONFFILE.
-.TP
-.I /var/named/dnssec-<view>.conf
-View specific global configuration file.
-.TP
-.I ./dnssec.conf
-Local configuration file (only used in
-.B \-C
-mode).
-
-.SH BUGS
-
-.SH AUTHORS
-Holger Zuleger
-
-.SH COPYRIGHT
-Copyright (c) 2005 \- 2008 by Holger Zuleger.
-Licensed under the BSD Licences. There is NO warranty; not even for MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.
-.\"--------------------------------------------------
-.SH SEE ALSO
-dnssec-keygen(8), dnssec-signzone(8), rndc(8), named.conf(5), zkt-conf(8), zkt-ls(8), zkt-signer(8)
-.br
-RFC4641
-"DNSSEC Operational Practices" by Miek Gieben and Olaf Kolkman,
-.br
-DNSSEC HOWTO Tutorial by Olaf Kolkman, RIPE NCC
-.br
-(http://www.nlnetlabs.nl/dnssec_howto/)
diff --git a/contrib/zkt-1.1.3/man/zkt-keyman.8.html b/contrib/zkt-1.1.3/man/zkt-keyman.8.html
deleted file mode 100644
index fc93304f..00000000
--- a/contrib/zkt-1.1.3/man/zkt-keyman.8.html
+++ /dev/null
@@ -1,383 +0,0 @@
-<!-- Creator : groff version 1.20.1 -->
-<!-- CreationDate: Sat Aug 28 01:15:12 2010 -->
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta name="generator" content="groff -Thtml, see www.gnu.org">
-<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<meta name="Content-Style" content="text/css">
-<style type="text/css">
- p { margin-top: 0; margin-bottom: 0; vertical-align: top }
- pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
- table { margin-top: 0; margin-bottom: 0; vertical-align: top }
- h1 { text-align: center }
-</style>
-<title>zkt&minus;keyman</title>
-
-</head>
-<body>
-
-<h1 align="center">zkt&minus;keyman</h1>
-
-<a href="#NAME">NAME</a><br>
-<a href="#SYNOPSYS">SYNOPSYS</a><br>
-<a href="#DESCRIPTION">DESCRIPTION</a><br>
-<a href="#GENERAL OPTIONS">GENERAL OPTIONS</a><br>
-<a href="#COMMAND OPTIONS">COMMAND OPTIONS</a><br>
-<a href="#SAMPLE USAGE">SAMPLE USAGE</a><br>
-<a href="#ENVIRONMENT VARIABLES">ENVIRONMENT VARIABLES</a><br>
-<a href="#FILES">FILES</a><br>
-<a href="#BUGS">BUGS</a><br>
-<a href="#AUTHORS">AUTHORS</a><br>
-<a href="#COPYRIGHT">COPYRIGHT</a><br>
-<a href="#SEE ALSO">SEE ALSO</a><br>
-
-<hr>
-
-
-<h2>NAME
-<a name="NAME"></a>
-</h2>
-
-
-
-<p style="margin-left:11%; margin-top: 1em">zkt&minus;keyman
-&mdash; A DNSSEC key management tool</p>
-
-<h2>SYNOPSYS
-<a name="SYNOPSYS"></a>
-</h2>
-
-
-
-<p style="margin-left:11%; margin-top: 1em"><b>zkt&minus;keyman
-&minus;C</b>&lt;label&gt; [<b>&minus;V|--view</b>
-<i>view</i>] [<b>&minus;c</b> <i>file</i>]
-[<b>&minus;krpz</b>] [{<i>keyfile</i>|<i>dir</i>}
-<i>...</i>] <b><br>
-zkt&minus;keyman &minus;&minus;create=</b>&lt;label&gt;
-[<b>&minus;V|--view</b> <i>view</i>] [<b>&minus;c</b>
-<i>file</i>] [<b>&minus;krpz</b>]
-[{<i>keyfile</i>|<i>dir</i>} <i>...</i>]</p>
-
-
-<p style="margin-left:11%; margin-top: 1em"><b>zkt&minus;keyman
-&minus;</b>{<b>P</b>|<b>A</b>|<b>D</b>|<b>R</b>}<b>&lt;keytag&gt;</b>
-[<b>&minus;V|--view</b> <i>view</i>] [<b>&minus;c</b>
-<i>file</i>] [<b>&minus;r</b>] [{<i>keyfile</i>|<i>dir</i>}
-<i>...</i>] <b><br>
-zkt&minus;keyman &minus;&minus;published=</b>&lt;keytag&gt;
-[<b>&minus;V|--view</b> <i>view</i>] [<b>&minus;c</b>
-<i>file</i>] [<b>&minus;r</b>] [{<i>keyfile</i>|<i>dir</i>}
-<i>...</i>] <b><br>
-zkt&minus;keyman &minus;&minus;active=</b>&lt;keytag&gt;
-[<b>&minus;V|--view</b> <i>view</i>] [<b>&minus;c</b>
-<i>file</i>] [<b>&minus;r</b>] [{<i>keyfile</i>|<i>dir</i>}
-<i>...</i>] <b><br>
-zkt&minus;keyman &minus;&minus;depreciate=</b>&lt;keytag&gt;
-[<b>&minus;V|--view</b> <i>view</i>] [<b>&minus;c</b>
-<i>file</i>] [<b>&minus;r</b>] [{<i>keyfile</i>|<i>dir</i>}
-<i>...</i>] <b><br>
-zkt&minus;keyman &minus;&minus;rename=</b>&lt;keytag&gt;
-[<b>&minus;V|--view</b> <i>view</i>] [<b>&minus;c</b>
-<i>file</i>] [<b>&minus;r</b>] [{<i>keyfile</i>|<i>dir</i>}
-<i>...</i>]</p>
-
-
-<p style="margin-left:11%; margin-top: 1em"><b>zkt&minus;keyman
-&minus;&minus;destroy=</b>&lt;keytag&gt;
-[<b>&minus;V|--view</b> <i>view</i>] [<b>&minus;c</b>
-<i>file</i>] [<b>&minus;r</b>] [{<i>keyfile</i>|<i>dir</i>}
-<i>...</i>]</p>
-
-
-<p style="margin-left:11%; margin-top: 1em"><b>zkt&minus;keyman
-&minus;9 | &minus;&minus;ksk-rollover <br>
-zkt&minus;keyman &minus;1 |
-&minus;&minus;ksk-roll-phase1</b> <i>do.ma.in.</i>
-[<b>&minus;V|--view</b> <i>view</i>] [<b>&minus;c</b>
-<i>file</i>] <b><br>
-zkt&minus;keyman &minus;2 |
-&minus;&minus;ksk-roll-phase2</b> <i>do.ma.in.</i>
-[<b>&minus;V|--view</b> <i>view</i>] [<b>&minus;c</b>
-<i>file</i>] <b><br>
-zkt&minus;keyman &minus;3 |
-&minus;&minus;ksk-roll-phase3</b> <i>do.ma.in.</i>
-[<b>&minus;V|--view</b> <i>view</i>] [<b>&minus;c</b>
-<i>file</i>] <b><br>
-zkt&minus;keyman &minus;0 | &minus;&minus;ksk-roll-stat</b>
-<i>do.ma.in.</i> [<b>&minus;V|--view</b> <i>view</i>]
-[<b>&minus;c</b> <i>file</i>]</p>
-
-<h2>DESCRIPTION
-<a name="DESCRIPTION"></a>
-</h2>
-
-
-<p style="margin-left:11%; margin-top: 1em">The
-<i>zkt&minus;keyman</i> command is a wrapper around
-<i>dnssec-keygen(8)</i> to assist in dnssec zone key
-management.</p>
-
-<p style="margin-left:11%; margin-top: 1em">The command is
-useful in dns key management. It is suitable for
-modification of key status.</p>
-
-<h2>GENERAL OPTIONS
-<a name="GENERAL OPTIONS"></a>
-</h2>
-
-
-
-<p style="margin-left:11%; margin-top: 1em"><b>&minus;V</b>
-<i>view</i><b>, &minus;&minus;view=</b><i>view</i></p>
-
-<p style="margin-left:22%;">Try to read the default
-configuration out of a file named
-<i>dnssec-&lt;view&gt;.conf .</i> Instead of specifying the
-&minus;V or --view option every time, it is also possible to
-create a hard or softlink to the executable file to give it
-an additional name like
-<i>zkt&minus;keyman&minus;&lt;view&gt; .</i></p>
-
-<p style="margin-left:11%;"><b>&minus;c</b> <i>file</i><b>,
-&minus;&minus;config=</b><i>file</i></p>
-
-<p style="margin-left:22%;">Read default values from the
-specified config file. Otherwise the default config file is
-read or build in defaults will be used.</p>
-
-<p style="margin-left:11%;"><b>&minus;O</b>
-<i>optstr</i><b>,
-&minus;&minus;config-option=</b><i>optstr</i></p>
-
-<p style="margin-left:22%;">Set any config file option via
-the commandline. Several config file options could be
-specified at the argument string but have to be delimited by
-semicolon (or newline).</p>
-
-<p style="margin-left:11%;"><b>&minus;d</b>,
-<b>&minus;&minus;directory</b></p>
-
-<p style="margin-left:22%;">Skip directory arguments. This
-will be useful in combination with wildcard arguments to
-prevent dnsssec-zkt to list all keys found in
-subdirectories. For example &quot;zkt&minus;keyman -d
-*&quot; will print out a list of all keys only found in the
-current directory. Maybe it is easier to use
-&quot;zkt&minus;keyman .&quot; instead (without -r set). The
-option works similar to the &minus;d option of
-<i>ls(1)</i>.</p>
-
-<p style="margin-left:11%;"><b>&minus;k</b>,
-<b>&minus;&minus;ksk</b></p>
-
-<p style="margin-left:22%;">Select key signing keys only
-(default depends on command mode).</p>
-
-<p style="margin-left:11%;"><b>&minus;z</b>,
-<b>&minus;&minus;zsk</b></p>
-
-<p style="margin-left:22%;">Select zone signing keys only
-(default depends on command mode).</p>
-
-<p style="margin-left:11%;"><b>&minus;r</b>,
-<b>&minus;&minus;recursive</b></p>
-
-<p style="margin-left:22%;">Recursive mode (default is
-off). <br>
-Also settable in the dnssec.conf file (Parameter:
-Recursive).</p>
-
-<p style="margin-left:11%;"><b>&minus;F</b>,
-<b>&minus;&minus;setlifetime</b></p>
-
-<p style="margin-left:22%;">Set the key lifetime of all the
-selected keys. Use option -k, -z, -l or the file and dir
-argument for key selection.</p>
-
-<h2>COMMAND OPTIONS
-<a name="COMMAND OPTIONS"></a>
-</h2>
-
-
-
-<p style="margin-left:11%; margin-top: 1em"><b>&minus;h</b>,
-<b>&minus;&minus;help</b></p>
-
-<p style="margin-left:22%;">Print out the online help.</p>
-
-<p style="margin-left:11%;"><b>&minus;C</b> <i>zone</i><b>,
-&minus;&minus;create=</b><i>zone</i></p>
-
-<p style="margin-left:22%;">Create a new zone signing key
-for the given zone. Add option <b>&minus;k</b> to create a
-key signing key. The key algorithm and key length will be
-examined from built-in default values or from the parameter
-settings in the <i>dnssec.conf</i> file. <br>
-The keyfile will be created in the current directory if the
-<b>&minus;p</b> option is specified.</p>
-
-<p style="margin-left:11%;"><b>&minus;R</b>
-<i>keyid</i><b>, &minus;&minus;revoke=</b><i>keyid</i></p>
-
-<p style="margin-left:22%;">Revoke the key signing key with
-the given keyid. A revoked key has bit 8 in the flags field
-set (see RFC5011). The keyid is the numeric keytag with an
-optionally added zone name separated by a colon.</p>
-
-
-<p style="margin-left:11%;"><b>&minus;&minus;rename=&quot;</b><i>keyid</i></p>
-
-<p style="margin-left:22%;">Rename the key files of the key
-with the given keyid (Look at key file names starting with
-an lower &rsquo;k&rsquo;). The keyid is the numeric keytag
-with an optionally added zone name separated by a colon.</p>
-
-
-<p style="margin-left:11%;"><b>&minus;&minus;destroy=</b><i>keyid</i></p>
-
-<p style="margin-left:22%;">Deletes the key with the given
-keyid. The keyid is the numeric keytag with an optionally
-added zone name separated by a colon. Beware that this
-deletes both private and public keyfiles, thus the key is
-unrecoverable lost.</p>
-
-<p style="margin-left:11%;"><b>&minus;P|A|D</b>
-<i>keyid,</i> <b>&minus;&minus;published=</b><i>keyid,</i>
-<b>&minus;&minus;active=</b><i>keyid,</i>
-<b>&minus;&minus;depreciated=</b><i>keyid</i></p>
-
-<p style="margin-left:22%;">Change the status of the given
-dnssec key to published (<b>&minus;P</b>), active
-(<b>&minus;A</b>) or depreciated (<b>&minus;D</b>). The
-<i>keyid</i> is the numeric keytag with an optionally added
-zone name separated by a colon. Setting the status to
-&quot;published&quot; or &quot;depreciate&quot; will change
-the filename of the private key file to
-&quot;.published&quot; or &quot;.depreciated&quot;
-respectivly. This prevents the usage of the key as a signing
-key by the use of <i>dnssec-signzone(8)</i>. The time of
-status change will be stored in the &rsquo;mtime&rsquo;
-field of the corresponding &quot;.key&quot; file. Key
-activation via option <b>&minus;A</b> will restore the
-original timestamp and file name (&quot;.private&quot;).</p>
-
-
-<p style="margin-left:11%;"><b>&minus;&minus;ksk-roll-phase[123]</b>
-<i>do.ma.in.</i></p>
-
-<p style="margin-left:22%;">Initiate a key signing key
-rollover of the specified domain. This feature is currently
-in experimental status and is mainly for the use in an
-hierachical environment. Use --ksk-rollover for a little
-more detailed description.</p>
-
-<h2>SAMPLE USAGE
-<a name="SAMPLE USAGE"></a>
-</h2>
-
-
-<p style="margin-left:11%; margin-top: 1em"><b>zkt-keyman
-&minus;C example.net &minus;k &minus;r ./zonedir</b></p>
-
-<p style="margin-left:22%;">Create a new key signing key
-for the zone &quot;example.net&quot;. Store the key in the
-same directory below &quot;zonedir&quot; where the other
-&quot;example.net&quot; keys life.</p>
-
-<p style="margin-left:11%;"><b>zkt-keyman &minus;D 123245
-&minus;r .</b></p>
-
-<p style="margin-left:22%;">Depreciate the key with tag
-&quot;12345&quot; below the current directory,</p>
-
-<p style="margin-left:11%;"><b>zkt-keyman --view intern
-&minus;C example.net</b></p>
-
-<p style="margin-left:22%;">Create a new zone key for the
-internal zone example.net.</p>
-
-<p style="margin-left:11%;"><b>zkt-keyman-intern</b></p>
-
-<p style="margin-left:22%;">Same as above. The binary file
-<i>zkt&minus;keyman</i> has another link, named
-<i>zkt-keyman-intern</i> made, and <i>zkt&minus;keyman</i>
-examines argv[0] to find a view whose zones it proceeds to
-process.</p>
-
-<h2>ENVIRONMENT VARIABLES
-<a name="ENVIRONMENT VARIABLES"></a>
-</h2>
-
-
-
-<p style="margin-left:11%; margin-top: 1em">ZKT_CONFFILE</p>
-
-<p style="margin-left:22%;">Specifies the name of the
-default global configuration files.</p>
-
-<h2>FILES
-<a name="FILES"></a>
-</h2>
-
-
-
-<p style="margin-left:11%; margin-top: 1em"><i>/var/named/dnssec.conf</i></p>
-
-<p style="margin-left:22%;">Built-in default global
-configuration file. The name of the default global config
-file is settable via the environment variable
-ZKT_CONFFILE.</p>
-
-
-<p style="margin-left:11%;"><i>/var/named/dnssec-&lt;view&gt;.conf</i></p>
-
-<p style="margin-left:22%;">View specific global
-configuration file.</p>
-
-<p style="margin-left:11%;"><i>./dnssec.conf</i></p>
-
-<p style="margin-left:22%;">Local configuration file (only
-used in <b>&minus;C</b> mode).</p>
-
-<h2>BUGS
-<a name="BUGS"></a>
-</h2>
-
-
-<h2>AUTHORS
-<a name="AUTHORS"></a>
-</h2>
-
-
-<p style="margin-left:11%; margin-top: 1em">Holger
-Zuleger</p>
-
-<h2>COPYRIGHT
-<a name="COPYRIGHT"></a>
-</h2>
-
-
-<p style="margin-left:11%; margin-top: 1em">Copyright (c)
-2005 &minus; 2008 by Holger Zuleger. Licensed under the BSD
-Licences. There is NO warranty; not even for MERCHANTABILITY
-or FITNESS FOR A PARTICULAR PURPOSE.</p>
-
-<h2>SEE ALSO
-<a name="SEE ALSO"></a>
-</h2>
-
-
-
-<p style="margin-left:11%; margin-top: 1em">dnssec-keygen(8),
-dnssec-signzone(8), rndc(8), named.conf(5), zkt-conf(8),
-zkt-ls(8), zkt-signer(8) <br>
-RFC4641 &quot;DNSSEC Operational Practices&quot; by Miek
-Gieben and Olaf Kolkman, <br>
-DNSSEC HOWTO Tutorial by Olaf Kolkman, RIPE NCC <br>
- (http://www.nlnetlabs.nl/dnssec_howto/)</p>
-<hr>
-</body>
-</html>
diff --git a/contrib/zkt-1.1.3/man/zkt-keyman.8.pdf b/contrib/zkt-1.1.3/man/zkt-keyman.8.pdf
deleted file mode 100644
index 487803c3..00000000
--- a/contrib/zkt-1.1.3/man/zkt-keyman.8.pdf
+++ /dev/null
Binary files differ
diff --git a/contrib/zkt-1.1.3/man/zkt-ls.8 b/contrib/zkt-1.1.3/man/zkt-ls.8
deleted file mode 100644
index 8ee00b12..00000000
--- a/contrib/zkt-1.1.3/man/zkt-ls.8
+++ /dev/null
@@ -1,292 +0,0 @@
-.TH zkt-ls 8 "February 25, 2010" "ZKT 1.0" ""
-\" turn off hyphenation
-.\" if n .nh
-.nh
-.SH NAME
-zkt\-ls \(em list dnskeys
-
-.SH SYNOPSYS
-.na
-.B zkt\-ls
-.B \-H
-
-.B zkt\-ls
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-l
-.IR "list" ]
-.RB [ \-adefhkLprtz ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-
-.B zkt\-ls
-.B \-T
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-l
-.IR "list" ]
-.RB [ \-dhrz ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-.br
-.B zkt\-ls
-.B \-\-list-trustedkeys
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-l
-.IR "list" ]
-.RB [ \-dhrz ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-
-.B zkt\-ls
-.B \-M
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-l
-.IR "list" ]
-.RB [ \-dhrz ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-.br
-.B zkt\-ls
-.B \-\-list-managedkeys
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-l
-.IR "list" ]
-.RB [ \-dhrz ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-
-.B zkt\-ls
-.B \-K
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-l
-.IR "list" ]
-.RB [ \-dhkrz ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-.br
-.B zkt\-ls
-.B \-\-list-dnskeys
-.RB [ \-V|--view
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-l
-.IR "list" ]
-.RB [ \-dhkrz ]
-.RI [{ keyfile | dir }
-.RI "" ... ]
-
-.SH DESCRIPTION
-The
-.I zkt-ls
-command list all dnssec zone keys found in the given or predefined
-default directory.
-It is also possible to specify keyfiles (K*.key) as arguments.
-With option
-.B \-r
-subdirectories will be searched recursively and all dnssec keys found
-are listed, sorted by domain name, key type and generation time.
-In that mode the use of option
-.B \-p
-may be helpful to find the location of the keyfile in the directory tree.
-.PP
-Other forms of the command, print out keys in a format suitable for
-a trusted- or managed-key section
-.RB ( \-T or \-M )
-or as a DNSKEY
-.RB ( \-K )
-resource record.
-
-.SH GENERAL OPTIONS
-.TP
-.BI \-V " view" ", \-\-view=" view
-Try to read the default configuration out of a file named
-.I dnssec-<view>.conf .
-Instead of specifying the \-V or --view option every time,
-it is also possible to create a hard or softlink to the
-executable file to give it an additional name like
-.I zkt-ls-<view> .
-.TP
-.BI \-c " file" ", \-\-config=" file
-Read default values from the specified config file.
-Otherwise the default config file is read or build in defaults
-will be used.
-.TP
-.BI \-O " optstr" ", \-\-config-option=" optstr
-Set any config file option via the commandline.
-Several config file options could be specified at the argument string
-but have to be delimited by semicolon (or newline).
-.TP
-.BI \-l " list" ", \-\-label=" list
-Print out information solely about domains given in the comma or space separated
-list.
-Take care of, that every domain name has a trailing dot.
-.TP
-.BR \-d ", " \-\-directory
-Skip directory arguments.
-This will be useful in combination with wildcard arguments
-to prevent dnsssec-zkt to list all keys found in subdirectories.
-For example "zkt-ls -d *" will print out a list of all keys only found in
-the current directory.
-Maybe it is easier to use "zkt-ls ." instead (without -r set).
-The option works similar to the \-d option of
-.IR ls(1) .
-.TP
-.BR \-L ", " \-\-left-justify
-Print out the domain name left justified.
-.TP
-.BR \-k ", " \-\-ksk
-Select and print key signing keys only (default depends on command mode).
-.TP
-.BR \-z ", " \-\-zsk
-Select and print zone signing keys only (default depends on command mode).
-.TP
-.BR \-r ", " \-\-recursive
-Recursive mode (default is off).
-.br
-Also settable in the dnssec.conf file (Parameter: Recursive).
-.TP
-.BR \-p ", " \-\-path
-Print pathname in listing mode.
-In -C mode, don't create the new key in the same directory as (already existing)
-keys with the same label.
-.TP
-.BR \-a ", " \-\-age
-Print age of key in weeks, days, hours, minutes and seconds (default is off).
-.br
-Also settable in the dnssec.conf file (Parameter: PrintAge).
-.TP
-.BR \-f ", " \-\-lifetime
-Print the key lifetime.
-.TP
-.BR \-e ", " \-\-exptime
-Print the key expiration time.
-.TP
-.BR \-t ", " \-\-time
-Print the key generation time (default is on).
-.br
-Also settable in the dnssec.conf file (Parameter: PrintTime).
-.TP
-.B \-h
-No header or trusted-key resp. managed-key section header and trailer in \-T or \-M mode.
-
-.SH COMMAND OPTIONS
-.TP
-.BR \-H ", " \-\-help
-Print out the online help.
-.TP
-.BR \-T ", " \-\-list-trustedkeys
-List all key signing keys as a
-.I named.conf
-trusted-key section.
-Use
-.B \-h
-to supress the section header/trailer.
-.TP
-.BR \-K ", " \-\-list-dnskeys
-List the public part of all the keys in DNSKEY resource record format.
-Use
-.B \-h
-to suppress comment lines.
-
-.SH SAMPLE USAGE
-.TP
-.fam C
-.B "zkt\-ls \-r .
-.fam T
-Print out a list of all zone keys found below the current directory.
-.TP
-.fam C
-.B "zkt\-ls \-Z \-c """"
-.fam T
-Print out the compiled in default parameters.
-.TP
-.fam C
-.B "zkt\-ls \-T ./zonedir/example.net
-.fam T
-Print out a trusted-key section containing the key signing keys of "example.net".
-.TP
-.fam C
-.B "zkt\-ls --view intern
-.fam T
-Print out a list of all zone keys found below the directory where all
-the zones of view intern live.
-There should be a seperate dnssec config file
-.I dnssec-intern.conf
-with a directory option to take affect of this.
-.TP
-.fam C
-.B "zkt\-ls\-intern
-.fam T
-Same as above.
-The binary file
-.I zkt\-ls
-has another link, named
-.I zkt\-ls\-intern
-made, and
-.I zkt\-ls
-examines argv[0] to find a view whose zones it proceeds to process.
-
-.SH ENVIRONMENT VARIABLES
-.TP
-ZKT_CONFFILE
-Specifies the name of the default global configuration files.
-
-.SH FILES
-.TP
-.I /var/named/dnssec.conf
-Built-in default global configuration file.
-The name of the default global config file is settable via
-the environment variable ZKT_CONFFILE.
-.TP
-.I /var/named/dnssec-<view>.conf
-View specific global configuration file.
-.TP
-.I ./dnssec.conf
-Local configuration file (only used in
-.B \-C
-mode).
-
-.SH BUGS
-.PP
-Some of the general options will not be meaningful in all of the command modes.
-.br
-The option
-.B \-l
-and the ksk rollover options
-insist on domain names ending with a dot.
-
-.SH AUTHORS
-Holger Zuleger
-
-.SH COPYRIGHT
-Copyright (c) 2005 \- 2010 by Holger Zuleger.
-Licensed under the BSD Licences. There is NO warranty; not even for MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.
-.\"--------------------------------------------------
-.SH SEE ALSO
-dnssec-keygen(8), dnssec-signzone(8), rndc(8), named.conf(5), zkt-conf(8), zkt-keyman(8), zkt-signer(8)
-.br
-RFC4641
-"DNSSEC Operational Practices" by Miek Gieben and Olaf Kolkman,
-.br
-DNSSEC HOWTO Tutorial by Olaf Kolkman, RIPE NCC
-.br
-(http://www.nlnetlabs.nl/dnssec_howto/)
diff --git a/contrib/zkt-1.1.3/man/zkt-ls.8.html b/contrib/zkt-1.1.3/man/zkt-ls.8.html
deleted file mode 100644
index e8278399..00000000
--- a/contrib/zkt-1.1.3/man/zkt-ls.8.html
+++ /dev/null
@@ -1,395 +0,0 @@
-<!-- Creator : groff version 1.20.1 -->
-<!-- CreationDate: Tue Aug 3 17:20:51 2010 -->
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta name="generator" content="groff -Thtml, see www.gnu.org">
-<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<meta name="Content-Style" content="text/css">
-<style type="text/css">
- p { margin-top: 0; margin-bottom: 0; vertical-align: top }
- pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
- table { margin-top: 0; margin-bottom: 0; vertical-align: top }
- h1 { text-align: center }
-</style>
-<title>zkt-ls</title>
-
-</head>
-<body>
-
-<h1 align="center">zkt-ls</h1>
-
-<a href="#NAME">NAME</a><br>
-<a href="#SYNOPSYS">SYNOPSYS</a><br>
-<a href="#DESCRIPTION">DESCRIPTION</a><br>
-<a href="#GENERAL OPTIONS">GENERAL OPTIONS</a><br>
-<a href="#COMMAND OPTIONS">COMMAND OPTIONS</a><br>
-<a href="#SAMPLE USAGE">SAMPLE USAGE</a><br>
-<a href="#ENVIRONMENT VARIABLES">ENVIRONMENT VARIABLES</a><br>
-<a href="#FILES">FILES</a><br>
-<a href="#BUGS">BUGS</a><br>
-<a href="#AUTHORS">AUTHORS</a><br>
-<a href="#COPYRIGHT">COPYRIGHT</a><br>
-<a href="#SEE ALSO">SEE ALSO</a><br>
-
-<hr>
-
-
-<h2>NAME
-<a name="NAME"></a>
-</h2>
-
-
-<p style="margin-left:11%; margin-top: 1em">zkt&minus;ls
-&mdash; list dnskeys</p>
-
-<h2>SYNOPSYS
-<a name="SYNOPSYS"></a>
-</h2>
-
-
-
-<p style="margin-left:11%; margin-top: 1em"><b>zkt&minus;ls
-&minus;H</b></p>
-
-
-<p style="margin-left:11%; margin-top: 1em"><b>zkt&minus;ls</b>
-[<b>&minus;V|--view</b> <i>view</i>] [<b>&minus;c</b>
-<i>file</i>] [<b>&minus;l</b> <i>list</i>]
-[<b>&minus;adefhkLprtz</b>] [{<i>keyfile</i>|<i>dir</i>}
-<i>...</i>]</p>
-
-
-<p style="margin-left:11%; margin-top: 1em"><b>zkt&minus;ls
-&minus;T</b> [<b>&minus;V|--view</b> <i>view</i>]
-[<b>&minus;c</b> <i>file</i>] [<b>&minus;l</b> <i>list</i>]
-[<b>&minus;dhrz</b>] [{<i>keyfile</i>|<i>dir</i>}
-<i>...</i>] <b><br>
-zkt&minus;ls &minus;&minus;list-trustedkeys</b>
-[<b>&minus;V|--view</b> <i>view</i>] [<b>&minus;c</b>
-<i>file</i>] [<b>&minus;l</b> <i>list</i>]
-[<b>&minus;dhrz</b>] [{<i>keyfile</i>|<i>dir</i>}
-<i>...</i>]</p>
-
-
-<p style="margin-left:11%; margin-top: 1em"><b>zkt&minus;ls
-&minus;M</b> [<b>&minus;V|--view</b> <i>view</i>]
-[<b>&minus;c</b> <i>file</i>] [<b>&minus;l</b> <i>list</i>]
-[<b>&minus;dhrz</b>] [{<i>keyfile</i>|<i>dir</i>}
-<i>...</i>] <b><br>
-zkt&minus;ls &minus;&minus;list-managedkeys</b>
-[<b>&minus;V|--view</b> <i>view</i>] [<b>&minus;c</b>
-<i>file</i>] [<b>&minus;l</b> <i>list</i>]
-[<b>&minus;dhrz</b>] [{<i>keyfile</i>|<i>dir</i>}
-<i>...</i>]</p>
-
-
-<p style="margin-left:11%; margin-top: 1em"><b>zkt&minus;ls
-&minus;K</b> [<b>&minus;V|--view</b> <i>view</i>]
-[<b>&minus;c</b> <i>file</i>] [<b>&minus;l</b> <i>list</i>]
-[<b>&minus;dhkrz</b>] [{<i>keyfile</i>|<i>dir</i>}
-<i>...</i>] <b><br>
-zkt&minus;ls &minus;&minus;list-dnskeys</b>
-[<b>&minus;V|--view</b> <i>view</i>] [<b>&minus;c</b>
-<i>file</i>] [<b>&minus;l</b> <i>list</i>]
-[<b>&minus;dhkrz</b>] [{<i>keyfile</i>|<i>dir</i>}
-<i>...</i>]</p>
-
-<h2>DESCRIPTION
-<a name="DESCRIPTION"></a>
-</h2>
-
-
-<p style="margin-left:11%; margin-top: 1em">The
-<i>zkt-ls</i> command list all dnssec zone keys found in the
-given or predefined default directory. It is also possible
-to specify keyfiles (K*.key) as arguments. With option
-<b>&minus;r</b> subdirectories will be searched recursively
-and all dnssec keys found are listed, sorted by domain name,
-key type and generation time. In that mode the use of option
-<b>&minus;p</b> may be helpful to find the location of the
-keyfile in the directory tree.</p>
-
-<p style="margin-left:11%; margin-top: 1em">Other forms of
-the command, print out keys in a format suitable for a
-trusted- or managed-key section
-(<b>&minus;T</b>or<b>&minus;M</b>) or as a DNSKEY
-(<b>&minus;K</b>) resource record.</p>
-
-<h2>GENERAL OPTIONS
-<a name="GENERAL OPTIONS"></a>
-</h2>
-
-
-
-<p style="margin-left:11%; margin-top: 1em"><b>&minus;V</b>
-<i>view</i><b>, &minus;&minus;view=</b><i>view</i></p>
-
-<p style="margin-left:22%;">Try to read the default
-configuration out of a file named
-<i>dnssec-&lt;view&gt;.conf .</i> Instead of specifying the
-&minus;V or --view option every time, it is also possible to
-create a hard or softlink to the executable file to give it
-an additional name like <i>zkt-ls-&lt;view&gt; .</i></p>
-
-<p style="margin-left:11%;"><b>&minus;c</b> <i>file</i><b>,
-&minus;&minus;config=</b><i>file</i></p>
-
-<p style="margin-left:22%;">Read default values from the
-specified config file. Otherwise the default config file is
-read or build in defaults will be used.</p>
-
-<p style="margin-left:11%;"><b>&minus;O</b>
-<i>optstr</i><b>,
-&minus;&minus;config-option=</b><i>optstr</i></p>
-
-<p style="margin-left:22%;">Set any config file option via
-the commandline. Several config file options could be
-specified at the argument string but have to be delimited by
-semicolon (or newline).</p>
-
-<p style="margin-left:11%;"><b>&minus;l</b> <i>list</i><b>,
-&minus;&minus;label=</b><i>list</i></p>
-
-<p style="margin-left:22%;">Print out information solely
-about domains given in the comma or space separated list.
-Take care of, that every domain name has a trailing dot.</p>
-
-<p style="margin-left:11%;"><b>&minus;d</b>,
-<b>&minus;&minus;directory</b></p>
-
-<p style="margin-left:22%;">Skip directory arguments. This
-will be useful in combination with wildcard arguments to
-prevent dnsssec-zkt to list all keys found in
-subdirectories. For example &quot;zkt-ls -d *&quot; will
-print out a list of all keys only found in the current
-directory. Maybe it is easier to use &quot;zkt-ls .&quot;
-instead (without -r set). The option works similar to the
-&minus;d option of <i>ls(1)</i>.</p>
-
-<p style="margin-left:11%;"><b>&minus;L</b>,
-<b>&minus;&minus;left-justify</b></p>
-
-<p style="margin-left:22%;">Print out the domain name left
-justified.</p>
-
-<p style="margin-left:11%;"><b>&minus;k</b>,
-<b>&minus;&minus;ksk</b></p>
-
-<p style="margin-left:22%;">Select and print key signing
-keys only (default depends on command mode).</p>
-
-<p style="margin-left:11%;"><b>&minus;z</b>,
-<b>&minus;&minus;zsk</b></p>
-
-<p style="margin-left:22%;">Select and print zone signing
-keys only (default depends on command mode).</p>
-
-<p style="margin-left:11%;"><b>&minus;r</b>,
-<b>&minus;&minus;recursive</b></p>
-
-<p style="margin-left:22%;">Recursive mode (default is
-off). <br>
-Also settable in the dnssec.conf file (Parameter:
-Recursive).</p>
-
-<p style="margin-left:11%;"><b>&minus;p</b>,
-<b>&minus;&minus;path</b></p>
-
-<p style="margin-left:22%;">Print pathname in listing mode.
-In -C mode, don&rsquo;t create the new key in the same
-directory as (already existing) keys with the same
-label.</p>
-
-<p style="margin-left:11%;"><b>&minus;a</b>,
-<b>&minus;&minus;age</b></p>
-
-<p style="margin-left:22%;">Print age of key in weeks,
-days, hours, minutes and seconds (default is off). <br>
-Also settable in the dnssec.conf file (Parameter:
-PrintAge).</p>
-
-<p style="margin-left:11%;"><b>&minus;f</b>,
-<b>&minus;&minus;lifetime</b></p>
-
-<p style="margin-left:22%;">Print the key lifetime.</p>
-
-<p style="margin-left:11%;"><b>&minus;e</b>,
-<b>&minus;&minus;exptime</b></p>
-
-<p style="margin-left:22%;">Print the key expiration
-time.</p>
-
-<p style="margin-left:11%;"><b>&minus;t</b>,
-<b>&minus;&minus;time</b></p>
-
-<p style="margin-left:22%;">Print the key generation time
-(default is on). <br>
-Also settable in the dnssec.conf file (Parameter:
-PrintTime).</p>
-
-<table width="100%" border="0" rules="none" frame="void"
- cellspacing="0" cellpadding="0">
-<tr valign="top" align="left">
-<td width="11%"></td>
-<td width="3%">
-
-
-<p><b>&minus;h</b></p></td>
-<td width="8%"></td>
-<td width="78%">
-
-
-<p>No header or trusted-key resp. managed-key section
-header and trailer in &minus;T or &minus;M mode.</p></td></tr>
-</table>
-
-<h2>COMMAND OPTIONS
-<a name="COMMAND OPTIONS"></a>
-</h2>
-
-
-
-<p style="margin-left:11%; margin-top: 1em"><b>&minus;H</b>,
-<b>&minus;&minus;help</b></p>
-
-<p style="margin-left:22%;">Print out the online help.</p>
-
-<p style="margin-left:11%;"><b>&minus;T</b>,
-<b>&minus;&minus;list-trustedkeys</b></p>
-
-<p style="margin-left:22%;">List all key signing keys as a
-<i>named.conf</i> trusted-key section. Use <b>&minus;h</b>
-to supress the section header/trailer.</p>
-
-<p style="margin-left:11%;"><b>&minus;K</b>,
-<b>&minus;&minus;list-dnskeys</b></p>
-
-<p style="margin-left:22%;">List the public part of all the
-keys in DNSKEY resource record format. Use <b>&minus;h</b>
-to suppress comment lines.</p>
-
-<h2>SAMPLE USAGE
-<a name="SAMPLE USAGE"></a>
-</h2>
-
-
-
-<p style="margin-left:11%; margin-top: 1em"><b>zkt&minus;ls
-&minus;r .</b></p>
-
-<p style="margin-left:22%;">Print out a list of all zone
-keys found below the current directory.</p>
-
-<p style="margin-left:11%;"><b>zkt&minus;ls &minus;Z
-&minus;c &quot;&quot;</b></p>
-
-<p style="margin-left:22%;">Print out the compiled in
-default parameters.</p>
-
-<p style="margin-left:11%;"><b>zkt&minus;ls &minus;T
-./zonedir/example.net</b></p>
-
-<p style="margin-left:22%;">Print out a trusted-key section
-containing the key signing keys of
-&quot;example.net&quot;.</p>
-
-<p style="margin-left:11%;"><b>zkt&minus;ls --view
-intern</b></p>
-
-<p style="margin-left:22%;">Print out a list of all zone
-keys found below the directory where all the zones of view
-intern live. There should be a seperate dnssec config file
-<i>dnssec-intern.conf</i> with a directory option to take
-affect of this.</p>
-
-
-<p style="margin-left:11%;"><b>zkt&minus;ls&minus;intern</b></p>
-
-<p style="margin-left:22%;">Same as above. The binary file
-<i>zkt&minus;ls</i> has another link, named
-<i>zkt&minus;ls&minus;intern</i> made, and
-<i>zkt&minus;ls</i> examines argv[0] to find a view whose
-zones it proceeds to process.</p>
-
-<h2>ENVIRONMENT VARIABLES
-<a name="ENVIRONMENT VARIABLES"></a>
-</h2>
-
-
-
-<p style="margin-left:11%; margin-top: 1em">ZKT_CONFFILE</p>
-
-<p style="margin-left:22%;">Specifies the name of the
-default global configuration files.</p>
-
-<h2>FILES
-<a name="FILES"></a>
-</h2>
-
-
-
-<p style="margin-left:11%; margin-top: 1em"><i>/var/named/dnssec.conf</i></p>
-
-<p style="margin-left:22%;">Built-in default global
-configuration file. The name of the default global config
-file is settable via the environment variable
-ZKT_CONFFILE.</p>
-
-
-<p style="margin-left:11%;"><i>/var/named/dnssec-&lt;view&gt;.conf</i></p>
-
-<p style="margin-left:22%;">View specific global
-configuration file.</p>
-
-<p style="margin-left:11%;"><i>./dnssec.conf</i></p>
-
-<p style="margin-left:22%;">Local configuration file (only
-used in <b>&minus;C</b> mode).</p>
-
-<h2>BUGS
-<a name="BUGS"></a>
-</h2>
-
-
-<p style="margin-left:11%; margin-top: 1em">Some of the
-general options will not be meaningful in all of the command
-modes. <br>
-The option <b>&minus;l</b> and the ksk rollover options
-insist on domain names ending with a dot.</p>
-
-<h2>AUTHORS
-<a name="AUTHORS"></a>
-</h2>
-
-
-<p style="margin-left:11%; margin-top: 1em">Holger
-Zuleger</p>
-
-<h2>COPYRIGHT
-<a name="COPYRIGHT"></a>
-</h2>
-
-
-<p style="margin-left:11%; margin-top: 1em">Copyright (c)
-2005 &minus; 2010 by Holger Zuleger. Licensed under the BSD
-Licences. There is NO warranty; not even for MERCHANTABILITY
-or FITNESS FOR A PARTICULAR PURPOSE.</p>
-
-<h2>SEE ALSO
-<a name="SEE ALSO"></a>
-</h2>
-
-
-
-<p style="margin-left:11%; margin-top: 1em">dnssec-keygen(8),
-dnssec-signzone(8), rndc(8), named.conf(5), zkt-conf(8),
-zkt-keyman(8), zkt-signer(8) <br>
-RFC4641 &quot;DNSSEC Operational Practices&quot; by Miek
-Gieben and Olaf Kolkman, <br>
-DNSSEC HOWTO Tutorial by Olaf Kolkman, RIPE NCC <br>
- (http://www.nlnetlabs.nl/dnssec_howto/)</p>
-<hr>
-</body>
-</html>
diff --git a/contrib/zkt-1.1.3/man/zkt-ls.8.pdf b/contrib/zkt-1.1.3/man/zkt-ls.8.pdf
deleted file mode 100644
index ad2a6e90..00000000
--- a/contrib/zkt-1.1.3/man/zkt-ls.8.pdf
+++ /dev/null
Binary files differ
diff --git a/contrib/zkt-1.1.3/man/zkt-signer.8 b/contrib/zkt-1.1.3/man/zkt-signer.8
deleted file mode 100644
index d182c2b5..00000000
--- a/contrib/zkt-1.1.3/man/zkt-signer.8
+++ /dev/null
@@ -1,466 +0,0 @@
-.TH zkt-signer 8 "Nov 27, 2010" "ZKT 1.1" ""
-\" turn off hyphenation
-.\" if n .nh
-.nh
-.SH NAME
-zkt-signer \(em Secure DNS zone signing tool
-
-.SH SYNOPSYS
-.na
-.B zkt-signer
-.RB [ \-L
-.IR "file" ]
-.RB [ \-V
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-O
-.IR "optstr" ]
-.RB [ \-fhnr ]
-.RB [ \-v
-.RB [ \-v ]]
-.B \-N
-.I "named.conf"
-.RI [ zone
-.RI "" ... ]
-.br
-.B zkt-signer
-.RB [ \-L
-.IR "file" ]
-.RB [ \-V
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-O
-.IR "optstr" ]
-.RB [ \-fhnr ]
-.RB [ \-v
-.RB [ \-v ]]
-.RB [ \-D
-.IR "directory" ]
-.RI [ zone
-.RI "" ... ]
-.br
-.B zkt-signer
-.RB [ \-L
-.IR "file" ]
-.RB [ \-V
-.IR "view" ]
-.RB [ \-c
-.IR "file" ]
-.RB [ \-O
-.IR "optstr" ]
-.RB [ \-fhnr ]
-.RB [ \-v
-.RB [ \-v ]]
-.B \-o
-.IR "origin"
-.RI [ zonefile ]
-
-.SH DESCRIPTION
-The
-.I zkt-signer
-command is a wrapper around
-.I dnssec-signzone(8)
-and
-.I dnssec-keygen(8)
-to sign a zone and manage the necessary zone keys.
-It is able to increment the serial number before signing the zone
-and can trigger
-.I named(8)
-to reload the signed zone file.
-The command controls several secure zones and, if started in regular
-intervals via
-.IR cron(8) ,
-can do all that stuff automatically.
-.PP
-In the most useful usage scenario the command will be called with option
-.B \-N
-to read the secure zones out of the given
-.I named.conf
-file.
-If you have a configuration file with views, you have to use option
--V viewname or --view viewname to specify the name of the view.
-Alternately you could link the executable file to a second name like
-.I zkt-signer-viewname
-and use that command to specify the name of the view.
-.br
-All master zone statements will be scanned for filenames
-ending with ".signed".
-These zones will be checked if the necessary zone- and key signing keys
-are existent and fresh enough to be used in the signing process.
-If one or more out-dated keys are found, new keying material will be generated via
-the
-.I dnssec-keygen(8)
-command and the old keys will be marked as depreciated.
-So the command do anything needed for a zone key rollover as defined by [2].
-.PP
-If the resigning interval is reached or any new key must be announced,
-the serial number of the zone will be incremented and the
-.I dnssec-signzone(8)
-command will be evoked to sign the zone.
-After that, if the option
-.B \-r
-is given, the
-.I rndc(8)
-command will be called to reload the zone on the
-nameserver.
-.PP
-In the second form of the command it is possible to specify a directory
-tree with the option
-.B \-D
-.IR dir .
-Every secure zone found in a subdirectory below
-.I dir
-will be signed.
-However, it is also possible to reduce the signing to those
-zones given as arguments.
-.br
-If
-.B \-D
-is ommitted (and neither
-.B \-N
-nor
-.BI \-o origin
-is specified) the default directory specified in the
-.I dnssec.conf
-file by the parameter
-.I zonedir
-will be used as top level directory.
-.ig
-In directory mode the pre-requisite is, that the directory name is
-exactly (including the trailing dot) the same as the zone name.
-..
-
-.SH OPTIONS
-.TP
-.BI \-L " file|dir" ", \-\-logfile=" file|dir
-Specify the name of a log file or a directory where
-logfiles are created with a name like
-.fam C
-.\"# define LOG_FNAMETMPL "/zkt-%04d-%02d-%02dT%02d%02d%02dZ.log"
-.RI zkt- YYYY-MM-DD T hhmmss Z.log .
-.fam T
-.\" \&.
-If the argument is not an absolute path name and a zone directory
-is specified in the config file, this will be prepended to the given name.
-This option is also settable in the dnssec.conf file via the parameter
-.BI LogFile .
-.br
-The default is no file logging, but error logging to syslog with facility
-.BI USER
-at level
-.BI ERROR
-is enabled by default.
-These parameters are settable via the config file parameter
-.BI "SyslogFacility" ,
-.BI "SyslogLevel" ,
-.BI "LogFile"
-and
-.BI "Loglevel" .
-.br
-The additional parameter
-.BI VerboseLog
-specifies the verbosity (0|1|2) of messages that will be logged
-with level
-.BI DEBUG
-to file and syslog.
-
-.TP
-.BI \-V " view" ", \-\-view=" view
-Try to read the default configuration out of a file named
-.I dnssec-<view>.conf .
-Instead of specifying the \-V or --view option every time,
-it is also possible to create a hard- or softlink to the
-executable file with an additional name like
-.I zkt-signer-<view> .
-.TP
-.BI \-c " file" ", \-\-config=" file
-Read configuration values out of the specified file.
-Otherwise the default config file is read or build-in defaults
-will be used.
-.TP
-.BI \-O " optstr" ", \-\-config-option=" optstr
-Set any config file option via the commandline.
-Several config file options can be specified via the argument string
-but have to be delimited by semicolon (or newline).
-.TP
-.BR \-f ", " \-\-force
-Force a resigning of the zone, regardless if the resigning interval
-is reached or new keys must be announced.
-.TP
-.BR \-n ", " \-\-noexec
-Don't execute the
-.I dnssec-signzone(8)
-command.
-Currently this option is of very limited usage.
-.TP
-.BR \-r ", " \-\-reload
-Reload the zone via
-.I rndc(8)
-after successful signing.
-In a production environment it is recommended to use this option
-to be sure that a freshly signed zone will be immediately propagated.
-However, that's only feasable if named runs on the signing
-machine, which is not recommended.
-.ig
-Otherwise the signed zonefile must be copied to the production
-server before reloading the zone.
-If this is the case, the parameter
-.I propagation
-in the
-.I dnssec.conf
-file must be set to a reasonable value.
-..
-.TP
-.BR \-v ", " \-\-verbose
-Verbose mode (recommended).
-A second
-.B \-v
-will be a little more verbose.
-.TP
-.BR \-h ", " \-\-help
-Print out the online help.
-
-.SH SAMPLE USAGE
-.TP
-.fam C
-.B "zkt-signer \-N /var/named/named.conf \-r \-v \-v
-.fam T
-Sign all secure zones found in the named.conf file and, if necessary,
-trigger a reload of the zone.
-Print some explanatory remarks on stdout.
-.TP
-.fam C
-.B "zkt-signer \-D zonedir/example.net. \-f \-v \-v
-.fam T
-Force the signing of the zone found in the directory
-.I zonedir/example.net .
-Do not reload the zone.
-.TP
-.fam C
-.B "zkt-signer \-D zonedir \-f \-v \-v example.net.
-.fam T
-Same as above.
-.TP
-.fam C
-.B "zkt-signer \-f \-v \-v example.net.
-.fam T
-Same as above if the
-.I dnssec.conf
-file contains the path of the parent directory of the
-.I example.net
-zone.
-.TP
-.fam C
-.B "zkt-signer \-f \-v \-v \-o example.net. zone.db
-.fam T
-Same as above if we are in the directory containing the
-.I example.net
-files.
-.TP
-.fam C
-.B "zkt-signer \-\-config-option='ResignInterval 1d; Sigvalidity 28h; \e
-.B ZSKlifetime 2d;' \-v \-v \-o example.net. zone.db
-.fam T
-.br
-Sign the example.net zone but override some config file values with parameters
-given on the commandline.
-
-.SH Zone setup and initial preparation
-.TP
-Create a separate directory for every secure zone.
-.br
-This is useful because there are many additional files needed to
-secure a zone.
-Besides the zone file
-.RI ( zone.db ),
-there is a signed zone file
-.RI ( zone.db.signed),
-a minimum of four files containing the key material,
-a file called
-.I dnskey.db
-with the current used keys,
-and the
-.I dsset-
-and
-.IR keyset- files
-created by the
-.I dnssec-signzone(8)
-command.
-So in summary there is a minimum of nine files used per secure zone.
-For every additional key there are two extra files and
-every delegated subzone creates also two or three files.
-.TP
-Name the directory just like the zone.
-.br
-That's only needed if you want to use the zkt-signer command in
-directory mode
-.RB ( \-D ).
-Then the name of the zone will be parsed out of the directory name.
-.TP
-Change the name of the zone file to \fIzone.db\fP
-Otherwise you have to set the name via the
-.I dnssec.conf
-parameter
-.IR zonefile ,
-or you have to use the option
-.B \-o
-to name the zone and specify the zone file as argument.
-.TP
-Add the name of the signed zonefile to the \fInamed.conf\fP file
-The filename is the name of the zone file with the
-extension
-.IR .signed .
-Create an empty file with the name
-.IB zone.db .signed
-in the zone directory.
-.TP
-Include the keyfile in the zone.
-The name of the keyfile is settable by the
-.I dnssec.conf
-parameter
-.I keyfile .
-The default is
-.I dnskey.db .
-.br
-.if t \{\
-.nf
-.fam C
- ...
- IN NS ns1.example.net.
- IN NS ns2.example.net.
-$INCLUDE dnskey.db
- ...
-.fi
-.fam T
-You can also run
-.I zkt-conf(8)
-in the secure zone directory to do this.
-Try
-.br
-.if t \{\
-.nf
-.fam C
-$ zkt-conf -w zone.db
-.fi
-.fam T
-.\}
-.TP
-Control the format of the SOA-Record
-For automatic incrementation of the serial number, the SOA-Record
-must be formated, so that the serial number is on a single line and
-left justified in a field of at least 10 spaces!
-.if t \{\
-.fam C
-.\"fi 0
-.nf
-@ IN SOA ns1.example.net. hostmaster.example.net. (
- 60 ; Serial
- 43200 ; Refresh
- 1800 ; Retry
- 2W ; Expire
- 7200 ); Minimum
-.fi
-.fam T
-.\}
-If you use BIND version 9.4 or later and
-use the unixtime format for the serial number (which is the default since ZKT-1.0)
-this is not necessary.
-See also the parameter Serialformat in
-.IR dnssec.conf .
-.TP
-Try to sign the zone
-If the current working directory is the directory of the zone
-.IR example.net ,
-use the command
-.fam C
-.nf
-.sp 0.5
- $ zkt-signer \-D .. \-v \-v example.net
- or
- $ zkt-signer \-o example.net.
-.sp 0.5
-.fi
-.fam T
-to create the initial keying material and a signed zone file.
-Then try to load the file on the name server.
-
-.SH ENVIRONMENT VARIABLES
-.TP
-ZKT_CONFFILE
-Specifies the name of the default global configuration file.
-
-.SH FILES
-.TP
-.I /var/named/dnssec.conf
-Built-in default global configuration file.
-The name of the default global config file is settable via
-the environment variable ZKT_CONFFILE.
-Use
-.I zkt-conf(8)
-with option
-.B \-w
-or
-.I dnssec-zkt(8)
-with option
-.B \-Z
-to create an initial config file.
-.TP
-.I /var/named/dnssec-<view>.conf
-View specific global configuration file.
-.TP
-.I ./dnssec.conf
-Local configuration file.
-The file contains typically only the diff to the global site wide config file.
-Use for example
-.fam C
-.nf
-.sp 0.5
- $ zkt-conf -w -l -O "key_ttl: 5d"
-.sp 0.5
-.fi
-.fam T
-to create a local config file with a different key ttl time.
-.TP
-.I dnskey.db
-The file contains the currently used key and zone signing keys.
-It will be created by
-.IR dnsssec-signer(8) .
-The name of the file is settable via the dnssec configuration
-file (parameter
-.IR keyfile ).
-.TP
-.I zone.db
-This is the zone file.
-The name of the file is settable via the dnssec configuration
-file (parameter
-.IR zonefile ).
-
-.SH BUGS
-.PP
-The named.conf parser is a bit rudimental and not
-very well tested.
-
-.SH AUTHORS
-The man page is written by
-Holger Zuleger and Mans Nilsson
-
-.SH COPYRIGHT
-Copyright (c) 2005 \- 2010 by Holger Zuleger.
-Licensed under the BSD Licence. There is NO warranty; not even for MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.
-.\"--------------------------------------------------
-
-.SH SEE ALSO
-dnssec-keygen(8), dnssec-signzone(8), rndc(8), named.conf(5), zkt-conf(8), zkt-ls(8), zkt-keygen(8)
-.br
-RFC4033, RFC4034, RFC4035
-.br
-[1] DNSSEC HOWTO Tutorial by Olaf Kolkman, RIPE NCC
-.br
-(http://www.nlnetlabs.nl/dnssec_howto/)
-.br
-[2] RFC4641 "DNSSEC Operational Practices" by Miek Gieben and Olaf Kolkman
-.br
-(http://www.ietf.org/rfc/rfc4641.txt)
diff --git a/contrib/zkt-1.1.3/man/zkt-signer.8.html b/contrib/zkt-1.1.3/man/zkt-signer.8.html
deleted file mode 100644
index 95e82e88..00000000
--- a/contrib/zkt-1.1.3/man/zkt-signer.8.html
+++ /dev/null
@@ -1,306 +0,0 @@
-<!-- Creator : groff version 1.20.1 -->
-<!-- CreationDate: Sat Nov 27 20:13:08 2010 -->
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta name="generator" content="groff -Thtml, see www.gnu.org">
-<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<meta name="Content-Style" content="text/css">
-<style type="text/css">
- p { margin-top: 0; margin-bottom: 0; vertical-align: top }
- pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
- table { margin-top: 0; margin-bottom: 0; vertical-align: top }
- h1 { text-align: center }
-</style>
-<title>zkt-signer</title>
-
-</head>
-<body>
-
-<h1 align="center">zkt-signer</h1>
-
-<a href="#NAME">NAME</a><br>
-<a href="#SYNOPSYS">SYNOPSYS</a><br>
-<a href="#DESCRIPTION">DESCRIPTION</a><br>
-<a href="#OPTIONS">OPTIONS</a><br>
-<a href="#SAMPLE USAGE">SAMPLE USAGE</a><br>
-<a href="#Zone setup and initial preparation">Zone setup and initial preparation</a><br>
-
-<hr>
-
-
-<h2>NAME
-<a name="NAME"></a>
-</h2>
-
-
-<p style="margin-left:11%; margin-top: 1em">zkt-signer
-&mdash; Secure DNS zone signing tool</p>
-
-<h2>SYNOPSYS
-<a name="SYNOPSYS"></a>
-</h2>
-
-
-
-<p style="margin-left:11%; margin-top: 1em"><b>zkt-signer</b>
-[<b>&minus;L</b> <i>file</i>] [<b>&minus;V</b> <i>view</i>]
-[<b>&minus;c</b> <i>file</i>] [<b>&minus;O</b>
-<i>optstr</i>] [<b>&minus;fhnr</b>] [<b>&minus;v</b>
-[<b>&minus;v</b>]] <b>&minus;N</b> <i>named.conf</i>
-[<i>zone ...</i>] <b><br>
-zkt-signer</b> [<b>&minus;L</b> <i>file</i>]
-[<b>&minus;V</b> <i>view</i>] [<b>&minus;c</b> <i>file</i>]
-[<b>&minus;O</b> <i>optstr</i>] [<b>&minus;fhnr</b>]
-[<b>&minus;v</b> [<b>&minus;v</b>]] [<b>&minus;D</b>
-<i>directory</i>] [<i>zone ...</i>] <b><br>
-zkt-signer</b> [<b>&minus;L</b> <i>file</i>]
-[<b>&minus;V</b> <i>view</i>] [<b>&minus;c</b> <i>file</i>]
-[<b>&minus;O</b> <i>optstr</i>] [<b>&minus;fhnr</b>]
-[<b>&minus;v</b> [<b>&minus;v</b>]] <b>&minus;o</b>
-<i>origin</i> [<i>zonefile</i>]</p>
-
-<h2>DESCRIPTION
-<a name="DESCRIPTION"></a>
-</h2>
-
-
-<p style="margin-left:11%; margin-top: 1em">The
-<i>zkt-signer</i> command is a wrapper around
-<i>dnssec-signzone(8)</i> and <i>dnssec-keygen(8)</i> to
-sign a zone and manage the necessary zone keys. It is able
-to increment the serial number before signing the zone and
-can trigger <i>named(8)</i> to reload the signed zone file.
-The command controls several secure zones and, if started in
-regular intervals via <i>cron(8)</i>, can do all that stuff
-automatically.</p>
-
-<p style="margin-left:11%; margin-top: 1em">In the most
-useful usage scenario the command will be called with option
-<b>&minus;N</b> to read the secure zones out of the given
-<i>named.conf</i> file. If you have a configuration file
-with views, you have to use option -V viewname or --view
-viewname to specify the name of the view. Alternately you
-could link the executable file to a second name like
-<i>zkt-signer-viewname</i> and use that command to specify
-the name of the view. <br>
-All master zone statements will be scanned for filenames
-ending with &quot;.signed&quot;. These zones will be checked
-if the necessary zone- and key signing keys are existent and
-fresh enough to be used in the signing process. If one or
-more out-dated keys are found, new keying material will be
-generated via the <i>dnssec-keygen(8)</i> command and the
-old keys will be marked as depreciated. So the command do
-anything needed for a zone key rollover as defined by
-[2].</p>
-
-<p style="margin-left:11%; margin-top: 1em">If the
-resigning interval is reached or any new key must be
-announced, the serial number of the zone will be incremented
-and the <i>dnssec-signzone(8)</i> command will be evoked to
-sign the zone. After that, if the option <b>&minus;r</b> is
-given, the <i>rndc(8)</i> command will be called to reload
-the zone on the nameserver.</p>
-
-<p style="margin-left:11%; margin-top: 1em">In the second
-form of the command it is possible to specify a directory
-tree with the option <b>&minus;D</b> <i>dir</i>. Every
-secure zone found in a subdirectory below <i>dir</i> will be
-signed. However, it is also possible to reduce the signing
-to those zones given as arguments. <br>
-If <b>&minus;D</b> is ommitted (and neither <b>&minus;N</b>
-nor <b>&minus;o</b><i>origin</i> is specified) the default
-directory specified in the <i>dnssec.conf</i> file by the
-parameter <i>zonedir</i> will be used as top level
-directory.</p>
-
-<h2>OPTIONS
-<a name="OPTIONS"></a>
-</h2>
-
-
-
-<p style="margin-left:11%; margin-top: 1em"><b>&minus;L</b>
-<i>file|dir</i><b>,
-&minus;&minus;logfile=</b><i>file|dir</i></p>
-
-<p style="margin-left:22%;">Specify the name of a log file
-or a directory where logfiles are created with a name like
-zkt-<i>YYYY-MM-DD</i>T<i>hhmmss</i>Z.log<i>.</i> If the
-argument is not an absolute path name and a zone directory
-is specified in the config file, this will be prepended to
-the given name. This option is also settable in the
-dnssec.conf file via the parameter <b>LogFile</b><i>.</i>
-<br>
-The default is no file logging, but error logging to syslog
-with facility <b>USER</b> at level <b>ERROR</b> is enabled
-by default. These parameters are settable via the config
-file parameter <b>SyslogFacility</b><i>,</i>
-<b>SyslogLevel</b><i>,</i> <b>LogFile</b> and
-<b>Loglevel</b><i>.</i> <br>
-The additional parameter <b>VerboseLog</b> specifies the
-verbosity (0|1|2) of messages that will be logged with level
-<b>DEBUG</b> to file and syslog.</p>
-
-<p style="margin-left:11%;"><b>&minus;V</b> <i>view</i><b>,
-&minus;&minus;view=</b><i>view</i></p>
-
-<p style="margin-left:22%;">Try to read the default
-configuration out of a file named
-<i>dnssec-&lt;view&gt;.conf .</i> Instead of specifying the
-&minus;V or --view option every time, it is also possible to
-create a hard- or softlink to the executable file with an
-additional name like <i>zkt-signer-&lt;view&gt; .</i></p>
-
-<p style="margin-left:11%;"><b>&minus;c</b> <i>file</i><b>,
-&minus;&minus;config=</b><i>file</i></p>
-
-<p style="margin-left:22%;">Read configuration values out
-of the specified file. Otherwise the default config file is
-read or build-in defaults will be used.</p>
-
-<p style="margin-left:11%;"><b>&minus;O</b>
-<i>optstr</i><b>,
-&minus;&minus;config-option=</b><i>optstr</i></p>
-
-<p style="margin-left:22%;">Set any config file option via
-the commandline. Several config file options can be
-specified via the argument string but have to be delimited
-by semicolon (or newline).</p>
-
-<p style="margin-left:11%;"><b>&minus;f</b>,
-<b>&minus;&minus;force</b></p>
-
-<p style="margin-left:22%;">Force a resigning of the zone,
-regardless if the resigning interval is reached or new keys
-must be announced.</p>
-
-<p style="margin-left:11%;"><b>&minus;n</b>,
-<b>&minus;&minus;noexec</b></p>
-
-<p style="margin-left:22%;">Don&rsquo;t execute the
-<i>dnssec-signzone(8)</i> command. Currently this option is
-of very limited usage.</p>
-
-<p style="margin-left:11%;"><b>&minus;r</b>,
-<b>&minus;&minus;reload</b></p>
-
-<p style="margin-left:22%;">Reload the zone via
-<i>rndc(8)</i> after successful signing. In a production
-environment it is recommended to use this option to be sure
-that a freshly signed zone will be immediately propagated.
-However, that&rsquo;s only feasable if named runs on the
-signing machine, which is not recommended.</p>
-
-<p style="margin-left:11%;"><b>&minus;v</b>,
-<b>&minus;&minus;verbose</b></p>
-
-<p style="margin-left:22%;">Verbose mode (recommended). A
-second <b>&minus;v</b> will be a little more verbose.</p>
-
-<p style="margin-left:11%;"><b>&minus;h</b>,
-<b>&minus;&minus;help</b></p>
-
-<p style="margin-left:22%;">Print out the online help.</p>
-
-<h2>SAMPLE USAGE
-<a name="SAMPLE USAGE"></a>
-</h2>
-
-
-<p style="margin-left:11%; margin-top: 1em"><b>zkt-signer
-&minus;N /var/named/named.conf &minus;r &minus;v
-&minus;v</b></p>
-
-<p style="margin-left:22%;">Sign all secure zones found in
-the named.conf file and, if necessary, trigger a reload of
-the zone. Print some explanatory remarks on stdout.</p>
-
-<p style="margin-left:11%;"><b>zkt-signer &minus;D
-zonedir/example.net. &minus;f &minus;v &minus;v</b></p>
-
-<p style="margin-left:22%;">Force the signing of the zone
-found in the directory <i>zonedir/example.net .</i> Do not
-reload the zone.</p>
-
-<p style="margin-left:11%;"><b>zkt-signer &minus;D zonedir
-&minus;f &minus;v &minus;v example.net.</b></p>
-
-<p style="margin-left:22%;">Same as above.</p>
-
-<p style="margin-left:11%;"><b>zkt-signer &minus;f &minus;v
-&minus;v example.net.</b></p>
-
-<p style="margin-left:22%;">Same as above if the
-<i>dnssec.conf</i> file contains the path of the parent
-directory of the <i>example.net</i> zone.</p>
-
-<p style="margin-left:11%;"><b>zkt-signer &minus;f &minus;v
-&minus;v &minus;o example.net. zone.db</b></p>
-
-<p style="margin-left:22%;">Same as above if we are in the
-directory containing the <i>example.net</i> files.</p>
-
-<p style="margin-left:11%;"><b>zkt-signer
-&minus;&minus;config-option=&rsquo;ResignInterval 1d;
-Sigvalidity 28h; \</b></p>
-
-<p style="margin-left:22%;"><b>ZSKlifetime 2d;&rsquo;
-&minus;v &minus;v &minus;o example.net. zone.db</b> <br>
-Sign the example.net zone but override some config file
-values with parameters given on the commandline.</p>
-
-<h2>Zone setup and initial preparation
-<a name="Zone setup and initial preparation"></a>
-</h2>
-
-
-<p style="margin-left:11%; margin-top: 1em">Create a
-separate directory for every secure zone.</p>
-
-<p style="margin-left:22%;">This is useful because there
-are many additional files needed to secure a zone. Besides
-the zone file (<i>zone.db</i>), there is a signed zone file
-(<i>zone.db.signed),</i> a minimum of four files containing
-the key material, a file called <i>dnskey.db</i> with the
-current used keys, and the <i>dsset-</i> and
-<i>keyset-</i>files created by the <i>dnssec-signzone(8)</i>
-command. So in summary there is a minimum of nine files used
-per secure zone. For every additional key there are two
-extra files and every delegated subzone creates also two or
-three files.</p>
-
-<p style="margin-left:11%;">Name the directory just like
-the zone.</p>
-
-<p style="margin-left:22%;">That&rsquo;s only needed if you
-want to use the zkt-signer command in directory mode
-(<b>&minus;D</b>). Then the name of the zone will be parsed
-out of the directory name.</p>
-
-<p style="margin-left:11%;">Change the name of the zone
-file to <i>zone.db</i></p>
-
-<p style="margin-left:22%;">Otherwise you have to set the
-name via the <i>dnssec.conf</i> parameter <i>zonefile</i>,
-or you have to use the option <b>&minus;o</b> to name the
-zone and specify the zone file as argument.</p>
-
-<p style="margin-left:11%;">Add the name of the signed
-zonefile to the <i>named.conf</i> file</p>
-
-<p style="margin-left:22%;">The filename is the name of the
-zone file with the extension <i>.signed</i>. Create an empty
-file with the name <i>zone.db</i><b>.signed</b> in the zone
-directory.</p>
-
-<p style="margin-left:11%;">Include the keyfile in the
-zone.</p>
-
-<p style="margin-left:22%;">The name of the keyfile is
-settable by the <i>dnssec.conf</i> parameter <i>keyfile
-.</i> The default is <i>dnskey.db .</i></p>
-<hr>
-</body>
-</html>
diff --git a/contrib/zkt-1.1.3/man/zkt-signer.8.pdf b/contrib/zkt-1.1.3/man/zkt-signer.8.pdf
deleted file mode 100644
index 42fa3342..00000000
--- a/contrib/zkt-1.1.3/man/zkt-signer.8.pdf
+++ /dev/null
Binary files differ
diff --git a/contrib/zkt-1.1.3/misc.c b/contrib/zkt-1.1.3/misc.c
deleted file mode 100644
index f46d57f2..00000000
--- a/contrib/zkt-1.1.3/misc.c
+++ /dev/null
@@ -1,1072 +0,0 @@
-/*****************************************************************
-**
-** @(#) misc.c -- helper functions for the dnssec zone key tools
-**
-** Copyright (c) Jan 2005, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-# include <stdio.h>
-# include <string.h>
-# include <stdlib.h>
-# include <unistd.h> /* for link(), unlink() */
-# include <ctype.h>
-# include <sys/types.h>
-# include <sys/stat.h>
-# include <time.h>
-# include <utime.h>
-# include <assert.h>
-# include <errno.h>
-# include <fcntl.h>
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-# include "config_zkt.h"
-# include "zconf.h"
-# include "log.h"
-# include "debug.h"
-#define extern
-# include "misc.h"
-#undef extern
-
-# define TAINTEDCHARS "`$@;&<>|"
-
-extern const char *progname;
-
-/*****************************************************************
-** getnameappendix (progname, basename)
-** return a pointer to the substring in progname subsequent
-** following "<basename>-".
-*****************************************************************/
-const char *getnameappendix (const char *progname, const char *basename)
-{
- const char *p;
- int baselen;
-
- assert (progname != NULL);
- assert (basename != NULL);
-
- if ( (p = strrchr (progname, '/')) != NULL )
- p++;
- else
- p = progname;
-
- baselen = strlen (basename);
- if ( strncmp (p, basename, baselen-1) == 0 && *(p+baselen) == '-' )
- {
- p += baselen + 1;
- if ( *p )
- return p;
- }
-
- return NULL;
-}
-
-/*****************************************************************
-** getdefconfname (view)
-** returns a pointer to a dynamic string containing the
-** default configuration file name
-*****************************************************************/
-const char *getdefconfname (const char *view)
-{
- char *p;
- char *file;
- char *buf;
- int size;
-
- if ( (file = getenv ("ZKT_CONFFILE")) == NULL )
- file = CONFIG_FILE;
- dbg_val2 ("getdefconfname (%s) file = %s\n", view ? view : "NULL", file);
-
- if ( view == NULL || *view == '\0' || (p = strrchr (file, '.')) == NULL )
- return strdup (file);
-
- size = strlen (file) + strlen (view) + 1 + 1;
- if ( (buf = malloc (size)) == NULL )
- return strdup (file);
-
- dbg_val1 ("0123456789o123456789o123456789\tsize=%d\n", size);
- dbg_val4 ("%.*s-%s%s\n", p - file, file, view, p);
-
- snprintf (buf, size, "%.*s-%s%s", (int)(p - file), file, view, p);
- return buf;
-}
-
-/*****************************************************************
-** domain_canonicdup (s)
-** returns NULL or a pointer to a dynamic string containing the
-** canonic (all lower case letters and ending with a '.')
-** domain name
-*****************************************************************/
-char *domain_canonicdup (const char *s)
-{
- char *new;
- char *p;
- int len;
- int add_dot;
-
- if ( s == NULL )
- return NULL;
-
- add_dot = 0;
- len = strlen (s);
- if ( len > 0 && s[len-1] != '.' )
- add_dot = len++;
-
- if ( (new = p = malloc (len + 1)) == NULL )
- return NULL;
-
- while ( *s )
- *p++ = tolower (*s++);
- if ( add_dot )
- *p++ = '.';
- *p = '\0';
-
- return new;
-}
-#if 0 /* replaced by domain_canonicdup */
-/*****************************************************************
-** str_tolowerdup (s)
-*****************************************************************/
-char *str_tolowerdup (const char *s)
-{
- char *new;
- char *p;
-
- if ( s == NULL || (new = p = malloc (strlen (s) + 1)) == NULL )
- return NULL;
-
- while ( *s )
- *p++ = tolower (*s++);
- *p = '\0';
-
- return new;
-}
-#endif
-
-/*****************************************************************
-** str_delspace (s)
-** Remove in string 's' all white space char
-*****************************************************************/
-char *str_delspace (char *s)
-{
- char *start;
- char *p;
-
- if ( !s ) /* no string present ? */
- return NULL;
-
- start = s;
- for ( p = s; *p; p++ )
- if ( !isspace (*p) )
- *s++ = *p; /* copy each nonspace */
-
- *s = '\0'; /* terminate string */
-
- return start;
-}
-
-/*****************************************************************
-** in_strarr (str, arr, cnt)
-** check if string array 'arr' contains the string 'str'
-** return 1 if true or 'arr' or 'str' is empty, otherwise 0
-*****************************************************************/
-int in_strarr (const char *str, char *const arr[], int cnt)
-{
- if ( arr == NULL || cnt <= 0 )
- return 1;
-
- if ( str == NULL || *str == '\0' )
- return 0;
-
- while ( --cnt >= 0 )
- if ( strcmp (str, arr[cnt]) == 0 )
- return 1;
-
- return 0;
-}
-
-/*****************************************************************
-** str_untaint (s)
-** Remove in string 's' all TAINTED chars
-*****************************************************************/
-char *str_untaint (char *str)
-{
- char *p;
-
- assert (str != NULL);
-
- for ( p = str; *p; p++ )
- if ( strchr (TAINTEDCHARS, *p) )
- *p = ' ';
- return str;
-}
-
-/*****************************************************************
-** str_chop (str, c)
-** delete all occurrences of char 'c' at the end of string 's'
-*****************************************************************/
-char *str_chop (char *str, char c)
-{
- int len;
-
- assert (str != NULL);
-
- len = strlen (str) - 1;
- while ( len >= 0 && str[len] == c )
- str[len--] = '\0';
-
- return str;
-}
-
-/*****************************************************************
-** parseurl (url, &proto, &host, &port, &para )
-** parses the given url (e.g. "proto://host.with.domain:port/para")
-** and set the pointer variables to the corresponding part of the string.
-*****************************************************************/
-void parseurl (char *url, char **proto, char **host, char **port, char **para)
-{
- char *start;
- char *p;
-
- assert ( url != NULL );
-
- /* parse protocol */
- if ( (p = strchr (url, ':')) == NULL ) /* no protocol string given ? */
- p = url;
- else /* looks like a protocol string */
- if ( p[1] == '/' && p[2] == '/' ) /* protocol string ? */
- {
- *p = '\0';
- p += 3;
- if ( proto )
- *proto = url;
- }
- else /* no protocol string found ! */
- p = url;
-
- /* parse host */
- if ( *p == '[' ) /* ipv6 address as hostname ? */
- {
- for ( start = ++p; *p && *p != ']'; p++ )
- ;
- if ( *p )
- *p++ = '\0';
- }
- else
- for ( start = p; *p && *p != ':' && *p != '/'; p++ )
- ;
- if ( host )
- *host = start;
-
- /* parse port */
- if ( *p == ':' )
- {
- *p++ = '\0';
- for ( start = p; *p && isdigit (*p); p++ )
- ;
- if ( *p )
- *p++ = '\0';
- if ( port )
- *port = start;
- }
-
- if ( *p == '/' )
- *p++ = '\0';
-
- if ( *p && para )
- *para = p;
-}
-
-/*****************************************************************
-** splitpath (path, pathsize, filename)
-** if filename is build of "path/file" then copy filename to path
-** and split of the filename part.
-** return pointer to filename part in path or NULL if path is too
-** small to hold "path+filename"
-*****************************************************************/
-const char *splitpath (char *path, size_t psize, const char *filename)
-{
- char *p;
-
- if ( !path )
- return NULL;
-
- *path = '\0';
- if ( !filename )
- return filename;
-
- if ( (p = strrchr (filename, '/')) ) /* file arg contains path ? */
- {
- if ( strlen (filename) + 1 > psize )
- return filename;
-
- strcpy (path, filename); /* copy whole filename to path */
- path[p-filename] = '\0'; /* split of the file part */
- filename = ++p;
- }
- return filename;
-}
-
-/*****************************************************************
-** pathname (path, size, dir, file, ext)
-** Concatenate 'dir', 'file' and 'ext' (if not null) to build
-** a pathname, and store the result in the character array
-** with length 'size' pointed to by 'path'.
-*****************************************************************/
-char *pathname (char *path, size_t size, const char *dir, const char *file, const char *ext)
-{
- int len;
-
- if ( path == NULL || file == NULL )
- return path;
-
- len = strlen (file) + 1;
- if ( dir )
- len += strlen (dir);
- if ( ext )
- len += strlen (ext);
- if ( len > size )
- return path;
-
- *path = '\0';
- if ( dir && *dir )
- {
- len = sprintf (path, "%s", dir);
- if ( path[len-1] != '/' )
- {
- path[len++] = '/';
- path[len] = '\0';
- }
- }
- strcat (path, file);
- if ( ext )
- strcat (path, ext);
- return path;
-}
-
-/*****************************************************************
-** is_directory (name)
-** Check if the given pathname 'name' exists and is a directory.
-** returns 0 | 1
-*****************************************************************/
-int is_directory (const char *name)
-{
- struct stat st;
-
- if ( !name || !*name )
- return 0;
-
- return ( stat (name, &st) == 0 && S_ISDIR (st.st_mode) );
-}
-
-/*****************************************************************
-** fileexist (name)
-** Check if a file with the given pathname 'name' exists.
-** returns 0 | 1
-*****************************************************************/
-int fileexist (const char *name)
-{
- struct stat st;
- return ( stat (name, &st) == 0 && S_ISREG (st.st_mode) );
-}
-
-/*****************************************************************
-** filesize (name)
-** return the size of the file with the given pathname 'name'.
-** returns -1 if the file not exist
-*****************************************************************/
-size_t filesize (const char *name)
-{
- struct stat st;
- if ( stat (name, &st) == -1 )
- return -1L;
- return ( st.st_size );
-}
-
-/*****************************************************************
-** is_keyfilename (name)
-** Check if the given name looks like a dnssec (public)
-** keyfile name. Returns 0 | 1
-*****************************************************************/
-int is_keyfilename (const char *name)
-{
- int len;
-
- if ( name == NULL || *name != 'K' )
- return 0;
-
- len = strlen (name);
- if ( len > 4 && strcmp (&name[len - 4], ".key") == 0 )
- return 1;
-
- return 0;
-}
-
-/*****************************************************************
-** is_dotfilename (name)
-** Check if the given pathname 'name' looks like "." or "..".
-** Returns 0 | 1
-*****************************************************************/
-int is_dotfilename (const char *name)
-{
- if ( name && (
- (name[0] == '.' && name[1] == '\0') ||
- (name[0] == '.' && name[1] == '.' && name[2] == '\0')) )
- return 1;
-
- return 0;
-}
-
-/*****************************************************************
-** touch (name, sec)
-** Set the modification time of the given pathname 'fname' to
-** 'sec'. Returns 0 on success.
-*****************************************************************/
-int touch (const char *fname, time_t sec)
-{
- struct utimbuf utb;
-
- utb.actime = utb.modtime = sec;
- return utime (fname, &utb);
-}
-
-/*****************************************************************
-** linkfile (fromfile, tofile)
-*****************************************************************/
-int linkfile (const char *fromfile, const char *tofile)
-{
- int ret;
-
- /* fprintf (stderr, "linkfile (%s, %s)\n", fromfile, tofile); */
- if ( (ret = link (fromfile, tofile)) == -1 && errno == EEXIST )
- if ( unlink (tofile) == 0 )
- ret = link (fromfile, tofile);
-
- return ret;
-}
-
-/*****************************************************************
-** copyfile (fromfile, tofile, dnskeyfile)
-** copy fromfile into tofile.
-** Add (optional) the content of dnskeyfile to tofile.
-*****************************************************************/
-int copyfile (const char *fromfile, const char *tofile, const char *dnskeyfile)
-{
- FILE *infp;
- FILE *outfp;
- int c;
-
- /* fprintf (stderr, "copyfile (%s, %s)\n", fromfile, tofile); */
- if ( (infp = fopen (fromfile, "r")) == NULL )
- return -1;
- if ( (outfp = fopen (tofile, "w")) == NULL )
- {
- fclose (infp);
- return -2;
- }
- while ( (c = getc (infp)) != EOF )
- putc (c, outfp);
-
- fclose (infp);
- if ( dnskeyfile && *dnskeyfile && (infp = fopen (dnskeyfile, "r")) != NULL )
- {
- while ( (c = getc (infp)) != EOF )
- putc (c, outfp);
- fclose (infp);
- }
- fclose (outfp);
-
- return 0;
-}
-
-/*****************************************************************
-** copyzonefile (fromfile, tofile, dnskeyfile)
-** copy a already signed zonefile and replace all zone DNSKEY
-** resource records by one "$INCLUDE dnskey.db" line
-*****************************************************************/
-int copyzonefile (const char *fromfile, const char *tofile, const char *dnskeyfile)
-{
- FILE *infp;
- FILE *outfp;
- int len;
- int dnskeys;
- int multi_line_dnskey;
- int bufoverflow;
- char buf[1024];
- char *p;
-
- if ( fromfile == NULL )
- infp = stdin;
- else
- if ( (infp = fopen (fromfile, "r")) == NULL )
- return -1;
- if ( tofile == NULL )
- outfp = stdout;
- else
- if ( (outfp = fopen (tofile, "w")) == NULL )
- {
- if ( fromfile )
- fclose (infp);
- return -2;
- }
-
- multi_line_dnskey = 0;
- dnskeys = 0;
- bufoverflow = 0;
- while ( fgets (buf, sizeof buf, infp) != NULL )
- {
- p = buf;
- if ( !bufoverflow && !multi_line_dnskey && (*p == '@' || isspace (*p)) ) /* check if DNSKEY RR */
- {
- do
- p++;
- while ( isspace (*p) ) ;
-
- /* skip TTL */
- while ( isdigit (*p) )
- p++;
-
- while ( isspace (*p) )
- p++;
-
- /* skip Class */
- if ( strncasecmp (p, "IN", 2) == 0 )
- {
- p += 2;
- while ( isspace (*p) )
- p++;
- }
-
- if ( strncasecmp (p, "DNSKEY", 6) == 0 ) /* bingo! */
- {
- dnskeys++;
- p += 6;
- while ( *p )
- {
- if ( *p == '(' )
- multi_line_dnskey = 1;
- if ( *p == ')' )
- multi_line_dnskey = 0;
- p++;
- }
- if ( dnskeys == 1 )
- fprintf (outfp, "$INCLUDE %s\n", dnskeyfile);
- }
- else
- fputs (buf, outfp);
- }
- else
- {
- if ( bufoverflow )
- fprintf (stderr, "!! buffer overflow in copyzonefile() !!\n");
- if ( !multi_line_dnskey )
- fputs (buf, outfp);
- else
- {
- while ( *p && *p != ')' )
- p++;
- if ( *p == ')' )
- multi_line_dnskey = 0;
- }
- }
-
- len = strlen (buf);
- bufoverflow = buf[len-1] != '\n'; /* line too long ? */
- }
-
- if ( fromfile )
- fclose (infp);
- if ( tofile )
- fclose (outfp);
-
- return 0;
-}
-
-/*****************************************************************
-** cmpfile (file1, file2)
-** returns -1 on error, 1 if the files differ and 0 if they
-** are identical.
-*****************************************************************/
-int cmpfile (const char *file1, const char *file2)
-{
- FILE *fp1;
- FILE *fp2;
- int c1;
- int c2;
-
- /* fprintf (stderr, "cmpfile (%s, %s)\n", file1, file2); */
- if ( (fp1 = fopen (file1, "r")) == NULL )
- return -1;
- if ( (fp2 = fopen (file2, "r")) == NULL )
- {
- fclose (fp1);
- return -1;
- }
-
- do {
- c1 = getc (fp1);
- c2 = getc (fp2);
- } while ( c1 != EOF && c2 != EOF && c1 == c2 );
-
- fclose (fp1);
- fclose (fp2);
-
- if ( c1 == c2 )
- return 0;
- return 1;
-}
-
-/*****************************************************************
-** file_age (fname)
-*****************************************************************/
-int file_age (const char *fname)
-{
- time_t curr = time (NULL);
- time_t mtime = file_mtime (fname);
-
- return curr - mtime;
-}
-
-/*****************************************************************
-** file_mtime (fname)
-*****************************************************************/
-time_t file_mtime (const char *fname)
-{
- struct stat st;
-
- if ( stat (fname, &st) < 0 )
- return 0;
- return st.st_mtime;
-}
-
-/*****************************************************************
-** is_exec_ok (prog)
-** Check if we are running as root or if the file owner of
-** "prog" do not match the current user or the file permissions
-** allows file modification for others then the owner.
-** The same condition will be checked for the group ownership.
-** return 1 if the execution of the command "prog" will not
-** open a big security whole, 0 otherwise
-*****************************************************************/
-int is_exec_ok (const char *prog)
-{
- uid_t curr_uid;
- struct stat st;
-
- if ( stat (prog, &st) < 0 )
- return 0;
-
- curr_uid = getuid ();
- if ( curr_uid == 0 ) /* don't run the cmd if we are root */
- return 0;
-
- /* if the file owner and the current user matches and */
- /* the file mode is not writable except for the owner, we are save */
- if ( curr_uid == st.st_uid && (st.st_mode & (S_IWGRP | S_IWOTH)) == 0 )
- return 1;
-
- /* if the file group and the current group matches and */
- /* the file mode is not writable except for the group, we are also save */
- if ( getgid() != st.st_gid && (st.st_mode & (S_IWUSR | S_IWOTH)) == 0 )
- return 1;
-
- return 0;
-}
-
-/*****************************************************************
-** fatal (fmt, ...)
-*****************************************************************/
-void fatal (char *fmt, ...)
-{
- va_list ap;
-
- va_start(ap, fmt);
- if ( progname )
- fprintf (stderr, "%s: ", progname);
- vfprintf (stderr, fmt, ap);
- va_end(ap);
- exit (127);
-}
-
-/*****************************************************************
-** error (fmt, ...)
-*****************************************************************/
-void error (char *fmt, ...)
-{
- va_list ap;
-
- va_start(ap, fmt);
- vfprintf (stderr, fmt, ap);
- va_end(ap);
-}
-
-/*****************************************************************
-** logmesg (fmt, ...)
-*****************************************************************/
-void logmesg (char *fmt, ...)
-{
- va_list ap;
-
-#if defined (LOG_WITH_PROGNAME) && LOG_WITH_PROGNAME
- fprintf (stdout, "%s: ", progname);
-#endif
- va_start(ap, fmt);
- vfprintf (stdout, fmt, ap);
- va_end(ap);
-}
-
-/*****************************************************************
-** verbmesg (verblvl, conf, fmt, ...)
-*****************************************************************/
-void verbmesg (int verblvl, const zconf_t *conf, char *fmt, ...)
-{
- char str[511+1];
- va_list ap;
-
- str[0] = '\0';
- va_start(ap, fmt);
- vsnprintf (str, sizeof (str), fmt, ap);
- va_end(ap);
-
- //fprintf (stderr, "verbmesg (%d stdout=%d filelog=%d str = :%s:\n", verblvl, conf->verbosity, conf->verboselog, str);
- if ( verblvl <= conf->verbosity ) /* check if we have to print this to stdout */
- logmesg (str);
-
- str_chop (str, '\n');
- if ( verblvl <= conf->verboselog ) /* check logging to syslog and/or file */
- lg_mesg (LG_DEBUG, str);
-}
-
-
-/*****************************************************************
-** logflush ()
-*****************************************************************/
-void logflush ()
-{
- fflush (stdout);
-}
-
-/*****************************************************************
-** timestr2time (timestr)
-** timestr should look like "20071211223901" for 12 dec 2007 22:39:01
-*****************************************************************/
-time_t timestr2time (const char *timestr)
-{
- struct tm t;
- time_t sec;
-
- // fprintf (stderr, "timestr = \"%s\"\n", timestr);
- if ( sscanf (timestr, "%4d%2d%2d%2d%2d%2d",
- &t.tm_year, &t.tm_mon, &t.tm_mday,
- &t.tm_hour, &t.tm_min, &t.tm_sec) != 6 )
- return 0L;
- t.tm_year -= 1900;
- t.tm_mon -= 1;
- t.tm_isdst = 0;
-
-#if defined(HAVE_TIMEGM) && HAVE_TIMEGM
- sec = timegm (&t);
-#else
- {
- char tzstr[31+1];
- char *tz;
-
- tz = getenv("TZ");
- snprintf (tzstr, sizeof (tzstr), "TZ=%s", "UTC");
- putenv (tzstr);
- tzset();
- sec = mktime(&t);
- if (tz)
- snprintf (tzstr, sizeof (tzstr), "TZ=%s", tz);
- else
- snprintf (tzstr, sizeof (tzstr), "TZ=%s", "");
- putenv (tzstr);
- tzset();
- }
-#endif
-
- return sec < 0L ? 0L : sec;
-}
-
-/*****************************************************************
-** time2str (sec, precison)
-** sec is seconds since 1.1.1970
-** precison is currently either 's' (for seconds) or 'm' (minutes)
-*****************************************************************/
-char *time2str (time_t sec, int precision)
-{
- struct tm *t;
- static char timestr[31+1]; /* 27+1 should be enough */
-#if defined(HAVE_STRFTIME) && HAVE_STRFTIME
- char tformat[127+1];
-
- timestr[0] = '\0';
- if ( sec <= 0L )
- return timestr;
- t = localtime (&sec);
- if ( precision == 's' )
- strcpy (tformat, "%b %d %Y %T");
- else
- strcpy (tformat, "%b %d %Y %R");
-# if PRINT_TIMEZONE
- strcat (tformat, " %z");
-# endif
- strftime (timestr, sizeof (timestr), tformat, t);
-
-#else /* no strftime available */
- static char *mstr[] = {
- "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
- };
-
- timestr[0] = '\0';
- if ( sec <= 0L )
- return timestr;
- t = localtime (&sec);
-# if PRINT_TIMEZONE
- {
- int h, s;
-
- s = abs (t->tm_gmtoff);
- h = t->tm_gmtoff / 3600;
- s = t->tm_gmtoff % 3600;
- if ( precision == 's' )
- snprintf (timestr, sizeof (timestr), "%s %2d %4d %02d:%02d:%02d %c%02d%02d",
- mstr[t->tm_mon], t->tm_mday, t->tm_year + 1900,
- t->tm_hour, t->tm_min, t->tm_sec,
- t->tm_gmtoff < 0 ? '-': '+',
- h, s);
- else
- snprintf (timestr, sizeof (timestr), "%s %2d %4d %02d:%02d %c%02d%02d",
- mstr[t->tm_mon], t->tm_mday, t->tm_year + 1900,
- t->tm_hour, t->tm_min,
- t->tm_gmtoff < 0 ? '-': '+',
- h, s);
- }
-# else
- if ( precision == 's' )
- snprintf (timestr, sizeof (timestr), "%s %2d %4d %02d:%02d:%02d",
- mstr[t->tm_mon], t->tm_mday, t->tm_year + 1900,
- t->tm_hour, t->tm_min, t->tm_sec);
- else
- snprintf (timestr, sizeof (timestr), "%s %2d %4d %02d:%02d",
- mstr[t->tm_mon], t->tm_mday, t->tm_year + 1900,
- t->tm_hour, t->tm_min);
-# endif
-#endif
-
- return timestr;
-}
-
-/*****************************************************************
-** time2isostr (sec, precison)
-** sec is seconds since 1.1.1970
-** precison is currently either 's' (for seconds) or 'm' (minutes)
-*****************************************************************/
-char *time2isostr (time_t sec, int precision)
-{
- struct tm *t;
- static char timestr[31+1]; /* 27+1 should be enough */
-
- timestr[0] = '\0';
- if ( sec <= 0L )
- return timestr;
-
- t = gmtime (&sec);
- if ( precision == 's' )
- snprintf (timestr, sizeof (timestr), "%4d%02d%02d%02d%02d%02d",
- t->tm_year + 1900, t->tm_mon+1, t->tm_mday,
- t->tm_hour, t->tm_min, t->tm_sec);
- else
- snprintf (timestr, sizeof (timestr), "%4d%02d%02d%02d%02d",
- t->tm_year + 1900, t->tm_mon+1, t->tm_mday,
- t->tm_hour, t->tm_min);
-
- return timestr;
-}
-
-/*****************************************************************
-** age2str (sec)
-** !!Attention: This function is not reentrant
-*****************************************************************/
-char *age2str (time_t sec)
-{
- static char str[20+1]; /* "2y51w6d23h50m55s" == 16+1 chars */
- int len;
- int strsize = sizeof (str);
-
- len = 0;
-# if PRINT_AGE_WITH_YEAR
- if ( sec / (YEARSEC) > 0 )
- {
- len += snprintf (str+len, strsize - len, "%1luy", sec / YEARSEC );
- sec %= (YEARSEC);
- }
- else
- len += snprintf (str+len, strsize - len, " ");
-# endif
- if ( sec / WEEKSEC > 0 )
- {
- len += snprintf (str+len, strsize - len, "%2luw", (ulong) sec / WEEKSEC );
- sec %= WEEKSEC;
- }
- else
- len += snprintf (str+len, strsize - len, " ");
- if ( sec / DAYSEC > 0 )
- {
- len += snprintf (str+len, strsize - len, "%2lud", sec / (ulong)DAYSEC);
- sec %= DAYSEC;
- }
- else
- len += snprintf (str+len, strsize - len, " ");
- if ( sec / HOURSEC > 0 )
- {
- len += snprintf (str+len, strsize - len, "%2luh", sec / (ulong)HOURSEC);
- sec %= HOURSEC;
- }
- else
- len += snprintf (str+len, strsize - len, " ");
- if ( sec / MINSEC > 0 )
- {
- len += snprintf (str+len, strsize - len, "%2lum", sec / (ulong)MINSEC);
- sec %= MINSEC;
- }
- else
- len += snprintf (str+len, strsize - len, " ");
- if ( sec > 0 )
- snprintf (str+len, strsize - len, "%2lus", (ulong) sec);
- else
- len += snprintf (str+len, strsize - len, " ");
-
- return str;
-}
-
-/*****************************************************************
-** start_timer ()
-*****************************************************************/
-time_t start_timer ()
-{
- return (time(NULL));
-}
-
-/*****************************************************************
-** stop_timer ()
-*****************************************************************/
-time_t stop_timer (time_t start)
-{
- time_t stop = time (NULL);
-
- return stop - start;
-}
-
-
-/****************************************************************
-**
-** int gensalt (saltstr, sizeofsaltstr, bits)
-**
-** generate a random hexstring of 'bits' salt and store it
-** in saltstr. return 1 on success, otherwise 0.
-**
-*****************************************************************/
-int gensalt (char *salt, size_t saltsize, int saltbits, unsigned int seed)
-{
- static char hexstr[] = "0123456789ABCDEF";
- int saltlen = 0; /* current length of salt in hex nibbles */
- int i;
- int hex;
-
- if ( seed == 0 )
- srandom (seed = (unsigned int)time (NULL));
-
- saltlen = saltbits / 4;
- if ( saltlen+1 > saltsize )
- return 0;
-
- for ( i = 0; i < saltlen; i++ )
- {
- hex = random () % 16;
- assert ( hex >= 0 && hex < 16 );
- salt[i] = hexstr[hex];
- }
- salt[i] = '\0';
-
- return 1;
-}
-
-
-#ifdef COPYZONE_TEST
-const char *progname;
-main (int argc, char *argv[])
-{
- progname = *argv;
-
- if ( copyzonefile (argv[1], NULL) < 0 )
- error ("can't copy zone file %s\n", argv[1]);
-}
-#endif
-
-#ifdef URL_TEST
-const char *progname;
-main (int argc, char *argv[])
-{
- char *proto;
- char *host;
- char *port;
- char *para;
- char url[1024];
-
- progname = *argv;
-
- proto = host = port = para = NULL;
-
- if ( --argc <= 0 )
- {
- fprintf (stderr, "usage: url_test <url>\n");
- fprintf (stderr, "e.g.: url_test http://www.hznet.de:80/zkt\n");
- exit (1);
- }
-
- strcpy (url, argv[1]);
- parseurl (url, &proto, &host, &port, &para);
-
- if ( proto )
- printf ("proto: \"%s\"\n", proto);
- if ( host )
- printf ("host: \"%s\"\n", host);
- if ( port )
- printf ("port: \"%s\"\n", port);
- if ( para )
- printf ("para: \"%s\"\n", para);
-
-}
-#endif
-
diff --git a/contrib/zkt-1.1.3/misc.h b/contrib/zkt-1.1.3/misc.h
deleted file mode 100644
index 8c52c346..00000000
--- a/contrib/zkt-1.1.3/misc.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*****************************************************************
-**
-** @(#) misc.h (c) 2005 - 2007 Holger Zuleger hznet.de
-**
-** Copyright (c) 2005 - 2007, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-#ifndef MISC_H
-# define MISC_H
-# include <sys/types.h>
-# include <stdarg.h>
-# include <stdio.h>
-# include "zconf.h"
-
-# define min(a, b) ((a) < (b) ? (a) : (b))
-# define max(a, b) ((a) > (b) ? (a) : (b))
-
-extern const char *getnameappendix (const char *progname, const char *basename);
-extern const char *getdefconfname (const char *view);
-extern int fileexist (const char *name);
-extern size_t filesize (const char *name);
-extern int file_age (const char *fname);
-extern int touch (const char *fname, time_t sec);
-extern int linkfile (const char *fromfile, const char *tofile);
-//extern int copyfile (const char *fromfile, const char *tofile);
-extern int copyfile (const char *fromfile, const char *tofile, const char *dnskeyfile);
-extern int copyzonefile (const char *fromfile, const char *tofile, const char *dnskeyfile);
-extern int cmpfile (const char *file1, const char *file2);
-extern char *str_delspace (char *s);
-#if 1
-extern char *domain_canonicdup (const char *s);
-#else
-extern char *str_tolowerdup (const char *s);
-#endif
-extern int in_strarr (const char *str, char *const arr[], int cnt);
-extern const char *splitpath (char *path, size_t size, const char *filename);
-extern char *pathname (char *name, size_t size, const char *path, const char *file, const char *ext);
-extern char *time2str (time_t sec, int precision);
-extern char *time2isostr (time_t sec, int precision);
-extern time_t timestr2time (const char *timestr);
-extern int is_keyfilename (const char *name);
-extern int is_directory (const char *name);
-extern time_t file_mtime (const char *fname);
-extern int is_exec_ok (const char *prog);
-extern char *age2str (time_t sec);
-extern time_t stop_timer (time_t start);
-extern time_t start_timer (void);
-extern void error (char *fmt, ...);
-extern void fatal (char *fmt, ...);
-extern void logmesg (char *fmt, ...);
-extern void verbmesg (int verblvl, const zconf_t *conf, char *fmt, ...);
-extern void logflush (void);
-extern int gensalt (char *salt, size_t saltsize, int saltbits, unsigned int seed);
-extern char *str_untaint (char *str);
-extern char *str_chop (char *str, char c);
-extern int is_dotfilename (const char *name);
-extern void parseurl (char *url, char **proto, char **host, char **port, char **para);
-#endif
diff --git a/contrib/zkt-1.1.3/ncparse.c b/contrib/zkt-1.1.3/ncparse.c
deleted file mode 100644
index e75bb968..00000000
--- a/contrib/zkt-1.1.3/ncparse.c
+++ /dev/null
@@ -1,325 +0,0 @@
-/*****************************************************************
-**
-** @(#) ncparse.c -- A very simple named.conf parser
-**
-** Copyright (c) Apr 2005 - Nov 2007, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-# include <stdio.h>
-# include <string.h>
-# include <ctype.h>
-# include <assert.h>
-# include "debug.h"
-# include "misc.h"
-# include "log.h"
-#define extern
-# include "ncparse.h"
-#undef extern
-
-# define TOK_STRING 257
-# define TOK_DIR 258
-# define TOK_INCLUDE 259
-
-# define TOK_ZONE 260
-# define TOK_TYPE 261
-# define TOK_MASTER 262
-# define TOK_SLAVE 263
-# define TOK_STUB 264
-# define TOK_HINT 265
-# define TOK_FORWARD 266
-# define TOK_DELEGATION 267
-# define TOK_VIEW 268
-
-# define TOK_FILE 270
-
-# define TOK_UNKNOWN 511
-
-/* list of "named.conf" keywords we are interested in */
-static struct KeyWords {
- char *name;
- int tok;
-} kw[] = {
- { "STRING", TOK_STRING },
- { "include", TOK_INCLUDE },
- { "directory", TOK_DIR },
- { "file", TOK_FILE },
- { "zone", TOK_ZONE },
-#if 0 /* we don't need the type keyword; master, slave etc. is sufficient */
- { "type", TOK_TYPE },
-#endif
- { "master", TOK_MASTER },
- { "slave", TOK_SLAVE },
- { "stub", TOK_STUB },
- { "hint", TOK_HINT },
- { "forward", TOK_FORWARD },
- { "delegation-only", TOK_DELEGATION },
- { "view", TOK_VIEW },
- { NULL, TOK_UNKNOWN },
-};
-
-#ifdef DBG
-static const char *tok2str (int tok)
-{
- int i;
-
- i = 0;
- while ( kw[i].name && kw[i].tok != tok )
- i++;
-
- return kw[i].name;
-}
-#endif
-
-static int searchkw (const char *keyword)
-{
- int i;
-
- dbg_val ("ncparse: searchkw (%s)\n", keyword);
- i = 0;
- while ( kw[i].name && strcmp (kw[i].name, keyword) != 0 )
- i++;
-
- return kw[i].tok;
-}
-
-static int gettok (FILE *fp, char *val, size_t valsize)
-{
- int lastc;
- int c;
- char buf[255+1];
- char *p;
- char *bufend;
-
- *val = '\0';
- do {
- while ( (c = getc (fp)) != EOF && isspace (c) )
- ;
-
- if ( c == '#' ) /* single line comment ? */
- {
- while ( (c = getc (fp)) != EOF && c != '\n' )
- ;
- continue;
- }
-
- if ( c == EOF )
- return EOF;
-
- if ( c == '{' || c == '}' || c == ';' )
- continue;
-
- if ( c == '/' ) /* begin of C comment ? */
- {
- if ( (c = getc (fp)) == '*' ) /* yes! */
- {
- lastc = EOF; /* read until end of c comment */
- while ( (c = getc (fp)) != EOF && !(lastc == '*' && c == '/') )
- lastc = c;
- }
- else if ( c == '/' ) /* is it a C single line comment ? */
- {
- while ( (c = getc (fp)) != EOF && c != '\n' )
- ;
- }
- else /* no ! */
- ungetc (c, fp);
- continue;
- }
-
- if ( c == '\"' )
- {
- p = val;
- bufend = val + valsize - 1;
- while ( (c = getc (fp)) != EOF && p < bufend && c != '\"' )
- *p++ = c;
- *p = '\0';
- /* if string buffer is too small, eat up rest of string */
- while ( c != EOF && c != '\"' )
- c = getc (fp);
-
- return TOK_STRING;
- }
-
- p = buf;
- bufend = buf + sizeof (buf) - 1;
- do
- *p++ = tolower (c);
- while ( (c = getc (fp)) != EOF && p < bufend && (isalpha (c) || c == '-') );
- *p = '\0';
- ungetc (c, fp);
-
- if ( (c = searchkw (buf)) != TOK_UNKNOWN )
- return c;
- } while ( c != EOF );
-
- return EOF;
-}
-
-/*****************************************************************
-**
-** parse_namedconf (const char *filename, chroot_dir, dir, dirsize, int (*func) ())
-**
-** Very dumb named.conf parser.
-** - In a zone declaration the _first_ keyword MUST be "type"
-** - For every master zone "func (directory, zone, filename)" will be called
-**
-*****************************************************************/
-int parse_namedconf (const char *filename, const char *chroot_dir, char *dir, size_t dirsize, int (*func) ())
-{
- FILE *fp;
- int tok;
- char path[511+1];
-#if 1 /* this is potentialy too small for key data, but we don't need the keys... */
- char strval[255+1];
-#else
- char strval[4095+1];
-#endif
- char view[255+1];
- char zone[255+1];
- char zonefile[255+1];
-
- dbg_val ("parse_namedconf: parsing file \"%s\" \n", filename);
-
- assert (filename != NULL);
- assert (dir != NULL && dirsize != 0);
- assert (func != NULL);
-
- view[0] = '\0';
- if ( (fp = fopen (filename, "r")) == NULL )
- return 0;
-
- while ( (tok = gettok (fp, strval, sizeof strval)) != EOF )
- {
- if ( tok > 0 && tok < 256 )
- {
- error ("parse_namedconf: token found with value %-10d: %c\n", tok, tok);
- lg_mesg (LG_ERROR, "parse_namedconf: token found with value %-10d: %c", tok, tok);
- }
- else if ( tok == TOK_DIR )
- {
- if ( gettok (fp, strval, sizeof (strval)) == TOK_STRING )
- {
- dbg_val2 ("parse_namedconf: directory found \"%s\" (dir is %s)\n",
- strval, dir);
- if ( *strval != '/' && *dir )
- snprintf (path, sizeof (path), "%s/%s", dir, strval);
- else
- snprintf (path, sizeof (path), "%s", strval);
-
- /* prepend chroot directory (do it only once) */
- if ( chroot_dir && *chroot_dir )
- {
- snprintf (dir, dirsize, "%s%s%s", chroot_dir, *path == '/' ? "": "/", path);
- chroot_dir = NULL;
- }
- else
- snprintf (dir, dirsize, "%s", path);
- dbg_val ("parse_namedconf: new dir \"%s\" \n", dir);
- }
- }
- else if ( tok == TOK_INCLUDE )
- {
- if ( gettok (fp, strval, sizeof (strval)) == TOK_STRING )
- {
- if ( *strval != '/' && *dir )
- snprintf (path, sizeof (path), "%s/%s", dir, strval);
- else
- snprintf (path, sizeof (path), "%s", strval);
- if ( !parse_namedconf (path, chroot_dir, dir, dirsize, func) )
- return 0;
- }
- else
- {
- error ("parse_namedconf: need a filename after \"include\"!\n");
- lg_mesg (LG_ERROR, "parse_namedconf: need a filename after \"include\"!");
- }
- }
- else if ( tok == TOK_VIEW )
- {
- if ( gettok (fp, strval, sizeof (strval)) != TOK_STRING )
- continue;
- snprintf (view, sizeof view, "%s", strval); /* store the name of the view */
- }
- else if ( tok == TOK_ZONE )
- {
- if ( gettok (fp, strval, sizeof (strval)) != TOK_STRING )
- continue;
- snprintf (zone, sizeof zone, "%s", strval); /* store the name of the zone */
-
- if ( gettok (fp, strval, sizeof (strval)) != TOK_MASTER )
- continue;
- if ( gettok (fp, strval, sizeof (strval)) != TOK_FILE )
- continue;
- if ( gettok (fp, strval, sizeof (strval)) != TOK_STRING )
- continue;
- snprintf (zonefile, sizeof zonefile, "%s", strval); /* this is the filename */
-
- dbg_val4 ("dir %s view %s zone %s file %s\n", dir, view, zone, zonefile);
- (*func) (dir, view, zone, zonefile);
- }
- else
- dbg_val3 ("%-10s(%d): %s\n", tok2str(tok), tok, strval);
- }
- fclose (fp);
-
- return 1;
-}
-
-#ifdef TEST_NCPARSE
-int printzone (const char *dir, const char *view, const char *zone, const char *file)
-{
- printf ("printzone ");
- printf ("view \"%s\" " , view);
- printf ("zone \"%s\" " , zone);
- printf ("file ");
- if ( dir && *dir )
- printf ("%s/", dir, file);
- printf ("%s", file);
- putchar ('\n');
- return 1;
-}
-
-char *progname;
-
-main (int argc, char *argv[])
-{
- char directory[255+1];
-
- progname = argv[0];
-
- directory[0] = '\0';
- if ( --argc == 0 )
- parse_namedconf ("/var/named/named.conf", NULL, directory, sizeof (directory), printzone);
- else
- parse_namedconf (argv[1], NULL, directory, sizeof (directory), printzone);
-}
-#endif
diff --git a/contrib/zkt-1.1.3/ncparse.h b/contrib/zkt-1.1.3/ncparse.h
deleted file mode 100644
index 35d571dd..00000000
--- a/contrib/zkt-1.1.3/ncparse.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*****************************************************************
-**
-** @(#) ncparse.h -- headerfile for a simple named.conf parser
-**
-** Copyright (c) Apr 2005 - Nov 2007, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-
-#ifndef NCPARSE_H
-# define NCPARSE_H
-extern int parse_namedconf (const char *filename, const char *chroot_dir, char *dir, size_t dirsize, int (*func) ());
-#endif
diff --git a/contrib/zkt-1.1.3/nscomm.c b/contrib/zkt-1.1.3/nscomm.c
deleted file mode 100644
index 20ec8eb6..00000000
--- a/contrib/zkt-1.1.3/nscomm.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/*****************************************************************
-**
-** @(#) nscomm.c (c) 2005 - 2009 Holger Zuleger hznet.de
-**
-** Copyright (c) 2005 - 2009, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-# include <stdio.h>
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "config_zkt.h"
-#include "zconf.h"
-#define extern
-#include "nscomm.h"
-#undef extern
-
-
-/*****************************************************************
-** dyn_update_freeze ()
-*****************************************************************/
-int dyn_update_freeze (const char *domain, const zconf_t *z, int freeze)
-{
- char cmdline[254+1];
- char str[254+1];
- char *action;
- FILE *fp;
-
- assert (z != NULL);
- if ( freeze )
- action = "freeze";
- else
- action = "thaw";
-
- if ( z->view )
- snprintf (str, sizeof (str), "\"%s\" in view \"%s\"", domain, z->view);
- else
- snprintf (str, sizeof (str), "\"%s\"", domain);
-
- lg_mesg (LG_NOTICE, "%s: %s dynamic zone", str, action);
- verbmesg (1, z, "\t%s dynamic zone %s\n", action, str);
-
- if ( z->view )
- snprintf (cmdline, sizeof (cmdline), "%s %s %s IN %s", RELOADCMD, action, domain, z->view);
- else
- snprintf (cmdline, sizeof (cmdline), "%s %s %s", RELOADCMD, action, domain);
-
- verbmesg (2, z, "\t Run cmd \"%s\"\n", cmdline);
- *str = '\0';
- if ( z->noexec == 0 )
- {
- if ( (fp = popen (cmdline, "r")) == NULL || fgets (str, sizeof str, fp) == NULL )
- return -1;
- pclose (fp);
- }
-
- verbmesg (2, z, "\t rndc %s return: \"%s\"\n", action, str_chop (str, '\n'));
-
- return 0;
-}
-
-/*****************************************************************
-** distribute and reload a zone via "distribute_command"
-** what is
-** 1 for zone distribution and relaod
-** 2 for key distribution (used by dynamic zoes)
-*****************************************************************/
-int dist_and_reload (const zone_t *zp, int what)
-{
- char path[MAX_PATHSIZE+1];
- char cmdline[254+1];
- char zone[254+1];
- char str[254+1];
- char *view;
- FILE *fp;
-
- assert (zp != NULL);
- assert (zp->conf->dist_cmd != NULL);
- assert ( what == 1 || what == 2 );
-
- if ( zp->conf->dist_cmd == NULL )
- return 0;
-
- if ( !is_exec_ok (zp->conf->dist_cmd) )
- {
- char *mesg;
-
- if ( getuid () == 0 )
- mesg = "\tDistribution command %s not run as root\n";
- else
- mesg = "\tDistribution command %s not run due to strange file mode settings\n";
-
- verbmesg (1, zp->conf, mesg, zp->conf->dist_cmd);
- lg_mesg (LG_ERROR, "exec of distribution command %s disabled due to security reasons", zp->conf->dist_cmd);
-
- return -1;
- }
-
- view = ""; /* default is an empty view string */
- if ( zp->conf->view )
- {
- snprintf (zone, sizeof (zone), "\"%s\" in view \"%s\"", zp->zone, zp->conf->view);
- view = zp->conf->view;
- }
- else
- snprintf (zone, sizeof (zone), "\"%s\"", zp->zone);
-
-
- if ( what == 2 )
- {
- lg_mesg (LG_NOTICE, "%s: key distribution triggered", zone);
- verbmesg (1, zp->conf, "\tDistribute keys for zone %s\n", zone);
- snprintf (cmdline, sizeof (cmdline), "%s distkeys %s %s %s",
- zp->conf->dist_cmd, zp->zone, path, view);
- *str = '\0';
- if ( zp->conf->noexec == 0 )
- {
- verbmesg (2, zp->conf, "\t Run cmd \"%s\"\n", cmdline);
- if ( (fp = popen (cmdline, "r")) == NULL || fgets (str, sizeof str, fp) == NULL )
- return -2;
- pclose (fp);
- verbmesg (2, zp->conf, "\t %s distribute return: \"%s\"\n", zp->conf->dist_cmd, str_chop (str, '\n'));
- }
-
- return 0;
- }
-
- pathname (path, sizeof (path), zp->dir, zp->sfile, NULL);
-
- lg_mesg (LG_NOTICE, "%s: distribution triggered", zone);
- verbmesg (1, zp->conf, "\tDistribute zone %s\n", zone);
- snprintf (cmdline, sizeof (cmdline), "%s distribute %s %s %s", zp->conf->dist_cmd, zp->zone, path, view);
-
- *str = '\0';
- if ( zp->conf->noexec == 0 )
- {
- verbmesg (2, zp->conf, "\t Run cmd \"%s\"\n", cmdline);
- if ( (fp = popen (cmdline, "r")) == NULL || fgets (str, sizeof str, fp) == NULL )
- return -2;
- pclose (fp);
- verbmesg (2, zp->conf, "\t %s distribute return: \"%s\"\n", zp->conf->dist_cmd, str_chop (str, '\n'));
- }
-
-
- lg_mesg (LG_NOTICE, "%s: reload triggered", zone);
- verbmesg (1, zp->conf, "\tReload zone %s\n", zone);
- snprintf (cmdline, sizeof (cmdline), "%s reload %s %s %s", zp->conf->dist_cmd, zp->zone, path, view);
-
- *str = '\0';
- if ( zp->conf->noexec == 0 )
- {
- verbmesg (2, zp->conf, "\t Run cmd \"%s\"\n", cmdline);
- if ( (fp = popen (cmdline, "r")) == NULL || fgets (str, sizeof str, fp) == NULL )
- return -2;
- pclose (fp);
- verbmesg (2, zp->conf, "\t %s reload return: \"%s\"\n", zp->conf->dist_cmd, str_chop (str, '\n'));
- }
-
- return 0;
-}
-
-/*****************************************************************
-** reload a zone via "rndc"
-*****************************************************************/
-int reload_zone (const char *domain, const zconf_t *z)
-{
- char cmdline[254+1];
- char str[254+1];
- FILE *fp;
-
- assert (z != NULL);
- dbg_val3 ("reload_zone %d :%s: :%s:\n", z->verbosity, domain, z->view);
- if ( z->view )
- snprintf (str, sizeof (str), "\"%s\" in view \"%s\"", domain, z->view);
- else
- snprintf (str, sizeof (str), "\"%s\"", domain);
-
- lg_mesg (LG_NOTICE, "%s: reload triggered", str);
- verbmesg (1, z, "\tReload zone %s\n", str);
-
- if ( z->view )
- snprintf (cmdline, sizeof (cmdline), "%s reload %s IN %s", RELOADCMD, domain, z->view);
- else
- snprintf (cmdline, sizeof (cmdline), "%s reload %s", RELOADCMD, domain);
-
- *str = '\0';
- if ( z->noexec == 0 )
- {
- verbmesg (2, z, "\t Run cmd \"%s\"\n", cmdline);
- if ( (fp = popen (cmdline, "r")) == NULL || fgets (str, sizeof str, fp) == NULL )
- return -1;
- pclose (fp);
- verbmesg (2, z, "\t rndc reload return: \"%s\"\n", str_chop (str, '\n'));
- }
-
- return 0;
-}
diff --git a/contrib/zkt-1.1.3/nscomm.h b/contrib/zkt-1.1.3/nscomm.h
deleted file mode 100644
index 8dd11636..00000000
--- a/contrib/zkt-1.1.3/nscomm.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*****************************************************************
-**
-** @(#) nscomm.h (c) 2005 - 2009 Holger Zuleger hznet.de
-**
-** Copyright (c) 2005 - 2009, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-#ifndef NSCOMM_H
-# define NSCOMM_H
-# include <assert.h>
-# include <unistd.h>
-# include <sys/types.h>
-
-# include "zconf.h"
-# include "zone.h"
-# include "log.h"
-# include "misc.h"
-# include "debug.h"
-
-extern int dyn_update_freeze (const char *domain, const zconf_t *z, int freeze);
-extern int reload_zone (const char *domain, const zconf_t *z);
-extern int dist_and_reload (const zone_t *zp, int what);
-#endif
diff --git a/contrib/zkt-1.1.3/rollover.c b/contrib/zkt-1.1.3/rollover.c
deleted file mode 100644
index aaf86985..00000000
--- a/contrib/zkt-1.1.3/rollover.c
+++ /dev/null
@@ -1,731 +0,0 @@
-/*****************************************************************
-**
-** @(#) rollover.c -- The key rollover functions
-**
-** Copyright (c) Jan 2005 - May 2008, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-# include <stdio.h>
-# include <string.h>
-# include <stdlib.h>
-# include <ctype.h>
-# include <time.h>
-# include <assert.h>
-# include <dirent.h>
-# include <errno.h>
-# include <unistd.h>
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-# include "config_zkt.h"
-# include "zconf.h"
-# include "debug.h"
-
-# include "misc.h"
-# include "zone.h"
-# include "dki.h"
-# include "log.h"
-#define extern
-# include "rollover.h"
-#undef extern
-
-/*****************************************************************
-** local function definition
-*****************************************************************/
-
-static dki_t *genkey (int addkey, dki_t **listp, const char *dir, const char *domain, int ksk, const zconf_t *conf, int status);
-
-/* generate the first (or primary) key (algorithm k_algo) */
-static dki_t *genfirstkey (dki_t **listp, const char *dir, const char *domain, int ksk, const zconf_t *conf, int status)
-{
- return genkey (0, listp, dir, domain, ksk, conf, status);
-}
-
-/* generate the additional (or second) key (algorithm k2_algo) */
-static dki_t *genaddkey (dki_t **listp, const char *dir, const char *domain, int ksk, const zconf_t *conf, int status)
-{
- return genkey (1, listp, dir, domain, ksk, conf, status);
-}
-
-
-/* generate a DNSKEY key */
-static dki_t *genkey (int addkey, dki_t **listp, const char *dir, const char *domain, int ksk, const zconf_t *conf, int status)
-{
- dki_t *dkp;
- int confalgo;
- int algo;
-
-#if 0
- if ( listp == NULL || domain == NULL )
- return NULL;
-#else
- assert ( listp != NULL );
- assert ( domain != NULL );
-#endif
-
- if ( addkey ) /* generating an additional key ? */
- confalgo = conf->k2_algo;
- else
- confalgo = conf->k_algo;
-
- algo = confalgo;
- if ( conf->nsec3 != NSEC3_OFF ) /* is nsec3 turned on ? */
- {
- if ( confalgo == DK_ALGO_RSASHA1 )
- algo = DK_ALGO_NSEC3RSASHA1;
- else if ( confalgo == DK_ALGO_DSA )
- algo = DK_ALGO_NSEC3DSA;
- }
-
- if ( ksk )
- dkp = dki_new (dir, domain, DKI_KSK, algo, conf->k_bits, conf->k_random, conf->k_life / DAYSEC);
- else
- dkp = dki_new (dir, domain, DKI_ZSK, algo, conf->z_bits, conf->z_random, conf->z_life / DAYSEC);
- dki_add (listp, dkp);
- dki_setstatus (dkp, status);
-
- return dkp;
-}
-
-/* get expiration time */
-static time_t get_exptime (dki_t *key, const zconf_t *z)
-{
- time_t exptime;
-
- exptime = dki_exptime (key);
- if ( exptime == 0L )
- {
- if ( dki_lifetime (key) )
- exptime = dki_time (key) + dki_lifetime (key);
- else
- exptime = dki_time (key) + z->k_life;
- }
-
- return exptime;
-}
-
-/*****************************************************************
-** is_parentdirsigned (name)
-** Check if the parent directory of the zone specified by zp
-** is a directory with a signed zone
-** Returns 0 | 1
-*****************************************************************/
-static int is_parentdirsigned (const zone_t *zonelist, const zone_t *zp)
-{
- char path[MAX_PATHSIZE+1];
- const char *ext;
-#if 0
- const zconf_t *conf;
-
- /* check if there is a local config file to get the name of the zone file */
- snprintf (path, sizeof (path), "%s/../%s", zp->dir, LOCALCONF_FILE);
- if ( fileexist (path) ) /* parent dir has local config file ? */
- conf = loadconfig (path, NULL);
- else
- conf = zp->conf;
-
- /* build the path of the .signed zone file */
- snprintf (path, sizeof (path), "%s/../%s.signed", conf->dir, conf->zonefile);
- if ( conf != zp->conf ) /* if we read in a local config file.. */
- free (conf); /* ..free the memory used */
-
-#else
- /* currently we use the signed zone file name of the
- * current directory for checking if the file exist.
- * TODO: Instead we have to use the name of the zone file
- * used in the parent dir (see above)
- */
-
- ext = strrchr (zp->sfile, '.');
- if ( ext && strcmp (zp->sfile, ".dsigned") == 0 ) /* is the current zone a dynamic one ? */
- /* hack: we are using the standard zone file name for a static zone here */
- snprintf (path, sizeof (path), "%s/../%s", zp->dir, "zone.db.signed");
- else
- {
-# if 1
- const zone_t *parent;
- const char *parentname;
-
- /* find out name of parent */
- parentname = strchr (zp->zone, '.'); /* find first dot in zone name */
- if ( parentname == NULL ) /* no parent found! */
- return 0;
- parentname += 1; /* skip '.' */
-
- /* try to find parent zone in zonelist */
- if ( (parent = zone_search (zonelist, parentname)) == NULL )
- return 0;
- snprintf (path, sizeof (path), "%s/%s", parent->dir, parent->sfile);
-# else
- snprintf (path, sizeof (path), "%s/../%s", zp->dir, zp->sfile);
-# endif
- }
-#endif
-lg_mesg (LG_DEBUG, "%s: is_parentdirsigned = %d fileexist (%s)\n", zp->zone, fileexist (path), path);
- return fileexist (path); /* parent dir has zone.db.signed file ? */
-}
-
-/*****************************************************************
-** create_parent_file ()
-*****************************************************************/
-static int create_parent_file (const char *fname, int phase, int ttl, const dki_t *dkp)
-{
- FILE *fp;
-
- assert ( fname != NULL );
-
- if ( dkp == NULL || (phase != 1 && phase != 2) )
- return 0;
-
- if ( (fp = fopen (fname, "w")) == NULL )
- fatal ("can\'t create new parentfile \"%s\"\n", fname);
-
- if ( phase == 1 )
- fprintf (fp, "; KSK rollover phase1 (new key generated but this is alread the old one)\n");
- else
- fprintf (fp, "; KSK rollover phase2 (this is the new key)\n");
-
- dki_prt_dnskeyttl (dkp, fp, ttl);
- fclose (fp);
-
- return phase;
-}
-
-/*****************************************************************
-** get_parent_phase ()
-*****************************************************************/
-static int get_parent_phase (const char *file)
-{
- FILE *fp;
- int phase;
-
- if ( (fp = fopen (file, "r")) == NULL )
- return -1;
-
- phase = 0;
- if ( fscanf (fp, "; KSK rollover phase%d", &phase) != 1 )
- phase = 0;
-
- fclose (fp);
- return phase;
-}
-
-/*****************************************************************
-** kskrollover ()
-*****************************************************************/
-static int kskrollover (dki_t *ksk, zone_t *zonelist, zone_t *zp)
-{
- char path[MAX_PATHSIZE+1];
- const zconf_t *z;
- time_t lifetime;
- time_t currtime;
- time_t age;
- int currphase;
- int parfile_age;
- int parent_propagation;
- int parent_resign;
- int parent_keyttl;
-
-
- assert ( ksk != NULL );
- assert ( zp != NULL );
-
- z = zp->conf;
- /* check ksk lifetime */
- if ( (lifetime = dki_lifetime (ksk)) == 0 ) /* if lifetime of key is not set.. */
- lifetime = z->k_life; /* ..use global configured lifetime */
-
- currtime = time (NULL);
- age = dki_age (ksk, currtime);
-
- /* build path of parent-file */
- pathname (path, sizeof (path), zp->dir, "parent-", zp->zone);
-
- /* check if we have to change the ksk ? */
- if ( lifetime > 0 && age > lifetime && !fileexist (path) ) /* lifetime is over and no kskrollover in progress */
- {
- /* we are in hierachical mode and the parent directory contains a signed zone ? */
- if ( z->keysetdir && strcmp (z->keysetdir, "..") == 0 && is_parentdirsigned (zonelist, zp) )
- {
- verbmesg (2, z, "\t\tkskrollover: create new key signing key\n");
- /* create a new key: this is phase one of a double signing key rollover */
- ksk = genfirstkey (&zp->keys, zp->dir, zp->zone, DKI_KSK, z, DKI_ACTIVE);
- if ( ksk == NULL )
- {
- lg_mesg (LG_ERROR, "\"%s\": unable to generate new ksk for double signing rollover", zp->zone);
- return 0;
- }
- lg_mesg (LG_INFO, "\"%s\": kskrollover phase1: New key %d generated", zp->zone, ksk->tag);
-
- /* find the oldest active ksk to create the parent file */
- if ( (ksk = (dki_t *)dki_findalgo (zp->keys, DKI_KSK, zp->conf->k_algo, 'a', 1)) == NULL )
- lg_mesg (LG_ERROR, "kskrollover phase1: Couldn't find the old active key\n");
- if ( !create_parent_file (path, 1, z->key_ttl, ksk) )
- lg_mesg (LG_ERROR, "Couldn't create parentfile %s\n", path);
-
- }
- else /* print out a warning only */
- {
- logmesg ("\t\tWarning: Lifetime of Key Signing Key %d exceeded: %s\n",
- ksk->tag, str_delspace (age2str (age)));
- lg_mesg (LG_WARNING, "\"%s\": lifetime of key signing key %d exceeded since %s",
- zp->zone, ksk->tag, str_delspace (age2str (age - lifetime)));
- }
- return 1;
- }
-
- /* now check if there is an ongoing key rollover */
-
- /* check if parent-file already exist */
- if ( !fileexist (path) ) /* no parent-<zone> file found ? */
- return 0; /* ok, that's it */
-
- /* check the ksk rollover phase we are in */
- currphase = get_parent_phase (path); /* this is the actual state we are in */
- parfile_age = file_age (path);
-
- /* TODO: Set these values to the one found in the parent dnssec.conf file */
- parent_propagation = PARENT_PROPAGATION;
- parent_resign = z->resign;
- parent_keyttl = z->key_ttl;
-
- switch ( currphase )
- {
- case 1: /* we are currently in state one (new ksk already generated) */
- if ( parfile_age > z->proptime + z->key_ttl ) /* can we go to phase 2 ? */
- {
- verbmesg (2, z, "\t\tkskrollover: save new ksk in parent file\n");
- ksk = ksk->next; /* set ksk to new ksk */
- if ( !create_parent_file (path, currphase+1, z->key_ttl, ksk) )
- lg_mesg (LG_ERROR, "Couldn't create parentfile %s\n", path);
- lg_mesg (LG_INFO, "\"%s\": kskrollover phase2: send new key %d to the parent zone", zp->zone, ksk->tag);
- return 1;
- }
- else
- verbmesg (2, z, "\t\tkskrollover: we are in state 1 and waiting for propagation of the new key (parentfile %dsec < prop %dsec + keyttl %dsec\n", parfile_age, z->proptime, z->key_ttl);
- break;
- case 2: /* we are currently in state two (propagation of new key to the parent) */
-#if 0
- if ( parfile_age >= parent_propagation + parent_resign + parent_keyttl ) /* can we go to phase 3 ? */
-#else
- if ( parfile_age >= parent_propagation + parent_keyttl ) /* can we go to phase 3 ? */
-#endif
- {
- /* remove the parentfile */
- unlink (path);
-
- /* remove oldest key from list and mark file as removed */
- zp->keys = dki_remove (ksk);
-
- // verbmesg (2, z, "kskrollover: remove parentfile and rename old key to k<zone>+<algo>+<tag>.key\n");
- verbmesg (2, z, "\t\tkskrollover: remove parentfile and rename old key to k%s+%03d+%05d.key\n",
- ksk->name, ksk->algo, ksk->tag);
- lg_mesg (LG_INFO, "\"%s\": kskrollover phase3: Remove old key %d", zp->zone, ksk->tag);
- return 1;
- }
- else
-#if 0
- verbmesg (2, z, "\t\tkskrollover: we are in state 2 and waiting for parent propagation (parentfile %d < parentprop %d + parentresig %d + parentkeyttl %d\n", parfile_age, parent_propagation, parent_resign, parent_keyttl);
-#else
- verbmesg (2, z, "\t\tkskrollover: we are in state 2 and waiting for parent propagation (parentfile %dsec < parentprop %dsec + parentkeyttl %dsec\n", parfile_age, parent_propagation, parent_keyttl);
-#endif
- break;
- default:
- assert ( currphase == 1 || currphase == 2 );
- /* NOTREACHED */
- }
-
- return 0;
-}
-
-/*****************************************************************
-** global function definition
-*****************************************************************/
-
-/*****************************************************************
-** ksk5011status ()
-** Check if the list of zone keys containing a revoked or a
-** standby key.
-** Remove the revoked key if it is older than 30 days.
-** If the lifetime of the active key is reached, do a rfc5011
-** keyrollover.
-** Returns an int with the rightmost bit set if a resigning
-** is required. The second rightmost bit is set, if it is an
-** rfc5011 zone.
-*****************************************************************/
-int ksk5011status (dki_t **listp, const char *dir, const char *domain, const zconf_t *z)
-{
- dki_t *standbykey;
- dki_t *activekey;
- dki_t *dkp;
- dki_t *prev;
- time_t currtime;
- time_t exptime;
- int ret;
-
- assert ( listp != NULL );
- assert ( z != NULL );
-
- if ( z->k_life == 0 )
- return 0;
-
- verbmesg (1, z, "\tCheck RFC5011 status\n");
-
- ret = 0;
- currtime = time (NULL);
-
- /* go through the list of key signing keys, */
- /* remove revoked keys and set a pointer to standby and active key */
- standbykey = activekey = NULL;
- prev = NULL;
- for ( dkp = *listp; dkp && dki_isksk (dkp); dkp = dkp->next )
- {
- exptime = get_exptime (dkp, z);
- if ( dki_isrevoked (dkp) )
- lg_mesg (LG_DEBUG, "zone \"%s\": found revoked key (id=%d exptime=%s); waiting for remove hold down time",
- domain, dkp->tag, time2str (exptime, 's'));
-
- /* revoked key is older than 30 days? */
- if ( dki_isrevoked (dkp) && currtime > exptime + REMOVE_HOLD_DOWN )
- {
- verbmesg (1, z, "\tRemove revoked key %d which is older than 30 days\n", dkp->tag);
- lg_mesg (LG_NOTICE, "zone \"%s\": removing revoked key %d", domain, dkp->tag);
-
- /* remove key from list and mark file as removed */
- if ( prev == NULL ) /* at the beginning of the list ? */
- *listp = dki_remove (dkp);
- else /* anywhere in the middle of the list */
- prev->next = dki_remove (dkp);
-
- ret |= 01; /* from now on a resigning is necessary */
- }
-
- /* remember oldest standby and active key */
- if ( dki_status (dkp) == DKI_PUBLISHED )
- standbykey = dkp;
- if ( dki_status (dkp) == DKI_ACTIVE )
- activekey = dkp;
- }
- /* no activekey or no standby key and also no revoked key found ? */
- if ( activekey == NULL || (standbykey == NULL && ret == 0) )
- return ret; /* Seems that this is a non rfc5011 zone! */
-
- ret |= 02; /* Zone looks like a rfc5011 zone */
-
- exptime = get_exptime (activekey, z);
-#if 0
- lg_mesg (LG_DEBUG, "Act Exptime: %s", time2str (exptime, 's'));
- lg_mesg (LG_DEBUG, "Stb time: %s", time2str (dki_time (standbykey), 's'));
- lg_mesg (LG_DEBUG, "Stb time+wait: %s", time2str (dki_time (standbykey) + min (DAYSEC * 30, z->key_ttl), 's'));
-#endif
- /* At the first time we introduce a standby key, the lifetime of the current KSK shouldn't be expired, */
- /* otherwise we run into an (nearly) immediate key rollover! */
- if ( currtime > exptime && currtime > dki_time (standbykey) + min (ADD_HOLD_DOWN, z->key_ttl) )
- {
- lg_mesg (LG_NOTICE, "\"%s\": starting rfc5011 rollover", domain);
- verbmesg (1, z, "\tLifetime of Key Signing Key %d exceeded (%s): Starting rfc5011 rollover!\n",
- activekey->tag, str_delspace (age2str (dki_age (activekey, currtime))));
- verbmesg (2, z, "\t\t=>Generating new standby key signing key\n");
- dkp = genfirstkey (listp, dir, domain, DKI_KSK, z, DKI_PUBLISHED); /* gentime == now; lifetime = z->k_life; exp = 0 */
- if ( !dkp )
- {
- error ("\tcould not generate new standby KSK\n");
- lg_mesg (LG_ERROR, "\%s\": can't generate new standby KSK", domain);
- }
- else
- lg_mesg (LG_NOTICE, "\"%s\": generated new standby KSK %d", domain, dkp->tag);
-
- /* standby key gets active */
- verbmesg (2, z, "\t\t=>Activating old standby key %d \n", standbykey->tag);
- dki_setstatus (standbykey, DKI_ACT);
-
- /* active key should be revoked */
- verbmesg (2, z, "\t\t=>Revoking old active key %d \n", activekey->tag);
- dki_setstatus (activekey, DKI_REVOKED);
- dki_setexptime (activekey, currtime); /* now the key is expired */
-
- ret |= 01; /* resigning necessary */
- }
-
- return ret;
-}
-
-/*****************************************************************
-** kskstatus ()
-** Check the ksk status of a zone if a ksk lifetime is set.
-** If there is no key signing key present create a new one.
-** Prints out a warning message if the lifetime of the current
-** key signing key is over.
-** Returns 1 if a resigning of the zone is necessary, otherwise
-** the function returns 0.
-*****************************************************************/
-int kskstatus (zone_t *zonelist, zone_t *zp)
-{
- dki_t *akey;
- const zconf_t *z;
-
- assert ( zp != NULL );
-
- z = zp->conf;
- if ( z->k_life == 0 )
- return 0;
-
- verbmesg (1, z, "\tCheck KSK status\n");
- /* check if a key signing key exist ? */
- akey = (dki_t *)dki_findalgo (zp->keys, DKI_KSK, z->k_algo, 'a', 1);
- if ( akey == NULL )
- {
- verbmesg (1, z, "\tNo active KSK found: generate new one\n");
- akey = genfirstkey (&zp->keys, zp->dir, zp->zone, DKI_KSK, z, DKI_ACTIVE);
- if ( !akey )
- {
- error ("\tcould not generate new KSK\n");
- lg_mesg (LG_ERROR, "\"%s\": can't generate new KSK: \"%s\"",
- zp->zone, dki_geterrstr());
- }
- else
- lg_mesg (LG_INFO, "\"%s\": generated new KSK %d", zp->zone, akey->tag);
- return akey != NULL; /* return value of 1 forces a resigning of the zone */
- }
- else /* try to start a full automated ksk rollover */
- kskrollover (akey, zonelist, zp);
-
- /* is a second algorithm requested ? (since 0.99) */
- if ( z->k2_algo && z->k2_algo != z->k_algo )
- {
- /* check for ksk supporting the additional algorithm */
- akey = (dki_t *)dki_findalgo (zp->keys, DKI_KSK, z->k2_algo, 'a', 1);
- if ( akey == NULL )
- {
- verbmesg (1, z, "\tNo active KSK for additional algorithm found: generate new one\n");
- akey = genaddkey (&zp->keys, zp->dir, zp->zone, DKI_KSK, z, DKI_ACTIVE);
- if ( !akey )
- {
- error ("\tcould not generate new KSK for additional algorithm\n");
- lg_mesg (LG_ERROR, "\"%s\": can't generate new KSK for 2nd algorithm: \"%s\"",
- zp->zone, dki_geterrstr());
- }
- else
- lg_mesg (LG_INFO, "\"%s\": generated new KSK %d for additional algorithm",
- zp->zone, akey->tag);
- return 1; /* return value of 1 forces a resigning of the zone */
- }
- }
-
- return 0;
-}
-
-/*****************************************************************
-** zskstatus ()
-** Check the zsk status of a zone.
-** Returns 1 if a resigning of the zone is necessary, otherwise
-** the function returns 0.
-*****************************************************************/
-int zskstatus (dki_t **listp, const char *dir, const char *domain, const zconf_t *z)
-{
- dki_t *akey;
- dki_t *nextkey;
- dki_t *dkp, *last;
- int keychange;
- time_t lifetime;
- time_t age;
- time_t currtime;
-
- assert ( listp != NULL );
- /* dir can be NULL */
- assert ( domain != NULL );
- assert ( z != NULL );
-
- currtime = time (NULL);
-
- verbmesg (1, z, "\tCheck ZSK status\n");
- dbg_val("zskstatus for %s \n", domain);
- keychange = 0;
- /* Is the depreciated key expired ? */
- /* As mentioned by olaf, this is the max_ttl of all the rr in the zone */
- lifetime = z->max_ttl + z->proptime; /* draft kolkman/gieben */
- last = NULL;
- dkp = *listp;
- while ( dkp )
- if ( !dki_isksk (dkp) &&
- dki_status (dkp) == DKI_DEPRECIATED &&
- dki_age (dkp, currtime) > lifetime )
- {
- keychange = 1;
- verbmesg (1, z, "\tLifetime(%d sec) of depreciated key %d exceeded (%d sec)\n",
- lifetime, dkp->tag, dki_age (dkp, currtime));
- lg_mesg (LG_INFO, "\"%s\": old ZSK %d removed", domain, dkp->tag);
- dkp = dki_destroy (dkp); /* delete the keyfiles */
- dbg_msg("zskstatus: depreciated key removed ");
- if ( last )
- last->next = dkp;
- else
- *listp = dkp;
- verbmesg (1, z, "\t\t->remove it\n");
- }
- else
- {
- last = dkp;
- dkp = dkp->next;
- }
-
- /* check status of active key */
- dbg_msg("zskstatus check status of active key ");
- lifetime = z->z_life; /* global configured lifetime for zsk */
- akey = (dki_t *)dki_findalgo (*listp, DKI_ZSK, z->k_algo, 'a', 1);
- if ( akey == NULL && lifetime > 0 ) /* no active key found */
- {
- verbmesg (1, z, "\tNo active ZSK found: generate new one\n");
- akey = genfirstkey (listp, dir, domain, DKI_ZSK, z, DKI_ACTIVE);
- if ( !akey )
- {
- error ("\tcould not generate new ZSK\n");
- lg_mesg (LG_ERROR, "\%s\": can't generate new ZSK", domain);
- }
- else
- lg_mesg (LG_INFO, "\"%s\": generated new ZSK %d", domain, akey->tag);
- }
- else /* active key exist */
- {
- if ( dki_lifetime (akey) )
- lifetime = dki_lifetime (akey); /* set lifetime to lt of active key */
-
- /* lifetime of active key is expired and published key exist ? */
- age = dki_age (akey, currtime);
- if ( lifetime > 0 && age > lifetime - (OFFSET) )
- {
- verbmesg (1, z, "\tLifetime(%d +/-%d sec) of active key %d exceeded (%d sec)\n",
- lifetime, (OFFSET) , akey->tag, dki_age (akey, currtime) );
-
- /* depreciate the key only if there is another active or published key */
- if ( (nextkey = (dki_t *)dki_findalgo (*listp, DKI_ZSK, z->k_algo, 'a', 2)) == NULL ||
- nextkey == akey )
- nextkey = (dki_t *)dki_findalgo (*listp, DKI_ZSK, z->k_algo, 'p', 1);
-
- /* Is the published key sufficient long in the zone ? */
- /* As mentioned by Olaf, this should be the ttl of the DNSKEY RR ! */
- if ( nextkey && dki_age (nextkey, currtime) > z->key_ttl + z->proptime )
- {
- keychange = 1;
- verbmesg (1, z, "\t\t->depreciate it\n");
- dki_setstatus (akey, 'd'); /* depreciate the active key */
- verbmesg (1, z, "\t\t->activate published key %d\n", nextkey->tag);
- dki_setstatus (nextkey, 'a'); /* activate published key */
- lg_mesg (LG_NOTICE, "\"%s\": lifetime of zone signing key %d exceeded: ZSK rollover done", domain, akey->tag);
- akey = nextkey;
- nextkey = NULL;
- lifetime = dki_lifetime (akey); /* set lifetime to lt of the new active key (F. Behrens) */
- }
- else
- {
- verbmesg (1, z, "\t\t->waiting for published key\n");
- lg_mesg (LG_NOTICE, "\"%s\": lifetime of zone signing key %d exceeded since %s: ZSK rollover deferred: waiting for published key",
- domain, akey->tag, str_delspace (age2str (age - lifetime)));
- }
- }
- }
-
- /* Should we add a new publish key? */
- nextkey = (dki_t *)dki_findalgo (*listp, DKI_ZSK, z->k_algo, 'p', 1); /* is there a published ZSK? */
-#if defined(ALLOW_ALWAYS_PREPUBLISH_ZSK) && ALLOW_ALWAYS_PREPUBLISH_ZSK
- if ( z->z_always ) /* always add a pre-publish ZSK (patch from Hrant Dadivanyan) */
- {
- if ( nextkey == NULL )
- {
- verbmesg (1, z, "\tNew key for pre-publishing needed\n");
- nextkey = genfirstkey (listp, dir, domain, DKI_ZSK, z, DKI_PUB);
- if ( nextkey )
- {
- keychange = 1;
- verbmesg (1, z, "\t\t->creating new key %d\n", nextkey->tag);
- lg_mesg (LG_INFO, "\"%s\": new key %d generated for pre-publishing", domain, nextkey->tag);
- }
- else
- {
- error ("\tcould not generate new ZSK: \"%s\"\n", dki_geterrstr());
- lg_mesg (LG_ERROR, "\"%s\": can't generate new ZSK: \"%s\"",
- domain, dki_geterrstr());
- }
- }
- }
- else /* do we need a new ZSK ? */
-#endif
- {
- /* This is necessary if the active key will be expired at the
- * next re-signing interval (The published time will be checked
- * just before the active key will be removed. See above).
- */
- if ( nextkey == NULL && lifetime > 0 && (akey == NULL ||
- dki_age (akey, currtime + z->resign) > lifetime - (OFFSET)) )
- {
- verbmesg (1, z, "\tNew ZSK for publishing needed\n");
- nextkey = genfirstkey (listp, dir, domain, DKI_ZSK, z, DKI_PUB);
- if ( nextkey )
- {
- keychange = 1;
- verbmesg (1, z, "\t\t->creating new key %d\n", nextkey->tag);
- lg_mesg (LG_INFO, "\"%s\": new zone signing key %d generated for publishing", domain, nextkey->tag);
- }
- else
- {
- error ("\tcould not generate new ZSK: \"%s\"\n", dki_geterrstr());
- lg_mesg (LG_ERROR, "\"%s\": can't generate new ZSK: \"%s\"",
- domain, dki_geterrstr());
- }
- }
- }
-
- /* is a second algorithm requested ? (since 0.99) */
- if ( z->k2_algo && z->k2_algo != z->k_algo )
- {
- /* check for zsk supporting the additional algorithm */
- akey = (dki_t *)dki_findalgo (*listp, DKI_ZSK, z->k2_algo, 'a', 1);
- if ( akey == NULL )
- {
- verbmesg (1, z, "\tNo active ZSK for second algorithm found: generate new one\n");
- akey = genaddkey (listp, dir, domain, DKI_ZSK, z, DKI_ACTIVE);
- if ( !akey )
- {
- error ("\tcould not generate new ZSK for 2nd algorithm\n");
- lg_mesg (LG_ERROR, "\"%s\": can't generate new ZSK for 2nd algorithm: \"%s\"",
- domain, dki_geterrstr());
- }
- else
- lg_mesg (LG_INFO, "\"%s\": generated new ZSK %d for 2nd algorithm",
- domain, akey->tag);
- return 1; /* return value of 1 forces a resigning of the zone */
- }
- }
-
- return keychange;
-}
-
diff --git a/contrib/zkt-1.1.3/rollover.h b/contrib/zkt-1.1.3/rollover.h
deleted file mode 100644
index 9bd3c909..00000000
--- a/contrib/zkt-1.1.3/rollover.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*****************************************************************
-**
-** @(#) rollover.h (c) 2005 - 2008 Holger Zuleger hznet.de
-**
-** Copyright (c) 2005 - 2008, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-#ifndef ROLLOVER_H
-# define ROLLOVER_H
-# include <sys/types.h>
-# include <stdarg.h>
-# include <stdio.h>
-
-#ifndef ZCONF_H
-# include "zconf.h"
-#endif
-
-# define OFFSET ((int) (2.5 * MINSEC))
-# define PARENT_PROPAGATION (5 * MINSEC)
-# define ADD_HOLD_DOWN (30 * DAYSEC)
-# define REMOVE_HOLD_DOWN (30 * DAYSEC)
-
-extern int ksk5011status (dki_t **listp, const char *dir, const char *domain, const zconf_t *z);
-extern int kskstatus (zone_t *zonelist, zone_t *zp);
-extern int zskstatus (dki_t **listp, const char *dir, const char *domain, const zconf_t *z);
-#endif
diff --git a/contrib/zkt-1.1.3/soaserial.c b/contrib/zkt-1.1.3/soaserial.c
deleted file mode 100644
index 1efd3d61..00000000
--- a/contrib/zkt-1.1.3/soaserial.c
+++ /dev/null
@@ -1,331 +0,0 @@
-/*****************************************************************
-**
-** @(#) soaserial.c -- helper function for the dnssec zone key tools
-**
-** Copyright (c) Jan 2005, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-# include <stdio.h>
-# include <string.h>
-# include <stdlib.h>
-# include <ctype.h>
-# include <sys/types.h>
-# include <sys/stat.h>
-# include <time.h>
-# include <utime.h>
-# include <assert.h>
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-# include "config_zkt.h"
-# include "zconf.h"
-# include "log.h"
-# include "debug.h"
-#define extern
-# include "soaserial.h"
-#undef extern
-
-static int inc_soa_serial (FILE *fp, int use_unixtime);
-static int is_soa_rr (const char *line);
-static const char *strfindstr (const char *str, const char *search);
-
-
-/****************************************************************
-**
-** int inc_serial (filename, use_unixtime)
-**
-** This function depends on a special syntax formating the
-** SOA record in the zone file!!
-**
-** To match the SOA record, the SOA RR must be formatted
-** like this:
-** @ [ttl] IN SOA <master.fq.dn.> <hostmaster.fq.dn.> (
-** <SPACEes or TABs> 1234567890; serial number
-** <SPACEes or TABs> 86400 ; other values
-** ...
-** The space from the first digit of the serial number to
-** the first none white space char or to the end of the line
-** must be at least 10 characters!
-** So you have to left justify the serial number in a field
-** of at least 10 characters like this:
-** <SPACEes or TABs> 1 ; Serial
-**
-** Since ZKT 1.1.0 single line SOA records are also supported
-**
-****************************************************************/
-int inc_serial (const char *fname, int use_unixtime)
-{
- FILE *fp;
- char buf[4095+1];
- int error;
- int serial_pos;
-
- /**
- since BIND 9.4, there is a dnssec-signzone option available for
- serial number increment.
- If the user requests "unixtime"; then use this mechanism.
- **/
- if ( use_unixtime )
- return 0;
-
- if ( (fp = fopen (fname, "r+")) == NULL )
- return -1;
-
- /* read until the line matches the beginning of a soa record ... */
- while ( fgets (buf, sizeof buf, fp) )
- {
- dbg_val ("inc_serial() checking line for SOA RR \"%s\"\n", buf);
- serial_pos = is_soa_rr (buf);
- if ( serial_pos ) /* SOA record found ? */
- break;
- }
-
- if ( feof (fp) )
- {
- fclose (fp);
- return -2;
- }
- dbg_val ("serial_pos = %d\n", serial_pos);
- if (serial_pos > 1 ) /* if we found a single line SOA RR */
- fseek (fp, -(long)serial_pos, SEEK_CUR); /* go back to the beginning of the line */
-
- error = inc_soa_serial (fp, use_unixtime); /* .. inc soa serial no ... */
- dbg_val ("inc_soa_serial() returns %d\n", error);
-
- if ( fclose (fp) != 0 ) /* close the zone file in any case */
- return -5;
- return error;
-}
-
-#if 0
-/*****************************************************************
-** check if line is the beginning of a SOA RR record, thus
-** containing the string "IN .* SOA" and ends with a '('
-** returns 1 if true
-*****************************************************************/
-static int is_soa_rr (const char *line)
-{
- const char *p;
-
- assert ( line != NULL );
-
- /* line contains "IN" and "SOA" */
- if ( (p = strfindstr (line, "IN")) && strfindstr (p+2, "SOA") )
- {
- p = line + strlen (line) - 1;
- while ( p > line && isspace (*p) )
- p--;
- if ( *p == '(' ) /* last character must be a '(' to start a multi line record */
- return 1;
- }
-
- return 0;
-}
-#else
-/*****************************************************************
-**
-** check if line is the beginning of a SOA RR record, thus
-** containing the string "IN .* SOA" and ends with a '('
-** (multiline record) or is a single line record.
-**
-** returns 1 if it is a multi line record (for compability to
-** the old function) or the position of the serial number
-** field counted from the end of the line
-**
-*****************************************************************/
-static int is_soa_rr (const char *line)
-{
- const char *p;
- const char *soa_p;
-
- assert ( line != NULL );
-
- /* line contains "IN" and "SOA" ? */
- if ( (p = strfindstr (line, "IN")) && (soa_p = strfindstr (p+2, "SOA")) )
- {
- int len = strlen (line);
-
- /* check for multiline record */
- p = line + len - 1;
- while ( p > line && isspace (*p) )
- p--;
- if ( *p == '(' ) /* last character must be a '(' to start a multi line record */
- return 1;
-
- /* line is single line record */
- p = soa_p + 3; /* start just behind the SOA string */
- dbg_val1 ("p = \"%s\"\n", p);
- p += strspn (p, " \t"); /* skip white space */
- p += strcspn (p, " \t"); /* skip primary master */
- p += strspn (p, " \t"); /* skip white space */
- p += strcspn (p, " \t"); /* skip mail address */
- dbg_val1 ("p = \"%s\"\n", p);
-
- dbg_val1 ("is_soa_rr returns = %d\n", (line+len) - p);
- return (line+len) - p; /* position of serial nr from the end of the line */
- }
-
- return 0;
-}
-#endif
-
-/*****************************************************************
-** Find string 'search' in 'str' and ignore case in comparison.
-** returns the position of 'search' in 'str' or NULL if not found.
-*****************************************************************/
-static const char *strfindstr (const char *str, const char *search)
-{
- const char *p;
- int c;
-
- assert ( str != NULL );
- assert ( search != NULL );
-
- c = tolower (*search);
- p = str;
- do {
- while ( *p && tolower (*p) != c )
- p++;
- if ( strncasecmp (p, search, strlen (search)) == 0 )
- return p;
- p++;
- } while ( *p );
-
- return NULL;
-}
-
-/*****************************************************************
-** return the serial number of the given time in the form
-** of YYYYmmdd00 as ulong value
-*****************************************************************/
-static ulong serialtime (time_t sec)
-{
- struct tm *t;
- ulong serialtime;
-
- t = gmtime (&sec);
- serialtime = (t->tm_year + 1900) * 10000;
- serialtime += (t->tm_mon+1) * 100;
- serialtime += t->tm_mday;
- serialtime *= 100;
-
- return serialtime;
-}
-
-/*****************************************************************
-** inc_soa_serial (fp, use_unixtime)
-** increment the soa serial number of the file 'fp'
-** 'fp' must be opened "r+"
-** returns 0 on success or a negative value in case of an error
-*****************************************************************/
-static int inc_soa_serial (FILE *fp, int use_unixtime)
-{
- int c;
- long pos, eos;
- ulong serial;
- int digits;
- ulong today;
-
- /* move forward until any non ws is reached */
- while ( (c = getc (fp)) != EOF && isspace (c) )
- ;
- ungetc (c, fp); /* push back the last char */
-
- pos = ftell (fp); /* mark position */
-
- serial = 0L; /* read in the current serial number */
- /* be aware of the trailing space in the format string !! */
- if ( fscanf (fp, "%lu ", &serial) != 1 ) /* try to get serial no */
- return -3;
- eos = ftell (fp); /* mark first non digit/ws character pos */
-
- digits = eos - pos;
- if ( digits < 10 ) /* not enough space for serial no ? */
- return -4;
-
- today = time (NULL);
- if ( !use_unixtime )
- {
- today = serialtime (today); /* YYYYmmdd00 */
- if ( serial > 1970010100L && serial < today )
- serial = today; /* set to current time */
- serial++; /* increment anyway */
- }
-
- fseek (fp, pos, SEEK_SET); /* go back to the beginning */
- fprintf (fp, "%-*lu", digits, serial); /* write as many chars as before */
-
- return 0; /* yep! */
-}
-
-/*****************************************************************
-** return the error text of the inc_serial return coode
-*****************************************************************/
-const char *inc_errstr (int err)
-{
- switch ( err )
- {
- case -1: return "couldn't open zone file for modifying";
- case -2: return "unexpected end of file";
- case -3: return "no serial number found in zone file";
- case -4: return "not enough space left for serialno";
- case -5: return "error on closing zone file";
- }
- return "";
-}
-
-#ifdef SOA_TEST
-const char *progname;
-main (int argc, char *argv[])
-{
- ulong now;
- int err;
- char cmd[255];
-
- progname = *argv;
-
- now = time (NULL);
- now = serialtime (now);
- printf ("now = %lu\n", now);
-
- if ( (err = inc_serial (argv[1], 0)) < 0 )
- {
- fprintf (stderr, "can't change serial no: errno=%d %s\n",
- err, inc_errstr (err));
- exit (1);
- }
-
- snprintf (cmd, sizeof(cmd), "head -15 %s", argv[1]);
- system (cmd);
-}
-#endif
-
diff --git a/contrib/zkt-1.1.3/soaserial.h b/contrib/zkt-1.1.3/soaserial.h
deleted file mode 100644
index 08e34eec..00000000
--- a/contrib/zkt-1.1.3/soaserial.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*****************************************************************
-**
-** @(#) soserial.h (c) 2005 - 2007 Holger Zuleger hznet.de
-**
-** Copyright (c) 2005 - 2007, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-#ifndef SOASERIAL_H
-# define SOASERIAL_H
-extern int inc_serial (const char *fname, int use_unixtime);
-extern const char *inc_errstr (int err);
-#endif
diff --git a/contrib/zkt-1.1.3/strlist.c b/contrib/zkt-1.1.3/strlist.c
deleted file mode 100644
index 79d04883..00000000
--- a/contrib/zkt-1.1.3/strlist.c
+++ /dev/null
@@ -1,166 +0,0 @@
-/*****************************************************************
-**
-** @(#) strlist.c (c) Mar 2005 Holger Zuleger
-**
-** TODO: Maybe we should use a special type for the list:
-** typedef struct { char cnt; char list[0+1]; } strlist__t;
-** This results in better type control of the function parameters
-**
-** Copyright (c) Mar 2005, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-
-#ifdef TEST
-# include <stdio.h>
-#endif
-#include <string.h>
-#include <stdlib.h>
-#include "strlist.h"
-
-
-/*****************************************************************
-** prepstrlist (str, delim)
-** prepare a string with delimiters to a so called strlist.
-** 'str' is a list of substrings delimited by 'delim'
-** The # of strings is stored at the first byte of the allocated
-** memory. Every substring is stored as a '\0' terminated C-String.
-** The function returns a pointer to dynamic allocated memory
-*****************************************************************/
-char *prepstrlist (const char *str, const char *delim)
-{
- char *p;
- char *new;
- int len;
- int cnt;
-
- if ( str == NULL )
- return NULL;
-
- len = strlen (str);
- if ( (new = malloc (len + 2)) == NULL )
- return new;
-
- cnt = 0;
- p = new;
- for ( *p++ = '\0'; *str; str++ )
- {
- if ( strchr (delim, *str) == NULL )
- *p++ = *str;
- else if ( p[-1] != '\0' )
- {
- *p++ = '\0';
- cnt++;
- }
- }
- *p = '\0'; /*terminate string */
- if ( p[-1] != '\0' )
- cnt++;
- *new = cnt & 0xFF;
-
- return new;
-}
-
-/*****************************************************************
-** isinlist (str, list)
-** check if 'list' contains 'str'
-*****************************************************************/
-int isinlist (const char *str, const char *list)
-{
- int cnt;
-
- if ( list == NULL || *list == '\0' )
- return 1;
- if ( str == NULL || *str == '\0' )
- return 0;
-
- cnt = *list;
- while ( cnt-- > 0 )
- {
- list++;
- if ( strcmp (str, list) == 0 )
- return 1;
- list += strlen (list);
- }
-
- return 0;
-}
-
-/*****************************************************************
-** unprepstrlist (list, delimc)
-*****************************************************************/
-char *unprepstrlist (char *list, char delimc)
-{
- char *p;
- int cnt;
-
- cnt = *list & 0xFF;
- p = list;
- for ( *p++ = delimc; cnt > 1; p++ )
- if ( *p == '\0' )
- {
- *p = delimc;
- cnt--;
- }
-
- return list;
-}
-
-#ifdef TEST
-main (int argc, char *argv[])
-{
- FILE *fp;
- char *p;
- char *searchlist = NULL;
- char group[255];
-
- if ( argc > 1 )
- searchlist = prepstrlist (argv[1], LISTDELIM);
-
- printf ("searchlist: %d entrys: \n", searchlist[0]);
- if ( (fp = fopen ("/etc/group", "r")) == NULL )
- exit (fprintf (stderr, "can't open file\n"));
-
- while ( fscanf (fp, "%[^:]:%*[^\n]\n", group) != EOF )
- if ( isinlist (group, searchlist) )
- printf ("%s\n", group);
-
- fclose (fp);
-
- printf ("searchlist: \"%s\"\n", unprepstrlist (searchlist, *LISTDELIM));
- for ( p = searchlist; *p; p++ )
- if ( *p < 32 )
- printf ("<%d>", *p);
- else
- printf ("%c", *p);
- printf ("\n");
-}
-#endif
diff --git a/contrib/zkt-1.1.3/strlist.h b/contrib/zkt-1.1.3/strlist.h
deleted file mode 100644
index fb873568..00000000
--- a/contrib/zkt-1.1.3/strlist.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*****************************************************************
-**
-** @(#) strlist.h (c) Mar 2005 Holger Zuleger
-**
-** Copyright (c) May 2005 Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-
-#ifndef STRLIST_H
-# define STRLIST_H
-
-# define LISTDELIM " ,:;|^\t"
-
-char *prepstrlist (const char *str, const char *delim);
-int isinlist (const char *str, const char *list);
-char *unprepstrlist (char *list, char delimc);
-#endif
diff --git a/contrib/zkt-1.1.3/tags b/contrib/zkt-1.1.3/tags
deleted file mode 100644
index 761171a8..00000000
--- a/contrib/zkt-1.1.3/tags
+++ /dev/null
@@ -1,444 +0,0 @@
-!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
-!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
-!_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/
-!_TAG_PROGRAM_NAME Exuberant Ctags //
-!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/
-!_TAG_PROGRAM_VERSION 5.9~svn20110310 //
-CONF_ALGO zconf.c /^ CONF_ALGO,$/;" e enum:__anon2 file:
-CONF_BOOL zconf.c /^ CONF_BOOL,$/;" e enum:__anon2 file:
-CONF_COMMENT zconf.c /^ CONF_COMMENT,$/;" e enum:__anon2 file:
-CONF_END zconf.c /^ CONF_END = 0,$/;" e enum:__anon2 file:
-CONF_FACILITY zconf.c /^ CONF_FACILITY,$/;" e enum:__anon2 file:
-CONF_INT zconf.c /^ CONF_INT,$/;" e enum:__anon2 file:
-CONF_LEVEL zconf.c /^ CONF_LEVEL,$/;" e enum:__anon2 file:
-CONF_NSEC3 zconf.c /^ CONF_NSEC3,$/;" e enum:__anon2 file:
-CONF_SERIAL zconf.c /^ CONF_SERIAL,$/;" e enum:__anon2 file:
-CONF_STRING zconf.c /^ CONF_STRING,$/;" e enum:__anon2 file:
-CONF_TIMEINT zconf.c /^ CONF_TIMEINT,$/;" e enum:__anon2 file:
-CONF_VERSION zconf.c /^ CONF_VERSION,$/;" e enum:__anon2 file:
-ISCOMMENT zconf.c 68;" d file:
-ISDELIM zconf.c 70;" d file:
-ISTRUE zconf.c 66;" d file:
-KEYGEN_COMPMODE dki.c 230;" d file:
-KEYSET_FILE_PFX zkt-signer.c 727;" d file:
-KeyWords ncparse.c /^static struct KeyWords {$/;" s file:
-MAXFNAME log.c 98;" d file:
-STRCONFIG_DELIMITER zconf.c 674;" d file:
-TAINTEDCHARS misc.c 60;" d file:
-TOK_DELEGATION ncparse.c 59;" d file:
-TOK_DIR ncparse.c 49;" d file:
-TOK_FILE ncparse.c 62;" d file:
-TOK_FORWARD ncparse.c 58;" d file:
-TOK_HINT ncparse.c 57;" d file:
-TOK_INCLUDE ncparse.c 50;" d file:
-TOK_MASTER ncparse.c 54;" d file:
-TOK_SLAVE ncparse.c 55;" d file:
-TOK_STRING ncparse.c 48;" d file:
-TOK_STUB ncparse.c 56;" d file:
-TOK_TYPE ncparse.c 53;" d file:
-TOK_UNKNOWN ncparse.c 64;" d file:
-TOK_VIEW ncparse.c 60;" d file:
-TOK_ZONE ncparse.c 52;" d file:
-a domaincmp.c /^ char *a;$/;" m struct:__anon1 file:
-add2zonelist zkt-signer.c /^static int add2zonelist (const char *dir, const char *view, const char *zone, const char *file)$/;" f file:
-addkeydb zfparse.c /^int addkeydb (const char *file, const char *keydbfile)$/;" f
-age2str misc.c /^char *age2str (time_t sec)$/;" f
-ageflag zkt-keyman.c /^int ageflag = 0;$/;" v
-ageflag zkt-ls.c /^int ageflag = 0;$/;" v
-allflag zkt-conf.c /^static int allflag = 0;$/;" v file:
-b domaincmp.c /^ char *b;$/;" m struct:__anon1 file:
-bind96_dynzone zkt-signer.c 123;" d file:
-bold_off tcap.c /^static const char *bold_off = "";$/;" v file:
-bold_on tcap.c /^static const char *bold_on = "";$/;" v file:
-bool2str zconf.c /^static const char *bool2str (int val)$/;" f file:
-check_keydb_timestamp zkt-signer.c /^static int check_keydb_timestamp (dki_t *keylist, time_t reftime)$/;" f file:
-checkconfig zconf.c /^int checkconfig (const zconf_t *z)$/;" f
-cmdln zconf.c 73;" d file:
-cmpfile misc.c /^int cmpfile (const char *file1, const char *file2)$/;" f
-colortab tcap.c /^static char colortab[8][31+1];$/;" v file:
-compversion zconf.c /^static int compversion;$/;" v file:
-config zconf.c /^static zconf_t *config;$/;" v file:
-config zkt-signer.c /^static zconf_t *config;$/;" v file:
-confpara zconf.c /^static zconf_para_t confpara[] = {$/;" v file:
-copy_keyset zkt-signer.c /^static void copy_keyset (const char *dir, const char *domain, const zconf_t *conf)$/;" f file:
-copyfile misc.c /^int copyfile (const char *fromfile, const char *tofile, const char *dnskeyfile)$/;" f
-copyzonefile misc.c /^int copyzonefile (const char *fromfile, const char *tofile, const char *dnskeyfile)$/;" f
-create_parent_file rollover.c /^static int create_parent_file (const char *fname, int phase, int ttl, const dki_t *dkp)$/;" f file:
-create_parent_file zkt-keyman.c /^static int create_parent_file (const char *fname, int phase, int ttl, const dki_t *dkp)$/;" f file:
-createkey zkt-keyman.c /^static void createkey (const char *keyname, const dki_t *list, const zconf_t *conf)$/;" f file:
-ctype_t zconf.c /^} ctype_t;$/;" t typeref:enum:__anon2 file:
-def zconf.c /^static zconf_t def = {$/;" v file:
-desc zconf.c /^ const char *desc;$/;" m struct:__anon3 file:
-dirflag zkt-keyman.c /^static int dirflag = 0;$/;" v file:
-dirflag zkt-ls.c /^static int dirflag = 0;$/;" v file:
-dirname zkt-signer.c /^static const char *dirname = NULL;$/;" v file:
-dist_and_reload nscomm.c /^int dist_and_reload (const zone_t *zp, int what)$/;" f
-dki_add dki.c /^dki_t *dki_add (dki_t **list, dki_t *new)$/;" f
-dki_age dki.c /^int dki_age (const dki_t *dkp, time_t curr)$/;" f
-dki_algo dki.c /^time_t dki_algo (const dki_t *dkp)$/;" f
-dki_algo2sstr dki.c /^char *dki_algo2sstr (int algo)$/;" f
-dki_algo2str dki.c /^char *dki_algo2str (int algo)$/;" f
-dki_allcmp dki.c /^int dki_allcmp (const dki_t *a, const dki_t *b)$/;" f
-dki_alloc dki.c /^static dki_t *dki_alloc ()$/;" f file:
-dki_cmp dki.c /^int dki_cmp (const dki_t *a, const dki_t *b)$/;" f
-dki_destroy dki.c /^dki_t *dki_destroy (dki_t *dkp)$/;" f
-dki_estr dki.c /^static char dki_estr[255+1];$/;" v file:
-dki_exptime dki.c /^time_t dki_exptime (const dki_t *dkp)$/;" f
-dki_find dki.c /^const dki_t *dki_find (const dki_t *list, int ksk, int status, int no)$/;" f
-dki_findalgo dki.c /^const dki_t *dki_findalgo (const dki_t *list, int ksk, int alg, int status, int no)$/;" f
-dki_free dki.c /^void dki_free (dki_t *dkp)$/;" f
-dki_freelist dki.c /^void dki_freelist (dki_t **listp)$/;" f
-dki_gentime dki.c /^time_t dki_gentime (const dki_t *dkp)$/;" f
-dki_geterrstr dki.c /^const char *dki_geterrstr ()$/;" f
-dki_getflag dki.c /^dk_flag_t dki_getflag (const dki_t *dkp, time_t curr)$/;" f
-dki_isactive dki.c /^int dki_isactive (const dki_t *dkp)$/;" f
-dki_isdepreciated dki.c /^int dki_isdepreciated (const dki_t *dkp)$/;" f
-dki_isksk dki.c /^int dki_isksk (const dki_t *dkp)$/;" f
-dki_ispublished dki.c /^int dki_ispublished (const dki_t *dkp)$/;" f
-dki_isrevoked dki.c /^int dki_isrevoked (const dki_t *dkp)$/;" f
-dki_lifetime dki.c /^time_t dki_lifetime (const dki_t *dkp)$/;" f
-dki_lifetimedays dki.c /^ushort dki_lifetimedays (const dki_t *dkp)$/;" f
-dki_namecmp dki.c /^int dki_namecmp (const dki_t *a, const dki_t *b)$/;" f
-dki_new dki.c /^dki_t *dki_new (const char *dir, const char *name, int ksk, int algo, int bitsize, const char *rfile, int lf_days)$/;" f
-dki_prt_comment dki.c /^int dki_prt_comment (const dki_t *dkp, FILE *fp)$/;" f
-dki_prt_dnskey dki.c /^int dki_prt_dnskey (const dki_t *dkp, FILE *fp)$/;" f
-dki_prt_dnskey_raw dki.c /^int dki_prt_dnskey_raw (const dki_t *dkp, FILE *fp)$/;" f
-dki_prt_dnskeyttl dki.c /^int dki_prt_dnskeyttl (const dki_t *dkp, FILE *fp, int ttl)$/;" f
-dki_prt_managedkey dki.c /^int dki_prt_managedkey (const dki_t *dkp, FILE *fp)$/;" f
-dki_prt_trustedkey dki.c /^int dki_prt_trustedkey (const dki_t *dkp, FILE *fp)$/;" f
-dki_read dki.c /^dki_t *dki_read (const char *dirname, const char *filename)$/;" f
-dki_readdir dki.c /^int dki_readdir (const char *dir, dki_t **listp, int recursive)$/;" f
-dki_readfile dki.c /^static int dki_readfile (FILE *fp, dki_t *dkp)$/;" f file:
-dki_remove dki.c /^dki_t *dki_remove (dki_t *dkp)$/;" f
-dki_revnamecmp dki.c /^int dki_revnamecmp (const dki_t *a, const dki_t *b)$/;" f
-dki_search dki.c /^const dki_t *dki_search (const dki_t *list, int tag, const char *name)$/;" f
-dki_setexptime dki.c /^time_t dki_setexptime (dki_t *dkp, time_t sec)$/;" f
-dki_setflag dki.c /^dk_flag_t dki_setflag (dki_t *dkp, dk_flag_t flag)$/;" f
-dki_setlifetime dki.c /^ushort dki_setlifetime (dki_t *dkp, int days)$/;" f
-dki_setstat dki.c /^static int dki_setstat (dki_t *dkp, int status, int preserve_time)$/;" f file:
-dki_setstatus dki.c /^int dki_setstatus (dki_t *dkp, int status)$/;" f
-dki_setstatus_preservetime dki.c /^int dki_setstatus_preservetime (dki_t *dkp, int status)$/;" f
-dki_status dki.c /^dk_status_t dki_status (const dki_t *dkp)$/;" f
-dki_statusstr dki.c /^const char *dki_statusstr (const dki_t *dkp)$/;" f
-dki_tadd dki.c /^dki_t *dki_tadd (dki_t **tree, dki_t *new, int sub_before)$/;" f
-dki_tagcmp dki.c /^int dki_tagcmp (const dki_t *a, const dki_t *b)$/;" f
-dki_tfree dki.c /^void dki_tfree (dki_t **tree)$/;" f
-dki_time dki.c /^time_t dki_time (const dki_t *dkp)$/;" f
-dki_timecmp dki.c /^int dki_timecmp (const dki_t *a, const dki_t *b)$/;" f
-dki_tsearch dki.c /^const dki_t *dki_tsearch (const dki_t *tree, int tag, const char *name)$/;" f
-dki_unsetflag dki.c /^dk_flag_t dki_unsetflag (dki_t *dkp, dk_flag_t flag)$/;" f
-dki_writeinfo dki.c /^static int dki_writeinfo (const dki_t *dkp, const char *path)$/;" f file:
-domain_canonicdup misc.c /^char *domain_canonicdup (const char *s)$/;" f
-domaincmp domaincmp.c /^int domaincmp (const char *a, const char *b)$/;" f
-domaincmp_dir domaincmp.c /^int domaincmp_dir (const char *a, const char *b, int subdomain_above)$/;" f
-dosigning zkt-signer.c /^static int dosigning (zone_t *zonelist, zone_t *zp)$/;" f file:
-dupconfig zconf.c /^zconf_t *dupconfig (const zconf_t *conf)$/;" f
-dyn_update_freeze nscomm.c /^int dyn_update_freeze (const char *domain, const zconf_t *z, int freeze)$/;" f
-dynamic_zone zkt-signer.c /^static int dynamic_zone = 0; \/* dynamic zone ? *\/$/;" v file:
-error misc.c /^void error (char *fmt, ...)$/;" f
-ex domaincmp.c /^} ex[] = {$/;" v typeref:struct:__anon1 file:
-exptimeflag zkt-keyman.c /^int exptimeflag = 0;$/;" v
-exptimeflag zkt-ls.c /^int exptimeflag = 0;$/;" v
-extern dki.c 59;" d file:
-extern dki.c 61;" d file:
-extern domaincmp.c 43;" d file:
-extern domaincmp.c 45;" d file:
-extern log.c 55;" d file:
-extern log.c 57;" d file:
-extern misc.c 56;" d file:
-extern misc.c 58;" d file:
-extern ncparse.c 44;" d file:
-extern ncparse.c 46;" d file:
-extern nscomm.c 45;" d file:
-extern nscomm.c 47;" d file:
-extern rollover.c 57;" d file:
-extern rollover.c 59;" d file:
-extern soaserial.c 53;" d file:
-extern soaserial.c 55;" d file:
-extern tcap.c 31;" d file:
-extern tcap.c 33;" d file:
-extern zconf.c 61;" d file:
-extern zconf.c 63;" d file:
-extern zfparse.c 51;" d file:
-extern zfparse.c 53;" d file:
-extern zkt.c 49;" d file:
-extern zkt.c 51;" d file:
-extern zone.c 53;" d file:
-extern zone.c 55;" d file:
-fatal misc.c /^void fatal (char *fmt, ...)$/;" f
-file_age misc.c /^int file_age (const char *fname)$/;" f
-file_mtime misc.c /^time_t file_mtime (const char *fname)$/;" f
-fileexist misc.c /^int fileexist (const char *name)$/;" f
-filesize misc.c /^size_t filesize (const char *name)$/;" f
-first zconf.c 74;" d file:
-force zkt-signer.c /^static int force = 0;$/;" v file:
-freeconfig zconf.c /^zconf_t *freeconfig (zconf_t *conf)$/;" f
-genaddkey rollover.c /^static dki_t *genaddkey (dki_t **listp, const char *dir, const char *domain, int ksk, const zconf_t *conf, int status)$/;" f file:
-genfirstkey rollover.c /^static dki_t *genfirstkey (dki_t **listp, const char *dir, const char *domain, int ksk, const zconf_t *conf, int status)$/;" f file:
-genkey rollover.c /^static dki_t *genkey (int addkey, dki_t **listp, const char *dir, const char *domain, int ksk, const zconf_t *conf, int status)$/;" f file:
-gensalt misc.c /^int gensalt (char *salt, size_t saltsize, int saltbits, unsigned int seed)$/;" f
-get_exptime rollover.c /^static time_t get_exptime (dki_t *key, const zconf_t *z)$/;" f file:
-get_parent_phase rollover.c /^static int get_parent_phase (const char *file)$/;" f file:
-get_parent_phase zkt-keyman.c /^static int get_parent_phase (const char *file)$/;" f file:
-get_ttl zfparse.c /^static long get_ttl (const char *s)$/;" f file:
-getdefconfname misc.c /^const char *getdefconfname (const char *view)$/;" f
-getnameappendix misc.c /^const char *getnameappendix (const char *progname, const char *basename)$/;" f
-gettok ncparse.c /^static int gettok (FILE *fp, char *val, size_t valsize)$/;" f file:
-goto_labelstart domaincmp.c 48;" d file:
-headerflag zkt-keyman.c /^int headerflag = 1;$/;" v
-headerflag zkt-ls.c /^int headerflag = 1;$/;" v
-html tcap.c /^static int html = 0;$/;" v file:
-in_strarr misc.c /^int in_strarr (const char *str, char *const arr[], int cnt)$/;" f
-inc_errstr soaserial.c /^const char *inc_errstr (int err)$/;" f
-inc_serial soaserial.c /^int inc_serial (const char *fname, int use_unixtime)$/;" f
-inc_soa_serial soaserial.c /^static int inc_soa_serial (FILE *fp, int use_unixtime)$/;" f file:
-is1 tcap.c /^static const char *is1 = "";$/;" v file:
-is2 tcap.c /^static const char *is2 = "";$/;" v file:
-is_defined zkt-signer.c 124;" d file:
-is_directory misc.c /^int is_directory (const char *name)$/;" f
-is_dotfilename misc.c /^int is_dotfilename (const char *name)$/;" f
-is_exec_ok misc.c /^int is_exec_ok (const char *prog)$/;" f
-is_keyfilename misc.c /^int is_keyfilename (const char *name)$/;" f
-is_multiline_rr zfparse.c /^static const char *is_multiline_rr (int *multi_line_rr, const char *p)$/;" f file:
-is_parentdirsigned rollover.c /^static int is_parentdirsigned (const zone_t *zonelist, const zone_t *zp)$/;" f file:
-is_soa_rr soaserial.c /^static int is_soa_rr (const char *line)$/;" f file:
-iscmdline zconf.c 77;" d file:
-iscompatible zconf.c 78;" d file:
-isinlist strlist.c /^int isinlist (const char *str, const char *list)$/;" f
-isparentdomain domaincmp.c /^int isparentdomain (const char *child, const char *parent, int level)$/;" f
-issubdomain domaincmp.c /^int issubdomain (const char *child, const char *parent)$/;" f
-italic_off tcap.c /^static const char *italic_off = "";$/;" v file:
-italic_on tcap.c /^static const char *italic_on = "";$/;" v file:
-ksk5011status rollover.c /^int ksk5011status (dki_t **listp, const char *dir, const char *domain, const zconf_t *z)$/;" f
-ksk_roll zkt-keyman.c /^static void ksk_roll (const char *keyname, int phase, const dki_t *list, const zconf_t *conf)$/;" f file:
-kskdomain zkt-keyman.c /^static char *kskdomain = "";$/;" v file:
-kskflag zkt-keyman.c /^int kskflag = 1;$/;" v
-kskflag zkt-ls.c /^int kskflag = 1;$/;" v
-kskrollover rollover.c /^static int kskrollover (dki_t *ksk, zone_t *zonelist, zone_t *zp)$/;" f file:
-kskstatus rollover.c /^int kskstatus (zone_t *zonelist, zone_t *zp)$/;" f
-kw ncparse.c /^} kw[] = {$/;" v typeref:struct:KeyWords file:
-label zconf.c /^ char *label; \/* the name of the parameter *\/$/;" m struct:__anon3 file:
-labellist zkt-keyman.c /^char *labellist = NULL;$/;" v
-labellist zkt-ls.c /^char *labellist = NULL;$/;" v
-last zconf.c 75;" d file:
-level log.c /^ lg_lvl_t level;$/;" m struct:__anon4 file:
-lg_args log.c /^void lg_args (lg_lvl_t level, int argc, char * const argv[])$/;" f
-lg_close log.c /^int lg_close ()$/;" f
-lg_errcnt log.c /^static long lg_errcnt;$/;" v file:
-lg_fileopen log.c /^static FILE *lg_fileopen (const char *path, const char *name)$/;" f file:
-lg_fp log.c /^static FILE *lg_fp;$/;" v file:
-lg_fpsave log.c /^static FILE *lg_fpsave;$/;" v file:
-lg_geterrcnt log.c /^long lg_geterrcnt ()$/;" f
-lg_lvl2str log.c /^const char *lg_lvl2str (lg_lvl_t level)$/;" f
-lg_lvl2syslog log.c /^lg_lvl_t lg_lvl2syslog (lg_lvl_t level)$/;" f
-lg_mesg log.c /^void lg_mesg (int priority, char *fmt, ...)$/;" f
-lg_minfilelevel log.c /^static int lg_minfilelevel;$/;" v file:
-lg_minsyslevel log.c /^static int lg_minsyslevel;$/;" v file:
-lg_open log.c /^int lg_open (const char *progname, const char *facility, const char *syslevel, const char *path, const char *file, const char *filelevel)$/;" f
-lg_progname log.c /^static const char *lg_progname;$/;" v file:
-lg_reseterrcnt log.c /^long lg_reseterrcnt ()$/;" f
-lg_seterrcnt log.c /^long lg_seterrcnt (long value)$/;" f
-lg_str2lvl log.c /^lg_lvl_t lg_str2lvl (const char *name)$/;" f
-lg_str2syslog log.c /^int lg_str2syslog (const char *facility)$/;" f
-lg_symtbl_t log.c /^} lg_symtbl_t;$/;" t typeref:struct:__anon4 file:
-lg_syslogging log.c /^static int lg_syslogging;$/;" v file:
-lg_zone_end log.c /^int lg_zone_end ()$/;" f
-lg_zone_start log.c /^int lg_zone_start (const char *dir, const char *domain)$/;" f
-lifetime zkt-keyman.c /^int lifetime = 0;$/;" v
-lifetime zkt-ls.c /^int lifetime = 0;$/;" v
-lifetimeflag zkt-keyman.c /^int lifetimeflag = 0;$/;" v
-lifetimeflag zkt-ls.c /^int lifetimeflag = 0;$/;" v
-linkfile misc.c /^int linkfile (const char *fromfile, const char *tofile)$/;" f
-list_dnskey zkt.c /^static void list_dnskey (const dki_t **nodep, const VISIT which, int depth)$/;" f file:
-list_key zkt.c /^static void list_key (const dki_t **nodep, const VISIT which, int depth)$/;" f file:
-list_managedkey zkt.c /^static void list_managedkey (const dki_t **nodep, const VISIT which, int depth)$/;" f file:
-list_trustedkey zkt.c /^static void list_trustedkey (const dki_t **nodep, const VISIT which, int depth)$/;" f file:
-ljustflag zkt-keyman.c /^int ljustflag = 0;$/;" v
-ljustflag zkt-ls.c /^int ljustflag = 0;$/;" v
-loadconfig zconf.c /^zconf_t *loadconfig (const char *filename, zconf_t *z)$/;" f
-loadconfig_fromstr zconf.c /^zconf_t *loadconfig_fromstr (const char *str, zconf_t *z)$/;" f
-logfile zkt-signer.c /^static const char *logfile = NULL;$/;" v file:
-logflush misc.c /^void logflush ()$/;" f
-logmesg misc.c /^void logmesg (char *fmt, ...)$/;" f
-long_options zkt-conf.c /^static struct option long_options[] = {$/;" v typeref:struct:option file:
-long_options zkt-keyman.c /^static struct option long_options[] = {$/;" v typeref:struct:option file:
-long_options zkt-ls.c /^static struct option long_options[] = {$/;" v typeref:struct:option file:
-long_options zkt-signer.c /^static struct option long_options[] = {$/;" v typeref:struct:option file:
-lopt_usage zkt-conf.c 317;" d file:
-lopt_usage zkt-conf.c 320;" d file:
-lopt_usage zkt-keyman.c 334;" d file:
-lopt_usage zkt-keyman.c 337;" d file:
-lopt_usage zkt-ls.c 325;" d file:
-lopt_usage zkt-ls.c 328;" d file:
-lopt_usage zkt-signer.c 328;" d file:
-lopt_usage zkt-signer.c 331;" d file:
-loptstr zkt-conf.c 318;" d file:
-loptstr zkt-conf.c 321;" d file:
-loptstr zkt-keyman.c 335;" d file:
-loptstr zkt-keyman.c 338;" d file:
-loptstr zkt-ls.c 326;" d file:
-loptstr zkt-ls.c 329;" d file:
-loptstr zkt-signer.c 329;" d file:
-loptstr zkt-signer.c 332;" d file:
-main domaincmp.c /^main (int argc, char *argv[])$/;" f
-main log.c /^int main (int argc, char *argv[])$/;" f
-main misc.c /^main (int argc, char *argv[])$/;" f
-main ncparse.c /^main (int argc, char *argv[])$/;" f
-main soaserial.c /^main (int argc, char *argv[])$/;" f
-main strlist.c /^main (int argc, char *argv[])$/;" f
-main tcap.c /^main (int argc, const char *argv[])$/;" f
-main zconf.c /^main (int argc, char *argv[])$/;" f
-main zfparse.c /^int main (int argc, char *argv[])$/;" f
-main zkt-conf.c /^int main (int argc, char *argv[])$/;" f
-main zkt-keyman.c /^int main (int argc, char *argv[])$/;" f
-main zkt-ls.c /^int main (int argc, char *argv[])$/;" f
-main zkt-signer.c /^int main (int argc, char *const argv[])$/;" f
-main zkt-soaserial.c /^int main (int argc, char *argv[])$/;" f
-managedkeyflag zkt-ls.c /^static int managedkeyflag = 0;$/;" v file:
-maxcolor tcap.c /^static int maxcolor;$/;" v file:
-name ncparse.c /^ char *name;$/;" m struct:KeyWords file:
-namedconf zkt-signer.c /^static const char *namedconf = NULL;$/;" v file:
-new_keysetfiles zkt-signer.c /^static int new_keysetfiles (const char *dir, time_t zone_signing_time)$/;" f file:
-noexec zkt-signer.c /^static int noexec = 0;$/;" v file:
-origin zkt-signer.c /^static const char *origin = NULL;$/;" v file:
-parent zkt.c /^const dki_t *parent;$/;" v
-parse_namedconf ncparse.c /^int parse_namedconf (const char *filename, const char *chroot_dir, char *dir, size_t dirsize, int (*func) ())$/;" f
-parseconfigline zconf.c /^static void parseconfigline (char *buf, unsigned int line, zconf_t *z)$/;" f file:
-parsedir zkt-signer.c /^static int parsedir (const char *dir, zone_t **zp, const zconf_t *conf)$/;" f file:
-parsedirectory zkt-keyman.c /^static int parsedirectory (const char *dir, dki_t **listp)$/;" f file:
-parsedirectory zkt-ls.c /^static int parsedirectory (const char *dir, dki_t **listp, int sub_before)$/;" f file:
-parsefile zkt-keyman.c /^static void parsefile (const char *file, dki_t **listp)$/;" f file:
-parsefile zkt-ls.c /^static void parsefile (const char *file, dki_t **listp, int sub_before)$/;" f file:
-parsetag zkt-keyman.c /^static const char *parsetag (const char *str, int *tagp)$/;" f file:
-parseurl misc.c /^void parseurl (char *url, char **proto, char **host, char **port, char **para)$/;" f
-parsezonefile zfparse.c /^int parsezonefile (const char *file, long *pminttl, long *pmaxttl, const char *keydbfile)$/;" f
-pathflag zkt-keyman.c /^int pathflag = 0;$/;" v
-pathflag zkt-ls.c /^int pathflag = 0;$/;" v
-pathname misc.c /^char *pathname (char *path, size_t size, const char *dir, const char *file, const char *ext)$/;" f
-prepstrlist strlist.c /^char *prepstrlist (const char *str, const char *delim)$/;" f
-printconfig zconf.c /^int printconfig (const char *fname, const zconf_t *z)$/;" f
-printconfigdiff zconf.c /^int printconfigdiff (const char *fname, const zconf_t *ref, const zconf_t *z)$/;" f
-printconfigline zconf.c /^static void printconfigline (FILE *fp, zconf_para_t *cp)$/;" f file:
-printkeyinfo zkt.c /^static void printkeyinfo (const dki_t *dkp, const char *oldpath)$/;" f file:
-printserial zkt-soaserial.c /^static void printserial (const char *fname, unsigned long serial)$/;" f file:
-printzone ncparse.c /^int printzone (const char *dir, const char *view, const char *zone, const char *file)$/;" f
-progname domaincmp.c /^const char *progname;$/;" v
-progname log.c /^const char *progname;$/;" v
-progname misc.c /^const char *progname;$/;" v
-progname ncparse.c /^char *progname;$/;" v
-progname soaserial.c /^const char *progname;$/;" v
-progname tcap.c /^static const char *progname;$/;" v file:
-progname zconf.c /^const char *progname;$/;" v
-progname zfparse.c /^const char *progname;$/;" v
-progname zkt-conf.c /^const char *progname;$/;" v
-progname zkt-keyman.c /^const char *progname;$/;" v
-progname zkt-ls.c /^const char *progname;$/;" v
-progname zkt-signer.c /^const char *progname;$/;" v
-progname zkt-soaserial.c /^static const char *progname;$/;" v file:
-put tcap.c /^static int put (int c)$/;" f file:
-r1 tcap.c /^static const char *r1 = "";$/;" v file:
-r2 tcap.c /^static const char *r2 = "";$/;" v file:
-read_serial_fromfile zkt-soaserial.c /^static int read_serial_fromfile (const char *fname, unsigned long *serial)$/;" f file:
-recflag zkt-keyman.c /^static int recflag = RECURSIVE;$/;" v file:
-recflag zkt-ls.c /^static int recflag = RECURSIVE;$/;" v file:
-register_key zkt-signer.c /^static void register_key (dki_t *list, const zconf_t *z)$/;" f file:
-reload_zone nscomm.c /^int reload_zone (const char *domain, const zconf_t *z)$/;" f
-reloadflag zkt-signer.c /^static int reloadflag = 0;$/;" v file:
-res domaincmp.c /^ int res;$/;" m struct:__anon1 file:
-searchitem zkt.c /^static int searchitem;$/;" v file:
-searchkw ncparse.c /^static int searchkw (const char *keyword)$/;" f file:
-searchresult zkt.c /^static const dki_t *searchresult;$/;" v file:
-serialtime soaserial.c /^static ulong serialtime (time_t sec)$/;" f file:
-set_all_varptr zconf.c /^static void set_all_varptr (zconf_t *cp, const zconf_t *cp2)$/;" f file:
-set_bind96_dynzone zkt-signer.c 122;" d file:
-set_keylifetime zkt.c /^static void set_keylifetime (const dki_t **nodep, const VISIT which, int depth)$/;" f file:
-set_varptr zconf.c /^static int set_varptr (char *entry, void *ptr, const void *ptr2)$/;" f file:
-setconfigpar zconf.c /^int setconfigpar (zconf_t *config, char *entry, const void *pval)$/;" f
-setconfigversion zconf.c /^void setconfigversion (int version)$/;" f
-setglobalflags zkt-keyman.c /^static void setglobalflags (zconf_t *config)$/;" f file:
-setglobalflags zkt-ls.c /^static void setglobalflags (zconf_t *config)$/;" f file:
-setminmax zfparse.c /^static void setminmax (long *pmin, long val, long *pmax)$/;" f file:
-short_options zkt-conf.c 73;" d file:
-short_options zkt-keyman.c 88;" d file:
-short_options zkt-ls.c 93;" d file:
-short_options zkt-ls.c 95;" d file:
-short_options zkt-signer.c 67;" d file:
-sign_zone zkt-signer.c /^static int sign_zone (const zone_t *zp)$/;" f file:
-skiplabel zfparse.c /^static const char *skiplabel (const char *s)$/;" f file:
-skipws zfparse.c /^static const char *skipws (const char *s)$/;" f file:
-sopt_usage zkt-conf.c 315;" d file:
-sopt_usage zkt-keyman.c 332;" d file:
-sopt_usage zkt-ls.c 323;" d file:
-sopt_usage zkt-signer.c 326;" d file:
-splitpath misc.c /^const char *splitpath (char *path, size_t psize, const char *filename)$/;" f
-start_timer misc.c /^time_t start_timer ()$/;" f
-stop_timer misc.c /^time_t stop_timer (time_t start)$/;" f
-str log.c /^ const char *str;$/;" m struct:__anon4 file:
-str_chop misc.c /^char *str_chop (char *str, char c)$/;" f
-str_delspace misc.c /^char *str_delspace (char *s)$/;" f
-str_untaint misc.c /^char *str_untaint (char *str)$/;" f
-strfindstr soaserial.c /^static const char *strfindstr (const char *str, const char *search)$/;" f file:
-subdomain_before_parent zkt-ls.c /^int subdomain_before_parent = 1;$/;" v
-symtbl log.c /^static lg_symtbl_t symtbl[] = {$/;" v file:
-syslog_level log.c /^ int syslog_level;$/;" m struct:__anon4 file:
-tag_search zkt.c /^static void tag_search (const dki_t **nodep, const VISIT which, int depth)$/;" f file:
-tc_attr tcap.c /^int tc_attr (FILE *fp, tc_att_t attr, int on)$/;" f
-tc_color tcap.c /^static int tc_color (FILE *fp, int color)$/;" f file:
-tc_end tcap.c /^int tc_end (FILE *fp, const char *term)$/;" f
-tc_init tcap.c /^int tc_init (FILE *fp, const char *term)$/;" f
-tc_outfp tcap.c /^static FILE *tc_outfp;$/;" v file:
-tc_printattr tcap.c /^static int tc_printattr (FILE *fp, const char *attstr)$/;" f file:
-term zkt-ls.c /^static const char *term = NULL;$/;" v file:
-testflag zkt-conf.c /^static int testflag = 0;$/;" v file:
-time2isostr misc.c /^char *time2isostr (time_t sec, int precision)$/;" f
-time2str misc.c /^char *time2str (time_t sec, int precision)$/;" f
-timeflag zkt-keyman.c /^int timeflag = 1;$/;" v
-timeflag zkt-ls.c /^int timeflag = 1;$/;" v
-timeint2str zconf.c /^const char *timeint2str (unsigned long val)$/;" f
-timestr zkt-soaserial.c /^static char *timestr (time_t sec)$/;" f file:
-timestr2time misc.c /^time_t timestr2time (const char *timestr)$/;" f
-tok ncparse.c /^ int tok;$/;" m struct:KeyWords file:
-tok2str ncparse.c /^static const char *tok2str (int tok)$/;" f file:
-touch misc.c /^int touch (const char *fname, time_t sec)$/;" f
-trustedkeyflag zkt-ls.c /^static int trustedkeyflag = 0;$/;" v file:
-type zconf.c /^ ctype_t type; \/* the parameter type *\/$/;" m struct:__anon3 file:
-unprepstrlist strlist.c /^char *unprepstrlist (char *list, char delimc)$/;" f
-usage zkt-conf.c /^static void usage (char *mesg)$/;" f file:
-usage zkt-keyman.c /^static void usage (char *mesg, zconf_t *cp)$/;" f file:
-usage zkt-ls.c /^static void usage (char *mesg, zconf_t *cp)$/;" f file:
-usage zkt-signer.c /^static void usage (char *mesg, zconf_t *conf)$/;" f file:
-usage zkt-soaserial.c /^static void usage (const char *msg)$/;" f file:
-used_since zconf.c /^ short used_since; \/* compability (from version; 0 == command line) *\/$/;" m struct:__anon3 file:
-used_till zconf.c /^ short used_till; \/* compability (to version) *\/$/;" m struct:__anon3 file:
-var zconf.c /^ void *var; \/* pointer to the parameter variable *\/$/;" m struct:__anon3 file:
-var2 zconf.c /^ const void *var2; \/* pointer to a second parameter variable *\/$/;" m struct:__anon3 file:
-verbmesg misc.c /^void verbmesg (int verblvl, const zconf_t *conf, char *fmt, ...)$/;" f
-verbose zkt-signer.c /^static int verbose = 0;$/;" v file:
-view zkt-conf.c /^static const char *view = "";$/;" v file:
-view zkt-keyman.c /^static const char *view = "";$/;" v file:
-view zkt-ls.c /^static const char *view = "";$/;" v file:
-viewname zkt-signer.c /^static const char *viewname = NULL;$/;" v file:
-writeflag zkt-conf.c /^static int writeflag = 0;$/;" v file:
-writekeyfile zkt-signer.c /^static int writekeyfile (const char *fname, const dki_t *list, int key_ttl)$/;" f file:
-zconf_para_t zconf.c /^} zconf_para_t;$/;" t typeref:struct:__anon3 file:
-zkt_list_dnskeys zkt.c /^void zkt_list_dnskeys (const dki_t *data)$/;" f
-zkt_list_keys zkt.c /^void zkt_list_keys (const dki_t *data)$/;" f
-zkt_list_managedkeys zkt.c /^void zkt_list_managedkeys (const dki_t *data)$/;" f
-zkt_list_trustedkeys zkt.c /^void zkt_list_trustedkeys (const dki_t *data)$/;" f
-zkt_search zkt.c /^const dki_t *zkt_search (const dki_t *data, int searchtag, const char *keyname)$/;" f
-zkt_setkeylifetime zkt.c /^void zkt_setkeylifetime (dki_t *data)$/;" f
-zone_add zone.c /^zone_t *zone_add (zone_t **list, zone_t *new)$/;" f
-zone_alloc zone.c /^static zone_t *zone_alloc ()$/;" f file:
-zone_cmp zone.c /^static int zone_cmp (const zone_t *a, const zone_t *b)$/;" f file:
-zone_estr zone.c /^static char zone_estr[255+1];$/;" v file:
-zone_free zone.c /^void zone_free (zone_t *zp)$/;" f
-zone_freelist zone.c /^void zone_freelist (zone_t **listp)$/;" f
-zone_geterrstr zone.c /^const char *zone_geterrstr ()$/;" f
-zone_new zone.c /^zone_t *zone_new (zone_t **zp, const char *zone, const char *dir, const char *file, const char *signed_ext, const zconf_t *cp)$/;" f
-zone_print zone.c /^int zone_print (const char *mesg, const zone_t *z)$/;" f
-zone_readdir zone.c /^int zone_readdir (const char *dir, const char *zone, const char *zfile, zone_t **listp, const zconf_t *conf, int dyn_zone)$/;" f
-zone_search zone.c /^const zone_t *zone_search (const zone_t *list, const char *zone)$/;" f
-zonelist zkt-signer.c /^static zone_t *zonelist = NULL; \/* must be static global because add2zonelist use it *\/$/;" v file:
-zskflag zkt-keyman.c /^int zskflag = 1;$/;" v
-zskflag zkt-ls.c /^int zskflag = 1;$/;" v
-zskstatus rollover.c /^int zskstatus (dki_t **listp, const char *dir, const char *domain, const zconf_t *z)$/;" f
diff --git a/contrib/zkt-1.1.3/tcap.c b/contrib/zkt-1.1.3/tcap.c
deleted file mode 100644
index 5763b01b..00000000
--- a/contrib/zkt-1.1.3/tcap.c
+++ /dev/null
@@ -1,343 +0,0 @@
-/*****************************************************************
-**
-** tcap.c -- termcap color capabilities
-**
-** (c) Jan 1991 - Feb 2010 by hoz
-**
-** Feb 2002 max line size increased to 512 byte
-** default terminal "html" added
-** Feb 2010 color capabilities added
-**
-*****************************************************************/
-
-#include <stdio.h>
-#include <string.h>
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-# include "config_zkt.h"
-
-#if defined(COLOR_MODE) && COLOR_MODE && HAVE_LIBNCURSES
-# ifdef HAVE_TERM_H
-# include <term.h>
-# endif
-# ifdef HAVE_CURSES_H
-# include <curses.h>
-# endif
-#endif
-
-#define extern
-# include "tcap.h"
-#undef extern
-
-/*****************************************************************
-** global vars
-*****************************************************************/
-/* termcap strings */
-static const char *is1 = "";
-static const char *is2 = "";
-static const char *r1 = "";
-static const char *r2 = "";
-static const char *bold_on = "";
-static const char *bold_off = "";
-static const char *italic_on = "";
-static const char *italic_off = "";
-static char colortab[8][31+1];
-
-/* termcap numbers */
-static int maxcolor;
-
-/* function declaration */
-static int tc_printattr (FILE *fp, const char *attstr);
-static int tc_color (FILE *fp, int color);
-
-static int html = 0;
-
-
-
-/*****************************************************************
-** global functions
-*****************************************************************/
-#if defined(COLOR_MODE) && COLOR_MODE && HAVE_LIBNCURSES
-int tc_init (FILE *fp, const char *term)
-{
- static char area[1024];
- char buf[1024];
- char *ap = area;
- char *af = ""; /* AF */ /* ansi foreground */
- int i;
-
- /* clear all color strings */
- for ( i = 0; i < 8; i++ )
- colortab[i][0] = '\0';
-
- if ( term == NULL || *term == '\0' ||
- strcmp (term, "none") == 0 || strcmp (term, "dumb") == 0 )
- return 0;
-
- if ( strcmp (term, "html") == 0 || strcmp (term, "HTML") == 0 )
- {
- bold_on = "<B>";
- bold_off = "</B>";
- italic_on = "<I>";
- italic_off = "</I>";
- af = "";
- maxcolor = 8;
- snprintf (colortab[TC_BLACK], sizeof colortab[0], "<font color=black>");
- snprintf (colortab[TC_BLUE], sizeof colortab[0], "<font color=blue>");
- snprintf (colortab[TC_GREEN], sizeof colortab[0], "<font color=green>");
- snprintf (colortab[TC_CYAN], sizeof colortab[0], "<font color=cyan>");
- snprintf (colortab[TC_RED], sizeof colortab[0], "<font color=red>");
- snprintf (colortab[TC_MAGENTA], sizeof colortab[0], "<font color=magenta>");
- snprintf (colortab[TC_YELLOW], sizeof colortab[0], "<font color=yellow>");
- snprintf (colortab[TC_WHITE], sizeof colortab[0], "<font color=white>");
- html = 1;
- return 0;
- }
-#if 0
- if ( !istty (fp) )
- return 0;
-#endif
- switch ( tgetent (buf, term) )
- {
- case -1: perror ("termcap file");
- return -1;
- case 0: fprintf (stderr, "unknown terminal %s\n", term);
- return -1;
- }
-
- if ( !(is1 = tgetstr ("is1", &ap)) )
- is1 = "";
- if ( !(is2 = tgetstr ("is2", &ap)) )
- is2 = "";
- if ( !(r1 = tgetstr ("r1", &ap)) )
- r1 = "";
- if ( !(r2 = tgetstr ("r2", &ap)) )
- r2 = "";
-
- /* if bold is not present */
- if ( !(bold_on = tgetstr ("md", &ap)) )
- /* use standout mode */
- if ( !(bold_on = tgetstr ("so", &ap)) )
- bold_on = bold_off = "";
- else
- bold_off = tgetstr ("se", &ap);
- else
- bold_off = tgetstr ("me", &ap);
-
- /* if italic not present */
- if ( !(italic_on = tgetstr ("ZH", &ap)) )
- /* use underline mode */
- if ( !(italic_on = tgetstr ("us", &ap)) )
- italic_on = italic_off = "";
- else
- italic_off = tgetstr ("ue", &ap);
- else
- italic_off = tgetstr ("ZR", &ap);
-
- maxcolor = tgetnum ("Co");
- if ( maxcolor < 0 ) /* no colors ? */
- return 0;
- if ( maxcolor > 8 )
- maxcolor = 8;
-
- if ( (af = tgetstr ("AF", &ap)) ) /* set ansi color foreground */
- {
- for ( i = 0; i < maxcolor; i++ )
- snprintf (colortab[i], sizeof colortab[0], "%s", tparm (af, i));
- }
- else if ( (af = tgetstr ("Sf", &ap)) ) /* or set color foreground */
- {
- snprintf (colortab[TC_BLACK], sizeof colortab[0], "%s", tparm (af, 0));
- snprintf (colortab[TC_BLUE], sizeof colortab[0], "%s", tparm (af, 1));
- snprintf (colortab[TC_GREEN], sizeof colortab[0], "%s", tparm (af, 2));
- snprintf (colortab[TC_CYAN], sizeof colortab[0], "%s", tparm (af, 3));
- snprintf (colortab[TC_RED], sizeof colortab[0], "%s", tparm (af, 4));
- snprintf (colortab[TC_MAGENTA], sizeof colortab[0], "%s", tparm (af, 5));
- snprintf (colortab[TC_YELLOW], sizeof colortab[0], "%s", tparm (af, 6));
- snprintf (colortab[TC_WHITE], sizeof colortab[0], "%s", tparm (af, 7));
- }
-
-#if 0
- if ( is1 && *is1 )
- tc_printattr (fp, is1);
- if ( is2 && *is2 )
- tc_printattr (fp, is2);
-#endif
-
- return 0;
-}
-#else
-int tc_init (FILE *fp, const char *term)
-{
- int i;
-
- is1 = "";
- is2 = "";
- r1 = "";
- r2 = "";
- bold_on = "";
- bold_off = "";
- italic_on = "";
- italic_off = "";
- for ( i = 0; i < 8; i++ )
- colortab[i][0] = '\0';
- maxcolor = 0;
- html = 0;
-
- return 0;
-}
-#endif
-
-#if defined(COLOR_MODE) && COLOR_MODE && HAVE_LIBNCURSES
-int tc_end (FILE *fp, const char *term)
-{
-#if 0
- if ( term )
- {
-// if ( r1 && *r1 ) tc_printattr (fp, r1);
- if ( r2 && *r2 )
- tc_printattr (fp, r2);
- }
-#endif
- return 0;
-}
-#else
-int tc_end (FILE *fp, const char *term)
-{
- return 0;
-}
-#endif
-
-#if defined(COLOR_MODE) && COLOR_MODE && HAVE_LIBNCURSES
-int tc_attr (FILE *fp, tc_att_t attr, int on)
-{
- int len;
-
- len = 0;
- if ( on ) /* turn attributes on ? */
- {
- if ( (attr & TC_BOLD) == TC_BOLD )
- len += tc_printattr (fp, bold_on);
- if ( (attr & TC_ITALIC) == TC_ITALIC )
- len += tc_printattr (fp, italic_on);
-
- if ( attr & 0xFF )
- len += tc_color (fp, attr & 0xFF);
- }
- else /* turn attributes off */
- {
- if ( html )
- len += fprintf (fp, "</font>");
- else
- len += tc_color (fp, TC_BLACK);
-
- if ( (attr & TC_ITALIC) == TC_ITALIC )
- len += tc_printattr (fp, italic_off);
- if ( !html || (attr & TC_BOLD) == TC_BOLD )
- len += tc_printattr (fp, bold_off);
- }
-
- return len;
-}
-#else
-int tc_attr (FILE *fp, tc_att_t attr, int on)
-{
- return 0;
-}
-#endif
-
-/*****************************************************************
-** internal functions
-*****************************************************************/
-static FILE *tc_outfp;
-static int put (int c)
-{
- return putc (c, tc_outfp);
-}
-
-#if defined(COLOR_MODE) && COLOR_MODE && HAVE_LIBNCURSES
-static int tc_printattr (FILE *fp, const char *attstr)
-{
- tc_outfp = fp;
- return tputs (attstr, 0, put);
-}
-#else
-static int tc_printattr (FILE *fp, const char *attstr)
-{
- return 0;
-}
-#endif
-
-#if defined(COLOR_MODE) && COLOR_MODE && HAVE_LIBNCURSES
-static int tc_color (FILE *fp, int color)
-{
- tc_outfp = fp;
-
- if ( color < 0 || color >= maxcolor )
- return 0;
- return tputs (colortab[color], 0, put);
-}
-#else
-static int tc_color (FILE *fp, int color)
-{
- return 0;
-}
-#endif
-
-
-#ifdef TEST
-static const char *progname;
-/*****************************************************************
-** test main()
-*****************************************************************/
-main (int argc, const char *argv[])
-{
- extern char *getenv ();
- char *term = getenv ("TERM");
- int i;
- const char *text;
-
- progname = *argv;
-
- tc_init (stdout, term);
-
- // printattr (is); /* Initialisierungsstring ausgeben */
-
- text = "Test";
- if ( argc > 1 )
- text = *++argv;
-
- tc_attr (stdout, TC_BOLD, 1);
- printf ("Bold Headline\n");
- tc_attr (stdout, TC_BOLD, 0);
- for ( i = 0; i < 8; i++ )
- {
- tc_attr (stdout, i, 1);
- printf ("%s", text);
- tc_attr (stdout, i, 0);
-
-#if 0
- tc_attr (stdout, (i | TC_BOLD), 1);
- printf ("\t%s", text);
- tc_attr (stdout, (i | TC_BOLD), 0);
-
- tc_attr (stdout, (i | TC_ITALIC), 1);
- printf ("\t%s", text);
- tc_attr (stdout, (i | TC_ITALIC), 0);
-
- tc_attr (stdout, (i | TC_BOLD | TC_ITALIC), 1);
- printf ("\t%s", text);
- tc_attr (stdout, (i | TC_BOLD | TC_ITALIC), 0);
-#endif
- printf ("\n");
- }
- printf ("now back to black\n");
-
- // printattr (r2); /* Zuruecksetzen */
-
- return (0);
-}
-#endif
diff --git a/contrib/zkt-1.1.3/tcap.h b/contrib/zkt-1.1.3/tcap.h
deleted file mode 100644
index 27ca0514..00000000
--- a/contrib/zkt-1.1.3/tcap.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*****************************************************************
-**
-** tcap.h -- termcap color capabilities
-**
-** (c) Mar 2010 by hoz
-**
-*****************************************************************/
-
-#ifndef TCAP_H
-# define TCAP_H
-
-typedef enum {
- TC_BLACK = 0,
- TC_RED,
- TC_GREEN,
- TC_YELLOW,
- TC_BLUE,
- TC_MAGENTA,
- TC_CYAN,
- TC_WHITE,
-
- TC_BOLD = 0x100,
- TC_ITALIC = 0x200
-} tc_att_t;
-
-extern int tc_init (FILE *fp, const char *term);
-extern int tc_end (FILE *fp, const char *term);
-extern int tc_attr (FILE *fp, tc_att_t attr, int on);
-#endif
diff --git a/contrib/zkt-1.1.3/zconf.c b/contrib/zkt-1.1.3/zconf.c
deleted file mode 100644
index 4ed7d811..00000000
--- a/contrib/zkt-1.1.3/zconf.c
+++ /dev/null
@@ -1,1043 +0,0 @@
-/****************************************************************
-**
-** @(#) zconf.c -- configuration file parser for dnssec.conf
-**
-** The initial code of this module is from the SixXS Heartbeat Client
-** written by Jeroen Massar <jeroen@sixxs.net>
-**
-** New config types and many code changes by Holger Zuleger
-**
-** Copyright (c) Aug 2005, Jeroen Massar.
-** Copyright (c) Aug 2005 - Nov 2010, Holger Zuleger.
-** All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Jeroen Masar or Holger Zuleger nor the
-** names of its contributors may be used to endorse or promote products
-** derived from this software without specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-****************************************************************/
-# include <sys/types.h>
-# include <stdio.h>
-# include <errno.h>
-# include <unistd.h>
-# include <stdlib.h>
-# include <stdarg.h>
-# include <string.h>
-# include <strings.h>
-# include <assert.h>
-# include <ctype.h>
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-# include "config_zkt.h"
-# include "debug.h"
-# include "misc.h"
-#define extern
-# include "zconf.h"
-#undef extern
-# include "dki.h"
-
-# define ISTRUE(val) (strcasecmp (val, "yes") == 0 || \
- strcasecmp (val, "true") == 0 )
-# define ISCOMMENT(cp) (*(cp) == '#' || *(cp) == ';' || \
- (*(cp) == '/' && *((cp)+1) == '/') )
-# define ISDELIM(c) (isspace (c) || (c) == ':' || (c) == '=')
-
-
-# define cmdln (0)
-# define first (1)
-# define last (0x7FFF)
-
-# define iscmdline(x) ((x)->used_since == cmdln)
-# define iscompatible(x) ((x)->used_since != cmdln && compversion >= (x)->used_since && \
- ((x)->used_till == 1 || (compversion <= (x)->used_till)))
-
-typedef enum {
- CONF_END = 0,
- CONF_STRING,
- CONF_INT,
- CONF_TIMEINT,
- CONF_BOOL,
- CONF_ALGO,
- CONF_SERIAL,
- CONF_FACILITY,
- CONF_LEVEL,
- CONF_NSEC3,
- CONF_COMMENT,
- CONF_VERSION,
-} ctype_t;
-
-/*****************************************************************
-** private (static) variables
-*****************************************************************/
-static int compversion;
-
-static zconf_t def = {
- ZONEDIR, RECURSIVE,
- PRINTTIME, PRINTAGE, LJUST, LSCOLORTERM,
- SIG_VALIDITY, MAX_TTL, KEY_TTL, PROPTIME, Unixtime,
- RESIGN_INT,
- KEY_ALGO, ADDITIONAL_KEY_ALGO,
- KSK_LIFETIME, KSK_BITS, KSK_RANDOM,
- ZSK_LIFETIME, ZSK_BITS, ZSK_ALWAYS, ZSK_RANDOM,
- NSEC3_OFF, SALTLEN,
- NULL, /* viewname cmdline parameter */
- 0, /* noexec cmdline parameter */
- LOGFILE, LOGLEVEL, LOGDOMAINDIR, SYSLOGFACILITY, SYSLOGLEVEL, VERBOSELOG, 0,
- DNSKEYFILE, ZONEFILE, KEYSETDIR,
- LOOKASIDEDOMAIN,
- SIG_RANDOM, SIG_PSEUDO, SIG_GENDS, SIG_DNSKEY_KSK, SIG_PARAM,
- DEPENDFILES,
- DIST_CMD, /* defaults to NULL which means to run "rndc reload" */
- NAMED_CHROOT
-};
-
-typedef struct {
- char *label; /* the name of the parameter */
- short used_since; /* compability (from version; 0 == command line) */
- short used_till; /* compability (to version) */
- ctype_t type; /* the parameter type */
- void *var; /* pointer to the parameter variable */
- const char *desc;
- const void *var2; /* pointer to a second parameter variable */
- /* this is a ugly hack needed by cmpconfig () */
-} zconf_para_t;
-
-static zconf_para_t confpara[] = {
- { "", first, last, CONF_COMMENT, ""},
- { "", first, last, CONF_COMMENT, "\t@(#) dnssec.conf "},
- { "", first, last, CONF_VERSION, "" },
- { "", first, last, CONF_COMMENT, ""},
- { "", first, last, CONF_COMMENT, NULL },
-
- { "", first, 99, CONF_COMMENT, "dnssec-zkt options" },
- { "", 100, last, CONF_COMMENT, "zkt-ls options" },
- { "ZoneDir", first, last, CONF_STRING, &def.zonedir, "default zone file directory (also used by zkt-signer)"},
- { "Recursive", first, last, CONF_BOOL, &def.recursive, "looking for keys down the directory tree?" },
- { "PrintTime", first, last, CONF_BOOL, &def.printtime, "print absolute key generation time?" },
- { "PrintAge", first, last, CONF_BOOL, &def.printage, "print relative key age?" },
- { "LeftJustify", first, last, CONF_BOOL, &def.ljust, "zone name is printed left justified?" },
- { "lsColor", 100, last, CONF_STRING, &def.colorterm, "terminal name (for coloring)" },
-
- { "", first, last, CONF_COMMENT, NULL },
- { "", first, last, CONF_COMMENT, "zone specific values" },
- { "ResignInterval", first, last, CONF_TIMEINT, &def.resign },
- { "SigValidity", first, last, CONF_TIMEINT, &def.sigvalidity },
- { "Max_TTL", first, 100, CONF_TIMEINT, &def.max_ttl },
- { "MaximumTTL", 101, last, CONF_TIMEINT, &def.max_ttl },
- { "Propagation", first, last, CONF_TIMEINT, &def.proptime },
- { "Key_TTL", 90, 100, CONF_TIMEINT, &def.key_ttl },
- { "DnsKeyTTL", 101, last, CONF_TIMEINT, &def.key_ttl },
-#if defined (DEF_TTL)
- { "def_ttl", first, last, CONF_TIMEINT, &def.def_ttl },
-#endif
- { "SerialFormat", 92, last, CONF_SERIAL, &def.serialform },
-
- { "", first, last, CONF_COMMENT, NULL },
- { "", first, last, CONF_COMMENT, "signing key parameters"},
- { "Key_Algo", 99, 100, CONF_ALGO, &def.k_algo }, /* now used as general KEY algorithm (KSK & ZSK) */
- { "KeyAlgo", 101, last, CONF_ALGO, &def.k_algo }, /* now used as general KEY algorithm (KSK & ZSK) */
- { "AddKey_Algo", 99, 100, CONF_ALGO, &def.k2_algo }, /* second key algorithm added (v0.99) */
- { "AddKeyAlgo", 101, last, CONF_ALGO, &def.k2_algo }, /* second key algorithm added (v0.99) */
- { "KSK_lifetime", first, 100, CONF_TIMEINT, &def.k_life },
- { "KSKlifetime", 101, last, CONF_TIMEINT, &def.k_life },
- { "KSK_algo", first, 98, CONF_ALGO, &def.k_algo }, /* old KSK value changed to key algorithm */
- { "KSK_bits", first, 100, CONF_INT, &def.k_bits },
- { "KSKbits", 101, last, CONF_INT, &def.k_bits },
- { "KSK_randfile", first, 100, CONF_STRING, &def.k_random },
- { "KSKrandfile", 101, last, CONF_STRING, &def.k_random },
- { "ZSK_lifetime", first, 100, CONF_TIMEINT, &def.z_life },
- { "ZSKlifetime", 101, last, CONF_TIMEINT, &def.z_life },
- /* { "ZSK_algo", 1, CONF_ALGO, &def.z_algo }, ZSK algo removed (set to same as ksk) */
- { "ZSK_algo", first, 98, CONF_ALGO, &def.k2_algo }, /* if someone using it already, map the algo to the additional key algorithm */
- { "ZSK_bits", first, 100, CONF_INT, &def.z_bits },
- { "ZSKbits", 101, last, CONF_INT, &def.z_bits },
-#if defined(ALLOW_ALWAYS_PREPUBLISH_ZSK) && ALLOW_ALWAYS_PREPUBLISH_ZSK
- { "ZSKpermanent", 102, last, CONF_BOOL, &def.z_always, "Always add a pre-publish zone signing key?" },
-#endif
- { "ZSK_randfile", first, 100, CONF_STRING, &def.z_random },
- { "ZSKrandfile", 101, last, CONF_STRING, &def.z_random },
- { "NSEC3", 100, last, CONF_NSEC3, &def.nsec3 },
- { "SaltBits", 98, last, CONF_INT, &def.saltbits, },
-
- { "", first, last, CONF_COMMENT, NULL },
- { "", first, 99, CONF_COMMENT, "dnssec-signer options"},
- { "", 100, last, CONF_COMMENT, "zkt-signer options"},
- { "--view", cmdln, last, CONF_STRING, &def.view },
- { "--noexec", cmdln, last, CONF_BOOL, &def.noexec },
- { "LogFile", 96, last, CONF_STRING, &def.logfile },
- { "LogLevel", 96, last, CONF_LEVEL, &def.loglevel },
- { "LogDomainDir", 96, last, CONF_STRING, &def.logdomaindir },
- { "SyslogFacility", 96, last, CONF_FACILITY, &def.syslogfacility },
- { "SyslogLevel", 96, last, CONF_LEVEL, &def.sysloglevel },
- { "VerboseLog", 96, last, CONF_INT, &def.verboselog },
- { "-v", cmdln, last, CONF_INT, &def.verbosity },
- { "KeyFile", first, last, CONF_STRING, &def.keyfile },
- { "ZoneFile", first, last, CONF_STRING, &def.zonefile },
- { "KeySetDir", first, last, CONF_STRING, &def.keysetdir },
- { "DLV_Domain", first, 100, CONF_STRING, &def.lookaside },
- { "DLVdomain", 101, last, CONF_STRING, &def.lookaside },
- { "Sig_Randfile", first, 100, CONF_STRING, &def.sig_random },
- { "SigRandfile", 101, last, CONF_STRING, &def.sig_random, "a file containing random data" },
- { "Sig_Pseudorand", first, 100, CONF_BOOL, &def.sig_pseudo },
- { "SigPseudorand", 101, last, CONF_BOOL, &def.sig_pseudo, "use pseudorandom data (faster but less secure)?" },
- { "Sig_GenerateDS", first, 100, CONF_BOOL, &def.sig_gends },
- { "SigGenerateDS", 101, last, CONF_BOOL, &def.sig_gends, "update DS records based on child zone\' dsset-* files?" },
- { "Sig_DnsKeyKSK", 99, 100, CONF_BOOL, &def.sig_dnskeyksk },
- { "SigDnsKeyKSK", 101, last, CONF_BOOL, &def.sig_dnskeyksk, "sign dns keyset with ksk only?" },
- { "Sig_Parameter", first, 100, CONF_STRING, &def.sig_param },
- { "SigParameter", 101, last, CONF_STRING, &def.sig_param, "additional dnssec-signzone parameter (if any)" },
- { "DependFiles", 113, last, CONF_STRING, &def.dependfiles, "list of files included in ZoneFile (except KeyFile)" },
- { "Distribute_Cmd", 97, 100, CONF_STRING, &def.dist_cmd },
- { "DistributeCmd", 101, last, CONF_STRING, &def.dist_cmd },
- { "NamedChrootDir", 99, last, CONF_STRING, &def.chroot_dir },
-
- { NULL, 0, 0, CONF_END, NULL},
-};
-
-/*****************************************************************
-** private (static) function deklaration and definition
-*****************************************************************/
-static const char *bool2str (int val)
-{
- return val ? "True" : "False";
-}
-
-static int set_varptr (char *entry, void *ptr, const void *ptr2)
-{
- zconf_para_t *c;
-
- for ( c = confpara; c->label; c++ )
- if ( strcasecmp (entry, c->label) == 0 )
- {
- c->var = ptr;
- c->var2 = ptr2;
- return 1;
- }
- return 0;
-}
-
-static void set_all_varptr (zconf_t *cp, const zconf_t *cp2)
-{
- set_varptr ("zonedir", &cp->zonedir, cp2 ? &cp2->zonedir: NULL);
- set_varptr ("recursive", &cp->recursive, cp2 ? &cp2->recursive: NULL);
- set_varptr ("printage", &cp->printage, cp2 ? &cp2->printage: NULL);
- set_varptr ("printtime", &cp->printtime, cp2 ? &cp2->printtime: NULL);
- set_varptr ("leftjustify", &cp->ljust, cp2 ? &cp2->ljust: NULL);
- set_varptr ("lscolor", &cp->colorterm, cp2 ? &cp2->colorterm: NULL);
-
- set_varptr ("resigninterval", &cp->resign, cp2 ? &cp2->resign: NULL);
- set_varptr ("sigvalidity", &cp->sigvalidity, cp2 ? &cp2->sigvalidity: NULL);
- set_varptr ("max_ttl", &cp->max_ttl, cp2 ? &cp2->max_ttl: NULL);
- set_varptr ("maximumttl", &cp->max_ttl, cp2 ? &cp2->max_ttl: NULL);
- set_varptr ("key_ttl", &cp->key_ttl, cp2 ? &cp2->key_ttl: NULL);
- set_varptr ("dnskeyttl", &cp->key_ttl, cp2 ? &cp2->key_ttl: NULL);
- set_varptr ("propagation", &cp->proptime, cp2 ? &cp2->proptime: NULL);
-#if defined (DEF_TTL)
- set_varptr ("def_ttl", &cp->def_ttl, cp2 ? &cp2->def_ttl: NULLl);
-#endif
- set_varptr ("serialformat", &cp->serialform, cp2 ? &cp2->serialform: NULL);
-
- set_varptr ("key_algo", &cp->k_algo, cp2 ? &cp2->k_algo: NULL);
- set_varptr ("keyalgo", &cp->k_algo, cp2 ? &cp2->k_algo: NULL);
- set_varptr ("addkey_algo", &cp->k2_algo, cp2 ? &cp2->k2_algo: NULL);
- set_varptr ("addkeyalgo", &cp->k2_algo, cp2 ? &cp2->k2_algo: NULL);
- set_varptr ("ksk_lifetime", &cp->k_life, cp2 ? &cp2->k_life: NULL);
- set_varptr ("ksklifetime", &cp->k_life, cp2 ? &cp2->k_life: NULL);
- set_varptr ("ksk_algo", &cp->k_algo, cp2 ? &cp2->k_algo: NULL); /* used only in compability mode */
- set_varptr ("ksk_bits", &cp->k_bits, cp2 ? &cp2->k_bits: NULL);
- set_varptr ("kskbits", &cp->k_bits, cp2 ? &cp2->k_bits: NULL);
- set_varptr ("ksk_randfile", &cp->k_random, cp2 ? &cp2->k_random: NULL);
- set_varptr ("kskrandfile", &cp->k_random, cp2 ? &cp2->k_random: NULL);
-
- set_varptr ("zsk_lifetime", &cp->z_life, cp2 ? &cp2->z_life: NULL);
- set_varptr ("zsklifetime", &cp->z_life, cp2 ? &cp2->z_life: NULL);
- // set_varptr ("zsk_algo", &cp->z_algo, cp2 ? &cp2->z_algo: NULL);
- set_varptr ("zsk_algo", &cp->k2_algo, cp2 ? &cp2->k2_algo: NULL);
- set_varptr ("zsk_bits", &cp->z_bits, cp2 ? &cp2->z_bits: NULL);
- set_varptr ("zskbits", &cp->z_bits, cp2 ? &cp2->z_bits: NULL);
-#if defined(ALLOW_ALWAYS_PREPUBLISH_ZSK) && ALLOW_ALWAYS_PREPUBLISH_ZSK
- set_varptr ("zskpermanent", &cp->z_always, cp2 ? &cp2->z_always: NULL);
-#endif
- set_varptr ("zsk_randfile", &cp->z_random, cp2 ? &cp2->z_random: NULL);
- set_varptr ("zskrandfile", &cp->z_random, cp2 ? &cp2->z_random: NULL);
- set_varptr ("nsec3", &cp->nsec3, cp2 ? &cp2->nsec3: NULL);
- set_varptr ("saltbits", &cp->saltbits, cp2 ? &cp2->saltbits: NULL);
-
- set_varptr ("--view", &cp->view, cp2 ? &cp2->view: NULL);
- set_varptr ("--noexec", &cp->noexec, cp2 ? &cp2->noexec: NULL);
- set_varptr ("logfile", &cp->logfile, cp2 ? &cp2->logfile: NULL);
- set_varptr ("loglevel", &cp->loglevel, cp2 ? &cp2->loglevel: NULL);
- set_varptr ("logdomaindir", &cp->logdomaindir, cp2 ? &cp2->logdomaindir: NULL);
- set_varptr ("syslogfacility", &cp->syslogfacility, cp2 ? &cp2->syslogfacility: NULL);
- set_varptr ("sysloglevel", &cp->sysloglevel, cp2 ? &cp2->sysloglevel: NULL);
- set_varptr ("verboselog", &cp->verboselog, cp2 ? &cp2->verboselog: NULL);
- set_varptr ("-v", &cp->verbosity, cp2 ? &cp2->verbosity: NULL);
- set_varptr ("keyfile", &cp->keyfile, cp2 ? &cp2->keyfile: NULL);
- set_varptr ("zonefile", &cp->zonefile, cp2 ? &cp2->zonefile: NULL);
- set_varptr ("keysetdir", &cp->keysetdir, cp2 ? &cp2->keysetdir: NULL);
- set_varptr ("dlv_domain", &cp->lookaside, cp2 ? &cp2->lookaside: NULL);
- set_varptr ("dlvdomain", &cp->lookaside, cp2 ? &cp2->lookaside: NULL);
- set_varptr ("sig_randfile", &cp->sig_random, cp2 ? &cp2->sig_random: NULL);
- set_varptr ("sigrandfile", &cp->sig_random, cp2 ? &cp2->sig_random: NULL);
- set_varptr ("sig_pseudorand", &cp->sig_pseudo, cp2 ? &cp2->sig_pseudo: NULL);
- set_varptr ("sigpseudorand", &cp->sig_pseudo, cp2 ? &cp2->sig_pseudo: NULL);
- set_varptr ("sig_generateds", &cp->sig_gends, cp2 ? &cp2->sig_gends: NULL);
- set_varptr ("siggenerateds", &cp->sig_gends, cp2 ? &cp2->sig_gends: NULL);
- set_varptr ("sig_dnskeyksk", &cp->sig_dnskeyksk, cp2 ? &cp2->sig_dnskeyksk: NULL);
- set_varptr ("sigdnskeyksk", &cp->sig_dnskeyksk, cp2 ? &cp2->sig_dnskeyksk: NULL);
- set_varptr ("sig_parameter", &cp->sig_param, cp2 ? &cp2->sig_param: NULL);
- set_varptr ("sigparameter", &cp->sig_param, cp2 ? &cp2->sig_param: NULL);
- set_varptr ("dependfiles", &cp->dependfiles, cp2 ? &cp2->dependfiles: NULL);
- set_varptr ("distribute_cmd", &cp->dist_cmd, cp2 ? &cp2->dist_cmd: NULL);
- set_varptr ("distributecmd", &cp->dist_cmd, cp2 ? &cp2->dist_cmd: NULL);
- set_varptr ("namedchrootdir", &cp->chroot_dir, cp2 ? &cp2->chroot_dir: NULL);
-}
-
-static void parseconfigline (char *buf, unsigned int line, zconf_t *z)
-{
- char *end, *val, *p;
- char *tag;
- unsigned int found;
- zconf_para_t *c;
-
- assert (buf[0] != '\0');
-
- p = &buf[strlen(buf)-1]; /* Chop off white space at eol */
- while ( p >= buf && isspace (*p) )
- *p-- = '\0';
-
- for (p = buf; isspace (*p); p++ ) /* Ignore leading white space */
- ;
-
- /* Ignore comments and emtpy lines */
- if ( *p == '\0' || ISCOMMENT (p) )
- return;
-
- tag = p;
- /* Get the end of the first argument */
- end = &buf[strlen(buf)-1];
- while ( p < end && !ISDELIM (*p) ) /* Skip until delim */
- p++;
- *p++ = '\0'; /* Terminate this argument */
- dbg_val1 ("Parsing \"%s\"\n", tag);
-
- while ( p < end && ISDELIM (*p) ) /* Skip delim chars */
- p++;
-
- val = p; /* Start of the value */
- dbg_val1 ("\tgot value \"%s\"\n", val);
-
- /* If starting with quote, skip until next quote */
- if ( *p == '"' || *p == '\'' )
- {
- p++; /* Find next quote */
- while ( p <= end && *p && *p != *val )
- p++;
- *p = '\0';
- val++; /* Skip the first quote */
- }
- else /* Otherwise check if there is any comment char at the end */
- {
- while ( p < end && *p && !ISCOMMENT(p) )
- p++;
- if ( ISCOMMENT (p) )
- {
- do /* Chop off white space before comment */
- *p-- = '\0';
- while ( p >= val && isspace (*p) );
- }
- }
-
- /* Otherwise it is already terminated above */
- found = 0;
- c = confpara;
- while ( !found && c->type != CONF_END )
- {
- if ( strcasecmp (tag, c->label) == 0 )
- {
- char **str;
- char quantity;
- long lval;
-
- found = 1;
- switch ( c->type )
- {
- case CONF_VERSION:
- break;
- case CONF_LEVEL:
- case CONF_FACILITY:
- case CONF_STRING:
- str = (char **)c->var;
- *str = strdup (val);
- str_untaint (*str); /* remove "bad" characters */
- break;
- case CONF_INT:
- sscanf (val, "%d", (int *)c->var);
- break;
- case CONF_TIMEINT:
- quantity = 'd';
- if ( *val == 'u' || *val == 'U' )
- lval = 0L;
- else
- sscanf (val, "%ld%c", &lval, &quantity);
- if ( quantity == 'm' )
- lval *= MINSEC;
- else if ( quantity == 'h' )
- lval *= HOURSEC;
- else if ( quantity == 'd' )
- lval *= DAYSEC;
- else if ( quantity == 'w' )
- lval *= WEEKSEC;
- else if ( quantity == 'y' )
- lval *= YEARSEC;
- (*(long *)c->var) = lval;
- break;
- case CONF_ALGO:
- if ( strcmp (val, "1") == 0 || strcasecmp (val, "rsa") == 0 ||
- strcasecmp (val, "rsamd5") == 0 )
- *((int *)c->var) = DK_ALGO_RSA;
- else if ( strcmp (val, "3") == 0 ||
- strcasecmp (val, "dsa") == 0 )
- *((int *)c->var) = DK_ALGO_DSA;
- else if ( strcmp (val, "5") == 0 ||
- strcasecmp (val, "rsasha1") == 0 )
- *((int *)c->var) = DK_ALGO_RSASHA1;
- else if ( strcmp (val, "6") == 0 ||
- strcasecmp (val, "nsec3dsa") == 0 ||
- strcasecmp (val, "n3dsa") == 0 )
- *((int *)c->var) = DK_ALGO_NSEC3DSA;
- else if ( strcmp (val, "7") == 0 ||
- strcasecmp (val, "nsec3rsasha1") == 0 ||
- strcasecmp (val, "n3rsasha1") == 0 )
- *((int *)c->var) = DK_ALGO_NSEC3RSASHA1;
- else if ( strcmp (val, "8") == 0 ||
- strcasecmp (val, "rsasha2") == 0 ||
- strcasecmp (val, "rsasha256") == 0 ||
- strcasecmp (val, "nsec3rsasha2") == 0 ||
- strcasecmp (val, "n3rsasha2") == 0 ||
- strcasecmp (val, "nsec3rsasha256") == 0 ||
- strcasecmp (val, "n3rsasha256") == 0 )
- *((int *)c->var) = DK_ALGO_RSASHA256;
- else if ( strcmp (val, "10") == 0 ||
- strcasecmp (val, "rsasha5") == 0 ||
- strcasecmp (val, "rsasha512") == 0 ||
- strcasecmp (val, "nsec3rsasha5") == 0 ||
- strcasecmp (val, "n3rsasha5") == 0 ||
- strcasecmp (val, "nsec3rsasha512") == 0 ||
- strcasecmp (val, "n3rsasha512") == 0 )
- *((int *)c->var) = DK_ALGO_RSASHA512;
- else
- error ("Illegal algorithm \"%s\" "
- "in line %d.\n" , val, line);
- break;
- case CONF_SERIAL:
- if ( strcasecmp (val, "unixtime") == 0 )
- *((serial_form_t *)c->var) = Unixtime;
- else if ( strcasecmp (val, "incremental") == 0 || strcasecmp (val, "inc") == 0 )
- *((serial_form_t *)c->var) = Incremental;
- else
- error ("Illegal serial no format \"%s\" "
- "in line %d.\n" , val, line);
- break;
- case CONF_NSEC3:
- if ( strcasecmp (val, "off") == 0 )
- *((nsec3_t *)c->var) = NSEC3_OFF;
- else if ( strcasecmp (val, "on") == 0 )
- *((nsec3_t *)c->var) = NSEC3_ON;
- else if ( strcasecmp (val, "optout") == 0 )
- *((nsec3_t *)c->var) = NSEC3_OPTOUT;
- else
- error ("Illegal NSEC3 format \"%s\" "
- "in line %d.\n" , val, line);
- break;
- case CONF_BOOL:
- *((int *)c->var) = ISTRUE (val);
- break;
- default:
- fatal ("Illegal configuration type in line %d.\n", line);
- }
- }
- c++;
- }
- if ( !found )
- error ("Unknown configuration statement: %s \"%s\"\n", tag, val);
- return;
-}
-
-static void printconfigline (FILE *fp, zconf_para_t *cp)
-{
- int i;
- long lval;
- int printnl;
-
- assert (fp != NULL);
- assert (cp != NULL);
-
- printnl = 0;
- switch ( cp->type )
- {
- case CONF_VERSION:
- fprintf (fp, "#\tZKT config file for version %d.%d.%d\n",
- compversion / 100,
- (compversion / 10 ) % 10,
- compversion % 10);
- break;
- case CONF_COMMENT:
- if ( cp->var )
- fprintf (fp, "# %s", (char *)cp->var);
- printnl = 1;
- break;
- case CONF_LEVEL:
- case CONF_FACILITY:
- if ( *(char **)cp->var != NULL )
- {
- if ( **(char **)cp->var != '\0' )
- {
- char *p;
-
- fprintf (fp, "%s:\t", cp->label);
- for ( p = *(char **)cp->var; *p; p++ )
- putc (toupper (*p), fp);
- // fprintf (fp, "\n");
- }
- else
- fprintf (fp, "%s:\tNONE", cp->label);
- }
- if ( cp->type == CONF_LEVEL )
- fprintf (fp, "\t\t# (NONE|DEBUG|INFO|NOTICE|WARNING|ERROR|FATAL)\n");
- else
- fprintf (fp, "\t\t# (NONE|USER|DAEMON|LOCAL[0-7])\n");
- break;
- case CONF_STRING:
- if ( *(char **)cp->var )
- printnl = fprintf (fp, "%s:\t\"%s\"", cp->label, *(char **)cp->var);
- break;
- case CONF_BOOL:
- fprintf (fp, "%s:\t%s", cp->label, bool2str ( *(int*)cp->var ));
- printnl = 1;
- break;
- case CONF_TIMEINT:
- lval = *(ulong*)cp->var; /* in that case it should be of type ulong */
- fprintf (fp, "%s:\t%s", cp->label, timeint2str (lval));
- if ( lval )
- fprintf (fp, "\t\t# (%ld seconds)", lval);
- printnl = 1;
- break;
- case CONF_ALGO:
- i = *(int*)cp->var;
- if ( i )
- {
- fprintf (fp, "%s:\t%s ", cp->label, dki_algo2str (i));
- fprintf (fp, "\t# (Algorithm ID %d)\n", i);
- }
- break;
- case CONF_SERIAL:
- fprintf (fp, "%s:\t", cp->label);
- if ( *(serial_form_t*)cp->var == Unixtime )
- fprintf (fp, "UnixTime");
- else
- fprintf (fp, "Incremental");
- fprintf (fp, "\t# (UnixTime|Incremental)\n");
- break;
- case CONF_NSEC3:
- fprintf (fp, "%s:\t\t", cp->label);
- if ( *(nsec3_t*)cp->var == NSEC3_OFF )
- fprintf (fp, "Off");
- else if ( *(nsec3_t*)cp->var == NSEC3_ON )
- fprintf (fp, "On");
- else if ( *(nsec3_t*)cp->var == NSEC3_OPTOUT )
- fprintf (fp, "OptOut");
- fprintf (fp, "\t\t# (On|Off|OptOut)\n");
- break;
- case CONF_INT:
- fprintf (fp, "%s:\t%d", cp->label, *(int *)cp->var);
- printnl = 1;
- break;
- case CONF_END:
- /* NOTREACHED */
- break;
- }
- if ( printnl )
- {
- if ( cp->desc )
- {
- if ( printnl < 20 )
- putc ('\t', fp);
- fprintf (fp, "\t# %s\n", cp->desc);
- }
- else
- putc ('\n', fp);
-
- }
-}
-
-/*****************************************************************
-** public function definition
-*****************************************************************/
-
-void setconfigversion (int version)
-{
- compversion = version;
-}
-
-const char *timeint2str (unsigned long val)
-{
- static char str[20+1];
-
- if ( val == 0 )
- snprintf (str, sizeof (str), "Unset");
- else if ( val % YEARSEC == 0 )
- snprintf (str, sizeof (str), "%luy", val / YEARSEC);
- else if ( val % WEEKSEC == 0 )
- snprintf (str, sizeof (str), "%luw", val / WEEKSEC);
- else if ( val % DAYSEC == 0 )
- snprintf (str, sizeof (str), "%lud", val / DAYSEC);
- else if ( val % HOURSEC == 0 )
- snprintf (str, sizeof (str), "%luh", val / HOURSEC);
- else if ( val % MINSEC == 0 )
- snprintf (str, sizeof (str), "%lum", val / MINSEC);
- else
- snprintf (str, sizeof (str), "%lus", val);
-
- return str;
-}
-
-
-/*****************************************************************
-** loadconfig (file, conf)
-** Loads a config file into the "conf" structure pointed to by "z".
-** If "z" is NULL then a new conf struct will be dynamically
-** allocated.
-** If no filename is given the conf struct will be initialized
-** with the builtin default config
-*****************************************************************/
-zconf_t *loadconfig (const char *filename, zconf_t *z)
-{
- FILE *fp;
- char buf[1023+1];
- unsigned int line;
-
- if ( z == NULL ) /* allocate new memory for zconf_t */
- {
- if ( (z = calloc (1, sizeof (zconf_t))) == NULL )
- return NULL;
-
- if ( filename && *filename )
- memcpy (z, &def, sizeof (zconf_t)); /* init new struct with defaults */
- }
-
- if ( filename == NULL || *filename == '\0' ) /* no file name given... */
- {
- dbg_val0("loadconfig (NULL)\n");
- memcpy (z, &def, sizeof (zconf_t)); /* ..then init with defaults */
- return z;
- }
-
- dbg_val1 ("loadconfig (%s)\n", filename);
- set_all_varptr (z, NULL);
-
- if ( (fp = fopen(filename, "r")) == NULL )
- fatal ("Could not open config file \"%s\"\n", filename);
-
- line = 0;
- while (fgets(buf, sizeof(buf), fp))
- parseconfigline (buf, ++line, z);
-
- fclose(fp);
- return z;
-}
-
-# define STRCONFIG_DELIMITER ";\r\n"
-zconf_t *loadconfig_fromstr (const char *str, zconf_t *z)
-{
- char *buf;
- char *tok, *toksave;
- unsigned int line;
-
- if ( z == NULL )
- {
- if ( (z = calloc (1, sizeof (zconf_t))) == NULL )
- return NULL;
- memcpy (z, &def, sizeof (zconf_t)); /* init with defaults */
- }
-
- if ( str == NULL || *str == '\0' )
- {
- dbg_val0("loadconfig_fromstr (NULL)\n");
- memcpy (z, &def, sizeof (zconf_t)); /* init with defaults */
- return z;
- }
-
- dbg_val1 ("loadconfig_fromstr (\"%s\")\n", str);
- set_all_varptr (z, NULL);
-
- /* str is const, so we have to copy it into a new buffer */
- if ( (buf = strdup (str)) == NULL )
- fatal ("loadconfig_fromstr: Out of memory");
-
- line = 0;
- tok = strtok_r (buf, STRCONFIG_DELIMITER, &toksave);
- while ( tok )
- {
- line++;
- parseconfigline (tok, line, z);
- tok = strtok_r (NULL, STRCONFIG_DELIMITER, &toksave);
- }
- free (buf);
- return z;
-}
-
-/*****************************************************************
-** dupconfig (config)
-** duplicate config struct and return a ptr to the new struct
-*****************************************************************/
-zconf_t *dupconfig (const zconf_t *conf)
-{
- zconf_t *z;
-
- assert (conf != NULL);
-
- if ( (z = calloc (1, sizeof (zconf_t))) == NULL )
- return NULL;
-
- memcpy (z, conf, sizeof (zconf_t));
-
- return z;
-}
-
-/*****************************************************************
-** freeconfig (config)
-** free memory for config struct and return a NULL ptr
-*****************************************************************/
-zconf_t *freeconfig (zconf_t *conf)
-{
- if (conf != NULL);
- free (conf);
-
- return (zconf_t *)NULL;
-}
-
-/*****************************************************************
-** setconfigpar (entry, pval)
-*****************************************************************/
-int setconfigpar (zconf_t *config, char *entry, const void *pval)
-{
- char *str;
- zconf_para_t *c;
-
- set_all_varptr (config, NULL);
-
- for ( c = confpara; c->type != CONF_END; c++ )
- if ( strcasecmp (entry, c->label) == 0 )
- {
- switch ( c->type )
- {
- case CONF_VERSION:
- break;
- case CONF_LEVEL:
- case CONF_FACILITY:
- case CONF_STRING:
- if ( pval )
- {
- str = strdup ((char *)pval);
- str_untaint (str); /* remove "bad" characters */
- }
- else
- str = NULL;
- *((char **)c->var) = str;
- break;
- case CONF_BOOL:
- /* fall through */
- case CONF_ALGO:
- /* fall through */
- case CONF_INT:
- *((int *)c->var) = *((int *)pval);
- break;
- case CONF_TIMEINT:
- *((long *)c->var) = *((long *)pval);
- break;
- case CONF_NSEC3:
- *((nsec3_t *)c->var) = *((nsec3_t *)pval);
- break;
- case CONF_SERIAL:
- *((serial_form_t *)c->var) = *((serial_form_t *)pval);
- break;
- case CONF_COMMENT:
- case CONF_END:
- /* NOTREACHED */
- break;
- }
- return 1;
- }
- return 0;
-}
-
-/*****************************************************************
-** printconfig (fname, config)
-*****************************************************************/
-int printconfig (const char *fname, const zconf_t *z)
-{
- zconf_para_t *cp;
- FILE *fp;
-
- if ( z == NULL )
- return 0;
-
- fp = stdout;
- if ( fname && *fname )
- {
- if ( strcmp (fname, "stdout") == 0 )
- fp = stdout;
- else if ( strcmp (fname, "stderr") == 0 )
- fp = stderr;
- else if ( (fp = fopen(fname, "w")) == NULL )
- {
- error ("Could not open config file \"%s\" for writing\n", fname);
- return -1;
- }
- }
-
- set_all_varptr ((zconf_t *)z, NULL);
-
- for ( cp = confpara; cp->type != CONF_END; cp++ ) /* loop through all parameter */
- if ( iscompatible (cp) ) /* is parameter compatible to current version? */
- printconfigline (fp, cp); /* print it out */
-
- if ( fp && fp != stdout && fp != stderr )
- fclose (fp);
-
- return 1;
-}
-
-/*****************************************************************
-** printconfigdiff (fname, conf_a, conf_b)
-*****************************************************************/
-int printconfigdiff (const char *fname, const zconf_t *ref, const zconf_t *z)
-{
- zconf_para_t *cp;
- int eq;
- char *p1, *p2;
- FILE *fp;
-
- if ( ref == NULL || z == NULL )
- return 0;
-
- fp = NULL;
- if ( fname && *fname )
- {
- if ( strcmp (fname, "stdout") == 0 )
- fp = stdout;
- else if ( strcmp (fname, "stderr") == 0 )
- fp = stderr;
- else if ( (fp = fopen(fname, "w")) == NULL )
- {
- error ("Could not open config file \"%s\" for writing\n", fname);
- return -1;
- }
- }
-
- set_all_varptr ((zconf_t *)z, ref);
-
- for ( cp = confpara; cp->type != CONF_END; cp++ ) /* loop through all parameter */
- {
- eq = 0;
- if ( iscmdline (cp) ) /* skip command line parameter */
- continue;
-
- if ( !iscompatible (cp) ) /* is parameter compatible to current version? */
- continue;
-
- if ( cp->type == CONF_VERSION || cp->type == CONF_END || cp->type == CONF_COMMENT )
- continue;
-
- dbg_val5 ("printconfigdiff: %d: %s %d %d %d\n", cp->type, cp->label,
- compversion, cp->used_since, cp->used_till);
- assert ( cp->var2 != NULL );
-
- switch ( cp->type )
- {
- case CONF_VERSION:
- case CONF_END:
- case CONF_COMMENT:
- continue;
- case CONF_NSEC3:
- eq = ( *(nsec3_t *)cp->var == *(nsec3_t *)cp->var2 );
- break;
- case CONF_SERIAL:
- eq = ( *(serial_form_t *)cp->var == *(serial_form_t *)cp->var2 );
- break;
- case CONF_BOOL:
- case CONF_ALGO:
- case CONF_INT:
- eq = ( *(int *)cp->var == *(int *)cp->var2 );
- break;
- case CONF_TIMEINT:
- eq = ( *(long *)cp->var == *(long *)cp->var2 );
- break;
- case CONF_LEVEL:
- case CONF_FACILITY:
- case CONF_STRING:
- p1 = *(char **)cp->var;
- p2 = *(char **)cp->var2;
- if ( p1 && p2 )
- eq = strcmp (p1, p2) == 0;
- else if ( p1 == NULL || p2 == NULL )
- eq = 0;
- else
- eq = 1;
- }
- if ( !eq )
- printconfigline (fp, cp); /* print it out */
- }
-
- if ( fp && fp != stdout && fp != stderr )
- fclose (fp);
-
- return 1;
-}
-
-/*****************************************************************
-** checkconfig (config)
-*****************************************************************/
-int checkconfig (const zconf_t *z)
-{
- int ret;
- long max_ttl;
-
- if ( z == NULL )
- return 1;
-
- max_ttl = z->max_ttl;
- if ( max_ttl <= 0 )
- max_ttl = z->sigvalidity;
-
- ret = 0;
- if ( z->k_random && strcmp (z->k_random, "/dev/urandom") == 0 )
- ret = fprintf (stderr, "random device without enough entropie used for KSK generation \n");
- if ( z->z_random && strcmp (z->z_random, "/dev/urandom") == 0 )
- ret = fprintf (stderr, "random device without enough entropie used for ZSK generation\n");
-
- if ( z->k_bits < 512 || z->z_bits < 512 )
- ret = fprintf (stderr, "Algorithm requires a bit size of at least 512 \n");
-
- if ( z->k_algo == DK_ALGO_RSASHA512 && ( z->k_bits < 1024 || z->z_bits < 1024 ) )
- ret = fprintf (stderr, "Algorithm RSASHA 512 requires a bit size of at least 1024 \n");
-
- if ( z->saltbits < 4 )
- ret = fprintf (stderr, "Saltlength must be at least 4 bits\n");
- if ( z->saltbits > 128 )
- {
- fprintf (stderr, "While the maximum is 520 bits of salt, it's not recommended to use more than 128 bits.\n");
- ret = fprintf (stderr, "The current value is %d bits\n", z->saltbits);
- }
-
- if ( z->sigvalidity < (1 * DAYSEC) || z->sigvalidity > (12 * WEEKSEC) )
- {
- fprintf (stderr, "Signature should be valid for at least 1 day and no longer than 3 month (12 weeks)\n");
- ret = fprintf (stderr, "The current value is %s\n", timeint2str (z->sigvalidity));
- }
-
- if ( z->max_ttl <= 0 )
- {
- ret = fprintf (stderr, "The max TTL is unknown which results in suboptimal key rollover.\n");
- fprintf (stderr, "Please set max_ttl to the maximum ttl used in the zone (run zkt-conf -w zone.db)\n");
- }
- else
- if ( max_ttl > z->sigvalidity/2 )
- ret = fprintf (stderr, "Max TTL (%ld) should be a few times smaller than the signature validity (%ld)\n",
- max_ttl, z->sigvalidity);
-
- // if ( z->resign > (z->sigvalidity*5/6) - (max_ttl + z->proptime) )
- if ( z->resign > (z->sigvalidity*5/6) )
- {
- fprintf (stderr, "Re-signing interval (%s) should be less than ", timeint2str (z->resign));
- ret = fprintf (stderr, "5/6 of sigvalidity (%s)\n", timeint2str (z->sigvalidity));
- }
-
- if ( z->max_ttl > 0 && z->resign > (z->sigvalidity - max_ttl) )
- {
- fprintf (stderr, "Re-signing interval (%s) should be ", timeint2str (z->resign));
- fprintf (stderr, "end at least one max_ttl (%ld) before the end of ", max_ttl);
- ret = fprintf (stderr, "signature lifetime (%ld) (%s)\n", z->sigvalidity, timeint2str(z->sigvalidity - max_ttl));
- }
-
- if ( z->z_life > (24 * WEEKSEC) * (z->z_bits / 512.) )
- {
- fprintf (stderr, "Lifetime of zone signing key (%s) ", timeint2str (z->z_life));
- fprintf (stderr, "seems a little bit high ");
- ret = fprintf (stderr, "(In respect of key size (%d))\n", z->z_bits);
- }
-
- if ( z->k_life > 0 && z->k_life <= z->z_life )
- {
- fprintf (stderr, "Lifetime of key signing key (%s) ", timeint2str (z->k_life));
- ret = fprintf (stderr, "should be greater than lifetime of zsk\n");
- }
- if ( z->k_life > 0 && z->k_life > (52 * WEEKSEC) * (z->k_bits / 512.) )
- {
- fprintf (stderr, "Lifetime of key signing key (%s) ", timeint2str (z->k_life));
- fprintf (stderr, "seems a little bit high ");
- ret = fprintf (stderr, "(In respect of key size (%d))\n", z->k_bits);
- }
-
- return !ret;
-}
-
-#ifdef CONF_TEST
-const char *progname;
-static zconf_t *config;
-
-main (int argc, char *argv[])
-{
- char *optstr;
- int val;
-
- progname = *argv;
-
- config = loadconfig ("", (zconf_t *) NULL); /* load built in defaults */
-
- while ( --argc >= 1 )
- {
- optstr = *++argv;
- config = loadconfig_fromstr (optstr, config);
- }
-
- val = 1;
- setconfigpar (config, "-v", &val);
- val = 2;
- setconfigpar (config, "verboselog", &val);
- val = 1;
- setconfigpar (config, "recursive", &val);
- val = 1200;
- setconfigpar (config, "propagation", &val);
-
- printconfig ("stdout", config);
-}
-#endif
diff --git a/contrib/zkt-1.1.3/zconf.h b/contrib/zkt-1.1.3/zconf.h
deleted file mode 100644
index 839f38e2..00000000
--- a/contrib/zkt-1.1.3/zconf.h
+++ /dev/null
@@ -1,210 +0,0 @@
-/*****************************************************************
-**
-** @(#) zconf.h
-**
-** Copyright (c) Jan 2005, Jeroen Masar, Holger Zuleger.
-** All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Jeroen Masar and Holger Zuleger nor the
-** names of its contributors may be used to endorse or promote products
-** derived from this software without specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-#ifndef ZCONF_H
-# define ZCONF_H
-
-
-# define MINSEC 60L
-# define HOURSEC (MINSEC * 60)
-# define DAYSEC (HOURSEC * 24)
-# define WEEKSEC (DAYSEC * 7)
-# define YEARSEC (DAYSEC * 365)
-# define DAY (1)
-# define WEEK (DAY * 7)
-# define MONTH (DAY * 30)
-# define YEAR (DAY * 365)
-
-# define SIG_VALID_DAYS (21) /* 3 Weeks */
-# define SIG_VALIDITY (SIG_VALID_DAYS * DAYSEC)
-# define MAX_TTL ( 8 * HOURSEC) /* default value of maximum ttl time */
-# define KEY_TTL ( 4 * HOURSEC) /* default value of KEY TTL */
-# define PROPTIME ( 5 * MINSEC) /* expected slave propagation time */
- /* should be small if notify is used */
-#if defined (DEF_TTL)
-# define DEF_TTL (MAX_TTL/2) /* currently not used */
-#endif
-
-# define RESIGN_INT ((SIG_VALID_DAYS - (SIG_VALID_DAYS / 3)) * DAYSEC)
-# define KSK_LIFETIME (2 * YEARSEC)
-#if 1
-# define ZSK_LIFETIME ((SIG_VALID_DAYS * 3) * DAYSEC) /* set to three times the sig validity */
-#else
-# define ZSK_LIFETIME (12 * WEEKSEC) /* set fixed to 3 month */
-#endif
-
-/* # define KSK_ALGO (DK_ALGO_RSASHA1) KSK_ALGO renamed to KEY_ALGO (v0.99) */
-# define KEY_ALGO (DK_ALGO_RSASHA1) /* general KEY_ALGO used for both ksk and zsk */
-# define ADDITIONAL_KEY_ALGO 0
-# define KSK_BITS (1300)
-# define KSK_RANDOM NULL
-/* # define ZSK_ALGO (DK_ALGO_RSASHA1) ZSK_ALGO has to be the same as KSK, so this is no longer used (v0.99) */
-# define ZSK_BITS (512)
-# define ZSK_ALWAYS 0
-# define ZSK_RANDOM "/dev/urandom"
-# define NSEC3 0 /* by default nsec3 is off */
-# define SALTLEN 24 /* salt length in bits (resolution is 4 bits)*/
-
-#if 0
-# define ZONEDIR "."
-#else
-# define ZONEDIR CONFIG_PATH
-#endif
-# define RECURSIVE 0
-# define PRINTTIME 1
-# define PRINTAGE 0
-# define LJUST 0
-# define LSCOLORTERM NULL /* or "" */
-# define KEYSETDIR ".." /* keysets */
-# define LOGFILE ""
-# define LOGLEVEL "error"
-# define LOGDOMAINDIR ""
-# define SYSLOGFACILITY "none"
-# define SYSLOGLEVEL "notice"
-# define VERBOSELOG 0
-# define ZONEFILE "zone.db"
-# define DNSKEYFILE "dnskey.db"
-# define LOOKASIDEDOMAIN "" /* "dlv.trusted-keys.de" */
-# define SIG_RANDOM NULL /* "/dev/urandom" */
-# define SIG_PSEUDO 0
-# define SIG_GENDS 1
-# define SIG_DNSKEY_KSK 0 /* Sign DNSKEY RR with KSK only */
-# define SIG_PARAM ""
-# define DEPENDFILES ""
-# define DIST_CMD NULL /* default is to run "rndc reload" */
-# define NAMED_CHROOT NULL /* default is none */
-
-#ifndef CONFIG_PATH
-# define CONFIG_PATH "/var/named/"
-#endif
-# define CONFIG_FILE CONFIG_PATH "dnssec.conf"
-# define LOCALCONF_FILE "dnssec.conf"
-
-/* external command execution path (should be set via config.h) */
-#ifndef BIND_UTIL_PATH
-# define BIND_UTIL_PATH "/usr/local/sbin/" /* beware of trailing '/' */
-#endif
-# define SIGNCMD BIND_UTIL_PATH "dnssec-signzone"
-# define KEYGENCMD BIND_UTIL_PATH "dnssec-keygen"
-# define RELOADCMD BIND_UTIL_PATH "rndc"
-
-/* macros */
-# define isflistdelim(c) ( (c) == ':' || (c) == ',' || isspace (c) )
-
-typedef enum {
- Unixtime = 1,
- Incremental
-} serial_form_t;
-
-typedef enum {
- NSEC3_OFF = 0,
- NSEC3_ON,
- NSEC3_OPTOUT
-} nsec3_t;
-
-typedef enum {
- none = 0,
- user,
- local0, local1, local2, local3, local4, local5, local6, local7
-} syslog_facility_t;
-
-typedef struct zconf {
- char *zonedir;
- int recursive;
- int printtime;
- int printage;
- int ljust;
- char *colorterm;
- long sigvalidity; /* should be less than expire time */
- long max_ttl; /* should be set to the maximum used ttl in the zone */
- long key_ttl;
- long proptime; /* expected time offset for zone propagation */
-#if defined (DEF_TTL)
- long def_ttl; /* default ttl set in soa record */
-#endif
- serial_form_t serialform; /* format of serial no */
- long resign; /* resign interval */
-
- int k_algo;
- int k2_algo;
- long k_life;
- int k_bits;
- char *k_random;
- long z_life;
- /* int z_algo; no longer used; renamed to k2_algo (v0.99) */
- int z_bits;
- int z_always; /* always pre-publish zsk ? */
- char *z_random;
- nsec3_t nsec3; /* 0 == off; 1 == on; 2 == on with optout */
- int saltbits;
-
- char *view;
- int noexec;
- // char *errlog;
- char *logfile;
- char *loglevel;
- char *logdomaindir;
- char *syslogfacility;
- char *sysloglevel;
- int verboselog;
- int verbosity;
- char *keyfile;
- char *zonefile;
- char *keysetdir;
- char *lookaside;
- char *sig_random;
- int sig_pseudo;
- int sig_gends;
- int sig_dnskeyksk;
- char *sig_param;
- char *dependfiles;
- char *dist_cmd; /* cmd to run instead of "rndc reload" */
- char *chroot_dir; /* chroot directory of named */
-} zconf_t;
-
-extern const char *timeint2str (unsigned long val);
-extern zconf_t *loadconfig (const char *filename, zconf_t *z);
-extern zconf_t *loadconfig_fromstr (const char *str, zconf_t *z);
-extern zconf_t *dupconfig (const zconf_t *conf);
-extern zconf_t *freeconfig (zconf_t *conf);
-extern int setconfigpar (zconf_t *conf, char *entry, const void *pval);
-extern int printconfig (const char *fname, const zconf_t *cp);
-extern int printconfigdiff (const char *fname, const zconf_t *ref, const zconf_t *z);
-extern int checkconfig (const zconf_t *z);
-extern void setconfigversion (int version);
-
-#endif
diff --git a/contrib/zkt-1.1.3/zfparse.c b/contrib/zkt-1.1.3/zfparse.c
deleted file mode 100644
index c093e76d..00000000
--- a/contrib/zkt-1.1.3/zfparse.c
+++ /dev/null
@@ -1,299 +0,0 @@
-/*****************************************************************
-**
-** @(#) zfparse.c -- A zone file parser
-**
-** Copyright (c) Jan 2010 - Jan 2010, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-# include <stdio.h>
-# include <string.h>
-# include <stdlib.h>
-# include <unistd.h> /* for link(), unlink() */
-# include <ctype.h>
-# include <assert.h>
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-# include "config_zkt.h"
-# include "zconf.h"
-# include "misc.h"
-# include "log.h"
-# include "debug.h"
-#define extern
-# include "zfparse.h"
-#undef extern
-
-
-extern const char *progname;
-
-/*****************************************************************
-** is_multiline_rr (const char *s)
-*****************************************************************/
-static const char *is_multiline_rr (int *multi_line_rr, const char *p)
-{
- while ( *p && *p != ';' )
- {
- if ( *p == '\"' )
- do
- p++;
- while ( *p && *p != '\"' );
-
- if ( *p == '(' )
- *multi_line_rr = 1;
- if ( *p == ')' )
- *multi_line_rr = 0;
- p++;
- }
- return p;
-}
-
-/*****************************************************************
-** skipws (const char *s)
-*****************************************************************/
-static const char *skipws (const char *s)
-{
- while ( *s && (*s == ' ' || *s == '\t' || *s == '\n') )
- s++;
- return s;
-}
-
-/*****************************************************************
-** skiplabel (const char *s)
-*****************************************************************/
-static const char *skiplabel (const char *s)
-{
- while ( *s && *s != ';' && *s != ' ' && *s != '\t' && *s != '\n' )
- s++;
- return s;
-}
-
-/*****************************************************************
-** setminmax ()
-*****************************************************************/
-static void setminmax (long *pmin, long val, long *pmax)
-{
- if ( val < *pmin )
- *pmin = val;
- if ( val > *pmax )
- *pmax = val;
-}
-
-/*****************************************************************
-** get_ttl ()
-*****************************************************************/
-static long get_ttl (const char *s)
-{
- char quantity;
- long lval;
-
- quantity = 'd';
- sscanf (s, "%ld%c", &lval, &quantity);
- quantity = tolower (quantity);
- if ( quantity == 'm' )
- lval *= MINSEC;
- else if ( quantity == 'h' )
- lval *= HOURSEC;
- else if ( quantity == 'd' )
- lval *= DAYSEC;
- else if ( quantity == 'w' )
- lval *= WEEKSEC;
- else if ( quantity == 'y' )
- lval *= YEARSEC;
-
- return lval;
-}
-
-/*****************************************************************
-** addkeydb ()
-*****************************************************************/
-int addkeydb (const char *file, const char *keydbfile)
-{
- FILE *fp;
-
- if ( (fp = fopen (file, "a")) == NULL )
- return -1;
-
- fprintf (fp, "\n");
- fprintf (fp, "$INCLUDE %s\t; this is the database of public DNSKEY RR\n", keydbfile);
-
- fclose (fp);
-
- return 0;
-}
-
-/*****************************************************************
-** parsezonefile ()
-** parse the BIND zone file 'file' and store the minimum and
-** maximum ttl value in the corresponding parameter.
-** if keydbfile is set, check if this file is already include.
-** if inclfiles is not NULL store a list of included files names
-** in it.
-** return 0 if keydbfile is not included
-** return 1 if keydbfile is included
-** return -1 on error
-*****************************************************************/
-int parsezonefile (const char *file, long *pminttl, long *pmaxttl, const char *keydbfile, char *inclfiles, size_t *plen)
-{
- FILE *infp;
- int len;
- int lnr;
- long ttl;
- int multi_line_rr;
- int keydbfilefound;
- char buf[1024];
- const char *p;
-
- assert (file != NULL);
- assert (pminttl != NULL);
- assert (pmaxttl != NULL);
-
- dbg_val4 ("parsezonefile (\"%s\", %ld, %ld, \"%s\")\n", file, *pminttl, *pmaxttl, keydbfile);
-
- if ( (infp = fopen (file, "r")) == NULL )
- {
- error ("parsezonefile: couldn't open file \"%s\" for input\n", file);
- return -1;
- }
-
- lnr = 0;
- keydbfilefound = 0;
- multi_line_rr = 0;
- while ( fgets (buf, sizeof buf, infp) != NULL )
- {
- len = strlen (buf);
- if ( buf[len-1] != '\n' ) /* line too long ? */
- fprintf (stderr, "line too long\n");
- lnr++;
-
- p = buf;
- if ( multi_line_rr ) /* skip line if it's part of a multiline rr */
- {
- is_multiline_rr (&multi_line_rr, p);
- continue;
- }
-
- if ( *p == '$' ) /* special directive ? */
- {
- if ( strncmp (p+1, "TTL", 3) == 0 ) /* $TTL ? */
- {
- ttl = get_ttl (p+4);
- dbg_val3 ("%s:%d:ttl %ld\n", file, lnr, ttl);
- setminmax (pminttl, ttl, pmaxttl);
- }
- else if ( strncmp (p+1, "INCLUDE", 7) == 0 ) /* $INCLUDE ? */
- {
- char fname[30+1];
-
- sscanf (p+9, "%30s", fname);
- dbg_val ("$INCLUDE directive for file \"%s\" found\n", fname);
- if ( strcmp (fname, keydbfile) == 0 )
- keydbfilefound = 1;
- else
- {
- if ( inclfiles && plen )
- {
- len = snprintf (inclfiles, *plen, ",%s", fname);
- if ( *plen <= len ) /* no space left in include file string */
- return keydbfilefound;
- inclfiles += len;
- *plen -= len;
- }
- int ret = parsezonefile (fname, pminttl, pmaxttl, keydbfile, inclfiles, plen);
- if ( ret ) /* keydb found or read error ? */
- keydbfilefound = ret;
- }
- }
- }
- else if ( !isspace (*p) ) /* label ? */
- p = skiplabel (p);
-
- p = skipws (p);
- if ( *p == ';' ) /* skip line if it's a comment line */
- continue;
-
- /* skip class (hesiod is not supported now) */
- if ( (toupper (*p) == 'I' && toupper (p[1]) == 'N') ||
- (toupper (*p) == 'C' && toupper (p[1]) == 'H') )
- p += 2;
- p = skipws (p);
-
- if ( isdigit (*p) ) /* ttl ? */
- {
- ttl = get_ttl (p);
- dbg_val3 ("%s:%d:ttl %ld\n", file, lnr, ttl);
- setminmax (pminttl, ttl, pmaxttl);
- }
-
- /* check the rest of the line if it's the beginning of a multi_line_rr */
- is_multiline_rr (&multi_line_rr, p);
- }
-
- if ( file )
- fclose (infp);
-
- dbg_val5 ("parsezonefile (\"%s\", %ld, %ld, \"%s\") ==> %d\n",
- file, *pminttl, *pmaxttl, keydbfile, keydbfilefound);
- return keydbfilefound;
-}
-
-
-#ifdef TEST
-const char *progname;
-int main (int argc, char *argv[])
-{
- long minttl;
- long maxttl;
- int keydbfound;
- char *dnskeydb;
-
- progname = *argv;
- dnskeydb = NULL;
- dnskeydb = "dnskey.db";
-
- minttl = 0x7FFFFFFF;
- maxttl = 0;
- keydbfound = parsezonefile (argv[1], &minttl, &maxttl, dnskeydb);
- if ( keydbfound < 0 )
- error ("can't parse zone file %s\n", argv[1]);
-
- if ( dnskeydb && !keydbfound )
- {
- printf ("$INCLUDE %s directive added \n", dnskeydb);
- addkeydb (argv[1], dnskeydb);
- }
-
- printf ("minttl = %ld\n", minttl);
- printf ("maxttl = %ld\n", maxttl);
-
- return 0;
-}
-#endif
diff --git a/contrib/zkt-1.1.3/zfparse.h b/contrib/zkt-1.1.3/zfparse.h
deleted file mode 100644
index 131ec40c..00000000
--- a/contrib/zkt-1.1.3/zfparse.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*****************************************************************
-**
-** @(#) zfparse.h -- headerfile for a zone file parser
-**
-** Copyright (c) Jan 2010 - Feb 2010, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-
-#ifndef ZFPARSE_H
-# define ZFPARSE_H
-extern int parsezonefile (const char *file, long *pminttl, long *pmaxttl, const char *keydbfile, char *inclfiles, size_t *plen);
-extern int addkeydb (const char *file, const char *keydbfile);
-#endif
diff --git a/contrib/zkt-1.1.3/zkt-conf.c b/contrib/zkt-1.1.3/zkt-conf.c
deleted file mode 100644
index b50e7cbb..00000000
--- a/contrib/zkt-1.1.3/zkt-conf.c
+++ /dev/null
@@ -1,360 +0,0 @@
-/*****************************************************************
-**
-** @(#) zkt-conf.c (c) Jan 2005 / Jan 2010 Holger Zuleger hznet.de
-**
-** A config file utility for the DNSSEC Zone Key Tool
-**
-** Copyright (c) 2005 - 2008, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-
-# include <stdio.h>
-# include <stdlib.h> /* abort(), exit(), ... */
-# include <string.h>
-# include <dirent.h>
-# include <assert.h>
-# include <unistd.h>
-# include <ctype.h>
-# include <time.h>
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-# include "config_zkt.h"
-#if defined(HAVE_GETOPT_LONG) && HAVE_GETOPT_LONG
-# include <getopt.h>
-#endif
-
-# include "debug.h"
-# include "misc.h"
-# include "zfparse.h"
-# include "zconf.h"
-
-extern int optopt;
-extern int opterr;
-extern int optind;
-extern char *optarg;
-const char *progname;
-
-static const char *view = "";
-static int writeflag = 0;
-static int allflag = 0;
-static int testflag = 0;
-
-# define short_options ":aC:c:O:dlstvwV:rh"
-#if defined(HAVE_GETOPT_LONG) && HAVE_GETOPT_LONG
-static struct option long_options[] = {
- {"compability", required_argument, NULL, 'C'},
- {"config", required_argument, NULL, 'c'},
- {"option", required_argument, NULL, 'O'},
- {"config-option", required_argument, NULL, 'O'},
- {"default", no_argument, NULL, 'd'},
- {"sidecfg", no_argument, NULL, 's'},
- {"localcfg", no_argument, NULL, 'l'},
- {"all-values", no_argument, NULL, 'a'},
- {"test", no_argument, NULL, 't'},
- {"overwrite", no_argument, NULL, 'w'},
- {"version", no_argument, NULL, 'v' },
- {"write", no_argument, NULL, 'w'},
- {"view", required_argument, NULL, 'V' },
- {"help", no_argument, NULL, 'h'},
- {0, 0, 0, 0}
-};
-#endif
-
-static void usage (char *mesg);
-
-
-int main (int argc, char *argv[])
-{
- int c;
- int opt_index;
- int major = 0;
- int minor = 0;
- int revision = 0;
- const char *file;
- const char *defconfname = NULL;
- const char *confname = NULL;
- char *p;
- char str[254+1];
- zconf_t *refconfig = NULL;
- zconf_t *config;
-
- progname = *argv;
- if ( (p = strrchr (progname, '/')) )
- progname = ++p;
- view = getnameappendix (progname, "zkt-conf");
-
- defconfname = getdefconfname (view);
- dbg_val0 ("Load built in config\n");
- config = loadconfig ("", (zconf_t *)NULL); /* load built in config */
-
- if ( fileexist (defconfname) ) /* load default config file */
- {
- dbg_val ("Load site wide config file \"%s\"\n", defconfname);
- config = loadconfig (defconfname, config);
- }
- if ( config == NULL )
- fatal ("Out of memory\n");
- confname = defconfname;
-
- opterr = 0;
- opt_index = 0;
-
- /* set current config version based on ZKT version */
- switch ( sscanf (ZKT_VERSION, "%d.%d.%d", &major, &minor, &revision) )
- {
- case 3: major = (major * 100) + (minor * 10) + revision; break;
- case 2: major = (major * 100) + (minor * 10); break;
- case 1: major = major * 100; break;
- default:
- usage ("illegal release number");
- }
- setconfigversion (major);
-
-#if defined(HAVE_GETOPT_LONG) && HAVE_GETOPT_LONG
- while ( (c = getopt_long (argc, argv, short_options, long_options, &opt_index)) != -1 )
-#else
- while ( (c = getopt (argc, argv, short_options)) != -1 )
-#endif
- {
- switch ( c )
- {
- case 'V': /* view name */
- view = optarg;
- defconfname = getdefconfname (view);
- if ( fileexist (defconfname) ) /* load default config file */
- config = loadconfig (defconfname, config);
- if ( config == NULL )
- fatal ("Out of memory\n");
- confname = defconfname;
- break;
- case 'O': /* read option from commandline */
- config = loadconfig_fromstr (optarg, config);
- break;
- case 'C':
- switch ( sscanf (optarg, "%d.%d.%d", &major, &minor, &revision) )
- {
- case 3: major = (major * 100) + (minor * 10) + revision; break;
- case 2: major = (major * 100) + (minor * 10); break;
- case 1: major = major * 100; break;
- default:
- usage ("illegal release number");
- }
- setconfigversion (major);
- break;
- case 'c':
- if ( *optarg == '\0' )
- usage ("empty config file name");
- config = loadconfig (optarg, config);
- if ( *optarg == '-' || strcmp (optarg, "stdin") == 0 )
- confname = "stdout";
- else
- confname = optarg;
- break;
- case 'd': /* built-in default config */
- config = loadconfig ("", config); /* load built-in config */
- confname = defconfname;
- break;
- case 's': /* side wide config */
- /* this is the default **/
- break;
- case 'a': /* set all flag */
- allflag = 1;
- break;
- case 'l': /* local config file */
- refconfig = dupconfig (config); /* duplicate current config */
- confname = LOCALCONF_FILE;
- if ( fileexist (LOCALCONF_FILE) ) /* try to load local config file */
- {
- dbg_val ("Load local config file \"%s\"\n", LOCALCONF_FILE);
- config = loadconfig (LOCALCONF_FILE, config);
- }
- else if ( !writeflag )
- usage ("error: no local config file found");
- break;
- case 't': /* test config */
- testflag = 1;
- break;
- case 'v': /* version */
- fprintf (stderr, "%s version %s compiled for BIND version %d\n",
- progname, ZKT_VERSION, BIND_VERSION);
- fprintf (stderr, "ZKT %s\n", ZKT_COPYRIGHT);
- return 0;
- break;
- case 'w': /* write back conf file */
- writeflag = 1;
- break;
- case 'h': /* print help */
- usage ("");
- break;
- case ':':
- snprintf (str, sizeof(str), "option \"-%c\" requires an argument.",
- optopt);
- usage (str);
- break;
- case '?':
- if ( isprint (optopt) )
- snprintf (str, sizeof(str), "Unknown option \"-%c\".",
- optopt);
- else
- snprintf (str, sizeof (str), "Unknown option char \\x%x.",
- optopt);
- usage (str);
- break;
- default:
- abort();
- }
- }
-
- c = optind;
- if ( c >= argc ) /* no arguments given on commandline */
- {
- if ( testflag )
- {
- if ( checkconfig (config) )
- fprintf (stderr, "All config file parameter seems to be ok\n");
- }
- else
- {
- if ( !writeflag ) /* print to stdout */
- confname = "stdout";
-
- if ( refconfig ) /* have we seen a local config file ? */
- if ( allflag )
- printconfig (confname, config);
- else
- printconfigdiff (confname, refconfig, config);
- else
- printconfig (confname, config);
- }
- }
- else /* command line argument found: use it as name of zone file */
- {
- char includefiles[1023+1]; /* list of include files */
- size_t filelistsize; /* size of list */
- long minttl;
- long maxttl;
- int keydbfound;
- char *dnskeydb;
-
- file = argv[c++];
-
- dnskeydb = config->keyfile;
-
- minttl = 0x7FFFFFFF;
- maxttl = 0;
- includefiles[0] = '\0';
- filelistsize = sizeof (includefiles);
- keydbfound = parsezonefile (file, &minttl, &maxttl, dnskeydb, includefiles, &filelistsize);
- if ( keydbfound < 0 )
- error ("can't parse zone file %s\n", file);
-
- if ( dnskeydb && !keydbfound )
- {
- if ( writeflag )
- {
- addkeydb (file, dnskeydb);
- printf ("\"$INCLUDE %s\" directive added to \"%s\"\n", dnskeydb, file);
- }
- else
- printf ("\"$INCLUDE %s\" should be added to \"%s\" (run with option -w)\n",
- dnskeydb, file);
- }
-
- if ( isflistdelim (*includefiles) )
- {
- printf ("InclFiles:\t\"%s\"\n", includefiles+1);
- }
-
- if ( minttl < (10 * MINSEC) )
- fprintf (stderr, "MinimumTTL of %s (%ld seconds) is too low to use it in a signed zone (see RFC4641)\n",
- timeint2str (minttl), minttl);
- else
- fprintf (stderr, "MinimumTTL:\t%s\t# (%ld seconds)\n", timeint2str (minttl), minttl);
- fprintf (stdout, "MaximumTTL:\t%s\t# (%ld seconds)\n", timeint2str (maxttl), maxttl);
-
- if ( writeflag )
- {
- refconfig = dupconfig (config); /* duplicate current config */
- confname = LOCALCONF_FILE;
- if ( fileexist (LOCALCONF_FILE) ) /* try to load local config file */
- {
- dbg_val ("Load local config file \"%s\"\n", LOCALCONF_FILE);
- config = loadconfig (LOCALCONF_FILE, config);
- }
- setconfigpar (config, "MaximumTTL", &maxttl);
- printconfigdiff (confname, refconfig, config);
- }
- }
-
-
- return 0;
-}
-
-# define sopt_usage(mesg, value) fprintf (stderr, mesg, value)
-#if defined(HAVE_GETOPT_LONG) && HAVE_GETOPT_LONG
-# define lopt_usage(mesg, value) fprintf (stderr, mesg, value)
-# define loptstr(lstr, sstr) lstr
-#else
-# define lopt_usage(mesg, value)
-# define loptstr(lstr, sstr) sstr
-#endif
-static void usage (char *mesg)
-{
- fprintf (stderr, "%s version %s\n", progname, ZKT_VERSION);
- if ( mesg && *mesg )
- fprintf (stderr, "%s\n", mesg);
- fprintf (stderr, "\n");
- fprintf (stderr, "usage: %s -h\n", progname);
- fprintf (stderr, "usage: %s [-V view] [-w|-t] -d [-O <optstr>]\n", progname);
- fprintf (stderr, "usage: %s [-V view] [-w|-t] [-s] [-c config] [-O <optstr>]\n", progname);
- fprintf (stderr, "usage: %s [-V view] [-w|-t] [-a] -l [-c config] [-O <optstr>]\n", progname);
- fprintf (stderr, "\n");
- fprintf (stderr, "usage: %s [-c config] [-w] <zonefile>\n", progname);
- fprintf (stderr, "\n");
- fprintf (stderr, " -V name%s", loptstr (", --view=name\n", ""));
- fprintf (stderr, "\t\t specify the view name \n");
- fprintf (stderr, " -d%s\tprint built-in default config parameter\n", loptstr (", --default", ""));
- fprintf (stderr, " -s%s\tprint site wide config file parameter (this is the default)\n", loptstr (", --sitecfg", ""));
- fprintf (stderr, " -l%s\tprint local config file parameter\n", loptstr (", --localcfg", ""));
- fprintf (stderr, " -a%s\tprint all parameter not only the different one\n", loptstr (", --all", ""));
- fprintf (stderr, " -c file%s", loptstr (", --config=file\n", ""));
- fprintf (stderr, " \t\tread config from <file> instead of %s\n", CONFIG_FILE);
- fprintf (stderr, " -O optstr%s", loptstr (", --config-option=\"optstr\"\n", ""));
- fprintf (stderr, " \t\tread config options from commandline\n");
- fprintf (stderr, " -t%s\ttest the config parameter if they are useful \n", loptstr (", --test", "\t"));
- fprintf (stderr, " -w%s\twrite or rewrite config file \n", loptstr (", --write", "\t"));
- fprintf (stderr, " -h%s\tprint this help \n", loptstr (", --help", "\t"));
- exit (1);
-}
-
diff --git a/contrib/zkt-1.1.3/zkt-keyman.c b/contrib/zkt-1.1.3/zkt-keyman.c
deleted file mode 100644
index e7f96ec7..00000000
--- a/contrib/zkt-1.1.3/zkt-keyman.c
+++ /dev/null
@@ -1,722 +0,0 @@
-/*****************************************************************
-**
-** @(#) zkt-keyman.c (c) Jan 2005 - Apr 2010 Holger Zuleger hznet.de
-**
-** ZKT key managing tool (formely knon as dnsses-zkt)
-** A wrapper command around the BIND dnssec-keygen utility
-**
-** Copyright (c) 2005 - 2010, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-
-# include <stdio.h>
-# include <stdlib.h> /* abort(), exit(), ... */
-# include <string.h>
-# include <dirent.h>
-# include <assert.h>
-# include <unistd.h>
-# include <ctype.h>
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-# include "config_zkt.h"
-#if defined(HAVE_GETOPT_LONG) && HAVE_GETOPT_LONG
-# include <getopt.h>
-#endif
-
-# include "debug.h"
-# include "misc.h"
-# include "strlist.h"
-# include "zconf.h"
-# include "dki.h"
-# include "zkt.h"
-
-extern int optopt;
-extern int opterr;
-extern int optind;
-extern char *optarg;
-const char *progname;
-
-char *labellist = NULL;
-
-int headerflag = 1;
-int ageflag = 0;
-int lifetime = 0;
-int lifetimeflag = 0;
-int timeflag = 1;
-int exptimeflag = 0;
-int pathflag = 0;
-int kskflag = 1;
-int zskflag = 1;
-int ljustflag = 0;
-
-static int dirflag = 0;
-static int recflag = RECURSIVE;
-static char *kskdomain = "";
-static const char *view = "";
-
-# define short_options ":0:1:2:3:9A:C:D:P:S:R:h:ZV:F:c:O:krz"
-#if defined(HAVE_GETOPT_LONG) && HAVE_GETOPT_LONG
-static struct option long_options[] = {
- {"ksk-rollover", no_argument, NULL, '9'},
- {"ksk-status", required_argument, NULL, '0'},
- {"ksk-roll-status", required_argument, NULL, '0'},
- {"ksk-newkey", required_argument, NULL, '1'},
- {"ksk-publish", required_argument, NULL, '2'},
- {"ksk-delkey", required_argument, NULL, '3'},
- {"ksk-roll-phase1", required_argument, NULL, '1'},
- {"ksk-roll-phase2", required_argument, NULL, '2'},
- {"ksk-roll-phase3", required_argument, NULL, '3'},
- {"ksk", no_argument, NULL, 'k'},
- {"zsk", no_argument, NULL, 'z'},
- {"recursive", no_argument, NULL, 'r'},
- {"config", required_argument, NULL, 'c'},
- {"option", required_argument, NULL, 'O'},
- {"config-option", required_argument, NULL, 'O'},
- {"published", required_argument, NULL, 'P'},
- {"standby", required_argument, NULL, 'S'},
- {"active", required_argument, NULL, 'A'},
- {"depreciated", required_argument, NULL, 'D'},
- {"create", required_argument, NULL, 'C'},
- {"revoke", required_argument, NULL, 'R'},
- {"remove", required_argument, NULL, 19 },
- {"destroy", required_argument, NULL, 20 },
- {"setlifetime", required_argument, NULL, 'F' },
- {"view", required_argument, NULL, 'V' },
- {"help", no_argument, NULL, 'h'},
- {0, 0, 0, 0}
-};
-#endif
-
-static int parsedirectory (const char *dir, dki_t **listp);
-static void parsefile (const char *file, dki_t **listp);
-static void createkey (const char *keyname, const dki_t *list, const zconf_t *conf);
-static void ksk_roll (const char *keyname, int phase, const dki_t *list, const zconf_t *conf);
-static int create_parent_file (const char *fname, int phase, int ttl, const dki_t *dkp);
-static void usage (char *mesg, zconf_t *cp);
-static const char *parsetag (const char *str, int *tagp);
-
-static void setglobalflags (zconf_t *config)
-{
- recflag = config->recursive;
-}
-
-int main (int argc, char *argv[])
-{
- dki_t *data = NULL;
- dki_t *dkp;
- int c;
- int opt_index;
- int action;
- const char *file;
- const char *defconfname = NULL;
- char *p;
- char str[254+1];
- const char *keyname = NULL;
- int searchtag;
- zconf_t *config;
-
- progname = *argv;
- if ( (p = strrchr (progname, '/')) )
- progname = ++p;
- view = getnameappendix (progname, "dnssec-zkt");
-
- defconfname = getdefconfname (view);
- config = loadconfig ("", (zconf_t *)NULL); /* load built in config */
- if ( fileexist (defconfname) ) /* load default config file */
- config = loadconfig (defconfname, config);
- if ( config == NULL )
- fatal ("Out of memory\n");
- setglobalflags (config);
-
- opterr = 0;
- opt_index = 0;
- action = 0;
-#if defined(HAVE_GETOPT_LONG) && HAVE_GETOPT_LONG
- while ( (c = getopt_long (argc, argv, short_options, long_options, &opt_index)) != -1 )
-#else
- while ( (c = getopt (argc, argv, short_options)) != -1 )
-#endif
- {
- switch ( c )
- {
- case '9': /* ksk rollover help */
- ksk_roll ("help", c - '0', NULL, NULL);
- exit (1);
- case '1': /* ksk rollover: create new key */
- case '2': /* ksk rollover: publish DS */
- case '3': /* ksk rollover: delete old key */
- case '0': /* ksk rollover: show current status */
- action = c;
- if ( !optarg )
- usage ("ksk rollover requires an domain argument", config);
- kskdomain = domain_canonicdup (optarg);
- break;
- case 'h':
- case 'K':
- case 'Z':
- action = c;
- break;
- case 'C':
- pathflag = !pathflag;
- /* fall through */
- case 'P':
- case 'S':
- case 'A':
- case 'D':
- case 'R':
- case 's':
- case 19:
- case 20:
- if ( (keyname = parsetag (optarg, &searchtag)) != NULL )
- keyname = domain_canonicdup (keyname);
- action = c;
- break;
- case 'F': /* set key lifetime */
- lifetime = atoi (optarg);
- action = c;
- break;
- case 'V': /* view name */
- view = optarg;
- defconfname = getdefconfname (view);
- if ( fileexist (defconfname) ) /* load default config file */
- config = loadconfig (defconfname, config);
- if ( config == NULL )
- fatal ("Out of memory\n");
- setglobalflags (config);
- break;
- case 'c':
- config = loadconfig (optarg, config);
- setglobalflags (config);
- checkconfig (config);
- break;
- case 'O': /* read option from commandline */
- config = loadconfig_fromstr (optarg, config);
- setglobalflags (config);
- checkconfig (config);
- break;
- case 'd': /* ignore directory arg */
- dirflag = 1;
- break;
- case 'k': /* ksk only */
- zskflag = 0;
- break;
- case 'r': /* switch recursive flag */
- recflag = !recflag;
- break;
- case 'z': /* zsk only */
- kskflag = 0;
- break;
- case ':':
- snprintf (str, sizeof(str), "option \"-%c\" requires an argument.\n",
- optopt);
- usage (str, config);
- break;
- case '?':
- if ( isprint (optopt) )
- snprintf (str, sizeof(str), "Unknown option \"-%c\".\n",
- optopt);
- else
- snprintf (str, sizeof (str), "Unknown option char \\x%x.\n",
- optopt);
- usage (str, config);
- break;
- default:
- abort();
- }
- }
-
- if ( kskflag == 0 && zskflag == 0 )
- kskflag = zskflag = 1;
-
- c = optind;
- do {
- if ( c >= argc ) /* no args left */
- file = config->zonedir; /* use default directory */
- else
- file = argv[c++];
-
- if ( is_directory (file) )
- parsedirectory (file, &data);
- else
- parsefile (file, &data);
-
- } while ( c < argc ); /* for all arguments */
-
- switch ( action )
- {
- case 'h':
- usage ("", config);
- case 'C':
- createkey (keyname, data, config);
- break;
- case 'P':
- case 'S':
- case 'A':
- case 'D':
- if ( (dkp = (dki_t*)zkt_search (data, searchtag, keyname)) == NULL )
- fatal ("Key with tag %u not found\n", searchtag);
- else if ( dkp == (void *) 01 )
- fatal ("Key with tag %u found multiple times\n", searchtag);
- if ( (c = dki_setstatus_preservetime (dkp, action)) != 0 )
- fatal ("Couldn't change status of key %u: %d\n", searchtag, c);
- break;
- case 19: /* remove (rename) key file */
- if ( (dkp = (dki_t *)zkt_search (data, searchtag, keyname)) == NULL )
- fatal ("Key with tag %u not found\n", searchtag);
- else if ( dkp == (void *) 01 )
- fatal ("Key with tag %u found multiple times\n", searchtag);
- dki_remove (dkp);
- break;
- case 20: /* destroy the key (remove the files!) */
- if ( (dkp = (dki_t *)zkt_search (data, searchtag, keyname)) == NULL )
- fatal ("Key with tag %u not found\n", searchtag);
- else if ( dkp == (void *) 01 )
- fatal ("Key with tag %u found multiple times\n", searchtag);
- dki_destroy (dkp);
- break;
- case 'R':
- if ( (dkp = (dki_t *)zkt_search (data, searchtag, keyname)) == NULL )
- fatal ("Key with tag %u not found\n", searchtag);
- else if ( dkp == (void *) 01 )
- fatal ("Key with tag %u found multiple times\n", searchtag);
- if ( (c = dki_setstatus (dkp, action)) != 0 )
- fatal ("Couldn't change status of key %u: %d\n", searchtag, c);
- break;
- case '1': /* ksk rollover new key */
- case '2': /* ksk rollover publish DS */
- case '3': /* ksk rollover delete old key */
- case '0': /* ksk rollover status */
- ksk_roll (kskdomain, action - '0', data, config);
- break;
- case 'F':
- zkt_setkeylifetime (data);
- /* fall through */
- default:
- zkt_list_keys (data);
- }
-
- return 0;
-}
-
-# define sopt_usage(mesg, value) fprintf (stderr, mesg, value)
-#if defined(HAVE_GETOPT_LONG) && HAVE_GETOPT_LONG
-# define lopt_usage(mesg, value) fprintf (stderr, mesg, value)
-# define loptstr(lstr, sstr) lstr
-#else
-# define lopt_usage(mesg, value)
-# define loptstr(lstr, sstr) sstr
-#endif
-static void usage (char *mesg, zconf_t *cp)
-{
- fprintf (stderr, "DNS Zone Key Management Tool %s\n", ZKT_VERSION);
- fprintf (stderr, "\n");
- fprintf (stderr, "Create a new key \n");
- sopt_usage ("\tusage: %s -C <name> [-k] [-dpr] [-c config] [dir ...]\n", progname);
- lopt_usage ("\tusage: %s --create=<name> [-k] [-dpr] [-c config] [dir ...]\n", progname);
- fprintf (stderr, "\t\tKSK (use -k): %s %d bits\n", dki_algo2str (cp->k_algo), cp->k_bits);
- fprintf (stderr, "\t\tZSK (default): %s %d bits\n", dki_algo2str (cp->k_algo), cp->z_bits);
- fprintf (stderr, "\n");
- fprintf (stderr, "Change key status of specified key to published, active or depreciated\n");
- fprintf (stderr, "\t(<keyspec> := tag | tag:name) \n");
- sopt_usage ("\tusage: %s -P|-A|-D <keyspec> [-dr] [-c config] [dir ...]\n", progname);
- lopt_usage ("\tusage: %s --published=<keyspec> [-dr] [-c config] [dir ...]\n", progname);
- lopt_usage ("\tusage: %s --active=<keyspec> [-dr] [-c config] [dir ...]\n", progname);
- lopt_usage ("\tusage: %s --depreciated=<keyspec> [-dr] [-c config] [dir ...]\n", progname);
- fprintf (stderr, "\n");
- fprintf (stderr, "Revoke specified key (<keyspec> := tag | tag:name) \n");
- sopt_usage ("\tusage: %s -R <keyspec> [-dr] [-c config] [dir ...]\n", progname);
- lopt_usage ("\tusage: %s --revoke=<keyspec> [-dr] [-c config] [dir ...]\n", progname);
- fprintf (stderr, "\n");
- fprintf (stderr, "Remove (rename) or destroy (delete) specified key (<keyspec> := tag | tag:name) \n");
- lopt_usage ("\tusage: %s --remove=<keyspec> [-dr] [-c config] [dir ...]\n", progname);
- lopt_usage ("\tusage: %s --destroy=<keyspec> [-dr] [-c config] [dir ...]\n", progname);
- fprintf (stderr, "\n");
- fprintf (stderr, "Initiate a semi-automated KSK rollover");
- fprintf (stderr, "('%s -9%s' prints out a brief description)\n", progname, loptstr ("|--ksk-rollover", ""));
- sopt_usage ("\tusage: %s {-1} do.ma.in.\n", progname);
- lopt_usage ("\tusage: %s {--ksk-roll-phase1|--ksk-newkey} do.ma.in.\n", progname);
- sopt_usage ("\tusage: %s {-2} do.ma.in.\n", progname);
- lopt_usage ("\tusage: %s {--ksk-roll-phase2|--ksk-publish} do.ma.in.\n", progname);
- sopt_usage ("\tusage: %s {-3} do.ma.in.\n", progname);
- lopt_usage ("\tusage: %s {--ksk-roll-phase3|--ksk-delkey} do.ma.in.\n", progname);
- sopt_usage ("\tusage: %s {-0} do.ma.in.\n", progname);
- lopt_usage ("\tusage: %s {--ksk-roll-status|--ksk-status} do.ma.in.\n", progname);
- fprintf (stderr, "\n");
-
- fprintf (stderr, "\n");
- fprintf (stderr, "General options \n");
- fprintf (stderr, "\t-c file%s", loptstr (", --config=file\n", ""));
- fprintf (stderr, "\t\t read config from <file> instead of %s\n", CONFIG_FILE);
- fprintf (stderr, "\t-O optstr%s", loptstr (", --config-option=\"optstr\"\n", ""));
- fprintf (stderr, "\t\t read config options from commandline\n");
- fprintf (stderr, "\t-d%s\t skip directory arguments\n", loptstr (", --directory", "\t"));
- fprintf (stderr, "\t-r%s\t recursive mode on/off (default: %s)\n", loptstr(", --recursive", "\t"), recflag ? "on": "off");
- fprintf (stderr, "\t-F days%s=days\t set key lifetime\n", loptstr (", --setlifetime", "\t"));
- fprintf (stderr, "\t-k%s\t key signing keys only\n", loptstr (", --ksk", "\t"));
- fprintf (stderr, "\t-z%s\t zone signing keys only\n", loptstr (", --zsk", "\t"));
- if ( mesg && *mesg )
- fprintf (stderr, "%s\n", mesg);
- exit (1);
-}
-
-static void createkey (const char *keyname, const dki_t *list, const zconf_t *conf)
-{
- const char *dir = "";
- dki_t *dkp;
-
- if ( keyname == NULL || *keyname == '\0' )
- fatal ("Create key: no keyname!");
-
- dbg_val2 ("createkey: keyname %s, pathflag = %d\n", keyname, pathflag);
- /* search for already existent key to get the directory name */
- if ( pathflag && (dkp = (dki_t *)zkt_search (list, 0, keyname)) != NULL )
- {
- char path[MAX_PATHSIZE+1];
- zconf_t localconf;
-
- dir = dkp->dname;
- pathname (path, sizeof (path), dir, LOCALCONF_FILE, NULL);
- if ( fileexist (path) ) /* load local config file */
- {
- dbg_val ("Load local config file \"%s\"\n", path);
- memcpy (&localconf, conf, sizeof (zconf_t));
- conf = loadconfig (path, &localconf);
- }
- }
-
- if ( zskflag )
- dkp = dki_new (dir, keyname, DKI_ZSK, conf->k_algo, conf->z_bits, conf->z_random, conf->z_life / DAYSEC);
- else
- dkp = dki_new (dir, keyname, DKI_KSK, conf->k_algo, conf->k_bits, conf->k_random, conf->k_life / DAYSEC);
- if ( dkp == NULL )
- fatal ("Can't create key %s: %s!\n", keyname, dki_geterrstr ());
-
- /* create a new key always in state published, which means "standby" for ksk */
- dki_setstatus (dkp, DKI_PUB);
-}
-
-static int get_parent_phase (const char *file)
-{
- FILE *fp;
- int phase;
-
- if ( (fp = fopen (file, "r")) == NULL )
- return -1;
-
- phase = 0;
- if ( fscanf (fp, "; KSK rollover phase%d", &phase) != 1 )
- phase = 0;
-
- fclose (fp);
- return phase;
-}
-
-static void ksk_roll (const char *keyname, int phase, const dki_t *list, const zconf_t *conf)
-{
- char path[MAX_PATHSIZE+1];
- zconf_t localconf;
- const char *dir;
- dki_t *keylist;
- dki_t *dkp;
- dki_t *standby;
- int parent_exist;
- int parent_age;
- int parent_phase;
- int parent_propagation;
- int key_ttl;
- int ksk;
-
- if ( phase == 9 ) /* usage */
- {
- fprintf (stderr, "A KSK rollover requires three consecutive steps:\n");
- fprintf (stderr, "\n");
- fprintf (stderr, "-1%s", loptstr ("|--ksk-roll-phase1 (--ksk-newkey)\n", ""));
- fprintf (stderr, "\t Create a new KSK.\n");
- fprintf (stderr, "\t This step also creates a parent-<domain> file which contains only\n");
- fprintf (stderr, "\t the _old_ key. This file will be copied in hierarchical mode\n");
- fprintf (stderr, "\t by dnssec-signer to the parent directory as keyset-<domain> file.\n");
- fprintf (stderr, "\t Wait until the new keyset is propagated, before going to the next step.\n");
- fprintf (stderr, "\n");
- fprintf (stderr, "-2%s", loptstr ("|--ksk-roll-phase2 (--ksk-publish)\n", ""));
- fprintf (stderr, "\t This step creates a parent-<domain> file with the _new_ key only.\n");
- fprintf (stderr, "\t Please send this file immediately to the parent (In hierarchical\n");
- fprintf (stderr, "\t mode this will be done automatically by the dnssec-signer command).\n");
- fprintf (stderr, "\t Then wait until the new DS is generated by the parent and propagated\n");
- fprintf (stderr, "\t to all the parent name server, plus the old DS TTL before going to step three.\n");
- fprintf (stderr, "\n");
- fprintf (stderr, "-3%s", loptstr ("|--ksk-roll-phase3 (--ksk-delkey)\n", ""));
- fprintf (stderr, "\t Remove (rename) the old KSK and the parent-<domain> file.\n");
- fprintf (stderr, "\t You have to manually delete the old KSK (look at file names beginning\n");
- fprintf (stderr, "\t with an lower 'k').\n");
- fprintf (stderr, "\n");
- fprintf (stderr, "-0%s", loptstr ("|--ksk-roll-stat (--ksk-status)\n", ""));
- fprintf (stderr, "\t Show the current KSK rollover state of a domain.\n");
-
- fprintf (stderr, "\n");
-
- return;
- }
-
- if ( keyname == NULL || *keyname == '\0' )
- fatal ("ksk rollover: no domain!");
-
- dbg_val2 ("ksk_roll: keyname %s, phase = %d\n", keyname, phase);
-
- /* search for already existent key to get the directory name */
- if ( (keylist = (dki_t *)zkt_search (list, 0, keyname)) == NULL )
- fatal ("ksk rollover: domain %s not found!\n", keyname);
- dkp = keylist;
-
- /* try to read local config file */
- dir = dkp->dname;
- pathname (path, sizeof (path), dir, LOCALCONF_FILE, NULL);
- if ( fileexist (path) ) /* load local config file */
- {
- dbg_val ("Load local config file \"%s\"\n", path);
- memcpy (&localconf, conf, sizeof (zconf_t));
- conf = loadconfig (path, &localconf);
- }
- key_ttl = conf->key_ttl;
-
- /* check if parent-file already exist */
- pathname (path, sizeof (path), dir, "parent-", keyname);
- parent_phase = parent_age = 0;
- if ( (parent_exist = fileexist (path)) != 0 )
- {
- parent_phase = get_parent_phase (path);
- parent_age = file_age (path);
- }
- // parent_propagation = 2 * DAYSEC;
- parent_propagation = 5 * MINSEC;
-
- ksk = 0; /* count active(!) key signing keys */
- standby = NULL; /* find standby key if available */
- for ( dkp = keylist; dkp; dkp = dkp->next )
- if ( dki_isksk (dkp) )
- {
- if ( dki_status (dkp) == DKI_ACT )
- ksk++;
- else if ( dki_status (dkp) == DKI_PUB )
- standby = dkp;
- }
-
- switch ( phase )
- {
- case 0: /* print status (debug) */
- fprintf (stdout, "ksk_rollover:\n");
- fprintf (stdout, "\t domain = %s\n", keyname);
- fprintf (stdout, "\t phase = %d\n", parent_phase);
- fprintf (stdout, "\t parent_file %s %s\n", path, parent_exist ? "exist": "not exist");
- if ( parent_exist )
- fprintf (stdout, "\t age of parent_file %d %s\n", parent_age, str_delspace (age2str (parent_age)));
- fprintf (stdout, "\t # of active key signing keys %d\n", ksk);
- fprintf (stdout, "\t parent_propagation %d %s\n", parent_propagation, str_delspace (age2str (parent_propagation)));
- fprintf (stdout, "\t keys ttl %d %s\n", key_ttl, age2str (key_ttl));
-
- for ( dkp = keylist; dkp; dkp = dkp->next )
- {
- /* TODO: Nur zum testen */
- dki_prt_dnskey (dkp, stdout);
- }
- break;
- case 1:
- if ( parent_exist || ksk > 1 )
- fatal ("Can\'t create new ksk because there is already an ksk rollover in progress\n");
-
- fprintf (stdout, "create new ksk \n");
- dkp = dki_new (dir, keyname, DKI_KSK, conf->k_algo, conf->k_bits, conf->k_random, conf->k_life / DAYSEC);
- if ( dkp == NULL )
- fatal ("Can't create key %s: %s!\n", keyname, dki_geterrstr ());
- if ( standby )
- {
- dki_setstatus (standby, DKI_ACT); /* activate standby key */
- dki_setstatus (dkp, DKI_PUB); /* new key will be the new standby */
- }
-
- // dkp = keylist; /* use old key to create the parent file */
- if ( (dkp = (dki_t *)dki_findalgo (keylist, 1, conf->k_algo, 'a', 1)) == NULL ) /* find the oldest active ksk to create the parent file */
- fatal ("ksk_rollover phase1: Couldn't find the old active key\n");
- if ( !create_parent_file (path, phase, key_ttl, dkp) )
- fatal ("Couldn't create parentfile %s\n", path);
- break;
-
- case 2:
- if ( ksk < 2 )
- fatal ("Can\'t publish new key because no one exist\n");
- if ( !parent_exist )
- fatal ("More than one KSK but no parent file found!\n");
- if ( parent_phase != 1 )
- fatal ("Parent file exists but is in wrong state (phase = %d)\n", parent_phase);
- if ( parent_age < conf->proptime + key_ttl )
- fatal ("ksk_rollover (phase2): you have to wait for the propagation of the new KSK (at least %dsec or %s)\n",
- conf->proptime + key_ttl - parent_age,
- str_delspace (age2str (conf->proptime + key_ttl - parent_age)));
-
- fprintf (stdout, "save new ksk in parent file\n");
- dkp = keylist->next; /* set dkp to new ksk */
- if ( !create_parent_file (path, phase, key_ttl, dkp) )
- fatal ("Couldn't create parentfile %s\n", path);
- break;
- case 3:
- if ( !parent_exist || ksk < 2 )
- fatal ("ksk-delkey only allowed after ksk-publish\n");
- if ( parent_phase != 2 )
- fatal ("Parent file exists but is in wrong state (phase = %d)\n", parent_phase);
- if ( parent_age < parent_propagation + key_ttl )
- fatal ("ksk_rollover (phase3): you have to wait for DS propagation (at least %dsec or %s)\n",
- parent_propagation + key_ttl - parent_age,
- str_delspace (age2str (parent_propagation + key_ttl - parent_age)));
- /* remove the parentfile */
- fprintf (stdout, "remove parentfile \n");
- unlink (path);
- /* remove or rename the old key */
- fprintf (stdout, "old ksk renamed \n");
- dkp = keylist; /* set dkp to old ksk */
- dki_remove (dkp);
- break;
- default: assert (phase == 1 || phase == 2 || phase == 3);
- }
-}
-
-/*****************************************************************
-** create_parent_file ()
-*****************************************************************/
-static int create_parent_file (const char *fname, int phase, int ttl, const dki_t *dkp)
-{
- FILE *fp;
-
- assert ( fname != NULL );
-
- if ( dkp == NULL || (phase != 1 && phase != 2) )
- return 0;
-
- if ( (fp = fopen (fname, "w")) == NULL )
- fatal ("can\'t create new parentfile \"%s\"\n", fname);
-
- if ( phase == 1 )
- fprintf (fp, "; KSK rollover phase1 (old key)\n");
- else
- fprintf (fp, "; KSK rollover phase2 (new key)\n");
-
- dki_prt_dnskeyttl (dkp, fp, ttl);
- fclose (fp);
-
- return phase;
-}
-
-static int parsedirectory (const char *dir, dki_t **listp)
-{
- dki_t *dkp;
- DIR *dirp;
- struct dirent *dentp;
- char path[MAX_PATHSIZE+1];
-
- if ( dirflag )
- return 0;
-
- dbg_val ("directory: opendir(%s)\n", dir);
- if ( (dirp = opendir (dir)) == NULL )
- return 0;
-
- while ( (dentp = readdir (dirp)) != NULL )
- {
- if ( is_dotfilename (dentp->d_name) )
- continue;
-
- dbg_val ("directory: check %s\n", dentp->d_name);
- pathname (path, sizeof (path), dir, dentp->d_name, NULL);
- if ( is_directory (path) && recflag )
- {
- dbg_val ("directory: recursive %s\n", path);
- parsedirectory (path, listp);
- }
- else if ( is_keyfilename (dentp->d_name) )
- if ( (dkp = dki_read (dir, dentp->d_name)) )
- {
- // fprintf (stderr, "parsedir: tssearch (%d %s)\n", dkp, dkp->name);
-#if defined (USE_TREE) && USE_TREE
- dki_tadd (listp, dkp, 1);
-#else
- dki_add (listp, dkp);
-#endif
- }
- }
- closedir (dirp);
- return 1;
-}
-
-static void parsefile (const char *file, dki_t **listp)
-{
- char path[MAX_PATHSIZE+1];
- dki_t *dkp;
-
- /* file arg contains path ? ... */
- file = splitpath (path, sizeof (path), file); /* ... then split of */
-
- if ( is_keyfilename (file) ) /* plain file name looks like DNS key file ? */
- {
- if ( (dkp = dki_read (path, file)) ) /* read DNS key file ... */
-#if defined (USE_TREE) && USE_TREE
- dki_tadd (listp, dkp, 1); /* ... and add to tree */
-#else
- dki_add (listp, dkp); /* ... and add to list */
-#endif
- else
- error ("error parsing %s: (%s)\n", file, dki_geterrstr());
- }
-}
-
-static const char *parsetag (const char *str, int *tagp)
-{
- const char *p;
-
- *tagp = 0;
- while ( isspace (*str) ) /* skip leading ws */
- str++;
-
- p = str;
- if ( isdigit (*p) ) /* keytag starts with digit */
- {
- sscanf (p, "%u", tagp); /* read keytag as number */
- do /* eat up to the end of the number */
- p++;
- while ( isdigit (*p) );
-
- if ( *p == ':' ) /* label follows ? */
- return p+1; /* return that */
- if ( *p == '\0' )
- return NULL; /* no label */
- }
- return str; /* return as label string if not a numeric keytag */
-}
diff --git a/contrib/zkt-1.1.3/zkt-ls.c b/contrib/zkt-1.1.3/zkt-ls.c
deleted file mode 100644
index e9ac692b..00000000
--- a/contrib/zkt-1.1.3/zkt-ls.c
+++ /dev/null
@@ -1,439 +0,0 @@
-/*****************************************************************
-**
-** @(#) zkt-ls.c (c) Jan 2010 Holger Zuleger hznet.de
-**
-** Secure DNS zone key tool
-** A command to list dnssec keys
-**
-** Copyright (c) 2005 - 2010, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-
-# include <stdio.h>
-# include <stdlib.h> /* abort(), exit(), ... */
-# include <string.h>
-# include <dirent.h>
-# include <assert.h>
-# include <unistd.h>
-# include <ctype.h>
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-# include "config_zkt.h"
-#if defined(HAVE_GETOPT_LONG) && HAVE_GETOPT_LONG
-# include <getopt.h>
-#endif
-
-# include "debug.h"
-# include "misc.h"
-# include "strlist.h"
-# include "zconf.h"
-# include "dki.h"
-# include "tcap.h"
-# include "zkt.h"
-
-extern int optopt;
-extern int opterr;
-extern int optind;
-extern char *optarg;
-const char *progname;
-
-char *labellist = NULL;
-
-int headerflag = 1;
-int ageflag = 0;
-int lifetime = 0;
-int lifetimeflag = 0;
-int timeflag = 1;
-int exptimeflag = 0;
-int pathflag = 0;
-int kskflag = 1;
-int zskflag = 1;
-int ljustflag = 0;
-int subdomain_before_parent = 1;
-
-static int dirflag = 0;
-static int recflag = RECURSIVE;
-static int trustedkeyflag = 0;
-static int managedkeyflag = 0;
-static const char *view = "";
-static const char *term = NULL;
-
-#if defined(COLOR_MODE) && COLOR_MODE
-# define short_options ":HKTMV:afC::c:O:dhkLl:prstez"
-#else
-# define short_options ":HKTMV:af:c:O:dhkLl:prstez"
-#endif
-#if defined(HAVE_GETOPT_LONG) && HAVE_GETOPT_LONG
-static struct option long_options[] = {
- {"list-dnskeys", no_argument, NULL, 'K'},
- {"list-trustedkeys", no_argument, NULL, 'T'},
- {"list-managedkeys", no_argument, NULL, 'M'},
- {"ksk", no_argument, NULL, 'k'},
- {"zsk", no_argument, NULL, 'z'},
- {"age", no_argument, NULL, 'a'},
- {"lifetime", no_argument, NULL, 'f'},
- {"time", no_argument, NULL, 't'},
- {"expire", no_argument, NULL, 'e'},
- {"recursive", no_argument, NULL, 'r'},
- {"leftjust", no_argument, NULL, 'L'},
- {"label-list", no_argument, NULL, 'l'},
- {"path", no_argument, NULL, 'p'},
- {"sort", no_argument, NULL, 's'},
- {"subdomain", no_argument, NULL, 's'},
- {"nohead", no_argument, NULL, 'h'},
- {"directory", no_argument, NULL, 'd'},
-#if defined(COLOR_MODE) && COLOR_MODE
- {"color", optional_argument, NULL, 'C'},
-#endif
- {"config", required_argument, NULL, 'c'},
- {"option", required_argument, NULL, 'O'},
- {"config-option", required_argument, NULL, 'O'},
- {"view", required_argument, NULL, 'V' },
- {"help", no_argument, NULL, 'H'},
- {0, 0, 0, 0}
-};
-#endif
-
-static int parsedirectory (const char *dir, dki_t **listp, int sub_before);
-static void parsefile (const char *file, dki_t **listp, int sub_before);
-static void usage (char *mesg, zconf_t *cp);
-
-static void setglobalflags (zconf_t *config)
-{
- recflag = config->recursive;
- ageflag = config->printage;
- timeflag = config->printtime;
- ljustflag = config->ljust;
- term = config->colorterm;
- if ( term && *term == '\0' )
- term = getenv ("TERM");
-}
-
-int main (int argc, char *argv[])
-{
- dki_t *data = NULL;
- int c;
- int opt_index;
- int action;
- const char *file;
- const char *defconfname = NULL;
- char *p;
- char str[254+1];
- zconf_t *config;
-
- progname = *argv;
- if ( (p = strrchr (progname, '/')) )
- progname = ++p;
- view = getnameappendix (progname, "zkt-ls");
-
- defconfname = getdefconfname (view);
- config = loadconfig ("", (zconf_t *)NULL); /* load built in config */
- if ( fileexist (defconfname) ) /* load default config file */
- config = loadconfig (defconfname, config);
- if ( config == NULL )
- fatal ("Out of memory\n");
- setglobalflags (config);
-
- opterr = 0;
- opt_index = 0;
- action = 0;
-#if defined(HAVE_GETOPT_LONG) && HAVE_GETOPT_LONG
- while ( (c = getopt_long (argc, argv, short_options, long_options, &opt_index)) != -1 )
-#else
- while ( (c = getopt (argc, argv, short_options)) != -1 )
-#endif
- {
- switch ( c )
- {
-#if defined(COLOR_MODE) && COLOR_MODE
- case 'C': /* color mode on; optional with terminal name */
- if ( optarg )
- term = optarg;
- else
- term = getenv ("TERM");
- break;
-#endif
- case 'M':
- managedkeyflag = 1;
- subdomain_before_parent = 0;
- zskflag = pathflag = 0;
- action = c;
- break;
- case 'T':
- trustedkeyflag = 1;
- subdomain_before_parent = 0;
- zskflag = pathflag = 0;
- /* fall through */
- case 'H':
- case 'K':
- case 'Z':
- action = c;
- break;
- case 'a': /* age */
- ageflag = !ageflag;
- break;
- case 'f': /* key lifetime */
- lifetimeflag = !lifetimeflag;
- break;
- case 'V': /* view name */
- view = optarg;
- defconfname = getdefconfname (view);
- if ( fileexist (defconfname) ) /* load default config file */
- config = loadconfig (defconfname, config);
- if ( config == NULL )
- fatal ("Out of memory\n");
- setglobalflags (config);
- break;
- case 'c':
- config = loadconfig (optarg, config);
- setglobalflags (config);
- checkconfig (config);
- break;
- case 'O': /* read option from commandline */
- config = loadconfig_fromstr (optarg, config);
- setglobalflags (config);
- checkconfig (config);
- break;
- case 'd': /* ignore directory arg */
- dirflag = 1;
- break;
- case 'h': /* print no headline */
- headerflag = 0;
- break;
- case 'k': /* ksk only */
- zskflag = 0;
- break;
- case 'L': /* ljust */
- ljustflag = !ljustflag;
- break;
- case 'l': /* label list */
- labellist = prepstrlist (optarg, LISTDELIM);
- if ( labellist == NULL )
- fatal ("Out of memory\n");
- break;
- case 'p': /* print path */
- pathflag = 1;
- break;
- case 'r': /* switch recursive flag */
- recflag = !recflag;
- break;
- case 's': /* switch subdomain sorting flag */
- subdomain_before_parent = !subdomain_before_parent;
- break;
- case 't': /* time */
- timeflag = !timeflag;
- break;
- case 'e': /* expire time */
- exptimeflag = !exptimeflag;
- break;
- case 'z': /* zsk only */
- kskflag = 0;
- break;
- case ':':
- snprintf (str, sizeof(str), "option \"-%c\" requires an argument.\n",
- optopt);
- usage (str, config);
- break;
- case '?':
- if ( isprint (optopt) )
- snprintf (str, sizeof(str), "Unknown option \"-%c\".\n",
- optopt);
- else
- snprintf (str, sizeof (str), "Unknown option char \\x%x.\n",
- optopt);
- usage (str, config);
- break;
- default:
- abort();
- }
- }
-
- if ( kskflag == 0 && zskflag == 0 )
- kskflag = zskflag = 1;
-
- tc_init (stdout, term);
-
- c = optind;
- do {
- if ( c >= argc ) /* no args left */
- file = config->zonedir; /* use default directory */
- else
- file = argv[c++];
-
- if ( is_directory (file) )
- parsedirectory (file, &data, subdomain_before_parent);
- else
- parsefile (file, &data, subdomain_before_parent);
-
- } while ( c < argc ); /* for all arguments */
-
- switch ( action )
- {
- case 'H':
- usage ("", config);
- case 'K':
- zkt_list_dnskeys (data);
- break;
- case 'T':
- zkt_list_trustedkeys (data);
- break;
- case 'M':
- zkt_list_managedkeys (data);
- break;
- default:
- zkt_list_keys (data);
- }
-
- tc_end (stdout, term);
-
- return 0;
-}
-
-# define sopt_usage(mesg, value) fprintf (stderr, mesg, value)
-#if defined(HAVE_GETOPT_LONG) && HAVE_GETOPT_LONG
-# define lopt_usage(mesg, value) fprintf (stderr, mesg, value)
-# define loptstr(lstr, sstr) lstr
-#else
-# define lopt_usage(mesg, value)
-# define loptstr(lstr, sstr) sstr
-#endif
-static void usage (char *mesg, zconf_t *cp)
-{
- fprintf (stderr, "Secure DNS Zone Key Tool %s\n", ZKT_VERSION);
- fprintf (stderr, "\n");
-
- fprintf (stderr, "List keys in current or given directory (-r for recursive mode)\n");
- sopt_usage ("\tusage: %s [-adefhkLprtzC] [-c config] [file|dir ...]\n", progname);
- fprintf (stderr, "\n");
- fprintf (stderr, "List public part of keys in DNSKEY RR format\n");
- sopt_usage ("\tusage: %s -K [-dhkrz] [-c config] [file|dir ...]\n", progname);
- lopt_usage ("\tusage: %s --list-dnskeys [-dhkzr] [-c config] [file|dir ...]\n", progname);
- fprintf (stderr, "\n");
- fprintf (stderr, "List keys (output is suitable for trusted-keys section)\n");
- sopt_usage ("\tusage: %s -T [-dhrz] [-c config] [file|dir ...]\n", progname);
- lopt_usage ("\tusage: %s --list-trustedkeys [-dhzr] [-c config] [file|dir ...]\n", progname);
- fprintf (stderr, "\n");
- fprintf (stderr, "List managed keys (output is suitable for managed-keys section)\n");
- sopt_usage ("\tusage: %s -M [-dhrz] [-c config] [file|dir ...]\n", progname);
- lopt_usage ("\tusage: %s --list-managedkeys [-dhzr] [-c config] [file|dir ...]\n", progname);
- fprintf (stderr, "\n");
-
- fprintf (stderr, "General options \n");
- fprintf (stderr, "\t-c file%s", loptstr (", --config=file\n", ""));
- fprintf (stderr, "\t\t read config from <file> instead of %s\n", CONFIG_FILE);
- fprintf (stderr, "\t-O optstr%s", loptstr (", --config-option=\"optstr\"\n", ""));
- fprintf (stderr, "\t\t read config options from commandline\n");
- fprintf (stderr, "\t-h%s\t no headline or trusted/managed-key section header/trailer in -T/-M mode\n", loptstr (", --nohead", "\t"));
- fprintf (stderr, "\t-d%s\t skip directory arguments\n", loptstr (", --directory", "\t"));
- fprintf (stderr, "\t-L%s\t print the domain name left justified (default: %s)\n", loptstr (", --leftjust", "\t"), ljustflag ? "on": "off");
- fprintf (stderr, "\t-l list%s", loptstr (", --label=\"list\"\n\t", ""));
- fprintf (stderr, "\t\t print out only zone keys from the given domain list\n");
- fprintf (stderr, "\t-C[term]%s", loptstr (", --color[=\"term\"]\n\t", ""));
- fprintf (stderr, "\t\t turn color mode on \n");
- fprintf (stderr, "\t-p%s\t show path of keyfile / create key in current directory\n", loptstr (", --path", "\t"));
- fprintf (stderr, "\t-r%s\t recursive mode on/off (default: %s)\n", loptstr(", --recursive", "\t"), recflag ? "on": "off");
- fprintf (stderr, "\t-s%s\t change sorting of subdomains\n", loptstr(", --subdomain", "\t"));
- fprintf (stderr, "\t-a%s\t print age of key (default: %s)\n", loptstr (", --age", "\t"), ageflag ? "on": "off");
- fprintf (stderr, "\t-t%s\t print key generation time (default: %s)\n", loptstr (", --time", "\t"),
- timeflag ? "on": "off");
- fprintf (stderr, "\t-e%s\t print key expiration time\n", loptstr (", --expire", "\t"));
- fprintf (stderr, "\t-f%s\t print key lifetime\n", loptstr (", --lifetime", "\t"));
- fprintf (stderr, "\t-k%s\t key signing keys only\n", loptstr (", --ksk", "\t"));
- fprintf (stderr, "\t-z%s\t zone signing keys only\n", loptstr (", --zsk", "\t"));
- if ( mesg && *mesg )
- fprintf (stderr, "%s\n", mesg);
- exit (1);
-}
-
-static int parsedirectory (const char *dir, dki_t **listp, int sub_before)
-{
- dki_t *dkp;
- DIR *dirp;
- struct dirent *dentp;
- char path[MAX_PATHSIZE+1];
-
- if ( dirflag )
- return 0;
-
- dbg_val ("directory: opendir(%s)\n", dir);
- if ( (dirp = opendir (dir)) == NULL )
- return 0;
-
- while ( (dentp = readdir (dirp)) != NULL )
- {
- if ( is_dotfilename (dentp->d_name) )
- continue;
-
- dbg_val ("directory: check %s\n", dentp->d_name);
- pathname (path, sizeof (path), dir, dentp->d_name, NULL);
- if ( is_directory (path) && recflag )
- {
- dbg_val ("directory: recursive %s\n", path);
- parsedirectory (path, listp, sub_before);
- }
- else if ( is_keyfilename (dentp->d_name) )
- if ( (dkp = dki_read (dir, dentp->d_name)) )
- {
- // fprintf (stderr, "parsedir: tssearch (%d %s)\n", dkp, dkp->name);
-#if defined (USE_TREE) && USE_TREE
- dki_tadd (listp, dkp, sub_before);
-#else
- dki_add (listp, dkp);
-#endif
- }
- }
- closedir (dirp);
- return 1;
-}
-
-static void parsefile (const char *file, dki_t **listp, int sub_before)
-{
- char path[MAX_PATHSIZE+1];
- dki_t *dkp;
-
- /* file arg contains path ? ... */
- file = splitpath (path, sizeof (path), file); /* ... then split of */
-
- if ( is_keyfilename (file) ) /* plain file name looks like DNS key file ? */
- {
- if ( (dkp = dki_read (path, file)) ) /* read DNS key file ... */
-#if defined (USE_TREE) && USE_TREE
- dki_tadd (listp, dkp, sub_before); /* ... and add to tree */
-#else
- dki_add (listp, dkp); /* ... and add to list */
-#endif
- else
- error ("error parsing %s: (%s)\n", file, dki_geterrstr());
- }
-}
diff --git a/contrib/zkt-1.1.3/zkt-signer.c b/contrib/zkt-1.1.3/zkt-signer.c
deleted file mode 100644
index 3b88a32d..00000000
--- a/contrib/zkt-1.1.3/zkt-signer.c
+++ /dev/null
@@ -1,990 +0,0 @@
-/*****************************************************************
-**
-** @(#) zkt-signer.c (c) Jan 2005 - Jan 2010 Holger Zuleger hznet.de
-**
-** A wrapper around the BIND dnssec-signzone command which is able
-** to resign a zone if necessary and doing a zone or key signing key rollover.
-**
-** Copyright (c) 2005 - 2010, Holger Zuleger HZnet. All rights reserved.
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-
-# include <stdio.h>
-# include <string.h>
-# include <stdlib.h>
-# include <assert.h>
-# include <dirent.h>
-# include <errno.h>
-# include <unistd.h>
-# include <ctype.h>
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-# include "config_zkt.h"
-#if defined(HAVE_GETOPT_LONG) && HAVE_GETOPT_LONG
-# include <getopt.h>
-#endif
-# include "zconf.h"
-# include "debug.h"
-# include "misc.h"
-# include "ncparse.h"
-# include "nscomm.h"
-# include "soaserial.h"
-# include "zone.h"
-# include "dki.h"
-# include "rollover.h"
-# include "log.h"
-
-# define short_options "c:L:V:D:N:o:O:dfHhnrv"
-#if defined(HAVE_GETOPT_LONG) && HAVE_GETOPT_LONG
-static struct option long_options[] = {
- {"reload", no_argument, NULL, 'r'},
- {"force", no_argument, NULL, 'f'},
- {"noexec", no_argument, NULL, 'n'},
- {"verbose", no_argument, NULL, 'v'},
- {"directory", no_argument, NULL, 'd'},
- {"config", required_argument, NULL, 'c'},
- {"option", required_argument, NULL, 'O'},
- {"config-option", required_argument, NULL, 'O'},
- {"logfile", required_argument, NULL, 'L' },
- {"view", required_argument, NULL, 'V' },
- {"directory", required_argument, NULL, 'D'},
- {"named-conf", required_argument, NULL, 'N'},
- {"origin", required_argument, NULL, 'o'},
- {"dynamic", no_argument, NULL, 'd' },
- {"help", no_argument, NULL, 'h'},
- {0, 0, 0, 0}
-};
-#endif
-
-
-/** function declaration **/
-static void usage (char *mesg, zconf_t *conf);
-static int add2zonelist (const char *dir, const char *view, const char *zone, const char *file);
-static int parsedir (const char *dir, zone_t **zp, const zconf_t *conf);
-static int dosigning (zone_t *zonelist, zone_t *zp);
-static int check_keydb_timestamp (dki_t *keylist, time_t reftime);
-static int new_keysetfiles (const char *dir, time_t zone_signing_time);
-static int writekeyfile (const char *fname, const dki_t *list, int key_ttl);
-static int sign_zone (const zone_t *zp);
-static void register_key (dki_t *listp, const zconf_t *z);
-static void copy_keyset (const char *dir, const char *domain, const zconf_t *conf);
-
-/** global command line options **/
-extern int optopt;
-extern int opterr;
-extern int optind;
-extern char *optarg;
-const char *progname;
-static const char *viewname = NULL;
-static const char *logfile = NULL;
-static const char *origin = NULL;
-static const char *namedconf = NULL;
-static const char *dirname = NULL;
-static int verbose = 0;
-static int force = 0;
-static int reloadflag = 0;
-static int noexec = 0;
-static int dynamic_zone = 0; /* dynamic zone ? */
-static zone_t *zonelist = NULL; /* must be static global because add2zonelist use it */
-static zconf_t *config;
-
-/** macros **/
-#define set_bind96_dynzone(dz) ((dz) = 6)
-#define bind96_dynzone(dz) ( (dz) >= 6 )
-#define is_defined(str) ( (str) && *(str) )
-
-int main (int argc, char *const argv[])
-{
- int c;
- int errcnt;
-#if defined(HAVE_GETOPT_LONG) && HAVE_GETOPT_LONG
- int opt_index;
-#endif
- char errstr[255+1];
- char *p;
- const char *defconfname;
- zone_t *zp;
-
- progname = *argv;
- if ( (p = strrchr (progname, '/')) )
- progname = ++p;
-
- if ( strncmp (progname, "dnssec-signer", 13) == 0 )
- {
- fprintf (stderr, "The use of dnssec-signer is deprecated, please run zkt-signer instead\n");
- viewname = getnameappendix (progname, "dnssec-signer");
- }
- else
- viewname = getnameappendix (progname, "zkt-signer");
- defconfname = getdefconfname (viewname);
- config = loadconfig ("", (zconf_t *)NULL); /* load build-in config */
- if ( fileexist (defconfname) ) /* load default config file */
- config = loadconfig (defconfname, config);
- if ( config == NULL )
- fatal ("Couldn't load config: Out of memory\n");
-
- zonelist = NULL;
- opterr = 0;
-#if defined(HAVE_GETOPT_LONG) && HAVE_GETOPT_LONG
- while ( (c = getopt_long (argc, argv, short_options, long_options, &opt_index)) != -1 )
-#else
- while ( (c = getopt (argc, argv, short_options)) != -1 )
-#endif
- {
- switch ( c )
- {
- case 'V': /* view name */
- viewname = optarg;
- defconfname = getdefconfname (viewname);
- if ( fileexist (defconfname) ) /* load default config file */
- config = loadconfig (defconfname, config);
- if ( config == NULL )
- fatal ("Out of memory\n");
- break;
- case 'c': /* load config from file */
- config = loadconfig (optarg, config);
- if ( config == NULL )
- fatal ("Out of memory\n");
- break;
- case 'O': /* load config option from commandline */
- config = loadconfig_fromstr (optarg, config);
- if ( config == NULL )
- fatal ("Out of memory\n");
- break;
- case 'o':
- origin = optarg;
- break;
- case 'N':
- namedconf = optarg;
- break;
- case 'D':
- dirname = optarg;
- break;
- case 'L': /* error log file|directory */
- logfile = optarg;
- break;
- case 'f':
- force++;
- break;
- case 'H':
- case 'h':
- usage (NULL, config);
- break;
- case 'd':
- dynamic_zone = 1;
- /* dynamic zone requires a name server reload... */
- reloadflag = 0; /* ...but "rndc thaw" reloads the zone anyway */
- break;
- case 'n':
- noexec = 1;
- break;
- case 'r':
- if ( !dynamic_zone ) /* dynamic zones don't need a rndc reload (see "-d" */
- reloadflag = 1;
- break;
- case 'v':
- verbose++;
- break;
- case '?':
- if ( isprint (optopt) )
- snprintf (errstr, sizeof(errstr),
- "Unknown option \"-%c\".\n", optopt);
- else
- snprintf (errstr, sizeof (errstr),
- "Unknown option char \\x%x.\n", optopt);
- usage (errstr, config);
- break;
- default:
- abort();
- }
- }
- dbg_line();
-
- /* store some of the commandline parameter in the config structure */
- setconfigpar (config, "--view", viewname);
- setconfigpar (config, "-v", &verbose);
- setconfigpar (config, "--noexec", &noexec);
- if ( logfile == NULL )
- logfile = config->logfile;
-
- if ( lg_open (progname, config->syslogfacility, config->sysloglevel, config->zonedir, logfile, config->loglevel) < -1 )
- fatal ("Couldn't open logfile %s in dir %s\n", logfile, config->zonedir);
-
- lg_args (LG_NOTICE, argc, argv);
-
- /* 1.0rc1: If the ttl is 0 or not known because of dynamic zone signing, ... */
- /* ... use sig valid time for this */
- if ( config->max_ttl <= 0 || dynamic_zone )
- {
- // config = dupconfig (config);
- config->max_ttl = config->sigvalidity;
- }
-
-
- if ( origin ) /* option -o ? */
- {
- int ret;
-
- if ( (argc - optind) <= 0 ) /* no arguments left ? */
- ret = zone_readdir (".", origin, NULL, &zonelist, config, dynamic_zone);
- else
- ret = zone_readdir (".", origin, argv[optind], &zonelist, config, dynamic_zone);
-
- /* anyway, "delete" all (remaining) arguments */
- optind = argc;
-
- /* complain if nothing could read in */
- if ( ret != 1 || zonelist == NULL )
- {
- lg_mesg (LG_FATAL, "\"%s\": couldn't read", origin);
- fatal ("Couldn't read zone \"%s\"\n", origin);
- }
- }
- if ( namedconf ) /* option -N ? */
- {
- char dir[255+1];
-
- memset (dir, '\0', sizeof (dir));
- if ( config->zonedir )
- strncpy (dir, config->zonedir, sizeof(dir));
- if ( !parse_namedconf (namedconf, config->chroot_dir, dir, sizeof (dir), add2zonelist) )
- fatal ("Can't read file %s as namedconf file\n", namedconf);
- if ( zonelist == NULL )
- fatal ("No signed zone found in file %s\n", namedconf);
- }
- if ( dirname ) /* option -D ? */
- {
- char *dir = strdup (dirname);
-
- p = dir + strlen (dir);
- if ( p > dir )
- p--;
- if ( *p == '/' )
- *p = '\0'; /* remove trailing path seperator */
-
- if ( !parsedir (dir, &zonelist, config) )
- fatal ("Can't read directory tree %s\n", dir);
- if ( zonelist == NULL )
- fatal ("No signed zone found in directory tree %s\n", dir);
- free (dir);
- }
-
- /* none of the above: read default directory tree */
- if ( zonelist == NULL )
- parsedir (config->zonedir, &zonelist, config);
-
-#if defined(DBG) && DBG
- for ( zp = zonelist; zp; zp = zp->next )
- zone_print ("in main: ", zp);
-#endif
- for ( zp = zonelist; zp; zp = zp->next )
- if ( in_strarr (zp->zone, &argv[optind], argc - optind) )
- {
- dosigning (zonelist, zp);
- verbmesg (1, zp->conf, "\n");
- }
-
- zone_freelist (&zonelist);
-
- errcnt = lg_geterrcnt ();
- lg_mesg (LG_NOTICE, "end of run: %d error%s occured", errcnt, errcnt == 1 ? "" : "s");
- lg_close ();
-
- return errcnt < 64 ? errcnt : 64;
-}
-
-# define sopt_usage(mesg, value) fprintf (stderr, mesg, value)
-#if defined(HAVE_GETOPT_LONG) && HAVE_GETOPT_LONG
-# define lopt_usage(mesg, value) fprintf (stderr, mesg, value)
-# define loptstr(lstr, sstr) lstr
-#else
-# define lopt_usage(mesg, value)
-# define loptstr(lstr, sstr) sstr
-#endif
-static void usage (char *mesg, zconf_t *conf)
-{
- fprintf (stderr, "%s version %s compiled for BIND %d\n", progname, ZKT_VERSION, BIND_VERSION);
- fprintf (stderr, "ZKT %s\n", ZKT_COPYRIGHT);
- fprintf (stderr, "\n");
-
- fprintf (stderr, "usage: %s [-L] [-V view] [-c file] [-O optstr] ", progname);
- fprintf (stderr, "[-D directorytree] ");
- fprintf (stderr, "[-fhnr] [-v [-v]] [zone ...]\n");
-
- fprintf (stderr, "usage: %s [-L] [-V view] [-c file] [-O optstr] ", progname);
- fprintf (stderr, "-N named.conf ");
- fprintf (stderr, "[-fhnr] [-v [-v]] [zone ...]\n");
-
- fprintf (stderr, "usage: %s [-L] [-V view] [-c file] [-O optstr] ", progname);
- fprintf (stderr, "-o origin ");
- fprintf (stderr, "[-fhnr] [-v [-v]] [zonefile.signed]\n");
-
- fprintf (stderr, "\t-c file%s", loptstr (", --config=file\n", ""));
- fprintf (stderr, "\t\t read config from <file> instead of %s\n", CONFIG_FILE);
- fprintf (stderr, "\t-O optstr%s", loptstr (", --config-option=\"optstr\"\n", ""));
- fprintf (stderr, "\t\t set config options on the commandline\n");
- fprintf (stderr, "\t-L file|dir%s", loptstr (", --logfile=file|dir\n", ""));
- fprintf (stderr, "\t\t specify file or directory for the log output\n");
- fprintf (stderr, "\t-V name%s", loptstr (", --view=name\n", ""));
- fprintf (stderr, "\t\t specify the view name \n");
- fprintf (stderr, "\t-D dir%s", loptstr (", --directory=dir\n", ""));
- fprintf (stderr, "\t\t parse the given directory tree for a list of secure zones \n");
- fprintf (stderr, "\t-N file%s", loptstr (", --named-conf=file\n", ""));
- fprintf (stderr, "\t\t get the list of secure zones out of the named like config file \n");
- fprintf (stderr, "\t-o zone%s", loptstr (", --origin=zone", ""));
- fprintf (stderr, "\tspecify the name of the zone \n");
- fprintf (stderr, "\t\t The file to sign should be given as an argument (default is \"%s.signed\")\n", conf->zonefile);
- fprintf (stderr, "\t-h%s\t print this help\n", loptstr (", --help", "\t"));
- fprintf (stderr, "\t-f%s\t force re-signing\n", loptstr (", --force", "\t"));
- fprintf (stderr, "\t-n%s\t no execution of external signing command\n", loptstr (", --noexec", "\t"));
- // fprintf (stderr, "\t-r%s\t reload zone via <rndc reload zone> (or via the external distribution command)\n", loptstr (", --reload", "\t"));
- fprintf (stderr, "\t-r%s\t reload zone via %s\n", loptstr (", --reload", "\t"), conf->dist_cmd ? conf->dist_cmd: "rndc");
- fprintf (stderr, "\t-v%s\t be verbose (use twice to be very verbose)\n", loptstr (", --verbose", "\t"));
-
- fprintf (stderr, "\t[zone]\t sign only those zones given as argument\n");
-
- fprintf (stderr, "\n");
- fprintf (stderr, "\tif neither -D nor -N nor -o is given, the directory tree specified\n");
- fprintf (stderr, "\tin the dnssec config file (\"%s\") will be parsed\n", conf->zonedir);
-
- if ( mesg && *mesg )
- fprintf (stderr, "%s\n", mesg);
- exit (127);
-}
-
-/** fill zonelist with infos coming out of named.conf **/
-static int add2zonelist (const char *dir, const char *view, const char *zone, const char *file)
-{
-#ifdef DBG
- fprintf (stderr, "printzone ");
- fprintf (stderr, "view \"%s\" " , view);
- fprintf (stderr, "zone \"%s\" " , zone);
- fprintf (stderr, "file ");
- if ( dir && *dir )
- fprintf (stderr, "%s/", dir);
- fprintf (stderr, "%s", file);
- fprintf (stderr, "\n");
-#endif
- dbg_line ();
- if ( view[0] != '\0' ) /* view found in named.conf */
- {
- if ( viewname == NULL || viewname[0] == '\0' ) /* viewname wasn't set on startup ? */
- {
- dbg_line ();
- error ("zone \"%s\" in view \"%s\" found in name server config, but no matching view was set on startup\n", zone, view);
- lg_mesg (LG_ERROR, "\"%s\" in view \"%s\" found in name server config, but no matching view was set on startup", zone, view);
- return 0;
- }
- dbg_line ();
- if ( strcmp (viewname, view) != 0 ) /* zone is _not_ in current view */
- return 0;
- }
- return zone_readdir (dir, zone, file, &zonelist, config, dynamic_zone);
-}
-
-static int parsedir (const char *dir, zone_t **zp, const zconf_t *conf)
-{
- DIR *dirp;
- struct dirent *dentp;
- char path[MAX_PATHSIZE+1];
-
- dbg_val ("parsedir: (%s)\n", dir);
- if ( !is_directory (dir) )
- return 0;
-
- dbg_line ();
- zone_readdir (dir, NULL, NULL, zp, conf, dynamic_zone);
-
- dbg_val ("parsedir: opendir(%s)\n", dir);
- if ( (dirp = opendir (dir)) == NULL )
- return 0;
-
- while ( (dentp = readdir (dirp)) != NULL )
- {
- if ( is_dotfilename (dentp->d_name) )
- continue;
-
- pathname (path, sizeof (path), dir, dentp->d_name, NULL);
- if ( !is_directory (path) )
- continue;
-
- dbg_val ("parsedir: recursive %s\n", path);
- parsedir (path, zp, conf);
- }
- closedir (dirp);
- return 1;
-}
-
-static int dosigning (zone_t *zonelist, zone_t *zp)
-{
- char path[MAX_PATHSIZE+1];
- int err;
- int newkey;
- int newkeysetfile;
- int use_unixtime;
- time_t currtime;
- time_t zfile_time;
- time_t zfilesig_time;
- char mesg[255+1];
-
- verbmesg (1, zp->conf, "parsing zone \"%s\" in dir \"%s\"\n", zp->zone, zp->dir);
-
- pathname (path, sizeof (path), zp->dir, zp->sfile, NULL);
- dbg_val("parsezonedir fileexist (%s)\n", path);
- if ( !fileexist (path) )
- {
- error ("Not a secure zone directory (%s)!\n", zp->dir);
- lg_mesg (LG_ERROR, "\"%s\": not a secure zone directory (%s)!", zp->zone, zp->dir);
- return 1;
- }
- zfilesig_time = file_mtime (path);
-
- pathname (path, sizeof (path), zp->dir, zp->file, NULL);
- dbg_val("parsezonedir fileexist (%s)\n", path);
- if ( !fileexist (path) )
- {
- error ("No zone file found (%s)!\n", path);
- lg_mesg (LG_ERROR, "\"%s\": no zone file found (%s)!", zp->zone, path);
- return 2;
- }
-
- zfile_time = file_mtime (path);
- currtime = time (NULL);
-
- /* check for domain based logging */
- if ( is_defined (zp->conf->logdomaindir) ) /* parameter is not null or empty ? */
- {
- if ( strcmp (zp->conf->logdomaindir, ".") == 0 ) /* current (".") means zone directory */
- lg_zone_start (zp->dir, zp->zone);
- else
- lg_zone_start (zp->conf->logdomaindir, zp->zone);
- }
-
- /* check rfc5011 key signing keys, create new one if necessary */
- dbg_msg("parsezonedir check rfc 5011 ksk ");
- newkey = ksk5011status (&zp->keys, zp->dir, zp->zone, zp->conf);
- if ( (newkey & 02) != 02 ) /* not a rfc 5011 zone ? */
- {
- verbmesg (2, zp->conf, "\t\t->not a rfc5011 zone, looking for a regular ksk rollover\n");
- /* check key signing keys, create new one if necessary */
- dbg_msg("parsezonedir check ksk ");
- newkey |= kskstatus (zonelist, zp);
- }
- else
- newkey &= ~02; /* reset bit 2 */
-
- /* check age of zone keys, probably retire (depreciate) or remove old keys */
- dbg_msg("parsezonedir check zsk ");
- newkey += zskstatus (&zp->keys, zp->dir, zp->zone, zp->conf);
-
- /* check age of "dnskey.db" file against age of keyfiles */
- pathname (path, sizeof (path), zp->dir, zp->conf->keyfile, NULL);
- dbg_val("parsezonedir check_keydb_timestamp (%s)\n", path);
- if ( !newkey )
- newkey = check_keydb_timestamp (zp->keys, file_mtime (path));
-
- newkeysetfile = 0;
-#if defined(ALWAYS_CHECK_KEYSETFILES) && ALWAYS_CHECK_KEYSETFILES /* patch from Shane Wegner 15. June 2009 */
- /* check if there is a new keyset- file */
- if ( !newkey )
- newkeysetfile = new_keysetfiles (zp->dir, zfilesig_time);
-#else
- /* if we work in subdir mode, check if there is a new keyset- file */
- if ( !newkey && zp->conf->keysetdir && strcmp (zp->conf->keysetdir, "..") == 0 )
- newkeysetfile = new_keysetfiles (zp->dir, zfilesig_time);
-#endif
-
- /* is there a list of files included in zone.db ? */
- if ( zp->conf->dependfiles && *zp->conf->dependfiles )
- {
- char file[255+1];
- const char *p;
- int i;
- time_t incfile_mtime;
-
- /* check the timestamp of each file against "zone.db" */
- p = zp->conf->dependfiles;
- while ( p && *p )
- {
- while ( isflistdelim (*p) )
- p++;
-
- for ( i = 0; i < 255 && *p && !isflistdelim (*p); i++ )
- file[i] = *p++;
- file[i] = '\0';
-
- pathname (path, sizeof (path), zp->dir, file, NULL);
-
- incfile_mtime = file_mtime (path);
- if ( incfile_mtime > zfile_time ) /* include file is newer? */
- zfile_time = incfile_mtime; /* take this one as new mtime */
- }
- }
-
- /**
- ** Check if it is time to do a re-sign. This is the case if
- ** a) the command line flag -f is set, or
- ** b) new keys are generated, or
- ** c) we found a new KSK of a delegated domain, or
- ** d) the "dnskey.db" file is newer than "zone.db"
- ** e) the "zone.db" is newer than "zone.db.signed" or
- ** f) "zone.db.signed" is older than the re-sign interval
- **/
- mesg[0] = '\0';
- if ( force )
- snprintf (mesg, sizeof(mesg), "Option -f");
- else if ( newkey )
- snprintf (mesg, sizeof(mesg), "Modified zone key set");
- else if ( newkeysetfile )
- snprintf (mesg, sizeof(mesg), "Modified KSK in delegated domain");
- else if ( file_mtime (path) > zfilesig_time )
- snprintf (mesg, sizeof(mesg), "Modified keys");
- else if ( zfile_time > zfilesig_time )
- snprintf (mesg, sizeof(mesg), "Zone file edited");
- else if ( (currtime - zfilesig_time) > zp->conf->resign - (OFFSET) )
- snprintf (mesg, sizeof(mesg), "re-signing interval (%s) reached",
- str_delspace (age2str (zp->conf->resign)));
-
- if ( *mesg )
- verbmesg (1, zp->conf, "\tRe-signing necessary: %s\n", mesg);
- else
- verbmesg (1, zp->conf, "\tRe-signing not necessary!\n");
-
- if ( *mesg )
- lg_mesg (LG_NOTICE, "\"%s\": re-signing triggered: %s", zp->zone, mesg);
-
- dbg_line ();
- if ( !(force || newkey || newkeysetfile || zfile_time > zfilesig_time ||
- file_mtime (path) > zfilesig_time ||
- (currtime - zfilesig_time) > zp->conf->resign - (OFFSET)) )
- {
- verbmesg (2, zp->conf, "\tCheck if there is a parent file to copy\n");
- if ( zp->conf->keysetdir && strcmp (zp->conf->keysetdir, "..") == 0 )
- copy_keyset (zp->dir, zp->zone, zp->conf); /* copy the parent- file if it exist */
- if ( is_defined (zp->conf->logdomaindir) )
- lg_zone_end ();
- return 0; /* nothing to do */
- }
-
- /* let's start signing the zone */
- dbg_line ();
-
- /* create new "dnskey.db" file */
- pathname (path, sizeof (path), zp->dir, zp->conf->keyfile, NULL);
- verbmesg (1, zp->conf, "\tWriting key file \"%s\"\n", path);
- if ( !writekeyfile (path, zp->keys, zp->conf->key_ttl) )
- {
- error ("Can't create keyfile %s \n", path);
- lg_mesg (LG_ERROR, "\"%s\": can't create keyfile %s", zp->zone , path);
- }
-
- err = 1;
- use_unixtime = ( zp->conf->serialform == Unixtime );
- dbg_val1 ("Use unixtime = %d\n", use_unixtime);
- if ( !dynamic_zone && !use_unixtime ) /* increment serial number in static zone files */
- {
- pathname (path, sizeof (path), zp->dir, zp->file, NULL);
- err = 0;
- if ( noexec == 0 )
- {
- if ( (err = inc_serial (path, use_unixtime)) < 0 )
- {
- error ("could not increment serialno of domain %s in file %s: %s!\n",
- zp->zone, path, inc_errstr (err));
- lg_mesg (LG_ERROR,
- "zone \"%s\": couldn't increment serialno in file %s: %s",
- zp->zone, path, inc_errstr (err));
- }
- else
- verbmesg (1, zp->conf, "\tIncrementing serial number in file \"%s\"\n", path);
- }
- else
- verbmesg (1, zp->conf, "\tIncrementing serial number in file \"%s\"\n", path);
- }
-
- /* at last, sign the zone file */
- if ( err >= 0 )
- {
- time_t timer;
-
- verbmesg (1, zp->conf, "\tSigning zone \"%s\"\n", zp->zone);
- logflush ();
-
- /* dynamic zones uses incremental signing, so we have to */
- /* prepare the old (signed) file as new input file */
- if ( dynamic_zone )
- {
- char zfile[MAX_PATHSIZE+1];
-
- dyn_update_freeze (zp->zone, zp->conf, 1); /* freeze dynamic zone ! */
-
- pathname (zfile, sizeof (zfile), zp->dir, zp->file, NULL);
- pathname (path, sizeof (path), zp->dir, zp->sfile, NULL);
- if ( filesize (path) == 0L ) /* initial signing request ? */
- {
- verbmesg (1, zp->conf, "\tDynamic Zone signing: Initial signing request: Add DNSKEYs to zonefile\n");
- copyfile (zfile, path, zp->conf->keyfile);
- }
-#if 1
- else if ( zfile_time > zfilesig_time ) /* zone.db is newer than signed file */
- {
- verbmesg (1, zp->conf, "\tDynamic Zone signing: zone file manually edited: Use it as new input file\n");
- copyfile (zfile, path, NULL);
- }
-#endif
- verbmesg (1, zp->conf, "\tDynamic Zone signing: copy old signed zone file %s to new input file %s\n",
- path, zfile);
-
- if ( newkey ) /* if we have new keys, they should be added to the zone file */
- {
- copyzonefile (path, zfile, zp->conf->keyfile);
-#if 0
- if ( zp->conf->dist_cmd )
- dist_and_reload (zp, 2); /* ... and send to the name server */
-#endif
- }
- else /* else we can do a simple file copy */
- copyfile (path, zfile, NULL);
- }
-
- timer = start_timer ();
- if ( (err = sign_zone (zp)) < 0 )
- {
- error ("\tSigning of zone %s failed (%d)!\n", zp->zone, err);
- lg_mesg (LG_ERROR, "\"%s\": signing failed!", zp->zone);
- }
- timer = stop_timer (timer);
-
- if ( dynamic_zone )
- dyn_update_freeze (zp->zone, zp->conf, 0); /* thaw dynamic zone file */
-
- if ( err >= 0 )
- {
- const char *tstr = str_delspace (age2str (timer));
-
- if ( !tstr || *tstr == '\0' )
- tstr = "0s";
- verbmesg (1, zp->conf, "\tSigning completed after %s.\n", tstr);
- }
- }
-
- copy_keyset (zp->dir, zp->zone, zp->conf);
-
- if ( err >= 0 && reloadflag )
- {
- if ( zp->conf->dist_cmd )
- dist_and_reload (zp, 1);
- else
- reload_zone (zp->zone, zp->conf);
-
- register_key (zp->keys, zp->conf);
- }
-
- if ( is_defined (zp->conf->logdomaindir) )
- lg_zone_end ();
-
- return err;
-}
-
-static void register_key (dki_t *list, const zconf_t *z)
-{
- dki_t *dkp;
- time_t age;
-
- time_t currtime;
- assert ( list != NULL );
- assert ( z != NULL );
-
- currtime = time (NULL);
- for ( dkp = list; dkp && dki_isksk (dkp); dkp = dkp->next )
- {
- age = dki_age (dkp, currtime);
-#if 0
- /* announce "new" and active key signing keys */
- if ( REG_URL && *REG_URL && dki_status (dkp) == DKI_ACT && age <= z->resign * 4 )
- {
- if ( verbose )
- logmesg ("\tRegister new KSK with tag %d for domain %s\n",
- dkp->tag, dkp->name);
- }
-#endif
- }
-}
-
-/*
- * This function is not working with symbolic links to keyset- files,
- * because file_mtime() returns the mtime of the underlying file, and *not*
- * that of the symlink file.
- * This is bad, because the keyset-file will be newly generated by dnssec-signzone
- * on every re-signing call.
- * Instead, in the case of a hierarchical directory structure, we copy the file
- * (and so we change the timestamp) only if it was modified after the last
- * generation (checked with cmpfile(), see func sign_zone()).
- */
-# define KEYSET_FILE_PFX "keyset-"
-static int new_keysetfiles (const char *dir, time_t zone_signing_time)
-{
- DIR *dirp;
- struct dirent *dentp;
- char path[MAX_PATHSIZE+1];
- int newkeysetfile;
-
- if ( (dirp = opendir (dir)) == NULL )
- return 0;
-
- newkeysetfile = 0;
- dbg_val2 ("new_keysetfile (%s, %s)\n", dir, time2str (zone_signing_time, 's'));
- while ( !newkeysetfile && (dentp = readdir (dirp)) != NULL )
- {
- if ( strncmp (dentp->d_name, KEYSET_FILE_PFX, strlen (KEYSET_FILE_PFX)) != 0 )
- continue;
-
- pathname (path, sizeof (path), dir, dentp->d_name, NULL);
- dbg_val2 ("newkeysetfile timestamp of %s = %s\n", path, time2str (file_mtime(path), 's'));
- if ( file_mtime (path) > zone_signing_time )
- newkeysetfile = 1;
- }
- closedir (dirp);
-
- return newkeysetfile;
-}
-
-static int check_keydb_timestamp (dki_t *keylist, time_t reftime)
-{
- dki_t *key;
-
- assert ( keylist != NULL );
- if ( reftime == 0 )
- return 1;
-
- for ( key = keylist; key; key = key->next )
- if ( dki_time (key) > reftime )
- return 1;
-
- return 0;
-}
-
-static int writekeyfile (const char *fname, const dki_t *list, int key_ttl)
-{
- FILE *fp;
- const dki_t *dkp;
- time_t curr = time (NULL);
- int ksk;
-
- if ( (fp = fopen (fname, "w")) == NULL )
- return 0;
- fprintf (fp, ";\n");
- fprintf (fp, ";\t!!! Don\'t edit this file by hand.\n");
- fprintf (fp, ";\t!!! It will be generated by %s.\n", progname);
- fprintf (fp, ";\n");
- fprintf (fp, ";\t Last generation time %s\n", time2str (curr, 's'));
- fprintf (fp, ";\n");
-
- fprintf (fp, "\n");
- fprintf (fp, "; *** List of Key Signing Keys ***\n");
- ksk = 1;
- for ( dkp = list; dkp; dkp = dkp->next )
- {
- if ( ksk && !dki_isksk (dkp) )
- {
- fprintf (fp, "; *** List of Zone Signing Keys ***\n");
- ksk = 0;
- }
- dki_prt_comment (dkp, fp);
- dki_prt_dnskeyttl (dkp, fp, key_ttl);
- putc ('\n', fp);
- }
-
- fclose (fp);
- return 1;
-}
-
-static int sign_zone (const zone_t *zp)
-{
- char cmd[2047+1];
- char str[1023+1];
- char rparam[254+1];
- char nsec3param[637+1];
- char keysetdir[254+1];
- const char *gends;
- const char *dnskeyksk;
- const char *pseudo;
- const char *param;
- int len;
- FILE *fp;
-
- const char *dir;
- const char *domain;
- const char *file;
- const zconf_t *conf;
-
- assert (zp != NULL);
- dir = zp->dir;
- domain = zp->zone;
- file = zp->file;
- conf = zp->conf;
-
- len = 0;
- str[0] = '\0';
- if ( conf->lookaside && conf->lookaside[0] )
- len = snprintf (str, sizeof (str), "-l %.250s", conf->lookaside);
-
- dbg_line();
- if ( !dynamic_zone && conf->serialform == Unixtime )
- snprintf (str+len, sizeof (str) - len, " -N unixtime");
-
- gends = "";
- if ( conf->sig_gends )
- gends = "-C -g ";
-
- dnskeyksk = "";
- if ( conf->sig_dnskeyksk )
- dnskeyksk = "-x ";
-
- pseudo = "";
- if ( conf->sig_pseudo )
- pseudo = "-p ";
-
- param = "";
- if ( conf->sig_param && conf->sig_param[0] )
- param = conf->sig_param;
-
- nsec3param[0] = '\0';
- if ( conf->k_algo == DK_ALGO_NSEC3DSA || conf->k_algo == DK_ALGO_NSEC3RSASHA1 ||
- conf->nsec3 != NSEC3_OFF )
- {
- char salt[510+1]; /* salt has a maximum of 255 bytes == 510 hex nibbles */
- const char *update;
- const char *optout;
- unsigned int seed;
-
- update = "-u "; /* trailing blank is necessary */
- if ( conf->nsec3 == NSEC3_OPTOUT )
- optout = "-A ";
- else
- optout = "";
-
- /* static zones can use always a new salt (full zone signing) */
- seed = 0L; /* no seed: use mechanism build in gensalt() */
- if ( dynamic_zone )
- { /* dynamic zones have to reuse the salt on signing */
- const dki_t *kp;
-
- /* use gentime timestamp of ZSK for seeding rand generator */
- kp = dki_find (zp->keys, DKI_ZSK, DKI_ACTIVE, 1);
- assert ( kp != NULL );
- if ( kp->gentime )
- seed = kp->gentime;
- else
- seed = kp->time;
- }
-
- if ( gensalt (salt, sizeof (salt), conf->saltbits, seed) )
- snprintf (nsec3param, sizeof (nsec3param), "%s%s-3 %s ", update, optout, salt);
- }
-
- dbg_line();
- rparam[0] = '\0';
- if ( conf->sig_random && conf->sig_random[0] )
- snprintf (rparam, sizeof (rparam), "-r %.250s ", conf->sig_random);
-
- dbg_line();
- keysetdir[0] = '\0';
- if ( conf->keysetdir && conf->keysetdir[0] && strcmp (conf->keysetdir, "..") != 0 )
- snprintf (keysetdir, sizeof (keysetdir), "-d %.250s ", conf->keysetdir);
-
- if ( dir == NULL || *dir == '\0' )
- dir = ".";
-
- dbg_line();
- if ( dynamic_zone )
- snprintf (cmd, sizeof (cmd), "cd %s; %s %s %s%s%s%s%s%s-o %s -e +%ld %s -N increment -f %s.dsigned %s K*.private 2>&1",
- dir, SIGNCMD, param, nsec3param, dnskeyksk, gends, pseudo, rparam, keysetdir, domain, conf->sigvalidity, str, file, file);
- else
- snprintf (cmd, sizeof (cmd), "cd %s; %s %s %s%s%s%s%s%s-o %s -e +%ld %s %s K*.private 2>&1",
- dir, SIGNCMD, param, nsec3param, dnskeyksk, gends, pseudo, rparam, keysetdir, domain, conf->sigvalidity, str, file);
- verbmesg (2, conf, "\t Run cmd \"%s\"\n", cmd);
- *str = '\0';
- if ( noexec == 0 )
- {
-#if 0
- if ( (fp = popen (cmd, "r")) == NULL || fgets (str, sizeof str, fp) == NULL )
- return -1;
-#else
- if ( (fp = popen (cmd, "r")) == NULL )
- return -1;
- str[0] = '\0';
- while ( fgets (str, sizeof str, fp) != NULL ) /* eat up all output until the last line */
- ;
-#endif
- pclose (fp);
- }
-
- dbg_line();
- verbmesg (2, conf, "\t Cmd dnssec-signzone return: \"%s\"\n", str_chop (str, '\n'));
- len = strlen (str) - 6;
- if ( len < 0 || strcmp (str+len, "signed") != 0 )
- return -1;
-
- return 0;
-}
-
-static void copy_keyset (const char *dir, const char *domain, const zconf_t *conf)
-{
- char fromfile[1024];
- char tofile[1024];
- int ret;
-
- /* propagate "keyset"-file to parent dir */
- if ( conf->keysetdir && strcmp (conf->keysetdir, "..") == 0 )
- {
- /* check if special parent-file exist (ksk rollover) */
- snprintf (fromfile, sizeof (fromfile), "%s/parent-%s", dir, domain);
- if ( !fileexist (fromfile) ) /* use "normal" keyset-file */
- snprintf (fromfile, sizeof (fromfile), "%s/keyset-%s", dir, domain);
-
- /* verbmesg (2, conf, "\t check \"%s\" against parent dir\n", fromfile); */
- snprintf (tofile, sizeof (tofile), "%s/../keyset-%s", dir, domain);
- if ( cmpfile (fromfile, tofile) != 0 )
- {
- verbmesg (2, conf, "\t copy \"%s\" to parent dir\n", fromfile);
- if ( (ret = copyfile (fromfile, tofile, NULL)) != 0 )
- {
- error ("Couldn't copy \"%s\" to parent dir (%d:%s)\n",
- fromfile, ret, strerror(errno));
- lg_mesg (LG_ERROR, "\%s\": can't copy \"%s\" to parent dir (%d:%s)",
- domain, fromfile, ret, strerror(errno));
- }
- }
- }
-}
diff --git a/contrib/zkt-1.1.3/zkt-soaserial.c b/contrib/zkt-1.1.3/zkt-soaserial.c
deleted file mode 100644
index ff107d9f..00000000
--- a/contrib/zkt-1.1.3/zkt-soaserial.c
+++ /dev/null
@@ -1,222 +0,0 @@
-/*****************************************************************
-**
-** @(#) zkt-soaserial.c (c) Oct 2007 Holger Zuleger hznet.de
-**
-** A small utility to print out the (unixtime) soa serial
-** number in a human readable form
-**
-** Copyright (c) Oct 2007, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-# include <stdio.h>
-# include <string.h>
-# include <sys/types.h>
-# include <time.h>
-# include <utime.h>
-# include <assert.h>
-# include <stdlib.h>
-# include <ctype.h>
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-# include "config_zkt.h"
-
-static const char *progname;
-
-static char *timestr (time_t sec);
-static int read_serial_fromfile (const char *fname, unsigned long *serial);
-static void printserial (const char *fname, unsigned long serial);
-static void usage (const char *msg);
-
-/*****************************************************************
-** timestr (sec)
-*****************************************************************/
-static char *timestr (time_t sec)
-{
- struct tm *t;
- static char timestr[31+1]; /* 27+1 should be enough */
-
-#if defined(HAVE_STRFTIME) && HAVE_STRFTIME
- t = localtime (&sec);
- strftime (timestr, sizeof (timestr), "%b %d %Y %T %z", t);
-#else
- static char *mstr[] = {
- "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
- };
- int h, s;
-
- t = localtime (&sec);
- s = abs (t->tm_gmtoff);
- h = t->tm_gmtoff / 3600;
- s = t->tm_gmtoff % 3600;
- snprintf (timestr, sizeof (timestr), "%s %2d %4d %02d:%02d:%02d %c%02d%02d",
- mstr[t->tm_mon], t->tm_mday, t->tm_year + 1900,
- t->tm_hour, t->tm_min, t->tm_sec,
- t->tm_gmtoff < 0 ? '-': '+',
- h, s);
-#endif
-
- return timestr;
-}
-
-
-/****************************************************************
-**
-** int read_serial_fromfile (filename)
-**
-** This function depends on a special syntax formating the
-** SOA record in the zone file!!
-**
-** To match the SOA record, the SOA RR must be formatted
-** like this:
-** @ IN SOA <master.fq.dn.> <hostmaster.fq.dn.> (
-** <SPACEes or TABs> 1234567890; serial number
-** <SPACEes or TABs> 86400 ; other values
-** ...
-**
-****************************************************************/
-static int read_serial_fromfile (const char *fname, unsigned long *serial)
-{
- FILE *fp;
- char buf[4095+1];
- char master[254+1];
- int c;
- int soafound;
-
- if ( (fp = fopen (fname, "r")) == NULL )
- return -1; /* file not found */
-
- /* read until the line matches the beginning of a soa record ... */
- soafound = 0;
- while ( !soafound && fgets (buf, sizeof buf, fp) )
- {
- if ( sscanf (buf, "%*s %*d IN SOA %255s %*s (\n", master) == 1 )
- soafound = 1;
- else if ( sscanf (buf, "%*s IN SOA %255s %*s (\n", master) == 1 )
- soafound = 1;
- }
-
- if ( !soafound )
- return -2; /* no zone file (soa not found) */
-
- /* move forward until any non ws is reached */
- while ( (c = getc (fp)) != EOF && isspace (c) )
- ;
- ungetc (c, fp); /* pushback the non ws */
-
- *serial = 0L; /* read in the current serial number */
- if ( fscanf (fp, "%lu", serial) != 1 ) /* try to get serial no */
- return -3; /* no serial number found */
-
- fclose (fp);
-
- return 0; /* ok! */
-}
-
-/*****************************************************************
-** printserial()
-*****************************************************************/
-static void printserial (const char *fname, unsigned long serial)
-{
- if ( fname && *fname )
- printf ("%-30s\t", fname);
-
- printf ("%10lu", serial);
-
- /* try to guess the soa serial format */
- if ( serial < 1136070000L ) /* plain integer (this is 2006-1-1 00:00 in unixtime format) */
- ;
- else if ( serial > 2006010100L ) /* date format */
- {
- int y, m, d, v;
-
- v = serial % 100;
- serial /= 100;
- d = serial % 100;
- serial /= 100;
- m = serial % 100;
- serial /= 100;
- y = serial;
-
- printf ("\t%d-%02d-%02d Version %02d", y, m, d, v);
- }
- else /* unixtime */
- printf ("\t%s\n", timestr (serial) );
-
- printf ("\n");
-}
-
-/*****************************************************************
-** usage (msg)
-*****************************************************************/
-static void usage (const char *msg)
-{
- if ( msg && *msg )
- fprintf (stderr, "%s\n", msg);
- fprintf (stderr, "usage: %s {-s serial | signed_zonefile [...]}\n", progname);
-
- exit (1);
-}
-
-/*****************************************************************
-** main()
-*****************************************************************/
-int main (int argc, char *argv[])
-{
- unsigned long serial;
-
- progname = *argv;
-
- if ( --argc == 0 )
- usage ("");
-
- if ( argv[1][0] == '-' )
- {
- if ( argv[1][1] != 's' )
- usage ("illegal option");
-
- if ( argc != 2 )
- usage ("Option -s requires an argument");
-
- serial = atol (argv[2]);
- printserial ("", serial);
- }
- else
- while ( argc-- > 0 )
- if ( (read_serial_fromfile (*++argv, &serial)) != 0 )
- fprintf (stderr, "couldn't read serial number from file %s\n", *argv);
- else
- printserial (*argv, serial);
-
- return 0;
-}
diff --git a/contrib/zkt-1.1.3/zkt.c b/contrib/zkt-1.1.3/zkt.c
deleted file mode 100644
index 6b6ce69e..00000000
--- a/contrib/zkt-1.1.3/zkt.c
+++ /dev/null
@@ -1,469 +0,0 @@
-/*****************************************************************
-**
-** @(#) zkt.c -- A library for managing a list of dns zone files.
-**
-** Copyright (c) 2005 - 2008, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-# include <stdio.h>
-# include <string.h>
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-# include "config_zkt.h"
-# include "dki.h"
-# include "misc.h"
-# include "strlist.h"
-# include "zconf.h"
-# include "domaincmp.h"
-# include "tcap.h"
-#define extern
-# include "zkt.h"
-#undef extern
-
-extern char *labellist;
-extern int headerflag;
-extern int timeflag;
-extern int exptimeflag;
-extern int lifetime;
-extern int ageflag;
-extern int lifetimeflag;
-extern int kskflag;
-extern int zskflag;
-extern int pathflag;
-extern int ljustflag;
-
-static void printkeyinfo (const dki_t *dkp, const char *oldpath);
-
-static void printkeyinfo (const dki_t *dkp, const char *oldpath)
-{
- time_t currtime;
-
- if ( dkp == NULL ) /* print headline */
- {
- if ( headerflag )
- {
- tc_attr (stdout, TC_BOLD, 1);
- printf ("%-33.33s %5s %3s %3.3s %-7s", "Keyname",
- "Tag", "Typ", "Status", "Algorit");
- if ( timeflag )
- printf (" %-20s", "Generation Time");
- if ( exptimeflag )
- printf (" %-20s", "Expiration Time");
- if ( ageflag )
- printf (" %16s", "Age");
- if ( lifetimeflag )
- printf (" %4s", "LfTm");
- tc_attr (stdout, TC_BOLD, 0);
- putchar ('\n');
- }
- return;
- }
- time (&currtime);
-
- /* TODO: use next line if dname is dynamically allocated */
- /* if ( pathflag && dkp->dname && strcmp (oldpath, dkp->dname) != 0 ) */
- if ( pathflag && strcmp (oldpath, dkp->dname) != 0 )
- printf ("%s/\n", dkp->dname);
-
- if ( (kskflag && dki_isksk (dkp)) || (zskflag && !dki_isksk (dkp)) )
- {
- int color;
-
- if ( ljustflag )
- printf ("%-33.33s ", dkp->name);
- else
- printf ("%33.33s ", dkp->name);
- printf ("%05d ", dkp->tag);
- printf ("%3s ", dki_isksk (dkp) ? "KSK" : "ZSK");
-
- if ( dkp->status == DKI_ACT )
- color = TC_GREEN;
- else if ( dkp->status == DKI_PUB )
- color = TC_BLUE;
- else if ( dkp->status == DKI_DEP )
- color = TC_RED;
- else
- color = TC_BLACK;
- tc_attr (stdout, color, 1);
- printf ("%-3.3s ", dki_statusstr (dkp) );
- tc_attr (stdout, color, 0);
-
- printf ("%-7s", dki_algo2sstr(dkp->algo));
-
- if ( currtime < dkp->time + dkp->lifetime )
- color = TC_GREEN;
- else
- color = TC_BOLD|TC_RED;
- tc_attr (stdout, color, 1);
-
- if ( timeflag )
- printf (" %-20s", time2str (dkp->gentime ? dkp->gentime: dkp->time, 's'));
- if ( exptimeflag )
- printf (" %-20s", time2str (dkp->exptime, 's'));
- if ( ageflag )
- printf (" %16s", age2str (dki_age (dkp, currtime)));
- if ( lifetimeflag && dkp->lifetime )
- {
- if ( dkp->status == 'a' )
- printf ("%c", (currtime < dkp->time + dkp->lifetime) ? '<' : '!');
- else
- putchar (' ');
- printf ("%hdd", dki_lifetimedays (dkp));
- }
- tc_attr (stdout, color, 0);
- putchar ('\n');
- }
-}
-
-#if defined(USE_TREE) && USE_TREE
-static void list_key (const dki_t **nodep, const VISIT which, int depth)
-{
- const dki_t *dkp;
- static const char *oldpath = "";
-
- if ( nodep == NULL )
- return;
-//fprintf (stderr, "listkey %d %d %s\n", which, depth, dkp->name);
-
- if ( which == INORDER || which == LEAF )
- {
- dkp = *nodep;
- while ( dkp ) /* loop through list */
- {
- if ( labellist == NULL || isinlist (dkp->name, labellist) )
- printkeyinfo (dkp, oldpath); /* print entry */
- oldpath = dkp->dname;
- dkp = dkp->next;
- }
- }
-}
-#endif
-
-void zkt_list_keys (const dki_t *data)
-{
-#if ! defined(USE_TREE) || !USE_TREE
- const dki_t *dkp;
- const char *oldpath;
-#endif
-
- if ( data ) /* print headline if list is not empty */
- printkeyinfo (NULL, "");
-
-#if defined(USE_TREE) && USE_TREE
- twalk (data, list_key);
-#else
- oldpath = "";
- for ( dkp = data; dkp; dkp = dkp->next ) /* loop through list */
- {
- if ( labellist == NULL || isinlist (dkp->name, labellist) )
- printkeyinfo (dkp, oldpath); /* print entry */
- oldpath = dkp->dname;
- }
-#endif
-}
-
-#if defined(USE_TREE) && USE_TREE
-# if 0
-static void list_trustedkey (const dki_t **nodep, const VISIT which, int depth)
-{
- const dki_t *dkp;
-
- if ( nodep == NULL )
- return;
-
- dkp = *nodep;
- if ( which == INORDER || which == LEAF )
- {
-// fprintf (stderr, "list_trustedkey order=%d(pre=0,in=1,post=2,leaf=3) depth=%d %s\n", which, depth, dkp->name);
- /* loop through list */
- while ( dkp )
- {
- if ( (dki_isksk (dkp) || zskflag) &&
- (labellist == NULL || isinlist (dkp->name, labellist)) )
- dki_prt_trustedkey (dkp, stdout);
- dkp = dkp->next;
- }
- }
-}
-# else
-const dki_t *parent;
-static void list_trustedkey (const dki_t **nodep, const VISIT which, int depth)
-{
- const dki_t *dkp;
-
- if ( nodep == NULL )
- return;
-
- dkp = *nodep;
- if ( which == INORDER || which == LEAF )
- {
-// fprintf (stderr, "list_trustedkey order=%d(pre=0,in=1,post=2,leaf=3) depth=%d %s\n", which, depth, dkp->name);
- if ( labellist && !isinlist (dkp->name, labellist) )
- return;
-
- if ( parent == NULL || !issubdomain (dkp->name, parent->name) )
- {
- parent = dkp;
- /* loop through list */
- while ( dkp )
- {
- if ( (dki_isksk (dkp) || zskflag) )
- dki_prt_trustedkey (dkp, stdout);
- dkp = dkp->next;
- }
- }
- }
-}
-static void list_managedkey (const dki_t **nodep, const VISIT which, int depth)
-{
- const dki_t *dkp;
-
- if ( nodep == NULL )
- return;
-
- dkp = *nodep;
- if ( which == INORDER || which == LEAF )
- {
-// fprintf (stderr, "list_trustedkey order=%d(pre=0,in=1,post=2,leaf=3) depth=%d %s\n", which, depth, dkp->name);
- if ( labellist && !isinlist (dkp->name, labellist) )
- return;
-
- if ( parent == NULL || !issubdomain (dkp->name, parent->name) )
- {
- const dki_t *dkp_head = NULL;
- const dki_t *standby = NULL;
-
- parent = dkp;
-
- dkp_head = dkp;
- /* look for a standby key */
- for ( dkp = dkp_head; dkp; dkp = dkp->next )
- if ( dki_isksk (dkp) && dki_ispublished (dkp) )
- standby = dkp;
-
- if ( !standby ) /* no standby key found ? */
- return;
-
- /* print all non-standby ksk */
- for ( dkp = dkp_head; dkp; dkp = dkp->next )
- if ( dki_isksk (dkp) && dkp != standby )
- dki_prt_managedkey (dkp, stdout);
- }
- }
-}
-# endif
-#endif
-
-void zkt_list_trustedkeys (const dki_t *data)
-{
-
- /* print headline if list is not empty */
- if ( data && headerflag )
- printf ("trusted-keys {\n");
-
-#if defined(USE_TREE) && USE_TREE
- twalk (data, list_trustedkey);
-#else
- for ( dkp = data; dkp; dkp = dkp->next ) /* loop through list */
- if ( (dki_isksk (dkp) || zskflag) &&
- (labellist == NULL || isinlist (dkp->name, labellist)) )
- dki_prt_trustedkey (dkp, stdout);
-#endif
-
- /* print end of trusted-key section */
- if ( data && headerflag )
- printf ("};\n");
-}
-
-void zkt_list_managedkeys (const dki_t *data)
-{
-
- /* print headline if list is not empty */
- if ( data && headerflag )
- printf ("managed-keys {\n");
-
-#if defined(USE_TREE) && USE_TREE
- twalk (data, list_managedkey);
-#else
- for ( dkp = data; dkp; dkp = dkp->next ) /* loop through list */
- if ( (dki_isksk (dkp) || zskflag) &&
- (labellist == NULL || isinlist (dkp->name, labellist)) )
- dki_prt_managedkey (dkp, stdout);
-#endif
-
- /* print end of trusted-key section */
- if ( data && headerflag )
- printf ("};\n");
-}
-
-#if defined(USE_TREE) && USE_TREE
-static void list_dnskey (const dki_t **nodep, const VISIT which, int depth)
-{
- const dki_t *dkp;
- int ksk;
-
- if ( nodep == NULL )
- return;
-
- if ( which == INORDER || which == LEAF )
- for ( dkp = *nodep; dkp; dkp = dkp->next )
- {
- ksk = dki_isksk (dkp);
- if ( (ksk && !kskflag) || (!ksk && !zskflag) )
- continue;
-
- if ( labellist == NULL || isinlist (dkp->name, labellist) )
- {
- if ( headerflag )
- dki_prt_comment (dkp, stdout);
- dki_prt_dnskey (dkp, stdout);
- }
- }
-}
-#endif
-
-void zkt_list_dnskeys (const dki_t *data)
-{
-#if defined(USE_TREE) && USE_TREE
- twalk (data, list_dnskey);
-#else
- const dki_t *dkp;
- int ksk;
-
- for ( dkp = data; dkp; dkp = dkp->next )
- {
- ksk = dki_isksk (dkp);
- if ( (ksk && !kskflag) || (!ksk && !zskflag) )
- continue;
-
- if ( labellist == NULL || isinlist (dkp->name, labellist) )
- {
- if ( headerflag )
- dki_prt_comment (dkp, stdout);
- dki_prt_dnskey (dkp, stdout);
- }
- }
-#endif
-}
-
-#if defined(USE_TREE) && USE_TREE
-static void set_keylifetime (const dki_t **nodep, const VISIT which, int depth)
-{
- const dki_t *dkp;
- int ksk;
-
- if ( nodep == NULL )
- return;
-
- if ( which == INORDER || which == LEAF )
- for ( dkp = *nodep; dkp; dkp = dkp->next )
- {
- ksk = dki_isksk (dkp);
- if ( (ksk && !kskflag) || (!ksk && !zskflag) )
- continue;
-
- if ( labellist == NULL || isinlist (dkp->name, labellist) )
- dki_setlifetime ((dki_t *)dkp, lifetime);
- }
-}
-#endif
-
-void zkt_setkeylifetime (dki_t *data)
-{
-#if defined(USE_TREE) && USE_TREE
- twalk (data, set_keylifetime);
-#else
- dki_t *dkp;
- int ksk;
-
- for ( dkp = data; dkp; dkp = dkp->next )
- {
- ksk = dki_isksk (dkp);
- if ( (ksk && !kskflag) || (!ksk && !zskflag) )
- continue;
-
- if ( labellist == NULL || isinlist (dkp->name, labellist) )
- {
- dki_setlifetime (dkp, lifetime);
- }
- }
-#endif
-}
-
-
-#if defined(USE_TREE) && USE_TREE
-static const dki_t *searchresult;
-static int searchitem;
-static void tag_search (const dki_t **nodep, const VISIT which, int depth)
-{
- const dki_t *dkp;
-
- if ( nodep == NULL )
- return;
-
- if ( which == PREORDER || which == LEAF )
- for ( dkp = *nodep; dkp; dkp = dkp->next )
- {
- if ( dkp->tag == searchitem )
- {
- if ( searchresult == NULL )
- searchresult = dkp;
- else
- searchitem = 0;
- }
- }
-}
-#endif
-const dki_t *zkt_search (const dki_t *data, int searchtag, const char *keyname)
-{
- const dki_t *dkp = NULL;
-
-#if defined(USE_TREE) && USE_TREE
- if ( keyname == NULL || *keyname == '\0' )
- {
- searchresult = NULL;
- searchitem = searchtag;
- twalk (data, tag_search);
- if ( searchresult != NULL && searchitem == 0 )
- dkp = (void *)01;
- else
- dkp = searchresult;
- }
- else
- dkp = (dki_t*)dki_tsearch (data, searchtag, keyname);
-#else
- dkp = (dki_t*)dki_search (data, searchtag, keyname);
-#endif
- return dkp;
-}
-
diff --git a/contrib/zkt-1.1.3/zkt.h b/contrib/zkt-1.1.3/zkt.h
deleted file mode 100644
index 01460527..00000000
--- a/contrib/zkt-1.1.3/zkt.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*****************************************************************
-**
-** @(#) zkt.h (c) 2005 - 2008 Holger Zuleger hznet.de
-**
-** Copyright (c) 2005 - 2008, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-#ifndef ZKT_H
-# define ZKT_H
-
-extern const dki_t *zkt_search (const dki_t *data, int searchtag, const char *keyname);
-extern void zkt_list_keys (const dki_t *data);
-extern void zkt_list_trustedkeys (const dki_t *data);
-extern void zkt_list_managedkeys (const dki_t *data);
-extern void zkt_list_dnskeys (const dki_t *data);
-extern void zkt_setkeylifetime (dki_t *data);
-
-#endif
diff --git a/contrib/zkt-1.1.3/zone.c b/contrib/zkt-1.1.3/zone.c
deleted file mode 100644
index f45d7811..00000000
--- a/contrib/zkt-1.1.3/zone.c
+++ /dev/null
@@ -1,339 +0,0 @@
-/*****************************************************************
-**
-** @(#) zone.c (c) Mar 2005 Holger Zuleger hznet.de
-**
-** Copyright (c) Mar 2005, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-# include <stdio.h>
-# include <string.h>
-# include <stdlib.h>
-# include <sys/types.h>
-# include <sys/stat.h>
-# include <dirent.h>
-# include <assert.h>
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-# include "config_zkt.h"
-# include "debug.h"
-# include "domaincmp.h"
-# include "misc.h"
-# include "zconf.h"
-# include "dki.h"
-#define extern
-# include "zone.h"
-#undef extern
-
-/*****************************************************************
-** private (static) function declaration and definition
-*****************************************************************/
-static char zone_estr[255+1];
-
-/*****************************************************************
-** zone_alloc ()
-*****************************************************************/
-static zone_t *zone_alloc ()
-{
- zone_t *zp;
-
- if ( (zp = malloc (sizeof (zone_t))) )
- {
- memset (zp, 0, sizeof (zone_t));
- return zp;
- }
-
- snprintf (zone_estr, sizeof (zone_estr),
- "zone_alloc: Out of memory");
- return NULL;
-}
-
-/*****************************************************************
-** zone_cmp () return <0 | 0 | >0
-*****************************************************************/
-static int zone_cmp (const zone_t *a, const zone_t *b)
-{
- if ( a == NULL ) return -1;
- if ( b == NULL ) return 1;
-
- return domaincmp (a->zone, b->zone);
-}
-
-
-/*****************************************************************
-** public function definition
-*****************************************************************/
-
-/*****************************************************************
-** zone_free ()
-*****************************************************************/
-void zone_free (zone_t *zp)
-{
- assert (zp != NULL);
-
- if ( zp->zone ) free ((char *)zp->zone);
- if ( zp->dir ) free ((char *)zp->dir);
- if ( zp->file ) free ((char *)zp->file);
- if ( zp->sfile ) free ((char *)zp->sfile);
-#if 0
- /* TODO: actually there are some problems freeing the config :-( */
- if ( zp->conf ) free ((zconf_t *)zp->conf);
-#endif
- if ( zp->keys ) dki_freelist (&zp->keys);
- free (zp);
-}
-
-/*****************************************************************
-** zone_freelist ()
-*****************************************************************/
-void zone_freelist (zone_t **listp)
-{
- zone_t *curr;
- zone_t *next;
-
- assert (listp != NULL);
-
- curr = *listp;
- while ( curr )
- {
- next = curr->next;
- zone_free (curr);
- curr = next;
- }
- if ( *listp )
- *listp = NULL;
-}
-
-/*****************************************************************
-** zone_new ()
-** allocate memory for new zone structure and initialize it
-*****************************************************************/
-zone_t *zone_new (zone_t **zp, const char *zone, const char *dir, const char *file, const char *signed_ext, const zconf_t *cp)
-{
- char path[MAX_PATHSIZE+1];
- zone_t *new;
-
- assert (zp != NULL);
- assert (zone != NULL && *zone != '\0');
-
- dbg_val3 ("zone_new: (zp, zone: %s, dir: %s, file: %s, cp)\n", zone, dir, file);
- if ( dir == NULL || *dir == '\0' )
- dir = ".";
-
- if ( file == NULL || *file == '\0' )
- file = cp->zonefile;
- else
- { /* check if file contains a path */
- const char *p;
- if ( (p = strrchr (file, '/')) != NULL )
- {
- snprintf (path, sizeof (path), "%s/%.*s", dir, (int)(p-file), file);
- dir = path;
- file = p+1;
- }
- }
-
- if ( (new = zone_alloc ()) != NULL )
- {
- char *p;
-
- new->zone = domain_canonicdup (zone);
- new->dir = strdup (dir);
- new->file = strdup (file);
- /* check if file ends with ".signed" ? */
- if ( (p = strrchr (new->file, '.')) != NULL && strcmp (p, signed_ext) == 0 )
- {
- new->sfile = strdup (new->file);
- *p = '\0';
- }
- else
- {
- snprintf (path, sizeof (path), "%s%s", file, signed_ext);
- new->sfile = strdup (path);
- }
- new->conf = cp;
- new->keys = NULL;
- dki_readdir (new->dir, &new->keys, 0);
- new->next = NULL;
- }
-
- return zone_add (zp, new);
-}
-
-/*****************************************************************
-** zone_readdir ()
-*****************************************************************/
-int zone_readdir (const char *dir, const char *zone, const char *zfile, zone_t **listp, const zconf_t *conf, int dyn_zone)
-{
- char *p;
- char path[MAX_PATHSIZE+1];
- char *signed_ext = ".signed";
- zconf_t *localconf = NULL;
-
- assert (dir != NULL && *dir != '\0');
- assert (conf != NULL);
-
- if ( zone == NULL ) /* zone not given ? */
- {
- if ( (zone = strrchr (dir, '/')) ) /* try to extract zone name out of directory */
- zone++;
- else
- zone = dir;
- }
- if ( zone == NULL ) /* zone name still null ? */
- return 0;
-
- dbg_val4 ("zone_readdir: (dir: \"%s\", zone: \"%s\", zfile: \"%s\", zp, cp, dyn_zone = %d)\n",
- dir, zone, zfile ? zfile: "NULL", dyn_zone);
-
- if ( dyn_zone )
- signed_ext = ".dsigned";
-
- if ( zfile && (p = strrchr (zfile, '/')) ) /* check if zfile contains a directory */
- {
- char subdir[MAX_PATHSIZE+1];
-
- snprintf (subdir, sizeof (subdir), "%s/%.*s", dir, (int)(p - zfile), zfile);
- pathname (path, sizeof (path), subdir, LOCALCONF_FILE, NULL);
- }
- else
- pathname (path, sizeof (path), dir, LOCALCONF_FILE, NULL);
- dbg_val1 ("zone_readdir: check local config file %s\n", path);
- if ( fileexist (path) ) /* load local config file */
- {
- localconf = dupconfig (conf);
- conf = loadconfig (path, localconf);
- /* do not free localconf, because a ptr to it will be added to the zone by zone_new() */
- }
-
- if ( zfile == NULL )
- {
- zfile = conf->zonefile;
- pathname (path, sizeof (path), dir, zfile, signed_ext);
- }
- else
- {
- dbg_val2("zone_readdir: add %s to zonefile if not already there ? (%s)\n", signed_ext, zfile);
- if ( (p = strrchr (zfile, '.')) == NULL || strcmp (p, signed_ext) != 0 )
- pathname (path, sizeof (path), dir, zfile, signed_ext);
- else
- pathname (path, sizeof (path), dir, zfile, NULL);
- }
-
- dbg_val1("zone_readdir: fileexist (%s): ", path);
- if ( !fileexist (path) ) /* no .signed file found ? ... */
- {
- dbg_val0("no!\n");
- return 0; /* ... not a secure zone ! */
- }
- dbg_val0("yes!\n");
-
- dbg_val("zone_readdir: add zone (%s)\n", zone);
- zone_new (listp, zone, dir, zfile, signed_ext, conf);
-
- return 1;
-}
-
-
-/*****************************************************************
-** zone_geterrstr ()
-** return error string
-*****************************************************************/
-const char *zone_geterrstr ()
-{
- return zone_estr;
-}
-
-/*****************************************************************
-** zone_add ()
-*****************************************************************/
-zone_t *zone_add (zone_t **list, zone_t *new)
-{
- zone_t *curr;
- zone_t *last;
-
- if ( list == NULL )
- return NULL;
- if ( new == NULL )
- return *list;
-
- last = curr = *list;
- while ( curr && zone_cmp (curr, new) < 0 )
- {
- last = curr;
- curr = curr->next;
- }
-
- if ( curr == *list ) /* add node at the begining of the list */
- *list = new;
- else /* add node at end or between two nodes */
- last->next = new;
- new->next = curr;
-
- return new;
-}
-
-/*****************************************************************
-** zone_search ()
-*****************************************************************/
-const zone_t *zone_search (const zone_t *list, const char *zone)
-{
- if ( zone == NULL || *zone == '\0' )
- return NULL;
-
- while ( list && strcmp (zone, list->zone) != 0 )
- list = list->next;
-
- return list;
-}
-
-/*****************************************************************
-** zone_print ()
-*****************************************************************/
-int zone_print (const char *mesg, const zone_t *z)
-{
- dki_t *dkp;
-
- if ( !z )
- return 0;
- fprintf (stderr, "%s: zone\t %s\n", mesg, z->zone);
- fprintf (stderr, "%s: dir\t %s\n", mesg, z->dir);
- fprintf (stderr, "%s: file\t %s\n", mesg, z->file);
- fprintf (stderr, "%s: sfile\t %s\n", mesg, z->sfile);
-
- for ( dkp = z->keys; dkp; dkp = dkp->next )
- {
- dki_prt_comment (dkp, stderr);
- }
-
- return 1;
-}
diff --git a/contrib/zkt-1.1.3/zone.h b/contrib/zkt-1.1.3/zone.h
deleted file mode 100644
index e7857968..00000000
--- a/contrib/zkt-1.1.3/zone.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*****************************************************************
-**
-** @(#) zone.h -- Header file for zone info
-**
-** Copyright (c) Mar 2005, Holger Zuleger HZnet. All rights reserved.
-**
-** This software is open source.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** Redistributions of source code must retain the above copyright notice,
-** this list of conditions and the following disclaimer.
-**
-** Redistributions in binary form must reproduce the above copyright notice,
-** this list of conditions and the following disclaimer in the documentation
-** and/or other materials provided with the distribution.
-**
-** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
-** be used to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-** POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************/
-#ifndef ZONE_H
-# define ZONE_H
-
-# include <sys/types.h>
-# include <stdio.h>
-# include <time.h>
-# include "dki.h"
-
-/* all we have to know about a zone */
-typedef struct Zone {
- const char *zone; /* domain name or label */
- const char *dir; /* directory of zone data */
- const char *file; /* file name (zone.db) */
- const char *sfile; /* file name of secured zone (zone.db.signed) */
- const zconf_t *conf; /* ptr to config */ /* TODO: Should this be only a ptr to a local config ? */
- dki_t *keys; /* ptr to keylist */
- struct Zone *next; /* ptr to next entry in list */
-} zone_t;
-
-extern void zone_free (zone_t *zp);
-extern void zone_freelist (zone_t **listp);
-extern zone_t *zone_new (zone_t **zp, const char *zone, const char *dir, const char *file, const char *signed_ext, const zconf_t *cp);
-extern const char *zone_geterrstr ();
-extern zone_t *zone_add (zone_t **list, zone_t *new);
-extern const zone_t *zone_search (const zone_t *list, const char *name);
-extern int zone_readdir (const char *dir, const char *zone, const char *zfile, zone_t **listp, const zconf_t *conf, int dyn_zone);
-extern const char *zone_geterrstr (void);
-extern int zone_print (const char *mesg, const zone_t *z);
-
-#endif
diff --git a/doc/Makefile.in b/doc/Makefile.in
deleted file mode 100644
index fd3b9816..00000000
--- a/doc/Makefile.in
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (C) 2000, 2001, 2004-2007, 2012, 2015, 2016 Internet Systems Consortium, Inc. ("ISC")
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# This Makefile is a placeholder. It exists merely to make
-# sure that its directory gets created in the object directory
-# tree when doing a build using separate object directories.
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-top_srcdir = @top_srcdir@
-
-SUBDIRS = arm misc xsl doxygen tex
-TARGETS =
-
-@BIND9_MAKE_RULES@
diff --git a/doc/arm/Bv9ARM-book.xml b/doc/arm/Bv9ARM-book.xml
deleted file mode 100644
index 94c7af65..00000000
--- a/doc/arm/Bv9ARM-book.xml
+++ /dev/null
@@ -1,18437 +0,0 @@
-<!--
- - Copyright (C) 2000-2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
-<!-- Converted by db4-upgrade version 1.0 -->
-<book xmlns="http://docbook.org/ns/docbook" version="5.0">
- <info>
- <title>BIND 9 Administrator Reference Manual</title>
- <copyright>
- <year>2000</year>
- <year>2001</year>
- <year>2002</year>
- <year>2003</year>
- <year>2004</year>
- <year>2005</year>
- <year>2006</year>
- <year>2007</year>
- <year>2008</year>
- <year>2009</year>
- <year>2010</year>
- <year>2011</year>
- <year>2012</year>
- <year>2013</year>
- <year>2014</year>
- <year>2015</year>
- <holder>Internet Systems Consortium, Inc. ("ISC")</holder>
- </copyright>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="releaseinfo.xml"/>
- </info>
-
- <chapter xml:id="Bv9ARM.ch01"><info><title>Introduction</title></info>
-
- <para>
- The Internet Domain Name System (<acronym>DNS</acronym>)
- consists of the syntax
- to specify the names of entities in the Internet in a hierarchical
- manner, the rules used for delegating authority over names, and the
- system implementation that actually maps names to Internet
- addresses. <acronym>DNS</acronym> data is maintained in a
- group of distributed
- hierarchical databases.
- </para>
-
- <section xml:id="doc_scope"><info><title>Scope of Document</title></info>
-
- <para>
- The Berkeley Internet Name Domain
- (<acronym>BIND</acronym>) implements a
- domain name server for a number of operating systems. This
- document provides basic information about the installation and
- care of the Internet Systems Consortium (<acronym>ISC</acronym>)
- <acronym>BIND</acronym> version 9 software package for
- system administrators.
- </para>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pkgversion.xml"/>
- </section>
-
- <section xml:id="organization"><info><title>Organization of This Document</title></info>
-
- <para>
- In this document, <emphasis>Chapter 1</emphasis> introduces
- the basic <acronym>DNS</acronym> and <acronym>BIND</acronym> concepts. <emphasis>Chapter 2</emphasis>
- describes resource requirements for running <acronym>BIND</acronym> in various
- environments. Information in <emphasis>Chapter 3</emphasis> is
- <emphasis>task-oriented</emphasis> in its presentation and is
- organized functionally, to aid in the process of installing the
- <acronym>BIND</acronym> 9 software. The task-oriented
- section is followed by
- <emphasis>Chapter 4</emphasis>, which contains more advanced
- concepts that the system administrator may need for implementing
- certain options. <emphasis>Chapter 5</emphasis>
- describes the <acronym>BIND</acronym> 9 lightweight
- resolver. The contents of <emphasis>Chapter 6</emphasis> are
- organized as in a reference manual to aid in the ongoing
- maintenance of the software. <emphasis>Chapter 7</emphasis> addresses
- security considerations, and
- <emphasis>Chapter 8</emphasis> contains troubleshooting help. The
- main body of the document is followed by several
- <emphasis>appendices</emphasis> which contain useful reference
- information, such as a <emphasis>bibliography</emphasis> and
- historic information related to <acronym>BIND</acronym>
- and the Domain Name
- System.
- </para>
- </section>
- <section xml:id="conventions"><info><title>Conventions Used in This Document</title></info>
-
- <para>
- In this document, we use the following general typographic
- conventions:
- </para>
-
- <informaltable>
- <tgroup cols="2">
- <colspec colname="1" colnum="1" colwidth="3.000in"/>
- <colspec colname="2" colnum="2" colwidth="2.625in"/>
- <tbody>
- <row>
- <entry colname="1">
- <para>
- <emphasis>To describe:</emphasis>
- </para>
- </entry>
- <entry colname="2">
- <para>
- <emphasis>We use the style:</emphasis>
- </para>
- </entry>
- </row>
- <row>
- <entry colname="1">
- <para>
- a pathname, filename, URL, hostname,
- mailing list name, or new term or concept
- </para>
- </entry>
- <entry colname="2">
- <para>
- <filename>Fixed width</filename>
- </para>
- </entry>
- </row>
- <row>
- <entry colname="1">
- <para>
- literal user
- input
- </para>
- </entry>
- <entry colname="2">
- <para>
- <userinput>Fixed Width Bold</userinput>
- </para>
- </entry>
- </row>
- <row>
- <entry colname="1">
- <para>
- program output
- </para>
- </entry>
- <entry colname="2">
- <para>
- <computeroutput>Fixed Width</computeroutput>
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>
- The following conventions are used in descriptions of the
- <acronym>BIND</acronym> configuration file:<informaltable colsep="0" frame="all" rowsep="0">
- <tgroup cols="2" colsep="0" rowsep="0" tgroupstyle="2Level-table">
- <colspec colname="1" colnum="1" colsep="0" colwidth="3.000in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="2.625in"/>
- <tbody>
- <row rowsep="0">
- <entry colname="1" colsep="1" rowsep="1">
- <para>
- <emphasis>To describe:</emphasis>
- </para>
- </entry>
- <entry colname="2" rowsep="1">
- <para>
- <emphasis>We use the style:</emphasis>
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1" colsep="1" rowsep="1">
- <para>
- keywords
- </para>
- </entry>
- <entry colname="2" rowsep="1">
- <para>
- <literal>Fixed Width</literal>
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1" colsep="1" rowsep="1">
- <para>
- variables
- </para>
- </entry>
- <entry colname="2" rowsep="1">
- <para>
- <varname>Fixed Width</varname>
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1" colsep="1">
- <para>
- Optional input
- </para>
- </entry>
- <entry colname="2">
- <para>
- <optional>Text is enclosed in square brackets</optional>
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </para>
- </section>
- <section xml:id="dns_overview"><info><title>The Domain Name System (<acronym>DNS</acronym>)</title></info>
-
- <para>
- The purpose of this document is to explain the installation
- and upkeep of the <acronym>BIND</acronym> (Berkeley Internet
- Name Domain) software package, and we
- begin by reviewing the fundamentals of the Domain Name System
- (<acronym>DNS</acronym>) as they relate to <acronym>BIND</acronym>.
- </para>
-
- <section xml:id="dns_fundamentals"><info><title>DNS Fundamentals</title></info>
-
- <para>
- The Domain Name System (DNS) is a hierarchical, distributed
- database. It stores information for mapping Internet host names to
- IP
- addresses and vice versa, mail routing information, and other data
- used by Internet applications.
- </para>
-
- <para>
- Clients look up information in the DNS by calling a
- <emphasis>resolver</emphasis> library, which sends queries to one or
- more <emphasis>name servers</emphasis> and interprets the responses.
- The <acronym>BIND</acronym> 9 software distribution
- contains a
- name server, <command>named</command>, and a resolver
- library, <command>liblwres</command>. The older
- <command>libbind</command> resolver library is also available
- from ISC as a separate download.
- </para>
-
- </section>
- <section xml:id="domain_names"><info><title>Domains and Domain Names</title></info>
-
- <para>
- The data stored in the DNS is identified by <emphasis>domain names</emphasis> that are organized as a tree according to
- organizational or administrative boundaries. Each node of the tree,
- called a <emphasis>domain</emphasis>, is given a label. The domain
- name of the
- node is the concatenation of all the labels on the path from the
- node to the <emphasis>root</emphasis> node. This is represented
- in written form as a string of labels listed from right to left and
- separated by dots. A label need only be unique within its parent
- domain.
- </para>
-
- <para>
- For example, a domain name for a host at the
- company <emphasis>Example, Inc.</emphasis> could be
- <literal>ourhost.example.com</literal>,
- where <literal>com</literal> is the
- top level domain to which
- <literal>ourhost.example.com</literal> belongs,
- <literal>example</literal> is
- a subdomain of <literal>com</literal>, and
- <literal>ourhost</literal> is the
- name of the host.
- </para>
-
- <para>
- For administrative purposes, the name space is partitioned into
- areas called <emphasis>zones</emphasis>, each starting at a node and
- extending down to the leaf nodes or to nodes where other zones
- start.
- The data for each zone is stored in a <emphasis>name server</emphasis>, which answers queries about the zone using the
- <emphasis>DNS protocol</emphasis>.
- </para>
-
- <para>
- The data associated with each domain name is stored in the
- form of <emphasis>resource records</emphasis> (<acronym>RR</acronym>s).
- Some of the supported resource record types are described in
- <xref linkend="types_of_resource_records_and_when_to_use_them"/>.
- </para>
-
- <para>
- For more detailed information about the design of the DNS and
- the DNS protocol, please refer to the standards documents listed in
- <xref linkend="rfcs"/>.
- </para>
- </section>
-
- <section xml:id="zones"><info><title>Zones</title></info>
-
- <para>
- To properly operate a name server, it is important to understand
- the difference between a <emphasis>zone</emphasis>
- and a <emphasis>domain</emphasis>.
- </para>
-
- <para>
- As stated previously, a zone is a point of delegation in
- the <acronym>DNS</acronym> tree. A zone consists of
- those contiguous parts of the domain
- tree for which a name server has complete information and over which
- it has authority. It contains all domain names from a certain point
- downward in the domain tree except those which are delegated to
- other zones. A delegation point is marked by one or more
- <emphasis>NS records</emphasis> in the
- parent zone, which should be matched by equivalent NS records at
- the root of the delegated zone.
- </para>
-
- <para>
- For instance, consider the <literal>example.com</literal>
- domain which includes names
- such as <literal>host.aaa.example.com</literal> and
- <literal>host.bbb.example.com</literal> even though
- the <literal>example.com</literal> zone includes
- only delegations for the <literal>aaa.example.com</literal> and
- <literal>bbb.example.com</literal> zones. A zone can
- map
- exactly to a single domain, but could also include only part of a
- domain, the rest of which could be delegated to other
- name servers. Every name in the <acronym>DNS</acronym>
- tree is a
- <emphasis>domain</emphasis>, even if it is
- <emphasis>terminal</emphasis>, that is, has no
- <emphasis>subdomains</emphasis>. Every subdomain is a domain and
- every domain except the root is also a subdomain. The terminology is
- not intuitive and we suggest that you read RFCs 1033, 1034 and 1035
- to
- gain a complete understanding of this difficult and subtle
- topic.
- </para>
-
- <para>
- Though <acronym>BIND</acronym> is called a "domain name
- server",
- it deals primarily in terms of zones. The master and slave
- declarations in the <filename>named.conf</filename> file
- specify
- zones, not domains. When you ask some other site if it is willing to
- be a slave server for your <emphasis>domain</emphasis>, you are
- actually asking for slave service for some collection of zones.
- </para>
- </section>
-
- <section xml:id="auth_servers"><info><title>Authoritative Name Servers</title></info>
-
- <para>
- Each zone is served by at least
- one <emphasis>authoritative name server</emphasis>,
- which contains the complete data for the zone.
- To make the DNS tolerant of server and network failures,
- most zones have two or more authoritative servers, on
- different networks.
- </para>
-
- <para>
- Responses from authoritative servers have the "authoritative
- answer" (AA) bit set in the response packets. This makes them
- easy to identify when debugging DNS configurations using tools like
- <command>dig</command> (<xref linkend="diagnostic_tools"/>).
- </para>
-
- <section xml:id="primary_master"><info><title>The Primary Master</title></info>
-
- <para>
- The authoritative server where the master copy of the zone
- data is maintained is called the
- <emphasis>primary master</emphasis> server, or simply the
- <emphasis>primary</emphasis>. Typically it loads the zone
- contents from some local file edited by humans or perhaps
- generated mechanically from some other local file which is
- edited by humans. This file is called the
- <emphasis>zone file</emphasis> or
- <emphasis>master file</emphasis>.
- </para>
-
- <para>
- In some cases, however, the master file may not be edited
- by humans at all, but may instead be the result of
- <emphasis>dynamic update</emphasis> operations.
- </para>
- </section>
-
- <section xml:id="slave_server"><info><title>Slave Servers</title></info>
-
- <para>
- The other authoritative servers, the <emphasis>slave</emphasis>
- servers (also known as <emphasis>secondary</emphasis> servers)
- load
- the zone contents from another server using a replication process
- known as a <emphasis>zone transfer</emphasis>. Typically the data
- are
- transferred directly from the primary master, but it is also
- possible
- to transfer it from another slave. In other words, a slave server
- may itself act as a master to a subordinate slave server.
- </para>
- </section>
-
- <section xml:id="stealth_server"><info><title>Stealth Servers</title></info>
-
- <para>
- Usually all of the zone's authoritative servers are listed in
- NS records in the parent zone. These NS records constitute
- a <emphasis>delegation</emphasis> of the zone from the parent.
- The authoritative servers are also listed in the zone file itself,
- at the <emphasis>top level</emphasis> or <emphasis>apex</emphasis>
- of the zone. You can list servers in the zone's top-level NS
- records that are not in the parent's NS delegation, but you cannot
- list servers in the parent's delegation that are not present at
- the zone's top level.
- </para>
-
- <para>
- A <emphasis>stealth server</emphasis> is a server that is
- authoritative for a zone but is not listed in that zone's NS
- records. Stealth servers can be used for keeping a local copy of
- a
- zone to speed up access to the zone's records or to make sure that
- the
- zone is available even if all the "official" servers for the zone
- are
- inaccessible.
- </para>
-
- <para>
- A configuration where the primary master server itself is a
- stealth server is often referred to as a "hidden primary"
- configuration. One use for this configuration is when the primary
- master
- is behind a firewall and therefore unable to communicate directly
- with the outside world.
- </para>
-
- </section>
-
- </section>
- <section xml:id="cache_servers"><info><title>Caching Name Servers</title></info>
-
- <!--
- - Terminology here is inconsistent. Probably ought to
- - convert to using "recursive name server" everywhere
- - with just a note about "caching" terminology.
- -->
-
- <para>
- The resolver libraries provided by most operating systems are
- <emphasis>stub resolvers</emphasis>, meaning that they are not
- capable of
- performing the full DNS resolution process by themselves by talking
- directly to the authoritative servers. Instead, they rely on a
- local
- name server to perform the resolution on their behalf. Such a
- server
- is called a <emphasis>recursive</emphasis> name server; it performs
- <emphasis>recursive lookups</emphasis> for local clients.
- </para>
-
- <para>
- To improve performance, recursive servers cache the results of
- the lookups they perform. Since the processes of recursion and
- caching are intimately connected, the terms
- <emphasis>recursive server</emphasis> and
- <emphasis>caching server</emphasis> are often used synonymously.
- </para>
-
- <para>
- The length of time for which a record may be retained in
- the cache of a caching name server is controlled by the
- Time To Live (TTL) field associated with each resource record.
- </para>
-
- <section xml:id="forwarder"><info><title>Forwarding</title></info>
-
- <para>
- Even a caching name server does not necessarily perform
- the complete recursive lookup itself. Instead, it can
- <emphasis>forward</emphasis> some or all of the queries
- that it cannot satisfy from its cache to another caching name
- server,
- commonly referred to as a <emphasis>forwarder</emphasis>.
- </para>
-
- <para>
- There may be one or more forwarders,
- and they are queried in turn until the list is exhausted or an
- answer
- is found. Forwarders are typically used when you do not
- wish all the servers at a given site to interact directly with the
- rest of
- the Internet servers. A typical scenario would involve a number
- of internal <acronym>DNS</acronym> servers and an
- Internet firewall. Servers unable
- to pass packets through the firewall would forward to the server
- that can do it, and that server would query the Internet <acronym>DNS</acronym> servers
- on the internal server's behalf.
- </para>
- </section>
-
- </section>
-
- <section xml:id="multi_role"><info><title>Name Servers in Multiple Roles</title></info>
-
- <para>
- The <acronym>BIND</acronym> name server can
- simultaneously act as
- a master for some zones, a slave for other zones, and as a caching
- (recursive) server for a set of local clients.
- </para>
-
- <para>
- However, since the functions of authoritative name service
- and caching/recursive name service are logically separate, it is
- often advantageous to run them on separate server machines.
-
- A server that only provides authoritative name service
- (an <emphasis>authoritative-only</emphasis> server) can run with
- recursion disabled, improving reliability and security.
-
- A server that is not authoritative for any zones and only provides
- recursive service to local
- clients (a <emphasis>caching-only</emphasis> server)
- does not need to be reachable from the Internet at large and can
- be placed inside a firewall.
- </para>
-
- </section>
- </section>
-
- </chapter>
-
- <chapter xml:id="Bv9ARM.ch02"><info><title><acronym>BIND</acronym> Resource Requirements</title></info>
-
- <section xml:id="hw_req"><info><title>Hardware requirements</title></info>
- <para>
- <acronym>DNS</acronym> hardware requirements have
- traditionally been quite modest.
- For many installations, servers that have been pensioned off from
- active duty have performed admirably as <acronym>DNS</acronym> servers.
- </para>
- <para>
- The DNSSEC features of <acronym>BIND</acronym> 9
- may prove to be quite
- CPU intensive however, so organizations that make heavy use of these
- features may wish to consider larger systems for these applications.
- <acronym>BIND</acronym> 9 is fully multithreaded, allowing
- full utilization of
- multiprocessor systems for installations that need it.
- </para>
- </section>
- <section xml:id="cpu_req"><info><title>CPU Requirements</title></info>
- <para>
- CPU requirements for <acronym>BIND</acronym> 9 range from
- i486-class machines
- for serving of static zones without caching, to enterprise-class
- machines if you intend to process many dynamic updates and DNSSEC
- signed zones, serving many thousands of queries per second.
- </para>
- </section>
- <section xml:id="mem_req"><info><title>Memory Requirements</title></info>
- <para>
- The memory of the server has to be large enough to fit the
- cache and zones loaded off disk. The <command>max-cache-size</command>
- option can be used to limit the amount of memory used by the cache,
- at the expense of reducing cache hit rates and causing more <acronym>DNS</acronym>
- traffic.
- Additionally, if additional section caching
- (<xref linkend="acache"/>) is enabled,
- the <command>max-acache-size</command> option can be used to
- limit the amount
- of memory used by the mechanism.
- It is still good practice to have enough memory to load
- all zone and cache data into memory — unfortunately, the best
- way
- to determine this for a given installation is to watch the name server
- in operation. After a few weeks the server process should reach
- a relatively stable size where entries are expiring from the cache as
- fast as they are being inserted.
- </para>
- <!--
- - Add something here about leaving overhead for attacks?
- - How much overhead? Percentage?
- -->
- </section>
-
- <section xml:id="intensive_env"><info><title>Name Server Intensive Environment Issues</title></info>
-
- <para>
- For name server intensive environments, there are two alternative
- configurations that may be used. The first is where clients and
- any second-level internal name servers query a main name server, which
- has enough memory to build a large cache. This approach minimizes
- the bandwidth used by external name lookups. The second alternative
- is to set up second-level internal name servers to make queries
- independently.
- In this configuration, none of the individual machines needs to
- have as much memory or CPU power as in the first alternative, but
- this has the disadvantage of making many more external queries,
- as none of the name servers share their cached data.
- </para>
- </section>
-
- <section xml:id="supported_os"><info><title>Supported Operating Systems</title></info>
-
- <para>
- ISC <acronym>BIND</acronym> 9 compiles and runs on a large
- number
- of Unix-like operating systems and on
- Microsoft Windows Server 2003 and 2008, and Windows XP and Vista.
- For an up-to-date
- list of supported systems, see the README file in the top level
- directory
- of the BIND 9 source distribution.
- </para>
- </section>
- </chapter>
-
- <chapter xml:id="Bv9ARM.ch03"><info><title>Name Server Configuration</title></info>
-
- <para>
- In this chapter we provide some suggested configurations along
- with guidelines for their use. We suggest reasonable values for
- certain option settings.
- </para>
-
- <section xml:id="sample_configuration"><info><title>Sample Configurations</title></info>
-
- <section xml:id="cache_only_sample"><info><title>A Caching-only Name Server</title></info>
-
- <para>
- The following sample configuration is appropriate for a caching-only
- name server for use by clients internal to a corporation. All
- queries
- from outside clients are refused using the <command>allow-query</command>
- option. Alternatively, the same effect could be achieved using
- suitable
- firewall rules.
- </para>
-
-<programlisting>
-// Two corporate subnets we wish to allow queries from.
-acl corpnets { 192.168.4.0/24; 192.168.7.0/24; };
-options {
- // Working directory
- directory "/etc/namedb";
-
- allow-query { corpnets; };
-};
-// Provide a reverse mapping for the loopback
-// address 127.0.0.1
-zone "0.0.127.in-addr.arpa" {
- type master;
- file "localhost.rev";
- notify no;
-};
-</programlisting>
-
- </section>
-
- <section xml:id="auth_only_sample"><info><title>An Authoritative-only Name Server</title></info>
-
- <para>
- This sample configuration is for an authoritative-only server
- that is the master server for "<filename>example.com</filename>"
- and a slave for the subdomain "<filename>eng.example.com</filename>".
- </para>
-
-<programlisting>
-options {
- // Working directory
- directory "/etc/namedb";
- // Do not allow access to cache
- allow-query-cache { none; };
- // This is the default
- allow-query { any; };
- // Do not provide recursive service
- recursion no;
-};
-
-// Provide a reverse mapping for the loopback
-// address 127.0.0.1
-zone "0.0.127.in-addr.arpa" {
- type master;
- file "localhost.rev";
- notify no;
-};
-// We are the master server for example.com
-zone "example.com" {
- type master;
- file "example.com.db";
- // IP addresses of slave servers allowed to
- // transfer example.com
- allow-transfer {
- 192.168.4.14;
- 192.168.5.53;
- };
-};
-// We are a slave server for eng.example.com
-zone "eng.example.com" {
- type slave;
- file "eng.example.com.bk";
- // IP address of eng.example.com master server
- masters { 192.168.4.12; };
-};
-</programlisting>
-
- </section>
- </section>
-
- <section xml:id="load_balancing"><info><title>Load Balancing</title></info>
-
- <!--
- - Add explanation of why load balancing is fragile at best
- - and completely pointless in the general case.
- -->
-
- <para>
- A primitive form of load balancing can be achieved in
- the <acronym>DNS</acronym> by using multiple records
- (such as multiple A records) for one name.
- </para>
-
- <para>
- For example, if you have three WWW servers with network addresses
- of 10.0.0.1, 10.0.0.2 and 10.0.0.3, a set of records such as the
- following means that clients will connect to each machine one third
- of the time:
- </para>
-
- <informaltable colsep="0" rowsep="0">
- <tgroup cols="5" colsep="0" rowsep="0" tgroupstyle="2Level-table">
- <colspec colname="1" colnum="1" colsep="0" colwidth="0.875in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="0.500in"/>
- <colspec colname="3" colnum="3" colsep="0" colwidth="0.750in"/>
- <colspec colname="4" colnum="4" colsep="0" colwidth="0.750in"/>
- <colspec colname="5" colnum="5" colsep="0" colwidth="2.028in"/>
- <tbody>
- <row rowsep="0">
- <entry colname="1">
- <para>
- Name
- </para>
- </entry>
- <entry colname="2">
- <para>
- TTL
- </para>
- </entry>
- <entry colname="3">
- <para>
- CLASS
- </para>
- </entry>
- <entry colname="4">
- <para>
- TYPE
- </para>
- </entry>
- <entry colname="5">
- <para>
- Resource Record (RR) Data
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <literal>www</literal>
- </para>
- </entry>
- <entry colname="2">
- <para>
- <literal>600</literal>
- </para>
- </entry>
- <entry colname="3">
- <para>
- <literal>IN</literal>
- </para>
- </entry>
- <entry colname="4">
- <para>
- <literal>A</literal>
- </para>
- </entry>
- <entry colname="5">
- <para>
- <literal>10.0.0.1</literal>
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para/>
- </entry>
- <entry colname="2">
- <para>
- <literal>600</literal>
- </para>
- </entry>
- <entry colname="3">
- <para>
- <literal>IN</literal>
- </para>
- </entry>
- <entry colname="4">
- <para>
- <literal>A</literal>
- </para>
- </entry>
- <entry colname="5">
- <para>
- <literal>10.0.0.2</literal>
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para/>
- </entry>
- <entry colname="2">
- <para>
- <literal>600</literal>
- </para>
- </entry>
- <entry colname="3">
- <para>
- <literal>IN</literal>
- </para>
- </entry>
- <entry colname="4">
- <para>
- <literal>A</literal>
- </para>
- </entry>
- <entry colname="5">
- <para>
- <literal>10.0.0.3</literal>
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- <para>
- When a resolver queries for these records, <acronym>BIND</acronym> will rotate
- them and respond to the query with the records in a different
- order. In the example above, clients will randomly receive
- records in the order 1, 2, 3; 2, 3, 1; and 3, 1, 2. Most clients
- will use the first record returned and discard the rest.
- </para>
- <para>
- For more detail on ordering responses, check the
- <command>rrset-order</command> sub-statement in the
- <command>options</command> statement, see
- <xref endterm="rrset_ordering_title" linkend="rrset_ordering"/>.
- </para>
-
- </section>
-
- <section xml:id="ns_operations"><info><title>Name Server Operations</title></info>
-
- <section xml:id="tools"><info><title>Tools for Use With the Name Server Daemon</title></info>
- <para>
- This section describes several indispensable diagnostic,
- administrative and monitoring tools available to the system
- administrator for controlling and debugging the name server
- daemon.
- </para>
- <section xml:id="diagnostic_tools"><info><title>Diagnostic Tools</title></info>
- <para>
- The <command>dig</command>, <command>host</command>, and
- <command>nslookup</command> programs are all command
- line tools
- for manually querying name servers. They differ in style and
- output format.
- </para>
-
- <variablelist>
- <varlistentry>
- <term xml:id="dig"><command>dig</command></term>
- <listitem>
- <para>
- The domain information groper (<command>dig</command>)
- is the most versatile and complete of these lookup tools.
- It has two modes: simple interactive
- mode for a single query, and batch mode which executes a
- query for
- each in a list of several query lines. All query options are
- accessible
- from the command line.
- </para>
- <cmdsynopsis label="Usage" sepchar=" ">
- <command>dig</command>
- <arg choice="opt" rep="norepeat">@<replaceable>server</replaceable></arg>
- <arg choice="plain" rep="norepeat"><replaceable>domain</replaceable></arg>
- <arg choice="opt" rep="norepeat"><replaceable>query-type</replaceable></arg>
- <arg choice="opt" rep="norepeat"><replaceable>query-class</replaceable></arg>
- <arg choice="opt" rep="norepeat">+<replaceable>query-option</replaceable></arg>
- <arg choice="opt" rep="norepeat">-<replaceable>dig-option</replaceable></arg>
- <arg choice="opt" rep="norepeat">%<replaceable>comment</replaceable></arg>
- </cmdsynopsis>
- <para>
- The usual simple use of <command>dig</command> will take the form
- </para>
- <simpara>
- <command>dig @server domain query-type query-class</command>
- </simpara>
- <para>
- For more information and a list of available commands and
- options, see the <command>dig</command> man
- page.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>host</command></term>
- <listitem>
- <para>
- The <command>host</command> utility emphasizes
- simplicity
- and ease of use. By default, it converts
- between host names and Internet addresses, but its
- functionality
- can be extended with the use of options.
- </para>
- <cmdsynopsis label="Usage" sepchar=" ">
- <command>host</command>
- <arg choice="opt" rep="norepeat">-aCdlnrsTwv</arg>
- <arg choice="opt" rep="norepeat">-c <replaceable>class</replaceable></arg>
- <arg choice="opt" rep="norepeat">-N <replaceable>ndots</replaceable></arg>
- <arg choice="opt" rep="norepeat">-t <replaceable>type</replaceable></arg>
- <arg choice="opt" rep="norepeat">-W <replaceable>timeout</replaceable></arg>
- <arg choice="opt" rep="norepeat">-R <replaceable>retries</replaceable></arg>
- <arg choice="opt" rep="norepeat">-m <replaceable>flag</replaceable></arg>
- <arg choice="opt" rep="norepeat">-4</arg>
- <arg choice="opt" rep="norepeat">-6</arg>
- <arg choice="plain" rep="norepeat"><replaceable>hostname</replaceable></arg>
- <arg choice="opt" rep="norepeat"><replaceable>server</replaceable></arg>
- </cmdsynopsis>
- <para>
- For more information and a list of available commands and
- options, see the <command>host</command> man
- page.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>nslookup</command></term>
- <listitem>
- <para><command>nslookup</command>
- has two modes: interactive and
- non-interactive. Interactive mode allows the user to
- query name servers for information about various
- hosts and domains or to print a list of hosts in a
- domain. Non-interactive mode is used to print just
- the name and requested information for a host or
- domain.
- </para>
- <cmdsynopsis label="Usage" sepchar=" ">
- <command>nslookup</command>
- <arg rep="repeat" choice="opt">-option</arg>
- <group choice="opt" rep="norepeat">
- <arg choice="opt" rep="norepeat"><replaceable>host-to-find</replaceable></arg>
- <arg choice="opt" rep="norepeat">- <arg choice="opt" rep="norepeat">server</arg></arg>
- </group>
- </cmdsynopsis>
- <para>
- Interactive mode is entered when no arguments are given (the
- default name server will be used) or when the first argument
- is a
- hyphen (`-') and the second argument is the host name or
- Internet address
- of a name server.
- </para>
- <para>
- Non-interactive mode is used when the name or Internet
- address
- of the host to be looked up is given as the first argument.
- The
- optional second argument specifies the host name or address
- of a name server.
- </para>
- <para>
- Due to its arcane user interface and frequently inconsistent
- behavior, we do not recommend the use of <command>nslookup</command>.
- Use <command>dig</command> instead.
- </para>
- </listitem>
-
- </varlistentry>
- </variablelist>
- </section>
-
- <section xml:id="admin_tools"><info><title>Administrative Tools</title></info>
- <para>
- Administrative tools play an integral part in the management
- of a server.
- </para>
- <variablelist>
- <varlistentry xml:id="named-checkconf" xreflabel="Named Configuration Checking application">
-
- <term><command>named-checkconf</command></term>
- <listitem>
- <para>
- The <command>named-checkconf</command> program
- checks the syntax of a <filename>named.conf</filename> file.
- </para>
- <cmdsynopsis label="Usage" sepchar=" ">
- <command>named-checkconf</command>
- <arg choice="opt" rep="norepeat">-jvz</arg>
- <arg choice="opt" rep="norepeat">-t <replaceable>directory</replaceable></arg>
- <arg choice="opt" rep="norepeat"><replaceable>filename</replaceable></arg>
- </cmdsynopsis>
- </listitem>
- </varlistentry>
- <varlistentry xml:id="named-checkzone" xreflabel="Zone Checking application">
-
- <term><command>named-checkzone</command></term>
- <listitem>
- <para>
- The <command>named-checkzone</command> program
- checks a master file for
- syntax and consistency.
- </para>
- <cmdsynopsis label="Usage" sepchar=" ">
- <command>named-checkzone</command>
- <arg choice="opt" rep="norepeat">-djqvD</arg>
- <arg choice="opt" rep="norepeat">-c <replaceable>class</replaceable></arg>
- <arg choice="opt" rep="norepeat">-o <replaceable>output</replaceable></arg>
- <arg choice="opt" rep="norepeat">-t <replaceable>directory</replaceable></arg>
- <arg choice="opt" rep="norepeat">-w <replaceable>directory</replaceable></arg>
- <arg choice="opt" rep="norepeat">-k <replaceable>(ignore|warn|fail)</replaceable></arg>
- <arg choice="opt" rep="norepeat">-n <replaceable>(ignore|warn|fail)</replaceable></arg>
- <arg choice="opt" rep="norepeat">-W <replaceable>(ignore|warn)</replaceable></arg>
- <arg choice="plain" rep="norepeat"><replaceable>zone</replaceable></arg>
- <arg choice="opt" rep="norepeat"><replaceable>filename</replaceable></arg>
- </cmdsynopsis>
- </listitem>
- </varlistentry>
- <varlistentry xml:id="named-compilezone" xreflabel="Zone Compilation application">
- <term><command>named-compilezone</command></term>
- <listitem>
- <para>
- Similar to <command>named-checkzone,</command> but
- it always dumps the zone content to a specified file
- (typically in a different format).
- </para>
- </listitem>
- </varlistentry>
- <varlistentry xml:id="rndc" xreflabel="Remote Name Daemon Control application">
-
- <term><command>rndc</command></term>
- <listitem>
- <para>
- The remote name daemon control
- (<command>rndc</command>) program allows the
- system
- administrator to control the operation of a name server.
- Since <acronym>BIND</acronym> 9.2, <command>rndc</command>
- supports all the commands of the BIND 8 <command>ndc</command>
- utility except <command>ndc start</command> and
- <command>ndc restart</command>, which were also
- not supported in <command>ndc</command>'s
- channel mode.
- If you run <command>rndc</command> without any
- options
- it will display a usage message as follows:
- </para>
- <cmdsynopsis label="Usage" sepchar=" ">
- <command>rndc</command>
- <arg choice="opt" rep="norepeat">-c <replaceable>config</replaceable></arg>
- <arg choice="opt" rep="norepeat">-s <replaceable>server</replaceable></arg>
- <arg choice="opt" rep="norepeat">-p <replaceable>port</replaceable></arg>
- <arg choice="opt" rep="norepeat">-y <replaceable>key</replaceable></arg>
- <arg choice="plain" rep="norepeat"><replaceable>command</replaceable></arg>
- <arg rep="repeat" choice="opt"><replaceable>command</replaceable></arg>
- </cmdsynopsis>
-
- <para>See <xref linkend="man.rndc"/> for details of
- the available <command>rndc</command> commands.
- </para>
-
- <para>
- <command>rndc</command> requires a configuration file,
- since all
- communication with the server is authenticated with
- digital signatures that rely on a shared secret, and
- there is no way to provide that secret other than with a
- configuration file. The default location for the
- <command>rndc</command> configuration file is
- <filename>/etc/rndc.conf</filename>, but an
- alternate
- location can be specified with the <option>-c</option>
- option. If the configuration file is not found,
- <command>rndc</command> will also look in
- <filename>/etc/rndc.key</filename> (or whatever
- <varname>sysconfdir</varname> was defined when
- the <acronym>BIND</acronym> build was
- configured).
- The <filename>rndc.key</filename> file is
- generated by
- running <command>rndc-confgen -a</command> as
- described in
- <xref linkend="controls_statement_definition_and_usage"/>.
- </para>
-
- <para>
- The format of the configuration file is similar to
- that of <filename>named.conf</filename>, but
- limited to
- only four statements, the <command>options</command>,
- <command>key</command>, <command>server</command> and
- <command>include</command>
- statements. These statements are what associate the
- secret keys to the servers with which they are meant to
- be shared. The order of statements is not
- significant.
- </para>
-
- <para>
- The <command>options</command> statement has
- three clauses:
- <command>default-server</command>, <command>default-key</command>,
- and <command>default-port</command>.
- <command>default-server</command> takes a
- host name or address argument and represents the server
- that will
- be contacted if no <option>-s</option>
- option is provided on the command line.
- <command>default-key</command> takes
- the name of a key as its argument, as defined by a <command>key</command> statement.
- <command>default-port</command> specifies the
- port to which
- <command>rndc</command> should connect if no
- port is given on the command line or in a
- <command>server</command> statement.
- </para>
-
- <para>
- The <command>key</command> statement defines a
- key to be used
- by <command>rndc</command> when authenticating
- with
- <command>named</command>. Its syntax is
- identical to the
- <command>key</command> statement in <filename>named.conf</filename>.
- The keyword <userinput>key</userinput> is
- followed by a key name, which must be a valid
- domain name, though it need not actually be hierarchical;
- thus,
- a string like "<userinput>rndc_key</userinput>" is a valid
- name.
- The <command>key</command> statement has two
- clauses:
- <command>algorithm</command> and <command>secret</command>.
- While the configuration parser will accept any string as the
- argument
- to algorithm, currently only the strings
- "<userinput>hmac-md5</userinput>",
- "<userinput>hmac-sha1</userinput>",
- "<userinput>hmac-sha224</userinput>",
- "<userinput>hmac-sha256</userinput>",
- "<userinput>hmac-sha384</userinput>"
- and "<userinput>hmac-sha512</userinput>"
- have any meaning. The secret is a base-64 encoded string
- as specified in RFC 3548.
- </para>
-
- <para>
- The <command>server</command> statement
- associates a key
- defined using the <command>key</command>
- statement with a server.
- The keyword <userinput>server</userinput> is followed by a
- host name or address. The <command>server</command> statement
- has two clauses: <command>key</command> and <command>port</command>.
- The <command>key</command> clause specifies the
- name of the key
- to be used when communicating with this server, and the
- <command>port</command> clause can be used to
- specify the port <command>rndc</command> should
- connect
- to on the server.
- </para>
-
- <para>
- A sample minimal configuration file is as follows:
- </para>
-
-<programlisting>
-key rndc_key {
- algorithm "hmac-sha256";
- secret
- "c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K";
-};
-options {
- default-server 127.0.0.1;
- default-key rndc_key;
-};
-</programlisting>
-
- <para>
- This file, if installed as <filename>/etc/rndc.conf</filename>,
- would allow the command:
- </para>
-
- <para>
- <prompt>$ </prompt><userinput>rndc reload</userinput>
- </para>
-
- <para>
- to connect to 127.0.0.1 port 953 and cause the name server
- to reload, if a name server on the local machine were
- running with
- following controls statements:
- </para>
-
-<programlisting>
-controls {
- inet 127.0.0.1
- allow { localhost; } keys { rndc_key; };
-};
-</programlisting>
-
- <para>
- and it had an identical key statement for
- <literal>rndc_key</literal>.
- </para>
-
- <para>
- Running the <command>rndc-confgen</command>
- program will
- conveniently create a <filename>rndc.conf</filename>
- file for you, and also display the
- corresponding <command>controls</command>
- statement that you need to
- add to <filename>named.conf</filename>.
- Alternatively,
- you can run <command>rndc-confgen -a</command>
- to set up
- a <filename>rndc.key</filename> file and not
- modify
- <filename>named.conf</filename> at all.
- </para>
-
- </listitem>
- </varlistentry>
- </variablelist>
-
- </section>
- </section>
-
- <section xml:id="signals"><info><title>Signals</title></info>
- <para>
- Certain UNIX signals cause the name server to take specific
- actions, as described in the following table. These signals can
- be sent using the <command>kill</command> command.
- </para>
- <informaltable frame="all">
- <tgroup cols="2">
- <colspec colname="1" colnum="1" colsep="0" colwidth="1.125in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="4.000in"/>
- <tbody>
- <row rowsep="0">
- <entry colname="1">
- <para><command>SIGHUP</command></para>
- </entry>
- <entry colname="2">
- <para>
- Causes the server to read <filename>named.conf</filename> and
- reload the database.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>SIGTERM</command></para>
- </entry>
- <entry colname="2">
- <para>
- Causes the server to clean up and exit.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>SIGINT</command></para>
- </entry>
- <entry colname="2">
- <para>
- Causes the server to clean up and exit.
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </section>
- </section>
- </chapter>
-
- <chapter xml:id="Bv9ARM.ch04"><info><title>Advanced DNS Features</title></info>
-
- <section xml:id="notify"><info><title>Notify</title></info>
- <para>
- <acronym>DNS</acronym> NOTIFY is a mechanism that allows master
- servers to notify their slave servers of changes to a zone's data. In
- response to a <command>NOTIFY</command> from a master server, the
- slave will check to see that its version of the zone is the
- current version and, if not, initiate a zone transfer.
- </para>
-
- <para>
- For more information about <acronym>DNS</acronym>
- <command>NOTIFY</command>, see the description of the
- <command>notify</command> option in <xref linkend="boolean_options"/> and
- the description of the zone option <command>also-notify</command> in
- <xref linkend="zone_transfers"/>. The <command>NOTIFY</command>
- protocol is specified in RFC 1996.
- </para>
-
- <note><simpara>
- As a slave zone can also be a master to other slaves, <command>named</command>,
- by default, sends <command>NOTIFY</command> messages for every zone
- it loads. Specifying <command>notify master-only;</command> will
- cause <command>named</command> to only send <command>NOTIFY</command> for master
- zones that it loads.
- </simpara></note>
-
- </section>
-
- <section xml:id="dynamic_update"><info><title>Dynamic Update</title></info>
-
- <para>
- Dynamic Update is a method for adding, replacing or deleting
- records in a master server by sending it a special form of DNS
- messages. The format and meaning of these messages is specified
- in RFC 2136.
- </para>
-
- <para>
- Dynamic update is enabled by including an
- <command>allow-update</command> or an <command>update-policy</command>
- clause in the <command>zone</command> statement.
- </para>
-
- <para>
- If the zone's <command>update-policy</command> is set to
- <userinput>local</userinput>, updates to the zone
- will be permitted for the key <varname>local-ddns</varname>,
- which will be generated by <command>named</command> at startup.
- See <xref linkend="dynamic_update_policies"/> for more details.
- </para>
-
- <para>
- Dynamic updates using Kerberos signed requests can be made
- using the TKEY/GSS protocol by setting either the
- <command>tkey-gssapi-keytab</command> option, or alternatively
- by setting both the <command>tkey-gssapi-credential</command>
- and <command>tkey-domain</command> options. Once enabled,
- Kerberos signed requests will be matched against the update
- policies for the zone, using the Kerberos principal as the
- signer for the request.
- </para>
-
- <para>
- Updating of secure zones (zones using DNSSEC) follows RFC
- 3007: RRSIG, NSEC and NSEC3 records affected by updates are
- automatically regenerated by the server using an online
- zone key. Update authorization is based on transaction
- signatures and an explicit server policy.
- </para>
-
- <section xml:id="journal"><info><title>The journal file</title></info>
-
- <para>
- All changes made to a zone using dynamic update are stored
- in the zone's journal file. This file is automatically created
- by the server when the first dynamic update takes place.
- The name of the journal file is formed by appending the extension
- <filename>.jnl</filename> to the name of the
- corresponding zone
- file unless specifically overridden. The journal file is in a
- binary format and should not be edited manually.
- </para>
-
- <para>
- The server will also occasionally write ("dump")
- the complete contents of the updated zone to its zone file.
- This is not done immediately after
- each dynamic update, because that would be too slow when a large
- zone is updated frequently. Instead, the dump is delayed by
- up to 15 minutes, allowing additional updates to take place.
- During the dump process, transient files will be created
- with the extensions <filename>.jnw</filename> and
- <filename>.jbk</filename>; under ordinary circumstances, these
- will be removed when the dump is complete, and can be safely
- ignored.
- </para>
-
- <para>
- When a server is restarted after a shutdown or crash, it will replay
- the journal file to incorporate into the zone any updates that
- took
- place after the last zone dump.
- </para>
-
- <para>
- Changes that result from incoming incremental zone transfers are
- also
- journalled in a similar way.
- </para>
-
- <para>
- The zone files of dynamic zones cannot normally be edited by
- hand because they are not guaranteed to contain the most recent
- dynamic changes — those are only in the journal file.
- The only way to ensure that the zone file of a dynamic zone
- is up to date is to run <command>rndc stop</command>.
- </para>
-
- <para>
- If you have to make changes to a dynamic zone
- manually, the following procedure will work:
- Disable dynamic updates to the zone using
- <command>rndc freeze <replaceable>zone</replaceable></command>.
- This will update the zone's master file with the changes
- stored in its <filename>.jnl</filename> file.
- Edit the zone file. Run
- <command>rndc thaw <replaceable>zone</replaceable></command>
- to reload the changed zone and re-enable dynamic updates.
- </para>
-
- <para>
- <command>rndc sync <replaceable>zone</replaceable></command>
- will update the zone file with changes from the journal file
- without stopping dynamic updates; this may be useful for viewing
- the current zone state. To remove the <filename>.jnl</filename>
- file after updating the zone file, use
- <command>rndc sync -clean</command>.
- </para>
-
- </section>
-
- </section>
-
- <section xml:id="incremental_zone_transfers"><info><title>Incremental Zone Transfers (IXFR)</title></info>
-
- <para>
- The incremental zone transfer (IXFR) protocol is a way for
- slave servers to transfer only changed data, instead of having to
- transfer the entire zone. The IXFR protocol is specified in RFC
- 1995. See <xref linkend="proposed_standards"/>.
- </para>
-
- <para>
- When acting as a master, <acronym>BIND</acronym> 9
- supports IXFR for those zones
- where the necessary change history information is available. These
- include master zones maintained by dynamic update and slave zones
- whose data was obtained by IXFR. For manually maintained master
- zones, and for slave zones obtained by performing a full zone
- transfer (AXFR), IXFR is supported only if the option
- <command>ixfr-from-differences</command> is set
- to <userinput>yes</userinput>.
- </para>
-
- <para>
- When acting as a slave, <acronym>BIND</acronym> 9 will
- attempt to use IXFR unless
- it is explicitly disabled. For more information about disabling
- IXFR, see the description of the <command>request-ixfr</command> clause
- of the <command>server</command> statement.
- </para>
- </section>
-
- <section xml:id="split_dns"><info><title>Split DNS</title></info>
-
- <para>
- Setting up different views, or visibility, of the DNS space to
- internal and external resolvers is usually referred to as a
- <emphasis>Split DNS</emphasis> setup. There are several
- reasons an organization would want to set up its DNS this way.
- </para>
- <para>
- One common reason for setting up a DNS system this way is
- to hide "internal" DNS information from "external" clients on the
- Internet. There is some debate as to whether or not this is actually
- useful.
- Internal DNS information leaks out in many ways (via email headers,
- for example) and most savvy "attackers" can find the information
- they need using other means.
- However, since listing addresses of internal servers that
- external clients cannot possibly reach can result in
- connection delays and other annoyances, an organization may
- choose to use a Split DNS to present a consistent view of itself
- to the outside world.
- </para>
- <para>
- Another common reason for setting up a Split DNS system is
- to allow internal networks that are behind filters or in RFC 1918
- space (reserved IP space, as documented in RFC 1918) to resolve DNS
- on the Internet. Split DNS can also be used to allow mail from outside
- back in to the internal network.
- </para>
- <section xml:id="split_dns_sample"><info><title>Example split DNS setup</title></info>
- <para>
- Let's say a company named <emphasis>Example, Inc.</emphasis>
- (<literal>example.com</literal>)
- has several corporate sites that have an internal network with
- reserved
- Internet Protocol (IP) space and an external demilitarized zone (DMZ),
- or "outside" section of a network, that is available to the public.
- </para>
- <para>
- <emphasis>Example, Inc.</emphasis> wants its internal clients
- to be able to resolve external hostnames and to exchange mail with
- people on the outside. The company also wants its internal resolvers
- to have access to certain internal-only zones that are not available
- at all outside of the internal network.
- </para>
- <para>
- In order to accomplish this, the company will set up two sets
- of name servers. One set will be on the inside network (in the
- reserved
- IP space) and the other set will be on bastion hosts, which are
- "proxy"
- hosts that can talk to both sides of its network, in the DMZ.
- </para>
- <para>
- The internal servers will be configured to forward all queries,
- except queries for <filename>site1.internal</filename>, <filename>site2.internal</filename>, <filename>site1.example.com</filename>,
- and <filename>site2.example.com</filename>, to the servers
- in the
- DMZ. These internal servers will have complete sets of information
- for <filename>site1.example.com</filename>, <filename>site2.example.com</filename>, <filename>site1.internal</filename>,
- and <filename>site2.internal</filename>.
- </para>
- <para>
- To protect the <filename>site1.internal</filename> and <filename>site2.internal</filename> domains,
- the internal name servers must be configured to disallow all queries
- to these domains from any external hosts, including the bastion
- hosts.
- </para>
- <para>
- The external servers, which are on the bastion hosts, will
- be configured to serve the "public" version of the <filename>site1</filename> and <filename>site2.example.com</filename> zones.
- This could include things such as the host records for public servers
- (<filename>www.example.com</filename> and <filename>ftp.example.com</filename>),
- and mail exchange (MX) records (<filename>a.mx.example.com</filename> and <filename>b.mx.example.com</filename>).
- </para>
- <para>
- In addition, the public <filename>site1</filename> and <filename>site2.example.com</filename> zones
- should have special MX records that contain wildcard (`*') records
- pointing to the bastion hosts. This is needed because external mail
- servers do not have any other way of looking up how to deliver mail
- to those internal hosts. With the wildcard records, the mail will
- be delivered to the bastion host, which can then forward it on to
- internal hosts.
- </para>
- <para>
- Here's an example of a wildcard MX record:
- </para>
- <programlisting>* IN MX 10 external1.example.com.</programlisting>
- <para>
- Now that they accept mail on behalf of anything in the internal
- network, the bastion hosts will need to know how to deliver mail
- to internal hosts. In order for this to work properly, the resolvers
- on
- the bastion hosts will need to be configured to point to the internal
- name servers for DNS resolution.
- </para>
- <para>
- Queries for internal hostnames will be answered by the internal
- servers, and queries for external hostnames will be forwarded back
- out to the DNS servers on the bastion hosts.
- </para>
- <para>
- In order for all this to work properly, internal clients will
- need to be configured to query <emphasis>only</emphasis> the internal
- name servers for DNS queries. This could also be enforced via
- selective
- filtering on the network.
- </para>
- <para>
- If everything has been set properly, <emphasis>Example, Inc.</emphasis>'s
- internal clients will now be able to:
- </para>
- <itemizedlist>
- <listitem>
- <simpara>
- Look up any hostnames in the <literal>site1</literal>
- and
- <literal>site2.example.com</literal> zones.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- Look up any hostnames in the <literal>site1.internal</literal> and
- <literal>site2.internal</literal> domains.
- </simpara>
- </listitem>
- <listitem>
- <simpara>Look up any hostnames on the Internet.</simpara>
- </listitem>
- <listitem>
- <simpara>Exchange mail with both internal and external people.</simpara>
- </listitem>
- </itemizedlist>
- <para>
- Hosts on the Internet will be able to:
- </para>
- <itemizedlist>
- <listitem>
- <simpara>
- Look up any hostnames in the <literal>site1</literal>
- and
- <literal>site2.example.com</literal> zones.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- Exchange mail with anyone in the <literal>site1</literal> and
- <literal>site2.example.com</literal> zones.
- </simpara>
- </listitem>
- </itemizedlist>
-
- <para>
- Here is an example configuration for the setup we just
- described above. Note that this is only configuration information;
- for information on how to configure your zone files, see <xref linkend="sample_configuration"/>.
- </para>
-
- <para>
- Internal DNS server config:
- </para>
-
-<programlisting>
-
-acl internals { 172.16.72.0/24; 192.168.1.0/24; };
-
-acl externals { <varname>bastion-ips-go-here</varname>; };
-
-options {
- ...
- ...
- forward only;
- // forward to external servers
- forwarders {
- <varname>bastion-ips-go-here</varname>;
- };
- // sample allow-transfer (no one)
- allow-transfer { none; };
- // restrict query access
- allow-query { internals; externals; };
- // restrict recursion
- allow-recursion { internals; };
- ...
- ...
-};
-
-// sample master zone
-zone "site1.example.com" {
- type master;
- file "m/site1.example.com";
- // do normal iterative resolution (do not forward)
- forwarders { };
- allow-query { internals; externals; };
- allow-transfer { internals; };
-};
-
-// sample slave zone
-zone "site2.example.com" {
- type slave;
- file "s/site2.example.com";
- masters { 172.16.72.3; };
- forwarders { };
- allow-query { internals; externals; };
- allow-transfer { internals; };
-};
-
-zone "site1.internal" {
- type master;
- file "m/site1.internal";
- forwarders { };
- allow-query { internals; };
- allow-transfer { internals; }
-};
-
-zone "site2.internal" {
- type slave;
- file "s/site2.internal";
- masters { 172.16.72.3; };
- forwarders { };
- allow-query { internals };
- allow-transfer { internals; }
-};
-</programlisting>
-
- <para>
- External (bastion host) DNS server config:
- </para>
-
-<programlisting>
-acl internals { 172.16.72.0/24; 192.168.1.0/24; };
-
-acl externals { bastion-ips-go-here; };
-
-options {
- ...
- ...
- // sample allow-transfer (no one)
- allow-transfer { none; };
- // default query access
- allow-query { any; };
- // restrict cache access
- allow-query-cache { internals; externals; };
- // restrict recursion
- allow-recursion { internals; externals; };
- ...
- ...
-};
-
-// sample slave zone
-zone "site1.example.com" {
- type master;
- file "m/site1.foo.com";
- allow-transfer { internals; externals; };
-};
-
-zone "site2.example.com" {
- type slave;
- file "s/site2.foo.com";
- masters { another_bastion_host_maybe; };
- allow-transfer { internals; externals; }
-};
-</programlisting>
-
- <para>
- In the <filename>resolv.conf</filename> (or equivalent) on
- the bastion host(s):
- </para>
-
-<programlisting>
-search ...
-nameserver 172.16.72.2
-nameserver 172.16.72.3
-nameserver 172.16.72.4
-</programlisting>
-
- </section>
- </section>
- <section xml:id="tsig"><info><title>TSIG</title></info>
-
- <para>
- TSIG (Transaction SIGnatures) is a mechanism for authenticating DNS
- messages, originally specified in RFC 2845. It allows DNS messages
- to be cryptographically signed using a shared secret. TSIG can
- be used in any DNS transaction, as a way to restrict access to
- certain server functions (e.g., recursive queries) to authorized
- clients when IP-based access control is insufficient or needs to
- be overridden, or as a way to ensure message authenticity when it
- is critical to the integrity of the server, such as with dynamic
- UPDATE messages or zone transfers from a master to a slave server.
- </para>
- <para>
- This is a guide to setting up TSIG in <acronym>BIND</acronym>.
- It describes the configuration syntax and the process of creating
- TSIG keys.
- </para>
- <para>
- <command>named</command> supports TSIG for server-to-server
- communication, and some of the tools included with
- <acronym>BIND</acronym> support it for sending messages to
- <command>named</command>:
- <itemizedlist>
- <listitem>
- <xref linkend="man.nsupdate"/> supports TSIG via the
- <option>-k</option>, <option>-l</option> and
- <option>-y</option> command line options, or via
- the <command>key</command> command when running
- interactively.
- </listitem>
- <listitem>
- <xref linkend="man.dig"/> supports TSIG via the
- <option>-k</option> and <option>-y</option> command
- line options.
- </listitem>
- </itemizedlist>
- </para>
-
- <section><info><title>Generating a Shared Key</title></info>
- <para>
- TSIG keys can be generated using the <command>tsig-keygen</command>
- command; the output of the command is a <command>key</command> directive
- suitable for inclusion in <filename>named.conf</filename>. The
- key name, algorithm and size can be specified by command line parameters;
- the defaults are "tsig-key", HMAC-SHA256, and 256 bits, respectively.
- </para>
- <para>
- Any string which is a valid DNS name can be used as a key name.
- For example, a key to be shared between servers called
- <emphasis>host1</emphasis> and <emphasis>host2</emphasis> could
- be called "host1-host2.", and this key could be generated using:
- </para>
-<programlisting>
- $ tsig-keygen host1-host2. > host1-host2.key
-</programlisting>
- <para>
- This key may then be copied to both hosts. The key name and secret
- must be identical on both hosts.
- (Note: copying a shared secret from one server to another is beyond
- the scope of the DNS. A secure transport mechanism should be used:
- secure FTP, SSL, ssh, telephone, encrypted email, etc.)
- </para>
- <para>
- <command>tsig-keygen</command> can also be run as
- <command>ddns-confgen</command>, in which case its output includes
- additional configuration text for setting up dynamic DNS in
- <command>named</command>. See <xref linkend="man.ddns-confgen"/>
- for details.
- </para>
- </section>
-
- <section><info><title>Loading A New Key</title></info>
- <para>
- For a key shared between servers called
- <emphasis>host1</emphasis> and <emphasis>host2</emphasis>,
- the following could be added to each server's
- <filename>named.conf</filename> file:
- </para>
-<programlisting>
-key "host1-host2." {
- algorithm hmac-sha256;
- secret "DAopyf1mhCbFVZw7pgmNPBoLUq8wEUT7UuPoLENP2HY=";
-};
-</programlisting>
- <para>
- (This is the same key generated above using
- <command>tsig-keygen</command>.)
- </para>
- <para>
- Since this text contains a secret, it
- is recommended that either <filename>named.conf</filename> not be
- world-readable, or that the <command>key</command> directive
- be stored in a file which is not world-readable, and which is
- included in <filename>named.conf</filename> via the
- <command>include</command> directive.
- </para>
- <para>
- Once a key has been added to <filename>named.conf</filename> and the
- server has been restarted or reconfigured, the server can recognize
- the key. If the server receives a message signed by the
- key, it will be able to verify the signature. If the signature
- is valid, the response will be signed using the same key.
- </para>
- <para>
- TSIG keys that are known to a server can be listed using the
- command <command>rndc tsig-list</command>.
- </para>
- </section>
-
- <section><info><title>Instructing the Server to Use a Key</title></info>
- <para>
- A server sending a request to another server must be told whether
- to use a key, and if so, which key to use.
- </para>
- <para>
- For example, a key may be specified for each server in the
- <command>masters</command> statement in the definition of a
- slave zone; in this case, all SOA QUERY messages, NOTIFY
- messages, and zone transfer requests (AXFR or IXFR) will be
- signed using the specified key. Keys may also be specified
- in the <command>also-notify</command> statement of a master
- or slave zone, causing NOTIFY messages to be signed using
- the specified key.
- </para>
- <para>
- Keys can also be specified in a <command>server</command>
- directive. Adding the following on <emphasis>host1</emphasis>,
- if the IP address of <emphasis>host2</emphasis> is 10.1.2.3, would
- cause <emphasis>all</emphasis> requests from <emphasis>host1</emphasis>
- to <emphasis>host2</emphasis>, including normal DNS queries, to be
- signed using the <command>host1-host2.</command> key:
- </para>
-<programlisting>
-server 10.1.2.3 {
- keys { host1-host2. ;};
-};
-</programlisting>
- <para>
- Multiple keys may be present in the <command>keys</command>
- statement, but only the first one is used. As this directive does
- not contain secrets, it can be used in a world-readable file.
- </para>
- <para>
- Requests sent by <emphasis>host2</emphasis> to <emphasis>host1</emphasis>
- would <emphasis>not</emphasis> be signed, unless a similar
- <command>server</command> directive were in <emphasis>host2</emphasis>'s
- configuration file.
- </para>
- <para>
- Whenever any server sends a TSIG-signed DNS request, it will expect
- the response to be signed with the same key. If a response is not
- signed, or if the signature is not valid, the response will be
- rejected.
- </para>
- </section>
-
- <section><info><title>TSIG-Based Access Control</title></info>
- <para>
- TSIG keys may be specified in ACL definitions and ACL directives
- such as <command>allow-query</command>, <command>allow-transfer</command>
- and <command>allow-update</command>.
- The above key would be denoted in an ACL element as
- <command>key host1-host2.</command>
- </para>
- <para>
- An example of an <command>allow-update</command> directive using
- a TSIG key:
- </para>
-<programlisting>
-allow-update { !{ !localnets; any; }; key host1-host2. ;};
-</programlisting>
- <para>
- This allows dynamic updates to succeed only if the UPDATE
- request comes from an address in <command>localnets</command>,
- <emphasis>and</emphasis> if it is signed using the
- <command>host1-host2.</command> key.
- </para>
- <para>
- See <xref linkend="dynamic_update_policies"/> for a discussion of
- the more flexible <command>update-policy</command> statement.
- </para>
- </section>
-
- <section><info><title>Errors</title></info>
- <para>
- Processing of TSIG-signed messages can result in several errors:
- <itemizedlist>
- <listitem>
- If a TSIG-aware server receives a message signed by an
- unknown key, the response will be unsigned, with the TSIG
- extended error code set to BADKEY.
- </listitem>
- <listitem>
- If a TSIG-aware server receives a message from a known key
- but with an invalid signature, the response will be unsigned,
- with the TSIG extended error code set to BADSIG.
- </listitem>
- <listitem>
- If a TSIG-aware server receives a message with a time
- outside of the allowed range, the response will be signed, with
- the TSIG extended error code set to BADTIME, and the time values
- will be adjusted so that the response can be successfully
- verified.
- </listitem>
- </itemizedlist>
- In all of the above cases, the server will return a response code
- of NOTAUTH (not authenticated).
- </para>
- </section>
- </section>
-
- <section xml:id="tkey"><info><title>TKEY</title></info>
-
- <para>
- TKEY (Transaction KEY) is a mechanism for automatically negotiating
- a shared secret between two hosts, originally specified in RFC 2930.
- </para>
- <para>
- There are several TKEY "modes" that specify how a key is to be
- generated or assigned. <acronym>BIND</acronym> 9 implements only
- one of these modes: Diffie-Hellman key exchange. Both hosts are
- required to have a KEY record with algorithm DH (though this
- record is not required to be present in a zone).
- </para>
- <para>
- The TKEY process is initiated by a client or server by sending
- a query of type TKEY to a TKEY-aware server. The query must include
- an appropriate KEY record in the additional section, and
- must be signed using either TSIG or SIG(0) with a previously
- established key. The server's response, if successful, will
- contain a TKEY record in its answer section. After this transaction,
- both participants will have enough information to calculate a
- shared secret using Diffie-Hellman key exchange. The shared secret
- can then be used by to sign subsequent transactions between the
- two servers.
- </para>
- <para>
- TSIG keys known by the server, including TKEY-negotiated keys, can
- be listed using <command>rndc tsig-list</command>.
- </para>
- <para>
- TKEY-negotiated keys can be deleted from a server using
- <command>rndc tsig-delete</command>. This can also be done via
- the TKEY protocol itself, by sending an authenticated TKEY query
- specifying the "key deletion" mode.
- </para>
-
- </section>
- <section xml:id="sig0"><info><title>SIG(0)</title></info>
-
- <para>
- <acronym>BIND</acronym> partially supports DNSSEC SIG(0)
- transaction signatures as specified in RFC 2535 and RFC 2931.
- SIG(0) uses public/private keys to authenticate messages. Access control
- is performed in the same manner as TSIG keys; privileges can be
- granted or denied in ACL directives based on the key name.
- </para>
- <para>
- When a SIG(0) signed message is received, it will only be
- verified if the key is known and trusted by the server. The
- server will not attempt to recursively fetch or validate the
- key.
- </para>
- <para>
- SIG(0) signing of multiple-message TCP streams is not supported.
- </para>
- <para>
- The only tool shipped with <acronym>BIND</acronym> 9 that
- generates SIG(0) signed messages is <command>nsupdate</command>.
- </para>
- </section>
-
- <section xml:id="DNSSEC"><info><title>DNSSEC</title></info>
- <para>
- Cryptographic authentication of DNS information is possible
- through the DNS Security (<emphasis>DNSSEC-bis</emphasis>) extensions,
- defined in RFC 4033, RFC 4034, and RFC 4035.
- This section describes the creation and use of DNSSEC signed zones.
- </para>
-
- <para>
- In order to set up a DNSSEC secure zone, there are a series
- of steps which must be followed. <acronym>BIND</acronym>
- 9 ships
- with several tools
- that are used in this process, which are explained in more detail
- below. In all cases, the <option>-h</option> option prints a
- full list of parameters. Note that the DNSSEC tools require the
- keyset files to be in the working directory or the
- directory specified by the <option>-d</option> option, and
- that the tools shipped with BIND 9.2.x and earlier are not compatible
- with the current ones.
- </para>
-
- <para>
- There must also be communication with the administrators of
- the parent and/or child zone to transmit keys. A zone's security
- status must be indicated by the parent zone for a DNSSEC capable
- resolver to trust its data. This is done through the presence
- or absence of a <literal>DS</literal> record at the
- delegation
- point.
- </para>
-
- <para>
- For other servers to trust data in this zone, they must
- either be statically configured with this zone's zone key or the
- zone key of another zone above this one in the DNS tree.
- </para>
-
- <section xml:id="dnssec_keys"><info><title>Generating Keys</title></info>
-
- <para>
- The <command>dnssec-keygen</command> program is used to
- generate keys.
- </para>
-
- <para>
- A secure zone must contain one or more zone keys. The
- zone keys will sign all other records in the zone, as well as
- the zone keys of any secure delegated zones. Zone keys must
- have the same name as the zone, a name type of
- <command>ZONE</command>, and must be usable for
- authentication.
- It is recommended that zone keys use a cryptographic algorithm
- designated as "mandatory to implement" by the IETF; currently
- the only one is RSASHA1.
- </para>
-
- <para>
- The following command will generate a 768-bit RSASHA1 key for
- the <filename>child.example</filename> zone:
- </para>
-
- <para>
- <userinput>dnssec-keygen -a RSASHA1 -b 768 -n ZONE child.example.</userinput>
- </para>
-
- <para>
- Two output files will be produced:
- <filename>Kchild.example.+005+12345.key</filename> and
- <filename>Kchild.example.+005+12345.private</filename>
- (where
- 12345 is an example of a key tag). The key filenames contain
- the key name (<filename>child.example.</filename>),
- algorithm (3
- is DSA, 1 is RSAMD5, 5 is RSASHA1, etc.), and the key tag (12345 in
- this case).
- The private key (in the <filename>.private</filename>
- file) is
- used to generate signatures, and the public key (in the
- <filename>.key</filename> file) is used for signature
- verification.
- </para>
-
- <para>
- To generate another key with the same properties (but with
- a different key tag), repeat the above command.
- </para>
-
- <para>
- The <command>dnssec-keyfromlabel</command> program is used
- to get a key pair from a crypto hardware and build the key
- files. Its usage is similar to <command>dnssec-keygen</command>.
- </para>
-
- <para>
- The public keys should be inserted into the zone file by
- including the <filename>.key</filename> files using
- <command>$INCLUDE</command> statements.
- </para>
-
- </section>
- <section xml:id="dnssec_signing"><info><title>Signing the Zone</title></info>
-
- <para>
- The <command>dnssec-signzone</command> program is used
- to sign a zone.
- </para>
-
- <para>
- Any <filename>keyset</filename> files corresponding to
- secure subzones should be present. The zone signer will
- generate <literal>NSEC</literal>, <literal>NSEC3</literal>
- and <literal>RRSIG</literal> records for the zone, as
- well as <literal>DS</literal> for the child zones if
- <literal>'-g'</literal> is specified. If <literal>'-g'</literal>
- is not specified, then DS RRsets for the secure child
- zones need to be added manually.
- </para>
-
- <para>
- The following command signs the zone, assuming it is in a
- file called <filename>zone.child.example</filename>. By
- default, all zone keys which have an available private key are
- used to generate signatures.
- </para>
-
- <para>
- <userinput>dnssec-signzone -o child.example zone.child.example</userinput>
- </para>
-
- <para>
- One output file is produced:
- <filename>zone.child.example.signed</filename>. This
- file
- should be referenced by <filename>named.conf</filename>
- as the
- input file for the zone.
- </para>
-
- <para><command>dnssec-signzone</command>
- will also produce a keyset and dsset files and optionally a
- dlvset file. These are used to provide the parent zone
- administrators with the <literal>DNSKEYs</literal> (or their
- corresponding <literal>DS</literal> records) that are the
- secure entry point to the zone.
- </para>
-
- </section>
-
- <section xml:id="dnssec_config"><info><title>Configuring Servers</title></info>
-
- <para>
- To enable <command>named</command> to respond appropriately
- to DNS requests from DNSSEC aware clients,
- <command>dnssec-enable</command> must be set to yes.
- (This is the default setting.)
- </para>
-
- <para>
- To enable <command>named</command> to validate answers from
- other servers, the <command>dnssec-enable</command> option
- must be set to <userinput>yes</userinput>, and the
- <command>dnssec-validation</command> options must be set to
- <userinput>yes</userinput> or <userinput>auto</userinput>.
- </para>
-
- <para>
- If <command>dnssec-validation</command> is set to
- <userinput>auto</userinput>, then a default
- trust anchor for the DNS root zone will be used.
- If it is set to <userinput>yes</userinput>, however,
- then at least one trust anchor must be configured
- with a <command>trusted-keys</command> or
- <command>managed-keys</command> statement in
- <filename>named.conf</filename>, or DNSSEC validation
- will not occur. The default setting is
- <userinput>yes</userinput>.
- </para>
-
- <para>
- <command>trusted-keys</command> are copies of DNSKEY RRs
- for zones that are used to form the first link in the
- cryptographic chain of trust. All keys listed in
- <command>trusted-keys</command> (and corresponding zones)
- are deemed to exist and only the listed keys will be used
- to validated the DNSKEY RRset that they are from.
- </para>
-
- <para>
- <command>managed-keys</command> are trusted keys which are
- automatically kept up to date via RFC 5011 trust anchor
- maintenance.
- </para>
-
- <para>
- <command>trusted-keys</command> and
- <command>managed-keys</command> are described in more detail
- later in this document.
- </para>
-
- <para>
- Unlike <acronym>BIND</acronym> 8, <acronym>BIND</acronym>
- 9 does not verify signatures on load, so zone keys for
- authoritative zones do not need to be specified in the
- configuration file.
- </para>
-
- <para>
- After DNSSEC gets established, a typical DNSSEC configuration
- will look something like the following. It has one or
- more public keys for the root. This allows answers from
- outside the organization to be validated. It will also
- have several keys for parts of the namespace the organization
- controls. These are here to ensure that <command>named</command>
- is immune to compromises in the DNSSEC components of the security
- of parent zones.
- </para>
-
-<programlisting>
-managed-keys {
- /* Root Key */
- "." initial-key 257 3 3 "BNY4wrWM1nCfJ+CXd0rVXyYmobt7sEEfK3clRbGaTwS
- JxrGkxJWoZu6I7PzJu/E9gx4UC1zGAHlXKdE4zYIpRh
- aBKnvcC2U9mZhkdUpd1Vso/HAdjNe8LmMlnzY3zy2Xy
- 4klWOADTPzSv9eamj8V18PHGjBLaVtYvk/ln5ZApjYg
- hf+6fElrmLkdaz MQ2OCnACR817DF4BBa7UR/beDHyp
- 5iWTXWSi6XmoJLbG9Scqc7l70KDqlvXR3M/lUUVRbke
- g1IPJSidmK3ZyCllh4XSKbje/45SKucHgnwU5jefMtq
- 66gKodQj+MiA21AfUVe7u99WzTLzY3qlxDhxYQQ20FQ
- 97S+LKUTpQcq27R7AT3/V5hRQxScINqwcz4jYqZD2fQ
- dgxbcDTClU0CRBdiieyLMNzXG3";
-};
-
-trusted-keys {
- /* Key for our organization's forward zone */
- example.com. 257 3 5 "AwEAAaxPMcR2x0HbQV4WeZB6oEDX+r0QM6
- 5KbhTjrW1ZaARmPhEZZe3Y9ifgEuq7vZ/z
- GZUdEGNWy+JZzus0lUptwgjGwhUS1558Hb
- 4JKUbbOTcM8pwXlj0EiX3oDFVmjHO444gL
- kBOUKUf/mC7HvfwYH/Be22GnClrinKJp1O
- g4ywzO9WglMk7jbfW33gUKvirTHr25GL7S
- TQUzBb5Usxt8lgnyTUHs1t3JwCY5hKZ6Cq
- FxmAVZP20igTixin/1LcrgX/KMEGd/biuv
- F4qJCyduieHukuY3H4XMAcR+xia2nIUPvm
- /oyWR8BW/hWdzOvnSCThlHf3xiYleDbt/o
- 1OTQ09A0=";
-
- /* Key for our reverse zone. */
- 2.0.192.IN-ADDRPA.NET. 257 3 5 "AQOnS4xn/IgOUpBPJ3bogzwc
- xOdNax071L18QqZnQQQAVVr+i
- LhGTnNGp3HoWQLUIzKrJVZ3zg
- gy3WwNT6kZo6c0tszYqbtvchm
- gQC8CzKojM/W16i6MG/eafGU3
- siaOdS0yOI6BgPsw+YZdzlYMa
- IJGf4M4dyoKIhzdZyQ2bYQrjy
- Q4LB0lC7aOnsMyYKHHYeRvPxj
- IQXmdqgOJGq+vsevG06zW+1xg
- YJh9rCIfnm1GX/KMgxLPG2vXT
- D/RnLX+D3T3UL7HJYHJhAZD5L
- 59VvjSPsZJHeDCUyWYrvPZesZ
- DIRvhDD52SKvbheeTJUm6Ehkz
- ytNN2SN96QRk8j/iI8ib";
-};
-
-options {
- ...
- dnssec-enable yes;
- dnssec-validation yes;
-};
-</programlisting>
-
- <note><simpara>
- None of the keys listed in this example are valid. In particular,
- the root key is not valid.
- </simpara></note>
-
- <para>
- When DNSSEC validation is enabled and properly configured,
- the resolver will reject any answers from signed, secure zones
- which fail to validate, and will return SERVFAIL to the client.
- </para>
-
- <para>
- Responses may fail to validate for any of several reasons,
- including missing, expired, or invalid signatures, a key which
- does not match the DS RRset in the parent zone, or an insecure
- response from a zone which, according to its parent, should have
- been secure.
- </para>
-
- <note>
- <para>
- When the validator receives a response from an unsigned zone
- that has a signed parent, it must confirm with the parent
- that the zone was intentionally left unsigned. It does
- this by verifying, via signed and validated NSEC/NSEC3 records,
- that the parent zone contains no DS records for the child.
- </para>
- <para>
- If the validator <emphasis>can</emphasis> prove that the zone
- is insecure, then the response is accepted. However, if it
- cannot, then it must assume an insecure response to be a
- forgery; it rejects the response and logs an error.
- </para>
- <para>
- The logged error reads "insecurity proof failed" and
- "got insecure response; parent indicates it should be secure".
- (Prior to BIND 9.7, the logged error was "not insecure".
- This referred to the zone, not the response.)
- </para>
- </note>
- </section>
- </section>
-
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dnssec.xml"/>
-
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="managed-keys.xml"/>
-
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pkcs11.xml"/>
-
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dlz.xml"/>
-
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dyndb.xml"/>
-
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="catz.xml"/>
-
- <section xml:id="ipv6"><info><title>IPv6 Support in <acronym>BIND</acronym> 9</title></info>
- <para>
- <acronym>BIND</acronym> 9 fully supports all currently
- defined forms of IPv6 name to address and address to name
- lookups. It will also use IPv6 addresses to make queries when
- running on an IPv6 capable system.
- </para>
-
- <para>
- For forward lookups, <acronym>BIND</acronym> 9 supports
- only AAAA records. RFC 3363 deprecated the use of A6 records,
- and client-side support for A6 records was accordingly removed
- from <acronym>BIND</acronym> 9.
- However, authoritative <acronym>BIND</acronym> 9 name servers still
- load zone files containing A6 records correctly, answer queries
- for A6 records, and accept zone transfer for a zone containing A6
- records.
- </para>
-
- <para>
- For IPv6 reverse lookups, <acronym>BIND</acronym> 9 supports
- the traditional "nibble" format used in the
- <emphasis>ip6.arpa</emphasis> domain, as well as the older, deprecated
- <emphasis>ip6.int</emphasis> domain.
- Older versions of <acronym>BIND</acronym> 9
- supported the "binary label" (also known as "bitstring") format,
- but support of binary labels has been completely removed per
- RFC 3363.
- Many applications in <acronym>BIND</acronym> 9 do not understand
- the binary label format at all any more, and will return an
- error if given.
- In particular, an authoritative <acronym>BIND</acronym> 9
- name server will not load a zone file containing binary labels.
- </para>
-
- <para>
- For an overview of the format and structure of IPv6 addresses,
- see <xref linkend="ipv6addresses"/>.
- </para>
-
- <section><info><title>Address Lookups Using AAAA Records</title></info>
-
- <para>
- The IPv6 AAAA record is a parallel to the IPv4 A record,
- and, unlike the deprecated A6 record, specifies the entire
- IPv6 address in a single record. For example,
- </para>
-
-<programlisting>
-$ORIGIN example.com.
-host 3600 IN AAAA 2001:db8::1
-</programlisting>
-
- <para>
- Use of IPv4-in-IPv6 mapped addresses is not recommended.
- If a host has an IPv4 address, use an A record, not
- a AAAA, with <literal>::ffff:192.168.42.1</literal> as
- the address.
- </para>
- </section>
- <section><info><title>Address to Name Lookups Using Nibble Format</title></info>
-
- <para>
- When looking up an address in nibble format, the address
- components are simply reversed, just as in IPv4, and
- <literal>ip6.arpa.</literal> is appended to the
- resulting name.
- For example, the following would provide reverse name lookup for
- a host with address
- <literal>2001:db8::1</literal>.
- </para>
-
-<programlisting>
-$ORIGIN 0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.
-1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 14400 IN PTR (
- host.example.com. )
-</programlisting>
-
- </section>
- </section>
- </chapter>
-
- <chapter xml:id="Bv9ARM.ch05"><info><title>The <acronym>BIND</acronym> 9 Lightweight Resolver</title></info>
-
- <section xml:id="lightweight_resolver"><info><title>The Lightweight Resolver Library</title></info>
-
- <para>
- Traditionally applications have been linked with a stub resolver
- library that sends recursive DNS queries to a local caching name
- server.
- </para>
- <para>
- IPv6 once introduced new complexity into the resolution process,
- such as following A6 chains and DNAME records, and simultaneous
- lookup of IPv4 and IPv6 addresses. Though most of the complexity was
- then removed, these are hard or impossible
- to implement in a traditional stub resolver.
- </para>
- <para>
- <acronym>BIND</acronym> 9 therefore can also provide resolution
- services to local clients
- using a combination of a lightweight resolver library and a resolver
- daemon process running on the local host. These communicate using
- a simple UDP-based protocol, the "lightweight resolver protocol"
- that is distinct from and simpler than the full DNS protocol.
- </para>
- </section>
- <section xml:id="lwresd"><info><title>Running a Resolver Daemon</title></info>
-
- <para>
- To use the lightweight resolver interface, the system must
- run the resolver daemon <command>lwresd</command> or a
- local
- name server configured with a <command>lwres</command>
- statement.
- </para>
-
- <para>
- By default, applications using the lightweight resolver library will
- make
- UDP requests to the IPv4 loopback address (127.0.0.1) on port 921.
- The
- address can be overridden by <command>lwserver</command>
- lines in
- <filename>/etc/resolv.conf</filename>.
- </para>
-
- <para>
- The daemon currently only looks in the DNS, but in the future
- it may use other sources such as <filename>/etc/hosts</filename>,
- NIS, etc.
- </para>
-
- <para>
- The <command>lwresd</command> daemon is essentially a
- caching-only name server that responds to requests using the
- lightweight
- resolver protocol rather than the DNS protocol. Because it needs
- to run on each host, it is designed to require no or minimal
- configuration.
- Unless configured otherwise, it uses the name servers listed on
- <command>nameserver</command> lines in <filename>/etc/resolv.conf</filename>
- as forwarders, but is also capable of doing the resolution
- autonomously if
- none are specified.
- </para>
- <para>
- The <command>lwresd</command> daemon may also be
- configured with a
- <filename>named.conf</filename> style configuration file,
- in
- <filename>/etc/lwresd.conf</filename> by default. A name
- server may also
- be configured to act as a lightweight resolver daemon using the
- <command>lwres</command> statement in <filename>named.conf</filename>.
- </para>
- <para>
- The number of client queries that the <command>lwresd</command>
- daemon is able to serve can be set using the
- <option>lwres-tasks</option> and <option>lwres-clients</option>
- statements in the configuration.
- </para>
- </section>
- </chapter>
-
- <chapter xml:id="Bv9ARM.ch06"><info><title><acronym>BIND</acronym> 9 Configuration Reference</title></info>
-
- <para>
- <acronym>BIND</acronym> 9 configuration is broadly similar
- to <acronym>BIND</acronym> 8; however, there are a few new
- areas
- of configuration, such as views. <acronym>BIND</acronym>
- 8 configuration files should work with few alterations in <acronym>BIND</acronym>
- 9, although more complex configurations should be reviewed to check
- if they can be more efficiently implemented using the new features
- found in <acronym>BIND</acronym> 9.
- </para>
-
- <para>
- <acronym>BIND</acronym> 4 configuration files can be
- converted to the new format
- using the shell script
- <filename>contrib/named-bootconf/named-bootconf.sh</filename>.
- </para>
- <section xml:id="configuration_file_elements"><info><title>Configuration File Elements</title></info>
-
- <para>
- Following is a list of elements used throughout the <acronym>BIND</acronym> configuration
- file documentation:
- </para>
- <informaltable colsep="0" rowsep="0">
- <tgroup cols="2" colsep="0" rowsep="0" tgroupstyle="2Level-table">
- <colspec colname="1" colnum="1" colsep="0" colwidth="1.855in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="3.770in"/>
- <tbody>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>acl_name</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- The name of an <varname>address_match_list</varname> as
- defined by the <command>acl</command> statement.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>address_match_list</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- A list of one or more
- <varname>ip_addr</varname>,
- <varname>ip_prefix</varname>, <varname>key_id</varname>,
- or <varname>acl_name</varname> elements, see
- <xref linkend="address_match_lists"/>.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>masters_list</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- A named list of one or more <varname>ip_addr</varname>
- with optional <varname>key_id</varname> and/or
- <varname>ip_port</varname>.
- A <varname>masters_list</varname> may include other
- <varname>masters_lists</varname>.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>domain_name</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- A quoted string which will be used as
- a DNS name, for example "<literal>my.test.domain</literal>".
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>namelist</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- A list of one or more <varname>domain_name</varname>
- elements.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>dotted_decimal</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- One to four integers valued 0 through
- 255 separated by dots (`.'), such as <command>123</command>,
- <command>45.67</command> or <command>89.123.45.67</command>.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>ip4_addr</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- An IPv4 address with exactly four elements
- in <varname>dotted_decimal</varname> notation.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>ip6_addr</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- An IPv6 address, such as <command>2001:db8::1234</command>.
- IPv6 scoped addresses that have ambiguity on their
- scope zones must be disambiguated by an appropriate
- zone ID with the percent character (`%') as
- delimiter. It is strongly recommended to use
- string zone names rather than numeric identifiers,
- in order to be robust against system configuration
- changes. However, since there is no standard
- mapping for such names and identifier values,
- currently only interface names as link identifiers
- are supported, assuming one-to-one mapping between
- interfaces and links. For example, a link-local
- address <command>fe80::1</command> on the link
- attached to the interface <command>ne0</command>
- can be specified as <command>fe80::1%ne0</command>.
- Note that on most systems link-local addresses
- always have the ambiguity, and need to be
- disambiguated.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>ip_addr</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- An <varname>ip4_addr</varname> or <varname>ip6_addr</varname>.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>ip_dscp</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- A <varname>number</varname> between 0 and 63, used
- to select a differentiated services code point (DSCP)
- value for use with outgoing traffic on operating systems
- that support DSCP.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>ip_port</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- An IP port <varname>number</varname>.
- The <varname>number</varname> is limited to 0
- through 65535, with values
- below 1024 typically restricted to use by processes running
- as root.
- In some cases, an asterisk (`*') character can be used as a
- placeholder to
- select a random high-numbered port.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>ip_prefix</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- An IP network specified as an <varname>ip_addr</varname>,
- followed by a slash (`/') and then the number of bits in the
- netmask.
- Trailing zeros in a <varname>ip_addr</varname>
- may omitted.
- For example, <command>127/8</command> is the
- network <command>127.0.0.0</command> with
- netmask <command>255.0.0.0</command> and <command>1.2.3.0/28</command> is
- network <command>1.2.3.0</command> with netmask <command>255.255.255.240</command>.
- </para>
- <para>
- When specifying a prefix involving a IPv6 scoped address
- the scope may be omitted. In that case the prefix will
- match packets from any scope.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>key_id</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- A <varname>domain_name</varname> representing
- the name of a shared key, to be used for transaction
- security.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>key_list</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- A list of one or more
- <varname>key_id</varname>s,
- separated by semicolons and ending with a semicolon.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>number</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- A non-negative 32-bit integer
- (i.e., a number between 0 and 4294967295, inclusive).
- Its acceptable value might further
- be limited by the context in which it is used.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>path_name</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- A quoted string which will be used as
- a pathname, such as <filename>zones/master/my.test.domain</filename>.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>port_list</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- A list of an <varname>ip_port</varname> or a port
- range.
- A port range is specified in the form of
- <userinput>range</userinput> followed by
- two <varname>ip_port</varname>s,
- <varname>port_low</varname> and
- <varname>port_high</varname>, which represents
- port numbers from <varname>port_low</varname> through
- <varname>port_high</varname>, inclusive.
- <varname>port_low</varname> must not be larger than
- <varname>port_high</varname>.
- For example,
- <userinput>range 1024 65535</userinput> represents
- ports from 1024 through 65535.
- In either case an asterisk (`*') character is not
- allowed as a valid <varname>ip_port</varname>.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>size_spec</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- A 64-bit unsigned integer, or the keywords
- <userinput>unlimited</userinput> or
- <userinput>default</userinput>.
- </para>
- <para>
- Integers may take values
- 0 &lt;= value &lt;= 18446744073709551615, though
- certain parameters
- (such as <command>max-journal-size</command>) may
- use a more limited range within these extremes.
- In most cases, setting a value to 0 does not
- literally mean zero; it means "undefined" or
- "as big as possible", depending on the context.
- See the explanations of particular parameters
- that use <varname>size_spec</varname>
- for details on how they interpret its use.
- </para>
- <para>
- Numeric values can optionally be followed by a
- scaling factor:
- <userinput>K</userinput> or <userinput>k</userinput>
- for kilobytes,
- <userinput>M</userinput> or <userinput>m</userinput>
- for megabytes, and
- <userinput>G</userinput> or <userinput>g</userinput>
- for gigabytes, which scale by 1024, 1024*1024, and
- 1024*1024*1024 respectively.
- </para>
- <para>
- <varname>unlimited</varname> generally means
- "as big as possible", and is usually the best
- way to safely set a very large number.
- </para>
- <para>
- <varname>default</varname>
- uses the limit that was in force when the server was started.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>size_or_percent</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- <varname>size_spec</varname> or integer value
- followed by '%' to represent percents.
- </para>
- <para>
- The behavior is exactly the same as
- <varname>size_spec</varname>, but
- <varname>size_or_percent</varname> allows also
- to specify a positive integer value followed by
- '%' sign to represent percents.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>yes_or_no</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- Either <userinput>yes</userinput> or <userinput>no</userinput>.
- The words <userinput>true</userinput> and <userinput>false</userinput> are
- also accepted, as are the numbers <userinput>1</userinput>
- and <userinput>0</userinput>.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>dialup_option</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- One of <userinput>yes</userinput>,
- <userinput>no</userinput>, <userinput>notify</userinput>,
- <userinput>notify-passive</userinput>, <userinput>refresh</userinput> or
- <userinput>passive</userinput>.
- When used in a zone, <userinput>notify-passive</userinput>,
- <userinput>refresh</userinput>, and <userinput>passive</userinput>
- are restricted to slave and stub zones.
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- <section xml:id="address_match_lists"><info><title>Address Match Lists</title></info>
-
- <section><info><title>Syntax</title></info>
-
-<programlisting><varname>address_match_list</varname> = address_match_list_element ;
- <optional> address_match_list_element; ... </optional>
-<varname>address_match_list_element</varname> = <optional> ! </optional> (ip_address <optional>/length</optional> |
- key key_id | acl_name | { address_match_list } )
-</programlisting>
-
- </section>
- <section><info><title>Definition and Usage</title></info>
-
- <para>
- Address match lists are primarily used to determine access
- control for various server operations. They are also used in
- the <command>listen-on</command> and <command>sortlist</command>
- statements. The elements which constitute an address match
- list can be any of the following:
- </para>
- <itemizedlist>
- <listitem>
- <simpara>an IP address (IPv4 or IPv6)</simpara>
- </listitem>
- <listitem>
- <simpara>an IP prefix (in `/' notation)</simpara>
- </listitem>
- <listitem>
- <simpara>
- a key ID, as defined by the <command>key</command>
- statement
- </simpara>
- </listitem>
- <listitem>
- <simpara>the name of an address match list defined with
- the <command>acl</command> statement
- </simpara>
- </listitem>
- <listitem>
- <simpara>a nested address match list enclosed in braces</simpara>
- </listitem>
- </itemizedlist>
-
- <para>
- Elements can be negated with a leading exclamation mark (`!'),
- and the match list names "any", "none", "localhost", and
- "localnets" are predefined. More information on those names
- can be found in the description of the acl statement.
- </para>
-
- <para>
- The addition of the key clause made the name of this syntactic
- element something of a misnomer, since security keys can be used
- to validate access without regard to a host or network address.
- Nonetheless, the term "address match list" is still used
- throughout the documentation.
- </para>
-
- <para>
- When a given IP address or prefix is compared to an address
- match list, the comparison takes place in approximately O(1)
- time. However, key comparisons require that the list of keys
- be traversed until a matching key is found, and therefore may
- be somewhat slower.
- </para>
-
- <para>
- The interpretation of a match depends on whether the list is being
- used for access control, defining <command>listen-on</command> ports, or in a
- <command>sortlist</command>, and whether the element was negated.
- </para>
-
- <para>
- When used as an access control list, a non-negated match
- allows access and a negated match denies access. If
- there is no match, access is denied. The clauses
- <command>allow-notify</command>,
- <command>allow-recursion</command>,
- <command>allow-recursion-on</command>,
- <command>allow-query</command>,
- <command>allow-query-on</command>,
- <command>allow-query-cache</command>,
- <command>allow-query-cache-on</command>,
- <command>allow-transfer</command>,
- <command>allow-update</command>,
- <command>allow-update-forwarding</command>,
- <command>blackhole</command>, and
- <command>keep-response-order</command> all use address match
- lists. Similarly, the <command>listen-on</command> option will cause the
- server to refuse queries on any of the machine's
- addresses which do not match the list.
- </para>
-
- <para>
- Order of insertion is significant. If more than one element
- in an ACL is found to match a given IP address or prefix,
- preference will be given to the one that came
- <emphasis>first</emphasis> in the ACL definition.
- Because of this first-match behavior, an element that
- defines a subset of another element in the list should
- come before the broader element, regardless of whether
- either is negated. For example, in
- <command>1.2.3/24; ! 1.2.3.13;</command>
- the 1.2.3.13 element is completely useless because the
- algorithm will match any lookup for 1.2.3.13 to the 1.2.3/24
- element. Using <command>! 1.2.3.13; 1.2.3/24</command> fixes
- that problem by having 1.2.3.13 blocked by the negation, but
- all other 1.2.3.* hosts fall through.
- </para>
- </section>
- </section>
-
- <section xml:id="comment_syntax"><info><title>Comment Syntax</title></info>
-
- <para>
- The <acronym>BIND</acronym> 9 comment syntax allows for
- comments to appear
- anywhere that whitespace may appear in a <acronym>BIND</acronym> configuration
- file. To appeal to programmers of all kinds, they can be written
- in the C, C++, or shell/perl style.
- </para>
-
- <section><info><title>Syntax</title></info>
-
- <para>
- <programlisting>/* This is a <acronym>BIND</acronym> comment as in C */</programlisting>
- <programlisting>// This is a <acronym>BIND</acronym> comment as in C++</programlisting>
- <programlisting># This is a <acronym>BIND</acronym> comment as in common UNIX shells
-# and perl</programlisting>
- </para>
- </section>
- <section><info><title>Definition and Usage</title></info>
-
- <para>
- Comments may appear anywhere that whitespace may appear in
- a <acronym>BIND</acronym> configuration file.
- </para>
- <para>
- C-style comments start with the two characters /* (slash,
- star) and end with */ (star, slash). Because they are completely
- delimited with these characters, they can be used to comment only
- a portion of a line or to span multiple lines.
- </para>
- <para>
- C-style comments cannot be nested. For example, the following
- is not valid because the entire comment ends with the first */:
- </para>
- <para>
-
-<programlisting>/* This is the start of a comment.
- This is still part of the comment.
-/* This is an incorrect attempt at nesting a comment. */
- This is no longer in any comment. */
-</programlisting>
-
- </para>
-
- <para>
- C++-style comments start with the two characters // (slash,
- slash) and continue to the end of the physical line. They cannot
- be continued across multiple physical lines; to have one logical
- comment span multiple lines, each line must use the // pair.
- For example:
- </para>
- <para>
-
-<programlisting>// This is the start of a comment. The next line
-// is a new comment, even though it is logically
-// part of the previous comment.
-</programlisting>
-
- </para>
- <para>
- Shell-style (or perl-style, if you prefer) comments start
- with the character <literal>#</literal> (number sign)
- and continue to the end of the
- physical line, as in C++ comments.
- For example:
- </para>
-
- <para>
-
-<programlisting># This is the start of a comment. The next line
-# is a new comment, even though it is logically
-# part of the previous comment.
-</programlisting>
-
- </para>
-
- <warning>
- <para>
- You cannot use the semicolon (`;') character
- to start a comment such as you would in a zone file. The
- semicolon indicates the end of a configuration
- statement.
- </para>
- </warning>
- </section>
- </section>
- </section>
-
- <section xml:id="Configuration_File_Grammar"><info><title>Configuration File Grammar</title></info>
-
- <para>
- A <acronym>BIND</acronym> 9 configuration consists of
- statements and comments.
- Statements end with a semicolon. Statements and comments are the
- only elements that can appear without enclosing braces. Many
- statements contain a block of sub-statements, which are also
- terminated with a semicolon.
- </para>
-
- <para>
- The following statements are supported:
- </para>
-
- <informaltable colsep="0" rowsep="0">
- <tgroup cols="2" colsep="0" rowsep="0" tgroupstyle="2Level-table">
- <colspec colname="1" colnum="1" colsep="0" colwidth="1.336in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="3.778in"/>
- <tbody>
- <row rowsep="0">
- <entry colname="1">
- <para><command>acl</command></para>
- </entry>
- <entry colname="2">
- <para>
- defines a named IP address
- matching list, for access control and other uses.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>controls</command></para>
- </entry>
- <entry colname="2">
- <para>
- declares control channels to be used
- by the <command>rndc</command> utility.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>include</command></para>
- </entry>
- <entry colname="2">
- <para>
- includes a file.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>key</command></para>
- </entry>
- <entry colname="2">
- <para>
- specifies key information for use in
- authentication and authorization using TSIG.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>logging</command></para>
- </entry>
- <entry colname="2">
- <para>
- specifies what the server logs, and where
- the log messages are sent.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>lwres</command></para>
- </entry>
- <entry colname="2">
- <para>
- configures <command>named</command> to
- also act as a light-weight resolver daemon (<command>lwresd</command>).
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>masters</command></para>
- </entry>
- <entry colname="2">
- <para>
- defines a named masters list for
- inclusion in stub and slave zones'
- <command>masters</command> or
- <command>also-notify</command> lists.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>options</command></para>
- </entry>
- <entry colname="2">
- <para>
- controls global server configuration
- options and sets defaults for other statements.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>server</command></para>
- </entry>
- <entry colname="2">
- <para>
- sets certain configuration options on
- a per-server basis.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>statistics-channels</command></para>
- </entry>
- <entry colname="2">
- <para>
- declares communication channels to get access to
- <command>named</command> statistics.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>trusted-keys</command></para>
- </entry>
- <entry colname="2">
- <para>
- defines trusted DNSSEC keys.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>managed-keys</command></para>
- </entry>
- <entry colname="2">
- <para>
- lists DNSSEC keys to be kept up to date
- using RFC 5011 trust anchor maintenance.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>view</command></para>
- </entry>
- <entry colname="2">
- <para>
- defines a view.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>zone</command></para>
- </entry>
- <entry colname="2">
- <para>
- defines a zone.
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>
- The <command>logging</command> and
- <command>options</command> statements may only occur once
- per
- configuration.
- </para>
-
- <section xml:id="acl_grammar"><info><title><command>acl</command> Statement Grammar</title></info>
-
-<programlisting><command>acl</command> acl-name {
- address_match_list
-};
-</programlisting>
-
- </section>
- <section xml:id="acl"><info><title><command>acl</command> Statement Definition and
- Usage</title></info>
-
- <para>
- The <command>acl</command> statement assigns a symbolic
- name to an address match list. It gets its name from a primary
- use of address match lists: Access Control Lists (ACLs).
- </para>
-
- <para>
- The following ACLs are built-in:
- </para>
-
- <informaltable colsep="0" rowsep="0">
- <tgroup cols="2" colsep="0" rowsep="0" tgroupstyle="3Level-table">
- <colspec colname="1" colnum="1" colsep="0" colwidth="1.130in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="4.000in"/>
- <tbody>
- <row rowsep="0">
- <entry colname="1">
- <para><command>any</command></para>
- </entry>
- <entry colname="2">
- <para>
- Matches all hosts.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>none</command></para>
- </entry>
- <entry colname="2">
- <para>
- Matches no hosts.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>localhost</command></para>
- </entry>
- <entry colname="2">
- <para>
- Matches the IPv4 and IPv6 addresses of all network
- interfaces on the system. When addresses are
- added or removed, the <command>localhost</command>
- ACL element is updated to reflect the changes.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>localnets</command></para>
- </entry>
- <entry colname="2">
- <para>
- Matches any host on an IPv4 or IPv6 network
- for which the system has an interface.
- When addresses are added or removed,
- the <command>localnets</command>
- ACL element is updated to reflect the changes.
- Some systems do not provide a way to determine the prefix
- lengths of
- local IPv6 addresses.
- In such a case, <command>localnets</command>
- only matches the local
- IPv6 addresses, just like <command>localhost</command>.
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </section>
- <section xml:id="controls_grammar"><info><title><command>controls</command> Statement Grammar</title></info>
-
-<programlisting><command>controls</command> {
- [ inet ( ip_addr | * ) [ port ip_port ]
- allow { <replaceable> address_match_list </replaceable> }
- [ keys { <replaceable>key_list</replaceable> } ]
- [ read-only <replaceable>yes_or_no</replaceable> ] ; ]
- [ inet ...; ]
- [ unix <replaceable>path</replaceable> perm <replaceable>number</replaceable> owner <replaceable>number</replaceable> group <replaceable>number</replaceable>
- [ keys { <replaceable>key_list</replaceable> } ]
- [ read-only <replaceable>yes_or_no</replaceable> ] ; ]
- [ unix ...; ]
-};
-</programlisting>
-
- </section>
-
- <section xml:id="controls_statement_definition_and_usage"><info><title><command>controls</command> Statement Definition and
- Usage</title></info>
-
- <para>
- The <command>controls</command> statement declares control
- channels to be used by system administrators to control the
- operation of the name server. These control channels are
- used by the <command>rndc</command> utility to send
- commands to and retrieve non-DNS results from a name server.
- </para>
-
- <para>
- An <command>inet</command> control channel is a TCP socket
- listening at the specified <command>ip_port</command> on the
- specified <command>ip_addr</command>, which can be an IPv4 or IPv6
- address. An <command>ip_addr</command> of <literal>*</literal> (asterisk) is
- interpreted as the IPv4 wildcard address; connections will be
- accepted on any of the system's IPv4 addresses.
- To listen on the IPv6 wildcard address,
- use an <command>ip_addr</command> of <literal>::</literal>.
- If you will only use <command>rndc</command> on the local host,
- using the loopback address (<literal>127.0.0.1</literal>
- or <literal>::1</literal>) is recommended for maximum security.
- </para>
-
- <para>
- If no port is specified, port 953 is used. The asterisk
- "<literal>*</literal>" cannot be used for <command>ip_port</command>.
- </para>
-
- <para>
- The ability to issue commands over the control channel is
- restricted by the <command>allow</command> and
- <command>keys</command> clauses.
- Connections to the control channel are permitted based on the
- <command>address_match_list</command>. This is for simple
- IP address based filtering only; any <command>key_id</command>
- elements of the <command>address_match_list</command>
- are ignored.
- </para>
-
- <para>
- A <command>unix</command> control channel is a UNIX domain
- socket listening at the specified path in the file system.
- Access to the socket is specified by the <command>perm</command>,
- <command>owner</command> and <command>group</command> clauses.
- Note on some platforms (SunOS and Solaris) the permissions
- (<command>perm</command>) are applied to the parent directory
- as the permissions on the socket itself are ignored.
- </para>
-
- <para>
- The primary authorization mechanism of the command
- channel is the <command>key_list</command>, which
- contains a list of <command>key_id</command>s.
- Each <command>key_id</command> in the <command>key_list</command>
- is authorized to execute commands over the control channel.
- See <xref linkend="rndc"/> in <xref linkend="admin_tools"/>)
- for information about configuring keys in <command>rndc</command>.
- </para>
-
- <para>
- If the <command>read-only</command> clause is enabled, the
- control channel is limited to the following set of read-only
- commands: <command>nta -dump</command>,
- <command>null</command>, <command>status</command>,
- <command>showzone</command>, <command>testgen</command>, and
- <command>zonestatus</command>. By default,
- <command>read-only</command> is not enabled and the control
- channel allows read-write access.
- </para>
-
- <para>
- If no <command>controls</command> statement is present,
- <command>named</command> will set up a default
- control channel listening on the loopback address 127.0.0.1
- and its IPv6 counterpart ::1.
- In this case, and also when the <command>controls</command> statement
- is present but does not have a <command>keys</command> clause,
- <command>named</command> will attempt to load the command channel key
- from the file <filename>rndc.key</filename> in
- <filename>/etc</filename> (or whatever <varname>sysconfdir</varname>
- was specified as when <acronym>BIND</acronym> was built).
- To create a <filename>rndc.key</filename> file, run
- <userinput>rndc-confgen -a</userinput>.
- </para>
-
- <para>
- The <filename>rndc.key</filename> feature was created to
- ease the transition of systems from <acronym>BIND</acronym> 8,
- which did not have digital signatures on its command channel
- messages and thus did not have a <command>keys</command> clause.
-
- It makes it possible to use an existing <acronym>BIND</acronym> 8
- configuration file in <acronym>BIND</acronym> 9 unchanged,
- and still have <command>rndc</command> work the same way
- <command>ndc</command> worked in BIND 8, simply by executing the
- command <userinput>rndc-confgen -a</userinput> after BIND 9 is
- installed.
- </para>
-
- <para>
- Since the <filename>rndc.key</filename> feature
- is only intended to allow the backward-compatible usage of
- <acronym>BIND</acronym> 8 configuration files, this
- feature does not
- have a high degree of configurability. You cannot easily change
- the key name or the size of the secret, so you should make a
- <filename>rndc.conf</filename> with your own key if you
- wish to change
- those things. The <filename>rndc.key</filename> file
- also has its
- permissions set such that only the owner of the file (the user that
- <command>named</command> is running as) can access it.
- If you
- desire greater flexibility in allowing other users to access
- <command>rndc</command> commands, then you need to create
- a
- <filename>rndc.conf</filename> file and make it group
- readable by a group
- that contains the users who should have access.
- </para>
-
- <para>
- To disable the command channel, use an empty
- <command>controls</command> statement:
- <command>controls { };</command>.
- </para>
-
- </section>
- <section xml:id="include_grammar"><info><title><command>include</command> Statement Grammar</title></info>
-
- <programlisting><command>include</command> <replaceable>filename</replaceable>;</programlisting>
- </section>
- <section xml:id="include_statement"><info><title><command>include</command> Statement Definition and Usage</title></info>
-
- <para>
- The <command>include</command> statement inserts the
- specified file at the point where the <command>include</command>
- statement is encountered. The <command>include</command>
- statement facilitates the administration of configuration
- files
- by permitting the reading or writing of some things but not
- others. For example, the statement could include private keys
- that are readable only by the name server.
- </para>
-
- </section>
- <section xml:id="key_grammar"><info><title><command>key</command> Statement Grammar</title></info>
-
-<programlisting><command>key</command> <replaceable>key_id</replaceable> {
- algorithm <replaceable>algorithm_id</replaceable>;
- secret <replaceable>secret_string</replaceable>;
-};
-</programlisting>
-
- </section>
-
- <section xml:id="key_statement"><info><title><command>key</command> Statement Definition and Usage</title></info>
-
- <para>
- The <command>key</command> statement defines a shared
- secret key for use with TSIG (see <xref linkend="tsig"/>)
- or the command channel
- (see <xref linkend="controls_statement_definition_and_usage"/>).
- </para>
-
- <para>
- The <command>key</command> statement can occur at the
- top level
- of the configuration file or inside a <command>view</command>
- statement. Keys defined in top-level <command>key</command>
- statements can be used in all views. Keys intended for use in
- a <command>controls</command> statement
- (see <xref linkend="controls_statement_definition_and_usage"/>)
- must be defined at the top level.
- </para>
-
- <para>
- The <replaceable>key_id</replaceable>, also known as the
- key name, is a domain name uniquely identifying the key. It can
- be used in a <command>server</command>
- statement to cause requests sent to that
- server to be signed with this key, or in address match lists to
- verify that incoming requests have been signed with a key
- matching this name, algorithm, and secret.
- </para>
-
- <para>
- The <replaceable>algorithm_id</replaceable> is a string
- that specifies a security/authentication algorithm. The
- <command>named</command> server supports <literal>hmac-md5</literal>,
- <literal>hmac-sha1</literal>, <literal>hmac-sha224</literal>,
- <literal>hmac-sha256</literal>, <literal>hmac-sha384</literal>
- and <literal>hmac-sha512</literal> TSIG authentication.
- Truncated hashes are supported by appending the minimum
- number of required bits preceded by a dash, e.g.
- <literal>hmac-sha1-80</literal>. The
- <replaceable>secret_string</replaceable> is the secret
- to be used by the algorithm, and is treated as a base-64
- encoded string.
- </para>
-
- </section>
- <section xml:id="logging_grammar"><info><title><command>logging</command> Statement Grammar</title></info>
-
-<programlisting><command>logging</command> {
- [ <command>channel</command> <replaceable>channel_name</replaceable> {
- ( <command>file</command> <replaceable>path_name</replaceable>
- [ <command>versions</command> ( <replaceable>number</replaceable> | <command>unlimited</command> ) ]
- [ <command>size</command> <replaceable>size_spec</replaceable> ]
- | <command>syslog</command> <replaceable>syslog_facility</replaceable>
- | <command>stderr</command>
- | <command>null</command> );
- [ <command>severity</command> (<option>critical</option> | <option>error</option> | <option>warning</option> | <option>notice</option> |
- <option>info</option> | <option>debug</option> [ <replaceable>level</replaceable> ] | <option>dynamic</option> ); ]
- [ <command>print-category</command> <option>yes</option> or <option>no</option>; ]
- [ <command>print-severity</command> <option>yes</option> or <option>no</option>; ]
- [ <command>print-time</command> <option>yes</option> or <option>no</option>; ]
- [ <command>buffered</command> <option>yes</option> or <option>no</option>; ]
- }; ]
- [ <command>category</command> <replaceable>category_name</replaceable> {
- <replaceable>channel_name</replaceable> ; [ <replaceable>channel_name</replaceable> ; ... ]
- }; ]
- ...
-};
-</programlisting>
-
- </section>
-
- <section xml:id="logging_statement"><info><title><command>logging</command> Statement Definition and Usage</title></info>
-
- <para>
- The <command>logging</command> statement configures a
- wide
- variety of logging options for the name server. Its <command>channel</command> phrase
- associates output methods, format options and severity levels with
- a name that can then be used with the <command>category</command> phrase
- to select how various classes of messages are logged.
- </para>
- <para>
- Only one <command>logging</command> statement is used to
- define
- as many channels and categories as are wanted. If there is no <command>logging</command> statement,
- the logging configuration will be:
- </para>
-
-<programlisting>logging {
- category default { default_syslog; default_debug; };
- category unmatched { null; };
-};
-</programlisting>
-
- <para>
- If <command>named</command> is started with the
- <option>-L</option> option, it logs to the specified file
- at startup, instead of using syslog. In this case the logging
- configuration will be:
- </para>
-
-<programlisting>logging {
- category default { default_logfile; default_debug; };
- category unmatched { null; };
-};
-</programlisting>
-
- <para>
- In <acronym>BIND</acronym> 9, the logging configuration
- is only established when
- the entire configuration file has been parsed. In <acronym>BIND</acronym> 8, it was
- established as soon as the <command>logging</command>
- statement
- was parsed. When the server is starting up, all logging messages
- regarding syntax errors in the configuration file go to the default
- channels, or to standard error if the <option>-g</option> option
- was specified.
- </para>
-
- <section xml:id="channel"><info><title>The <command>channel</command> Phrase</title></info>
-
- <para>
- All log output goes to one or more <emphasis>channels</emphasis>;
- you can make as many of them as you want.
- </para>
-
- <para>
- Every channel definition must include a destination clause that
- says whether messages selected for the channel go to a file, to a
- particular syslog facility, to the standard error stream, or are
- discarded. It can optionally also limit the message severity level
- that will be accepted by the channel (the default is
- <command>info</command>), and whether to include a
- <command>named</command>-generated time stamp, the
- category name
- and/or severity level (the default is not to include any).
- </para>
-
- <para>
- The <command>null</command> destination clause
- causes all messages sent to the channel to be discarded;
- in that case, other options for the channel are meaningless.
- </para>
-
- <para>
- The <command>file</command> destination clause directs
- the channel
- to a disk file. It can include limitations
- both on how large the file is allowed to become, and how many
- versions
- of the file will be saved each time the file is opened.
- </para>
-
- <para>
- If you use the <command>versions</command> log file
- option, then
- <command>named</command> will retain that many backup
- versions of the file by
- renaming them when opening. For example, if you choose to keep
- three old versions
- of the file <filename>lamers.log</filename>, then just
- before it is opened
- <filename>lamers.log.1</filename> is renamed to
- <filename>lamers.log.2</filename>, <filename>lamers.log.0</filename> is renamed
- to <filename>lamers.log.1</filename>, and <filename>lamers.log</filename> is
- renamed to <filename>lamers.log.0</filename>.
- You can say <command>versions unlimited</command> to
- not limit
- the number of versions.
- If a <command>size</command> option is associated with
- the log file,
- then renaming is only done when the file being opened exceeds the
- indicated size. No backup versions are kept by default; any
- existing
- log file is simply appended.
- </para>
-
- <para>
- The <command>size</command> option for files is used
- to limit log
- growth. If the file ever exceeds the size, then <command>named</command> will
- stop writing to the file unless it has a <command>versions</command> option
- associated with it. If backup versions are kept, the files are
- rolled as
- described above and a new one begun. If there is no
- <command>versions</command> option, no more data will
- be written to the log
- until some out-of-band mechanism removes or truncates the log to
- less than the
- maximum size. The default behavior is not to limit the size of
- the
- file.
- </para>
-
- <para>
- Example usage of the <command>size</command> and
- <command>versions</command> options:
- </para>
-
-<programlisting>channel an_example_channel {
- file "example.log" versions 3 size 20m;
- print-time yes;
- print-category yes;
-};
-</programlisting>
-
- <para>
- The <command>syslog</command> destination clause
- directs the
- channel to the system log. Its argument is a
- syslog facility as described in the <command>syslog</command> man
- page. Known facilities are <command>kern</command>, <command>user</command>,
- <command>mail</command>, <command>daemon</command>, <command>auth</command>,
- <command>syslog</command>, <command>lpr</command>, <command>news</command>,
- <command>uucp</command>, <command>cron</command>, <command>authpriv</command>,
- <command>ftp</command>, <command>local0</command>, <command>local1</command>,
- <command>local2</command>, <command>local3</command>, <command>local4</command>,
- <command>local5</command>, <command>local6</command> and
- <command>local7</command>, however not all facilities
- are supported on
- all operating systems.
- How <command>syslog</command> will handle messages
- sent to
- this facility is described in the <command>syslog.conf</command> man
- page. If you have a system which uses a very old version of <command>syslog</command> that
- only uses two arguments to the <command>openlog()</command> function,
- then this clause is silently ignored.
- </para>
- <para>
- On Windows machines syslog messages are directed to the EventViewer.
- </para>
- <para>
- The <command>severity</command> clause works like <command>syslog</command>'s
- "priorities", except that they can also be used if you are writing
- straight to a file rather than using <command>syslog</command>.
- Messages which are not at least of the severity level given will
- not be selected for the channel; messages of higher severity
- levels
- will be accepted.
- </para>
- <para>
- If you are using <command>syslog</command>, then the <command>syslog.conf</command> priorities
- will also determine what eventually passes through. For example,
- defining a channel facility and severity as <command>daemon</command> and <command>debug</command> but
- only logging <command>daemon.warning</command> via <command>syslog.conf</command> will
- cause messages of severity <command>info</command> and
- <command>notice</command> to
- be dropped. If the situation were reversed, with <command>named</command> writing
- messages of only <command>warning</command> or higher,
- then <command>syslogd</command> would
- print all messages it received from the channel.
- </para>
-
- <para>
- The <command>stderr</command> destination clause
- directs the
- channel to the server's standard error stream. This is intended
- for
- use when the server is running as a foreground process, for
- example
- when debugging a configuration.
- </para>
-
- <para>
- The server can supply extensive debugging information when
- it is in debugging mode. If the server's global debug level is
- greater
- than zero, then debugging mode will be active. The global debug
- level is set either by starting the <command>named</command> server
- with the <option>-d</option> flag followed by a positive integer,
- or by running <command>rndc trace</command>.
- The global debug level
- can be set to zero, and debugging mode turned off, by running <command>rndc
-notrace</command>. All debugging messages in the server have a debug
- level, and higher debug levels give more detailed output. Channels
- that specify a specific debug severity, for example:
- </para>
-
-<programlisting>channel specific_debug_level {
- file "foo";
- severity debug 3;
-};
-</programlisting>
-
- <para>
- will get debugging output of level 3 or less any time the
- server is in debugging mode, regardless of the global debugging
- level. Channels with <command>dynamic</command>
- severity use the
- server's global debug level to determine what messages to print.
- </para>
- <para>
- If <command>print-time</command> has been turned on,
- then
- the date and time will be logged. <command>print-time</command> may
- be specified for a <command>syslog</command> channel,
- but is usually
- pointless since <command>syslog</command> also logs
- the date and
- time. If <command>print-category</command> is
- requested, then the
- category of the message will be logged as well. Finally, if <command>print-severity</command> is
- on, then the severity level of the message will be logged. The <command>print-</command> options may
- be used in any combination, and will always be printed in the
- following
- order: time, category, severity. Here is an example where all
- three <command>print-</command> options
- are on:
- </para>
-
- <para>
- <computeroutput>28-Feb-2000 15:05:32.863 general: notice: running</computeroutput>
- </para>
-
- <para>
- If <command>buffered</command> has been turned on the output
- to files will not be flushed after each log entry. By default
- all log messages are flushed.
- </para>
-
- <para>
- There are four predefined channels that are used for
- <command>named</command>'s default logging as follows.
- If <command>named</command> is started with the
- <option>-L</option> then a
- fifth channel <command>default_logfile</command> is added.
- How they are
- used is described in <xref linkend="the_category_phrase"/>.
- </para>
-
-<programlisting>channel default_syslog {
- // send to syslog's daemon facility
- syslog daemon;
- // only send priority info and higher
- severity info;
-
-channel default_debug {
- // write to named.run in the working directory
- // Note: stderr is used instead of "named.run" if
- // the server is started with the '-g' option.
- file "named.run";
- // log at the server's current debug level
- severity dynamic;
-};
-
-channel default_stderr {
- // writes to stderr
- stderr;
- // only send priority info and higher
- severity info;
-};
-
-channel null {
- // toss anything sent to this channel
- null;
-};
-
-channel default_logfile {
- // this channel is only present if named is
- // started with the -L option, whose argument
- // provides the file name
- file "...";
- // log at the server's current debug level
- severity dynamic;
-};
-</programlisting>
-
- <para>
- The <command>default_debug</command> channel has the
- special
- property that it only produces output when the server's debug
- level is
- nonzero. It normally writes to a file called <filename>named.run</filename>
- in the server's working directory.
- </para>
-
- <para>
- For security reasons, when the <option>-u</option>
- command line option is used, the <filename>named.run</filename> file
- is created only after <command>named</command> has
- changed to the
- new UID, and any debug output generated while <command>named</command> is
- starting up and still running as root is discarded. If you need
- to capture this output, you must run the server with the <option>-L</option>
- option to specify a default logfile, or the <option>-g</option>
- option to log to standard error which you can redirect to a file.
- </para>
-
- <para>
- Once a channel is defined, it cannot be redefined. Thus you
- cannot alter the built-in channels directly, but you can modify
- the default logging by pointing categories at channels you have
- defined.
- </para>
- </section>
-
- <section xml:id="the_category_phrase"><info><title>The <command>category</command> Phrase</title></info>
-
- <para>
- There are many categories, so you can send the logs you want
- to see wherever you want, without seeing logs you don't want. If
- you don't specify a list of channels for a category, then log
- messages
- in that category will be sent to the <command>default</command> category
- instead. If you don't specify a default category, the following
- "default default" is used:
- </para>
-
-<programlisting>category default { default_syslog; default_debug; };
-</programlisting>
-
- <para>
- If you start <command>named</command> with the
- <option>-L</option> option then the default category is:
- </para>
-
-<programlisting>category default { default_logfile; default_debug; };
-</programlisting>
-
- <para>
- As an example, let's say you want to log security events to
- a file, but you also want keep the default logging behavior. You'd
- specify the following:
- </para>
-
-<programlisting>channel my_security_channel {
- file "my_security_file";
- severity info;
-};
-category security {
- my_security_channel;
- default_syslog;
- default_debug;
-};</programlisting>
-
- <para>
- To discard all messages in a category, specify the <command>null</command> channel:
- </para>
-
-<programlisting>category xfer-out { null; };
-category notify { null; };
-</programlisting>
-
- <para>
- Following are the available categories and brief descriptions
- of the types of log information they contain. More
- categories may be added in future <acronym>BIND</acronym> releases.
- </para>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="logging-categories.xml"/>
- </section>
- <section xml:id="query_errors"><info><title>The <command>query-errors</command> Category</title></info>
- <para>
- The <command>query-errors</command> category is
- specifically intended for debugging purposes: To identify
- why and how specific queries result in responses which
- indicate an error.
- Messages of this category are therefore only logged
- with <command>debug</command> levels.
- </para>
-
- <para>
- At the debug levels of 1 or higher, each response with the
- rcode of SERVFAIL is logged as follows:
- </para>
- <para>
- <computeroutput>client 127.0.0.1#61502: query failed (SERVFAIL) for www.example.com/IN/AAAA at query.c:3880</computeroutput>
- </para>
- <para>
- This means an error resulting in SERVFAIL was
- detected at line 3880 of source file
- <filename>query.c</filename>.
- Log messages of this level will particularly
- help identify the cause of SERVFAIL for an
- authoritative server.
- </para>
- <para>
- At the debug levels of 2 or higher, detailed context
- information of recursive resolutions that resulted in
- SERVFAIL is logged.
- The log message will look like as follows:
- </para>
- <para>
-<!-- NOTE: newlines and some spaces added so this would fit on page -->
- <programlisting>
-fetch completed at resolver.c:2970 for www.example.com/A
-in 30.000183: timed out/success [domain:example.com,
-referral:2,restart:7,qrysent:8,timeout:5,lame:0,neterr:0,
-badresp:1,adberr:0,findfail:0,valfail:0]
- </programlisting>
- </para>
- <para>
- The first part before the colon shows that a recursive
- resolution for AAAA records of www.example.com completed
- in 30.000183 seconds and the final result that led to the
- SERVFAIL was determined at line 2970 of source file
- <filename>resolver.c</filename>.
- </para>
- <para>
- The following part shows the detected final result and the
- latest result of DNSSEC validation.
- The latter is always success when no validation attempt
- is made.
- In this example, this query resulted in SERVFAIL probably
- because all name servers are down or unreachable, leading
- to a timeout in 30 seconds.
- DNSSEC validation was probably not attempted.
- </para>
- <para>
- The last part enclosed in square brackets shows statistics
- information collected for this particular resolution
- attempt.
- The <varname>domain</varname> field shows the deepest zone
- that the resolver reached;
- it is the zone where the error was finally detected.
- The meaning of the other fields is summarized in the
- following table.
- </para>
-
- <informaltable colsep="0" rowsep="0">
- <tgroup cols="2" colsep="0" rowsep="0" tgroupstyle="4Level-table">
- <colspec colname="1" colnum="1" colsep="0" colwidth="1.150in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="3.350in"/>
- <tbody>
- <row rowsep="0">
- <entry colname="1">
- <para><varname>referral</varname></para>
- </entry>
- <entry colname="2">
- <para>
- The number of referrals the resolver received
- throughout the resolution process.
- In the above example this is 2, which are most
- likely com and example.com.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><varname>restart</varname></para>
- </entry>
- <entry colname="2">
- <para>
- The number of cycles that the resolver tried
- remote servers at the <varname>domain</varname>
- zone.
- In each cycle the resolver sends one query
- (possibly resending it, depending on the response)
- to each known name server of
- the <varname>domain</varname> zone.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><varname>qrysent</varname></para>
- </entry>
- <entry colname="2">
- <para>
- The number of queries the resolver sent at the
- <varname>domain</varname> zone.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><varname>timeout</varname></para>
- </entry>
- <entry colname="2">
- <para>
- The number of timeouts since the resolver
- received the last response.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><varname>lame</varname></para>
- </entry>
- <entry colname="2">
- <para>
- The number of lame servers the resolver detected
- at the <varname>domain</varname> zone.
- A server is detected to be lame either by an
- invalid response or as a result of lookup in
- BIND9's address database (ADB), where lame
- servers are cached.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><varname>neterr</varname></para>
- </entry>
- <entry colname="2">
- <para>
- The number of erroneous results that the
- resolver encountered in sending queries
- at the <varname>domain</varname> zone.
- One common case is the remote server is
- unreachable and the resolver receives an ICMP
- unreachable error message.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><varname>badresp</varname></para>
- </entry>
- <entry colname="2">
- <para>
- The number of unexpected responses (other than
- <varname>lame</varname>) to queries sent by the
- resolver at the <varname>domain</varname> zone.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><varname>adberr</varname></para>
- </entry>
- <entry colname="2">
- <para>
- Failures in finding remote server addresses
- of the <varname>domain</varname> zone in the ADB.
- One common case of this is that the remote
- server's name does not have any address records.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><varname>findfail</varname></para>
- </entry>
- <entry colname="2">
- <para>
- Failures of resolving remote server addresses.
- This is a total number of failures throughout
- the resolution process.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><varname>valfail</varname></para>
- </entry>
- <entry colname="2">
- <para>
- Failures of DNSSEC validation.
- Validation failures are counted throughout
- the resolution process (not limited to
- the <varname>domain</varname> zone), but should
- only happen in <varname>domain</varname>.
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- <para>
- At the debug levels of 3 or higher, the same messages
- as those at the debug 1 level are logged for other errors
- than SERVFAIL.
- Note that negative responses such as NXDOMAIN are not
- regarded as errors here.
- </para>
- <para>
- At the debug levels of 4 or higher, the same messages
- as those at the debug 2 level are logged for other errors
- than SERVFAIL.
- Unlike the above case of level 3, messages are logged for
- negative responses.
- This is because any unexpected results can be difficult to
- debug in the recursion case.
- </para>
- </section>
- </section>
-
- <section xml:id="lwres_grammar"><info><title><command>lwres</command> Statement Grammar</title></info>
-
- <para>
- This is the grammar of the <command>lwres</command>
- statement in the <filename>named.conf</filename> file:
- </para>
-
-<programlisting><command>lwres</command> {
- <optional> listen-on { <replaceable>ip_addr</replaceable> <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ;
- <optional> <replaceable>ip_addr</replaceable> <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; ... </optional> }; </optional>
- <optional> view <replaceable>view_name</replaceable>; </optional>
- <optional> search { <replaceable>domain_name</replaceable> ; <optional> <replaceable>domain_name</replaceable> ; ... </optional> }; </optional>
- <optional> ndots <replaceable>number</replaceable>; </optional>
- <optional> lwres-tasks <replaceable>number</replaceable>; </optional>
- <optional> lwres-clients <replaceable>number</replaceable>; </optional>
-};
-</programlisting>
-
- </section>
- <section xml:id="lwres_statement"><info><title><command>lwres</command> Statement Definition and Usage</title></info>
-
- <para>
- The <command>lwres</command> statement configures the
- name
- server to also act as a lightweight resolver server. (See
- <xref linkend="lwresd"/>.) There may be multiple
- <command>lwres</command> statements configuring
- lightweight resolver servers with different properties.
- </para>
-
- <para>
- The <command>listen-on</command> statement specifies a
- list of
- IPv4 addresses (and ports) that this instance of a lightweight
- resolver daemon
- should accept requests on. If no port is specified, port 921 is
- used.
- If this statement is omitted, requests will be accepted on
- 127.0.0.1,
- port 921.
- </para>
-
- <para>
- The <command>view</command> statement binds this
- instance of a
- lightweight resolver daemon to a view in the DNS namespace, so that
- the
- response will be constructed in the same manner as a normal DNS
- query
- matching this view. If this statement is omitted, the default view
- is
- used, and if there is no default view, an error is triggered.
- </para>
-
- <para>
- The <command>search</command> statement is equivalent to
- the
- <command>search</command> statement in
- <filename>/etc/resolv.conf</filename>. It provides a
- list of domains
- which are appended to relative names in queries.
- </para>
-
- <para>
- The <command>ndots</command> statement is equivalent to
- the
- <command>ndots</command> statement in
- <filename>/etc/resolv.conf</filename>. It indicates the
- minimum
- number of dots in a relative domain name that should result in an
- exact match lookup before search path elements are appended.
- </para>
- <para>
- The <option>lwres-tasks</option> statement specifies the number
- of worker threads the lightweight resolver will dedicate to serving
- clients. By default the number is the same as the number of CPUs on
- the system; this can be overridden using the <option>-n</option>
- command line option when starting the server.
- </para>
- <para>
- The <option>lwres-clients</option> specifies
- the number of client objects per thread the lightweight
- resolver should create to serve client queries.
- By default, if the lightweight resolver runs as a part
- of <command>named</command>, 256 client objects are
- created for each task; if it runs as <command>lwresd</command>,
- 1024 client objects are created for each thread. The maximum
- value is 32768; higher values will be silently ignored and
- the maximum will be used instead.
- Note that setting too high a value may overconsume
- system resources.
- </para>
- <para>
- The maximum number of client queries that the lightweight
- resolver can handle at any one time equals
- <option>lwres-tasks</option> times <option>lwres-clients</option>.
- </para>
- </section>
- <section xml:id="masters_grammar"><info><title><command>masters</command> Statement Grammar</title></info>
-
-<programlisting>
-<command>masters</command> <replaceable>name</replaceable> <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> { ( <replaceable>masters_list</replaceable> |
- <replaceable>ip_addr</replaceable> <optional>port <replaceable>ip_port</replaceable></optional> <optional>key <replaceable>key</replaceable></optional> ) ; <optional>...</optional> };
-</programlisting>
-
- </section>
-
- <section xml:id="masters_statement"><info><title><command>masters</command> Statement Definition and
- Usage</title></info>
-
- <para><command>masters</command>
- lists allow for a common set of masters to be easily used by
- multiple stub and slave zones in their <command>masters</command>
- or <command>also-notify</command> lists.
- </para>
- </section>
-
- <section xml:id="options_grammar"><info><title><command>options</command> Statement Grammar</title></info>
-
- <para>
- This is the grammar of the <command>options</command>
- statement in the <filename>named.conf</filename> file:
- </para>
-
-<programlisting><command>options</command> {
- <optional> attach-cache <replaceable>cache_name</replaceable>; </optional>
- <optional> version <replaceable>version_string</replaceable>; </optional>
- <optional> hostname <replaceable>hostname_string</replaceable>; </optional>
- <optional> server-id <replaceable>server_id_string</replaceable>; </optional>
- <optional> directory <replaceable>path_name</replaceable>; </optional>
- <optional> dnstap { <replaceable>message_type</replaceable>; ... }; </optional>
- <optional> dnstap-output ( <literal>file</literal> | <literal>unix</literal> ) <replaceable>path_name</replaceable>; </optional>
- <optional> dnstap-identity ( <replaceable>string</replaceable> | <literal>hostname</literal> | <literal>none</literal> ); </optional>
- <optional> dnstap-version ( <replaceable>string</replaceable> | <literal>none</literal> ); </optional>
- <optional> fstrm-set-buffer-hint <replaceable>number</replaceable> ; </optional>
- <optional> fstrm-set-flush-timeout <replaceable>number</replaceable> ; </optional>
- <optional> fstrm-set-input-queue-size <replaceable>number</replaceable> ; </optional>
- <optional> fstrm-set-output-notify-threshold <replaceable>number</replaceable> ; </optional>
- <optional> fstrm-set-output-queue-model ( <replaceable>mpsc</replaceable> |
- <replaceable>spsc</replaceable> ) ; </optional>
- <optional> fstrm-set-output-queue-size <replaceable>number</replaceable> ; </optional>
- <optional> fstrm-set-reopen-interval <replaceable>number</replaceable> ; </optional>
- <optional> geoip-directory <replaceable>path_name</replaceable>; </optional>
- <optional> key-directory <replaceable>path_name</replaceable>; </optional>
- <optional> managed-keys-directory <replaceable>path_name</replaceable>; </optional>
- <optional> named-xfer <replaceable>path_name</replaceable>; </optional>
- <optional> tkey-gssapi-keytab <replaceable>path_name</replaceable>; </optional>
- <optional> tkey-gssapi-credential <replaceable>principal</replaceable>; </optional>
- <optional> tkey-domain <replaceable>domainname</replaceable>; </optional>
- <optional> tkey-dhkey <replaceable>key_name</replaceable> <replaceable>key_tag</replaceable>; </optional>
- <optional> cache-file <replaceable>path_name</replaceable>; </optional>
- <optional> dump-file <replaceable>path_name</replaceable>; </optional>
- <optional> bindkeys-file <replaceable>path_name</replaceable>; </optional>
- <optional> lock-file <replaceable>path_name</replaceable>; </optional>
- <optional> secroots-file <replaceable>path_name</replaceable>; </optional>
- <optional> session-keyfile <replaceable>path_name</replaceable>; </optional>
- <optional> session-keyname <replaceable>key_name</replaceable>; </optional>
- <optional> session-keyalg <replaceable>algorithm_id</replaceable>; </optional>
- <optional> memstatistics <replaceable>yes_or_no</replaceable>; </optional>
- <optional> memstatistics-file <replaceable>path_name</replaceable>; </optional>
- <optional> pid-file <replaceable>path_name</replaceable>; </optional>
- <optional> recursing-file <replaceable>path_name</replaceable>; </optional>
- <optional> statistics-file <replaceable>path_name</replaceable>; </optional>
- <optional> zone-statistics <replaceable>full</replaceable> | <replaceable>terse</replaceable> | <replaceable>none</replaceable>; </optional>
- <optional> auth-nxdomain <replaceable>yes_or_no</replaceable>; </optional>
- <optional> nxdomain-redirect <replaceable>string</replaceable>; </optional>
- <optional> deallocate-on-exit <replaceable>yes_or_no</replaceable>; </optional>
- <optional> dialup <replaceable>dialup_option</replaceable>; </optional>
- <optional> fake-iquery <replaceable>yes_or_no</replaceable>; </optional>
- <optional> fetch-glue <replaceable>yes_or_no</replaceable>; </optional>
- <optional> flush-zones-on-shutdown <replaceable>yes_or_no</replaceable>; </optional>
- <optional> has-old-clients <replaceable>yes_or_no</replaceable>; </optional>
- <optional> host-statistics <replaceable>yes_or_no</replaceable>; </optional>
- <optional> host-statistics-max <replaceable>number</replaceable>; </optional>
- <optional> minimal-any <replaceable>yes_or_no</replaceable>; </optional>
- <optional> minimal-responses (<replaceable>yes_or_no</replaceable> | <constant>no-auth</constant> | <constant>no-auth-recursive</constant>); </optional>
- <optional> multiple-cnames <replaceable>yes_or_no</replaceable>; </optional>
- <optional> notify <replaceable>yes_or_no</replaceable> | <replaceable>explicit</replaceable> | <replaceable>master-only</replaceable>; </optional>
- <optional> recursion <replaceable>yes_or_no</replaceable>; </optional>
- <optional> send-cookie <replaceable>yes_or_no</replaceable>; </optional>
- <optional> require-server-cookie <replaceable>yes_or_no</replaceable>; </optional>
- <optional> cookie-algorithm <replaceable>algorithm_id</replaceable>; </optional>
- <optional> cookie-secret <replaceable>secret_string</replaceable>; </optional>
- <optional> nocookie-udp-size <replaceable>number</replaceable> ; </optional>
- <optional> request-nsid <replaceable>yes_or_no</replaceable>; </optional>
- <optional> rfc2308-type1 <replaceable>yes_or_no</replaceable>; </optional>
- <optional> use-id-pool <replaceable>yes_or_no</replaceable>; </optional>
- <optional> maintain-ixfr-base <replaceable>yes_or_no</replaceable>; </optional>
- <optional> ixfr-from-differences (<replaceable>yes_or_no</replaceable> | <constant>master</constant> | <constant>slave</constant>); </optional>
- <optional> auto-dnssec <constant>allow</constant>|<constant>maintain</constant>|<constant>off</constant>; </optional>
- <optional> dnssec-enable <replaceable>yes_or_no</replaceable>; </optional>
- <optional> dnssec-validation (<replaceable>yes_or_no</replaceable> | <constant>auto</constant>); </optional>
- <optional> dnssec-lookaside ( <replaceable>auto</replaceable> |
- <replaceable>no</replaceable> |
- <replaceable>domain</replaceable> trust-anchor <replaceable>domain</replaceable> ); </optional>
- <optional> dnssec-must-be-secure <replaceable>domain yes_or_no</replaceable>; </optional>
- <optional> dnssec-accept-expired <replaceable>yes_or_no</replaceable>; </optional>
- <optional> forward ( <replaceable>only</replaceable> | <replaceable>first</replaceable> ); </optional>
- <optional> forwarders { <optional> <replaceable>ip_addr</replaceable> <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; ... </optional> }; </optional>
- <optional> dual-stack-servers <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> {
- ( <replaceable>domain_name</replaceable> <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> |
- <replaceable>ip_addr</replaceable> <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional>) ;
- ... }; </optional>
- <optional> check-names ( <replaceable>master</replaceable> | <replaceable>slave</replaceable> | <replaceable>response</replaceable> )
- ( <replaceable>warn</replaceable> | <replaceable>fail</replaceable> | <replaceable>ignore</replaceable> ); </optional>
- <optional> check-dup-records ( <replaceable>warn</replaceable> | <replaceable>fail</replaceable> | <replaceable>ignore</replaceable> ); </optional>
- <optional> check-mx ( <replaceable>warn</replaceable> | <replaceable>fail</replaceable> | <replaceable>ignore</replaceable> ); </optional>
- <optional> check-wildcard <replaceable>yes_or_no</replaceable>; </optional>
- <optional> check-integrity <replaceable>yes_or_no</replaceable>; </optional>
- <optional> check-mx-cname ( <replaceable>warn</replaceable> | <replaceable>fail</replaceable> | <replaceable>ignore</replaceable> ); </optional>
- <optional> check-srv-cname ( <replaceable>warn</replaceable> | <replaceable>fail</replaceable> | <replaceable>ignore</replaceable> ); </optional>
- <optional> check-sibling <replaceable>yes_or_no</replaceable>; </optional>
- <optional> check-spf ( <replaceable>warn</replaceable> | <replaceable>ignore</replaceable> ); </optional>
- <optional> allow-new-zones { <replaceable>yes_or_no</replaceable> }; </optional>
- <optional> allow-notify { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> allow-query { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> allow-query-on { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> allow-query-cache { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> allow-query-cache-on { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> allow-transfer { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> allow-recursion { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> allow-recursion-on { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> allow-update { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> allow-update-forwarding { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> automatic-interface-scan { <replaceable>yes_or_no</replaceable> }; </optional>
- <optional> geoip-use-ecs <replaceable>yes_or_no</replaceable>;</optional>
- <optional> update-check-ksk <replaceable>yes_or_no</replaceable>; </optional>
- <optional> dnssec-update-mode ( <replaceable>maintain</replaceable> | <replaceable>no-resign</replaceable> ); </optional>
- <optional> dnssec-dnskey-kskonly <replaceable>yes_or_no</replaceable>; </optional>
- <optional> dnssec-loadkeys-interval <replaceable>number</replaceable>; </optional>
- <optional> dnssec-secure-to-insecure <replaceable>yes_or_no</replaceable> ;</optional>
- <optional> try-tcp-refresh <replaceable>yes_or_no</replaceable>; </optional>
- <optional> allow-v6-synthesis { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> blackhole { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> keep-response-order { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> no-case-compress { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> message-compression <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> use-v4-udp-ports { <replaceable>port_list</replaceable> }; </optional>
- <optional> avoid-v4-udp-ports { <replaceable>port_list</replaceable> }; </optional>
- <optional> use-v6-udp-ports { <replaceable>port_list</replaceable> }; </optional>
- <optional> avoid-v6-udp-ports { <replaceable>port_list</replaceable> }; </optional>
- <optional> listen-on <optional> port <replaceable>ip_port</replaceable> </optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> listen-on-v6 <optional> port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional>
-{ <replaceable>address_match_list</replaceable> }; </optional>
- <optional> query-source ( ( <replaceable>ip4_addr</replaceable> | <replaceable>*</replaceable> )
- <optional> port ( <replaceable>ip_port</replaceable> | <replaceable>*</replaceable> ) </optional>
- <optional> dscp <replaceable>ip_dscp</replaceable></optional> |
- <optional> address ( <replaceable>ip4_addr</replaceable> | <replaceable>*</replaceable> ) </optional>
- <optional> port ( <replaceable>ip_port</replaceable> | <replaceable>*</replaceable> ) </optional> )
- <optional> dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> query-source-v6 ( ( <replaceable>ip6_addr</replaceable> | <replaceable>*</replaceable> )
- <optional> port ( <replaceable>ip_port</replaceable> | <replaceable>*</replaceable> ) </optional>
- <optional> dscp <replaceable>ip_dscp</replaceable></optional> |
- <optional> address ( <replaceable>ip6_addr</replaceable> | <replaceable>*</replaceable> ) </optional>
- <optional> port ( <replaceable>ip_port</replaceable> | <replaceable>*</replaceable> ) </optional> )
- <optional> dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> use-queryport-pool <replaceable>yes_or_no</replaceable>; </optional>
- <optional> queryport-pool-ports <replaceable>number</replaceable>; </optional>
- <optional> queryport-pool-updateinterval <replaceable>number</replaceable>; </optional>
- <optional> max-transfer-time-in <replaceable>number</replaceable>; </optional>
- <optional> max-transfer-time-out <replaceable>number</replaceable>; </optional>
- <optional> max-transfer-idle-in <replaceable>number</replaceable>; </optional>
- <optional> max-transfer-idle-out <replaceable>number</replaceable>; </optional>
- <optional> reserved-sockets <replaceable>number</replaceable>; </optional>
- <optional> recursive-clients <replaceable>number</replaceable>; </optional>
- <optional> tcp-clients <replaceable>number</replaceable>; </optional>
- <optional> clients-per-query <replaceable>number</replaceable> ; </optional>
- <optional> max-clients-per-query <replaceable>number</replaceable> ; </optional>
- <optional> fetches-per-server <replaceable>number</replaceable> <optional><replaceable>(drop | fail)</replaceable></optional>; </optional>
- <optional> fetch-quota-params <replaceable>number fixedpoint fixedpoint fixedpoint</replaceable> ; </optional>
- <optional> fetches-per-zone <replaceable>number</replaceable> <optional><replaceable>(drop | fail)</replaceable></optional>; </optional>
- <optional> notify-rate <replaceable>number</replaceable>; </optional>
- <optional> startup-notify-rate <replaceable>number</replaceable>; </optional>
- <optional> serial-query-rate <replaceable>number</replaceable>; </optional>
- <optional> serial-queries <replaceable>number</replaceable>; </optional>
- <optional> tcp-listen-queue <replaceable>number</replaceable>; </optional>
- <optional> transfer-format <replaceable>( one-answer | many-answers )</replaceable>; </optional>
- <optional> transfer-message-size <replaceable>number</replaceable>; </optional>
- <optional> transfers-in <replaceable>number</replaceable>; </optional>
- <optional> transfers-out <replaceable>number</replaceable>; </optional>
- <optional> transfers-per-ns <replaceable>number</replaceable>; </optional>
- <optional> transfer-source (<replaceable>ip4_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> transfer-source-v6 (<replaceable>ip6_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> alt-transfer-source (<replaceable>ip4_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> alt-transfer-source-v6 (<replaceable>ip6_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> use-alt-transfer-source <replaceable>yes_or_no</replaceable>; </optional>
- <optional> notify-delay <replaceable>seconds</replaceable> ; </optional>
- <optional> notify-source (<replaceable>ip4_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> notify-source-v6 (<replaceable>ip6_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> notify-to-soa <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> also-notify <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> { ( <replaceable>masters</replaceable> | <replaceable>ip_addr</replaceable>
- <optional>port <replaceable>ip_port</replaceable></optional> ) <optional>key <replaceable>keyname</replaceable></optional> ; ... }; </optional>
- <optional> max-ixfr-log-size <replaceable>number</replaceable>; </optional>
- <optional> max-journal-size <replaceable>size_spec</replaceable>; </optional>
- <optional> coresize <replaceable>size_spec</replaceable> ; </optional>
- <optional> datasize <replaceable>size_spec</replaceable> ; </optional>
- <optional> files <replaceable>size_spec</replaceable> ; </optional>
- <optional> stacksize <replaceable>size_spec</replaceable> ; </optional>
- <optional> cleaning-interval <replaceable>number</replaceable>; </optional>
- <optional> heartbeat-interval <replaceable>number</replaceable>; </optional>
- <optional> interface-interval <replaceable>number</replaceable>; </optional>
- <optional> statistics-interval <replaceable>number</replaceable>; </optional>
- <optional> topology { <replaceable>address_match_list</replaceable> }</optional>;
- <optional> sortlist { <replaceable>address_match_list</replaceable> }</optional>;
- <optional> rrset-order { <replaceable>order_spec</replaceable> ; <optional> <replaceable>order_spec</replaceable> ; ... </optional> </optional> };
- <optional> lame-ttl <replaceable>number</replaceable>; </optional>
- <optional> max-ncache-ttl <replaceable>number</replaceable>; </optional>
- <optional> max-cache-ttl <replaceable>number</replaceable>; </optional>
- <optional> max-zone-ttl ( <constant>unlimited</constant> | <replaceable>number</replaceable> ; </optional>
- <optional> serial-update-method <constant>increment</constant>|<constant>unixtime</constant>|<constant>date</constant>; </optional>
- <optional> servfail-ttl <replaceable>number</replaceable>; </optional>
- <optional> sig-validity-interval <replaceable>number</replaceable> <optional><replaceable>number</replaceable></optional> ; </optional>
- <optional> sig-signing-nodes <replaceable>number</replaceable> ; </optional>
- <optional> sig-signing-signatures <replaceable>number</replaceable> ; </optional>
- <optional> sig-signing-type <replaceable>number</replaceable> ; </optional>
- <optional> min-roots <replaceable>number</replaceable>; </optional>
- <optional> use-ixfr <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> provide-ixfr <replaceable>yes_or_no</replaceable>; </optional>
- <optional> request-ixfr <replaceable>yes_or_no</replaceable>; </optional>
- <optional> request-expire <replaceable>yes_or_no</replaceable>; </optional>
- <optional> treat-cr-as-space <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> min-refresh-time <replaceable>number</replaceable> ; </optional>
- <optional> max-refresh-time <replaceable>number</replaceable> ; </optional>
- <optional> min-retry-time <replaceable>number</replaceable> ; </optional>
- <optional> max-retry-time <replaceable>number</replaceable> ; </optional>
- <optional> nta-lifetime <replaceable>duration</replaceable> ; </optional>
- <optional> nta-recheck <replaceable>duration</replaceable> ; </optional>
- <optional> port <replaceable>ip_port</replaceable>; </optional>
- <optional> dscp <replaceable>ip_dscp</replaceable></optional> ;
- <optional> additional-from-auth <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> additional-from-cache <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> random-device <replaceable>path_name</replaceable> ; </optional>
- <optional> max-cache-size <replaceable>size_or_percent</replaceable> ; </optional>
- <optional> match-mapped-addresses <replaceable>yes_or_no</replaceable>; </optional>
- <optional> filter-aaaa-on-v4 ( <replaceable>yes_or_no</replaceable> | <replaceable>break-dnssec</replaceable> ); </optional>
- <optional> filter-aaaa-on-v6 ( <replaceable>yes_or_no</replaceable> | <replaceable>break-dnssec</replaceable> ); </optional>
- <optional> filter-aaaa { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> dns64 <replaceable>ipv6-prefix</replaceable> {
- <optional> clients { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> mapped { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> exclude { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> suffix <replaceable>IPv6-address</replaceable>; </optional>
- <optional> recursive-only <replaceable>yes_or_no</replaceable>; </optional>
- <optional> break-dnssec <replaceable>yes_or_no</replaceable>; </optional>
- }; </optional>;
- <optional> dns64-server <replaceable>name</replaceable> </optional>
- <optional> dns64-contact <replaceable>name</replaceable> </optional>
- <optional> preferred-glue ( <replaceable>A</replaceable> | <replaceable>AAAA</replaceable> | <replaceable>NONE</replaceable> ); </optional>
- <optional> edns-udp-size <replaceable>number</replaceable>; </optional>
- <optional> max-udp-size <replaceable>number</replaceable>; </optional>
- <optional> max-rsa-exponent-size <replaceable>number</replaceable>; </optional>
- <optional> root-delegation-only <optional> exclude { <replaceable>namelist</replaceable> } </optional> ; </optional>
- <optional> querylog <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> disable-algorithms <replaceable>domain</replaceable> { <replaceable>algorithm</replaceable>;
- <optional> <replaceable>algorithm</replaceable>; </optional> }; </optional>
- <optional> disable-ds-digests <replaceable>domain</replaceable> { <replaceable>digest_type</replaceable>;
- <optional> <replaceable>digest_type</replaceable>; </optional> }; </optional>
- <optional> acache-enable <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> acache-cleaning-interval <replaceable>number</replaceable>; </optional>
- <optional> max-acache-size <replaceable>size_spec</replaceable> ; </optional>
- <optional> max-recursion-depth <replaceable>number</replaceable> ; </optional>
- <optional> max-recursion-queries <replaceable>number</replaceable> ; </optional>
- <optional> masterfile-format
- (<constant>text</constant>|<constant>raw</constant>|<constant>map</constant>) ; </optional>
- <optional> masterfile-style
- (<constant>relative</constant>|<constant>full</constant>) ; </optional>
- <optional> empty-server <replaceable>name</replaceable> ; </optional>
- <optional> empty-contact <replaceable>name</replaceable> ; </optional>
- <optional> empty-zones-enable <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> disable-empty-zone <replaceable>zone_name</replaceable> ; </optional>
- <optional> zero-no-soa-ttl <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> zero-no-soa-ttl-cache <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> resolver-query-timeout <replaceable>number</replaceable> ; </optional>
- <optional> deny-answer-addresses { <replaceable>address_match_list</replaceable> } <optional> except-from { <replaceable>namelist</replaceable> } </optional>;</optional>
- <optional> deny-answer-aliases { <replaceable>namelist</replaceable> } <optional> except-from { <replaceable>namelist</replaceable> } </optional>;</optional>
- <optional> prefetch <replaceable>number</replaceable> <optional><replaceable>number</replaceable></optional> ; </optional>
-
- <optional> rate-limit {
- <optional> responses-per-second <replaceable>number</replaceable> ; </optional>
- <optional> referrals-per-second <replaceable>number</replaceable> ; </optional>
- <optional> nodata-per-second <replaceable>number</replaceable> ; </optional>
- <optional> nxdomains-per-second <replaceable>number</replaceable> ; </optional>
- <optional> errors-per-second <replaceable>number</replaceable> ; </optional>
- <optional> all-per-second <replaceable>number</replaceable> ; </optional>
- <optional> window <replaceable>number</replaceable> ; </optional>
- <optional> log-only <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> qps-scale <replaceable>number</replaceable> ; </optional>
- <optional> ipv4-prefix-length <replaceable>number</replaceable> ; </optional>
- <optional> ipv6-prefix-length <replaceable>number</replaceable> ; </optional>
- <optional> slip <replaceable>number</replaceable> ; </optional>
- <optional> exempt-clients { <replaceable>address_match_list</replaceable> } ; </optional>
- <optional> max-table-size <replaceable>number</replaceable> ; </optional>
- <optional> min-table-size <replaceable>number</replaceable> ; </optional>
- } ; </optional>
- <optional> response-policy {
- zone <replaceable>zone_name</replaceable>
- <optional> policy <replaceable>(given | disabled | passthru | drop |
- tcp-only | nxdomain | nodata | cname domain</replaceable>) </optional>
- <optional> recursive-only <replaceable>yes_or_no</replaceable> </optional>
- <optional> log <replaceable>yes_or_no</replaceable> </optional>
- <optional> max-policy-ttl <replaceable>number</replaceable> </optional>
- ; <optional>...</optional>
- } <optional> recursive-only <replaceable>yes_or_no</replaceable> </optional>
- <optional> max-policy-ttl <replaceable>number</replaceable> </optional>
- <optional> break-dnssec <replaceable>yes_or_no</replaceable> </optional>
- <optional> min-ns-dots <replaceable>number</replaceable> </optional>
- <optional> nsip-wait-recurse <replaceable>yes_or_no</replaceable> </optional>
- <optional> qname-wait-recurse <replaceable>yes_or_no</replaceable> </optional>
- <optional> automatic-interface-scan <replaceable>yes_or_no</replaceable> </optional>
- ; </optional>
- <optional> catalog-zones {
- zone <replaceable>quoted_string</replaceable>
- <optional> default-masters
- <optional>port <replaceable>ip_port</replaceable></optional>
- <optional>dscp <replaceable>ip_dscp</replaceable></optional>
- { ( <replaceable>masters_list</replaceable> | <replaceable>ip_addr</replaceable> <optional>port <replaceable>ip_port</replaceable></optional> <optional>key <replaceable>key</replaceable></optional> ) ; <optional>...</optional> }</optional>
- <optional>in-memory <replaceable>yes_or_no</replaceable></optional>
- <optional>min-update-interval <replaceable>interval</replaceable></optional>
- ; <optional>...</optional> };
- ; </optional>
- <optional>v6-bias <replaceable>number</replaceable> ; </optional>
-};
-</programlisting>
-
- </section>
-
- <section xml:id="options"><info><title><command>options</command> Statement Definition and
- Usage</title></info>
-
- <para>
- The <command>options</command> statement sets up global
- options
- to be used by <acronym>BIND</acronym>. This statement
- may appear only
- once in a configuration file. If there is no <command>options</command>
- statement, an options block with each option set to its default will
- be used.
- </para>
-
- <variablelist>
-
- <varlistentry>
- <term><command>attach-cache</command></term>
- <listitem>
- <para>
- Allows multiple views to share a single cache
- database.
- Each view has its own cache database by default, but
- if multiple views have the same operational policy
- for name resolution and caching, those views can
- share a single cache to save memory and possibly
- improve resolution efficiency by using this option.
- </para>
-
- <para>
- The <command>attach-cache</command> option
- may also be specified in <command>view</command>
- statements, in which case it overrides the
- global <command>attach-cache</command> option.
- </para>
-
- <para>
- The <replaceable>cache_name</replaceable> specifies
- the cache to be shared.
- When the <command>named</command> server configures
- views which are supposed to share a cache, it
- creates a cache with the specified name for the
- first view of these sharing views.
- The rest of the views will simply refer to the
- already created cache.
- </para>
-
- <para>
- One common configuration to share a cache would be to
- allow all views to share a single cache.
- This can be done by specifying
- the <command>attach-cache</command> as a global
- option with an arbitrary name.
- </para>
-
- <para>
- Another possible operation is to allow a subset of
- all views to share a cache while the others to
- retain their own caches.
- For example, if there are three views A, B, and C,
- and only A and B should share a cache, specify the
- <command>attach-cache</command> option as a view A (or
- B)'s option, referring to the other view name:
- </para>
-
-<programlisting>
- view "A" {
- // this view has its own cache
- ...
- };
- view "B" {
- // this view refers to A's cache
- attach-cache "A";
- };
- view "C" {
- // this view has its own cache
- ...
- };
-</programlisting>
-
- <para>
- Views that share a cache must have the same policy
- on configurable parameters that may affect caching.
- The current implementation requires the following
- configurable options be consistent among these
- views:
- <command>check-names</command>,
- <command>cleaning-interval</command>,
- <command>dnssec-accept-expired</command>,
- <command>dnssec-validation</command>,
- <command>max-cache-ttl</command>,
- <command>max-ncache-ttl</command>,
- <command>max-cache-size</command>, and
- <command>zero-no-soa-ttl</command>.
- </para>
-
- <para>
- Note that there may be other parameters that may
- cause confusion if they are inconsistent for
- different views that share a single cache.
- For example, if these views define different sets of
- forwarders that can return different answers for the
- same question, sharing the answer does not make
- sense or could even be harmful.
- It is administrator's responsibility to ensure
- configuration differences in different views do
- not cause disruption with a shared cache.
- </para>
- </listitem>
-
- </varlistentry>
-
- <varlistentry>
- <term><command>directory</command></term>
- <listitem>
- <para>
- The working directory of the server.
- Any non-absolute pathnames in the configuration file will be
- taken
- as relative to this directory. The default location for most
- server
- output files (e.g. <filename>named.run</filename>)
- is this directory.
- If a directory is not specified, the working directory
- defaults to `<filename>.</filename>', the directory from
- which the server
- was started. The directory specified should be an absolute
- path.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>dnstap</command></term>
- <listitem>
- <para>
- <command>dnstap</command> is a fast, flexible method
- for capturing and logging DNS traffic. Developed by
- Robert Edmonds at Farsight Security, Inc., and supported
- by multiple DNS implementations, <command>dnstap</command>
- uses
- <command>libfstrm</command> (a lightweight high-speed
- framing library, see
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://github.com/farsightsec/fstrm">https://github.com/farsightsec/fstrm</link>) to send
- event payloads which are encoded using Protocol Buffers
- (<command>libprotobuf-c</command>, a mechanism for
- serializing structured data developed
- by Google, Inc.; see
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://developers.google.com/protocol-buffers/">https://developers.google.com/protocol-buffers</link>).
- </para>
- <para>
- To enable <command>dnstap</command> at compile time,
- the <command>fstrm</command> and <command>protobuf-c</command>
- libraries must be available, and BIND must be configured with
- <option>--enable-dnstap</option>.
- </para>
- <para>
- The <command>dnstap</command> option is a bracketed list
- of message types to be logged. These may be set differently
- for each view. Supported types are <literal>client</literal>,
- <literal>auth</literal>, <literal>resolver</literal>, and
- <literal>forwarder</literal>. Specifying type
- <literal>all</literal> will cause all <command>dnstap</command>
- messages to be logged, regardless of type.
- </para>
- <para>
- Each type may take an additional argument to indicate whether
- to log <literal>query</literal> messages or
- <literal>response</literal> messages; if not specified,
- both queries and responses are logged.
- </para>
- <para>
- Example: To log all authoritative queries and responses,
- recursive client responses, and upstream queries sent by
- the resolver, use:
-<programlisting>dnstap {
- auth;
- client response;
- resolver query;
-};
-</programlisting>
- </para>
- <para>
- Logged <command>dnstap</command> messages can be parsed
- using the <command>dnstap-read</command> utility (see
- <xref linkend="man.dnstap-read"/> for details).
- </para>
- <para>
- For more information on <command>dnstap</command>, see
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://dnstap.info">http://dnstap.info</link>.
- </para>
- <para>
- The fstrm library has a number of tunables that are exposed
- in <filename>named.conf</filename>, and can be modified
- if necessary to improve performance or prevent loss of data.
- These are:
- </para>
- <itemizedlist>
- <listitem>
- <simpara>
- <command>fstrm-set-buffer-hint</command>: The
- threshold number of bytes to accumulate in the output
- buffer before forcing a buffer flush. The minimum is
- 1024, the maximum is 65536, and the default is 8192.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <command>fstrm-set-flush-timeout</command>: The number
- of seconds to allow unflushed data to remain in the
- output buffer. The minimum is 1 second, the maximum is
- 600 seconds (10 minutes), and the default is 1 second.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <command>fstrm-set-output-notify-threshold</command>:
- The number of outstanding queue entries to allow on
- an input queue before waking the I/O thread.
- The minimum is 1 and the default is 32.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <command>fstrm-set-output-queue-model</command>:
- Controls the queuing semantics to use for queue
- objects. The default is <literal>mpsc</literal>
- (multiple producer, single consumer); the other
- option is <literal>spsc</literal> (single producer,
- single consumer).
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <command>fstrm-set-input-queue-size</command>: The
- number of queue entries to allocate for each
- input queue. This value must be a power of 2.
- The minimum is 2, the maximum is 16384, and
- the default is 512.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <command>fstrm-set-output-queue-size</command>:
- The number of queue entries to allocate for each
- output queue. The minimum is 2, the maximum is
- system-dependent and based on <option>IOV_MAX</option>,
- and the default is 64.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <command>fstrm-set-reopen-interval</command>:
- The number of seconds to wait between attempts to
- reopen a closed output stream. The minimum is 1 second,
- the maximum is 600 seconds (10 minutes), and the default
- is 5 seconds.
- </simpara>
- </listitem>
- </itemizedlist>
- <para>
- Note that all of the above minimum, maximum, and default
- values are set by the <command>libfstrm</command> library,
- and may be subject to change in future versions of the
- library. See the <command>libfstrm</command> documentation
- for more information.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>dnstap-output</command></term>
- <listitem>
- <para>
- Configures the path to which the <command>dnstap</command>
- frame stream will be sent if <command>dnstap</command>
- is enabled at compile time and active.
- </para>
- <para>
- The first argument is either <literal>file</literal> or
- <literal>unix</literal>, indicating whether the destination
- is a file or a UNIX domain socket. The second argument
- is the path of the file or socket. (Note: when using a
- socket, <command>dnstap</command> messages will
- only be sent if another process such as
- <command>fstrm_capture</command>
- (provided with <command>libfstrm</command>) is listening on
- the socket.)
- </para>
- <para>
- <command>dnstap-output</command> can only be set globally
- in <command>options</command>. Currently, it can only be
- set once while <command>named</command> is running;
- once set, it cannot be changed by
- <command>rndc reload</command> or
- <command>rndc reconfig</command>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>dnstap-identity</command></term>
- <listitem>
- <para>
- Specifies an <command>identity</command> string to send in
- <command>dnstap</command> messages. If set to
- <literal>hostname</literal>, which is the default, the
- server's hostname will be sent. If set to
- <literal>none</literal>, no identity string will be sent.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>dnstap-version</command></term>
- <listitem>
- <para>
- Specifies a <command>version</command> string to send in
- <command>dnstap</command> messages. The default is the
- version number of the BIND release. If set to
- <literal>none</literal>, no version string will be sent.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>geoip-directory</command></term>
- <listitem>
- <para>
- Specifies the directory containing GeoIP
- <filename>.dat</filename> database files for GeoIP
- initialization. By default, this option is unset
- and the GeoIP support will use libGeoIP's
- built-in directory.
- (For details, see <xref linkend="acl"/> about the
- <command>geoip</command> ACL.)
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>key-directory</command></term>
- <listitem>
- <para>
- When performing dynamic update of secure zones, the
- directory where the public and private DNSSEC key files
- should be found, if different than the current working
- directory. (Note that this option has no effect on the
- paths for files containing non-DNSSEC keys such as
- <filename>bind.keys</filename>,
- <filename>rndc.key</filename> or
- <filename>session.key</filename>.)
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>managed-keys-directory</command></term>
- <listitem>
- <para>
- Specifies the directory in which to store the files that
- track managed DNSSEC keys. By default, this is the working
- directory.
- </para>
- <para>
- If <command>named</command> is not configured to use views,
- then managed keys for the server will be tracked in a single
- file called <filename>managed-keys.bind</filename>.
- Otherwise, managed keys will be tracked in separate files,
- one file per view; each file name will be the view name
- (or, if it contains characters that are incompatible with
- use as a file name, the SHA256 hash of the view name),
- followed by the extension
- <filename>.mkeys</filename>.
- </para>
- <para>
- (Note: in previous releases, file names for views
- always used the SHA256 hash of the view name. To ensure
- compatibility after upgrade, if a file using the old
- name format is found to exist, it will be used instead
- of the new format.)
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>named-xfer</command></term>
- <listitem>
- <para>
- <emphasis>This option is obsolete.</emphasis> It
- was used in <acronym>BIND</acronym> 8 to specify
- the pathname to the <command>named-xfer</command>
- program. In <acronym>BIND</acronym> 9, no separate
- <command>named-xfer</command> program is needed;
- its functionality is built into the name server.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>tkey-gssapi-keytab</command></term>
- <listitem>
- <para>
- The KRB5 keytab file to use for GSS-TSIG updates. If
- this option is set and tkey-gssapi-credential is not
- set, then updates will be allowed with any key
- matching a principal in the specified keytab.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>tkey-gssapi-credential</command></term>
- <listitem>
- <para>
- The security credential with which the server should
- authenticate keys requested by the GSS-TSIG protocol.
- Currently only Kerberos 5 authentication is available
- and the credential is a Kerberos principal which the
- server can acquire through the default system key
- file, normally <filename>/etc/krb5.keytab</filename>.
- The location keytab file can be overridden using the
- tkey-gssapi-keytab option. Normally this principal is
- of the form "<userinput>DNS/</userinput><varname>server.domain</varname>".
- To use GSS-TSIG, <command>tkey-domain</command> must
- also be set if a specific keytab is not set with
- tkey-gssapi-keytab.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>tkey-domain</command></term>
- <listitem>
- <para>
- The domain appended to the names of all shared keys
- generated with <command>TKEY</command>. When a
- client requests a <command>TKEY</command> exchange,
- it may or may not specify the desired name for the
- key. If present, the name of the shared key will
- be <varname>client specified part</varname> +
- <varname>tkey-domain</varname>. Otherwise, the
- name of the shared key will be <varname>random hex
- digits</varname> + <varname>tkey-domain</varname>.
- In most cases, the <command>domainname</command>
- should be the server's domain name, or an otherwise
- non-existent subdomain like
- "_tkey.<varname>domainname</varname>". If you are
- using GSS-TSIG, this variable must be defined, unless
- you specify a specific keytab using tkey-gssapi-keytab.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>tkey-dhkey</command></term>
- <listitem>
- <para>
- The Diffie-Hellman key used by the server
- to generate shared keys with clients using the Diffie-Hellman
- mode
- of <command>TKEY</command>. The server must be
- able to load the
- public and private keys from files in the working directory.
- In
- most cases, the keyname should be the server's host name.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>cache-file</command></term>
- <listitem>
- <para>
- This is for testing only. Do not use.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>dump-file</command></term>
- <listitem>
- <para>
- The pathname of the file the server dumps
- the database to when instructed to do so with
- <command>rndc dumpdb</command>.
- If not specified, the default is <filename>named_dump.db</filename>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>memstatistics-file</command></term>
- <listitem>
- <para>
- The pathname of the file the server writes memory
- usage statistics to on exit. If not specified,
- the default is <filename>named.memstats</filename>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>lock-file</command></term>
- <listitem>
- <para>
- The pathname of a file on which <command>named</command> will
- attempt to acquire a file lock when starting up for
- the first time; if unsuccessful, the server will
- will terminate, under the assumption that another
- server is already running. If not specified, the default is
- <filename>/var/run/named/named.lock</filename>.
- </para>
- <para>
- Specifying <command>lock-file none</command> disables the
- use of a lock file. <command>lock-file</command> is
- ignored if <command>named</command> was run using the <option>-X</option>
- option, which overrides it. Changes to
- <command>lock-file</command> are ignored if
- <command>named</command> is being reloaded or
- reconfigured; it is only effective when the server is
- first started up.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>pid-file</command></term>
- <listitem>
- <para>
- The pathname of the file the server writes its process ID
- in. If not specified, the default is
- <filename>/var/run/named/named.pid</filename>.
- The PID file is used by programs that want to send signals to
- the running
- name server. Specifying <command>pid-file none</command> disables the
- use of a PID file — no file will be written and any
- existing one will be removed. Note that <command>none</command>
- is a keyword, not a filename, and therefore is not enclosed
- in
- double quotes.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>recursing-file</command></term>
- <listitem>
- <para>
- The pathname of the file the server dumps
- the queries that are currently recursing when instructed
- to do so with <command>rndc recursing</command>.
- If not specified, the default is <filename>named.recursing</filename>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>statistics-file</command></term>
- <listitem>
- <para>
- The pathname of the file the server appends statistics
- to when instructed to do so using <command>rndc stats</command>.
- If not specified, the default is <filename>named.stats</filename> in the
- server's current directory. The format of the file is
- described
- in <xref linkend="statsfile"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>bindkeys-file</command></term>
- <listitem>
- <para>
- The pathname of a file to override the built-in trusted
- keys provided by <command>named</command>.
- See the discussion of <command>dnssec-lookaside</command>
- and <command>dnssec-validation</command> for details.
- If not specified, the default is
- <filename>/etc/bind.keys</filename>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>secroots-file</command></term>
- <listitem>
- <para>
- The pathname of the file the server dumps
- security roots to when instructed to do so with
- <command>rndc secroots</command>.
- If not specified, the default is
- <filename>named.secroots</filename>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>session-keyfile</command></term>
- <listitem>
- <para>
- The pathname of the file into which to write a TSIG
- session key generated by <command>named</command> for use by
- <command>nsupdate -l</command>. If not specified, the
- default is <filename>/var/run/named/session.key</filename>.
- (See <xref linkend="dynamic_update_policies"/>, and in
- particular the discussion of the
- <command>update-policy</command> statement's
- <userinput>local</userinput> option for more
- information about this feature.)
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>session-keyname</command></term>
- <listitem>
- <para>
- The key name to use for the TSIG session key.
- If not specified, the default is "local-ddns".
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>session-keyalg</command></term>
- <listitem>
- <para>
- The algorithm to use for the TSIG session key.
- Valid values are hmac-sha1, hmac-sha224, hmac-sha256,
- hmac-sha384, hmac-sha512 and hmac-md5. If not
- specified, the default is hmac-sha256.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>port</command></term>
- <listitem>
- <para>
- The UDP/TCP port number the server uses for
- receiving and sending DNS protocol traffic.
- The default is 53. This option is mainly intended for server
- testing;
- a server using a port other than 53 will not be able to
- communicate with
- the global DNS.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>dscp</command></term>
- <listitem>
- <para>
- The global Differentiated Services Code Point (DSCP)
- value to classify outgoing DNS traffic on operating
- systems that support DSCP. Valid values are 0 through 63.
- It is not configured by default.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>random-device</command></term>
- <listitem>
- <para>
- The source of entropy to be used by the server. Entropy is
- primarily needed
- for DNSSEC operations, such as TKEY transactions and dynamic
- update of signed
- zones. This options specifies the device (or file) from which
- to read
- entropy. If this is a file, operations requiring entropy will
- fail when the
- file has been exhausted. If not specified, the default value
- is
- <filename>/dev/random</filename>
- (or equivalent) when present, and none otherwise. The
- <command>random-device</command> option takes
- effect during
- the initial configuration load at server startup time and
- is ignored on subsequent reloads.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>preferred-glue</command></term>
- <listitem>
- <para>
- If specified, the listed type (A or AAAA) will be emitted
- before other glue
- in the additional section of a query response.
- The default is to prefer A records when responding
- to queries that arrived via IPv4 and AAAA when
- responding to queries that arrived via IPv6.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry xml:id="root_delegation_only">
- <term><command>root-delegation-only</command></term>
- <listitem>
- <para>
- Turn on enforcement of delegation-only in TLDs
- (top level domains) and root zones with an optional
- exclude list.
- </para>
- <para>
- DS queries are expected to be made to and be answered by
- delegation only zones. Such queries and responses are
- treated as an exception to delegation-only processing
- and are not converted to NXDOMAIN responses provided
- a CNAME is not discovered at the query name.
- </para>
- <para>
- If a delegation only zone server also serves a child
- zone it is not always possible to determine whether
- an answer comes from the delegation only zone or the
- child zone. SOA NS and DNSKEY records are apex
- only records and a matching response that contains
- these records or DS is treated as coming from a
- child zone. RRSIG records are also examined to see
- if they are signed by a child zone or not. The
- authority section is also examined to see if there
- is evidence that the answer is from the child zone.
- Answers that are determined to be from a child zone
- are not converted to NXDOMAIN responses. Despite
- all these checks there is still a possibility of
- false negatives when a child zone is being served.
- </para>
- <para>
- Similarly false positives can arise from empty nodes
- (no records at the name) in the delegation only zone
- when the query type is not ANY.
- </para>
- <para>
- Note some TLDs are not delegation only (e.g. "DE", "LV",
- "US" and "MUSEUM"). This list is not exhaustive.
- </para>
-
-<programlisting>
-options {
- root-delegation-only exclude { "de"; "lv"; "us"; "museum"; };
-};
-</programlisting>
-
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>disable-algorithms</command></term>
- <listitem>
- <para>
- Disable the specified DNSSEC algorithms at and below the
- specified name.
- Multiple <command>disable-algorithms</command>
- statements are allowed.
- Only the best match <command>disable-algorithms</command>
- clause will be used to determine which algorithms are used.
- </para>
- <para>
- If all supported algorithms are disabled, the zones covered
- by the <command>disable-algorithms</command> will be treated
- as insecure.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>disable-ds-digests</command></term>
- <listitem>
- <para>
- Disable the specified DS/DLV digest types at and below the
- specified name.
- Multiple <command>disable-ds-digests</command>
- statements are allowed.
- Only the best match <command>disable-ds-digests</command>
- clause will be used to determine which digest types are used.
- </para>
- <para>
- If all supported digest types are disabled, the zones covered
- by the <command>disable-ds-digests</command> will be treated
- as insecure.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>dnssec-lookaside</command></term>
- <listitem>
- <para>
- When set, <command>dnssec-lookaside</command> provides the
- validator with an alternate method to validate DNSKEY
- records at the top of a zone. When a DNSKEY is at or
- below a domain specified by the deepest
- <command>dnssec-lookaside</command>, and the normal DNSSEC
- validation has left the key untrusted, the trust-anchor
- will be appended to the key name and a DLV record will be
- looked up to see if it can validate the key. If the DLV
- record validates a DNSKEY (similarly to the way a DS
- record does) the DNSKEY RRset is deemed to be trusted.
- </para>
- <para>
- If <command>dnssec-lookaside</command> is set to
- <userinput>auto</userinput>, then built-in default
- values for the DLV domain and trust anchor will be
- used, along with a built-in key for validation.
- </para>
- <para>
- If <command>dnssec-lookaside</command> is set to
- <userinput>no</userinput>, then dnssec-lookaside
- is not used.
- </para>
- <para>
- The default DLV key is stored in the file
- <filename>bind.keys</filename>;
- <command>named</command> will load that key at
- startup if <command>dnssec-lookaside</command> is set to
- <constant>auto</constant>. A copy of the file is
- installed along with <acronym>BIND</acronym> 9, and is
- current as of the release date. If the DLV key expires, a
- new copy of <filename>bind.keys</filename> can be downloaded
- from <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.isc.org/solutions/dlv/">https://www.isc.org/solutions/dlv/</link>.
- </para>
- <para>
- (To prevent problems if <filename>bind.keys</filename> is
- not found, the current key is also compiled in to
- <command>named</command>. Relying on this is not
- recommended, however, as it requires <command>named</command>
- to be recompiled with a new key when the DLV key expires.)
- </para>
- <para>
- NOTE: <command>named</command> only loads certain specific
- keys from <filename>bind.keys</filename>: those for the
- DLV zone and for the DNS root zone. The file cannot be
- used to store keys for other zones.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>dnssec-must-be-secure</command></term>
- <listitem>
- <para>
- Specify hierarchies which must be or may not be secure
- (signed and validated). If <userinput>yes</userinput>,
- then <command>named</command> will only accept answers if
- they are secure. If <userinput>no</userinput>, then normal
- DNSSEC validation applies allowing for insecure answers to
- be accepted. The specified domain must be under a
- <command>trusted-keys</command> or
- <command>managed-keys</command> statement, or
- <command>dnssec-lookaside</command> must be active.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>dns64</command></term>
- <listitem>
- <para>
- This directive instructs <command>named</command> to
- return mapped IPv4 addresses to AAAA queries when
- there are no AAAA records. It is intended to be
- used in conjunction with a NAT64. Each
- <command>dns64</command> defines one DNS64 prefix.
- Multiple DNS64 prefixes can be defined.
- </para>
- <para>
- Compatible IPv6 prefixes have lengths of 32, 40, 48, 56,
- 64 and 96 as per RFC 6052.
- </para>
- <para>
- Additionally a reverse IP6.ARPA zone will be created for
- the prefix to provide a mapping from the IP6.ARPA names
- to the corresponding IN-ADDR.ARPA names using synthesized
- CNAMEs. <command>dns64-server</command> and
- <command>dns64-contact</command> can be used to specify
- the name of the server and contact for the zones. These
- are settable at the view / options level. These are
- not settable on a per-prefix basis.
- </para>
- <para>
- Each <command>dns64</command> supports an optional
- <command>clients</command> ACL that determines which
- clients are affected by this directive. If not defined,
- it defaults to <userinput>any;</userinput>.
- </para>
- <para>
- Each <command>dns64</command> supports an optional
- <command>mapped</command> ACL that selects which
- IPv4 addresses are to be mapped in the corresponding
- A RRset. If not defined it defaults to
- <userinput>any;</userinput>.
- </para>
- <para>
- Normally, DNS64 won't apply to a domain name that
- owns one or more AAAA records; these records will
- simply be returned. The optional
- <command>exclude</command> ACL allows specification
- of a list of IPv6 addresses that will be ignored
- if they appear in a domain name's AAAA records, and
- DNS64 will be applied to any A records the domain
- name owns. If not defined, <command>exclude</command>
- defaults to ::ffff:0.0.0.0/96.
- </para>
- <para>
- A optional <command>suffix</command> can also
- be defined to set the bits trailing the mapped
- IPv4 address bits. By default these bits are
- set to <userinput>::</userinput>. The bits
- matching the prefix and mapped IPv4 address
- must be zero.
- </para>
- <para>
- If <command>recursive-only</command> is set to
- <command>yes</command> the DNS64 synthesis will
- only happen for recursive queries. The default
- is <command>no</command>.
- </para>
- <para>
- If <command>break-dnssec</command> is set to
- <command>yes</command> the DNS64 synthesis will
- happen even if the result, if validated, would
- cause a DNSSEC validation failure. If this option
- is set to <command>no</command> (the default), the DO
- is set on the incoming query, and there are RRSIGs on
- the applicable records, then synthesis will not happen.
- </para>
-<programlisting>
- acl rfc1918 { 10/8; 192.168/16; 172.16/12; };
-
- dns64 64:FF9B::/96 {
- clients { any; };
- mapped { !rfc1918; any; };
- exclude { 64:FF9B::/96; ::ffff:0000:0000/96; };
- suffix ::;
- };
-</programlisting>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>dnssec-loadkeys-interval</command></term>
- <listitem>
- <para>
- When a zone is configured with <command>auto-dnssec
- maintain;</command> its key repository must be checked
- periodically to see if any new keys have been added
- or any existing keys' timing metadata has been updated
- (see <xref linkend="man.dnssec-keygen"/> and
- <xref linkend="man.dnssec-settime"/>). The
- <command>dnssec-loadkeys-interval</command> option
- sets the frequency of automatic repository checks, in
- minutes. The default is <literal>60</literal> (1 hour),
- the minimum is <literal>1</literal> (1 minute), and the
- maximum is <literal>1440</literal> (24 hours); any higher
- value is silently reduced.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>dnssec-update-mode</command></term>
- <listitem>
- <para>
- If this option is set to its default value of
- <literal>maintain</literal> in a zone of type
- <literal>master</literal> which is DNSSEC-signed
- and configured to allow dynamic updates (see
- <xref linkend="dynamic_update_policies"/>), and
- if <command>named</command> has access to the
- private signing key(s) for the zone, then
- <command>named</command> will automatically sign all new
- or changed records and maintain signatures for the zone
- by regenerating RRSIG records whenever they approach
- their expiration date.
- </para>
- <para>
- If the option is changed to <literal>no-resign</literal>,
- then <command>named</command> will sign all new or
- changed records, but scheduled maintenance of
- signatures is disabled.
- </para>
- <para>
- With either of these settings, <command>named</command>
- will reject updates to a DNSSEC-signed zone when the
- signing keys are inactive or unavailable to
- <command>named</command>. (A planned third option,
- <literal>external</literal>, will disable all automatic
- signing and allow DNSSEC data to be submitted into a zone
- via dynamic update; this is not yet implemented.)
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>nta-lifetime</command></term>
- <listitem>
- <para>
- Species the default lifetime, in seconds,
- that will be used for negative trust anchors added
- via <command>rndc nta</command>.
- </para>
- <para>
- A negative trust anchor selectively disables
- DNSSEC validation for zones that are known to be
- failing because of misconfiguration rather than
- an attack. When data to be validated is
- at or below an active NTA (and above any other
- configured trust anchors), <command>named</command> will
- abort the DNSSEC validation process and treat the data as
- insecure rather than bogus. This continues until the
- NTA's lifetime is elapsed. NTAs persist
- across <command>named</command> restarts.
- </para>
- <para>
- For convenience, TTL-style time unit suffixes can be
- used to specify the NTA lifetime in seconds, minutes
- or hours. <option>nta-lifetime</option> defaults to
- one hour. It cannot exceed one week.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>nta-recheck</command></term>
- <listitem>
- <para>
- Species how often to check whether negative
- trust anchors added via <command>rndc nta</command>
- are still necessary.
- </para>
- <para>
- A negative trust anchor is normally used when a
- domain has stopped validating due to operator error;
- it temporarily disables DNSSEC validation for that
- domain. In the interest of ensuring that DNSSEC
- validation is turned back on as soon as possible,
- <command>named</command> will periodically send a
- query to the domain, ignoring negative trust anchors,
- to find out whether it can now be validated. If so,
- the negative trust anchor is allowed to expire early.
- </para>
- <para>
- Validity checks can be disabled for an individual
- NTA by using <command>rndc nta -f</command>, or
- for all NTAs by setting <option>nta-recheck</option>
- to zero.
- </para>
- <para>
- For convenience, TTL-style time unit suffixes can be
- used to specify the NTA recheck interval in seconds,
- minutes or hours. The default is five minutes. It
- cannot be longer than <option>nta-lifetime</option>
- (which cannot be longer than a week).
- </para>
- </listitem>
- </varlistentry>
-
-
- <varlistentry>
- <term><command>max-zone-ttl</command></term>
- <listitem>
- <para>
- Specifies a maximum permissible TTL value in seconds.
- For convenience, TTL-style time unit suffixes may be
- used to specify the maximum value.
- When loading a zone file using a
- <option>masterfile-format</option> of
- <constant>text</constant> or <constant>raw</constant>,
- any record encountered with a TTL higher than
- <option>max-zone-ttl</option> will cause the zone to
- be rejected.
- </para>
- <para>
- This is useful in DNSSEC-signed zones because when
- rolling to a new DNSKEY, the old key needs to remain
- available until RRSIG records have expired from
- caches. The <option>max-zone-ttl</option> option guarantees
- that the largest TTL in the zone will be no higher
- than the set value.
- </para>
- <para>
- (NOTE: Because <constant>map</constant>-format files
- load directly into memory, this option cannot be
- used with them.)
- </para>
- <para>
- The default value is <constant>unlimited</constant>.
- A <option>max-zone-ttl</option> of zero is treated as
- <constant>unlimited</constant>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>serial-update-method</command></term>
- <listitem>
- <para>
- Zones configured for dynamic DNS may use this
- option to set the update method that will be used for
- the zone serial number in the SOA record.
- </para>
- <para>
- With the default setting of
- <command>serial-update-method increment;</command>, the
- SOA serial number will be incremented by one each time
- the zone is updated.
- </para>
- <para>
- When set to
- <command>serial-update-method unixtime;</command>, the
- SOA serial number will be set to the number of seconds
- since the UNIX epoch, unless the serial number is
- already greater than or equal to that value, in which
- case it is simply incremented by one.
- </para>
- <para>
- When set to
- <command>serial-update-method date;</command>, the
- new SOA serial number will be the current date
- in the form "YYYYMMDD", followed by two zeroes,
- unless the existing serial number is already greater
- than or equal to that value, in which case it is
- incremented by one.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>zone-statistics</command></term>
- <listitem>
- <para>
- If <userinput>full</userinput>, the server will collect
- statistical data on all zones (unless specifically
- turned off on a per-zone basis by specifying
- <command>zone-statistics terse</command> or
- <command>zone-statistics none</command>
- in the <command>zone</command> statement).
- The default is <userinput>terse</userinput>, providing
- minimal statistics on zones (including name and
- current serial number, but not query type
- counters).
- </para>
- <para>
- These statistics may be accessed via the
- <command>statistics-channel</command> or
- using <command>rndc stats</command>, which
- will dump them to the file listed
- in the <command>statistics-file</command>. See
- also <xref linkend="statsfile"/>.
- </para>
- <para>
- For backward compatibility with earlier versions
- of BIND 9, the <command>zone-statistics</command>
- option can also accept <userinput>yes</userinput>
- or <userinput>no</userinput>; <userinput>yes</userinput>
- has the same meaning as <userinput>full</userinput>.
- As of <acronym>BIND</acronym> 9.10,
- <userinput>no</userinput> has the same meaning
- as <userinput>none</userinput>; previously, it
- was the same as <userinput>terse</userinput>.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- <section xml:id="boolean_options"><info><title>Boolean Options</title></info>
-
- <variablelist>
-
- <varlistentry>
- <term><command>automatic-interface-scan</command></term>
- <listitem>
- <para>
- If <userinput>yes</userinput> and supported by the OS,
- automatically rescan network interfaces when the interface
- addresses are added or removed. The default is
- <userinput>yes</userinput>.
- </para>
- <para>
- Currently the OS needs to support routing sockets for
- <command>automatic-interface-scan</command> to be
- supported.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>allow-new-zones</command></term>
- <listitem>
- <para>
- If <userinput>yes</userinput>, then zones can be
- added at runtime via <command>rndc addzone</command>.
- The default is <userinput>no</userinput>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>auth-nxdomain</command></term>
- <listitem>
- <para>
- If <userinput>yes</userinput>, then the <command>AA</command> bit
- is always set on NXDOMAIN responses, even if the server is
- not actually
- authoritative. The default is <userinput>no</userinput>;
- this is
- a change from <acronym>BIND</acronym> 8. If you
- are using very old DNS software, you
- may need to set it to <userinput>yes</userinput>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>deallocate-on-exit</command></term>
- <listitem>
- <para>
- This option was used in <acronym>BIND</acronym>
- 8 to enable checking
- for memory leaks on exit. <acronym>BIND</acronym> 9 ignores the option and always performs
- the checks.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>memstatistics</command></term>
- <listitem>
- <para>
- Write memory statistics to the file specified by
- <command>memstatistics-file</command> at exit.
- The default is <userinput>no</userinput> unless
- '-m record' is specified on the command line in
- which case it is <userinput>yes</userinput>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>dialup</command></term>
- <listitem>
- <para>
- If <userinput>yes</userinput>, then the
- server treats all zones as if they are doing zone transfers
- across
- a dial-on-demand dialup link, which can be brought up by
- traffic
- originating from this server. This has different effects
- according
- to zone type and concentrates the zone maintenance so that
- it all
- happens in a short interval, once every <command>heartbeat-interval</command> and
- hopefully during the one call. It also suppresses some of
- the normal
- zone maintenance traffic. The default is <userinput>no</userinput>.
- </para>
- <para>
- The <command>dialup</command> option
- may also be specified in the <command>view</command> and
- <command>zone</command> statements,
- in which case it overrides the global <command>dialup</command>
- option.
- </para>
- <para>
- If the zone is a master zone, then the server will send out a
- NOTIFY
- request to all the slaves (default). This should trigger the
- zone serial
- number check in the slave (providing it supports NOTIFY)
- allowing the slave
- to verify the zone while the connection is active.
- The set of servers to which NOTIFY is sent can be controlled
- by
- <command>notify</command> and <command>also-notify</command>.
- </para>
- <para>
- If the
- zone is a slave or stub zone, then the server will suppress
- the regular
- "zone up to date" (refresh) queries and only perform them
- when the
- <command>heartbeat-interval</command> expires in
- addition to sending
- NOTIFY requests.
- </para>
- <para>
- Finer control can be achieved by using
- <userinput>notify</userinput> which only sends NOTIFY
- messages,
- <userinput>notify-passive</userinput> which sends NOTIFY
- messages and
- suppresses the normal refresh queries, <userinput>refresh</userinput>
- which suppresses normal refresh processing and sends refresh
- queries
- when the <command>heartbeat-interval</command>
- expires, and
- <userinput>passive</userinput> which just disables normal
- refresh
- processing.
- </para>
-
- <informaltable colsep="0" rowsep="0">
- <tgroup cols="4" colsep="0" rowsep="0" tgroupstyle="4Level-table">
- <colspec colname="1" colnum="1" colsep="0" colwidth="1.150in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="1.150in"/>
- <colspec colname="3" colnum="3" colsep="0" colwidth="1.150in"/>
- <colspec colname="4" colnum="4" colsep="0" colwidth="1.150in"/>
- <tbody>
- <row rowsep="0">
- <entry colname="1">
- <para>
- dialup mode
- </para>
- </entry>
- <entry colname="2">
- <para>
- normal refresh
- </para>
- </entry>
- <entry colname="3">
- <para>
- heart-beat refresh
- </para>
- </entry>
- <entry colname="4">
- <para>
- heart-beat notify
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>no</command> (default)</para>
- </entry>
- <entry colname="2">
- <para>
- yes
- </para>
- </entry>
- <entry colname="3">
- <para>
- no
- </para>
- </entry>
- <entry colname="4">
- <para>
- no
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>yes</command></para>
- </entry>
- <entry colname="2">
- <para>
- no
- </para>
- </entry>
- <entry colname="3">
- <para>
- yes
- </para>
- </entry>
- <entry colname="4">
- <para>
- yes
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>notify</command></para>
- </entry>
- <entry colname="2">
- <para>
- yes
- </para>
- </entry>
- <entry colname="3">
- <para>
- no
- </para>
- </entry>
- <entry colname="4">
- <para>
- yes
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>refresh</command></para>
- </entry>
- <entry colname="2">
- <para>
- no
- </para>
- </entry>
- <entry colname="3">
- <para>
- yes
- </para>
- </entry>
- <entry colname="4">
- <para>
- no
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>passive</command></para>
- </entry>
- <entry colname="2">
- <para>
- no
- </para>
- </entry>
- <entry colname="3">
- <para>
- no
- </para>
- </entry>
- <entry colname="4">
- <para>
- no
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>notify-passive</command></para>
- </entry>
- <entry colname="2">
- <para>
- no
- </para>
- </entry>
- <entry colname="3">
- <para>
- no
- </para>
- </entry>
- <entry colname="4">
- <para>
- yes
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>
- Note that normal NOTIFY processing is not affected by
- <command>dialup</command>.
- </para>
-
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>fake-iquery</command></term>
- <listitem>
- <para>
- In <acronym>BIND</acronym> 8, this option
- enabled simulating the obsolete DNS query type
- IQUERY. <acronym>BIND</acronym> 9 never does
- IQUERY simulation.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>fetch-glue</command></term>
- <listitem>
- <para>
- This option is obsolete.
- In BIND 8, <userinput>fetch-glue yes</userinput>
- caused the server to attempt to fetch glue resource records
- it
- didn't have when constructing the additional
- data section of a response. This is now considered a bad
- idea
- and BIND 9 never does it.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>flush-zones-on-shutdown</command></term>
- <listitem>
- <para>
- When the nameserver exits due receiving SIGTERM,
- flush or do not flush any pending zone writes. The default
- is
- <command>flush-zones-on-shutdown</command> <userinput>no</userinput>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>geoip-use-ecs</command></term>
- <listitem>
- <para>
- When BIND is compiled with GeoIP support and configured
- with "geoip" ACL elements, this option indicates whether
- the EDNS Client Subnet option, if present in a request,
- should be used for matching against the GeoIP database.
- The default is
- <command>geoip-use-ecs</command> <userinput>yes</userinput>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>has-old-clients</command></term>
- <listitem>
- <para>
- This option was incorrectly implemented
- in <acronym>BIND</acronym> 8, and is ignored by <acronym>BIND</acronym> 9.
- To achieve the intended effect
- of
- <command>has-old-clients</command> <userinput>yes</userinput>, specify
- the two separate options <command>auth-nxdomain</command> <userinput>yes</userinput>
- and <command>rfc2308-type1</command> <userinput>no</userinput> instead.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>host-statistics</command></term>
- <listitem>
- <para>
- In BIND 8, this enables keeping of
- statistics for every host that the name server interacts
- with.
- Not implemented in BIND 9.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>maintain-ixfr-base</command></term>
- <listitem>
- <para>
- <emphasis>This option is obsolete</emphasis>.
- It was used in <acronym>BIND</acronym> 8 to
- determine whether a transaction log was
- kept for Incremental Zone Transfer. <acronym>BIND</acronym> 9 maintains a transaction
- log whenever possible. If you need to disable outgoing
- incremental zone
- transfers, use <command>provide-ixfr</command> <userinput>no</userinput>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>message-compression</command></term> <listitem>
- <para>
- If <userinput>yes</userinput>, DNS name compression is
- used in responses to regular queries (not including
- AXFR or IXFR, which always uses compression). Setting
- this option to <userinput>no</userinput> reduces CPU
- usage on servers and may improve throughput. However,
- it increases response size, which may cause more queries
- to be processed using TCP; a server with compression
- disabled is out of compliance with RFC 1123 Section
- 6.1.3.2. The default is <userinput>yes</userinput>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>minimal-responses</command></term>
- <listitem>
- <para>
- If set to <userinput>yes</userinput>, then when generating
- responses the server will only add records to the authority
- and additional data sections when they are required (e.g.
- delegations, negative responses). This may improve the
- performance of the server.
- </para>
- <para>
- When set to <userinput>no-auth</userinput>, the
- server will omit records from the authority section
- unless they are required, but it may still add
- records to the additional section. When set to
- <userinput>no-auth-recursive</userinput>, this
- is only done if the query is recursive. These
- settings are useful when answering stub clients,
- which usually ignore the authority section.
- <userinput>no-auth-recursive</userinput> is
- designed for mixed-mode servers which handle
- both authoritative and recursive queries.
- </para>
- <para>
- The default is <userinput>no</userinput>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>minimal-any</command></term>
- <listitem>
- <para>
- If set to <userinput>yes</userinput>, then when
- generating a positive response to a query of type
- ANY over UDP, the server will reply with only one
- of the RRsets for the query name, and its covering
- RRSIGs if any, instead of replying with all known
- RRsets for the name. Similarly, a query for type
- RRSIG will be answered with the RRSIG records covering
- only one type. This can reduce the impact of some kinds
- of attack traffic, without harming legitimate
- clients. (Note, however, that the RRset returned is the
- first one found in the database; it is not necessarily
- the smallest available RRset.)
- Additionally, <option>minimal-responses</option> is
- turned on for these queries, so no unnecessary records
- will be added to the authority or additional sections.
- The default is <userinput>no</userinput>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>multiple-cnames</command></term>
- <listitem>
- <para>
- This option was used in <acronym>BIND</acronym> 8 to allow
- a domain name to have multiple CNAME records in violation of
- the DNS standards. <acronym>BIND</acronym> 9.2 onwards
- always strictly enforces the CNAME rules both in master
- files and dynamic updates.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>notify</command></term>
- <listitem>
- <para>
- If <userinput>yes</userinput> (the default),
- DNS NOTIFY messages are sent when a zone the server is
- authoritative for
- changes, see <xref linkend="notify"/>. The messages are
- sent to the
- servers listed in the zone's NS records (except the master
- server identified
- in the SOA MNAME field), and to any servers listed in the
- <command>also-notify</command> option.
- </para>
- <para>
- If <userinput>master-only</userinput>, notifies are only
- sent
- for master zones.
- If <userinput>explicit</userinput>, notifies are sent only
- to
- servers explicitly listed using <command>also-notify</command>.
- If <userinput>no</userinput>, no notifies are sent.
- </para>
- <para>
- The <command>notify</command> option may also be
- specified in the <command>zone</command>
- statement,
- in which case it overrides the <command>options notify</command> statement.
- It would only be necessary to turn off this option if it
- caused slaves
- to crash.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>notify-to-soa</command></term>
- <listitem>
- <para>
- If <userinput>yes</userinput> do not check the nameservers
- in the NS RRset against the SOA MNAME. Normally a NOTIFY
- message is not sent to the SOA MNAME (SOA ORIGIN) as it is
- supposed to contain the name of the ultimate master.
- Sometimes, however, a slave is listed as the SOA MNAME in
- hidden master configurations and in that case you would
- want the ultimate master to still send NOTIFY messages to
- all the nameservers listed in the NS RRset.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>recursion</command></term>
- <listitem>
- <para>
- If <userinput>yes</userinput>, and a
- DNS query requests recursion, then the server will attempt
- to do
- all the work required to answer the query. If recursion is
- off
- and the server does not already know the answer, it will
- return a
- referral response. The default is
- <userinput>yes</userinput>.
- Note that setting <command>recursion no</command> does not prevent
- clients from getting data from the server's cache; it only
- prevents new data from being cached as an effect of client
- queries.
- Caching may still occur as an effect the server's internal
- operation, such as NOTIFY address lookups.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>request-nsid</command></term>
- <listitem>
- <para>
- If <userinput>yes</userinput>, then an empty EDNS(0)
- NSID (Name Server Identifier) option is sent with all
- queries to authoritative name servers during iterative
- resolution. If the authoritative server returns an NSID
- option in its response, then its contents are logged in
- the <command>resolver</command> category at level
- <command>info</command>.
- The default is <userinput>no</userinput>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>request-sit</command></term>
- <listitem>
- <para>
- This experimental option is obsolete.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>require-server-cookie</command></term>
- <listitem>
- <para>
- Require a valid server cookie before sending a full
- response to a UDP request from a cookie aware client.
- BADCOOKIE is sent if there is a bad or no existent
- server cookie.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>send-cookie</command></term>
- <listitem>
- <para>
- If <userinput>yes</userinput>, then a COOKIE EDNS
- option is sent along with the query. If the
- resolver has previously talked to the server, the
- COOKIE returned in the previous transaction is sent.
- This is used by the server to determine whether
- the resolver has talked to it before. A resolver
- sending the correct COOKIE is assumed not to be an
- off-path attacker sending a spoofed-source query;
- the query is therefore unlikely to be part of a
- reflection/amplification attack, so resolvers
- sending a correct COOKIE option are not subject to
- response rate limiting (RRL). Resolvers which
- do not send a correct COOKIE option may be limited
- to receiving smaller responses via the
- <command>nocookie-udp-size</command> option.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>nocookie-udp-size</command></term>
- <listitem>
- <para>
- Sets the maximum size of UDP responses that will be
- sent to queries without a valid server COOKIE. A value
- below 128 will be silently raised to 128. The default
- value is 4096, but the <command>max-udp-size</command>
- option may further limit the response size.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>sit-secret</command></term>
- <listitem>
- <para>
- This experimental option is obsolete.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>cookie-algorithm</command></term>
- <listitem>
- <para>
- Set the algorithm to be used when generating the
- server cookie. One of "aes", "sha1" or "sha256".
- The default is "aes" if supported by the cryptographic
- library or otherwise "sha256".
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>cookie-secret</command></term>
- <listitem>
- <para>
- If set, this is a shared secret used for generating
- and verifying EDNS COOKIE options
- within an anycast cluster. If not set, the system
- will generate a random secret at startup. The
- shared secret is encoded as a hex string and needs
- to be 128 bits for AES128, 160 bits for SHA1 and
- 256 bits for SHA256.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>rfc2308-type1</command></term>
- <listitem>
- <para>
- Setting this to <userinput>yes</userinput> will
- cause the server to send NS records along with the SOA
- record for negative
- answers. The default is <userinput>no</userinput>.
- </para>
- <note>
- <simpara>
- Not yet implemented in <acronym>BIND</acronym>
- 9.
- </simpara>
- </note>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>trust-anchor-telemetry</command></term>
- <listitem>
- <para>
- Causes <command>named</command> to send specially-formed
- queries once per day to domains for which trust anchors
- have been configured via <command>trusted-keys</command>,
- <command>managed-keys</command>,
- <command>dnssec-validation auto</command>, or
- <command>dnssec-lookaside auto</command>.
- </para>
- <para>
- The query name used for these queries has the
- form "_ta-xxxx(-xxxx)(...)".&lt;domain&gt;, where
- each "xxxx" is a group of four hexadecimal digits
- representing the key ID of a trusted DNSSEC key.
- The key IDs for each domain are sorted smallest
- to largest prior to encoding. The query type is NULL.
- </para>
- <para>
- By monitoring these queries, zone operators will
- be able to see which resolvers have been updated to
- trust a new key; this may help them decide when it
- is safe to remove an old one.
- </para>
- <para>
- The default is <userinput>yes</userinput>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>use-id-pool</command></term>
- <listitem>
- <para>
- <emphasis>This option is obsolete</emphasis>.
- <acronym>BIND</acronym> 9 always allocates query
- IDs from a pool.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>use-ixfr</command></term>
- <listitem>
- <para>
- <emphasis>This option is obsolete</emphasis>.
- If you need to disable IXFR to a particular server or
- servers, see
- the information on the <command>provide-ixfr</command> option
- in <xref linkend="server_statement_definition_and_usage"/>.
- See also
- <xref linkend="incremental_zone_transfers"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>provide-ixfr</command></term>
- <listitem>
- <para>
- See the description of
- <command>provide-ixfr</command> in
- <xref linkend="server_statement_definition_and_usage"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>request-ixfr</command></term>
- <listitem>
- <para>
- See the description of
- <command>request-ixfr</command> in
- <xref linkend="server_statement_definition_and_usage"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>request-expire</command></term>
- <listitem>
- <para>
- See the description of
- <command>request-expire</command> in
- <xref linkend="server_statement_definition_and_usage"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>treat-cr-as-space</command></term>
- <listitem>
- <para>
- This option was used in <acronym>BIND</acronym>
- 8 to make
- the server treat carriage return ("<command>\r</command>") characters the same way
- as a space or tab character,
- to facilitate loading of zone files on a UNIX system that
- were generated
- on an NT or DOS machine. In <acronym>BIND</acronym> 9, both UNIX "<command>\n</command>"
- and NT/DOS "<command>\r\n</command>" newlines
- are always accepted,
- and the option is ignored.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>additional-from-auth</command></term>
- <term><command>additional-from-cache</command></term>
- <listitem>
-
- <para>
- These options control the behavior of an authoritative
- server when
- answering queries which have additional data, or when
- following CNAME
- and DNAME chains.
- </para>
-
- <para>
- When both of these options are set to <userinput>yes</userinput>
- (the default) and a
- query is being answered from authoritative data (a zone
- configured into the server), the additional data section of
- the
- reply will be filled in using data from other authoritative
- zones
- and from the cache. In some situations this is undesirable,
- such
- as when there is concern over the correctness of the cache,
- or
- in servers where slave zones may be added and modified by
- untrusted third parties. Also, avoiding
- the search for this additional data will speed up server
- operations
- at the possible expense of additional queries to resolve
- what would
- otherwise be provided in the additional section.
- </para>
-
- <para>
- For example, if a query asks for an MX record for host <literal>foo.example.com</literal>,
- and the record found is "<literal>MX 10 mail.example.net</literal>", normally the address
- records (A and AAAA) for <literal>mail.example.net</literal> will be provided as well,
- if known, even though they are not in the example.com zone.
- Setting these options to <command>no</command>
- disables this behavior and makes
- the server only search for additional data in the zone it
- answers from.
- </para>
-
- <para>
- These options are intended for use in authoritative-only
- servers, or in authoritative-only views. Attempts to set
- them to <command>no</command> without also
- specifying
- <command>recursion no</command> will cause the
- server to
- ignore the options and log a warning message.
- </para>
-
- <para>
- Specifying <command>additional-from-cache no</command> actually
- disables the use of the cache not only for additional data
- lookups
- but also when looking up the answer. This is usually the
- desired
- behavior in an authoritative-only server where the
- correctness of
- the cached data is an issue.
- </para>
-
- <para>
- When a name server is non-recursively queried for a name
- that is not
- below the apex of any served zone, it normally answers with
- an
- "upwards referral" to the root servers or the servers of
- some other
- known parent of the query name. Since the data in an
- upwards referral
- comes from the cache, the server will not be able to provide
- upwards
- referrals when <command>additional-from-cache no</command>
- has been specified. Instead, it will respond to such
- queries
- with REFUSED. This should not cause any problems since
- upwards referrals are not required for the resolution
- process.
- </para>
-
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>match-mapped-addresses</command></term>
- <listitem>
- <para>
- If <userinput>yes</userinput>, then an
- IPv4-mapped IPv6 address will match any address match
- list entries that match the corresponding IPv4 address.
- </para>
- <para>
- This option was introduced to work around a kernel quirk
- in some operating systems that causes IPv4 TCP
- connections, such as zone transfers, to be accepted on an
- IPv6 socket using mapped addresses. This caused address
- match lists designed for IPv4 to fail to match. However,
- <command>named</command> now solves this problem
- internally. The use of this option is discouraged.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>filter-aaaa-on-v4</command></term>
- <listitem>
- <para>
- This option is only available when
- <acronym>BIND</acronym> 9 is compiled with the
- <userinput>--enable-filter-aaaa</userinput> option on the
- "configure" command line. It is intended to help the
- transition from IPv4 to IPv6 by not giving IPv6 addresses
- to DNS clients unless they have connections to the IPv6
- Internet. This is not recommended unless absolutely
- necessary. The default is <userinput>no</userinput>.
- The <command>filter-aaaa-on-v4</command> option
- may also be specified in <command>view</command> statements
- to override the global <command>filter-aaaa-on-v4</command>
- option.
- </para>
- <para>
- If <userinput>yes</userinput>,
- the DNS client is at an IPv4 address, in <command>filter-aaaa</command>,
- and if the response does not include DNSSEC signatures,
- then all AAAA records are deleted from the response.
- This filtering applies to all responses and not only
- authoritative responses.
- </para>
- <para>
- If <userinput>break-dnssec</userinput>,
- then AAAA records are deleted even when DNSSEC is enabled.
- As suggested by the name, this makes the response not verify,
- because the DNSSEC protocol is designed detect deletions.
- </para>
- <para>
- This mechanism can erroneously cause other servers to
- not give AAAA records to their clients.
- A recursing server with both IPv6 and IPv4 network connections
- that queries an authoritative server using this mechanism
- via IPv4 will be denied AAAA records even if its client is
- using IPv6.
- </para>
- <para>
- This mechanism is applied to authoritative as well as
- non-authoritative records.
- A client using IPv4 that is not allowed recursion can
- erroneously be given AAAA records because the server is not
- allowed to check for A records.
- </para>
- <para>
- Some AAAA records are given to IPv4 clients in glue records.
- IPv4 clients that are servers can then erroneously
- answer requests for AAAA records received via IPv4.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>filter-aaaa-on-v6</command></term>
- <listitem>
- <para>
- Identical to <command>filter-aaaa-on-v4</command>,
- except it filters AAAA responses to queries from IPv6
- clients instead of IPv4 clients. To filter all
- responses, set both options to <userinput>yes</userinput>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>ixfr-from-differences</command></term>
- <listitem>
- <para>
- When <userinput>yes</userinput> and the server loads a new
- version of a master zone from its zone file or receives a
- new version of a slave file via zone transfer, it will
- compare the new version to the previous one and calculate
- a set of differences. The differences are then logged in
- the zone's journal file such that the changes can be
- transmitted to downstream slaves as an incremental zone
- transfer.
- </para>
- <para>
- By allowing incremental zone transfers to be used for
- non-dynamic zones, this option saves bandwidth at the
- expense of increased CPU and memory consumption at the
- master.
- In particular, if the new version of a zone is completely
- different from the previous one, the set of differences
- will be of a size comparable to the combined size of the
- old and new zone version, and the server will need to
- temporarily allocate memory to hold this complete
- difference set.
- </para>
- <para><command>ixfr-from-differences</command>
- also accepts <command>master</command> and
- <command>slave</command> at the view and options
- levels which causes
- <command>ixfr-from-differences</command> to be enabled for
- all <command>master</command> or
- <command>slave</command> zones respectively.
- It is off by default.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>multi-master</command></term>
- <listitem>
- <para>
- This should be set when you have multiple masters for a zone
- and the
- addresses refer to different machines. If <userinput>yes</userinput>, <command>named</command> will
- not log
- when the serial number on the master is less than what <command>named</command>
- currently
- has. The default is <userinput>no</userinput>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>auto-dnssec</command></term>
- <listitem>
- <para>
- Zones configured for dynamic DNS may use this
- option to allow varying levels of automatic DNSSEC key
- management. There are three possible settings:
- </para>
- <para>
- <command>auto-dnssec allow;</command> permits
- keys to be updated and the zone fully re-signed
- whenever the user issues the command <command>rndc sign
- <replaceable>zonename</replaceable></command>.
- </para>
- <para>
- <command>auto-dnssec maintain;</command> includes the
- above, but also automatically adjusts the zone's DNSSEC
- keys on schedule, according to the keys' timing metadata
- (see <xref linkend="man.dnssec-keygen"/> and
- <xref linkend="man.dnssec-settime"/>). The command
- <command>rndc sign
- <replaceable>zonename</replaceable></command> causes
- <command>named</command> to load keys from the key
- repository and sign the zone with all keys that are
- active.
- <command>rndc loadkeys
- <replaceable>zonename</replaceable></command> causes
- <command>named</command> to load keys from the key
- repository and schedule key maintenance events to occur
- in the future, but it does not sign the full zone
- immediately. Note: once keys have been loaded for a
- zone the first time, the repository will be searched
- for changes periodically, regardless of whether
- <command>rndc loadkeys</command> is used. The recheck
- interval is defined by
- <command>dnssec-loadkeys-interval</command>.)
- </para>
- <para>
- The default setting is <command>auto-dnssec off</command>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>dnssec-enable</command></term>
- <listitem>
- <para>
- This indicates whether DNSSEC-related resource
- records are to be returned by <command>named</command>.
- If set to <userinput>no</userinput>,
- <command>named</command> will not return DNSSEC-related
- resource records unless specifically queried for.
- The default is <userinput>yes</userinput>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>dnssec-validation</command></term>
- <listitem>
- <para>
- Enable DNSSEC validation in <command>named</command>.
- Note <command>dnssec-enable</command> also needs to be
- set to <userinput>yes</userinput> to be effective.
- If set to <userinput>no</userinput>, DNSSEC validation
- is disabled. If set to <userinput>auto</userinput>,
- DNSSEC validation is enabled, and a default
- trust-anchor for the DNS root zone is used. If set to
- <userinput>yes</userinput>, DNSSEC validation is enabled,
- but a trust anchor must be manually configured using
- a <command>trusted-keys</command> or
- <command>managed-keys</command> statement. The default
- is <userinput>yes</userinput>.
- </para>
- <note>
- <para>
- Whenever the resolver sends out queries to an
- EDNS-compliant server, it always sets the DO bit
- indicating it can support DNSSEC responses even if
- <command>dnssec-validation</command> is off.
- </para>
- </note>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>dnssec-accept-expired</command></term>
- <listitem>
- <para>
- Accept expired signatures when verifying DNSSEC signatures.
- The default is <userinput>no</userinput>.
- Setting this option to <userinput>yes</userinput>
- leaves <command>named</command> vulnerable to
- replay attacks.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>querylog</command></term>
- <listitem>
- <para>
- Specify whether query logging should be started when <command>named</command>
- starts.
- If <command>querylog</command> is not specified,
- then the query logging
- is determined by the presence of the logging category <command>queries</command>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>check-names</command></term>
- <listitem>
- <para>
- This option is used to restrict the character set and syntax
- of
- certain domain names in master files and/or DNS responses
- received
- from the network. The default varies according to usage
- area. For
- <command>master</command> zones the default is <command>fail</command>.
- For <command>slave</command> zones the default
- is <command>warn</command>.
- For answers received from the network (<command>response</command>)
- the default is <command>ignore</command>.
- </para>
- <para>
- The rules for legal hostnames and mail domains are derived
- from RFC 952 and RFC 821 as modified by RFC 1123.
- </para>
- <para><command>check-names</command>
- applies to the owner names of A, AAAA and MX records.
- It also applies to the domain names in the RDATA of NS, SOA,
- MX, and SRV records.
- It also applies to the RDATA of PTR records where the owner
- name indicated that it is a reverse lookup of a hostname
- (the owner name ends in IN-ADDR.ARPA, IP6.ARPA, or IP6.INT).
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>check-dup-records</command></term>
- <listitem>
- <para>
- Check master zones for records that are treated as different
- by DNSSEC but are semantically equal in plain DNS. The
- default is to <command>warn</command>. Other possible
- values are <command>fail</command> and
- <command>ignore</command>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>check-mx</command></term>
- <listitem>
- <para>
- Check whether the MX record appears to refer to a IP address.
- The default is to <command>warn</command>. Other possible
- values are <command>fail</command> and
- <command>ignore</command>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>check-wildcard</command></term>
- <listitem>
- <para>
- This option is used to check for non-terminal wildcards.
- The use of non-terminal wildcards is almost always as a
- result of a failure
- to understand the wildcard matching algorithm (RFC 1034).
- This option
- affects master zones. The default (<command>yes</command>) is to check
- for non-terminal wildcards and issue a warning.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>check-integrity</command></term>
- <listitem>
- <para>
- Perform post load zone integrity checks on master
- zones. This checks that MX and SRV records refer
- to address (A or AAAA) records and that glue
- address records exist for delegated zones. For
- MX and SRV records only in-zone hostnames are
- checked (for out-of-zone hostnames use
- <command>named-checkzone</command>).
- For NS records only names below top of zone are
- checked (for out-of-zone names and glue consistency
- checks use <command>named-checkzone</command>).
- The default is <command>yes</command>.
- </para>
- <para>
- The use of the SPF record for publishing Sender
- Policy Framework is deprecated as the migration
- from using TXT records to SPF records was abandoned.
- Enabling this option also checks that a TXT Sender
- Policy Framework record exists (starts with "v=spf1")
- if there is an SPF record. Warnings are emitted if the
- TXT record does not exist and can be suppressed with
- <command>check-spf</command>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>check-mx-cname</command></term>
- <listitem>
- <para>
- If <command>check-integrity</command> is set then
- fail, warn or ignore MX records that refer
- to CNAMES. The default is to <command>warn</command>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>check-srv-cname</command></term>
- <listitem>
- <para>
- If <command>check-integrity</command> is set then
- fail, warn or ignore SRV records that refer
- to CNAMES. The default is to <command>warn</command>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>check-sibling</command></term>
- <listitem>
- <para>
- When performing integrity checks, also check that
- sibling glue exists. The default is <command>yes</command>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>check-spf</command></term>
- <listitem>
- <para>
- If <command>check-integrity</command> is set then
- check that there is a TXT Sender Policy Framework
- record present (starts with "v=spf1") if there is an
- SPF record present. The default is
- <command>warn</command>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>zero-no-soa-ttl</command></term>
- <listitem>
- <para>
- When returning authoritative negative responses to
- SOA queries set the TTL of the SOA record returned in
- the authority section to zero.
- The default is <command>yes</command>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>zero-no-soa-ttl-cache</command></term>
- <listitem>
- <para>
- When caching a negative response to a SOA query
- set the TTL to zero.
- The default is <command>no</command>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>update-check-ksk</command></term>
- <listitem>
- <para>
- When set to the default value of <literal>yes</literal>,
- check the KSK bit in each key to determine how the key
- should be used when generating RRSIGs for a secure zone.
- </para>
- <para>
- Ordinarily, zone-signing keys (that is, keys without the
- KSK bit set) are used to sign the entire zone, while
- key-signing keys (keys with the KSK bit set) are only
- used to sign the DNSKEY RRset at the zone apex.
- However, if this option is set to <literal>no</literal>,
- then the KSK bit is ignored; KSKs are treated as if they
- were ZSKs and are used to sign the entire zone. This is
- similar to the <command>dnssec-signzone -z</command>
- command line option.
- </para>
- <para>
- When this option is set to <literal>yes</literal>, there
- must be at least two active keys for every algorithm
- represented in the DNSKEY RRset: at least one KSK and one
- ZSK per algorithm. If there is any algorithm for which
- this requirement is not met, this option will be ignored
- for that algorithm.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>dnssec-dnskey-kskonly</command></term>
- <listitem>
- <para>
- When this option and <command>update-check-ksk</command>
- are both set to <literal>yes</literal>, only key-signing
- keys (that is, keys with the KSK bit set) will be used
- to sign the DNSKEY RRset at the zone apex. Zone-signing
- keys (keys without the KSK bit set) will be used to sign
- the remainder of the zone, but not the DNSKEY RRset.
- This is similar to the
- <command>dnssec-signzone -x</command> command line option.
- </para>
- <para>
- The default is <command>no</command>. If
- <command>update-check-ksk</command> is set to
- <literal>no</literal>, this option is ignored.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>try-tcp-refresh</command></term>
- <listitem>
- <para>
- Try to refresh the zone using TCP if UDP queries fail.
- For BIND 8 compatibility, the default is
- <command>yes</command>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>dnssec-secure-to-insecure</command></term>
- <listitem>
- <para>
- Allow a dynamic zone to transition from secure to
- insecure (i.e., signed to unsigned) by deleting all
- of the DNSKEY records. The default is <command>no</command>.
- If set to <command>yes</command>, and if the DNSKEY RRset
- at the zone apex is deleted, all RRSIG and NSEC records
- will be removed from the zone as well.
- </para>
- <para>
- If the zone uses NSEC3, then it is also necessary to
- delete the NSEC3PARAM RRset from the zone apex; this will
- cause the removal of all corresponding NSEC3 records.
- (It is expected that this requirement will be eliminated
- in a future release.)
- </para>
- <para>
- Note that if a zone has been configured with
- <command>auto-dnssec maintain</command> and the
- private keys remain accessible in the key repository,
- then the zone will be automatically signed again the
- next time <command>named</command> is started.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
-
- </section>
-
- <section xml:id="forwarding"><info><title>Forwarding</title></info>
-
- <para>
- The forwarding facility can be used to create a large site-wide
- cache on a few servers, reducing traffic over links to external
- name servers. It can also be used to allow queries by servers that
- do not have direct access to the Internet, but wish to look up
- exterior
- names anyway. Forwarding occurs only on those queries for which
- the server is not authoritative and does not have the answer in
- its cache.
- </para>
-
- <variablelist>
- <varlistentry>
- <term><command>forward</command></term>
- <listitem>
- <para>
- This option is only meaningful if the
- forwarders list is not empty. A value of <varname>first</varname>,
- the default, causes the server to query the forwarders
- first — and
- if that doesn't answer the question, the server will then
- look for
- the answer itself. If <varname>only</varname> is
- specified, the
- server will only query the forwarders.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>forwarders</command></term>
- <listitem>
- <para>
- Specifies the IP addresses to be used
- for forwarding. The default is the empty list (no
- forwarding).
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
-
- <para>
- Forwarding can also be configured on a per-domain basis, allowing
- for the global forwarding options to be overridden in a variety
- of ways. You can set particular domains to use different
- forwarders,
- or have a different <command>forward only/first</command> behavior,
- or not forward at all, see <xref linkend="zone_statement_grammar"/>.
- </para>
- </section>
-
- <section xml:id="dual_stack"><info><title>Dual-stack Servers</title></info>
-
- <para>
- Dual-stack servers are used as servers of last resort to work
- around
- problems in reachability due the lack of support for either IPv4
- or IPv6
- on the host machine.
- </para>
-
- <variablelist>
- <varlistentry>
- <term><command>dual-stack-servers</command></term>
- <listitem>
- <para>
- Specifies host names or addresses of machines with access to
- both IPv4 and IPv6 transports. If a hostname is used, the
- server must be able
- to resolve the name using only the transport it has. If the
- machine is dual
- stacked, then the <command>dual-stack-servers</command> have no effect unless
- access to a transport has been disabled on the command line
- (e.g. <command>named -4</command>).
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </section>
-
- <section xml:id="access_control"><info><title>Access Control</title></info>
-
-
- <para>
- Access to the server can be restricted based on the IP address
- of the requesting system. See <xref linkend="address_match_lists"/> for
- details on how to specify IP address lists.
- </para>
-
- <variablelist>
-
- <varlistentry>
- <term><command>allow-notify</command></term>
- <listitem>
- <para>
- Specifies which hosts are allowed to
- notify this server, a slave, of zone changes in addition
- to the zone masters.
- <command>allow-notify</command> may also be
- specified in the
- <command>zone</command> statement, in which case
- it overrides the
- <command>options allow-notify</command>
- statement. It is only meaningful
- for a slave zone. If not specified, the default is to
- process notify messages
- only from a zone's master.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>allow-query</command></term>
- <listitem>
- <para>
- Specifies which hosts are allowed to ask ordinary
- DNS questions. <command>allow-query</command> may
- also be specified in the <command>zone</command>
- statement, in which case it overrides the
- <command>options allow-query</command> statement.
- If not specified, the default is to allow queries
- from all hosts.
- </para>
- <note>
- <para>
- <command>allow-query-cache</command> is now
- used to specify access to the cache.
- </para>
- </note>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>allow-query-on</command></term>
- <listitem>
- <para>
- Specifies which local addresses can accept ordinary
- DNS questions. This makes it possible, for instance,
- to allow queries on internal-facing interfaces but
- disallow them on external-facing ones, without
- necessarily knowing the internal network's addresses.
- </para>
- <para>
- Note that <command>allow-query-on</command> is only
- checked for queries that are permitted by
- <command>allow-query</command>. A query must be
- allowed by both ACLs, or it will be refused.
- </para>
- <para>
- <command>allow-query-on</command> may
- also be specified in the <command>zone</command>
- statement, in which case it overrides the
- <command>options allow-query-on</command> statement.
- </para>
- <para>
- If not specified, the default is to allow queries
- on all addresses.
- </para>
- <note>
- <para>
- <command>allow-query-cache</command> is
- used to specify access to the cache.
- </para>
- </note>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>allow-query-cache</command></term>
- <listitem>
- <para>
- Specifies which hosts are allowed to get answers
- from the cache. If <command>allow-query-cache</command>
- is not set then <command>allow-recursion</command>
- is used if set, otherwise <command>allow-query</command>
- is used if set unless <command>recursion no;</command> is
- set in which case <command>none;</command> is used,
- otherwise the default (<command>localnets;</command>
- <command>localhost;</command>) is used.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>allow-query-cache-on</command></term>
- <listitem>
- <para>
- Specifies which local addresses can give answers
- from the cache. If not specified, the default is
- to allow cache queries on any address,
- <command>localnets</command> and
- <command>localhost</command>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>allow-recursion</command></term>
- <listitem>
- <para>
- Specifies which hosts are allowed to make recursive
- queries through this server. If
- <command>allow-recursion</command> is not set
- then <command>allow-query-cache</command> is
- used if set, otherwise <command>allow-query</command>
- is used if set, otherwise the default
- (<command>localnets;</command>
- <command>localhost;</command>) is used.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>allow-recursion-on</command></term>
- <listitem>
- <para>
- Specifies which local addresses can accept recursive
- queries. If not specified, the default is to allow
- recursive queries on all addresses.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>allow-update</command></term>
- <listitem>
- <para>
- Specifies which hosts are allowed to
- submit Dynamic DNS updates for master zones. The default is
- to deny
- updates from all hosts. Note that allowing updates based
- on the requestor's IP address is insecure; see
- <xref linkend="dynamic_update_security"/> for details.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>allow-update-forwarding</command></term>
- <listitem>
- <para>
- Specifies which hosts are allowed to
- submit Dynamic DNS updates to slave zones to be forwarded to
- the
- master. The default is <userinput>{ none; }</userinput>,
- which
- means that no update forwarding will be performed. To
- enable
- update forwarding, specify
- <userinput>allow-update-forwarding { any; };</userinput>.
- Specifying values other than <userinput>{ none; }</userinput> or
- <userinput>{ any; }</userinput> is usually
- counterproductive, since
- the responsibility for update access control should rest
- with the
- master server, not the slaves.
- </para>
- <para>
- Note that enabling the update forwarding feature on a slave
- server
- may expose master servers relying on insecure IP address
- based
- access control to attacks; see <xref linkend="dynamic_update_security"/>
- for more details.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>allow-v6-synthesis</command></term>
- <listitem>
- <para>
- This option was introduced for the smooth transition from
- AAAA
- to A6 and from "nibble labels" to binary labels.
- However, since both A6 and binary labels were then
- deprecated,
- this option was also deprecated.
- It is now ignored with some warning messages.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>allow-transfer</command></term>
- <listitem>
- <para>
- Specifies which hosts are allowed to
- receive zone transfers from the server. <command>allow-transfer</command> may
- also be specified in the <command>zone</command>
- statement, in which
- case it overrides the <command>options allow-transfer</command> statement.
- If not specified, the default is to allow transfers to all
- hosts.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>blackhole</command></term>
- <listitem>
- <para>
- Specifies a list of addresses that the
- server will not accept queries from or use to resolve a
- query. Queries
- from these addresses will not be responded to. The default
- is <userinput>none</userinput>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>filter-aaaa</command></term>
- <listitem>
- <para>
- Specifies a list of addresses to which
- <command>filter-aaaa-on-v4</command>
- is applies. The default is <userinput>any</userinput>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>keep-response-order</command></term>
- <listitem>
- <para>
- Specifies a list of addresses to which the server
- will send responses to TCP queries in the same order
- in which they were received. This disables the
- processing of TCP queries in parallel. The default
- is <userinput>none</userinput>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>no-case-compress</command></term> <listitem>
- <para>
- Specifies a list of addresses which require responses
- to use case-insensitive compression. This ACL can be
- used when <command>named</command> needs to work with
- clients that do not comply with the requirement in RFC
- 1034 to use case-insensitive name comparisons when
- checking for matching domain names.
- </para>
- <para>
- If left undefined, the ACL defaults to
- <command>none</command>: case-insensitive compression
- will be used for all clients. If the ACL is defined and
- matches a client, then case will be ignored when
- compressing domain names in DNS responses sent to that
- client.
- </para>
- <para>
- This can result in slightly smaller responses: if
- a response contains the names "example.com" and
- "example.COM", case-insensitive compression would treat
- the second one as a duplicate. It also ensures
- that the case of the query name exactly matches the
- case of the owner names of returned records, rather
- than matching the case of the records entered in
- the zone file. This allows responses to exactly
- match the query, which is required by some clients
- due to incorrect use of case-sensitive comparisons.
- </para>
- <para>
- Case-insensitive compression is <emphasis>always</emphasis>
- used in AXFR and IXFR responses, regardless of whether
- the client matches this ACL.
- </para>
- <para>
- There are circumstances in which <command>named</command>
- will not preserve the case of owner names of records:
- if a zone file defines records of different types with
- the same name, but the capitalization of the name is
- different (e.g., "www.example.com/A" and
- "WWW.EXAMPLE.COM/AAAA"), then all responses for that
- name will use the <emphasis>first</emphasis> version
- of the name that was used in the zone file. This
- limitation may be addressed in a future release. However,
- domain names specified in the rdata of resource records
- (i.e., records of type NS, MX, CNAME, etc) will always
- have their case preserved unless the client matches this
- ACL.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>resolver-query-timeout</command></term>
- <listitem>
- <para>
- The amount of time in seconds that the resolver
- will spend attempting to resolve a recursive
- query before failing. The default and minimum
- is <literal>10</literal> and the maximum is
- <literal>30</literal>. Setting it to
- <literal>0</literal> will result in the default
- being used.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- </section>
-
- <section xml:id="interfaces"><info><title>Interfaces</title></info>
-
- <para>
- The interfaces and ports that the server will answer queries
- from may be specified using the <command>listen-on</command> option. <command>listen-on</command> takes
- an optional port and an <varname>address_match_list</varname>
- of IPv4 addresses. (IPv6 addresses are ignored, with a
- logged warning.)
- The server will listen on all interfaces allowed by the address
- match list. If a port is not specified, port 53 will be used.
- </para>
- <para>
- Multiple <command>listen-on</command> statements are
- allowed.
- For example,
- </para>
-
-<programlisting>listen-on { 5.6.7.8; };
-listen-on port 1234 { !1.2.3.4; 1.2/16; };
-</programlisting>
-
- <para>
- will enable the name server on port 53 for the IP address
- 5.6.7.8, and on port 1234 of an address on the machine in net
- 1.2 that is not 1.2.3.4.
- </para>
-
- <para>
- If no <command>listen-on</command> is specified, the
- server will listen on port 53 on all IPv4 interfaces.
- </para>
-
- <para>
- The <command>listen-on-v6</command> option is used to
- specify the interfaces and the ports on which the server will
- listen for incoming queries sent using IPv6. If not specified,
- the server will listen on port 53 on all IPv6 interfaces.
- </para>
-
- <para>
- When <programlisting>{ any; }</programlisting> is
- specified
- as the <varname>address_match_list</varname> for the
- <command>listen-on-v6</command> option,
- the server does not bind a separate socket to each IPv6 interface
- address as it does for IPv4 if the operating system has enough API
- support for IPv6 (specifically if it conforms to RFC 3493 and RFC
- 3542).
- Instead, it listens on the IPv6 wildcard address.
- If the system only has incomplete API support for IPv6, however,
- the behavior is the same as that for IPv4.
- </para>
-
- <para>
- A list of particular IPv6 addresses can also be specified, in
- which case
- the server listens on a separate socket for each specified
- address,
- regardless of whether the desired API is supported by the system.
- IPv4 addresses specified in <command>listen-on-v6</command>
- will be ignored, with a logged warning.
- </para>
-
- <para>
- Multiple <command>listen-on-v6</command> options can
- be used.
- For example,
- </para>
-
-<programlisting>listen-on-v6 { any; };
-listen-on-v6 port 1234 { !2001:db8::/32; any; };
-</programlisting>
-
- <para>
- will enable the name server on port 53 for any IPv6 addresses
- (with a single wildcard socket),
- and on port 1234 of IPv6 addresses that is not in the prefix
- 2001:db8::/32 (with separate sockets for each matched address.)
- </para>
-
- <para>
- To make the server not listen on any IPv6 address, use
- </para>
-
-<programlisting>listen-on-v6 { none; };
-</programlisting>
-
- </section>
-
- <section xml:id="query_address"><info><title>Query Address</title></info>
-
- <para>
- If the server doesn't know the answer to a question, it will
- query other name servers. <command>query-source</command> specifies
- the address and port used for such queries. For queries sent over
- IPv6, there is a separate <command>query-source-v6</command> option.
- If <command>address</command> is <command>*</command> (asterisk) or is omitted,
- a wildcard IP address (<command>INADDR_ANY</command>)
- will be used.
- </para>
-
- <para>
- If <command>port</command> is <command>*</command> or is omitted,
- a random port number from a pre-configured
- range is picked up and will be used for each query.
- The port range(s) is that specified in
- the <command>use-v4-udp-ports</command> (for IPv4)
- and <command>use-v6-udp-ports</command> (for IPv6)
- options, excluding the ranges specified in
- the <command>avoid-v4-udp-ports</command>
- and <command>avoid-v6-udp-ports</command> options, respectively.
- </para>
-
- <para>
- The defaults of the <command>query-source</command> and
- <command>query-source-v6</command> options
- are:
- </para>
-
-<programlisting>query-source address * port *;
-query-source-v6 address * port *;
-</programlisting>
-
- <para>
- If <command>use-v4-udp-ports</command> or
- <command>use-v6-udp-ports</command> is unspecified,
- <command>named</command> will check if the operating
- system provides a programming interface to retrieve the
- system's default range for ephemeral ports.
- If such an interface is available,
- <command>named</command> will use the corresponding system
- default range; otherwise, it will use its own defaults:
- </para>
-
-<programlisting>use-v4-udp-ports { range 1024 65535; };
-use-v6-udp-ports { range 1024 65535; };
-</programlisting>
-
- <para>
- Note: make sure the ranges be sufficiently large for
- security. A desirable size depends on various parameters,
- but we generally recommend it contain at least 16384 ports
- (14 bits of entropy).
- Note also that the system's default range when used may be
- too small for this purpose, and that the range may even be
- changed while <command>named</command> is running; the new
- range will automatically be applied when <command>named</command>
- is reloaded.
- It is encouraged to
- configure <command>use-v4-udp-ports</command> and
- <command>use-v6-udp-ports</command> explicitly so that the
- ranges are sufficiently large and are reasonably
- independent from the ranges used by other applications.
- </para>
-
- <para>
- Note: the operational configuration
- where <command>named</command> runs may prohibit the use
- of some ports. For example, UNIX systems will not allow
- <command>named</command> running without a root privilege
- to use ports less than 1024.
- If such ports are included in the specified (or detected)
- set of query ports, the corresponding query attempts will
- fail, resulting in resolution failures or delay.
- It is therefore important to configure the set of ports
- that can be safely used in the expected operational environment.
- </para>
-
- <para>
- The defaults of the <command>avoid-v4-udp-ports</command> and
- <command>avoid-v6-udp-ports</command> options
- are:
- </para>
-
-<programlisting>avoid-v4-udp-ports {};
-avoid-v6-udp-ports {};
-</programlisting>
-
- <para>
- Note: BIND 9.5.0 introduced
- the <command>use-queryport-pool</command>
- option to support a pool of such random ports, but this
- option is now obsolete because reusing the same ports in
- the pool may not be sufficiently secure.
- For the same reason, it is generally strongly discouraged to
- specify a particular port for the
- <command>query-source</command> or
- <command>query-source-v6</command> options;
- it implicitly disables the use of randomized port numbers.
- </para>
-
- <variablelist>
- <varlistentry>
- <term><command>use-queryport-pool</command></term>
- <listitem>
- <para>
- This option is obsolete.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>queryport-pool-ports</command></term>
- <listitem>
- <para>
- This option is obsolete.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>queryport-pool-updateinterval</command></term>
- <listitem>
- <para>
- This option is obsolete.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- <note>
- <para>
- The address specified in the <command>query-source</command> option
- is used for both UDP and TCP queries, but the port applies only
- to UDP queries. TCP queries always use a random
- unprivileged port.
- </para>
- </note>
- <note>
- <para>
- Solaris 2.5.1 and earlier does not support setting the source
- address for TCP sockets.
- </para>
- </note>
- <note>
- <para>
- See also <command>transfer-source</command> and
- <command>notify-source</command>.
- </para>
- </note>
- </section>
-
- <section xml:id="zone_transfers"><info><title>Zone Transfers</title></info>
-
- <para>
- <acronym>BIND</acronym> has mechanisms in place to
- facilitate zone transfers
- and set limits on the amount of load that transfers place on the
- system. The following options apply to zone transfers.
- </para>
-
- <variablelist>
-
- <varlistentry>
- <term><command>also-notify</command></term>
- <listitem>
- <para>
- Defines a global list of IP addresses of name servers
- that are also sent NOTIFY messages whenever a fresh copy of
- the
- zone is loaded, in addition to the servers listed in the
- zone's NS records.
- This helps to ensure that copies of the zones will
- quickly converge on stealth servers.
- Optionally, a port may be specified with each
- <command>also-notify</command> address to send
- the notify messages to a port other than the
- default of 53.
- An optional TSIG key can also be specified with each
- address to cause the notify messages to be signed; this
- can be useful when sending notifies to multiple views.
- In place of explicit addresses, one or more named
- <command>masters</command> lists can be used.
- </para>
- <para>
- If an <command>also-notify</command> list
- is given in a <command>zone</command> statement,
- it will override
- the <command>options also-notify</command>
- statement. When a <command>zone notify</command>
- statement
- is set to <command>no</command>, the IP
- addresses in the global <command>also-notify</command> list will
- not be sent NOTIFY messages for that zone. The default is
- the empty
- list (no global notification list).
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>max-transfer-time-in</command></term>
- <listitem>
- <para>
- Inbound zone transfers running longer than
- this many minutes will be terminated. The default is 120
- minutes
- (2 hours). The maximum value is 28 days (40320 minutes).
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>max-transfer-idle-in</command></term>
- <listitem>
- <para>
- Inbound zone transfers making no progress
- in this many minutes will be terminated. The default is 60
- minutes
- (1 hour). The maximum value is 28 days (40320 minutes).
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>max-transfer-time-out</command></term>
- <listitem>
- <para>
- Outbound zone transfers running longer than
- this many minutes will be terminated. The default is 120
- minutes
- (2 hours). The maximum value is 28 days (40320 minutes).
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>max-transfer-idle-out</command></term>
- <listitem>
- <para>
- Outbound zone transfers making no progress
- in this many minutes will be terminated. The default is 60
- minutes (1
- hour). The maximum value is 28 days (40320 minutes).
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>notify-rate</command></term>
- <listitem>
- <para>
- The rate at which NOTIFY requests will be sent
- during normal zone maintenance operations. (NOTIFY
- requests due to initial zone loading are subject
- to a separate rate limit; see below.) The default is
- 20 per second.
- The lowest possible rate is one per second; when set
- to zero, it will be silently raised to one.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>startup-notify-rate</command></term>
- <listitem>
- <para>
- The rate at which NOTIFY requests will be sent
- when the name server is first starting up, or when
- zones have been newly added to the nameserver.
- The default is 20 per second.
- The lowest possible rate is one per second; when set
- to zero, it will be silently raised to one.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>serial-query-rate</command></term>
- <listitem>
- <para>
- Slave servers will periodically query master
- servers to find out if zone serial numbers have
- changed. Each such query uses a minute amount of
- the slave server's network bandwidth. To limit
- the amount of bandwidth used, BIND 9 limits the
- rate at which queries are sent. The value of the
- <command>serial-query-rate</command> option, an
- integer, is the maximum number of queries sent
- per second. The default is 20 per second.
- The lowest possible rate is one per second; when set
- to zero, it will be silently raised to one.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>serial-queries</command></term>
- <listitem>
- <para>
- In BIND 8, the <command>serial-queries</command>
- option
- set the maximum number of concurrent serial number queries
- allowed to be outstanding at any given time.
- BIND 9 does not limit the number of outstanding
- serial queries and ignores the <command>serial-queries</command> option.
- Instead, it limits the rate at which the queries are sent
- as defined using the <command>serial-query-rate</command> option.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>transfer-format</command></term>
- <listitem>
-
- <para>
- Zone transfers can be sent using two different formats,
- <command>one-answer</command> and
- <command>many-answers</command>.
- The <command>transfer-format</command> option is used
- on the master server to determine which format it sends.
- <command>one-answer</command> uses one DNS message per
- resource record transferred.
- <command>many-answers</command> packs as many resource
- records as possible into a message.
- <command>many-answers</command> is more efficient, but is
- only supported by relatively new slave servers,
- such as <acronym>BIND</acronym> 9, <acronym>BIND</acronym>
- 8.x and <acronym>BIND</acronym> 4.9.5 onwards.
- The <command>many-answers</command> format is also supported by
- recent Microsoft Windows nameservers.
- The default is <command>many-answers</command>.
- <command>transfer-format</command> may be overridden on a
- per-server basis by using the <command>server</command>
- statement.
- </para>
-
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>transfer-message-size</command></term>
- <listitem>
- <para>
- This is an upper bound on the uncompressed size of DNS
- messages used in zone transfers over TCP. If a message
- grows larger than this size, additional messages will be
- used to complete the zone transfer. (Note, however,
- that this is a hint, not a hard limit; if a message
- contains a single resource record whose RDATA does not
- fit within the size limit, a larger message will be
- permitted so the record can be transferred.)
- </para>
- <para>
- Valid values are between 512 and 65535 octets, and any
- values outside that range will be adjusted to the nearest
- value within it. The default is <literal>20480</literal>,
- which was selected to improve message compression:
- most DNS messages of this size will compress to less
- than 16536 bytes. Larger messages cannot be compressed
- as effectively, because 16536 is the largest permissible
- compression offset pointer in a DNS message.
- </para>
- <para>
- This option is mainly intended for server testing;
- there is rarely any benefit in setting a value other
- than the default.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>transfers-in</command></term>
- <listitem>
- <para>
- The maximum number of inbound zone transfers
- that can be running concurrently. The default value is <literal>10</literal>.
- Increasing <command>transfers-in</command> may
- speed up the convergence
- of slave zones, but it also may increase the load on the
- local system.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>transfers-out</command></term>
- <listitem>
- <para>
- The maximum number of outbound zone transfers
- that can be running concurrently. Zone transfer requests in
- excess
- of the limit will be refused. The default value is <literal>10</literal>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>transfers-per-ns</command></term>
- <listitem>
- <para>
- The maximum number of inbound zone transfers
- that can be concurrently transferring from a given remote
- name server.
- The default value is <literal>2</literal>.
- Increasing <command>transfers-per-ns</command>
- may
- speed up the convergence of slave zones, but it also may
- increase
- the load on the remote name server. <command>transfers-per-ns</command> may
- be overridden on a per-server basis by using the <command>transfers</command> phrase
- of the <command>server</command> statement.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>transfer-source</command></term>
- <listitem>
- <para><command>transfer-source</command>
- determines which local address will be bound to IPv4
- TCP connections used to fetch zones transferred
- inbound by the server. It also determines the
- source IPv4 address, and optionally the UDP port,
- used for the refresh queries and forwarded dynamic
- updates. If not set, it defaults to a system
- controlled value which will usually be the address
- of the interface "closest to" the remote end. This
- address must appear in the remote end's
- <command>allow-transfer</command> option for the
- zone being transferred, if one is specified. This
- statement sets the
- <command>transfer-source</command> for all zones,
- but can be overridden on a per-view or per-zone
- basis by including a
- <command>transfer-source</command> statement within
- the <command>view</command> or
- <command>zone</command> block in the configuration
- file.
- </para>
- <note>
- <para>
- Solaris 2.5.1 and earlier does not support setting the
- source address for TCP sockets.
- </para>
- </note>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>transfer-source-v6</command></term>
- <listitem>
- <para>
- The same as <command>transfer-source</command>,
- except zone transfers are performed using IPv6.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>alt-transfer-source</command></term>
- <listitem>
- <para>
- An alternate transfer source if the one listed in
- <command>transfer-source</command> fails and
- <command>use-alt-transfer-source</command> is
- set.
- </para>
- <note><simpara>
- If you do not wish the alternate transfer source
- to be used, you should set
- <command>use-alt-transfer-source</command>
- appropriately and you should not depend upon
- getting an answer back to the first refresh
- query.
- </simpara></note>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>alt-transfer-source-v6</command></term>
- <listitem>
- <para>
- An alternate transfer source if the one listed in
- <command>transfer-source-v6</command> fails and
- <command>use-alt-transfer-source</command> is
- set.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>use-alt-transfer-source</command></term>
- <listitem>
- <para>
- Use the alternate transfer sources or not. If views are
- specified this defaults to <command>no</command>
- otherwise it defaults to
- <command>yes</command> (for BIND 8
- compatibility).
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>notify-source</command></term>
- <listitem>
- <para><command>notify-source</command>
- determines which local source address, and
- optionally UDP port, will be used to send NOTIFY
- messages. This address must appear in the slave
- server's <command>masters</command> zone clause or
- in an <command>allow-notify</command> clause. This
- statement sets the <command>notify-source</command>
- for all zones, but can be overridden on a per-zone or
- per-view basis by including a
- <command>notify-source</command> statement within
- the <command>zone</command> or
- <command>view</command> block in the configuration
- file.
- </para>
- <note>
- <para>
- Solaris 2.5.1 and earlier does not support setting the
- source address for TCP sockets.
- </para>
- </note>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>notify-source-v6</command></term>
- <listitem>
- <para>
- Like <command>notify-source</command>,
- but applies to notify messages sent to IPv6 addresses.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
-
- </section>
-
- <section xml:id="port_lists"><info><title>UDP Port Lists</title></info>
-
- <para>
- <command>use-v4-udp-ports</command>,
- <command>avoid-v4-udp-ports</command>,
- <command>use-v6-udp-ports</command>, and
- <command>avoid-v6-udp-ports</command>
- specify a list of IPv4 and IPv6 UDP ports that will be
- used or not used as source ports for UDP messages.
- See <xref linkend="query_address"/> about how the
- available ports are determined.
- For example, with the following configuration
- </para>
-
-<programlisting>
-use-v6-udp-ports { range 32768 65535; };
-avoid-v6-udp-ports { 40000; range 50000 60000; };
-</programlisting>
-
- <para>
- UDP ports of IPv6 messages sent
- from <command>named</command> will be in one
- of the following ranges: 32768 to 39999, 40001 to 49999,
- and 60001 to 65535.
- </para>
-
- <para>
- <command>avoid-v4-udp-ports</command> and
- <command>avoid-v6-udp-ports</command> can be used
- to prevent <command>named</command> from choosing as its random source port a
- port that is blocked by your firewall or a port that is
- used by other applications;
- if a query went out with a source port blocked by a
- firewall, the
- answer would not get by the firewall and the name server would
- have to query again.
- Note: the desired range can also be represented only with
- <command>use-v4-udp-ports</command> and
- <command>use-v6-udp-ports</command>, and the
- <command>avoid-</command> options are redundant in that
- sense; they are provided for backward compatibility and
- to possibly simplify the port specification.
- </para>
- </section>
-
- <section xml:id="resource_limits"><info><title>Operating System Resource Limits</title></info>
-
- <para>
- The server's usage of many system resources can be limited.
- Scaled values are allowed when specifying resource limits. For
- example, <command>1G</command> can be used instead of
- <command>1073741824</command> to specify a limit of
- one
- gigabyte. <command>unlimited</command> requests
- unlimited use, or the
- maximum available amount. <command>default</command>
- uses the limit
- that was in force when the server was started. See the description
- of <command>size_spec</command> in <xref linkend="configuration_file_elements"/>.
- </para>
-
- <para>
- The following options set operating system resource limits for
- the name server process. Some operating systems don't support
- some or
- any of the limits. On such systems, a warning will be issued if
- the
- unsupported limit is used.
- </para>
-
- <variablelist>
-
- <varlistentry>
- <term><command>coresize</command></term>
- <listitem>
- <para>
- The maximum size of a core dump. The default
- is <literal>default</literal>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>datasize</command></term>
- <listitem>
- <para>
- The maximum amount of data memory the server
- may use. The default is <literal>default</literal>.
- This is a hard limit on server memory usage.
- If the server attempts to allocate memory in excess of this
- limit, the allocation will fail, which may in turn leave
- the server unable to perform DNS service. Therefore,
- this option is rarely useful as a way of limiting the
- amount of memory used by the server, but it can be used
- to raise an operating system data size limit that is
- too small by default. If you wish to limit the amount
- of memory used by the server, use the
- <command>max-cache-size</command> and
- <command>recursive-clients</command>
- options instead.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>files</command></term>
- <listitem>
- <para>
- The maximum number of files the server
- may have open concurrently. The default is <literal>unlimited</literal>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>stacksize</command></term>
- <listitem>
- <para>
- The maximum amount of stack memory the server
- may use. The default is <literal>default</literal>.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
-
- </section>
-
- <section xml:id="server_resource_limits"><info><title>Server Resource Limits</title></info>
-
- <para>
- The following options set limits on the server's
- resource consumption that are enforced internally by the
- server rather than the operating system.
- </para>
-
- <variablelist>
-
- <varlistentry>
- <term><command>max-ixfr-log-size</command></term>
- <listitem>
- <para>
- This option is obsolete; it is accepted
- and ignored for BIND 8 compatibility. The option
- <command>max-journal-size</command> performs a
- similar function in BIND 9.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>max-journal-size</command></term>
- <listitem>
- <para>
- Sets a maximum size for each journal file
- (see <xref linkend="journal"/>). When the journal file
- approaches
- the specified size, some of the oldest transactions in the
- journal
- will be automatically removed. The largest permitted
- value is 2 gigabytes. The default is
- <literal>unlimited</literal>, which also
- means 2 gigabytes.
- This may also be set on a per-zone basis.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>host-statistics-max</command></term>
- <listitem>
- <para>
- In BIND 8, specifies the maximum number of host statistics
- entries to be kept.
- Not implemented in BIND 9.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>recursive-clients</command></term>
- <listitem>
- <para>
- The maximum number ("hard quota") of simultaneous
- recursive lookups the server will perform on behalf
- of clients. The default is
- <literal>1000</literal>. Because each recursing
- client uses a fair
- bit of memory (on the order of 20 kilobytes), the
- value of the
- <command>recursive-clients</command> option may
- have to be decreased on hosts with limited memory.
- </para>
- <para>
- <option>recursive-clients</option> defines a "hard
- quota" limit for pending recursive clients: when more
- clients than this are pending, new incoming requests
- will not be accepted, and for each incoming request
- a previous pending request will also be dropped.
- </para>
- <para>
- A "soft quota" is also set. When this lower
- quota is exceeded, incoming requests are accepted, but
- for each one, a pending request will be dropped.
- If <option>recursive-clients</option> is greater than
- 1000, the soft quota is set to
- <option>recursive-clients</option> minus 100;
- otherwise it is set to 90% of
- <option>recursive-clients</option>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>tcp-clients</command></term>
- <listitem>
- <para>
- The maximum number of simultaneous client TCP
- connections that the server will accept.
- The default is <literal>150</literal>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry xml:id="clients-per-query">
- <term xml:id="cpq_term"><command>clients-per-query</command></term>
- <term><command>max-clients-per-query</command></term>
- <listitem>
- <para>These set the
- initial value (minimum) and maximum number of recursive
- simultaneous clients for any given query
- (&lt;qname,qtype,qclass&gt;) that the server will accept
- before dropping additional clients. <command>named</command> will attempt to
- self tune this value and changes will be logged. The
- default values are 10 and 100.
- </para>
- <para>
- This value should reflect how many queries come in for
- a given name in the time it takes to resolve that name.
- If the number of queries exceed this value, <command>named</command> will
- assume that it is dealing with a non-responsive zone
- and will drop additional queries. If it gets a response
- after dropping queries, it will raise the estimate. The
- estimate will then be lowered in 20 minutes if it has
- remained unchanged.
- </para>
- <para>
- If <command>clients-per-query</command> is set to zero,
- then there is no limit on the number of clients per query
- and no queries will be dropped.
- </para>
- <para>
- If <command>max-clients-per-query</command> is set to zero,
- then there is no upper bound other than imposed by
- <command>recursive-clients</command>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry xml:id="fetches-per-zone">
- <term><command>fetches-per-zone</command></term>
- <listitem>
- <para>
- The maximum number of simultaneous iterative
- queries to any one domain that the server will
- permit before blocking new queries for data
- in or beneath that zone.
- This value should reflect how many fetches would
- normally be sent to any one zone in the time it
- would take to resolve them. It should be smaller
- than <option>recursive-clients</option>.
- </para>
- <para>
- When many clients simultaneously query for the
- same name and type, the clients will all be attached
- to the same fetch, up to the
- <option>max-clients-per-query</option> limit,
- and only one iterative query will be sent.
- However, when clients are simultaneously
- querying for <emphasis>different</emphasis> names
- or types, multiple queries will be sent and
- <option>max-clients-per-query</option> is not
- effective as a limit.
- </para>
- <para>
- Optionally, this value may be followed by the keyword
- <literal>drop</literal> or <literal>fail</literal>,
- indicating whether queries which exceed the fetch
- quota for a zone will be dropped with no response,
- or answered with SERVFAIL. The default is
- <literal>drop</literal>.
- </para>
- <para>
- If <command>fetches-per-zone</command> is set to zero,
- then there is no limit on the number of fetches per query
- and no queries will be dropped. The default is zero.
- </para>
- <para>
- The current list of active fetches can be dumped by
- running <command>rndc recursing</command>. The list
- includes the number of active fetches for each
- domain and the number of queries that have been
- passed or dropped as a result of the
- <option>fetches-per-zone</option> limit. (Note:
- these counters are not cumulative over time; whenever
- the number of active fetches for a domain drops to
- zero, the counter for that domain is deleted, and the
- next time a fetch is sent to that domain, it is
- recreated with the counters set to zero.)
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry xml:id="fetches-per-server">
- <term><command>fetches-per-server</command></term>
- <listitem>
- <para>
- The maximum number of simultaneous iterative
- queries that the server will allow to be sent to
- a single upstream name server before blocking
- additional queries.
- This value should reflect how many fetches would
- normally be sent to any one server in the time it
- would take to resolve them. It should be smaller
- than <option>recursive-clients</option>.
- </para>
- <para>
- Optionally, this value may be followed by the keyword
- <literal>drop</literal> or <literal>fail</literal>,
- indicating whether queries will be dropped with no
- response, or answered with SERVFAIL, when all of the
- servers authoritative for a zone are found to have
- exceeded the per-server quota. The default is
- <literal>fail</literal>.
- </para>
- <para>
- If <command>fetches-per-server</command> is set to zero,
- then there is no limit on the number of fetches per query
- and no queries will be dropped. The default is zero.
- </para>
- <para>
- The <command>fetches-per-server</command> quota is
- dynamically adjusted in response to detected
- congestion. As queries are sent to a server
- and are either answered or time out, an
- exponentially weighted moving average is calculated
- of the ratio of timeouts to responses. If the
- current average timeout ratio rises above a "high"
- threshold, then <command>fetches-per-server</command>
- is reduced for that server. If the timeout ratio
- drops below a "low" threshold, then
- <command>fetches-per-server</command> is increased.
- The <command>fetch-quota-params</command> options
- can be used to adjust the parameters for this
- calculation.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>fetch-quota-params</command></term>
- <listitem>
- <para>
- Sets the parameters to use for dynamic resizing of
- the <option>fetches-per-server</option> quota in
- response to detected congestion.
- </para>
- <para>
- The first argument is an integer value indicating
- how frequently to recalculate the moving average
- of the ratio of timeouts to responses for each
- server. The default is 100, meaning we recalculate
- the average ratio after every 100 queries have either
- been answered or timed out.
- </para>
- <para>
- The remaining three arguments represent the "low"
- threshold (defaulting to a timeout ratio of 0.1),
- the "high" threshold (defaulting to a timeout
- ratio of 0.3), and the discount rate for
- the moving average (defaulting to 0.7).
- A higher discount rate causes recent events to
- weigh more heavily when calculating the moving
- average; a lower discount rate causes past
- events to weigh more heavily, smoothing out
- short-term blips in the timeout ratio.
- These arguments are all fixed-point numbers with
- precision of 1/100: at most two places after
- the decimal point are significant.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>reserved-sockets</command></term>
- <listitem>
- <para>
- The number of file descriptors reserved for TCP, stdio,
- etc. This needs to be big enough to cover the number of
- interfaces <command>named</command> listens on, <command>tcp-clients</command> as well as
- to provide room for outgoing TCP queries and incoming zone
- transfers. The default is <literal>512</literal>.
- The minimum value is <literal>128</literal> and the
- maximum value is <literal>128</literal> less than
- maxsockets (-S). This option may be removed in the future.
- </para>
- <para>
- This option has little effect on Windows.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>max-cache-size</command></term>
- <listitem>
- <para>
- The maximum amount of memory to use for the
- server's cache, in bytes or % of total physical memory.
- When the amount of data in the cache
- reaches this limit, the server will cause records to
- expire prematurely based on an LRU based strategy so
- that the limit is not exceeded.
- The keyword <userinput>unlimited</userinput>,
- or the value 0, will place no limit on cache size;
- records will be purged from the cache only when their
- TTLs expire.
- Any positive values less than 2MB will be ignored
- and reset to 2MB.
- In a server with multiple views, the limit applies
- separately to the cache of each view.
- The default is <userinput>90%</userinput>.
- On systems where detection of amount of physical
- memory is not supported values represented as %
- fall back to unlimited.
- Note that the detection of physical memory is done only
- once at startup, so <command>named</command> will not
- adjust the cache size if the amount of physical memory
- is changed during runtime.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>tcp-listen-queue</command></term>
- <listitem>
- <para>
- The listen queue depth. The default and minimum is 10.
- If the kernel supports the accept filter "dataready" this
- also controls how
- many TCP connections that will be queued in kernel space
- waiting for
- some data before being passed to accept. Nonzero values
- less than 10 will be silently raised. A value of 0 may also
- be used; on most platforms this sets the listen queue
- length to a system-defined default value.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
-
- </section>
-
- <section xml:id="intervals"><info><title>Periodic Task Intervals</title></info>
-
- <variablelist>
-
- <varlistentry>
- <term><command>cleaning-interval</command></term>
- <listitem>
- <para>
- This interval is effectively obsolete. Previously,
- the server would remove expired resource records
- from the cache every <command>cleaning-interval</command> minutes.
- <acronym>BIND</acronym> 9 now manages cache
- memory in a more sophisticated manner and does not
- rely on the periodic cleaning any more.
- Specifying this option therefore has no effect on
- the server's behavior.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>heartbeat-interval</command></term>
- <listitem>
- <para>
- The server will perform zone maintenance tasks
- for all zones marked as <command>dialup</command> whenever this
- interval expires. The default is 60 minutes. Reasonable
- values are up
- to 1 day (1440 minutes). The maximum value is 28 days
- (40320 minutes).
- If set to 0, no zone maintenance for these zones will occur.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>interface-interval</command></term>
- <listitem>
- <para>
- The server will scan the network interface list
- every <command>interface-interval</command>
- minutes. The default
- is 60 minutes. The maximum value is 28 days (40320 minutes).
- If set to 0, interface scanning will only occur when
- the configuration file is loaded. After the scan, the
- server will
- begin listening for queries on any newly discovered
- interfaces (provided they are allowed by the
- <command>listen-on</command> configuration), and
- will
- stop listening on interfaces that have gone away.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>statistics-interval</command></term>
- <listitem>
- <para>
- Name server statistics will be logged
- every <command>statistics-interval</command>
- minutes. The default is
- 60. The maximum value is 28 days (40320 minutes).
- If set to 0, no statistics will be logged.
- </para><note>
- <simpara>
- Not yet implemented in
- <acronym>BIND</acronym> 9.
- </simpara>
- </note>
- </listitem>
- </varlistentry>
-
- </variablelist>
-
- </section>
-
- <section xml:id="topology"><info><title>Topology</title></info>
-
- <para>
- All other things being equal, when the server chooses a name
- server
- to query from a list of name servers, it prefers the one that is
- topologically closest to itself. The <command>topology</command> statement
- takes an <command>address_match_list</command> and
- interprets it
- in a special way. Each top-level list element is assigned a
- distance.
- Non-negated elements get a distance based on their position in the
- list, where the closer the match is to the start of the list, the
- shorter the distance is between it and the server. A negated match
- will be assigned the maximum distance from the server. If there
- is no match, the address will get a distance which is further than
- any non-negated list element, and closer than any negated element.
- For example,
- </para>
-
-<programlisting>topology {
- 10/8;
- !1.2.3/24;
- { 1.2/16; 3/8; };
-};</programlisting>
-
- <para>
- will prefer servers on network 10 the most, followed by hosts
- on network 1.2.0.0 (netmask 255.255.0.0) and network 3, with the
- exception of hosts on network 1.2.3 (netmask 255.255.255.0), which
- is preferred least of all.
- </para>
- <para>
- The default topology is
- </para>
-
-<programlisting> topology { localhost; localnets; };
-</programlisting>
-
- <note>
- <simpara>
- The <command>topology</command> option
- is not implemented in <acronym>BIND</acronym> 9.
- </simpara>
- </note>
- </section>
-
- <section xml:id="the_sortlist_statement"><info><title>The <command>sortlist</command> Statement</title></info>
-
- <para>
- The response to a DNS query may consist of multiple resource
- records (RRs) forming a resource records set (RRset).
- The name server will normally return the
- RRs within the RRset in an indeterminate order
- (but see the <command>rrset-order</command>
- statement in <xref linkend="rrset_ordering"/>).
- The client resolver code should rearrange the RRs as appropriate,
- that is, using any addresses on the local net in preference to
- other addresses.
- However, not all resolvers can do this or are correctly
- configured.
- When a client is using a local server, the sorting can be performed
- in the server, based on the client's address. This only requires
- configuring the name servers, not all the clients.
- </para>
-
- <para>
- The <command>sortlist</command> statement (see below)
- takes
- an <command>address_match_list</command> and
- interprets it even
- more specifically than the <command>topology</command>
- statement
- does (<xref linkend="topology"/>).
- Each top level statement in the <command>sortlist</command> must
- itself be an explicit <command>address_match_list</command> with
- one or two elements. The first element (which may be an IP
- address,
- an IP prefix, an ACL name or a nested <command>address_match_list</command>)
- of each top level list is checked against the source address of
- the query until a match is found.
- </para>
- <para>
- Once the source address of the query has been matched, if
- the top level statement contains only one element, the actual
- primitive
- element that matched the source address is used to select the
- address
- in the response to move to the beginning of the response. If the
- statement is a list of two elements, then the second element is
- treated the same as the <command>address_match_list</command> in
- a <command>topology</command> statement. Each top
- level element
- is assigned a distance and the address in the response with the
- minimum
- distance is moved to the beginning of the response.
- </para>
- <para>
- In the following example, any queries received from any of
- the addresses of the host itself will get responses preferring
- addresses
- on any of the locally connected networks. Next most preferred are
- addresses
- on the 192.168.1/24 network, and after that either the
- 192.168.2/24
- or
- 192.168.3/24 network with no preference shown between these two
- networks. Queries received from a host on the 192.168.1/24 network
- will prefer other addresses on that network to the 192.168.2/24
- and
- 192.168.3/24 networks. Queries received from a host on the
- 192.168.4/24
- or the 192.168.5/24 network will only prefer other addresses on
- their directly connected networks.
- </para>
-
-<programlisting>sortlist {
- // IF the local host
- // THEN first fit on the following nets
- { localhost;
- { localnets;
- 192.168.1/24;
- { 192.168.2/24; 192.168.3/24; }; }; };
- // IF on class C 192.168.1 THEN use .1, or .2 or .3
- { 192.168.1/24;
- { 192.168.1/24;
- { 192.168.2/24; 192.168.3/24; }; }; };
- // IF on class C 192.168.2 THEN use .2, or .1 or .3
- { 192.168.2/24;
- { 192.168.2/24;
- { 192.168.1/24; 192.168.3/24; }; }; };
- // IF on class C 192.168.3 THEN use .3, or .1 or .2
- { 192.168.3/24;
- { 192.168.3/24;
- { 192.168.1/24; 192.168.2/24; }; }; };
- // IF .4 or .5 THEN prefer that net
- { { 192.168.4/24; 192.168.5/24; };
- };
-};</programlisting>
-
- <para>
- The following example will give reasonable behavior for the
- local host and hosts on directly connected networks. It is similar
- to the behavior of the address sort in <acronym>BIND</acronym> 4.9.x. Responses sent
- to queries from the local host will favor any of the directly
- connected
- networks. Responses sent to queries from any other hosts on a
- directly
- connected network will prefer addresses on that same network.
- Responses
- to other queries will not be sorted.
- </para>
-
-<programlisting>sortlist {
- { localhost; localnets; };
- { localnets; };
-};
-</programlisting>
-
- </section>
- <section xml:id="rrset_ordering"><info><title xml:id="rrset_ordering_title">RRset Ordering</title></info>
-
- <para>
- When multiple records are returned in an answer it may be
- useful to configure the order of the records placed into the
- response.
- The <command>rrset-order</command> statement permits
- configuration
- of the ordering of the records in a multiple record response.
- See also the <command>sortlist</command> statement,
- <xref linkend="the_sortlist_statement"/>.
- </para>
-
- <para>
- An <command>order_spec</command> is defined as
- follows:
- </para>
- <para>
- <optional>class <replaceable>class_name</replaceable></optional>
- <optional>type <replaceable>type_name</replaceable></optional>
- <optional>name <replaceable>"domain_name"</replaceable></optional>
- order <replaceable>ordering</replaceable>
- </para>
- <para>
- If no class is specified, the default is <command>ANY</command>.
- If no type is specified, the default is <command>ANY</command>.
- If no name is specified, the default is "<command>*</command>" (asterisk).
- </para>
- <para>
- The legal values for <command>ordering</command> are:
- </para>
- <informaltable colsep="0" rowsep="0">
- <tgroup cols="2" colsep="0" rowsep="0" tgroupstyle="4Level-table">
- <colspec colname="1" colnum="1" colsep="0" colwidth="0.750in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="3.750in"/>
- <tbody>
- <row rowsep="0">
- <entry colname="1">
- <para><command>fixed</command></para>
- </entry>
- <entry colname="2">
- <para>
- Records are returned in the order they
- are defined in the zone file.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>random</command></para>
- </entry>
- <entry colname="2">
- <para>
- Records are returned in some random order.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>cyclic</command></para>
- </entry>
- <entry colname="2">
- <para>
- Records are returned in a cyclic round-robin order.
- </para>
- <para>
- If <acronym>BIND</acronym> is configured with the
- "--enable-fixed-rrset" option at compile time, then
- the initial ordering of the RRset will match the
- one specified in the zone file.
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- <para>
- For example:
- </para>
-
-<programlisting>rrset-order {
- class IN type A name "host.example.com" order random;
- order cyclic;
-};
-</programlisting>
-
- <para>
- will cause any responses for type A records in class IN that
- have "<literal>host.example.com</literal>" as a
- suffix, to always be returned
- in random order. All other records are returned in cyclic order.
- </para>
- <para>
- If multiple <command>rrset-order</command> statements
- appear, they are not combined — the last one applies.
- </para>
- <para>
- By default, all records are returned in random order.
- </para>
-
- <note>
- <simpara>
- In this release of <acronym>BIND</acronym> 9, the
- <command>rrset-order</command> statement does not support
- "fixed" ordering by default. Fixed ordering can be enabled
- at compile time by specifying "--enable-fixed-rrset" on
- the "configure" command line.
- </simpara>
- </note>
- </section>
-
- <section xml:id="tuning"><info><title>Tuning</title></info>
-
- <variablelist>
-
- <varlistentry>
- <term><command>lame-ttl</command></term>
- <listitem>
- <para>
- Sets the number of seconds to cache a
- lame server indication. 0 disables caching. (This is
- <emphasis role="bold">NOT</emphasis> recommended.)
- The default is <literal>600</literal> (10 minutes) and the
- maximum value is
- <literal>1800</literal> (30 minutes).
- </para>
-
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>servfail-ttl</command></term>
- <listitem>
- <para>
- Sets the number of seconds to cache a
- SERVFAIL response due to DNSSEC validation failure or
- other general server failure. If set to
- <literal>0</literal>, SERVFAIL caching is disabled.
- The SERVFAIL cache is not consulted if a query has
- the CD (Checking Disabled) bit set; this allows a
- query that failed due to DNSSEC validation to be retried
- without waiting for the SERVFAIL TTL to expire.
- </para>
- <para>
- The maximum value is <literal>30</literal>
- seconds; any higher value will be silently
- reduced. The default is <literal>1</literal>
- second.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>max-ncache-ttl</command></term>
- <listitem>
- <para>
- To reduce network traffic and increase performance,
- the server stores negative answers. <command>max-ncache-ttl</command> is
- used to set a maximum retention time for these answers in
- the server
- in seconds. The default
- <command>max-ncache-ttl</command> is <literal>10800</literal> seconds (3 hours).
- <command>max-ncache-ttl</command> cannot exceed
- 7 days and will
- be silently truncated to 7 days if set to a greater value.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>max-cache-ttl</command></term>
- <listitem>
- <para>
- Sets the maximum time for which the server will
- cache ordinary (positive) answers in seconds.
- The default is 604800 (one week).
- A value of zero may cause all queries to return
- SERVFAIL, because of lost caches of intermediate
- RRsets (such as NS and glue AAAA/A records) in the
- resolution process.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>min-roots</command></term>
- <listitem>
- <para>
- The minimum number of root servers that
- is required for a request for the root servers to be
- accepted. The default
- is <userinput>2</userinput>.
- </para>
- <note>
- <simpara>
- Not implemented in <acronym>BIND</acronym> 9.
- </simpara>
- </note>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>sig-validity-interval</command></term>
- <listitem>
- <para>
- Specifies the number of days into the future when
- DNSSEC signatures automatically generated as a
- result of dynamic updates (<xref linkend="dynamic_update"/>) will expire. There
- is an optional second field which specifies how
- long before expiry that the signatures will be
- regenerated. If not specified, the signatures will
- be regenerated at 1/4 of base interval. The second
- field is specified in days if the base interval is
- greater than 7 days otherwise it is specified in hours.
- The default base interval is <literal>30</literal> days
- giving a re-signing interval of 7 1/2 days. The maximum
- values are 10 years (3660 days).
- </para>
- <para>
- The signature inception time is unconditionally
- set to one hour before the current time to allow
- for a limited amount of clock skew.
- </para>
- <para>
- The <command>sig-validity-interval</command>
- should be, at least, several multiples of the SOA
- expire interval to allow for reasonable interaction
- between the various timer and expiry dates.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>sig-signing-nodes</command></term>
- <listitem>
- <para>
- Specify the maximum number of nodes to be
- examined in each quantum when signing a zone with
- a new DNSKEY. The default is
- <literal>100</literal>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>sig-signing-signatures</command></term>
- <listitem>
- <para>
- Specify a threshold number of signatures that
- will terminate processing a quantum when signing
- a zone with a new DNSKEY. The default is
- <literal>10</literal>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>sig-signing-type</command></term>
- <listitem>
- <para>
- Specify a private RDATA type to be used when generating
- signing state records. The default is
- <literal>65534</literal>.
- </para>
- <para>
- It is expected that this parameter may be removed
- in a future version once there is a standard type.
- </para>
- <para>
- Signing state records are used to internally by
- <command>named</command> to track the current state of
- a zone-signing process, i.e., whether it is still active
- or has been completed. The records can be inspected
- using the command
- <command>rndc signing -list <replaceable>zone</replaceable></command>.
- Once <command>named</command> has finished signing
- a zone with a particular key, the signing state
- record associated with that key can be removed from
- the zone by running
- <command>rndc signing -clear <replaceable>keyid/algorithm</replaceable> <replaceable>zone</replaceable></command>.
- To clear all of the completed signing state
- records for a zone, use
- <command>rndc signing -clear all <replaceable>zone</replaceable></command>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>min-refresh-time</command></term>
- <term><command>max-refresh-time</command></term>
- <term><command>min-retry-time</command></term>
- <term><command>max-retry-time</command></term>
- <listitem>
- <para>
- These options control the server's behavior on refreshing a
- zone
- (querying for SOA changes) or retrying failed transfers.
- Usually the SOA values for the zone are used, but these
- values
- are set by the master, giving slave server administrators
- little
- control over their contents.
- </para>
- <para>
- These options allow the administrator to set a minimum and
- maximum refresh and retry time in seconds per-zone,
- per-view, or globally.
- These options are valid for slave and stub zones,
- and clamp the SOA refresh and retry times to the specified
- values.
- </para>
- <para>
- The following defaults apply.
- <command>min-refresh-time</command> 300 seconds,
- <command>max-refresh-time</command> 2419200 seconds
- (4 weeks), <command>min-retry-time</command> 500 seconds,
- and <command>max-retry-time</command> 1209600 seconds
- (2 weeks).
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>edns-udp-size</command></term>
- <listitem>
- <para>
- Sets the maximum advertised EDNS UDP buffer size in
- bytes, to control the size of packets received from
- authoritative servers in response to recursive queries.
- Valid values are 512 to 4096 (values outside this range
- will be silently adjusted to the nearest value within
- it). The default value is 4096.
- </para>
- <para>
- The usual reason for setting
- <command>edns-udp-size</command> to a non-default value
- is to get UDP answers to pass through broken firewalls
- that block fragmented packets and/or block UDP DNS
- packets that are greater than 512 bytes.
- </para>
- <para>
- When <command>named</command> first queries a remote
- server, it will advertise a UDP buffer size of 512, as
- this has the greatest chance of success on the first try.
- </para>
- <para>
- If the initial response times out, <command>named</command>
- will try again with plain DNS, and if that is successful,
- it will be taken as evidence that the server does not
- support EDNS. After enough failures using EDNS and
- successes using plain DNS, <command>named</command>
- will default to plain DNS for future communications
- with that server. (Periodically, <command>named</command>
- will send an EDNS query to see if the situation has
- improved.)
- </para>
- <para>
- However, if the initial query is successful with
- EDNS advertising a buffer size of 512, then
- <command>named</command> will advertise progressively
- larger buffer sizes on successive queries, until
- responses begin timing out or
- <command>edns-udp-size</command> is reached.
- </para>
- <para>
- The default buffer sizes used by <command>named</command>
- are 512, 1232, 1432, and 4096, but never exceeding
- <command>edns-udp-size</command>. (The values 1232 and
- 1432 are chosen to allow for an IPv4/IPv6 encapsulated
- UDP message to be sent without fragmentation at the
- minimum MTU sizes for Ethernet and IPv6 networks.)
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>max-udp-size</command></term>
- <listitem>
- <para>
- Sets the maximum EDNS UDP message size
- <command>named</command> will send in bytes.
- Valid values are 512 to 4096 (values outside this
- range will be silently adjusted to the nearest
- value within it). The default value is 4096.
- </para>
- <para>
- This value applies to responses sent by a server; to
- set the advertised buffer size in queries, see
- <command>edns-udp-size</command>.
- </para>
- <para>
- The usual reason for setting
- <command>max-udp-size</command> to a non-default
- value is to get UDP answers to pass through broken
- firewalls that block fragmented packets and/or
- block UDP packets that are greater than 512 bytes.
- This is independent of the advertised receive
- buffer (<command>edns-udp-size</command>).
- </para>
- <para>
- Setting this to a low value will encourage additional
- TCP traffic to the nameserver.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>masterfile-format</command></term>
- <listitem>
- <para>Specifies
- the file format of zone files (see
- <xref linkend="zonefile_format"/>).
- The default value is <constant>text</constant>, which is the
- standard textual representation, except for slave zones,
- in which the default value is <constant>raw</constant>.
- Files in other formats than <constant>text</constant> are
- typically expected to be generated by the
- <command>named-compilezone</command> tool, or dumped by
- <command>named</command>.
- </para>
- <para>
- Note that when a zone file in a different format than
- <constant>text</constant> is loaded, <command>named</command>
- may omit some of the checks which would be performed for a
- file in the <constant>text</constant> format. In particular,
- <command>check-names</command> checks do not apply
- for the <constant>raw</constant> format. This means
- a zone file in the <constant>raw</constant> format
- must be generated with the same check level as that
- specified in the <command>named</command> configuration
- file. Also, <constant>map</constant> format files are
- loaded directly into memory via memory mapping, with only
- minimal checking.
- </para>
- <para>
- This statement sets the
- <command>masterfile-format</command> for all zones,
- but can be overridden on a per-zone or per-view basis
- by including a <command>masterfile-format</command>
- statement within the <command>zone</command> or
- <command>view</command> block in the configuration
- file.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>masterfile-style</command></term>
- <listitem>
- <para>
- Specifies the formatting of zone files during dump
- when the <option>masterfile-format</option> is
- <constant>text</constant>. (This option is ignored
- with any other <option>masterfile-format</option>.)
- </para>
- <para>
- When set to <constant>relative</constant>,
- records are printed in a multi-line format with owner
- names expressed relative to a shared origin. When set
- to <constant>full</constant>, records are printed in
- a single-line format with absolute owner names.
- The <constant>full</constant> format is most suitable
- when a zone file needs to be processed automatically
- by a script. The <constant>relative</constant> format
- is more human-readable, and is thus suitable when a
- zone is to be edited by hand. The default is
- <constant>relative</constant>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry xml:id="max-recursion-depth">
- <term><command>max-recursion-depth</command></term>
- <listitem>
- <para>
- Sets the maximum number of levels of recursion
- that are permitted at any one time while servicing
- a recursive query. Resolving a name may require
- looking up a name server address, which in turn
- requires resolving another name, etc; if the number
- of indirections exceeds this value, the recursive
- query is terminated and returns SERVFAIL. The
- default is 7.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry xml:id="max-recursion-queries">
- <term><command>max-recursion-queries</command></term>
- <listitem>
- <para>
- Sets the maximum number of iterative queries that
- may be sent while servicing a recursive query.
- If more queries are sent, the recursive query
- is terminated and returns SERVFAIL. Queries to
- look up top level domains such as "com" and "net"
- and the DNS root zone are exempt from this limitation.
- The default is 75.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>notify-delay</command></term>
- <listitem>
- <para>
- The delay, in seconds, between sending sets of notify
- messages for a zone. The default is five (5) seconds.
- </para>
- <para>
- The overall rate that NOTIFY messages are sent for all
- zones is controlled by <command>serial-query-rate</command>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>max-rsa-exponent-size</command></term>
- <listitem>
- <para>
- The maximum RSA exponent size, in bits, that will
- be accepted when validating. Valid values are 35
- to 4096 bits. The default zero (0) is also accepted
- and is equivalent to 4096.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>prefetch</command></term>
- <listitem>
- <para>
- When a query is received for cached data which
- is to expire shortly, <command>named</command> can
- refresh the data from the authoritative server
- immediately, ensuring that the cache always has an
- answer available.
- </para>
- <para>
- The <option>prefetch</option> specifies the
- "trigger" TTL value at which prefetch of the current
- query will take place: when a cache record with a
- lower TTL value is encountered during query processing,
- it will be refreshed. Valid trigger TTL values are 1 to
- 10 seconds. Values larger than 10 seconds will be silently
- reduced to 10.
- Setting a trigger TTL to zero (0) causes
- prefetch to be disabled.
- The default trigger TTL is <literal>2</literal>.
- </para>
- <para>
- An optional second argument specifies the "eligibility"
- TTL: the smallest <emphasis>original</emphasis>
- TTL value that will be accepted for a record to be
- eligible for prefetching. The eligibility TTL must
- be at least six seconds longer than the trigger TTL;
- if it isn't, <command>named</command> will silently
- adjust it upward.
- The default eligibility TTL is <literal>9</literal>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>v6-bias</command></term>
- <listitem>
- <para>
- When determining the next nameserver to try
- preference IPv6 nameservers by this many milliseconds.
- The default is <literal>50</literal> milliseconds.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- </section>
-
- <section xml:id="builtin"><info><title>Built-in server information zones</title></info>
-
- <para>
- The server provides some helpful diagnostic information
- through a number of built-in zones under the
- pseudo-top-level-domain <literal>bind</literal> in the
- <command>CHAOS</command> class. These zones are part
- of a
- built-in view (see <xref linkend="view_statement_grammar"/>) of
- class
- <command>CHAOS</command> which is separate from the
- default view of class <command>IN</command>. Most global
- configuration options (<command>allow-query</command>,
- etc) will apply to this view, but some are locally
- overridden: <command>notify</command>,
- <command>recursion</command> and
- <command>allow-new-zones</command> are
- always set to <userinput>no</userinput>, and
- <command>rate-limit</command> is set to allow
- three responses per second.
- </para>
- <para>
- If you need to disable these zones, use the options
- below, or hide the built-in <command>CHAOS</command>
- view by
- defining an explicit view of class <command>CHAOS</command>
- that matches all clients.
- </para>
-
- <variablelist>
-
- <varlistentry>
- <term><command>version</command></term>
- <listitem>
- <para>
- The version the server should report
- via a query of the name <literal>version.bind</literal>
- with type <command>TXT</command>, class <command>CHAOS</command>.
- The default is the real version number of this server.
- Specifying <command>version none</command>
- disables processing of the queries.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>hostname</command></term>
- <listitem>
- <para>
- The hostname the server should report via a query of
- the name <filename>hostname.bind</filename>
- with type <command>TXT</command>, class <command>CHAOS</command>.
- This defaults to the hostname of the machine hosting the
- name server as
- found by the gethostname() function. The primary purpose of such queries
- is to
- identify which of a group of anycast servers is actually
- answering your queries. Specifying <command>hostname none;</command>
- disables processing of the queries.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>server-id</command></term>
- <listitem>
- <para>
- The ID the server should report when receiving a Name
- Server Identifier (NSID) query, or a query of the name
- <filename>ID.SERVER</filename> with type
- <command>TXT</command>, class <command>CHAOS</command>.
- The primary purpose of such queries is to
- identify which of a group of anycast servers is actually
- answering your queries. Specifying <command>server-id none;</command>
- disables processing of the queries.
- Specifying <command>server-id hostname;</command> will cause <command>named</command> to
- use the hostname as found by the gethostname() function.
- The default <command>server-id</command> is <command>none</command>.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
-
- </section>
-
- <section xml:id="empty"><info><title>Built-in Empty Zones</title></info>
-
- <para>
- The <command>named</command> server has some built-in
- empty zones (SOA and NS records only).
- These are for zones that should normally be answered locally
- and which queries should not be sent to the Internet's root
- servers. The official servers which cover these namespaces
- return NXDOMAIN responses to these queries. In particular,
- these cover the reverse namespaces for addresses from
- RFC 1918, RFC 4193, RFC 5737 and RFC 6598. They also include the
- reverse namespace for IPv6 local address (locally assigned),
- IPv6 link local addresses, the IPv6 loopback address and the
- IPv6 unknown address.
- </para>
- <para>
- The server will attempt to determine if a built-in zone
- already exists or is active (covered by a forward-only
- forwarding declaration) and will not create an empty
- zone in that case.
- </para>
- <para>
- The current list of empty zones is:
- <itemizedlist>
- <listitem>10.IN-ADDR.ARPA</listitem>
- <listitem>16.172.IN-ADDR.ARPA</listitem>
- <listitem>17.172.IN-ADDR.ARPA</listitem>
- <listitem>18.172.IN-ADDR.ARPA</listitem>
- <listitem>19.172.IN-ADDR.ARPA</listitem>
- <listitem>20.172.IN-ADDR.ARPA</listitem>
- <listitem>21.172.IN-ADDR.ARPA</listitem>
- <listitem>22.172.IN-ADDR.ARPA</listitem>
- <listitem>23.172.IN-ADDR.ARPA</listitem>
- <listitem>24.172.IN-ADDR.ARPA</listitem>
- <listitem>25.172.IN-ADDR.ARPA</listitem>
- <listitem>26.172.IN-ADDR.ARPA</listitem>
- <listitem>27.172.IN-ADDR.ARPA</listitem>
- <listitem>28.172.IN-ADDR.ARPA</listitem>
- <listitem>29.172.IN-ADDR.ARPA</listitem>
- <listitem>30.172.IN-ADDR.ARPA</listitem>
- <listitem>31.172.IN-ADDR.ARPA</listitem>
- <listitem>168.192.IN-ADDR.ARPA</listitem>
- <listitem>64.100.IN-ADDR.ARPA</listitem>
- <listitem>65.100.IN-ADDR.ARPA</listitem>
- <listitem>66.100.IN-ADDR.ARPA</listitem>
- <listitem>67.100.IN-ADDR.ARPA</listitem>
- <listitem>68.100.IN-ADDR.ARPA</listitem>
- <listitem>69.100.IN-ADDR.ARPA</listitem>
- <listitem>70.100.IN-ADDR.ARPA</listitem>
- <listitem>71.100.IN-ADDR.ARPA</listitem>
- <listitem>72.100.IN-ADDR.ARPA</listitem>
- <listitem>73.100.IN-ADDR.ARPA</listitem>
- <listitem>74.100.IN-ADDR.ARPA</listitem>
- <listitem>75.100.IN-ADDR.ARPA</listitem>
- <listitem>76.100.IN-ADDR.ARPA</listitem>
- <listitem>77.100.IN-ADDR.ARPA</listitem>
- <listitem>78.100.IN-ADDR.ARPA</listitem>
- <listitem>79.100.IN-ADDR.ARPA</listitem>
- <listitem>80.100.IN-ADDR.ARPA</listitem>
- <listitem>81.100.IN-ADDR.ARPA</listitem>
- <listitem>82.100.IN-ADDR.ARPA</listitem>
- <listitem>83.100.IN-ADDR.ARPA</listitem>
- <listitem>84.100.IN-ADDR.ARPA</listitem>
- <listitem>85.100.IN-ADDR.ARPA</listitem>
- <listitem>86.100.IN-ADDR.ARPA</listitem>
- <listitem>87.100.IN-ADDR.ARPA</listitem>
- <listitem>88.100.IN-ADDR.ARPA</listitem>
- <listitem>89.100.IN-ADDR.ARPA</listitem>
- <listitem>90.100.IN-ADDR.ARPA</listitem>
- <listitem>91.100.IN-ADDR.ARPA</listitem>
- <listitem>92.100.IN-ADDR.ARPA</listitem>
- <listitem>93.100.IN-ADDR.ARPA</listitem>
- <listitem>94.100.IN-ADDR.ARPA</listitem>
- <listitem>95.100.IN-ADDR.ARPA</listitem>
- <listitem>96.100.IN-ADDR.ARPA</listitem>
- <listitem>97.100.IN-ADDR.ARPA</listitem>
- <listitem>98.100.IN-ADDR.ARPA</listitem>
- <listitem>99.100.IN-ADDR.ARPA</listitem>
- <listitem>100.100.IN-ADDR.ARPA</listitem>
- <listitem>101.100.IN-ADDR.ARPA</listitem>
- <listitem>102.100.IN-ADDR.ARPA</listitem>
- <listitem>103.100.IN-ADDR.ARPA</listitem>
- <listitem>104.100.IN-ADDR.ARPA</listitem>
- <listitem>105.100.IN-ADDR.ARPA</listitem>
- <listitem>106.100.IN-ADDR.ARPA</listitem>
- <listitem>107.100.IN-ADDR.ARPA</listitem>
- <listitem>108.100.IN-ADDR.ARPA</listitem>
- <listitem>109.100.IN-ADDR.ARPA</listitem>
- <listitem>110.100.IN-ADDR.ARPA</listitem>
- <listitem>111.100.IN-ADDR.ARPA</listitem>
- <listitem>112.100.IN-ADDR.ARPA</listitem>
- <listitem>113.100.IN-ADDR.ARPA</listitem>
- <listitem>114.100.IN-ADDR.ARPA</listitem>
- <listitem>115.100.IN-ADDR.ARPA</listitem>
- <listitem>116.100.IN-ADDR.ARPA</listitem>
- <listitem>117.100.IN-ADDR.ARPA</listitem>
- <listitem>118.100.IN-ADDR.ARPA</listitem>
- <listitem>119.100.IN-ADDR.ARPA</listitem>
- <listitem>120.100.IN-ADDR.ARPA</listitem>
- <listitem>121.100.IN-ADDR.ARPA</listitem>
- <listitem>122.100.IN-ADDR.ARPA</listitem>
- <listitem>123.100.IN-ADDR.ARPA</listitem>
- <listitem>124.100.IN-ADDR.ARPA</listitem>
- <listitem>125.100.IN-ADDR.ARPA</listitem>
- <listitem>126.100.IN-ADDR.ARPA</listitem>
- <listitem>127.100.IN-ADDR.ARPA</listitem>
- <listitem>0.IN-ADDR.ARPA</listitem>
- <listitem>127.IN-ADDR.ARPA</listitem>
- <listitem>254.169.IN-ADDR.ARPA</listitem>
- <listitem>2.0.192.IN-ADDR.ARPA</listitem>
- <listitem>100.51.198.IN-ADDR.ARPA</listitem>
- <listitem>113.0.203.IN-ADDR.ARPA</listitem>
- <listitem>255.255.255.255.IN-ADDR.ARPA</listitem>
- <listitem>0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA</listitem>
- <listitem>1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA</listitem>
- <listitem>8.B.D.0.1.0.0.2.IP6.ARPA</listitem>
- <listitem>D.F.IP6.ARPA</listitem>
- <listitem>8.E.F.IP6.ARPA</listitem>
- <listitem>9.E.F.IP6.ARPA</listitem>
- <listitem>A.E.F.IP6.ARPA</listitem>
- <listitem>B.E.F.IP6.ARPA</listitem>
- </itemizedlist>
- </para>
- <para>
- Empty zones are settable at the view level and only apply to
- views of class IN. Disabled empty zones are only inherited
- from options if there are no disabled empty zones specified
- at the view level. To override the options list of disabled
- zones, you can disable the root zone at the view level, for example:
-<programlisting>
- disable-empty-zone ".";
-</programlisting>
- </para>
- <para>
- If you are using the address ranges covered here, you should
- already have reverse zones covering the addresses you use.
- In practice this appears to not be the case with many queries
- being made to the infrastructure servers for names in these
- spaces. So many in fact that sacrificial servers were needed
- to be deployed to channel the query load away from the
- infrastructure servers.
- </para>
- <note><simpara>
- The real parent servers for these zones should disable all
- empty zone under the parent zone they serve. For the real
- root servers, this is all built-in empty zones. This will
- enable them to return referrals to deeper in the tree.
- </simpara></note>
- <variablelist>
- <varlistentry>
- <term><command>empty-server</command></term>
- <listitem>
- <para>
- Specify what server name will appear in the returned
- SOA record for empty zones. If none is specified, then
- the zone's name will be used.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>empty-contact</command></term>
- <listitem>
- <para>
- Specify what contact name will appear in the returned
- SOA record for empty zones. If none is specified, then
- "." will be used.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>empty-zones-enable</command></term>
- <listitem>
- <para>
- Enable or disable all empty zones. By default, they
- are enabled.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>disable-empty-zone</command></term>
- <listitem>
- <para>
- Disable individual empty zones. By default, none are
- disabled. This option can be specified multiple times.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </section>
-
- <section xml:id="acache"><info><title>Additional Section Caching</title></info>
-
-
- <para>
- The additional section cache, also called <command>acache</command>,
- is an internal cache to improve the response performance of BIND 9.
- When additional section caching is enabled, BIND 9 will
- cache an internal short-cut to the additional section content for
- each answer RR.
- Note that <command>acache</command> is an internal caching
- mechanism of BIND 9, and is not related to the DNS caching
- server function.
- </para>
-
- <para>
- Additional section caching does not change the
- response content (except the RRsets ordering of the additional
- section, see below), but can improve the response performance
- significantly.
- It is particularly effective when BIND 9 acts as an authoritative
- server for a zone that has many delegations with many glue RRs.
- </para>
-
- <para>
- In order to obtain the maximum performance improvement
- from additional section caching, setting
- <command>additional-from-cache</command>
- to <command>no</command> is recommended, since the current
- implementation of <command>acache</command>
- does not short-cut of additional section information from the
- DNS cache data.
- </para>
-
- <para>
- One obvious disadvantage of <command>acache</command> is
- that it requires much more
- memory for the internal cached data.
- Thus, if the response performance does not matter and memory
- consumption is much more critical, the
- <command>acache</command> mechanism can be
- disabled by setting <command>acache-enable</command> to
- <command>no</command>.
- It is also possible to specify the upper limit of memory
- consumption
- for acache by using <command>max-acache-size</command>.
- </para>
-
- <para>
- Additional section caching also has a minor effect on the
- RRset ordering in the additional section.
- Without <command>acache</command>,
- <command>cyclic</command> order is effective for the additional
- section as well as the answer and authority sections.
- However, additional section caching fixes the ordering when it
- first caches an RRset for the additional section, and the same
- ordering will be kept in succeeding responses, regardless of the
- setting of <command>rrset-order</command>.
- The effect of this should be minor, however, since an
- RRset in the additional section
- typically only contains a small number of RRs (and in many cases
- it only contains a single RR), in which case the
- ordering does not matter much.
- </para>
-
- <para>
- The following is a summary of options related to
- <command>acache</command>.
- </para>
-
- <variablelist>
-
- <varlistentry>
- <term><command>acache-enable</command></term>
- <listitem>
- <para>
- If <command>yes</command>, additional section caching is
- enabled. The default value is <command>no</command>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>acache-cleaning-interval</command></term>
- <listitem>
- <para>
- The server will remove stale cache entries, based on an LRU
- based
- algorithm, every <command>acache-cleaning-interval</command> minutes.
- The default is 60 minutes.
- If set to 0, no periodic cleaning will occur.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>max-acache-size</command></term>
- <listitem>
- <para>
- The maximum amount of memory in bytes to use for the server's acache.
- When the amount of data in the acache reaches this limit,
- the server
- will clean more aggressively so that the limit is not
- exceeded.
- In a server with multiple views, the limit applies
- separately to the
- acache of each view.
- The default is <literal>16M</literal>.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
-
- </section>
-
- <section xml:id="content_filtering"><info><title>Content Filtering</title></info>
-
- <para>
- <acronym>BIND</acronym> 9 provides the ability to filter
- out DNS responses from external DNS servers containing
- certain types of data in the answer section.
- Specifically, it can reject address (A or AAAA) records if
- the corresponding IPv4 or IPv6 addresses match the given
- <varname>address_match_list</varname> of the
- <command>deny-answer-addresses</command> option.
- It can also reject CNAME or DNAME records if the "alias"
- name (i.e., the CNAME alias or the substituted query name
- due to DNAME) matches the
- given <varname>namelist</varname> of the
- <command>deny-answer-aliases</command> option, where
- "match" means the alias name is a subdomain of one of
- the <varname>name_list</varname> elements.
- If the optional <varname>namelist</varname> is specified
- with <command>except-from</command>, records whose query name
- matches the list will be accepted regardless of the filter
- setting.
- Likewise, if the alias name is a subdomain of the
- corresponding zone, the <command>deny-answer-aliases</command>
- filter will not apply;
- for example, even if "example.com" is specified for
- <command>deny-answer-aliases</command>,
- </para>
-<programlisting>www.example.com. CNAME xxx.example.com.</programlisting>
-
- <para>
- returned by an "example.com" server will be accepted.
- </para>
-
- <para>
- In the <varname>address_match_list</varname> of the
- <command>deny-answer-addresses</command> option, only
- <varname>ip_addr</varname>
- and <varname>ip_prefix</varname>
- are meaningful;
- any <varname>key_id</varname> will be silently ignored.
- </para>
-
- <para>
- If a response message is rejected due to the filtering,
- the entire message is discarded without being cached, and
- a SERVFAIL error will be returned to the client.
- </para>
-
- <para>
- This filtering is intended to prevent "DNS rebinding attacks," in
- which an attacker, in response to a query for a domain name the
- attacker controls, returns an IP address within your own network or
- an alias name within your own domain.
- A naive web browser or script could then serve as an
- unintended proxy, allowing the attacker
- to get access to an internal node of your local network
- that couldn't be externally accessed otherwise.
- See the paper available at
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://portal.acm.org/citation.cfm?id=1315245.1315298">
- http://portal.acm.org/citation.cfm?id=1315245.1315298
- </link>
- for more details about the attacks.
- </para>
-
- <para>
- For example, if you own a domain named "example.net" and
- your internal network uses an IPv4 prefix 192.0.2.0/24,
- you might specify the following rules:
- </para>
-
-<programlisting>deny-answer-addresses { 192.0.2.0/24; } except-from { "example.net"; };
-deny-answer-aliases { "example.net"; };
-</programlisting>
-
- <para>
- If an external attacker lets a web browser in your local
- network look up an IPv4 address of "attacker.example.com",
- the attacker's DNS server would return a response like this:
- </para>
-
-<programlisting>attacker.example.com. A 192.0.2.1</programlisting>
-
- <para>
- in the answer section.
- Since the rdata of this record (the IPv4 address) matches
- the specified prefix 192.0.2.0/24, this response will be
- ignored.
- </para>
-
- <para>
- On the other hand, if the browser looks up a legitimate
- internal web server "www.example.net" and the
- following response is returned to
- the <acronym>BIND</acronym> 9 server
- </para>
-
-<programlisting>www.example.net. A 192.0.2.2</programlisting>
-
- <para>
- it will be accepted since the owner name "www.example.net"
- matches the <command>except-from</command> element,
- "example.net".
- </para>
-
- <para>
- Note that this is not really an attack on the DNS per se.
- In fact, there is nothing wrong for an "external" name to
- be mapped to your "internal" IP address or domain name
- from the DNS point of view.
- It might actually be provided for a legitimate purpose,
- such as for debugging.
- As long as the mapping is provided by the correct owner,
- it is not possible or does not make sense to detect
- whether the intent of the mapping is legitimate or not
- within the DNS.
- The "rebinding" attack must primarily be protected at the
- application that uses the DNS.
- For a large site, however, it may be difficult to protect
- all possible applications at once.
- This filtering feature is provided only to help such an
- operational environment;
- it is generally discouraged to turn it on unless you are
- very sure you have no other choice and the attack is a
- real threat for your applications.
- </para>
-
- <para>
- Care should be particularly taken if you want to use this
- option for addresses within 127.0.0.0/8.
- These addresses are obviously "internal", but many
- applications conventionally rely on a DNS mapping from
- some name to such an address.
- Filtering out DNS records containing this address
- spuriously can break such applications.
- </para>
- </section>
-
- <section xml:id="rpz"><info><title>Response Policy Zone (RPZ) Rewriting</title></info>
-
- <para>
- <acronym>BIND</acronym> 9 includes a limited
- mechanism to modify DNS responses for requests
- analogous to email anti-spam DNS blacklists.
- Responses can be changed to deny the existence of domains (NXDOMAIN),
- deny the existence of IP addresses for domains (NODATA),
- or contain other IP addresses or data.
- </para>
-
- <para>
- Response policy zones are named in the
- <command>response-policy</command> option for the view or among the
- global options if there is no response-policy option for the view.
- Response policy zones are ordinary DNS zones containing RRsets
- that can be queried normally if allowed.
- It is usually best to restrict those queries with something like
- <command>allow-query { localhost; };</command>.
- Note that zones using <command>masterfile-format map</command>
- cannot be used as policy zones.
- </para>
-
- <para>
- A <command>response-policy</command> option can support
- multiple policy zones. To maximize performance, a radix
- tree is used to quickly identify response policy zones
- containing triggers that match the current query. This
- imposes an upper limit of 32 on the number of policy zones
- in a single <command>response-policy</command> option; more
- than that is a configuration error.
- </para>
-
- <para>
- Five policy triggers can be encoded in RPZ records.
- <variablelist>
- <varlistentry>
- <term><command>RPZ-CLIENT-IP</command></term>
- <listitem>
- <para>
- IP records are triggered by the IP address of the
- DNS client.
- Client IP address triggers are encoded in records that have
- owner names that are subdomains of
- <command>rpz-client-ip</command> relativized to the
- policy zone origin name
- and encode an address or address block.
- IPv4 addresses are represented as
- <userinput>prefixlength.B4.B3.B2.B1.rpz-client-ip</userinput>.
- The IPv4 prefix length must be between 1 and 32.
- All four bytes, B4, B3, B2, and B1, must be present.
- B4 is the decimal value of the least significant byte of the
- IPv4 address as in IN-ADDR.ARPA.
- </para>
-
- <para>
- IPv6 addresses are encoded in a format similar
- to the standard IPv6 text representation,
- <userinput>prefixlength.W8.W7.W6.W5.W4.W3.W2.W1.rpz-client-ip</userinput>.
- Each of W8,...,W1 is a one to four digit hexadecimal number
- representing 16 bits of the IPv6 address as in the standard
- text representation of IPv6 addresses, but reversed as in
- IP6.ARPA. (Note that this representation of IPv6
- address is different from IP6.ARPA where each hex
- digit occupies a label.)
- All 8 words must be present except when one set of consecutive
- zero words is replaced with <userinput>.zz.</userinput>
- analogous to double colons (::) in standard IPv6 text
- encodings.
- The IPv6 prefix length must be between 1 and 128.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>QNAME</command></term>
- <listitem>
- <para>
- QNAME policy records are triggered by query names of
- requests and targets of CNAME records resolved to generate
- the response.
- The owner name of a QNAME policy record is
- the query name relativized to the policy zone.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>RPZ-IP</command></term>
- <listitem>
- <para>
- IP triggers are IP addresses in an
- A or AAAA record in the ANSWER section of a response.
- They are encoded like client-IP triggers except as
- subdomains of <command>rpz-ip</command>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>RPZ-NSDNAME</command></term>
- <listitem>
- <para>
- NSDNAME triggers match names of authoritative servers
- for the query name, a parent of the query name, a CNAME for
- query name, or a parent of a CNAME.
- They are encoded as subdomains of
- <command>rpz-nsdname</command> relativized
- to the RPZ origin name.
- NSIP triggers match IP addresses in A and
- AAAA RRsets for domains that can be checked against NSDNAME
- policy records.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>RPZ-NSIP</command></term>
- <listitem>
- <para>
- NSIP triggers match the IP addresses of authoritative
- servers. They are enncoded like IP triggers, except as
- subdomains of <command>rpz-nsip</command>.
- NSDNAME and NSIP triggers are checked only for names with at
- least <command>min-ns-dots</command> dots.
- The default value of <command>min-ns-dots</command> is
- 1, to exclude top level domains.
- </para>
- <para>
- If a name server's IP address is not yet known,
- <command>named</command> will recursively look up
- the IP address before applying an RPZ-NSIP rule.
- This can cause a processing delay. To speed up
- processing at the cost of precision, the
- <command>nsip-wait-recurse</command> option
- can be used: when set to <userinput>no</userinput>,
- RPZ-NSIP rules will only be applied when a name
- servers's IP address has already been looked up and
- cached. If a server's IP address is not in the
- cache, then the RPZ-NSIP rule will be ignored,
- but the address will be looked up in the
- background, and the rule will be applied
- to subsequent queries. The default is
- <userinput>yes</userinput>, meaning RPZ-NSIP
- rules should always be applied even if an
- address needs to be looked up first.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </para>
-
- <para>
- The query response is checked against all response policy zones,
- so two or more policy records can be triggered by a response.
- Because DNS responses are rewritten according to at most one
- policy record, a single record encoding an action (other than
- <command>DISABLED</command> actions) must be chosen.
- Triggers or the records that encode them are chosen for the
- rewriting in the following order:
- <orderedlist inheritnum="ignore" continuation="restarts">
- <listitem>Choose the triggered record in the zone that appears
- first in the <command>response-policy</command> option.
- </listitem>
- <listitem>Prefer CLIENT-IP to QNAME to IP to NSDNAME to NSIP
- triggers in a single zone.
- </listitem>
- <listitem>Among NSDNAME triggers, prefer the
- trigger that matches the smallest name under the DNSSEC ordering.
- </listitem>
- <listitem>Among IP or NSIP triggers, prefer the trigger
- with the longest prefix.
- </listitem>
- <listitem>Among triggers with the same prefix length,
- prefer the IP or NSIP trigger that matches
- the smallest IP address.
- </listitem>
- </orderedlist>
- </para>
-
- <para>
- When the processing of a response is restarted to resolve
- DNAME or CNAME records and a policy record set has
- not been triggered,
- all response policy zones are again consulted for the
- DNAME or CNAME names and addresses.
- </para>
-
- <para>
- RPZ record sets are any types of DNS record except
- DNAME or DNSSEC that encode actions or responses to
- individual queries.
- Any of the policies can be used with any of the triggers.
- For example, while the <command>TCP-only</command> policy is
- commonly used with <command>client-IP</command> triggers,
- it can be used with any type of trigger to force the use of
- TCP for responses with owner names in a zone.
- <variablelist>
- <varlistentry>
- <term><command>PASSTHRU</command></term>
- <listitem>
- <para>
- The whitelist policy is specified
- by a CNAME whose target is <command>rpz-passthru</command>.
- It causes the response to not be rewritten
- and is most often used to "poke holes" in policies for
- CIDR blocks.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>DROP</command></term>
- <listitem>
- <para>
- The blacklist policy is specified
- by a CNAME whose target is <command>rpz-drop</command>.
- It causes the response to be discarded.
- Nothing is sent to the DNS client.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>TCP-Only</command></term>
- <listitem>
- <para>
- The "slip" policy is specified
- by a CNAME whose target is <command>rpz-tcp-only</command>.
- It changes UDP responses to short, truncated DNS responses
- that require the DNS client to try again with TCP.
- It is used to mitigate distributed DNS reflection attacks.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>NXDOMAIN</command></term>
- <listitem>
- <para>
- The domain undefined response is encoded
- by a CNAME whose target is the root domain (.)
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>NODATA</command></term>
- <listitem>
- <para>
- The empty set of resource records is specified by
- CNAME whose target is the wildcard top-level
- domain (*.).
- It rewrites the response to NODATA or ANCOUNT=1.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>Local Data</command></term>
- <listitem>
- <para>
- A set of ordinary DNS records can be used to answer queries.
- Queries for record types not the set are answered with
- NODATA.
- </para>
-
- <para>
- A special form of local data is a CNAME whose target is a
- wildcard such as *.example.com.
- It is used as if were an ordinary CNAME after the asterisk (*)
- has been replaced with the query name.
- The purpose for this special form is query logging in the
- walled garden's authority DNS server.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </para>
-
- <para>
- All of the actions specified in all of the individual records
- in a policy zone
- can be overridden with a <command>policy</command> clause in the
- <command>response-policy</command> option.
- An organization using a policy zone provided by another
- organization might use this mechanism to redirect domains
- to its own walled garden.
- <variablelist>
- <varlistentry>
- <term><command>GIVEN</command></term>
- <listitem>
- <para>The placeholder policy says "do not override but
- perform the action specified in the zone."
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>DISABLED</command></term>
- <listitem>
- <para>
- The testing override policy causes policy zone records to do
- nothing but log what they would have done if the
- policy zone were not disabled.
- The response to the DNS query will be written (or not)
- according to any triggered policy records that are not
- disabled.
- Disabled policy zones should appear first,
- because they will often not be logged
- if a higher precedence trigger is found first.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>PASSTHRU</command></term>,
- <term><command>DROP</command></term>,
- <term><command>TCP-Only</command></term>,
- <term><command>NXDOMAIN</command></term>,
- and
- <term><command>NODATA</command></term>
- <listitem>
- <para>
- override with the corresponding per-record policy.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>CNAME domain</command></term>
- <listitem>
- <para>
- causes all RPZ policy records to act as if they were
- "cname domain" records.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </para>
-
- <para>
- By default, the actions encoded in a response policy zone
- are applied only to queries that ask for recursion (RD=1).
- That default can be changed for a single policy zone or
- all response policy zones in a view
- with a <command>recursive-only no</command> clause.
- This feature is useful for serving the same zone files
- both inside and outside an RFC 1918 cloud and using RPZ to
- delete answers that would otherwise contain RFC 1918 values
- on the externally visible name server or view.
- </para>
-
- <para>
- Also by default, RPZ actions are applied only to DNS requests
- that either do not request DNSSEC metadata (DO=0) or when no
- DNSSEC records are available for request name in the original
- zone (not the response policy zone). This default can be
- changed for all response policy zones in a view with a
- <command>break-dnssec yes</command> clause. In that case, RPZ
- actions are applied regardless of DNSSEC. The name of the
- clause option reflects the fact that results rewritten by RPZ
- actions cannot verify.
- </para>
-
- <para>
- No DNS records are needed for a QNAME or Client-IP trigger.
- The name or IP address itself is sufficient,
- so in principle the query name need not be recursively resolved.
- However, not resolving the requested
- name can leak the fact that response policy rewriting is in use
- and that the name is listed in a policy zone to operators of
- servers for listed names. To prevent that information leak, by
- default any recursion needed for a request is done before any
- policy triggers are considered. Because listed domains often
- have slow authoritative servers, this default behavior can cost
- significant time.
- The <command>qname-wait-recurse no</command> option
- overrides that default behavior when recursion cannot
- change a non-error response.
- The option does not affect QNAME or client-IP triggers
- in policy zones listed
- after other zones containing IP, NSIP and NSDNAME triggers, because
- those may depend on the A, AAAA, and NS records that would be
- found during recursive resolution. It also does not affect
- DNSSEC requests (DO=1) unless <command>break-dnssec yes</command>
- is in use, because the response would depend on whether or not
- RRSIG records were found during resolution.
- Using this option can cause error responses such as SERVFAIL to
- appear to be rewritten, since no recursion is being done to
- discover problems at the authoritative server.
- </para>
-
- <para>
- The TTL of a record modified by RPZ policies is set from the
- TTL of the relevant record in policy zone. It is then limited
- to a maximum value.
- The <command>max-policy-ttl</command> clause changes the
- maximum seconds from its default of 5.
- </para>
-
- <para>
- For example, you might use this option statement
- </para>
-<programlisting> response-policy { zone "badlist"; };</programlisting>
- <para>
- and this zone statement
- </para>
-<programlisting> zone "badlist" {type master; file "master/badlist"; allow-query {none;}; };</programlisting>
- <para>
- with this zone file
- </para>
-<programlisting>$TTL 1H
-@ SOA LOCALHOST. named-mgr.example.com (1 1h 15m 30d 2h)
- NS LOCALHOST.
-
-; QNAME policy records. There are no periods (.) after the owner names.
-nxdomain.domain.com CNAME . ; NXDOMAIN policy
-*.nxdomain.domain.com CNAME . ; NXDOMAIN policy
-nodata.domain.com CNAME *. ; NODATA policy
-*.nodata.domain.com CNAME *. ; NODATA policy
-bad.domain.com A 10.0.0.1 ; redirect to a walled garden
- AAAA 2001:2::1
-bzone.domain.com CNAME garden.example.com.
-
-; do not rewrite (PASSTHRU) OK.DOMAIN.COM
-ok.domain.com CNAME rpz-passthru.
-
-; redirect x.bzone.domain.com to x.bzone.domain.com.garden.example.com
-*.bzone.domain.com CNAME *.garden.example.com.
-
-
-; IP policy records that rewrite all responses containing A records in 127/8
-; except 127.0.0.1
-8.0.0.0.127.rpz-ip CNAME .
-32.1.0.0.127.rpz-ip CNAME rpz-passthru.
-
-; NSDNAME and NSIP policy records
-ns.domain.com.rpz-nsdname CNAME .
-48.zz.2.2001.rpz-nsip CNAME .
-
-; blacklist and whitelist some DNS clients
-112.zz.2001.rpz-client-ip CNAME rpz-drop.
-8.0.0.0.127.rpz-client-ip CNAME rpz-drop.
-
-; force some DNS clients and responses in the example.com zone to TCP
-16.0.0.1.10.rpz-client-ip CNAME rpz-tcp-only.
-example.com CNAME rpz-tcp-only.
-*.example.com CNAME rpz-tcp-only.
-
-</programlisting>
- <para>
- RPZ can affect server performance.
- Each configured response policy zone requires the server to
- perform one to four additional database lookups before a
- query can be answered.
- For example, a DNS server with four policy zones, each with all
- four kinds of response triggers, QNAME, IP, NSIP, and
- NSDNAME, requires a total of 17 times as many database
- lookups as a similar DNS server with no response policy zones.
- A <acronym>BIND9</acronym> server with adequate memory and one
- response policy zone with QNAME and IP triggers might achieve a
- maximum queries-per-second rate about 20% lower.
- A server with four response policy zones with QNAME and IP
- triggers might have a maximum QPS rate about 50% lower.
- </para>
-
- <para>
- Responses rewritten by RPZ are counted in the
- <command>RPZRewrites</command> statistics.
- </para>
-
- <para>
- The <command>log</command> clause can be used to optionally
- turn off rewrite logging for a particular response policy
- zone. By default, all rewrites are logged.
- </para>
- </section>
-
- <section xml:id="rrl"><info><title>Response Rate Limiting</title></info>
-
- <para>
- Excessive almost identical UDP <emphasis>responses</emphasis>
- can be controlled by configuring a
- <command>rate-limit</command> clause in an
- <command>options</command> or <command>view</command> statement.
- This mechanism keeps authoritative BIND 9 from being used
- in amplifying reflection denial of service (DoS) attacks.
- Short truncated (TC=1) responses can be sent to provide
- rate-limited responses to legitimate clients within
- a range of forged, attacked IP addresses.
- Legitimate clients react to dropped or truncated response
- by retrying with UDP or with TCP respectively.
- </para>
-
- <para>
- This mechanism is intended for authoritative DNS servers.
- It can be used on recursive servers but can slow
- applications such as SMTP servers (mail receivers) and
- HTTP clients (web browsers) that repeatedly request the
- same domains.
- When possible, closing "open" recursive servers is better.
- </para>
-
- <para>
- Response rate limiting uses a "credit" or "token bucket" scheme.
- Each combination of identical response and client
- has a conceptual account that earns a specified number
- of credits every second.
- A prospective response debits its account by one.
- Responses are dropped or truncated
- while the account is negative.
- Responses are tracked within a rolling window of time
- which defaults to 15 seconds, but can be configured with
- the <command>window</command> option to any value from
- 1 to 3600 seconds (1 hour).
- The account cannot become more positive than
- the per-second limit
- or more negative than <command>window</command>
- times the per-second limit.
- When the specified number of credits for a class of
- responses is set to 0, those responses are not rate limited.
- </para>
-
- <para>
- The notions of "identical response" and "DNS client"
- for rate limiting are not simplistic.
- All responses to an address block are counted as if to a
- single client.
- The prefix lengths of addresses blocks are
- specified with <command>ipv4-prefix-length</command> (default 24)
- and <command>ipv6-prefix-length</command> (default 56).
- </para>
-
- <para>
- All non-empty responses for a valid domain name (qname)
- and record type (qtype) are identical and have a limit specified
- with <command>responses-per-second</command>
- (default 0 or no limit).
- All empty (NODATA) responses for a valid domain,
- regardless of query type, are identical.
- Responses in the NODATA class are limited by
- <command>nodata-per-second</command>
- (default <command>responses-per-second</command>).
- Requests for any and all undefined subdomains of a given
- valid domain result in NXDOMAIN errors, and are identical
- regardless of query type.
- They are limited by <command>nxdomains-per-second</command>
- (default <command>responses-per-second</command>).
- This controls some attacks using random names, but
- can be relaxed or turned off (set to 0)
- on servers that expect many legitimate
- NXDOMAIN responses, such as from anti-spam blacklists.
- Referrals or delegations to the server of a given
- domain are identical and are limited by
- <command>referrals-per-second</command>
- (default <command>responses-per-second</command>).
- </para>
-
- <para>
- Responses generated from local wildcards are counted and limited
- as if they were for the parent domain name.
- This controls flooding using random.wild.example.com.
- </para>
-
- <para>
- All requests that result in DNS errors other
- than NXDOMAIN, such as SERVFAIL and FORMERR, are identical
- regardless of requested name (qname) or record type (qtype).
- This controls attacks using invalid requests or distant,
- broken authoritative servers.
- By default the limit on errors is the same as the
- <command>responses-per-second</command> value,
- but it can be set separately with
- <command>errors-per-second</command>.
- </para>
-
- <para>
- Many attacks using DNS involve UDP requests with forged source
- addresses.
- Rate limiting prevents the use of BIND 9 to flood a network
- with responses to requests with forged source addresses,
- but could let a third party block responses to legitimate requests.
- There is a mechanism that can answer some legitimate
- requests from a client whose address is being forged in a flood.
- Setting <command>slip</command> to 2 (its default) causes every
- other UDP request to be answered with a small truncated (TC=1)
- response.
- The small size and reduced frequency, and so lack of
- amplification, of "slipped" responses make them unattractive
- for reflection DoS attacks.
- <command>slip</command> must be between 0 and 10.
- A value of 0 does not "slip":
- no truncated responses are sent due to rate limiting,
- all responses are dropped.
- A value of 1 causes every response to slip;
- values between 2 and 10 cause every n'th response to slip.
- Some error responses including REFUSED and SERVFAIL
- cannot be replaced with truncated responses and are instead
- leaked at the <command>slip</command> rate.
- </para>
-
- <para>
- (NOTE: Dropped responses from an authoritative server may
- reduce the difficulty of a third party successfully forging
- a response to a recursive resolver. The best security
- against forged responses is for authoritative operators
- to sign their zones using DNSSEC and for resolver operators
- to validate the responses. When this is not an option,
- operators who are more concerned with response integrity
- than with flood mitigation may consider setting
- <command>slip</command> to 1, causing all rate-limited
- responses to be truncated rather than dropped. This reduces
- the effectiveness of rate-limiting against reflection attacks.)
- </para>
-
- <para>
- When the approximate query per second rate exceeds
- the <command>qps-scale</command> value,
- then the <command>responses-per-second</command>,
- <command>errors-per-second</command>,
- <command>nxdomains-per-second</command> and
- <command>all-per-second</command> values are reduced by the
- ratio of the current rate to the <command>qps-scale</command> value.
- This feature can tighten defenses during attacks.
- For example, with
- <command>qps-scale 250; responses-per-second 20;</command> and
- a total query rate of 1000 queries/second for all queries from
- all DNS clients including via TCP,
- then the effective responses/second limit changes to
- (250/1000)*20 or 5.
- Responses sent via TCP are not limited
- but are counted to compute the query per second rate.
- </para>
-
- <para>
- The optional <command>domain</command> clause specifies
- the namespace to which rate limits will apply. It
- is possible to use different rate limits for different names
- by specifying multiple <command>rate-limit</command> blocks
- with different <command>domain</command> clauses.
- The <command>rate-limit</command> statement's
- <command>domain</command> most closely matches the query
- name will be the one applied to a given query.
- </para>
-
- <para>
- Rate limiters for different name spaces maintain
- separate counters: If, for example, there is a
- <command>rate-limit</command> statement for "com" and
- another for "example.com", queries matching "example.com"
- will not be debited against the rate limiter for "com".
- </para>
-
- <para>
- If a <command>rate-limit</command> statement does not specify a
- <command>domain</command>, then it applies to the root domain
- (".") and thus affects the entire DNS namespace, except those
- portions covered by other <command>rate-limit</command>
- statements.
- </para>
-
- <para>
- Communities of DNS clients can be given their own parameters or no
- rate limiting by putting
- <command>rate-limit</command> statements in <command>view</command>
- statements instead of the global <command>option</command>
- statement.
- A <command>rate-limit</command> statement in a view replaces,
- rather than supplementing, a <command>rate-limit</command>
- statement among the main options.
- DNS clients within a view can be exempted from rate limits
- with the <command>exempt-clients</command> clause.
- </para>
-
- <para>
- UDP responses of all kinds can be limited with the
- <command>all-per-second</command> phrase. This rate
- limiting is unlike the rate limiting provided by
- <command>responses-per-second</command>,
- <command>errors-per-second</command>, and
- <command>nxdomains-per-second</command> on a DNS server
- which are often invisible to the victim of a DNS
- reflection attack. Unless the forged requests of the
- attack are the same as the legitimate requests of the
- victim, the victim's requests are not affected. Responses
- affected by an <command>all-per-second</command> limit
- are always dropped; the <command>slip</command> value
- has no effect. An <command>all-per-second</command>
- limit should be at least 4 times as large as the other
- limits, because single DNS clients often send bursts
- of legitimate requests. For example, the receipt of a
- single mail message can prompt requests from an SMTP
- server for NS, PTR, A, and AAAA records as the incoming
- SMTP/TCP/IP connection is considered. The SMTP server
- can need additional NS, A, AAAA, MX, TXT, and SPF records
- as it considers the STMP <command>Mail From</command>
- command. Web browsers often repeatedly resolve the
- same names that are repeated in HTML &lt;IMG&gt; tags
- in a page. <command>all-per-second</command> is similar
- to the rate limiting offered by firewalls but often
- inferior. Attacks that justify ignoring the contents
- of DNS responses are likely to be attacks on the DNS
- server itself. They usually should be discarded before
- the DNS server spends resources make TCP connections
- or parsing DNS requests, but that rate limiting must
- be done before the DNS server sees the requests.
- </para>
-
- <para>
- The maximum size of the table used to track requests and
- rate limit responses is set with <command>max-table-size</command>.
- Each entry in the table is between 40 and 80 bytes.
- The table needs approximately as many entries as the number
- of requests received per second.
- The default is 20,000.
- To reduce the cold start of growing the table,
- <command>min-table-size</command> (default 500)
- can set the minimum table size.
- Enable <command>rate-limit</command> category logging to monitor
- expansions of the table and inform
- choices for the initial and maximum table size.
- </para>
-
- <para>
- Use <command>log-only yes</command> to test rate limiting parameters
- without actually dropping any requests.
- </para>
-
- <para>
- Responses dropped by rate limits are included in the
- <command>RateDropped</command> and <command>QryDropped</command>
- statistics.
- Responses that truncated by rate limits are included in
- <command>RateSlipped</command> and <command>RespTruncated</command>.
- </para>
- </section>
-
- <section title="NXDOMAIN Redirection"><info/>
- <para>
- Named supports NXDOMAIN redirection via two methods:
- <itemizedlist>
- <listitem>Redirect zone <xref linkend="zone_statement_grammar"/></listitem>
- <listitem>Redirect namespace</listitem>
- </itemizedlist>
- </para>
- <para>
- With both methods when named gets a NXDOMAIN response
- it examines a separate namespace to see if the NXDOMAIN
- response should be replaced with an alternative response.
- </para>
- <para>
- With a redirect zone (<command>zone "." { type redirect; };</command>), the
- data used to replace the NXDOMAIN is held in a single
- zone which is not part of the normal namespace. All the
- redirect information is contained in the zone; there are
- no delegations.
- </para>
- <para>
- With a redirect namespace (<command>option { nxdomain-redirect
- &lt;suffix&gt; };</command>) the data used to replace the
- NXDOMAIN is part of the normal namespace and is looked up by
- appending the specified suffix to the original query name.
- This roughly doubles the cache required to process NXDOMAIN
- responses as you have the original NXDOMAIN response and
- the replacement data or a NXDOMAIN indicating that there
- is no replacement.
- </para>
- <para>
- If both a redirect zone and a redirect namespace are configured,
- the redirect zone is tried first.
- </para>
- </section>
- </section>
-
- <section xml:id="server_statement_grammar"><info><title><command>server</command> Statement Grammar</title></info>
-
-<programlisting><command>server</command> <replaceable>ip_addr[/prefixlen]</replaceable> {
- <optional> bogus <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> provide-ixfr <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> request-ixfr <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> request-expire <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> request-nsid <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> send-cookie <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> edns <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> edns-udp-size <replaceable>number</replaceable> ; </optional>
- <optional> edns-version <replaceable>number</replaceable> ; </optional>
- <optional> max-udp-size <replaceable>number</replaceable> ; </optional>
- <optional> tcp-only <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> transfers <replaceable>number</replaceable> ; </optional>
- <optional> transfer-format <replaceable>( one-answer | many-answers )</replaceable> ; ]</optional>
- <optional> keys { <replaceable>key_id</replaceable> }; </optional>
- <optional> transfer-source (<replaceable>ip4_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> transfer-source-v6 (<replaceable>ip6_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> notify-source (<replaceable>ip4_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> notify-source-v6 (<replaceable>ip6_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> query-source <optional> address ( <replaceable>ip_addr</replaceable> | <replaceable>*</replaceable> ) </optional>
- <optional> port ( <replaceable>ip_port</replaceable> | <replaceable>*</replaceable> ) </optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> query-source-v6 <optional> address ( <replaceable>ip_addr</replaceable> | <replaceable>*</replaceable> ) </optional>
- <optional> port ( <replaceable>ip_port</replaceable> | <replaceable>*</replaceable> ) </optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> use-queryport-pool <replaceable>yes_or_no</replaceable>; </optional>
- <optional> queryport-pool-ports <replaceable>number</replaceable>; </optional>
- <optional> queryport-pool-updateinterval <replaceable>number</replaceable>; </optional>
-};
-</programlisting>
-
- </section>
-
- <section xml:id="server_statement_definition_and_usage"><info><title><command>server</command> Statement Definition and
- Usage</title></info>
-
- <para>
- The <command>server</command> statement defines
- characteristics
- to be associated with a remote name server. If a prefix length is
- specified, then a range of servers is covered. Only the most
- specific
- server clause applies regardless of the order in
- <filename>named.conf</filename>.
- </para>
-
- <para>
- The <command>server</command> statement can occur at
- the top level of the
- configuration file or inside a <command>view</command>
- statement.
- If a <command>view</command> statement contains
- one or more <command>server</command> statements, only
- those
- apply to the view and any top-level ones are ignored.
- If a view contains no <command>server</command>
- statements,
- any top-level <command>server</command> statements are
- used as
- defaults.
- </para>
-
- <para>
- If you discover that a remote server is giving out bad data,
- marking it as bogus will prevent further queries to it. The
- default
- value of <command>bogus</command> is <command>no</command>.
- </para>
- <para>
- The <command>provide-ixfr</command> clause determines
- whether
- the local server, acting as master, will respond with an
- incremental
- zone transfer when the given remote server, a slave, requests it.
- If set to <command>yes</command>, incremental transfer
- will be provided
- whenever possible. If set to <command>no</command>,
- all transfers
- to the remote server will be non-incremental. If not set, the
- value
- of the <command>provide-ixfr</command> option in the
- view or
- global options block is used as a default.
- </para>
-
- <para>
- The <command>request-ixfr</command> clause determines
- whether
- the local server, acting as a slave, will request incremental zone
- transfers from the given remote server, a master. If not set, the
- value of the <command>request-ixfr</command> option in
- the view or global options block is used as a default. It may
- also be set in the zone block and, if set there, it will
- override the global or view setting for that zone.
- </para>
-
- <para>
- IXFR requests to servers that do not support IXFR will
- automatically
- fall back to AXFR. Therefore, there is no need to manually list
- which servers support IXFR and which ones do not; the global
- default
- of <command>yes</command> should always work.
- The purpose of the <command>provide-ixfr</command> and
- <command>request-ixfr</command> clauses is
- to make it possible to disable the use of IXFR even when both
- master
- and slave claim to support it, for example if one of the servers
- is buggy and crashes or corrupts data when IXFR is used.
- </para>
-
- <para>
- The <command>request-expire</command> clause determines
- whether the local server, when acting as a slave, will
- request the EDNS EXPIRE value. The EDNS EXPIRE value
- indicates the remaining time before the zone data will
- expire and need to be be refreshed. This is used
- when a secondary server transfers a zone from another
- secondary server; when transferring from the primary, the
- expiration timer is set from the EXPIRE field of the SOA
- record instead.
- The default is <command>yes</command>.
- </para>
-
- <para>
- The <command>edns</command> clause determines whether
- the local server will attempt to use EDNS when communicating
- with the remote server. The default is <command>yes</command>.
- </para>
-
- <para>
- The <command>edns-udp-size</command> option sets the
- EDNS UDP size that is advertised by <command>named</command>
- when querying the remote server. Valid values are 512
- to 4096 bytes (values outside this range will be silently
- adjusted to the nearest value within it). This option
- is useful when you wish to advertise a different value
- to this server than the value you advertise globally,
- for example, when there is a firewall at the remote
- site that is blocking large replies. (Note: Currently,
- this sets a single UDP size for all packets sent to the
- server; <command>named</command> will not deviate from
- this value. This differs from the behavior of
- <command>edns-udp-size</command> in <command>options</command>
- or <command>view</command> statements, where it specifies
- a maximum value. The <command>server</command> statement
- behavior may be brought into conformance with the
- <command>options/view</command> behavior in future releases.)
- </para>
-
- <para>
- The <command>edns-version</command> option sets the
- maximum EDNS VERSION that will be sent to the server(s)
- by the resolver. The actual EDNS version sent is still
- subject to normal EDNS version negotiation rules (see
- RFC 6891), the maximum EDNS version supported by the
- server, and any other heuristics that indicate that a
- lower version should be sent. This option is intended
- to be used when a remote server reacts badly to a given
- EDNS version or higher; it should be set to the highest
- version the remote server is known to support. Valid
- values are 0 to 255; higher values will be silently
- adjusted. This option will not be needed until higher
- EDNS versions than 0 are in use.
- </para>
-
- <para>
- The <command>max-udp-size</command> option sets the
- maximum EDNS UDP message size <command>named</command>
- will send. Valid values are 512 to 4096 bytes (values
- outside this range will be silently adjusted). This
- option is useful when you know that there is a firewall
- that is blocking large replies from <command>named</command>.
- </para>
-
- <para>
- The <command>tcp-only</command> option sets the transport
- protocol to TCP. The default is to use the UDP transport
- and to fallback on TCP only when a truncated response
- is received.
- </para>
-
- <para>
- The server supports two zone transfer methods. The first, <command>one-answer</command>,
- uses one DNS message per resource record transferred. <command>many-answers</command> packs
- as many resource records as possible into a message. <command>many-answers</command> is
- more efficient, but is only known to be understood by <acronym>BIND</acronym> 9, <acronym>BIND</acronym>
- 8.x, and patched versions of <acronym>BIND</acronym>
- 4.9.5. You can specify which method
- to use for a server with the <command>transfer-format</command> option.
- If <command>transfer-format</command> is not
- specified, the <command>transfer-format</command>
- specified
- by the <command>options</command> statement will be
- used.
- </para>
-
- <para><command>transfers</command>
- is used to limit the number of concurrent inbound zone
- transfers from the specified server. If no
- <command>transfers</command> clause is specified, the
- limit is set according to the
- <command>transfers-per-ns</command> option.
- </para>
-
- <para>
- The <command>keys</command> clause identifies a
- <command>key_id</command> defined by the <command>key</command> statement,
- to be used for transaction security (TSIG, <xref linkend="tsig"/>)
- when talking to the remote server.
- When a request is sent to the remote server, a request signature
- will be generated using the key specified here and appended to the
- message. A request originating from the remote server is not
- required
- to be signed by this key.
- </para>
-
- <para>
- Only a single key per server is currently supported.
- </para>
-
- <para>
- The <command>transfer-source</command> and
- <command>transfer-source-v6</command> clauses specify
- the IPv4 and IPv6 source
- address to be used for zone transfer with the remote server,
- respectively.
- For an IPv4 remote server, only <command>transfer-source</command> can
- be specified.
- Similarly, for an IPv6 remote server, only
- <command>transfer-source-v6</command> can be
- specified.
- For more details, see the description of
- <command>transfer-source</command> and
- <command>transfer-source-v6</command> in
- <xref linkend="zone_transfers"/>.
- </para>
-
- <para>
- The <command>notify-source</command> and
- <command>notify-source-v6</command> clauses specify the
- IPv4 and IPv6 source address to be used for notify
- messages sent to remote servers, respectively. For an
- IPv4 remote server, only <command>notify-source</command>
- can be specified. Similarly, for an IPv6 remote server,
- only <command>notify-source-v6</command> can be specified.
- </para>
-
- <para>
- The <command>query-source</command> and
- <command>query-source-v6</command> clauses specify the
- IPv4 and IPv6 source address to be used for queries
- sent to remote servers, respectively. For an IPv4
- remote server, only <command>query-source</command> can
- be specified. Similarly, for an IPv6 remote server,
- only <command>query-source-v6</command> can be specified.
- </para>
-
- <para>
- The <command>request-nsid</command> clause determines
- whether the local server will add a NSID EDNS option
- to requests sent to the server. This overrides
- <command>request-nsid</command> set at the view or
- option level.
- </para>
-
- <para>
- The <command>send-cookie</command> clause determines
- whether the local server will add a COOKIE EDNS option
- to requests sent to the server. This overrides
- <command>send-cookie</command> set at the view or
- option level. The <command>named</command> server may
- determine that COOKIE is not supported by the remote server
- and not add a COOKIE EDNS option to requests.
- </para>
- </section>
-
- <section xml:id="statschannels"><info><title><command>statistics-channels</command> Statement Grammar</title></info>
-
-<programlisting><command>statistics-channels</command> {
- [ inet ( ip_addr | * ) [ port ip_port ]
- [ allow { <replaceable> address_match_list </replaceable> } ]; ]
- [ inet ...; ]
-};
-</programlisting>
- </section>
-
- <section xml:id="statistics_channels"><info><title><command>statistics-channels</command> Statement Definition and
- Usage</title></info>
-
- <para>
- The <command>statistics-channels</command> statement
- declares communication channels to be used by system
- administrators to get access to statistics information of
- the name server.
- </para>
-
- <para>
- This statement intends to be flexible to support multiple
- communication protocols in the future, but currently only
- HTTP access is supported.
- It requires that BIND 9 be compiled with libxml2 and/or
- json-c (also known as libjson0); the
- <command>statistics-channels</command> statement is
- still accepted even if it is built without the library,
- but any HTTP access will fail with an error.
- </para>
-
- <para>
- An <command>inet</command> control channel is a TCP socket
- listening at the specified <command>ip_port</command> on the
- specified <command>ip_addr</command>, which can be an IPv4 or IPv6
- address. An <command>ip_addr</command> of <literal>*</literal>
- (asterisk) is
- interpreted as the IPv4 wildcard address; connections will be
- accepted on any of the system's IPv4 addresses.
- To listen on the IPv6 wildcard address,
- use an <command>ip_addr</command> of <literal>::</literal>.
- </para>
-
- <para>
- If no port is specified, port 80 is used for HTTP channels.
- The asterisk "<literal>*</literal>" cannot be used for
- <command>ip_port</command>.
- </para>
-
- <para>
- The attempt of opening a statistics channel is
- restricted by the optional <command>allow</command> clause.
- Connections to the statistics channel are permitted based on the
- <command>address_match_list</command>.
- If no <command>allow</command> clause is present,
- <command>named</command> accepts connection
- attempts from any address; since the statistics may
- contain sensitive internal information, it is highly
- recommended to restrict the source of connection requests
- appropriately.
- </para>
-
- <para>
- If no <command>statistics-channels</command> statement is present,
- <command>named</command> will not open any communication channels.
- </para>
-
- <para>
- The statistics are available in various formats and views
- depending on the URI used to access them. For example, if
- the statistics channel is configured to listen on 127.0.0.1
- port 8888, then the statistics are accessible in XML format at
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://127.0.0.1:8888/">http://127.0.0.1:8888/</link> or
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://127.0.0.1:8888/xml">http://127.0.0.1:8888/xml</link>. A CSS file is
- included which can format the XML statistics into tables
- when viewed with a stylesheet-capable browser, and into
- charts and graphs using the Google Charts API when using a
- javascript-capable browser.
- </para>
-
- <para>
- Applications that depend on a particular XML schema
- can request
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://127.0.0.1:8888/xml/v2">http://127.0.0.1:8888/xml/v2</link> for version 2
- of the statistics XML schema or
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://127.0.0.1:8888/xml/v3">http://127.0.0.1:8888/xml/v3</link> for version 3.
- If the requested schema is supported by the server, then
- it will respond; if not, it will return a "page not found"
- error.
- </para>
-
- <para>
- Broken-out subsets of the statistics can be viewed at
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://127.0.0.1:8888/xml/v3/status">http://127.0.0.1:8888/xml/v3/status</link>
- (server uptime and last reconfiguration time),
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://127.0.0.1:8888/xml/v3/server">http://127.0.0.1:8888/xml/v3/server</link>
- (server and resolver statistics),
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://127.0.0.1:8888/xml/v3/zones">http://127.0.0.1:8888/xml/v3/zones</link>
- (zone statistics),
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://127.0.0.1:8888/xml/v3/net">http://127.0.0.1:8888/xml/v3/net</link>
- (network status and socket statistics),
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://127.0.0.1:8888/xml/v3/mem">http://127.0.0.1:8888/xml/v3/mem</link>
- (memory manager statistics),
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://127.0.0.1:8888/xml/v3/tasks">http://127.0.0.1:8888/xml/v3/tasks</link>
- (task manager statistics), and
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://127.0.0.1:8888/xml/v3/traffic">http://127.0.0.1:8888/xml/v3/traffic</link>
- (traffic sizes).
- </para>
-
- <para>
- The full set of statistics can also be read in JSON format at
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://127.0.0.1:8888/json">http://127.0.0.1:8888/json</link>,
- with the broken-out subsets at
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://127.0.0.1:8888/json/v1/status">http://127.0.0.1:8888/json/v1/status</link>
- (server uptime and last reconfiguration time),
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://127.0.0.1:8888/json/v1/server">http://127.0.0.1:8888/json/v1/server</link>
- (server and resolver statistics),
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://127.0.0.1:8888/json/v1/zones">http://127.0.0.1:8888/json/v1/zones</link>
- (zone statistics),
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://127.0.0.1:8888/json/v1/net">http://127.0.0.1:8888/json/v1/net</link>
- (network status and socket statistics),
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://127.0.0.1:8888/json/v1/mem">http://127.0.0.1:8888/json/v1/mem</link>
- (memory manager statistics),
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://127.0.0.1:8888/json/v1/tasks">http://127.0.0.1:8888/json/v1/tasks</link>
- (task manager statistics), and
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://127.0.0.1:8888/json/v1/traffic">http://127.0.0.1:8888/json/v1/traffic</link>
- (traffic sizes).
- </para>
- </section>
-
- <section xml:id="trusted-keys"><info><title><command>trusted-keys</command> Statement Grammar</title></info>
-
-<programlisting><command>trusted-keys</command> {
- <replaceable>string</replaceable> <replaceable>number</replaceable> <replaceable>number</replaceable> <replaceable>number</replaceable> <replaceable>string</replaceable> ;
- <optional> <replaceable>string</replaceable> <replaceable>number</replaceable> <replaceable>number</replaceable> <replaceable>number</replaceable> <replaceable>string</replaceable> ; <optional>...</optional></optional>
-};
-</programlisting>
-
- </section>
- <section xml:id="trusted_keys"><info><title><command>trusted-keys</command> Statement Definition
- and Usage</title></info>
-
- <para>
- The <command>trusted-keys</command> statement defines
- DNSSEC security roots. DNSSEC is described in <xref linkend="DNSSEC"/>. A security root is defined when the
- public key for a non-authoritative zone is known, but
- cannot be securely obtained through DNS, either because
- it is the DNS root zone or because its parent zone is
- unsigned. Once a key has been configured as a trusted
- key, it is treated as if it had been validated and
- proven secure. The resolver attempts DNSSEC validation
- on all DNS data in subdomains of a security root.
- </para>
- <para>
- All keys (and corresponding zones) listed in
- <command>trusted-keys</command> are deemed to exist regardless
- of what parent zones say. Similarly for all keys listed in
- <command>trusted-keys</command> only those keys are
- used to validate the DNSKEY RRset. The parent's DS RRset
- will not be used.
- </para>
- <para>
- The <command>trusted-keys</command> statement can contain
- multiple key entries, each consisting of the key's
- domain name, flags, protocol, algorithm, and the Base-64
- representation of the key data.
- Spaces, tabs, newlines and carriage returns are ignored
- in the key data, so the configuration may be split up into
- multiple lines.
- </para>
- <para>
- <command>trusted-keys</command> may be set at the top level
- of <filename>named.conf</filename> or within a view. If it is
- set in both places, they are additive: keys defined at the top
- level are inherited by all views, but keys defined in a view
- are only used within that view.
- </para>
- <para>
- Validation below specified names can be temporarily disabled
- by using <command>rndc nta</command>.
- </para>
- </section>
-
- <section xml:id="managed_keys"><info><title><command>managed-keys</command> Statement Grammar</title></info>
-
-<programlisting><command>managed-keys</command> {
- <replaceable>name</replaceable> initial-key <replaceable>flags</replaceable> <replaceable>protocol</replaceable> <replaceable>algorithm</replaceable> <replaceable>key-data</replaceable> ;
- <optional> <replaceable>name</replaceable> initial-key <replaceable>flags</replaceable> <replaceable>protocol</replaceable> <replaceable>algorithm</replaceable> <replaceable>key-data</replaceable> ; <optional>...</optional></optional>
-};
-</programlisting>
-
- </section>
- <section xml:id="managed-keys"><info><title><command>managed-keys</command> Statement Definition
- and Usage</title></info>
-
- <para>
- The <command>managed-keys</command> statement, like
- <command>trusted-keys</command>, defines DNSSEC
- security roots. The difference is that
- <command>managed-keys</command> can be kept up to date
- automatically, without intervention from the resolver
- operator.
- </para>
- <para>
- Suppose, for example, that a zone's key-signing
- key was compromised, and the zone owner had to revoke and
- replace the key. A resolver which had the old key in a
- <command>trusted-keys</command> statement would be
- unable to validate this zone any longer; it would
- reply with a SERVFAIL response code. This would
- continue until the resolver operator had updated the
- <command>trusted-keys</command> statement with the new key.
- </para>
- <para>
- If, however, the zone were listed in a
- <command>managed-keys</command> statement instead, then the
- zone owner could add a "stand-by" key to the zone in advance.
- <command>named</command> would store the stand-by key, and
- when the original key was revoked, <command>named</command>
- would be able to transition smoothly to the new key. It would
- also recognize that the old key had been revoked, and cease
- using that key to validate answers, minimizing the damage that
- the compromised key could do.
- </para>
- <para>
- A <command>managed-keys</command> statement contains a list of
- the keys to be managed, along with information about how the
- keys are to be initialized for the first time. The only
- initialization method currently supported (as of
- <acronym>BIND</acronym> 9.7.0) is <literal>initial-key</literal>.
- This means the <command>managed-keys</command> statement must
- contain a copy of the initializing key. (Future releases may
- allow keys to be initialized by other methods, eliminating this
- requirement.)
- </para>
- <para>
- Consequently, a <command>managed-keys</command> statement
- appears similar to a <command>trusted-keys</command>, differing
- in the presence of the second field, containing the keyword
- <literal>initial-key</literal>. The difference is, whereas the
- keys listed in a <command>trusted-keys</command> continue to be
- trusted until they are removed from
- <filename>named.conf</filename>, an initializing key listed
- in a <command>managed-keys</command> statement is only trusted
- <emphasis>once</emphasis>: for as long as it takes to load the
- managed key database and start the RFC 5011 key maintenance
- process.
- </para>
- <para>
- The first time <command>named</command> runs with a managed key
- configured in <filename>named.conf</filename>, it fetches the
- DNSKEY RRset directly from the zone apex, and validates it
- using the key specified in the <command>managed-keys</command>
- statement. If the DNSKEY RRset is validly signed, then it is
- used as the basis for a new managed keys database.
- </para>
- <para>
- From that point on, whenever <command>named</command> runs, it
- sees the <command>managed-keys</command> statement, checks to
- make sure RFC 5011 key maintenance has already been initialized
- for the specified domain, and if so, it simply moves on. The
- key specified in the <command>managed-keys</command> is not
- used to validate answers; it has been superseded by the key or
- keys stored in the managed keys database.
- </para>
- <para>
- The next time <command>named</command> runs after a name
- has been <emphasis>removed</emphasis> from the
- <command>managed-keys</command> statement, the corresponding
- zone will be removed from the managed keys database,
- and RFC 5011 key maintenance will no longer be used for that
- domain.
- </para>
- <para>
- <command>named</command> only maintains a single managed keys
- database; consequently, unlike <command>trusted-keys</command>,
- <command>managed-keys</command> may only be set at the top
- level of <filename>named.conf</filename>, not within a view.
- </para>
- <para>
- In the current implementation, the managed keys database is
- stored as a master-format zone file called
- <filename>managed-keys.bind</filename>. When the key database
- is changed, the zone is updated. As with any other dynamic
- zone, changes will be written into a journal file,
- <filename>managed-keys.bind.jnl</filename>. They are committed
- to the master file as soon as possible afterward; in the case
- of the managed key database, this will usually occur within 30
- seconds. So, whenever <command>named</command> is using
- automatic key maintenance, those two files can be expected to
- exist in the working directory. (For this reason among others,
- the working directory should be always be writable by
- <command>named</command>.)
- </para>
- <para>
- If the <command>dnssec-validation</command> option is
- set to <userinput>auto</userinput>, <command>named</command>
- will automatically initialize a managed key for the
- root zone. Similarly, if the <command>dnssec-lookaside</command>
- option is set to <userinput>auto</userinput>,
- <command>named</command> will automatically initialize
- a managed key for the zone <literal>dlv.isc.org</literal>.
- In both cases, the key that is used to initialize the key
- maintenance process is built into <command>named</command>,
- and can be overridden from <command>bindkeys-file</command>.
- </para>
- </section>
-
- <section xml:id="view_statement_grammar"><info><title><command>view</command> Statement Grammar</title></info>
-
-<programlisting><command>view</command> <replaceable>view_name</replaceable>
- <optional><replaceable>class</replaceable></optional> {
- match-clients { <replaceable>address_match_list</replaceable> };
- match-destinations { <replaceable>address_match_list</replaceable> };
- match-recursive-only <replaceable>yes_or_no</replaceable> ;
- <optional> <replaceable>view_option</replaceable>; ...</optional>
- <optional> <replaceable>zone_statement</replaceable>; ...</optional>
-};
-</programlisting>
-
- </section>
- <section xml:id="view_statement"><info><title><command>view</command> Statement Definition and Usage</title></info>
-
- <para>
- The <command>view</command> statement is a powerful
- feature
- of <acronym>BIND</acronym> 9 that lets a name server
- answer a DNS query differently
- depending on who is asking. It is particularly useful for
- implementing
- split DNS setups without having to run multiple servers.
- </para>
-
- <para>
- Each <command>view</command> statement defines a view
- of the
- DNS namespace that will be seen by a subset of clients. A client
- matches
- a view if its source IP address matches the
- <varname>address_match_list</varname> of the view's
- <command>match-clients</command> clause and its
- destination IP address matches
- the <varname>address_match_list</varname> of the
- view's
- <command>match-destinations</command> clause. If not
- specified, both
- <command>match-clients</command> and <command>match-destinations</command>
- default to matching all addresses. In addition to checking IP
- addresses
- <command>match-clients</command> and <command>match-destinations</command>
- can also take <command>keys</command> which provide an
- mechanism for the
- client to select the view. A view can also be specified
- as <command>match-recursive-only</command>, which
- means that only recursive
- requests from matching clients will match that view.
- The order of the <command>view</command> statements is
- significant —
- a client request will be resolved in the context of the first
- <command>view</command> that it matches.
- </para>
-
- <para>
- Zones defined within a <command>view</command>
- statement will
- only be accessible to clients that match the <command>view</command>.
- By defining a zone of the same name in multiple views, different
- zone data can be given to different clients, for example,
- "internal"
- and "external" clients in a split DNS setup.
- </para>
-
- <para>
- Many of the options given in the <command>options</command> statement
- can also be used within a <command>view</command>
- statement, and then
- apply only when resolving queries with that view. When no
- view-specific
- value is given, the value in the <command>options</command> statement
- is used as a default. Also, zone options can have default values
- specified
- in the <command>view</command> statement; these
- view-specific defaults
- take precedence over those in the <command>options</command> statement.
- </para>
-
- <para>
- Views are class specific. If no class is given, class IN
- is assumed. Note that all non-IN views must contain a hint zone,
- since only the IN class has compiled-in default hints.
- </para>
-
- <para>
- If there are no <command>view</command> statements in
- the config
- file, a default view that matches any client is automatically
- created
- in class IN. Any <command>zone</command> statements
- specified on
- the top level of the configuration file are considered to be part
- of
- this default view, and the <command>options</command>
- statement will
- apply to the default view. If any explicit <command>view</command>
- statements are present, all <command>zone</command>
- statements must
- occur inside <command>view</command> statements.
- </para>
-
- <para>
- Here is an example of a typical split DNS setup implemented
- using <command>view</command> statements:
- </para>
-
-<programlisting>view "internal" {
- // This should match our internal networks.
- match-clients { 10.0.0.0/8; };
-
- // Provide recursive service to internal
- // clients only.
- recursion yes;
-
- // Provide a complete view of the example.com
- // zone including addresses of internal hosts.
- zone "example.com" {
- type master;
- file "example-internal.db";
- };
-};
-
-view "external" {
- // Match all clients not matched by the
- // previous view.
- match-clients { any; };
-
- // Refuse recursive service to external clients.
- recursion no;
-
- // Provide a restricted view of the example.com
- // zone containing only publicly accessible hosts.
- zone "example.com" {
- type master;
- file "example-external.db";
- };
-};
-</programlisting>
-
- </section>
- <section xml:id="zone_statement_grammar"><info><title><command>zone</command>
- Statement Grammar</title></info>
-
-<programlisting><command>zone</command> <replaceable>zone_name</replaceable> <optional><replaceable>class</replaceable></optional> {
- type master;
- <optional> allow-query { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> allow-query-on { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> allow-transfer { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> allow-update { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> update-check-ksk <replaceable>yes_or_no</replaceable>; </optional>
- <optional> dnssec-dnskey-kskonly <replaceable>yes_or_no</replaceable>; </optional>
- <optional> dnssec-loadkeys-interval <replaceable>number</replaceable>; </optional>
- <optional> update-policy <replaceable>local</replaceable> | { <replaceable>update_policy_rule</replaceable> <optional>...</optional> }; </optional>
- <optional> also-notify <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> { ( <replaceable>masters_list</replaceable> | <replaceable>ip_addr</replaceable>
- <optional>port <replaceable>ip_port</replaceable></optional>
- <optional>key <replaceable>key</replaceable></optional> ) ; <optional>...</optional> }; </optional>
- <optional> check-names (<constant>warn</constant>|<constant>fail</constant>|<constant>ignore</constant>) ; </optional>
- <optional> check-mx (<constant>warn</constant>|<constant>fail</constant>|<constant>ignore</constant>) ; </optional>
- <optional> check-wildcard <replaceable>yes_or_no</replaceable>; </optional>
- <optional> check-spf ( <replaceable>warn</replaceable> | <replaceable>ignore</replaceable> ); </optional>
- <optional> check-integrity <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> dialup <replaceable>dialup_option</replaceable> ; </optional>
- <optional> file <replaceable>string</replaceable> ; </optional>
- <optional> masterfile-format (<constant>text</constant>|<constant>raw</constant>|<constant>map</constant>) ; </optional>
- <optional> journal <replaceable>string</replaceable> ; </optional>
- <optional> max-journal-size <replaceable>size_spec</replaceable>; </optional>
- <optional> forward (<constant>only</constant>|<constant>first</constant>) ; </optional>
- <optional> forwarders { <optional> <replaceable>ip_addr</replaceable> <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; ... </optional> }; </optional>
- <optional> ixfr-base <replaceable>string</replaceable> ; </optional>
- <optional> ixfr-from-differences <replaceable>yes_or_no</replaceable>; </optional>
- <optional> ixfr-tmp-file <replaceable>string</replaceable> ; </optional>
- <optional> maintain-ixfr-base <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> max-ixfr-log-size <replaceable>number</replaceable> ; </optional>
- <optional> max-transfer-idle-out <replaceable>number</replaceable> ; </optional>
- <optional> max-transfer-time-out <replaceable>number</replaceable> ; </optional>
- <optional> notify <replaceable>yes_or_no</replaceable> | <replaceable>explicit</replaceable> | <replaceable>master-only</replaceable> ; </optional>
- <optional> notify-delay <replaceable>seconds</replaceable> ; </optional>
- <optional> notify-to-soa <replaceable>yes_or_no</replaceable>; </optional>
- <optional> pubkey <replaceable>number</replaceable> <replaceable>number</replaceable> <replaceable>number</replaceable> <replaceable>string</replaceable> ; </optional>
- <optional> notify-source (<replaceable>ip4_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> notify-source-v6 (<replaceable>ip6_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> zone-statistics <replaceable>full</replaceable> | <replaceable>terse</replaceable> | <replaceable>none</replaceable>; </optional>
- <optional> sig-validity-interval <replaceable>number</replaceable> <optional><replaceable>number</replaceable></optional> ; </optional>
- <optional> sig-signing-nodes <replaceable>number</replaceable> ; </optional>
- <optional> sig-signing-signatures <replaceable>number</replaceable> ; </optional>
- <optional> sig-signing-type <replaceable>number</replaceable> ; </optional>
- <optional> database <replaceable>string</replaceable> ; </optional>
- <optional> min-refresh-time <replaceable>number</replaceable> ; </optional>
- <optional> max-refresh-time <replaceable>number</replaceable> ; </optional>
- <optional> min-retry-time <replaceable>number</replaceable> ; </optional>
- <optional> max-retry-time <replaceable>number</replaceable> ; </optional>
- <optional> key-directory <replaceable>path_name</replaceable>; </optional>
- <optional> auto-dnssec <constant>allow</constant>|<constant>maintain</constant>|<constant>off</constant>; </optional>
- <optional> inline-signing <replaceable>yes_or_no</replaceable>; </optional>
- <optional> zero-no-soa-ttl <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> serial-update-method <constant>increment</constant>|<constant>unixtime</constant>|<constant>date</constant>; </optional>
- <optional> max-zone-ttl <replaceable>number</replaceable> ; </optional>
-};
-
-zone <replaceable>zone_name</replaceable> <optional><replaceable>class</replaceable></optional> {
- type slave;
- <optional> allow-notify { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> allow-query { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> allow-query-on { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> allow-transfer { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> allow-update-forwarding { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> dnssec-update-mode ( <replaceable>maintain</replaceable> | <replaceable>no-resign</replaceable> ); </optional>
- <optional> update-check-ksk <replaceable>yes_or_no</replaceable>; </optional>
- <optional> dnssec-dnskey-kskonly <replaceable>yes_or_no</replaceable>; </optional>
- <optional> dnssec-loadkeys-interval <replaceable>number</replaceable>; </optional>
- <optional> dnssec-secure-to-insecure <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> try-tcp-refresh <replaceable>yes_or_no</replaceable>; </optional>
- <optional> also-notify <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> { ( <replaceable>masters_list</replaceable> | <replaceable>ip_addr</replaceable>
- <optional>port <replaceable>ip_port</replaceable></optional>
- <optional>key <replaceable>key</replaceable></optional> ) ; <optional>...</optional> }; </optional>
- <optional> check-names (<constant>warn</constant>|<constant>fail</constant>|<constant>ignore</constant>) ; </optional>
- <optional> dialup <replaceable>dialup_option</replaceable> ; </optional>
- <optional> file <replaceable>string</replaceable> ; </optional>
- <optional> masterfile-format (<constant>text</constant>|<constant>raw</constant>|<constant>map</constant>) ; </optional>
- <optional> journal <replaceable>string</replaceable> ; </optional>
- <optional> max-journal-size <replaceable>size_spec</replaceable>; </optional>
- <optional> forward (<constant>only</constant>|<constant>first</constant>) ; </optional>
- <optional> forwarders { <optional> <replaceable>ip_addr</replaceable> <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; ... </optional> }; </optional>
- <optional> ixfr-base <replaceable>string</replaceable> ; </optional>
- <optional> ixfr-from-differences <replaceable>yes_or_no</replaceable>; </optional>
- <optional> ixfr-tmp-file <replaceable>string</replaceable> ; </optional>
- <optional> request-ixfr <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> maintain-ixfr-base <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> masters <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> { ( <replaceable>masters_list</replaceable> | <replaceable>ip_addr</replaceable>
- <optional>port <replaceable>ip_port</replaceable></optional>
- <optional>dscp <replaceable>ip_dscp</replaceable></optional>
- <optional>key <replaceable>key</replaceable></optional> ) ; <optional>...</optional> }; </optional>
- <optional> max-ixfr-log-size <replaceable>number</replaceable> ; </optional>
- <optional> max-transfer-idle-in <replaceable>number</replaceable> ; </optional>
- <optional> max-transfer-idle-out <replaceable>number</replaceable> ; </optional>
- <optional> max-transfer-time-in <replaceable>number</replaceable> ; </optional>
- <optional> max-transfer-time-out <replaceable>number</replaceable> ; </optional>
- <optional> notify <replaceable>yes_or_no</replaceable> | <replaceable>explicit</replaceable> | <replaceable>master-only</replaceable> ; </optional>
- <optional> notify-delay <replaceable>seconds</replaceable> ; </optional>
- <optional> notify-to-soa <replaceable>yes_or_no</replaceable>; </optional>
- <optional> pubkey <replaceable>number</replaceable> <replaceable>number</replaceable> <replaceable>number</replaceable> <replaceable>string</replaceable> ; </optional>
- <optional> transfer-source (<replaceable>ip4_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> transfer-source-v6 (<replaceable>ip6_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> alt-transfer-source (<replaceable>ip4_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> alt-transfer-source-v6 (<replaceable>ip6_addr</replaceable> | <constant>*</constant>)
- <optional>port <replaceable>ip_port</replaceable></optional>
- <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> use-alt-transfer-source <replaceable>yes_or_no</replaceable>; </optional>
- <optional> notify-source (<replaceable>ip4_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> notify-source-v6 (<replaceable>ip6_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> zone-statistics <replaceable>full</replaceable> | <replaceable>terse</replaceable> | <replaceable>none</replaceable>; </optional>
- <optional> sig-validity-interval <replaceable>number</replaceable> <optional><replaceable>number</replaceable></optional> ; </optional>
- <optional> sig-signing-nodes <replaceable>number</replaceable> ; </optional>
- <optional> sig-signing-signatures <replaceable>number</replaceable> ; </optional>
- <optional> sig-signing-type <replaceable>number</replaceable> ; </optional>
- <optional> database <replaceable>string</replaceable> ; </optional>
- <optional> min-refresh-time <replaceable>number</replaceable> ; </optional>
- <optional> max-refresh-time <replaceable>number</replaceable> ; </optional>
- <optional> min-retry-time <replaceable>number</replaceable> ; </optional>
- <optional> max-retry-time <replaceable>number</replaceable> ; </optional>
- <optional> key-directory <replaceable>path_name</replaceable>; </optional>
- <optional> auto-dnssec <constant>allow</constant>|<constant>maintain</constant>|<constant>off</constant>; </optional>
- <optional> inline-signing <replaceable>yes_or_no</replaceable>; </optional>
- <optional> multi-master <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> zero-no-soa-ttl <replaceable>yes_or_no</replaceable> ; </optional>
-};
-
-zone <replaceable>zone_name</replaceable> <optional><replaceable>class</replaceable></optional> {
- type hint;
- file <replaceable>string</replaceable> ;
- <optional> delegation-only <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> check-names (<constant>warn</constant>|<constant>fail</constant>|<constant>ignore</constant>) ; </optional> // Not Implemented.
-};
-
-zone <replaceable>zone_name</replaceable> <optional><replaceable>class</replaceable></optional> {
- type stub;
- <optional> allow-query { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> allow-query-on { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> check-names (<constant>warn</constant>|<constant>fail</constant>|<constant>ignore</constant>) ; </optional>
- <optional> dialup <replaceable>dialup_option</replaceable> ; </optional>
- <optional> delegation-only <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> file <replaceable>string</replaceable> ; </optional>
- <optional> masterfile-format (<constant>text</constant>|<constant>raw</constant>|<constant>map</constant>) ; </optional>
- <optional> forward (<constant>only</constant>|<constant>first</constant>) ; </optional>
- <optional> forwarders { <optional> <replaceable>ip_addr</replaceable> <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; ... </optional> }; </optional>
- <optional> masters <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> { ( <replaceable>masters_list</replaceable> | <replaceable>ip_addr</replaceable>
- <optional>port <replaceable>ip_port</replaceable></optional>
- <optional>dscp <replaceable>ip_dscp</replaceable></optional>
- <optional>key <replaceable>key</replaceable></optional> ) ; <optional>...</optional> }; </optional>
- <optional> max-transfer-idle-in <replaceable>number</replaceable> ; </optional>
- <optional> max-transfer-time-in <replaceable>number</replaceable> ; </optional>
- <optional> pubkey <replaceable>number</replaceable> <replaceable>number</replaceable> <replaceable>number</replaceable> <replaceable>string</replaceable> ; </optional>
- <optional> transfer-source (<replaceable>ip4_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> transfer-source-v6 (<replaceable>ip6_addr</replaceable> | <constant>*</constant>)
- <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> alt-transfer-source (<replaceable>ip4_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> alt-transfer-source-v6 (<replaceable>ip6_addr</replaceable> | <constant>*</constant>)
- <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; </optional>
- <optional> use-alt-transfer-source <replaceable>yes_or_no</replaceable>; </optional>
- <optional> zone-statistics <replaceable>full</replaceable> | <replaceable>terse</replaceable> | <replaceable>none</replaceable>; </optional>
- <optional> database <replaceable>string</replaceable> ; </optional>
- <optional> min-refresh-time <replaceable>number</replaceable> ; </optional>
- <optional> max-refresh-time <replaceable>number</replaceable> ; </optional>
- <optional> min-retry-time <replaceable>number</replaceable> ; </optional>
- <optional> max-retry-time <replaceable>number</replaceable> ; </optional>
- <optional> multi-master <replaceable>yes_or_no</replaceable> ; </optional>
-};
-
-zone <replaceable>zone_name</replaceable> <optional><replaceable>class</replaceable></optional> {
- type static-stub;
- <optional> allow-query { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> server-addresses { <optional> <replaceable>ip_addr</replaceable> ; ... </optional> }; </optional>
- <optional> server-names { <optional> <replaceable>namelist</replaceable> </optional> }; </optional>
- <optional> zone-statistics <replaceable>full</replaceable> | <replaceable>terse</replaceable> | <replaceable>none</replaceable>; </optional>
-};
-
-zone <replaceable>zone_name</replaceable> <optional><replaceable>class</replaceable></optional> {
- type forward;
- <optional> forward (<constant>only</constant>|<constant>first</constant>) ; </optional>
- <optional> forwarders { <optional> <replaceable>ip_addr</replaceable> <optional>port <replaceable>ip_port</replaceable></optional> <optional>dscp <replaceable>ip_dscp</replaceable></optional> ; ... </optional> }; </optional>
- <optional> delegation-only <replaceable>yes_or_no</replaceable> ; </optional>
-};
-
-zone <replaceable>"."</replaceable> <optional><replaceable>class</replaceable></optional> {
- type redirect;
- file <replaceable>string</replaceable> ;
- <optional> masterfile-format (<constant>text</constant>|<constant>raw</constant>|<constant>map</constant>) ; </optional>
- <optional> allow-query { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> max-zone-ttl <replaceable>number</replaceable> ; </optional>
-};
-
-zone <replaceable>zone_name</replaceable> <optional><replaceable>class</replaceable></optional> {
- type delegation-only;
-};
-
-zone <replaceable>zone_name</replaceable> <optional><replaceable>class</replaceable></optional> {
- <optional> in-view <replaceable>string</replaceable> ; </optional>
-};
-
-</programlisting>
-
- </section>
- <section xml:id="zone_statement"><info><title><command>zone</command> Statement Definition and Usage</title></info>
-
- <section xml:id="zone_types"><info><title>Zone Types</title></info>
- <para>
- The <command>type</command> keyword is required
- for the <command>zone</command> configuration unless
- it is an <command>in-view</command> configuration. Its
- acceptable values include: <varname>delegation-only</varname>,
- <varname>forward</varname>, <varname>hint</varname>,
- <varname>master</varname>, <varname>redirect</varname>,
- <varname>slave</varname>, <varname>static-stub</varname>,
- and <varname>stub</varname>.
- </para>
-
- <informaltable colsep="0" rowsep="0">
- <tgroup cols="2" colsep="0" rowsep="0" tgroupstyle="3Level-table">
- <!--colspec colname="1" colnum="1" colsep="0" colwidth="1.108in"/-->
- <!--colspec colname="2" colnum="2" colsep="0" colwidth="4.017in"/-->
- <colspec colname="1" colnum="1" colsep="0"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="4.017in"/>
- <tbody>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>master</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- The server has a master copy of the data
- for the zone and will be able to provide authoritative
- answers for
- it.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>slave</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- A slave zone is a replica of a master
- zone. The <command>masters</command> list
- specifies one or more IP addresses
- of master servers that the slave contacts to update
- its copy of the zone.
- Masters list elements can also be names of other
- masters lists.
- By default, transfers are made from port 53 on the
- servers; this can
- be changed for all servers by specifying a port number
- before the
- list of IP addresses, or on a per-server basis after
- the IP address.
- Authentication to the master can also be done with
- per-server TSIG keys.
- If a file is specified, then the
- replica will be written to this file whenever the zone
- is changed,
- and reloaded from this file on a server restart. Use
- of a file is
- recommended, since it often speeds server startup and
- eliminates
- a needless waste of bandwidth. Note that for large
- numbers (in the
- tens or hundreds of thousands) of zones per server, it
- is best to
- use a two-level naming scheme for zone filenames. For
- example,
- a slave server for the zone <literal>example.com</literal> might place
- the zone contents into a file called
- <filename>ex/example.com</filename> where <filename>ex/</filename> is
- just the first two letters of the zone name. (Most
- operating systems
- behave very slowly if you put 100000 files into
- a single directory.)
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>stub</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- A stub zone is similar to a slave zone,
- except that it replicates only the NS records of a
- master zone instead
- of the entire zone. Stub zones are not a standard part
- of the DNS;
- they are a feature specific to the <acronym>BIND</acronym> implementation.
- </para>
-
- <para>
- Stub zones can be used to eliminate the need for glue
- NS record
- in a parent zone at the expense of maintaining a stub
- zone entry and
- a set of name server addresses in <filename>named.conf</filename>.
- This usage is not recommended for new configurations,
- and BIND 9
- supports it only in a limited way.
- In <acronym>BIND</acronym> 4/8, zone
- transfers of a parent zone
- included the NS records from stub children of that
- zone. This meant
- that, in some cases, users could get away with
- configuring child stubs
- only in the master server for the parent zone. <acronym>BIND</acronym>
- 9 never mixes together zone data from different zones
- in this
- way. Therefore, if a <acronym>BIND</acronym> 9 master serving a parent
- zone has child stub zones configured, all the slave
- servers for the
- parent zone also need to have the same child stub
- zones
- configured.
- </para>
-
- <para>
- Stub zones can also be used as a way of forcing the
- resolution
- of a given domain to use a particular set of
- authoritative servers.
- For example, the caching name servers on a private
- network using
- RFC1918 addressing may be configured with stub zones
- for
- <literal>10.in-addr.arpa</literal>
- to use a set of internal name servers as the
- authoritative
- servers for that domain.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>static-stub</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- A static-stub zone is similar to a stub zone
- with the following exceptions:
- the zone data is statically configured, rather
- than transferred from a master server;
- when recursion is necessary for a query that
- matches a static-stub zone, the locally
- configured data (nameserver names and glue addresses)
- is always used even if different authoritative
- information is cached.
- </para>
- <para>
- Zone data is configured via the
- <command>server-addresses</command> and
- <command>server-names</command> zone options.
- </para>
- <para>
- The zone data is maintained in the form of NS
- and (if necessary) glue A or AAAA RRs
- internally, which can be seen by dumping zone
- databases by <command>rndc dumpdb -all</command>.
- The configured RRs are considered local configuration
- parameters rather than public data.
- Non recursive queries (i.e., those with the RD
- bit off) to a static-stub zone are therefore
- prohibited and will be responded with REFUSED.
- </para>
- <para>
- Since the data is statically configured, no
- zone maintenance action takes place for a static-stub
- zone.
- For example, there is no periodic refresh
- attempt, and an incoming notify message
- will be rejected with an rcode of NOTAUTH.
- </para>
- <para>
- Each static-stub zone is configured with
- internally generated NS and (if necessary)
- glue A or AAAA RRs
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>forward</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- A "forward zone" is a way to configure
- forwarding on a per-domain basis. A <command>zone</command> statement
- of type <command>forward</command> can
- contain a <command>forward</command>
- and/or <command>forwarders</command>
- statement,
- which will apply to queries within the domain given by
- the zone
- name. If no <command>forwarders</command>
- statement is present or
- an empty list for <command>forwarders</command> is given, then no
- forwarding will be done for the domain, canceling the
- effects of
- any forwarders in the <command>options</command> statement. Thus
- if you want to use this type of zone to change the
- behavior of the
- global <command>forward</command> option
- (that is, "forward first"
- to, then "forward only", or vice versa, but want to
- use the same
- servers as set globally) you need to re-specify the
- global forwarders.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>hint</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- The initial set of root name servers is
- specified using a "hint zone". When the server starts
- up, it uses
- the root hints to find a root name server and get the
- most recent
- list of root name servers. If no hint zone is
- specified for class
- IN, the server uses a compiled-in default set of root
- servers hints.
- Classes other than IN have no built-in defaults hints.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>redirect</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- Redirect zones are used to provide answers to
- queries when normal resolution would result in
- NXDOMAIN being returned.
- Only one redirect zone is supported
- per view. <command>allow-query</command> can be
- used to restrict which clients see these answers.
- </para>
- <para>
- If the client has requested DNSSEC records (DO=1) and
- the NXDOMAIN response is signed then no substitution
- will occur.
- </para>
- <para>
- To redirect all NXDOMAIN responses to
- 100.100.100.2 and
- 2001:ffff:ffff::100.100.100.2, one would
- configure a type redirect zone named ".",
- with the zone file containing wildcard records
- that point to the desired addresses:
- <literal>"*. IN A 100.100.100.2"</literal>
- and
- <literal>"*. IN AAAA 2001:ffff:ffff::100.100.100.2"</literal>.
- </para>
- <para>
- To redirect all Spanish names (under .ES) one
- would use similar entries but with the names
- "*.ES." instead of "*.". To redirect all
- commercial Spanish names (under COM.ES) one
- would use wildcard entries called "*.COM.ES.".
- </para>
- <para>
- Note that the redirect zone supports all
- possible types; it is not limited to A and
- AAAA records.
- </para>
- <para>
- Because redirect zones are not referenced
- directly by name, they are not kept in the
- zone lookup table with normal master and slave
- zones. Consequently, it is not currently possible
- to use
- <command>rndc reload
- <replaceable>zonename</replaceable></command>
- to reload a redirect zone. However, when using
- <command>rndc reload</command> without specifying
- a zone name, redirect zones will be reloaded along
- with other zones.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>delegation-only</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- This is used to enforce the delegation-only
- status of infrastructure zones (e.g. COM,
- NET, ORG). Any answer that is received
- without an explicit or implicit delegation
- in the authority section will be treated
- as NXDOMAIN. This does not apply to the
- zone apex. This should not be applied to
- leaf zones.
- </para>
- <para>
- <varname>delegation-only</varname> has no
- effect on answers received from forwarders.
- </para>
- <para>
- See caveats in <xref linkend="root_delegation_only"/>.
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </section>
-
- <section xml:id="class"><info><title>Class</title></info>
-
- <para>
- The zone's name may optionally be followed by a class. If
- a class is not specified, class <literal>IN</literal> (for <varname>Internet</varname>),
- is assumed. This is correct for the vast majority of cases.
- </para>
- <para>
- The <literal>hesiod</literal> class is
- named for an information service from MIT's Project Athena. It
- is
- used to share information about various systems databases, such
- as users, groups, printers and so on. The keyword
- <literal>HS</literal> is
- a synonym for hesiod.
- </para>
- <para>
- Another MIT development is Chaosnet, a LAN protocol created
- in the mid-1970s. Zone data for it can be specified with the <literal>CHAOS</literal> class.
- </para>
- </section>
-
- <section xml:id="zone_options"><info><title>Zone Options</title></info>
-
- <variablelist>
-
- <varlistentry>
- <term><command>allow-notify</command></term>
- <listitem>
- <para>
- See the description of
- <command>allow-notify</command> in <xref linkend="access_control"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>allow-query</command></term>
- <listitem>
- <para>
- See the description of
- <command>allow-query</command> in <xref linkend="access_control"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>allow-query-on</command></term>
- <listitem>
- <para>
- See the description of
- <command>allow-query-on</command> in <xref linkend="access_control"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>allow-transfer</command></term>
- <listitem>
- <para>
- See the description of <command>allow-transfer</command>
- in <xref linkend="access_control"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>allow-update</command></term>
- <listitem>
- <para>
- See the description of <command>allow-update</command>
- in <xref linkend="access_control"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>update-policy</command></term>
- <listitem>
- <para>
- Specifies a "Simple Secure Update" policy. See
- <xref linkend="dynamic_update_policies"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>allow-update-forwarding</command></term>
- <listitem>
- <para>
- See the description of <command>allow-update-forwarding</command>
- in <xref linkend="access_control"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>also-notify</command></term>
- <listitem>
- <para>
- Only meaningful if <command>notify</command>
- is
- active for this zone. The set of machines that will
- receive a
- <literal>DNS NOTIFY</literal> message
- for this zone is made up of all the listed name servers
- (other than
- the primary master) for the zone plus any IP addresses
- specified
- with <command>also-notify</command>. A port
- may be specified
- with each <command>also-notify</command>
- address to send the notify
- messages to a port other than the default of 53.
- A TSIG key may also be specified to cause the
- <literal>NOTIFY</literal> to be signed by the
- given key.
- <command>also-notify</command> is not
- meaningful for stub zones.
- The default is the empty list.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>check-names</command></term>
- <listitem>
- <para>
- This option is used to restrict the character set and
- syntax of
- certain domain names in master files and/or DNS responses
- received from the
- network. The default varies according to zone type. For <command>master</command> zones the default is <command>fail</command>. For <command>slave</command>
- zones the default is <command>warn</command>.
- It is not implemented for <command>hint</command> zones.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>check-mx</command></term>
- <listitem>
- <para>
- See the description of
- <command>check-mx</command> in <xref linkend="boolean_options"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>check-spf</command></term>
- <listitem>
- <para>
- See the description of
- <command>check-spf</command> in <xref linkend="boolean_options"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>check-wildcard</command></term>
- <listitem>
- <para>
- See the description of
- <command>check-wildcard</command> in <xref linkend="boolean_options"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>check-integrity</command></term>
- <listitem>
- <para>
- See the description of
- <command>check-integrity</command> in <xref linkend="boolean_options"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>check-sibling</command></term>
- <listitem>
- <para>
- See the description of
- <command>check-sibling</command> in <xref linkend="boolean_options"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>zero-no-soa-ttl</command></term>
- <listitem>
- <para>
- See the description of
- <command>zero-no-soa-ttl</command> in <xref linkend="boolean_options"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>update-check-ksk</command></term>
- <listitem>
- <para>
- See the description of
- <command>update-check-ksk</command> in <xref linkend="boolean_options"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>dnssec-loadkeys-interval</command></term>
- <listitem>
- <para>
- See the description of
- <command>dnssec-loadkeys-interval</command> in <xref linkend="options"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>dnssec-update-mode</command></term>
- <listitem>
- <para>
- See the description of
- <command>dnssec-update-mode</command> in <xref linkend="options"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>dnssec-dnskey-kskonly</command></term>
- <listitem>
- <para>
- See the description of
- <command>dnssec-dnskey-kskonly</command> in <xref linkend="boolean_options"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>try-tcp-refresh</command></term>
- <listitem>
- <para>
- See the description of
- <command>try-tcp-refresh</command> in <xref linkend="boolean_options"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>database</command></term>
- <listitem>
- <para>
- Specify the type of database to be used for storing the
- zone data. The string following the <command>database</command> keyword
- is interpreted as a list of whitespace-delimited words.
- The first word
- identifies the database type, and any subsequent words are
- passed
- as arguments to the database to be interpreted in a way
- specific
- to the database type.
- </para>
- <para>
- The default is <userinput>"rbt"</userinput>, BIND 9's
- native in-memory
- red-black-tree database. This database does not take
- arguments.
- </para>
- <para>
- Other values are possible if additional database drivers
- have been linked into the server. Some sample drivers are
- included
- with the distribution but none are linked in by default.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>dialup</command></term>
- <listitem>
- <para>
- See the description of
- <command>dialup</command> in <xref linkend="boolean_options"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>delegation-only</command></term>
- <listitem>
- <para>
- The flag only applies to forward, hint and stub
- zones. If set to <userinput>yes</userinput>,
- then the zone will also be treated as if it is
- also a delegation-only type zone.
- </para>
- <para>
- See caveats in <xref linkend="root_delegation_only"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>forward</command></term>
- <listitem>
- <para>
- Only meaningful if the zone has a forwarders
- list. The <command>only</command> value causes
- the lookup to fail
- after trying the forwarders and getting no answer, while <command>first</command> would
- allow a normal lookup to be tried.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>forwarders</command></term>
- <listitem>
- <para>
- Used to override the list of global forwarders.
- If it is not specified in a zone of type <command>forward</command>,
- no forwarding is done for the zone and the global options are
- not used.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>ixfr-base</command></term>
- <listitem>
- <para>
- Was used in <acronym>BIND</acronym> 8 to
- specify the name
- of the transaction log (journal) file for dynamic update
- and IXFR.
- <acronym>BIND</acronym> 9 ignores the option
- and constructs the name of the journal
- file by appending "<filename>.jnl</filename>"
- to the name of the
- zone file.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>ixfr-tmp-file</command></term>
- <listitem>
- <para>
- Was an undocumented option in <acronym>BIND</acronym> 8.
- Ignored in <acronym>BIND</acronym> 9.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>journal</command></term>
- <listitem>
- <para>
- Allow the default journal's filename to be overridden.
- The default is the zone's filename with "<filename>.jnl</filename>" appended.
- This is applicable to <command>master</command> and <command>slave</command> zones.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>max-journal-size</command></term>
- <listitem>
- <para>
- See the description of
- <command>max-journal-size</command> in <xref linkend="server_resource_limits"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>max-transfer-time-in</command></term>
- <listitem>
- <para>
- See the description of
- <command>max-transfer-time-in</command> in <xref linkend="zone_transfers"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>max-transfer-idle-in</command></term>
- <listitem>
- <para>
- See the description of
- <command>max-transfer-idle-in</command> in <xref linkend="zone_transfers"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>max-transfer-time-out</command></term>
- <listitem>
- <para>
- See the description of
- <command>max-transfer-time-out</command> in <xref linkend="zone_transfers"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>max-transfer-idle-out</command></term>
- <listitem>
- <para>
- See the description of
- <command>max-transfer-idle-out</command> in <xref linkend="zone_transfers"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>notify</command></term>
- <listitem>
- <para>
- See the description of
- <command>notify</command> in <xref linkend="boolean_options"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>notify-delay</command></term>
- <listitem>
- <para>
- See the description of
- <command>notify-delay</command> in <xref linkend="tuning"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>notify-to-soa</command></term>
- <listitem>
- <para>
- See the description of
- <command>notify-to-soa</command> in
- <xref linkend="boolean_options"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>pubkey</command></term>
- <listitem>
- <para>
- In <acronym>BIND</acronym> 8, this option was
- intended for specifying
- a public zone key for verification of signatures in DNSSEC
- signed
- zones when they are loaded from disk. <acronym>BIND</acronym> 9 does not verify signatures
- on load and ignores the option.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>zone-statistics</command></term>
- <listitem>
- <para>
- See the description of
- <command>zone-statistics</command> in
- <xref linkend="options"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>server-addresses</command></term>
- <listitem>
- <para>
- Only meaningful for static-stub zones.
- This is a list of IP addresses to which queries
- should be sent in recursive resolution for the
- zone.
- A non empty list for this option will internally
- configure the apex NS RR with associated glue A or
- AAAA RRs.
- </para>
- <para>
- For example, if "example.com" is configured as a
- static-stub zone with 192.0.2.1 and 2001:db8::1234
- in a <command>server-addresses</command> option,
- the following RRs will be internally configured.
- </para>
-<programlisting>example.com. NS example.com.
-example.com. A 192.0.2.1
-example.com. AAAA 2001:db8::1234</programlisting>
- <para>
- These records are internally used to resolve
- names under the static-stub zone.
- For instance, if the server receives a query for
- "www.example.com" with the RD bit on, the server
- will initiate recursive resolution and send
- queries to 192.0.2.1 and/or 2001:db8::1234.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>server-names</command></term>
- <listitem>
- <para>
- Only meaningful for static-stub zones.
- This is a list of domain names of nameservers that
- act as authoritative servers of the static-stub
- zone.
- These names will be resolved to IP addresses when
- <command>named</command> needs to send queries to
- these servers.
- To make this supplemental resolution successful,
- these names must not be a subdomain of the origin
- name of static-stub zone.
- That is, when "example.net" is the origin of a
- static-stub zone, "ns.example" and
- "master.example.com" can be specified in the
- <command>server-names</command> option, but
- "ns.example.net" cannot, and will be rejected by
- the configuration parser.
- </para>
- <para>
- A non empty list for this option will internally
- configure the apex NS RR with the specified names.
- For example, if "example.com" is configured as a
- static-stub zone with "ns1.example.net" and
- "ns2.example.net"
- in a <command>server-names</command> option,
- the following RRs will be internally configured.
- </para>
-<programlisting>example.com. NS ns1.example.net.
-example.com. NS ns2.example.net.
-</programlisting>
- <para>
- These records are internally used to resolve
- names under the static-stub zone.
- For instance, if the server receives a query for
- "www.example.com" with the RD bit on, the server
- initiate recursive resolution,
- resolve "ns1.example.net" and/or
- "ns2.example.net" to IP addresses, and then send
- queries to (one or more of) these addresses.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>sig-validity-interval</command></term>
- <listitem>
- <para>
- See the description of
- <command>sig-validity-interval</command> in <xref linkend="tuning"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>sig-signing-nodes</command></term>
- <listitem>
- <para>
- See the description of
- <command>sig-signing-nodes</command> in <xref linkend="tuning"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>sig-signing-signatures</command></term>
- <listitem>
- <para>
- See the description of
- <command>sig-signing-signatures</command> in <xref linkend="tuning"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>sig-signing-type</command></term>
- <listitem>
- <para>
- See the description of
- <command>sig-signing-type</command> in <xref linkend="tuning"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>transfer-source</command></term>
- <listitem>
- <para>
- See the description of
- <command>transfer-source</command> in <xref linkend="zone_transfers"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>transfer-source-v6</command></term>
- <listitem>
- <para>
- See the description of
- <command>transfer-source-v6</command> in <xref linkend="zone_transfers"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>alt-transfer-source</command></term>
- <listitem>
- <para>
- See the description of
- <command>alt-transfer-source</command> in <xref linkend="zone_transfers"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>alt-transfer-source-v6</command></term>
- <listitem>
- <para>
- See the description of
- <command>alt-transfer-source-v6</command> in <xref linkend="zone_transfers"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>use-alt-transfer-source</command></term>
- <listitem>
- <para>
- See the description of
- <command>use-alt-transfer-source</command> in <xref linkend="zone_transfers"/>.
- </para>
- </listitem>
- </varlistentry>
-
-
- <varlistentry>
- <term><command>notify-source</command></term>
- <listitem>
- <para>
- See the description of
- <command>notify-source</command> in <xref linkend="zone_transfers"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>notify-source-v6</command></term>
- <listitem>
- <para>
- See the description of
- <command>notify-source-v6</command> in <xref linkend="zone_transfers"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>min-refresh-time</command></term>
- <term><command>max-refresh-time</command></term>
- <term><command>min-retry-time</command></term>
- <term><command>max-retry-time</command></term>
- <listitem>
- <para>
- See the description in <xref linkend="tuning"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>ixfr-from-differences</command></term>
- <listitem>
- <para>
- See the description of
- <command>ixfr-from-differences</command> in <xref linkend="boolean_options"/>.
- (Note that the <command>ixfr-from-differences</command>
- <userinput>master</userinput> and
- <userinput>slave</userinput> choices are not
- available at the zone level.)
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>key-directory</command></term>
- <listitem>
- <para>
- See the description of
- <command>key-directory</command> in <xref linkend="options"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>auto-dnssec</command></term>
- <listitem>
- <para>
- See the description of
- <command>auto-dnssec</command> in
- <xref linkend="options"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>serial-update-method</command></term>
- <listitem>
- <para>
- See the description of
- <command>serial-update-method</command> in
- <xref linkend="options"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>inline-signing</command></term>
- <listitem>
- <para>
- If <literal>yes</literal>, this enables
- "bump in the wire" signing of a zone, where a
- unsigned zone is transferred in or loaded from
- disk and a signed version of the zone is served,
- with possibly, a different serial number. This
- behavior is disabled by default.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>multi-master</command></term>
- <listitem>
- <para>
- See the description of <command>multi-master</command> in
- <xref linkend="boolean_options"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>masterfile-format</command></term>
- <listitem>
- <para>
- See the description of <command>masterfile-format</command>
- in <xref linkend="tuning"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>max-zone-ttl</command></term>
- <listitem>
- <para>
- See the description of <command>max-zone-ttl</command>
- in <xref linkend="options"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>dnssec-secure-to-insecure</command></term>
- <listitem>
- <para>
- See the description of
- <command>dnssec-secure-to-insecure</command> in <xref linkend="boolean_options"/>.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
-
- </section>
- <section xml:id="dynamic_update_policies"><info><title>Dynamic Update Policies</title></info>
-
- <para><acronym>BIND</acronym> 9 supports two alternative
- methods of granting clients the right to perform
- dynamic updates to a zone, configured by the
- <command>allow-update</command> and
- <command>update-policy</command> option, respectively.
- </para>
- <para>
- The <command>allow-update</command> clause works the
- same way as in previous versions of <acronym>BIND</acronym>.
- It grants given clients the permission to update any
- record of any name in the zone.
- </para>
- <para>
- The <command>update-policy</command> clause
- allows more fine-grained control over what updates are
- allowed. A set of rules is specified, where each rule
- either grants or denies permissions for one or more
- names to be updated by one or more identities. If
- the dynamic update request message is signed (that is,
- it includes either a TSIG or SIG(0) record), the
- identity of the signer can be determined.
- </para>
- <para>
- Rules are specified in the <command>update-policy</command>
- zone option, and are only meaningful for master zones.
- When the <command>update-policy</command> statement
- is present, it is a configuration error for the
- <command>allow-update</command> statement to be
- present. The <command>update-policy</command> statement
- only examines the signer of a message; the source
- address is not relevant.
- </para>
- <para>
- There is a pre-defined <command>update-policy</command>
- rule which can be switched on with the command
- <command>update-policy local;</command>.
- Switching on this rule in a zone causes
- <command>named</command> to generate a TSIG session
- key and place it in a file, and to allow that key
- to update the zone. (By default, the file is
- <filename>/var/run/named/session.key</filename>, the key
- name is "local-ddns" and the key algorithm is HMAC-SHA256,
- but these values are configurable with the
- <command>session-keyfile</command>,
- <command>session-keyname</command> and
- <command>session-keyalg</command> options, respectively).
- </para>
- <para>
- A client running on the local system, and with appropriate
- permissions, may read that file and use the key to sign update
- requests. The zone's update policy will be set to allow that
- key to change any record within the zone. Assuming the
- key name is "local-ddns", this policy is equivalent to:
- </para>
-
- <programlisting>update-policy { grant local-ddns zonesub any; };
- </programlisting>
-
- <para>
- The command <command>nsupdate -l</command> sends update
- requests to localhost, and signs them using the session key.
- </para>
-
- <para>
- Other rule definitions look like this:
- </para>
-
-<programlisting>
-( <command>grant</command> | <command>deny</command> ) <replaceable>identity</replaceable> <replaceable>nametype</replaceable> <optional> <replaceable>name</replaceable> </optional> <optional> <replaceable>types</replaceable> </optional>
-</programlisting>
-
- <para>
- Each rule grants or denies privileges. Once a message has
- successfully matched a rule, the operation is immediately
- granted or denied and no further rules are examined. A rule
- is matched when the signer matches the identity field, the
- name matches the name field in accordance with the nametype
- field, and the type matches the types specified in the type
- field.
- </para>
- <para>
- No signer is required for <replaceable>tcp-self</replaceable>
- or <replaceable>6to4-self</replaceable> however the standard
- reverse mapping / prefix conversion must match the identity
- field.
- </para>
- <para>
- The identity field specifies a name or a wildcard
- name. Normally, this is the name of the TSIG or
- SIG(0) key used to sign the update request. When a
- TKEY exchange has been used to create a shared secret,
- the identity of the shared secret is the same as the
- identity of the key used to authenticate the TKEY
- exchange. TKEY is also the negotiation method used
- by GSS-TSIG, which establishes an identity that is
- the Kerberos principal of the client, such as
- <userinput>"user@host.domain"</userinput>. When the
- <replaceable>identity</replaceable> field specifies
- a wildcard name, it is subject to DNS wildcard
- expansion, so the rule will apply to multiple identities.
- The <replaceable>identity</replaceable> field must
- contain a fully-qualified domain name.
- </para>
- <para>
- For nametypes <varname>krb5-self</varname>,
- <varname>ms-self</varname>, <varname>krb5-subdomain</varname>,
- and <varname>ms-subdomain</varname> the
- <replaceable>identity</replaceable> field specifies
- the Windows or Kerberos realm of the machine belongs to.
- </para>
- <para>
- The <replaceable>nametype</replaceable> field has 13
- values:
- <varname>name</varname>, <varname>subdomain</varname>,
- <varname>wildcard</varname>, <varname>self</varname>,
- <varname>selfsub</varname>, <varname>selfwild</varname>,
- <varname>krb5-self</varname>, <varname>ms-self</varname>,
- <varname>krb5-subdomain</varname>,
- <varname>ms-subdomain</varname>,
- <varname>tcp-self</varname>, <varname>6to4-self</varname>,
- <varname>zonesub</varname>, and <varname>external</varname>.
- </para>
- <informaltable>
- <tgroup cols="2" colsep="0" rowsep="0" tgroupstyle="4Level-table">
- <colspec colname="1" colnum="1" colsep="0" colwidth="0.819in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="3.681in"/>
- <tbody>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>name</varname>
- </para>
- </entry> <entry colname="2">
- <para>
- Exact-match semantics. This rule matches
- when the name being updated is identical
- to the contents of the
- <replaceable>name</replaceable> field.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>subdomain</varname>
- </para>
- </entry> <entry colname="2">
- <para>
- This rule matches when the name being updated
- is a subdomain of, or identical to, the
- contents of the <replaceable>name</replaceable>
- field.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>zonesub</varname>
- </para>
- </entry> <entry colname="2">
- <para>
- This rule is similar to subdomain, except that
- it matches when the name being updated is a
- subdomain of the zone in which the
- <command>update-policy</command> statement
- appears. This obviates the need to type the zone
- name twice, and enables the use of a standard
- <command>update-policy</command> statement in
- multiple zones without modification.
- </para>
- <para>
- When this rule is used, the
- <replaceable>name</replaceable> field is omitted.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>wildcard</varname>
- </para>
- </entry> <entry colname="2">
- <para>
- The <replaceable>name</replaceable> field
- is subject to DNS wildcard expansion, and
- this rule matches when the name being updated
- is a valid expansion of the wildcard.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>self</varname>
- </para>
- </entry>
- <entry colname="2">
- <para>
- This rule matches when the name being updated
- matches the contents of the
- <replaceable>identity</replaceable> field.
- The <replaceable>name</replaceable> field
- is ignored, but should be the same as the
- <replaceable>identity</replaceable> field.
- The <varname>self</varname> nametype is
- most useful when allowing using one key per
- name to update, where the key has the same
- name as the name to be updated. The
- <replaceable>identity</replaceable> would
- be specified as <constant>*</constant> (an asterisk) in
- this case.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>selfsub</varname>
- </para>
- </entry> <entry colname="2">
- <para>
- This rule is similar to <varname>self</varname>
- except that subdomains of <varname>self</varname>
- can also be updated.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>selfwild</varname>
- </para>
- </entry> <entry colname="2">
- <para>
- This rule is similar to <varname>self</varname>
- except that only subdomains of
- <varname>self</varname> can be updated.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>ms-self</varname>
- </para>
- </entry> <entry colname="2">
- <para>
- This rule takes a Windows machine principal
- (machine$@REALM) for machine in REALM and
- and converts it machine.realm allowing the machine
- to update machine.realm. The REALM to be matched
- is specified in the <replaceable>identity</replaceable>
- field.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>ms-subdomain</varname>
- </para>
- </entry> <entry colname="2">
- <para>
- This rule takes a Windows machine principal
- (machine$@REALM) for machine in REALM and
- converts it to machine.realm allowing the machine
- to update subdomains of machine.realm. The REALM
- to be matched is specified in the
- <replaceable>identity</replaceable> field.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>krb5-self</varname>
- </para>
- </entry> <entry colname="2">
- <para>
- This rule takes a Kerberos machine principal
- (host/machine@REALM) for machine in REALM and
- and converts it machine.realm allowing the machine
- to update machine.realm. The REALM to be matched
- is specified in the <replaceable>identity</replaceable>
- field.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>krb5-subdomain</varname>
- </para>
- </entry> <entry colname="2">
- <para>
- This rule takes a Kerberos machine principal
- (host/machine@REALM) for machine in REALM and
- converts it to machine.realm allowing the machine
- to update subdomains of machine.realm. The REALM
- to be matched is specified in the
- <replaceable>identity</replaceable> field.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>tcp-self</varname>
- </para>
- </entry> <entry colname="2">
- <para>
- Allow updates that have been sent via TCP and
- for which the standard mapping from the initiating
- IP address into the IN-ADDR.ARPA and IP6.ARPA
- namespaces match the name to be updated.
- </para>
- <note>
- It is theoretically possible to spoof these TCP
- sessions.
- </note>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>6to4-self</varname>
- </para>
- </entry> <entry colname="2">
- <para>
- Allow the 6to4 prefix to be update by any TCP
- connection from the 6to4 network or from the
- corresponding IPv4 address. This is intended
- to allow NS or DNAME RRsets to be added to the
- reverse tree.
- </para>
- <note>
- It is theoretically possible to spoof these TCP
- sessions.
- </note>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <varname>external</varname>
- </para>
- </entry> <entry colname="2">
- <para>
- This rule allows <command>named</command>
- to defer the decision of whether to allow a
- given update to an external daemon.
- </para>
- <para>
- The method of communicating with the daemon is
- specified in the <replaceable>identity</replaceable>
- field, the format of which is
- "<constant>local:</constant><replaceable>path</replaceable>",
- where <replaceable>path</replaceable> is the location
- of a UNIX-domain socket. (Currently, "local" is the
- only supported mechanism.)
- </para>
- <para>
- Requests to the external daemon are sent over the
- UNIX-domain socket as datagrams with the following
- format:
- </para>
- <programlisting>
- Protocol version number (4 bytes, network byte order, currently 1)
- Request length (4 bytes, network byte order)
- Signer (null-terminated string)
- Name (null-terminated string)
- TCP source address (null-terminated string)
- Rdata type (null-terminated string)
- Key (null-terminated string)
- TKEY token length (4 bytes, network byte order)
- TKEY token (remainder of packet)</programlisting>
- <para>
- The daemon replies with a four-byte value in
- network byte order, containing either 0 or 1; 0
- indicates that the specified update is not
- permitted, and 1 indicates that it is.
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>
- In all cases, the <replaceable>name</replaceable>
- field must specify a fully-qualified domain name.
- </para>
-
- <para>
- If no types are explicitly specified, this rule matches
- all types except RRSIG, NS, SOA, NSEC and NSEC3. Types
- may be specified by name, including "ANY" (ANY matches
- all types except NSEC and NSEC3, which can never be
- updated). Note that when an attempt is made to delete
- all records associated with a name, the rules are
- checked for each existing record type.
- </para>
- </section>
-
- <section xml:id="multiple_views"><info><title>Multiple views</title></info>
-
- <para>
- When multiple views are in use, a zone may be
- referenced by more than one of them. Often, the views
- will contain different zones with the same name, allowing
- different clients to receive different answers for the same
- queries. At times, however, it is desirable for multiple
- views to contain identical zones. The
- <command>in-view</command> zone option provides an efficient
- way to do this: it allows a view to reference a zone that
- was defined in a previously configured view. Example:
- </para>
- <programlisting>
-view internal {
- match-clients { 10/8; };
-
- zone example.com {
- type master;
- file "example-external.db";
- };
-};
-
-view external {
- match-clients { any; };
-
- zone example.com {
- in-view internal;
- };
-};
- </programlisting>
- <para>
- An <command>in-view</command> option cannot refer to a view
- that is configured later in the configuration file.
- </para>
- <para>
- A <command>zone</command> statement which uses the
- <command>in-view</command> option may not use any other
- options with the exception of <command>forward</command>
- and <command>forwarders</command>. (These options control
- the behavior of the containing view, rather than changing
- the zone object itself.)
- </para>
- <para>
- Zone level acls (e.g. allow-query, allow-transfer) and
- other configuration details of the zone are all set
- in the view the referenced zone is defined in. Care
- need to be taken to ensure that acls are wide enough
- for all views referencing the zone.
- </para>
- <para>
- An <command>in-view</command> zone cannot be used as a
- response policy zone.
- </para>
- <para>
- An <command>in-view</command> zone is not intended to reference
- a <command>forward</command> zone.
- </para>
- </section>
-
- </section>
- </section>
- <section xml:id="zone_file"><info><title>Zone File</title></info>
-
- <section xml:id="types_of_resource_records_and_when_to_use_them"><info><title>Types of Resource Records and When to Use Them</title></info>
-
- <para>
- This section, largely borrowed from RFC 1034, describes the
- concept of a Resource Record (RR) and explains when each is used.
- Since the publication of RFC 1034, several new RRs have been
- identified
- and implemented in the DNS. These are also included.
- </para>
- <section><info><title>Resource Records</title></info>
-
- <para>
- A domain name identifies a node. Each node has a set of
- resource information, which may be empty. The set of resource
- information associated with a particular name is composed of
- separate RRs. The order of RRs in a set is not significant and
- need not be preserved by name servers, resolvers, or other
- parts of the DNS. However, sorting of multiple RRs is
- permitted for optimization purposes, for example, to specify
- that a particular nearby server be tried first. See <xref linkend="the_sortlist_statement"/> and <xref linkend="rrset_ordering"/>.
- </para>
-
- <para>
- The components of a Resource Record are:
- </para>
- <informaltable colsep="0" rowsep="0">
- <tgroup cols="2" colsep="0" rowsep="0" tgroupstyle="4Level-table">
- <colspec colname="1" colnum="1" colsep="0" colwidth="1.000in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="3.500in"/>
- <tbody>
- <row rowsep="0">
- <entry colname="1">
- <para>
- owner name
- </para>
- </entry>
- <entry colname="2">
- <para>
- The domain name where the RR is found.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- type
- </para>
- </entry>
- <entry colname="2">
- <para>
- An encoded 16-bit value that specifies
- the type of the resource record.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- TTL
- </para>
- </entry>
- <entry colname="2">
- <para>
- The time-to-live of the RR. This field
- is a 32-bit integer in units of seconds, and is
- primarily used by
- resolvers when they cache RRs. The TTL describes how
- long a RR can
- be cached before it should be discarded.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- class
- </para>
- </entry>
- <entry colname="2">
- <para>
- An encoded 16-bit value that identifies
- a protocol family or instance of a protocol.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- RDATA
- </para>
- </entry>
- <entry colname="2">
- <para>
- The resource data. The format of the
- data is type (and sometimes class) specific.
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- <para>
- The following are <emphasis>types</emphasis> of valid RRs:
- </para>
- <informaltable colsep="0" rowsep="0">
- <tgroup cols="2" colsep="0" rowsep="0" tgroupstyle="4Level-table">
- <colspec colname="1" colnum="1" colsep="0" colwidth="0.875in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="3.625in"/>
- <tbody>
- <row rowsep="0">
- <entry colname="1">
- <para>
- A
- </para>
- </entry>
- <entry colname="2">
- <para>
- A host address. In the IN class, this is a
- 32-bit IP address. Described in RFC 1035.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- AAAA
- </para>
- </entry>
- <entry colname="2">
- <para>
- IPv6 address. Described in RFC 1886.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- A6
- </para>
- </entry>
- <entry colname="2">
- <para>
- IPv6 address. This can be a partial
- address (a suffix) and an indirection to the name
- where the rest of the
- address (the prefix) can be found. Experimental.
- Described in RFC 2874.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- AFSDB
- </para>
- </entry>
- <entry colname="2">
- <para>
- Location of AFS database servers.
- Experimental. Described in RFC 1183.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- APL
- </para>
- </entry>
- <entry colname="2">
- <para>
- Address prefix list. Experimental.
- Described in RFC 3123.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- ATMA
- </para>
- </entry>
- <entry colname="2">
- <para>
- ATM Address.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- AVC
- </para>
- </entry>
- <entry colname="2">
- <para>
- Application Visibility and Control record.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- CAA
- </para>
- </entry>
- <entry colname="2">
- <para>
- Identifies which Certificate Authorities can issue
- certificates for this domain and what rules they
- need to follow when doing so. Defined in RFC 6844.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- CDNSKEY
- </para>
- </entry>
- <entry colname="2">
- <para>
- Identifies which DNSKEY records should be published
- as DS records in the parent zone.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- CDS
- </para>
- </entry>
- <entry colname="2">
- <para>
- Contains the set of DS records that should be published
- by the parent zone.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- CERT
- </para>
- </entry>
- <entry colname="2">
- <para>
- Holds a digital certificate.
- Described in RFC 2538.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- CNAME
- </para>
- </entry>
- <entry colname="2">
- <para>
- Identifies the canonical name of an alias.
- Described in RFC 1035.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- CSYNC
- </para>
- </entry>
- <entry colname="2">
- <para>
- Child-to-Parent Synchronization in DNS as described
- in RFC 7477.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- DHCID
- </para>
- </entry>
- <entry colname="2">
- <para>
- Is used for identifying which DHCP client is
- associated with this name. Described in RFC 4701.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- DLV
- </para>
- </entry>
- <entry colname="2">
- <para>
- A DNS Look-aside Validation record which contains
- the records that are used as trust anchors for
- zones in a DLV namespace. Described in RFC 4431.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- DNAME
- </para>
- </entry>
- <entry colname="2">
- <para>
- Replaces the domain name specified with
- another name to be looked up, effectively aliasing an
- entire
- subtree of the domain name space rather than a single
- record
- as in the case of the CNAME RR.
- Described in RFC 2672.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- DNSKEY
- </para>
- </entry>
- <entry colname="2">
- <para>
- Stores a public key associated with a signed
- DNS zone. Described in RFC 4034.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- DS
- </para>
- </entry>
- <entry colname="2">
- <para>
- Stores the hash of a public key associated with a
- signed DNS zone. Described in RFC 4034.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- EID
- </para>
- </entry>
- <entry colname="2">
- <para>
- End Point Identifier.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- EUI48
- </para>
- </entry>
- <entry colname="2">
- <para>
- A 48-bit EUI address. Described in RFC 7043.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- EUI64
- </para>
- </entry>
- <entry colname="2">
- <para>
- A 64-bit EUI address. Described in RFC 7043.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- GID
- </para>
- </entry>
- <entry colname="2">
- <para>
- Reserved.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- GPOS
- </para>
- </entry>
- <entry colname="2">
- <para>
- Specifies the global position. Superseded by LOC.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- HINFO
- </para>
- </entry>
- <entry colname="2">
- <para>
- Identifies the CPU and OS used by a host.
- Described in RFC 1035.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- HIP
- </para>
- </entry>
- <entry colname="2">
- <para>
- Host Identity Protocol Address.
- Described in RFC 5205.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- IPSECKEY
- </para>
- </entry>
- <entry colname="2">
- <para>
- Provides a method for storing IPsec keying material in
- DNS. Described in RFC 4025.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- ISDN
- </para>
- </entry>
- <entry colname="2">
- <para>
- Representation of ISDN addresses.
- Experimental. Described in RFC 1183.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- KEY
- </para>
- </entry>
- <entry colname="2">
- <para>
- Stores a public key associated with a
- DNS name. Used in original DNSSEC; replaced
- by DNSKEY in DNSSECbis, but still used with
- SIG(0). Described in RFCs 2535 and 2931.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- KX
- </para>
- </entry>
- <entry colname="2">
- <para>
- Identifies a key exchanger for this
- DNS name. Described in RFC 2230.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- L32
- </para>
- </entry>
- <entry colname="2">
- <para>
- Holds 32-bit Locator values for
- Identifier-Locator Network Protocol. Described
- in RFC 6742.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- L64
- </para>
- </entry>
- <entry colname="2">
- <para>
- Holds 64-bit Locator values for
- Identifier-Locator Network Protocol. Described
- in RFC 6742.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- LOC
- </para>
- </entry>
- <entry colname="2">
- <para>
- For storing GPS info. Described in RFC 1876.
- Experimental.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- LP
- </para>
- </entry>
- <entry colname="2">
- <para>
- Identifier-Locator Network Protocol.
- Described in RFC 6742.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- MB
- </para>
- </entry>
- <entry colname="2">
- <para>
- Mail Box. Historical.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- MD
- </para>
- </entry>
- <entry colname="2">
- <para>
- Mail Destination. Historical.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- MF
- </para>
- </entry>
- <entry colname="2">
- <para>
- Mail Forwarder. Historical.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- MG
- </para>
- </entry>
- <entry colname="2">
- <para>
- Mail Group. Historical.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- MINFO
- </para>
- </entry>
- <entry colname="2">
- <para>
- Mail Information.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- MR
- </para>
- </entry>
- <entry colname="2">
- <para>
- Mail Rename. Historical.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- MX
- </para>
- </entry>
- <entry colname="2">
- <para>
- Identifies a mail exchange for the domain with
- a 16-bit preference value (lower is better)
- followed by the host name of the mail exchange.
- Described in RFC 974, RFC 1035.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- NAPTR
- </para>
- </entry>
- <entry colname="2">
- <para>
- Name authority pointer. Described in RFC 2915.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- NID
- </para>
- </entry>
- <entry colname="2">
- <para>
- Holds values for Node Identifiers in
- Identifier-Locator Network Protocol. Described
- in RFC 6742.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- NINFO
- </para>
- </entry>
- <entry colname="2">
- <para>
- Contains zone status information.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- NIMLOC
- </para>
- </entry>
- <entry colname="2">
- <para>
- Nimrod Locator.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- NSAP
- </para>
- </entry>
- <entry colname="2">
- <para>
- A network service access point.
- Described in RFC 1706.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- NSAP-PTR
- </para>
- </entry>
- <entry colname="2">
- <para>
- Historical.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- NS
- </para>
- </entry>
- <entry colname="2">
- <para>
- The authoritative name server for the
- domain. Described in RFC 1035.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- NSEC
- </para>
- </entry>
- <entry colname="2">
- <para>
- Used in DNSSECbis to securely indicate that
- RRs with an owner name in a certain name interval do
- not exist in
- a zone and indicate what RR types are present for an
- existing name.
- Described in RFC 4034.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- NSEC3
- </para>
- </entry>
- <entry colname="2">
- <para>
- Used in DNSSECbis to securely indicate that
- RRs with an owner name in a certain name
- interval do not exist in a zone and indicate
- what RR types are present for an existing
- name. NSEC3 differs from NSEC in that it
- prevents zone enumeration but is more
- computationally expensive on both the server
- and the client than NSEC. Described in RFC
- 5155.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- NSEC3PARAM
- </para>
- </entry>
- <entry colname="2">
- <para>
- Used in DNSSECbis to tell the authoritative
- server which NSEC3 chains are available to use.
- Described in RFC 5155.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- NULL
- </para>
- </entry>
- <entry colname="2">
- <para>
- This is an opaque container.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- NXT
- </para>
- </entry>
- <entry colname="2">
- <para>
- Used in DNSSEC to securely indicate that
- RRs with an owner name in a certain name interval do
- not exist in
- a zone and indicate what RR types are present for an
- existing name.
- Used in original DNSSEC; replaced by NSEC in
- DNSSECbis.
- Described in RFC 2535.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- OPENPGPKEY
- </para>
- </entry>
- <entry colname="2">
- <para>
- Used to hold an OPENPGPKEY.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- PTR
- </para>
- </entry>
- <entry colname="2">
- <para>
- A pointer to another part of the domain
- name space. Described in RFC 1035.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- PX
- </para>
- </entry>
- <entry colname="2">
- <para>
- Provides mappings between RFC 822 and X.400
- addresses. Described in RFC 2163.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- RKEY
- </para>
- </entry>
- <entry colname="2">
- <para>
- Resource key.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- RP
- </para>
- </entry>
- <entry colname="2">
- <para>
- Information on persons responsible
- for the domain. Experimental. Described in RFC 1183.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- RRSIG
- </para>
- </entry>
- <entry colname="2">
- <para>
- Contains DNSSECbis signature data. Described
- in RFC 4034.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- RT
- </para>
- </entry>
- <entry colname="2">
- <para>
- Route-through binding for hosts that
- do not have their own direct wide area network
- addresses.
- Experimental. Described in RFC 1183.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- SIG
- </para>
- </entry>
- <entry colname="2">
- <para>
- Contains DNSSEC signature data. Used in
- original DNSSEC; replaced by RRSIG in
- DNSSECbis, but still used for SIG(0).
- Described in RFCs 2535 and 2931.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- SINK
- </para>
- </entry>
- <entry colname="2">
- <para>
- The kitchen sink record.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- SMIMEA
- </para>
- </entry>
- <entry colname="2">
- <para>
- The S/MIME Security Certificate Association.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- SOA
- </para>
- </entry>
- <entry colname="2">
- <para>
- Identifies the start of a zone of authority.
- Described in RFC 1035.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- SPF
- </para>
- </entry>
- <entry colname="2">
- <para>
- Contains the Sender Policy Framework information
- for a given email domain. Described in RFC 4408.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- SRV
- </para>
- </entry>
- <entry colname="2">
- <para>
- Information about well known network
- services (replaces WKS). Described in RFC 2782.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- SSHFP
- </para>
- </entry>
- <entry colname="2">
- <para>
- Provides a way to securely publish a secure shell key's
- fingerprint. Described in RFC 4255.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- TA
- </para>
- </entry>
- <entry colname="2">
- <para>
- Trust Anchor. Experimental.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- TALINK
- </para>
- </entry>
- <entry colname="2">
- <para>
- Trust Anchor Link. Experimental.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- TLSA
- </para>
- </entry>
- <entry colname="2">
- <para>
- Transport Layer Security Certificate Association.
- Described in RFC 6698.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- TXT
- </para>
- </entry>
- <entry colname="2">
- <para>
- Text records. Described in RFC 1035.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- UID
- </para>
- </entry>
- <entry colname="2">
- <para>
- Reserved.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- UINFO
- </para>
- </entry>
- <entry colname="2">
- <para>
- Reserved.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- UNSPEC
- </para>
- </entry>
- <entry colname="2">
- <para>
- Reserved. Historical.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- URI
- </para>
- </entry>
- <entry colname="2">
- <para>
- Holds a URI. Described in RFC 7553.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- WKS
- </para>
- </entry>
- <entry colname="2">
- <para>
- Information about which well known
- network services, such as SMTP, that a domain
- supports. Historical.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- X25
- </para>
- </entry>
- <entry colname="2">
- <para>
- Representation of X.25 network addresses.
- Experimental. Described in RFC 1183.
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- <para>
- The following <emphasis>classes</emphasis> of resource records
- are currently valid in the DNS:
- </para>
- <informaltable colsep="0" rowsep="0"><tgroup cols="2" colsep="0" rowsep="0" tgroupstyle="4Level-table">
- <colspec colname="1" colnum="1" colsep="0" colwidth="0.875in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="3.625in"/>
- <tbody>
-
- <row rowsep="0">
- <entry colname="1">
- <para>
- IN
- </para>
- </entry>
- <entry colname="2">
- <para>
- The Internet.
- </para>
- </entry>
- </row>
-
- <row rowsep="0">
- <entry colname="1">
- <para>
- CH
- </para>
- </entry>
- <entry colname="2">
- <para>
- Chaosnet, a LAN protocol created at MIT in the
- mid-1970s.
- Rarely used for its historical purpose, but reused for
- BIND's
- built-in server information zones, e.g.,
- <literal>version.bind</literal>.
- </para>
- </entry>
- </row>
-
- <row rowsep="0">
- <entry colname="1">
- <para>
- HS
- </para>
- </entry>
- <entry colname="2">
- <para>
- Hesiod, an information service
- developed by MIT's Project Athena. It is used to share
- information
- about various systems databases, such as users,
- groups, printers
- and so on.
- </para>
- </entry>
- </row>
-
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>
- The owner name is often implicit, rather than forming an
- integral
- part of the RR. For example, many name servers internally form
- tree
- or hash structures for the name space, and chain RRs off nodes.
- The remaining RR parts are the fixed header (type, class, TTL)
- which is consistent for all RRs, and a variable part (RDATA)
- that
- fits the needs of the resource being described.
- </para>
- <para>
- The meaning of the TTL field is a time limit on how long an
- RR can be kept in a cache. This limit does not apply to
- authoritative
- data in zones; it is also timed out, but by the refreshing
- policies
- for the zone. The TTL is assigned by the administrator for the
- zone where the data originates. While short TTLs can be used to
- minimize caching, and a zero TTL prohibits caching, the
- realities
- of Internet performance suggest that these times should be on
- the
- order of days for the typical host. If a change can be
- anticipated,
- the TTL can be reduced prior to the change to minimize
- inconsistency
- during the change, and then increased back to its former value
- following
- the change.
- </para>
- <para>
- The data in the RDATA section of RRs is carried as a combination
- of binary strings and domain names. The domain names are
- frequently
- used as "pointers" to other data in the DNS.
- </para>
- </section>
- <section xml:id="rr_text"><info><title>Textual expression of RRs</title></info>
-
- <para>
- RRs are represented in binary form in the packets of the DNS
- protocol, and are usually represented in highly encoded form
- when
- stored in a name server or resolver. In the examples provided
- in
- RFC 1034, a style similar to that used in master files was
- employed
- in order to show the contents of RRs. In this format, most RRs
- are shown on a single line, although continuation lines are
- possible
- using parentheses.
- </para>
- <para>
- The start of the line gives the owner of the RR. If a line
- begins with a blank, then the owner is assumed to be the same as
- that of the previous RR. Blank lines are often included for
- readability.
- </para>
- <para>
- Following the owner, we list the TTL, type, and class of the
- RR. Class and type use the mnemonics defined above, and TTL is
- an integer before the type field. In order to avoid ambiguity
- in
- parsing, type and class mnemonics are disjoint, TTLs are
- integers,
- and the type mnemonic is always last. The IN class and TTL
- values
- are often omitted from examples in the interests of clarity.
- </para>
- <para>
- The resource data or RDATA section of the RR are given using
- knowledge of the typical representation for the data.
- </para>
- <para>
- For example, we might show the RRs carried in a message as:
- </para>
- <informaltable colsep="0" rowsep="0"><tgroup cols="3" colsep="0" rowsep="0" tgroupstyle="4Level-table">
- <colspec colname="1" colnum="1" colsep="0" colwidth="1.381in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="1.020in"/>
- <colspec colname="3" colnum="3" colsep="0" colwidth="2.099in"/>
- <tbody>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <literal>ISI.EDU.</literal>
- </para>
- </entry>
- <entry colname="2">
- <para>
- <literal>MX</literal>
- </para>
- </entry>
- <entry colname="3">
- <para>
- <literal>10 VENERA.ISI.EDU.</literal>
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para/>
- </entry>
- <entry colname="2">
- <para>
- <literal>MX</literal>
- </para>
- </entry>
- <entry colname="3">
- <para>
- <literal>10 VAXA.ISI.EDU</literal>
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <literal>VENERA.ISI.EDU</literal>
- </para>
- </entry>
- <entry colname="2">
- <para>
- <literal>A</literal>
- </para>
- </entry>
- <entry colname="3">
- <para>
- <literal>128.9.0.32</literal>
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para/>
- </entry>
- <entry colname="2">
- <para>
- <literal>A</literal>
- </para>
- </entry>
- <entry colname="3">
- <para>
- <literal>10.1.0.52</literal>
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <literal>VAXA.ISI.EDU</literal>
- </para>
- </entry>
- <entry colname="2">
- <para>
- <literal>A</literal>
- </para>
- </entry>
- <entry colname="3">
- <para>
- <literal>10.2.0.27</literal>
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para/>
- </entry>
- <entry colname="2">
- <para>
- <literal>A</literal>
- </para>
- </entry>
- <entry colname="3">
- <para>
- <literal>128.9.0.33</literal>
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- <para>
- The MX RRs have an RDATA section which consists of a 16-bit
- number followed by a domain name. The address RRs use a
- standard
- IP address format to contain a 32-bit internet address.
- </para>
- <para>
- The above example shows six RRs, with two RRs at each of three
- domain names.
- </para>
- <para>
- Similarly we might see:
- </para>
- <informaltable colsep="0" rowsep="0"><tgroup cols="3" colsep="0" rowsep="0" tgroupstyle="4Level-table">
- <colspec colname="1" colnum="1" colsep="0" colwidth="1.491in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="1.067in"/>
- <colspec colname="3" colnum="3" colsep="0" colwidth="2.067in"/>
- <tbody>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <literal>XX.LCS.MIT.EDU.</literal>
- </para>
- </entry>
- <entry colname="2">
- <para>
- <literal>IN A</literal>
- </para>
- </entry>
- <entry colname="3">
- <para>
- <literal>10.0.0.44</literal>
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1"/>
- <entry colname="2">
- <para>
- <literal>CH A</literal>
- </para>
- </entry>
- <entry colname="3">
- <para>
- <literal>MIT.EDU. 2420</literal>
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- <para>
- This example shows two addresses for
- <literal>XX.LCS.MIT.EDU</literal>, each of a different class.
- </para>
- </section>
- </section>
-
- <section xml:id="mx_records"><info><title>Discussion of MX Records</title></info>
-
- <para>
- As described above, domain servers store information as a
- series of resource records, each of which contains a particular
- piece of information about a given domain name (which is usually,
- but not always, a host). The simplest way to think of a RR is as
- a typed pair of data, a domain name matched with a relevant datum,
- and stored with some additional type information to help systems
- determine when the RR is relevant.
- </para>
-
- <para>
- MX records are used to control delivery of email. The data
- specified in the record is a priority and a domain name. The
- priority
- controls the order in which email delivery is attempted, with the
- lowest number first. If two priorities are the same, a server is
- chosen randomly. If no servers at a given priority are responding,
- the mail transport agent will fall back to the next largest
- priority.
- Priority numbers do not have any absolute meaning — they are
- relevant
- only respective to other MX records for that domain name. The
- domain
- name given is the machine to which the mail will be delivered.
- It <emphasis>must</emphasis> have an associated address record
- (A or AAAA) — CNAME is not sufficient.
- </para>
- <para>
- For a given domain, if there is both a CNAME record and an
- MX record, the MX record is in error, and will be ignored.
- Instead,
- the mail will be delivered to the server specified in the MX
- record
- pointed to by the CNAME.
- For example:
- </para>
- <informaltable colsep="0" rowsep="0">
- <tgroup cols="5" colsep="0" rowsep="0" tgroupstyle="3Level-table">
- <colspec colname="1" colnum="1" colsep="0" colwidth="1.708in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="0.444in"/>
- <colspec colname="3" colnum="3" colsep="0" colwidth="0.444in"/>
- <colspec colname="4" colnum="4" colsep="0" colwidth="0.976in"/>
- <colspec colname="5" colnum="5" colsep="0" colwidth="1.553in"/>
- <tbody>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <literal>example.com.</literal>
- </para>
- </entry>
- <entry colname="2">
- <para>
- <literal>IN</literal>
- </para>
- </entry>
- <entry colname="3">
- <para>
- <literal>MX</literal>
- </para>
- </entry>
- <entry colname="4">
- <para>
- <literal>10</literal>
- </para>
- </entry>
- <entry colname="5">
- <para>
- <literal>mail.example.com.</literal>
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para/>
- </entry>
- <entry colname="2">
- <para>
- <literal>IN</literal>
- </para>
- </entry>
- <entry colname="3">
- <para>
- <literal>MX</literal>
- </para>
- </entry>
- <entry colname="4">
- <para>
- <literal>10</literal>
- </para>
- </entry>
- <entry colname="5">
- <para>
- <literal>mail2.example.com.</literal>
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para/>
- </entry>
- <entry colname="2">
- <para>
- <literal>IN</literal>
- </para>
- </entry>
- <entry colname="3">
- <para>
- <literal>MX</literal>
- </para>
- </entry>
- <entry colname="4">
- <para>
- <literal>20</literal>
- </para>
- </entry>
- <entry colname="5">
- <para>
- <literal>mail.backup.org.</literal>
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <literal>mail.example.com.</literal>
- </para>
- </entry>
- <entry colname="2">
- <para>
- <literal>IN</literal>
- </para>
- </entry>
- <entry colname="3">
- <para>
- <literal>A</literal>
- </para>
- </entry>
- <entry colname="4">
- <para>
- <literal>10.0.0.1</literal>
- </para>
- </entry>
- <entry colname="5">
- <para/>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <literal>mail2.example.com.</literal>
- </para>
- </entry>
- <entry colname="2">
- <para>
- <literal>IN</literal>
- </para>
- </entry>
- <entry colname="3">
- <para>
- <literal>A</literal>
- </para>
- </entry>
- <entry colname="4">
- <para>
- <literal>10.0.0.2</literal>
- </para>
- </entry>
- <entry colname="5">
- <para/>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable><para>
- Mail delivery will be attempted to <literal>mail.example.com</literal> and
- <literal>mail2.example.com</literal> (in
- any order), and if neither of those succeed, delivery to <literal>mail.backup.org</literal> will
- be attempted.
- </para>
- </section>
- <section xml:id="Setting_TTLs"><info><title>Setting TTLs</title></info>
-
- <para>
- The time-to-live of the RR field is a 32-bit integer represented
- in units of seconds, and is primarily used by resolvers when they
- cache RRs. The TTL describes how long a RR can be cached before it
- should be discarded. The following three types of TTL are
- currently
- used in a zone file.
- </para>
- <informaltable colsep="0" rowsep="0">
- <tgroup cols="2" colsep="0" rowsep="0" tgroupstyle="3Level-table">
- <colspec colname="1" colnum="1" colsep="0" colwidth="0.750in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="4.375in"/>
- <tbody>
- <row rowsep="0">
- <entry colname="1">
- <para>
- SOA
- </para>
- </entry>
- <entry colname="2">
- <para>
- The last field in the SOA is the negative
- caching TTL. This controls how long other servers will
- cache no-such-domain
- (NXDOMAIN) responses from you.
- </para>
- <para>
- The maximum time for
- negative caching is 3 hours (3h).
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- $TTL
- </para>
- </entry>
- <entry colname="2">
- <para>
- The $TTL directive at the top of the
- zone file (before the SOA) gives a default TTL for every
- RR without
- a specific TTL set.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- RR TTLs
- </para>
- </entry>
- <entry colname="2">
- <para>
- Each RR can have a TTL as the second
- field in the RR, which will control how long other
- servers can cache it.
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- <para>
- All of these TTLs default to units of seconds, though units
- can be explicitly specified, for example, <literal>1h30m</literal>.
- </para>
- </section>
- <section xml:id="ipv4_reverse"><info><title>Inverse Mapping in IPv4</title></info>
-
- <para>
- Reverse name resolution (that is, translation from IP address
- to name) is achieved by means of the <emphasis>in-addr.arpa</emphasis> domain
- and PTR records. Entries in the in-addr.arpa domain are made in
- least-to-most significant order, read left to right. This is the
- opposite order to the way IP addresses are usually written. Thus,
- a machine with an IP address of 10.1.2.3 would have a
- corresponding
- in-addr.arpa name of
- 3.2.1.10.in-addr.arpa. This name should have a PTR resource record
- whose data field is the name of the machine or, optionally,
- multiple
- PTR records if the machine has more than one name. For example,
- in the <optional>example.com</optional> domain:
- </para>
- <informaltable colsep="0" rowsep="0">
- <tgroup cols="2" colsep="0" rowsep="0" tgroupstyle="3Level-table">
- <colspec colname="1" colnum="1" colsep="0" colwidth="1.125in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="4.000in"/>
- <tbody>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <literal>$ORIGIN</literal>
- </para>
- </entry>
- <entry colname="2">
- <para>
- <literal>2.1.10.in-addr.arpa</literal>
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para>
- <literal>3</literal>
- </para>
- </entry>
- <entry colname="2">
- <para>
- <literal>IN PTR foo.example.com.</literal>
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- <note>
- <para>
- The <command>$ORIGIN</command> lines in the examples
- are for providing context to the examples only — they do not
- necessarily
- appear in the actual usage. They are only used here to indicate
- that the example is relative to the listed origin.
- </para>
- </note>
- </section>
- <section xml:id="zone_directives"><info><title>Other Zone File Directives</title></info>
-
- <para>
- The Master File Format was initially defined in RFC 1035 and
- has subsequently been extended. While the Master File Format
- itself
- is class independent all records in a Master File must be of the
- same
- class.
- </para>
- <para>
- Master File Directives include <command>$ORIGIN</command>, <command>$INCLUDE</command>,
- and <command>$TTL.</command>
- </para>
- <section xml:id="atsign"><info><title>The <command>@</command> (at-sign)</title></info>
-
- <para>
- When used in the label (or name) field, the asperand or
- at-sign (@) symbol represents the current origin.
- At the start of the zone file, it is the
- &lt;<varname>zone_name</varname>&gt; (followed by
- trailing dot).
- </para>
- </section>
- <section xml:id="origin_directive"><info><title>The <command>$ORIGIN</command> Directive</title></info>
-
- <para>
- Syntax: <command>$ORIGIN</command>
- <replaceable>domain-name</replaceable>
- <optional><replaceable>comment</replaceable></optional>
- </para>
- <para><command>$ORIGIN</command>
- sets the domain name that will be appended to any
- unqualified records. When a zone is first read in there
- is an implicit <command>$ORIGIN</command>
- &lt;<varname>zone_name</varname>&gt;<command>.</command>
- (followed by trailing dot).
- The current <command>$ORIGIN</command> is appended to
- the domain specified in the <command>$ORIGIN</command>
- argument if it is not absolute.
- </para>
-
-<programlisting>
-$ORIGIN example.com.
-WWW CNAME MAIN-SERVER
-</programlisting>
-
- <para>
- is equivalent to
- </para>
-
-<programlisting>
-WWW.EXAMPLE.COM. CNAME MAIN-SERVER.EXAMPLE.COM.
-</programlisting>
-
- </section>
- <section xml:id="include_directive"><info><title>The <command>$INCLUDE</command> Directive</title></info>
-
- <para>
- Syntax: <command>$INCLUDE</command>
- <replaceable>filename</replaceable>
- <optional>
-<replaceable>origin</replaceable> </optional>
- <optional> <replaceable>comment</replaceable> </optional>
- </para>
- <para>
- Read and process the file <filename>filename</filename> as
- if it were included into the file at this point. If <command>origin</command> is
- specified the file is processed with <command>$ORIGIN</command> set
- to that value, otherwise the current <command>$ORIGIN</command> is
- used.
- </para>
- <para>
- The origin and the current domain name
- revert to the values they had prior to the <command>$INCLUDE</command> once
- the file has been read.
- </para>
- <note>
- <para>
- RFC 1035 specifies that the current origin should be restored
- after
- an <command>$INCLUDE</command>, but it is silent
- on whether the current
- domain name should also be restored. BIND 9 restores both of
- them.
- This could be construed as a deviation from RFC 1035, a
- feature, or both.
- </para>
- </note>
- </section>
- <section xml:id="ttl_directive"><info><title>The <command>$TTL</command> Directive</title></info>
-
- <para>
- Syntax: <command>$TTL</command>
- <replaceable>default-ttl</replaceable>
- <optional>
-<replaceable>comment</replaceable> </optional>
- </para>
- <para>
- Set the default Time To Live (TTL) for subsequent records
- with undefined TTLs. Valid TTLs are of the range 0-2147483647
- seconds.
- </para>
- <para><command>$TTL</command>
- is defined in RFC 2308.
- </para>
- </section>
- </section>
- <section xml:id="generate_directive"><info><title><acronym>BIND</acronym> Master File Extension: the <command>$GENERATE</command> Directive</title></info>
-
- <para>
- Syntax: <command>$GENERATE</command>
- <replaceable>range</replaceable>
- <replaceable>lhs</replaceable>
- <optional><replaceable>ttl</replaceable></optional>
- <optional><replaceable>class</replaceable></optional>
- <replaceable>type</replaceable>
- <replaceable>rhs</replaceable>
- <optional><replaceable>comment</replaceable></optional>
- </para>
- <para><command>$GENERATE</command>
- is used to create a series of resource records that only
- differ from each other by an
- iterator. <command>$GENERATE</command> can be used to
- easily generate the sets of records required to support
- sub /24 reverse delegations described in RFC 2317:
- Classless IN-ADDR.ARPA delegation.
- </para>
-
-<programlisting>$ORIGIN 0.0.192.IN-ADDR.ARPA.
-$GENERATE 1-2 @ NS SERVER$.EXAMPLE.
-$GENERATE 1-127 $ CNAME $.0</programlisting>
-
- <para>
- is equivalent to
- </para>
-
-<programlisting>0.0.0.192.IN-ADDR.ARPA. NS SERVER1.EXAMPLE.
-0.0.0.192.IN-ADDR.ARPA. NS SERVER2.EXAMPLE.
-1.0.0.192.IN-ADDR.ARPA. CNAME 1.0.0.0.192.IN-ADDR.ARPA.
-2.0.0.192.IN-ADDR.ARPA. CNAME 2.0.0.0.192.IN-ADDR.ARPA.
-...
-127.0.0.192.IN-ADDR.ARPA. CNAME 127.0.0.0.192.IN-ADDR.ARPA.
-</programlisting>
-
- <para>
- Generate a set of A and MX records. Note the MX's right hand
- side is a quoted string. The quotes will be stripped when the
- right hand side is processed.
- </para>
-
-<programlisting>
-$ORIGIN EXAMPLE.
-$GENERATE 1-127 HOST-$ A 1.2.3.$
-$GENERATE 1-127 HOST-$ MX "0 ."</programlisting>
-
- <para>
- is equivalent to
- </para>
-
-<programlisting>HOST-1.EXAMPLE. A 1.2.3.1
-HOST-1.EXAMPLE. MX 0 .
-HOST-2.EXAMPLE. A 1.2.3.2
-HOST-2.EXAMPLE. MX 0 .
-HOST-3.EXAMPLE. A 1.2.3.3
-HOST-3.EXAMPLE. MX 0 .
-...
-HOST-127.EXAMPLE. A 1.2.3.127
-HOST-127.EXAMPLE. MX 0 .
-</programlisting>
-
- <informaltable colsep="0" rowsep="0">
- <tgroup cols="2" colsep="0" rowsep="0" tgroupstyle="3Level-table">
- <colspec colname="1" colnum="1" colsep="0" colwidth="0.875in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="4.250in"/>
- <tbody>
- <row rowsep="0">
- <entry colname="1">
- <para><command>range</command></para>
- </entry>
- <entry colname="2">
- <para>
- This can be one of two forms: start-stop
- or start-stop/step. If the first form is used, then step
- is set to 1. start, stop and step must be positive
- integers between 0 and (2^31)-1. start must not be
- larger than stop.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>lhs</command></para>
- </entry>
- <entry colname="2">
- <para>This
- describes the owner name of the resource records
- to be created. Any single <command>$</command>
- (dollar sign)
- symbols within the <command>lhs</command> string
- are replaced by the iterator value.
-
- To get a $ in the output, you need to escape the
- <command>$</command> using a backslash
- <command>\</command>,
- e.g. <command>\$</command>. The
- <command>$</command> may optionally be followed
- by modifiers which change the offset from the
- iterator, field width and base.
-
- Modifiers are introduced by a
- <command>{</command> (left brace) immediately following the
- <command>$</command> as
- <command>${offset[,width[,base]]}</command>.
- For example, <command>${-20,3,d}</command>
- subtracts 20 from the current value, prints the
- result as a decimal in a zero-padded field of
- width 3.
-
- Available output forms are decimal
- (<command>d</command>), octal
- (<command>o</command>), hexadecimal
- (<command>x</command> or <command>X</command>
- for uppercase) and nibble
- (<command>n</command> or <command>N</command>\
- for uppercase). The default modifier is
- <command>${0,0,d}</command>. If the
- <command>lhs</command> is not absolute, the
- current <command>$ORIGIN</command> is appended
- to the name.
- </para>
- <para>
- In nibble mode the value will be treated as
- if it was a reversed hexadecimal string
- with each hexadecimal digit as a separate
- label. The width field includes the label
- separator.
- </para>
- <para>
- For compatibility with earlier versions,
- <command>$$</command> is still recognized as
- indicating a literal $ in the output.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>ttl</command></para>
- </entry>
- <entry colname="2">
- <para>
- Specifies the time-to-live of the generated records. If
- not specified this will be inherited using the
- normal TTL inheritance rules.
- </para>
- <para><command>class</command>
- and <command>ttl</command> can be
- entered in either order.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>class</command></para>
- </entry>
- <entry colname="2">
- <para>
- Specifies the class of the generated records.
- This must match the zone class if it is
- specified.
- </para>
- <para><command>class</command>
- and <command>ttl</command> can be
- entered in either order.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>type</command></para>
- </entry>
- <entry colname="2">
- <para>
- Any valid type.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>rhs</command></para>
- </entry>
- <entry colname="2">
- <para>
- <command>rhs</command>, optionally, quoted string.
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- <para>
- The <command>$GENERATE</command> directive is a <acronym>BIND</acronym> extension
- and not part of the standard zone file format.
- </para>
- <para>
- BIND 8 does not support the optional TTL and CLASS fields.
- </para>
- </section>
-
- <section xml:id="zonefile_format"><info><title>Additional File Formats</title></info>
-
- <para>
- In addition to the standard textual format, BIND 9
- supports the ability to read or dump to zone files in
- other formats.
- </para>
- <para>
- The <constant>raw</constant> format is
- a binary representation of zone data in a manner similar
- to that used in zone transfers. Since it does not require
- parsing text, load time is significantly reduced.
- </para>
- <para>
- An even faster alternative is the <constant>map</constant>
- format, which is an image of a <acronym>BIND</acronym> 9
- in-memory zone database; it is capable of being loaded
- directly into memory via the <command>mmap()</command>
- function; the zone can begin serving queries almost
- immediately.
- </para>
- <para>
- For a primary server, a zone file in
- <constant>raw</constant> or <constant>map</constant>
- format is expected to be generated from a textual zone
- file by the <command>named-compilezone</command> command.
- For a secondary server or for a dynamic zone, it is automatically
- generated (if this format is specified by the
- <command>masterfile-format</command> option) when
- <command>named</command> dumps the zone contents after
- zone transfer or when applying prior updates.
- </para>
- <para>
- If a zone file in a binary format needs manual modification,
- it first must be converted to a textual form by the
- <command>named-compilezone</command> command. All
- necessary modification should go to the text file, which
- should then be converted to the binary form by the
- <command>named-compilezone</command> command again.
- </para>
- <para>
- Note that <command>map</command> format is extremely
- architecture-specific. A <constant>map</constant>
- file <emphasis>cannot</emphasis> be used on a system
- with different pointer size, endianness or data alignment
- than the system on which it was generated, and should in
- general be used only inside a single system.
- While <constant>raw</constant> format uses
- network byte order and avoids architecture-dependent
- data alignment so that it is as portable as
- possible, it is also primarily expected to be used
- inside the same single system. To export a
- zone file in either <constant>raw</constant> or
- <constant>map</constant> format, or make a
- portable backup of such a file, conversion to
- <constant>text</constant> format is recommended.
- </para>
- </section>
- </section>
-
- <section xml:id="statistics"><info><title>BIND9 Statistics</title></info>
-
- <para>
- <acronym>BIND</acronym> 9 maintains lots of statistics
- information and provides several interfaces for users to
- get access to the statistics.
- The available statistics include all statistics counters
- that were available in <acronym>BIND</acronym> 8 and
- are meaningful in <acronym>BIND</acronym> 9,
- and other information that is considered useful.
- </para>
-
- <para>
- The statistics information is categorized into the following
- sections.
- </para>
-
- <informaltable frame="all">
- <tgroup cols="2">
- <colspec colname="1" colnum="1" colsep="0" colwidth="3.300in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="2.625in"/>
- <tbody>
-
- <row rowsep="0">
- <entry colname="1">
- <para>Incoming Requests</para>
- </entry>
- <entry colname="2">
- <para>
- The number of incoming DNS requests for each OPCODE.
- </para>
- </entry>
- </row>
-
- <row rowsep="0">
- <entry colname="1">
- <para>Incoming Queries</para>
- </entry>
- <entry colname="2">
- <para>
- The number of incoming queries for each RR type.
- </para>
- </entry>
- </row>
-
- <row rowsep="0">
- <entry colname="1">
- <para>Outgoing Queries</para>
- </entry>
- <entry colname="2">
- <para>
- The number of outgoing queries for each RR
- type sent from the internal resolver.
- Maintained per view.
- </para>
- </entry>
- </row>
-
- <row rowsep="0">
- <entry colname="1">
- <para>Name Server Statistics</para>
- </entry>
- <entry colname="2">
- <para>
- Statistics counters about incoming request processing.
- </para>
- </entry>
- </row>
-
- <row rowsep="0">
- <entry colname="1">
- <para>Zone Maintenance Statistics</para>
- </entry>
- <entry colname="2">
- <para>
- Statistics counters regarding zone maintenance
- operations such as zone transfers.
- </para>
- </entry>
- </row>
-
- <row rowsep="0">
- <entry colname="1">
- <para>Resolver Statistics</para>
- </entry>
- <entry colname="2">
- <para>
- Statistics counters about name resolution
- performed in the internal resolver.
- Maintained per view.
- </para>
- </entry>
- </row>
-
- <row rowsep="0">
- <entry colname="1">
- <para>Cache DB RRsets</para>
- </entry>
- <entry colname="2">
- <para>
- The number of RRsets per RR type and nonexistent
- names stored in the cache database.
- If the exclamation mark (!) is printed for a RR
- type, it means that particular type of RRset is
- known to be nonexistent (this is also known as
- "NXRRSET"). If a hash mark (#) is present then
- the RRset is marked for garbage collection.
- Maintained per view.
- </para>
- </entry>
- </row>
-
- <row rowsep="0">
- <entry colname="1">
- <para>Socket I/O Statistics</para>
- </entry>
- <entry colname="2">
- <para>
- Statistics counters about network related events.
- </para>
- </entry>
- </row>
-
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>
- A subset of Name Server Statistics is collected and shown
- per zone for which the server has the authority when
- <command>zone-statistics</command> is set to
- <userinput>full</userinput> (or <userinput>yes</userinput>
- for backward compatibility. See the description of
- <command>zone-statistics</command> in <xref linkend="options"/>
- for further details.
- </para>
-
- <para>
- These statistics counters are shown with their zone and
- view names. The view name is omitted when the server is
- not configured with explicit views.</para>
-
- <para>
- There are currently two user interfaces to get access to the
- statistics.
- One is in the plain text format dumped to the file specified
- by the <command>statistics-file</command> configuration option.
- The other is remotely accessible via a statistics channel
- when the <command>statistics-channels</command> statement
- is specified in the configuration file
- (see <xref linkend="statschannels"/>.)
- </para>
-
- <section xml:id="statsfile"><info><title>The Statistics File</title></info>
-
- <para>
- The text format statistics dump begins with a line, like:
- </para>
- <para>
- <command>+++ Statistics Dump +++ (973798949)</command>
- </para>
- <para>
- The number in parentheses is a standard
- Unix-style timestamp, measured as seconds since January 1, 1970.
-
- Following
- that line is a set of statistics information, which is categorized
- as described above.
- Each section begins with a line, like:
- </para>
-
- <para>
- <command>++ Name Server Statistics ++</command>
- </para>
-
- <para>
- Each section consists of lines, each containing the statistics
- counter value followed by its textual description.
- See below for available counters.
- For brevity, counters that have a value of 0 are not shown
- in the statistics file.
- </para>
-
- <para>
- The statistics dump ends with the line where the
- number is identical to the number in the beginning line; for example:
- </para>
- <para>
- <command>--- Statistics Dump --- (973798949)</command>
- </para>
- </section>
-
- <section xml:id="statistics_counters"><info><title>Statistics Counters</title></info>
-
- <para>
- The following tables summarize statistics counters that
- <acronym>BIND</acronym> 9 provides.
- For each row of the tables, the leftmost column is the
- abbreviated symbol name of that counter.
- These symbols are shown in the statistics information
- accessed via an HTTP statistics channel.
- The rightmost column gives the description of the counter,
- which is also shown in the statistics file
- (but, in this document, possibly with slight modification
- for better readability).
- Additional notes may also be provided in this column.
- When a middle column exists between these two columns,
- it gives the corresponding counter name of the
- <acronym>BIND</acronym> 8 statistics, if applicable.
- </para>
-
- <section xml:id="stats_counters"><info><title>Name Server Statistics Counters</title></info>
-
- <informaltable colsep="0" rowsep="0">
- <tgroup cols="3" colsep="0" rowsep="0" tgroupstyle="4Level-table">
- <colspec colname="1" colnum="1" colsep="0" colwidth="1.150in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="1.150in"/>
- <colspec colname="3" colnum="3" colsep="0" colwidth="3.350in"/>
- <tbody>
- <row>
- <entry colname="1">
- <para>
- <emphasis>Symbol</emphasis>
- </para>
- </entry>
- <entry colname="2">
- <para>
- <emphasis>BIND8 Symbol</emphasis>
- </para>
- </entry>
- <entry colname="3">
- <para>
- <emphasis>Description</emphasis>
- </para>
- </entry>
- </row>
-
- <row rowsep="0">
- <entry colname="1">
- <para><command>Requestv4</command></para>
- </entry>
- <entry colname="2">
- <para><command>RQ</command></para>
- </entry>
- <entry colname="3">
- <para>
- IPv4 requests received.
- Note: this also counts non query requests.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>Requestv6</command></para>
- </entry>
- <entry colname="2">
- <para><command>RQ</command></para>
- </entry>
- <entry colname="3">
- <para>
- IPv6 requests received.
- Note: this also counts non query requests.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>ReqEdns0</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Requests with EDNS(0) received.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>ReqBadEDNSVer</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Requests with unsupported EDNS version received.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>ReqTSIG</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Requests with TSIG received.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>ReqSIG0</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Requests with SIG(0) received.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>ReqBadSIG</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Requests with invalid (TSIG or SIG(0)) signature.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>ReqTCP</command></para>
- </entry>
- <entry colname="2">
- <para><command>RTCP</command></para>
- </entry>
- <entry colname="3">
- <para>
- TCP requests received.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>AuthQryRej</command></para>
- </entry>
- <entry colname="2">
- <para><command>RUQ</command></para>
- </entry>
- <entry colname="3">
- <para>
- Authoritative (non recursive) queries rejected.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>RecQryRej</command></para>
- </entry>
- <entry colname="2">
- <para><command>RURQ</command></para>
- </entry>
- <entry colname="3">
- <para>
- Recursive queries rejected.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>XfrRej</command></para>
- </entry>
- <entry colname="2">
- <para><command>RUXFR</command></para>
- </entry>
- <entry colname="3">
- <para>
- Zone transfer requests rejected.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>UpdateRej</command></para>
- </entry>
- <entry colname="2">
- <para><command>RUUpd</command></para>
- </entry>
- <entry colname="3">
- <para>
- Dynamic update requests rejected.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>Response</command></para>
- </entry>
- <entry colname="2">
- <para><command>SAns</command></para>
- </entry>
- <entry colname="3">
- <para>
- Responses sent.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>RespTruncated</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Truncated responses sent.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>RespEDNS0</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Responses with EDNS(0) sent.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>RespTSIG</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Responses with TSIG sent.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>RespSIG0</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Responses with SIG(0) sent.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>QrySuccess</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Queries resulted in a successful answer.
- This means the query which returns a NOERROR response
- with at least one answer RR.
- This corresponds to the
- <command>success</command> counter
- of previous versions of
- <acronym>BIND</acronym> 9.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>QryAuthAns</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Queries resulted in authoritative answer.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>QryNoauthAns</command></para>
- </entry>
- <entry colname="2">
- <para><command>SNaAns</command></para>
- </entry>
- <entry colname="3">
- <para>
- Queries resulted in non authoritative answer.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>QryReferral</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Queries resulted in referral answer.
- This corresponds to the
- <command>referral</command> counter
- of previous versions of
- <acronym>BIND</acronym> 9.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>QryNxrrset</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Queries resulted in NOERROR responses with no data.
- This corresponds to the
- <command>nxrrset</command> counter
- of previous versions of
- <acronym>BIND</acronym> 9.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>QrySERVFAIL</command></para>
- </entry>
- <entry colname="2">
- <para><command>SFail</command></para>
- </entry>
- <entry colname="3">
- <para>
- Queries resulted in SERVFAIL.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>QryFORMERR</command></para>
- </entry>
- <entry colname="2">
- <para><command>SFErr</command></para>
- </entry>
- <entry colname="3">
- <para>
- Queries resulted in FORMERR.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>QryNXDOMAIN</command></para>
- </entry>
- <entry colname="2">
- <para><command>SNXD</command></para>
- </entry>
- <entry colname="3">
- <para>
- Queries resulted in NXDOMAIN.
- This corresponds to the
- <command>nxdomain</command> counter
- of previous versions of
- <acronym>BIND</acronym> 9.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>QryRecursion</command></para>
- </entry>
- <entry colname="2">
- <para><command>RFwdQ</command></para>
- </entry>
- <entry colname="3">
- <para>
- Queries which caused the server
- to perform recursion in order to find the final answer.
- This corresponds to the
- <command>recursion</command> counter
- of previous versions of
- <acronym>BIND</acronym> 9.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>QryDuplicate</command></para>
- </entry>
- <entry colname="2">
- <para><command>RDupQ</command></para>
- </entry>
- <entry colname="3">
- <para>
- Queries which the server attempted to
- recurse but discovered an existing query with the same
- IP address, port, query ID, name, type and class
- already being processed.
- This corresponds to the
- <command>duplicate</command> counter
- of previous versions of
- <acronym>BIND</acronym> 9.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>QryDropped</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Recursive queries for which the server
- discovered an excessive number of existing
- recursive queries for the same name, type and
- class and were subsequently dropped.
- This is the number of dropped queries due to
- the reason explained with the
- <command>clients-per-query</command>
- and
- <command>max-clients-per-query</command>
- options
- (see the description about
- <xref endterm="cpq_term" linkend="clients-per-query"/>.)
- This corresponds to the
- <command>dropped</command> counter
- of previous versions of
- <acronym>BIND</acronym> 9.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>QryFailure</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Other query failures.
- This corresponds to the
- <command>failure</command> counter
- of previous versions of
- <acronym>BIND</acronym> 9.
- Note: this counter is provided mainly for
- backward compatibility with the previous versions.
- Normally a more fine-grained counters such as
- <command>AuthQryRej</command> and
- <command>RecQryRej</command>
- that would also fall into this counter are provided,
- and so this counter would not be of much
- interest in practice.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>QryNXRedir</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Queries resulted in NXDOMAIN that were redirected.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>QryNXRedirRLookup</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Queries resulted in NXDOMAIN that were redirected
- and resulted in a successful remote lookup.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>XfrReqDone</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Requested zone transfers completed.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>UpdateReqFwd</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Update requests forwarded.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>UpdateRespFwd</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Update responses forwarded.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>UpdateFwdFail</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Dynamic update forward failed.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>UpdateDone</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Dynamic updates completed.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>UpdateFail</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Dynamic updates failed.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>UpdateBadPrereq</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Dynamic updates rejected due to prerequisite failure.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>RateDropped</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Responses dropped by rate limits.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>RateSlipped</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Responses truncated by rate limits.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>RPZRewrites</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Response policy zone rewrites.
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </section>
-
- <section xml:id="zone_stats"><info><title>Zone Maintenance Statistics Counters</title></info>
-
- <informaltable colsep="0" rowsep="0">
- <tgroup cols="2" colsep="0" rowsep="0" tgroupstyle="4Level-table">
- <colspec colname="1" colnum="1" colsep="0" colwidth="1.150in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="3.350in"/>
- <tbody>
- <row>
- <entry colname="1">
- <para>
- <emphasis>Symbol</emphasis>
- </para>
- </entry>
- <entry colname="2">
- <para>
- <emphasis>Description</emphasis>
- </para>
- </entry>
- </row>
-
- <row rowsep="0">
- <entry colname="1">
- <para><command>NotifyOutv4</command></para>
- </entry>
- <entry colname="2">
- <para>
- IPv4 notifies sent.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>NotifyOutv6</command></para>
- </entry>
- <entry colname="2">
- <para>
- IPv6 notifies sent.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>NotifyInv4</command></para>
- </entry>
- <entry colname="2">
- <para>
- IPv4 notifies received.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>NotifyInv6</command></para>
- </entry>
- <entry colname="2">
- <para>
- IPv6 notifies received.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>NotifyRej</command></para>
- </entry>
- <entry colname="2">
- <para>
- Incoming notifies rejected.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>SOAOutv4</command></para>
- </entry>
- <entry colname="2">
- <para>
- IPv4 SOA queries sent.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>SOAOutv6</command></para>
- </entry>
- <entry colname="2">
- <para>
- IPv6 SOA queries sent.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>AXFRReqv4</command></para>
- </entry>
- <entry colname="2">
- <para>
- IPv4 AXFR requested.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>AXFRReqv6</command></para>
- </entry>
- <entry colname="2">
- <para>
- IPv6 AXFR requested.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>IXFRReqv4</command></para>
- </entry>
- <entry colname="2">
- <para>
- IPv4 IXFR requested.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>IXFRReqv6</command></para>
- </entry>
- <entry colname="2">
- <para>
- IPv6 IXFR requested.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>XfrSuccess</command></para>
- </entry>
- <entry colname="2">
- <para>
- Zone transfer requests succeeded.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>XfrFail</command></para>
- </entry>
- <entry colname="2">
- <para>
- Zone transfer requests failed.
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </section>
-
- <section xml:id="resolver_stats"><info><title>Resolver Statistics Counters</title></info>
-
- <informaltable colsep="0" rowsep="0">
- <tgroup cols="3" colsep="0" rowsep="0" tgroupstyle="4Level-table">
- <colspec colname="1" colnum="1" colsep="0" colwidth="1.150in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="1.150in"/>
- <colspec colname="3" colnum="3" colsep="0" colwidth="3.350in"/>
- <tbody>
- <row>
- <entry colname="1">
- <para>
- <emphasis>Symbol</emphasis>
- </para>
- </entry>
- <entry colname="2">
- <para>
- <emphasis>BIND8 Symbol</emphasis>
- </para>
- </entry>
- <entry colname="3">
- <para>
- <emphasis>Description</emphasis>
- </para>
- </entry>
- </row>
-
- <row rowsep="0">
- <entry colname="1">
- <para><command>Queryv4</command></para>
- </entry>
- <entry colname="2">
- <para><command>SFwdQ</command></para>
- </entry>
- <entry colname="3">
- <para>
- IPv4 queries sent.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>Queryv6</command></para>
- </entry>
- <entry colname="2">
- <para><command>SFwdQ</command></para>
- </entry>
- <entry colname="3">
- <para>
- IPv6 queries sent.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>Responsev4</command></para>
- </entry>
- <entry colname="2">
- <para><command>RR</command></para>
- </entry>
- <entry colname="3">
- <para>
- IPv4 responses received.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>Responsev6</command></para>
- </entry>
- <entry colname="2">
- <para><command>RR</command></para>
- </entry>
- <entry colname="3">
- <para>
- IPv6 responses received.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>NXDOMAIN</command></para>
- </entry>
- <entry colname="2">
- <para><command>RNXD</command></para>
- </entry>
- <entry colname="3">
- <para>
- NXDOMAIN received.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>SERVFAIL</command></para>
- </entry>
- <entry colname="2">
- <para><command>RFail</command></para>
- </entry>
- <entry colname="3">
- <para>
- SERVFAIL received.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>FORMERR</command></para>
- </entry>
- <entry colname="2">
- <para><command>RFErr</command></para>
- </entry>
- <entry colname="3">
- <para>
- FORMERR received.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>OtherError</command></para>
- </entry>
- <entry colname="2">
- <para><command>RErr</command></para>
- </entry>
- <entry colname="3">
- <para>
- Other errors received.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>EDNS0Fail</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- EDNS(0) query failures.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>Mismatch</command></para>
- </entry>
- <entry colname="2">
- <para><command>RDupR</command></para>
- </entry>
- <entry colname="3">
- <para>
- Mismatch responses received.
- The DNS ID, response's source address,
- and/or the response's source port does not
- match what was expected.
- (The port must be 53 or as defined by
- the <command>port</command> option.)
- This may be an indication of a cache
- poisoning attempt.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>Truncated</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Truncated responses received.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>Lame</command></para>
- </entry>
- <entry colname="2">
- <para><command>RLame</command></para>
- </entry>
- <entry colname="3">
- <para>
- Lame delegations received.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>Retry</command></para>
- </entry>
- <entry colname="2">
- <para><command>SDupQ</command></para>
- </entry>
- <entry colname="3">
- <para>
- Query retries performed.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>QueryAbort</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Queries aborted due to quota control.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>QuerySockFail</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Failures in opening query sockets.
- One common reason for such failures is a
- failure of opening a new socket due to a
- limitation on file descriptors.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>QueryTimeout</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Query timeouts.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>GlueFetchv4</command></para>
- </entry>
- <entry colname="2">
- <para><command>SSysQ</command></para>
- </entry>
- <entry colname="3">
- <para>
- IPv4 NS address fetches invoked.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>GlueFetchv6</command></para>
- </entry>
- <entry colname="2">
- <para><command>SSysQ</command></para>
- </entry>
- <entry colname="3">
- <para>
- IPv6 NS address fetches invoked.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>GlueFetchv4Fail</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- IPv4 NS address fetch failed.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>GlueFetchv6Fail</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- IPv6 NS address fetch failed.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>ValAttempt</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- DNSSEC validation attempted.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>ValOk</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- DNSSEC validation succeeded.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>ValNegOk</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- DNSSEC validation on negative information succeeded.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>ValFail</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- DNSSEC validation failed.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>QryRTTnn</command></para>
- </entry>
- <entry colname="2">
- <para><command/></para>
- </entry>
- <entry colname="3">
- <para>
- Frequency table on round trip times (RTTs) of
- queries.
- Each <command>nn</command> specifies the corresponding
- frequency.
- In the sequence of
- <command>nn_1</command>,
- <command>nn_2</command>,
- ...,
- <command>nn_m</command>,
- the value of <command>nn_i</command> is the
- number of queries whose RTTs are between
- <command>nn_(i-1)</command> (inclusive) and
- <command>nn_i</command> (exclusive) milliseconds.
- For the sake of convenience we define
- <command>nn_0</command> to be 0.
- The last entry should be represented as
- <command>nn_m+</command>, which means the
- number of queries whose RTTs are equal to or over
- <command>nn_m</command> milliseconds.
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- </section>
-
- <section xml:id="socket_stats"><info><title>Socket I/O Statistics Counters</title></info>
-
- <para>
- Socket I/O statistics counters are defined per socket
- types, which are
- <command>UDP4</command> (UDP/IPv4),
- <command>UDP6</command> (UDP/IPv6),
- <command>TCP4</command> (TCP/IPv4),
- <command>TCP6</command> (TCP/IPv6),
- <command>Unix</command> (Unix Domain), and
- <command>FDwatch</command> (sockets opened outside the
- socket module).
- In the following table <command>&lt;TYPE&gt;</command>
- represents a socket type.
- Not all counters are available for all socket types;
- exceptions are noted in the description field.
- </para>
-
- <informaltable colsep="0" rowsep="0">
- <tgroup cols="2" colsep="0" rowsep="0" tgroupstyle="4Level-table">
- <colspec colname="1" colnum="1" colsep="0" colwidth="1.150in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="3.350in"/>
- <tbody>
- <row>
- <entry colname="1">
- <para>
- <emphasis>Symbol</emphasis>
- </para>
- </entry>
- <entry colname="2">
- <para>
- <emphasis>Description</emphasis>
- </para>
- </entry>
- </row>
-
- <row rowsep="0">
- <entry colname="1">
- <para><command>&lt;TYPE&gt;Open</command></para>
- </entry>
- <entry colname="2">
- <para>
- Sockets opened successfully.
- This counter is not applicable to the
- <command>FDwatch</command> type.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>&lt;TYPE&gt;OpenFail</command></para>
- </entry>
- <entry colname="2">
- <para>
- Failures of opening sockets.
- This counter is not applicable to the
- <command>FDwatch</command> type.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>&lt;TYPE&gt;Close</command></para>
- </entry>
- <entry colname="2">
- <para>
- Sockets closed.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>&lt;TYPE&gt;BindFail</command></para>
- </entry>
- <entry colname="2">
- <para>
- Failures of binding sockets.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>&lt;TYPE&gt;ConnFail</command></para>
- </entry>
- <entry colname="2">
- <para>
- Failures of connecting sockets.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>&lt;TYPE&gt;Conn</command></para>
- </entry>
- <entry colname="2">
- <para>
- Connections established successfully.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>&lt;TYPE&gt;AcceptFail</command></para>
- </entry>
- <entry colname="2">
- <para>
- Failures of accepting incoming connection requests.
- This counter is not applicable to the
- <command>UDP</command> and
- <command>FDwatch</command> types.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>&lt;TYPE&gt;Accept</command></para>
- </entry>
- <entry colname="2">
- <para>
- Incoming connections successfully accepted.
- This counter is not applicable to the
- <command>UDP</command> and
- <command>FDwatch</command> types.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>&lt;TYPE&gt;SendErr</command></para>
- </entry>
- <entry colname="2">
- <para>
- Errors in socket send operations.
- This counter corresponds
- to <command>SErr</command> counter of
- <command>BIND</command> 8.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>&lt;TYPE&gt;RecvErr</command></para>
- </entry>
- <entry colname="2">
- <para>
- Errors in socket receive operations.
- This includes errors of send operations on a
- connected UDP socket notified by an ICMP error
- message.
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </section>
-
- <section xml:id="bind8_compatibility"><info><title>Compatibility with <emphasis>BIND</emphasis> 8 Counters</title></info>
-
- <para>
- Most statistics counters that were available
- in <command>BIND</command> 8 are also supported in
- <command>BIND</command> 9 as shown in the above tables.
- Here are notes about other counters that do not appear
- in these tables.
- </para>
-
- <variablelist>
- <varlistentry>
- <term><command>RFwdR,SFwdR</command></term>
- <listitem>
- <para>
- These counters are not supported
- because <command>BIND</command> 9 does not adopt
- the notion of <emphasis>forwarding</emphasis>
- as <command>BIND</command> 8 did.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>RAXFR</command></term>
- <listitem>
- <para>
- This counter is accessible in the Incoming Queries section.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>RIQ</command></term>
- <listitem>
- <para>
- This counter is accessible in the Incoming Requests section.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>ROpts</command></term>
- <listitem>
- <para>
- This counter is not supported
- because <command>BIND</command> 9 does not care
- about IP options in the first place.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </section>
- </section>
- </section>
-
- </chapter>
- <chapter xml:id="Bv9ARM.ch07"><info><title><acronym>BIND</acronym> 9 Security Considerations</title></info>
-
- <section xml:id="Access_Control_Lists"><info><title>Access Control Lists</title></info>
-
- <para>
- Access Control Lists (ACLs) are address match lists that
- you can set up and nickname for future use in
- <command>allow-notify</command>, <command>allow-query</command>,
- <command>allow-query-on</command>, <command>allow-recursion</command>,
- <command>blackhole</command>, <command>allow-transfer</command>,
- <command>match-clients</command>, etc.
- </para>
- <para>
- Using ACLs allows you to have finer control over who can access
- your name server, without cluttering up your config files with huge
- lists of IP addresses.
- </para>
- <para>
- It is a <emphasis>good idea</emphasis> to use ACLs, and to
- control access to your server. Limiting access to your server by
- outside parties can help prevent spoofing and denial of service
- (DoS) attacks against your server.
- </para>
- <para>
- ACLs match clients on the basis of up to three characteristics:
- 1) The client's IP address; 2) the TSIG or SIG(0) key that was
- used to sign the request, if any; and 3) an address prefix
- encoded in an EDNS Client Subnet option, if any.
- </para>
- <para>
- Here is an example of ACLs based on client addresses:
- </para>
-
-<programlisting>
-// Set up an ACL named "bogusnets" that will block
-// RFC1918 space and some reserved space, which is
-// commonly used in spoofing attacks.
-acl bogusnets {
- 0.0.0.0/8; 192.0.2.0/24; 224.0.0.0/3;
- 10.0.0.0/8; 172.16.0.0/12; 192.168.0.0/16;
-};
-
-// Set up an ACL called our-nets. Replace this with the
-// real IP numbers.
-acl our-nets { x.x.x.x/24; x.x.x.x/21; };
-options {
- ...
- ...
- allow-query { our-nets; };
- allow-recursion { our-nets; };
- ...
- blackhole { bogusnets; };
- ...
-};
-
-zone "example.com" {
- type master;
- file "m/example.com";
- allow-query { any; };
-};
-</programlisting>
-
- <para>
- This allows authoritative queries for "example.com" from any
- address, but recursive queries only from the networks specified
- in "our-nets", and no queries at all from the networks
- specified in "bogusnets".
- </para>
- <para>
- In addition to network addresses and prefixes, which are
- matched against the source address of the DNS request, ACLs
- may include <option>key</option> elements, which specify the
- name of a TSIG or SIG(0) key, or <option>ecs</option>
- elements, which specify a network prefix but are only matched
- if that prefix matches an EDNS client subnet option included
- in the request.
- </para>
- <para>
- The EDNS Client Subnet (ECS) option is used by a recursive
- resolver to inform an authoritative name server of the network
- address block from which the original query was received, enabling
- authoritative servers to give different answers to the same
- resolver for different resolver clients. An ACL containing
- an element of the form
- <command>ecs <replaceable>prefix</replaceable></command>
- will match if a request arrives in containing an ECS option
- encoding an address within that prefix. If the request has no
- ECS option, then "ecs" elements are simply ignored. Addresses
- in ACLs that are not prefixed with "ecs" are matched only
- against the source address.
- </para>
- <para>
- When <acronym>BIND</acronym> 9 is built with GeoIP support,
- ACLs can also be used for geographic access restrictions.
- This is done by specifying an ACL element of the form:
- <command>geoip <optional>db <replaceable>database</replaceable></optional> <replaceable>field</replaceable> <replaceable>value</replaceable></command>
- </para>
- <para>
- The <replaceable>field</replaceable> indicates which field
- to search for a match. Available fields are "country",
- "region", "city", "continent", "postal" (postal code),
- "metro" (metro code), "area" (area code), "tz" (timezone),
- "isp", "org", "asnum", "domain" and "netspeed".
- </para>
- <para>
- <replaceable>value</replaceable> is the value to search
- for within the database. A string may be quoted if it
- contains spaces or other special characters. If this is
- an "asnum" search, then the leading "ASNNNN" string can be
- used, otherwise the full description must be used (e.g.
- "ASNNNN Example Company Name"). If this is a "country"
- search and the string is two characters long, then it must
- be a standard ISO-3166-1 two-letter country code, and if it
- is three characters long then it must be an ISO-3166-1
- three-letter country code; otherwise it is the full name
- of the country. Similarly, if this is a "region" search
- and the string is two characters long, then it must be a
- standard two-letter state or province abbreviation;
- otherwise it is the full name of the state or province.
- </para>
- <para>
- The <replaceable>database</replaceable> field indicates which
- GeoIP database to search for a match. In most cases this is
- unnecessary, because most search fields can only be found in
- a single database. However, searches for country can be
- answered from the "city", "region", or "country" databases,
- and searches for region (i.e., state or province) can be
- answered from the "city" or "region" databases. For these
- search types, specifying a <replaceable>database</replaceable>
- will force the query to be answered from that database and no
- other. If <replaceable>database</replaceable> is not
- specified, then these queries will be answered from the "city",
- database if it is installed, or the "region" database if it is
- installed, or the "country" database, in that order.
- </para>
- <para>
- By default, if a DNS query includes an EDNS Client Subnet (ECS)
- option which encodes a non-zero address prefix, then GeoIP ACLs
- will be matched against that address prefix. Otherwise, they
- are matched against the source address of the query. To
- prevent GeoIP ACLs from matching against ECS options, set
- the <command>geoip-use-ecs</command> to <literal>no</literal>.
- </para>
- <para>
- Some example GeoIP ACLs:
- </para>
- <programlisting>geoip country US;
-geoip country JAP;
-geoip db country country Canada;
-geoip db region region WA;
-geoip city "San Francisco";
-geoip region Oklahoma;
-geoip postal 95062;
-geoip tz "America/Los_Angeles";
-geoip org "Internet Systems Consortium";
-</programlisting>
-
- <para>
- ACLs use a "first-match" logic rather than "best-match":
- if an address prefix matches an ACL element, then that ACL
- is considered to have matched even if a later element would
- have matched more specifically. For example, the ACL
- <command> { 10/8; !10.0.0.1; }</command> would actually
- match a query from 10.0.0.1, because the first element
- indicated that the query should be accepted, and the second
- element is ignored.
- </para>
- <para>
- When using "nested" ACLs (that is, ACLs included or referenced
- within other ACLs), a negative match of a nested ACL will
- the containing ACL to continue looking for matches. This
- enables complex ACLs to be constructed, in which multiple
- client characteristics can be checked at the same time. For
- example, to construct an ACL which allows queries only when
- it originates from a particular network <emphasis>and</emphasis>
- only when it is signed with a particular key, use:
- </para>
- <programlisting>
-allow-query { !{ !10/8; any; }; key example; };
-</programlisting>
- <para>
- Within the nested ACL, any address that is
- <emphasis>not</emphasis> in the 10/8 network prefix will
- be rejected, and this will terminate processing of the
- ACL. Any address that <emphasis>is</emphasis> in the 10/8
- network prefix will be accepted, but this causes a negative
- match of the nested ACL, so the containing ACL continues
- processing. The query will then be accepted if it is signed
- by the key "example", and rejected otherwise. The ACL, then,
- will only matches when <emphasis>both</emphasis> conditions
- are true.
- </para>
- </section>
-
- <section xml:id="chroot_and_setuid"><info><title><command>Chroot</command> and <command>Setuid</command></title></info>
-
- <para>
- On UNIX servers, it is possible to run <acronym>BIND</acronym>
- in a <emphasis>chrooted</emphasis> environment (using
- the <command>chroot()</command> function) by specifying
- the <option>-t</option> option for <command>named</command>.
- This can help improve system security by placing
- <acronym>BIND</acronym> in a "sandbox", which will limit
- the damage done if a server is compromised.
- </para>
- <para>
- Another useful feature in the UNIX version of <acronym>BIND</acronym> is the
- ability to run the daemon as an unprivileged user ( <option>-u</option> <replaceable>user</replaceable> ).
- We suggest running as an unprivileged user when using the <command>chroot</command> feature.
- </para>
- <para>
- Here is an example command line to load <acronym>BIND</acronym> in a <command>chroot</command> sandbox,
- <command>/var/named</command>, and to run <command>named</command> <command>setuid</command> to
- user 202:
- </para>
- <para>
- <userinput>/usr/local/sbin/named -u 202 -t /var/named</userinput>
- </para>
-
- <section xml:id="chroot"><info><title>The <command>chroot</command> Environment</title></info>
-
- <para>
- In order for a <command>chroot</command> environment
- to work properly in a particular directory (for example,
- <filename>/var/named</filename>), you will need to set
- up an environment that includes everything
- <acronym>BIND</acronym> needs to run. From
- <acronym>BIND</acronym>'s point of view,
- <filename>/var/named</filename> is the root of the
- filesystem. You will need to adjust the values of
- options like <command>directory</command> and
- <command>pid-file</command> to account for this.
- </para>
- <para>
- Unlike with earlier versions of BIND, you typically will
- <emphasis>not</emphasis> need to compile <command>named</command>
- statically nor install shared libraries under the new root.
- However, depending on your operating system, you may need
- to set up things like
- <filename>/dev/zero</filename>,
- <filename>/dev/random</filename>,
- <filename>/dev/log</filename>, and
- <filename>/etc/localtime</filename>.
- </para>
- </section>
-
- <section xml:id="setuid"><info><title>Using the <command>setuid</command> Function</title></info>
-
- <para>
- Prior to running the <command>named</command> daemon,
- use
- the <command>touch</command> utility (to change file
- access and
- modification times) or the <command>chown</command>
- utility (to
- set the user id and/or group id) on files
- to which you want <acronym>BIND</acronym>
- to write.
- </para>
- <note><simpara>
- If the <command>named</command> daemon is running as an
- unprivileged user, it will not be able to bind to new restricted
- ports if the server is reloaded.
- </simpara></note>
- </section>
- </section>
-
- <section xml:id="dynamic_update_security"><info><title>Dynamic Update Security</title></info>
-
- <para>
- Access to the dynamic
- update facility should be strictly limited. In earlier versions of
- <acronym>BIND</acronym>, the only way to do this was
- based on the IP
- address of the host requesting the update, by listing an IP address
- or
- network prefix in the <command>allow-update</command>
- zone option.
- This method is insecure since the source address of the update UDP
- packet
- is easily forged. Also note that if the IP addresses allowed by the
- <command>allow-update</command> option include the
- address of a slave
- server which performs forwarding of dynamic updates, the master can
- be
- trivially attacked by sending the update to the slave, which will
- forward it to the master with its own source IP address causing the
- master to approve it without question.
- </para>
-
- <para>
- For these reasons, we strongly recommend that updates be
- cryptographically authenticated by means of transaction signatures
- (TSIG). That is, the <command>allow-update</command>
- option should
- list only TSIG key names, not IP addresses or network
- prefixes. Alternatively, the new <command>update-policy</command>
- option can be used.
- </para>
-
- <para>
- Some sites choose to keep all dynamically-updated DNS data
- in a subdomain and delegate that subdomain to a separate zone. This
- way, the top-level zone containing critical data such as the IP
- addresses
- of public web and mail servers need not allow dynamic update at
- all.
- </para>
-
- </section>
- </chapter>
-
- <chapter xml:id="Bv9ARM.ch08"><info><title>Troubleshooting</title></info>
-
- <section xml:id="common_problems"><info><title>Common Problems</title></info>
-
- <section><info><title>It's not working; how can I figure out what's wrong?</title></info>
-
- <para>
- The best solution to solving installation and
- configuration issues is to take preventative measures by setting
- up logging files beforehand. The log files provide a
- source of hints and information that can be used to figure out
- what went wrong and how to fix the problem.
- </para>
-
- </section>
- </section>
- <section><info><title>Incrementing and Changing the Serial Number</title></info>
-
- <para>
- Zone serial numbers are just numbers — they aren't
- date related. A lot of people set them to a number that
- represents a date, usually of the form YYYYMMDDRR.
- Occasionally they will make a mistake and set them to a
- "date in the future" then try to correct them by setting
- them to the "current date". This causes problems because
- serial numbers are used to indicate that a zone has been
- updated. If the serial number on the slave server is
- lower than the serial number on the master, the slave
- server will attempt to update its copy of the zone.
- </para>
-
- <para>
- Setting the serial number to a lower number on the master
- server than the slave server means that the slave will not perform
- updates to its copy of the zone.
- </para>
-
- <para>
- The solution to this is to add 2147483647 (2^31-1) to the
- number, reload the zone and make sure all slaves have updated to
- the new zone serial number, then reset the number to what you want
- it to be, and reload the zone again.
- </para>
-
- </section>
- <section xml:id="more_help"><info><title>Where Can I Get Help?</title></info>
-
- <para>
- The Internet Systems Consortium
- (<acronym>ISC</acronym>) offers a wide range
- of support and service agreements for <acronym>BIND</acronym> and <acronym>DHCP</acronym> servers. Four
- levels of premium support are available and each level includes
- support for all <acronym>ISC</acronym> programs,
- significant discounts on products
- and training, and a recognized priority on bug fixes and
- non-funded feature requests. In addition, <acronym>ISC</acronym> offers a standard
- support agreement package which includes services ranging from bug
- fix announcements to remote support. It also includes training in
- <acronym>BIND</acronym> and <acronym>DHCP</acronym>.
- </para>
-
- <para>
- To discuss arrangements for support, contact
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="mailto:info@isc.org">info@isc.org</link> or visit the
- <acronym>ISC</acronym> web page at
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.isc.org/services/support/">http://www.isc.org/services/support/</link>
- to read more.
- </para>
- </section>
- </chapter>
-
- <appendix xml:id="Bv9ARM.ch09"><info><title>Release Notes</title></info>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="notes.xml"/>
- </appendix>
-
- <appendix xml:id="Bv9ARM.ch10"><info><title>A Brief History of the <acronym>DNS</acronym> and <acronym>BIND</acronym></title></info>
- <para xml:id="historical_dns_information">
- Although the "official" beginning of the Domain Name
- System occurred in 1984 with the publication of RFC 920, the
- core of the new system was described in 1983 in RFCs 882 and
- 883. From 1984 to 1987, the ARPAnet (the precursor to today's
- Internet) became a testbed of experimentation for developing the
- new naming/addressing scheme in a rapidly expanding,
- operational network environment. New RFCs were written and
- published in 1987 that modified the original documents to
- incorporate improvements based on the working model. RFC 1034,
- "Domain Names-Concepts and Facilities", and RFC 1035, "Domain
- Names-Implementation and Specification" were published and
- became the standards upon which all <acronym>DNS</acronym> implementations are
- built.
- </para>
-
- <para>
- The first working domain name server, called "Jeeves", was
- written in 1983-84 by Paul Mockapetris for operation on DEC
- Tops-20
- machines located at the University of Southern California's
- Information
- Sciences Institute (USC-ISI) and SRI International's Network
- Information
- Center (SRI-NIC). A <acronym>DNS</acronym> server for
- Unix machines, the Berkeley Internet
- Name Domain (<acronym>BIND</acronym>) package, was
- written soon after by a group of
- graduate students at the University of California at Berkeley
- under
- a grant from the US Defense Advanced Research Projects
- Administration
- (DARPA).
- </para>
- <para>
- Versions of <acronym>BIND</acronym> through
- 4.8.3 were maintained by the Computer
- Systems Research Group (CSRG) at UC Berkeley. Douglas Terry, Mark
- Painter, David Riggle and Songnian Zhou made up the initial <acronym>BIND</acronym>
- project team. After that, additional work on the software package
- was done by Ralph Campbell. Kevin Dunlap, a Digital Equipment
- Corporation
- employee on loan to the CSRG, worked on <acronym>BIND</acronym> for 2 years, from 1985
- to 1987. Many other people also contributed to <acronym>BIND</acronym> development
- during that time: Doug Kingston, Craig Partridge, Smoot
- Carl-Mitchell,
- Mike Muuss, Jim Bloom and Mike Schwartz. <acronym>BIND</acronym> maintenance was subsequently
- handled by Mike Karels and Øivind Kure.
- </para>
- <para>
- <acronym>BIND</acronym> versions 4.9 and 4.9.1 were
- released by Digital Equipment
- Corporation (now Compaq Computer Corporation). Paul Vixie, then
- a DEC employee, became <acronym>BIND</acronym>'s
- primary caretaker. He was assisted
- by Phil Almquist, Robert Elz, Alan Barrett, Paul Albitz, Bryan
- Beecher, Andrew
- Partan, Andy Cherenson, Tom Limoncelli, Berthold Paffrath, Fuat
- Baran, Anant Kumar, Art Harkin, Win Treese, Don Lewis, Christophe
- Wolfhugel, and others.
- </para>
- <para>
- In 1994, <acronym>BIND</acronym> version 4.9.2 was sponsored by
- Vixie Enterprises. Paul
- Vixie became <acronym>BIND</acronym>'s principal
- architect/programmer.
- </para>
- <para>
- <acronym>BIND</acronym> versions from 4.9.3 onward
- have been developed and maintained
- by the Internet Systems Consortium and its predecessor,
- the Internet Software Consortium, with support being provided
- by ISC's sponsors.
- </para>
- <para>
- As co-architects/programmers, Bob Halley and
- Paul Vixie released the first production-ready version of
- <acronym>BIND</acronym> version 8 in May 1997.
- </para>
- <para>
- BIND version 9 was released in September 2000 and is a
- major rewrite of nearly all aspects of the underlying
- BIND architecture.
- </para>
- <para>
- BIND versions 4 and 8 are officially deprecated.
- No additional development is done
- on BIND version 4 or BIND version 8.
- </para>
- <para>
- <acronym>BIND</acronym> development work is made
- possible today by the sponsorship
- of several corporations, and by the tireless work efforts of
- numerous individuals.
- </para>
- </appendix>
-
- <appendix xml:id="Bv9ARM.ch11"><info><title>General <acronym>DNS</acronym> Reference Information</title></info>
-
- <section xml:id="ipv6addresses"><info><title>IPv6 addresses (AAAA)</title></info>
-
- <para>
- IPv6 addresses are 128-bit identifiers for interfaces and
- sets of interfaces which were introduced in the <acronym>DNS</acronym> to facilitate
- scalable Internet routing. There are three types of addresses: <emphasis>Unicast</emphasis>,
- an identifier for a single interface;
- <emphasis>Anycast</emphasis>,
- an identifier for a set of interfaces; and <emphasis>Multicast</emphasis>,
- an identifier for a set of interfaces. Here we describe the global
- Unicast address scheme. For more information, see RFC 3587,
- "Global Unicast Address Format."
- </para>
- <para>
- IPv6 unicast addresses consist of a
- <emphasis>global routing prefix</emphasis>, a
- <emphasis>subnet identifier</emphasis>, and an
- <emphasis>interface identifier</emphasis>.
- </para>
- <para>
- The global routing prefix is provided by the
- upstream provider or ISP, and (roughly) corresponds to the
- IPv4 <emphasis>network</emphasis> section
- of the address range.
-
- The subnet identifier is for local subnetting, much the
- same as subnetting an
- IPv4 /16 network into /24 subnets.
-
- The interface identifier is the address of an individual
- interface on a given network; in IPv6, addresses belong to
- interfaces rather than to machines.
- </para>
- <para>
- The subnetting capability of IPv6 is much more flexible than
- that of IPv4: subnetting can be carried out on bit boundaries,
- in much the same way as Classless InterDomain Routing
- (CIDR), and the DNS PTR representation ("nibble" format)
- makes setting up reverse zones easier.
- </para>
- <para>
- The Interface Identifier must be unique on the local link,
- and is usually generated automatically by the IPv6
- implementation, although it is usually possible to
- override the default setting if necessary. A typical IPv6
- address might look like:
- <command>2001:db8:201:9:a00:20ff:fe81:2b32</command>
- </para>
- <para>
- IPv6 address specifications often contain long strings
- of zeros, so the architects have included a shorthand for
- specifying
- them. The double colon (`::') indicates the longest possible
- string
- of zeros that can fit, and can be used only once in an address.
- </para>
- </section>
- <section xml:id="bibliography"><info><title>Bibliography (and Suggested Reading)</title></info>
-
- <section xml:id="rfcs"><info><title>Request for Comments (RFCs)</title></info>
-
- <para>
- Specification documents for the Internet protocol suite, including
- the <acronym>DNS</acronym>, are published as part of
- the Request for Comments (RFCs)
- series of technical notes. The standards themselves are defined
- by the Internet Engineering Task Force (IETF) and the Internet
- Engineering Steering Group (IESG). RFCs can be obtained online via FTP at:
- </para>
- <para>
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="ftp://www.isi.edu/in-notes/">
- ftp://www.isi.edu/in-notes/RFC<replaceable>xxxx</replaceable>.txt
- </link>
- </para>
- <para>
- (where <replaceable>xxxx</replaceable> is
- the number of the RFC). RFCs are also available via the Web at:
- </para>
- <para>
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.ietf.org/rfc/">http://www.ietf.org/rfc/</link>.
- </para>
- <bibliography>
- <bibliodiv><info><title>Standards</title></info>
- <!-- one of (BIBLIOENTRY BIBLIOMIXED) -->
-
- <biblioentry>
- <abbrev>RFC974</abbrev>
- <author><personname><surname>Partridge</surname><firstname>C.</firstname></personname></author>
- <citetitle>Mail Routing and the Domain System</citetitle>
- <pubdate>January 1986</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC1034</abbrev>
- <author><personname><surname>Mockapetris</surname><firstname>P.V.</firstname></personname></author>
- <citetitle>Domain Names — Concepts and Facilities</citetitle>
- <pubdate>November 1987</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC1035</abbrev>
- <author><personname><surname>Mockapetris</surname><firstname>P. V.</firstname></personname></author> <citetitle>Domain Names — Implementation and
- Specification</citetitle>
- <pubdate>November 1987</pubdate>
- </biblioentry>
- </bibliodiv>
- <bibliodiv xml:id="proposed_standards" xreflabel="Proposed Standards"><info><title>Proposed Standards</title></info>
-
- <!-- one of (BIBLIOENTRY BIBLIOMIXED) -->
- <biblioentry>
- <abbrev>RFC2181</abbrev>
- <author><personname><surname>Elz</surname><firstname>R., R. Bush</firstname></personname></author>
- <citetitle>Clarifications to the <acronym>DNS</acronym>
- Specification</citetitle>
- <pubdate>July 1997</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2308</abbrev>
- <author><personname><surname>Andrews</surname><firstname>M.</firstname></personname></author>
- <citetitle>Negative Caching of <acronym>DNS</acronym>
- Queries</citetitle>
- <pubdate>March 1998</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC1995</abbrev>
- <author><personname><surname>Ohta</surname><firstname>M.</firstname></personname></author>
- <citetitle>Incremental Zone Transfer in <acronym>DNS</acronym></citetitle>
- <pubdate>August 1996</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC1996</abbrev>
- <author><personname><surname>Vixie</surname><firstname>P.</firstname></personname></author>
- <citetitle>A Mechanism for Prompt Notification of Zone Changes</citetitle>
- <pubdate>August 1996</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2136</abbrev>
- <authorgroup>
- <author><personname><surname>Vixie</surname><firstname>P.</firstname></personname></author>
- <author><personname><firstname>S.</firstname><surname>Thomson</surname></personname></author>
- <author><personname><firstname>Y.</firstname><surname>Rekhter</surname></personname></author>
- <author><personname><firstname>J.</firstname><surname>Bound</surname></personname></author>
- </authorgroup>
- <citetitle>Dynamic Updates in the Domain Name System</citetitle>
- <pubdate>April 1997</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2671</abbrev>
- <authorgroup>
- <author><personname><firstname>P.</firstname><surname>Vixie</surname></personname></author>
- </authorgroup>
- <citetitle>Extension Mechanisms for DNS (EDNS0)</citetitle>
- <pubdate>August 1997</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2672</abbrev>
- <authorgroup>
- <author><personname><firstname>M.</firstname><surname>Crawford</surname></personname></author>
- </authorgroup>
- <citetitle>Non-Terminal DNS Name Redirection</citetitle>
- <pubdate>August 1999</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2845</abbrev>
- <authorgroup>
- <author><personname><surname>Vixie</surname><firstname>P.</firstname></personname></author>
- <author><personname><firstname>O.</firstname><surname>Gudmundsson</surname></personname></author>
- <author><personname><firstname>D.</firstname><surname>Eastlake</surname><lineage>3rd</lineage></personname></author>
- <author><personname><firstname>B.</firstname><surname>Wellington</surname></personname></author>
- </authorgroup>
- <citetitle>Secret Key Transaction Authentication for <acronym>DNS</acronym> (TSIG)</citetitle>
- <pubdate>May 2000</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2930</abbrev>
- <authorgroup>
- <author><personname><firstname>D.</firstname><surname>Eastlake</surname><lineage>3rd</lineage></personname></author>
- </authorgroup>
- <citetitle>Secret Key Establishment for DNS (TKEY RR)</citetitle>
- <pubdate>September 2000</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2931</abbrev>
- <authorgroup>
- <author><personname><firstname>D.</firstname><surname>Eastlake</surname><lineage>3rd</lineage></personname></author>
- </authorgroup>
- <citetitle>DNS Request and Transaction Signatures (SIG(0)s)</citetitle>
- <pubdate>September 2000</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC3007</abbrev>
- <authorgroup>
- <author><personname><firstname>B.</firstname><surname>Wellington</surname></personname></author>
- </authorgroup>
- <citetitle>Secure Domain Name System (DNS) Dynamic Update</citetitle>
- <pubdate>November 2000</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC3645</abbrev>
- <authorgroup>
- <author><personname><firstname>S.</firstname><surname>Kwan</surname></personname></author>
- <author><personname><firstname>P.</firstname><surname>Garg</surname></personname></author>
- <author><personname><firstname>J.</firstname><surname>Gilroy</surname></personname></author>
- <author><personname><firstname>L.</firstname><surname>Esibov</surname></personname></author>
- <author><personname><firstname>J.</firstname><surname>Westhead</surname></personname></author>
- <author><personname><firstname>R.</firstname><surname>Hall</surname></personname></author>
- </authorgroup>
- <citetitle>Generic Security Service Algorithm for Secret
- Key Transaction Authentication for DNS
- (GSS-TSIG)</citetitle>
- <pubdate>October 2003</pubdate>
- </biblioentry>
- </bibliodiv>
- <bibliodiv><info><title><acronym>DNS</acronym> Security Proposed Standards</title></info>
-
- <biblioentry>
- <abbrev>RFC3225</abbrev>
- <authorgroup>
- <author><personname><firstname>D.</firstname><surname>Conrad</surname></personname></author>
- </authorgroup>
- <citetitle>Indicating Resolver Support of DNSSEC</citetitle>
- <pubdate>December 2001</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC3833</abbrev>
- <authorgroup>
- <author><personname><firstname>D.</firstname><surname>Atkins</surname></personname></author>
- <author><personname><firstname>R.</firstname><surname>Austein</surname></personname></author>
- </authorgroup>
- <citetitle>Threat Analysis of the Domain Name System (DNS)</citetitle>
- <pubdate>August 2004</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC4033</abbrev>
- <authorgroup>
- <author><personname><firstname>R.</firstname><surname>Arends</surname></personname></author>
- <author><personname><firstname>R.</firstname><surname>Austein</surname></personname></author>
- <author><personname><firstname>M.</firstname><surname>Larson</surname></personname></author>
- <author><personname><firstname>D.</firstname><surname>Massey</surname></personname></author>
- <author><personname><firstname>S.</firstname><surname>Rose</surname></personname></author>
- </authorgroup>
- <citetitle>DNS Security Introduction and Requirements</citetitle>
- <pubdate>March 2005</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC4034</abbrev>
- <authorgroup>
- <author><personname><firstname>R.</firstname><surname>Arends</surname></personname></author>
- <author><personname><firstname>R.</firstname><surname>Austein</surname></personname></author>
- <author><personname><firstname>M.</firstname><surname>Larson</surname></personname></author>
- <author><personname><firstname>D.</firstname><surname>Massey</surname></personname></author>
- <author><personname><firstname>S.</firstname><surname>Rose</surname></personname></author>
- </authorgroup>
- <citetitle>Resource Records for the DNS Security Extensions</citetitle>
- <pubdate>March 2005</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC4035</abbrev>
- <authorgroup>
- <author><personname><firstname>R.</firstname><surname>Arends</surname></personname></author>
- <author><personname><firstname>R.</firstname><surname>Austein</surname></personname></author>
- <author><personname><firstname>M.</firstname><surname>Larson</surname></personname></author>
- <author><personname><firstname>D.</firstname><surname>Massey</surname></personname></author>
- <author><personname><firstname>S.</firstname><surname>Rose</surname></personname></author>
- </authorgroup>
- <citetitle>Protocol Modifications for the DNS
- Security Extensions</citetitle>
- <pubdate>March 2005</pubdate>
- </biblioentry>
- </bibliodiv>
- <bibliodiv><info><title>Other Important RFCs About <acronym>DNS</acronym>
- Implementation</title></info>
-
- <biblioentry>
- <abbrev>RFC1535</abbrev>
- <author><personname><surname>Gavron</surname><firstname>E.</firstname></personname></author>
- <citetitle>A Security Problem and Proposed Correction With Widely
- Deployed <acronym>DNS</acronym> Software</citetitle>
- <pubdate>October 1993</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC1536</abbrev>
- <authorgroup>
- <author><personname><surname>Kumar</surname><firstname>A.</firstname></personname></author>
- <author><personname><firstname>J.</firstname><surname>Postel</surname></personname></author>
- <author><personname><firstname>C.</firstname><surname>Neuman</surname></personname></author>
- <author><personname><firstname>P.</firstname><surname>Danzig</surname></personname></author>
- <author><personname><firstname>S.</firstname><surname>Miller</surname></personname></author>
- </authorgroup>
- <citetitle>Common <acronym>DNS</acronym> Implementation
- Errors and Suggested Fixes</citetitle>
- <pubdate>October 1993</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC1982</abbrev>
- <authorgroup>
- <author><personname><surname>Elz</surname><firstname>R.</firstname></personname></author>
- <author><personname><firstname>R.</firstname><surname>Bush</surname></personname></author>
- </authorgroup>
- <citetitle>Serial Number Arithmetic</citetitle>
- <pubdate>August 1996</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC4074</abbrev>
- <authorgroup>
- <author><personname><surname>Morishita</surname><firstname>Y.</firstname></personname></author>
- <author><personname><firstname>T.</firstname><surname>Jinmei</surname></personname></author>
- </authorgroup>
- <citetitle>Common Misbehaviour Against <acronym>DNS</acronym>
- Queries for IPv6 Addresses</citetitle>
- <pubdate>May 2005</pubdate>
- </biblioentry>
- </bibliodiv>
- <bibliodiv><info><title>Resource Record Types</title></info>
-
- <biblioentry>
- <abbrev>RFC1183</abbrev>
- <authorgroup>
- <author><personname><surname>Everhart</surname><firstname>C.F.</firstname></personname></author>
- <author><personname><firstname>L. A.</firstname><surname>Mamakos</surname></personname></author>
- <author><personname><firstname>R.</firstname><surname>Ullmann</surname></personname></author>
- <author><personname><firstname>P.</firstname><surname>Mockapetris</surname></personname></author>
- </authorgroup>
- <citetitle>New <acronym>DNS</acronym> RR Definitions</citetitle>
- <pubdate>October 1990</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC1706</abbrev>
- <authorgroup>
- <author><personname><surname>Manning</surname><firstname>B.</firstname></personname></author>
- <author><personname><firstname>R.</firstname><surname>Colella</surname></personname></author>
- </authorgroup>
- <citetitle><acronym>DNS</acronym> NSAP Resource Records</citetitle>
- <pubdate>October 1994</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2168</abbrev>
- <authorgroup>
- <author><personname><surname>Daniel</surname><firstname>R.</firstname></personname></author>
- <author><personname><firstname>M.</firstname><surname>Mealling</surname></personname></author>
- </authorgroup>
- <citetitle>Resolution of Uniform Resource Identifiers using
- the Domain Name System</citetitle>
- <pubdate>June 1997</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC1876</abbrev>
- <authorgroup>
- <author><personname><surname>Davis</surname><firstname>C.</firstname></personname></author>
- <author><personname><firstname>P.</firstname><surname>Vixie</surname></personname></author>
- <author><personname><firstname>T.</firstname><firstname>Goodwin</firstname></personname></author>
- <author><personname><firstname>I.</firstname><surname>Dickinson</surname></personname></author>
- </authorgroup>
- <citetitle>A Means for Expressing Location Information in the
- Domain
- Name System</citetitle>
- <pubdate>January 1996</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2052</abbrev>
- <authorgroup>
- <author><personname><surname>Gulbrandsen</surname><firstname>A.</firstname></personname></author>
- <author><personname><firstname>P.</firstname><surname>Vixie</surname></personname></author>
- </authorgroup>
- <citetitle>A <acronym>DNS</acronym> RR for Specifying the
- Location of
- Services</citetitle>
- <pubdate>October 1996</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2163</abbrev>
- <author><personname><surname>Allocchio</surname><firstname>A.</firstname></personname></author>
- <citetitle>Using the Internet <acronym>DNS</acronym> to
- Distribute MIXER
- Conformant Global Address Mapping</citetitle>
- <pubdate>January 1998</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2230</abbrev>
- <author><personname><surname>Atkinson</surname><firstname>R.</firstname></personname></author>
- <citetitle>Key Exchange Delegation Record for the <acronym>DNS</acronym></citetitle>
- <pubdate>October 1997</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2536</abbrev>
- <author><personname><surname>Eastlake</surname><firstname>D.</firstname><lineage>3rd</lineage></personname></author>
- <citetitle>DSA KEYs and SIGs in the Domain Name System (DNS)</citetitle>
- <pubdate>March 1999</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2537</abbrev>
- <author><personname><surname>Eastlake</surname><firstname>D.</firstname><lineage>3rd</lineage></personname></author>
- <citetitle>RSA/MD5 KEYs and SIGs in the Domain Name System (DNS)</citetitle>
- <pubdate>March 1999</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2538</abbrev>
- <authorgroup>
- <author><personname><surname>Eastlake</surname><firstname>D.</firstname><lineage>3rd</lineage></personname></author>
- <author><personname><surname>Gudmundsson</surname><firstname>O.</firstname></personname></author>
- </authorgroup>
- <citetitle>Storing Certificates in the Domain Name System (DNS)</citetitle>
- <pubdate>March 1999</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2539</abbrev>
- <authorgroup>
- <author><personname><surname>Eastlake</surname><firstname>D.</firstname><lineage>3rd</lineage></personname></author>
- </authorgroup>
- <citetitle>Storage of Diffie-Hellman Keys in the Domain Name System (DNS)</citetitle>
- <pubdate>March 1999</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2540</abbrev>
- <authorgroup>
- <author><personname><surname>Eastlake</surname><firstname>D.</firstname><lineage>3rd</lineage></personname></author>
- </authorgroup>
- <citetitle>Detached Domain Name System (DNS) Information</citetitle>
- <pubdate>March 1999</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2782</abbrev>
- <author><personname><surname>Gulbrandsen</surname><firstname>A.</firstname></personname></author>
- <author><personname><surname>Vixie</surname><firstname>P.</firstname></personname></author>
- <author><personname><surname>Esibov</surname><firstname>L.</firstname></personname></author>
- <citetitle>A DNS RR for specifying the location of services (DNS SRV)</citetitle>
- <pubdate>February 2000</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2915</abbrev>
- <author><personname><surname>Mealling</surname><firstname>M.</firstname></personname></author>
- <author><personname><surname>Daniel</surname><firstname>R.</firstname></personname></author>
- <citetitle>The Naming Authority Pointer (NAPTR) DNS Resource Record</citetitle>
- <pubdate>September 2000</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC3110</abbrev>
- <author><personname><surname>Eastlake</surname><firstname>D.</firstname><lineage>3rd</lineage></personname></author>
- <citetitle>RSA/SHA-1 SIGs and RSA KEYs in the Domain Name System (DNS)</citetitle>
- <pubdate>May 2001</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC3123</abbrev>
- <author><personname><surname>Koch</surname><firstname>P.</firstname></personname></author>
- <citetitle>A DNS RR Type for Lists of Address Prefixes (APL RR)</citetitle>
- <pubdate>June 2001</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC3596</abbrev>
- <authorgroup>
- <author><personname><surname>Thomson</surname><firstname>S.</firstname></personname></author>
- <author><personname><firstname>C.</firstname><surname>Huitema</surname></personname></author>
- <author><personname><firstname>V.</firstname><surname>Ksinant</surname></personname></author>
- <author><personname><firstname>M.</firstname><surname>Souissi</surname></personname></author>
- </authorgroup>
- <citetitle><acronym>DNS</acronym> Extensions to support IP
- version 6</citetitle>
- <pubdate>October 2003</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC3597</abbrev>
- <author><personname><surname>Gustafsson</surname><firstname>A.</firstname></personname></author>
- <citetitle>Handling of Unknown DNS Resource Record (RR) Types</citetitle>
- <pubdate>September 2003</pubdate>
- </biblioentry>
- </bibliodiv>
- <bibliodiv><info><title><acronym>DNS</acronym> and the Internet</title></info>
-
- <biblioentry>
- <abbrev>RFC1101</abbrev>
- <author><personname><surname>Mockapetris</surname><firstname>P. V.</firstname></personname></author>
- <citetitle><acronym>DNS</acronym> Encoding of Network Names
- and Other Types</citetitle>
- <pubdate>April 1989</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC1123</abbrev>
- <author><personname><surname>Braden</surname><surname>R.</surname></personname></author>
- <citetitle>Requirements for Internet Hosts - Application and
- Support</citetitle>
- <pubdate>October 1989</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC1591</abbrev>
- <author><personname><surname>Postel</surname><firstname>J.</firstname></personname></author>
- <citetitle>Domain Name System Structure and Delegation</citetitle>
- <pubdate>March 1994</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2317</abbrev>
- <authorgroup>
- <author><personname><surname>Eidnes</surname><firstname>H.</firstname></personname></author>
- <author><personname><firstname>G.</firstname><surname>de Groot</surname></personname></author>
- <author><personname><firstname>P.</firstname><surname>Vixie</surname></personname></author>
- </authorgroup>
- <citetitle>Classless IN-ADDR.ARPA Delegation</citetitle>
- <pubdate>March 1998</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2826</abbrev>
- <authorgroup>
- <author><personname><surname>Internet Architecture Board</surname></personname></author>
- </authorgroup>
- <citetitle>IAB Technical Comment on the Unique DNS Root</citetitle>
- <pubdate>May 2000</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2929</abbrev>
- <authorgroup>
- <author><personname><surname>Eastlake</surname><firstname>D.</firstname><lineage>3rd</lineage></personname></author>
- <author><personname><surname>Brunner-Williams</surname><firstname>E.</firstname></personname></author>
- <author><personname><surname>Manning</surname><firstname>B.</firstname></personname></author>
- </authorgroup>
- <citetitle>Domain Name System (DNS) IANA Considerations</citetitle>
- <pubdate>September 2000</pubdate>
- </biblioentry>
- </bibliodiv>
- <bibliodiv><info><title><acronym>DNS</acronym> Operations</title></info>
-
- <biblioentry>
- <abbrev>RFC1033</abbrev>
- <author><personname><surname>Lottor</surname><firstname>M.</firstname></personname></author>
- <citetitle>Domain administrators operations guide</citetitle>
- <pubdate>November 1987</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC1537</abbrev>
- <author><personname><surname>Beertema</surname><firstname>P.</firstname></personname></author>
- <citetitle>Common <acronym>DNS</acronym> Data File
- Configuration Errors</citetitle>
- <pubdate>October 1993</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC1912</abbrev>
- <author><personname><surname>Barr</surname><firstname>D.</firstname></personname></author>
- <citetitle>Common <acronym>DNS</acronym> Operational and
- Configuration Errors</citetitle>
- <pubdate>February 1996</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2010</abbrev>
- <authorgroup>
- <author><personname><surname>Manning</surname><firstname>B.</firstname></personname></author>
- <author><personname><firstname>P.</firstname><surname>Vixie</surname></personname></author>
- </authorgroup>
- <citetitle>Operational Criteria for Root Name Servers</citetitle>
- <pubdate>October 1996</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2219</abbrev>
- <authorgroup>
- <author><personname><surname>Hamilton</surname><firstname>M.</firstname></personname></author>
- <author><personname><firstname>R.</firstname><surname>Wright</surname></personname></author>
- </authorgroup>
- <citetitle>Use of <acronym>DNS</acronym> Aliases for
- Network Services</citetitle>
- <pubdate>October 1997</pubdate>
- </biblioentry>
- </bibliodiv>
- <bibliodiv><info><title>Internationalized Domain Names</title></info>
-
- <biblioentry>
- <abbrev>RFC2825</abbrev>
- <authorgroup>
- <author><personname><surname>IAB</surname></personname></author>
- <author><personname><surname>Daigle</surname><firstname>R.</firstname></personname></author>
- </authorgroup>
- <citetitle>A Tangled Web: Issues of I18N, Domain Names,
- and the Other Internet protocols</citetitle>
- <pubdate>May 2000</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC3490</abbrev>
- <authorgroup>
- <author><personname><surname>Faltstrom</surname><firstname>P.</firstname></personname></author>
- <author><personname><surname>Hoffman</surname><firstname>P.</firstname></personname></author>
- <author><personname><surname>Costello</surname><firstname>A.</firstname></personname></author>
- </authorgroup>
- <citetitle>Internationalizing Domain Names in Applications (IDNA)</citetitle>
- <pubdate>March 2003</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC3491</abbrev>
- <authorgroup>
- <author><personname><surname>Hoffman</surname><firstname>P.</firstname></personname></author>
- <author><personname><surname>Blanchet</surname><firstname>M.</firstname></personname></author>
- </authorgroup>
- <citetitle>Nameprep: A Stringprep Profile for Internationalized Domain Names</citetitle>
- <pubdate>March 2003</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC3492</abbrev>
- <authorgroup>
- <author><personname><surname>Costello</surname><firstname>A.</firstname></personname></author>
- </authorgroup>
- <citetitle>Punycode: A Bootstring encoding of Unicode
- for Internationalized Domain Names in
- Applications (IDNA)</citetitle>
- <pubdate>March 2003</pubdate>
- </biblioentry>
- </bibliodiv>
- <bibliodiv><info><title>Other <acronym>DNS</acronym>-related RFCs</title></info>
-
- <note>
- <para>
- Note: the following list of RFCs, although
- <acronym>DNS</acronym>-related, are not
- concerned with implementing software.
- </para>
- </note>
- <biblioentry>
- <abbrev>RFC1464</abbrev>
- <author><personname><surname>Rosenbaum</surname><firstname>R.</firstname></personname></author>
- <citetitle>Using the Domain Name System To Store Arbitrary String
- Attributes</citetitle>
- <pubdate>May 1993</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC1713</abbrev>
- <author><personname><surname>Romao</surname><firstname>A.</firstname></personname></author>
- <citetitle>Tools for <acronym>DNS</acronym> Debugging</citetitle>
- <pubdate>November 1994</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC1794</abbrev>
- <author><personname><surname>Brisco</surname><firstname>T.</firstname></personname></author>
- <citetitle><acronym>DNS</acronym> Support for Load
- Balancing</citetitle>
- <pubdate>April 1995</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2240</abbrev>
- <author><personname><surname>Vaughan</surname><firstname>O.</firstname></personname></author>
- <citetitle>A Legal Basis for Domain Name Allocation</citetitle>
- <pubdate>November 1997</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2345</abbrev>
- <authorgroup>
- <author><personname><surname>Klensin</surname><firstname>J.</firstname></personname></author>
- <author><personname><firstname>T.</firstname><surname>Wolf</surname></personname></author>
- <author><personname><firstname>G.</firstname><surname>Oglesby</surname></personname></author>
- </authorgroup>
- <citetitle>Domain Names and Company Name Retrieval</citetitle>
- <pubdate>May 1998</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2352</abbrev>
- <author><personname><surname>Vaughan</surname><firstname>O.</firstname></personname></author>
- <citetitle>A Convention For Using Legal Names as Domain Names</citetitle>
- <pubdate>May 1998</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC3071</abbrev>
- <authorgroup>
- <author><personname><surname>Klensin</surname><firstname>J.</firstname></personname></author>
- </authorgroup>
- <citetitle>Reflections on the DNS, RFC 1591, and Categories of Domains</citetitle>
- <pubdate>February 2001</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC3258</abbrev>
- <authorgroup>
- <author><personname><surname>Hardie</surname><firstname>T.</firstname></personname></author>
- </authorgroup>
- <citetitle>Distributing Authoritative Name Servers via
- Shared Unicast Addresses</citetitle>
- <pubdate>April 2002</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC3901</abbrev>
- <authorgroup>
- <author><personname><surname>Durand</surname><firstname>A.</firstname></personname></author>
- <author><personname><firstname>J.</firstname><surname>Ihren</surname></personname></author>
- </authorgroup>
- <citetitle>DNS IPv6 Transport Operational Guidelines</citetitle>
- <pubdate>September 2004</pubdate>
- </biblioentry>
- </bibliodiv>
- <bibliodiv><info><title>Obsolete and Unimplemented Experimental RFC</title></info>
-
- <biblioentry>
- <abbrev>RFC1712</abbrev>
- <authorgroup>
- <author><personname><surname>Farrell</surname><firstname>C.</firstname></personname></author>
- <author><personname><firstname>M.</firstname><surname>Schulze</surname></personname></author>
- <author><personname><firstname>S.</firstname><surname>Pleitner</surname></personname></author>
- <author><personname><firstname>D.</firstname><surname>Baldoni</surname></personname></author>
- </authorgroup>
- <citetitle><acronym>DNS</acronym> Encoding of Geographical
- Location</citetitle>
- <pubdate>November 1994</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2673</abbrev>
- <authorgroup>
- <author><personname><surname>Crawford</surname><firstname>M.</firstname></personname></author>
- </authorgroup>
- <citetitle>Binary Labels in the Domain Name System</citetitle>
- <pubdate>August 1999</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2874</abbrev>
- <authorgroup>
- <author><personname><surname>Crawford</surname><firstname>M.</firstname></personname></author>
- <author><personname><surname>Huitema</surname><firstname>C.</firstname></personname></author>
- </authorgroup>
- <citetitle>DNS Extensions to Support IPv6 Address Aggregation
- and Renumbering</citetitle>
- <pubdate>July 2000</pubdate>
- </biblioentry>
- </bibliodiv>
- <bibliodiv><info><title>Obsoleted DNS Security RFCs</title></info>
-
- <note>
- <para>
- Most of these have been consolidated into RFC4033,
- RFC4034 and RFC4035 which collectively describe DNSSECbis.
- </para>
- </note>
- <biblioentry>
- <abbrev>RFC2065</abbrev>
- <authorgroup>
- <author><personname><surname>Eastlake</surname><lineage>3rd</lineage><firstname>D.</firstname></personname></author>
- <author><personname><firstname>C.</firstname><surname>Kaufman</surname></personname></author>
- </authorgroup>
- <citetitle>Domain Name System Security Extensions</citetitle>
- <pubdate>January 1997</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2137</abbrev>
- <author><personname><surname>Eastlake</surname><lineage>3rd</lineage><firstname>D.</firstname></personname></author>
- <citetitle>Secure Domain Name System Dynamic Update</citetitle>
- <pubdate>April 1997</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC2535</abbrev>
- <authorgroup>
- <author><personname><surname>Eastlake</surname><lineage>3rd</lineage><firstname>D.</firstname></personname></author>
- </authorgroup>
- <citetitle>Domain Name System Security Extensions</citetitle>
- <pubdate>March 1999</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC3008</abbrev>
- <authorgroup>
- <author><personname><surname>Wellington</surname><firstname>B.</firstname></personname></author>
- </authorgroup>
- <citetitle>Domain Name System Security (DNSSEC)
- Signing Authority</citetitle>
- <pubdate>November 2000</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC3090</abbrev>
- <authorgroup>
- <author><personname><surname>Lewis</surname><firstname>E.</firstname></personname></author>
- </authorgroup>
- <citetitle>DNS Security Extension Clarification on Zone Status</citetitle>
- <pubdate>March 2001</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC3445</abbrev>
- <authorgroup>
- <author><personname><surname>Massey</surname><firstname>D.</firstname></personname></author>
- <author><personname><surname>Rose</surname><firstname>S.</firstname></personname></author>
- </authorgroup>
- <citetitle>Limiting the Scope of the KEY Resource Record (RR)</citetitle>
- <pubdate>December 2002</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC3655</abbrev>
- <authorgroup>
- <author><personname><surname>Wellington</surname><firstname>B.</firstname></personname></author>
- <author><personname><surname>Gudmundsson</surname><firstname>O.</firstname></personname></author>
- </authorgroup>
- <citetitle>Redefinition of DNS Authenticated Data (AD) bit</citetitle>
- <pubdate>November 2003</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC3658</abbrev>
- <authorgroup>
- <author><personname><surname>Gudmundsson</surname><firstname>O.</firstname></personname></author>
- </authorgroup>
- <citetitle>Delegation Signer (DS) Resource Record (RR)</citetitle>
- <pubdate>December 2003</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC3755</abbrev>
- <authorgroup>
- <author><personname><surname>Weiler</surname><firstname>S.</firstname></personname></author>
- </authorgroup>
- <citetitle>Legacy Resolver Compatibility for Delegation Signer (DS)</citetitle>
- <pubdate>May 2004</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC3757</abbrev>
- <authorgroup>
- <author><personname><surname>Kolkman</surname><firstname>O.</firstname></personname></author>
- <author><personname><surname>Schlyter</surname><firstname>J.</firstname></personname></author>
- <author><personname><surname>Lewis</surname><firstname>E.</firstname></personname></author>
- </authorgroup>
- <citetitle>Domain Name System KEY (DNSKEY) Resource Record
- (RR) Secure Entry Point (SEP) Flag</citetitle>
- <pubdate>April 2004</pubdate>
- </biblioentry>
- <biblioentry>
- <abbrev>RFC3845</abbrev>
- <authorgroup>
- <author><personname><surname>Schlyter</surname><firstname>J.</firstname></personname></author>
- </authorgroup>
- <citetitle>DNS Security (DNSSEC) NextSECure (NSEC) RDATA Format</citetitle>
- <pubdate>August 2004</pubdate>
- </biblioentry>
- </bibliodiv>
- </bibliography>
- </section>
- <section xml:id="internet_drafts"><info><title>Internet Drafts</title></info>
-
- <para>
- Internet Drafts (IDs) are rough-draft working documents of
- the Internet Engineering Task Force. They are, in essence, RFCs
- in the preliminary stages of development. Implementors are
- cautioned not
- to regard IDs as archival, and they should not be quoted or cited
- in any formal documents unless accompanied by the disclaimer that
- they are "works in progress." IDs have a lifespan of six months
- after which they are deleted unless updated by their authors.
- </para>
- </section>
- <section xml:id="more_about_bind"><info><title>Other Documents About <acronym>BIND</acronym></title></info>
-
- <para/>
- <bibliography>
- <biblioentry>
- <authorgroup>
- <author><personname><surname>Albitz</surname><firstname>Paul</firstname></personname></author>
- <author><personname><firstname>Cricket</firstname><surname>Liu</surname></personname></author>
- </authorgroup>
- <citetitle><acronym>DNS</acronym> and <acronym>BIND</acronym></citetitle>
- <copyright>
- <year>1998</year>
- <holder>Sebastopol, CA: O'Reilly and Associates</holder>
- </copyright>
- </biblioentry>
- </bibliography>
- </section>
- </section>
- </appendix>
-
- <appendix xml:id="Bv9ARM.ch12"><info><title>BIND 9 DNS Library Support</title></info>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="libdns.xml"/>
- </appendix>
-
- <reference xml:id="Bv9ARM.ch13"><info><title>Manual pages</title></info>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/dig/dig.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/tools/mdig.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/dig/host.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/delv/delv.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/dig/nslookup.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/python/dnssec-checkds.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/python/dnssec-coverage.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/dnssec/dnssec-dsfromkey.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/dnssec/dnssec-importkey.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/dnssec/dnssec-keyfromlabel.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/dnssec/dnssec-keygen.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/python/dnssec-keymgr.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/dnssec/dnssec-revoke.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/dnssec/dnssec-settime.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/dnssec/dnssec-signzone.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/dnssec/dnssec-verify.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/named/lwresd.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/named/named.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/named/named.conf.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/check/named-checkconf.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/check/named-checkzone.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/tools/named-journalprint.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/tools/named-nzd2nzf.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/tools/named-rrchecker.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/nsupdate/nsupdate.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/rndc/rndc.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/rndc/rndc.conf.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/confgen/rndc-confgen.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/confgen/ddns-confgen.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/tools/arpaname.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/tools/dnstap-read.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/tools/genrandom.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/tools/isc-hmac-fixup.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/tools/nsec3hash.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/pkcs11/pkcs11-destroy.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/pkcs11/pkcs11-list.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/pkcs11/pkcs11-keygen.docbook"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../bin/pkcs11/pkcs11-tokens.docbook"/>
- </reference>
-
- </book>
diff --git a/doc/arm/Bv9ARM.ch01.html b/doc/arm/Bv9ARM.ch01.html
deleted file mode 100644
index a592f1c1..00000000
--- a/doc/arm/Bv9ARM.ch01.html
+++ /dev/null
@@ -1,552 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>Chapter 1. Introduction</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="prev" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="next" href="Bv9ARM.ch02.html" title="Chapter 2. BIND Resource Requirements">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center">Chapter 1. Introduction</th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="Bv9ARM.html">Prev</a> </td>
-<th width="60%" align="center"> </th>
-<td width="20%" align="right"> <a accesskey="n" href="Bv9ARM.ch02.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="chapter">
-<div class="titlepage"><div><div><h1 class="title">
-<a name="Bv9ARM.ch01"></a>Chapter 1. Introduction</h1></div></div></div>
-<div class="toc">
-<p><b>Table of Contents</b></p>
-<dl class="toc">
-<dt><span class="section"><a href="Bv9ARM.ch01.html#doc_scope">Scope of Document</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch01.html#organization">Organization of This Document</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch01.html#conventions">Conventions Used in This Document</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch01.html#dns_overview">The Domain Name System (<acronym class="acronym">DNS</acronym>)</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch01.html#dns_fundamentals">DNS Fundamentals</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch01.html#domain_names">Domains and Domain Names</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch01.html#zones">Zones</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch01.html#auth_servers">Authoritative Name Servers</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch01.html#cache_servers">Caching Name Servers</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch01.html#multi_role">Name Servers in Multiple Roles</a></span></dt>
-</dl></dd>
-</dl>
-</div>
-<p>
- The Internet Domain Name System (<acronym class="acronym">DNS</acronym>)
- consists of the syntax
- to specify the names of entities in the Internet in a hierarchical
- manner, the rules used for delegating authority over names, and the
- system implementation that actually maps names to Internet
- addresses. <acronym class="acronym">DNS</acronym> data is maintained in a
- group of distributed
- hierarchical databases.
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="doc_scope"></a>Scope of Document</h2></div></div></div>
-<p>
- The Berkeley Internet Name Domain
- (<acronym class="acronym">BIND</acronym>) implements a
- domain name server for a number of operating systems. This
- document provides basic information about the installation and
- care of the Internet Systems Consortium (<acronym class="acronym">ISC</acronym>)
- <acronym class="acronym">BIND</acronym> version 9 software package for
- system administrators.
- </p>
-<p>This version of the manual corresponds to BIND version 9.11.</p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="organization"></a>Organization of This Document</h2></div></div></div>
-<p>
- In this document, <span class="emphasis"><em>Chapter 1</em></span> introduces
- the basic <acronym class="acronym">DNS</acronym> and <acronym class="acronym">BIND</acronym> concepts. <span class="emphasis"><em>Chapter 2</em></span>
- describes resource requirements for running <acronym class="acronym">BIND</acronym> in various
- environments. Information in <span class="emphasis"><em>Chapter 3</em></span> is
- <span class="emphasis"><em>task-oriented</em></span> in its presentation and is
- organized functionally, to aid in the process of installing the
- <acronym class="acronym">BIND</acronym> 9 software. The task-oriented
- section is followed by
- <span class="emphasis"><em>Chapter 4</em></span>, which contains more advanced
- concepts that the system administrator may need for implementing
- certain options. <span class="emphasis"><em>Chapter 5</em></span>
- describes the <acronym class="acronym">BIND</acronym> 9 lightweight
- resolver. The contents of <span class="emphasis"><em>Chapter 6</em></span> are
- organized as in a reference manual to aid in the ongoing
- maintenance of the software. <span class="emphasis"><em>Chapter 7</em></span> addresses
- security considerations, and
- <span class="emphasis"><em>Chapter 8</em></span> contains troubleshooting help. The
- main body of the document is followed by several
- <span class="emphasis"><em>appendices</em></span> which contain useful reference
- information, such as a <span class="emphasis"><em>bibliography</em></span> and
- historic information related to <acronym class="acronym">BIND</acronym>
- and the Domain Name
- System.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="conventions"></a>Conventions Used in This Document</h2></div></div></div>
-<p>
- In this document, we use the following general typographic
- conventions:
- </p>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="3.000in" class="1">
-<col width="2.625in" class="2">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p>
- <span class="emphasis"><em>To describe:</em></span>
- </p>
- </td>
-<td>
- <p>
- <span class="emphasis"><em>We use the style:</em></span>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- a pathname, filename, URL, hostname,
- mailing list name, or new term or concept
- </p>
- </td>
-<td>
- <p>
- <code class="filename">Fixed width</code>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- literal user
- input
- </p>
- </td>
-<td>
- <p>
- <strong class="userinput"><code>Fixed Width Bold</code></strong>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- program output
- </p>
- </td>
-<td>
- <p>
- <code class="computeroutput">Fixed Width</code>
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-<p>
- The following conventions are used in descriptions of the
- <acronym class="acronym">BIND</acronym> configuration file:</p>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="3.000in" class="1">
-<col width="2.625in" class="2">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p>
- <span class="emphasis"><em>To describe:</em></span>
- </p>
- </td>
-<td>
- <p>
- <span class="emphasis"><em>We use the style:</em></span>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- keywords
- </p>
- </td>
-<td>
- <p>
- <code class="literal">Fixed Width</code>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- variables
- </p>
- </td>
-<td>
- <p>
- <code class="varname">Fixed Width</code>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- Optional input
- </p>
- </td>
-<td>
- <p>
- [<span class="optional">Text is enclosed in square brackets</span>]
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-<p>
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="dns_overview"></a>The Domain Name System (<acronym class="acronym">DNS</acronym>)</h2></div></div></div>
-<p>
- The purpose of this document is to explain the installation
- and upkeep of the <acronym class="acronym">BIND</acronym> (Berkeley Internet
- Name Domain) software package, and we
- begin by reviewing the fundamentals of the Domain Name System
- (<acronym class="acronym">DNS</acronym>) as they relate to <acronym class="acronym">BIND</acronym>.
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="dns_fundamentals"></a>DNS Fundamentals</h3></div></div></div>
-<p>
- The Domain Name System (DNS) is a hierarchical, distributed
- database. It stores information for mapping Internet host names to
- IP
- addresses and vice versa, mail routing information, and other data
- used by Internet applications.
- </p>
-<p>
- Clients look up information in the DNS by calling a
- <span class="emphasis"><em>resolver</em></span> library, which sends queries to one or
- more <span class="emphasis"><em>name servers</em></span> and interprets the responses.
- The <acronym class="acronym">BIND</acronym> 9 software distribution
- contains a
- name server, <span class="command"><strong>named</strong></span>, and a resolver
- library, <span class="command"><strong>liblwres</strong></span>. The older
- <span class="command"><strong>libbind</strong></span> resolver library is also available
- from ISC as a separate download.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="domain_names"></a>Domains and Domain Names</h3></div></div></div>
-<p>
- The data stored in the DNS is identified by <span class="emphasis"><em>domain names</em></span> that are organized as a tree according to
- organizational or administrative boundaries. Each node of the tree,
- called a <span class="emphasis"><em>domain</em></span>, is given a label. The domain
- name of the
- node is the concatenation of all the labels on the path from the
- node to the <span class="emphasis"><em>root</em></span> node. This is represented
- in written form as a string of labels listed from right to left and
- separated by dots. A label need only be unique within its parent
- domain.
- </p>
-<p>
- For example, a domain name for a host at the
- company <span class="emphasis"><em>Example, Inc.</em></span> could be
- <code class="literal">ourhost.example.com</code>,
- where <code class="literal">com</code> is the
- top level domain to which
- <code class="literal">ourhost.example.com</code> belongs,
- <code class="literal">example</code> is
- a subdomain of <code class="literal">com</code>, and
- <code class="literal">ourhost</code> is the
- name of the host.
- </p>
-<p>
- For administrative purposes, the name space is partitioned into
- areas called <span class="emphasis"><em>zones</em></span>, each starting at a node and
- extending down to the leaf nodes or to nodes where other zones
- start.
- The data for each zone is stored in a <span class="emphasis"><em>name server</em></span>, which answers queries about the zone using the
- <span class="emphasis"><em>DNS protocol</em></span>.
- </p>
-<p>
- The data associated with each domain name is stored in the
- form of <span class="emphasis"><em>resource records</em></span> (<acronym class="acronym">RR</acronym>s).
- Some of the supported resource record types are described in
- <a class="xref" href="Bv9ARM.ch06.html#types_of_resource_records_and_when_to_use_them" title="Types of Resource Records and When to Use Them">the section called &#8220;Types of Resource Records and When to Use Them&#8221;</a>.
- </p>
-<p>
- For more detailed information about the design of the DNS and
- the DNS protocol, please refer to the standards documents listed in
- <a class="xref" href="Bv9ARM.ch11.html#rfcs" title="Request for Comments (RFCs)">the section called &#8220;Request for Comments (RFCs)&#8221;</a>.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="zones"></a>Zones</h3></div></div></div>
-<p>
- To properly operate a name server, it is important to understand
- the difference between a <span class="emphasis"><em>zone</em></span>
- and a <span class="emphasis"><em>domain</em></span>.
- </p>
-<p>
- As stated previously, a zone is a point of delegation in
- the <acronym class="acronym">DNS</acronym> tree. A zone consists of
- those contiguous parts of the domain
- tree for which a name server has complete information and over which
- it has authority. It contains all domain names from a certain point
- downward in the domain tree except those which are delegated to
- other zones. A delegation point is marked by one or more
- <span class="emphasis"><em>NS records</em></span> in the
- parent zone, which should be matched by equivalent NS records at
- the root of the delegated zone.
- </p>
-<p>
- For instance, consider the <code class="literal">example.com</code>
- domain which includes names
- such as <code class="literal">host.aaa.example.com</code> and
- <code class="literal">host.bbb.example.com</code> even though
- the <code class="literal">example.com</code> zone includes
- only delegations for the <code class="literal">aaa.example.com</code> and
- <code class="literal">bbb.example.com</code> zones. A zone can
- map
- exactly to a single domain, but could also include only part of a
- domain, the rest of which could be delegated to other
- name servers. Every name in the <acronym class="acronym">DNS</acronym>
- tree is a
- <span class="emphasis"><em>domain</em></span>, even if it is
- <span class="emphasis"><em>terminal</em></span>, that is, has no
- <span class="emphasis"><em>subdomains</em></span>. Every subdomain is a domain and
- every domain except the root is also a subdomain. The terminology is
- not intuitive and we suggest that you read RFCs 1033, 1034 and 1035
- to
- gain a complete understanding of this difficult and subtle
- topic.
- </p>
-<p>
- Though <acronym class="acronym">BIND</acronym> is called a "domain name
- server",
- it deals primarily in terms of zones. The master and slave
- declarations in the <code class="filename">named.conf</code> file
- specify
- zones, not domains. When you ask some other site if it is willing to
- be a slave server for your <span class="emphasis"><em>domain</em></span>, you are
- actually asking for slave service for some collection of zones.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="auth_servers"></a>Authoritative Name Servers</h3></div></div></div>
-<p>
- Each zone is served by at least
- one <span class="emphasis"><em>authoritative name server</em></span>,
- which contains the complete data for the zone.
- To make the DNS tolerant of server and network failures,
- most zones have two or more authoritative servers, on
- different networks.
- </p>
-<p>
- Responses from authoritative servers have the "authoritative
- answer" (AA) bit set in the response packets. This makes them
- easy to identify when debugging DNS configurations using tools like
- <span class="command"><strong>dig</strong></span> (<a class="xref" href="Bv9ARM.ch03.html#diagnostic_tools" title="Diagnostic Tools">the section called &#8220;Diagnostic Tools&#8221;</a>).
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="primary_master"></a>The Primary Master</h4></div></div></div>
-<p>
- The authoritative server where the master copy of the zone
- data is maintained is called the
- <span class="emphasis"><em>primary master</em></span> server, or simply the
- <span class="emphasis"><em>primary</em></span>. Typically it loads the zone
- contents from some local file edited by humans or perhaps
- generated mechanically from some other local file which is
- edited by humans. This file is called the
- <span class="emphasis"><em>zone file</em></span> or
- <span class="emphasis"><em>master file</em></span>.
- </p>
-<p>
- In some cases, however, the master file may not be edited
- by humans at all, but may instead be the result of
- <span class="emphasis"><em>dynamic update</em></span> operations.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="slave_server"></a>Slave Servers</h4></div></div></div>
-<p>
- The other authoritative servers, the <span class="emphasis"><em>slave</em></span>
- servers (also known as <span class="emphasis"><em>secondary</em></span> servers)
- load
- the zone contents from another server using a replication process
- known as a <span class="emphasis"><em>zone transfer</em></span>. Typically the data
- are
- transferred directly from the primary master, but it is also
- possible
- to transfer it from another slave. In other words, a slave server
- may itself act as a master to a subordinate slave server.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="stealth_server"></a>Stealth Servers</h4></div></div></div>
-<p>
- Usually all of the zone's authoritative servers are listed in
- NS records in the parent zone. These NS records constitute
- a <span class="emphasis"><em>delegation</em></span> of the zone from the parent.
- The authoritative servers are also listed in the zone file itself,
- at the <span class="emphasis"><em>top level</em></span> or <span class="emphasis"><em>apex</em></span>
- of the zone. You can list servers in the zone's top-level NS
- records that are not in the parent's NS delegation, but you cannot
- list servers in the parent's delegation that are not present at
- the zone's top level.
- </p>
-<p>
- A <span class="emphasis"><em>stealth server</em></span> is a server that is
- authoritative for a zone but is not listed in that zone's NS
- records. Stealth servers can be used for keeping a local copy of
- a
- zone to speed up access to the zone's records or to make sure that
- the
- zone is available even if all the "official" servers for the zone
- are
- inaccessible.
- </p>
-<p>
- A configuration where the primary master server itself is a
- stealth server is often referred to as a "hidden primary"
- configuration. One use for this configuration is when the primary
- master
- is behind a firewall and therefore unable to communicate directly
- with the outside world.
- </p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="cache_servers"></a>Caching Name Servers</h3></div></div></div>
-<p>
- The resolver libraries provided by most operating systems are
- <span class="emphasis"><em>stub resolvers</em></span>, meaning that they are not
- capable of
- performing the full DNS resolution process by themselves by talking
- directly to the authoritative servers. Instead, they rely on a
- local
- name server to perform the resolution on their behalf. Such a
- server
- is called a <span class="emphasis"><em>recursive</em></span> name server; it performs
- <span class="emphasis"><em>recursive lookups</em></span> for local clients.
- </p>
-<p>
- To improve performance, recursive servers cache the results of
- the lookups they perform. Since the processes of recursion and
- caching are intimately connected, the terms
- <span class="emphasis"><em>recursive server</em></span> and
- <span class="emphasis"><em>caching server</em></span> are often used synonymously.
- </p>
-<p>
- The length of time for which a record may be retained in
- the cache of a caching name server is controlled by the
- Time To Live (TTL) field associated with each resource record.
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="forwarder"></a>Forwarding</h4></div></div></div>
-<p>
- Even a caching name server does not necessarily perform
- the complete recursive lookup itself. Instead, it can
- <span class="emphasis"><em>forward</em></span> some or all of the queries
- that it cannot satisfy from its cache to another caching name
- server,
- commonly referred to as a <span class="emphasis"><em>forwarder</em></span>.
- </p>
-<p>
- There may be one or more forwarders,
- and they are queried in turn until the list is exhausted or an
- answer
- is found. Forwarders are typically used when you do not
- wish all the servers at a given site to interact directly with the
- rest of
- the Internet servers. A typical scenario would involve a number
- of internal <acronym class="acronym">DNS</acronym> servers and an
- Internet firewall. Servers unable
- to pass packets through the firewall would forward to the server
- that can do it, and that server would query the Internet <acronym class="acronym">DNS</acronym> servers
- on the internal server's behalf.
- </p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="multi_role"></a>Name Servers in Multiple Roles</h3></div></div></div>
-<p>
- The <acronym class="acronym">BIND</acronym> name server can
- simultaneously act as
- a master for some zones, a slave for other zones, and as a caching
- (recursive) server for a set of local clients.
- </p>
-<p>
- However, since the functions of authoritative name service
- and caching/recursive name service are logically separate, it is
- often advantageous to run them on separate server machines.
-
- A server that only provides authoritative name service
- (an <span class="emphasis"><em>authoritative-only</em></span> server) can run with
- recursion disabled, improving reliability and security.
-
- A server that is not authoritative for any zones and only provides
- recursive service to local
- clients (a <span class="emphasis"><em>caching-only</em></span> server)
- does not need to be reachable from the Internet at large and can
- be placed inside a firewall.
- </p>
-</div>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="Bv9ARM.html">Prev</a> </td>
-<td width="20%" align="center"> </td>
-<td width="40%" align="right"> <a accesskey="n" href="Bv9ARM.ch02.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">BIND 9 Administrator Reference Manual </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> Chapter 2. <acronym class="acronym">BIND</acronym> Resource Requirements</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/Bv9ARM.ch02.html b/doc/arm/Bv9ARM.ch02.html
deleted file mode 100644
index 8092d55f..00000000
--- a/doc/arm/Bv9ARM.ch02.html
+++ /dev/null
@@ -1,150 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>Chapter 2. BIND Resource Requirements</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="prev" href="Bv9ARM.ch01.html" title="Chapter 1. Introduction">
-<link rel="next" href="Bv9ARM.ch03.html" title="Chapter 3. Name Server Configuration">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center">Chapter 2. <acronym class="acronym">BIND</acronym> Resource Requirements</th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="Bv9ARM.ch01.html">Prev</a> </td>
-<th width="60%" align="center"> </th>
-<td width="20%" align="right"> <a accesskey="n" href="Bv9ARM.ch03.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="chapter">
-<div class="titlepage"><div><div><h1 class="title">
-<a name="Bv9ARM.ch02"></a>Chapter 2. <acronym class="acronym">BIND</acronym> Resource Requirements</h1></div></div></div>
-<div class="toc">
-<p><b>Table of Contents</b></p>
-<dl class="toc">
-<dt><span class="section"><a href="Bv9ARM.ch02.html#hw_req">Hardware requirements</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch02.html#cpu_req">CPU Requirements</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch02.html#mem_req">Memory Requirements</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch02.html#intensive_env">Name Server Intensive Environment Issues</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch02.html#supported_os">Supported Operating Systems</a></span></dt>
-</dl>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="hw_req"></a>Hardware requirements</h2></div></div></div>
-<p>
- <acronym class="acronym">DNS</acronym> hardware requirements have
- traditionally been quite modest.
- For many installations, servers that have been pensioned off from
- active duty have performed admirably as <acronym class="acronym">DNS</acronym> servers.
- </p>
-<p>
- The DNSSEC features of <acronym class="acronym">BIND</acronym> 9
- may prove to be quite
- CPU intensive however, so organizations that make heavy use of these
- features may wish to consider larger systems for these applications.
- <acronym class="acronym">BIND</acronym> 9 is fully multithreaded, allowing
- full utilization of
- multiprocessor systems for installations that need it.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="cpu_req"></a>CPU Requirements</h2></div></div></div>
-<p>
- CPU requirements for <acronym class="acronym">BIND</acronym> 9 range from
- i486-class machines
- for serving of static zones without caching, to enterprise-class
- machines if you intend to process many dynamic updates and DNSSEC
- signed zones, serving many thousands of queries per second.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="mem_req"></a>Memory Requirements</h2></div></div></div>
-<p>
- The memory of the server has to be large enough to fit the
- cache and zones loaded off disk. The <span class="command"><strong>max-cache-size</strong></span>
- option can be used to limit the amount of memory used by the cache,
- at the expense of reducing cache hit rates and causing more <acronym class="acronym">DNS</acronym>
- traffic.
- Additionally, if additional section caching
- (<a class="xref" href="Bv9ARM.ch06.html#acache" title="Additional Section Caching">the section called &#8220;Additional Section Caching&#8221;</a>) is enabled,
- the <span class="command"><strong>max-acache-size</strong></span> option can be used to
- limit the amount
- of memory used by the mechanism.
- It is still good practice to have enough memory to load
- all zone and cache data into memory &#8212; unfortunately, the best
- way
- to determine this for a given installation is to watch the name server
- in operation. After a few weeks the server process should reach
- a relatively stable size where entries are expiring from the cache as
- fast as they are being inserted.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="intensive_env"></a>Name Server Intensive Environment Issues</h2></div></div></div>
-<p>
- For name server intensive environments, there are two alternative
- configurations that may be used. The first is where clients and
- any second-level internal name servers query a main name server, which
- has enough memory to build a large cache. This approach minimizes
- the bandwidth used by external name lookups. The second alternative
- is to set up second-level internal name servers to make queries
- independently.
- In this configuration, none of the individual machines needs to
- have as much memory or CPU power as in the first alternative, but
- this has the disadvantage of making many more external queries,
- as none of the name servers share their cached data.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="supported_os"></a>Supported Operating Systems</h2></div></div></div>
-<p>
- ISC <acronym class="acronym">BIND</acronym> 9 compiles and runs on a large
- number
- of Unix-like operating systems and on
- Microsoft Windows Server 2003 and 2008, and Windows XP and Vista.
- For an up-to-date
- list of supported systems, see the README file in the top level
- directory
- of the BIND 9 source distribution.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="Bv9ARM.ch01.html">Prev</a> </td>
-<td width="20%" align="center"> </td>
-<td width="40%" align="right"> <a accesskey="n" href="Bv9ARM.ch03.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">Chapter 1. Introduction </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> Chapter 3. Name Server Configuration</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/Bv9ARM.ch03.html b/doc/arm/Bv9ARM.ch03.html
deleted file mode 100644
index 5d23600c..00000000
--- a/doc/arm/Bv9ARM.ch03.html
+++ /dev/null
@@ -1,666 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>Chapter 3. Name Server Configuration</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="prev" href="Bv9ARM.ch02.html" title="Chapter 2. BIND Resource Requirements">
-<link rel="next" href="Bv9ARM.ch04.html" title="Chapter 4. Advanced DNS Features">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center">Chapter 3. Name Server Configuration</th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="Bv9ARM.ch02.html">Prev</a> </td>
-<th width="60%" align="center"> </th>
-<td width="20%" align="right"> <a accesskey="n" href="Bv9ARM.ch04.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="chapter">
-<div class="titlepage"><div><div><h1 class="title">
-<a name="Bv9ARM.ch03"></a>Chapter 3. Name Server Configuration</h1></div></div></div>
-<div class="toc">
-<p><b>Table of Contents</b></p>
-<dl class="toc">
-<dt><span class="section"><a href="Bv9ARM.ch03.html#sample_configuration">Sample Configurations</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch03.html#cache_only_sample">A Caching-only Name Server</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch03.html#auth_only_sample">An Authoritative-only Name Server</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch03.html#load_balancing">Load Balancing</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch03.html#ns_operations">Name Server Operations</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch03.html#tools">Tools for Use With the Name Server Daemon</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch03.html#signals">Signals</a></span></dt>
-</dl></dd>
-</dl>
-</div>
-<p>
- In this chapter we provide some suggested configurations along
- with guidelines for their use. We suggest reasonable values for
- certain option settings.
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="sample_configuration"></a>Sample Configurations</h2></div></div></div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="cache_only_sample"></a>A Caching-only Name Server</h3></div></div></div>
-<p>
- The following sample configuration is appropriate for a caching-only
- name server for use by clients internal to a corporation. All
- queries
- from outside clients are refused using the <span class="command"><strong>allow-query</strong></span>
- option. Alternatively, the same effect could be achieved using
- suitable
- firewall rules.
- </p>
-<pre class="programlisting">
-// Two corporate subnets we wish to allow queries from.
-acl corpnets { 192.168.4.0/24; 192.168.7.0/24; };
-options {
- // Working directory
- directory "/etc/namedb";
-
- allow-query { corpnets; };
-};
-// Provide a reverse mapping for the loopback
-// address 127.0.0.1
-zone "0.0.127.in-addr.arpa" {
- type master;
- file "localhost.rev";
- notify no;
-};
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="auth_only_sample"></a>An Authoritative-only Name Server</h3></div></div></div>
-<p>
- This sample configuration is for an authoritative-only server
- that is the master server for "<code class="filename">example.com</code>"
- and a slave for the subdomain "<code class="filename">eng.example.com</code>".
- </p>
-<pre class="programlisting">
-options {
- // Working directory
- directory "/etc/namedb";
- // Do not allow access to cache
- allow-query-cache { none; };
- // This is the default
- allow-query { any; };
- // Do not provide recursive service
- recursion no;
-};
-
-// Provide a reverse mapping for the loopback
-// address 127.0.0.1
-zone "0.0.127.in-addr.arpa" {
- type master;
- file "localhost.rev";
- notify no;
-};
-// We are the master server for example.com
-zone "example.com" {
- type master;
- file "example.com.db";
- // IP addresses of slave servers allowed to
- // transfer example.com
- allow-transfer {
- 192.168.4.14;
- 192.168.5.53;
- };
-};
-// We are a slave server for eng.example.com
-zone "eng.example.com" {
- type slave;
- file "eng.example.com.bk";
- // IP address of eng.example.com master server
- masters { 192.168.4.12; };
-};
-</pre>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="load_balancing"></a>Load Balancing</h2></div></div></div>
-<p>
- A primitive form of load balancing can be achieved in
- the <acronym class="acronym">DNS</acronym> by using multiple records
- (such as multiple A records) for one name.
- </p>
-<p>
- For example, if you have three WWW servers with network addresses
- of 10.0.0.1, 10.0.0.2 and 10.0.0.3, a set of records such as the
- following means that clients will connect to each machine one third
- of the time:
- </p>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="0.875in" class="1">
-<col width="0.500in" class="2">
-<col width="0.750in" class="3">
-<col width="0.750in" class="4">
-<col width="2.028in" class="5">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p>
- Name
- </p>
- </td>
-<td>
- <p>
- TTL
- </p>
- </td>
-<td>
- <p>
- CLASS
- </p>
- </td>
-<td>
- <p>
- TYPE
- </p>
- </td>
-<td>
- <p>
- Resource Record (RR) Data
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="literal">www</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">600</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">IN</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">A</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">10.0.0.1</code>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p></p>
- </td>
-<td>
- <p>
- <code class="literal">600</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">IN</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">A</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">10.0.0.2</code>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p></p>
- </td>
-<td>
- <p>
- <code class="literal">600</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">IN</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">A</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">10.0.0.3</code>
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-<p>
- When a resolver queries for these records, <acronym class="acronym">BIND</acronym> will rotate
- them and respond to the query with the records in a different
- order. In the example above, clients will randomly receive
- records in the order 1, 2, 3; 2, 3, 1; and 3, 1, 2. Most clients
- will use the first record returned and discard the rest.
- </p>
-<p>
- For more detail on ordering responses, check the
- <span class="command"><strong>rrset-order</strong></span> sub-statement in the
- <span class="command"><strong>options</strong></span> statement, see
- <a class="xref" href="Bv9ARM.ch06.html#rrset_ordering" title="RRset Ordering">RRset Ordering</a>.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="ns_operations"></a>Name Server Operations</h2></div></div></div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="tools"></a>Tools for Use With the Name Server Daemon</h3></div></div></div>
-<p>
- This section describes several indispensable diagnostic,
- administrative and monitoring tools available to the system
- administrator for controlling and debugging the name server
- daemon.
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="diagnostic_tools"></a>Diagnostic Tools</h4></div></div></div>
-<p>
- The <span class="command"><strong>dig</strong></span>, <span class="command"><strong>host</strong></span>, and
- <span class="command"><strong>nslookup</strong></span> programs are all command
- line tools
- for manually querying name servers. They differ in style and
- output format.
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><a name="dig"></a><span class="command"><strong>dig</strong></span></span></dt>
-<dd>
-<p>
- The domain information groper (<span class="command"><strong>dig</strong></span>)
- is the most versatile and complete of these lookup tools.
- It has two modes: simple interactive
- mode for a single query, and batch mode which executes a
- query for
- each in a list of several query lines. All query options are
- accessible
- from the command line.
- </p>
-<div class="cmdsynopsis"><p><code class="command">dig</code> [@<em class="replaceable"><code>server</code></em>] <em class="replaceable"><code>domain</code></em> [<em class="replaceable"><code>query-type</code></em>] [<em class="replaceable"><code>query-class</code></em>] [+<em class="replaceable"><code>query-option</code></em>] [-<em class="replaceable"><code>dig-option</code></em>] [%<em class="replaceable"><code>comment</code></em>]</p></div>
-<p>
- The usual simple use of <span class="command"><strong>dig</strong></span> will take the form
- </p>
-<p class="simpara">
- <span class="command"><strong>dig @server domain query-type query-class</strong></span>
- </p>
-<p>
- For more information and a list of available commands and
- options, see the <span class="command"><strong>dig</strong></span> man
- page.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>host</strong></span></span></dt>
-<dd>
-<p>
- The <span class="command"><strong>host</strong></span> utility emphasizes
- simplicity
- and ease of use. By default, it converts
- between host names and Internet addresses, but its
- functionality
- can be extended with the use of options.
- </p>
-<div class="cmdsynopsis"><p><code class="command">host</code> [-aCdlnrsTwv] [-c <em class="replaceable"><code>class</code></em>] [-N <em class="replaceable"><code>ndots</code></em>] [-t <em class="replaceable"><code>type</code></em>] [-W <em class="replaceable"><code>timeout</code></em>] [-R <em class="replaceable"><code>retries</code></em>] [-m <em class="replaceable"><code>flag</code></em>] [-4] [-6] <em class="replaceable"><code>hostname</code></em> [<em class="replaceable"><code>server</code></em>]</p></div>
-<p>
- For more information and a list of available commands and
- options, see the <span class="command"><strong>host</strong></span> man
- page.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>nslookup</strong></span></span></dt>
-<dd>
-<p><span class="command"><strong>nslookup</strong></span>
- has two modes: interactive and
- non-interactive. Interactive mode allows the user to
- query name servers for information about various
- hosts and domains or to print a list of hosts in a
- domain. Non-interactive mode is used to print just
- the name and requested information for a host or
- domain.
- </p>
-<div class="cmdsynopsis"><p><code class="command">nslookup</code> [-option...] [[<em class="replaceable"><code>host-to-find</code></em>] | [- [server]]]</p></div>
-<p>
- Interactive mode is entered when no arguments are given (the
- default name server will be used) or when the first argument
- is a
- hyphen (`-') and the second argument is the host name or
- Internet address
- of a name server.
- </p>
-<p>
- Non-interactive mode is used when the name or Internet
- address
- of the host to be looked up is given as the first argument.
- The
- optional second argument specifies the host name or address
- of a name server.
- </p>
-<p>
- Due to its arcane user interface and frequently inconsistent
- behavior, we do not recommend the use of <span class="command"><strong>nslookup</strong></span>.
- Use <span class="command"><strong>dig</strong></span> instead.
- </p>
-</dd>
-</dl></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="admin_tools"></a>Administrative Tools</h4></div></div></div>
-<p>
- Administrative tools play an integral part in the management
- of a server.
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt>
-<a name="named-checkconf"></a><span class="term"><span class="command"><strong>named-checkconf</strong></span></span>
-</dt>
-<dd>
-<p>
- The <span class="command"><strong>named-checkconf</strong></span> program
- checks the syntax of a <code class="filename">named.conf</code> file.
- </p>
-<div class="cmdsynopsis"><p><code class="command">named-checkconf</code> [-jvz] [-t <em class="replaceable"><code>directory</code></em>] [<em class="replaceable"><code>filename</code></em>]</p></div>
-</dd>
-<dt>
-<a name="named-checkzone"></a><span class="term"><span class="command"><strong>named-checkzone</strong></span></span>
-</dt>
-<dd>
-<p>
- The <span class="command"><strong>named-checkzone</strong></span> program
- checks a master file for
- syntax and consistency.
- </p>
-<div class="cmdsynopsis"><p><code class="command">named-checkzone</code> [-djqvD] [-c <em class="replaceable"><code>class</code></em>] [-o <em class="replaceable"><code>output</code></em>] [-t <em class="replaceable"><code>directory</code></em>] [-w <em class="replaceable"><code>directory</code></em>] [-k <em class="replaceable"><code>(ignore|warn|fail)</code></em>] [-n <em class="replaceable"><code>(ignore|warn|fail)</code></em>] [-W <em class="replaceable"><code>(ignore|warn)</code></em>] <em class="replaceable"><code>zone</code></em> [<em class="replaceable"><code>filename</code></em>]</p></div>
-</dd>
-<dt>
-<a name="named-compilezone"></a><span class="term"><span class="command"><strong>named-compilezone</strong></span></span>
-</dt>
-<dd><p>
- Similar to <span class="command"><strong>named-checkzone,</strong></span> but
- it always dumps the zone content to a specified file
- (typically in a different format).
- </p></dd>
-<dt>
-<a name="rndc"></a><span class="term"><span class="command"><strong>rndc</strong></span></span>
-</dt>
-<dd>
-<p>
- The remote name daemon control
- (<span class="command"><strong>rndc</strong></span>) program allows the
- system
- administrator to control the operation of a name server.
- Since <acronym class="acronym">BIND</acronym> 9.2, <span class="command"><strong>rndc</strong></span>
- supports all the commands of the BIND 8 <span class="command"><strong>ndc</strong></span>
- utility except <span class="command"><strong>ndc start</strong></span> and
- <span class="command"><strong>ndc restart</strong></span>, which were also
- not supported in <span class="command"><strong>ndc</strong></span>'s
- channel mode.
- If you run <span class="command"><strong>rndc</strong></span> without any
- options
- it will display a usage message as follows:
- </p>
-<div class="cmdsynopsis"><p><code class="command">rndc</code> [-c <em class="replaceable"><code>config</code></em>] [-s <em class="replaceable"><code>server</code></em>] [-p <em class="replaceable"><code>port</code></em>] [-y <em class="replaceable"><code>key</code></em>] <em class="replaceable"><code>command</code></em> [<em class="replaceable"><code>command</code></em>...]</p></div>
-<p>See <a class="xref" href="man.rndc.html" title="rndc"><span class="refentrytitle"><span class="application">rndc</span></span>(8)</a> for details of
- the available <span class="command"><strong>rndc</strong></span> commands.
- </p>
-<p>
- <span class="command"><strong>rndc</strong></span> requires a configuration file,
- since all
- communication with the server is authenticated with
- digital signatures that rely on a shared secret, and
- there is no way to provide that secret other than with a
- configuration file. The default location for the
- <span class="command"><strong>rndc</strong></span> configuration file is
- <code class="filename">/etc/rndc.conf</code>, but an
- alternate
- location can be specified with the <code class="option">-c</code>
- option. If the configuration file is not found,
- <span class="command"><strong>rndc</strong></span> will also look in
- <code class="filename">/etc/rndc.key</code> (or whatever
- <code class="varname">sysconfdir</code> was defined when
- the <acronym class="acronym">BIND</acronym> build was
- configured).
- The <code class="filename">rndc.key</code> file is
- generated by
- running <span class="command"><strong>rndc-confgen -a</strong></span> as
- described in
- <a class="xref" href="Bv9ARM.ch06.html#controls_statement_definition_and_usage" title="controls Statement Definition and Usage">the section called &#8220;<span class="command"><strong>controls</strong></span> Statement Definition and
- Usage&#8221;</a>.
- </p>
-<p>
- The format of the configuration file is similar to
- that of <code class="filename">named.conf</code>, but
- limited to
- only four statements, the <span class="command"><strong>options</strong></span>,
- <span class="command"><strong>key</strong></span>, <span class="command"><strong>server</strong></span> and
- <span class="command"><strong>include</strong></span>
- statements. These statements are what associate the
- secret keys to the servers with which they are meant to
- be shared. The order of statements is not
- significant.
- </p>
-<p>
- The <span class="command"><strong>options</strong></span> statement has
- three clauses:
- <span class="command"><strong>default-server</strong></span>, <span class="command"><strong>default-key</strong></span>,
- and <span class="command"><strong>default-port</strong></span>.
- <span class="command"><strong>default-server</strong></span> takes a
- host name or address argument and represents the server
- that will
- be contacted if no <code class="option">-s</code>
- option is provided on the command line.
- <span class="command"><strong>default-key</strong></span> takes
- the name of a key as its argument, as defined by a <span class="command"><strong>key</strong></span> statement.
- <span class="command"><strong>default-port</strong></span> specifies the
- port to which
- <span class="command"><strong>rndc</strong></span> should connect if no
- port is given on the command line or in a
- <span class="command"><strong>server</strong></span> statement.
- </p>
-<p>
- The <span class="command"><strong>key</strong></span> statement defines a
- key to be used
- by <span class="command"><strong>rndc</strong></span> when authenticating
- with
- <span class="command"><strong>named</strong></span>. Its syntax is
- identical to the
- <span class="command"><strong>key</strong></span> statement in <code class="filename">named.conf</code>.
- The keyword <strong class="userinput"><code>key</code></strong> is
- followed by a key name, which must be a valid
- domain name, though it need not actually be hierarchical;
- thus,
- a string like "<strong class="userinput"><code>rndc_key</code></strong>" is a valid
- name.
- The <span class="command"><strong>key</strong></span> statement has two
- clauses:
- <span class="command"><strong>algorithm</strong></span> and <span class="command"><strong>secret</strong></span>.
- While the configuration parser will accept any string as the
- argument
- to algorithm, currently only the strings
- "<strong class="userinput"><code>hmac-md5</code></strong>",
- "<strong class="userinput"><code>hmac-sha1</code></strong>",
- "<strong class="userinput"><code>hmac-sha224</code></strong>",
- "<strong class="userinput"><code>hmac-sha256</code></strong>",
- "<strong class="userinput"><code>hmac-sha384</code></strong>"
- and "<strong class="userinput"><code>hmac-sha512</code></strong>"
- have any meaning. The secret is a base-64 encoded string
- as specified in RFC 3548.
- </p>
-<p>
- The <span class="command"><strong>server</strong></span> statement
- associates a key
- defined using the <span class="command"><strong>key</strong></span>
- statement with a server.
- The keyword <strong class="userinput"><code>server</code></strong> is followed by a
- host name or address. The <span class="command"><strong>server</strong></span> statement
- has two clauses: <span class="command"><strong>key</strong></span> and <span class="command"><strong>port</strong></span>.
- The <span class="command"><strong>key</strong></span> clause specifies the
- name of the key
- to be used when communicating with this server, and the
- <span class="command"><strong>port</strong></span> clause can be used to
- specify the port <span class="command"><strong>rndc</strong></span> should
- connect
- to on the server.
- </p>
-<p>
- A sample minimal configuration file is as follows:
- </p>
-<pre class="programlisting">
-key rndc_key {
- algorithm "hmac-sha256";
- secret
- "c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K";
-};
-options {
- default-server 127.0.0.1;
- default-key rndc_key;
-};
-</pre>
-<p>
- This file, if installed as <code class="filename">/etc/rndc.conf</code>,
- would allow the command:
- </p>
-<p>
- <code class="prompt">$ </code><strong class="userinput"><code>rndc reload</code></strong>
- </p>
-<p>
- to connect to 127.0.0.1 port 953 and cause the name server
- to reload, if a name server on the local machine were
- running with
- following controls statements:
- </p>
-<pre class="programlisting">
-controls {
- inet 127.0.0.1
- allow { localhost; } keys { rndc_key; };
-};
-</pre>
-<p>
- and it had an identical key statement for
- <code class="literal">rndc_key</code>.
- </p>
-<p>
- Running the <span class="command"><strong>rndc-confgen</strong></span>
- program will
- conveniently create a <code class="filename">rndc.conf</code>
- file for you, and also display the
- corresponding <span class="command"><strong>controls</strong></span>
- statement that you need to
- add to <code class="filename">named.conf</code>.
- Alternatively,
- you can run <span class="command"><strong>rndc-confgen -a</strong></span>
- to set up
- a <code class="filename">rndc.key</code> file and not
- modify
- <code class="filename">named.conf</code> at all.
- </p>
-</dd>
-</dl></div>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="signals"></a>Signals</h3></div></div></div>
-<p>
- Certain UNIX signals cause the name server to take specific
- actions, as described in the following table. These signals can
- be sent using the <span class="command"><strong>kill</strong></span> command.
- </p>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="1.125in" class="1">
-<col width="4.000in" class="2">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p><span class="command"><strong>SIGHUP</strong></span></p>
- </td>
-<td>
- <p>
- Causes the server to read <code class="filename">named.conf</code> and
- reload the database.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>SIGTERM</strong></span></p>
- </td>
-<td>
- <p>
- Causes the server to clean up and exit.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>SIGINT</strong></span></p>
- </td>
-<td>
- <p>
- Causes the server to clean up and exit.
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="Bv9ARM.ch02.html">Prev</a> </td>
-<td width="20%" align="center"> </td>
-<td width="40%" align="right"> <a accesskey="n" href="Bv9ARM.ch04.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">Chapter 2. <acronym class="acronym">BIND</acronym> Resource Requirements </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> Chapter 4. Advanced DNS Features</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/Bv9ARM.ch04.html b/doc/arm/Bv9ARM.ch04.html
deleted file mode 100644
index 456c4316..00000000
--- a/doc/arm/Bv9ARM.ch04.html
+++ /dev/null
@@ -1,2679 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>Chapter 4. Advanced DNS Features</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="prev" href="Bv9ARM.ch03.html" title="Chapter 3. Name Server Configuration">
-<link rel="next" href="Bv9ARM.ch05.html" title="Chapter 5. The BIND 9 Lightweight Resolver">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center">Chapter 4. Advanced DNS Features</th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="Bv9ARM.ch03.html">Prev</a> </td>
-<th width="60%" align="center"> </th>
-<td width="20%" align="right"> <a accesskey="n" href="Bv9ARM.ch05.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="chapter">
-<div class="titlepage"><div><div><h1 class="title">
-<a name="Bv9ARM.ch04"></a>Chapter 4. Advanced DNS Features</h1></div></div></div>
-<div class="toc">
-<p><b>Table of Contents</b></p>
-<dl class="toc">
-<dt><span class="section"><a href="Bv9ARM.ch04.html#notify">Notify</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#dynamic_update">Dynamic Update</a></span></dt>
-<dd><dl><dt><span class="section"><a href="Bv9ARM.ch04.html#journal">The journal file</a></span></dt></dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#incremental_zone_transfers">Incremental Zone Transfers (IXFR)</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#split_dns">Split DNS</a></span></dt>
-<dd><dl><dt><span class="section"><a href="Bv9ARM.ch04.html#split_dns_sample">Example split DNS setup</a></span></dt></dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#tsig">TSIG</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.6.5">Generating a Shared Key</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.6.6">Loading A New Key</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.6.7">Instructing the Server to Use a Key</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.6.8">TSIG-Based Access Control</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.6.9">Errors</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#tkey">TKEY</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#sig0">SIG(0)</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#DNSSEC">DNSSEC</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#dnssec_keys">Generating Keys</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#dnssec_signing">Signing the Zone</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#dnssec_config">Configuring Servers</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#dnssec.dynamic.zones">DNSSEC, Dynamic Zones, and Automatic Signing</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.3">Converting from insecure to secure</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.8">Dynamic DNS update method</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.16">Fully automatic zone signing</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.25">Private-type records</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.32">DNSKEY rollovers</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.34">Dynamic DNS update method</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.39">Automatic key rollovers</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.41">NSEC3PARAM rollovers via UPDATE</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.43">Converting from NSEC to NSEC3</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.45">Converting from NSEC3 to NSEC</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.47">Converting from secure to insecure</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.51">Periodic re-signing</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.53">NSEC3 and OPTOUT</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#rfc5011.support">Dynamic Trust Anchor Management</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.11.3">Validating Resolver</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.11.4">Authoritative Server</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#pkcs11">PKCS#11 (Cryptoki) support</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.12.6">Prerequisites</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.12.7">Native PKCS#11</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.12.8">OpenSSL-based PKCS#11</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.12.9">PKCS#11 Tools</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.12.10">Using the HSM</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.12.11">Specifying the engine on the command line</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.12.12">Running named with automatic zone re-signing</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#dlz-info">DLZ (Dynamically Loadable Zones)</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.13.6">Configuring DLZ</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.13.7">Sample DLZ Driver</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#dyndb-info">DynDB (Dynamic Database)</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.14.5">Configuring DynDB</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.14.6">Sample DynDB Module</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#catz-info">Catalog Zones</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.15.4">Principle of Operation</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.15.5">Configuring Catalog Zones</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.15.6">Catalog Zone format</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#ipv6">IPv6 Support in <acronym class="acronym">BIND</acronym> 9</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.16.6">Address Lookups Using AAAA Records</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.16.7">Address to Name Lookups Using Nibble Format</a></span></dt>
-</dl></dd>
-</dl>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="notify"></a>Notify</h2></div></div></div>
-<p>
- <acronym class="acronym">DNS</acronym> NOTIFY is a mechanism that allows master
- servers to notify their slave servers of changes to a zone's data. In
- response to a <span class="command"><strong>NOTIFY</strong></span> from a master server, the
- slave will check to see that its version of the zone is the
- current version and, if not, initiate a zone transfer.
- </p>
-<p>
- For more information about <acronym class="acronym">DNS</acronym>
- <span class="command"><strong>NOTIFY</strong></span>, see the description of the
- <span class="command"><strong>notify</strong></span> option in <a class="xref" href="Bv9ARM.ch06.html#boolean_options" title="Boolean Options">the section called &#8220;Boolean Options&#8221;</a> and
- the description of the zone option <span class="command"><strong>also-notify</strong></span> in
- <a class="xref" href="Bv9ARM.ch06.html#zone_transfers" title="Zone Transfers">the section called &#8220;Zone Transfers&#8221;</a>. The <span class="command"><strong>NOTIFY</strong></span>
- protocol is specified in RFC 1996.
- </p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- As a slave zone can also be a master to other slaves, <span class="command"><strong>named</strong></span>,
- by default, sends <span class="command"><strong>NOTIFY</strong></span> messages for every zone
- it loads. Specifying <span class="command"><strong>notify master-only;</strong></span> will
- cause <span class="command"><strong>named</strong></span> to only send <span class="command"><strong>NOTIFY</strong></span> for master
- zones that it loads.
- </p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="dynamic_update"></a>Dynamic Update</h2></div></div></div>
-<p>
- Dynamic Update is a method for adding, replacing or deleting
- records in a master server by sending it a special form of DNS
- messages. The format and meaning of these messages is specified
- in RFC 2136.
- </p>
-<p>
- Dynamic update is enabled by including an
- <span class="command"><strong>allow-update</strong></span> or an <span class="command"><strong>update-policy</strong></span>
- clause in the <span class="command"><strong>zone</strong></span> statement.
- </p>
-<p>
- If the zone's <span class="command"><strong>update-policy</strong></span> is set to
- <strong class="userinput"><code>local</code></strong>, updates to the zone
- will be permitted for the key <code class="varname">local-ddns</code>,
- which will be generated by <span class="command"><strong>named</strong></span> at startup.
- See <a class="xref" href="Bv9ARM.ch06.html#dynamic_update_policies" title="Dynamic Update Policies">the section called &#8220;Dynamic Update Policies&#8221;</a> for more details.
- </p>
-<p>
- Dynamic updates using Kerberos signed requests can be made
- using the TKEY/GSS protocol by setting either the
- <span class="command"><strong>tkey-gssapi-keytab</strong></span> option, or alternatively
- by setting both the <span class="command"><strong>tkey-gssapi-credential</strong></span>
- and <span class="command"><strong>tkey-domain</strong></span> options. Once enabled,
- Kerberos signed requests will be matched against the update
- policies for the zone, using the Kerberos principal as the
- signer for the request.
- </p>
-<p>
- Updating of secure zones (zones using DNSSEC) follows RFC
- 3007: RRSIG, NSEC and NSEC3 records affected by updates are
- automatically regenerated by the server using an online
- zone key. Update authorization is based on transaction
- signatures and an explicit server policy.
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="journal"></a>The journal file</h3></div></div></div>
-<p>
- All changes made to a zone using dynamic update are stored
- in the zone's journal file. This file is automatically created
- by the server when the first dynamic update takes place.
- The name of the journal file is formed by appending the extension
- <code class="filename">.jnl</code> to the name of the
- corresponding zone
- file unless specifically overridden. The journal file is in a
- binary format and should not be edited manually.
- </p>
-<p>
- The server will also occasionally write ("dump")
- the complete contents of the updated zone to its zone file.
- This is not done immediately after
- each dynamic update, because that would be too slow when a large
- zone is updated frequently. Instead, the dump is delayed by
- up to 15 minutes, allowing additional updates to take place.
- During the dump process, transient files will be created
- with the extensions <code class="filename">.jnw</code> and
- <code class="filename">.jbk</code>; under ordinary circumstances, these
- will be removed when the dump is complete, and can be safely
- ignored.
- </p>
-<p>
- When a server is restarted after a shutdown or crash, it will replay
- the journal file to incorporate into the zone any updates that
- took
- place after the last zone dump.
- </p>
-<p>
- Changes that result from incoming incremental zone transfers are
- also
- journalled in a similar way.
- </p>
-<p>
- The zone files of dynamic zones cannot normally be edited by
- hand because they are not guaranteed to contain the most recent
- dynamic changes &#8212; those are only in the journal file.
- The only way to ensure that the zone file of a dynamic zone
- is up to date is to run <span class="command"><strong>rndc stop</strong></span>.
- </p>
-<p>
- If you have to make changes to a dynamic zone
- manually, the following procedure will work:
- Disable dynamic updates to the zone using
- <span class="command"><strong>rndc freeze <em class="replaceable"><code>zone</code></em></strong></span>.
- This will update the zone's master file with the changes
- stored in its <code class="filename">.jnl</code> file.
- Edit the zone file. Run
- <span class="command"><strong>rndc thaw <em class="replaceable"><code>zone</code></em></strong></span>
- to reload the changed zone and re-enable dynamic updates.
- </p>
-<p>
- <span class="command"><strong>rndc sync <em class="replaceable"><code>zone</code></em></strong></span>
- will update the zone file with changes from the journal file
- without stopping dynamic updates; this may be useful for viewing
- the current zone state. To remove the <code class="filename">.jnl</code>
- file after updating the zone file, use
- <span class="command"><strong>rndc sync -clean</strong></span>.
- </p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="incremental_zone_transfers"></a>Incremental Zone Transfers (IXFR)</h2></div></div></div>
-<p>
- The incremental zone transfer (IXFR) protocol is a way for
- slave servers to transfer only changed data, instead of having to
- transfer the entire zone. The IXFR protocol is specified in RFC
- 1995. See <a class="xref" href="Bv9ARM.ch11.html#proposed_standards" title="Proposed Standards">Proposed Standards</a>.
- </p>
-<p>
- When acting as a master, <acronym class="acronym">BIND</acronym> 9
- supports IXFR for those zones
- where the necessary change history information is available. These
- include master zones maintained by dynamic update and slave zones
- whose data was obtained by IXFR. For manually maintained master
- zones, and for slave zones obtained by performing a full zone
- transfer (AXFR), IXFR is supported only if the option
- <span class="command"><strong>ixfr-from-differences</strong></span> is set
- to <strong class="userinput"><code>yes</code></strong>.
- </p>
-<p>
- When acting as a slave, <acronym class="acronym">BIND</acronym> 9 will
- attempt to use IXFR unless
- it is explicitly disabled. For more information about disabling
- IXFR, see the description of the <span class="command"><strong>request-ixfr</strong></span> clause
- of the <span class="command"><strong>server</strong></span> statement.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="split_dns"></a>Split DNS</h2></div></div></div>
-<p>
- Setting up different views, or visibility, of the DNS space to
- internal and external resolvers is usually referred to as a
- <span class="emphasis"><em>Split DNS</em></span> setup. There are several
- reasons an organization would want to set up its DNS this way.
- </p>
-<p>
- One common reason for setting up a DNS system this way is
- to hide "internal" DNS information from "external" clients on the
- Internet. There is some debate as to whether or not this is actually
- useful.
- Internal DNS information leaks out in many ways (via email headers,
- for example) and most savvy "attackers" can find the information
- they need using other means.
- However, since listing addresses of internal servers that
- external clients cannot possibly reach can result in
- connection delays and other annoyances, an organization may
- choose to use a Split DNS to present a consistent view of itself
- to the outside world.
- </p>
-<p>
- Another common reason for setting up a Split DNS system is
- to allow internal networks that are behind filters or in RFC 1918
- space (reserved IP space, as documented in RFC 1918) to resolve DNS
- on the Internet. Split DNS can also be used to allow mail from outside
- back in to the internal network.
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="split_dns_sample"></a>Example split DNS setup</h3></div></div></div>
-<p>
- Let's say a company named <span class="emphasis"><em>Example, Inc.</em></span>
- (<code class="literal">example.com</code>)
- has several corporate sites that have an internal network with
- reserved
- Internet Protocol (IP) space and an external demilitarized zone (DMZ),
- or "outside" section of a network, that is available to the public.
- </p>
-<p>
- <span class="emphasis"><em>Example, Inc.</em></span> wants its internal clients
- to be able to resolve external hostnames and to exchange mail with
- people on the outside. The company also wants its internal resolvers
- to have access to certain internal-only zones that are not available
- at all outside of the internal network.
- </p>
-<p>
- In order to accomplish this, the company will set up two sets
- of name servers. One set will be on the inside network (in the
- reserved
- IP space) and the other set will be on bastion hosts, which are
- "proxy"
- hosts that can talk to both sides of its network, in the DMZ.
- </p>
-<p>
- The internal servers will be configured to forward all queries,
- except queries for <code class="filename">site1.internal</code>, <code class="filename">site2.internal</code>, <code class="filename">site1.example.com</code>,
- and <code class="filename">site2.example.com</code>, to the servers
- in the
- DMZ. These internal servers will have complete sets of information
- for <code class="filename">site1.example.com</code>, <code class="filename">site2.example.com</code>, <code class="filename">site1.internal</code>,
- and <code class="filename">site2.internal</code>.
- </p>
-<p>
- To protect the <code class="filename">site1.internal</code> and <code class="filename">site2.internal</code> domains,
- the internal name servers must be configured to disallow all queries
- to these domains from any external hosts, including the bastion
- hosts.
- </p>
-<p>
- The external servers, which are on the bastion hosts, will
- be configured to serve the "public" version of the <code class="filename">site1</code> and <code class="filename">site2.example.com</code> zones.
- This could include things such as the host records for public servers
- (<code class="filename">www.example.com</code> and <code class="filename">ftp.example.com</code>),
- and mail exchange (MX) records (<code class="filename">a.mx.example.com</code> and <code class="filename">b.mx.example.com</code>).
- </p>
-<p>
- In addition, the public <code class="filename">site1</code> and <code class="filename">site2.example.com</code> zones
- should have special MX records that contain wildcard (`*') records
- pointing to the bastion hosts. This is needed because external mail
- servers do not have any other way of looking up how to deliver mail
- to those internal hosts. With the wildcard records, the mail will
- be delivered to the bastion host, which can then forward it on to
- internal hosts.
- </p>
-<p>
- Here's an example of a wildcard MX record:
- </p>
-<pre class="programlisting">* IN MX 10 external1.example.com.</pre>
-<p>
- Now that they accept mail on behalf of anything in the internal
- network, the bastion hosts will need to know how to deliver mail
- to internal hosts. In order for this to work properly, the resolvers
- on
- the bastion hosts will need to be configured to point to the internal
- name servers for DNS resolution.
- </p>
-<p>
- Queries for internal hostnames will be answered by the internal
- servers, and queries for external hostnames will be forwarded back
- out to the DNS servers on the bastion hosts.
- </p>
-<p>
- In order for all this to work properly, internal clients will
- need to be configured to query <span class="emphasis"><em>only</em></span> the internal
- name servers for DNS queries. This could also be enforced via
- selective
- filtering on the network.
- </p>
-<p>
- If everything has been set properly, <span class="emphasis"><em>Example, Inc.</em></span>'s
- internal clients will now be able to:
- </p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem">
- Look up any hostnames in the <code class="literal">site1</code>
- and
- <code class="literal">site2.example.com</code> zones.
- </li>
-<li class="listitem">
- Look up any hostnames in the <code class="literal">site1.internal</code> and
- <code class="literal">site2.internal</code> domains.
- </li>
-<li class="listitem">Look up any hostnames on the Internet.</li>
-<li class="listitem">Exchange mail with both internal and external people.</li>
-</ul></div>
-<p>
- Hosts on the Internet will be able to:
- </p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem">
- Look up any hostnames in the <code class="literal">site1</code>
- and
- <code class="literal">site2.example.com</code> zones.
- </li>
-<li class="listitem">
- Exchange mail with anyone in the <code class="literal">site1</code> and
- <code class="literal">site2.example.com</code> zones.
- </li>
-</ul></div>
-<p>
- Here is an example configuration for the setup we just
- described above. Note that this is only configuration information;
- for information on how to configure your zone files, see <a class="xref" href="Bv9ARM.ch03.html#sample_configuration" title="Sample Configurations">the section called &#8220;Sample Configurations&#8221;</a>.
- </p>
-<p>
- Internal DNS server config:
- </p>
-<pre class="programlisting">
-
-acl internals { 172.16.72.0/24; 192.168.1.0/24; };
-
-acl externals { <code class="varname">bastion-ips-go-here</code>; };
-
-options {
- ...
- ...
- forward only;
- // forward to external servers
- forwarders {
- <code class="varname">bastion-ips-go-here</code>;
- };
- // sample allow-transfer (no one)
- allow-transfer { none; };
- // restrict query access
- allow-query { internals; externals; };
- // restrict recursion
- allow-recursion { internals; };
- ...
- ...
-};
-
-// sample master zone
-zone "site1.example.com" {
- type master;
- file "m/site1.example.com";
- // do normal iterative resolution (do not forward)
- forwarders { };
- allow-query { internals; externals; };
- allow-transfer { internals; };
-};
-
-// sample slave zone
-zone "site2.example.com" {
- type slave;
- file "s/site2.example.com";
- masters { 172.16.72.3; };
- forwarders { };
- allow-query { internals; externals; };
- allow-transfer { internals; };
-};
-
-zone "site1.internal" {
- type master;
- file "m/site1.internal";
- forwarders { };
- allow-query { internals; };
- allow-transfer { internals; }
-};
-
-zone "site2.internal" {
- type slave;
- file "s/site2.internal";
- masters { 172.16.72.3; };
- forwarders { };
- allow-query { internals };
- allow-transfer { internals; }
-};
-</pre>
-<p>
- External (bastion host) DNS server config:
- </p>
-<pre class="programlisting">
-acl internals { 172.16.72.0/24; 192.168.1.0/24; };
-
-acl externals { bastion-ips-go-here; };
-
-options {
- ...
- ...
- // sample allow-transfer (no one)
- allow-transfer { none; };
- // default query access
- allow-query { any; };
- // restrict cache access
- allow-query-cache { internals; externals; };
- // restrict recursion
- allow-recursion { internals; externals; };
- ...
- ...
-};
-
-// sample slave zone
-zone "site1.example.com" {
- type master;
- file "m/site1.foo.com";
- allow-transfer { internals; externals; };
-};
-
-zone "site2.example.com" {
- type slave;
- file "s/site2.foo.com";
- masters { another_bastion_host_maybe; };
- allow-transfer { internals; externals; }
-};
-</pre>
-<p>
- In the <code class="filename">resolv.conf</code> (or equivalent) on
- the bastion host(s):
- </p>
-<pre class="programlisting">
-search ...
-nameserver 172.16.72.2
-nameserver 172.16.72.3
-nameserver 172.16.72.4
-</pre>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="tsig"></a>TSIG</h2></div></div></div>
-<p>
- TSIG (Transaction SIGnatures) is a mechanism for authenticating DNS
- messages, originally specified in RFC 2845. It allows DNS messages
- to be cryptographically signed using a shared secret. TSIG can
- be used in any DNS transaction, as a way to restrict access to
- certain server functions (e.g., recursive queries) to authorized
- clients when IP-based access control is insufficient or needs to
- be overridden, or as a way to ensure message authenticity when it
- is critical to the integrity of the server, such as with dynamic
- UPDATE messages or zone transfers from a master to a slave server.
- </p>
-<p>
- This is a guide to setting up TSIG in <acronym class="acronym">BIND</acronym>.
- It describes the configuration syntax and the process of creating
- TSIG keys.
- </p>
-<p>
- <span class="command"><strong>named</strong></span> supports TSIG for server-to-server
- communication, and some of the tools included with
- <acronym class="acronym">BIND</acronym> support it for sending messages to
- <span class="command"><strong>named</strong></span>:
- </p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem">
-<a class="xref" href="man.nsupdate.html" title="nsupdate"><span class="refentrytitle"><span class="application">nsupdate</span></span>(1)</a> supports TSIG via the
- <code class="option">-k</code>, <code class="option">-l</code> and
- <code class="option">-y</code> command line options, or via
- the <span class="command"><strong>key</strong></span> command when running
- interactively.
- </li>
-<li class="listitem">
-<a class="xref" href="man.dig.html" title="dig"><span class="refentrytitle">dig</span>(1)</a> supports TSIG via the
- <code class="option">-k</code> and <code class="option">-y</code> command
- line options.
- </li>
-</ul></div>
-<p>
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.6.5"></a>Generating a Shared Key</h3></div></div></div>
-<p>
- TSIG keys can be generated using the <span class="command"><strong>tsig-keygen</strong></span>
- command; the output of the command is a <span class="command"><strong>key</strong></span> directive
- suitable for inclusion in <code class="filename">named.conf</code>. The
- key name, algorithm and size can be specified by command line parameters;
- the defaults are "tsig-key", HMAC-SHA256, and 256 bits, respectively.
- </p>
-<p>
- Any string which is a valid DNS name can be used as a key name.
- For example, a key to be shared between servers called
- <span class="emphasis"><em>host1</em></span> and <span class="emphasis"><em>host2</em></span> could
- be called "host1-host2.", and this key could be generated using:
- </p>
-<pre class="programlisting">
- $ tsig-keygen host1-host2. &gt; host1-host2.key
-</pre>
-<p>
- This key may then be copied to both hosts. The key name and secret
- must be identical on both hosts.
- (Note: copying a shared secret from one server to another is beyond
- the scope of the DNS. A secure transport mechanism should be used:
- secure FTP, SSL, ssh, telephone, encrypted email, etc.)
- </p>
-<p>
- <span class="command"><strong>tsig-keygen</strong></span> can also be run as
- <span class="command"><strong>ddns-confgen</strong></span>, in which case its output includes
- additional configuration text for setting up dynamic DNS in
- <span class="command"><strong>named</strong></span>. See <a class="xref" href="man.ddns-confgen.html" title="ddns-confgen"><span class="refentrytitle"><span class="application">ddns-confgen</span></span>(8)</a>
- for details.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.6.6"></a>Loading A New Key</h3></div></div></div>
-<p>
- For a key shared between servers called
- <span class="emphasis"><em>host1</em></span> and <span class="emphasis"><em>host2</em></span>,
- the following could be added to each server's
- <code class="filename">named.conf</code> file:
- </p>
-<pre class="programlisting">
-key "host1-host2." {
- algorithm hmac-sha256;
- secret "DAopyf1mhCbFVZw7pgmNPBoLUq8wEUT7UuPoLENP2HY=";
-};
-</pre>
-<p>
- (This is the same key generated above using
- <span class="command"><strong>tsig-keygen</strong></span>.)
- </p>
-<p>
- Since this text contains a secret, it
- is recommended that either <code class="filename">named.conf</code> not be
- world-readable, or that the <span class="command"><strong>key</strong></span> directive
- be stored in a file which is not world-readable, and which is
- included in <code class="filename">named.conf</code> via the
- <span class="command"><strong>include</strong></span> directive.
- </p>
-<p>
- Once a key has been added to <code class="filename">named.conf</code> and the
- server has been restarted or reconfigured, the server can recognize
- the key. If the server receives a message signed by the
- key, it will be able to verify the signature. If the signature
- is valid, the response will be signed using the same key.
- </p>
-<p>
- TSIG keys that are known to a server can be listed using the
- command <span class="command"><strong>rndc tsig-list</strong></span>.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.6.7"></a>Instructing the Server to Use a Key</h3></div></div></div>
-<p>
- A server sending a request to another server must be told whether
- to use a key, and if so, which key to use.
- </p>
-<p>
- For example, a key may be specified for each server in the
- <span class="command"><strong>masters</strong></span> statement in the definition of a
- slave zone; in this case, all SOA QUERY messages, NOTIFY
- messages, and zone transfer requests (AXFR or IXFR) will be
- signed using the specified key. Keys may also be specified
- in the <span class="command"><strong>also-notify</strong></span> statement of a master
- or slave zone, causing NOTIFY messages to be signed using
- the specified key.
- </p>
-<p>
- Keys can also be specified in a <span class="command"><strong>server</strong></span>
- directive. Adding the following on <span class="emphasis"><em>host1</em></span>,
- if the IP address of <span class="emphasis"><em>host2</em></span> is 10.1.2.3, would
- cause <span class="emphasis"><em>all</em></span> requests from <span class="emphasis"><em>host1</em></span>
- to <span class="emphasis"><em>host2</em></span>, including normal DNS queries, to be
- signed using the <span class="command"><strong>host1-host2.</strong></span> key:
- </p>
-<pre class="programlisting">
-server 10.1.2.3 {
- keys { host1-host2. ;};
-};
-</pre>
-<p>
- Multiple keys may be present in the <span class="command"><strong>keys</strong></span>
- statement, but only the first one is used. As this directive does
- not contain secrets, it can be used in a world-readable file.
- </p>
-<p>
- Requests sent by <span class="emphasis"><em>host2</em></span> to <span class="emphasis"><em>host1</em></span>
- would <span class="emphasis"><em>not</em></span> be signed, unless a similar
- <span class="command"><strong>server</strong></span> directive were in <span class="emphasis"><em>host2</em></span>'s
- configuration file.
- </p>
-<p>
- Whenever any server sends a TSIG-signed DNS request, it will expect
- the response to be signed with the same key. If a response is not
- signed, or if the signature is not valid, the response will be
- rejected.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.6.8"></a>TSIG-Based Access Control</h3></div></div></div>
-<p>
- TSIG keys may be specified in ACL definitions and ACL directives
- such as <span class="command"><strong>allow-query</strong></span>, <span class="command"><strong>allow-transfer</strong></span>
- and <span class="command"><strong>allow-update</strong></span>.
- The above key would be denoted in an ACL element as
- <span class="command"><strong>key host1-host2.</strong></span>
- </p>
-<p>
- An example of an <span class="command"><strong>allow-update</strong></span> directive using
- a TSIG key:
- </p>
-<pre class="programlisting">
-allow-update { !{ !localnets; any; }; key host1-host2. ;};
-</pre>
-<p>
- This allows dynamic updates to succeed only if the UPDATE
- request comes from an address in <span class="command"><strong>localnets</strong></span>,
- <span class="emphasis"><em>and</em></span> if it is signed using the
- <span class="command"><strong>host1-host2.</strong></span> key.
- </p>
-<p>
- See <a class="xref" href="Bv9ARM.ch06.html#dynamic_update_policies" title="Dynamic Update Policies">the section called &#8220;Dynamic Update Policies&#8221;</a> for a discussion of
- the more flexible <span class="command"><strong>update-policy</strong></span> statement.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.6.9"></a>Errors</h3></div></div></div>
-<p>
- Processing of TSIG-signed messages can result in several errors:
- </p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem">
- If a TSIG-aware server receives a message signed by an
- unknown key, the response will be unsigned, with the TSIG
- extended error code set to BADKEY.
- </li>
-<li class="listitem">
- If a TSIG-aware server receives a message from a known key
- but with an invalid signature, the response will be unsigned,
- with the TSIG extended error code set to BADSIG.
- </li>
-<li class="listitem">
- If a TSIG-aware server receives a message with a time
- outside of the allowed range, the response will be signed, with
- the TSIG extended error code set to BADTIME, and the time values
- will be adjusted so that the response can be successfully
- verified.
- </li>
-</ul></div>
-<p>
- In all of the above cases, the server will return a response code
- of NOTAUTH (not authenticated).
- </p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="tkey"></a>TKEY</h2></div></div></div>
-<p>
- TKEY (Transaction KEY) is a mechanism for automatically negotiating
- a shared secret between two hosts, originally specified in RFC 2930.
- </p>
-<p>
- There are several TKEY "modes" that specify how a key is to be
- generated or assigned. <acronym class="acronym">BIND</acronym> 9 implements only
- one of these modes: Diffie-Hellman key exchange. Both hosts are
- required to have a KEY record with algorithm DH (though this
- record is not required to be present in a zone).
- </p>
-<p>
- The TKEY process is initiated by a client or server by sending
- a query of type TKEY to a TKEY-aware server. The query must include
- an appropriate KEY record in the additional section, and
- must be signed using either TSIG or SIG(0) with a previously
- established key. The server's response, if successful, will
- contain a TKEY record in its answer section. After this transaction,
- both participants will have enough information to calculate a
- shared secret using Diffie-Hellman key exchange. The shared secret
- can then be used by to sign subsequent transactions between the
- two servers.
- </p>
-<p>
- TSIG keys known by the server, including TKEY-negotiated keys, can
- be listed using <span class="command"><strong>rndc tsig-list</strong></span>.
- </p>
-<p>
- TKEY-negotiated keys can be deleted from a server using
- <span class="command"><strong>rndc tsig-delete</strong></span>. This can also be done via
- the TKEY protocol itself, by sending an authenticated TKEY query
- specifying the "key deletion" mode.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="sig0"></a>SIG(0)</h2></div></div></div>
-<p>
- <acronym class="acronym">BIND</acronym> partially supports DNSSEC SIG(0)
- transaction signatures as specified in RFC 2535 and RFC 2931.
- SIG(0) uses public/private keys to authenticate messages. Access control
- is performed in the same manner as TSIG keys; privileges can be
- granted or denied in ACL directives based on the key name.
- </p>
-<p>
- When a SIG(0) signed message is received, it will only be
- verified if the key is known and trusted by the server. The
- server will not attempt to recursively fetch or validate the
- key.
- </p>
-<p>
- SIG(0) signing of multiple-message TCP streams is not supported.
- </p>
-<p>
- The only tool shipped with <acronym class="acronym">BIND</acronym> 9 that
- generates SIG(0) signed messages is <span class="command"><strong>nsupdate</strong></span>.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="DNSSEC"></a>DNSSEC</h2></div></div></div>
-<p>
- Cryptographic authentication of DNS information is possible
- through the DNS Security (<span class="emphasis"><em>DNSSEC-bis</em></span>) extensions,
- defined in RFC 4033, RFC 4034, and RFC 4035.
- This section describes the creation and use of DNSSEC signed zones.
- </p>
-<p>
- In order to set up a DNSSEC secure zone, there are a series
- of steps which must be followed. <acronym class="acronym">BIND</acronym>
- 9 ships
- with several tools
- that are used in this process, which are explained in more detail
- below. In all cases, the <code class="option">-h</code> option prints a
- full list of parameters. Note that the DNSSEC tools require the
- keyset files to be in the working directory or the
- directory specified by the <code class="option">-d</code> option, and
- that the tools shipped with BIND 9.2.x and earlier are not compatible
- with the current ones.
- </p>
-<p>
- There must also be communication with the administrators of
- the parent and/or child zone to transmit keys. A zone's security
- status must be indicated by the parent zone for a DNSSEC capable
- resolver to trust its data. This is done through the presence
- or absence of a <code class="literal">DS</code> record at the
- delegation
- point.
- </p>
-<p>
- For other servers to trust data in this zone, they must
- either be statically configured with this zone's zone key or the
- zone key of another zone above this one in the DNS tree.
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="dnssec_keys"></a>Generating Keys</h3></div></div></div>
-<p>
- The <span class="command"><strong>dnssec-keygen</strong></span> program is used to
- generate keys.
- </p>
-<p>
- A secure zone must contain one or more zone keys. The
- zone keys will sign all other records in the zone, as well as
- the zone keys of any secure delegated zones. Zone keys must
- have the same name as the zone, a name type of
- <span class="command"><strong>ZONE</strong></span>, and must be usable for
- authentication.
- It is recommended that zone keys use a cryptographic algorithm
- designated as "mandatory to implement" by the IETF; currently
- the only one is RSASHA1.
- </p>
-<p>
- The following command will generate a 768-bit RSASHA1 key for
- the <code class="filename">child.example</code> zone:
- </p>
-<p>
- <strong class="userinput"><code>dnssec-keygen -a RSASHA1 -b 768 -n ZONE child.example.</code></strong>
- </p>
-<p>
- Two output files will be produced:
- <code class="filename">Kchild.example.+005+12345.key</code> and
- <code class="filename">Kchild.example.+005+12345.private</code>
- (where
- 12345 is an example of a key tag). The key filenames contain
- the key name (<code class="filename">child.example.</code>),
- algorithm (3
- is DSA, 1 is RSAMD5, 5 is RSASHA1, etc.), and the key tag (12345 in
- this case).
- The private key (in the <code class="filename">.private</code>
- file) is
- used to generate signatures, and the public key (in the
- <code class="filename">.key</code> file) is used for signature
- verification.
- </p>
-<p>
- To generate another key with the same properties (but with
- a different key tag), repeat the above command.
- </p>
-<p>
- The <span class="command"><strong>dnssec-keyfromlabel</strong></span> program is used
- to get a key pair from a crypto hardware and build the key
- files. Its usage is similar to <span class="command"><strong>dnssec-keygen</strong></span>.
- </p>
-<p>
- The public keys should be inserted into the zone file by
- including the <code class="filename">.key</code> files using
- <span class="command"><strong>$INCLUDE</strong></span> statements.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="dnssec_signing"></a>Signing the Zone</h3></div></div></div>
-<p>
- The <span class="command"><strong>dnssec-signzone</strong></span> program is used
- to sign a zone.
- </p>
-<p>
- Any <code class="filename">keyset</code> files corresponding to
- secure subzones should be present. The zone signer will
- generate <code class="literal">NSEC</code>, <code class="literal">NSEC3</code>
- and <code class="literal">RRSIG</code> records for the zone, as
- well as <code class="literal">DS</code> for the child zones if
- <code class="literal">'-g'</code> is specified. If <code class="literal">'-g'</code>
- is not specified, then DS RRsets for the secure child
- zones need to be added manually.
- </p>
-<p>
- The following command signs the zone, assuming it is in a
- file called <code class="filename">zone.child.example</code>. By
- default, all zone keys which have an available private key are
- used to generate signatures.
- </p>
-<p>
- <strong class="userinput"><code>dnssec-signzone -o child.example zone.child.example</code></strong>
- </p>
-<p>
- One output file is produced:
- <code class="filename">zone.child.example.signed</code>. This
- file
- should be referenced by <code class="filename">named.conf</code>
- as the
- input file for the zone.
- </p>
-<p><span class="command"><strong>dnssec-signzone</strong></span>
- will also produce a keyset and dsset files and optionally a
- dlvset file. These are used to provide the parent zone
- administrators with the <code class="literal">DNSKEYs</code> (or their
- corresponding <code class="literal">DS</code> records) that are the
- secure entry point to the zone.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="dnssec_config"></a>Configuring Servers</h3></div></div></div>
-<p>
- To enable <span class="command"><strong>named</strong></span> to respond appropriately
- to DNS requests from DNSSEC aware clients,
- <span class="command"><strong>dnssec-enable</strong></span> must be set to yes.
- (This is the default setting.)
- </p>
-<p>
- To enable <span class="command"><strong>named</strong></span> to validate answers from
- other servers, the <span class="command"><strong>dnssec-enable</strong></span> option
- must be set to <strong class="userinput"><code>yes</code></strong>, and the
- <span class="command"><strong>dnssec-validation</strong></span> options must be set to
- <strong class="userinput"><code>yes</code></strong> or <strong class="userinput"><code>auto</code></strong>.
- </p>
-<p>
- If <span class="command"><strong>dnssec-validation</strong></span> is set to
- <strong class="userinput"><code>auto</code></strong>, then a default
- trust anchor for the DNS root zone will be used.
- If it is set to <strong class="userinput"><code>yes</code></strong>, however,
- then at least one trust anchor must be configured
- with a <span class="command"><strong>trusted-keys</strong></span> or
- <span class="command"><strong>managed-keys</strong></span> statement in
- <code class="filename">named.conf</code>, or DNSSEC validation
- will not occur. The default setting is
- <strong class="userinput"><code>yes</code></strong>.
- </p>
-<p>
- <span class="command"><strong>trusted-keys</strong></span> are copies of DNSKEY RRs
- for zones that are used to form the first link in the
- cryptographic chain of trust. All keys listed in
- <span class="command"><strong>trusted-keys</strong></span> (and corresponding zones)
- are deemed to exist and only the listed keys will be used
- to validated the DNSKEY RRset that they are from.
- </p>
-<p>
- <span class="command"><strong>managed-keys</strong></span> are trusted keys which are
- automatically kept up to date via RFC 5011 trust anchor
- maintenance.
- </p>
-<p>
- <span class="command"><strong>trusted-keys</strong></span> and
- <span class="command"><strong>managed-keys</strong></span> are described in more detail
- later in this document.
- </p>
-<p>
- Unlike <acronym class="acronym">BIND</acronym> 8, <acronym class="acronym">BIND</acronym>
- 9 does not verify signatures on load, so zone keys for
- authoritative zones do not need to be specified in the
- configuration file.
- </p>
-<p>
- After DNSSEC gets established, a typical DNSSEC configuration
- will look something like the following. It has one or
- more public keys for the root. This allows answers from
- outside the organization to be validated. It will also
- have several keys for parts of the namespace the organization
- controls. These are here to ensure that <span class="command"><strong>named</strong></span>
- is immune to compromises in the DNSSEC components of the security
- of parent zones.
- </p>
-<pre class="programlisting">
-managed-keys {
- /* Root Key */
- "." initial-key 257 3 3 "BNY4wrWM1nCfJ+CXd0rVXyYmobt7sEEfK3clRbGaTwS
- JxrGkxJWoZu6I7PzJu/E9gx4UC1zGAHlXKdE4zYIpRh
- aBKnvcC2U9mZhkdUpd1Vso/HAdjNe8LmMlnzY3zy2Xy
- 4klWOADTPzSv9eamj8V18PHGjBLaVtYvk/ln5ZApjYg
- hf+6fElrmLkdaz MQ2OCnACR817DF4BBa7UR/beDHyp
- 5iWTXWSi6XmoJLbG9Scqc7l70KDqlvXR3M/lUUVRbke
- g1IPJSidmK3ZyCllh4XSKbje/45SKucHgnwU5jefMtq
- 66gKodQj+MiA21AfUVe7u99WzTLzY3qlxDhxYQQ20FQ
- 97S+LKUTpQcq27R7AT3/V5hRQxScINqwcz4jYqZD2fQ
- dgxbcDTClU0CRBdiieyLMNzXG3";
-};
-
-trusted-keys {
- /* Key for our organization's forward zone */
- example.com. 257 3 5 "AwEAAaxPMcR2x0HbQV4WeZB6oEDX+r0QM6
- 5KbhTjrW1ZaARmPhEZZe3Y9ifgEuq7vZ/z
- GZUdEGNWy+JZzus0lUptwgjGwhUS1558Hb
- 4JKUbbOTcM8pwXlj0EiX3oDFVmjHO444gL
- kBOUKUf/mC7HvfwYH/Be22GnClrinKJp1O
- g4ywzO9WglMk7jbfW33gUKvirTHr25GL7S
- TQUzBb5Usxt8lgnyTUHs1t3JwCY5hKZ6Cq
- FxmAVZP20igTixin/1LcrgX/KMEGd/biuv
- F4qJCyduieHukuY3H4XMAcR+xia2nIUPvm
- /oyWR8BW/hWdzOvnSCThlHf3xiYleDbt/o
- 1OTQ09A0=";
-
- /* Key for our reverse zone. */
- 2.0.192.IN-ADDRPA.NET. 257 3 5 "AQOnS4xn/IgOUpBPJ3bogzwc
- xOdNax071L18QqZnQQQAVVr+i
- LhGTnNGp3HoWQLUIzKrJVZ3zg
- gy3WwNT6kZo6c0tszYqbtvchm
- gQC8CzKojM/W16i6MG/eafGU3
- siaOdS0yOI6BgPsw+YZdzlYMa
- IJGf4M4dyoKIhzdZyQ2bYQrjy
- Q4LB0lC7aOnsMyYKHHYeRvPxj
- IQXmdqgOJGq+vsevG06zW+1xg
- YJh9rCIfnm1GX/KMgxLPG2vXT
- D/RnLX+D3T3UL7HJYHJhAZD5L
- 59VvjSPsZJHeDCUyWYrvPZesZ
- DIRvhDD52SKvbheeTJUm6Ehkz
- ytNN2SN96QRk8j/iI8ib";
-};
-
-options {
- ...
- dnssec-enable yes;
- dnssec-validation yes;
-};
-</pre>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- None of the keys listed in this example are valid. In particular,
- the root key is not valid.
- </p>
-</div>
-<p>
- When DNSSEC validation is enabled and properly configured,
- the resolver will reject any answers from signed, secure zones
- which fail to validate, and will return SERVFAIL to the client.
- </p>
-<p>
- Responses may fail to validate for any of several reasons,
- including missing, expired, or invalid signatures, a key which
- does not match the DS RRset in the parent zone, or an insecure
- response from a zone which, according to its parent, should have
- been secure.
- </p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- When the validator receives a response from an unsigned zone
- that has a signed parent, it must confirm with the parent
- that the zone was intentionally left unsigned. It does
- this by verifying, via signed and validated NSEC/NSEC3 records,
- that the parent zone contains no DS records for the child.
- </p>
-<p>
- If the validator <span class="emphasis"><em>can</em></span> prove that the zone
- is insecure, then the response is accepted. However, if it
- cannot, then it must assume an insecure response to be a
- forgery; it rejects the response and logs an error.
- </p>
-<p>
- The logged error reads "insecurity proof failed" and
- "got insecure response; parent indicates it should be secure".
- (Prior to BIND 9.7, the logged error was "not insecure".
- This referred to the zone, not the response.)
- </p>
-</div>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="dnssec.dynamic.zones"></a>DNSSEC, Dynamic Zones, and Automatic Signing</h2></div></div></div>
-<p>As of BIND 9.7.0 it is possible to change a dynamic zone
- from insecure to signed and back again. A secure zone can use
- either NSEC or NSEC3 chains.</p>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.3"></a>Converting from insecure to secure</h3></div></div></div></div>
-<p>Changing a zone from insecure to secure can be done in two
- ways: using a dynamic DNS update, or the
- <span class="command"><strong>auto-dnssec</strong></span> zone option.</p>
-<p>For either method, you need to configure
- <span class="command"><strong>named</strong></span> so that it can see the
- <code class="filename">K*</code> files which contain the public and private
- parts of the keys that will be used to sign the zone. These files
- will have been generated by
- <span class="command"><strong>dnssec-keygen</strong></span>. You can do this by placing them
- in the key-directory, as specified in
- <code class="filename">named.conf</code>:</p>
-<pre class="programlisting">
- zone example.net {
- type master;
- update-policy local;
- file "dynamic/example.net/example.net";
- key-directory "dynamic/example.net";
- };
-</pre>
-<p>If one KSK and one ZSK DNSKEY key have been generated, this
- configuration will cause all records in the zone to be signed
- with the ZSK, and the DNSKEY RRset to be signed with the KSK as
- well. An NSEC chain will be generated as part of the initial
- signing process.</p>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.8"></a>Dynamic DNS update method</h3></div></div></div></div>
-<p>To insert the keys via dynamic update:</p>
-<pre class="screen">
- % nsupdate
- &gt; ttl 3600
- &gt; update add example.net DNSKEY 256 3 7 AwEAAZn17pUF0KpbPA2c7Gz76Vb18v0teKT3EyAGfBfL8eQ8al35zz3Y I1m/SAQBxIqMfLtIwqWPdgthsu36azGQAX8=
- &gt; update add example.net DNSKEY 257 3 7 AwEAAd/7odU/64o2LGsifbLtQmtO8dFDtTAZXSX2+X3e/UNlq9IHq3Y0 XtC0Iuawl/qkaKVxXe2lo8Ct+dM6UehyCqk=
- &gt; send
-</pre>
-<p>While the update request will complete almost immediately,
- the zone will not be completely signed until
- <span class="command"><strong>named</strong></span> has had time to walk the zone and
- generate the NSEC and RRSIG records. The NSEC record at the apex
- will be added last, to signal that there is a complete NSEC
- chain.</p>
-<p>If you wish to sign using NSEC3 instead of NSEC, you should
- add an NSEC3PARAM record to the initial update request. If you
- wish the NSEC3 chain to have the OPTOUT bit set, set it in the
- flags field of the NSEC3PARAM record.</p>
-<pre class="screen">
- % nsupdate
- &gt; ttl 3600
- &gt; update add example.net DNSKEY 256 3 7 AwEAAZn17pUF0KpbPA2c7Gz76Vb18v0teKT3EyAGfBfL8eQ8al35zz3Y I1m/SAQBxIqMfLtIwqWPdgthsu36azGQAX8=
- &gt; update add example.net DNSKEY 257 3 7 AwEAAd/7odU/64o2LGsifbLtQmtO8dFDtTAZXSX2+X3e/UNlq9IHq3Y0 XtC0Iuawl/qkaKVxXe2lo8Ct+dM6UehyCqk=
- &gt; update add example.net NSEC3PARAM 1 1 100 1234567890
- &gt; send
-</pre>
-<p>Again, this update request will complete almost
- immediately; however, the record won't show up until
- <span class="command"><strong>named</strong></span> has had a chance to build/remove the
- relevant chain. A private type record will be created to record
- the state of the operation (see below for more details), and will
- be removed once the operation completes.</p>
-<p>While the initial signing and NSEC/NSEC3 chain generation
- is happening, other updates are possible as well.</p>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.16"></a>Fully automatic zone signing</h3></div></div></div></div>
-<p>To enable automatic signing, add the
- <span class="command"><strong>auto-dnssec</strong></span> option to the zone statement in
- <code class="filename">named.conf</code>.
- <span class="command"><strong>auto-dnssec</strong></span> has two possible arguments:
- <code class="constant">allow</code> or
- <code class="constant">maintain</code>.</p>
-<p>With
- <span class="command"><strong>auto-dnssec allow</strong></span>,
- <span class="command"><strong>named</strong></span> can search the key directory for keys
- matching the zone, insert them into the zone, and use them to
- sign the zone. It will do so only when it receives an
- <span class="command"><strong>rndc sign &lt;zonename&gt;</strong></span>.</p>
-<p>
-
- <span class="command"><strong>auto-dnssec maintain</strong></span> includes the above
- functionality, but will also automatically adjust the zone's
- DNSKEY records on schedule according to the keys' timing metadata.
- (See <a class="xref" href="man.dnssec-keygen.html" title="dnssec-keygen"><span class="refentrytitle"><span class="application">dnssec-keygen</span></span>(8)</a> and
- <a class="xref" href="man.dnssec-settime.html" title="dnssec-settime"><span class="refentrytitle"><span class="application">dnssec-settime</span></span>(8)</a> for more information.)
- </p>
-<p>
- <span class="command"><strong>named</strong></span> will periodically search the key directory
- for keys matching the zone, and if the keys' metadata indicates
- that any change should be made the zone, such as adding, removing,
- or revoking a key, then that action will be carried out. By default,
- the key directory is checked for changes every 60 minutes; this period
- can be adjusted with the <code class="option">dnssec-loadkeys-interval</code>, up
- to a maximum of 24 hours. The <span class="command"><strong>rndc loadkeys</strong></span> forces
- <span class="command"><strong>named</strong></span> to check for key updates immediately.
- </p>
-<p>
- If keys are present in the key directory the first time the zone
- is loaded, the zone will be signed immediately, without waiting for an
- <span class="command"><strong>rndc sign</strong></span> or <span class="command"><strong>rndc loadkeys</strong></span>
- command. (Those commands can still be used when there are unscheduled
- key changes, however.)
- </p>
-<p>
- When new keys are added to a zone, the TTL is set to match that
- of any existing DNSKEY RRset. If there is no existing DNSKEY RRset,
- then the TTL will be set to the TTL specified when the key was
- created (using the <span class="command"><strong>dnssec-keygen -L</strong></span> option), if
- any, or to the SOA TTL.
- </p>
-<p>
- If you wish the zone to be signed using NSEC3 instead of NSEC,
- submit an NSEC3PARAM record via dynamic update prior to the
- scheduled publication and activation of the keys. If you wish the
- NSEC3 chain to have the OPTOUT bit set, set it in the flags field
- of the NSEC3PARAM record. The NSEC3PARAM record will not appear in
- the zone immediately, but it will be stored for later reference. When
- the zone is signed and the NSEC3 chain is completed, the NSEC3PARAM
- record will appear in the zone.
- </p>
-<p>Using the
- <span class="command"><strong>auto-dnssec</strong></span> option requires the zone to be
- configured to allow dynamic updates, by adding an
- <span class="command"><strong>allow-update</strong></span> or
- <span class="command"><strong>update-policy</strong></span> statement to the zone
- configuration. If this has not been done, the configuration will
- fail.</p>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.25"></a>Private-type records</h3></div></div></div></div>
-<p>The state of the signing process is signaled by
- private-type records (with a default type value of 65534). When
- signing is complete, these records will have a nonzero value for
- the final octet (for those records which have a nonzero initial
- octet).</p>
-<p>The private type record format: If the first octet is
- non-zero then the record indicates that the zone needs to be
- signed with the key matching the record, or that all signatures
- that match the record should be removed.</p>
-<p>
- </p>
-<div class="literallayout"><p><br>
-<br>
-  algorithm (octet 1)<br>
-  key id in network order (octet 2 and 3)<br>
-  removal flag (octet 4)<br>
-  complete flag (octet 5)<br>
-</p></div>
-<p>
- </p>
-<p>Only records flagged as "complete" can be removed via
- dynamic update. Attempts to remove other private type records
- will be silently ignored.</p>
-<p>If the first octet is zero (this is a reserved algorithm
- number that should never appear in a DNSKEY record) then the
- record indicates changes to the NSEC3 chains are in progress. The
- rest of the record contains an NSEC3PARAM record. The flag field
- tells what operation to perform based on the flag bits.</p>
-<p>
- </p>
-<div class="literallayout"><p><br>
-<br>
-  0x01 OPTOUT<br>
-  0x80 CREATE<br>
-  0x40 REMOVE<br>
-  0x20 NONSEC<br>
-</p></div>
-<p>
- </p>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.32"></a>DNSKEY rollovers</h3></div></div></div></div>
-<p>As with insecure-to-secure conversions, rolling DNSSEC
- keys can be done in two ways: using a dynamic DNS update, or the
- <span class="command"><strong>auto-dnssec</strong></span> zone option.</p>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.34"></a>Dynamic DNS update method</h3></div></div></div></div>
-<p> To perform key rollovers via dynamic update, you need to add
- the <code class="filename">K*</code> files for the new keys so that
- <span class="command"><strong>named</strong></span> can find them. You can then add the new
- DNSKEY RRs via dynamic update.
- <span class="command"><strong>named</strong></span> will then cause the zone to be signed
- with the new keys. When the signing is complete the private type
- records will be updated so that the last octet is non
- zero.</p>
-<p>If this is for a KSK you need to inform the parent and any
- trust anchor repositories of the new KSK.</p>
-<p>You should then wait for the maximum TTL in the zone before
- removing the old DNSKEY. If it is a KSK that is being updated,
- you also need to wait for the DS RRset in the parent to be
- updated and its TTL to expire. This ensures that all clients will
- be able to verify at least one signature when you remove the old
- DNSKEY.</p>
-<p>The old DNSKEY can be removed via UPDATE. Take care to
- specify the correct key.
- <span class="command"><strong>named</strong></span> will clean out any signatures generated
- by the old key after the update completes.</p>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.39"></a>Automatic key rollovers</h3></div></div></div></div>
-<p>When a new key reaches its activation date (as set by
- <span class="command"><strong>dnssec-keygen</strong></span> or <span class="command"><strong>dnssec-settime</strong></span>),
- if the <span class="command"><strong>auto-dnssec</strong></span> zone option is set to
- <code class="constant">maintain</code>, <span class="command"><strong>named</strong></span> will
- automatically carry out the key rollover. If the key's algorithm
- has not previously been used to sign the zone, then the zone will
- be fully signed as quickly as possible. However, if the new key
- is replacing an existing key of the same algorithm, then the
- zone will be re-signed incrementally, with signatures from the
- old key being replaced with signatures from the new key as their
- signature validity periods expire. By default, this rollover
- completes in 30 days, after which it will be safe to remove the
- old key from the DNSKEY RRset.</p>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.41"></a>NSEC3PARAM rollovers via UPDATE</h3></div></div></div></div>
-<p>Add the new NSEC3PARAM record via dynamic update. When the
- new NSEC3 chain has been generated, the NSEC3PARAM flag field
- will be zero. At this point you can remove the old NSEC3PARAM
- record. The old chain will be removed after the update request
- completes.</p>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.43"></a>Converting from NSEC to NSEC3</h3></div></div></div></div>
-<p>To do this, you just need to add an NSEC3PARAM record. When
- the conversion is complete, the NSEC chain will have been removed
- and the NSEC3PARAM record will have a zero flag field. The NSEC3
- chain will be generated before the NSEC chain is
- destroyed.</p>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.45"></a>Converting from NSEC3 to NSEC</h3></div></div></div></div>
-<p>To do this, use <span class="command"><strong>nsupdate</strong></span> to
- remove all NSEC3PARAM records with a zero flag
- field. The NSEC chain will be generated before the NSEC3 chain is
- removed.</p>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.47"></a>Converting from secure to insecure</h3></div></div></div></div>
-<p>To convert a signed zone to unsigned using dynamic DNS,
- delete all the DNSKEY records from the zone apex using
- <span class="command"><strong>nsupdate</strong></span>. All signatures, NSEC or NSEC3 chains,
- and associated NSEC3PARAM records will be removed automatically.
- This will take place after the update request completes.</p>
-<p> This requires the
- <span class="command"><strong>dnssec-secure-to-insecure</strong></span> option to be set to
- <strong class="userinput"><code>yes</code></strong> in
- <code class="filename">named.conf</code>.</p>
-<p>In addition, if the <span class="command"><strong>auto-dnssec maintain</strong></span>
- zone statement is used, it should be removed or changed to
- <span class="command"><strong>allow</strong></span> instead (or it will re-sign).
- </p>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.51"></a>Periodic re-signing</h3></div></div></div></div>
-<p>In any secure zone which supports dynamic updates, <span class="command"><strong>named</strong></span>
- will periodically re-sign RRsets which have not been re-signed as
- a result of some update action. The signature lifetimes will be
- adjusted so as to spread the re-sign load over time rather than
- all at once.</p>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.53"></a>NSEC3 and OPTOUT</h3></div></div></div></div>
-<p>
- <span class="command"><strong>named</strong></span> only supports creating new NSEC3 chains
- where all the NSEC3 records in the zone have the same OPTOUT
- state.
- <span class="command"><strong>named</strong></span> supports UPDATES to zones where the NSEC3
- records in the chain have mixed OPTOUT state.
- <span class="command"><strong>named</strong></span> does not support changing the OPTOUT
- state of an individual NSEC3 record, the entire chain needs to be
- changed if the OPTOUT state of an individual NSEC3 needs to be
- changed.</p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="rfc5011.support"></a>Dynamic Trust Anchor Management</h2></div></div></div>
-<p>BIND 9.7.0 introduces support for RFC 5011, dynamic trust
- anchor management. Using this feature allows
- <span class="command"><strong>named</strong></span> to keep track of changes to critical
- DNSSEC keys without any need for the operator to make changes to
- configuration files.</p>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.11.3"></a>Validating Resolver</h3></div></div></div>
-<p>To configure a validating resolver to use RFC 5011 to
- maintain a trust anchor, configure the trust anchor using a
- <span class="command"><strong>managed-keys</strong></span> statement. Information about
- this can be found in
- <a class="xref" href="Bv9ARM.ch06.html#managed-keys" title="managed-keys Statement Definition and Usage">the section called &#8220;<span class="command"><strong>managed-keys</strong></span> Statement Definition
- and Usage&#8221;</a>.</p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.11.4"></a>Authoritative Server</h3></div></div></div>
-<p>To set up an authoritative zone for RFC 5011 trust anchor
- maintenance, generate two (or more) key signing keys (KSKs) for
- the zone. Sign the zone with one of them; this is the "active"
- KSK. All KSKs which do not sign the zone are "stand-by"
- keys.</p>
-<p>Any validating resolver which is configured to use the
- active KSK as an RFC 5011-managed trust anchor will take note
- of the stand-by KSKs in the zone's DNSKEY RRset, and store them
- for future reference. The resolver will recheck the zone
- periodically, and after 30 days, if the new key is still there,
- then the key will be accepted by the resolver as a valid trust
- anchor for the zone. Any time after this 30-day acceptance
- timer has completed, the active KSK can be revoked, and the
- zone can be "rolled over" to the newly accepted key.</p>
-<p>The easiest way to place a stand-by key in a zone is to
- use the "smart signing" features of
- <span class="command"><strong>dnssec-keygen</strong></span> and
- <span class="command"><strong>dnssec-signzone</strong></span>. If a key with a publication
- date in the past, but an activation date which is unset or in
- the future, "
- <span class="command"><strong>dnssec-signzone -S</strong></span>" will include the DNSKEY
- record in the zone, but will not sign with it:</p>
-<pre class="screen">
-$ <strong class="userinput"><code>dnssec-keygen -K keys -f KSK -P now -A now+2y example.net</code></strong>
-$ <strong class="userinput"><code>dnssec-signzone -S -K keys example.net</code></strong>
-</pre>
-<p>To revoke a key, the new command
- <span class="command"><strong>dnssec-revoke</strong></span> has been added. This adds the
- REVOKED bit to the key flags and re-generates the
- <code class="filename">K*.key</code> and
- <code class="filename">K*.private</code> files.</p>
-<p>After revoking the active key, the zone must be signed
- with both the revoked KSK and the new active KSK. (Smart
- signing takes care of this automatically.)</p>
-<p>Once a key has been revoked and used to sign the DNSKEY
- RRset in which it appears, that key will never again be
- accepted as a valid trust anchor by the resolver. However,
- validation can proceed using the new active key (which had been
- accepted by the resolver when it was a stand-by key).</p>
-<p>See RFC 5011 for more details on key rollover
- scenarios.</p>
-<p>When a key has been revoked, its key ID changes,
- increasing by 128, and wrapping around at 65535. So, for
- example, the key "<code class="filename">Kexample.com.+005+10000</code>" becomes
- "<code class="filename">Kexample.com.+005+10128</code>".</p>
-<p>If two keys have IDs exactly 128 apart, and one is
- revoked, then the two key IDs will collide, causing several
- problems. To prevent this,
- <span class="command"><strong>dnssec-keygen</strong></span> will not generate a new key if
- another key is present which may collide. This checking will
- only occur if the new keys are written to the same directory
- which holds all other keys in use for that zone.</p>
-<p>Older versions of BIND 9 did not have this precaution.
- Exercise caution if using key revocation on keys that were
- generated by previous releases, or if using keys stored in
- multiple directories or on multiple machines.</p>
-<p>It is expected that a future release of BIND 9 will
- address this problem in a different way, by storing revoked
- keys with their original unrevoked key IDs.</p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="pkcs11"></a>PKCS#11 (Cryptoki) support</h2></div></div></div>
-<p>
- PKCS#11 (Public Key Cryptography Standard #11) defines a
- platform-independent API for the control of hardware security
- modules (HSMs) and other cryptographic support devices.
- </p>
-<p>
- BIND 9 is known to work with three HSMs: The AEP Keyper, which has
- been tested with Debian Linux, Solaris x86 and Windows Server 2003;
- the Thales nShield, tested with Debian Linux; and the Sun SCA 6000
- cryptographic acceleration board, tested with Solaris x86. In
- addition, BIND can be used with all current versions of SoftHSM,
- a software-based HSM simulator library produced by the OpenDNSSEC
- project.
- </p>
-<p>
- PKCS#11 makes use of a "provider library": a dynamically loadable
- library which provides a low-level PKCS#11 interface to drive the HSM
- hardware. The PKCS#11 provider library comes from the HSM vendor, and
- it is specific to the HSM to be controlled.
- </p>
-<p>
- There are two available mechanisms for PKCS#11 support in BIND 9:
- OpenSSL-based PKCS#11 and native PKCS#11. When using the first
- mechanism, BIND uses a modified version of OpenSSL, which loads
- the provider library and operates the HSM indirectly; any
- cryptographic operations not supported by the HSM can be carried
- out by OpenSSL instead. The second mechanism enables BIND to bypass
- OpenSSL completely; BIND loads the provider library itself, and uses
- the PKCS#11 API to drive the HSM directly.
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.12.6"></a>Prerequisites</h3></div></div></div>
-<p>
- See the documentation provided by your HSM vendor for
- information about installing, initializing, testing and
- troubleshooting the HSM.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.12.7"></a>Native PKCS#11</h3></div></div></div>
-<p>
- Native PKCS#11 mode will only work with an HSM capable of carrying
- out <span class="emphasis"><em>every</em></span> cryptographic operation BIND 9 may
- need. The HSM's provider library must have a complete implementation
- of the PKCS#11 API, so that all these functions are accessible. As of
- this writing, only the Thales nShield HSM and SoftHSMv2 can be used
- in this fashion. For other HSMs, including the AEP Keyper, Sun SCA
- 6000 and older versions of SoftHSM, use OpenSSL-based PKCS#11.
- (Note: Eventually, when more HSMs become capable of supporting
- native PKCS#11, it is expected that OpenSSL-based PKCS#11 will
- be deprecated.)
- </p>
-<p>
- To build BIND with native PKCS#11, configure as follows:
- </p>
-<pre class="screen">
-$ <strong class="userinput"><code>cd bind9</code></strong>
-$ <strong class="userinput"><code>./configure --enable-native-pkcs11 \
- --with-pkcs11=<em class="replaceable"><code>provider-library-path</code></em></code></strong>
- </pre>
-<p>
- This will cause all BIND tools, including <span class="command"><strong>named</strong></span>
- and the <span class="command"><strong>dnssec-*</strong></span> and <span class="command"><strong>pkcs11-*</strong></span>
- tools, to use the PKCS#11 provider library specified in
- <em class="replaceable"><code>provider-library-path</code></em> for cryptography.
- (The provider library path can be overridden using the
- <code class="option">-E</code> in <span class="command"><strong>named</strong></span> and the
- <span class="command"><strong>dnssec-*</strong></span> tools, or the <code class="option">-m</code> in
- the <span class="command"><strong>pkcs11-*</strong></span> tools.)
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="id-1.5.12.7.6"></a>Building SoftHSMv2</h4></div></div></div>
-<p>
- SoftHSMv2, the latest development version of SoftHSM, is available
- from
- <a class="link" href="https://github.com/opendnssec/SoftHSMv2" target="_top">
- https://github.com/opendnssec/SoftHSMv2
- </a>.
- It is a software library developed by the OpenDNSSEC project
- (<a class="link" href="http://www.opendnssec.org" target="_top">
- http://www.opendnssec.org
- </a>)
- which provides a PKCS#11 interface to a virtual HSM, implemented in
- the form of a SQLite3 database on the local filesystem. It provides
- less security than a true HSM, but it allows you to experiment with
- native PKCS#11 when an HSM is not available. SoftHSMv2 can be
- configured to use either OpenSSL or the Botan library to perform
- cryptographic functions, but when using it for native PKCS#11 in
- BIND, OpenSSL is required.
- </p>
-<p>
- By default, the SoftHSMv2 configuration file is
- <em class="replaceable"><code>prefix</code></em>/etc/softhsm2.conf (where
- <em class="replaceable"><code>prefix</code></em> is configured at compile time).
- This location can be overridden by the SOFTHSM2_CONF environment
- variable. The SoftHSMv2 cryptographic store must be installed and
- initialized before using it with BIND.
- </p>
-<pre class="screen">
-$ <strong class="userinput"><code> cd SoftHSMv2 </code></strong>
-$ <strong class="userinput"><code> configure --with-crypto-backend=openssl --prefix=/opt/pkcs11/usr --enable-gost </code></strong>
-$ <strong class="userinput"><code> make </code></strong>
-$ <strong class="userinput"><code> make install </code></strong>
-$ <strong class="userinput"><code> /opt/pkcs11/usr/bin/softhsm-util --init-token 0 --slot 0 --label softhsmv2 </code></strong>
- </pre>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.12.8"></a>OpenSSL-based PKCS#11</h3></div></div></div>
-<p>
- OpenSSL-based PKCS#11 mode uses a modified version of the
- OpenSSL library; stock OpenSSL does not fully support PKCS#11.
- ISC provides a patch to OpenSSL to correct this. This patch is
- based on work originally done by the OpenSolaris project; it has been
- modified by ISC to provide new features such as PIN management and
- key-by-reference.
- </p>
-<p>
- There are two "flavors" of PKCS#11 support provided by
- the patched OpenSSL, one of which must be chosen at
- configuration time. The correct choice depends on the HSM
- hardware:
- </p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem"><p>
- Use 'crypto-accelerator' with HSMs that have hardware
- cryptographic acceleration features, such as the SCA 6000
- board. This causes OpenSSL to run all supported
- cryptographic operations in the HSM.
- </p></li>
-<li class="listitem"><p>
- Use 'sign-only' with HSMs that are designed to
- function primarily as secure key storage devices, but lack
- hardware acceleration. These devices are highly secure, but
- are not necessarily any faster at cryptography than the
- system CPU &#8212; often, they are slower. It is therefore
- most efficient to use them only for those cryptographic
- functions that require access to the secured private key,
- such as zone signing, and to use the system CPU for all
- other computationally-intensive operations. The AEP Keyper
- is an example of such a device.
- </p></li>
-</ul></div>
-<p>
- The modified OpenSSL code is included in the BIND 9 release,
- in the form of a context diff against the latest versions of
- OpenSSL. OpenSSL 0.9.8, 1.0.0, 1.0.1 and 1.0.2 are supported;
- there are separate diffs for each version. In the examples to
- follow, we use OpenSSL 0.9.8, but the same methods work with
- OpenSSL 1.0.0 through 1.0.2.
- </p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- The OpenSSL patches as of this writing (January 2016)
- support versions 0.9.8zh, 1.0.0t, 1.0.1q and 1.0.2f.
- ISC will provide updated patches as new versions of OpenSSL
- are released. The version number in the following examples
- is expected to change.
- </p>
-</div>
-<p>
- Before building BIND 9 with PKCS#11 support, it will be
- necessary to build OpenSSL with the patch in place, and configure
- it with the path to your HSM's PKCS#11 provider library.
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="id-1.5.12.8.8"></a>Patching OpenSSL</h4></div></div></div>
-<pre class="screen">
-$ <strong class="userinput"><code>wget <a class="link" href="" target="_top">http://www.openssl.org/source/openssl-0.9.8zc.tar.gz</a></code></strong>
- </pre>
-<p>Extract the tarball:</p>
-<pre class="screen">
-$ <strong class="userinput"><code>tar zxf openssl-0.9.8zc.tar.gz</code></strong>
-</pre>
-<p>Apply the patch from the BIND 9 release:</p>
-<pre class="screen">
-$ <strong class="userinput"><code>patch -p1 -d openssl-0.9.8zc \
- &lt; bind9/bin/pkcs11/openssl-0.9.8zc-patch</code></strong>
-</pre>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- The patch file may not be compatible with the
- "patch" utility on all operating systems. You may need to
- install GNU patch.
- </p>
-</div>
-<p>
- When building OpenSSL, place it in a non-standard
- location so that it does not interfere with OpenSSL libraries
- elsewhere on the system. In the following examples, we choose
- to install into "/opt/pkcs11/usr". We will use this location
- when we configure BIND 9.
- </p>
-<p>
- Later, when building BIND 9, the location of the custom-built
- OpenSSL library will need to be specified via configure.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="id-1.5.12.8.9"></a>Building OpenSSL for the AEP Keyper on Linux</h4></div></div></div>
-<p>
- The AEP Keyper is a highly secure key storage device,
- but does not provide hardware cryptographic acceleration. It
- can carry out cryptographic operations, but it is probably
- slower than your system's CPU. Therefore, we choose the
- 'sign-only' flavor when building OpenSSL.
- </p>
-<p>
- The Keyper-specific PKCS#11 provider library is
- delivered with the Keyper software. In this example, we place
- it /opt/pkcs11/usr/lib:
- </p>
-<pre class="screen">
-$ <strong class="userinput"><code>cp pkcs11.GCC4.0.2.so.4.05 /opt/pkcs11/usr/lib/libpkcs11.so</code></strong>
-</pre>
-<p>
- The Keyper library requires threads, so we
- must specify -pthread.
- </p>
-<pre class="screen">
-$ <strong class="userinput"><code>cd openssl-0.9.8zc</code></strong>
-$ <strong class="userinput"><code>./Configure linux-x86_64 -pthread \
- --pk11-libname=/opt/pkcs11/usr/lib/libpkcs11.so \
- --pk11-flavor=sign-only \
- --prefix=/opt/pkcs11/usr</code></strong>
-</pre>
-<p>
- After configuring, run "<span class="command"><strong>make</strong></span>"
- and "<span class="command"><strong>make test</strong></span>". If "<span class="command"><strong>make
- test</strong></span>" fails with "pthread_atfork() not found", you forgot to
- add the -pthread above.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="id-1.5.12.8.10"></a>Building OpenSSL for the SCA 6000 on Solaris</h4></div></div></div>
-<p>
- The SCA-6000 PKCS#11 provider is installed as a system
- library, libpkcs11. It is a true crypto accelerator, up to 4
- times faster than any CPU, so the flavor shall be
- 'crypto-accelerator'.
- </p>
-<p>
- In this example, we are building on Solaris x86 on an
- AMD64 system.
- </p>
-<pre class="screen">
-$ <strong class="userinput"><code>cd openssl-0.9.8zc</code></strong>
-$ <strong class="userinput"><code>./Configure solaris64-x86_64-cc \
- --pk11-libname=/usr/lib/64/libpkcs11.so \
- --pk11-flavor=crypto-accelerator \
- --prefix=/opt/pkcs11/usr</code></strong>
-</pre>
-<p>
- (For a 32-bit build, use "solaris-x86-cc" and /usr/lib/libpkcs11.so.)
- </p>
-<p>
- After configuring, run
- <span class="command"><strong>make</strong></span> and
- <span class="command"><strong>make test</strong></span>.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="id-1.5.12.8.11"></a>Building OpenSSL for SoftHSM</h4></div></div></div>
-<p>
- SoftHSM (version 1) is a software library developed by the
- OpenDNSSEC project
- (<a class="link" href="http://www.opendnssec.org" target="_top">
- http://www.opendnssec.org
- </a>)
- which provides a
- PKCS#11 interface to a virtual HSM, implemented in the form of
- a SQLite3 database on the local filesystem. SoftHSM uses
- the Botan library to perform cryptographic functions. Though
- less secure than a true HSM, it can allow you to experiment
- with PKCS#11 when an HSM is not available.
- </p>
-<p>
- The SoftHSM cryptographic store must be installed and
- initialized before using it with OpenSSL, and the SOFTHSM_CONF
- environment variable must always point to the SoftHSM configuration
- file:
- </p>
-<pre class="screen">
-$ <strong class="userinput"><code> cd softhsm-1.3.7 </code></strong>
-$ <strong class="userinput"><code> configure --prefix=/opt/pkcs11/usr </code></strong>
-$ <strong class="userinput"><code> make </code></strong>
-$ <strong class="userinput"><code> make install </code></strong>
-$ <strong class="userinput"><code> export SOFTHSM_CONF=/opt/pkcs11/softhsm.conf </code></strong>
-$ <strong class="userinput"><code> echo "0:/opt/pkcs11/softhsm.db" &gt; $SOFTHSM_CONF </code></strong>
-$ <strong class="userinput"><code> /opt/pkcs11/usr/bin/softhsm --init-token 0 --slot 0 --label softhsm </code></strong>
-</pre>
-<p>
- SoftHSM can perform all cryptographic operations, but
- since it only uses your system CPU, there is no advantage to using
- it for anything but signing. Therefore, we choose the 'sign-only'
- flavor when building OpenSSL.
- </p>
-<pre class="screen">
-$ <strong class="userinput"><code>cd openssl-0.9.8zc</code></strong>
-$ <strong class="userinput"><code>./Configure linux-x86_64 -pthread \
- --pk11-libname=/opt/pkcs11/usr/lib/libsofthsm.so \
- --pk11-flavor=sign-only \
- --prefix=/opt/pkcs11/usr</code></strong>
-</pre>
-<p>
- After configuring, run "<span class="command"><strong>make</strong></span>"
- and "<span class="command"><strong>make test</strong></span>".
- </p>
-</div>
-<p>
- Once you have built OpenSSL, run
- "<span class="command"><strong>apps/openssl engine pkcs11</strong></span>" to confirm
- that PKCS#11 support was compiled in correctly. The output
- should be one of the following lines, depending on the flavor
- selected:
- </p>
-<pre class="screen">
- (pkcs11) PKCS #11 engine support (sign only)
-</pre>
-<p>Or:</p>
-<pre class="screen">
- (pkcs11) PKCS #11 engine support (crypto accelerator)
-</pre>
-<p>
- Next, run
- "<span class="command"><strong>apps/openssl engine pkcs11 -t</strong></span>". This will
- attempt to initialize the PKCS#11 engine. If it is able to
- do so successfully, it will report
- <span class="quote">&#8220;<span class="quote"><code class="literal">[ available ]</code></span>&#8221;</span>.
- </p>
-<p>
- If the output is correct, run
- "<span class="command"><strong>make install</strong></span>" which will install the
- modified OpenSSL suite to <code class="filename">/opt/pkcs11/usr</code>.
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="id-1.5.12.8.18"></a>Configuring BIND 9 for Linux with the AEP Keyper</h4></div></div></div>
-<p>
- To link with the PKCS#11 provider, threads must be
- enabled in the BIND 9 build.
- </p>
-<pre class="screen">
-$ <strong class="userinput"><code>cd ../bind9</code></strong>
-$ <strong class="userinput"><code>./configure --enable-threads \
- --with-openssl=/opt/pkcs11/usr \
- --with-pkcs11=/opt/pkcs11/usr/lib/libpkcs11.so</code></strong>
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="id-1.5.12.8.19"></a>Configuring BIND 9 for Solaris with the SCA 6000</h4></div></div></div>
-<p>
- To link with the PKCS#11 provider, threads must be
- enabled in the BIND 9 build.
- </p>
-<pre class="screen">
-$ <strong class="userinput"><code>cd ../bind9</code></strong>
-$ <strong class="userinput"><code>./configure CC="cc -xarch=amd64" --enable-threads \
- --with-openssl=/opt/pkcs11/usr \
- --with-pkcs11=/usr/lib/64/libpkcs11.so</code></strong>
-</pre>
-<p>(For a 32-bit build, omit CC="cc -xarch=amd64".)</p>
-<p>
- If configure complains about OpenSSL not working, you
- may have a 32/64-bit architecture mismatch. Or, you may have
- incorrectly specified the path to OpenSSL (it should be the
- same as the --prefix argument to the OpenSSL
- Configure).
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="id-1.5.12.8.20"></a>Configuring BIND 9 for SoftHSM</h4></div></div></div>
-<pre class="screen">
-$ <strong class="userinput"><code>cd ../bind9</code></strong>
-$ <strong class="userinput"><code>./configure --enable-threads \
- --with-openssl=/opt/pkcs11/usr \
- --with-pkcs11=/opt/pkcs11/usr/lib/libsofthsm.so</code></strong>
-</pre>
-</div>
-<p>
- After configuring, run
- "<span class="command"><strong>make</strong></span>",
- "<span class="command"><strong>make test</strong></span>" and
- "<span class="command"><strong>make install</strong></span>".
- </p>
-<p>
- (Note: If "make test" fails in the "pkcs11" system test, you may
- have forgotten to set the SOFTHSM_CONF environment variable.)
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.12.9"></a>PKCS#11 Tools</h3></div></div></div>
-<p>
- BIND 9 includes a minimal set of tools to operate the
- HSM, including
- <span class="command"><strong>pkcs11-keygen</strong></span> to generate a new key pair
- within the HSM,
- <span class="command"><strong>pkcs11-list</strong></span> to list objects currently
- available,
- <span class="command"><strong>pkcs11-destroy</strong></span> to remove objects, and
- <span class="command"><strong>pkcs11-tokens</strong></span> to list available tokens.
- </p>
-<p>
- In UNIX/Linux builds, these tools are built only if BIND
- 9 is configured with the --with-pkcs11 option. (Note: If
- --with-pkcs11 is set to "yes", rather than to the path of the
- PKCS#11 provider, then the tools will be built but the
- provider will be left undefined. Use the -m option or the
- PKCS11_PROVIDER environment variable to specify the path to the
- provider.)
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.12.10"></a>Using the HSM</h3></div></div></div>
-<p>
- For OpenSSL-based PKCS#11, we must first set up the runtime
- environment so the OpenSSL and PKCS#11 libraries can be loaded:
- </p>
-<pre class="screen">
-$ <strong class="userinput"><code>export LD_LIBRARY_PATH=/opt/pkcs11/usr/lib:${LD_LIBRARY_PATH}</code></strong>
-</pre>
-<p>
- This causes <span class="command"><strong>named</strong></span> and other binaries to load
- the OpenSSL library from <code class="filename">/opt/pkcs11/usr/lib</code>
- rather than from the default location. This step is not necessary
- when using native PKCS#11.
- </p>
-<p>
- Some HSMs require other environment variables to be set.
- For example, when operating an AEP Keyper, it is necessary to
- specify the location of the "machine" file, which stores
- information about the Keyper for use by the provider
- library. If the machine file is in
- <code class="filename">/opt/Keyper/PKCS11Provider/machine</code>,
- use:
- </p>
-<pre class="screen">
-$ <strong class="userinput"><code>export KEYPER_LIBRARY_PATH=/opt/Keyper/PKCS11Provider</code></strong>
-</pre>
-<p>
- Such environment variables must be set whenever running
- any tool that uses the HSM, including
- <span class="command"><strong>pkcs11-keygen</strong></span>,
- <span class="command"><strong>pkcs11-list</strong></span>,
- <span class="command"><strong>pkcs11-destroy</strong></span>,
- <span class="command"><strong>dnssec-keyfromlabel</strong></span>,
- <span class="command"><strong>dnssec-signzone</strong></span>,
- <span class="command"><strong>dnssec-keygen</strong></span>, and
- <span class="command"><strong>named</strong></span>.
- </p>
-<p>
- We can now create and use keys in the HSM. In this case,
- we will create a 2048 bit key and give it the label
- "sample-ksk":
- </p>
-<pre class="screen">
-$ <strong class="userinput"><code>pkcs11-keygen -b 2048 -l sample-ksk</code></strong>
-</pre>
-<p>To confirm that the key exists:</p>
-<pre class="screen">
-$ <strong class="userinput"><code>pkcs11-list</code></strong>
-Enter PIN:
-object[0]: handle 2147483658 class 3 label[8] 'sample-ksk' id[0]
-object[1]: handle 2147483657 class 2 label[8] 'sample-ksk' id[0]
-</pre>
-<p>
- Before using this key to sign a zone, we must create a
- pair of BIND 9 key files. The "dnssec-keyfromlabel" utility
- does this. In this case, we will be using the HSM key
- "sample-ksk" as the key-signing key for "example.net":
- </p>
-<pre class="screen">
-$ <strong class="userinput"><code>dnssec-keyfromlabel -l sample-ksk -f KSK example.net</code></strong>
-</pre>
-<p>
- The resulting K*.key and K*.private files can now be used
- to sign the zone. Unlike normal K* files, which contain both
- public and private key data, these files will contain only the
- public key data, plus an identifier for the private key which
- remains stored within the HSM. Signing with the private key takes
- place inside the HSM.
- </p>
-<p>
- If you wish to generate a second key in the HSM for use
- as a zone-signing key, follow the same procedure above, using a
- different keylabel, a smaller key size, and omitting "-f KSK"
- from the dnssec-keyfromlabel arguments:
- </p>
-<p>
- (Note: When using OpenSSL-based PKCS#11 the label is an arbitrary
- string which identifies the key. With native PKCS#11, the label is
- a PKCS#11 URI string which may include other details about the key
- and the HSM, including its PIN. See
- <a class="xref" href="man.dnssec-keyfromlabel.html" title="dnssec-keyfromlabel"><span class="refentrytitle"><span class="application">dnssec-keyfromlabel</span></span>(8)</a> for details.)
- </p>
-<pre class="screen">
-$ <strong class="userinput"><code>pkcs11-keygen -b 1024 -l sample-zsk</code></strong>
-$ <strong class="userinput"><code>dnssec-keyfromlabel -l sample-zsk example.net</code></strong>
-</pre>
-<p>
- Alternatively, you may prefer to generate a conventional
- on-disk key, using dnssec-keygen:
- </p>
-<pre class="screen">
-$ <strong class="userinput"><code>dnssec-keygen example.net</code></strong>
-</pre>
-<p>
- This provides less security than an HSM key, but since
- HSMs can be slow or cumbersome to use for security reasons, it
- may be more efficient to reserve HSM keys for use in the less
- frequent key-signing operation. The zone-signing key can be
- rolled more frequently, if you wish, to compensate for a
- reduction in key security. (Note: When using native PKCS#11,
- there is no speed advantage to using on-disk keys, as cryptographic
- operations will be done by the HSM regardless.)
- </p>
-<p>
- Now you can sign the zone. (Note: If not using the -S
- option to <span class="command"><strong>dnssec-signzone</strong></span>, it will be
- necessary to add the contents of both <code class="filename">K*.key</code>
- files to the zone master file before signing it.)
- </p>
-<pre class="screen">
-$ <strong class="userinput"><code>dnssec-signzone -S example.net</code></strong>
-Enter PIN:
-Verifying the zone using the following algorithms:
-NSEC3RSASHA1.
-Zone signing complete:
-Algorithm: NSEC3RSASHA1: ZSKs: 1, KSKs: 1 active, 0 revoked, 0 stand-by
-example.net.signed
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.12.11"></a>Specifying the engine on the command line</h3></div></div></div>
-<p>
- When using OpenSSL-based PKCS#11, the "engine" to be used by
- OpenSSL can be specified in <span class="command"><strong>named</strong></span> and all of
- the BIND <span class="command"><strong>dnssec-*</strong></span> tools by using the "-E
- &lt;engine&gt;" command line option. If BIND 9 is built with
- the --with-pkcs11 option, this option defaults to "pkcs11".
- Specifying the engine will generally not be necessary unless
- for some reason you wish to use a different OpenSSL
- engine.
- </p>
-<p>
- If you wish to disable use of the "pkcs11" engine &#8212;
- for troubleshooting purposes, or because the HSM is unavailable
- &#8212; set the engine to the empty string. For example:
- </p>
-<pre class="screen">
-$ <strong class="userinput"><code>dnssec-signzone -E '' -S example.net</code></strong>
-</pre>
-<p>
- This causes
- <span class="command"><strong>dnssec-signzone</strong></span> to run as if it were compiled
- without the --with-pkcs11 option.
- </p>
-<p>
- When built with native PKCS#11 mode, the "engine" option has a
- different meaning: it specifies the path to the PKCS#11 provider
- library. This may be useful when testing a new provider library.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.12.12"></a>Running named with automatic zone re-signing</h3></div></div></div>
-<p>
- If you want <span class="command"><strong>named</strong></span> to dynamically re-sign zones
- using HSM keys, and/or to to sign new records inserted via nsupdate,
- then <span class="command"><strong>named</strong></span> must have access to the HSM PIN. In OpenSSL-based PKCS#11,
- this is accomplished by placing the PIN into the openssl.cnf file
- (in the above examples,
- <code class="filename">/opt/pkcs11/usr/ssl/openssl.cnf</code>).
- </p>
-<p>
- The location of the openssl.cnf file can be overridden by
- setting the OPENSSL_CONF environment variable before running
- <span class="command"><strong>named</strong></span>.
- </p>
-<p>Sample openssl.cnf:</p>
-<pre class="programlisting">
- openssl_conf = openssl_def
- [ openssl_def ]
- engines = engine_section
- [ engine_section ]
- pkcs11 = pkcs11_section
- [ pkcs11_section ]
- PIN = <em class="replaceable"><code>&lt;PLACE PIN HERE&gt;</code></em>
-</pre>
-<p>
- This will also allow the dnssec-* tools to access the HSM
- without PIN entry. (The pkcs11-* tools access the HSM directly,
- not via OpenSSL, so a PIN will still be required to use
- them.)
- </p>
-<p>
- In native PKCS#11 mode, the PIN can be provided in a file specified
- as an attribute of the key's label. For example, if a key had the label
- <strong class="userinput"><code>pkcs11:object=local-zsk;pin-source=/etc/hsmpin</code></strong>,
- then the PIN would be read from the file
- <code class="filename">/etc/hsmpin</code>.
- </p>
-<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Warning</h3>
-<p>
- Placing the HSM's PIN in a text file in this manner may reduce the
- security advantage of using an HSM. Be sure this is what you want to
- do before configuring the system in this way.
- </p>
-</div>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="dlz-info"></a>DLZ (Dynamically Loadable Zones)</h2></div></div></div>
-<p>
- DLZ (Dynamically Loadable Zones) is an extension to BIND 9 that allows
- zone data to be retrieved directly from an external database. There is
- no required format or schema. DLZ drivers exist for several different
- database backends including PostgreSQL, MySQL, and LDAP and can be
- written for any other.
- </p>
-<p>
- Historically, DLZ drivers had to be statically linked with the <span class="command"><strong>named</strong></span>
- binary and were turned on via a configure option at compile time (for
- example, <strong class="userinput"><code>"configure --with-dlz-ldap"</code></strong>).
- Currently, the drivers provided in the BIND 9 tarball in
- <code class="filename">contrib/dlz/drivers</code> are still linked this
- way.
- </p>
-<p>
- In BIND 9.8 and higher, it is possible to link some DLZ modules
- dynamically at runtime, via the DLZ "dlopen" driver, which acts as a
- generic wrapper around a shared object implementing the DLZ API. The
- "dlopen" driver is linked into <span class="command"><strong>named</strong></span> by default, so configure options
- are no longer necessary when using these dynamically linkable drivers,
- but are still needed for the older drivers in
- <code class="filename">contrib/dlz/drivers</code>.
- </p>
-<p>
- When the DLZ module provides data to <span class="command"><strong>named</strong></span>, it does so in text format.
- The response is converted to DNS wire format by <span class="command"><strong>named</strong></span>. This
- conversion, and the lack of any internal caching, places significant
- limits on the query performance of DLZ modules. Consequently, DLZ is
- not recommended for use on high-volume servers. However, it can be
- used in a hidden master configuration, with slaves retrieving zone
- updates via AXFR. (Note, however, that DLZ has no built-in support for
- DNS notify; slaves are not automatically informed of changes to the
- zones in the database.)
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.13.6"></a>Configuring DLZ</h3></div></div></div>
-<p>
- A DLZ database is configured with a <span class="command"><strong>dlz</strong></span>
- statement in <code class="filename">named.conf</code>:
- </p>
-<pre class="screen">
- dlz example {
- database "dlopen driver.so <code class="option">args</code>";
- search yes;
- };
- </pre>
-<p>
- This specifies a DLZ module to search when answering queries; the
- module is implemented in <code class="filename">driver.so</code> and is
- loaded at runtime by the dlopen DLZ driver. Multiple
- <span class="command"><strong>dlz</strong></span> statements can be specified; when
- answering a query, all DLZ modules with <code class="option">search</code>
- set to <code class="literal">yes</code> will be queried to find out if
- they contain an answer for the query name; the best available
- answer will be returned to the client.
- </p>
-<p>
- The <code class="option">search</code> option in the above example can be
- omitted, because <code class="literal">yes</code> is the default value.
- </p>
-<p>
- If <code class="option">search</code> is set to <code class="literal">no</code>, then
- this DLZ module is <span class="emphasis"><em>not</em></span> searched for the best
- match when a query is received. Instead, zones in this DLZ must be
- separately specified in a zone statement. This allows you to
- configure a zone normally using standard zone option semantics,
- but specify a different database back-end for storage of the
- zone's data. For example, to implement NXDOMAIN redirection using
- a DLZ module for back-end storage of redirection rules:
- </p>
-<pre class="screen">
- dlz other {
- database "dlopen driver.so <code class="option">args</code>";
- search no;
- };
-
- zone "." {
- type redirect;
- dlz other;
- };
- </pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.13.7"></a>Sample DLZ Driver</h3></div></div></div>
-<p>
- For guidance in implementation of DLZ modules, the directory
- <code class="filename">contrib/dlz/example</code> contains a basic
- dynamically-linkable DLZ module--i.e., one which can be
- loaded at runtime by the "dlopen" DLZ driver.
- The example sets up a single zone, whose name is passed
- to the module as an argument in the <span class="command"><strong>dlz</strong></span>
- statement:
- </p>
-<pre class="screen">
- dlz other {
- database "dlopen driver.so example.nil";
- };
- </pre>
-<p>
- In the above example, the module is configured to create a zone
- "example.nil", which can answer queries and AXFR requests, and
- accept DDNS updates. At runtime, prior to any updates, the zone
- contains an SOA, NS, and a single A record at the apex:
- </p>
-<pre class="screen">
- example.nil. 3600 IN SOA example.nil. hostmaster.example.nil. (
- 123 900 600 86400 3600
- )
- example.nil. 3600 IN NS example.nil.
- example.nil. 1800 IN A 10.53.0.1
- </pre>
-<p>
- The sample driver is capable of retrieving information about the
- querying client, and altering its response on the basis of this
- information. To demonstrate this feature, the example driver
- responds to queries for "source-addr.<code class="option">zonename</code>&gt;/TXT"
- with the source address of the query. Note, however, that this
- record will *not* be included in AXFR or ANY responses. Normally,
- this feature would be used to alter responses in some other fashion,
- e.g., by providing different address records for a particular name
- depending on the network from which the query arrived.
- </p>
-<p>
- Documentation of the DLZ module API can be found in
- <code class="filename">contrib/dlz/example/README</code>. This directory also
- contains the header file <code class="filename">dlz_minimal.h</code>, which
- defines the API and should be included by any dynamically-linkable
- DLZ module.
- </p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="dyndb-info"></a>DynDB (Dynamic Database)</h2></div></div></div>
-<p>
- DynDB is an extension to BIND 9 which, like DLZ
- (see <a class="xref" href="Bv9ARM.ch04.html#dlz-info" title="DLZ (Dynamically Loadable Zones)">the section called &#8220;DLZ (Dynamically Loadable Zones)&#8221;</a>), allows zone data to be
- retrieved from an external database. Unlike DLZ, a DynDB module
- provides a full-featured BIND zone database interface. Where
- DLZ translates DNS queries into real-time database lookups,
- resulting in relatively poor query performance, and is unable
- to handle DNSSEC-signed data due to its limited API, a DynDB
- module can pre-load an in-memory database from the external
- data source, providing the same performance and functionality
- as zones served natively by BIND.
- </p>
-<p>
- A DynDB module supporting LDAP has been created by Red Hat
- and is available from
- <a class="link" href="https://fedorahosted.org/bind-dyndb-ldap/" target="_top">https://fedorahosted.org/bind-dyndb-ldap/</a>.
- </p>
-<p>
- A sample DynDB module for testing and developer guidance
- is included with the BIND source code, in the directory
- <code class="filename">bin/tests/system/dyndb/driver</code>.
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.14.5"></a>Configuring DynDB</h3></div></div></div>
-<p>
- A DynDB database is configured with a <span class="command"><strong>dyndb</strong></span>
- statement in <code class="filename">named.conf</code>:
- </p>
-<pre class="screen">
- dyndb example "driver.so" {
- <em class="replaceable"><code>parameters</code></em>
- };
- </pre>
-<p>
- The file <code class="filename">driver.so</code> is a DynDB module which
- implements the full DNS database API. Multiple
- <span class="command"><strong>dyndb</strong></span> statements can be specified, to load
- different drivers or multiple instances of the same driver.
- Zones provided by a DynDB module are added to the view's zone
- table, and are treated as normal authoritative zones when BIND
- is responding to queries. Zone configuration is handled internally
- by the DynDB module.
- </p>
-<p>
- The <em class="replaceable"><code>parameters</code></em> are passed as an opaque
- string to the DynDB module's initialization routine. Configuration
- syntax will differ depending on the driver.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.14.6"></a>Sample DynDB Module</h3></div></div></div>
-<p>
- For guidance in implementation of DynDB modules, the directory
- <code class="filename">bin/tests/system/dyndb/driver</code>.
- contains a basic DynDB module.
- The example sets up two zones, whose names are passed
- to the module as arguments in the <span class="command"><strong>dyndb</strong></span>
- statement:
- </p>
-<pre class="screen">
- dyndb sample "sample.so" { example.nil. arpa. };
- </pre>
-<p>
- In the above example, the module is configured to create a zone
- "example.nil", which can answer queries and AXFR requests, and
- accept DDNS updates. At runtime, prior to any updates, the zone
- contains an SOA, NS, and a single A record at the apex:
- </p>
-<pre class="screen">
- example.nil. 86400 IN SOA example.nil. example.nil. (
- 0 28800 7200 604800 86400
- )
- example.nil. 86400 IN NS example.nil.
- example.nil. 86400 IN A 127.0.0.1
- </pre>
-<p>
- When the zone is updated dynamically, the DynDB module will determine
- whether the updated RR is an address (i.e., type A or AAAA) and if
- so, it will automatically update the corresponding PTR record in a
- reverse zone. (Updates are not stored permanently; all updates are
- lost when the server is restarted.)
- </p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="catz-info"></a>Catalog Zones</h2></div></div></div>
-<p>
- A "catalog zone" is a special DNS zone that contains a list of
- other zones to be served, along with their configuration parameters.
- Zones listed in a catalog zone are called "member zones".
- When a catalog zone is loaded or transferred to a slave server
- which supports this functionality, the slave server will create
- the member zones automatically. When the catalog zone is updated
- (for example, to add or delete member zones, or change
- their configuration parameters) those changes are immediately put
- into effect. Because the catalog zone is a normal DNS zone, these
- configuration changes can be propagated using the standard AXFR/IXFR
- zone transfer mechanism.
- </p>
-<p>
- Catalog zones' format and behavior are specified as an internet draft
- for interoperability among DNS implementations. As of this release, the
- latest revision of the DNS catalog zones draft can be found here:
- https://datatracker.ietf.org/doc/draft-muks-dnsop-dns-catalog-zones/
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.15.4"></a>Principle of Operation</h3></div></div></div>
-<p>
- Normally, if a zone is to be served by a slave server, the
- <code class="filename">named.conf</code> file on the server must list the
- zone, or the zone must be added using <span class="command"><strong>rndc addzone</strong></span>.
- In environments with a large number of slave servers and/or where
- the zones being served are changing frequently, the overhead involved
- in maintaining consistent zone configuration on all the slave
- servers can be significant.
- </p>
-<p>
- A catalog zone is a way to ease this administrative burden. It is a
- DNS zone that lists member zones that should be served by slave servers.
- When a slave server receives an update to the catalog zone, it adds,
- removes, or reconfigures member zones based on the data received.
- </p>
-<p>
- To use a catalog zone, it must first be set up as a normal zone on
- the master and the on slave servers that will be configured to use
- it. It must also be added to a <code class="option">catalog-zones</code> list
- in the <code class="option">options</code> or <code class="option">view</code> statement
- in <code class="filename">named.conf</code>. (This is comparable to the way
- a policy zone is configured as a normal zone and also listed in
- a <code class="option">response-policy</code> statement.)
- </p>
-<p>
- To use the catalog zone feature to serve a new member zone:
- </p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem"><p>
- Set up the the member zone to be served on the master as normal.
- This could be done by editing <code class="filename">named.conf</code>,
- or by running <span class="command"><strong>rndc addzone</strong></span>.
- </p></li>
-<li class="listitem"><p>
- Add an entry to the catalog zone for the new member zone.
- This could be done by editing the catalog zone's master file
- and running <span class="command"><strong>rndc reload</strong></span>, or by updating
- the zone using <span class="command"><strong>nsupdate</strong></span>.
- </p></li>
-</ul></div>
-<p>
- The change to the catalog zone will be propagated from the master to all
- slaves using the normal AXFR/IXFR mechanism. When the slave receives the
- update to the catalog zone, it will detect the entry for the new member
- zone, create an instance of of that zone on the slave server, and point
- that instance to the <code class="option">masters</code> specified in the catalog
- zone data. The newly created member zone is a normal slave zone, so
- BIND will immediately initiate a transfer of zone contents from the
- master. Once complete, the slave will start serving the member zone.
- </p>
-<p>
- Removing a member zone from a slave server requires nothing more than
- deleting the member zone's entry in the catalog zone. The change to the
- catalog cone is propagated to the slave server using the normal AXFR/IXFR
- transfer mechanism. The slave server, on processing the update, will
- notice that the member zone has been removed. It will stop serving the
- zone and remove it from its list of configured zones. (Removing the
- member zone from the master server has to be done in the normal way,
- by editing the configuration file or running
- <span class="command"><strong>rndc delzone</strong></span>.)
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.15.5"></a>Configuring Catalog Zones</h3></div></div></div>
-<p>
- Catalog zones are configured with a <span class="command"><strong>catalog-zones</strong></span>
- statement in the <code class="literal">options</code> or <code class="literal">view</code>
- section of <code class="filename">named.conf</code>. For example,
- </p>
-<pre class="screen">
-catalog-zones {
- zone "catalog.example"
- default-masters { 10.53.0.1; }
- in-memory no
- zone-directory "catzones"
- min-update-interval 10;
-};
-</pre>
-<p>
- This statement specifies that the zone
- <code class="literal">catalog.example</code> is a catalog zone. This zone must be
- properly configured in the same view. In most configurations, it would
- be a slave zone.
- </p>
-<p>
- The options following the zone name are not required, and may be
- specified in any order:
- </p>
-<p>
- The <code class="option">default-masters</code> option defines the default masters
- for member zones listed in a catalog zone. This can be overridden by
- options within a catalog zone. If no such options are included, then
- member zones will transfer their contents from the servers listed in
- this option.
- </p>
-<p>
- The <code class="option">in-memory</code> option, if set to <code class="literal">yes</code>,
- causes member zones to be stored only in memory. This is functionally
- equivalent to configuring a slave zone without a <code class="option">file</code>.
- option. The default is <code class="literal">no</code>; member zones' content
- will be stored locally in a file whose name is automatically generated
- from the view name, catalog zone name, and member zone name.
- </p>
-<p>
- The <code class="option">zone-directory</code> option causes local copies of
- member zones' master files (if <code class="option">in-memory</code> is not set
- to <code class="literal">yes</code>) to be stored in the specified directory.
- The default is to store zone files in the server's working directory.
- A non-absolute pathname in <code class="option">zone-directory</code> is
- assumed to be relative to the working directory.
- </p>
-<p>
- The <code class="option">min-update-interval</code> option sets the minimum
- interval between processing of updates to catalog zones, in seconds.
- If an update to a catalog zone (for example, via IXFR) happens less
- than <code class="option">min-update-interval</code> seconds after the most
- recent update, then the changes will not be carried out until this
- interval has elapsed. The default is <code class="literal">5</code> seconds.
- </p>
-<p>
- Catalog zones are defined on a per-view basis. Configuring a non-empty
- <code class="option">catalog-zones</code> statement in a view will automatically
- turn on <code class="option">allow-new-zones</code> for that view. (Note: this
- means <span class="command"><strong>rndc addzone</strong></span> and <span class="command"><strong>rndc delzone</strong></span>
- will also work in any view that supports catalog zones.)
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.15.6"></a>Catalog Zone format</h3></div></div></div>
-<p>
- A catalog zone is a regular DNS zone; therefore, it has to have a
- single <code class="literal">SOA</code> and at least one <code class="literal">NS</code>
- record.
- </p>
-<p>
- A record stating the version of the catalog zone format is
- also required. If the version number listed is not supported by
- the server, then a catalog zone may not be used by that server.
- </p>
-<pre class="screen">
-catalog.example. IN SOA . . 2016022901 900 600 86400 1
-catalog.example. IN NS nsexample.
-version.catalog.example. IN TXT "1"
-</pre>
-<p>
- Note that this record must have the domain name
- version.<em class="replaceable"><code>catalog-zone-name</code></em>. This illustrates
- how the meaning of data stored in a catalog zone is indicated by the
- the domain name label immediately before the catalog zone domain.
- </p>
-<p>
- Catalog zone options can be set either globally for the whole catalog
- zone or for a single member zone. Global options override the settings
- in the configuration file and member zone options override global
- options.
- </p>
-<p>
- Global options are set at the apex of the catalog zone, e.g.:
-</p>
-<pre class="screen">
- masters.catalog.example. IN AAAA 2001:db8::1
-</pre>
-<p>BIND currently supports the following options:</p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem">
-<p>A simple <code class="option">masters</code> definition:</p>
-<pre class="screen">
- masters.catalog.example. IN A 192.0.2.1
- </pre>
-<p>
- This option defines a master server for the member zones - it
- can be either an A or AAAA record. If multiple masters are set the
- order in which they are used is random.
- </p>
-</li>
-<li class="listitem">
-<p>A <code class="option">masters</code> with a TSIG key defined:</p>
-<pre class="screen">
- label.masters.catalog.example. IN A 192.0.2.2
- label.masters.catalog.example. IN TXT "tsig_key_name"
- </pre>
-<p>
- This option defines a master server for the member zone with a TSIG
- key set. The TSIG key must be configured in the configuration file.
- <code class="option">label</code> can be any valid DNS label.
- </p>
-</li>
-<li class="listitem">
-<p><code class="option">allow-query</code> and
- <code class="option">allow-transfer</code> ACLs:</p>
-<pre class="screen">
- allow-query.catalog.example. IN APL 1:10.0.0.1/24
- allow-transfer.catalog.example. IN APL !1:10.0.0.1/32 1:10.0.0.0/24
- </pre>
-<p>
- These options are the equivalents of <code class="option">allow-query</code>
- and <code class="option">allow-transfer</code> in a zone declaration in the
- <code class="filename">named.conf</code> configuration file. The ACL is
- processed in order - if there's no match to any rule the default
- policy is to deny access. For the syntax of the APL RR see RFC
- 3123
- </p>
-</li>
-</ul></div>
-<p>
- A member zone is added by including a <code class="literal">PTR</code>
- resource record in the <code class="literal">zones</code> sub-domain of the
- catalog zone. The record label is a <code class="literal">SHA-1</code> hash
- of the member zone name in wire format. The target of the PTR
- record is the member zone name. For example, to add the member
- zone <code class="literal">domain.example</code>:
- </p>
-<pre class="screen">
-5960775ba382e7a4e09263fc06e7c00569b6a05c.zones.catalog.example. IN PTR domain.example.
-</pre>
-<p>
- The hash is necessary to identify options for a specific member
- zone. The member zone-specific options are defined the same way as
- global options, but in the member zone subdomain:
- </p>
-<pre class="screen">
-masters.5960775ba382e7a4e09263fc06e7c00569b6a05c.zones.catalog.example. IN A 192.0.2.2
-label.masters.5960775ba382e7a4e09263fc06e7c00569b6a05c.zones.catalog.example. IN AAAA 2001:db8::2
-label.masters.5960775ba382e7a4e09263fc06e7c00569b6a05c.zones.catalog.example. IN TXT "tsig_key"
-allow-query.5960775ba382e7a4e09263fc06e7c00569b6a05c.zones.catalog.example. IN APL 1:10.0.0.0/24
-</pre>
-<p>
- As would be expected, options defined for a specific zone override
- the global options defined in the catalog zone. These in turn override
- the global options defined in the <code class="literal">catalog-zones</code>
- statement in the configuration file.
- </p>
-<p>
- (Note that none of the global records an option will be inherited if
- any records are defined for that option for the specific zone. For
- example, if the zone had a <code class="literal">masters</code> record of type
- A but not AAAA, then it would <span class="emphasis"><em>not</em></span> inherit the
- type AAAA record from the global option.)
- </p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="ipv6"></a>IPv6 Support in <acronym class="acronym">BIND</acronym> 9</h2></div></div></div>
-<p>
- <acronym class="acronym">BIND</acronym> 9 fully supports all currently
- defined forms of IPv6 name to address and address to name
- lookups. It will also use IPv6 addresses to make queries when
- running on an IPv6 capable system.
- </p>
-<p>
- For forward lookups, <acronym class="acronym">BIND</acronym> 9 supports
- only AAAA records. RFC 3363 deprecated the use of A6 records,
- and client-side support for A6 records was accordingly removed
- from <acronym class="acronym">BIND</acronym> 9.
- However, authoritative <acronym class="acronym">BIND</acronym> 9 name servers still
- load zone files containing A6 records correctly, answer queries
- for A6 records, and accept zone transfer for a zone containing A6
- records.
- </p>
-<p>
- For IPv6 reverse lookups, <acronym class="acronym">BIND</acronym> 9 supports
- the traditional "nibble" format used in the
- <span class="emphasis"><em>ip6.arpa</em></span> domain, as well as the older, deprecated
- <span class="emphasis"><em>ip6.int</em></span> domain.
- Older versions of <acronym class="acronym">BIND</acronym> 9
- supported the "binary label" (also known as "bitstring") format,
- but support of binary labels has been completely removed per
- RFC 3363.
- Many applications in <acronym class="acronym">BIND</acronym> 9 do not understand
- the binary label format at all any more, and will return an
- error if given.
- In particular, an authoritative <acronym class="acronym">BIND</acronym> 9
- name server will not load a zone file containing binary labels.
- </p>
-<p>
- For an overview of the format and structure of IPv6 addresses,
- see <a class="xref" href="Bv9ARM.ch11.html#ipv6addresses" title="IPv6 addresses (AAAA)">the section called &#8220;IPv6 addresses (AAAA)&#8221;</a>.
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.16.6"></a>Address Lookups Using AAAA Records</h3></div></div></div>
-<p>
- The IPv6 AAAA record is a parallel to the IPv4 A record,
- and, unlike the deprecated A6 record, specifies the entire
- IPv6 address in a single record. For example,
- </p>
-<pre class="programlisting">
-$ORIGIN example.com.
-host 3600 IN AAAA 2001:db8::1
-</pre>
-<p>
- Use of IPv4-in-IPv6 mapped addresses is not recommended.
- If a host has an IPv4 address, use an A record, not
- a AAAA, with <code class="literal">::ffff:192.168.42.1</code> as
- the address.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.16.7"></a>Address to Name Lookups Using Nibble Format</h3></div></div></div>
-<p>
- When looking up an address in nibble format, the address
- components are simply reversed, just as in IPv4, and
- <code class="literal">ip6.arpa.</code> is appended to the
- resulting name.
- For example, the following would provide reverse name lookup for
- a host with address
- <code class="literal">2001:db8::1</code>.
- </p>
-<pre class="programlisting">
-$ORIGIN 0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.
-1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 14400 IN PTR (
- host.example.com. )
-</pre>
-</div>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="Bv9ARM.ch03.html">Prev</a> </td>
-<td width="20%" align="center"> </td>
-<td width="40%" align="right"> <a accesskey="n" href="Bv9ARM.ch05.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">Chapter 3. Name Server Configuration </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> Chapter 5. The <acronym class="acronym">BIND</acronym> 9 Lightweight Resolver</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/Bv9ARM.ch05.html b/doc/arm/Bv9ARM.ch05.html
deleted file mode 100644
index 7de7a710..00000000
--- a/doc/arm/Bv9ARM.ch05.html
+++ /dev/null
@@ -1,141 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>Chapter 5. The BIND 9 Lightweight Resolver</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="prev" href="Bv9ARM.ch04.html" title="Chapter 4. Advanced DNS Features">
-<link rel="next" href="Bv9ARM.ch06.html" title="Chapter 6. BIND 9 Configuration Reference">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center">Chapter 5. The <acronym class="acronym">BIND</acronym> 9 Lightweight Resolver</th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="Bv9ARM.ch04.html">Prev</a> </td>
-<th width="60%" align="center"> </th>
-<td width="20%" align="right"> <a accesskey="n" href="Bv9ARM.ch06.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="chapter">
-<div class="titlepage"><div><div><h1 class="title">
-<a name="Bv9ARM.ch05"></a>Chapter 5. The <acronym class="acronym">BIND</acronym> 9 Lightweight Resolver</h1></div></div></div>
-<div class="toc">
-<p><b>Table of Contents</b></p>
-<dl class="toc">
-<dt><span class="section"><a href="Bv9ARM.ch05.html#lightweight_resolver">The Lightweight Resolver Library</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch05.html#lwresd">Running a Resolver Daemon</a></span></dt>
-</dl>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="lightweight_resolver"></a>The Lightweight Resolver Library</h2></div></div></div>
-<p>
- Traditionally applications have been linked with a stub resolver
- library that sends recursive DNS queries to a local caching name
- server.
- </p>
-<p>
- IPv6 once introduced new complexity into the resolution process,
- such as following A6 chains and DNAME records, and simultaneous
- lookup of IPv4 and IPv6 addresses. Though most of the complexity was
- then removed, these are hard or impossible
- to implement in a traditional stub resolver.
- </p>
-<p>
- <acronym class="acronym">BIND</acronym> 9 therefore can also provide resolution
- services to local clients
- using a combination of a lightweight resolver library and a resolver
- daemon process running on the local host. These communicate using
- a simple UDP-based protocol, the "lightweight resolver protocol"
- that is distinct from and simpler than the full DNS protocol.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="lwresd"></a>Running a Resolver Daemon</h2></div></div></div>
-<p>
- To use the lightweight resolver interface, the system must
- run the resolver daemon <span class="command"><strong>lwresd</strong></span> or a
- local
- name server configured with a <span class="command"><strong>lwres</strong></span>
- statement.
- </p>
-<p>
- By default, applications using the lightweight resolver library will
- make
- UDP requests to the IPv4 loopback address (127.0.0.1) on port 921.
- The
- address can be overridden by <span class="command"><strong>lwserver</strong></span>
- lines in
- <code class="filename">/etc/resolv.conf</code>.
- </p>
-<p>
- The daemon currently only looks in the DNS, but in the future
- it may use other sources such as <code class="filename">/etc/hosts</code>,
- NIS, etc.
- </p>
-<p>
- The <span class="command"><strong>lwresd</strong></span> daemon is essentially a
- caching-only name server that responds to requests using the
- lightweight
- resolver protocol rather than the DNS protocol. Because it needs
- to run on each host, it is designed to require no or minimal
- configuration.
- Unless configured otherwise, it uses the name servers listed on
- <span class="command"><strong>nameserver</strong></span> lines in <code class="filename">/etc/resolv.conf</code>
- as forwarders, but is also capable of doing the resolution
- autonomously if
- none are specified.
- </p>
-<p>
- The <span class="command"><strong>lwresd</strong></span> daemon may also be
- configured with a
- <code class="filename">named.conf</code> style configuration file,
- in
- <code class="filename">/etc/lwresd.conf</code> by default. A name
- server may also
- be configured to act as a lightweight resolver daemon using the
- <span class="command"><strong>lwres</strong></span> statement in <code class="filename">named.conf</code>.
- </p>
-<p>
- The number of client queries that the <span class="command"><strong>lwresd</strong></span>
- daemon is able to serve can be set using the
- <code class="option">lwres-tasks</code> and <code class="option">lwres-clients</code>
- statements in the configuration.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="Bv9ARM.ch04.html">Prev</a> </td>
-<td width="20%" align="center"> </td>
-<td width="40%" align="right"> <a accesskey="n" href="Bv9ARM.ch06.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">Chapter 4. Advanced DNS Features </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> Chapter 6. <acronym class="acronym">BIND</acronym> 9 Configuration Reference</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/Bv9ARM.ch06.html b/doc/arm/Bv9ARM.ch06.html
deleted file mode 100644
index 9ad0d917..00000000
--- a/doc/arm/Bv9ARM.ch06.html
+++ /dev/null
@@ -1,13555 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>Chapter 6. BIND 9 Configuration Reference</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="prev" href="Bv9ARM.ch05.html" title="Chapter 5. The BIND 9 Lightweight Resolver">
-<link rel="next" href="Bv9ARM.ch07.html" title="Chapter 7. BIND 9 Security Considerations">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center">Chapter 6. <acronym class="acronym">BIND</acronym> 9 Configuration Reference</th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="Bv9ARM.ch05.html">Prev</a> </td>
-<th width="60%" align="center"> </th>
-<td width="20%" align="right"> <a accesskey="n" href="Bv9ARM.ch07.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="chapter">
-<div class="titlepage"><div><div><h1 class="title">
-<a name="Bv9ARM.ch06"></a>Chapter 6. <acronym class="acronym">BIND</acronym> 9 Configuration Reference</h1></div></div></div>
-<div class="toc">
-<p><b>Table of Contents</b></p>
-<dl class="toc">
-<dt><span class="section"><a href="Bv9ARM.ch06.html#configuration_file_elements">Configuration File Elements</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#address_match_lists">Address Match Lists</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#comment_syntax">Comment Syntax</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#Configuration_File_Grammar">Configuration File Grammar</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#acl_grammar"><span class="command"><strong>acl</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#acl"><span class="command"><strong>acl</strong></span> Statement Definition and
- Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#controls_grammar"><span class="command"><strong>controls</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#controls_statement_definition_and_usage"><span class="command"><strong>controls</strong></span> Statement Definition and
- Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#include_grammar"><span class="command"><strong>include</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#include_statement"><span class="command"><strong>include</strong></span> Statement Definition and Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#key_grammar"><span class="command"><strong>key</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#key_statement"><span class="command"><strong>key</strong></span> Statement Definition and Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#logging_grammar"><span class="command"><strong>logging</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#logging_statement"><span class="command"><strong>logging</strong></span> Statement Definition and Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#lwres_grammar"><span class="command"><strong>lwres</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#lwres_statement"><span class="command"><strong>lwres</strong></span> Statement Definition and Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#masters_grammar"><span class="command"><strong>masters</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#masters_statement"><span class="command"><strong>masters</strong></span> Statement Definition and
- Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#options_grammar"><span class="command"><strong>options</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#options"><span class="command"><strong>options</strong></span> Statement Definition and
- Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#server_statement_grammar"><span class="command"><strong>server</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#server_statement_definition_and_usage"><span class="command"><strong>server</strong></span> Statement Definition and
- Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#statschannels"><span class="command"><strong>statistics-channels</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#statistics_channels"><span class="command"><strong>statistics-channels</strong></span> Statement Definition and
- Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#trusted-keys"><span class="command"><strong>trusted-keys</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#trusted_keys"><span class="command"><strong>trusted-keys</strong></span> Statement Definition
- and Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#managed_keys"><span class="command"><strong>managed-keys</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#managed-keys"><span class="command"><strong>managed-keys</strong></span> Statement Definition
- and Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#view_statement_grammar"><span class="command"><strong>view</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#view_statement"><span class="command"><strong>view</strong></span> Statement Definition and Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#zone_statement_grammar"><span class="command"><strong>zone</strong></span>
- Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#zone_statement"><span class="command"><strong>zone</strong></span> Statement Definition and Usage</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#zone_file">Zone File</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#types_of_resource_records_and_when_to_use_them">Types of Resource Records and When to Use Them</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#mx_records">Discussion of MX Records</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#Setting_TTLs">Setting TTLs</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#ipv4_reverse">Inverse Mapping in IPv4</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#zone_directives">Other Zone File Directives</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#generate_directive"><acronym class="acronym">BIND</acronym> Master File Extension: the <span class="command"><strong>$GENERATE</strong></span> Directive</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#zonefile_format">Additional File Formats</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#statistics">BIND9 Statistics</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#statsfile">The Statistics File</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#statistics_counters">Statistics Counters</a></span></dt>
-</dl></dd>
-</dl>
-</div>
-<p>
- <acronym class="acronym">BIND</acronym> 9 configuration is broadly similar
- to <acronym class="acronym">BIND</acronym> 8; however, there are a few new
- areas
- of configuration, such as views. <acronym class="acronym">BIND</acronym>
- 8 configuration files should work with few alterations in <acronym class="acronym">BIND</acronym>
- 9, although more complex configurations should be reviewed to check
- if they can be more efficiently implemented using the new features
- found in <acronym class="acronym">BIND</acronym> 9.
- </p>
-<p>
- <acronym class="acronym">BIND</acronym> 4 configuration files can be
- converted to the new format
- using the shell script
- <code class="filename">contrib/named-bootconf/named-bootconf.sh</code>.
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="configuration_file_elements"></a>Configuration File Elements</h2></div></div></div>
-<p>
- Following is a list of elements used throughout the <acronym class="acronym">BIND</acronym> configuration
- file documentation:
- </p>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="1.855in" class="1">
-<col width="3.770in" class="2">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p>
- <code class="varname">acl_name</code>
- </p>
- </td>
-<td>
- <p>
- The name of an <code class="varname">address_match_list</code> as
- defined by the <span class="command"><strong>acl</strong></span> statement.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">address_match_list</code>
- </p>
- </td>
-<td>
- <p>
- A list of one or more
- <code class="varname">ip_addr</code>,
- <code class="varname">ip_prefix</code>, <code class="varname">key_id</code>,
- or <code class="varname">acl_name</code> elements, see
- <a class="xref" href="Bv9ARM.ch06.html#address_match_lists" title="Address Match Lists">the section called &#8220;Address Match Lists&#8221;</a>.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">masters_list</code>
- </p>
- </td>
-<td>
- <p>
- A named list of one or more <code class="varname">ip_addr</code>
- with optional <code class="varname">key_id</code> and/or
- <code class="varname">ip_port</code>.
- A <code class="varname">masters_list</code> may include other
- <code class="varname">masters_lists</code>.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">domain_name</code>
- </p>
- </td>
-<td>
- <p>
- A quoted string which will be used as
- a DNS name, for example "<code class="literal">my.test.domain</code>".
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">namelist</code>
- </p>
- </td>
-<td>
- <p>
- A list of one or more <code class="varname">domain_name</code>
- elements.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">dotted_decimal</code>
- </p>
- </td>
-<td>
- <p>
- One to four integers valued 0 through
- 255 separated by dots (`.'), such as <span class="command"><strong>123</strong></span>,
- <span class="command"><strong>45.67</strong></span> or <span class="command"><strong>89.123.45.67</strong></span>.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">ip4_addr</code>
- </p>
- </td>
-<td>
- <p>
- An IPv4 address with exactly four elements
- in <code class="varname">dotted_decimal</code> notation.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">ip6_addr</code>
- </p>
- </td>
-<td>
- <p>
- An IPv6 address, such as <span class="command"><strong>2001:db8::1234</strong></span>.
- IPv6 scoped addresses that have ambiguity on their
- scope zones must be disambiguated by an appropriate
- zone ID with the percent character (`%') as
- delimiter. It is strongly recommended to use
- string zone names rather than numeric identifiers,
- in order to be robust against system configuration
- changes. However, since there is no standard
- mapping for such names and identifier values,
- currently only interface names as link identifiers
- are supported, assuming one-to-one mapping between
- interfaces and links. For example, a link-local
- address <span class="command"><strong>fe80::1</strong></span> on the link
- attached to the interface <span class="command"><strong>ne0</strong></span>
- can be specified as <span class="command"><strong>fe80::1%ne0</strong></span>.
- Note that on most systems link-local addresses
- always have the ambiguity, and need to be
- disambiguated.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">ip_addr</code>
- </p>
- </td>
-<td>
- <p>
- An <code class="varname">ip4_addr</code> or <code class="varname">ip6_addr</code>.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">ip_dscp</code>
- </p>
- </td>
-<td>
- <p>
- A <code class="varname">number</code> between 0 and 63, used
- to select a differentiated services code point (DSCP)
- value for use with outgoing traffic on operating systems
- that support DSCP.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">ip_port</code>
- </p>
- </td>
-<td>
- <p>
- An IP port <code class="varname">number</code>.
- The <code class="varname">number</code> is limited to 0
- through 65535, with values
- below 1024 typically restricted to use by processes running
- as root.
- In some cases, an asterisk (`*') character can be used as a
- placeholder to
- select a random high-numbered port.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">ip_prefix</code>
- </p>
- </td>
-<td>
- <p>
- An IP network specified as an <code class="varname">ip_addr</code>,
- followed by a slash (`/') and then the number of bits in the
- netmask.
- Trailing zeros in a <code class="varname">ip_addr</code>
- may omitted.
- For example, <span class="command"><strong>127/8</strong></span> is the
- network <span class="command"><strong>127.0.0.0</strong></span> with
- netmask <span class="command"><strong>255.0.0.0</strong></span> and <span class="command"><strong>1.2.3.0/28</strong></span> is
- network <span class="command"><strong>1.2.3.0</strong></span> with netmask <span class="command"><strong>255.255.255.240</strong></span>.
- </p>
- <p>
- When specifying a prefix involving a IPv6 scoped address
- the scope may be omitted. In that case the prefix will
- match packets from any scope.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">key_id</code>
- </p>
- </td>
-<td>
- <p>
- A <code class="varname">domain_name</code> representing
- the name of a shared key, to be used for transaction
- security.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">key_list</code>
- </p>
- </td>
-<td>
- <p>
- A list of one or more
- <code class="varname">key_id</code>s,
- separated by semicolons and ending with a semicolon.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">number</code>
- </p>
- </td>
-<td>
- <p>
- A non-negative 32-bit integer
- (i.e., a number between 0 and 4294967295, inclusive).
- Its acceptable value might further
- be limited by the context in which it is used.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">path_name</code>
- </p>
- </td>
-<td>
- <p>
- A quoted string which will be used as
- a pathname, such as <code class="filename">zones/master/my.test.domain</code>.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">port_list</code>
- </p>
- </td>
-<td>
- <p>
- A list of an <code class="varname">ip_port</code> or a port
- range.
- A port range is specified in the form of
- <strong class="userinput"><code>range</code></strong> followed by
- two <code class="varname">ip_port</code>s,
- <code class="varname">port_low</code> and
- <code class="varname">port_high</code>, which represents
- port numbers from <code class="varname">port_low</code> through
- <code class="varname">port_high</code>, inclusive.
- <code class="varname">port_low</code> must not be larger than
- <code class="varname">port_high</code>.
- For example,
- <strong class="userinput"><code>range 1024 65535</code></strong> represents
- ports from 1024 through 65535.
- In either case an asterisk (`*') character is not
- allowed as a valid <code class="varname">ip_port</code>.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">size_spec</code>
- </p>
- </td>
-<td>
- <p>
- A 64-bit unsigned integer, or the keywords
- <strong class="userinput"><code>unlimited</code></strong> or
- <strong class="userinput"><code>default</code></strong>.
- </p>
- <p>
- Integers may take values
- 0 &lt;= value &lt;= 18446744073709551615, though
- certain parameters
- (such as <span class="command"><strong>max-journal-size</strong></span>) may
- use a more limited range within these extremes.
- In most cases, setting a value to 0 does not
- literally mean zero; it means "undefined" or
- "as big as possible", depending on the context.
- See the explanations of particular parameters
- that use <code class="varname">size_spec</code>
- for details on how they interpret its use.
- </p>
- <p>
- Numeric values can optionally be followed by a
- scaling factor:
- <strong class="userinput"><code>K</code></strong> or <strong class="userinput"><code>k</code></strong>
- for kilobytes,
- <strong class="userinput"><code>M</code></strong> or <strong class="userinput"><code>m</code></strong>
- for megabytes, and
- <strong class="userinput"><code>G</code></strong> or <strong class="userinput"><code>g</code></strong>
- for gigabytes, which scale by 1024, 1024*1024, and
- 1024*1024*1024 respectively.
- </p>
- <p>
- <code class="varname">unlimited</code> generally means
- "as big as possible", and is usually the best
- way to safely set a very large number.
- </p>
- <p>
- <code class="varname">default</code>
- uses the limit that was in force when the server was started.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">size_or_percent</code>
- </p>
- </td>
-<td>
- <p>
- <code class="varname">size_spec</code> or integer value
- followed by '%' to represent percents.
- </p>
- <p>
- The behavior is exactly the same as
- <code class="varname">size_spec</code>, but
- <code class="varname">size_or_percent</code> allows also
- to specify a positive integer value followed by
- '%' sign to represent percents.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">yes_or_no</code>
- </p>
- </td>
-<td>
- <p>
- Either <strong class="userinput"><code>yes</code></strong> or <strong class="userinput"><code>no</code></strong>.
- The words <strong class="userinput"><code>true</code></strong> and <strong class="userinput"><code>false</code></strong> are
- also accepted, as are the numbers <strong class="userinput"><code>1</code></strong>
- and <strong class="userinput"><code>0</code></strong>.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">dialup_option</code>
- </p>
- </td>
-<td>
- <p>
- One of <strong class="userinput"><code>yes</code></strong>,
- <strong class="userinput"><code>no</code></strong>, <strong class="userinput"><code>notify</code></strong>,
- <strong class="userinput"><code>notify-passive</code></strong>, <strong class="userinput"><code>refresh</code></strong> or
- <strong class="userinput"><code>passive</code></strong>.
- When used in a zone, <strong class="userinput"><code>notify-passive</code></strong>,
- <strong class="userinput"><code>refresh</code></strong>, and <strong class="userinput"><code>passive</code></strong>
- are restricted to slave and stub zones.
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="address_match_lists"></a>Address Match Lists</h3></div></div></div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="id-1.7.4.4.2"></a>Syntax</h4></div></div></div>
-<pre class="programlisting"><code class="varname">address_match_list</code> = address_match_list_element ;
- [<span class="optional"> address_match_list_element; ... </span>]
-<code class="varname">address_match_list_element</code> = [<span class="optional"> ! </span>] (ip_address [<span class="optional">/length</span>] |
- key key_id | acl_name | { address_match_list } )
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="id-1.7.4.4.3"></a>Definition and Usage</h4></div></div></div>
-<p>
- Address match lists are primarily used to determine access
- control for various server operations. They are also used in
- the <span class="command"><strong>listen-on</strong></span> and <span class="command"><strong>sortlist</strong></span>
- statements. The elements which constitute an address match
- list can be any of the following:
- </p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem">an IP address (IPv4 or IPv6)</li>
-<li class="listitem">an IP prefix (in `/' notation)</li>
-<li class="listitem">
- a key ID, as defined by the <span class="command"><strong>key</strong></span>
- statement
- </li>
-<li class="listitem">the name of an address match list defined with
- the <span class="command"><strong>acl</strong></span> statement
- </li>
-<li class="listitem">a nested address match list enclosed in braces</li>
-</ul></div>
-<p>
- Elements can be negated with a leading exclamation mark (`!'),
- and the match list names "any", "none", "localhost", and
- "localnets" are predefined. More information on those names
- can be found in the description of the acl statement.
- </p>
-<p>
- The addition of the key clause made the name of this syntactic
- element something of a misnomer, since security keys can be used
- to validate access without regard to a host or network address.
- Nonetheless, the term "address match list" is still used
- throughout the documentation.
- </p>
-<p>
- When a given IP address or prefix is compared to an address
- match list, the comparison takes place in approximately O(1)
- time. However, key comparisons require that the list of keys
- be traversed until a matching key is found, and therefore may
- be somewhat slower.
- </p>
-<p>
- The interpretation of a match depends on whether the list is being
- used for access control, defining <span class="command"><strong>listen-on</strong></span> ports, or in a
- <span class="command"><strong>sortlist</strong></span>, and whether the element was negated.
- </p>
-<p>
- When used as an access control list, a non-negated match
- allows access and a negated match denies access. If
- there is no match, access is denied. The clauses
- <span class="command"><strong>allow-notify</strong></span>,
- <span class="command"><strong>allow-recursion</strong></span>,
- <span class="command"><strong>allow-recursion-on</strong></span>,
- <span class="command"><strong>allow-query</strong></span>,
- <span class="command"><strong>allow-query-on</strong></span>,
- <span class="command"><strong>allow-query-cache</strong></span>,
- <span class="command"><strong>allow-query-cache-on</strong></span>,
- <span class="command"><strong>allow-transfer</strong></span>,
- <span class="command"><strong>allow-update</strong></span>,
- <span class="command"><strong>allow-update-forwarding</strong></span>,
- <span class="command"><strong>blackhole</strong></span>, and
- <span class="command"><strong>keep-response-order</strong></span> all use address match
- lists. Similarly, the <span class="command"><strong>listen-on</strong></span> option will cause the
- server to refuse queries on any of the machine's
- addresses which do not match the list.
- </p>
-<p>
- Order of insertion is significant. If more than one element
- in an ACL is found to match a given IP address or prefix,
- preference will be given to the one that came
- <span class="emphasis"><em>first</em></span> in the ACL definition.
- Because of this first-match behavior, an element that
- defines a subset of another element in the list should
- come before the broader element, regardless of whether
- either is negated. For example, in
- <span class="command"><strong>1.2.3/24; ! 1.2.3.13;</strong></span>
- the 1.2.3.13 element is completely useless because the
- algorithm will match any lookup for 1.2.3.13 to the 1.2.3/24
- element. Using <span class="command"><strong>! 1.2.3.13; 1.2.3/24</strong></span> fixes
- that problem by having 1.2.3.13 blocked by the negation, but
- all other 1.2.3.* hosts fall through.
- </p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="comment_syntax"></a>Comment Syntax</h3></div></div></div>
-<p>
- The <acronym class="acronym">BIND</acronym> 9 comment syntax allows for
- comments to appear
- anywhere that whitespace may appear in a <acronym class="acronym">BIND</acronym> configuration
- file. To appeal to programmers of all kinds, they can be written
- in the C, C++, or shell/perl style.
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="id-1.7.4.5.3"></a>Syntax</h4></div></div></div>
-<p>
- </p>
-<pre class="programlisting">/* This is a <acronym class="acronym">BIND</acronym> comment as in C */</pre>
-<p>
- </p>
-<pre class="programlisting">// This is a <acronym class="acronym">BIND</acronym> comment as in C++</pre>
-<p>
- </p>
-<pre class="programlisting"># This is a <acronym class="acronym">BIND</acronym> comment as in common UNIX shells
-# and perl</pre>
-<p>
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="id-1.7.4.5.4"></a>Definition and Usage</h4></div></div></div>
-<p>
- Comments may appear anywhere that whitespace may appear in
- a <acronym class="acronym">BIND</acronym> configuration file.
- </p>
-<p>
- C-style comments start with the two characters /* (slash,
- star) and end with */ (star, slash). Because they are completely
- delimited with these characters, they can be used to comment only
- a portion of a line or to span multiple lines.
- </p>
-<p>
- C-style comments cannot be nested. For example, the following
- is not valid because the entire comment ends with the first */:
- </p>
-<p>
-
-</p>
-<pre class="programlisting">/* This is the start of a comment.
- This is still part of the comment.
-/* This is an incorrect attempt at nesting a comment. */
- This is no longer in any comment. */
-</pre>
-<p>
-
- </p>
-<p>
- C++-style comments start with the two characters // (slash,
- slash) and continue to the end of the physical line. They cannot
- be continued across multiple physical lines; to have one logical
- comment span multiple lines, each line must use the // pair.
- For example:
- </p>
-<p>
-
-</p>
-<pre class="programlisting">// This is the start of a comment. The next line
-// is a new comment, even though it is logically
-// part of the previous comment.
-</pre>
-<p>
-
- </p>
-<p>
- Shell-style (or perl-style, if you prefer) comments start
- with the character <code class="literal">#</code> (number sign)
- and continue to the end of the
- physical line, as in C++ comments.
- For example:
- </p>
-<p>
-
-</p>
-<pre class="programlisting"># This is the start of a comment. The next line
-# is a new comment, even though it is logically
-# part of the previous comment.
-</pre>
-<p>
-
- </p>
-<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Warning</h3>
-<p>
- You cannot use the semicolon (`;') character
- to start a comment such as you would in a zone file. The
- semicolon indicates the end of a configuration
- statement.
- </p>
-</div>
-</div>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="Configuration_File_Grammar"></a>Configuration File Grammar</h2></div></div></div>
-<p>
- A <acronym class="acronym">BIND</acronym> 9 configuration consists of
- statements and comments.
- Statements end with a semicolon. Statements and comments are the
- only elements that can appear without enclosing braces. Many
- statements contain a block of sub-statements, which are also
- terminated with a semicolon.
- </p>
-<p>
- The following statements are supported:
- </p>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="1.336in" class="1">
-<col width="3.778in" class="2">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p><span class="command"><strong>acl</strong></span></p>
- </td>
-<td>
- <p>
- defines a named IP address
- matching list, for access control and other uses.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>controls</strong></span></p>
- </td>
-<td>
- <p>
- declares control channels to be used
- by the <span class="command"><strong>rndc</strong></span> utility.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>include</strong></span></p>
- </td>
-<td>
- <p>
- includes a file.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>key</strong></span></p>
- </td>
-<td>
- <p>
- specifies key information for use in
- authentication and authorization using TSIG.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>logging</strong></span></p>
- </td>
-<td>
- <p>
- specifies what the server logs, and where
- the log messages are sent.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>lwres</strong></span></p>
- </td>
-<td>
- <p>
- configures <span class="command"><strong>named</strong></span> to
- also act as a light-weight resolver daemon (<span class="command"><strong>lwresd</strong></span>).
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>masters</strong></span></p>
- </td>
-<td>
- <p>
- defines a named masters list for
- inclusion in stub and slave zones'
- <span class="command"><strong>masters</strong></span> or
- <span class="command"><strong>also-notify</strong></span> lists.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>options</strong></span></p>
- </td>
-<td>
- <p>
- controls global server configuration
- options and sets defaults for other statements.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>server</strong></span></p>
- </td>
-<td>
- <p>
- sets certain configuration options on
- a per-server basis.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>statistics-channels</strong></span></p>
- </td>
-<td>
- <p>
- declares communication channels to get access to
- <span class="command"><strong>named</strong></span> statistics.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>trusted-keys</strong></span></p>
- </td>
-<td>
- <p>
- defines trusted DNSSEC keys.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>managed-keys</strong></span></p>
- </td>
-<td>
- <p>
- lists DNSSEC keys to be kept up to date
- using RFC 5011 trust anchor maintenance.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>view</strong></span></p>
- </td>
-<td>
- <p>
- defines a view.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>zone</strong></span></p>
- </td>
-<td>
- <p>
- defines a zone.
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-<p>
- The <span class="command"><strong>logging</strong></span> and
- <span class="command"><strong>options</strong></span> statements may only occur once
- per
- configuration.
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="acl_grammar"></a><span class="command"><strong>acl</strong></span> Statement Grammar</h3></div></div></div>
-<pre class="programlisting"><span class="command"><strong>acl</strong></span> acl-name {
- address_match_list
-};
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="acl"></a><span class="command"><strong>acl</strong></span> Statement Definition and
- Usage</h3></div></div></div>
-<p>
- The <span class="command"><strong>acl</strong></span> statement assigns a symbolic
- name to an address match list. It gets its name from a primary
- use of address match lists: Access Control Lists (ACLs).
- </p>
-<p>
- The following ACLs are built-in:
- </p>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="1.130in" class="1">
-<col width="4.000in" class="2">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p><span class="command"><strong>any</strong></span></p>
- </td>
-<td>
- <p>
- Matches all hosts.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>none</strong></span></p>
- </td>
-<td>
- <p>
- Matches no hosts.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>localhost</strong></span></p>
- </td>
-<td>
- <p>
- Matches the IPv4 and IPv6 addresses of all network
- interfaces on the system. When addresses are
- added or removed, the <span class="command"><strong>localhost</strong></span>
- ACL element is updated to reflect the changes.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>localnets</strong></span></p>
- </td>
-<td>
- <p>
- Matches any host on an IPv4 or IPv6 network
- for which the system has an interface.
- When addresses are added or removed,
- the <span class="command"><strong>localnets</strong></span>
- ACL element is updated to reflect the changes.
- Some systems do not provide a way to determine the prefix
- lengths of
- local IPv6 addresses.
- In such a case, <span class="command"><strong>localnets</strong></span>
- only matches the local
- IPv6 addresses, just like <span class="command"><strong>localhost</strong></span>.
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="controls_grammar"></a><span class="command"><strong>controls</strong></span> Statement Grammar</h3></div></div></div>
-<pre class="programlisting"><span class="command"><strong>controls</strong></span> {
- [ inet ( ip_addr | * ) [ port ip_port ]
- allow { <em class="replaceable"><code> address_match_list </code></em> }
- [ keys { <em class="replaceable"><code>key_list</code></em> } ]
- [ read-only <em class="replaceable"><code>yes_or_no</code></em> ] ; ]
- [ inet ...; ]
- [ unix <em class="replaceable"><code>path</code></em> perm <em class="replaceable"><code>number</code></em> owner <em class="replaceable"><code>number</code></em> group <em class="replaceable"><code>number</code></em>
- [ keys { <em class="replaceable"><code>key_list</code></em> } ]
- [ read-only <em class="replaceable"><code>yes_or_no</code></em> ] ; ]
- [ unix ...; ]
-};
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="controls_statement_definition_and_usage"></a><span class="command"><strong>controls</strong></span> Statement Definition and
- Usage</h3></div></div></div>
-<p>
- The <span class="command"><strong>controls</strong></span> statement declares control
- channels to be used by system administrators to control the
- operation of the name server. These control channels are
- used by the <span class="command"><strong>rndc</strong></span> utility to send
- commands to and retrieve non-DNS results from a name server.
- </p>
-<p>
- An <span class="command"><strong>inet</strong></span> control channel is a TCP socket
- listening at the specified <span class="command"><strong>ip_port</strong></span> on the
- specified <span class="command"><strong>ip_addr</strong></span>, which can be an IPv4 or IPv6
- address. An <span class="command"><strong>ip_addr</strong></span> of <code class="literal">*</code> (asterisk) is
- interpreted as the IPv4 wildcard address; connections will be
- accepted on any of the system's IPv4 addresses.
- To listen on the IPv6 wildcard address,
- use an <span class="command"><strong>ip_addr</strong></span> of <code class="literal">::</code>.
- If you will only use <span class="command"><strong>rndc</strong></span> on the local host,
- using the loopback address (<code class="literal">127.0.0.1</code>
- or <code class="literal">::1</code>) is recommended for maximum security.
- </p>
-<p>
- If no port is specified, port 953 is used. The asterisk
- "<code class="literal">*</code>" cannot be used for <span class="command"><strong>ip_port</strong></span>.
- </p>
-<p>
- The ability to issue commands over the control channel is
- restricted by the <span class="command"><strong>allow</strong></span> and
- <span class="command"><strong>keys</strong></span> clauses.
- Connections to the control channel are permitted based on the
- <span class="command"><strong>address_match_list</strong></span>. This is for simple
- IP address based filtering only; any <span class="command"><strong>key_id</strong></span>
- elements of the <span class="command"><strong>address_match_list</strong></span>
- are ignored.
- </p>
-<p>
- A <span class="command"><strong>unix</strong></span> control channel is a UNIX domain
- socket listening at the specified path in the file system.
- Access to the socket is specified by the <span class="command"><strong>perm</strong></span>,
- <span class="command"><strong>owner</strong></span> and <span class="command"><strong>group</strong></span> clauses.
- Note on some platforms (SunOS and Solaris) the permissions
- (<span class="command"><strong>perm</strong></span>) are applied to the parent directory
- as the permissions on the socket itself are ignored.
- </p>
-<p>
- The primary authorization mechanism of the command
- channel is the <span class="command"><strong>key_list</strong></span>, which
- contains a list of <span class="command"><strong>key_id</strong></span>s.
- Each <span class="command"><strong>key_id</strong></span> in the <span class="command"><strong>key_list</strong></span>
- is authorized to execute commands over the control channel.
- See <a class="xref" href="Bv9ARM.ch03.html#rndc">Remote Name Daemon Control application</a> in <a class="xref" href="Bv9ARM.ch03.html#admin_tools" title="Administrative Tools">the section called &#8220;Administrative Tools&#8221;</a>)
- for information about configuring keys in <span class="command"><strong>rndc</strong></span>.
- </p>
-<p>
- If the <span class="command"><strong>read-only</strong></span> clause is enabled, the
- control channel is limited to the following set of read-only
- commands: <span class="command"><strong>nta -dump</strong></span>,
- <span class="command"><strong>null</strong></span>, <span class="command"><strong>status</strong></span>,
- <span class="command"><strong>showzone</strong></span>, <span class="command"><strong>testgen</strong></span>, and
- <span class="command"><strong>zonestatus</strong></span>. By default,
- <span class="command"><strong>read-only</strong></span> is not enabled and the control
- channel allows read-write access.
- </p>
-<p>
- If no <span class="command"><strong>controls</strong></span> statement is present,
- <span class="command"><strong>named</strong></span> will set up a default
- control channel listening on the loopback address 127.0.0.1
- and its IPv6 counterpart ::1.
- In this case, and also when the <span class="command"><strong>controls</strong></span> statement
- is present but does not have a <span class="command"><strong>keys</strong></span> clause,
- <span class="command"><strong>named</strong></span> will attempt to load the command channel key
- from the file <code class="filename">rndc.key</code> in
- <code class="filename">/etc</code> (or whatever <code class="varname">sysconfdir</code>
- was specified as when <acronym class="acronym">BIND</acronym> was built).
- To create a <code class="filename">rndc.key</code> file, run
- <strong class="userinput"><code>rndc-confgen -a</code></strong>.
- </p>
-<p>
- The <code class="filename">rndc.key</code> feature was created to
- ease the transition of systems from <acronym class="acronym">BIND</acronym> 8,
- which did not have digital signatures on its command channel
- messages and thus did not have a <span class="command"><strong>keys</strong></span> clause.
-
- It makes it possible to use an existing <acronym class="acronym">BIND</acronym> 8
- configuration file in <acronym class="acronym">BIND</acronym> 9 unchanged,
- and still have <span class="command"><strong>rndc</strong></span> work the same way
- <span class="command"><strong>ndc</strong></span> worked in BIND 8, simply by executing the
- command <strong class="userinput"><code>rndc-confgen -a</code></strong> after BIND 9 is
- installed.
- </p>
-<p>
- Since the <code class="filename">rndc.key</code> feature
- is only intended to allow the backward-compatible usage of
- <acronym class="acronym">BIND</acronym> 8 configuration files, this
- feature does not
- have a high degree of configurability. You cannot easily change
- the key name or the size of the secret, so you should make a
- <code class="filename">rndc.conf</code> with your own key if you
- wish to change
- those things. The <code class="filename">rndc.key</code> file
- also has its
- permissions set such that only the owner of the file (the user that
- <span class="command"><strong>named</strong></span> is running as) can access it.
- If you
- desire greater flexibility in allowing other users to access
- <span class="command"><strong>rndc</strong></span> commands, then you need to create
- a
- <code class="filename">rndc.conf</code> file and make it group
- readable by a group
- that contains the users who should have access.
- </p>
-<p>
- To disable the command channel, use an empty
- <span class="command"><strong>controls</strong></span> statement:
- <span class="command"><strong>controls { };</strong></span>.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="include_grammar"></a><span class="command"><strong>include</strong></span> Statement Grammar</h3></div></div></div>
-<pre class="programlisting"><span class="command"><strong>include</strong></span> <em class="replaceable"><code>filename</code></em>;</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="include_statement"></a><span class="command"><strong>include</strong></span> Statement Definition and Usage</h3></div></div></div>
-<p>
- The <span class="command"><strong>include</strong></span> statement inserts the
- specified file at the point where the <span class="command"><strong>include</strong></span>
- statement is encountered. The <span class="command"><strong>include</strong></span>
- statement facilitates the administration of configuration
- files
- by permitting the reading or writing of some things but not
- others. For example, the statement could include private keys
- that are readable only by the name server.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="key_grammar"></a><span class="command"><strong>key</strong></span> Statement Grammar</h3></div></div></div>
-<pre class="programlisting"><span class="command"><strong>key</strong></span> <em class="replaceable"><code>key_id</code></em> {
- algorithm <em class="replaceable"><code>algorithm_id</code></em>;
- secret <em class="replaceable"><code>secret_string</code></em>;
-};
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="key_statement"></a><span class="command"><strong>key</strong></span> Statement Definition and Usage</h3></div></div></div>
-<p>
- The <span class="command"><strong>key</strong></span> statement defines a shared
- secret key for use with TSIG (see <a class="xref" href="Bv9ARM.ch04.html#tsig" title="TSIG">the section called &#8220;TSIG&#8221;</a>)
- or the command channel
- (see <a class="xref" href="Bv9ARM.ch06.html#controls_statement_definition_and_usage" title="controls Statement Definition and Usage">the section called &#8220;<span class="command"><strong>controls</strong></span> Statement Definition and
- Usage&#8221;</a>).
- </p>
-<p>
- The <span class="command"><strong>key</strong></span> statement can occur at the
- top level
- of the configuration file or inside a <span class="command"><strong>view</strong></span>
- statement. Keys defined in top-level <span class="command"><strong>key</strong></span>
- statements can be used in all views. Keys intended for use in
- a <span class="command"><strong>controls</strong></span> statement
- (see <a class="xref" href="Bv9ARM.ch06.html#controls_statement_definition_and_usage" title="controls Statement Definition and Usage">the section called &#8220;<span class="command"><strong>controls</strong></span> Statement Definition and
- Usage&#8221;</a>)
- must be defined at the top level.
- </p>
-<p>
- The <em class="replaceable"><code>key_id</code></em>, also known as the
- key name, is a domain name uniquely identifying the key. It can
- be used in a <span class="command"><strong>server</strong></span>
- statement to cause requests sent to that
- server to be signed with this key, or in address match lists to
- verify that incoming requests have been signed with a key
- matching this name, algorithm, and secret.
- </p>
-<p>
- The <em class="replaceable"><code>algorithm_id</code></em> is a string
- that specifies a security/authentication algorithm. The
- <span class="command"><strong>named</strong></span> server supports <code class="literal">hmac-md5</code>,
- <code class="literal">hmac-sha1</code>, <code class="literal">hmac-sha224</code>,
- <code class="literal">hmac-sha256</code>, <code class="literal">hmac-sha384</code>
- and <code class="literal">hmac-sha512</code> TSIG authentication.
- Truncated hashes are supported by appending the minimum
- number of required bits preceded by a dash, e.g.
- <code class="literal">hmac-sha1-80</code>. The
- <em class="replaceable"><code>secret_string</code></em> is the secret
- to be used by the algorithm, and is treated as a base-64
- encoded string.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="logging_grammar"></a><span class="command"><strong>logging</strong></span> Statement Grammar</h3></div></div></div>
-<pre class="programlisting"><span class="command"><strong>logging</strong></span> {
- [ <span class="command"><strong>channel</strong></span> <em class="replaceable"><code>channel_name</code></em> {
- ( <span class="command"><strong>file</strong></span> <em class="replaceable"><code>path_name</code></em>
- [ <span class="command"><strong>versions</strong></span> ( <em class="replaceable"><code>number</code></em> | <span class="command"><strong>unlimited</strong></span> ) ]
- [ <span class="command"><strong>size</strong></span> <em class="replaceable"><code>size_spec</code></em> ]
- | <span class="command"><strong>syslog</strong></span> <em class="replaceable"><code>syslog_facility</code></em>
- | <span class="command"><strong>stderr</strong></span>
- | <span class="command"><strong>null</strong></span> );
- [ <span class="command"><strong>severity</strong></span> (<code class="option">critical</code> | <code class="option">error</code> | <code class="option">warning</code> | <code class="option">notice</code> |
- <code class="option">info</code> | <code class="option">debug</code> [ <em class="replaceable"><code>level</code></em> ] | <code class="option">dynamic</code> ); ]
- [ <span class="command"><strong>print-category</strong></span> <code class="option">yes</code> or <code class="option">no</code>; ]
- [ <span class="command"><strong>print-severity</strong></span> <code class="option">yes</code> or <code class="option">no</code>; ]
- [ <span class="command"><strong>print-time</strong></span> <code class="option">yes</code> or <code class="option">no</code>; ]
- [ <span class="command"><strong>buffered</strong></span> <code class="option">yes</code> or <code class="option">no</code>; ]
- }; ]
- [ <span class="command"><strong>category</strong></span> <em class="replaceable"><code>category_name</code></em> {
- <em class="replaceable"><code>channel_name</code></em> ; [ <em class="replaceable"><code>channel_name</code></em> ; ... ]
- }; ]
- ...
-};
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="logging_statement"></a><span class="command"><strong>logging</strong></span> Statement Definition and Usage</h3></div></div></div>
-<p>
- The <span class="command"><strong>logging</strong></span> statement configures a
- wide
- variety of logging options for the name server. Its <span class="command"><strong>channel</strong></span> phrase
- associates output methods, format options and severity levels with
- a name that can then be used with the <span class="command"><strong>category</strong></span> phrase
- to select how various classes of messages are logged.
- </p>
-<p>
- Only one <span class="command"><strong>logging</strong></span> statement is used to
- define
- as many channels and categories as are wanted. If there is no <span class="command"><strong>logging</strong></span> statement,
- the logging configuration will be:
- </p>
-<pre class="programlisting">logging {
- category default { default_syslog; default_debug; };
- category unmatched { null; };
-};
-</pre>
-<p>
- If <span class="command"><strong>named</strong></span> is started with the
- <code class="option">-L</code> option, it logs to the specified file
- at startup, instead of using syslog. In this case the logging
- configuration will be:
- </p>
-<pre class="programlisting">logging {
- category default { default_logfile; default_debug; };
- category unmatched { null; };
-};
-</pre>
-<p>
- In <acronym class="acronym">BIND</acronym> 9, the logging configuration
- is only established when
- the entire configuration file has been parsed. In <acronym class="acronym">BIND</acronym> 8, it was
- established as soon as the <span class="command"><strong>logging</strong></span>
- statement
- was parsed. When the server is starting up, all logging messages
- regarding syntax errors in the configuration file go to the default
- channels, or to standard error if the <code class="option">-g</code> option
- was specified.
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="channel"></a>The <span class="command"><strong>channel</strong></span> Phrase</h4></div></div></div>
-<p>
- All log output goes to one or more <span class="emphasis"><em>channels</em></span>;
- you can make as many of them as you want.
- </p>
-<p>
- Every channel definition must include a destination clause that
- says whether messages selected for the channel go to a file, to a
- particular syslog facility, to the standard error stream, or are
- discarded. It can optionally also limit the message severity level
- that will be accepted by the channel (the default is
- <span class="command"><strong>info</strong></span>), and whether to include a
- <span class="command"><strong>named</strong></span>-generated time stamp, the
- category name
- and/or severity level (the default is not to include any).
- </p>
-<p>
- The <span class="command"><strong>null</strong></span> destination clause
- causes all messages sent to the channel to be discarded;
- in that case, other options for the channel are meaningless.
- </p>
-<p>
- The <span class="command"><strong>file</strong></span> destination clause directs
- the channel
- to a disk file. It can include limitations
- both on how large the file is allowed to become, and how many
- versions
- of the file will be saved each time the file is opened.
- </p>
-<p>
- If you use the <span class="command"><strong>versions</strong></span> log file
- option, then
- <span class="command"><strong>named</strong></span> will retain that many backup
- versions of the file by
- renaming them when opening. For example, if you choose to keep
- three old versions
- of the file <code class="filename">lamers.log</code>, then just
- before it is opened
- <code class="filename">lamers.log.1</code> is renamed to
- <code class="filename">lamers.log.2</code>, <code class="filename">lamers.log.0</code> is renamed
- to <code class="filename">lamers.log.1</code>, and <code class="filename">lamers.log</code> is
- renamed to <code class="filename">lamers.log.0</code>.
- You can say <span class="command"><strong>versions unlimited</strong></span> to
- not limit
- the number of versions.
- If a <span class="command"><strong>size</strong></span> option is associated with
- the log file,
- then renaming is only done when the file being opened exceeds the
- indicated size. No backup versions are kept by default; any
- existing
- log file is simply appended.
- </p>
-<p>
- The <span class="command"><strong>size</strong></span> option for files is used
- to limit log
- growth. If the file ever exceeds the size, then <span class="command"><strong>named</strong></span> will
- stop writing to the file unless it has a <span class="command"><strong>versions</strong></span> option
- associated with it. If backup versions are kept, the files are
- rolled as
- described above and a new one begun. If there is no
- <span class="command"><strong>versions</strong></span> option, no more data will
- be written to the log
- until some out-of-band mechanism removes or truncates the log to
- less than the
- maximum size. The default behavior is not to limit the size of
- the
- file.
- </p>
-<p>
- Example usage of the <span class="command"><strong>size</strong></span> and
- <span class="command"><strong>versions</strong></span> options:
- </p>
-<pre class="programlisting">channel an_example_channel {
- file "example.log" versions 3 size 20m;
- print-time yes;
- print-category yes;
-};
-</pre>
-<p>
- The <span class="command"><strong>syslog</strong></span> destination clause
- directs the
- channel to the system log. Its argument is a
- syslog facility as described in the <span class="command"><strong>syslog</strong></span> man
- page. Known facilities are <span class="command"><strong>kern</strong></span>, <span class="command"><strong>user</strong></span>,
- <span class="command"><strong>mail</strong></span>, <span class="command"><strong>daemon</strong></span>, <span class="command"><strong>auth</strong></span>,
- <span class="command"><strong>syslog</strong></span>, <span class="command"><strong>lpr</strong></span>, <span class="command"><strong>news</strong></span>,
- <span class="command"><strong>uucp</strong></span>, <span class="command"><strong>cron</strong></span>, <span class="command"><strong>authpriv</strong></span>,
- <span class="command"><strong>ftp</strong></span>, <span class="command"><strong>local0</strong></span>, <span class="command"><strong>local1</strong></span>,
- <span class="command"><strong>local2</strong></span>, <span class="command"><strong>local3</strong></span>, <span class="command"><strong>local4</strong></span>,
- <span class="command"><strong>local5</strong></span>, <span class="command"><strong>local6</strong></span> and
- <span class="command"><strong>local7</strong></span>, however not all facilities
- are supported on
- all operating systems.
- How <span class="command"><strong>syslog</strong></span> will handle messages
- sent to
- this facility is described in the <span class="command"><strong>syslog.conf</strong></span> man
- page. If you have a system which uses a very old version of <span class="command"><strong>syslog</strong></span> that
- only uses two arguments to the <span class="command"><strong>openlog()</strong></span> function,
- then this clause is silently ignored.
- </p>
-<p>
- On Windows machines syslog messages are directed to the EventViewer.
- </p>
-<p>
- The <span class="command"><strong>severity</strong></span> clause works like <span class="command"><strong>syslog</strong></span>'s
- "priorities", except that they can also be used if you are writing
- straight to a file rather than using <span class="command"><strong>syslog</strong></span>.
- Messages which are not at least of the severity level given will
- not be selected for the channel; messages of higher severity
- levels
- will be accepted.
- </p>
-<p>
- If you are using <span class="command"><strong>syslog</strong></span>, then the <span class="command"><strong>syslog.conf</strong></span> priorities
- will also determine what eventually passes through. For example,
- defining a channel facility and severity as <span class="command"><strong>daemon</strong></span> and <span class="command"><strong>debug</strong></span> but
- only logging <span class="command"><strong>daemon.warning</strong></span> via <span class="command"><strong>syslog.conf</strong></span> will
- cause messages of severity <span class="command"><strong>info</strong></span> and
- <span class="command"><strong>notice</strong></span> to
- be dropped. If the situation were reversed, with <span class="command"><strong>named</strong></span> writing
- messages of only <span class="command"><strong>warning</strong></span> or higher,
- then <span class="command"><strong>syslogd</strong></span> would
- print all messages it received from the channel.
- </p>
-<p>
- The <span class="command"><strong>stderr</strong></span> destination clause
- directs the
- channel to the server's standard error stream. This is intended
- for
- use when the server is running as a foreground process, for
- example
- when debugging a configuration.
- </p>
-<p>
- The server can supply extensive debugging information when
- it is in debugging mode. If the server's global debug level is
- greater
- than zero, then debugging mode will be active. The global debug
- level is set either by starting the <span class="command"><strong>named</strong></span> server
- with the <code class="option">-d</code> flag followed by a positive integer,
- or by running <span class="command"><strong>rndc trace</strong></span>.
- The global debug level
- can be set to zero, and debugging mode turned off, by running <span class="command"><strong>rndc
-notrace</strong></span>. All debugging messages in the server have a debug
- level, and higher debug levels give more detailed output. Channels
- that specify a specific debug severity, for example:
- </p>
-<pre class="programlisting">channel specific_debug_level {
- file "foo";
- severity debug 3;
-};
-</pre>
-<p>
- will get debugging output of level 3 or less any time the
- server is in debugging mode, regardless of the global debugging
- level. Channels with <span class="command"><strong>dynamic</strong></span>
- severity use the
- server's global debug level to determine what messages to print.
- </p>
-<p>
- If <span class="command"><strong>print-time</strong></span> has been turned on,
- then
- the date and time will be logged. <span class="command"><strong>print-time</strong></span> may
- be specified for a <span class="command"><strong>syslog</strong></span> channel,
- but is usually
- pointless since <span class="command"><strong>syslog</strong></span> also logs
- the date and
- time. If <span class="command"><strong>print-category</strong></span> is
- requested, then the
- category of the message will be logged as well. Finally, if <span class="command"><strong>print-severity</strong></span> is
- on, then the severity level of the message will be logged. The <span class="command"><strong>print-</strong></span> options may
- be used in any combination, and will always be printed in the
- following
- order: time, category, severity. Here is an example where all
- three <span class="command"><strong>print-</strong></span> options
- are on:
- </p>
-<p>
- <code class="computeroutput">28-Feb-2000 15:05:32.863 general: notice: running</code>
- </p>
-<p>
- If <span class="command"><strong>buffered</strong></span> has been turned on the output
- to files will not be flushed after each log entry. By default
- all log messages are flushed.
- </p>
-<p>
- There are four predefined channels that are used for
- <span class="command"><strong>named</strong></span>'s default logging as follows.
- If <span class="command"><strong>named</strong></span> is started with the
- <code class="option">-L</code> then a
- fifth channel <span class="command"><strong>default_logfile</strong></span> is added.
- How they are
- used is described in <a class="xref" href="Bv9ARM.ch06.html#the_category_phrase" title="The category Phrase">the section called &#8220;The <span class="command"><strong>category</strong></span> Phrase&#8221;</a>.
- </p>
-<pre class="programlisting">channel default_syslog {
- // send to syslog's daemon facility
- syslog daemon;
- // only send priority info and higher
- severity info;
-
-channel default_debug {
- // write to named.run in the working directory
- // Note: stderr is used instead of "named.run" if
- // the server is started with the '-g' option.
- file "named.run";
- // log at the server's current debug level
- severity dynamic;
-};
-
-channel default_stderr {
- // writes to stderr
- stderr;
- // only send priority info and higher
- severity info;
-};
-
-channel null {
- // toss anything sent to this channel
- null;
-};
-
-channel default_logfile {
- // this channel is only present if named is
- // started with the -L option, whose argument
- // provides the file name
- file "...";
- // log at the server's current debug level
- severity dynamic;
-};
-</pre>
-<p>
- The <span class="command"><strong>default_debug</strong></span> channel has the
- special
- property that it only produces output when the server's debug
- level is
- nonzero. It normally writes to a file called <code class="filename">named.run</code>
- in the server's working directory.
- </p>
-<p>
- For security reasons, when the <code class="option">-u</code>
- command line option is used, the <code class="filename">named.run</code> file
- is created only after <span class="command"><strong>named</strong></span> has
- changed to the
- new UID, and any debug output generated while <span class="command"><strong>named</strong></span> is
- starting up and still running as root is discarded. If you need
- to capture this output, you must run the server with the <code class="option">-L</code>
- option to specify a default logfile, or the <code class="option">-g</code>
- option to log to standard error which you can redirect to a file.
- </p>
-<p>
- Once a channel is defined, it cannot be redefined. Thus you
- cannot alter the built-in channels directly, but you can modify
- the default logging by pointing categories at channels you have
- defined.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="the_category_phrase"></a>The <span class="command"><strong>category</strong></span> Phrase</h4></div></div></div>
-<p>
- There are many categories, so you can send the logs you want
- to see wherever you want, without seeing logs you don't want. If
- you don't specify a list of channels for a category, then log
- messages
- in that category will be sent to the <span class="command"><strong>default</strong></span> category
- instead. If you don't specify a default category, the following
- "default default" is used:
- </p>
-<pre class="programlisting">category default { default_syslog; default_debug; };
-</pre>
-<p>
- If you start <span class="command"><strong>named</strong></span> with the
- <code class="option">-L</code> option then the default category is:
- </p>
-<pre class="programlisting">category default { default_logfile; default_debug; };
-</pre>
-<p>
- As an example, let's say you want to log security events to
- a file, but you also want keep the default logging behavior. You'd
- specify the following:
- </p>
-<pre class="programlisting">channel my_security_channel {
- file "my_security_file";
- severity info;
-};
-category security {
- my_security_channel;
- default_syslog;
- default_debug;
-};</pre>
-<p>
- To discard all messages in a category, specify the <span class="command"><strong>null</strong></span> channel:
- </p>
-<pre class="programlisting">category xfer-out { null; };
-category notify { null; };
-</pre>
-<p>
- Following are the available categories and brief descriptions
- of the types of log information they contain. More
- categories may be added in future <acronym class="acronym">BIND</acronym> releases.
- </p>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="1.150in" class="1">
-<col width="3.350in" class="2">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p><span class="command"><strong>client</strong></span></p>
- </td>
-<td>
- <p>
- Processing of client requests.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>cname</strong></span></p>
- </td>
-<td>
- <p>
- Logs nameservers that are skipped due to them being
- a CNAME rather than A / AAAA records.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>config</strong></span></p>
- </td>
-<td>
- <p>
- Configuration file parsing and processing.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>database</strong></span></p>
- </td>
-<td>
- <p>
- Messages relating to the databases used
- internally by the name server to store zone and cache
- data.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>default</strong></span></p>
- </td>
-<td>
- <p>
- The default category defines the logging
- options for those categories where no specific
- configuration has been
- defined.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>delegation-only</strong></span></p>
- </td>
-<td>
- <p>
- Delegation only. Logs queries that have been
- forced to NXDOMAIN as the result of a
- delegation-only zone or a
- <span class="command"><strong>delegation-only</strong></span> in a
- forward, hint or stub zone declaration.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>dispatch</strong></span></p>
- </td>
-<td>
- <p>
- Dispatching of incoming packets to the
- server modules where they are to be processed.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>dnssec</strong></span></p>
- </td>
-<td>
- <p>
- DNSSEC and TSIG protocol processing.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>dnstap</strong></span></p>
- </td>
-<td>
- <p>
- The "dnstap" DNS traffic capture system.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>edns-disabled</strong></span></p>
- </td>
-<td>
- <p>
- Log queries that have been forced to use plain
- DNS due to timeouts. This is often due to
- the remote servers not being RFC 1034 compliant
- (not always returning FORMERR or similar to
- EDNS queries and other extensions to the DNS
- when they are not understood). In other words, this is
- targeted at servers that fail to respond to
- DNS queries that they don't understand.
- </p>
- <p>
- Note: the log message can also be due to
- packet loss. Before reporting servers for
- non-RFC 1034 compliance they should be re-tested
- to determine the nature of the non-compliance.
- This testing should prevent or reduce the
- number of false-positive reports.
- </p>
- <p>
- Note: eventually <span class="command"><strong>named</strong></span> will have to stop
- treating such timeouts as due to RFC 1034 non
- compliance and start treating it as plain
- packet loss. Falsely classifying packet
- loss as due to RFC 1034 non compliance impacts
- on DNSSEC validation which requires EDNS for
- the DNSSEC records to be returned.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>general</strong></span></p>
- </td>
-<td>
- <p>
- The catch-all. Many things still aren't
- classified into categories, and they all end up here.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>lame-servers</strong></span></p>
- </td>
-<td>
- <p>
- Lame servers. These are misconfigurations
- in remote servers, discovered by BIND 9 when trying to
- query those servers during resolution.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>network</strong></span></p>
- </td>
-<td>
- <p>
- Network operations.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>notify</strong></span></p>
- </td>
-<td>
- <p>
- The NOTIFY protocol.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>queries</strong></span></p>
- </td>
-<td>
- <p>
- Specify where queries should be logged to.
- </p>
- <p>
- At startup, specifying the category <span class="command"><strong>queries</strong></span> will also
- enable query logging unless <span class="command"><strong>querylog</strong></span> option has been
- specified.
- </p>
-
- <p>
- The query log entry reports the client's IP
- address and port number, and the query name,
- class and type. Next it reports whether the
- Recursion Desired flag was set (+ if set, -
- if not set), if the query was signed (S),
- EDNS was in used along with the EDNS version
- number (E(#)), if TCP was used (T), if DO
- (DNSSEC Ok) was set (D), if CD (Checking
- Disabled) was set (C), if a valid DNS Server
- COOKIE was received (V), or if a DNS COOKIE
- option without a valid Server COOKIE was
- present (K). After this the destination
- address the query was sent to is reported.
- </p>
-
- <p>
- <code class="computeroutput">client 127.0.0.1#62536 (www.example.com): query: www.example.com IN AAAA +SE</code>
- </p>
- <p>
- <code class="computeroutput">client ::1#62537 (www.example.net): query: www.example.net IN AAAA -SE</code>
- </p>
- <p>
- (The first part of this log message, showing the
- client address/port number and query name, is
- repeated in all subsequent log messages related
- to the same query.)
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>query-errors</strong></span></p>
- </td>
-<td>
- <p>
- Information about queries that resulted in some
- failure.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>rate-limit</strong></span></p>
- </td>
-<td>
- <p>
- The start, periodic, and final notices of the
- rate limiting of a stream of responses are logged at
- <span class="command"><strong>info</strong></span> severity in this category.
- These messages include a hash value of the domain name
- of the response and the name itself,
- except when there is insufficient memory to record
- the name for the final notice
- The final notice is normally delayed until about one
- minute after rate limit stops.
- A lack of memory can hurry the final notice,
- in which case it starts with an asterisk (*).
- Various internal events are logged at debug 1 level
- and higher.
- </p>
- <p>
- Rate limiting of individual requests
- is logged in the <span class="command"><strong>query-errors</strong></span> category.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>resolver</strong></span></p>
- </td>
-<td>
- <p>
- DNS resolution, such as the recursive
- lookups performed on behalf of clients by a caching name
- server.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>rpz</strong></span></p>
- </td>
-<td>
- <p>
- Information about errors in response policy zone files,
- rewritten responses, and at the highest
- <span class="command"><strong>debug</strong></span> levels, mere rewriting
- attempts.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>security</strong></span></p>
- </td>
-<td>
- <p>
- Approval and denial of requests.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>spill</strong></span></p>
- </td>
-<td>
- <p>
- Logs queries that have been terminated, either by dropping
- or responding with SERVFAIL, as a result of a fetchlimit
- quota being exceeded.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>unmatched</strong></span></p>
- </td>
-<td>
- <p>
- Messages that <span class="command"><strong>named</strong></span> was unable to determine the
- class of or for which there was no matching <span class="command"><strong>view</strong></span>.
- A one line summary is also logged to the <span class="command"><strong>client</strong></span> category.
- This category is best sent to a file or stderr, by
- default it is sent to
- the <span class="command"><strong>null</strong></span> channel.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>update</strong></span></p>
- </td>
-<td>
- <p>
- Dynamic updates.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>update-security</strong></span></p>
- </td>
-<td>
- <p>
- Approval and denial of update requests.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>xfer-in</strong></span></p>
- </td>
-<td>
- <p>
- Zone transfers the server is receiving.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>xfer-out</strong></span></p>
- </td>
-<td>
- <p>
- Zone transfers the server is sending.
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="query_errors"></a>The <span class="command"><strong>query-errors</strong></span> Category</h4></div></div></div>
-<p>
- The <span class="command"><strong>query-errors</strong></span> category is
- specifically intended for debugging purposes: To identify
- why and how specific queries result in responses which
- indicate an error.
- Messages of this category are therefore only logged
- with <span class="command"><strong>debug</strong></span> levels.
- </p>
-<p>
- At the debug levels of 1 or higher, each response with the
- rcode of SERVFAIL is logged as follows:
- </p>
-<p>
- <code class="computeroutput">client 127.0.0.1#61502: query failed (SERVFAIL) for www.example.com/IN/AAAA at query.c:3880</code>
- </p>
-<p>
- This means an error resulting in SERVFAIL was
- detected at line 3880 of source file
- <code class="filename">query.c</code>.
- Log messages of this level will particularly
- help identify the cause of SERVFAIL for an
- authoritative server.
- </p>
-<p>
- At the debug levels of 2 or higher, detailed context
- information of recursive resolutions that resulted in
- SERVFAIL is logged.
- The log message will look like as follows:
- </p>
-<p>
-
- </p>
-<pre class="programlisting">
-fetch completed at resolver.c:2970 for www.example.com/A
-in 30.000183: timed out/success [domain:example.com,
-referral:2,restart:7,qrysent:8,timeout:5,lame:0,neterr:0,
-badresp:1,adberr:0,findfail:0,valfail:0]
- </pre>
-<p>
- </p>
-<p>
- The first part before the colon shows that a recursive
- resolution for AAAA records of www.example.com completed
- in 30.000183 seconds and the final result that led to the
- SERVFAIL was determined at line 2970 of source file
- <code class="filename">resolver.c</code>.
- </p>
-<p>
- The following part shows the detected final result and the
- latest result of DNSSEC validation.
- The latter is always success when no validation attempt
- is made.
- In this example, this query resulted in SERVFAIL probably
- because all name servers are down or unreachable, leading
- to a timeout in 30 seconds.
- DNSSEC validation was probably not attempted.
- </p>
-<p>
- The last part enclosed in square brackets shows statistics
- information collected for this particular resolution
- attempt.
- The <code class="varname">domain</code> field shows the deepest zone
- that the resolver reached;
- it is the zone where the error was finally detected.
- The meaning of the other fields is summarized in the
- following table.
- </p>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="1.150in" class="1">
-<col width="3.350in" class="2">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p><code class="varname">referral</code></p>
- </td>
-<td>
- <p>
- The number of referrals the resolver received
- throughout the resolution process.
- In the above example this is 2, which are most
- likely com and example.com.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><code class="varname">restart</code></p>
- </td>
-<td>
- <p>
- The number of cycles that the resolver tried
- remote servers at the <code class="varname">domain</code>
- zone.
- In each cycle the resolver sends one query
- (possibly resending it, depending on the response)
- to each known name server of
- the <code class="varname">domain</code> zone.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><code class="varname">qrysent</code></p>
- </td>
-<td>
- <p>
- The number of queries the resolver sent at the
- <code class="varname">domain</code> zone.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><code class="varname">timeout</code></p>
- </td>
-<td>
- <p>
- The number of timeouts since the resolver
- received the last response.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><code class="varname">lame</code></p>
- </td>
-<td>
- <p>
- The number of lame servers the resolver detected
- at the <code class="varname">domain</code> zone.
- A server is detected to be lame either by an
- invalid response or as a result of lookup in
- BIND9's address database (ADB), where lame
- servers are cached.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><code class="varname">neterr</code></p>
- </td>
-<td>
- <p>
- The number of erroneous results that the
- resolver encountered in sending queries
- at the <code class="varname">domain</code> zone.
- One common case is the remote server is
- unreachable and the resolver receives an ICMP
- unreachable error message.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><code class="varname">badresp</code></p>
- </td>
-<td>
- <p>
- The number of unexpected responses (other than
- <code class="varname">lame</code>) to queries sent by the
- resolver at the <code class="varname">domain</code> zone.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><code class="varname">adberr</code></p>
- </td>
-<td>
- <p>
- Failures in finding remote server addresses
- of the <code class="varname">domain</code> zone in the ADB.
- One common case of this is that the remote
- server's name does not have any address records.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><code class="varname">findfail</code></p>
- </td>
-<td>
- <p>
- Failures of resolving remote server addresses.
- This is a total number of failures throughout
- the resolution process.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><code class="varname">valfail</code></p>
- </td>
-<td>
- <p>
- Failures of DNSSEC validation.
- Validation failures are counted throughout
- the resolution process (not limited to
- the <code class="varname">domain</code> zone), but should
- only happen in <code class="varname">domain</code>.
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-<p>
- At the debug levels of 3 or higher, the same messages
- as those at the debug 1 level are logged for other errors
- than SERVFAIL.
- Note that negative responses such as NXDOMAIN are not
- regarded as errors here.
- </p>
-<p>
- At the debug levels of 4 or higher, the same messages
- as those at the debug 2 level are logged for other errors
- than SERVFAIL.
- Unlike the above case of level 3, messages are logged for
- negative responses.
- This is because any unexpected results can be difficult to
- debug in the recursion case.
- </p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="lwres_grammar"></a><span class="command"><strong>lwres</strong></span> Statement Grammar</h3></div></div></div>
-<p>
- This is the grammar of the <span class="command"><strong>lwres</strong></span>
- statement in the <code class="filename">named.conf</code> file:
- </p>
-<pre class="programlisting"><span class="command"><strong>lwres</strong></span> {
- [<span class="optional"> listen-on { <em class="replaceable"><code>ip_addr</code></em> [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ;
- [<span class="optional"> <em class="replaceable"><code>ip_addr</code></em> [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; ... </span>] }; </span>]
- [<span class="optional"> view <em class="replaceable"><code>view_name</code></em>; </span>]
- [<span class="optional"> search { <em class="replaceable"><code>domain_name</code></em> ; [<span class="optional"> <em class="replaceable"><code>domain_name</code></em> ; ... </span>] }; </span>]
- [<span class="optional"> ndots <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> lwres-tasks <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> lwres-clients <em class="replaceable"><code>number</code></em>; </span>]
-};
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="lwres_statement"></a><span class="command"><strong>lwres</strong></span> Statement Definition and Usage</h3></div></div></div>
-<p>
- The <span class="command"><strong>lwres</strong></span> statement configures the
- name
- server to also act as a lightweight resolver server. (See
- <a class="xref" href="Bv9ARM.ch05.html#lwresd" title="Running a Resolver Daemon">the section called &#8220;Running a Resolver Daemon&#8221;</a>.) There may be multiple
- <span class="command"><strong>lwres</strong></span> statements configuring
- lightweight resolver servers with different properties.
- </p>
-<p>
- The <span class="command"><strong>listen-on</strong></span> statement specifies a
- list of
- IPv4 addresses (and ports) that this instance of a lightweight
- resolver daemon
- should accept requests on. If no port is specified, port 921 is
- used.
- If this statement is omitted, requests will be accepted on
- 127.0.0.1,
- port 921.
- </p>
-<p>
- The <span class="command"><strong>view</strong></span> statement binds this
- instance of a
- lightweight resolver daemon to a view in the DNS namespace, so that
- the
- response will be constructed in the same manner as a normal DNS
- query
- matching this view. If this statement is omitted, the default view
- is
- used, and if there is no default view, an error is triggered.
- </p>
-<p>
- The <span class="command"><strong>search</strong></span> statement is equivalent to
- the
- <span class="command"><strong>search</strong></span> statement in
- <code class="filename">/etc/resolv.conf</code>. It provides a
- list of domains
- which are appended to relative names in queries.
- </p>
-<p>
- The <span class="command"><strong>ndots</strong></span> statement is equivalent to
- the
- <span class="command"><strong>ndots</strong></span> statement in
- <code class="filename">/etc/resolv.conf</code>. It indicates the
- minimum
- number of dots in a relative domain name that should result in an
- exact match lookup before search path elements are appended.
- </p>
-<p>
- The <code class="option">lwres-tasks</code> statement specifies the number
- of worker threads the lightweight resolver will dedicate to serving
- clients. By default the number is the same as the number of CPUs on
- the system; this can be overridden using the <code class="option">-n</code>
- command line option when starting the server.
- </p>
-<p>
- The <code class="option">lwres-clients</code> specifies
- the number of client objects per thread the lightweight
- resolver should create to serve client queries.
- By default, if the lightweight resolver runs as a part
- of <span class="command"><strong>named</strong></span>, 256 client objects are
- created for each task; if it runs as <span class="command"><strong>lwresd</strong></span>,
- 1024 client objects are created for each thread. The maximum
- value is 32768; higher values will be silently ignored and
- the maximum will be used instead.
- Note that setting too high a value may overconsume
- system resources.
- </p>
-<p>
- The maximum number of client queries that the lightweight
- resolver can handle at any one time equals
- <code class="option">lwres-tasks</code> times <code class="option">lwres-clients</code>.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="masters_grammar"></a><span class="command"><strong>masters</strong></span> Statement Grammar</h3></div></div></div>
-<pre class="programlisting">
-<span class="command"><strong>masters</strong></span> <em class="replaceable"><code>name</code></em> [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] { ( <em class="replaceable"><code>masters_list</code></em> |
- <em class="replaceable"><code>ip_addr</code></em> [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">key <em class="replaceable"><code>key</code></em></span>] ) ; [<span class="optional">...</span>] };
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="masters_statement"></a><span class="command"><strong>masters</strong></span> Statement Definition and
- Usage</h3></div></div></div>
-<p><span class="command"><strong>masters</strong></span>
- lists allow for a common set of masters to be easily used by
- multiple stub and slave zones in their <span class="command"><strong>masters</strong></span>
- or <span class="command"><strong>also-notify</strong></span> lists.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="options_grammar"></a><span class="command"><strong>options</strong></span> Statement Grammar</h3></div></div></div>
-<p>
- This is the grammar of the <span class="command"><strong>options</strong></span>
- statement in the <code class="filename">named.conf</code> file:
- </p>
-<pre class="programlisting"><span class="command"><strong>options</strong></span> {
- [<span class="optional"> attach-cache <em class="replaceable"><code>cache_name</code></em>; </span>]
- [<span class="optional"> version <em class="replaceable"><code>version_string</code></em>; </span>]
- [<span class="optional"> hostname <em class="replaceable"><code>hostname_string</code></em>; </span>]
- [<span class="optional"> server-id <em class="replaceable"><code>server_id_string</code></em>; </span>]
- [<span class="optional"> directory <em class="replaceable"><code>path_name</code></em>; </span>]
- [<span class="optional"> dnstap { <em class="replaceable"><code>message_type</code></em>; ... }; </span>]
- [<span class="optional"> dnstap-output ( <code class="literal">file</code> | <code class="literal">unix</code> ) <em class="replaceable"><code>path_name</code></em>; </span>]
- [<span class="optional"> dnstap-identity ( <em class="replaceable"><code>string</code></em> | <code class="literal">hostname</code> | <code class="literal">none</code> ); </span>]
- [<span class="optional"> dnstap-version ( <em class="replaceable"><code>string</code></em> | <code class="literal">none</code> ); </span>]
- [<span class="optional"> fstrm-set-buffer-hint <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> fstrm-set-flush-timeout <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> fstrm-set-input-queue-size <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> fstrm-set-output-notify-threshold <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> fstrm-set-output-queue-model ( <em class="replaceable"><code>mpsc</code></em> |
- <em class="replaceable"><code>spsc</code></em> ) ; </span>]
- [<span class="optional"> fstrm-set-output-queue-size <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> fstrm-set-reopen-interval <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> geoip-directory <em class="replaceable"><code>path_name</code></em>; </span>]
- [<span class="optional"> key-directory <em class="replaceable"><code>path_name</code></em>; </span>]
- [<span class="optional"> managed-keys-directory <em class="replaceable"><code>path_name</code></em>; </span>]
- [<span class="optional"> named-xfer <em class="replaceable"><code>path_name</code></em>; </span>]
- [<span class="optional"> tkey-gssapi-keytab <em class="replaceable"><code>path_name</code></em>; </span>]
- [<span class="optional"> tkey-gssapi-credential <em class="replaceable"><code>principal</code></em>; </span>]
- [<span class="optional"> tkey-domain <em class="replaceable"><code>domainname</code></em>; </span>]
- [<span class="optional"> tkey-dhkey <em class="replaceable"><code>key_name</code></em> <em class="replaceable"><code>key_tag</code></em>; </span>]
- [<span class="optional"> cache-file <em class="replaceable"><code>path_name</code></em>; </span>]
- [<span class="optional"> dump-file <em class="replaceable"><code>path_name</code></em>; </span>]
- [<span class="optional"> bindkeys-file <em class="replaceable"><code>path_name</code></em>; </span>]
- [<span class="optional"> lock-file <em class="replaceable"><code>path_name</code></em>; </span>]
- [<span class="optional"> secroots-file <em class="replaceable"><code>path_name</code></em>; </span>]
- [<span class="optional"> session-keyfile <em class="replaceable"><code>path_name</code></em>; </span>]
- [<span class="optional"> session-keyname <em class="replaceable"><code>key_name</code></em>; </span>]
- [<span class="optional"> session-keyalg <em class="replaceable"><code>algorithm_id</code></em>; </span>]
- [<span class="optional"> memstatistics <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> memstatistics-file <em class="replaceable"><code>path_name</code></em>; </span>]
- [<span class="optional"> pid-file <em class="replaceable"><code>path_name</code></em>; </span>]
- [<span class="optional"> recursing-file <em class="replaceable"><code>path_name</code></em>; </span>]
- [<span class="optional"> statistics-file <em class="replaceable"><code>path_name</code></em>; </span>]
- [<span class="optional"> zone-statistics <em class="replaceable"><code>full</code></em> | <em class="replaceable"><code>terse</code></em> | <em class="replaceable"><code>none</code></em>; </span>]
- [<span class="optional"> auth-nxdomain <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> nxdomain-redirect <em class="replaceable"><code>string</code></em>; </span>]
- [<span class="optional"> deallocate-on-exit <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> dialup <em class="replaceable"><code>dialup_option</code></em>; </span>]
- [<span class="optional"> fake-iquery <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> fetch-glue <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> flush-zones-on-shutdown <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> has-old-clients <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> host-statistics <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> host-statistics-max <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> minimal-any <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> minimal-responses (<em class="replaceable"><code>yes_or_no</code></em> | <code class="constant">no-auth</code> | <code class="constant">no-auth-recursive</code>); </span>]
- [<span class="optional"> multiple-cnames <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> notify <em class="replaceable"><code>yes_or_no</code></em> | <em class="replaceable"><code>explicit</code></em> | <em class="replaceable"><code>master-only</code></em>; </span>]
- [<span class="optional"> recursion <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> send-cookie <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> require-server-cookie <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> cookie-algorithm <em class="replaceable"><code>algorithm_id</code></em>; </span>]
- [<span class="optional"> cookie-secret <em class="replaceable"><code>secret_string</code></em>; </span>]
- [<span class="optional"> nocookie-udp-size <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> request-nsid <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> rfc2308-type1 <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> use-id-pool <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> maintain-ixfr-base <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> ixfr-from-differences (<em class="replaceable"><code>yes_or_no</code></em> | <code class="constant">master</code> | <code class="constant">slave</code>); </span>]
- [<span class="optional"> auto-dnssec <code class="constant">allow</code>|<code class="constant">maintain</code>|<code class="constant">off</code>; </span>]
- [<span class="optional"> dnssec-enable <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> dnssec-validation (<em class="replaceable"><code>yes_or_no</code></em> | <code class="constant">auto</code>); </span>]
- [<span class="optional"> dnssec-lookaside ( <em class="replaceable"><code>auto</code></em> |
- <em class="replaceable"><code>no</code></em> |
- <em class="replaceable"><code>domain</code></em> trust-anchor <em class="replaceable"><code>domain</code></em> ); </span>]
- [<span class="optional"> dnssec-must-be-secure <em class="replaceable"><code>domain yes_or_no</code></em>; </span>]
- [<span class="optional"> dnssec-accept-expired <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> forward ( <em class="replaceable"><code>only</code></em> | <em class="replaceable"><code>first</code></em> ); </span>]
- [<span class="optional"> forwarders { [<span class="optional"> <em class="replaceable"><code>ip_addr</code></em> [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; ... </span>] }; </span>]
- [<span class="optional"> dual-stack-servers [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] {
- ( <em class="replaceable"><code>domain_name</code></em> [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] |
- <em class="replaceable"><code>ip_addr</code></em> [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>]) ;
- ... }; </span>]
- [<span class="optional"> check-names ( <em class="replaceable"><code>master</code></em> | <em class="replaceable"><code>slave</code></em> | <em class="replaceable"><code>response</code></em> )
- ( <em class="replaceable"><code>warn</code></em> | <em class="replaceable"><code>fail</code></em> | <em class="replaceable"><code>ignore</code></em> ); </span>]
- [<span class="optional"> check-dup-records ( <em class="replaceable"><code>warn</code></em> | <em class="replaceable"><code>fail</code></em> | <em class="replaceable"><code>ignore</code></em> ); </span>]
- [<span class="optional"> check-mx ( <em class="replaceable"><code>warn</code></em> | <em class="replaceable"><code>fail</code></em> | <em class="replaceable"><code>ignore</code></em> ); </span>]
- [<span class="optional"> check-wildcard <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> check-integrity <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> check-mx-cname ( <em class="replaceable"><code>warn</code></em> | <em class="replaceable"><code>fail</code></em> | <em class="replaceable"><code>ignore</code></em> ); </span>]
- [<span class="optional"> check-srv-cname ( <em class="replaceable"><code>warn</code></em> | <em class="replaceable"><code>fail</code></em> | <em class="replaceable"><code>ignore</code></em> ); </span>]
- [<span class="optional"> check-sibling <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> check-spf ( <em class="replaceable"><code>warn</code></em> | <em class="replaceable"><code>ignore</code></em> ); </span>]
- [<span class="optional"> allow-new-zones { <em class="replaceable"><code>yes_or_no</code></em> }; </span>]
- [<span class="optional"> allow-notify { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> allow-query { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> allow-query-on { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> allow-query-cache { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> allow-query-cache-on { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> allow-transfer { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> allow-recursion { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> allow-recursion-on { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> allow-update { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> allow-update-forwarding { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> automatic-interface-scan { <em class="replaceable"><code>yes_or_no</code></em> }; </span>]
- [<span class="optional"> geoip-use-ecs <em class="replaceable"><code>yes_or_no</code></em>;</span>]
- [<span class="optional"> update-check-ksk <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> dnssec-update-mode ( <em class="replaceable"><code>maintain</code></em> | <em class="replaceable"><code>no-resign</code></em> ); </span>]
- [<span class="optional"> dnssec-dnskey-kskonly <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> dnssec-loadkeys-interval <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> dnssec-secure-to-insecure <em class="replaceable"><code>yes_or_no</code></em> ;</span>]
- [<span class="optional"> try-tcp-refresh <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> allow-v6-synthesis { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> blackhole { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> keep-response-order { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> no-case-compress { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> message-compression <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> use-v4-udp-ports { <em class="replaceable"><code>port_list</code></em> }; </span>]
- [<span class="optional"> avoid-v4-udp-ports { <em class="replaceable"><code>port_list</code></em> }; </span>]
- [<span class="optional"> use-v6-udp-ports { <em class="replaceable"><code>port_list</code></em> }; </span>]
- [<span class="optional"> avoid-v6-udp-ports { <em class="replaceable"><code>port_list</code></em> }; </span>]
- [<span class="optional"> listen-on [<span class="optional"> port <em class="replaceable"><code>ip_port</code></em> </span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> listen-on-v6 [<span class="optional"> port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>]
-{ <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> query-source ( ( <em class="replaceable"><code>ip4_addr</code></em> | <em class="replaceable"><code>*</code></em> )
- [<span class="optional"> port ( <em class="replaceable"><code>ip_port</code></em> | <em class="replaceable"><code>*</code></em> ) </span>]
- [<span class="optional"> dscp <em class="replaceable"><code>ip_dscp</code></em></span>] |
- [<span class="optional"> address ( <em class="replaceable"><code>ip4_addr</code></em> | <em class="replaceable"><code>*</code></em> ) </span>]
- [<span class="optional"> port ( <em class="replaceable"><code>ip_port</code></em> | <em class="replaceable"><code>*</code></em> ) </span>] )
- [<span class="optional"> dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> query-source-v6 ( ( <em class="replaceable"><code>ip6_addr</code></em> | <em class="replaceable"><code>*</code></em> )
- [<span class="optional"> port ( <em class="replaceable"><code>ip_port</code></em> | <em class="replaceable"><code>*</code></em> ) </span>]
- [<span class="optional"> dscp <em class="replaceable"><code>ip_dscp</code></em></span>] |
- [<span class="optional"> address ( <em class="replaceable"><code>ip6_addr</code></em> | <em class="replaceable"><code>*</code></em> ) </span>]
- [<span class="optional"> port ( <em class="replaceable"><code>ip_port</code></em> | <em class="replaceable"><code>*</code></em> ) </span>] )
- [<span class="optional"> dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> use-queryport-pool <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> queryport-pool-ports <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> queryport-pool-updateinterval <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> max-transfer-time-in <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> max-transfer-time-out <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> max-transfer-idle-in <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> max-transfer-idle-out <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> reserved-sockets <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> recursive-clients <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> tcp-clients <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> clients-per-query <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> max-clients-per-query <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> fetches-per-server <em class="replaceable"><code>number</code></em> [<span class="optional"><em class="replaceable"><code>(drop | fail)</code></em></span>]; </span>]
- [<span class="optional"> fetch-quota-params <em class="replaceable"><code>number fixedpoint fixedpoint fixedpoint</code></em> ; </span>]
- [<span class="optional"> fetches-per-zone <em class="replaceable"><code>number</code></em> [<span class="optional"><em class="replaceable"><code>(drop | fail)</code></em></span>]; </span>]
- [<span class="optional"> notify-rate <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> startup-notify-rate <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> serial-query-rate <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> serial-queries <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> tcp-listen-queue <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> transfer-format <em class="replaceable"><code>( one-answer | many-answers )</code></em>; </span>]
- [<span class="optional"> transfer-message-size <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> transfers-in <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> transfers-out <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> transfers-per-ns <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> transfer-source (<em class="replaceable"><code>ip4_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> transfer-source-v6 (<em class="replaceable"><code>ip6_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> alt-transfer-source (<em class="replaceable"><code>ip4_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> alt-transfer-source-v6 (<em class="replaceable"><code>ip6_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> use-alt-transfer-source <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> notify-delay <em class="replaceable"><code>seconds</code></em> ; </span>]
- [<span class="optional"> notify-source (<em class="replaceable"><code>ip4_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> notify-source-v6 (<em class="replaceable"><code>ip6_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> notify-to-soa <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> also-notify [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] { ( <em class="replaceable"><code>masters</code></em> | <em class="replaceable"><code>ip_addr</code></em>
- [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] ) [<span class="optional">key <em class="replaceable"><code>keyname</code></em></span>] ; ... }; </span>]
- [<span class="optional"> max-ixfr-log-size <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> max-journal-size <em class="replaceable"><code>size_spec</code></em>; </span>]
- [<span class="optional"> coresize <em class="replaceable"><code>size_spec</code></em> ; </span>]
- [<span class="optional"> datasize <em class="replaceable"><code>size_spec</code></em> ; </span>]
- [<span class="optional"> files <em class="replaceable"><code>size_spec</code></em> ; </span>]
- [<span class="optional"> stacksize <em class="replaceable"><code>size_spec</code></em> ; </span>]
- [<span class="optional"> cleaning-interval <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> heartbeat-interval <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> interface-interval <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> statistics-interval <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> topology { <em class="replaceable"><code>address_match_list</code></em> }</span>];
- [<span class="optional"> sortlist { <em class="replaceable"><code>address_match_list</code></em> }</span>];
- [<span class="optional"> rrset-order { <em class="replaceable"><code>order_spec</code></em> ; [<span class="optional"> <em class="replaceable"><code>order_spec</code></em> ; ... </span>] </span>] };
- [<span class="optional"> lame-ttl <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> max-ncache-ttl <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> max-cache-ttl <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> max-zone-ttl ( <code class="constant">unlimited</code> | <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> serial-update-method <code class="constant">increment</code>|<code class="constant">unixtime</code>|<code class="constant">date</code>; </span>]
- [<span class="optional"> servfail-ttl <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> sig-validity-interval <em class="replaceable"><code>number</code></em> [<span class="optional"><em class="replaceable"><code>number</code></em></span>] ; </span>]
- [<span class="optional"> sig-signing-nodes <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> sig-signing-signatures <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> sig-signing-type <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> min-roots <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> use-ixfr <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> provide-ixfr <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> request-ixfr <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> request-expire <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> treat-cr-as-space <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> min-refresh-time <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> max-refresh-time <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> min-retry-time <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> max-retry-time <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> nta-lifetime <em class="replaceable"><code>duration</code></em> ; </span>]
- [<span class="optional"> nta-recheck <em class="replaceable"><code>duration</code></em> ; </span>]
- [<span class="optional"> port <em class="replaceable"><code>ip_port</code></em>; </span>]
- [<span class="optional"> dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ;
- [<span class="optional"> additional-from-auth <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> additional-from-cache <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> random-device <em class="replaceable"><code>path_name</code></em> ; </span>]
- [<span class="optional"> max-cache-size <em class="replaceable"><code>size_or_percent</code></em> ; </span>]
- [<span class="optional"> match-mapped-addresses <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> filter-aaaa-on-v4 ( <em class="replaceable"><code>yes_or_no</code></em> | <em class="replaceable"><code>break-dnssec</code></em> ); </span>]
- [<span class="optional"> filter-aaaa-on-v6 ( <em class="replaceable"><code>yes_or_no</code></em> | <em class="replaceable"><code>break-dnssec</code></em> ); </span>]
- [<span class="optional"> filter-aaaa { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> dns64 <em class="replaceable"><code>ipv6-prefix</code></em> {
- [<span class="optional"> clients { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> mapped { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> exclude { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> suffix <em class="replaceable"><code>IPv6-address</code></em>; </span>]
- [<span class="optional"> recursive-only <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> break-dnssec <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- }; </span>];
- [<span class="optional"> dns64-server <em class="replaceable"><code>name</code></em> </span>]
- [<span class="optional"> dns64-contact <em class="replaceable"><code>name</code></em> </span>]
- [<span class="optional"> preferred-glue ( <em class="replaceable"><code>A</code></em> | <em class="replaceable"><code>AAAA</code></em> | <em class="replaceable"><code>NONE</code></em> ); </span>]
- [<span class="optional"> edns-udp-size <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> max-udp-size <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> max-rsa-exponent-size <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> root-delegation-only [<span class="optional"> exclude { <em class="replaceable"><code>namelist</code></em> } </span>] ; </span>]
- [<span class="optional"> querylog <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> disable-algorithms <em class="replaceable"><code>domain</code></em> { <em class="replaceable"><code>algorithm</code></em>;
- [<span class="optional"> <em class="replaceable"><code>algorithm</code></em>; </span>] }; </span>]
- [<span class="optional"> disable-ds-digests <em class="replaceable"><code>domain</code></em> { <em class="replaceable"><code>digest_type</code></em>;
- [<span class="optional"> <em class="replaceable"><code>digest_type</code></em>; </span>] }; </span>]
- [<span class="optional"> acache-enable <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> acache-cleaning-interval <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> max-acache-size <em class="replaceable"><code>size_spec</code></em> ; </span>]
- [<span class="optional"> max-recursion-depth <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> max-recursion-queries <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> masterfile-format
- (<code class="constant">text</code>|<code class="constant">raw</code>|<code class="constant">map</code>) ; </span>]
- [<span class="optional"> masterfile-style
- (<code class="constant">relative</code>|<code class="constant">full</code>) ; </span>]
- [<span class="optional"> empty-server <em class="replaceable"><code>name</code></em> ; </span>]
- [<span class="optional"> empty-contact <em class="replaceable"><code>name</code></em> ; </span>]
- [<span class="optional"> empty-zones-enable <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> disable-empty-zone <em class="replaceable"><code>zone_name</code></em> ; </span>]
- [<span class="optional"> zero-no-soa-ttl <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> zero-no-soa-ttl-cache <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> resolver-query-timeout <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> deny-answer-addresses { <em class="replaceable"><code>address_match_list</code></em> } [<span class="optional"> except-from { <em class="replaceable"><code>namelist</code></em> } </span>];</span>]
- [<span class="optional"> deny-answer-aliases { <em class="replaceable"><code>namelist</code></em> } [<span class="optional"> except-from { <em class="replaceable"><code>namelist</code></em> } </span>];</span>]
- [<span class="optional"> prefetch <em class="replaceable"><code>number</code></em> [<span class="optional"><em class="replaceable"><code>number</code></em></span>] ; </span>]
-
- [<span class="optional"> rate-limit {
- [<span class="optional"> responses-per-second <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> referrals-per-second <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> nodata-per-second <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> nxdomains-per-second <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> errors-per-second <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> all-per-second <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> window <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> log-only <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> qps-scale <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> ipv4-prefix-length <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> ipv6-prefix-length <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> slip <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> exempt-clients { <em class="replaceable"><code>address_match_list</code></em> } ; </span>]
- [<span class="optional"> max-table-size <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> min-table-size <em class="replaceable"><code>number</code></em> ; </span>]
- } ; </span>]
- [<span class="optional"> response-policy {
- zone <em class="replaceable"><code>zone_name</code></em>
- [<span class="optional"> policy <em class="replaceable"><code>(given | disabled | passthru | drop |
- tcp-only | nxdomain | nodata | cname domain</code></em>) </span>]
- [<span class="optional"> recursive-only <em class="replaceable"><code>yes_or_no</code></em> </span>]
- [<span class="optional"> log <em class="replaceable"><code>yes_or_no</code></em> </span>]
- [<span class="optional"> max-policy-ttl <em class="replaceable"><code>number</code></em> </span>]
- ; [<span class="optional">...</span>]
- } [<span class="optional"> recursive-only <em class="replaceable"><code>yes_or_no</code></em> </span>]
- [<span class="optional"> max-policy-ttl <em class="replaceable"><code>number</code></em> </span>]
- [<span class="optional"> break-dnssec <em class="replaceable"><code>yes_or_no</code></em> </span>]
- [<span class="optional"> min-ns-dots <em class="replaceable"><code>number</code></em> </span>]
- [<span class="optional"> nsip-wait-recurse <em class="replaceable"><code>yes_or_no</code></em> </span>]
- [<span class="optional"> qname-wait-recurse <em class="replaceable"><code>yes_or_no</code></em> </span>]
- [<span class="optional"> automatic-interface-scan <em class="replaceable"><code>yes_or_no</code></em> </span>]
- ; </span>]
- [<span class="optional"> catalog-zones {
- zone <em class="replaceable"><code>quoted_string</code></em>
- [<span class="optional"> default-masters
- [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>]
- [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>]
- { ( <em class="replaceable"><code>masters_list</code></em> | <em class="replaceable"><code>ip_addr</code></em> [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">key <em class="replaceable"><code>key</code></em></span>] ) ; [<span class="optional">...</span>] }</span>]
- [<span class="optional">in-memory <em class="replaceable"><code>yes_or_no</code></em></span>]
- [<span class="optional">min-update-interval <em class="replaceable"><code>interval</code></em></span>]
- ; [<span class="optional">...</span>] };
- ; </span>]
- [<span class="optional">v6-bias <em class="replaceable"><code>number</code></em> ; </span>]
-};
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="options"></a><span class="command"><strong>options</strong></span> Statement Definition and
- Usage</h3></div></div></div>
-<p>
- The <span class="command"><strong>options</strong></span> statement sets up global
- options
- to be used by <acronym class="acronym">BIND</acronym>. This statement
- may appear only
- once in a configuration file. If there is no <span class="command"><strong>options</strong></span>
- statement, an options block with each option set to its default will
- be used.
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><span class="command"><strong>attach-cache</strong></span></span></dt>
-<dd>
-<p>
- Allows multiple views to share a single cache
- database.
- Each view has its own cache database by default, but
- if multiple views have the same operational policy
- for name resolution and caching, those views can
- share a single cache to save memory and possibly
- improve resolution efficiency by using this option.
- </p>
-<p>
- The <span class="command"><strong>attach-cache</strong></span> option
- may also be specified in <span class="command"><strong>view</strong></span>
- statements, in which case it overrides the
- global <span class="command"><strong>attach-cache</strong></span> option.
- </p>
-<p>
- The <em class="replaceable"><code>cache_name</code></em> specifies
- the cache to be shared.
- When the <span class="command"><strong>named</strong></span> server configures
- views which are supposed to share a cache, it
- creates a cache with the specified name for the
- first view of these sharing views.
- The rest of the views will simply refer to the
- already created cache.
- </p>
-<p>
- One common configuration to share a cache would be to
- allow all views to share a single cache.
- This can be done by specifying
- the <span class="command"><strong>attach-cache</strong></span> as a global
- option with an arbitrary name.
- </p>
-<p>
- Another possible operation is to allow a subset of
- all views to share a cache while the others to
- retain their own caches.
- For example, if there are three views A, B, and C,
- and only A and B should share a cache, specify the
- <span class="command"><strong>attach-cache</strong></span> option as a view A (or
- B)'s option, referring to the other view name:
- </p>
-<pre class="programlisting">
- view "A" {
- // this view has its own cache
- ...
- };
- view "B" {
- // this view refers to A's cache
- attach-cache "A";
- };
- view "C" {
- // this view has its own cache
- ...
- };
-</pre>
-<p>
- Views that share a cache must have the same policy
- on configurable parameters that may affect caching.
- The current implementation requires the following
- configurable options be consistent among these
- views:
- <span class="command"><strong>check-names</strong></span>,
- <span class="command"><strong>cleaning-interval</strong></span>,
- <span class="command"><strong>dnssec-accept-expired</strong></span>,
- <span class="command"><strong>dnssec-validation</strong></span>,
- <span class="command"><strong>max-cache-ttl</strong></span>,
- <span class="command"><strong>max-ncache-ttl</strong></span>,
- <span class="command"><strong>max-cache-size</strong></span>, and
- <span class="command"><strong>zero-no-soa-ttl</strong></span>.
- </p>
-<p>
- Note that there may be other parameters that may
- cause confusion if they are inconsistent for
- different views that share a single cache.
- For example, if these views define different sets of
- forwarders that can return different answers for the
- same question, sharing the answer does not make
- sense or could even be harmful.
- It is administrator's responsibility to ensure
- configuration differences in different views do
- not cause disruption with a shared cache.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>directory</strong></span></span></dt>
-<dd><p>
- The working directory of the server.
- Any non-absolute pathnames in the configuration file will be
- taken
- as relative to this directory. The default location for most
- server
- output files (e.g. <code class="filename">named.run</code>)
- is this directory.
- If a directory is not specified, the working directory
- defaults to `<code class="filename">.</code>', the directory from
- which the server
- was started. The directory specified should be an absolute
- path.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>dnstap</strong></span></span></dt>
-<dd>
-<p>
- <span class="command"><strong>dnstap</strong></span> is a fast, flexible method
- for capturing and logging DNS traffic. Developed by
- Robert Edmonds at Farsight Security, Inc., and supported
- by multiple DNS implementations, <span class="command"><strong>dnstap</strong></span>
- uses
- <span class="command"><strong>libfstrm</strong></span> (a lightweight high-speed
- framing library, see
- <a class="link" href="https://github.com/farsightsec/fstrm" target="_top">https://github.com/farsightsec/fstrm</a>) to send
- event payloads which are encoded using Protocol Buffers
- (<span class="command"><strong>libprotobuf-c</strong></span>, a mechanism for
- serializing structured data developed
- by Google, Inc.; see
- <a class="link" href="https://developers.google.com/protocol-buffers/" target="_top">https://developers.google.com/protocol-buffers</a>).
- </p>
-<p>
- To enable <span class="command"><strong>dnstap</strong></span> at compile time,
- the <span class="command"><strong>fstrm</strong></span> and <span class="command"><strong>protobuf-c</strong></span>
- libraries must be available, and BIND must be configured with
- <code class="option">--enable-dnstap</code>.
- </p>
-<p>
- The <span class="command"><strong>dnstap</strong></span> option is a bracketed list
- of message types to be logged. These may be set differently
- for each view. Supported types are <code class="literal">client</code>,
- <code class="literal">auth</code>, <code class="literal">resolver</code>, and
- <code class="literal">forwarder</code>. Specifying type
- <code class="literal">all</code> will cause all <span class="command"><strong>dnstap</strong></span>
- messages to be logged, regardless of type.
- </p>
-<p>
- Each type may take an additional argument to indicate whether
- to log <code class="literal">query</code> messages or
- <code class="literal">response</code> messages; if not specified,
- both queries and responses are logged.
- </p>
-<p>
- Example: To log all authoritative queries and responses,
- recursive client responses, and upstream queries sent by
- the resolver, use:
-</p>
-<pre class="programlisting">dnstap {
- auth;
- client response;
- resolver query;
-};
-</pre>
-<p>
- </p>
-<p>
- Logged <span class="command"><strong>dnstap</strong></span> messages can be parsed
- using the <span class="command"><strong>dnstap-read</strong></span> utility (see
- <a class="xref" href="man.dnstap-read.html" title="dnstap-read"><span class="refentrytitle"><span class="application">dnstap-read</span></span>(1)</a> for details).
- </p>
-<p>
- For more information on <span class="command"><strong>dnstap</strong></span>, see
- <a class="link" href="http://dnstap.info" target="_top">http://dnstap.info</a>.
- </p>
-<p>
- The fstrm library has a number of tunables that are exposed
- in <code class="filename">named.conf</code>, and can be modified
- if necessary to improve performance or prevent loss of data.
- These are:
- </p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem">
- <span class="command"><strong>fstrm-set-buffer-hint</strong></span>: The
- threshold number of bytes to accumulate in the output
- buffer before forcing a buffer flush. The minimum is
- 1024, the maximum is 65536, and the default is 8192.
- </li>
-<li class="listitem">
- <span class="command"><strong>fstrm-set-flush-timeout</strong></span>: The number
- of seconds to allow unflushed data to remain in the
- output buffer. The minimum is 1 second, the maximum is
- 600 seconds (10 minutes), and the default is 1 second.
- </li>
-<li class="listitem">
- <span class="command"><strong>fstrm-set-output-notify-threshold</strong></span>:
- The number of outstanding queue entries to allow on
- an input queue before waking the I/O thread.
- The minimum is 1 and the default is 32.
- </li>
-<li class="listitem">
- <span class="command"><strong>fstrm-set-output-queue-model</strong></span>:
- Controls the queuing semantics to use for queue
- objects. The default is <code class="literal">mpsc</code>
- (multiple producer, single consumer); the other
- option is <code class="literal">spsc</code> (single producer,
- single consumer).
- </li>
-<li class="listitem">
- <span class="command"><strong>fstrm-set-input-queue-size</strong></span>: The
- number of queue entries to allocate for each
- input queue. This value must be a power of 2.
- The minimum is 2, the maximum is 16384, and
- the default is 512.
- </li>
-<li class="listitem">
- <span class="command"><strong>fstrm-set-output-queue-size</strong></span>:
- The number of queue entries to allocate for each
- output queue. The minimum is 2, the maximum is
- system-dependent and based on <code class="option">IOV_MAX</code>,
- and the default is 64.
- </li>
-<li class="listitem">
- <span class="command"><strong>fstrm-set-reopen-interval</strong></span>:
- The number of seconds to wait between attempts to
- reopen a closed output stream. The minimum is 1 second,
- the maximum is 600 seconds (10 minutes), and the default
- is 5 seconds.
- </li>
-</ul></div>
-<p>
- Note that all of the above minimum, maximum, and default
- values are set by the <span class="command"><strong>libfstrm</strong></span> library,
- and may be subject to change in future versions of the
- library. See the <span class="command"><strong>libfstrm</strong></span> documentation
- for more information.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>dnstap-output</strong></span></span></dt>
-<dd>
-<p>
- Configures the path to which the <span class="command"><strong>dnstap</strong></span>
- frame stream will be sent if <span class="command"><strong>dnstap</strong></span>
- is enabled at compile time and active.
- </p>
-<p>
- The first argument is either <code class="literal">file</code> or
- <code class="literal">unix</code>, indicating whether the destination
- is a file or a UNIX domain socket. The second argument
- is the path of the file or socket. (Note: when using a
- socket, <span class="command"><strong>dnstap</strong></span> messages will
- only be sent if another process such as
- <span class="command"><strong>fstrm_capture</strong></span>
- (provided with <span class="command"><strong>libfstrm</strong></span>) is listening on
- the socket.)
- </p>
-<p>
- <span class="command"><strong>dnstap-output</strong></span> can only be set globally
- in <span class="command"><strong>options</strong></span>. Currently, it can only be
- set once while <span class="command"><strong>named</strong></span> is running;
- once set, it cannot be changed by
- <span class="command"><strong>rndc reload</strong></span> or
- <span class="command"><strong>rndc reconfig</strong></span>.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>dnstap-identity</strong></span></span></dt>
-<dd><p>
- Specifies an <span class="command"><strong>identity</strong></span> string to send in
- <span class="command"><strong>dnstap</strong></span> messages. If set to
- <code class="literal">hostname</code>, which is the default, the
- server's hostname will be sent. If set to
- <code class="literal">none</code>, no identity string will be sent.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>dnstap-version</strong></span></span></dt>
-<dd><p>
- Specifies a <span class="command"><strong>version</strong></span> string to send in
- <span class="command"><strong>dnstap</strong></span> messages. The default is the
- version number of the BIND release. If set to
- <code class="literal">none</code>, no version string will be sent.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>geoip-directory</strong></span></span></dt>
-<dd><p>
- Specifies the directory containing GeoIP
- <code class="filename">.dat</code> database files for GeoIP
- initialization. By default, this option is unset
- and the GeoIP support will use libGeoIP's
- built-in directory.
- (For details, see <a class="xref" href="Bv9ARM.ch06.html#acl" title="acl Statement Definition and Usage">the section called &#8220;<span class="command"><strong>acl</strong></span> Statement Definition and
- Usage&#8221;</a> about the
- <span class="command"><strong>geoip</strong></span> ACL.)
- </p></dd>
-<dt><span class="term"><span class="command"><strong>key-directory</strong></span></span></dt>
-<dd><p>
- When performing dynamic update of secure zones, the
- directory where the public and private DNSSEC key files
- should be found, if different than the current working
- directory. (Note that this option has no effect on the
- paths for files containing non-DNSSEC keys such as
- <code class="filename">bind.keys</code>,
- <code class="filename">rndc.key</code> or
- <code class="filename">session.key</code>.)
- </p></dd>
-<dt><span class="term"><span class="command"><strong>managed-keys-directory</strong></span></span></dt>
-<dd>
-<p>
- Specifies the directory in which to store the files that
- track managed DNSSEC keys. By default, this is the working
- directory.
- </p>
-<p>
- If <span class="command"><strong>named</strong></span> is not configured to use views,
- then managed keys for the server will be tracked in a single
- file called <code class="filename">managed-keys.bind</code>.
- Otherwise, managed keys will be tracked in separate files,
- one file per view; each file name will be the view name
- (or, if it contains characters that are incompatible with
- use as a file name, the SHA256 hash of the view name),
- followed by the extension
- <code class="filename">.mkeys</code>.
- </p>
-<p>
- (Note: in previous releases, file names for views
- always used the SHA256 hash of the view name. To ensure
- compatibility after upgrade, if a file using the old
- name format is found to exist, it will be used instead
- of the new format.)
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>named-xfer</strong></span></span></dt>
-<dd><p>
- <span class="emphasis"><em>This option is obsolete.</em></span> It
- was used in <acronym class="acronym">BIND</acronym> 8 to specify
- the pathname to the <span class="command"><strong>named-xfer</strong></span>
- program. In <acronym class="acronym">BIND</acronym> 9, no separate
- <span class="command"><strong>named-xfer</strong></span> program is needed;
- its functionality is built into the name server.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>tkey-gssapi-keytab</strong></span></span></dt>
-<dd><p>
- The KRB5 keytab file to use for GSS-TSIG updates. If
- this option is set and tkey-gssapi-credential is not
- set, then updates will be allowed with any key
- matching a principal in the specified keytab.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>tkey-gssapi-credential</strong></span></span></dt>
-<dd><p>
- The security credential with which the server should
- authenticate keys requested by the GSS-TSIG protocol.
- Currently only Kerberos 5 authentication is available
- and the credential is a Kerberos principal which the
- server can acquire through the default system key
- file, normally <code class="filename">/etc/krb5.keytab</code>.
- The location keytab file can be overridden using the
- tkey-gssapi-keytab option. Normally this principal is
- of the form "<strong class="userinput"><code>DNS/</code></strong><code class="varname">server.domain</code>".
- To use GSS-TSIG, <span class="command"><strong>tkey-domain</strong></span> must
- also be set if a specific keytab is not set with
- tkey-gssapi-keytab.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>tkey-domain</strong></span></span></dt>
-<dd><p>
- The domain appended to the names of all shared keys
- generated with <span class="command"><strong>TKEY</strong></span>. When a
- client requests a <span class="command"><strong>TKEY</strong></span> exchange,
- it may or may not specify the desired name for the
- key. If present, the name of the shared key will
- be <code class="varname">client specified part</code> +
- <code class="varname">tkey-domain</code>. Otherwise, the
- name of the shared key will be <code class="varname">random hex
- digits</code> + <code class="varname">tkey-domain</code>.
- In most cases, the <span class="command"><strong>domainname</strong></span>
- should be the server's domain name, or an otherwise
- non-existent subdomain like
- "_tkey.<code class="varname">domainname</code>". If you are
- using GSS-TSIG, this variable must be defined, unless
- you specify a specific keytab using tkey-gssapi-keytab.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>tkey-dhkey</strong></span></span></dt>
-<dd><p>
- The Diffie-Hellman key used by the server
- to generate shared keys with clients using the Diffie-Hellman
- mode
- of <span class="command"><strong>TKEY</strong></span>. The server must be
- able to load the
- public and private keys from files in the working directory.
- In
- most cases, the keyname should be the server's host name.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>cache-file</strong></span></span></dt>
-<dd><p>
- This is for testing only. Do not use.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>dump-file</strong></span></span></dt>
-<dd><p>
- The pathname of the file the server dumps
- the database to when instructed to do so with
- <span class="command"><strong>rndc dumpdb</strong></span>.
- If not specified, the default is <code class="filename">named_dump.db</code>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>memstatistics-file</strong></span></span></dt>
-<dd><p>
- The pathname of the file the server writes memory
- usage statistics to on exit. If not specified,
- the default is <code class="filename">named.memstats</code>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>lock-file</strong></span></span></dt>
-<dd>
-<p>
- The pathname of a file on which <span class="command"><strong>named</strong></span> will
- attempt to acquire a file lock when starting up for
- the first time; if unsuccessful, the server will
- will terminate, under the assumption that another
- server is already running. If not specified, the default is
- <code class="filename">/var/run/named/named.lock</code>.
- </p>
-<p>
- Specifying <span class="command"><strong>lock-file none</strong></span> disables the
- use of a lock file. <span class="command"><strong>lock-file</strong></span> is
- ignored if <span class="command"><strong>named</strong></span> was run using the <code class="option">-X</code>
- option, which overrides it. Changes to
- <span class="command"><strong>lock-file</strong></span> are ignored if
- <span class="command"><strong>named</strong></span> is being reloaded or
- reconfigured; it is only effective when the server is
- first started up.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>pid-file</strong></span></span></dt>
-<dd><p>
- The pathname of the file the server writes its process ID
- in. If not specified, the default is
- <code class="filename">/var/run/named/named.pid</code>.
- The PID file is used by programs that want to send signals to
- the running
- name server. Specifying <span class="command"><strong>pid-file none</strong></span> disables the
- use of a PID file &#8212; no file will be written and any
- existing one will be removed. Note that <span class="command"><strong>none</strong></span>
- is a keyword, not a filename, and therefore is not enclosed
- in
- double quotes.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>recursing-file</strong></span></span></dt>
-<dd><p>
- The pathname of the file the server dumps
- the queries that are currently recursing when instructed
- to do so with <span class="command"><strong>rndc recursing</strong></span>.
- If not specified, the default is <code class="filename">named.recursing</code>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>statistics-file</strong></span></span></dt>
-<dd><p>
- The pathname of the file the server appends statistics
- to when instructed to do so using <span class="command"><strong>rndc stats</strong></span>.
- If not specified, the default is <code class="filename">named.stats</code> in the
- server's current directory. The format of the file is
- described
- in <a class="xref" href="Bv9ARM.ch06.html#statsfile" title="The Statistics File">the section called &#8220;The Statistics File&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>bindkeys-file</strong></span></span></dt>
-<dd><p>
- The pathname of a file to override the built-in trusted
- keys provided by <span class="command"><strong>named</strong></span>.
- See the discussion of <span class="command"><strong>dnssec-lookaside</strong></span>
- and <span class="command"><strong>dnssec-validation</strong></span> for details.
- If not specified, the default is
- <code class="filename">/etc/bind.keys</code>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>secroots-file</strong></span></span></dt>
-<dd><p>
- The pathname of the file the server dumps
- security roots to when instructed to do so with
- <span class="command"><strong>rndc secroots</strong></span>.
- If not specified, the default is
- <code class="filename">named.secroots</code>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>session-keyfile</strong></span></span></dt>
-<dd><p>
- The pathname of the file into which to write a TSIG
- session key generated by <span class="command"><strong>named</strong></span> for use by
- <span class="command"><strong>nsupdate -l</strong></span>. If not specified, the
- default is <code class="filename">/var/run/named/session.key</code>.
- (See <a class="xref" href="Bv9ARM.ch06.html#dynamic_update_policies" title="Dynamic Update Policies">the section called &#8220;Dynamic Update Policies&#8221;</a>, and in
- particular the discussion of the
- <span class="command"><strong>update-policy</strong></span> statement's
- <strong class="userinput"><code>local</code></strong> option for more
- information about this feature.)
- </p></dd>
-<dt><span class="term"><span class="command"><strong>session-keyname</strong></span></span></dt>
-<dd><p>
- The key name to use for the TSIG session key.
- If not specified, the default is "local-ddns".
- </p></dd>
-<dt><span class="term"><span class="command"><strong>session-keyalg</strong></span></span></dt>
-<dd><p>
- The algorithm to use for the TSIG session key.
- Valid values are hmac-sha1, hmac-sha224, hmac-sha256,
- hmac-sha384, hmac-sha512 and hmac-md5. If not
- specified, the default is hmac-sha256.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>port</strong></span></span></dt>
-<dd><p>
- The UDP/TCP port number the server uses for
- receiving and sending DNS protocol traffic.
- The default is 53. This option is mainly intended for server
- testing;
- a server using a port other than 53 will not be able to
- communicate with
- the global DNS.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>dscp</strong></span></span></dt>
-<dd><p>
- The global Differentiated Services Code Point (DSCP)
- value to classify outgoing DNS traffic on operating
- systems that support DSCP. Valid values are 0 through 63.
- It is not configured by default.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>random-device</strong></span></span></dt>
-<dd><p>
- The source of entropy to be used by the server. Entropy is
- primarily needed
- for DNSSEC operations, such as TKEY transactions and dynamic
- update of signed
- zones. This options specifies the device (or file) from which
- to read
- entropy. If this is a file, operations requiring entropy will
- fail when the
- file has been exhausted. If not specified, the default value
- is
- <code class="filename">/dev/random</code>
- (or equivalent) when present, and none otherwise. The
- <span class="command"><strong>random-device</strong></span> option takes
- effect during
- the initial configuration load at server startup time and
- is ignored on subsequent reloads.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>preferred-glue</strong></span></span></dt>
-<dd><p>
- If specified, the listed type (A or AAAA) will be emitted
- before other glue
- in the additional section of a query response.
- The default is to prefer A records when responding
- to queries that arrived via IPv4 and AAAA when
- responding to queries that arrived via IPv6.
- </p></dd>
-<dt>
-<a name="root_delegation_only"></a><span class="term"><span class="command"><strong>root-delegation-only</strong></span></span>
-</dt>
-<dd>
-<p>
- Turn on enforcement of delegation-only in TLDs
- (top level domains) and root zones with an optional
- exclude list.
- </p>
-<p>
- DS queries are expected to be made to and be answered by
- delegation only zones. Such queries and responses are
- treated as an exception to delegation-only processing
- and are not converted to NXDOMAIN responses provided
- a CNAME is not discovered at the query name.
- </p>
-<p>
- If a delegation only zone server also serves a child
- zone it is not always possible to determine whether
- an answer comes from the delegation only zone or the
- child zone. SOA NS and DNSKEY records are apex
- only records and a matching response that contains
- these records or DS is treated as coming from a
- child zone. RRSIG records are also examined to see
- if they are signed by a child zone or not. The
- authority section is also examined to see if there
- is evidence that the answer is from the child zone.
- Answers that are determined to be from a child zone
- are not converted to NXDOMAIN responses. Despite
- all these checks there is still a possibility of
- false negatives when a child zone is being served.
- </p>
-<p>
- Similarly false positives can arise from empty nodes
- (no records at the name) in the delegation only zone
- when the query type is not ANY.
- </p>
-<p>
- Note some TLDs are not delegation only (e.g. "DE", "LV",
- "US" and "MUSEUM"). This list is not exhaustive.
- </p>
-<pre class="programlisting">
-options {
- root-delegation-only exclude { "de"; "lv"; "us"; "museum"; };
-};
-</pre>
-</dd>
-<dt><span class="term"><span class="command"><strong>disable-algorithms</strong></span></span></dt>
-<dd>
-<p>
- Disable the specified DNSSEC algorithms at and below the
- specified name.
- Multiple <span class="command"><strong>disable-algorithms</strong></span>
- statements are allowed.
- Only the best match <span class="command"><strong>disable-algorithms</strong></span>
- clause will be used to determine which algorithms are used.
- </p>
-<p>
- If all supported algorithms are disabled, the zones covered
- by the <span class="command"><strong>disable-algorithms</strong></span> will be treated
- as insecure.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>disable-ds-digests</strong></span></span></dt>
-<dd>
-<p>
- Disable the specified DS/DLV digest types at and below the
- specified name.
- Multiple <span class="command"><strong>disable-ds-digests</strong></span>
- statements are allowed.
- Only the best match <span class="command"><strong>disable-ds-digests</strong></span>
- clause will be used to determine which digest types are used.
- </p>
-<p>
- If all supported digest types are disabled, the zones covered
- by the <span class="command"><strong>disable-ds-digests</strong></span> will be treated
- as insecure.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>dnssec-lookaside</strong></span></span></dt>
-<dd>
-<p>
- When set, <span class="command"><strong>dnssec-lookaside</strong></span> provides the
- validator with an alternate method to validate DNSKEY
- records at the top of a zone. When a DNSKEY is at or
- below a domain specified by the deepest
- <span class="command"><strong>dnssec-lookaside</strong></span>, and the normal DNSSEC
- validation has left the key untrusted, the trust-anchor
- will be appended to the key name and a DLV record will be
- looked up to see if it can validate the key. If the DLV
- record validates a DNSKEY (similarly to the way a DS
- record does) the DNSKEY RRset is deemed to be trusted.
- </p>
-<p>
- If <span class="command"><strong>dnssec-lookaside</strong></span> is set to
- <strong class="userinput"><code>auto</code></strong>, then built-in default
- values for the DLV domain and trust anchor will be
- used, along with a built-in key for validation.
- </p>
-<p>
- If <span class="command"><strong>dnssec-lookaside</strong></span> is set to
- <strong class="userinput"><code>no</code></strong>, then dnssec-lookaside
- is not used.
- </p>
-<p>
- The default DLV key is stored in the file
- <code class="filename">bind.keys</code>;
- <span class="command"><strong>named</strong></span> will load that key at
- startup if <span class="command"><strong>dnssec-lookaside</strong></span> is set to
- <code class="constant">auto</code>. A copy of the file is
- installed along with <acronym class="acronym">BIND</acronym> 9, and is
- current as of the release date. If the DLV key expires, a
- new copy of <code class="filename">bind.keys</code> can be downloaded
- from <a class="link" href="https://www.isc.org/solutions/dlv/" target="_top">https://www.isc.org/solutions/dlv/</a>.
- </p>
-<p>
- (To prevent problems if <code class="filename">bind.keys</code> is
- not found, the current key is also compiled in to
- <span class="command"><strong>named</strong></span>. Relying on this is not
- recommended, however, as it requires <span class="command"><strong>named</strong></span>
- to be recompiled with a new key when the DLV key expires.)
- </p>
-<p>
- NOTE: <span class="command"><strong>named</strong></span> only loads certain specific
- keys from <code class="filename">bind.keys</code>: those for the
- DLV zone and for the DNS root zone. The file cannot be
- used to store keys for other zones.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>dnssec-must-be-secure</strong></span></span></dt>
-<dd><p>
- Specify hierarchies which must be or may not be secure
- (signed and validated). If <strong class="userinput"><code>yes</code></strong>,
- then <span class="command"><strong>named</strong></span> will only accept answers if
- they are secure. If <strong class="userinput"><code>no</code></strong>, then normal
- DNSSEC validation applies allowing for insecure answers to
- be accepted. The specified domain must be under a
- <span class="command"><strong>trusted-keys</strong></span> or
- <span class="command"><strong>managed-keys</strong></span> statement, or
- <span class="command"><strong>dnssec-lookaside</strong></span> must be active.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>dns64</strong></span></span></dt>
-<dd>
-<p>
- This directive instructs <span class="command"><strong>named</strong></span> to
- return mapped IPv4 addresses to AAAA queries when
- there are no AAAA records. It is intended to be
- used in conjunction with a NAT64. Each
- <span class="command"><strong>dns64</strong></span> defines one DNS64 prefix.
- Multiple DNS64 prefixes can be defined.
- </p>
-<p>
- Compatible IPv6 prefixes have lengths of 32, 40, 48, 56,
- 64 and 96 as per RFC 6052.
- </p>
-<p>
- Additionally a reverse IP6.ARPA zone will be created for
- the prefix to provide a mapping from the IP6.ARPA names
- to the corresponding IN-ADDR.ARPA names using synthesized
- CNAMEs. <span class="command"><strong>dns64-server</strong></span> and
- <span class="command"><strong>dns64-contact</strong></span> can be used to specify
- the name of the server and contact for the zones. These
- are settable at the view / options level. These are
- not settable on a per-prefix basis.
- </p>
-<p>
- Each <span class="command"><strong>dns64</strong></span> supports an optional
- <span class="command"><strong>clients</strong></span> ACL that determines which
- clients are affected by this directive. If not defined,
- it defaults to <strong class="userinput"><code>any;</code></strong>.
- </p>
-<p>
- Each <span class="command"><strong>dns64</strong></span> supports an optional
- <span class="command"><strong>mapped</strong></span> ACL that selects which
- IPv4 addresses are to be mapped in the corresponding
- A RRset. If not defined it defaults to
- <strong class="userinput"><code>any;</code></strong>.
- </p>
-<p>
- Normally, DNS64 won't apply to a domain name that
- owns one or more AAAA records; these records will
- simply be returned. The optional
- <span class="command"><strong>exclude</strong></span> ACL allows specification
- of a list of IPv6 addresses that will be ignored
- if they appear in a domain name's AAAA records, and
- DNS64 will be applied to any A records the domain
- name owns. If not defined, <span class="command"><strong>exclude</strong></span>
- defaults to ::ffff:0.0.0.0/96.
- </p>
-<p>
- A optional <span class="command"><strong>suffix</strong></span> can also
- be defined to set the bits trailing the mapped
- IPv4 address bits. By default these bits are
- set to <strong class="userinput"><code>::</code></strong>. The bits
- matching the prefix and mapped IPv4 address
- must be zero.
- </p>
-<p>
- If <span class="command"><strong>recursive-only</strong></span> is set to
- <span class="command"><strong>yes</strong></span> the DNS64 synthesis will
- only happen for recursive queries. The default
- is <span class="command"><strong>no</strong></span>.
- </p>
-<p>
- If <span class="command"><strong>break-dnssec</strong></span> is set to
- <span class="command"><strong>yes</strong></span> the DNS64 synthesis will
- happen even if the result, if validated, would
- cause a DNSSEC validation failure. If this option
- is set to <span class="command"><strong>no</strong></span> (the default), the DO
- is set on the incoming query, and there are RRSIGs on
- the applicable records, then synthesis will not happen.
- </p>
-<pre class="programlisting">
- acl rfc1918 { 10/8; 192.168/16; 172.16/12; };
-
- dns64 64:FF9B::/96 {
- clients { any; };
- mapped { !rfc1918; any; };
- exclude { 64:FF9B::/96; ::ffff:0000:0000/96; };
- suffix ::;
- };
-</pre>
-</dd>
-<dt><span class="term"><span class="command"><strong>dnssec-loadkeys-interval</strong></span></span></dt>
-<dd><p>
- When a zone is configured with <span class="command"><strong>auto-dnssec
- maintain;</strong></span> its key repository must be checked
- periodically to see if any new keys have been added
- or any existing keys' timing metadata has been updated
- (see <a class="xref" href="man.dnssec-keygen.html" title="dnssec-keygen"><span class="refentrytitle"><span class="application">dnssec-keygen</span></span>(8)</a> and
- <a class="xref" href="man.dnssec-settime.html" title="dnssec-settime"><span class="refentrytitle"><span class="application">dnssec-settime</span></span>(8)</a>). The
- <span class="command"><strong>dnssec-loadkeys-interval</strong></span> option
- sets the frequency of automatic repository checks, in
- minutes. The default is <code class="literal">60</code> (1 hour),
- the minimum is <code class="literal">1</code> (1 minute), and the
- maximum is <code class="literal">1440</code> (24 hours); any higher
- value is silently reduced.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>dnssec-update-mode</strong></span></span></dt>
-<dd>
-<p>
- If this option is set to its default value of
- <code class="literal">maintain</code> in a zone of type
- <code class="literal">master</code> which is DNSSEC-signed
- and configured to allow dynamic updates (see
- <a class="xref" href="Bv9ARM.ch06.html#dynamic_update_policies" title="Dynamic Update Policies">the section called &#8220;Dynamic Update Policies&#8221;</a>), and
- if <span class="command"><strong>named</strong></span> has access to the
- private signing key(s) for the zone, then
- <span class="command"><strong>named</strong></span> will automatically sign all new
- or changed records and maintain signatures for the zone
- by regenerating RRSIG records whenever they approach
- their expiration date.
- </p>
-<p>
- If the option is changed to <code class="literal">no-resign</code>,
- then <span class="command"><strong>named</strong></span> will sign all new or
- changed records, but scheduled maintenance of
- signatures is disabled.
- </p>
-<p>
- With either of these settings, <span class="command"><strong>named</strong></span>
- will reject updates to a DNSSEC-signed zone when the
- signing keys are inactive or unavailable to
- <span class="command"><strong>named</strong></span>. (A planned third option,
- <code class="literal">external</code>, will disable all automatic
- signing and allow DNSSEC data to be submitted into a zone
- via dynamic update; this is not yet implemented.)
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>nta-lifetime</strong></span></span></dt>
-<dd>
-<p>
- Species the default lifetime, in seconds,
- that will be used for negative trust anchors added
- via <span class="command"><strong>rndc nta</strong></span>.
- </p>
-<p>
- A negative trust anchor selectively disables
- DNSSEC validation for zones that are known to be
- failing because of misconfiguration rather than
- an attack. When data to be validated is
- at or below an active NTA (and above any other
- configured trust anchors), <span class="command"><strong>named</strong></span> will
- abort the DNSSEC validation process and treat the data as
- insecure rather than bogus. This continues until the
- NTA's lifetime is elapsed. NTAs persist
- across <span class="command"><strong>named</strong></span> restarts.
- </p>
-<p>
- For convenience, TTL-style time unit suffixes can be
- used to specify the NTA lifetime in seconds, minutes
- or hours. <code class="option">nta-lifetime</code> defaults to
- one hour. It cannot exceed one week.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>nta-recheck</strong></span></span></dt>
-<dd>
-<p>
- Species how often to check whether negative
- trust anchors added via <span class="command"><strong>rndc nta</strong></span>
- are still necessary.
- </p>
-<p>
- A negative trust anchor is normally used when a
- domain has stopped validating due to operator error;
- it temporarily disables DNSSEC validation for that
- domain. In the interest of ensuring that DNSSEC
- validation is turned back on as soon as possible,
- <span class="command"><strong>named</strong></span> will periodically send a
- query to the domain, ignoring negative trust anchors,
- to find out whether it can now be validated. If so,
- the negative trust anchor is allowed to expire early.
- </p>
-<p>
- Validity checks can be disabled for an individual
- NTA by using <span class="command"><strong>rndc nta -f</strong></span>, or
- for all NTAs by setting <code class="option">nta-recheck</code>
- to zero.
- </p>
-<p>
- For convenience, TTL-style time unit suffixes can be
- used to specify the NTA recheck interval in seconds,
- minutes or hours. The default is five minutes. It
- cannot be longer than <code class="option">nta-lifetime</code>
- (which cannot be longer than a week).
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>max-zone-ttl</strong></span></span></dt>
-<dd>
-<p>
- Specifies a maximum permissible TTL value in seconds.
- For convenience, TTL-style time unit suffixes may be
- used to specify the maximum value.
- When loading a zone file using a
- <code class="option">masterfile-format</code> of
- <code class="constant">text</code> or <code class="constant">raw</code>,
- any record encountered with a TTL higher than
- <code class="option">max-zone-ttl</code> will cause the zone to
- be rejected.
- </p>
-<p>
- This is useful in DNSSEC-signed zones because when
- rolling to a new DNSKEY, the old key needs to remain
- available until RRSIG records have expired from
- caches. The <code class="option">max-zone-ttl</code> option guarantees
- that the largest TTL in the zone will be no higher
- than the set value.
- </p>
-<p>
- (NOTE: Because <code class="constant">map</code>-format files
- load directly into memory, this option cannot be
- used with them.)
- </p>
-<p>
- The default value is <code class="constant">unlimited</code>.
- A <code class="option">max-zone-ttl</code> of zero is treated as
- <code class="constant">unlimited</code>.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>serial-update-method</strong></span></span></dt>
-<dd>
-<p>
- Zones configured for dynamic DNS may use this
- option to set the update method that will be used for
- the zone serial number in the SOA record.
- </p>
-<p>
- With the default setting of
- <span class="command"><strong>serial-update-method increment;</strong></span>, the
- SOA serial number will be incremented by one each time
- the zone is updated.
- </p>
-<p>
- When set to
- <span class="command"><strong>serial-update-method unixtime;</strong></span>, the
- SOA serial number will be set to the number of seconds
- since the UNIX epoch, unless the serial number is
- already greater than or equal to that value, in which
- case it is simply incremented by one.
- </p>
-<p>
- When set to
- <span class="command"><strong>serial-update-method date;</strong></span>, the
- new SOA serial number will be the current date
- in the form "YYYYMMDD", followed by two zeroes,
- unless the existing serial number is already greater
- than or equal to that value, in which case it is
- incremented by one.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>zone-statistics</strong></span></span></dt>
-<dd>
-<p>
- If <strong class="userinput"><code>full</code></strong>, the server will collect
- statistical data on all zones (unless specifically
- turned off on a per-zone basis by specifying
- <span class="command"><strong>zone-statistics terse</strong></span> or
- <span class="command"><strong>zone-statistics none</strong></span>
- in the <span class="command"><strong>zone</strong></span> statement).
- The default is <strong class="userinput"><code>terse</code></strong>, providing
- minimal statistics on zones (including name and
- current serial number, but not query type
- counters).
- </p>
-<p>
- These statistics may be accessed via the
- <span class="command"><strong>statistics-channel</strong></span> or
- using <span class="command"><strong>rndc stats</strong></span>, which
- will dump them to the file listed
- in the <span class="command"><strong>statistics-file</strong></span>. See
- also <a class="xref" href="Bv9ARM.ch06.html#statsfile" title="The Statistics File">the section called &#8220;The Statistics File&#8221;</a>.
- </p>
-<p>
- For backward compatibility with earlier versions
- of BIND 9, the <span class="command"><strong>zone-statistics</strong></span>
- option can also accept <strong class="userinput"><code>yes</code></strong>
- or <strong class="userinput"><code>no</code></strong>; <strong class="userinput"><code>yes</code></strong>
- has the same meaning as <strong class="userinput"><code>full</code></strong>.
- As of <acronym class="acronym">BIND</acronym> 9.10,
- <strong class="userinput"><code>no</code></strong> has the same meaning
- as <strong class="userinput"><code>none</code></strong>; previously, it
- was the same as <strong class="userinput"><code>terse</code></strong>.
- </p>
-</dd>
-</dl></div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="boolean_options"></a>Boolean Options</h4></div></div></div>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><span class="command"><strong>automatic-interface-scan</strong></span></span></dt>
-<dd>
-<p>
- If <strong class="userinput"><code>yes</code></strong> and supported by the OS,
- automatically rescan network interfaces when the interface
- addresses are added or removed. The default is
- <strong class="userinput"><code>yes</code></strong>.
- </p>
-<p>
- Currently the OS needs to support routing sockets for
- <span class="command"><strong>automatic-interface-scan</strong></span> to be
- supported.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>allow-new-zones</strong></span></span></dt>
-<dd><p>
- If <strong class="userinput"><code>yes</code></strong>, then zones can be
- added at runtime via <span class="command"><strong>rndc addzone</strong></span>.
- The default is <strong class="userinput"><code>no</code></strong>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>auth-nxdomain</strong></span></span></dt>
-<dd><p>
- If <strong class="userinput"><code>yes</code></strong>, then the <span class="command"><strong>AA</strong></span> bit
- is always set on NXDOMAIN responses, even if the server is
- not actually
- authoritative. The default is <strong class="userinput"><code>no</code></strong>;
- this is
- a change from <acronym class="acronym">BIND</acronym> 8. If you
- are using very old DNS software, you
- may need to set it to <strong class="userinput"><code>yes</code></strong>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>deallocate-on-exit</strong></span></span></dt>
-<dd><p>
- This option was used in <acronym class="acronym">BIND</acronym>
- 8 to enable checking
- for memory leaks on exit. <acronym class="acronym">BIND</acronym> 9 ignores the option and always performs
- the checks.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>memstatistics</strong></span></span></dt>
-<dd><p>
- Write memory statistics to the file specified by
- <span class="command"><strong>memstatistics-file</strong></span> at exit.
- The default is <strong class="userinput"><code>no</code></strong> unless
- '-m record' is specified on the command line in
- which case it is <strong class="userinput"><code>yes</code></strong>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>dialup</strong></span></span></dt>
-<dd>
-<p>
- If <strong class="userinput"><code>yes</code></strong>, then the
- server treats all zones as if they are doing zone transfers
- across
- a dial-on-demand dialup link, which can be brought up by
- traffic
- originating from this server. This has different effects
- according
- to zone type and concentrates the zone maintenance so that
- it all
- happens in a short interval, once every <span class="command"><strong>heartbeat-interval</strong></span> and
- hopefully during the one call. It also suppresses some of
- the normal
- zone maintenance traffic. The default is <strong class="userinput"><code>no</code></strong>.
- </p>
-<p>
- The <span class="command"><strong>dialup</strong></span> option
- may also be specified in the <span class="command"><strong>view</strong></span> and
- <span class="command"><strong>zone</strong></span> statements,
- in which case it overrides the global <span class="command"><strong>dialup</strong></span>
- option.
- </p>
-<p>
- If the zone is a master zone, then the server will send out a
- NOTIFY
- request to all the slaves (default). This should trigger the
- zone serial
- number check in the slave (providing it supports NOTIFY)
- allowing the slave
- to verify the zone while the connection is active.
- The set of servers to which NOTIFY is sent can be controlled
- by
- <span class="command"><strong>notify</strong></span> and <span class="command"><strong>also-notify</strong></span>.
- </p>
-<p>
- If the
- zone is a slave or stub zone, then the server will suppress
- the regular
- "zone up to date" (refresh) queries and only perform them
- when the
- <span class="command"><strong>heartbeat-interval</strong></span> expires in
- addition to sending
- NOTIFY requests.
- </p>
-<p>
- Finer control can be achieved by using
- <strong class="userinput"><code>notify</code></strong> which only sends NOTIFY
- messages,
- <strong class="userinput"><code>notify-passive</code></strong> which sends NOTIFY
- messages and
- suppresses the normal refresh queries, <strong class="userinput"><code>refresh</code></strong>
- which suppresses normal refresh processing and sends refresh
- queries
- when the <span class="command"><strong>heartbeat-interval</strong></span>
- expires, and
- <strong class="userinput"><code>passive</code></strong> which just disables normal
- refresh
- processing.
- </p>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="1.150in" class="1">
-<col width="1.150in" class="2">
-<col width="1.150in" class="3">
-<col width="1.150in" class="4">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p>
- dialup mode
- </p>
- </td>
-<td>
- <p>
- normal refresh
- </p>
- </td>
-<td>
- <p>
- heart-beat refresh
- </p>
- </td>
-<td>
- <p>
- heart-beat notify
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>no</strong></span> (default)</p>
- </td>
-<td>
- <p>
- yes
- </p>
- </td>
-<td>
- <p>
- no
- </p>
- </td>
-<td>
- <p>
- no
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>yes</strong></span></p>
- </td>
-<td>
- <p>
- no
- </p>
- </td>
-<td>
- <p>
- yes
- </p>
- </td>
-<td>
- <p>
- yes
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>notify</strong></span></p>
- </td>
-<td>
- <p>
- yes
- </p>
- </td>
-<td>
- <p>
- no
- </p>
- </td>
-<td>
- <p>
- yes
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>refresh</strong></span></p>
- </td>
-<td>
- <p>
- no
- </p>
- </td>
-<td>
- <p>
- yes
- </p>
- </td>
-<td>
- <p>
- no
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>passive</strong></span></p>
- </td>
-<td>
- <p>
- no
- </p>
- </td>
-<td>
- <p>
- no
- </p>
- </td>
-<td>
- <p>
- no
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>notify-passive</strong></span></p>
- </td>
-<td>
- <p>
- no
- </p>
- </td>
-<td>
- <p>
- no
- </p>
- </td>
-<td>
- <p>
- yes
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-<p>
- Note that normal NOTIFY processing is not affected by
- <span class="command"><strong>dialup</strong></span>.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>fake-iquery</strong></span></span></dt>
-<dd><p>
- In <acronym class="acronym">BIND</acronym> 8, this option
- enabled simulating the obsolete DNS query type
- IQUERY. <acronym class="acronym">BIND</acronym> 9 never does
- IQUERY simulation.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>fetch-glue</strong></span></span></dt>
-<dd><p>
- This option is obsolete.
- In BIND 8, <strong class="userinput"><code>fetch-glue yes</code></strong>
- caused the server to attempt to fetch glue resource records
- it
- didn't have when constructing the additional
- data section of a response. This is now considered a bad
- idea
- and BIND 9 never does it.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>flush-zones-on-shutdown</strong></span></span></dt>
-<dd><p>
- When the nameserver exits due receiving SIGTERM,
- flush or do not flush any pending zone writes. The default
- is
- <span class="command"><strong>flush-zones-on-shutdown</strong></span> <strong class="userinput"><code>no</code></strong>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>geoip-use-ecs</strong></span></span></dt>
-<dd><p>
- When BIND is compiled with GeoIP support and configured
- with "geoip" ACL elements, this option indicates whether
- the EDNS Client Subnet option, if present in a request,
- should be used for matching against the GeoIP database.
- The default is
- <span class="command"><strong>geoip-use-ecs</strong></span> <strong class="userinput"><code>yes</code></strong>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>has-old-clients</strong></span></span></dt>
-<dd><p>
- This option was incorrectly implemented
- in <acronym class="acronym">BIND</acronym> 8, and is ignored by <acronym class="acronym">BIND</acronym> 9.
- To achieve the intended effect
- of
- <span class="command"><strong>has-old-clients</strong></span> <strong class="userinput"><code>yes</code></strong>, specify
- the two separate options <span class="command"><strong>auth-nxdomain</strong></span> <strong class="userinput"><code>yes</code></strong>
- and <span class="command"><strong>rfc2308-type1</strong></span> <strong class="userinput"><code>no</code></strong> instead.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>host-statistics</strong></span></span></dt>
-<dd><p>
- In BIND 8, this enables keeping of
- statistics for every host that the name server interacts
- with.
- Not implemented in BIND 9.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>maintain-ixfr-base</strong></span></span></dt>
-<dd><p>
- <span class="emphasis"><em>This option is obsolete</em></span>.
- It was used in <acronym class="acronym">BIND</acronym> 8 to
- determine whether a transaction log was
- kept for Incremental Zone Transfer. <acronym class="acronym">BIND</acronym> 9 maintains a transaction
- log whenever possible. If you need to disable outgoing
- incremental zone
- transfers, use <span class="command"><strong>provide-ixfr</strong></span> <strong class="userinput"><code>no</code></strong>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>message-compression</strong></span></span></dt>
-<dd><p>
- If <strong class="userinput"><code>yes</code></strong>, DNS name compression is
- used in responses to regular queries (not including
- AXFR or IXFR, which always uses compression). Setting
- this option to <strong class="userinput"><code>no</code></strong> reduces CPU
- usage on servers and may improve throughput. However,
- it increases response size, which may cause more queries
- to be processed using TCP; a server with compression
- disabled is out of compliance with RFC 1123 Section
- 6.1.3.2. The default is <strong class="userinput"><code>yes</code></strong>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>minimal-responses</strong></span></span></dt>
-<dd>
-<p>
- If set to <strong class="userinput"><code>yes</code></strong>, then when generating
- responses the server will only add records to the authority
- and additional data sections when they are required (e.g.
- delegations, negative responses). This may improve the
- performance of the server.
- </p>
-<p>
- When set to <strong class="userinput"><code>no-auth</code></strong>, the
- server will omit records from the authority section
- unless they are required, but it may still add
- records to the additional section. When set to
- <strong class="userinput"><code>no-auth-recursive</code></strong>, this
- is only done if the query is recursive. These
- settings are useful when answering stub clients,
- which usually ignore the authority section.
- <strong class="userinput"><code>no-auth-recursive</code></strong> is
- designed for mixed-mode servers which handle
- both authoritative and recursive queries.
- </p>
-<p>
- The default is <strong class="userinput"><code>no</code></strong>.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>minimal-any</strong></span></span></dt>
-<dd><p>
- If set to <strong class="userinput"><code>yes</code></strong>, then when
- generating a positive response to a query of type
- ANY over UDP, the server will reply with only one
- of the RRsets for the query name, and its covering
- RRSIGs if any, instead of replying with all known
- RRsets for the name. Similarly, a query for type
- RRSIG will be answered with the RRSIG records covering
- only one type. This can reduce the impact of some kinds
- of attack traffic, without harming legitimate
- clients. (Note, however, that the RRset returned is the
- first one found in the database; it is not necessarily
- the smallest available RRset.)
- Additionally, <code class="option">minimal-responses</code> is
- turned on for these queries, so no unnecessary records
- will be added to the authority or additional sections.
- The default is <strong class="userinput"><code>no</code></strong>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>multiple-cnames</strong></span></span></dt>
-<dd><p>
- This option was used in <acronym class="acronym">BIND</acronym> 8 to allow
- a domain name to have multiple CNAME records in violation of
- the DNS standards. <acronym class="acronym">BIND</acronym> 9.2 onwards
- always strictly enforces the CNAME rules both in master
- files and dynamic updates.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>notify</strong></span></span></dt>
-<dd>
-<p>
- If <strong class="userinput"><code>yes</code></strong> (the default),
- DNS NOTIFY messages are sent when a zone the server is
- authoritative for
- changes, see <a class="xref" href="Bv9ARM.ch04.html#notify" title="Notify">the section called &#8220;Notify&#8221;</a>. The messages are
- sent to the
- servers listed in the zone's NS records (except the master
- server identified
- in the SOA MNAME field), and to any servers listed in the
- <span class="command"><strong>also-notify</strong></span> option.
- </p>
-<p>
- If <strong class="userinput"><code>master-only</code></strong>, notifies are only
- sent
- for master zones.
- If <strong class="userinput"><code>explicit</code></strong>, notifies are sent only
- to
- servers explicitly listed using <span class="command"><strong>also-notify</strong></span>.
- If <strong class="userinput"><code>no</code></strong>, no notifies are sent.
- </p>
-<p>
- The <span class="command"><strong>notify</strong></span> option may also be
- specified in the <span class="command"><strong>zone</strong></span>
- statement,
- in which case it overrides the <span class="command"><strong>options notify</strong></span> statement.
- It would only be necessary to turn off this option if it
- caused slaves
- to crash.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>notify-to-soa</strong></span></span></dt>
-<dd><p>
- If <strong class="userinput"><code>yes</code></strong> do not check the nameservers
- in the NS RRset against the SOA MNAME. Normally a NOTIFY
- message is not sent to the SOA MNAME (SOA ORIGIN) as it is
- supposed to contain the name of the ultimate master.
- Sometimes, however, a slave is listed as the SOA MNAME in
- hidden master configurations and in that case you would
- want the ultimate master to still send NOTIFY messages to
- all the nameservers listed in the NS RRset.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>recursion</strong></span></span></dt>
-<dd><p>
- If <strong class="userinput"><code>yes</code></strong>, and a
- DNS query requests recursion, then the server will attempt
- to do
- all the work required to answer the query. If recursion is
- off
- and the server does not already know the answer, it will
- return a
- referral response. The default is
- <strong class="userinput"><code>yes</code></strong>.
- Note that setting <span class="command"><strong>recursion no</strong></span> does not prevent
- clients from getting data from the server's cache; it only
- prevents new data from being cached as an effect of client
- queries.
- Caching may still occur as an effect the server's internal
- operation, such as NOTIFY address lookups.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>request-nsid</strong></span></span></dt>
-<dd><p>
- If <strong class="userinput"><code>yes</code></strong>, then an empty EDNS(0)
- NSID (Name Server Identifier) option is sent with all
- queries to authoritative name servers during iterative
- resolution. If the authoritative server returns an NSID
- option in its response, then its contents are logged in
- the <span class="command"><strong>resolver</strong></span> category at level
- <span class="command"><strong>info</strong></span>.
- The default is <strong class="userinput"><code>no</code></strong>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>request-sit</strong></span></span></dt>
-<dd><p>
- This experimental option is obsolete.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>require-server-cookie</strong></span></span></dt>
-<dd><p>
- Require a valid server cookie before sending a full
- response to a UDP request from a cookie aware client.
- BADCOOKIE is sent if there is a bad or no existent
- server cookie.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>send-cookie</strong></span></span></dt>
-<dd><p>
- If <strong class="userinput"><code>yes</code></strong>, then a COOKIE EDNS
- option is sent along with the query. If the
- resolver has previously talked to the server, the
- COOKIE returned in the previous transaction is sent.
- This is used by the server to determine whether
- the resolver has talked to it before. A resolver
- sending the correct COOKIE is assumed not to be an
- off-path attacker sending a spoofed-source query;
- the query is therefore unlikely to be part of a
- reflection/amplification attack, so resolvers
- sending a correct COOKIE option are not subject to
- response rate limiting (RRL). Resolvers which
- do not send a correct COOKIE option may be limited
- to receiving smaller responses via the
- <span class="command"><strong>nocookie-udp-size</strong></span> option.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>nocookie-udp-size</strong></span></span></dt>
-<dd><p>
- Sets the maximum size of UDP responses that will be
- sent to queries without a valid server COOKIE. A value
- below 128 will be silently raised to 128. The default
- value is 4096, but the <span class="command"><strong>max-udp-size</strong></span>
- option may further limit the response size.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>sit-secret</strong></span></span></dt>
-<dd><p>
- This experimental option is obsolete.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>cookie-algorithm</strong></span></span></dt>
-<dd><p>
- Set the algorithm to be used when generating the
- server cookie. One of "aes", "sha1" or "sha256".
- The default is "aes" if supported by the cryptographic
- library or otherwise "sha256".
- </p></dd>
-<dt><span class="term"><span class="command"><strong>cookie-secret</strong></span></span></dt>
-<dd><p>
- If set, this is a shared secret used for generating
- and verifying EDNS COOKIE options
- within an anycast cluster. If not set, the system
- will generate a random secret at startup. The
- shared secret is encoded as a hex string and needs
- to be 128 bits for AES128, 160 bits for SHA1 and
- 256 bits for SHA256.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>rfc2308-type1</strong></span></span></dt>
-<dd>
-<p>
- Setting this to <strong class="userinput"><code>yes</code></strong> will
- cause the server to send NS records along with the SOA
- record for negative
- answers. The default is <strong class="userinput"><code>no</code></strong>.
- </p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- Not yet implemented in <acronym class="acronym">BIND</acronym>
- 9.
- </p>
-</div>
-</dd>
-<dt><span class="term"><span class="command"><strong>trust-anchor-telemetry</strong></span></span></dt>
-<dd>
-<p>
- Causes <span class="command"><strong>named</strong></span> to send specially-formed
- queries once per day to domains for which trust anchors
- have been configured via <span class="command"><strong>trusted-keys</strong></span>,
- <span class="command"><strong>managed-keys</strong></span>,
- <span class="command"><strong>dnssec-validation auto</strong></span>, or
- <span class="command"><strong>dnssec-lookaside auto</strong></span>.
- </p>
-<p>
- The query name used for these queries has the
- form "_ta-xxxx(-xxxx)(...)".&lt;domain&gt;, where
- each "xxxx" is a group of four hexadecimal digits
- representing the key ID of a trusted DNSSEC key.
- The key IDs for each domain are sorted smallest
- to largest prior to encoding. The query type is NULL.
- </p>
-<p>
- By monitoring these queries, zone operators will
- be able to see which resolvers have been updated to
- trust a new key; this may help them decide when it
- is safe to remove an old one.
- </p>
-<p>
- The default is <strong class="userinput"><code>yes</code></strong>.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>use-id-pool</strong></span></span></dt>
-<dd><p>
- <span class="emphasis"><em>This option is obsolete</em></span>.
- <acronym class="acronym">BIND</acronym> 9 always allocates query
- IDs from a pool.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>use-ixfr</strong></span></span></dt>
-<dd><p>
- <span class="emphasis"><em>This option is obsolete</em></span>.
- If you need to disable IXFR to a particular server or
- servers, see
- the information on the <span class="command"><strong>provide-ixfr</strong></span> option
- in <a class="xref" href="Bv9ARM.ch06.html#server_statement_definition_and_usage" title="server Statement Definition and Usage">the section called &#8220;<span class="command"><strong>server</strong></span> Statement Definition and
- Usage&#8221;</a>.
- See also
- <a class="xref" href="Bv9ARM.ch04.html#incremental_zone_transfers" title="Incremental Zone Transfers (IXFR)">the section called &#8220;Incremental Zone Transfers (IXFR)&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>provide-ixfr</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>provide-ixfr</strong></span> in
- <a class="xref" href="Bv9ARM.ch06.html#server_statement_definition_and_usage" title="server Statement Definition and Usage">the section called &#8220;<span class="command"><strong>server</strong></span> Statement Definition and
- Usage&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>request-ixfr</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>request-ixfr</strong></span> in
- <a class="xref" href="Bv9ARM.ch06.html#server_statement_definition_and_usage" title="server Statement Definition and Usage">the section called &#8220;<span class="command"><strong>server</strong></span> Statement Definition and
- Usage&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>request-expire</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>request-expire</strong></span> in
- <a class="xref" href="Bv9ARM.ch06.html#server_statement_definition_and_usage" title="server Statement Definition and Usage">the section called &#8220;<span class="command"><strong>server</strong></span> Statement Definition and
- Usage&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>treat-cr-as-space</strong></span></span></dt>
-<dd><p>
- This option was used in <acronym class="acronym">BIND</acronym>
- 8 to make
- the server treat carriage return ("<span class="command"><strong>\r</strong></span>") characters the same way
- as a space or tab character,
- to facilitate loading of zone files on a UNIX system that
- were generated
- on an NT or DOS machine. In <acronym class="acronym">BIND</acronym> 9, both UNIX "<span class="command"><strong>\n</strong></span>"
- and NT/DOS "<span class="command"><strong>\r\n</strong></span>" newlines
- are always accepted,
- and the option is ignored.
- </p></dd>
-<dt>
-<span class="term"><span class="command"><strong>additional-from-auth</strong></span>, </span><span class="term"><span class="command"><strong>additional-from-cache</strong></span></span>
-</dt>
-<dd>
-<p>
- These options control the behavior of an authoritative
- server when
- answering queries which have additional data, or when
- following CNAME
- and DNAME chains.
- </p>
-<p>
- When both of these options are set to <strong class="userinput"><code>yes</code></strong>
- (the default) and a
- query is being answered from authoritative data (a zone
- configured into the server), the additional data section of
- the
- reply will be filled in using data from other authoritative
- zones
- and from the cache. In some situations this is undesirable,
- such
- as when there is concern over the correctness of the cache,
- or
- in servers where slave zones may be added and modified by
- untrusted third parties. Also, avoiding
- the search for this additional data will speed up server
- operations
- at the possible expense of additional queries to resolve
- what would
- otherwise be provided in the additional section.
- </p>
-<p>
- For example, if a query asks for an MX record for host <code class="literal">foo.example.com</code>,
- and the record found is "<code class="literal">MX 10 mail.example.net</code>", normally the address
- records (A and AAAA) for <code class="literal">mail.example.net</code> will be provided as well,
- if known, even though they are not in the example.com zone.
- Setting these options to <span class="command"><strong>no</strong></span>
- disables this behavior and makes
- the server only search for additional data in the zone it
- answers from.
- </p>
-<p>
- These options are intended for use in authoritative-only
- servers, or in authoritative-only views. Attempts to set
- them to <span class="command"><strong>no</strong></span> without also
- specifying
- <span class="command"><strong>recursion no</strong></span> will cause the
- server to
- ignore the options and log a warning message.
- </p>
-<p>
- Specifying <span class="command"><strong>additional-from-cache no</strong></span> actually
- disables the use of the cache not only for additional data
- lookups
- but also when looking up the answer. This is usually the
- desired
- behavior in an authoritative-only server where the
- correctness of
- the cached data is an issue.
- </p>
-<p>
- When a name server is non-recursively queried for a name
- that is not
- below the apex of any served zone, it normally answers with
- an
- "upwards referral" to the root servers or the servers of
- some other
- known parent of the query name. Since the data in an
- upwards referral
- comes from the cache, the server will not be able to provide
- upwards
- referrals when <span class="command"><strong>additional-from-cache no</strong></span>
- has been specified. Instead, it will respond to such
- queries
- with REFUSED. This should not cause any problems since
- upwards referrals are not required for the resolution
- process.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>match-mapped-addresses</strong></span></span></dt>
-<dd>
-<p>
- If <strong class="userinput"><code>yes</code></strong>, then an
- IPv4-mapped IPv6 address will match any address match
- list entries that match the corresponding IPv4 address.
- </p>
-<p>
- This option was introduced to work around a kernel quirk
- in some operating systems that causes IPv4 TCP
- connections, such as zone transfers, to be accepted on an
- IPv6 socket using mapped addresses. This caused address
- match lists designed for IPv4 to fail to match. However,
- <span class="command"><strong>named</strong></span> now solves this problem
- internally. The use of this option is discouraged.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>filter-aaaa-on-v4</strong></span></span></dt>
-<dd>
-<p>
- This option is only available when
- <acronym class="acronym">BIND</acronym> 9 is compiled with the
- <strong class="userinput"><code>--enable-filter-aaaa</code></strong> option on the
- "configure" command line. It is intended to help the
- transition from IPv4 to IPv6 by not giving IPv6 addresses
- to DNS clients unless they have connections to the IPv6
- Internet. This is not recommended unless absolutely
- necessary. The default is <strong class="userinput"><code>no</code></strong>.
- The <span class="command"><strong>filter-aaaa-on-v4</strong></span> option
- may also be specified in <span class="command"><strong>view</strong></span> statements
- to override the global <span class="command"><strong>filter-aaaa-on-v4</strong></span>
- option.
- </p>
-<p>
- If <strong class="userinput"><code>yes</code></strong>,
- the DNS client is at an IPv4 address, in <span class="command"><strong>filter-aaaa</strong></span>,
- and if the response does not include DNSSEC signatures,
- then all AAAA records are deleted from the response.
- This filtering applies to all responses and not only
- authoritative responses.
- </p>
-<p>
- If <strong class="userinput"><code>break-dnssec</code></strong>,
- then AAAA records are deleted even when DNSSEC is enabled.
- As suggested by the name, this makes the response not verify,
- because the DNSSEC protocol is designed detect deletions.
- </p>
-<p>
- This mechanism can erroneously cause other servers to
- not give AAAA records to their clients.
- A recursing server with both IPv6 and IPv4 network connections
- that queries an authoritative server using this mechanism
- via IPv4 will be denied AAAA records even if its client is
- using IPv6.
- </p>
-<p>
- This mechanism is applied to authoritative as well as
- non-authoritative records.
- A client using IPv4 that is not allowed recursion can
- erroneously be given AAAA records because the server is not
- allowed to check for A records.
- </p>
-<p>
- Some AAAA records are given to IPv4 clients in glue records.
- IPv4 clients that are servers can then erroneously
- answer requests for AAAA records received via IPv4.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>filter-aaaa-on-v6</strong></span></span></dt>
-<dd><p>
- Identical to <span class="command"><strong>filter-aaaa-on-v4</strong></span>,
- except it filters AAAA responses to queries from IPv6
- clients instead of IPv4 clients. To filter all
- responses, set both options to <strong class="userinput"><code>yes</code></strong>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>ixfr-from-differences</strong></span></span></dt>
-<dd>
-<p>
- When <strong class="userinput"><code>yes</code></strong> and the server loads a new
- version of a master zone from its zone file or receives a
- new version of a slave file via zone transfer, it will
- compare the new version to the previous one and calculate
- a set of differences. The differences are then logged in
- the zone's journal file such that the changes can be
- transmitted to downstream slaves as an incremental zone
- transfer.
- </p>
-<p>
- By allowing incremental zone transfers to be used for
- non-dynamic zones, this option saves bandwidth at the
- expense of increased CPU and memory consumption at the
- master.
- In particular, if the new version of a zone is completely
- different from the previous one, the set of differences
- will be of a size comparable to the combined size of the
- old and new zone version, and the server will need to
- temporarily allocate memory to hold this complete
- difference set.
- </p>
-<p><span class="command"><strong>ixfr-from-differences</strong></span>
- also accepts <span class="command"><strong>master</strong></span> and
- <span class="command"><strong>slave</strong></span> at the view and options
- levels which causes
- <span class="command"><strong>ixfr-from-differences</strong></span> to be enabled for
- all <span class="command"><strong>master</strong></span> or
- <span class="command"><strong>slave</strong></span> zones respectively.
- It is off by default.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>multi-master</strong></span></span></dt>
-<dd><p>
- This should be set when you have multiple masters for a zone
- and the
- addresses refer to different machines. If <strong class="userinput"><code>yes</code></strong>, <span class="command"><strong>named</strong></span> will
- not log
- when the serial number on the master is less than what <span class="command"><strong>named</strong></span>
- currently
- has. The default is <strong class="userinput"><code>no</code></strong>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>auto-dnssec</strong></span></span></dt>
-<dd>
-<p>
- Zones configured for dynamic DNS may use this
- option to allow varying levels of automatic DNSSEC key
- management. There are three possible settings:
- </p>
-<p>
- <span class="command"><strong>auto-dnssec allow;</strong></span> permits
- keys to be updated and the zone fully re-signed
- whenever the user issues the command <span class="command"><strong>rndc sign
- <em class="replaceable"><code>zonename</code></em></strong></span>.
- </p>
-<p>
- <span class="command"><strong>auto-dnssec maintain;</strong></span> includes the
- above, but also automatically adjusts the zone's DNSSEC
- keys on schedule, according to the keys' timing metadata
- (see <a class="xref" href="man.dnssec-keygen.html" title="dnssec-keygen"><span class="refentrytitle"><span class="application">dnssec-keygen</span></span>(8)</a> and
- <a class="xref" href="man.dnssec-settime.html" title="dnssec-settime"><span class="refentrytitle"><span class="application">dnssec-settime</span></span>(8)</a>). The command
- <span class="command"><strong>rndc sign
- <em class="replaceable"><code>zonename</code></em></strong></span> causes
- <span class="command"><strong>named</strong></span> to load keys from the key
- repository and sign the zone with all keys that are
- active.
- <span class="command"><strong>rndc loadkeys
- <em class="replaceable"><code>zonename</code></em></strong></span> causes
- <span class="command"><strong>named</strong></span> to load keys from the key
- repository and schedule key maintenance events to occur
- in the future, but it does not sign the full zone
- immediately. Note: once keys have been loaded for a
- zone the first time, the repository will be searched
- for changes periodically, regardless of whether
- <span class="command"><strong>rndc loadkeys</strong></span> is used. The recheck
- interval is defined by
- <span class="command"><strong>dnssec-loadkeys-interval</strong></span>.)
- </p>
-<p>
- The default setting is <span class="command"><strong>auto-dnssec off</strong></span>.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>dnssec-enable</strong></span></span></dt>
-<dd><p>
- This indicates whether DNSSEC-related resource
- records are to be returned by <span class="command"><strong>named</strong></span>.
- If set to <strong class="userinput"><code>no</code></strong>,
- <span class="command"><strong>named</strong></span> will not return DNSSEC-related
- resource records unless specifically queried for.
- The default is <strong class="userinput"><code>yes</code></strong>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>dnssec-validation</strong></span></span></dt>
-<dd>
-<p>
- Enable DNSSEC validation in <span class="command"><strong>named</strong></span>.
- Note <span class="command"><strong>dnssec-enable</strong></span> also needs to be
- set to <strong class="userinput"><code>yes</code></strong> to be effective.
- If set to <strong class="userinput"><code>no</code></strong>, DNSSEC validation
- is disabled. If set to <strong class="userinput"><code>auto</code></strong>,
- DNSSEC validation is enabled, and a default
- trust-anchor for the DNS root zone is used. If set to
- <strong class="userinput"><code>yes</code></strong>, DNSSEC validation is enabled,
- but a trust anchor must be manually configured using
- a <span class="command"><strong>trusted-keys</strong></span> or
- <span class="command"><strong>managed-keys</strong></span> statement. The default
- is <strong class="userinput"><code>yes</code></strong>.
- </p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- Whenever the resolver sends out queries to an
- EDNS-compliant server, it always sets the DO bit
- indicating it can support DNSSEC responses even if
- <span class="command"><strong>dnssec-validation</strong></span> is off.
- </p>
-</div>
-</dd>
-<dt><span class="term"><span class="command"><strong>dnssec-accept-expired</strong></span></span></dt>
-<dd><p>
- Accept expired signatures when verifying DNSSEC signatures.
- The default is <strong class="userinput"><code>no</code></strong>.
- Setting this option to <strong class="userinput"><code>yes</code></strong>
- leaves <span class="command"><strong>named</strong></span> vulnerable to
- replay attacks.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>querylog</strong></span></span></dt>
-<dd><p>
- Specify whether query logging should be started when <span class="command"><strong>named</strong></span>
- starts.
- If <span class="command"><strong>querylog</strong></span> is not specified,
- then the query logging
- is determined by the presence of the logging category <span class="command"><strong>queries</strong></span>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>check-names</strong></span></span></dt>
-<dd>
-<p>
- This option is used to restrict the character set and syntax
- of
- certain domain names in master files and/or DNS responses
- received
- from the network. The default varies according to usage
- area. For
- <span class="command"><strong>master</strong></span> zones the default is <span class="command"><strong>fail</strong></span>.
- For <span class="command"><strong>slave</strong></span> zones the default
- is <span class="command"><strong>warn</strong></span>.
- For answers received from the network (<span class="command"><strong>response</strong></span>)
- the default is <span class="command"><strong>ignore</strong></span>.
- </p>
-<p>
- The rules for legal hostnames and mail domains are derived
- from RFC 952 and RFC 821 as modified by RFC 1123.
- </p>
-<p><span class="command"><strong>check-names</strong></span>
- applies to the owner names of A, AAAA and MX records.
- It also applies to the domain names in the RDATA of NS, SOA,
- MX, and SRV records.
- It also applies to the RDATA of PTR records where the owner
- name indicated that it is a reverse lookup of a hostname
- (the owner name ends in IN-ADDR.ARPA, IP6.ARPA, or IP6.INT).
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>check-dup-records</strong></span></span></dt>
-<dd><p>
- Check master zones for records that are treated as different
- by DNSSEC but are semantically equal in plain DNS. The
- default is to <span class="command"><strong>warn</strong></span>. Other possible
- values are <span class="command"><strong>fail</strong></span> and
- <span class="command"><strong>ignore</strong></span>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>check-mx</strong></span></span></dt>
-<dd><p>
- Check whether the MX record appears to refer to a IP address.
- The default is to <span class="command"><strong>warn</strong></span>. Other possible
- values are <span class="command"><strong>fail</strong></span> and
- <span class="command"><strong>ignore</strong></span>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>check-wildcard</strong></span></span></dt>
-<dd><p>
- This option is used to check for non-terminal wildcards.
- The use of non-terminal wildcards is almost always as a
- result of a failure
- to understand the wildcard matching algorithm (RFC 1034).
- This option
- affects master zones. The default (<span class="command"><strong>yes</strong></span>) is to check
- for non-terminal wildcards and issue a warning.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>check-integrity</strong></span></span></dt>
-<dd>
-<p>
- Perform post load zone integrity checks on master
- zones. This checks that MX and SRV records refer
- to address (A or AAAA) records and that glue
- address records exist for delegated zones. For
- MX and SRV records only in-zone hostnames are
- checked (for out-of-zone hostnames use
- <span class="command"><strong>named-checkzone</strong></span>).
- For NS records only names below top of zone are
- checked (for out-of-zone names and glue consistency
- checks use <span class="command"><strong>named-checkzone</strong></span>).
- The default is <span class="command"><strong>yes</strong></span>.
- </p>
-<p>
- The use of the SPF record for publishing Sender
- Policy Framework is deprecated as the migration
- from using TXT records to SPF records was abandoned.
- Enabling this option also checks that a TXT Sender
- Policy Framework record exists (starts with "v=spf1")
- if there is an SPF record. Warnings are emitted if the
- TXT record does not exist and can be suppressed with
- <span class="command"><strong>check-spf</strong></span>.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>check-mx-cname</strong></span></span></dt>
-<dd><p>
- If <span class="command"><strong>check-integrity</strong></span> is set then
- fail, warn or ignore MX records that refer
- to CNAMES. The default is to <span class="command"><strong>warn</strong></span>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>check-srv-cname</strong></span></span></dt>
-<dd><p>
- If <span class="command"><strong>check-integrity</strong></span> is set then
- fail, warn or ignore SRV records that refer
- to CNAMES. The default is to <span class="command"><strong>warn</strong></span>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>check-sibling</strong></span></span></dt>
-<dd><p>
- When performing integrity checks, also check that
- sibling glue exists. The default is <span class="command"><strong>yes</strong></span>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>check-spf</strong></span></span></dt>
-<dd><p>
- If <span class="command"><strong>check-integrity</strong></span> is set then
- check that there is a TXT Sender Policy Framework
- record present (starts with "v=spf1") if there is an
- SPF record present. The default is
- <span class="command"><strong>warn</strong></span>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>zero-no-soa-ttl</strong></span></span></dt>
-<dd><p>
- When returning authoritative negative responses to
- SOA queries set the TTL of the SOA record returned in
- the authority section to zero.
- The default is <span class="command"><strong>yes</strong></span>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>zero-no-soa-ttl-cache</strong></span></span></dt>
-<dd><p>
- When caching a negative response to a SOA query
- set the TTL to zero.
- The default is <span class="command"><strong>no</strong></span>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>update-check-ksk</strong></span></span></dt>
-<dd>
-<p>
- When set to the default value of <code class="literal">yes</code>,
- check the KSK bit in each key to determine how the key
- should be used when generating RRSIGs for a secure zone.
- </p>
-<p>
- Ordinarily, zone-signing keys (that is, keys without the
- KSK bit set) are used to sign the entire zone, while
- key-signing keys (keys with the KSK bit set) are only
- used to sign the DNSKEY RRset at the zone apex.
- However, if this option is set to <code class="literal">no</code>,
- then the KSK bit is ignored; KSKs are treated as if they
- were ZSKs and are used to sign the entire zone. This is
- similar to the <span class="command"><strong>dnssec-signzone -z</strong></span>
- command line option.
- </p>
-<p>
- When this option is set to <code class="literal">yes</code>, there
- must be at least two active keys for every algorithm
- represented in the DNSKEY RRset: at least one KSK and one
- ZSK per algorithm. If there is any algorithm for which
- this requirement is not met, this option will be ignored
- for that algorithm.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>dnssec-dnskey-kskonly</strong></span></span></dt>
-<dd>
-<p>
- When this option and <span class="command"><strong>update-check-ksk</strong></span>
- are both set to <code class="literal">yes</code>, only key-signing
- keys (that is, keys with the KSK bit set) will be used
- to sign the DNSKEY RRset at the zone apex. Zone-signing
- keys (keys without the KSK bit set) will be used to sign
- the remainder of the zone, but not the DNSKEY RRset.
- This is similar to the
- <span class="command"><strong>dnssec-signzone -x</strong></span> command line option.
- </p>
-<p>
- The default is <span class="command"><strong>no</strong></span>. If
- <span class="command"><strong>update-check-ksk</strong></span> is set to
- <code class="literal">no</code>, this option is ignored.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>try-tcp-refresh</strong></span></span></dt>
-<dd><p>
- Try to refresh the zone using TCP if UDP queries fail.
- For BIND 8 compatibility, the default is
- <span class="command"><strong>yes</strong></span>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>dnssec-secure-to-insecure</strong></span></span></dt>
-<dd>
-<p>
- Allow a dynamic zone to transition from secure to
- insecure (i.e., signed to unsigned) by deleting all
- of the DNSKEY records. The default is <span class="command"><strong>no</strong></span>.
- If set to <span class="command"><strong>yes</strong></span>, and if the DNSKEY RRset
- at the zone apex is deleted, all RRSIG and NSEC records
- will be removed from the zone as well.
- </p>
-<p>
- If the zone uses NSEC3, then it is also necessary to
- delete the NSEC3PARAM RRset from the zone apex; this will
- cause the removal of all corresponding NSEC3 records.
- (It is expected that this requirement will be eliminated
- in a future release.)
- </p>
-<p>
- Note that if a zone has been configured with
- <span class="command"><strong>auto-dnssec maintain</strong></span> and the
- private keys remain accessible in the key repository,
- then the zone will be automatically signed again the
- next time <span class="command"><strong>named</strong></span> is started.
- </p>
-</dd>
-</dl></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="forwarding"></a>Forwarding</h4></div></div></div>
-<p>
- The forwarding facility can be used to create a large site-wide
- cache on a few servers, reducing traffic over links to external
- name servers. It can also be used to allow queries by servers that
- do not have direct access to the Internet, but wish to look up
- exterior
- names anyway. Forwarding occurs only on those queries for which
- the server is not authoritative and does not have the answer in
- its cache.
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><span class="command"><strong>forward</strong></span></span></dt>
-<dd><p>
- This option is only meaningful if the
- forwarders list is not empty. A value of <code class="varname">first</code>,
- the default, causes the server to query the forwarders
- first &#8212; and
- if that doesn't answer the question, the server will then
- look for
- the answer itself. If <code class="varname">only</code> is
- specified, the
- server will only query the forwarders.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>forwarders</strong></span></span></dt>
-<dd><p>
- Specifies the IP addresses to be used
- for forwarding. The default is the empty list (no
- forwarding).
- </p></dd>
-</dl></div>
-<p>
- Forwarding can also be configured on a per-domain basis, allowing
- for the global forwarding options to be overridden in a variety
- of ways. You can set particular domains to use different
- forwarders,
- or have a different <span class="command"><strong>forward only/first</strong></span> behavior,
- or not forward at all, see <a class="xref" href="Bv9ARM.ch06.html#zone_statement_grammar" title="zone Statement Grammar">the section called &#8220;<span class="command"><strong>zone</strong></span>
- Statement Grammar&#8221;</a>.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="dual_stack"></a>Dual-stack Servers</h4></div></div></div>
-<p>
- Dual-stack servers are used as servers of last resort to work
- around
- problems in reachability due the lack of support for either IPv4
- or IPv6
- on the host machine.
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><span class="command"><strong>dual-stack-servers</strong></span></span></dt>
-<dd><p>
- Specifies host names or addresses of machines with access to
- both IPv4 and IPv6 transports. If a hostname is used, the
- server must be able
- to resolve the name using only the transport it has. If the
- machine is dual
- stacked, then the <span class="command"><strong>dual-stack-servers</strong></span> have no effect unless
- access to a transport has been disabled on the command line
- (e.g. <span class="command"><strong>named -4</strong></span>).
- </p></dd>
-</dl></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="access_control"></a>Access Control</h4></div></div></div>
-<p>
- Access to the server can be restricted based on the IP address
- of the requesting system. See <a class="xref" href="Bv9ARM.ch06.html#address_match_lists" title="Address Match Lists">the section called &#8220;Address Match Lists&#8221;</a> for
- details on how to specify IP address lists.
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><span class="command"><strong>allow-notify</strong></span></span></dt>
-<dd><p>
- Specifies which hosts are allowed to
- notify this server, a slave, of zone changes in addition
- to the zone masters.
- <span class="command"><strong>allow-notify</strong></span> may also be
- specified in the
- <span class="command"><strong>zone</strong></span> statement, in which case
- it overrides the
- <span class="command"><strong>options allow-notify</strong></span>
- statement. It is only meaningful
- for a slave zone. If not specified, the default is to
- process notify messages
- only from a zone's master.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>allow-query</strong></span></span></dt>
-<dd>
-<p>
- Specifies which hosts are allowed to ask ordinary
- DNS questions. <span class="command"><strong>allow-query</strong></span> may
- also be specified in the <span class="command"><strong>zone</strong></span>
- statement, in which case it overrides the
- <span class="command"><strong>options allow-query</strong></span> statement.
- If not specified, the default is to allow queries
- from all hosts.
- </p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- <span class="command"><strong>allow-query-cache</strong></span> is now
- used to specify access to the cache.
- </p>
-</div>
-</dd>
-<dt><span class="term"><span class="command"><strong>allow-query-on</strong></span></span></dt>
-<dd>
-<p>
- Specifies which local addresses can accept ordinary
- DNS questions. This makes it possible, for instance,
- to allow queries on internal-facing interfaces but
- disallow them on external-facing ones, without
- necessarily knowing the internal network's addresses.
- </p>
-<p>
- Note that <span class="command"><strong>allow-query-on</strong></span> is only
- checked for queries that are permitted by
- <span class="command"><strong>allow-query</strong></span>. A query must be
- allowed by both ACLs, or it will be refused.
- </p>
-<p>
- <span class="command"><strong>allow-query-on</strong></span> may
- also be specified in the <span class="command"><strong>zone</strong></span>
- statement, in which case it overrides the
- <span class="command"><strong>options allow-query-on</strong></span> statement.
- </p>
-<p>
- If not specified, the default is to allow queries
- on all addresses.
- </p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- <span class="command"><strong>allow-query-cache</strong></span> is
- used to specify access to the cache.
- </p>
-</div>
-</dd>
-<dt><span class="term"><span class="command"><strong>allow-query-cache</strong></span></span></dt>
-<dd><p>
- Specifies which hosts are allowed to get answers
- from the cache. If <span class="command"><strong>allow-query-cache</strong></span>
- is not set then <span class="command"><strong>allow-recursion</strong></span>
- is used if set, otherwise <span class="command"><strong>allow-query</strong></span>
- is used if set unless <span class="command"><strong>recursion no;</strong></span> is
- set in which case <span class="command"><strong>none;</strong></span> is used,
- otherwise the default (<span class="command"><strong>localnets;</strong></span>
- <span class="command"><strong>localhost;</strong></span>) is used.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>allow-query-cache-on</strong></span></span></dt>
-<dd><p>
- Specifies which local addresses can give answers
- from the cache. If not specified, the default is
- to allow cache queries on any address,
- <span class="command"><strong>localnets</strong></span> and
- <span class="command"><strong>localhost</strong></span>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>allow-recursion</strong></span></span></dt>
-<dd><p>
- Specifies which hosts are allowed to make recursive
- queries through this server. If
- <span class="command"><strong>allow-recursion</strong></span> is not set
- then <span class="command"><strong>allow-query-cache</strong></span> is
- used if set, otherwise <span class="command"><strong>allow-query</strong></span>
- is used if set, otherwise the default
- (<span class="command"><strong>localnets;</strong></span>
- <span class="command"><strong>localhost;</strong></span>) is used.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>allow-recursion-on</strong></span></span></dt>
-<dd><p>
- Specifies which local addresses can accept recursive
- queries. If not specified, the default is to allow
- recursive queries on all addresses.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>allow-update</strong></span></span></dt>
-<dd><p>
- Specifies which hosts are allowed to
- submit Dynamic DNS updates for master zones. The default is
- to deny
- updates from all hosts. Note that allowing updates based
- on the requestor's IP address is insecure; see
- <a class="xref" href="Bv9ARM.ch07.html#dynamic_update_security" title="Dynamic Update Security">the section called &#8220;Dynamic Update Security&#8221;</a> for details.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>allow-update-forwarding</strong></span></span></dt>
-<dd>
-<p>
- Specifies which hosts are allowed to
- submit Dynamic DNS updates to slave zones to be forwarded to
- the
- master. The default is <strong class="userinput"><code>{ none; }</code></strong>,
- which
- means that no update forwarding will be performed. To
- enable
- update forwarding, specify
- <strong class="userinput"><code>allow-update-forwarding { any; };</code></strong>.
- Specifying values other than <strong class="userinput"><code>{ none; }</code></strong> or
- <strong class="userinput"><code>{ any; }</code></strong> is usually
- counterproductive, since
- the responsibility for update access control should rest
- with the
- master server, not the slaves.
- </p>
-<p>
- Note that enabling the update forwarding feature on a slave
- server
- may expose master servers relying on insecure IP address
- based
- access control to attacks; see <a class="xref" href="Bv9ARM.ch07.html#dynamic_update_security" title="Dynamic Update Security">the section called &#8220;Dynamic Update Security&#8221;</a>
- for more details.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>allow-v6-synthesis</strong></span></span></dt>
-<dd><p>
- This option was introduced for the smooth transition from
- AAAA
- to A6 and from "nibble labels" to binary labels.
- However, since both A6 and binary labels were then
- deprecated,
- this option was also deprecated.
- It is now ignored with some warning messages.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>allow-transfer</strong></span></span></dt>
-<dd><p>
- Specifies which hosts are allowed to
- receive zone transfers from the server. <span class="command"><strong>allow-transfer</strong></span> may
- also be specified in the <span class="command"><strong>zone</strong></span>
- statement, in which
- case it overrides the <span class="command"><strong>options allow-transfer</strong></span> statement.
- If not specified, the default is to allow transfers to all
- hosts.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>blackhole</strong></span></span></dt>
-<dd><p>
- Specifies a list of addresses that the
- server will not accept queries from or use to resolve a
- query. Queries
- from these addresses will not be responded to. The default
- is <strong class="userinput"><code>none</code></strong>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>filter-aaaa</strong></span></span></dt>
-<dd><p>
- Specifies a list of addresses to which
- <span class="command"><strong>filter-aaaa-on-v4</strong></span>
- is applies. The default is <strong class="userinput"><code>any</code></strong>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>keep-response-order</strong></span></span></dt>
-<dd><p>
- Specifies a list of addresses to which the server
- will send responses to TCP queries in the same order
- in which they were received. This disables the
- processing of TCP queries in parallel. The default
- is <strong class="userinput"><code>none</code></strong>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>no-case-compress</strong></span></span></dt>
-<dd>
-<p>
- Specifies a list of addresses which require responses
- to use case-insensitive compression. This ACL can be
- used when <span class="command"><strong>named</strong></span> needs to work with
- clients that do not comply with the requirement in RFC
- 1034 to use case-insensitive name comparisons when
- checking for matching domain names.
- </p>
-<p>
- If left undefined, the ACL defaults to
- <span class="command"><strong>none</strong></span>: case-insensitive compression
- will be used for all clients. If the ACL is defined and
- matches a client, then case will be ignored when
- compressing domain names in DNS responses sent to that
- client.
- </p>
-<p>
- This can result in slightly smaller responses: if
- a response contains the names "example.com" and
- "example.COM", case-insensitive compression would treat
- the second one as a duplicate. It also ensures
- that the case of the query name exactly matches the
- case of the owner names of returned records, rather
- than matching the case of the records entered in
- the zone file. This allows responses to exactly
- match the query, which is required by some clients
- due to incorrect use of case-sensitive comparisons.
- </p>
-<p>
- Case-insensitive compression is <span class="emphasis"><em>always</em></span>
- used in AXFR and IXFR responses, regardless of whether
- the client matches this ACL.
- </p>
-<p>
- There are circumstances in which <span class="command"><strong>named</strong></span>
- will not preserve the case of owner names of records:
- if a zone file defines records of different types with
- the same name, but the capitalization of the name is
- different (e.g., "www.example.com/A" and
- "WWW.EXAMPLE.COM/AAAA"), then all responses for that
- name will use the <span class="emphasis"><em>first</em></span> version
- of the name that was used in the zone file. This
- limitation may be addressed in a future release. However,
- domain names specified in the rdata of resource records
- (i.e., records of type NS, MX, CNAME, etc) will always
- have their case preserved unless the client matches this
- ACL.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>resolver-query-timeout</strong></span></span></dt>
-<dd><p>
- The amount of time in seconds that the resolver
- will spend attempting to resolve a recursive
- query before failing. The default and minimum
- is <code class="literal">10</code> and the maximum is
- <code class="literal">30</code>. Setting it to
- <code class="literal">0</code> will result in the default
- being used.
- </p></dd>
-</dl></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="interfaces"></a>Interfaces</h4></div></div></div>
-<p>
- The interfaces and ports that the server will answer queries
- from may be specified using the <span class="command"><strong>listen-on</strong></span> option. <span class="command"><strong>listen-on</strong></span> takes
- an optional port and an <code class="varname">address_match_list</code>
- of IPv4 addresses. (IPv6 addresses are ignored, with a
- logged warning.)
- The server will listen on all interfaces allowed by the address
- match list. If a port is not specified, port 53 will be used.
- </p>
-<p>
- Multiple <span class="command"><strong>listen-on</strong></span> statements are
- allowed.
- For example,
- </p>
-<pre class="programlisting">listen-on { 5.6.7.8; };
-listen-on port 1234 { !1.2.3.4; 1.2/16; };
-</pre>
-<p>
- will enable the name server on port 53 for the IP address
- 5.6.7.8, and on port 1234 of an address on the machine in net
- 1.2 that is not 1.2.3.4.
- </p>
-<p>
- If no <span class="command"><strong>listen-on</strong></span> is specified, the
- server will listen on port 53 on all IPv4 interfaces.
- </p>
-<p>
- The <span class="command"><strong>listen-on-v6</strong></span> option is used to
- specify the interfaces and the ports on which the server will
- listen for incoming queries sent using IPv6. If not specified,
- the server will listen on port 53 on all IPv6 interfaces.
- </p>
-<p>
- When </p>
-<pre class="programlisting">{ any; }</pre>
-<p> is
- specified
- as the <code class="varname">address_match_list</code> for the
- <span class="command"><strong>listen-on-v6</strong></span> option,
- the server does not bind a separate socket to each IPv6 interface
- address as it does for IPv4 if the operating system has enough API
- support for IPv6 (specifically if it conforms to RFC 3493 and RFC
- 3542).
- Instead, it listens on the IPv6 wildcard address.
- If the system only has incomplete API support for IPv6, however,
- the behavior is the same as that for IPv4.
- </p>
-<p>
- A list of particular IPv6 addresses can also be specified, in
- which case
- the server listens on a separate socket for each specified
- address,
- regardless of whether the desired API is supported by the system.
- IPv4 addresses specified in <span class="command"><strong>listen-on-v6</strong></span>
- will be ignored, with a logged warning.
- </p>
-<p>
- Multiple <span class="command"><strong>listen-on-v6</strong></span> options can
- be used.
- For example,
- </p>
-<pre class="programlisting">listen-on-v6 { any; };
-listen-on-v6 port 1234 { !2001:db8::/32; any; };
-</pre>
-<p>
- will enable the name server on port 53 for any IPv6 addresses
- (with a single wildcard socket),
- and on port 1234 of IPv6 addresses that is not in the prefix
- 2001:db8::/32 (with separate sockets for each matched address.)
- </p>
-<p>
- To make the server not listen on any IPv6 address, use
- </p>
-<pre class="programlisting">listen-on-v6 { none; };
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="query_address"></a>Query Address</h4></div></div></div>
-<p>
- If the server doesn't know the answer to a question, it will
- query other name servers. <span class="command"><strong>query-source</strong></span> specifies
- the address and port used for such queries. For queries sent over
- IPv6, there is a separate <span class="command"><strong>query-source-v6</strong></span> option.
- If <span class="command"><strong>address</strong></span> is <span class="command"><strong>*</strong></span> (asterisk) or is omitted,
- a wildcard IP address (<span class="command"><strong>INADDR_ANY</strong></span>)
- will be used.
- </p>
-<p>
- If <span class="command"><strong>port</strong></span> is <span class="command"><strong>*</strong></span> or is omitted,
- a random port number from a pre-configured
- range is picked up and will be used for each query.
- The port range(s) is that specified in
- the <span class="command"><strong>use-v4-udp-ports</strong></span> (for IPv4)
- and <span class="command"><strong>use-v6-udp-ports</strong></span> (for IPv6)
- options, excluding the ranges specified in
- the <span class="command"><strong>avoid-v4-udp-ports</strong></span>
- and <span class="command"><strong>avoid-v6-udp-ports</strong></span> options, respectively.
- </p>
-<p>
- The defaults of the <span class="command"><strong>query-source</strong></span> and
- <span class="command"><strong>query-source-v6</strong></span> options
- are:
- </p>
-<pre class="programlisting">query-source address * port *;
-query-source-v6 address * port *;
-</pre>
-<p>
- If <span class="command"><strong>use-v4-udp-ports</strong></span> or
- <span class="command"><strong>use-v6-udp-ports</strong></span> is unspecified,
- <span class="command"><strong>named</strong></span> will check if the operating
- system provides a programming interface to retrieve the
- system's default range for ephemeral ports.
- If such an interface is available,
- <span class="command"><strong>named</strong></span> will use the corresponding system
- default range; otherwise, it will use its own defaults:
- </p>
-<pre class="programlisting">use-v4-udp-ports { range 1024 65535; };
-use-v6-udp-ports { range 1024 65535; };
-</pre>
-<p>
- Note: make sure the ranges be sufficiently large for
- security. A desirable size depends on various parameters,
- but we generally recommend it contain at least 16384 ports
- (14 bits of entropy).
- Note also that the system's default range when used may be
- too small for this purpose, and that the range may even be
- changed while <span class="command"><strong>named</strong></span> is running; the new
- range will automatically be applied when <span class="command"><strong>named</strong></span>
- is reloaded.
- It is encouraged to
- configure <span class="command"><strong>use-v4-udp-ports</strong></span> and
- <span class="command"><strong>use-v6-udp-ports</strong></span> explicitly so that the
- ranges are sufficiently large and are reasonably
- independent from the ranges used by other applications.
- </p>
-<p>
- Note: the operational configuration
- where <span class="command"><strong>named</strong></span> runs may prohibit the use
- of some ports. For example, UNIX systems will not allow
- <span class="command"><strong>named</strong></span> running without a root privilege
- to use ports less than 1024.
- If such ports are included in the specified (or detected)
- set of query ports, the corresponding query attempts will
- fail, resulting in resolution failures or delay.
- It is therefore important to configure the set of ports
- that can be safely used in the expected operational environment.
- </p>
-<p>
- The defaults of the <span class="command"><strong>avoid-v4-udp-ports</strong></span> and
- <span class="command"><strong>avoid-v6-udp-ports</strong></span> options
- are:
- </p>
-<pre class="programlisting">avoid-v4-udp-ports {};
-avoid-v6-udp-ports {};
-</pre>
-<p>
- Note: BIND 9.5.0 introduced
- the <span class="command"><strong>use-queryport-pool</strong></span>
- option to support a pool of such random ports, but this
- option is now obsolete because reusing the same ports in
- the pool may not be sufficiently secure.
- For the same reason, it is generally strongly discouraged to
- specify a particular port for the
- <span class="command"><strong>query-source</strong></span> or
- <span class="command"><strong>query-source-v6</strong></span> options;
- it implicitly disables the use of randomized port numbers.
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><span class="command"><strong>use-queryport-pool</strong></span></span></dt>
-<dd><p>
- This option is obsolete.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>queryport-pool-ports</strong></span></span></dt>
-<dd><p>
- This option is obsolete.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>queryport-pool-updateinterval</strong></span></span></dt>
-<dd><p>
- This option is obsolete.
- </p></dd>
-</dl></div>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- The address specified in the <span class="command"><strong>query-source</strong></span> option
- is used for both UDP and TCP queries, but the port applies only
- to UDP queries. TCP queries always use a random
- unprivileged port.
- </p>
-</div>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- Solaris 2.5.1 and earlier does not support setting the source
- address for TCP sockets.
- </p>
-</div>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- See also <span class="command"><strong>transfer-source</strong></span> and
- <span class="command"><strong>notify-source</strong></span>.
- </p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="zone_transfers"></a>Zone Transfers</h4></div></div></div>
-<p>
- <acronym class="acronym">BIND</acronym> has mechanisms in place to
- facilitate zone transfers
- and set limits on the amount of load that transfers place on the
- system. The following options apply to zone transfers.
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><span class="command"><strong>also-notify</strong></span></span></dt>
-<dd>
-<p>
- Defines a global list of IP addresses of name servers
- that are also sent NOTIFY messages whenever a fresh copy of
- the
- zone is loaded, in addition to the servers listed in the
- zone's NS records.
- This helps to ensure that copies of the zones will
- quickly converge on stealth servers.
- Optionally, a port may be specified with each
- <span class="command"><strong>also-notify</strong></span> address to send
- the notify messages to a port other than the
- default of 53.
- An optional TSIG key can also be specified with each
- address to cause the notify messages to be signed; this
- can be useful when sending notifies to multiple views.
- In place of explicit addresses, one or more named
- <span class="command"><strong>masters</strong></span> lists can be used.
- </p>
-<p>
- If an <span class="command"><strong>also-notify</strong></span> list
- is given in a <span class="command"><strong>zone</strong></span> statement,
- it will override
- the <span class="command"><strong>options also-notify</strong></span>
- statement. When a <span class="command"><strong>zone notify</strong></span>
- statement
- is set to <span class="command"><strong>no</strong></span>, the IP
- addresses in the global <span class="command"><strong>also-notify</strong></span> list will
- not be sent NOTIFY messages for that zone. The default is
- the empty
- list (no global notification list).
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>max-transfer-time-in</strong></span></span></dt>
-<dd><p>
- Inbound zone transfers running longer than
- this many minutes will be terminated. The default is 120
- minutes
- (2 hours). The maximum value is 28 days (40320 minutes).
- </p></dd>
-<dt><span class="term"><span class="command"><strong>max-transfer-idle-in</strong></span></span></dt>
-<dd><p>
- Inbound zone transfers making no progress
- in this many minutes will be terminated. The default is 60
- minutes
- (1 hour). The maximum value is 28 days (40320 minutes).
- </p></dd>
-<dt><span class="term"><span class="command"><strong>max-transfer-time-out</strong></span></span></dt>
-<dd><p>
- Outbound zone transfers running longer than
- this many minutes will be terminated. The default is 120
- minutes
- (2 hours). The maximum value is 28 days (40320 minutes).
- </p></dd>
-<dt><span class="term"><span class="command"><strong>max-transfer-idle-out</strong></span></span></dt>
-<dd><p>
- Outbound zone transfers making no progress
- in this many minutes will be terminated. The default is 60
- minutes (1
- hour). The maximum value is 28 days (40320 minutes).
- </p></dd>
-<dt><span class="term"><span class="command"><strong>notify-rate</strong></span></span></dt>
-<dd><p>
- The rate at which NOTIFY requests will be sent
- during normal zone maintenance operations. (NOTIFY
- requests due to initial zone loading are subject
- to a separate rate limit; see below.) The default is
- 20 per second.
- The lowest possible rate is one per second; when set
- to zero, it will be silently raised to one.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>startup-notify-rate</strong></span></span></dt>
-<dd><p>
- The rate at which NOTIFY requests will be sent
- when the name server is first starting up, or when
- zones have been newly added to the nameserver.
- The default is 20 per second.
- The lowest possible rate is one per second; when set
- to zero, it will be silently raised to one.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>serial-query-rate</strong></span></span></dt>
-<dd><p>
- Slave servers will periodically query master
- servers to find out if zone serial numbers have
- changed. Each such query uses a minute amount of
- the slave server's network bandwidth. To limit
- the amount of bandwidth used, BIND 9 limits the
- rate at which queries are sent. The value of the
- <span class="command"><strong>serial-query-rate</strong></span> option, an
- integer, is the maximum number of queries sent
- per second. The default is 20 per second.
- The lowest possible rate is one per second; when set
- to zero, it will be silently raised to one.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>serial-queries</strong></span></span></dt>
-<dd><p>
- In BIND 8, the <span class="command"><strong>serial-queries</strong></span>
- option
- set the maximum number of concurrent serial number queries
- allowed to be outstanding at any given time.
- BIND 9 does not limit the number of outstanding
- serial queries and ignores the <span class="command"><strong>serial-queries</strong></span> option.
- Instead, it limits the rate at which the queries are sent
- as defined using the <span class="command"><strong>serial-query-rate</strong></span> option.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>transfer-format</strong></span></span></dt>
-<dd><p>
- Zone transfers can be sent using two different formats,
- <span class="command"><strong>one-answer</strong></span> and
- <span class="command"><strong>many-answers</strong></span>.
- The <span class="command"><strong>transfer-format</strong></span> option is used
- on the master server to determine which format it sends.
- <span class="command"><strong>one-answer</strong></span> uses one DNS message per
- resource record transferred.
- <span class="command"><strong>many-answers</strong></span> packs as many resource
- records as possible into a message.
- <span class="command"><strong>many-answers</strong></span> is more efficient, but is
- only supported by relatively new slave servers,
- such as <acronym class="acronym">BIND</acronym> 9, <acronym class="acronym">BIND</acronym>
- 8.x and <acronym class="acronym">BIND</acronym> 4.9.5 onwards.
- The <span class="command"><strong>many-answers</strong></span> format is also supported by
- recent Microsoft Windows nameservers.
- The default is <span class="command"><strong>many-answers</strong></span>.
- <span class="command"><strong>transfer-format</strong></span> may be overridden on a
- per-server basis by using the <span class="command"><strong>server</strong></span>
- statement.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>transfer-message-size</strong></span></span></dt>
-<dd>
-<p>
- This is an upper bound on the uncompressed size of DNS
- messages used in zone transfers over TCP. If a message
- grows larger than this size, additional messages will be
- used to complete the zone transfer. (Note, however,
- that this is a hint, not a hard limit; if a message
- contains a single resource record whose RDATA does not
- fit within the size limit, a larger message will be
- permitted so the record can be transferred.)
- </p>
-<p>
- Valid values are between 512 and 65535 octets, and any
- values outside that range will be adjusted to the nearest
- value within it. The default is <code class="literal">20480</code>,
- which was selected to improve message compression:
- most DNS messages of this size will compress to less
- than 16536 bytes. Larger messages cannot be compressed
- as effectively, because 16536 is the largest permissible
- compression offset pointer in a DNS message.
- </p>
-<p>
- This option is mainly intended for server testing;
- there is rarely any benefit in setting a value other
- than the default.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>transfers-in</strong></span></span></dt>
-<dd><p>
- The maximum number of inbound zone transfers
- that can be running concurrently. The default value is <code class="literal">10</code>.
- Increasing <span class="command"><strong>transfers-in</strong></span> may
- speed up the convergence
- of slave zones, but it also may increase the load on the
- local system.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>transfers-out</strong></span></span></dt>
-<dd><p>
- The maximum number of outbound zone transfers
- that can be running concurrently. Zone transfer requests in
- excess
- of the limit will be refused. The default value is <code class="literal">10</code>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>transfers-per-ns</strong></span></span></dt>
-<dd><p>
- The maximum number of inbound zone transfers
- that can be concurrently transferring from a given remote
- name server.
- The default value is <code class="literal">2</code>.
- Increasing <span class="command"><strong>transfers-per-ns</strong></span>
- may
- speed up the convergence of slave zones, but it also may
- increase
- the load on the remote name server. <span class="command"><strong>transfers-per-ns</strong></span> may
- be overridden on a per-server basis by using the <span class="command"><strong>transfers</strong></span> phrase
- of the <span class="command"><strong>server</strong></span> statement.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>transfer-source</strong></span></span></dt>
-<dd>
-<p><span class="command"><strong>transfer-source</strong></span>
- determines which local address will be bound to IPv4
- TCP connections used to fetch zones transferred
- inbound by the server. It also determines the
- source IPv4 address, and optionally the UDP port,
- used for the refresh queries and forwarded dynamic
- updates. If not set, it defaults to a system
- controlled value which will usually be the address
- of the interface "closest to" the remote end. This
- address must appear in the remote end's
- <span class="command"><strong>allow-transfer</strong></span> option for the
- zone being transferred, if one is specified. This
- statement sets the
- <span class="command"><strong>transfer-source</strong></span> for all zones,
- but can be overridden on a per-view or per-zone
- basis by including a
- <span class="command"><strong>transfer-source</strong></span> statement within
- the <span class="command"><strong>view</strong></span> or
- <span class="command"><strong>zone</strong></span> block in the configuration
- file.
- </p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- Solaris 2.5.1 and earlier does not support setting the
- source address for TCP sockets.
- </p>
-</div>
-</dd>
-<dt><span class="term"><span class="command"><strong>transfer-source-v6</strong></span></span></dt>
-<dd><p>
- The same as <span class="command"><strong>transfer-source</strong></span>,
- except zone transfers are performed using IPv6.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>alt-transfer-source</strong></span></span></dt>
-<dd>
-<p>
- An alternate transfer source if the one listed in
- <span class="command"><strong>transfer-source</strong></span> fails and
- <span class="command"><strong>use-alt-transfer-source</strong></span> is
- set.
- </p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- If you do not wish the alternate transfer source
- to be used, you should set
- <span class="command"><strong>use-alt-transfer-source</strong></span>
- appropriately and you should not depend upon
- getting an answer back to the first refresh
- query.
- </p>
-</div>
-</dd>
-<dt><span class="term"><span class="command"><strong>alt-transfer-source-v6</strong></span></span></dt>
-<dd><p>
- An alternate transfer source if the one listed in
- <span class="command"><strong>transfer-source-v6</strong></span> fails and
- <span class="command"><strong>use-alt-transfer-source</strong></span> is
- set.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>use-alt-transfer-source</strong></span></span></dt>
-<dd><p>
- Use the alternate transfer sources or not. If views are
- specified this defaults to <span class="command"><strong>no</strong></span>
- otherwise it defaults to
- <span class="command"><strong>yes</strong></span> (for BIND 8
- compatibility).
- </p></dd>
-<dt><span class="term"><span class="command"><strong>notify-source</strong></span></span></dt>
-<dd>
-<p><span class="command"><strong>notify-source</strong></span>
- determines which local source address, and
- optionally UDP port, will be used to send NOTIFY
- messages. This address must appear in the slave
- server's <span class="command"><strong>masters</strong></span> zone clause or
- in an <span class="command"><strong>allow-notify</strong></span> clause. This
- statement sets the <span class="command"><strong>notify-source</strong></span>
- for all zones, but can be overridden on a per-zone or
- per-view basis by including a
- <span class="command"><strong>notify-source</strong></span> statement within
- the <span class="command"><strong>zone</strong></span> or
- <span class="command"><strong>view</strong></span> block in the configuration
- file.
- </p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- Solaris 2.5.1 and earlier does not support setting the
- source address for TCP sockets.
- </p>
-</div>
-</dd>
-<dt><span class="term"><span class="command"><strong>notify-source-v6</strong></span></span></dt>
-<dd><p>
- Like <span class="command"><strong>notify-source</strong></span>,
- but applies to notify messages sent to IPv6 addresses.
- </p></dd>
-</dl></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="port_lists"></a>UDP Port Lists</h4></div></div></div>
-<p>
- <span class="command"><strong>use-v4-udp-ports</strong></span>,
- <span class="command"><strong>avoid-v4-udp-ports</strong></span>,
- <span class="command"><strong>use-v6-udp-ports</strong></span>, and
- <span class="command"><strong>avoid-v6-udp-ports</strong></span>
- specify a list of IPv4 and IPv6 UDP ports that will be
- used or not used as source ports for UDP messages.
- See <a class="xref" href="Bv9ARM.ch06.html#query_address" title="Query Address">the section called &#8220;Query Address&#8221;</a> about how the
- available ports are determined.
- For example, with the following configuration
- </p>
-<pre class="programlisting">
-use-v6-udp-ports { range 32768 65535; };
-avoid-v6-udp-ports { 40000; range 50000 60000; };
-</pre>
-<p>
- UDP ports of IPv6 messages sent
- from <span class="command"><strong>named</strong></span> will be in one
- of the following ranges: 32768 to 39999, 40001 to 49999,
- and 60001 to 65535.
- </p>
-<p>
- <span class="command"><strong>avoid-v4-udp-ports</strong></span> and
- <span class="command"><strong>avoid-v6-udp-ports</strong></span> can be used
- to prevent <span class="command"><strong>named</strong></span> from choosing as its random source port a
- port that is blocked by your firewall or a port that is
- used by other applications;
- if a query went out with a source port blocked by a
- firewall, the
- answer would not get by the firewall and the name server would
- have to query again.
- Note: the desired range can also be represented only with
- <span class="command"><strong>use-v4-udp-ports</strong></span> and
- <span class="command"><strong>use-v6-udp-ports</strong></span>, and the
- <span class="command"><strong>avoid-</strong></span> options are redundant in that
- sense; they are provided for backward compatibility and
- to possibly simplify the port specification.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="resource_limits"></a>Operating System Resource Limits</h4></div></div></div>
-<p>
- The server's usage of many system resources can be limited.
- Scaled values are allowed when specifying resource limits. For
- example, <span class="command"><strong>1G</strong></span> can be used instead of
- <span class="command"><strong>1073741824</strong></span> to specify a limit of
- one
- gigabyte. <span class="command"><strong>unlimited</strong></span> requests
- unlimited use, or the
- maximum available amount. <span class="command"><strong>default</strong></span>
- uses the limit
- that was in force when the server was started. See the description
- of <span class="command"><strong>size_spec</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#configuration_file_elements" title="Configuration File Elements">the section called &#8220;Configuration File Elements&#8221;</a>.
- </p>
-<p>
- The following options set operating system resource limits for
- the name server process. Some operating systems don't support
- some or
- any of the limits. On such systems, a warning will be issued if
- the
- unsupported limit is used.
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><span class="command"><strong>coresize</strong></span></span></dt>
-<dd><p>
- The maximum size of a core dump. The default
- is <code class="literal">default</code>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>datasize</strong></span></span></dt>
-<dd><p>
- The maximum amount of data memory the server
- may use. The default is <code class="literal">default</code>.
- This is a hard limit on server memory usage.
- If the server attempts to allocate memory in excess of this
- limit, the allocation will fail, which may in turn leave
- the server unable to perform DNS service. Therefore,
- this option is rarely useful as a way of limiting the
- amount of memory used by the server, but it can be used
- to raise an operating system data size limit that is
- too small by default. If you wish to limit the amount
- of memory used by the server, use the
- <span class="command"><strong>max-cache-size</strong></span> and
- <span class="command"><strong>recursive-clients</strong></span>
- options instead.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>files</strong></span></span></dt>
-<dd><p>
- The maximum number of files the server
- may have open concurrently. The default is <code class="literal">unlimited</code>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>stacksize</strong></span></span></dt>
-<dd><p>
- The maximum amount of stack memory the server
- may use. The default is <code class="literal">default</code>.
- </p></dd>
-</dl></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="server_resource_limits"></a>Server Resource Limits</h4></div></div></div>
-<p>
- The following options set limits on the server's
- resource consumption that are enforced internally by the
- server rather than the operating system.
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><span class="command"><strong>max-ixfr-log-size</strong></span></span></dt>
-<dd><p>
- This option is obsolete; it is accepted
- and ignored for BIND 8 compatibility. The option
- <span class="command"><strong>max-journal-size</strong></span> performs a
- similar function in BIND 9.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>max-journal-size</strong></span></span></dt>
-<dd><p>
- Sets a maximum size for each journal file
- (see <a class="xref" href="Bv9ARM.ch04.html#journal" title="The journal file">the section called &#8220;The journal file&#8221;</a>). When the journal file
- approaches
- the specified size, some of the oldest transactions in the
- journal
- will be automatically removed. The largest permitted
- value is 2 gigabytes. The default is
- <code class="literal">unlimited</code>, which also
- means 2 gigabytes.
- This may also be set on a per-zone basis.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>host-statistics-max</strong></span></span></dt>
-<dd><p>
- In BIND 8, specifies the maximum number of host statistics
- entries to be kept.
- Not implemented in BIND 9.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>recursive-clients</strong></span></span></dt>
-<dd>
-<p>
- The maximum number ("hard quota") of simultaneous
- recursive lookups the server will perform on behalf
- of clients. The default is
- <code class="literal">1000</code>. Because each recursing
- client uses a fair
- bit of memory (on the order of 20 kilobytes), the
- value of the
- <span class="command"><strong>recursive-clients</strong></span> option may
- have to be decreased on hosts with limited memory.
- </p>
-<p>
- <code class="option">recursive-clients</code> defines a "hard
- quota" limit for pending recursive clients: when more
- clients than this are pending, new incoming requests
- will not be accepted, and for each incoming request
- a previous pending request will also be dropped.
- </p>
-<p>
- A "soft quota" is also set. When this lower
- quota is exceeded, incoming requests are accepted, but
- for each one, a pending request will be dropped.
- If <code class="option">recursive-clients</code> is greater than
- 1000, the soft quota is set to
- <code class="option">recursive-clients</code> minus 100;
- otherwise it is set to 90% of
- <code class="option">recursive-clients</code>.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>tcp-clients</strong></span></span></dt>
-<dd><p>
- The maximum number of simultaneous client TCP
- connections that the server will accept.
- The default is <code class="literal">150</code>.
- </p></dd>
-<dt>
-<a name="clients-per-query"></a><span class="term"><a name="cpq_term"></a><span class="command"><strong>clients-per-query</strong></span>, </span><span class="term"><span class="command"><strong>max-clients-per-query</strong></span></span>
-</dt>
-<dd>
-<p>These set the
- initial value (minimum) and maximum number of recursive
- simultaneous clients for any given query
- (&lt;qname,qtype,qclass&gt;) that the server will accept
- before dropping additional clients. <span class="command"><strong>named</strong></span> will attempt to
- self tune this value and changes will be logged. The
- default values are 10 and 100.
- </p>
-<p>
- This value should reflect how many queries come in for
- a given name in the time it takes to resolve that name.
- If the number of queries exceed this value, <span class="command"><strong>named</strong></span> will
- assume that it is dealing with a non-responsive zone
- and will drop additional queries. If it gets a response
- after dropping queries, it will raise the estimate. The
- estimate will then be lowered in 20 minutes if it has
- remained unchanged.
- </p>
-<p>
- If <span class="command"><strong>clients-per-query</strong></span> is set to zero,
- then there is no limit on the number of clients per query
- and no queries will be dropped.
- </p>
-<p>
- If <span class="command"><strong>max-clients-per-query</strong></span> is set to zero,
- then there is no upper bound other than imposed by
- <span class="command"><strong>recursive-clients</strong></span>.
- </p>
-</dd>
-<dt>
-<a name="fetches-per-zone"></a><span class="term"><span class="command"><strong>fetches-per-zone</strong></span></span>
-</dt>
-<dd>
-<p>
- The maximum number of simultaneous iterative
- queries to any one domain that the server will
- permit before blocking new queries for data
- in or beneath that zone.
- This value should reflect how many fetches would
- normally be sent to any one zone in the time it
- would take to resolve them. It should be smaller
- than <code class="option">recursive-clients</code>.
- </p>
-<p>
- When many clients simultaneously query for the
- same name and type, the clients will all be attached
- to the same fetch, up to the
- <code class="option">max-clients-per-query</code> limit,
- and only one iterative query will be sent.
- However, when clients are simultaneously
- querying for <span class="emphasis"><em>different</em></span> names
- or types, multiple queries will be sent and
- <code class="option">max-clients-per-query</code> is not
- effective as a limit.
- </p>
-<p>
- Optionally, this value may be followed by the keyword
- <code class="literal">drop</code> or <code class="literal">fail</code>,
- indicating whether queries which exceed the fetch
- quota for a zone will be dropped with no response,
- or answered with SERVFAIL. The default is
- <code class="literal">drop</code>.
- </p>
-<p>
- If <span class="command"><strong>fetches-per-zone</strong></span> is set to zero,
- then there is no limit on the number of fetches per query
- and no queries will be dropped. The default is zero.
- </p>
-<p>
- The current list of active fetches can be dumped by
- running <span class="command"><strong>rndc recursing</strong></span>. The list
- includes the number of active fetches for each
- domain and the number of queries that have been
- passed or dropped as a result of the
- <code class="option">fetches-per-zone</code> limit. (Note:
- these counters are not cumulative over time; whenever
- the number of active fetches for a domain drops to
- zero, the counter for that domain is deleted, and the
- next time a fetch is sent to that domain, it is
- recreated with the counters set to zero.)
- </p>
-</dd>
-<dt>
-<a name="fetches-per-server"></a><span class="term"><span class="command"><strong>fetches-per-server</strong></span></span>
-</dt>
-<dd>
-<p>
- The maximum number of simultaneous iterative
- queries that the server will allow to be sent to
- a single upstream name server before blocking
- additional queries.
- This value should reflect how many fetches would
- normally be sent to any one server in the time it
- would take to resolve them. It should be smaller
- than <code class="option">recursive-clients</code>.
- </p>
-<p>
- Optionally, this value may be followed by the keyword
- <code class="literal">drop</code> or <code class="literal">fail</code>,
- indicating whether queries will be dropped with no
- response, or answered with SERVFAIL, when all of the
- servers authoritative for a zone are found to have
- exceeded the per-server quota. The default is
- <code class="literal">fail</code>.
- </p>
-<p>
- If <span class="command"><strong>fetches-per-server</strong></span> is set to zero,
- then there is no limit on the number of fetches per query
- and no queries will be dropped. The default is zero.
- </p>
-<p>
- The <span class="command"><strong>fetches-per-server</strong></span> quota is
- dynamically adjusted in response to detected
- congestion. As queries are sent to a server
- and are either answered or time out, an
- exponentially weighted moving average is calculated
- of the ratio of timeouts to responses. If the
- current average timeout ratio rises above a "high"
- threshold, then <span class="command"><strong>fetches-per-server</strong></span>
- is reduced for that server. If the timeout ratio
- drops below a "low" threshold, then
- <span class="command"><strong>fetches-per-server</strong></span> is increased.
- The <span class="command"><strong>fetch-quota-params</strong></span> options
- can be used to adjust the parameters for this
- calculation.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>fetch-quota-params</strong></span></span></dt>
-<dd>
-<p>
- Sets the parameters to use for dynamic resizing of
- the <code class="option">fetches-per-server</code> quota in
- response to detected congestion.
- </p>
-<p>
- The first argument is an integer value indicating
- how frequently to recalculate the moving average
- of the ratio of timeouts to responses for each
- server. The default is 100, meaning we recalculate
- the average ratio after every 100 queries have either
- been answered or timed out.
- </p>
-<p>
- The remaining three arguments represent the "low"
- threshold (defaulting to a timeout ratio of 0.1),
- the "high" threshold (defaulting to a timeout
- ratio of 0.3), and the discount rate for
- the moving average (defaulting to 0.7).
- A higher discount rate causes recent events to
- weigh more heavily when calculating the moving
- average; a lower discount rate causes past
- events to weigh more heavily, smoothing out
- short-term blips in the timeout ratio.
- These arguments are all fixed-point numbers with
- precision of 1/100: at most two places after
- the decimal point are significant.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>reserved-sockets</strong></span></span></dt>
-<dd>
-<p>
- The number of file descriptors reserved for TCP, stdio,
- etc. This needs to be big enough to cover the number of
- interfaces <span class="command"><strong>named</strong></span> listens on, <span class="command"><strong>tcp-clients</strong></span> as well as
- to provide room for outgoing TCP queries and incoming zone
- transfers. The default is <code class="literal">512</code>.
- The minimum value is <code class="literal">128</code> and the
- maximum value is <code class="literal">128</code> less than
- maxsockets (-S). This option may be removed in the future.
- </p>
-<p>
- This option has little effect on Windows.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>max-cache-size</strong></span></span></dt>
-<dd><p>
- The maximum amount of memory to use for the
- server's cache, in bytes or % of total physical memory.
- When the amount of data in the cache
- reaches this limit, the server will cause records to
- expire prematurely based on an LRU based strategy so
- that the limit is not exceeded.
- The keyword <strong class="userinput"><code>unlimited</code></strong>,
- or the value 0, will place no limit on cache size;
- records will be purged from the cache only when their
- TTLs expire.
- Any positive values less than 2MB will be ignored
- and reset to 2MB.
- In a server with multiple views, the limit applies
- separately to the cache of each view.
- The default is <strong class="userinput"><code>90%</code></strong>.
- On systems where detection of amount of physical
- memory is not supported values represented as %
- fall back to unlimited.
- Note that the detection of physical memory is done only
- once at startup, so <span class="command"><strong>named</strong></span> will not
- adjust the cache size if the amount of physical memory
- is changed during runtime.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>tcp-listen-queue</strong></span></span></dt>
-<dd><p>
- The listen queue depth. The default and minimum is 10.
- If the kernel supports the accept filter "dataready" this
- also controls how
- many TCP connections that will be queued in kernel space
- waiting for
- some data before being passed to accept. Nonzero values
- less than 10 will be silently raised. A value of 0 may also
- be used; on most platforms this sets the listen queue
- length to a system-defined default value.
- </p></dd>
-</dl></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="intervals"></a>Periodic Task Intervals</h4></div></div></div>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><span class="command"><strong>cleaning-interval</strong></span></span></dt>
-<dd><p>
- This interval is effectively obsolete. Previously,
- the server would remove expired resource records
- from the cache every <span class="command"><strong>cleaning-interval</strong></span> minutes.
- <acronym class="acronym">BIND</acronym> 9 now manages cache
- memory in a more sophisticated manner and does not
- rely on the periodic cleaning any more.
- Specifying this option therefore has no effect on
- the server's behavior.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>heartbeat-interval</strong></span></span></dt>
-<dd><p>
- The server will perform zone maintenance tasks
- for all zones marked as <span class="command"><strong>dialup</strong></span> whenever this
- interval expires. The default is 60 minutes. Reasonable
- values are up
- to 1 day (1440 minutes). The maximum value is 28 days
- (40320 minutes).
- If set to 0, no zone maintenance for these zones will occur.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>interface-interval</strong></span></span></dt>
-<dd><p>
- The server will scan the network interface list
- every <span class="command"><strong>interface-interval</strong></span>
- minutes. The default
- is 60 minutes. The maximum value is 28 days (40320 minutes).
- If set to 0, interface scanning will only occur when
- the configuration file is loaded. After the scan, the
- server will
- begin listening for queries on any newly discovered
- interfaces (provided they are allowed by the
- <span class="command"><strong>listen-on</strong></span> configuration), and
- will
- stop listening on interfaces that have gone away.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>statistics-interval</strong></span></span></dt>
-<dd>
-<p>
- Name server statistics will be logged
- every <span class="command"><strong>statistics-interval</strong></span>
- minutes. The default is
- 60. The maximum value is 28 days (40320 minutes).
- If set to 0, no statistics will be logged.
- </p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- Not yet implemented in
- <acronym class="acronym">BIND</acronym> 9.
- </p>
-</div>
-</dd>
-</dl></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="topology"></a>Topology</h4></div></div></div>
-<p>
- All other things being equal, when the server chooses a name
- server
- to query from a list of name servers, it prefers the one that is
- topologically closest to itself. The <span class="command"><strong>topology</strong></span> statement
- takes an <span class="command"><strong>address_match_list</strong></span> and
- interprets it
- in a special way. Each top-level list element is assigned a
- distance.
- Non-negated elements get a distance based on their position in the
- list, where the closer the match is to the start of the list, the
- shorter the distance is between it and the server. A negated match
- will be assigned the maximum distance from the server. If there
- is no match, the address will get a distance which is further than
- any non-negated list element, and closer than any negated element.
- For example,
- </p>
-<pre class="programlisting">topology {
- 10/8;
- !1.2.3/24;
- { 1.2/16; 3/8; };
-};</pre>
-<p>
- will prefer servers on network 10 the most, followed by hosts
- on network 1.2.0.0 (netmask 255.255.0.0) and network 3, with the
- exception of hosts on network 1.2.3 (netmask 255.255.255.0), which
- is preferred least of all.
- </p>
-<p>
- The default topology is
- </p>
-<pre class="programlisting"> topology { localhost; localnets; };
-</pre>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- The <span class="command"><strong>topology</strong></span> option
- is not implemented in <acronym class="acronym">BIND</acronym> 9.
- </p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="the_sortlist_statement"></a>The <span class="command"><strong>sortlist</strong></span> Statement</h4></div></div></div>
-<p>
- The response to a DNS query may consist of multiple resource
- records (RRs) forming a resource records set (RRset).
- The name server will normally return the
- RRs within the RRset in an indeterminate order
- (but see the <span class="command"><strong>rrset-order</strong></span>
- statement in <a class="xref" href="Bv9ARM.ch06.html#rrset_ordering" title="RRset Ordering">the section called &#8220;RRset Ordering&#8221;</a>).
- The client resolver code should rearrange the RRs as appropriate,
- that is, using any addresses on the local net in preference to
- other addresses.
- However, not all resolvers can do this or are correctly
- configured.
- When a client is using a local server, the sorting can be performed
- in the server, based on the client's address. This only requires
- configuring the name servers, not all the clients.
- </p>
-<p>
- The <span class="command"><strong>sortlist</strong></span> statement (see below)
- takes
- an <span class="command"><strong>address_match_list</strong></span> and
- interprets it even
- more specifically than the <span class="command"><strong>topology</strong></span>
- statement
- does (<a class="xref" href="Bv9ARM.ch06.html#topology" title="Topology">the section called &#8220;Topology&#8221;</a>).
- Each top level statement in the <span class="command"><strong>sortlist</strong></span> must
- itself be an explicit <span class="command"><strong>address_match_list</strong></span> with
- one or two elements. The first element (which may be an IP
- address,
- an IP prefix, an ACL name or a nested <span class="command"><strong>address_match_list</strong></span>)
- of each top level list is checked against the source address of
- the query until a match is found.
- </p>
-<p>
- Once the source address of the query has been matched, if
- the top level statement contains only one element, the actual
- primitive
- element that matched the source address is used to select the
- address
- in the response to move to the beginning of the response. If the
- statement is a list of two elements, then the second element is
- treated the same as the <span class="command"><strong>address_match_list</strong></span> in
- a <span class="command"><strong>topology</strong></span> statement. Each top
- level element
- is assigned a distance and the address in the response with the
- minimum
- distance is moved to the beginning of the response.
- </p>
-<p>
- In the following example, any queries received from any of
- the addresses of the host itself will get responses preferring
- addresses
- on any of the locally connected networks. Next most preferred are
- addresses
- on the 192.168.1/24 network, and after that either the
- 192.168.2/24
- or
- 192.168.3/24 network with no preference shown between these two
- networks. Queries received from a host on the 192.168.1/24 network
- will prefer other addresses on that network to the 192.168.2/24
- and
- 192.168.3/24 networks. Queries received from a host on the
- 192.168.4/24
- or the 192.168.5/24 network will only prefer other addresses on
- their directly connected networks.
- </p>
-<pre class="programlisting">sortlist {
- // IF the local host
- // THEN first fit on the following nets
- { localhost;
- { localnets;
- 192.168.1/24;
- { 192.168.2/24; 192.168.3/24; }; }; };
- // IF on class C 192.168.1 THEN use .1, or .2 or .3
- { 192.168.1/24;
- { 192.168.1/24;
- { 192.168.2/24; 192.168.3/24; }; }; };
- // IF on class C 192.168.2 THEN use .2, or .1 or .3
- { 192.168.2/24;
- { 192.168.2/24;
- { 192.168.1/24; 192.168.3/24; }; }; };
- // IF on class C 192.168.3 THEN use .3, or .1 or .2
- { 192.168.3/24;
- { 192.168.3/24;
- { 192.168.1/24; 192.168.2/24; }; }; };
- // IF .4 or .5 THEN prefer that net
- { { 192.168.4/24; 192.168.5/24; };
- };
-};</pre>
-<p>
- The following example will give reasonable behavior for the
- local host and hosts on directly connected networks. It is similar
- to the behavior of the address sort in <acronym class="acronym">BIND</acronym> 4.9.x. Responses sent
- to queries from the local host will favor any of the directly
- connected
- networks. Responses sent to queries from any other hosts on a
- directly
- connected network will prefer addresses on that same network.
- Responses
- to other queries will not be sorted.
- </p>
-<pre class="programlisting">sortlist {
- { localhost; localnets; };
- { localnets; };
-};
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="rrset_ordering"></a>RRset Ordering</h4></div></div></div>
-<p>
- When multiple records are returned in an answer it may be
- useful to configure the order of the records placed into the
- response.
- The <span class="command"><strong>rrset-order</strong></span> statement permits
- configuration
- of the ordering of the records in a multiple record response.
- See also the <span class="command"><strong>sortlist</strong></span> statement,
- <a class="xref" href="Bv9ARM.ch06.html#the_sortlist_statement" title="The sortlist Statement">the section called &#8220;The <span class="command"><strong>sortlist</strong></span> Statement&#8221;</a>.
- </p>
-<p>
- An <span class="command"><strong>order_spec</strong></span> is defined as
- follows:
- </p>
-<p>
- [<span class="optional">class <em class="replaceable"><code>class_name</code></em></span>]
- [<span class="optional">type <em class="replaceable"><code>type_name</code></em></span>]
- [<span class="optional">name <em class="replaceable"><code>"domain_name"</code></em></span>]
- order <em class="replaceable"><code>ordering</code></em>
- </p>
-<p>
- If no class is specified, the default is <span class="command"><strong>ANY</strong></span>.
- If no type is specified, the default is <span class="command"><strong>ANY</strong></span>.
- If no name is specified, the default is "<span class="command"><strong>*</strong></span>" (asterisk).
- </p>
-<p>
- The legal values for <span class="command"><strong>ordering</strong></span> are:
- </p>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="0.750in" class="1">
-<col width="3.750in" class="2">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p><span class="command"><strong>fixed</strong></span></p>
- </td>
-<td>
- <p>
- Records are returned in the order they
- are defined in the zone file.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>random</strong></span></p>
- </td>
-<td>
- <p>
- Records are returned in some random order.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>cyclic</strong></span></p>
- </td>
-<td>
- <p>
- Records are returned in a cyclic round-robin order.
- </p>
- <p>
- If <acronym class="acronym">BIND</acronym> is configured with the
- "--enable-fixed-rrset" option at compile time, then
- the initial ordering of the RRset will match the
- one specified in the zone file.
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-<p>
- For example:
- </p>
-<pre class="programlisting">rrset-order {
- class IN type A name "host.example.com" order random;
- order cyclic;
-};
-</pre>
-<p>
- will cause any responses for type A records in class IN that
- have "<code class="literal">host.example.com</code>" as a
- suffix, to always be returned
- in random order. All other records are returned in cyclic order.
- </p>
-<p>
- If multiple <span class="command"><strong>rrset-order</strong></span> statements
- appear, they are not combined &#8212; the last one applies.
- </p>
-<p>
- By default, all records are returned in random order.
- </p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- In this release of <acronym class="acronym">BIND</acronym> 9, the
- <span class="command"><strong>rrset-order</strong></span> statement does not support
- "fixed" ordering by default. Fixed ordering can be enabled
- at compile time by specifying "--enable-fixed-rrset" on
- the "configure" command line.
- </p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="tuning"></a>Tuning</h4></div></div></div>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><span class="command"><strong>lame-ttl</strong></span></span></dt>
-<dd><p>
- Sets the number of seconds to cache a
- lame server indication. 0 disables caching. (This is
- <span class="bold"><strong>NOT</strong></span> recommended.)
- The default is <code class="literal">600</code> (10 minutes) and the
- maximum value is
- <code class="literal">1800</code> (30 minutes).
- </p></dd>
-<dt><span class="term"><span class="command"><strong>servfail-ttl</strong></span></span></dt>
-<dd>
-<p>
- Sets the number of seconds to cache a
- SERVFAIL response due to DNSSEC validation failure or
- other general server failure. If set to
- <code class="literal">0</code>, SERVFAIL caching is disabled.
- The SERVFAIL cache is not consulted if a query has
- the CD (Checking Disabled) bit set; this allows a
- query that failed due to DNSSEC validation to be retried
- without waiting for the SERVFAIL TTL to expire.
- </p>
-<p>
- The maximum value is <code class="literal">30</code>
- seconds; any higher value will be silently
- reduced. The default is <code class="literal">1</code>
- second.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>max-ncache-ttl</strong></span></span></dt>
-<dd><p>
- To reduce network traffic and increase performance,
- the server stores negative answers. <span class="command"><strong>max-ncache-ttl</strong></span> is
- used to set a maximum retention time for these answers in
- the server
- in seconds. The default
- <span class="command"><strong>max-ncache-ttl</strong></span> is <code class="literal">10800</code> seconds (3 hours).
- <span class="command"><strong>max-ncache-ttl</strong></span> cannot exceed
- 7 days and will
- be silently truncated to 7 days if set to a greater value.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>max-cache-ttl</strong></span></span></dt>
-<dd><p>
- Sets the maximum time for which the server will
- cache ordinary (positive) answers in seconds.
- The default is 604800 (one week).
- A value of zero may cause all queries to return
- SERVFAIL, because of lost caches of intermediate
- RRsets (such as NS and glue AAAA/A records) in the
- resolution process.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>min-roots</strong></span></span></dt>
-<dd>
-<p>
- The minimum number of root servers that
- is required for a request for the root servers to be
- accepted. The default
- is <strong class="userinput"><code>2</code></strong>.
- </p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- Not implemented in <acronym class="acronym">BIND</acronym> 9.
- </p>
-</div>
-</dd>
-<dt><span class="term"><span class="command"><strong>sig-validity-interval</strong></span></span></dt>
-<dd>
-<p>
- Specifies the number of days into the future when
- DNSSEC signatures automatically generated as a
- result of dynamic updates (<a class="xref" href="Bv9ARM.ch04.html#dynamic_update" title="Dynamic Update">the section called &#8220;Dynamic Update&#8221;</a>) will expire. There
- is an optional second field which specifies how
- long before expiry that the signatures will be
- regenerated. If not specified, the signatures will
- be regenerated at 1/4 of base interval. The second
- field is specified in days if the base interval is
- greater than 7 days otherwise it is specified in hours.
- The default base interval is <code class="literal">30</code> days
- giving a re-signing interval of 7 1/2 days. The maximum
- values are 10 years (3660 days).
- </p>
-<p>
- The signature inception time is unconditionally
- set to one hour before the current time to allow
- for a limited amount of clock skew.
- </p>
-<p>
- The <span class="command"><strong>sig-validity-interval</strong></span>
- should be, at least, several multiples of the SOA
- expire interval to allow for reasonable interaction
- between the various timer and expiry dates.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>sig-signing-nodes</strong></span></span></dt>
-<dd><p>
- Specify the maximum number of nodes to be
- examined in each quantum when signing a zone with
- a new DNSKEY. The default is
- <code class="literal">100</code>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>sig-signing-signatures</strong></span></span></dt>
-<dd><p>
- Specify a threshold number of signatures that
- will terminate processing a quantum when signing
- a zone with a new DNSKEY. The default is
- <code class="literal">10</code>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>sig-signing-type</strong></span></span></dt>
-<dd>
-<p>
- Specify a private RDATA type to be used when generating
- signing state records. The default is
- <code class="literal">65534</code>.
- </p>
-<p>
- It is expected that this parameter may be removed
- in a future version once there is a standard type.
- </p>
-<p>
- Signing state records are used to internally by
- <span class="command"><strong>named</strong></span> to track the current state of
- a zone-signing process, i.e., whether it is still active
- or has been completed. The records can be inspected
- using the command
- <span class="command"><strong>rndc signing -list <em class="replaceable"><code>zone</code></em></strong></span>.
- Once <span class="command"><strong>named</strong></span> has finished signing
- a zone with a particular key, the signing state
- record associated with that key can be removed from
- the zone by running
- <span class="command"><strong>rndc signing -clear <em class="replaceable"><code>keyid/algorithm</code></em> <em class="replaceable"><code>zone</code></em></strong></span>.
- To clear all of the completed signing state
- records for a zone, use
- <span class="command"><strong>rndc signing -clear all <em class="replaceable"><code>zone</code></em></strong></span>.
- </p>
-</dd>
-<dt>
-<span class="term"><span class="command"><strong>min-refresh-time</strong></span>, </span><span class="term"><span class="command"><strong>max-refresh-time</strong></span>, </span><span class="term"><span class="command"><strong>min-retry-time</strong></span>, </span><span class="term"><span class="command"><strong>max-retry-time</strong></span></span>
-</dt>
-<dd>
-<p>
- These options control the server's behavior on refreshing a
- zone
- (querying for SOA changes) or retrying failed transfers.
- Usually the SOA values for the zone are used, but these
- values
- are set by the master, giving slave server administrators
- little
- control over their contents.
- </p>
-<p>
- These options allow the administrator to set a minimum and
- maximum refresh and retry time in seconds per-zone,
- per-view, or globally.
- These options are valid for slave and stub zones,
- and clamp the SOA refresh and retry times to the specified
- values.
- </p>
-<p>
- The following defaults apply.
- <span class="command"><strong>min-refresh-time</strong></span> 300 seconds,
- <span class="command"><strong>max-refresh-time</strong></span> 2419200 seconds
- (4 weeks), <span class="command"><strong>min-retry-time</strong></span> 500 seconds,
- and <span class="command"><strong>max-retry-time</strong></span> 1209600 seconds
- (2 weeks).
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>edns-udp-size</strong></span></span></dt>
-<dd>
-<p>
- Sets the maximum advertised EDNS UDP buffer size in
- bytes, to control the size of packets received from
- authoritative servers in response to recursive queries.
- Valid values are 512 to 4096 (values outside this range
- will be silently adjusted to the nearest value within
- it). The default value is 4096.
- </p>
-<p>
- The usual reason for setting
- <span class="command"><strong>edns-udp-size</strong></span> to a non-default value
- is to get UDP answers to pass through broken firewalls
- that block fragmented packets and/or block UDP DNS
- packets that are greater than 512 bytes.
- </p>
-<p>
- When <span class="command"><strong>named</strong></span> first queries a remote
- server, it will advertise a UDP buffer size of 512, as
- this has the greatest chance of success on the first try.
- </p>
-<p>
- If the initial response times out, <span class="command"><strong>named</strong></span>
- will try again with plain DNS, and if that is successful,
- it will be taken as evidence that the server does not
- support EDNS. After enough failures using EDNS and
- successes using plain DNS, <span class="command"><strong>named</strong></span>
- will default to plain DNS for future communications
- with that server. (Periodically, <span class="command"><strong>named</strong></span>
- will send an EDNS query to see if the situation has
- improved.)
- </p>
-<p>
- However, if the initial query is successful with
- EDNS advertising a buffer size of 512, then
- <span class="command"><strong>named</strong></span> will advertise progressively
- larger buffer sizes on successive queries, until
- responses begin timing out or
- <span class="command"><strong>edns-udp-size</strong></span> is reached.
- </p>
-<p>
- The default buffer sizes used by <span class="command"><strong>named</strong></span>
- are 512, 1232, 1432, and 4096, but never exceeding
- <span class="command"><strong>edns-udp-size</strong></span>. (The values 1232 and
- 1432 are chosen to allow for an IPv4/IPv6 encapsulated
- UDP message to be sent without fragmentation at the
- minimum MTU sizes for Ethernet and IPv6 networks.)
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>max-udp-size</strong></span></span></dt>
-<dd>
-<p>
- Sets the maximum EDNS UDP message size
- <span class="command"><strong>named</strong></span> will send in bytes.
- Valid values are 512 to 4096 (values outside this
- range will be silently adjusted to the nearest
- value within it). The default value is 4096.
- </p>
-<p>
- This value applies to responses sent by a server; to
- set the advertised buffer size in queries, see
- <span class="command"><strong>edns-udp-size</strong></span>.
- </p>
-<p>
- The usual reason for setting
- <span class="command"><strong>max-udp-size</strong></span> to a non-default
- value is to get UDP answers to pass through broken
- firewalls that block fragmented packets and/or
- block UDP packets that are greater than 512 bytes.
- This is independent of the advertised receive
- buffer (<span class="command"><strong>edns-udp-size</strong></span>).
- </p>
-<p>
- Setting this to a low value will encourage additional
- TCP traffic to the nameserver.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>masterfile-format</strong></span></span></dt>
-<dd>
-<p>Specifies
- the file format of zone files (see
- <a class="xref" href="Bv9ARM.ch06.html#zonefile_format" title="Additional File Formats">the section called &#8220;Additional File Formats&#8221;</a>).
- The default value is <code class="constant">text</code>, which is the
- standard textual representation, except for slave zones,
- in which the default value is <code class="constant">raw</code>.
- Files in other formats than <code class="constant">text</code> are
- typically expected to be generated by the
- <span class="command"><strong>named-compilezone</strong></span> tool, or dumped by
- <span class="command"><strong>named</strong></span>.
- </p>
-<p>
- Note that when a zone file in a different format than
- <code class="constant">text</code> is loaded, <span class="command"><strong>named</strong></span>
- may omit some of the checks which would be performed for a
- file in the <code class="constant">text</code> format. In particular,
- <span class="command"><strong>check-names</strong></span> checks do not apply
- for the <code class="constant">raw</code> format. This means
- a zone file in the <code class="constant">raw</code> format
- must be generated with the same check level as that
- specified in the <span class="command"><strong>named</strong></span> configuration
- file. Also, <code class="constant">map</code> format files are
- loaded directly into memory via memory mapping, with only
- minimal checking.
- </p>
-<p>
- This statement sets the
- <span class="command"><strong>masterfile-format</strong></span> for all zones,
- but can be overridden on a per-zone or per-view basis
- by including a <span class="command"><strong>masterfile-format</strong></span>
- statement within the <span class="command"><strong>zone</strong></span> or
- <span class="command"><strong>view</strong></span> block in the configuration
- file.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>masterfile-style</strong></span></span></dt>
-<dd>
-<p>
- Specifies the formatting of zone files during dump
- when the <code class="option">masterfile-format</code> is
- <code class="constant">text</code>. (This option is ignored
- with any other <code class="option">masterfile-format</code>.)
- </p>
-<p>
- When set to <code class="constant">relative</code>,
- records are printed in a multi-line format with owner
- names expressed relative to a shared origin. When set
- to <code class="constant">full</code>, records are printed in
- a single-line format with absolute owner names.
- The <code class="constant">full</code> format is most suitable
- when a zone file needs to be processed automatically
- by a script. The <code class="constant">relative</code> format
- is more human-readable, and is thus suitable when a
- zone is to be edited by hand. The default is
- <code class="constant">relative</code>.
- </p>
-</dd>
-<dt>
-<a name="max-recursion-depth"></a><span class="term"><span class="command"><strong>max-recursion-depth</strong></span></span>
-</dt>
-<dd><p>
- Sets the maximum number of levels of recursion
- that are permitted at any one time while servicing
- a recursive query. Resolving a name may require
- looking up a name server address, which in turn
- requires resolving another name, etc; if the number
- of indirections exceeds this value, the recursive
- query is terminated and returns SERVFAIL. The
- default is 7.
- </p></dd>
-<dt>
-<a name="max-recursion-queries"></a><span class="term"><span class="command"><strong>max-recursion-queries</strong></span></span>
-</dt>
-<dd><p>
- Sets the maximum number of iterative queries that
- may be sent while servicing a recursive query.
- If more queries are sent, the recursive query
- is terminated and returns SERVFAIL. Queries to
- look up top level domains such as "com" and "net"
- and the DNS root zone are exempt from this limitation.
- The default is 75.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>notify-delay</strong></span></span></dt>
-<dd>
-<p>
- The delay, in seconds, between sending sets of notify
- messages for a zone. The default is five (5) seconds.
- </p>
-<p>
- The overall rate that NOTIFY messages are sent for all
- zones is controlled by <span class="command"><strong>serial-query-rate</strong></span>.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>max-rsa-exponent-size</strong></span></span></dt>
-<dd><p>
- The maximum RSA exponent size, in bits, that will
- be accepted when validating. Valid values are 35
- to 4096 bits. The default zero (0) is also accepted
- and is equivalent to 4096.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>prefetch</strong></span></span></dt>
-<dd>
-<p>
- When a query is received for cached data which
- is to expire shortly, <span class="command"><strong>named</strong></span> can
- refresh the data from the authoritative server
- immediately, ensuring that the cache always has an
- answer available.
- </p>
-<p>
- The <code class="option">prefetch</code> specifies the
- "trigger" TTL value at which prefetch of the current
- query will take place: when a cache record with a
- lower TTL value is encountered during query processing,
- it will be refreshed. Valid trigger TTL values are 1 to
- 10 seconds. Values larger than 10 seconds will be silently
- reduced to 10.
- Setting a trigger TTL to zero (0) causes
- prefetch to be disabled.
- The default trigger TTL is <code class="literal">2</code>.
- </p>
-<p>
- An optional second argument specifies the "eligibility"
- TTL: the smallest <span class="emphasis"><em>original</em></span>
- TTL value that will be accepted for a record to be
- eligible for prefetching. The eligibility TTL must
- be at least six seconds longer than the trigger TTL;
- if it isn't, <span class="command"><strong>named</strong></span> will silently
- adjust it upward.
- The default eligibility TTL is <code class="literal">9</code>.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>v6-bias</strong></span></span></dt>
-<dd><p>
- When determining the next nameserver to try
- preference IPv6 nameservers by this many milliseconds.
- The default is <code class="literal">50</code> milliseconds.
- </p></dd>
-</dl></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="builtin"></a>Built-in server information zones</h4></div></div></div>
-<p>
- The server provides some helpful diagnostic information
- through a number of built-in zones under the
- pseudo-top-level-domain <code class="literal">bind</code> in the
- <span class="command"><strong>CHAOS</strong></span> class. These zones are part
- of a
- built-in view (see <a class="xref" href="Bv9ARM.ch06.html#view_statement_grammar" title="view Statement Grammar">the section called &#8220;<span class="command"><strong>view</strong></span> Statement Grammar&#8221;</a>) of
- class
- <span class="command"><strong>CHAOS</strong></span> which is separate from the
- default view of class <span class="command"><strong>IN</strong></span>. Most global
- configuration options (<span class="command"><strong>allow-query</strong></span>,
- etc) will apply to this view, but some are locally
- overridden: <span class="command"><strong>notify</strong></span>,
- <span class="command"><strong>recursion</strong></span> and
- <span class="command"><strong>allow-new-zones</strong></span> are
- always set to <strong class="userinput"><code>no</code></strong>, and
- <span class="command"><strong>rate-limit</strong></span> is set to allow
- three responses per second.
- </p>
-<p>
- If you need to disable these zones, use the options
- below, or hide the built-in <span class="command"><strong>CHAOS</strong></span>
- view by
- defining an explicit view of class <span class="command"><strong>CHAOS</strong></span>
- that matches all clients.
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><span class="command"><strong>version</strong></span></span></dt>
-<dd><p>
- The version the server should report
- via a query of the name <code class="literal">version.bind</code>
- with type <span class="command"><strong>TXT</strong></span>, class <span class="command"><strong>CHAOS</strong></span>.
- The default is the real version number of this server.
- Specifying <span class="command"><strong>version none</strong></span>
- disables processing of the queries.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>hostname</strong></span></span></dt>
-<dd><p>
- The hostname the server should report via a query of
- the name <code class="filename">hostname.bind</code>
- with type <span class="command"><strong>TXT</strong></span>, class <span class="command"><strong>CHAOS</strong></span>.
- This defaults to the hostname of the machine hosting the
- name server as
- found by the gethostname() function. The primary purpose of such queries
- is to
- identify which of a group of anycast servers is actually
- answering your queries. Specifying <span class="command"><strong>hostname none;</strong></span>
- disables processing of the queries.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>server-id</strong></span></span></dt>
-<dd><p>
- The ID the server should report when receiving a Name
- Server Identifier (NSID) query, or a query of the name
- <code class="filename">ID.SERVER</code> with type
- <span class="command"><strong>TXT</strong></span>, class <span class="command"><strong>CHAOS</strong></span>.
- The primary purpose of such queries is to
- identify which of a group of anycast servers is actually
- answering your queries. Specifying <span class="command"><strong>server-id none;</strong></span>
- disables processing of the queries.
- Specifying <span class="command"><strong>server-id hostname;</strong></span> will cause <span class="command"><strong>named</strong></span> to
- use the hostname as found by the gethostname() function.
- The default <span class="command"><strong>server-id</strong></span> is <span class="command"><strong>none</strong></span>.
- </p></dd>
-</dl></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="empty"></a>Built-in Empty Zones</h4></div></div></div>
-<p>
- The <span class="command"><strong>named</strong></span> server has some built-in
- empty zones (SOA and NS records only).
- These are for zones that should normally be answered locally
- and which queries should not be sent to the Internet's root
- servers. The official servers which cover these namespaces
- return NXDOMAIN responses to these queries. In particular,
- these cover the reverse namespaces for addresses from
- RFC 1918, RFC 4193, RFC 5737 and RFC 6598. They also include the
- reverse namespace for IPv6 local address (locally assigned),
- IPv6 link local addresses, the IPv6 loopback address and the
- IPv6 unknown address.
- </p>
-<p>
- The server will attempt to determine if a built-in zone
- already exists or is active (covered by a forward-only
- forwarding declaration) and will not create an empty
- zone in that case.
- </p>
-<p>
- The current list of empty zones is:
- </p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem">10.IN-ADDR.ARPA</li>
-<li class="listitem">16.172.IN-ADDR.ARPA</li>
-<li class="listitem">17.172.IN-ADDR.ARPA</li>
-<li class="listitem">18.172.IN-ADDR.ARPA</li>
-<li class="listitem">19.172.IN-ADDR.ARPA</li>
-<li class="listitem">20.172.IN-ADDR.ARPA</li>
-<li class="listitem">21.172.IN-ADDR.ARPA</li>
-<li class="listitem">22.172.IN-ADDR.ARPA</li>
-<li class="listitem">23.172.IN-ADDR.ARPA</li>
-<li class="listitem">24.172.IN-ADDR.ARPA</li>
-<li class="listitem">25.172.IN-ADDR.ARPA</li>
-<li class="listitem">26.172.IN-ADDR.ARPA</li>
-<li class="listitem">27.172.IN-ADDR.ARPA</li>
-<li class="listitem">28.172.IN-ADDR.ARPA</li>
-<li class="listitem">29.172.IN-ADDR.ARPA</li>
-<li class="listitem">30.172.IN-ADDR.ARPA</li>
-<li class="listitem">31.172.IN-ADDR.ARPA</li>
-<li class="listitem">168.192.IN-ADDR.ARPA</li>
-<li class="listitem">64.100.IN-ADDR.ARPA</li>
-<li class="listitem">65.100.IN-ADDR.ARPA</li>
-<li class="listitem">66.100.IN-ADDR.ARPA</li>
-<li class="listitem">67.100.IN-ADDR.ARPA</li>
-<li class="listitem">68.100.IN-ADDR.ARPA</li>
-<li class="listitem">69.100.IN-ADDR.ARPA</li>
-<li class="listitem">70.100.IN-ADDR.ARPA</li>
-<li class="listitem">71.100.IN-ADDR.ARPA</li>
-<li class="listitem">72.100.IN-ADDR.ARPA</li>
-<li class="listitem">73.100.IN-ADDR.ARPA</li>
-<li class="listitem">74.100.IN-ADDR.ARPA</li>
-<li class="listitem">75.100.IN-ADDR.ARPA</li>
-<li class="listitem">76.100.IN-ADDR.ARPA</li>
-<li class="listitem">77.100.IN-ADDR.ARPA</li>
-<li class="listitem">78.100.IN-ADDR.ARPA</li>
-<li class="listitem">79.100.IN-ADDR.ARPA</li>
-<li class="listitem">80.100.IN-ADDR.ARPA</li>
-<li class="listitem">81.100.IN-ADDR.ARPA</li>
-<li class="listitem">82.100.IN-ADDR.ARPA</li>
-<li class="listitem">83.100.IN-ADDR.ARPA</li>
-<li class="listitem">84.100.IN-ADDR.ARPA</li>
-<li class="listitem">85.100.IN-ADDR.ARPA</li>
-<li class="listitem">86.100.IN-ADDR.ARPA</li>
-<li class="listitem">87.100.IN-ADDR.ARPA</li>
-<li class="listitem">88.100.IN-ADDR.ARPA</li>
-<li class="listitem">89.100.IN-ADDR.ARPA</li>
-<li class="listitem">90.100.IN-ADDR.ARPA</li>
-<li class="listitem">91.100.IN-ADDR.ARPA</li>
-<li class="listitem">92.100.IN-ADDR.ARPA</li>
-<li class="listitem">93.100.IN-ADDR.ARPA</li>
-<li class="listitem">94.100.IN-ADDR.ARPA</li>
-<li class="listitem">95.100.IN-ADDR.ARPA</li>
-<li class="listitem">96.100.IN-ADDR.ARPA</li>
-<li class="listitem">97.100.IN-ADDR.ARPA</li>
-<li class="listitem">98.100.IN-ADDR.ARPA</li>
-<li class="listitem">99.100.IN-ADDR.ARPA</li>
-<li class="listitem">100.100.IN-ADDR.ARPA</li>
-<li class="listitem">101.100.IN-ADDR.ARPA</li>
-<li class="listitem">102.100.IN-ADDR.ARPA</li>
-<li class="listitem">103.100.IN-ADDR.ARPA</li>
-<li class="listitem">104.100.IN-ADDR.ARPA</li>
-<li class="listitem">105.100.IN-ADDR.ARPA</li>
-<li class="listitem">106.100.IN-ADDR.ARPA</li>
-<li class="listitem">107.100.IN-ADDR.ARPA</li>
-<li class="listitem">108.100.IN-ADDR.ARPA</li>
-<li class="listitem">109.100.IN-ADDR.ARPA</li>
-<li class="listitem">110.100.IN-ADDR.ARPA</li>
-<li class="listitem">111.100.IN-ADDR.ARPA</li>
-<li class="listitem">112.100.IN-ADDR.ARPA</li>
-<li class="listitem">113.100.IN-ADDR.ARPA</li>
-<li class="listitem">114.100.IN-ADDR.ARPA</li>
-<li class="listitem">115.100.IN-ADDR.ARPA</li>
-<li class="listitem">116.100.IN-ADDR.ARPA</li>
-<li class="listitem">117.100.IN-ADDR.ARPA</li>
-<li class="listitem">118.100.IN-ADDR.ARPA</li>
-<li class="listitem">119.100.IN-ADDR.ARPA</li>
-<li class="listitem">120.100.IN-ADDR.ARPA</li>
-<li class="listitem">121.100.IN-ADDR.ARPA</li>
-<li class="listitem">122.100.IN-ADDR.ARPA</li>
-<li class="listitem">123.100.IN-ADDR.ARPA</li>
-<li class="listitem">124.100.IN-ADDR.ARPA</li>
-<li class="listitem">125.100.IN-ADDR.ARPA</li>
-<li class="listitem">126.100.IN-ADDR.ARPA</li>
-<li class="listitem">127.100.IN-ADDR.ARPA</li>
-<li class="listitem">0.IN-ADDR.ARPA</li>
-<li class="listitem">127.IN-ADDR.ARPA</li>
-<li class="listitem">254.169.IN-ADDR.ARPA</li>
-<li class="listitem">2.0.192.IN-ADDR.ARPA</li>
-<li class="listitem">100.51.198.IN-ADDR.ARPA</li>
-<li class="listitem">113.0.203.IN-ADDR.ARPA</li>
-<li class="listitem">255.255.255.255.IN-ADDR.ARPA</li>
-<li class="listitem">0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA</li>
-<li class="listitem">1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA</li>
-<li class="listitem">8.B.D.0.1.0.0.2.IP6.ARPA</li>
-<li class="listitem">D.F.IP6.ARPA</li>
-<li class="listitem">8.E.F.IP6.ARPA</li>
-<li class="listitem">9.E.F.IP6.ARPA</li>
-<li class="listitem">A.E.F.IP6.ARPA</li>
-<li class="listitem">B.E.F.IP6.ARPA</li>
-</ul></div>
-<p>
- </p>
-<p>
- Empty zones are settable at the view level and only apply to
- views of class IN. Disabled empty zones are only inherited
- from options if there are no disabled empty zones specified
- at the view level. To override the options list of disabled
- zones, you can disable the root zone at the view level, for example:
-</p>
-<pre class="programlisting">
- disable-empty-zone ".";
-</pre>
-<p>
- </p>
-<p>
- If you are using the address ranges covered here, you should
- already have reverse zones covering the addresses you use.
- In practice this appears to not be the case with many queries
- being made to the infrastructure servers for names in these
- spaces. So many in fact that sacrificial servers were needed
- to be deployed to channel the query load away from the
- infrastructure servers.
- </p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- The real parent servers for these zones should disable all
- empty zone under the parent zone they serve. For the real
- root servers, this is all built-in empty zones. This will
- enable them to return referrals to deeper in the tree.
- </p>
-</div>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><span class="command"><strong>empty-server</strong></span></span></dt>
-<dd><p>
- Specify what server name will appear in the returned
- SOA record for empty zones. If none is specified, then
- the zone's name will be used.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>empty-contact</strong></span></span></dt>
-<dd><p>
- Specify what contact name will appear in the returned
- SOA record for empty zones. If none is specified, then
- "." will be used.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>empty-zones-enable</strong></span></span></dt>
-<dd><p>
- Enable or disable all empty zones. By default, they
- are enabled.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>disable-empty-zone</strong></span></span></dt>
-<dd><p>
- Disable individual empty zones. By default, none are
- disabled. This option can be specified multiple times.
- </p></dd>
-</dl></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="acache"></a>Additional Section Caching</h4></div></div></div>
-<p>
- The additional section cache, also called <span class="command"><strong>acache</strong></span>,
- is an internal cache to improve the response performance of BIND 9.
- When additional section caching is enabled, BIND 9 will
- cache an internal short-cut to the additional section content for
- each answer RR.
- Note that <span class="command"><strong>acache</strong></span> is an internal caching
- mechanism of BIND 9, and is not related to the DNS caching
- server function.
- </p>
-<p>
- Additional section caching does not change the
- response content (except the RRsets ordering of the additional
- section, see below), but can improve the response performance
- significantly.
- It is particularly effective when BIND 9 acts as an authoritative
- server for a zone that has many delegations with many glue RRs.
- </p>
-<p>
- In order to obtain the maximum performance improvement
- from additional section caching, setting
- <span class="command"><strong>additional-from-cache</strong></span>
- to <span class="command"><strong>no</strong></span> is recommended, since the current
- implementation of <span class="command"><strong>acache</strong></span>
- does not short-cut of additional section information from the
- DNS cache data.
- </p>
-<p>
- One obvious disadvantage of <span class="command"><strong>acache</strong></span> is
- that it requires much more
- memory for the internal cached data.
- Thus, if the response performance does not matter and memory
- consumption is much more critical, the
- <span class="command"><strong>acache</strong></span> mechanism can be
- disabled by setting <span class="command"><strong>acache-enable</strong></span> to
- <span class="command"><strong>no</strong></span>.
- It is also possible to specify the upper limit of memory
- consumption
- for acache by using <span class="command"><strong>max-acache-size</strong></span>.
- </p>
-<p>
- Additional section caching also has a minor effect on the
- RRset ordering in the additional section.
- Without <span class="command"><strong>acache</strong></span>,
- <span class="command"><strong>cyclic</strong></span> order is effective for the additional
- section as well as the answer and authority sections.
- However, additional section caching fixes the ordering when it
- first caches an RRset for the additional section, and the same
- ordering will be kept in succeeding responses, regardless of the
- setting of <span class="command"><strong>rrset-order</strong></span>.
- The effect of this should be minor, however, since an
- RRset in the additional section
- typically only contains a small number of RRs (and in many cases
- it only contains a single RR), in which case the
- ordering does not matter much.
- </p>
-<p>
- The following is a summary of options related to
- <span class="command"><strong>acache</strong></span>.
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><span class="command"><strong>acache-enable</strong></span></span></dt>
-<dd><p>
- If <span class="command"><strong>yes</strong></span>, additional section caching is
- enabled. The default value is <span class="command"><strong>no</strong></span>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>acache-cleaning-interval</strong></span></span></dt>
-<dd><p>
- The server will remove stale cache entries, based on an LRU
- based
- algorithm, every <span class="command"><strong>acache-cleaning-interval</strong></span> minutes.
- The default is 60 minutes.
- If set to 0, no periodic cleaning will occur.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>max-acache-size</strong></span></span></dt>
-<dd><p>
- The maximum amount of memory in bytes to use for the server's acache.
- When the amount of data in the acache reaches this limit,
- the server
- will clean more aggressively so that the limit is not
- exceeded.
- In a server with multiple views, the limit applies
- separately to the
- acache of each view.
- The default is <code class="literal">16M</code>.
- </p></dd>
-</dl></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="content_filtering"></a>Content Filtering</h4></div></div></div>
-<p>
- <acronym class="acronym">BIND</acronym> 9 provides the ability to filter
- out DNS responses from external DNS servers containing
- certain types of data in the answer section.
- Specifically, it can reject address (A or AAAA) records if
- the corresponding IPv4 or IPv6 addresses match the given
- <code class="varname">address_match_list</code> of the
- <span class="command"><strong>deny-answer-addresses</strong></span> option.
- It can also reject CNAME or DNAME records if the "alias"
- name (i.e., the CNAME alias or the substituted query name
- due to DNAME) matches the
- given <code class="varname">namelist</code> of the
- <span class="command"><strong>deny-answer-aliases</strong></span> option, where
- "match" means the alias name is a subdomain of one of
- the <code class="varname">name_list</code> elements.
- If the optional <code class="varname">namelist</code> is specified
- with <span class="command"><strong>except-from</strong></span>, records whose query name
- matches the list will be accepted regardless of the filter
- setting.
- Likewise, if the alias name is a subdomain of the
- corresponding zone, the <span class="command"><strong>deny-answer-aliases</strong></span>
- filter will not apply;
- for example, even if "example.com" is specified for
- <span class="command"><strong>deny-answer-aliases</strong></span>,
- </p>
-<pre class="programlisting">www.example.com. CNAME xxx.example.com.</pre>
-<p>
- returned by an "example.com" server will be accepted.
- </p>
-<p>
- In the <code class="varname">address_match_list</code> of the
- <span class="command"><strong>deny-answer-addresses</strong></span> option, only
- <code class="varname">ip_addr</code>
- and <code class="varname">ip_prefix</code>
- are meaningful;
- any <code class="varname">key_id</code> will be silently ignored.
- </p>
-<p>
- If a response message is rejected due to the filtering,
- the entire message is discarded without being cached, and
- a SERVFAIL error will be returned to the client.
- </p>
-<p>
- This filtering is intended to prevent "DNS rebinding attacks," in
- which an attacker, in response to a query for a domain name the
- attacker controls, returns an IP address within your own network or
- an alias name within your own domain.
- A naive web browser or script could then serve as an
- unintended proxy, allowing the attacker
- to get access to an internal node of your local network
- that couldn't be externally accessed otherwise.
- See the paper available at
- <a class="link" href="http://portal.acm.org/citation.cfm?id=1315245.1315298" target="_top">
- http://portal.acm.org/citation.cfm?id=1315245.1315298
- </a>
- for more details about the attacks.
- </p>
-<p>
- For example, if you own a domain named "example.net" and
- your internal network uses an IPv4 prefix 192.0.2.0/24,
- you might specify the following rules:
- </p>
-<pre class="programlisting">deny-answer-addresses { 192.0.2.0/24; } except-from { "example.net"; };
-deny-answer-aliases { "example.net"; };
-</pre>
-<p>
- If an external attacker lets a web browser in your local
- network look up an IPv4 address of "attacker.example.com",
- the attacker's DNS server would return a response like this:
- </p>
-<pre class="programlisting">attacker.example.com. A 192.0.2.1</pre>
-<p>
- in the answer section.
- Since the rdata of this record (the IPv4 address) matches
- the specified prefix 192.0.2.0/24, this response will be
- ignored.
- </p>
-<p>
- On the other hand, if the browser looks up a legitimate
- internal web server "www.example.net" and the
- following response is returned to
- the <acronym class="acronym">BIND</acronym> 9 server
- </p>
-<pre class="programlisting">www.example.net. A 192.0.2.2</pre>
-<p>
- it will be accepted since the owner name "www.example.net"
- matches the <span class="command"><strong>except-from</strong></span> element,
- "example.net".
- </p>
-<p>
- Note that this is not really an attack on the DNS per se.
- In fact, there is nothing wrong for an "external" name to
- be mapped to your "internal" IP address or domain name
- from the DNS point of view.
- It might actually be provided for a legitimate purpose,
- such as for debugging.
- As long as the mapping is provided by the correct owner,
- it is not possible or does not make sense to detect
- whether the intent of the mapping is legitimate or not
- within the DNS.
- The "rebinding" attack must primarily be protected at the
- application that uses the DNS.
- For a large site, however, it may be difficult to protect
- all possible applications at once.
- This filtering feature is provided only to help such an
- operational environment;
- it is generally discouraged to turn it on unless you are
- very sure you have no other choice and the attack is a
- real threat for your applications.
- </p>
-<p>
- Care should be particularly taken if you want to use this
- option for addresses within 127.0.0.0/8.
- These addresses are obviously "internal", but many
- applications conventionally rely on a DNS mapping from
- some name to such an address.
- Filtering out DNS records containing this address
- spuriously can break such applications.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="rpz"></a>Response Policy Zone (RPZ) Rewriting</h4></div></div></div>
-<p>
- <acronym class="acronym">BIND</acronym> 9 includes a limited
- mechanism to modify DNS responses for requests
- analogous to email anti-spam DNS blacklists.
- Responses can be changed to deny the existence of domains (NXDOMAIN),
- deny the existence of IP addresses for domains (NODATA),
- or contain other IP addresses or data.
- </p>
-<p>
- Response policy zones are named in the
- <span class="command"><strong>response-policy</strong></span> option for the view or among the
- global options if there is no response-policy option for the view.
- Response policy zones are ordinary DNS zones containing RRsets
- that can be queried normally if allowed.
- It is usually best to restrict those queries with something like
- <span class="command"><strong>allow-query { localhost; };</strong></span>.
- Note that zones using <span class="command"><strong>masterfile-format map</strong></span>
- cannot be used as policy zones.
- </p>
-<p>
- A <span class="command"><strong>response-policy</strong></span> option can support
- multiple policy zones. To maximize performance, a radix
- tree is used to quickly identify response policy zones
- containing triggers that match the current query. This
- imposes an upper limit of 32 on the number of policy zones
- in a single <span class="command"><strong>response-policy</strong></span> option; more
- than that is a configuration error.
- </p>
-<p>
- Five policy triggers can be encoded in RPZ records.
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><span class="command"><strong>RPZ-CLIENT-IP</strong></span></span></dt>
-<dd>
-<p>
- IP records are triggered by the IP address of the
- DNS client.
- Client IP address triggers are encoded in records that have
- owner names that are subdomains of
- <span class="command"><strong>rpz-client-ip</strong></span> relativized to the
- policy zone origin name
- and encode an address or address block.
- IPv4 addresses are represented as
- <strong class="userinput"><code>prefixlength.B4.B3.B2.B1.rpz-client-ip</code></strong>.
- The IPv4 prefix length must be between 1 and 32.
- All four bytes, B4, B3, B2, and B1, must be present.
- B4 is the decimal value of the least significant byte of the
- IPv4 address as in IN-ADDR.ARPA.
- </p>
-<p>
- IPv6 addresses are encoded in a format similar
- to the standard IPv6 text representation,
- <strong class="userinput"><code>prefixlength.W8.W7.W6.W5.W4.W3.W2.W1.rpz-client-ip</code></strong>.
- Each of W8,...,W1 is a one to four digit hexadecimal number
- representing 16 bits of the IPv6 address as in the standard
- text representation of IPv6 addresses, but reversed as in
- IP6.ARPA. (Note that this representation of IPv6
- address is different from IP6.ARPA where each hex
- digit occupies a label.)
- All 8 words must be present except when one set of consecutive
- zero words is replaced with <strong class="userinput"><code>.zz.</code></strong>
- analogous to double colons (::) in standard IPv6 text
- encodings.
- The IPv6 prefix length must be between 1 and 128.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>QNAME</strong></span></span></dt>
-<dd><p>
- QNAME policy records are triggered by query names of
- requests and targets of CNAME records resolved to generate
- the response.
- The owner name of a QNAME policy record is
- the query name relativized to the policy zone.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>RPZ-IP</strong></span></span></dt>
-<dd><p>
- IP triggers are IP addresses in an
- A or AAAA record in the ANSWER section of a response.
- They are encoded like client-IP triggers except as
- subdomains of <span class="command"><strong>rpz-ip</strong></span>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>RPZ-NSDNAME</strong></span></span></dt>
-<dd><p>
- NSDNAME triggers match names of authoritative servers
- for the query name, a parent of the query name, a CNAME for
- query name, or a parent of a CNAME.
- They are encoded as subdomains of
- <span class="command"><strong>rpz-nsdname</strong></span> relativized
- to the RPZ origin name.
- NSIP triggers match IP addresses in A and
- AAAA RRsets for domains that can be checked against NSDNAME
- policy records.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>RPZ-NSIP</strong></span></span></dt>
-<dd>
-<p>
- NSIP triggers match the IP addresses of authoritative
- servers. They are enncoded like IP triggers, except as
- subdomains of <span class="command"><strong>rpz-nsip</strong></span>.
- NSDNAME and NSIP triggers are checked only for names with at
- least <span class="command"><strong>min-ns-dots</strong></span> dots.
- The default value of <span class="command"><strong>min-ns-dots</strong></span> is
- 1, to exclude top level domains.
- </p>
-<p>
- If a name server's IP address is not yet known,
- <span class="command"><strong>named</strong></span> will recursively look up
- the IP address before applying an RPZ-NSIP rule.
- This can cause a processing delay. To speed up
- processing at the cost of precision, the
- <span class="command"><strong>nsip-wait-recurse</strong></span> option
- can be used: when set to <strong class="userinput"><code>no</code></strong>,
- RPZ-NSIP rules will only be applied when a name
- servers's IP address has already been looked up and
- cached. If a server's IP address is not in the
- cache, then the RPZ-NSIP rule will be ignored,
- but the address will be looked up in the
- background, and the rule will be applied
- to subsequent queries. The default is
- <strong class="userinput"><code>yes</code></strong>, meaning RPZ-NSIP
- rules should always be applied even if an
- address needs to be looked up first.
- </p>
-</dd>
-</dl></div>
-<p>
- </p>
-<p>
- The query response is checked against all response policy zones,
- so two or more policy records can be triggered by a response.
- Because DNS responses are rewritten according to at most one
- policy record, a single record encoding an action (other than
- <span class="command"><strong>DISABLED</strong></span> actions) must be chosen.
- Triggers or the records that encode them are chosen for the
- rewriting in the following order:
- </p>
-<div class="orderedlist"><ol class="orderedlist" type="1">
-<li class="listitem">Choose the triggered record in the zone that appears
- first in the <span class="command"><strong>response-policy</strong></span> option.
- </li>
-<li class="listitem">Prefer CLIENT-IP to QNAME to IP to NSDNAME to NSIP
- triggers in a single zone.
- </li>
-<li class="listitem">Among NSDNAME triggers, prefer the
- trigger that matches the smallest name under the DNSSEC ordering.
- </li>
-<li class="listitem">Among IP or NSIP triggers, prefer the trigger
- with the longest prefix.
- </li>
-<li class="listitem">Among triggers with the same prefix length,
- prefer the IP or NSIP trigger that matches
- the smallest IP address.
- </li>
-</ol></div>
-<p>
- </p>
-<p>
- When the processing of a response is restarted to resolve
- DNAME or CNAME records and a policy record set has
- not been triggered,
- all response policy zones are again consulted for the
- DNAME or CNAME names and addresses.
- </p>
-<p>
- RPZ record sets are any types of DNS record except
- DNAME or DNSSEC that encode actions or responses to
- individual queries.
- Any of the policies can be used with any of the triggers.
- For example, while the <span class="command"><strong>TCP-only</strong></span> policy is
- commonly used with <span class="command"><strong>client-IP</strong></span> triggers,
- it can be used with any type of trigger to force the use of
- TCP for responses with owner names in a zone.
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><span class="command"><strong>PASSTHRU</strong></span></span></dt>
-<dd><p>
- The whitelist policy is specified
- by a CNAME whose target is <span class="command"><strong>rpz-passthru</strong></span>.
- It causes the response to not be rewritten
- and is most often used to "poke holes" in policies for
- CIDR blocks.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>DROP</strong></span></span></dt>
-<dd><p>
- The blacklist policy is specified
- by a CNAME whose target is <span class="command"><strong>rpz-drop</strong></span>.
- It causes the response to be discarded.
- Nothing is sent to the DNS client.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>TCP-Only</strong></span></span></dt>
-<dd><p>
- The "slip" policy is specified
- by a CNAME whose target is <span class="command"><strong>rpz-tcp-only</strong></span>.
- It changes UDP responses to short, truncated DNS responses
- that require the DNS client to try again with TCP.
- It is used to mitigate distributed DNS reflection attacks.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>NXDOMAIN</strong></span></span></dt>
-<dd><p>
- The domain undefined response is encoded
- by a CNAME whose target is the root domain (.)
- </p></dd>
-<dt><span class="term"><span class="command"><strong>NODATA</strong></span></span></dt>
-<dd><p>
- The empty set of resource records is specified by
- CNAME whose target is the wildcard top-level
- domain (*.).
- It rewrites the response to NODATA or ANCOUNT=1.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>Local Data</strong></span></span></dt>
-<dd>
-<p>
- A set of ordinary DNS records can be used to answer queries.
- Queries for record types not the set are answered with
- NODATA.
- </p>
-<p>
- A special form of local data is a CNAME whose target is a
- wildcard such as *.example.com.
- It is used as if were an ordinary CNAME after the asterisk (*)
- has been replaced with the query name.
- The purpose for this special form is query logging in the
- walled garden's authority DNS server.
- </p>
-</dd>
-</dl></div>
-<p>
- </p>
-<p>
- All of the actions specified in all of the individual records
- in a policy zone
- can be overridden with a <span class="command"><strong>policy</strong></span> clause in the
- <span class="command"><strong>response-policy</strong></span> option.
- An organization using a policy zone provided by another
- organization might use this mechanism to redirect domains
- to its own walled garden.
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><span class="command"><strong>GIVEN</strong></span></span></dt>
-<dd><p>The placeholder policy says "do not override but
- perform the action specified in the zone."
- </p></dd>
-<dt><span class="term"><span class="command"><strong>DISABLED</strong></span></span></dt>
-<dd><p>
- The testing override policy causes policy zone records to do
- nothing but log what they would have done if the
- policy zone were not disabled.
- The response to the DNS query will be written (or not)
- according to any triggered policy records that are not
- disabled.
- Disabled policy zones should appear first,
- because they will often not be logged
- if a higher precedence trigger is found first.
- </p></dd>
-<dt>
-<span class="term"><span class="command"><strong>PASSTHRU</strong></span>, </span><span class="term"><span class="command"><strong>DROP</strong></span>, </span><span class="term"><span class="command"><strong>TCP-Only</strong></span>, </span><span class="term"><span class="command"><strong>NXDOMAIN</strong></span>, </span><span class="term"><span class="command"><strong>NODATA</strong></span></span>
-</dt>
-<dd><p>
- override with the corresponding per-record policy.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>CNAME domain</strong></span></span></dt>
-<dd><p>
- causes all RPZ policy records to act as if they were
- "cname domain" records.
- </p></dd>
-</dl></div>
-<p>
- </p>
-<p>
- By default, the actions encoded in a response policy zone
- are applied only to queries that ask for recursion (RD=1).
- That default can be changed for a single policy zone or
- all response policy zones in a view
- with a <span class="command"><strong>recursive-only no</strong></span> clause.
- This feature is useful for serving the same zone files
- both inside and outside an RFC 1918 cloud and using RPZ to
- delete answers that would otherwise contain RFC 1918 values
- on the externally visible name server or view.
- </p>
-<p>
- Also by default, RPZ actions are applied only to DNS requests
- that either do not request DNSSEC metadata (DO=0) or when no
- DNSSEC records are available for request name in the original
- zone (not the response policy zone). This default can be
- changed for all response policy zones in a view with a
- <span class="command"><strong>break-dnssec yes</strong></span> clause. In that case, RPZ
- actions are applied regardless of DNSSEC. The name of the
- clause option reflects the fact that results rewritten by RPZ
- actions cannot verify.
- </p>
-<p>
- No DNS records are needed for a QNAME or Client-IP trigger.
- The name or IP address itself is sufficient,
- so in principle the query name need not be recursively resolved.
- However, not resolving the requested
- name can leak the fact that response policy rewriting is in use
- and that the name is listed in a policy zone to operators of
- servers for listed names. To prevent that information leak, by
- default any recursion needed for a request is done before any
- policy triggers are considered. Because listed domains often
- have slow authoritative servers, this default behavior can cost
- significant time.
- The <span class="command"><strong>qname-wait-recurse no</strong></span> option
- overrides that default behavior when recursion cannot
- change a non-error response.
- The option does not affect QNAME or client-IP triggers
- in policy zones listed
- after other zones containing IP, NSIP and NSDNAME triggers, because
- those may depend on the A, AAAA, and NS records that would be
- found during recursive resolution. It also does not affect
- DNSSEC requests (DO=1) unless <span class="command"><strong>break-dnssec yes</strong></span>
- is in use, because the response would depend on whether or not
- RRSIG records were found during resolution.
- Using this option can cause error responses such as SERVFAIL to
- appear to be rewritten, since no recursion is being done to
- discover problems at the authoritative server.
- </p>
-<p>
- The TTL of a record modified by RPZ policies is set from the
- TTL of the relevant record in policy zone. It is then limited
- to a maximum value.
- The <span class="command"><strong>max-policy-ttl</strong></span> clause changes the
- maximum seconds from its default of 5.
- </p>
-<p>
- For example, you might use this option statement
- </p>
-<pre class="programlisting"> response-policy { zone "badlist"; };</pre>
-<p>
- and this zone statement
- </p>
-<pre class="programlisting"> zone "badlist" {type master; file "master/badlist"; allow-query {none;}; };</pre>
-<p>
- with this zone file
- </p>
-<pre class="programlisting">$TTL 1H
-@ SOA LOCALHOST. named-mgr.example.com (1 1h 15m 30d 2h)
- NS LOCALHOST.
-
-; QNAME policy records. There are no periods (.) after the owner names.
-nxdomain.domain.com CNAME . ; NXDOMAIN policy
-*.nxdomain.domain.com CNAME . ; NXDOMAIN policy
-nodata.domain.com CNAME *. ; NODATA policy
-*.nodata.domain.com CNAME *. ; NODATA policy
-bad.domain.com A 10.0.0.1 ; redirect to a walled garden
- AAAA 2001:2::1
-bzone.domain.com CNAME garden.example.com.
-
-; do not rewrite (PASSTHRU) OK.DOMAIN.COM
-ok.domain.com CNAME rpz-passthru.
-
-; redirect x.bzone.domain.com to x.bzone.domain.com.garden.example.com
-*.bzone.domain.com CNAME *.garden.example.com.
-
-
-; IP policy records that rewrite all responses containing A records in 127/8
-; except 127.0.0.1
-8.0.0.0.127.rpz-ip CNAME .
-32.1.0.0.127.rpz-ip CNAME rpz-passthru.
-
-; NSDNAME and NSIP policy records
-ns.domain.com.rpz-nsdname CNAME .
-48.zz.2.2001.rpz-nsip CNAME .
-
-; blacklist and whitelist some DNS clients
-112.zz.2001.rpz-client-ip CNAME rpz-drop.
-8.0.0.0.127.rpz-client-ip CNAME rpz-drop.
-
-; force some DNS clients and responses in the example.com zone to TCP
-16.0.0.1.10.rpz-client-ip CNAME rpz-tcp-only.
-example.com CNAME rpz-tcp-only.
-*.example.com CNAME rpz-tcp-only.
-
-</pre>
-<p>
- RPZ can affect server performance.
- Each configured response policy zone requires the server to
- perform one to four additional database lookups before a
- query can be answered.
- For example, a DNS server with four policy zones, each with all
- four kinds of response triggers, QNAME, IP, NSIP, and
- NSDNAME, requires a total of 17 times as many database
- lookups as a similar DNS server with no response policy zones.
- A <acronym class="acronym">BIND9</acronym> server with adequate memory and one
- response policy zone with QNAME and IP triggers might achieve a
- maximum queries-per-second rate about 20% lower.
- A server with four response policy zones with QNAME and IP
- triggers might have a maximum QPS rate about 50% lower.
- </p>
-<p>
- Responses rewritten by RPZ are counted in the
- <span class="command"><strong>RPZRewrites</strong></span> statistics.
- </p>
-<p>
- The <span class="command"><strong>log</strong></span> clause can be used to optionally
- turn off rewrite logging for a particular response policy
- zone. By default, all rewrites are logged.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="rrl"></a>Response Rate Limiting</h4></div></div></div>
-<p>
- Excessive almost identical UDP <span class="emphasis"><em>responses</em></span>
- can be controlled by configuring a
- <span class="command"><strong>rate-limit</strong></span> clause in an
- <span class="command"><strong>options</strong></span> or <span class="command"><strong>view</strong></span> statement.
- This mechanism keeps authoritative BIND 9 from being used
- in amplifying reflection denial of service (DoS) attacks.
- Short truncated (TC=1) responses can be sent to provide
- rate-limited responses to legitimate clients within
- a range of forged, attacked IP addresses.
- Legitimate clients react to dropped or truncated response
- by retrying with UDP or with TCP respectively.
- </p>
-<p>
- This mechanism is intended for authoritative DNS servers.
- It can be used on recursive servers but can slow
- applications such as SMTP servers (mail receivers) and
- HTTP clients (web browsers) that repeatedly request the
- same domains.
- When possible, closing "open" recursive servers is better.
- </p>
-<p>
- Response rate limiting uses a "credit" or "token bucket" scheme.
- Each combination of identical response and client
- has a conceptual account that earns a specified number
- of credits every second.
- A prospective response debits its account by one.
- Responses are dropped or truncated
- while the account is negative.
- Responses are tracked within a rolling window of time
- which defaults to 15 seconds, but can be configured with
- the <span class="command"><strong>window</strong></span> option to any value from
- 1 to 3600 seconds (1 hour).
- The account cannot become more positive than
- the per-second limit
- or more negative than <span class="command"><strong>window</strong></span>
- times the per-second limit.
- When the specified number of credits for a class of
- responses is set to 0, those responses are not rate limited.
- </p>
-<p>
- The notions of "identical response" and "DNS client"
- for rate limiting are not simplistic.
- All responses to an address block are counted as if to a
- single client.
- The prefix lengths of addresses blocks are
- specified with <span class="command"><strong>ipv4-prefix-length</strong></span> (default 24)
- and <span class="command"><strong>ipv6-prefix-length</strong></span> (default 56).
- </p>
-<p>
- All non-empty responses for a valid domain name (qname)
- and record type (qtype) are identical and have a limit specified
- with <span class="command"><strong>responses-per-second</strong></span>
- (default 0 or no limit).
- All empty (NODATA) responses for a valid domain,
- regardless of query type, are identical.
- Responses in the NODATA class are limited by
- <span class="command"><strong>nodata-per-second</strong></span>
- (default <span class="command"><strong>responses-per-second</strong></span>).
- Requests for any and all undefined subdomains of a given
- valid domain result in NXDOMAIN errors, and are identical
- regardless of query type.
- They are limited by <span class="command"><strong>nxdomains-per-second</strong></span>
- (default <span class="command"><strong>responses-per-second</strong></span>).
- This controls some attacks using random names, but
- can be relaxed or turned off (set to 0)
- on servers that expect many legitimate
- NXDOMAIN responses, such as from anti-spam blacklists.
- Referrals or delegations to the server of a given
- domain are identical and are limited by
- <span class="command"><strong>referrals-per-second</strong></span>
- (default <span class="command"><strong>responses-per-second</strong></span>).
- </p>
-<p>
- Responses generated from local wildcards are counted and limited
- as if they were for the parent domain name.
- This controls flooding using random.wild.example.com.
- </p>
-<p>
- All requests that result in DNS errors other
- than NXDOMAIN, such as SERVFAIL and FORMERR, are identical
- regardless of requested name (qname) or record type (qtype).
- This controls attacks using invalid requests or distant,
- broken authoritative servers.
- By default the limit on errors is the same as the
- <span class="command"><strong>responses-per-second</strong></span> value,
- but it can be set separately with
- <span class="command"><strong>errors-per-second</strong></span>.
- </p>
-<p>
- Many attacks using DNS involve UDP requests with forged source
- addresses.
- Rate limiting prevents the use of BIND 9 to flood a network
- with responses to requests with forged source addresses,
- but could let a third party block responses to legitimate requests.
- There is a mechanism that can answer some legitimate
- requests from a client whose address is being forged in a flood.
- Setting <span class="command"><strong>slip</strong></span> to 2 (its default) causes every
- other UDP request to be answered with a small truncated (TC=1)
- response.
- The small size and reduced frequency, and so lack of
- amplification, of "slipped" responses make them unattractive
- for reflection DoS attacks.
- <span class="command"><strong>slip</strong></span> must be between 0 and 10.
- A value of 0 does not "slip":
- no truncated responses are sent due to rate limiting,
- all responses are dropped.
- A value of 1 causes every response to slip;
- values between 2 and 10 cause every n'th response to slip.
- Some error responses including REFUSED and SERVFAIL
- cannot be replaced with truncated responses and are instead
- leaked at the <span class="command"><strong>slip</strong></span> rate.
- </p>
-<p>
- (NOTE: Dropped responses from an authoritative server may
- reduce the difficulty of a third party successfully forging
- a response to a recursive resolver. The best security
- against forged responses is for authoritative operators
- to sign their zones using DNSSEC and for resolver operators
- to validate the responses. When this is not an option,
- operators who are more concerned with response integrity
- than with flood mitigation may consider setting
- <span class="command"><strong>slip</strong></span> to 1, causing all rate-limited
- responses to be truncated rather than dropped. This reduces
- the effectiveness of rate-limiting against reflection attacks.)
- </p>
-<p>
- When the approximate query per second rate exceeds
- the <span class="command"><strong>qps-scale</strong></span> value,
- then the <span class="command"><strong>responses-per-second</strong></span>,
- <span class="command"><strong>errors-per-second</strong></span>,
- <span class="command"><strong>nxdomains-per-second</strong></span> and
- <span class="command"><strong>all-per-second</strong></span> values are reduced by the
- ratio of the current rate to the <span class="command"><strong>qps-scale</strong></span> value.
- This feature can tighten defenses during attacks.
- For example, with
- <span class="command"><strong>qps-scale 250; responses-per-second 20;</strong></span> and
- a total query rate of 1000 queries/second for all queries from
- all DNS clients including via TCP,
- then the effective responses/second limit changes to
- (250/1000)*20 or 5.
- Responses sent via TCP are not limited
- but are counted to compute the query per second rate.
- </p>
-<p>
- The optional <span class="command"><strong>domain</strong></span> clause specifies
- the namespace to which rate limits will apply. It
- is possible to use different rate limits for different names
- by specifying multiple <span class="command"><strong>rate-limit</strong></span> blocks
- with different <span class="command"><strong>domain</strong></span> clauses.
- The <span class="command"><strong>rate-limit</strong></span> statement's
- <span class="command"><strong>domain</strong></span> most closely matches the query
- name will be the one applied to a given query.
- </p>
-<p>
- Rate limiters for different name spaces maintain
- separate counters: If, for example, there is a
- <span class="command"><strong>rate-limit</strong></span> statement for "com" and
- another for "example.com", queries matching "example.com"
- will not be debited against the rate limiter for "com".
- </p>
-<p>
- If a <span class="command"><strong>rate-limit</strong></span> statement does not specify a
- <span class="command"><strong>domain</strong></span>, then it applies to the root domain
- (".") and thus affects the entire DNS namespace, except those
- portions covered by other <span class="command"><strong>rate-limit</strong></span>
- statements.
- </p>
-<p>
- Communities of DNS clients can be given their own parameters or no
- rate limiting by putting
- <span class="command"><strong>rate-limit</strong></span> statements in <span class="command"><strong>view</strong></span>
- statements instead of the global <span class="command"><strong>option</strong></span>
- statement.
- A <span class="command"><strong>rate-limit</strong></span> statement in a view replaces,
- rather than supplementing, a <span class="command"><strong>rate-limit</strong></span>
- statement among the main options.
- DNS clients within a view can be exempted from rate limits
- with the <span class="command"><strong>exempt-clients</strong></span> clause.
- </p>
-<p>
- UDP responses of all kinds can be limited with the
- <span class="command"><strong>all-per-second</strong></span> phrase. This rate
- limiting is unlike the rate limiting provided by
- <span class="command"><strong>responses-per-second</strong></span>,
- <span class="command"><strong>errors-per-second</strong></span>, and
- <span class="command"><strong>nxdomains-per-second</strong></span> on a DNS server
- which are often invisible to the victim of a DNS
- reflection attack. Unless the forged requests of the
- attack are the same as the legitimate requests of the
- victim, the victim's requests are not affected. Responses
- affected by an <span class="command"><strong>all-per-second</strong></span> limit
- are always dropped; the <span class="command"><strong>slip</strong></span> value
- has no effect. An <span class="command"><strong>all-per-second</strong></span>
- limit should be at least 4 times as large as the other
- limits, because single DNS clients often send bursts
- of legitimate requests. For example, the receipt of a
- single mail message can prompt requests from an SMTP
- server for NS, PTR, A, and AAAA records as the incoming
- SMTP/TCP/IP connection is considered. The SMTP server
- can need additional NS, A, AAAA, MX, TXT, and SPF records
- as it considers the STMP <span class="command"><strong>Mail From</strong></span>
- command. Web browsers often repeatedly resolve the
- same names that are repeated in HTML &lt;IMG&gt; tags
- in a page. <span class="command"><strong>all-per-second</strong></span> is similar
- to the rate limiting offered by firewalls but often
- inferior. Attacks that justify ignoring the contents
- of DNS responses are likely to be attacks on the DNS
- server itself. They usually should be discarded before
- the DNS server spends resources make TCP connections
- or parsing DNS requests, but that rate limiting must
- be done before the DNS server sees the requests.
- </p>
-<p>
- The maximum size of the table used to track requests and
- rate limit responses is set with <span class="command"><strong>max-table-size</strong></span>.
- Each entry in the table is between 40 and 80 bytes.
- The table needs approximately as many entries as the number
- of requests received per second.
- The default is 20,000.
- To reduce the cold start of growing the table,
- <span class="command"><strong>min-table-size</strong></span> (default 500)
- can set the minimum table size.
- Enable <span class="command"><strong>rate-limit</strong></span> category logging to monitor
- expansions of the table and inform
- choices for the initial and maximum table size.
- </p>
-<p>
- Use <span class="command"><strong>log-only yes</strong></span> to test rate limiting parameters
- without actually dropping any requests.
- </p>
-<p>
- Responses dropped by rate limits are included in the
- <span class="command"><strong>RateDropped</strong></span> and <span class="command"><strong>QryDropped</strong></span>
- statistics.
- Responses that truncated by rate limits are included in
- <span class="command"><strong>RateSlipped</strong></span> and <span class="command"><strong>RespTruncated</strong></span>.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"></div>
-<p>
- Named supports NXDOMAIN redirection via two methods:
- </p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem">Redirect zone <a class="xref" href="Bv9ARM.ch06.html#zone_statement_grammar" title="zone Statement Grammar">the section called &#8220;<span class="command"><strong>zone</strong></span>
- Statement Grammar&#8221;</a>
-</li>
-<li class="listitem">Redirect namespace</li>
-</ul></div>
-<p>
- </p>
-<p>
- With both methods when named gets a NXDOMAIN response
- it examines a separate namespace to see if the NXDOMAIN
- response should be replaced with an alternative response.
- </p>
-<p>
- With a redirect zone (<span class="command"><strong>zone "." { type redirect; };</strong></span>), the
- data used to replace the NXDOMAIN is held in a single
- zone which is not part of the normal namespace. All the
- redirect information is contained in the zone; there are
- no delegations.
- </p>
-<p>
- With a redirect namespace (<span class="command"><strong>option { nxdomain-redirect
- &lt;suffix&gt; };</strong></span>) the data used to replace the
- NXDOMAIN is part of the normal namespace and is looked up by
- appending the specified suffix to the original query name.
- This roughly doubles the cache required to process NXDOMAIN
- responses as you have the original NXDOMAIN response and
- the replacement data or a NXDOMAIN indicating that there
- is no replacement.
- </p>
-<p>
- If both a redirect zone and a redirect namespace are configured,
- the redirect zone is tried first.
- </p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="server_statement_grammar"></a><span class="command"><strong>server</strong></span> Statement Grammar</h3></div></div></div>
-<pre class="programlisting"><span class="command"><strong>server</strong></span> <em class="replaceable"><code>ip_addr[/prefixlen]</code></em> {
- [<span class="optional"> bogus <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> provide-ixfr <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> request-ixfr <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> request-expire <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> request-nsid <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> send-cookie <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> edns <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> edns-udp-size <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> edns-version <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> max-udp-size <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> tcp-only <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> transfers <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> transfer-format <em class="replaceable"><code>( one-answer | many-answers )</code></em> ; ]</span>]
- [<span class="optional"> keys { <em class="replaceable"><code>key_id</code></em> }; </span>]
- [<span class="optional"> transfer-source (<em class="replaceable"><code>ip4_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> transfer-source-v6 (<em class="replaceable"><code>ip6_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> notify-source (<em class="replaceable"><code>ip4_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> notify-source-v6 (<em class="replaceable"><code>ip6_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> query-source [<span class="optional"> address ( <em class="replaceable"><code>ip_addr</code></em> | <em class="replaceable"><code>*</code></em> ) </span>]
- [<span class="optional"> port ( <em class="replaceable"><code>ip_port</code></em> | <em class="replaceable"><code>*</code></em> ) </span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> query-source-v6 [<span class="optional"> address ( <em class="replaceable"><code>ip_addr</code></em> | <em class="replaceable"><code>*</code></em> ) </span>]
- [<span class="optional"> port ( <em class="replaceable"><code>ip_port</code></em> | <em class="replaceable"><code>*</code></em> ) </span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> use-queryport-pool <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> queryport-pool-ports <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> queryport-pool-updateinterval <em class="replaceable"><code>number</code></em>; </span>]
-};
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="server_statement_definition_and_usage"></a><span class="command"><strong>server</strong></span> Statement Definition and
- Usage</h3></div></div></div>
-<p>
- The <span class="command"><strong>server</strong></span> statement defines
- characteristics
- to be associated with a remote name server. If a prefix length is
- specified, then a range of servers is covered. Only the most
- specific
- server clause applies regardless of the order in
- <code class="filename">named.conf</code>.
- </p>
-<p>
- The <span class="command"><strong>server</strong></span> statement can occur at
- the top level of the
- configuration file or inside a <span class="command"><strong>view</strong></span>
- statement.
- If a <span class="command"><strong>view</strong></span> statement contains
- one or more <span class="command"><strong>server</strong></span> statements, only
- those
- apply to the view and any top-level ones are ignored.
- If a view contains no <span class="command"><strong>server</strong></span>
- statements,
- any top-level <span class="command"><strong>server</strong></span> statements are
- used as
- defaults.
- </p>
-<p>
- If you discover that a remote server is giving out bad data,
- marking it as bogus will prevent further queries to it. The
- default
- value of <span class="command"><strong>bogus</strong></span> is <span class="command"><strong>no</strong></span>.
- </p>
-<p>
- The <span class="command"><strong>provide-ixfr</strong></span> clause determines
- whether
- the local server, acting as master, will respond with an
- incremental
- zone transfer when the given remote server, a slave, requests it.
- If set to <span class="command"><strong>yes</strong></span>, incremental transfer
- will be provided
- whenever possible. If set to <span class="command"><strong>no</strong></span>,
- all transfers
- to the remote server will be non-incremental. If not set, the
- value
- of the <span class="command"><strong>provide-ixfr</strong></span> option in the
- view or
- global options block is used as a default.
- </p>
-<p>
- The <span class="command"><strong>request-ixfr</strong></span> clause determines
- whether
- the local server, acting as a slave, will request incremental zone
- transfers from the given remote server, a master. If not set, the
- value of the <span class="command"><strong>request-ixfr</strong></span> option in
- the view or global options block is used as a default. It may
- also be set in the zone block and, if set there, it will
- override the global or view setting for that zone.
- </p>
-<p>
- IXFR requests to servers that do not support IXFR will
- automatically
- fall back to AXFR. Therefore, there is no need to manually list
- which servers support IXFR and which ones do not; the global
- default
- of <span class="command"><strong>yes</strong></span> should always work.
- The purpose of the <span class="command"><strong>provide-ixfr</strong></span> and
- <span class="command"><strong>request-ixfr</strong></span> clauses is
- to make it possible to disable the use of IXFR even when both
- master
- and slave claim to support it, for example if one of the servers
- is buggy and crashes or corrupts data when IXFR is used.
- </p>
-<p>
- The <span class="command"><strong>request-expire</strong></span> clause determines
- whether the local server, when acting as a slave, will
- request the EDNS EXPIRE value. The EDNS EXPIRE value
- indicates the remaining time before the zone data will
- expire and need to be be refreshed. This is used
- when a secondary server transfers a zone from another
- secondary server; when transferring from the primary, the
- expiration timer is set from the EXPIRE field of the SOA
- record instead.
- The default is <span class="command"><strong>yes</strong></span>.
- </p>
-<p>
- The <span class="command"><strong>edns</strong></span> clause determines whether
- the local server will attempt to use EDNS when communicating
- with the remote server. The default is <span class="command"><strong>yes</strong></span>.
- </p>
-<p>
- The <span class="command"><strong>edns-udp-size</strong></span> option sets the
- EDNS UDP size that is advertised by <span class="command"><strong>named</strong></span>
- when querying the remote server. Valid values are 512
- to 4096 bytes (values outside this range will be silently
- adjusted to the nearest value within it). This option
- is useful when you wish to advertise a different value
- to this server than the value you advertise globally,
- for example, when there is a firewall at the remote
- site that is blocking large replies. (Note: Currently,
- this sets a single UDP size for all packets sent to the
- server; <span class="command"><strong>named</strong></span> will not deviate from
- this value. This differs from the behavior of
- <span class="command"><strong>edns-udp-size</strong></span> in <span class="command"><strong>options</strong></span>
- or <span class="command"><strong>view</strong></span> statements, where it specifies
- a maximum value. The <span class="command"><strong>server</strong></span> statement
- behavior may be brought into conformance with the
- <span class="command"><strong>options/view</strong></span> behavior in future releases.)
- </p>
-<p>
- The <span class="command"><strong>edns-version</strong></span> option sets the
- maximum EDNS VERSION that will be sent to the server(s)
- by the resolver. The actual EDNS version sent is still
- subject to normal EDNS version negotiation rules (see
- RFC 6891), the maximum EDNS version supported by the
- server, and any other heuristics that indicate that a
- lower version should be sent. This option is intended
- to be used when a remote server reacts badly to a given
- EDNS version or higher; it should be set to the highest
- version the remote server is known to support. Valid
- values are 0 to 255; higher values will be silently
- adjusted. This option will not be needed until higher
- EDNS versions than 0 are in use.
- </p>
-<p>
- The <span class="command"><strong>max-udp-size</strong></span> option sets the
- maximum EDNS UDP message size <span class="command"><strong>named</strong></span>
- will send. Valid values are 512 to 4096 bytes (values
- outside this range will be silently adjusted). This
- option is useful when you know that there is a firewall
- that is blocking large replies from <span class="command"><strong>named</strong></span>.
- </p>
-<p>
- The <span class="command"><strong>tcp-only</strong></span> option sets the transport
- protocol to TCP. The default is to use the UDP transport
- and to fallback on TCP only when a truncated response
- is received.
- </p>
-<p>
- The server supports two zone transfer methods. The first, <span class="command"><strong>one-answer</strong></span>,
- uses one DNS message per resource record transferred. <span class="command"><strong>many-answers</strong></span> packs
- as many resource records as possible into a message. <span class="command"><strong>many-answers</strong></span> is
- more efficient, but is only known to be understood by <acronym class="acronym">BIND</acronym> 9, <acronym class="acronym">BIND</acronym>
- 8.x, and patched versions of <acronym class="acronym">BIND</acronym>
- 4.9.5. You can specify which method
- to use for a server with the <span class="command"><strong>transfer-format</strong></span> option.
- If <span class="command"><strong>transfer-format</strong></span> is not
- specified, the <span class="command"><strong>transfer-format</strong></span>
- specified
- by the <span class="command"><strong>options</strong></span> statement will be
- used.
- </p>
-<p><span class="command"><strong>transfers</strong></span>
- is used to limit the number of concurrent inbound zone
- transfers from the specified server. If no
- <span class="command"><strong>transfers</strong></span> clause is specified, the
- limit is set according to the
- <span class="command"><strong>transfers-per-ns</strong></span> option.
- </p>
-<p>
- The <span class="command"><strong>keys</strong></span> clause identifies a
- <span class="command"><strong>key_id</strong></span> defined by the <span class="command"><strong>key</strong></span> statement,
- to be used for transaction security (TSIG, <a class="xref" href="Bv9ARM.ch04.html#tsig" title="TSIG">the section called &#8220;TSIG&#8221;</a>)
- when talking to the remote server.
- When a request is sent to the remote server, a request signature
- will be generated using the key specified here and appended to the
- message. A request originating from the remote server is not
- required
- to be signed by this key.
- </p>
-<p>
- Only a single key per server is currently supported.
- </p>
-<p>
- The <span class="command"><strong>transfer-source</strong></span> and
- <span class="command"><strong>transfer-source-v6</strong></span> clauses specify
- the IPv4 and IPv6 source
- address to be used for zone transfer with the remote server,
- respectively.
- For an IPv4 remote server, only <span class="command"><strong>transfer-source</strong></span> can
- be specified.
- Similarly, for an IPv6 remote server, only
- <span class="command"><strong>transfer-source-v6</strong></span> can be
- specified.
- For more details, see the description of
- <span class="command"><strong>transfer-source</strong></span> and
- <span class="command"><strong>transfer-source-v6</strong></span> in
- <a class="xref" href="Bv9ARM.ch06.html#zone_transfers" title="Zone Transfers">the section called &#8220;Zone Transfers&#8221;</a>.
- </p>
-<p>
- The <span class="command"><strong>notify-source</strong></span> and
- <span class="command"><strong>notify-source-v6</strong></span> clauses specify the
- IPv4 and IPv6 source address to be used for notify
- messages sent to remote servers, respectively. For an
- IPv4 remote server, only <span class="command"><strong>notify-source</strong></span>
- can be specified. Similarly, for an IPv6 remote server,
- only <span class="command"><strong>notify-source-v6</strong></span> can be specified.
- </p>
-<p>
- The <span class="command"><strong>query-source</strong></span> and
- <span class="command"><strong>query-source-v6</strong></span> clauses specify the
- IPv4 and IPv6 source address to be used for queries
- sent to remote servers, respectively. For an IPv4
- remote server, only <span class="command"><strong>query-source</strong></span> can
- be specified. Similarly, for an IPv6 remote server,
- only <span class="command"><strong>query-source-v6</strong></span> can be specified.
- </p>
-<p>
- The <span class="command"><strong>request-nsid</strong></span> clause determines
- whether the local server will add a NSID EDNS option
- to requests sent to the server. This overrides
- <span class="command"><strong>request-nsid</strong></span> set at the view or
- option level.
- </p>
-<p>
- The <span class="command"><strong>send-cookie</strong></span> clause determines
- whether the local server will add a COOKIE EDNS option
- to requests sent to the server. This overrides
- <span class="command"><strong>send-cookie</strong></span> set at the view or
- option level. The <span class="command"><strong>named</strong></span> server may
- determine that COOKIE is not supported by the remote server
- and not add a COOKIE EDNS option to requests.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="statschannels"></a><span class="command"><strong>statistics-channels</strong></span> Statement Grammar</h3></div></div></div>
-<pre class="programlisting"><span class="command"><strong>statistics-channels</strong></span> {
- [ inet ( ip_addr | * ) [ port ip_port ]
- [ allow { <em class="replaceable"><code> address_match_list </code></em> } ]; ]
- [ inet ...; ]
-};
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="statistics_channels"></a><span class="command"><strong>statistics-channels</strong></span> Statement Definition and
- Usage</h3></div></div></div>
-<p>
- The <span class="command"><strong>statistics-channels</strong></span> statement
- declares communication channels to be used by system
- administrators to get access to statistics information of
- the name server.
- </p>
-<p>
- This statement intends to be flexible to support multiple
- communication protocols in the future, but currently only
- HTTP access is supported.
- It requires that BIND 9 be compiled with libxml2 and/or
- json-c (also known as libjson0); the
- <span class="command"><strong>statistics-channels</strong></span> statement is
- still accepted even if it is built without the library,
- but any HTTP access will fail with an error.
- </p>
-<p>
- An <span class="command"><strong>inet</strong></span> control channel is a TCP socket
- listening at the specified <span class="command"><strong>ip_port</strong></span> on the
- specified <span class="command"><strong>ip_addr</strong></span>, which can be an IPv4 or IPv6
- address. An <span class="command"><strong>ip_addr</strong></span> of <code class="literal">*</code>
- (asterisk) is
- interpreted as the IPv4 wildcard address; connections will be
- accepted on any of the system's IPv4 addresses.
- To listen on the IPv6 wildcard address,
- use an <span class="command"><strong>ip_addr</strong></span> of <code class="literal">::</code>.
- </p>
-<p>
- If no port is specified, port 80 is used for HTTP channels.
- The asterisk "<code class="literal">*</code>" cannot be used for
- <span class="command"><strong>ip_port</strong></span>.
- </p>
-<p>
- The attempt of opening a statistics channel is
- restricted by the optional <span class="command"><strong>allow</strong></span> clause.
- Connections to the statistics channel are permitted based on the
- <span class="command"><strong>address_match_list</strong></span>.
- If no <span class="command"><strong>allow</strong></span> clause is present,
- <span class="command"><strong>named</strong></span> accepts connection
- attempts from any address; since the statistics may
- contain sensitive internal information, it is highly
- recommended to restrict the source of connection requests
- appropriately.
- </p>
-<p>
- If no <span class="command"><strong>statistics-channels</strong></span> statement is present,
- <span class="command"><strong>named</strong></span> will not open any communication channels.
- </p>
-<p>
- The statistics are available in various formats and views
- depending on the URI used to access them. For example, if
- the statistics channel is configured to listen on 127.0.0.1
- port 8888, then the statistics are accessible in XML format at
- <a class="link" href="http://127.0.0.1:8888/" target="_top">http://127.0.0.1:8888/</a> or
- <a class="link" href="http://127.0.0.1:8888/xml" target="_top">http://127.0.0.1:8888/xml</a>. A CSS file is
- included which can format the XML statistics into tables
- when viewed with a stylesheet-capable browser, and into
- charts and graphs using the Google Charts API when using a
- javascript-capable browser.
- </p>
-<p>
- Applications that depend on a particular XML schema
- can request
- <a class="link" href="http://127.0.0.1:8888/xml/v2" target="_top">http://127.0.0.1:8888/xml/v2</a> for version 2
- of the statistics XML schema or
- <a class="link" href="http://127.0.0.1:8888/xml/v3" target="_top">http://127.0.0.1:8888/xml/v3</a> for version 3.
- If the requested schema is supported by the server, then
- it will respond; if not, it will return a "page not found"
- error.
- </p>
-<p>
- Broken-out subsets of the statistics can be viewed at
- <a class="link" href="http://127.0.0.1:8888/xml/v3/status" target="_top">http://127.0.0.1:8888/xml/v3/status</a>
- (server uptime and last reconfiguration time),
- <a class="link" href="http://127.0.0.1:8888/xml/v3/server" target="_top">http://127.0.0.1:8888/xml/v3/server</a>
- (server and resolver statistics),
- <a class="link" href="http://127.0.0.1:8888/xml/v3/zones" target="_top">http://127.0.0.1:8888/xml/v3/zones</a>
- (zone statistics),
- <a class="link" href="http://127.0.0.1:8888/xml/v3/net" target="_top">http://127.0.0.1:8888/xml/v3/net</a>
- (network status and socket statistics),
- <a class="link" href="http://127.0.0.1:8888/xml/v3/mem" target="_top">http://127.0.0.1:8888/xml/v3/mem</a>
- (memory manager statistics),
- <a class="link" href="http://127.0.0.1:8888/xml/v3/tasks" target="_top">http://127.0.0.1:8888/xml/v3/tasks</a>
- (task manager statistics), and
- <a class="link" href="http://127.0.0.1:8888/xml/v3/traffic" target="_top">http://127.0.0.1:8888/xml/v3/traffic</a>
- (traffic sizes).
- </p>
-<p>
- The full set of statistics can also be read in JSON format at
- <a class="link" href="http://127.0.0.1:8888/json" target="_top">http://127.0.0.1:8888/json</a>,
- with the broken-out subsets at
- <a class="link" href="http://127.0.0.1:8888/json/v1/status" target="_top">http://127.0.0.1:8888/json/v1/status</a>
- (server uptime and last reconfiguration time),
- <a class="link" href="http://127.0.0.1:8888/json/v1/server" target="_top">http://127.0.0.1:8888/json/v1/server</a>
- (server and resolver statistics),
- <a class="link" href="http://127.0.0.1:8888/json/v1/zones" target="_top">http://127.0.0.1:8888/json/v1/zones</a>
- (zone statistics),
- <a class="link" href="http://127.0.0.1:8888/json/v1/net" target="_top">http://127.0.0.1:8888/json/v1/net</a>
- (network status and socket statistics),
- <a class="link" href="http://127.0.0.1:8888/json/v1/mem" target="_top">http://127.0.0.1:8888/json/v1/mem</a>
- (memory manager statistics),
- <a class="link" href="http://127.0.0.1:8888/json/v1/tasks" target="_top">http://127.0.0.1:8888/json/v1/tasks</a>
- (task manager statistics), and
- <a class="link" href="http://127.0.0.1:8888/json/v1/traffic" target="_top">http://127.0.0.1:8888/json/v1/traffic</a>
- (traffic sizes).
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="trusted-keys"></a><span class="command"><strong>trusted-keys</strong></span> Statement Grammar</h3></div></div></div>
-<pre class="programlisting"><span class="command"><strong>trusted-keys</strong></span> {
- <em class="replaceable"><code>string</code></em> <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>string</code></em> ;
- [<span class="optional"> <em class="replaceable"><code>string</code></em> <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>string</code></em> ; [<span class="optional">...</span>]</span>]
-};
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="trusted_keys"></a><span class="command"><strong>trusted-keys</strong></span> Statement Definition
- and Usage</h3></div></div></div>
-<p>
- The <span class="command"><strong>trusted-keys</strong></span> statement defines
- DNSSEC security roots. DNSSEC is described in <a class="xref" href="Bv9ARM.ch04.html#DNSSEC" title="DNSSEC">the section called &#8220;DNSSEC&#8221;</a>. A security root is defined when the
- public key for a non-authoritative zone is known, but
- cannot be securely obtained through DNS, either because
- it is the DNS root zone or because its parent zone is
- unsigned. Once a key has been configured as a trusted
- key, it is treated as if it had been validated and
- proven secure. The resolver attempts DNSSEC validation
- on all DNS data in subdomains of a security root.
- </p>
-<p>
- All keys (and corresponding zones) listed in
- <span class="command"><strong>trusted-keys</strong></span> are deemed to exist regardless
- of what parent zones say. Similarly for all keys listed in
- <span class="command"><strong>trusted-keys</strong></span> only those keys are
- used to validate the DNSKEY RRset. The parent's DS RRset
- will not be used.
- </p>
-<p>
- The <span class="command"><strong>trusted-keys</strong></span> statement can contain
- multiple key entries, each consisting of the key's
- domain name, flags, protocol, algorithm, and the Base-64
- representation of the key data.
- Spaces, tabs, newlines and carriage returns are ignored
- in the key data, so the configuration may be split up into
- multiple lines.
- </p>
-<p>
- <span class="command"><strong>trusted-keys</strong></span> may be set at the top level
- of <code class="filename">named.conf</code> or within a view. If it is
- set in both places, they are additive: keys defined at the top
- level are inherited by all views, but keys defined in a view
- are only used within that view.
- </p>
-<p>
- Validation below specified names can be temporarily disabled
- by using <span class="command"><strong>rndc nta</strong></span>.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="managed_keys"></a><span class="command"><strong>managed-keys</strong></span> Statement Grammar</h3></div></div></div>
-<pre class="programlisting"><span class="command"><strong>managed-keys</strong></span> {
- <em class="replaceable"><code>name</code></em> initial-key <em class="replaceable"><code>flags</code></em> <em class="replaceable"><code>protocol</code></em> <em class="replaceable"><code>algorithm</code></em> <em class="replaceable"><code>key-data</code></em> ;
- [<span class="optional"> <em class="replaceable"><code>name</code></em> initial-key <em class="replaceable"><code>flags</code></em> <em class="replaceable"><code>protocol</code></em> <em class="replaceable"><code>algorithm</code></em> <em class="replaceable"><code>key-data</code></em> ; [<span class="optional">...</span>]</span>]
-};
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="managed-keys"></a><span class="command"><strong>managed-keys</strong></span> Statement Definition
- and Usage</h3></div></div></div>
-<p>
- The <span class="command"><strong>managed-keys</strong></span> statement, like
- <span class="command"><strong>trusted-keys</strong></span>, defines DNSSEC
- security roots. The difference is that
- <span class="command"><strong>managed-keys</strong></span> can be kept up to date
- automatically, without intervention from the resolver
- operator.
- </p>
-<p>
- Suppose, for example, that a zone's key-signing
- key was compromised, and the zone owner had to revoke and
- replace the key. A resolver which had the old key in a
- <span class="command"><strong>trusted-keys</strong></span> statement would be
- unable to validate this zone any longer; it would
- reply with a SERVFAIL response code. This would
- continue until the resolver operator had updated the
- <span class="command"><strong>trusted-keys</strong></span> statement with the new key.
- </p>
-<p>
- If, however, the zone were listed in a
- <span class="command"><strong>managed-keys</strong></span> statement instead, then the
- zone owner could add a "stand-by" key to the zone in advance.
- <span class="command"><strong>named</strong></span> would store the stand-by key, and
- when the original key was revoked, <span class="command"><strong>named</strong></span>
- would be able to transition smoothly to the new key. It would
- also recognize that the old key had been revoked, and cease
- using that key to validate answers, minimizing the damage that
- the compromised key could do.
- </p>
-<p>
- A <span class="command"><strong>managed-keys</strong></span> statement contains a list of
- the keys to be managed, along with information about how the
- keys are to be initialized for the first time. The only
- initialization method currently supported (as of
- <acronym class="acronym">BIND</acronym> 9.7.0) is <code class="literal">initial-key</code>.
- This means the <span class="command"><strong>managed-keys</strong></span> statement must
- contain a copy of the initializing key. (Future releases may
- allow keys to be initialized by other methods, eliminating this
- requirement.)
- </p>
-<p>
- Consequently, a <span class="command"><strong>managed-keys</strong></span> statement
- appears similar to a <span class="command"><strong>trusted-keys</strong></span>, differing
- in the presence of the second field, containing the keyword
- <code class="literal">initial-key</code>. The difference is, whereas the
- keys listed in a <span class="command"><strong>trusted-keys</strong></span> continue to be
- trusted until they are removed from
- <code class="filename">named.conf</code>, an initializing key listed
- in a <span class="command"><strong>managed-keys</strong></span> statement is only trusted
- <span class="emphasis"><em>once</em></span>: for as long as it takes to load the
- managed key database and start the RFC 5011 key maintenance
- process.
- </p>
-<p>
- The first time <span class="command"><strong>named</strong></span> runs with a managed key
- configured in <code class="filename">named.conf</code>, it fetches the
- DNSKEY RRset directly from the zone apex, and validates it
- using the key specified in the <span class="command"><strong>managed-keys</strong></span>
- statement. If the DNSKEY RRset is validly signed, then it is
- used as the basis for a new managed keys database.
- </p>
-<p>
- From that point on, whenever <span class="command"><strong>named</strong></span> runs, it
- sees the <span class="command"><strong>managed-keys</strong></span> statement, checks to
- make sure RFC 5011 key maintenance has already been initialized
- for the specified domain, and if so, it simply moves on. The
- key specified in the <span class="command"><strong>managed-keys</strong></span> is not
- used to validate answers; it has been superseded by the key or
- keys stored in the managed keys database.
- </p>
-<p>
- The next time <span class="command"><strong>named</strong></span> runs after a name
- has been <span class="emphasis"><em>removed</em></span> from the
- <span class="command"><strong>managed-keys</strong></span> statement, the corresponding
- zone will be removed from the managed keys database,
- and RFC 5011 key maintenance will no longer be used for that
- domain.
- </p>
-<p>
- <span class="command"><strong>named</strong></span> only maintains a single managed keys
- database; consequently, unlike <span class="command"><strong>trusted-keys</strong></span>,
- <span class="command"><strong>managed-keys</strong></span> may only be set at the top
- level of <code class="filename">named.conf</code>, not within a view.
- </p>
-<p>
- In the current implementation, the managed keys database is
- stored as a master-format zone file called
- <code class="filename">managed-keys.bind</code>. When the key database
- is changed, the zone is updated. As with any other dynamic
- zone, changes will be written into a journal file,
- <code class="filename">managed-keys.bind.jnl</code>. They are committed
- to the master file as soon as possible afterward; in the case
- of the managed key database, this will usually occur within 30
- seconds. So, whenever <span class="command"><strong>named</strong></span> is using
- automatic key maintenance, those two files can be expected to
- exist in the working directory. (For this reason among others,
- the working directory should be always be writable by
- <span class="command"><strong>named</strong></span>.)
- </p>
-<p>
- If the <span class="command"><strong>dnssec-validation</strong></span> option is
- set to <strong class="userinput"><code>auto</code></strong>, <span class="command"><strong>named</strong></span>
- will automatically initialize a managed key for the
- root zone. Similarly, if the <span class="command"><strong>dnssec-lookaside</strong></span>
- option is set to <strong class="userinput"><code>auto</code></strong>,
- <span class="command"><strong>named</strong></span> will automatically initialize
- a managed key for the zone <code class="literal">dlv.isc.org</code>.
- In both cases, the key that is used to initialize the key
- maintenance process is built into <span class="command"><strong>named</strong></span>,
- and can be overridden from <span class="command"><strong>bindkeys-file</strong></span>.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="view_statement_grammar"></a><span class="command"><strong>view</strong></span> Statement Grammar</h3></div></div></div>
-<pre class="programlisting"><span class="command"><strong>view</strong></span> <em class="replaceable"><code>view_name</code></em>
- [<span class="optional"><em class="replaceable"><code>class</code></em></span>] {
- match-clients { <em class="replaceable"><code>address_match_list</code></em> };
- match-destinations { <em class="replaceable"><code>address_match_list</code></em> };
- match-recursive-only <em class="replaceable"><code>yes_or_no</code></em> ;
- [<span class="optional"> <em class="replaceable"><code>view_option</code></em>; ...</span>]
- [<span class="optional"> <em class="replaceable"><code>zone_statement</code></em>; ...</span>]
-};
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="view_statement"></a><span class="command"><strong>view</strong></span> Statement Definition and Usage</h3></div></div></div>
-<p>
- The <span class="command"><strong>view</strong></span> statement is a powerful
- feature
- of <acronym class="acronym">BIND</acronym> 9 that lets a name server
- answer a DNS query differently
- depending on who is asking. It is particularly useful for
- implementing
- split DNS setups without having to run multiple servers.
- </p>
-<p>
- Each <span class="command"><strong>view</strong></span> statement defines a view
- of the
- DNS namespace that will be seen by a subset of clients. A client
- matches
- a view if its source IP address matches the
- <code class="varname">address_match_list</code> of the view's
- <span class="command"><strong>match-clients</strong></span> clause and its
- destination IP address matches
- the <code class="varname">address_match_list</code> of the
- view's
- <span class="command"><strong>match-destinations</strong></span> clause. If not
- specified, both
- <span class="command"><strong>match-clients</strong></span> and <span class="command"><strong>match-destinations</strong></span>
- default to matching all addresses. In addition to checking IP
- addresses
- <span class="command"><strong>match-clients</strong></span> and <span class="command"><strong>match-destinations</strong></span>
- can also take <span class="command"><strong>keys</strong></span> which provide an
- mechanism for the
- client to select the view. A view can also be specified
- as <span class="command"><strong>match-recursive-only</strong></span>, which
- means that only recursive
- requests from matching clients will match that view.
- The order of the <span class="command"><strong>view</strong></span> statements is
- significant &#8212;
- a client request will be resolved in the context of the first
- <span class="command"><strong>view</strong></span> that it matches.
- </p>
-<p>
- Zones defined within a <span class="command"><strong>view</strong></span>
- statement will
- only be accessible to clients that match the <span class="command"><strong>view</strong></span>.
- By defining a zone of the same name in multiple views, different
- zone data can be given to different clients, for example,
- "internal"
- and "external" clients in a split DNS setup.
- </p>
-<p>
- Many of the options given in the <span class="command"><strong>options</strong></span> statement
- can also be used within a <span class="command"><strong>view</strong></span>
- statement, and then
- apply only when resolving queries with that view. When no
- view-specific
- value is given, the value in the <span class="command"><strong>options</strong></span> statement
- is used as a default. Also, zone options can have default values
- specified
- in the <span class="command"><strong>view</strong></span> statement; these
- view-specific defaults
- take precedence over those in the <span class="command"><strong>options</strong></span> statement.
- </p>
-<p>
- Views are class specific. If no class is given, class IN
- is assumed. Note that all non-IN views must contain a hint zone,
- since only the IN class has compiled-in default hints.
- </p>
-<p>
- If there are no <span class="command"><strong>view</strong></span> statements in
- the config
- file, a default view that matches any client is automatically
- created
- in class IN. Any <span class="command"><strong>zone</strong></span> statements
- specified on
- the top level of the configuration file are considered to be part
- of
- this default view, and the <span class="command"><strong>options</strong></span>
- statement will
- apply to the default view. If any explicit <span class="command"><strong>view</strong></span>
- statements are present, all <span class="command"><strong>zone</strong></span>
- statements must
- occur inside <span class="command"><strong>view</strong></span> statements.
- </p>
-<p>
- Here is an example of a typical split DNS setup implemented
- using <span class="command"><strong>view</strong></span> statements:
- </p>
-<pre class="programlisting">view "internal" {
- // This should match our internal networks.
- match-clients { 10.0.0.0/8; };
-
- // Provide recursive service to internal
- // clients only.
- recursion yes;
-
- // Provide a complete view of the example.com
- // zone including addresses of internal hosts.
- zone "example.com" {
- type master;
- file "example-internal.db";
- };
-};
-
-view "external" {
- // Match all clients not matched by the
- // previous view.
- match-clients { any; };
-
- // Refuse recursive service to external clients.
- recursion no;
-
- // Provide a restricted view of the example.com
- // zone containing only publicly accessible hosts.
- zone "example.com" {
- type master;
- file "example-external.db";
- };
-};
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="zone_statement_grammar"></a><span class="command"><strong>zone</strong></span>
- Statement Grammar</h3></div></div></div>
-<pre class="programlisting"><span class="command"><strong>zone</strong></span> <em class="replaceable"><code>zone_name</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em></span>] {
- type master;
- [<span class="optional"> allow-query { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> allow-query-on { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> allow-transfer { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> allow-update { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> update-check-ksk <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> dnssec-dnskey-kskonly <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> dnssec-loadkeys-interval <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> update-policy <em class="replaceable"><code>local</code></em> | { <em class="replaceable"><code>update_policy_rule</code></em> [<span class="optional">...</span>] }; </span>]
- [<span class="optional"> also-notify [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] { ( <em class="replaceable"><code>masters_list</code></em> | <em class="replaceable"><code>ip_addr</code></em>
- [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>]
- [<span class="optional">key <em class="replaceable"><code>key</code></em></span>] ) ; [<span class="optional">...</span>] }; </span>]
- [<span class="optional"> check-names (<code class="constant">warn</code>|<code class="constant">fail</code>|<code class="constant">ignore</code>) ; </span>]
- [<span class="optional"> check-mx (<code class="constant">warn</code>|<code class="constant">fail</code>|<code class="constant">ignore</code>) ; </span>]
- [<span class="optional"> check-wildcard <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> check-spf ( <em class="replaceable"><code>warn</code></em> | <em class="replaceable"><code>ignore</code></em> ); </span>]
- [<span class="optional"> check-integrity <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> dialup <em class="replaceable"><code>dialup_option</code></em> ; </span>]
- [<span class="optional"> file <em class="replaceable"><code>string</code></em> ; </span>]
- [<span class="optional"> masterfile-format (<code class="constant">text</code>|<code class="constant">raw</code>|<code class="constant">map</code>) ; </span>]
- [<span class="optional"> journal <em class="replaceable"><code>string</code></em> ; </span>]
- [<span class="optional"> max-journal-size <em class="replaceable"><code>size_spec</code></em>; </span>]
- [<span class="optional"> forward (<code class="constant">only</code>|<code class="constant">first</code>) ; </span>]
- [<span class="optional"> forwarders { [<span class="optional"> <em class="replaceable"><code>ip_addr</code></em> [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; ... </span>] }; </span>]
- [<span class="optional"> ixfr-base <em class="replaceable"><code>string</code></em> ; </span>]
- [<span class="optional"> ixfr-from-differences <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> ixfr-tmp-file <em class="replaceable"><code>string</code></em> ; </span>]
- [<span class="optional"> maintain-ixfr-base <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> max-ixfr-log-size <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> max-transfer-idle-out <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> max-transfer-time-out <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> notify <em class="replaceable"><code>yes_or_no</code></em> | <em class="replaceable"><code>explicit</code></em> | <em class="replaceable"><code>master-only</code></em> ; </span>]
- [<span class="optional"> notify-delay <em class="replaceable"><code>seconds</code></em> ; </span>]
- [<span class="optional"> notify-to-soa <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> pubkey <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>string</code></em> ; </span>]
- [<span class="optional"> notify-source (<em class="replaceable"><code>ip4_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> notify-source-v6 (<em class="replaceable"><code>ip6_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> zone-statistics <em class="replaceable"><code>full</code></em> | <em class="replaceable"><code>terse</code></em> | <em class="replaceable"><code>none</code></em>; </span>]
- [<span class="optional"> sig-validity-interval <em class="replaceable"><code>number</code></em> [<span class="optional"><em class="replaceable"><code>number</code></em></span>] ; </span>]
- [<span class="optional"> sig-signing-nodes <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> sig-signing-signatures <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> sig-signing-type <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> database <em class="replaceable"><code>string</code></em> ; </span>]
- [<span class="optional"> min-refresh-time <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> max-refresh-time <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> min-retry-time <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> max-retry-time <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> key-directory <em class="replaceable"><code>path_name</code></em>; </span>]
- [<span class="optional"> auto-dnssec <code class="constant">allow</code>|<code class="constant">maintain</code>|<code class="constant">off</code>; </span>]
- [<span class="optional"> inline-signing <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> zero-no-soa-ttl <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> serial-update-method <code class="constant">increment</code>|<code class="constant">unixtime</code>|<code class="constant">date</code>; </span>]
- [<span class="optional"> max-zone-ttl <em class="replaceable"><code>number</code></em> ; </span>]
-};
-
-zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em></span>] {
- type slave;
- [<span class="optional"> allow-notify { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> allow-query { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> allow-query-on { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> allow-transfer { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> allow-update-forwarding { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> dnssec-update-mode ( <em class="replaceable"><code>maintain</code></em> | <em class="replaceable"><code>no-resign</code></em> ); </span>]
- [<span class="optional"> update-check-ksk <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> dnssec-dnskey-kskonly <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> dnssec-loadkeys-interval <em class="replaceable"><code>number</code></em>; </span>]
- [<span class="optional"> dnssec-secure-to-insecure <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> try-tcp-refresh <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> also-notify [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] { ( <em class="replaceable"><code>masters_list</code></em> | <em class="replaceable"><code>ip_addr</code></em>
- [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>]
- [<span class="optional">key <em class="replaceable"><code>key</code></em></span>] ) ; [<span class="optional">...</span>] }; </span>]
- [<span class="optional"> check-names (<code class="constant">warn</code>|<code class="constant">fail</code>|<code class="constant">ignore</code>) ; </span>]
- [<span class="optional"> dialup <em class="replaceable"><code>dialup_option</code></em> ; </span>]
- [<span class="optional"> file <em class="replaceable"><code>string</code></em> ; </span>]
- [<span class="optional"> masterfile-format (<code class="constant">text</code>|<code class="constant">raw</code>|<code class="constant">map</code>) ; </span>]
- [<span class="optional"> journal <em class="replaceable"><code>string</code></em> ; </span>]
- [<span class="optional"> max-journal-size <em class="replaceable"><code>size_spec</code></em>; </span>]
- [<span class="optional"> forward (<code class="constant">only</code>|<code class="constant">first</code>) ; </span>]
- [<span class="optional"> forwarders { [<span class="optional"> <em class="replaceable"><code>ip_addr</code></em> [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; ... </span>] }; </span>]
- [<span class="optional"> ixfr-base <em class="replaceable"><code>string</code></em> ; </span>]
- [<span class="optional"> ixfr-from-differences <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> ixfr-tmp-file <em class="replaceable"><code>string</code></em> ; </span>]
- [<span class="optional"> request-ixfr <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> maintain-ixfr-base <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> masters [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] { ( <em class="replaceable"><code>masters_list</code></em> | <em class="replaceable"><code>ip_addr</code></em>
- [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>]
- [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>]
- [<span class="optional">key <em class="replaceable"><code>key</code></em></span>] ) ; [<span class="optional">...</span>] }; </span>]
- [<span class="optional"> max-ixfr-log-size <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> max-transfer-idle-in <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> max-transfer-idle-out <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> max-transfer-time-in <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> max-transfer-time-out <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> notify <em class="replaceable"><code>yes_or_no</code></em> | <em class="replaceable"><code>explicit</code></em> | <em class="replaceable"><code>master-only</code></em> ; </span>]
- [<span class="optional"> notify-delay <em class="replaceable"><code>seconds</code></em> ; </span>]
- [<span class="optional"> notify-to-soa <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> pubkey <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>string</code></em> ; </span>]
- [<span class="optional"> transfer-source (<em class="replaceable"><code>ip4_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> transfer-source-v6 (<em class="replaceable"><code>ip6_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> alt-transfer-source (<em class="replaceable"><code>ip4_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> alt-transfer-source-v6 (<em class="replaceable"><code>ip6_addr</code></em> | <code class="constant">*</code>)
- [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>]
- [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> use-alt-transfer-source <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> notify-source (<em class="replaceable"><code>ip4_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> notify-source-v6 (<em class="replaceable"><code>ip6_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> zone-statistics <em class="replaceable"><code>full</code></em> | <em class="replaceable"><code>terse</code></em> | <em class="replaceable"><code>none</code></em>; </span>]
- [<span class="optional"> sig-validity-interval <em class="replaceable"><code>number</code></em> [<span class="optional"><em class="replaceable"><code>number</code></em></span>] ; </span>]
- [<span class="optional"> sig-signing-nodes <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> sig-signing-signatures <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> sig-signing-type <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> database <em class="replaceable"><code>string</code></em> ; </span>]
- [<span class="optional"> min-refresh-time <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> max-refresh-time <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> min-retry-time <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> max-retry-time <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> key-directory <em class="replaceable"><code>path_name</code></em>; </span>]
- [<span class="optional"> auto-dnssec <code class="constant">allow</code>|<code class="constant">maintain</code>|<code class="constant">off</code>; </span>]
- [<span class="optional"> inline-signing <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> multi-master <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> zero-no-soa-ttl <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
-};
-
-zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em></span>] {
- type hint;
- file <em class="replaceable"><code>string</code></em> ;
- [<span class="optional"> delegation-only <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> check-names (<code class="constant">warn</code>|<code class="constant">fail</code>|<code class="constant">ignore</code>) ; </span>] // Not Implemented.
-};
-
-zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em></span>] {
- type stub;
- [<span class="optional"> allow-query { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> allow-query-on { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> check-names (<code class="constant">warn</code>|<code class="constant">fail</code>|<code class="constant">ignore</code>) ; </span>]
- [<span class="optional"> dialup <em class="replaceable"><code>dialup_option</code></em> ; </span>]
- [<span class="optional"> delegation-only <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> file <em class="replaceable"><code>string</code></em> ; </span>]
- [<span class="optional"> masterfile-format (<code class="constant">text</code>|<code class="constant">raw</code>|<code class="constant">map</code>) ; </span>]
- [<span class="optional"> forward (<code class="constant">only</code>|<code class="constant">first</code>) ; </span>]
- [<span class="optional"> forwarders { [<span class="optional"> <em class="replaceable"><code>ip_addr</code></em> [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; ... </span>] }; </span>]
- [<span class="optional"> masters [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] { ( <em class="replaceable"><code>masters_list</code></em> | <em class="replaceable"><code>ip_addr</code></em>
- [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>]
- [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>]
- [<span class="optional">key <em class="replaceable"><code>key</code></em></span>] ) ; [<span class="optional">...</span>] }; </span>]
- [<span class="optional"> max-transfer-idle-in <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> max-transfer-time-in <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> pubkey <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>string</code></em> ; </span>]
- [<span class="optional"> transfer-source (<em class="replaceable"><code>ip4_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> transfer-source-v6 (<em class="replaceable"><code>ip6_addr</code></em> | <code class="constant">*</code>)
- [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> alt-transfer-source (<em class="replaceable"><code>ip4_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> alt-transfer-source-v6 (<em class="replaceable"><code>ip6_addr</code></em> | <code class="constant">*</code>)
- [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; </span>]
- [<span class="optional"> use-alt-transfer-source <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> zone-statistics <em class="replaceable"><code>full</code></em> | <em class="replaceable"><code>terse</code></em> | <em class="replaceable"><code>none</code></em>; </span>]
- [<span class="optional"> database <em class="replaceable"><code>string</code></em> ; </span>]
- [<span class="optional"> min-refresh-time <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> max-refresh-time <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> min-retry-time <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> max-retry-time <em class="replaceable"><code>number</code></em> ; </span>]
- [<span class="optional"> multi-master <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
-};
-
-zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em></span>] {
- type static-stub;
- [<span class="optional"> allow-query { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> server-addresses { [<span class="optional"> <em class="replaceable"><code>ip_addr</code></em> ; ... </span>] }; </span>]
- [<span class="optional"> server-names { [<span class="optional"> <em class="replaceable"><code>namelist</code></em> </span>] }; </span>]
- [<span class="optional"> zone-statistics <em class="replaceable"><code>full</code></em> | <em class="replaceable"><code>terse</code></em> | <em class="replaceable"><code>none</code></em>; </span>]
-};
-
-zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em></span>] {
- type forward;
- [<span class="optional"> forward (<code class="constant">only</code>|<code class="constant">first</code>) ; </span>]
- [<span class="optional"> forwarders { [<span class="optional"> <em class="replaceable"><code>ip_addr</code></em> [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>] ; ... </span>] }; </span>]
- [<span class="optional"> delegation-only <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
-};
-
-zone <em class="replaceable"><code>"."</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em></span>] {
- type redirect;
- file <em class="replaceable"><code>string</code></em> ;
- [<span class="optional"> masterfile-format (<code class="constant">text</code>|<code class="constant">raw</code>|<code class="constant">map</code>) ; </span>]
- [<span class="optional"> allow-query { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> max-zone-ttl <em class="replaceable"><code>number</code></em> ; </span>]
-};
-
-zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em></span>] {
- type delegation-only;
-};
-
-zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em></span>] {
- [<span class="optional"> in-view <em class="replaceable"><code>string</code></em> ; </span>]
-};
-
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="zone_statement"></a><span class="command"><strong>zone</strong></span> Statement Definition and Usage</h3></div></div></div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="zone_types"></a>Zone Types</h4></div></div></div>
-<p>
- The <span class="command"><strong>type</strong></span> keyword is required
- for the <span class="command"><strong>zone</strong></span> configuration unless
- it is an <span class="command"><strong>in-view</strong></span> configuration. Its
- acceptable values include: <code class="varname">delegation-only</code>,
- <code class="varname">forward</code>, <code class="varname">hint</code>,
- <code class="varname">master</code>, <code class="varname">redirect</code>,
- <code class="varname">slave</code>, <code class="varname">static-stub</code>,
- and <code class="varname">stub</code>.
- </p>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col class="1">
-<col width="4.017in" class="2">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p>
- <code class="varname">master</code>
- </p>
- </td>
-<td>
- <p>
- The server has a master copy of the data
- for the zone and will be able to provide authoritative
- answers for
- it.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">slave</code>
- </p>
- </td>
-<td>
- <p>
- A slave zone is a replica of a master
- zone. The <span class="command"><strong>masters</strong></span> list
- specifies one or more IP addresses
- of master servers that the slave contacts to update
- its copy of the zone.
- Masters list elements can also be names of other
- masters lists.
- By default, transfers are made from port 53 on the
- servers; this can
- be changed for all servers by specifying a port number
- before the
- list of IP addresses, or on a per-server basis after
- the IP address.
- Authentication to the master can also be done with
- per-server TSIG keys.
- If a file is specified, then the
- replica will be written to this file whenever the zone
- is changed,
- and reloaded from this file on a server restart. Use
- of a file is
- recommended, since it often speeds server startup and
- eliminates
- a needless waste of bandwidth. Note that for large
- numbers (in the
- tens or hundreds of thousands) of zones per server, it
- is best to
- use a two-level naming scheme for zone filenames. For
- example,
- a slave server for the zone <code class="literal">example.com</code> might place
- the zone contents into a file called
- <code class="filename">ex/example.com</code> where <code class="filename">ex/</code> is
- just the first two letters of the zone name. (Most
- operating systems
- behave very slowly if you put 100000 files into
- a single directory.)
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">stub</code>
- </p>
- </td>
-<td>
- <p>
- A stub zone is similar to a slave zone,
- except that it replicates only the NS records of a
- master zone instead
- of the entire zone. Stub zones are not a standard part
- of the DNS;
- they are a feature specific to the <acronym class="acronym">BIND</acronym> implementation.
- </p>
-
- <p>
- Stub zones can be used to eliminate the need for glue
- NS record
- in a parent zone at the expense of maintaining a stub
- zone entry and
- a set of name server addresses in <code class="filename">named.conf</code>.
- This usage is not recommended for new configurations,
- and BIND 9
- supports it only in a limited way.
- In <acronym class="acronym">BIND</acronym> 4/8, zone
- transfers of a parent zone
- included the NS records from stub children of that
- zone. This meant
- that, in some cases, users could get away with
- configuring child stubs
- only in the master server for the parent zone. <acronym class="acronym">BIND</acronym>
- 9 never mixes together zone data from different zones
- in this
- way. Therefore, if a <acronym class="acronym">BIND</acronym> 9 master serving a parent
- zone has child stub zones configured, all the slave
- servers for the
- parent zone also need to have the same child stub
- zones
- configured.
- </p>
-
- <p>
- Stub zones can also be used as a way of forcing the
- resolution
- of a given domain to use a particular set of
- authoritative servers.
- For example, the caching name servers on a private
- network using
- RFC1918 addressing may be configured with stub zones
- for
- <code class="literal">10.in-addr.arpa</code>
- to use a set of internal name servers as the
- authoritative
- servers for that domain.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">static-stub</code>
- </p>
- </td>
-<td>
- <p>
- A static-stub zone is similar to a stub zone
- with the following exceptions:
- the zone data is statically configured, rather
- than transferred from a master server;
- when recursion is necessary for a query that
- matches a static-stub zone, the locally
- configured data (nameserver names and glue addresses)
- is always used even if different authoritative
- information is cached.
- </p>
- <p>
- Zone data is configured via the
- <span class="command"><strong>server-addresses</strong></span> and
- <span class="command"><strong>server-names</strong></span> zone options.
- </p>
- <p>
- The zone data is maintained in the form of NS
- and (if necessary) glue A or AAAA RRs
- internally, which can be seen by dumping zone
- databases by <span class="command"><strong>rndc dumpdb -all</strong></span>.
- The configured RRs are considered local configuration
- parameters rather than public data.
- Non recursive queries (i.e., those with the RD
- bit off) to a static-stub zone are therefore
- prohibited and will be responded with REFUSED.
- </p>
- <p>
- Since the data is statically configured, no
- zone maintenance action takes place for a static-stub
- zone.
- For example, there is no periodic refresh
- attempt, and an incoming notify message
- will be rejected with an rcode of NOTAUTH.
- </p>
- <p>
- Each static-stub zone is configured with
- internally generated NS and (if necessary)
- glue A or AAAA RRs
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">forward</code>
- </p>
- </td>
-<td>
- <p>
- A "forward zone" is a way to configure
- forwarding on a per-domain basis. A <span class="command"><strong>zone</strong></span> statement
- of type <span class="command"><strong>forward</strong></span> can
- contain a <span class="command"><strong>forward</strong></span>
- and/or <span class="command"><strong>forwarders</strong></span>
- statement,
- which will apply to queries within the domain given by
- the zone
- name. If no <span class="command"><strong>forwarders</strong></span>
- statement is present or
- an empty list for <span class="command"><strong>forwarders</strong></span> is given, then no
- forwarding will be done for the domain, canceling the
- effects of
- any forwarders in the <span class="command"><strong>options</strong></span> statement. Thus
- if you want to use this type of zone to change the
- behavior of the
- global <span class="command"><strong>forward</strong></span> option
- (that is, "forward first"
- to, then "forward only", or vice versa, but want to
- use the same
- servers as set globally) you need to re-specify the
- global forwarders.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">hint</code>
- </p>
- </td>
-<td>
- <p>
- The initial set of root name servers is
- specified using a "hint zone". When the server starts
- up, it uses
- the root hints to find a root name server and get the
- most recent
- list of root name servers. If no hint zone is
- specified for class
- IN, the server uses a compiled-in default set of root
- servers hints.
- Classes other than IN have no built-in defaults hints.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">redirect</code>
- </p>
- </td>
-<td>
- <p>
- Redirect zones are used to provide answers to
- queries when normal resolution would result in
- NXDOMAIN being returned.
- Only one redirect zone is supported
- per view. <span class="command"><strong>allow-query</strong></span> can be
- used to restrict which clients see these answers.
- </p>
- <p>
- If the client has requested DNSSEC records (DO=1) and
- the NXDOMAIN response is signed then no substitution
- will occur.
- </p>
- <p>
- To redirect all NXDOMAIN responses to
- 100.100.100.2 and
- 2001:ffff:ffff::100.100.100.2, one would
- configure a type redirect zone named ".",
- with the zone file containing wildcard records
- that point to the desired addresses:
- <code class="literal">"*. IN A 100.100.100.2"</code>
- and
- <code class="literal">"*. IN AAAA 2001:ffff:ffff::100.100.100.2"</code>.
- </p>
- <p>
- To redirect all Spanish names (under .ES) one
- would use similar entries but with the names
- "*.ES." instead of "*.". To redirect all
- commercial Spanish names (under COM.ES) one
- would use wildcard entries called "*.COM.ES.".
- </p>
- <p>
- Note that the redirect zone supports all
- possible types; it is not limited to A and
- AAAA records.
- </p>
- <p>
- Because redirect zones are not referenced
- directly by name, they are not kept in the
- zone lookup table with normal master and slave
- zones. Consequently, it is not currently possible
- to use
- <span class="command"><strong>rndc reload
- <em class="replaceable"><code>zonename</code></em></strong></span>
- to reload a redirect zone. However, when using
- <span class="command"><strong>rndc reload</strong></span> without specifying
- a zone name, redirect zones will be reloaded along
- with other zones.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">delegation-only</code>
- </p>
- </td>
-<td>
- <p>
- This is used to enforce the delegation-only
- status of infrastructure zones (e.g. COM,
- NET, ORG). Any answer that is received
- without an explicit or implicit delegation
- in the authority section will be treated
- as NXDOMAIN. This does not apply to the
- zone apex. This should not be applied to
- leaf zones.
- </p>
- <p>
- <code class="varname">delegation-only</code> has no
- effect on answers received from forwarders.
- </p>
- <p>
- See caveats in <a class="xref" href="Bv9ARM.ch06.html#root_delegation_only"><span class="command"><strong>root-delegation-only</strong></span></a>.
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="class"></a>Class</h4></div></div></div>
-<p>
- The zone's name may optionally be followed by a class. If
- a class is not specified, class <code class="literal">IN</code> (for <code class="varname">Internet</code>),
- is assumed. This is correct for the vast majority of cases.
- </p>
-<p>
- The <code class="literal">hesiod</code> class is
- named for an information service from MIT's Project Athena. It
- is
- used to share information about various systems databases, such
- as users, groups, printers and so on. The keyword
- <code class="literal">HS</code> is
- a synonym for hesiod.
- </p>
-<p>
- Another MIT development is Chaosnet, a LAN protocol created
- in the mid-1970s. Zone data for it can be specified with the <code class="literal">CHAOS</code> class.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="zone_options"></a>Zone Options</h4></div></div></div>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><span class="command"><strong>allow-notify</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>allow-notify</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#access_control" title="Access Control">the section called &#8220;Access Control&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>allow-query</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>allow-query</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#access_control" title="Access Control">the section called &#8220;Access Control&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>allow-query-on</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>allow-query-on</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#access_control" title="Access Control">the section called &#8220;Access Control&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>allow-transfer</strong></span></span></dt>
-<dd><p>
- See the description of <span class="command"><strong>allow-transfer</strong></span>
- in <a class="xref" href="Bv9ARM.ch06.html#access_control" title="Access Control">the section called &#8220;Access Control&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>allow-update</strong></span></span></dt>
-<dd><p>
- See the description of <span class="command"><strong>allow-update</strong></span>
- in <a class="xref" href="Bv9ARM.ch06.html#access_control" title="Access Control">the section called &#8220;Access Control&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>update-policy</strong></span></span></dt>
-<dd><p>
- Specifies a "Simple Secure Update" policy. See
- <a class="xref" href="Bv9ARM.ch06.html#dynamic_update_policies" title="Dynamic Update Policies">the section called &#8220;Dynamic Update Policies&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>allow-update-forwarding</strong></span></span></dt>
-<dd><p>
- See the description of <span class="command"><strong>allow-update-forwarding</strong></span>
- in <a class="xref" href="Bv9ARM.ch06.html#access_control" title="Access Control">the section called &#8220;Access Control&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>also-notify</strong></span></span></dt>
-<dd><p>
- Only meaningful if <span class="command"><strong>notify</strong></span>
- is
- active for this zone. The set of machines that will
- receive a
- <code class="literal">DNS NOTIFY</code> message
- for this zone is made up of all the listed name servers
- (other than
- the primary master) for the zone plus any IP addresses
- specified
- with <span class="command"><strong>also-notify</strong></span>. A port
- may be specified
- with each <span class="command"><strong>also-notify</strong></span>
- address to send the notify
- messages to a port other than the default of 53.
- A TSIG key may also be specified to cause the
- <code class="literal">NOTIFY</code> to be signed by the
- given key.
- <span class="command"><strong>also-notify</strong></span> is not
- meaningful for stub zones.
- The default is the empty list.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>check-names</strong></span></span></dt>
-<dd><p>
- This option is used to restrict the character set and
- syntax of
- certain domain names in master files and/or DNS responses
- received from the
- network. The default varies according to zone type. For <span class="command"><strong>master</strong></span> zones the default is <span class="command"><strong>fail</strong></span>. For <span class="command"><strong>slave</strong></span>
- zones the default is <span class="command"><strong>warn</strong></span>.
- It is not implemented for <span class="command"><strong>hint</strong></span> zones.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>check-mx</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>check-mx</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#boolean_options" title="Boolean Options">the section called &#8220;Boolean Options&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>check-spf</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>check-spf</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#boolean_options" title="Boolean Options">the section called &#8220;Boolean Options&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>check-wildcard</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>check-wildcard</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#boolean_options" title="Boolean Options">the section called &#8220;Boolean Options&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>check-integrity</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>check-integrity</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#boolean_options" title="Boolean Options">the section called &#8220;Boolean Options&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>check-sibling</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>check-sibling</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#boolean_options" title="Boolean Options">the section called &#8220;Boolean Options&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>zero-no-soa-ttl</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>zero-no-soa-ttl</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#boolean_options" title="Boolean Options">the section called &#8220;Boolean Options&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>update-check-ksk</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>update-check-ksk</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#boolean_options" title="Boolean Options">the section called &#8220;Boolean Options&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>dnssec-loadkeys-interval</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>dnssec-loadkeys-interval</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#options" title="options Statement Definition and Usage">the section called &#8220;<span class="command"><strong>options</strong></span> Statement Definition and
- Usage&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>dnssec-update-mode</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>dnssec-update-mode</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#options" title="options Statement Definition and Usage">the section called &#8220;<span class="command"><strong>options</strong></span> Statement Definition and
- Usage&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>dnssec-dnskey-kskonly</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>dnssec-dnskey-kskonly</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#boolean_options" title="Boolean Options">the section called &#8220;Boolean Options&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>try-tcp-refresh</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>try-tcp-refresh</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#boolean_options" title="Boolean Options">the section called &#8220;Boolean Options&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>database</strong></span></span></dt>
-<dd>
-<p>
- Specify the type of database to be used for storing the
- zone data. The string following the <span class="command"><strong>database</strong></span> keyword
- is interpreted as a list of whitespace-delimited words.
- The first word
- identifies the database type, and any subsequent words are
- passed
- as arguments to the database to be interpreted in a way
- specific
- to the database type.
- </p>
-<p>
- The default is <strong class="userinput"><code>"rbt"</code></strong>, BIND 9's
- native in-memory
- red-black-tree database. This database does not take
- arguments.
- </p>
-<p>
- Other values are possible if additional database drivers
- have been linked into the server. Some sample drivers are
- included
- with the distribution but none are linked in by default.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>dialup</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>dialup</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#boolean_options" title="Boolean Options">the section called &#8220;Boolean Options&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>delegation-only</strong></span></span></dt>
-<dd>
-<p>
- The flag only applies to forward, hint and stub
- zones. If set to <strong class="userinput"><code>yes</code></strong>,
- then the zone will also be treated as if it is
- also a delegation-only type zone.
- </p>
-<p>
- See caveats in <a class="xref" href="Bv9ARM.ch06.html#root_delegation_only"><span class="command"><strong>root-delegation-only</strong></span></a>.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>forward</strong></span></span></dt>
-<dd><p>
- Only meaningful if the zone has a forwarders
- list. The <span class="command"><strong>only</strong></span> value causes
- the lookup to fail
- after trying the forwarders and getting no answer, while <span class="command"><strong>first</strong></span> would
- allow a normal lookup to be tried.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>forwarders</strong></span></span></dt>
-<dd><p>
- Used to override the list of global forwarders.
- If it is not specified in a zone of type <span class="command"><strong>forward</strong></span>,
- no forwarding is done for the zone and the global options are
- not used.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>ixfr-base</strong></span></span></dt>
-<dd><p>
- Was used in <acronym class="acronym">BIND</acronym> 8 to
- specify the name
- of the transaction log (journal) file for dynamic update
- and IXFR.
- <acronym class="acronym">BIND</acronym> 9 ignores the option
- and constructs the name of the journal
- file by appending "<code class="filename">.jnl</code>"
- to the name of the
- zone file.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>ixfr-tmp-file</strong></span></span></dt>
-<dd><p>
- Was an undocumented option in <acronym class="acronym">BIND</acronym> 8.
- Ignored in <acronym class="acronym">BIND</acronym> 9.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>journal</strong></span></span></dt>
-<dd><p>
- Allow the default journal's filename to be overridden.
- The default is the zone's filename with "<code class="filename">.jnl</code>" appended.
- This is applicable to <span class="command"><strong>master</strong></span> and <span class="command"><strong>slave</strong></span> zones.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>max-journal-size</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>max-journal-size</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#server_resource_limits" title="Server Resource Limits">the section called &#8220;Server Resource Limits&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>max-transfer-time-in</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>max-transfer-time-in</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#zone_transfers" title="Zone Transfers">the section called &#8220;Zone Transfers&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>max-transfer-idle-in</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>max-transfer-idle-in</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#zone_transfers" title="Zone Transfers">the section called &#8220;Zone Transfers&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>max-transfer-time-out</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>max-transfer-time-out</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#zone_transfers" title="Zone Transfers">the section called &#8220;Zone Transfers&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>max-transfer-idle-out</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>max-transfer-idle-out</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#zone_transfers" title="Zone Transfers">the section called &#8220;Zone Transfers&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>notify</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>notify</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#boolean_options" title="Boolean Options">the section called &#8220;Boolean Options&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>notify-delay</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>notify-delay</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#tuning" title="Tuning">the section called &#8220;Tuning&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>notify-to-soa</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>notify-to-soa</strong></span> in
- <a class="xref" href="Bv9ARM.ch06.html#boolean_options" title="Boolean Options">the section called &#8220;Boolean Options&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>pubkey</strong></span></span></dt>
-<dd><p>
- In <acronym class="acronym">BIND</acronym> 8, this option was
- intended for specifying
- a public zone key for verification of signatures in DNSSEC
- signed
- zones when they are loaded from disk. <acronym class="acronym">BIND</acronym> 9 does not verify signatures
- on load and ignores the option.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>zone-statistics</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>zone-statistics</strong></span> in
- <a class="xref" href="Bv9ARM.ch06.html#options" title="options Statement Definition and Usage">the section called &#8220;<span class="command"><strong>options</strong></span> Statement Definition and
- Usage&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>server-addresses</strong></span></span></dt>
-<dd>
-<p>
- Only meaningful for static-stub zones.
- This is a list of IP addresses to which queries
- should be sent in recursive resolution for the
- zone.
- A non empty list for this option will internally
- configure the apex NS RR with associated glue A or
- AAAA RRs.
- </p>
-<p>
- For example, if "example.com" is configured as a
- static-stub zone with 192.0.2.1 and 2001:db8::1234
- in a <span class="command"><strong>server-addresses</strong></span> option,
- the following RRs will be internally configured.
- </p>
-<pre class="programlisting">example.com. NS example.com.
-example.com. A 192.0.2.1
-example.com. AAAA 2001:db8::1234</pre>
-<p>
- These records are internally used to resolve
- names under the static-stub zone.
- For instance, if the server receives a query for
- "www.example.com" with the RD bit on, the server
- will initiate recursive resolution and send
- queries to 192.0.2.1 and/or 2001:db8::1234.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>server-names</strong></span></span></dt>
-<dd>
-<p>
- Only meaningful for static-stub zones.
- This is a list of domain names of nameservers that
- act as authoritative servers of the static-stub
- zone.
- These names will be resolved to IP addresses when
- <span class="command"><strong>named</strong></span> needs to send queries to
- these servers.
- To make this supplemental resolution successful,
- these names must not be a subdomain of the origin
- name of static-stub zone.
- That is, when "example.net" is the origin of a
- static-stub zone, "ns.example" and
- "master.example.com" can be specified in the
- <span class="command"><strong>server-names</strong></span> option, but
- "ns.example.net" cannot, and will be rejected by
- the configuration parser.
- </p>
-<p>
- A non empty list for this option will internally
- configure the apex NS RR with the specified names.
- For example, if "example.com" is configured as a
- static-stub zone with "ns1.example.net" and
- "ns2.example.net"
- in a <span class="command"><strong>server-names</strong></span> option,
- the following RRs will be internally configured.
- </p>
-<pre class="programlisting">example.com. NS ns1.example.net.
-example.com. NS ns2.example.net.
-</pre>
-<p>
- These records are internally used to resolve
- names under the static-stub zone.
- For instance, if the server receives a query for
- "www.example.com" with the RD bit on, the server
- initiate recursive resolution,
- resolve "ns1.example.net" and/or
- "ns2.example.net" to IP addresses, and then send
- queries to (one or more of) these addresses.
- </p>
-</dd>
-<dt><span class="term"><span class="command"><strong>sig-validity-interval</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>sig-validity-interval</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#tuning" title="Tuning">the section called &#8220;Tuning&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>sig-signing-nodes</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>sig-signing-nodes</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#tuning" title="Tuning">the section called &#8220;Tuning&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>sig-signing-signatures</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>sig-signing-signatures</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#tuning" title="Tuning">the section called &#8220;Tuning&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>sig-signing-type</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>sig-signing-type</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#tuning" title="Tuning">the section called &#8220;Tuning&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>transfer-source</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>transfer-source</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#zone_transfers" title="Zone Transfers">the section called &#8220;Zone Transfers&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>transfer-source-v6</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>transfer-source-v6</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#zone_transfers" title="Zone Transfers">the section called &#8220;Zone Transfers&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>alt-transfer-source</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>alt-transfer-source</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#zone_transfers" title="Zone Transfers">the section called &#8220;Zone Transfers&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>alt-transfer-source-v6</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>alt-transfer-source-v6</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#zone_transfers" title="Zone Transfers">the section called &#8220;Zone Transfers&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>use-alt-transfer-source</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>use-alt-transfer-source</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#zone_transfers" title="Zone Transfers">the section called &#8220;Zone Transfers&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>notify-source</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>notify-source</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#zone_transfers" title="Zone Transfers">the section called &#8220;Zone Transfers&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>notify-source-v6</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>notify-source-v6</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#zone_transfers" title="Zone Transfers">the section called &#8220;Zone Transfers&#8221;</a>.
- </p></dd>
-<dt>
-<span class="term"><span class="command"><strong>min-refresh-time</strong></span>, </span><span class="term"><span class="command"><strong>max-refresh-time</strong></span>, </span><span class="term"><span class="command"><strong>min-retry-time</strong></span>, </span><span class="term"><span class="command"><strong>max-retry-time</strong></span></span>
-</dt>
-<dd><p>
- See the description in <a class="xref" href="Bv9ARM.ch06.html#tuning" title="Tuning">the section called &#8220;Tuning&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>ixfr-from-differences</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>ixfr-from-differences</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#boolean_options" title="Boolean Options">the section called &#8220;Boolean Options&#8221;</a>.
- (Note that the <span class="command"><strong>ixfr-from-differences</strong></span>
- <strong class="userinput"><code>master</code></strong> and
- <strong class="userinput"><code>slave</code></strong> choices are not
- available at the zone level.)
- </p></dd>
-<dt><span class="term"><span class="command"><strong>key-directory</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>key-directory</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#options" title="options Statement Definition and Usage">the section called &#8220;<span class="command"><strong>options</strong></span> Statement Definition and
- Usage&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>auto-dnssec</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>auto-dnssec</strong></span> in
- <a class="xref" href="Bv9ARM.ch06.html#options" title="options Statement Definition and Usage">the section called &#8220;<span class="command"><strong>options</strong></span> Statement Definition and
- Usage&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>serial-update-method</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>serial-update-method</strong></span> in
- <a class="xref" href="Bv9ARM.ch06.html#options" title="options Statement Definition and Usage">the section called &#8220;<span class="command"><strong>options</strong></span> Statement Definition and
- Usage&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>inline-signing</strong></span></span></dt>
-<dd><p>
- If <code class="literal">yes</code>, this enables
- "bump in the wire" signing of a zone, where a
- unsigned zone is transferred in or loaded from
- disk and a signed version of the zone is served,
- with possibly, a different serial number. This
- behavior is disabled by default.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>multi-master</strong></span></span></dt>
-<dd><p>
- See the description of <span class="command"><strong>multi-master</strong></span> in
- <a class="xref" href="Bv9ARM.ch06.html#boolean_options" title="Boolean Options">the section called &#8220;Boolean Options&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>masterfile-format</strong></span></span></dt>
-<dd><p>
- See the description of <span class="command"><strong>masterfile-format</strong></span>
- in <a class="xref" href="Bv9ARM.ch06.html#tuning" title="Tuning">the section called &#8220;Tuning&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>max-zone-ttl</strong></span></span></dt>
-<dd><p>
- See the description of <span class="command"><strong>max-zone-ttl</strong></span>
- in <a class="xref" href="Bv9ARM.ch06.html#options" title="options Statement Definition and Usage">the section called &#8220;<span class="command"><strong>options</strong></span> Statement Definition and
- Usage&#8221;</a>.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>dnssec-secure-to-insecure</strong></span></span></dt>
-<dd><p>
- See the description of
- <span class="command"><strong>dnssec-secure-to-insecure</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#boolean_options" title="Boolean Options">the section called &#8220;Boolean Options&#8221;</a>.
- </p></dd>
-</dl></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="dynamic_update_policies"></a>Dynamic Update Policies</h4></div></div></div>
-<p><acronym class="acronym">BIND</acronym> 9 supports two alternative
- methods of granting clients the right to perform
- dynamic updates to a zone, configured by the
- <span class="command"><strong>allow-update</strong></span> and
- <span class="command"><strong>update-policy</strong></span> option, respectively.
- </p>
-<p>
- The <span class="command"><strong>allow-update</strong></span> clause works the
- same way as in previous versions of <acronym class="acronym">BIND</acronym>.
- It grants given clients the permission to update any
- record of any name in the zone.
- </p>
-<p>
- The <span class="command"><strong>update-policy</strong></span> clause
- allows more fine-grained control over what updates are
- allowed. A set of rules is specified, where each rule
- either grants or denies permissions for one or more
- names to be updated by one or more identities. If
- the dynamic update request message is signed (that is,
- it includes either a TSIG or SIG(0) record), the
- identity of the signer can be determined.
- </p>
-<p>
- Rules are specified in the <span class="command"><strong>update-policy</strong></span>
- zone option, and are only meaningful for master zones.
- When the <span class="command"><strong>update-policy</strong></span> statement
- is present, it is a configuration error for the
- <span class="command"><strong>allow-update</strong></span> statement to be
- present. The <span class="command"><strong>update-policy</strong></span> statement
- only examines the signer of a message; the source
- address is not relevant.
- </p>
-<p>
- There is a pre-defined <span class="command"><strong>update-policy</strong></span>
- rule which can be switched on with the command
- <span class="command"><strong>update-policy local;</strong></span>.
- Switching on this rule in a zone causes
- <span class="command"><strong>named</strong></span> to generate a TSIG session
- key and place it in a file, and to allow that key
- to update the zone. (By default, the file is
- <code class="filename">/var/run/named/session.key</code>, the key
- name is "local-ddns" and the key algorithm is HMAC-SHA256,
- but these values are configurable with the
- <span class="command"><strong>session-keyfile</strong></span>,
- <span class="command"><strong>session-keyname</strong></span> and
- <span class="command"><strong>session-keyalg</strong></span> options, respectively).
- </p>
-<p>
- A client running on the local system, and with appropriate
- permissions, may read that file and use the key to sign update
- requests. The zone's update policy will be set to allow that
- key to change any record within the zone. Assuming the
- key name is "local-ddns", this policy is equivalent to:
- </p>
-<pre class="programlisting">update-policy { grant local-ddns zonesub any; };
- </pre>
-<p>
- The command <span class="command"><strong>nsupdate -l</strong></span> sends update
- requests to localhost, and signs them using the session key.
- </p>
-<p>
- Other rule definitions look like this:
- </p>
-<pre class="programlisting">
-( <span class="command"><strong>grant</strong></span> | <span class="command"><strong>deny</strong></span> ) <em class="replaceable"><code>identity</code></em> <em class="replaceable"><code>nametype</code></em> [<span class="optional"> <em class="replaceable"><code>name</code></em> </span>] [<span class="optional"> <em class="replaceable"><code>types</code></em> </span>]
-</pre>
-<p>
- Each rule grants or denies privileges. Once a message has
- successfully matched a rule, the operation is immediately
- granted or denied and no further rules are examined. A rule
- is matched when the signer matches the identity field, the
- name matches the name field in accordance with the nametype
- field, and the type matches the types specified in the type
- field.
- </p>
-<p>
- No signer is required for <em class="replaceable"><code>tcp-self</code></em>
- or <em class="replaceable"><code>6to4-self</code></em> however the standard
- reverse mapping / prefix conversion must match the identity
- field.
- </p>
-<p>
- The identity field specifies a name or a wildcard
- name. Normally, this is the name of the TSIG or
- SIG(0) key used to sign the update request. When a
- TKEY exchange has been used to create a shared secret,
- the identity of the shared secret is the same as the
- identity of the key used to authenticate the TKEY
- exchange. TKEY is also the negotiation method used
- by GSS-TSIG, which establishes an identity that is
- the Kerberos principal of the client, such as
- <strong class="userinput"><code>"user@host.domain"</code></strong>. When the
- <em class="replaceable"><code>identity</code></em> field specifies
- a wildcard name, it is subject to DNS wildcard
- expansion, so the rule will apply to multiple identities.
- The <em class="replaceable"><code>identity</code></em> field must
- contain a fully-qualified domain name.
- </p>
-<p>
- For nametypes <code class="varname">krb5-self</code>,
- <code class="varname">ms-self</code>, <code class="varname">krb5-subdomain</code>,
- and <code class="varname">ms-subdomain</code> the
- <em class="replaceable"><code>identity</code></em> field specifies
- the Windows or Kerberos realm of the machine belongs to.
- </p>
-<p>
- The <em class="replaceable"><code>nametype</code></em> field has 13
- values:
- <code class="varname">name</code>, <code class="varname">subdomain</code>,
- <code class="varname">wildcard</code>, <code class="varname">self</code>,
- <code class="varname">selfsub</code>, <code class="varname">selfwild</code>,
- <code class="varname">krb5-self</code>, <code class="varname">ms-self</code>,
- <code class="varname">krb5-subdomain</code>,
- <code class="varname">ms-subdomain</code>,
- <code class="varname">tcp-self</code>, <code class="varname">6to4-self</code>,
- <code class="varname">zonesub</code>, and <code class="varname">external</code>.
- </p>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="0.819in" class="1">
-<col width="3.681in" class="2">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p>
- <code class="varname">name</code>
- </p>
- </td>
-<td>
- <p>
- Exact-match semantics. This rule matches
- when the name being updated is identical
- to the contents of the
- <em class="replaceable"><code>name</code></em> field.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">subdomain</code>
- </p>
- </td>
-<td>
- <p>
- This rule matches when the name being updated
- is a subdomain of, or identical to, the
- contents of the <em class="replaceable"><code>name</code></em>
- field.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">zonesub</code>
- </p>
- </td>
-<td>
- <p>
- This rule is similar to subdomain, except that
- it matches when the name being updated is a
- subdomain of the zone in which the
- <span class="command"><strong>update-policy</strong></span> statement
- appears. This obviates the need to type the zone
- name twice, and enables the use of a standard
- <span class="command"><strong>update-policy</strong></span> statement in
- multiple zones without modification.
- </p>
- <p>
- When this rule is used, the
- <em class="replaceable"><code>name</code></em> field is omitted.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">wildcard</code>
- </p>
- </td>
-<td>
- <p>
- The <em class="replaceable"><code>name</code></em> field
- is subject to DNS wildcard expansion, and
- this rule matches when the name being updated
- is a valid expansion of the wildcard.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">self</code>
- </p>
- </td>
-<td>
- <p>
- This rule matches when the name being updated
- matches the contents of the
- <em class="replaceable"><code>identity</code></em> field.
- The <em class="replaceable"><code>name</code></em> field
- is ignored, but should be the same as the
- <em class="replaceable"><code>identity</code></em> field.
- The <code class="varname">self</code> nametype is
- most useful when allowing using one key per
- name to update, where the key has the same
- name as the name to be updated. The
- <em class="replaceable"><code>identity</code></em> would
- be specified as <code class="constant">*</code> (an asterisk) in
- this case.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">selfsub</code>
- </p>
- </td>
-<td>
- <p>
- This rule is similar to <code class="varname">self</code>
- except that subdomains of <code class="varname">self</code>
- can also be updated.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">selfwild</code>
- </p>
- </td>
-<td>
- <p>
- This rule is similar to <code class="varname">self</code>
- except that only subdomains of
- <code class="varname">self</code> can be updated.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">ms-self</code>
- </p>
- </td>
-<td>
- <p>
- This rule takes a Windows machine principal
- (machine$@REALM) for machine in REALM and
- and converts it machine.realm allowing the machine
- to update machine.realm. The REALM to be matched
- is specified in the <em class="replaceable"><code>identity</code></em>
- field.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">ms-subdomain</code>
- </p>
- </td>
-<td>
- <p>
- This rule takes a Windows machine principal
- (machine$@REALM) for machine in REALM and
- converts it to machine.realm allowing the machine
- to update subdomains of machine.realm. The REALM
- to be matched is specified in the
- <em class="replaceable"><code>identity</code></em> field.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">krb5-self</code>
- </p>
- </td>
-<td>
- <p>
- This rule takes a Kerberos machine principal
- (host/machine@REALM) for machine in REALM and
- and converts it machine.realm allowing the machine
- to update machine.realm. The REALM to be matched
- is specified in the <em class="replaceable"><code>identity</code></em>
- field.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">krb5-subdomain</code>
- </p>
- </td>
-<td>
- <p>
- This rule takes a Kerberos machine principal
- (host/machine@REALM) for machine in REALM and
- converts it to machine.realm allowing the machine
- to update subdomains of machine.realm. The REALM
- to be matched is specified in the
- <em class="replaceable"><code>identity</code></em> field.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">tcp-self</code>
- </p>
- </td>
-<td>
- <p>
- Allow updates that have been sent via TCP and
- for which the standard mapping from the initiating
- IP address into the IN-ADDR.ARPA and IP6.ARPA
- namespaces match the name to be updated.
- </p>
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
- It is theoretically possible to spoof these TCP
- sessions.
- </div>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">6to4-self</code>
- </p>
- </td>
-<td>
- <p>
- Allow the 6to4 prefix to be update by any TCP
- connection from the 6to4 network or from the
- corresponding IPv4 address. This is intended
- to allow NS or DNAME RRsets to be added to the
- reverse tree.
- </p>
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
- It is theoretically possible to spoof these TCP
- sessions.
- </div>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="varname">external</code>
- </p>
- </td>
-<td>
- <p>
- This rule allows <span class="command"><strong>named</strong></span>
- to defer the decision of whether to allow a
- given update to an external daemon.
- </p>
- <p>
- The method of communicating with the daemon is
- specified in the <em class="replaceable"><code>identity</code></em>
- field, the format of which is
- "<code class="constant">local:</code><em class="replaceable"><code>path</code></em>",
- where <em class="replaceable"><code>path</code></em> is the location
- of a UNIX-domain socket. (Currently, "local" is the
- only supported mechanism.)
- </p>
- <p>
- Requests to the external daemon are sent over the
- UNIX-domain socket as datagrams with the following
- format:
- </p>
- <pre class="programlisting">
- Protocol version number (4 bytes, network byte order, currently 1)
- Request length (4 bytes, network byte order)
- Signer (null-terminated string)
- Name (null-terminated string)
- TCP source address (null-terminated string)
- Rdata type (null-terminated string)
- Key (null-terminated string)
- TKEY token length (4 bytes, network byte order)
- TKEY token (remainder of packet)</pre>
- <p>
- The daemon replies with a four-byte value in
- network byte order, containing either 0 or 1; 0
- indicates that the specified update is not
- permitted, and 1 indicates that it is.
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-<p>
- In all cases, the <em class="replaceable"><code>name</code></em>
- field must specify a fully-qualified domain name.
- </p>
-<p>
- If no types are explicitly specified, this rule matches
- all types except RRSIG, NS, SOA, NSEC and NSEC3. Types
- may be specified by name, including "ANY" (ANY matches
- all types except NSEC and NSEC3, which can never be
- updated). Note that when an attempt is made to delete
- all records associated with a name, the rules are
- checked for each existing record type.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="multiple_views"></a>Multiple views</h4></div></div></div>
-<p>
- When multiple views are in use, a zone may be
- referenced by more than one of them. Often, the views
- will contain different zones with the same name, allowing
- different clients to receive different answers for the same
- queries. At times, however, it is desirable for multiple
- views to contain identical zones. The
- <span class="command"><strong>in-view</strong></span> zone option provides an efficient
- way to do this: it allows a view to reference a zone that
- was defined in a previously configured view. Example:
- </p>
-<pre class="programlisting">
-view internal {
- match-clients { 10/8; };
-
- zone example.com {
- type master;
- file "example-external.db";
- };
-};
-
-view external {
- match-clients { any; };
-
- zone example.com {
- in-view internal;
- };
-};
- </pre>
-<p>
- An <span class="command"><strong>in-view</strong></span> option cannot refer to a view
- that is configured later in the configuration file.
- </p>
-<p>
- A <span class="command"><strong>zone</strong></span> statement which uses the
- <span class="command"><strong>in-view</strong></span> option may not use any other
- options with the exception of <span class="command"><strong>forward</strong></span>
- and <span class="command"><strong>forwarders</strong></span>. (These options control
- the behavior of the containing view, rather than changing
- the zone object itself.)
- </p>
-<p>
- Zone level acls (e.g. allow-query, allow-transfer) and
- other configuration details of the zone are all set
- in the view the referenced zone is defined in. Care
- need to be taken to ensure that acls are wide enough
- for all views referencing the zone.
- </p>
-<p>
- An <span class="command"><strong>in-view</strong></span> zone cannot be used as a
- response policy zone.
- </p>
-<p>
- An <span class="command"><strong>in-view</strong></span> zone is not intended to reference
- a <span class="command"><strong>forward</strong></span> zone.
- </p>
-</div>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="zone_file"></a>Zone File</h2></div></div></div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="types_of_resource_records_and_when_to_use_them"></a>Types of Resource Records and When to Use Them</h3></div></div></div>
-<p>
- This section, largely borrowed from RFC 1034, describes the
- concept of a Resource Record (RR) and explains when each is used.
- Since the publication of RFC 1034, several new RRs have been
- identified
- and implemented in the DNS. These are also included.
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="id-1.7.6.2.3"></a>Resource Records</h4></div></div></div>
-<p>
- A domain name identifies a node. Each node has a set of
- resource information, which may be empty. The set of resource
- information associated with a particular name is composed of
- separate RRs. The order of RRs in a set is not significant and
- need not be preserved by name servers, resolvers, or other
- parts of the DNS. However, sorting of multiple RRs is
- permitted for optimization purposes, for example, to specify
- that a particular nearby server be tried first. See <a class="xref" href="Bv9ARM.ch06.html#the_sortlist_statement" title="The sortlist Statement">the section called &#8220;The <span class="command"><strong>sortlist</strong></span> Statement&#8221;</a> and <a class="xref" href="Bv9ARM.ch06.html#rrset_ordering" title="RRset Ordering">the section called &#8220;RRset Ordering&#8221;</a>.
- </p>
-<p>
- The components of a Resource Record are:
- </p>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="1.000in" class="1">
-<col width="3.500in" class="2">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p>
- owner name
- </p>
- </td>
-<td>
- <p>
- The domain name where the RR is found.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- type
- </p>
- </td>
-<td>
- <p>
- An encoded 16-bit value that specifies
- the type of the resource record.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- TTL
- </p>
- </td>
-<td>
- <p>
- The time-to-live of the RR. This field
- is a 32-bit integer in units of seconds, and is
- primarily used by
- resolvers when they cache RRs. The TTL describes how
- long a RR can
- be cached before it should be discarded.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- class
- </p>
- </td>
-<td>
- <p>
- An encoded 16-bit value that identifies
- a protocol family or instance of a protocol.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- RDATA
- </p>
- </td>
-<td>
- <p>
- The resource data. The format of the
- data is type (and sometimes class) specific.
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-<p>
- The following are <span class="emphasis"><em>types</em></span> of valid RRs:
- </p>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="0.875in" class="1">
-<col width="3.625in" class="2">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p>
- A
- </p>
- </td>
-<td>
- <p>
- A host address. In the IN class, this is a
- 32-bit IP address. Described in RFC 1035.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- AAAA
- </p>
- </td>
-<td>
- <p>
- IPv6 address. Described in RFC 1886.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- A6
- </p>
- </td>
-<td>
- <p>
- IPv6 address. This can be a partial
- address (a suffix) and an indirection to the name
- where the rest of the
- address (the prefix) can be found. Experimental.
- Described in RFC 2874.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- AFSDB
- </p>
- </td>
-<td>
- <p>
- Location of AFS database servers.
- Experimental. Described in RFC 1183.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- APL
- </p>
- </td>
-<td>
- <p>
- Address prefix list. Experimental.
- Described in RFC 3123.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- ATMA
- </p>
- </td>
-<td>
- <p>
- ATM Address.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- AVC
- </p>
- </td>
-<td>
- <p>
- Application Visibility and Control record.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- CAA
- </p>
- </td>
-<td>
- <p>
- Identifies which Certificate Authorities can issue
- certificates for this domain and what rules they
- need to follow when doing so. Defined in RFC 6844.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- CDNSKEY
- </p>
- </td>
-<td>
- <p>
- Identifies which DNSKEY records should be published
- as DS records in the parent zone.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- CDS
- </p>
- </td>
-<td>
- <p>
- Contains the set of DS records that should be published
- by the parent zone.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- CERT
- </p>
- </td>
-<td>
- <p>
- Holds a digital certificate.
- Described in RFC 2538.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- CNAME
- </p>
- </td>
-<td>
- <p>
- Identifies the canonical name of an alias.
- Described in RFC 1035.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- CSYNC
- </p>
- </td>
-<td>
- <p>
- Child-to-Parent Synchronization in DNS as described
- in RFC 7477.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- DHCID
- </p>
- </td>
-<td>
- <p>
- Is used for identifying which DHCP client is
- associated with this name. Described in RFC 4701.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- DLV
- </p>
- </td>
-<td>
- <p>
- A DNS Look-aside Validation record which contains
- the records that are used as trust anchors for
- zones in a DLV namespace. Described in RFC 4431.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- DNAME
- </p>
- </td>
-<td>
- <p>
- Replaces the domain name specified with
- another name to be looked up, effectively aliasing an
- entire
- subtree of the domain name space rather than a single
- record
- as in the case of the CNAME RR.
- Described in RFC 2672.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- DNSKEY
- </p>
- </td>
-<td>
- <p>
- Stores a public key associated with a signed
- DNS zone. Described in RFC 4034.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- DS
- </p>
- </td>
-<td>
- <p>
- Stores the hash of a public key associated with a
- signed DNS zone. Described in RFC 4034.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- EID
- </p>
- </td>
-<td>
- <p>
- End Point Identifier.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- EUI48
- </p>
- </td>
-<td>
- <p>
- A 48-bit EUI address. Described in RFC 7043.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- EUI64
- </p>
- </td>
-<td>
- <p>
- A 64-bit EUI address. Described in RFC 7043.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- GID
- </p>
- </td>
-<td>
- <p>
- Reserved.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- GPOS
- </p>
- </td>
-<td>
- <p>
- Specifies the global position. Superseded by LOC.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- HINFO
- </p>
- </td>
-<td>
- <p>
- Identifies the CPU and OS used by a host.
- Described in RFC 1035.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- HIP
- </p>
- </td>
-<td>
- <p>
- Host Identity Protocol Address.
- Described in RFC 5205.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- IPSECKEY
- </p>
- </td>
-<td>
- <p>
- Provides a method for storing IPsec keying material in
- DNS. Described in RFC 4025.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- ISDN
- </p>
- </td>
-<td>
- <p>
- Representation of ISDN addresses.
- Experimental. Described in RFC 1183.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- KEY
- </p>
- </td>
-<td>
- <p>
- Stores a public key associated with a
- DNS name. Used in original DNSSEC; replaced
- by DNSKEY in DNSSECbis, but still used with
- SIG(0). Described in RFCs 2535 and 2931.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- KX
- </p>
- </td>
-<td>
- <p>
- Identifies a key exchanger for this
- DNS name. Described in RFC 2230.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- L32
- </p>
- </td>
-<td>
- <p>
- Holds 32-bit Locator values for
- Identifier-Locator Network Protocol. Described
- in RFC 6742.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- L64
- </p>
- </td>
-<td>
- <p>
- Holds 64-bit Locator values for
- Identifier-Locator Network Protocol. Described
- in RFC 6742.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- LOC
- </p>
- </td>
-<td>
- <p>
- For storing GPS info. Described in RFC 1876.
- Experimental.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- LP
- </p>
- </td>
-<td>
- <p>
- Identifier-Locator Network Protocol.
- Described in RFC 6742.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- MB
- </p>
- </td>
-<td>
- <p>
- Mail Box. Historical.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- MD
- </p>
- </td>
-<td>
- <p>
- Mail Destination. Historical.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- MF
- </p>
- </td>
-<td>
- <p>
- Mail Forwarder. Historical.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- MG
- </p>
- </td>
-<td>
- <p>
- Mail Group. Historical.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- MINFO
- </p>
- </td>
-<td>
- <p>
- Mail Information.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- MR
- </p>
- </td>
-<td>
- <p>
- Mail Rename. Historical.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- MX
- </p>
- </td>
-<td>
- <p>
- Identifies a mail exchange for the domain with
- a 16-bit preference value (lower is better)
- followed by the host name of the mail exchange.
- Described in RFC 974, RFC 1035.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- NAPTR
- </p>
- </td>
-<td>
- <p>
- Name authority pointer. Described in RFC 2915.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- NID
- </p>
- </td>
-<td>
- <p>
- Holds values for Node Identifiers in
- Identifier-Locator Network Protocol. Described
- in RFC 6742.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- NINFO
- </p>
- </td>
-<td>
- <p>
- Contains zone status information.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- NIMLOC
- </p>
- </td>
-<td>
- <p>
- Nimrod Locator.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- NSAP
- </p>
- </td>
-<td>
- <p>
- A network service access point.
- Described in RFC 1706.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- NSAP-PTR
- </p>
- </td>
-<td>
- <p>
- Historical.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- NS
- </p>
- </td>
-<td>
- <p>
- The authoritative name server for the
- domain. Described in RFC 1035.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- NSEC
- </p>
- </td>
-<td>
- <p>
- Used in DNSSECbis to securely indicate that
- RRs with an owner name in a certain name interval do
- not exist in
- a zone and indicate what RR types are present for an
- existing name.
- Described in RFC 4034.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- NSEC3
- </p>
- </td>
-<td>
- <p>
- Used in DNSSECbis to securely indicate that
- RRs with an owner name in a certain name
- interval do not exist in a zone and indicate
- what RR types are present for an existing
- name. NSEC3 differs from NSEC in that it
- prevents zone enumeration but is more
- computationally expensive on both the server
- and the client than NSEC. Described in RFC
- 5155.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- NSEC3PARAM
- </p>
- </td>
-<td>
- <p>
- Used in DNSSECbis to tell the authoritative
- server which NSEC3 chains are available to use.
- Described in RFC 5155.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- NULL
- </p>
- </td>
-<td>
- <p>
- This is an opaque container.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- NXT
- </p>
- </td>
-<td>
- <p>
- Used in DNSSEC to securely indicate that
- RRs with an owner name in a certain name interval do
- not exist in
- a zone and indicate what RR types are present for an
- existing name.
- Used in original DNSSEC; replaced by NSEC in
- DNSSECbis.
- Described in RFC 2535.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- OPENPGPKEY
- </p>
- </td>
-<td>
- <p>
- Used to hold an OPENPGPKEY.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- PTR
- </p>
- </td>
-<td>
- <p>
- A pointer to another part of the domain
- name space. Described in RFC 1035.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- PX
- </p>
- </td>
-<td>
- <p>
- Provides mappings between RFC 822 and X.400
- addresses. Described in RFC 2163.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- RKEY
- </p>
- </td>
-<td>
- <p>
- Resource key.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- RP
- </p>
- </td>
-<td>
- <p>
- Information on persons responsible
- for the domain. Experimental. Described in RFC 1183.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- RRSIG
- </p>
- </td>
-<td>
- <p>
- Contains DNSSECbis signature data. Described
- in RFC 4034.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- RT
- </p>
- </td>
-<td>
- <p>
- Route-through binding for hosts that
- do not have their own direct wide area network
- addresses.
- Experimental. Described in RFC 1183.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- SIG
- </p>
- </td>
-<td>
- <p>
- Contains DNSSEC signature data. Used in
- original DNSSEC; replaced by RRSIG in
- DNSSECbis, but still used for SIG(0).
- Described in RFCs 2535 and 2931.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- SINK
- </p>
- </td>
-<td>
- <p>
- The kitchen sink record.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- SMIMEA
- </p>
- </td>
-<td>
- <p>
- The S/MIME Security Certificate Association.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- SOA
- </p>
- </td>
-<td>
- <p>
- Identifies the start of a zone of authority.
- Described in RFC 1035.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- SPF
- </p>
- </td>
-<td>
- <p>
- Contains the Sender Policy Framework information
- for a given email domain. Described in RFC 4408.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- SRV
- </p>
- </td>
-<td>
- <p>
- Information about well known network
- services (replaces WKS). Described in RFC 2782.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- SSHFP
- </p>
- </td>
-<td>
- <p>
- Provides a way to securely publish a secure shell key's
- fingerprint. Described in RFC 4255.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- TA
- </p>
- </td>
-<td>
- <p>
- Trust Anchor. Experimental.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- TALINK
- </p>
- </td>
-<td>
- <p>
- Trust Anchor Link. Experimental.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- TLSA
- </p>
- </td>
-<td>
- <p>
- Transport Layer Security Certificate Association.
- Described in RFC 6698.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- TXT
- </p>
- </td>
-<td>
- <p>
- Text records. Described in RFC 1035.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- UID
- </p>
- </td>
-<td>
- <p>
- Reserved.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- UINFO
- </p>
- </td>
-<td>
- <p>
- Reserved.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- UNSPEC
- </p>
- </td>
-<td>
- <p>
- Reserved. Historical.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- URI
- </p>
- </td>
-<td>
- <p>
- Holds a URI. Described in RFC 7553.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- WKS
- </p>
- </td>
-<td>
- <p>
- Information about which well known
- network services, such as SMTP, that a domain
- supports. Historical.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- X25
- </p>
- </td>
-<td>
- <p>
- Representation of X.25 network addresses.
- Experimental. Described in RFC 1183.
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-<p>
- The following <span class="emphasis"><em>classes</em></span> of resource records
- are currently valid in the DNS:
- </p>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="0.875in" class="1">
-<col width="3.625in" class="2">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p>
- IN
- </p>
- </td>
-<td>
- <p>
- The Internet.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- CH
- </p>
- </td>
-<td>
- <p>
- Chaosnet, a LAN protocol created at MIT in the
- mid-1970s.
- Rarely used for its historical purpose, but reused for
- BIND's
- built-in server information zones, e.g.,
- <code class="literal">version.bind</code>.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- HS
- </p>
- </td>
-<td>
- <p>
- Hesiod, an information service
- developed by MIT's Project Athena. It is used to share
- information
- about various systems databases, such as users,
- groups, printers
- and so on.
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-<p>
- The owner name is often implicit, rather than forming an
- integral
- part of the RR. For example, many name servers internally form
- tree
- or hash structures for the name space, and chain RRs off nodes.
- The remaining RR parts are the fixed header (type, class, TTL)
- which is consistent for all RRs, and a variable part (RDATA)
- that
- fits the needs of the resource being described.
- </p>
-<p>
- The meaning of the TTL field is a time limit on how long an
- RR can be kept in a cache. This limit does not apply to
- authoritative
- data in zones; it is also timed out, but by the refreshing
- policies
- for the zone. The TTL is assigned by the administrator for the
- zone where the data originates. While short TTLs can be used to
- minimize caching, and a zero TTL prohibits caching, the
- realities
- of Internet performance suggest that these times should be on
- the
- order of days for the typical host. If a change can be
- anticipated,
- the TTL can be reduced prior to the change to minimize
- inconsistency
- during the change, and then increased back to its former value
- following
- the change.
- </p>
-<p>
- The data in the RDATA section of RRs is carried as a combination
- of binary strings and domain names. The domain names are
- frequently
- used as "pointers" to other data in the DNS.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="rr_text"></a>Textual expression of RRs</h4></div></div></div>
-<p>
- RRs are represented in binary form in the packets of the DNS
- protocol, and are usually represented in highly encoded form
- when
- stored in a name server or resolver. In the examples provided
- in
- RFC 1034, a style similar to that used in master files was
- employed
- in order to show the contents of RRs. In this format, most RRs
- are shown on a single line, although continuation lines are
- possible
- using parentheses.
- </p>
-<p>
- The start of the line gives the owner of the RR. If a line
- begins with a blank, then the owner is assumed to be the same as
- that of the previous RR. Blank lines are often included for
- readability.
- </p>
-<p>
- Following the owner, we list the TTL, type, and class of the
- RR. Class and type use the mnemonics defined above, and TTL is
- an integer before the type field. In order to avoid ambiguity
- in
- parsing, type and class mnemonics are disjoint, TTLs are
- integers,
- and the type mnemonic is always last. The IN class and TTL
- values
- are often omitted from examples in the interests of clarity.
- </p>
-<p>
- The resource data or RDATA section of the RR are given using
- knowledge of the typical representation for the data.
- </p>
-<p>
- For example, we might show the RRs carried in a message as:
- </p>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="1.381in" class="1">
-<col width="1.020in" class="2">
-<col width="2.099in" class="3">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p>
- <code class="literal">ISI.EDU.</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">MX</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">10 VENERA.ISI.EDU.</code>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p></p>
- </td>
-<td>
- <p>
- <code class="literal">MX</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">10 VAXA.ISI.EDU</code>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="literal">VENERA.ISI.EDU</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">A</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">128.9.0.32</code>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p></p>
- </td>
-<td>
- <p>
- <code class="literal">A</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">10.1.0.52</code>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="literal">VAXA.ISI.EDU</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">A</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">10.2.0.27</code>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p></p>
- </td>
-<td>
- <p>
- <code class="literal">A</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">128.9.0.33</code>
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-<p>
- The MX RRs have an RDATA section which consists of a 16-bit
- number followed by a domain name. The address RRs use a
- standard
- IP address format to contain a 32-bit internet address.
- </p>
-<p>
- The above example shows six RRs, with two RRs at each of three
- domain names.
- </p>
-<p>
- Similarly we might see:
- </p>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="1.491in" class="1">
-<col width="1.067in" class="2">
-<col width="2.067in" class="3">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p>
- <code class="literal">XX.LCS.MIT.EDU.</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">IN A</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">10.0.0.44</code>
- </p>
- </td>
-</tr>
-<tr>
-<td> </td>
-<td>
- <p>
- <code class="literal">CH A</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">MIT.EDU. 2420</code>
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-<p>
- This example shows two addresses for
- <code class="literal">XX.LCS.MIT.EDU</code>, each of a different class.
- </p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="mx_records"></a>Discussion of MX Records</h3></div></div></div>
-<p>
- As described above, domain servers store information as a
- series of resource records, each of which contains a particular
- piece of information about a given domain name (which is usually,
- but not always, a host). The simplest way to think of a RR is as
- a typed pair of data, a domain name matched with a relevant datum,
- and stored with some additional type information to help systems
- determine when the RR is relevant.
- </p>
-<p>
- MX records are used to control delivery of email. The data
- specified in the record is a priority and a domain name. The
- priority
- controls the order in which email delivery is attempted, with the
- lowest number first. If two priorities are the same, a server is
- chosen randomly. If no servers at a given priority are responding,
- the mail transport agent will fall back to the next largest
- priority.
- Priority numbers do not have any absolute meaning &#8212; they are
- relevant
- only respective to other MX records for that domain name. The
- domain
- name given is the machine to which the mail will be delivered.
- It <span class="emphasis"><em>must</em></span> have an associated address record
- (A or AAAA) &#8212; CNAME is not sufficient.
- </p>
-<p>
- For a given domain, if there is both a CNAME record and an
- MX record, the MX record is in error, and will be ignored.
- Instead,
- the mail will be delivered to the server specified in the MX
- record
- pointed to by the CNAME.
- For example:
- </p>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="1.708in" class="1">
-<col width="0.444in" class="2">
-<col width="0.444in" class="3">
-<col width="0.976in" class="4">
-<col width="1.553in" class="5">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p>
- <code class="literal">example.com.</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">IN</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">MX</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">10</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">mail.example.com.</code>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p></p>
- </td>
-<td>
- <p>
- <code class="literal">IN</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">MX</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">10</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">mail2.example.com.</code>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p></p>
- </td>
-<td>
- <p>
- <code class="literal">IN</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">MX</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">20</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">mail.backup.org.</code>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="literal">mail.example.com.</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">IN</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">A</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">10.0.0.1</code>
- </p>
- </td>
-<td>
- <p></p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="literal">mail2.example.com.</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">IN</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">A</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">10.0.0.2</code>
- </p>
- </td>
-<td>
- <p></p>
- </td>
-</tr>
-</tbody>
-</table></div>
-<p>
- Mail delivery will be attempted to <code class="literal">mail.example.com</code> and
- <code class="literal">mail2.example.com</code> (in
- any order), and if neither of those succeed, delivery to <code class="literal">mail.backup.org</code> will
- be attempted.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="Setting_TTLs"></a>Setting TTLs</h3></div></div></div>
-<p>
- The time-to-live of the RR field is a 32-bit integer represented
- in units of seconds, and is primarily used by resolvers when they
- cache RRs. The TTL describes how long a RR can be cached before it
- should be discarded. The following three types of TTL are
- currently
- used in a zone file.
- </p>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="0.750in" class="1">
-<col width="4.375in" class="2">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p>
- SOA
- </p>
- </td>
-<td>
- <p>
- The last field in the SOA is the negative
- caching TTL. This controls how long other servers will
- cache no-such-domain
- (NXDOMAIN) responses from you.
- </p>
- <p>
- The maximum time for
- negative caching is 3 hours (3h).
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- $TTL
- </p>
- </td>
-<td>
- <p>
- The $TTL directive at the top of the
- zone file (before the SOA) gives a default TTL for every
- RR without
- a specific TTL set.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- RR TTLs
- </p>
- </td>
-<td>
- <p>
- Each RR can have a TTL as the second
- field in the RR, which will control how long other
- servers can cache it.
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-<p>
- All of these TTLs default to units of seconds, though units
- can be explicitly specified, for example, <code class="literal">1h30m</code>.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="ipv4_reverse"></a>Inverse Mapping in IPv4</h3></div></div></div>
-<p>
- Reverse name resolution (that is, translation from IP address
- to name) is achieved by means of the <span class="emphasis"><em>in-addr.arpa</em></span> domain
- and PTR records. Entries in the in-addr.arpa domain are made in
- least-to-most significant order, read left to right. This is the
- opposite order to the way IP addresses are usually written. Thus,
- a machine with an IP address of 10.1.2.3 would have a
- corresponding
- in-addr.arpa name of
- 3.2.1.10.in-addr.arpa. This name should have a PTR resource record
- whose data field is the name of the machine or, optionally,
- multiple
- PTR records if the machine has more than one name. For example,
- in the [<span class="optional">example.com</span>] domain:
- </p>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="1.125in" class="1">
-<col width="4.000in" class="2">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p>
- <code class="literal">$ORIGIN</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">2.1.10.in-addr.arpa</code>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="literal">3</code>
- </p>
- </td>
-<td>
- <p>
- <code class="literal">IN PTR foo.example.com.</code>
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- The <span class="command"><strong>$ORIGIN</strong></span> lines in the examples
- are for providing context to the examples only &#8212; they do not
- necessarily
- appear in the actual usage. They are only used here to indicate
- that the example is relative to the listed origin.
- </p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="zone_directives"></a>Other Zone File Directives</h3></div></div></div>
-<p>
- The Master File Format was initially defined in RFC 1035 and
- has subsequently been extended. While the Master File Format
- itself
- is class independent all records in a Master File must be of the
- same
- class.
- </p>
-<p>
- Master File Directives include <span class="command"><strong>$ORIGIN</strong></span>, <span class="command"><strong>$INCLUDE</strong></span>,
- and <span class="command"><strong>$TTL.</strong></span>
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="atsign"></a>The <span class="command"><strong>@</strong></span> (at-sign)</h4></div></div></div>
-<p>
- When used in the label (or name) field, the asperand or
- at-sign (@) symbol represents the current origin.
- At the start of the zone file, it is the
- &lt;<code class="varname">zone_name</code>&gt; (followed by
- trailing dot).
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="origin_directive"></a>The <span class="command"><strong>$ORIGIN</strong></span> Directive</h4></div></div></div>
-<p>
- Syntax: <span class="command"><strong>$ORIGIN</strong></span>
- <em class="replaceable"><code>domain-name</code></em>
- [<span class="optional"><em class="replaceable"><code>comment</code></em></span>]
- </p>
-<p><span class="command"><strong>$ORIGIN</strong></span>
- sets the domain name that will be appended to any
- unqualified records. When a zone is first read in there
- is an implicit <span class="command"><strong>$ORIGIN</strong></span>
- &lt;<code class="varname">zone_name</code>&gt;<span class="command"><strong>.</strong></span>
- (followed by trailing dot).
- The current <span class="command"><strong>$ORIGIN</strong></span> is appended to
- the domain specified in the <span class="command"><strong>$ORIGIN</strong></span>
- argument if it is not absolute.
- </p>
-<pre class="programlisting">
-$ORIGIN example.com.
-WWW CNAME MAIN-SERVER
-</pre>
-<p>
- is equivalent to
- </p>
-<pre class="programlisting">
-WWW.EXAMPLE.COM. CNAME MAIN-SERVER.EXAMPLE.COM.
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="include_directive"></a>The <span class="command"><strong>$INCLUDE</strong></span> Directive</h4></div></div></div>
-<p>
- Syntax: <span class="command"><strong>$INCLUDE</strong></span>
- <em class="replaceable"><code>filename</code></em>
- [<span class="optional">
-<em class="replaceable"><code>origin</code></em> </span>]
- [<span class="optional"> <em class="replaceable"><code>comment</code></em> </span>]
- </p>
-<p>
- Read and process the file <code class="filename">filename</code> as
- if it were included into the file at this point. If <span class="command"><strong>origin</strong></span> is
- specified the file is processed with <span class="command"><strong>$ORIGIN</strong></span> set
- to that value, otherwise the current <span class="command"><strong>$ORIGIN</strong></span> is
- used.
- </p>
-<p>
- The origin and the current domain name
- revert to the values they had prior to the <span class="command"><strong>$INCLUDE</strong></span> once
- the file has been read.
- </p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- RFC 1035 specifies that the current origin should be restored
- after
- an <span class="command"><strong>$INCLUDE</strong></span>, but it is silent
- on whether the current
- domain name should also be restored. BIND 9 restores both of
- them.
- This could be construed as a deviation from RFC 1035, a
- feature, or both.
- </p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="ttl_directive"></a>The <span class="command"><strong>$TTL</strong></span> Directive</h4></div></div></div>
-<p>
- Syntax: <span class="command"><strong>$TTL</strong></span>
- <em class="replaceable"><code>default-ttl</code></em>
- [<span class="optional">
-<em class="replaceable"><code>comment</code></em> </span>]
- </p>
-<p>
- Set the default Time To Live (TTL) for subsequent records
- with undefined TTLs. Valid TTLs are of the range 0-2147483647
- seconds.
- </p>
-<p><span class="command"><strong>$TTL</strong></span>
- is defined in RFC 2308.
- </p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="generate_directive"></a><acronym class="acronym">BIND</acronym> Master File Extension: the <span class="command"><strong>$GENERATE</strong></span> Directive</h3></div></div></div>
-<p>
- Syntax: <span class="command"><strong>$GENERATE</strong></span>
- <em class="replaceable"><code>range</code></em>
- <em class="replaceable"><code>lhs</code></em>
- [<span class="optional"><em class="replaceable"><code>ttl</code></em></span>]
- [<span class="optional"><em class="replaceable"><code>class</code></em></span>]
- <em class="replaceable"><code>type</code></em>
- <em class="replaceable"><code>rhs</code></em>
- [<span class="optional"><em class="replaceable"><code>comment</code></em></span>]
- </p>
-<p><span class="command"><strong>$GENERATE</strong></span>
- is used to create a series of resource records that only
- differ from each other by an
- iterator. <span class="command"><strong>$GENERATE</strong></span> can be used to
- easily generate the sets of records required to support
- sub /24 reverse delegations described in RFC 2317:
- Classless IN-ADDR.ARPA delegation.
- </p>
-<pre class="programlisting">$ORIGIN 0.0.192.IN-ADDR.ARPA.
-$GENERATE 1-2 @ NS SERVER$.EXAMPLE.
-$GENERATE 1-127 $ CNAME $.0</pre>
-<p>
- is equivalent to
- </p>
-<pre class="programlisting">0.0.0.192.IN-ADDR.ARPA. NS SERVER1.EXAMPLE.
-0.0.0.192.IN-ADDR.ARPA. NS SERVER2.EXAMPLE.
-1.0.0.192.IN-ADDR.ARPA. CNAME 1.0.0.0.192.IN-ADDR.ARPA.
-2.0.0.192.IN-ADDR.ARPA. CNAME 2.0.0.0.192.IN-ADDR.ARPA.
-...
-127.0.0.192.IN-ADDR.ARPA. CNAME 127.0.0.0.192.IN-ADDR.ARPA.
-</pre>
-<p>
- Generate a set of A and MX records. Note the MX's right hand
- side is a quoted string. The quotes will be stripped when the
- right hand side is processed.
- </p>
-<pre class="programlisting">
-$ORIGIN EXAMPLE.
-$GENERATE 1-127 HOST-$ A 1.2.3.$
-$GENERATE 1-127 HOST-$ MX "0 ."</pre>
-<p>
- is equivalent to
- </p>
-<pre class="programlisting">HOST-1.EXAMPLE. A 1.2.3.1
-HOST-1.EXAMPLE. MX 0 .
-HOST-2.EXAMPLE. A 1.2.3.2
-HOST-2.EXAMPLE. MX 0 .
-HOST-3.EXAMPLE. A 1.2.3.3
-HOST-3.EXAMPLE. MX 0 .
-...
-HOST-127.EXAMPLE. A 1.2.3.127
-HOST-127.EXAMPLE. MX 0 .
-</pre>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="0.875in" class="1">
-<col width="4.250in" class="2">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p><span class="command"><strong>range</strong></span></p>
- </td>
-<td>
- <p>
- This can be one of two forms: start-stop
- or start-stop/step. If the first form is used, then step
- is set to 1. start, stop and step must be positive
- integers between 0 and (2^31)-1. start must not be
- larger than stop.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>lhs</strong></span></p>
- </td>
-<td>
- <p>This
- describes the owner name of the resource records
- to be created. Any single <span class="command"><strong>$</strong></span>
- (dollar sign)
- symbols within the <span class="command"><strong>lhs</strong></span> string
- are replaced by the iterator value.
-
- To get a $ in the output, you need to escape the
- <span class="command"><strong>$</strong></span> using a backslash
- <span class="command"><strong>\</strong></span>,
- e.g. <span class="command"><strong>\$</strong></span>. The
- <span class="command"><strong>$</strong></span> may optionally be followed
- by modifiers which change the offset from the
- iterator, field width and base.
-
- Modifiers are introduced by a
- <span class="command"><strong>{</strong></span> (left brace) immediately following the
- <span class="command"><strong>$</strong></span> as
- <span class="command"><strong>${offset[,width[,base]]}</strong></span>.
- For example, <span class="command"><strong>${-20,3,d}</strong></span>
- subtracts 20 from the current value, prints the
- result as a decimal in a zero-padded field of
- width 3.
-
- Available output forms are decimal
- (<span class="command"><strong>d</strong></span>), octal
- (<span class="command"><strong>o</strong></span>), hexadecimal
- (<span class="command"><strong>x</strong></span> or <span class="command"><strong>X</strong></span>
- for uppercase) and nibble
- (<span class="command"><strong>n</strong></span> or <span class="command"><strong>N</strong></span>\
- for uppercase). The default modifier is
- <span class="command"><strong>${0,0,d}</strong></span>. If the
- <span class="command"><strong>lhs</strong></span> is not absolute, the
- current <span class="command"><strong>$ORIGIN</strong></span> is appended
- to the name.
- </p>
- <p>
- In nibble mode the value will be treated as
- if it was a reversed hexadecimal string
- with each hexadecimal digit as a separate
- label. The width field includes the label
- separator.
- </p>
- <p>
- For compatibility with earlier versions,
- <span class="command"><strong>$$</strong></span> is still recognized as
- indicating a literal $ in the output.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>ttl</strong></span></p>
- </td>
-<td>
- <p>
- Specifies the time-to-live of the generated records. If
- not specified this will be inherited using the
- normal TTL inheritance rules.
- </p>
- <p><span class="command"><strong>class</strong></span>
- and <span class="command"><strong>ttl</strong></span> can be
- entered in either order.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>class</strong></span></p>
- </td>
-<td>
- <p>
- Specifies the class of the generated records.
- This must match the zone class if it is
- specified.
- </p>
- <p><span class="command"><strong>class</strong></span>
- and <span class="command"><strong>ttl</strong></span> can be
- entered in either order.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>type</strong></span></p>
- </td>
-<td>
- <p>
- Any valid type.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>rhs</strong></span></p>
- </td>
-<td>
- <p>
- <span class="command"><strong>rhs</strong></span>, optionally, quoted string.
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-<p>
- The <span class="command"><strong>$GENERATE</strong></span> directive is a <acronym class="acronym">BIND</acronym> extension
- and not part of the standard zone file format.
- </p>
-<p>
- BIND 8 does not support the optional TTL and CLASS fields.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="zonefile_format"></a>Additional File Formats</h3></div></div></div>
-<p>
- In addition to the standard textual format, BIND 9
- supports the ability to read or dump to zone files in
- other formats.
- </p>
-<p>
- The <code class="constant">raw</code> format is
- a binary representation of zone data in a manner similar
- to that used in zone transfers. Since it does not require
- parsing text, load time is significantly reduced.
- </p>
-<p>
- An even faster alternative is the <code class="constant">map</code>
- format, which is an image of a <acronym class="acronym">BIND</acronym> 9
- in-memory zone database; it is capable of being loaded
- directly into memory via the <span class="command"><strong>mmap()</strong></span>
- function; the zone can begin serving queries almost
- immediately.
- </p>
-<p>
- For a primary server, a zone file in
- <code class="constant">raw</code> or <code class="constant">map</code>
- format is expected to be generated from a textual zone
- file by the <span class="command"><strong>named-compilezone</strong></span> command.
- For a secondary server or for a dynamic zone, it is automatically
- generated (if this format is specified by the
- <span class="command"><strong>masterfile-format</strong></span> option) when
- <span class="command"><strong>named</strong></span> dumps the zone contents after
- zone transfer or when applying prior updates.
- </p>
-<p>
- If a zone file in a binary format needs manual modification,
- it first must be converted to a textual form by the
- <span class="command"><strong>named-compilezone</strong></span> command. All
- necessary modification should go to the text file, which
- should then be converted to the binary form by the
- <span class="command"><strong>named-compilezone</strong></span> command again.
- </p>
-<p>
- Note that <span class="command"><strong>map</strong></span> format is extremely
- architecture-specific. A <code class="constant">map</code>
- file <span class="emphasis"><em>cannot</em></span> be used on a system
- with different pointer size, endianness or data alignment
- than the system on which it was generated, and should in
- general be used only inside a single system.
- While <code class="constant">raw</code> format uses
- network byte order and avoids architecture-dependent
- data alignment so that it is as portable as
- possible, it is also primarily expected to be used
- inside the same single system. To export a
- zone file in either <code class="constant">raw</code> or
- <code class="constant">map</code> format, or make a
- portable backup of such a file, conversion to
- <code class="constant">text</code> format is recommended.
- </p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="statistics"></a>BIND9 Statistics</h2></div></div></div>
-<p>
- <acronym class="acronym">BIND</acronym> 9 maintains lots of statistics
- information and provides several interfaces for users to
- get access to the statistics.
- The available statistics include all statistics counters
- that were available in <acronym class="acronym">BIND</acronym> 8 and
- are meaningful in <acronym class="acronym">BIND</acronym> 9,
- and other information that is considered useful.
- </p>
-<p>
- The statistics information is categorized into the following
- sections.
- </p>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="3.300in" class="1">
-<col width="2.625in" class="2">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p>Incoming Requests</p>
- </td>
-<td>
- <p>
- The number of incoming DNS requests for each OPCODE.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>Incoming Queries</p>
- </td>
-<td>
- <p>
- The number of incoming queries for each RR type.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>Outgoing Queries</p>
- </td>
-<td>
- <p>
- The number of outgoing queries for each RR
- type sent from the internal resolver.
- Maintained per view.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>Name Server Statistics</p>
- </td>
-<td>
- <p>
- Statistics counters about incoming request processing.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>Zone Maintenance Statistics</p>
- </td>
-<td>
- <p>
- Statistics counters regarding zone maintenance
- operations such as zone transfers.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>Resolver Statistics</p>
- </td>
-<td>
- <p>
- Statistics counters about name resolution
- performed in the internal resolver.
- Maintained per view.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>Cache DB RRsets</p>
- </td>
-<td>
- <p>
- The number of RRsets per RR type and nonexistent
- names stored in the cache database.
- If the exclamation mark (!) is printed for a RR
- type, it means that particular type of RRset is
- known to be nonexistent (this is also known as
- "NXRRSET"). If a hash mark (#) is present then
- the RRset is marked for garbage collection.
- Maintained per view.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>Socket I/O Statistics</p>
- </td>
-<td>
- <p>
- Statistics counters about network related events.
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-<p>
- A subset of Name Server Statistics is collected and shown
- per zone for which the server has the authority when
- <span class="command"><strong>zone-statistics</strong></span> is set to
- <strong class="userinput"><code>full</code></strong> (or <strong class="userinput"><code>yes</code></strong>
- for backward compatibility. See the description of
- <span class="command"><strong>zone-statistics</strong></span> in <a class="xref" href="Bv9ARM.ch06.html#options" title="options Statement Definition and Usage">the section called &#8220;<span class="command"><strong>options</strong></span> Statement Definition and
- Usage&#8221;</a>
- for further details.
- </p>
-<p>
- These statistics counters are shown with their zone and
- view names. The view name is omitted when the server is
- not configured with explicit views.</p>
-<p>
- There are currently two user interfaces to get access to the
- statistics.
- One is in the plain text format dumped to the file specified
- by the <span class="command"><strong>statistics-file</strong></span> configuration option.
- The other is remotely accessible via a statistics channel
- when the <span class="command"><strong>statistics-channels</strong></span> statement
- is specified in the configuration file
- (see <a class="xref" href="Bv9ARM.ch06.html#statschannels" title="statistics-channels Statement Grammar">the section called &#8220;<span class="command"><strong>statistics-channels</strong></span> Statement Grammar&#8221;</a>.)
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="statsfile"></a>The Statistics File</h3></div></div></div>
-<p>
- The text format statistics dump begins with a line, like:
- </p>
-<p>
- <span class="command"><strong>+++ Statistics Dump +++ (973798949)</strong></span>
- </p>
-<p>
- The number in parentheses is a standard
- Unix-style timestamp, measured as seconds since January 1, 1970.
-
- Following
- that line is a set of statistics information, which is categorized
- as described above.
- Each section begins with a line, like:
- </p>
-<p>
- <span class="command"><strong>++ Name Server Statistics ++</strong></span>
- </p>
-<p>
- Each section consists of lines, each containing the statistics
- counter value followed by its textual description.
- See below for available counters.
- For brevity, counters that have a value of 0 are not shown
- in the statistics file.
- </p>
-<p>
- The statistics dump ends with the line where the
- number is identical to the number in the beginning line; for example:
- </p>
-<p>
- <span class="command"><strong>--- Statistics Dump --- (973798949)</strong></span>
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="statistics_counters"></a>Statistics Counters</h3></div></div></div>
-<p>
- The following tables summarize statistics counters that
- <acronym class="acronym">BIND</acronym> 9 provides.
- For each row of the tables, the leftmost column is the
- abbreviated symbol name of that counter.
- These symbols are shown in the statistics information
- accessed via an HTTP statistics channel.
- The rightmost column gives the description of the counter,
- which is also shown in the statistics file
- (but, in this document, possibly with slight modification
- for better readability).
- Additional notes may also be provided in this column.
- When a middle column exists between these two columns,
- it gives the corresponding counter name of the
- <acronym class="acronym">BIND</acronym> 8 statistics, if applicable.
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="stats_counters"></a>Name Server Statistics Counters</h4></div></div></div>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="1.150in" class="1">
-<col width="1.150in" class="2">
-<col width="3.350in" class="3">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p>
- <span class="emphasis"><em>Symbol</em></span>
- </p>
- </td>
-<td>
- <p>
- <span class="emphasis"><em>BIND8 Symbol</em></span>
- </p>
- </td>
-<td>
- <p>
- <span class="emphasis"><em>Description</em></span>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>Requestv4</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>RQ</strong></span></p>
- </td>
-<td>
- <p>
- IPv4 requests received.
- Note: this also counts non query requests.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>Requestv6</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>RQ</strong></span></p>
- </td>
-<td>
- <p>
- IPv6 requests received.
- Note: this also counts non query requests.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>ReqEdns0</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Requests with EDNS(0) received.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>ReqBadEDNSVer</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Requests with unsupported EDNS version received.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>ReqTSIG</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Requests with TSIG received.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>ReqSIG0</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Requests with SIG(0) received.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>ReqBadSIG</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Requests with invalid (TSIG or SIG(0)) signature.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>ReqTCP</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>RTCP</strong></span></p>
- </td>
-<td>
- <p>
- TCP requests received.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>AuthQryRej</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>RUQ</strong></span></p>
- </td>
-<td>
- <p>
- Authoritative (non recursive) queries rejected.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>RecQryRej</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>RURQ</strong></span></p>
- </td>
-<td>
- <p>
- Recursive queries rejected.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>XfrRej</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>RUXFR</strong></span></p>
- </td>
-<td>
- <p>
- Zone transfer requests rejected.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>UpdateRej</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>RUUpd</strong></span></p>
- </td>
-<td>
- <p>
- Dynamic update requests rejected.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>Response</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>SAns</strong></span></p>
- </td>
-<td>
- <p>
- Responses sent.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>RespTruncated</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Truncated responses sent.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>RespEDNS0</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Responses with EDNS(0) sent.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>RespTSIG</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Responses with TSIG sent.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>RespSIG0</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Responses with SIG(0) sent.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>QrySuccess</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Queries resulted in a successful answer.
- This means the query which returns a NOERROR response
- with at least one answer RR.
- This corresponds to the
- <span class="command"><strong>success</strong></span> counter
- of previous versions of
- <acronym class="acronym">BIND</acronym> 9.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>QryAuthAns</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Queries resulted in authoritative answer.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>QryNoauthAns</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>SNaAns</strong></span></p>
- </td>
-<td>
- <p>
- Queries resulted in non authoritative answer.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>QryReferral</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Queries resulted in referral answer.
- This corresponds to the
- <span class="command"><strong>referral</strong></span> counter
- of previous versions of
- <acronym class="acronym">BIND</acronym> 9.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>QryNxrrset</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Queries resulted in NOERROR responses with no data.
- This corresponds to the
- <span class="command"><strong>nxrrset</strong></span> counter
- of previous versions of
- <acronym class="acronym">BIND</acronym> 9.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>QrySERVFAIL</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>SFail</strong></span></p>
- </td>
-<td>
- <p>
- Queries resulted in SERVFAIL.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>QryFORMERR</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>SFErr</strong></span></p>
- </td>
-<td>
- <p>
- Queries resulted in FORMERR.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>QryNXDOMAIN</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>SNXD</strong></span></p>
- </td>
-<td>
- <p>
- Queries resulted in NXDOMAIN.
- This corresponds to the
- <span class="command"><strong>nxdomain</strong></span> counter
- of previous versions of
- <acronym class="acronym">BIND</acronym> 9.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>QryRecursion</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>RFwdQ</strong></span></p>
- </td>
-<td>
- <p>
- Queries which caused the server
- to perform recursion in order to find the final answer.
- This corresponds to the
- <span class="command"><strong>recursion</strong></span> counter
- of previous versions of
- <acronym class="acronym">BIND</acronym> 9.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>QryDuplicate</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>RDupQ</strong></span></p>
- </td>
-<td>
- <p>
- Queries which the server attempted to
- recurse but discovered an existing query with the same
- IP address, port, query ID, name, type and class
- already being processed.
- This corresponds to the
- <span class="command"><strong>duplicate</strong></span> counter
- of previous versions of
- <acronym class="acronym">BIND</acronym> 9.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>QryDropped</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Recursive queries for which the server
- discovered an excessive number of existing
- recursive queries for the same name, type and
- class and were subsequently dropped.
- This is the number of dropped queries due to
- the reason explained with the
- <span class="command"><strong>clients-per-query</strong></span>
- and
- <span class="command"><strong>max-clients-per-query</strong></span>
- options
- (see the description about
- <a class="xref" href="Bv9ARM.ch06.html#clients-per-query"><span class="command"><strong>clients-per-query</strong></span></a>.)
- This corresponds to the
- <span class="command"><strong>dropped</strong></span> counter
- of previous versions of
- <acronym class="acronym">BIND</acronym> 9.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>QryFailure</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Other query failures.
- This corresponds to the
- <span class="command"><strong>failure</strong></span> counter
- of previous versions of
- <acronym class="acronym">BIND</acronym> 9.
- Note: this counter is provided mainly for
- backward compatibility with the previous versions.
- Normally a more fine-grained counters such as
- <span class="command"><strong>AuthQryRej</strong></span> and
- <span class="command"><strong>RecQryRej</strong></span>
- that would also fall into this counter are provided,
- and so this counter would not be of much
- interest in practice.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>QryNXRedir</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Queries resulted in NXDOMAIN that were redirected.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>QryNXRedirRLookup</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Queries resulted in NXDOMAIN that were redirected
- and resulted in a successful remote lookup.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>XfrReqDone</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Requested zone transfers completed.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>UpdateReqFwd</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Update requests forwarded.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>UpdateRespFwd</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Update responses forwarded.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>UpdateFwdFail</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Dynamic update forward failed.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>UpdateDone</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Dynamic updates completed.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>UpdateFail</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Dynamic updates failed.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>UpdateBadPrereq</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Dynamic updates rejected due to prerequisite failure.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>RateDropped</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Responses dropped by rate limits.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>RateSlipped</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Responses truncated by rate limits.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>RPZRewrites</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Response policy zone rewrites.
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="zone_stats"></a>Zone Maintenance Statistics Counters</h4></div></div></div>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="1.150in" class="1">
-<col width="3.350in" class="2">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p>
- <span class="emphasis"><em>Symbol</em></span>
- </p>
- </td>
-<td>
- <p>
- <span class="emphasis"><em>Description</em></span>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>NotifyOutv4</strong></span></p>
- </td>
-<td>
- <p>
- IPv4 notifies sent.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>NotifyOutv6</strong></span></p>
- </td>
-<td>
- <p>
- IPv6 notifies sent.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>NotifyInv4</strong></span></p>
- </td>
-<td>
- <p>
- IPv4 notifies received.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>NotifyInv6</strong></span></p>
- </td>
-<td>
- <p>
- IPv6 notifies received.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>NotifyRej</strong></span></p>
- </td>
-<td>
- <p>
- Incoming notifies rejected.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>SOAOutv4</strong></span></p>
- </td>
-<td>
- <p>
- IPv4 SOA queries sent.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>SOAOutv6</strong></span></p>
- </td>
-<td>
- <p>
- IPv6 SOA queries sent.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>AXFRReqv4</strong></span></p>
- </td>
-<td>
- <p>
- IPv4 AXFR requested.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>AXFRReqv6</strong></span></p>
- </td>
-<td>
- <p>
- IPv6 AXFR requested.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>IXFRReqv4</strong></span></p>
- </td>
-<td>
- <p>
- IPv4 IXFR requested.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>IXFRReqv6</strong></span></p>
- </td>
-<td>
- <p>
- IPv6 IXFR requested.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>XfrSuccess</strong></span></p>
- </td>
-<td>
- <p>
- Zone transfer requests succeeded.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>XfrFail</strong></span></p>
- </td>
-<td>
- <p>
- Zone transfer requests failed.
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="resolver_stats"></a>Resolver Statistics Counters</h4></div></div></div>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="1.150in" class="1">
-<col width="1.150in" class="2">
-<col width="3.350in" class="3">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p>
- <span class="emphasis"><em>Symbol</em></span>
- </p>
- </td>
-<td>
- <p>
- <span class="emphasis"><em>BIND8 Symbol</em></span>
- </p>
- </td>
-<td>
- <p>
- <span class="emphasis"><em>Description</em></span>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>Queryv4</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>SFwdQ</strong></span></p>
- </td>
-<td>
- <p>
- IPv4 queries sent.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>Queryv6</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>SFwdQ</strong></span></p>
- </td>
-<td>
- <p>
- IPv6 queries sent.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>Responsev4</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>RR</strong></span></p>
- </td>
-<td>
- <p>
- IPv4 responses received.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>Responsev6</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>RR</strong></span></p>
- </td>
-<td>
- <p>
- IPv6 responses received.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>NXDOMAIN</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>RNXD</strong></span></p>
- </td>
-<td>
- <p>
- NXDOMAIN received.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>SERVFAIL</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>RFail</strong></span></p>
- </td>
-<td>
- <p>
- SERVFAIL received.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>FORMERR</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>RFErr</strong></span></p>
- </td>
-<td>
- <p>
- FORMERR received.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>OtherError</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>RErr</strong></span></p>
- </td>
-<td>
- <p>
- Other errors received.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>EDNS0Fail</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- EDNS(0) query failures.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>Mismatch</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>RDupR</strong></span></p>
- </td>
-<td>
- <p>
- Mismatch responses received.
- The DNS ID, response's source address,
- and/or the response's source port does not
- match what was expected.
- (The port must be 53 or as defined by
- the <span class="command"><strong>port</strong></span> option.)
- This may be an indication of a cache
- poisoning attempt.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>Truncated</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Truncated responses received.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>Lame</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>RLame</strong></span></p>
- </td>
-<td>
- <p>
- Lame delegations received.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>Retry</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>SDupQ</strong></span></p>
- </td>
-<td>
- <p>
- Query retries performed.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>QueryAbort</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Queries aborted due to quota control.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>QuerySockFail</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Failures in opening query sockets.
- One common reason for such failures is a
- failure of opening a new socket due to a
- limitation on file descriptors.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>QueryTimeout</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Query timeouts.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>GlueFetchv4</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>SSysQ</strong></span></p>
- </td>
-<td>
- <p>
- IPv4 NS address fetches invoked.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>GlueFetchv6</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong>SSysQ</strong></span></p>
- </td>
-<td>
- <p>
- IPv6 NS address fetches invoked.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>GlueFetchv4Fail</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- IPv4 NS address fetch failed.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>GlueFetchv6Fail</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- IPv6 NS address fetch failed.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>ValAttempt</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- DNSSEC validation attempted.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>ValOk</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- DNSSEC validation succeeded.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>ValNegOk</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- DNSSEC validation on negative information succeeded.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>ValFail</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- DNSSEC validation failed.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>QryRTTnn</strong></span></p>
- </td>
-<td>
- <p><span class="command"><strong></strong></span></p>
- </td>
-<td>
- <p>
- Frequency table on round trip times (RTTs) of
- queries.
- Each <span class="command"><strong>nn</strong></span> specifies the corresponding
- frequency.
- In the sequence of
- <span class="command"><strong>nn_1</strong></span>,
- <span class="command"><strong>nn_2</strong></span>,
- ...,
- <span class="command"><strong>nn_m</strong></span>,
- the value of <span class="command"><strong>nn_i</strong></span> is the
- number of queries whose RTTs are between
- <span class="command"><strong>nn_(i-1)</strong></span> (inclusive) and
- <span class="command"><strong>nn_i</strong></span> (exclusive) milliseconds.
- For the sake of convenience we define
- <span class="command"><strong>nn_0</strong></span> to be 0.
- The last entry should be represented as
- <span class="command"><strong>nn_m+</strong></span>, which means the
- number of queries whose RTTs are equal to or over
- <span class="command"><strong>nn_m</strong></span> milliseconds.
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="socket_stats"></a>Socket I/O Statistics Counters</h4></div></div></div>
-<p>
- Socket I/O statistics counters are defined per socket
- types, which are
- <span class="command"><strong>UDP4</strong></span> (UDP/IPv4),
- <span class="command"><strong>UDP6</strong></span> (UDP/IPv6),
- <span class="command"><strong>TCP4</strong></span> (TCP/IPv4),
- <span class="command"><strong>TCP6</strong></span> (TCP/IPv6),
- <span class="command"><strong>Unix</strong></span> (Unix Domain), and
- <span class="command"><strong>FDwatch</strong></span> (sockets opened outside the
- socket module).
- In the following table <span class="command"><strong>&lt;TYPE&gt;</strong></span>
- represents a socket type.
- Not all counters are available for all socket types;
- exceptions are noted in the description field.
- </p>
-<div class="informaltable"><table border="1">
-<colgroup>
-<col width="1.150in" class="1">
-<col width="3.350in" class="2">
-</colgroup>
-<tbody>
-<tr>
-<td>
- <p>
- <span class="emphasis"><em>Symbol</em></span>
- </p>
- </td>
-<td>
- <p>
- <span class="emphasis"><em>Description</em></span>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>&lt;TYPE&gt;Open</strong></span></p>
- </td>
-<td>
- <p>
- Sockets opened successfully.
- This counter is not applicable to the
- <span class="command"><strong>FDwatch</strong></span> type.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>&lt;TYPE&gt;OpenFail</strong></span></p>
- </td>
-<td>
- <p>
- Failures of opening sockets.
- This counter is not applicable to the
- <span class="command"><strong>FDwatch</strong></span> type.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>&lt;TYPE&gt;Close</strong></span></p>
- </td>
-<td>
- <p>
- Sockets closed.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>&lt;TYPE&gt;BindFail</strong></span></p>
- </td>
-<td>
- <p>
- Failures of binding sockets.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>&lt;TYPE&gt;ConnFail</strong></span></p>
- </td>
-<td>
- <p>
- Failures of connecting sockets.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>&lt;TYPE&gt;Conn</strong></span></p>
- </td>
-<td>
- <p>
- Connections established successfully.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>&lt;TYPE&gt;AcceptFail</strong></span></p>
- </td>
-<td>
- <p>
- Failures of accepting incoming connection requests.
- This counter is not applicable to the
- <span class="command"><strong>UDP</strong></span> and
- <span class="command"><strong>FDwatch</strong></span> types.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>&lt;TYPE&gt;Accept</strong></span></p>
- </td>
-<td>
- <p>
- Incoming connections successfully accepted.
- This counter is not applicable to the
- <span class="command"><strong>UDP</strong></span> and
- <span class="command"><strong>FDwatch</strong></span> types.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>&lt;TYPE&gt;SendErr</strong></span></p>
- </td>
-<td>
- <p>
- Errors in socket send operations.
- This counter corresponds
- to <span class="command"><strong>SErr</strong></span> counter of
- <span class="command"><strong>BIND</strong></span> 8.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p><span class="command"><strong>&lt;TYPE&gt;RecvErr</strong></span></p>
- </td>
-<td>
- <p>
- Errors in socket receive operations.
- This includes errors of send operations on a
- connected UDP socket notified by an ICMP error
- message.
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="bind8_compatibility"></a>Compatibility with <span class="emphasis"><em>BIND</em></span> 8 Counters</h4></div></div></div>
-<p>
- Most statistics counters that were available
- in <span class="command"><strong>BIND</strong></span> 8 are also supported in
- <span class="command"><strong>BIND</strong></span> 9 as shown in the above tables.
- Here are notes about other counters that do not appear
- in these tables.
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><span class="command"><strong>RFwdR,SFwdR</strong></span></span></dt>
-<dd><p>
- These counters are not supported
- because <span class="command"><strong>BIND</strong></span> 9 does not adopt
- the notion of <span class="emphasis"><em>forwarding</em></span>
- as <span class="command"><strong>BIND</strong></span> 8 did.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>RAXFR</strong></span></span></dt>
-<dd><p>
- This counter is accessible in the Incoming Queries section.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>RIQ</strong></span></span></dt>
-<dd><p>
- This counter is accessible in the Incoming Requests section.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>ROpts</strong></span></span></dt>
-<dd><p>
- This counter is not supported
- because <span class="command"><strong>BIND</strong></span> 9 does not care
- about IP options in the first place.
- </p></dd>
-</dl></div>
-</div>
-</div>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="Bv9ARM.ch05.html">Prev</a> </td>
-<td width="20%" align="center"> </td>
-<td width="40%" align="right"> <a accesskey="n" href="Bv9ARM.ch07.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">Chapter 5. The <acronym class="acronym">BIND</acronym> 9 Lightweight Resolver </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> Chapter 7. <acronym class="acronym">BIND</acronym> 9 Security Considerations</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/Bv9ARM.ch07.html b/doc/arm/Bv9ARM.ch07.html
deleted file mode 100644
index 6679f70c..00000000
--- a/doc/arm/Bv9ARM.ch07.html
+++ /dev/null
@@ -1,375 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>Chapter 7. BIND 9 Security Considerations</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="prev" href="Bv9ARM.ch06.html" title="Chapter 6. BIND 9 Configuration Reference">
-<link rel="next" href="Bv9ARM.ch08.html" title="Chapter 8. Troubleshooting">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center">Chapter 7. <acronym class="acronym">BIND</acronym> 9 Security Considerations</th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="Bv9ARM.ch06.html">Prev</a> </td>
-<th width="60%" align="center"> </th>
-<td width="20%" align="right"> <a accesskey="n" href="Bv9ARM.ch08.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="chapter">
-<div class="titlepage"><div><div><h1 class="title">
-<a name="Bv9ARM.ch07"></a>Chapter 7. <acronym class="acronym">BIND</acronym> 9 Security Considerations</h1></div></div></div>
-<div class="toc">
-<p><b>Table of Contents</b></p>
-<dl class="toc">
-<dt><span class="section"><a href="Bv9ARM.ch07.html#Access_Control_Lists">Access Control Lists</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch07.html#chroot_and_setuid"><span class="command"><strong>Chroot</strong></span> and <span class="command"><strong>Setuid</strong></span></a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch07.html#chroot">The <span class="command"><strong>chroot</strong></span> Environment</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch07.html#setuid">Using the <span class="command"><strong>setuid</strong></span> Function</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch07.html#dynamic_update_security">Dynamic Update Security</a></span></dt>
-</dl>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="Access_Control_Lists"></a>Access Control Lists</h2></div></div></div>
-<p>
- Access Control Lists (ACLs) are address match lists that
- you can set up and nickname for future use in
- <span class="command"><strong>allow-notify</strong></span>, <span class="command"><strong>allow-query</strong></span>,
- <span class="command"><strong>allow-query-on</strong></span>, <span class="command"><strong>allow-recursion</strong></span>,
- <span class="command"><strong>blackhole</strong></span>, <span class="command"><strong>allow-transfer</strong></span>,
- <span class="command"><strong>match-clients</strong></span>, etc.
- </p>
-<p>
- Using ACLs allows you to have finer control over who can access
- your name server, without cluttering up your config files with huge
- lists of IP addresses.
- </p>
-<p>
- It is a <span class="emphasis"><em>good idea</em></span> to use ACLs, and to
- control access to your server. Limiting access to your server by
- outside parties can help prevent spoofing and denial of service
- (DoS) attacks against your server.
- </p>
-<p>
- ACLs match clients on the basis of up to three characteristics:
- 1) The client's IP address; 2) the TSIG or SIG(0) key that was
- used to sign the request, if any; and 3) an address prefix
- encoded in an EDNS Client Subnet option, if any.
- </p>
-<p>
- Here is an example of ACLs based on client addresses:
- </p>
-<pre class="programlisting">
-// Set up an ACL named "bogusnets" that will block
-// RFC1918 space and some reserved space, which is
-// commonly used in spoofing attacks.
-acl bogusnets {
- 0.0.0.0/8; 192.0.2.0/24; 224.0.0.0/3;
- 10.0.0.0/8; 172.16.0.0/12; 192.168.0.0/16;
-};
-
-// Set up an ACL called our-nets. Replace this with the
-// real IP numbers.
-acl our-nets { x.x.x.x/24; x.x.x.x/21; };
-options {
- ...
- ...
- allow-query { our-nets; };
- allow-recursion { our-nets; };
- ...
- blackhole { bogusnets; };
- ...
-};
-
-zone "example.com" {
- type master;
- file "m/example.com";
- allow-query { any; };
-};
-</pre>
-<p>
- This allows authoritative queries for "example.com" from any
- address, but recursive queries only from the networks specified
- in "our-nets", and no queries at all from the networks
- specified in "bogusnets".
- </p>
-<p>
- In addition to network addresses and prefixes, which are
- matched against the source address of the DNS request, ACLs
- may include <code class="option">key</code> elements, which specify the
- name of a TSIG or SIG(0) key, or <code class="option">ecs</code>
- elements, which specify a network prefix but are only matched
- if that prefix matches an EDNS client subnet option included
- in the request.
- </p>
-<p>
- The EDNS Client Subnet (ECS) option is used by a recursive
- resolver to inform an authoritative name server of the network
- address block from which the original query was received, enabling
- authoritative servers to give different answers to the same
- resolver for different resolver clients. An ACL containing
- an element of the form
- <span class="command"><strong>ecs <em class="replaceable"><code>prefix</code></em></strong></span>
- will match if a request arrives in containing an ECS option
- encoding an address within that prefix. If the request has no
- ECS option, then "ecs" elements are simply ignored. Addresses
- in ACLs that are not prefixed with "ecs" are matched only
- against the source address.
- </p>
-<p>
- When <acronym class="acronym">BIND</acronym> 9 is built with GeoIP support,
- ACLs can also be used for geographic access restrictions.
- This is done by specifying an ACL element of the form:
- <span class="command"><strong>geoip [<span class="optional">db <em class="replaceable"><code>database</code></em></span>] <em class="replaceable"><code>field</code></em> <em class="replaceable"><code>value</code></em></strong></span>
- </p>
-<p>
- The <em class="replaceable"><code>field</code></em> indicates which field
- to search for a match. Available fields are "country",
- "region", "city", "continent", "postal" (postal code),
- "metro" (metro code), "area" (area code), "tz" (timezone),
- "isp", "org", "asnum", "domain" and "netspeed".
- </p>
-<p>
- <em class="replaceable"><code>value</code></em> is the value to search
- for within the database. A string may be quoted if it
- contains spaces or other special characters. If this is
- an "asnum" search, then the leading "ASNNNN" string can be
- used, otherwise the full description must be used (e.g.
- "ASNNNN Example Company Name"). If this is a "country"
- search and the string is two characters long, then it must
- be a standard ISO-3166-1 two-letter country code, and if it
- is three characters long then it must be an ISO-3166-1
- three-letter country code; otherwise it is the full name
- of the country. Similarly, if this is a "region" search
- and the string is two characters long, then it must be a
- standard two-letter state or province abbreviation;
- otherwise it is the full name of the state or province.
- </p>
-<p>
- The <em class="replaceable"><code>database</code></em> field indicates which
- GeoIP database to search for a match. In most cases this is
- unnecessary, because most search fields can only be found in
- a single database. However, searches for country can be
- answered from the "city", "region", or "country" databases,
- and searches for region (i.e., state or province) can be
- answered from the "city" or "region" databases. For these
- search types, specifying a <em class="replaceable"><code>database</code></em>
- will force the query to be answered from that database and no
- other. If <em class="replaceable"><code>database</code></em> is not
- specified, then these queries will be answered from the "city",
- database if it is installed, or the "region" database if it is
- installed, or the "country" database, in that order.
- </p>
-<p>
- By default, if a DNS query includes an EDNS Client Subnet (ECS)
- option which encodes a non-zero address prefix, then GeoIP ACLs
- will be matched against that address prefix. Otherwise, they
- are matched against the source address of the query. To
- prevent GeoIP ACLs from matching against ECS options, set
- the <span class="command"><strong>geoip-use-ecs</strong></span> to <code class="literal">no</code>.
- </p>
-<p>
- Some example GeoIP ACLs:
- </p>
-<pre class="programlisting">geoip country US;
-geoip country JAP;
-geoip db country country Canada;
-geoip db region region WA;
-geoip city "San Francisco";
-geoip region Oklahoma;
-geoip postal 95062;
-geoip tz "America/Los_Angeles";
-geoip org "Internet Systems Consortium";
-</pre>
-<p>
- ACLs use a "first-match" logic rather than "best-match":
- if an address prefix matches an ACL element, then that ACL
- is considered to have matched even if a later element would
- have matched more specifically. For example, the ACL
- <span class="command"><strong> { 10/8; !10.0.0.1; }</strong></span> would actually
- match a query from 10.0.0.1, because the first element
- indicated that the query should be accepted, and the second
- element is ignored.
- </p>
-<p>
- When using "nested" ACLs (that is, ACLs included or referenced
- within other ACLs), a negative match of a nested ACL will
- the containing ACL to continue looking for matches. This
- enables complex ACLs to be constructed, in which multiple
- client characteristics can be checked at the same time. For
- example, to construct an ACL which allows queries only when
- it originates from a particular network <span class="emphasis"><em>and</em></span>
- only when it is signed with a particular key, use:
- </p>
-<pre class="programlisting">
-allow-query { !{ !10/8; any; }; key example; };
-</pre>
-<p>
- Within the nested ACL, any address that is
- <span class="emphasis"><em>not</em></span> in the 10/8 network prefix will
- be rejected, and this will terminate processing of the
- ACL. Any address that <span class="emphasis"><em>is</em></span> in the 10/8
- network prefix will be accepted, but this causes a negative
- match of the nested ACL, so the containing ACL continues
- processing. The query will then be accepted if it is signed
- by the key "example", and rejected otherwise. The ACL, then,
- will only matches when <span class="emphasis"><em>both</em></span> conditions
- are true.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="chroot_and_setuid"></a><span class="command"><strong>Chroot</strong></span> and <span class="command"><strong>Setuid</strong></span>
-</h2></div></div></div>
-<p>
- On UNIX servers, it is possible to run <acronym class="acronym">BIND</acronym>
- in a <span class="emphasis"><em>chrooted</em></span> environment (using
- the <span class="command"><strong>chroot()</strong></span> function) by specifying
- the <code class="option">-t</code> option for <span class="command"><strong>named</strong></span>.
- This can help improve system security by placing
- <acronym class="acronym">BIND</acronym> in a "sandbox", which will limit
- the damage done if a server is compromised.
- </p>
-<p>
- Another useful feature in the UNIX version of <acronym class="acronym">BIND</acronym> is the
- ability to run the daemon as an unprivileged user ( <code class="option">-u</code> <em class="replaceable"><code>user</code></em> ).
- We suggest running as an unprivileged user when using the <span class="command"><strong>chroot</strong></span> feature.
- </p>
-<p>
- Here is an example command line to load <acronym class="acronym">BIND</acronym> in a <span class="command"><strong>chroot</strong></span> sandbox,
- <span class="command"><strong>/var/named</strong></span>, and to run <span class="command"><strong>named</strong></span> <span class="command"><strong>setuid</strong></span> to
- user 202:
- </p>
-<p>
- <strong class="userinput"><code>/usr/local/sbin/named -u 202 -t /var/named</code></strong>
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="chroot"></a>The <span class="command"><strong>chroot</strong></span> Environment</h3></div></div></div>
-<p>
- In order for a <span class="command"><strong>chroot</strong></span> environment
- to work properly in a particular directory (for example,
- <code class="filename">/var/named</code>), you will need to set
- up an environment that includes everything
- <acronym class="acronym">BIND</acronym> needs to run. From
- <acronym class="acronym">BIND</acronym>'s point of view,
- <code class="filename">/var/named</code> is the root of the
- filesystem. You will need to adjust the values of
- options like <span class="command"><strong>directory</strong></span> and
- <span class="command"><strong>pid-file</strong></span> to account for this.
- </p>
-<p>
- Unlike with earlier versions of BIND, you typically will
- <span class="emphasis"><em>not</em></span> need to compile <span class="command"><strong>named</strong></span>
- statically nor install shared libraries under the new root.
- However, depending on your operating system, you may need
- to set up things like
- <code class="filename">/dev/zero</code>,
- <code class="filename">/dev/random</code>,
- <code class="filename">/dev/log</code>, and
- <code class="filename">/etc/localtime</code>.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="setuid"></a>Using the <span class="command"><strong>setuid</strong></span> Function</h3></div></div></div>
-<p>
- Prior to running the <span class="command"><strong>named</strong></span> daemon,
- use
- the <span class="command"><strong>touch</strong></span> utility (to change file
- access and
- modification times) or the <span class="command"><strong>chown</strong></span>
- utility (to
- set the user id and/or group id) on files
- to which you want <acronym class="acronym">BIND</acronym>
- to write.
- </p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- If the <span class="command"><strong>named</strong></span> daemon is running as an
- unprivileged user, it will not be able to bind to new restricted
- ports if the server is reloaded.
- </p>
-</div>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="dynamic_update_security"></a>Dynamic Update Security</h2></div></div></div>
-<p>
- Access to the dynamic
- update facility should be strictly limited. In earlier versions of
- <acronym class="acronym">BIND</acronym>, the only way to do this was
- based on the IP
- address of the host requesting the update, by listing an IP address
- or
- network prefix in the <span class="command"><strong>allow-update</strong></span>
- zone option.
- This method is insecure since the source address of the update UDP
- packet
- is easily forged. Also note that if the IP addresses allowed by the
- <span class="command"><strong>allow-update</strong></span> option include the
- address of a slave
- server which performs forwarding of dynamic updates, the master can
- be
- trivially attacked by sending the update to the slave, which will
- forward it to the master with its own source IP address causing the
- master to approve it without question.
- </p>
-<p>
- For these reasons, we strongly recommend that updates be
- cryptographically authenticated by means of transaction signatures
- (TSIG). That is, the <span class="command"><strong>allow-update</strong></span>
- option should
- list only TSIG key names, not IP addresses or network
- prefixes. Alternatively, the new <span class="command"><strong>update-policy</strong></span>
- option can be used.
- </p>
-<p>
- Some sites choose to keep all dynamically-updated DNS data
- in a subdomain and delegate that subdomain to a separate zone. This
- way, the top-level zone containing critical data such as the IP
- addresses
- of public web and mail servers need not allow dynamic update at
- all.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="Bv9ARM.ch06.html">Prev</a> </td>
-<td width="20%" align="center"> </td>
-<td width="40%" align="right"> <a accesskey="n" href="Bv9ARM.ch08.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">Chapter 6. <acronym class="acronym">BIND</acronym> 9 Configuration Reference </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> Chapter 8. Troubleshooting</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/Bv9ARM.ch08.html b/doc/arm/Bv9ARM.ch08.html
deleted file mode 100644
index 6163fd46..00000000
--- a/doc/arm/Bv9ARM.ch08.html
+++ /dev/null
@@ -1,131 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>Chapter 8. Troubleshooting</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="prev" href="Bv9ARM.ch07.html" title="Chapter 7. BIND 9 Security Considerations">
-<link rel="next" href="Bv9ARM.ch09.html" title="Appendix A. Release Notes">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center">Chapter 8. Troubleshooting</th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="Bv9ARM.ch07.html">Prev</a> </td>
-<th width="60%" align="center"> </th>
-<td width="20%" align="right"> <a accesskey="n" href="Bv9ARM.ch09.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="chapter">
-<div class="titlepage"><div><div><h1 class="title">
-<a name="Bv9ARM.ch08"></a>Chapter 8. Troubleshooting</h1></div></div></div>
-<div class="toc">
-<p><b>Table of Contents</b></p>
-<dl class="toc">
-<dt><span class="section"><a href="Bv9ARM.ch08.html#common_problems">Common Problems</a></span></dt>
-<dd><dl><dt><span class="section"><a href="Bv9ARM.ch08.html#id-1.9.2.2">It's not working; how can I figure out what's wrong?</a></span></dt></dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch08.html#id-1.9.3">Incrementing and Changing the Serial Number</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch08.html#more_help">Where Can I Get Help?</a></span></dt>
-</dl>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="common_problems"></a>Common Problems</h2></div></div></div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.9.2.2"></a>It's not working; how can I figure out what's wrong?</h3></div></div></div>
-<p>
- The best solution to solving installation and
- configuration issues is to take preventative measures by setting
- up logging files beforehand. The log files provide a
- source of hints and information that can be used to figure out
- what went wrong and how to fix the problem.
- </p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id-1.9.3"></a>Incrementing and Changing the Serial Number</h2></div></div></div>
-<p>
- Zone serial numbers are just numbers &#8212; they aren't
- date related. A lot of people set them to a number that
- represents a date, usually of the form YYYYMMDDRR.
- Occasionally they will make a mistake and set them to a
- "date in the future" then try to correct them by setting
- them to the "current date". This causes problems because
- serial numbers are used to indicate that a zone has been
- updated. If the serial number on the slave server is
- lower than the serial number on the master, the slave
- server will attempt to update its copy of the zone.
- </p>
-<p>
- Setting the serial number to a lower number on the master
- server than the slave server means that the slave will not perform
- updates to its copy of the zone.
- </p>
-<p>
- The solution to this is to add 2147483647 (2^31-1) to the
- number, reload the zone and make sure all slaves have updated to
- the new zone serial number, then reset the number to what you want
- it to be, and reload the zone again.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="more_help"></a>Where Can I Get Help?</h2></div></div></div>
-<p>
- The Internet Systems Consortium
- (<acronym class="acronym">ISC</acronym>) offers a wide range
- of support and service agreements for <acronym class="acronym">BIND</acronym> and <acronym class="acronym">DHCP</acronym> servers. Four
- levels of premium support are available and each level includes
- support for all <acronym class="acronym">ISC</acronym> programs,
- significant discounts on products
- and training, and a recognized priority on bug fixes and
- non-funded feature requests. In addition, <acronym class="acronym">ISC</acronym> offers a standard
- support agreement package which includes services ranging from bug
- fix announcements to remote support. It also includes training in
- <acronym class="acronym">BIND</acronym> and <acronym class="acronym">DHCP</acronym>.
- </p>
-<p>
- To discuss arrangements for support, contact
- <a class="link" href="mailto:info@isc.org" target="_top">info@isc.org</a> or visit the
- <acronym class="acronym">ISC</acronym> web page at
- <a class="link" href="http://www.isc.org/services/support/" target="_top">http://www.isc.org/services/support/</a>
- to read more.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="Bv9ARM.ch07.html">Prev</a> </td>
-<td width="20%" align="center"> </td>
-<td width="40%" align="right"> <a accesskey="n" href="Bv9ARM.ch09.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">Chapter 7. <acronym class="acronym">BIND</acronym> 9 Security Considerations </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> Appendix A. Release Notes</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/Bv9ARM.ch09.html b/doc/arm/Bv9ARM.ch09.html
deleted file mode 100644
index 9184c901..00000000
--- a/doc/arm/Bv9ARM.ch09.html
+++ /dev/null
@@ -1,201 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>Appendix A. Release Notes</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="prev" href="Bv9ARM.ch08.html" title="Chapter 8. Troubleshooting">
-<link rel="next" href="Bv9ARM.ch10.html" title="Appendix B. A Brief History of the DNS and BIND">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center">Appendix A. Release Notes</th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="Bv9ARM.ch08.html">Prev</a> </td>
-<th width="60%" align="center"> </th>
-<td width="20%" align="right"> <a accesskey="n" href="Bv9ARM.ch10.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="appendix">
-<div class="titlepage"><div><div><h1 class="title">
-<a name="Bv9ARM.ch09"></a>Release Notes</h1></div></div></div>
-<div class="toc">
-<p><b>Table of Contents</b></p>
-<dl class="toc">
-<dt><span class="section"><a href="Bv9ARM.ch09.html#id-1.10.2">Release Notes for BIND Version 9.11.0-P3</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch09.html#relnotes_intro">Introduction</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch09.html#relnotes_download">Download</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch09.html#relnotes_security">Security Fixes</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch09.html#relnotes_features">New Features</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch09.html#relnotes_changes">Feature Changes</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch09.html#relnotes_port">Porting Changes</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch09.html#relnotes_bugs">Bug Fixes</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch09.html#end_of_life">End of Life</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch09.html#relnotes_thanks">Thank You</a></span></dt>
-</dl></dd>
-</dl>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id-1.10.2"></a>Release Notes for BIND Version 9.11.0-P3</h2></div></div></div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="relnotes_intro"></a>Introduction</h3></div></div></div>
-<p>
- This document summarizes changes since BIND 9.11.0:
- </p>
-<p>
- BIND 9.11.0-P3 addresses the security issue described in
- CVE-2017-3135, and fixes a regression introduced in a prior
- security release.
- </p>
-<p>
- BIND 9.11.0-P2 addresses the security issues described in
- CVE-2016-9131, CVE-2016-9147, CVE-2016-9444 and CVE-2016-9778.
- </p>
-<p>
- BIND 9.11.0-P1 addresses the security issue described in
- CVE-2016-8864.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="relnotes_download"></a>Download</h3></div></div></div>
-<p>
- The latest versions of BIND 9 software can always be found at
- <a class="link" href="http://www.isc.org/downloads/" target="_top">http://www.isc.org/downloads/</a>.
- There you will find additional information about each release,
- source code, and pre-compiled versions for Microsoft Windows
- operating systems.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="relnotes_security"></a>Security Fixes</h3></div></div></div>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem"><p>
- If a server is configured with a response policy zone (RPZ)
- that rewrites an answer with local data, and is also configured
- for DNS64 address mapping, a NULL pointer can be read
- triggering a server crash. This flaw is disclosed in
- CVE-2017-3135. [RT #44434]
- </p></li>
-<li class="listitem"><p>
- A coding error in the <code class="option">nxdomain-redirect</code>
- feature could lead to an assertion failure if the redirection
- namespace was served from a local authoritative data source
- such as a local zone or a DLZ instead of via recursive
- lookup. This flaw is disclosed in CVE-2016-9778. [RT #43837]
- </p></li>
-<li class="listitem"><p>
- <span class="command"><strong>named</strong></span> could mishandle authority sections
- with missing RRSIGs, triggering an assertion failure. This
- flaw is disclosed in CVE-2016-9444. [RT #43632]
- </p></li>
-<li class="listitem"><p>
- <span class="command"><strong>named</strong></span> mishandled some responses where
- covering RRSIG records were returned without the requested
- data, resulting in an assertion failure. This flaw is
- disclosed in CVE-2016-9147. [RT #43548]
- </p></li>
-<li class="listitem"><p>
- <span class="command"><strong>named</strong></span> incorrectly tried to cache TKEY
- records which could trigger an assertion failure when there was
- a class mismatch. This flaw is disclosed in CVE-2016-9131.
- [RT #43522]
- </p></li>
-<li class="listitem"><p>
- It was possible to trigger assertions when processing
- responses containing answers of type DNAME. This flaw is
- disclosed in CVE-2016-8864. [RT #43465]
- </p></li>
-</ul></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="relnotes_features"></a>New Features</h3></div></div></div>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
- None.
- </p></li></ul></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="relnotes_changes"></a>Feature Changes</h3></div></div></div>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
- None.
- </p></li></ul></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="relnotes_port"></a>Porting Changes</h3></div></div></div>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
- None.
- </p></li></ul></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="relnotes_bugs"></a>Bug Fixes</h3></div></div></div>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
- A synthesized CNAME record appearing in a response before the
- associated DNAME could be cached, when it should not have been.
- This was a regression introduced while addressing CVE-2016-8864.
- [RT #44318]
- </p></li></ul></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="end_of_life"></a>End of Life</h3></div></div></div>
-<p>
- The end of life for BIND 9.11 is yet to be determined but
- will not be before BIND 9.13.0 has been released for 6 months.
- <a class="link" href="https://www.isc.org/downloads/software-support-policy/" target="_top">https://www.isc.org/downloads/software-support-policy/</a>
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="relnotes_thanks"></a>Thank You</h3></div></div></div>
-<p>
- Thank you to everyone who assisted us in making this release possible.
- If you would like to contribute to ISC to assist us in continuing to
- make quality open source software, please visit our donations page at
- <a class="link" href="http://www.isc.org/donate/" target="_top">http://www.isc.org/donate/</a>.
- </p>
-</div>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="Bv9ARM.ch08.html">Prev</a> </td>
-<td width="20%" align="center"> </td>
-<td width="40%" align="right"> <a accesskey="n" href="Bv9ARM.ch10.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">Chapter 8. Troubleshooting </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> Appendix B. A Brief History of the <acronym class="acronym">DNS</acronym> and <acronym class="acronym">BIND</acronym>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/Bv9ARM.ch10.html b/doc/arm/Bv9ARM.ch10.html
deleted file mode 100644
index b958d551..00000000
--- a/doc/arm/Bv9ARM.ch10.html
+++ /dev/null
@@ -1,152 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>Appendix B. A Brief History of the DNS and BIND</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="prev" href="Bv9ARM.ch09.html" title="Appendix A. Release Notes">
-<link rel="next" href="Bv9ARM.ch11.html" title="Appendix C. General DNS Reference Information">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center">Appendix B. A Brief History of the <acronym class="acronym">DNS</acronym> and <acronym class="acronym">BIND</acronym>
-</th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="Bv9ARM.ch09.html">Prev</a> </td>
-<th width="60%" align="center"> </th>
-<td width="20%" align="right"> <a accesskey="n" href="Bv9ARM.ch11.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="appendix">
-<div class="titlepage"><div><div><h1 class="title">
-<a name="Bv9ARM.ch10"></a>A Brief History of the <acronym class="acronym">DNS</acronym> and <acronym class="acronym">BIND</acronym>
-</h1></div></div></div>
-<p><a name="historical_dns_information"></a>
- Although the "official" beginning of the Domain Name
- System occurred in 1984 with the publication of RFC 920, the
- core of the new system was described in 1983 in RFCs 882 and
- 883. From 1984 to 1987, the ARPAnet (the precursor to today's
- Internet) became a testbed of experimentation for developing the
- new naming/addressing scheme in a rapidly expanding,
- operational network environment. New RFCs were written and
- published in 1987 that modified the original documents to
- incorporate improvements based on the working model. RFC 1034,
- "Domain Names-Concepts and Facilities", and RFC 1035, "Domain
- Names-Implementation and Specification" were published and
- became the standards upon which all <acronym class="acronym">DNS</acronym> implementations are
- built.
- </p>
-<p>
- The first working domain name server, called "Jeeves", was
- written in 1983-84 by Paul Mockapetris for operation on DEC
- Tops-20
- machines located at the University of Southern California's
- Information
- Sciences Institute (USC-ISI) and SRI International's Network
- Information
- Center (SRI-NIC). A <acronym class="acronym">DNS</acronym> server for
- Unix machines, the Berkeley Internet
- Name Domain (<acronym class="acronym">BIND</acronym>) package, was
- written soon after by a group of
- graduate students at the University of California at Berkeley
- under
- a grant from the US Defense Advanced Research Projects
- Administration
- (DARPA).
- </p>
-<p>
- Versions of <acronym class="acronym">BIND</acronym> through
- 4.8.3 were maintained by the Computer
- Systems Research Group (CSRG) at UC Berkeley. Douglas Terry, Mark
- Painter, David Riggle and Songnian Zhou made up the initial <acronym class="acronym">BIND</acronym>
- project team. After that, additional work on the software package
- was done by Ralph Campbell. Kevin Dunlap, a Digital Equipment
- Corporation
- employee on loan to the CSRG, worked on <acronym class="acronym">BIND</acronym> for 2 years, from 1985
- to 1987. Many other people also contributed to <acronym class="acronym">BIND</acronym> development
- during that time: Doug Kingston, Craig Partridge, Smoot
- Carl-Mitchell,
- Mike Muuss, Jim Bloom and Mike Schwartz. <acronym class="acronym">BIND</acronym> maintenance was subsequently
- handled by Mike Karels and Øivind Kure.
- </p>
-<p>
- <acronym class="acronym">BIND</acronym> versions 4.9 and 4.9.1 were
- released by Digital Equipment
- Corporation (now Compaq Computer Corporation). Paul Vixie, then
- a DEC employee, became <acronym class="acronym">BIND</acronym>'s
- primary caretaker. He was assisted
- by Phil Almquist, Robert Elz, Alan Barrett, Paul Albitz, Bryan
- Beecher, Andrew
- Partan, Andy Cherenson, Tom Limoncelli, Berthold Paffrath, Fuat
- Baran, Anant Kumar, Art Harkin, Win Treese, Don Lewis, Christophe
- Wolfhugel, and others.
- </p>
-<p>
- In 1994, <acronym class="acronym">BIND</acronym> version 4.9.2 was sponsored by
- Vixie Enterprises. Paul
- Vixie became <acronym class="acronym">BIND</acronym>'s principal
- architect/programmer.
- </p>
-<p>
- <acronym class="acronym">BIND</acronym> versions from 4.9.3 onward
- have been developed and maintained
- by the Internet Systems Consortium and its predecessor,
- the Internet Software Consortium, with support being provided
- by ISC's sponsors.
- </p>
-<p>
- As co-architects/programmers, Bob Halley and
- Paul Vixie released the first production-ready version of
- <acronym class="acronym">BIND</acronym> version 8 in May 1997.
- </p>
-<p>
- BIND version 9 was released in September 2000 and is a
- major rewrite of nearly all aspects of the underlying
- BIND architecture.
- </p>
-<p>
- BIND versions 4 and 8 are officially deprecated.
- No additional development is done
- on BIND version 4 or BIND version 8.
- </p>
-<p>
- <acronym class="acronym">BIND</acronym> development work is made
- possible today by the sponsorship
- of several corporations, and by the tireless work efforts of
- numerous individuals.
- </p>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="Bv9ARM.ch09.html">Prev</a> </td>
-<td width="20%" align="center"> </td>
-<td width="40%" align="right"> <a accesskey="n" href="Bv9ARM.ch11.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">Appendix A. Release Notes </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> Appendix C. General <acronym class="acronym">DNS</acronym> Reference Information</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/Bv9ARM.ch11.html b/doc/arm/Bv9ARM.ch11.html
deleted file mode 100644
index 9ca23d43..00000000
--- a/doc/arm/Bv9ARM.ch11.html
+++ /dev/null
@@ -1,494 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>Appendix C. General DNS Reference Information</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="prev" href="Bv9ARM.ch10.html" title="Appendix B. A Brief History of the DNS and BIND">
-<link rel="next" href="Bv9ARM.ch12.html" title="Appendix D. BIND 9 DNS Library Support">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center">Appendix C. General <acronym class="acronym">DNS</acronym> Reference Information</th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="Bv9ARM.ch10.html">Prev</a> </td>
-<th width="60%" align="center"> </th>
-<td width="20%" align="right"> <a accesskey="n" href="Bv9ARM.ch12.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="appendix">
-<div class="titlepage"><div><div><h1 class="title">
-<a name="Bv9ARM.ch11"></a>General <acronym class="acronym">DNS</acronym> Reference Information</h1></div></div></div>
-<div class="toc">
-<p><b>Table of Contents</b></p>
-<dl class="toc">
-<dt><span class="section"><a href="Bv9ARM.ch11.html#ipv6addresses">IPv6 addresses (AAAA)</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch11.html#bibliography">Bibliography (and Suggested Reading)</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch11.html#rfcs">Request for Comments (RFCs)</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch11.html#internet_drafts">Internet Drafts</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch11.html#more_about_bind">Other Documents About <acronym class="acronym">BIND</acronym></a></span></dt>
-</dl></dd>
-</dl>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="ipv6addresses"></a>IPv6 addresses (AAAA)</h2></div></div></div>
-<p>
- IPv6 addresses are 128-bit identifiers for interfaces and
- sets of interfaces which were introduced in the <acronym class="acronym">DNS</acronym> to facilitate
- scalable Internet routing. There are three types of addresses: <span class="emphasis"><em>Unicast</em></span>,
- an identifier for a single interface;
- <span class="emphasis"><em>Anycast</em></span>,
- an identifier for a set of interfaces; and <span class="emphasis"><em>Multicast</em></span>,
- an identifier for a set of interfaces. Here we describe the global
- Unicast address scheme. For more information, see RFC 3587,
- "Global Unicast Address Format."
- </p>
-<p>
- IPv6 unicast addresses consist of a
- <span class="emphasis"><em>global routing prefix</em></span>, a
- <span class="emphasis"><em>subnet identifier</em></span>, and an
- <span class="emphasis"><em>interface identifier</em></span>.
- </p>
-<p>
- The global routing prefix is provided by the
- upstream provider or ISP, and (roughly) corresponds to the
- IPv4 <span class="emphasis"><em>network</em></span> section
- of the address range.
-
- The subnet identifier is for local subnetting, much the
- same as subnetting an
- IPv4 /16 network into /24 subnets.
-
- The interface identifier is the address of an individual
- interface on a given network; in IPv6, addresses belong to
- interfaces rather than to machines.
- </p>
-<p>
- The subnetting capability of IPv6 is much more flexible than
- that of IPv4: subnetting can be carried out on bit boundaries,
- in much the same way as Classless InterDomain Routing
- (CIDR), and the DNS PTR representation ("nibble" format)
- makes setting up reverse zones easier.
- </p>
-<p>
- The Interface Identifier must be unique on the local link,
- and is usually generated automatically by the IPv6
- implementation, although it is usually possible to
- override the default setting if necessary. A typical IPv6
- address might look like:
- <span class="command"><strong>2001:db8:201:9:a00:20ff:fe81:2b32</strong></span>
- </p>
-<p>
- IPv6 address specifications often contain long strings
- of zeros, so the architects have included a shorthand for
- specifying
- them. The double colon (`::') indicates the longest possible
- string
- of zeros that can fit, and can be used only once in an address.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="bibliography"></a>Bibliography (and Suggested Reading)</h2></div></div></div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="rfcs"></a>Request for Comments (RFCs)</h3></div></div></div>
-<p>
- Specification documents for the Internet protocol suite, including
- the <acronym class="acronym">DNS</acronym>, are published as part of
- the Request for Comments (RFCs)
- series of technical notes. The standards themselves are defined
- by the Internet Engineering Task Force (IETF) and the Internet
- Engineering Steering Group (IESG). RFCs can be obtained online via FTP at:
- </p>
-<p>
- <a class="link" href="ftp://www.isi.edu/in-notes/" target="_top">
- ftp://www.isi.edu/in-notes/RFC<em class="replaceable"><code>xxxx</code></em>.txt
- </a>
- </p>
-<p>
- (where <em class="replaceable"><code>xxxx</code></em> is
- the number of the RFC). RFCs are also available via the Web at:
- </p>
-<p>
- <a class="link" href="http://www.ietf.org/rfc/" target="_top">http://www.ietf.org/rfc/</a>.
- </p>
-<div class="bibliography">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="id-1.12.3.2.6"></a>Bibliography</h4></div></div></div>
-<div class="bibliodiv">
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.1.2"></a><p>[<abbr class="abbrev">RFC974</abbr>] <span class="author"><span class="firstname">C.</span> <span class="surname">Partridge</span>. </span><span class="citetitle"><em class="citetitle">Mail Routing and the Domain System</em>. </span><span class="pubdate">January 1986. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.1.3"></a><p>[<abbr class="abbrev">RFC1034</abbr>] <span class="author"><span class="firstname">P.V.</span> <span class="surname">Mockapetris</span>. </span><span class="citetitle"><em class="citetitle">Domain Names &#8212; Concepts and Facilities</em>. </span><span class="pubdate">November 1987. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.1.4"></a><p>[<abbr class="abbrev">RFC1035</abbr>] <span class="author"><span class="firstname">P. V.</span> <span class="surname">Mockapetris</span>. </span><span class="citetitle"><em class="citetitle">Domain Names &#8212; Implementation and
- Specification</em>. </span><span class="pubdate">November 1987. </span></p>
-</div>
-</div>
-<div class="bibliodiv">
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.2.2"></a><p>[<abbr class="abbrev">RFC2181</abbr>] <span class="author"><span class="firstname">R., R. Bush</span> <span class="surname">Elz</span>. </span><span class="citetitle"><em class="citetitle">Clarifications to the <acronym class="acronym">DNS</acronym>
- Specification</em>. </span><span class="pubdate">July 1997. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.2.3"></a><p>[<abbr class="abbrev">RFC2308</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Andrews</span>. </span><span class="citetitle"><em class="citetitle">Negative Caching of <acronym class="acronym">DNS</acronym>
- Queries</em>. </span><span class="pubdate">March 1998. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.2.4"></a><p>[<abbr class="abbrev">RFC1995</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Ohta</span>. </span><span class="citetitle"><em class="citetitle">Incremental Zone Transfer in <acronym class="acronym">DNS</acronym></em>. </span><span class="pubdate">August 1996. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.2.5"></a><p>[<abbr class="abbrev">RFC1996</abbr>] <span class="author"><span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="citetitle"><em class="citetitle">A Mechanism for Prompt Notification of Zone Changes</em>. </span><span class="pubdate">August 1996. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.2.6"></a><p>[<abbr class="abbrev">RFC2136</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Vixie</span>, <span class="firstname">S.</span> <span class="surname">Thomson</span>, <span class="firstname">Y.</span> <span class="surname">Rekhter</span>, and <span class="firstname">J.</span> <span class="surname">Bound</span>. </span><span class="citetitle"><em class="citetitle">Dynamic Updates in the Domain Name System</em>. </span><span class="pubdate">April 1997. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.2.7"></a><p>[<abbr class="abbrev">RFC2671</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="citetitle"><em class="citetitle">Extension Mechanisms for DNS (EDNS0)</em>. </span><span class="pubdate">August 1997. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.2.8"></a><p>[<abbr class="abbrev">RFC2672</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Crawford</span>. </span><span class="citetitle"><em class="citetitle">Non-Terminal DNS Name Redirection</em>. </span><span class="pubdate">August 1999. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.2.9"></a><p>[<abbr class="abbrev">RFC2845</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Vixie</span>, <span class="firstname">O.</span> <span class="surname">Gudmundsson</span>, <span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>, and <span class="firstname">B.</span> <span class="surname">Wellington</span>. </span><span class="citetitle"><em class="citetitle">Secret Key Transaction Authentication for <acronym class="acronym">DNS</acronym> (TSIG)</em>. </span><span class="pubdate">May 2000. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.2.10"></a><p>[<abbr class="abbrev">RFC2930</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="citetitle"><em class="citetitle">Secret Key Establishment for DNS (TKEY RR)</em>. </span><span class="pubdate">September 2000. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.2.11"></a><p>[<abbr class="abbrev">RFC2931</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="citetitle"><em class="citetitle">DNS Request and Transaction Signatures (SIG(0)s)</em>. </span><span class="pubdate">September 2000. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.2.12"></a><p>[<abbr class="abbrev">RFC3007</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Wellington</span>. </span><span class="citetitle"><em class="citetitle">Secure Domain Name System (DNS) Dynamic Update</em>. </span><span class="pubdate">November 2000. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.2.13"></a><p>[<abbr class="abbrev">RFC3645</abbr>] <span class="authorgroup"><span class="firstname">S.</span> <span class="surname">Kwan</span>, <span class="firstname">P.</span> <span class="surname">Garg</span>, <span class="firstname">J.</span> <span class="surname">Gilroy</span>, <span class="firstname">L.</span> <span class="surname">Esibov</span>, <span class="firstname">J.</span> <span class="surname">Westhead</span>, and <span class="firstname">R.</span> <span class="surname">Hall</span>. </span><span class="citetitle"><em class="citetitle">Generic Security Service Algorithm for Secret
- Key Transaction Authentication for DNS
- (GSS-TSIG)</em>. </span><span class="pubdate">October 2003. </span></p>
-</div>
-</div>
-<div class="bibliodiv">
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.3.2"></a><p>[<abbr class="abbrev">RFC3225</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Conrad</span>. </span><span class="citetitle"><em class="citetitle">Indicating Resolver Support of DNSSEC</em>. </span><span class="pubdate">December 2001. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.3.3"></a><p>[<abbr class="abbrev">RFC3833</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Atkins</span> and <span class="firstname">R.</span> <span class="surname">Austein</span>. </span><span class="citetitle"><em class="citetitle">Threat Analysis of the Domain Name System (DNS)</em>. </span><span class="pubdate">August 2004. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.3.4"></a><p>[<abbr class="abbrev">RFC4033</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Arends</span>, <span class="firstname">R.</span> <span class="surname">Austein</span>, <span class="firstname">M.</span> <span class="surname">Larson</span>, <span class="firstname">D.</span> <span class="surname">Massey</span>, and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="citetitle"><em class="citetitle">DNS Security Introduction and Requirements</em>. </span><span class="pubdate">March 2005. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.3.5"></a><p>[<abbr class="abbrev">RFC4034</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Arends</span>, <span class="firstname">R.</span> <span class="surname">Austein</span>, <span class="firstname">M.</span> <span class="surname">Larson</span>, <span class="firstname">D.</span> <span class="surname">Massey</span>, and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="citetitle"><em class="citetitle">Resource Records for the DNS Security Extensions</em>. </span><span class="pubdate">March 2005. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.3.6"></a><p>[<abbr class="abbrev">RFC4035</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Arends</span>, <span class="firstname">R.</span> <span class="surname">Austein</span>, <span class="firstname">M.</span> <span class="surname">Larson</span>, <span class="firstname">D.</span> <span class="surname">Massey</span>, and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="citetitle"><em class="citetitle">Protocol Modifications for the DNS
- Security Extensions</em>. </span><span class="pubdate">March 2005. </span></p>
-</div>
-</div>
-<div class="bibliodiv">
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.4.2"></a><p>[<abbr class="abbrev">RFC1535</abbr>] <span class="author"><span class="firstname">E.</span> <span class="surname">Gavron</span>. </span><span class="citetitle"><em class="citetitle">A Security Problem and Proposed Correction With Widely
- Deployed <acronym class="acronym">DNS</acronym> Software</em>. </span><span class="pubdate">October 1993. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.4.3"></a><p>[<abbr class="abbrev">RFC1536</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Kumar</span>, <span class="firstname">J.</span> <span class="surname">Postel</span>, <span class="firstname">C.</span> <span class="surname">Neuman</span>, <span class="firstname">P.</span> <span class="surname">Danzig</span>, and <span class="firstname">S.</span> <span class="surname">Miller</span>. </span><span class="citetitle"><em class="citetitle">Common <acronym class="acronym">DNS</acronym> Implementation
- Errors and Suggested Fixes</em>. </span><span class="pubdate">October 1993. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.4.4"></a><p>[<abbr class="abbrev">RFC1982</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Elz</span> and <span class="firstname">R.</span> <span class="surname">Bush</span>. </span><span class="citetitle"><em class="citetitle">Serial Number Arithmetic</em>. </span><span class="pubdate">August 1996. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.4.5"></a><p>[<abbr class="abbrev">RFC4074</abbr>] <span class="authorgroup"><span class="firstname">Y.</span> <span class="surname">Morishita</span> and <span class="firstname">T.</span> <span class="surname">Jinmei</span>. </span><span class="citetitle"><em class="citetitle">Common Misbehaviour Against <acronym class="acronym">DNS</acronym>
- Queries for IPv6 Addresses</em>. </span><span class="pubdate">May 2005. </span></p>
-</div>
-</div>
-<div class="bibliodiv">
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.5.2"></a><p>[<abbr class="abbrev">RFC1183</abbr>] <span class="authorgroup"><span class="firstname">C.F.</span> <span class="surname">Everhart</span>, <span class="firstname">L. A.</span> <span class="surname">Mamakos</span>, <span class="firstname">R.</span> <span class="surname">Ullmann</span>, and <span class="firstname">P.</span> <span class="surname">Mockapetris</span>. </span><span class="citetitle"><em class="citetitle">New <acronym class="acronym">DNS</acronym> RR Definitions</em>. </span><span class="pubdate">October 1990. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.5.3"></a><p>[<abbr class="abbrev">RFC1706</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Manning</span> and <span class="firstname">R.</span> <span class="surname">Colella</span>. </span><span class="citetitle"><em class="citetitle"><acronym class="acronym">DNS</acronym> NSAP Resource Records</em>. </span><span class="pubdate">October 1994. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.5.4"></a><p>[<abbr class="abbrev">RFC2168</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Daniel</span> and <span class="firstname">M.</span> <span class="surname">Mealling</span>. </span><span class="citetitle"><em class="citetitle">Resolution of Uniform Resource Identifiers using
- the Domain Name System</em>. </span><span class="pubdate">June 1997. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.5.5"></a><p>[<abbr class="abbrev">RFC1876</abbr>] <span class="authorgroup"><span class="firstname">C.</span> <span class="surname">Davis</span>, <span class="firstname">P.</span> <span class="surname">Vixie</span>, <span class="firstname">T.</span>, and <span class="firstname">I.</span> <span class="surname">Dickinson</span>. </span><span class="citetitle"><em class="citetitle">A Means for Expressing Location Information in the
- Domain
- Name System</em>. </span><span class="pubdate">January 1996. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.5.6"></a><p>[<abbr class="abbrev">RFC2052</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Gulbrandsen</span> and <span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="citetitle"><em class="citetitle">A <acronym class="acronym">DNS</acronym> RR for Specifying the
- Location of
- Services</em>. </span><span class="pubdate">October 1996. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.5.7"></a><p>[<abbr class="abbrev">RFC2163</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Allocchio</span>. </span><span class="citetitle"><em class="citetitle">Using the Internet <acronym class="acronym">DNS</acronym> to
- Distribute MIXER
- Conformant Global Address Mapping</em>. </span><span class="pubdate">January 1998. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.5.8"></a><p>[<abbr class="abbrev">RFC2230</abbr>] <span class="author"><span class="firstname">R.</span> <span class="surname">Atkinson</span>. </span><span class="citetitle"><em class="citetitle">Key Exchange Delegation Record for the <acronym class="acronym">DNS</acronym></em>. </span><span class="pubdate">October 1997. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.5.9"></a><p>[<abbr class="abbrev">RFC2536</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="citetitle"><em class="citetitle">DSA KEYs and SIGs in the Domain Name System (DNS)</em>. </span><span class="pubdate">March 1999. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.5.10"></a><p>[<abbr class="abbrev">RFC2537</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="citetitle"><em class="citetitle">RSA/MD5 KEYs and SIGs in the Domain Name System (DNS)</em>. </span><span class="pubdate">March 1999. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.5.11"></a><p>[<abbr class="abbrev">RFC2538</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span> and <span class="firstname">O.</span> <span class="surname">Gudmundsson</span>. </span><span class="citetitle"><em class="citetitle">Storing Certificates in the Domain Name System (DNS)</em>. </span><span class="pubdate">March 1999. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.5.12"></a><p>[<abbr class="abbrev">RFC2539</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="citetitle"><em class="citetitle">Storage of Diffie-Hellman Keys in the Domain Name System (DNS)</em>. </span><span class="pubdate">March 1999. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.5.13"></a><p>[<abbr class="abbrev">RFC2540</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="citetitle"><em class="citetitle">Detached Domain Name System (DNS) Information</em>. </span><span class="pubdate">March 1999. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.5.14"></a><p>[<abbr class="abbrev">RFC2782</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Gulbrandsen</span>. </span><span class="author"><span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="author"><span class="firstname">L.</span> <span class="surname">Esibov</span>. </span><span class="citetitle"><em class="citetitle">A DNS RR for specifying the location of services (DNS SRV)</em>. </span><span class="pubdate">February 2000. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.5.15"></a><p>[<abbr class="abbrev">RFC2915</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Mealling</span>. </span><span class="author"><span class="firstname">R.</span> <span class="surname">Daniel</span>. </span><span class="citetitle"><em class="citetitle">The Naming Authority Pointer (NAPTR) DNS Resource Record</em>. </span><span class="pubdate">September 2000. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.5.16"></a><p>[<abbr class="abbrev">RFC3110</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="citetitle"><em class="citetitle">RSA/SHA-1 SIGs and RSA KEYs in the Domain Name System (DNS)</em>. </span><span class="pubdate">May 2001. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.5.17"></a><p>[<abbr class="abbrev">RFC3123</abbr>] <span class="author"><span class="firstname">P.</span> <span class="surname">Koch</span>. </span><span class="citetitle"><em class="citetitle">A DNS RR Type for Lists of Address Prefixes (APL RR)</em>. </span><span class="pubdate">June 2001. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.5.18"></a><p>[<abbr class="abbrev">RFC3596</abbr>] <span class="authorgroup"><span class="firstname">S.</span> <span class="surname">Thomson</span>, <span class="firstname">C.</span> <span class="surname">Huitema</span>, <span class="firstname">V.</span> <span class="surname">Ksinant</span>, and <span class="firstname">M.</span> <span class="surname">Souissi</span>. </span><span class="citetitle"><em class="citetitle"><acronym class="acronym">DNS</acronym> Extensions to support IP
- version 6</em>. </span><span class="pubdate">October 2003. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.5.19"></a><p>[<abbr class="abbrev">RFC3597</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Gustafsson</span>. </span><span class="citetitle"><em class="citetitle">Handling of Unknown DNS Resource Record (RR) Types</em>. </span><span class="pubdate">September 2003. </span></p>
-</div>
-</div>
-<div class="bibliodiv">
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.6.2"></a><p>[<abbr class="abbrev">RFC1101</abbr>] <span class="author"><span class="firstname">P. V.</span> <span class="surname">Mockapetris</span>. </span><span class="citetitle"><em class="citetitle"><acronym class="acronym">DNS</acronym> Encoding of Network Names
- and Other Types</em>. </span><span class="pubdate">April 1989. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.6.3"></a><p>[<abbr class="abbrev">RFC1123</abbr>] <span class="author"><span class="surname">Braden</span>. </span><span class="citetitle"><em class="citetitle">Requirements for Internet Hosts - Application and
- Support</em>. </span><span class="pubdate">October 1989. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.6.4"></a><p>[<abbr class="abbrev">RFC1591</abbr>] <span class="author"><span class="firstname">J.</span> <span class="surname">Postel</span>. </span><span class="citetitle"><em class="citetitle">Domain Name System Structure and Delegation</em>. </span><span class="pubdate">March 1994. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.6.5"></a><p>[<abbr class="abbrev">RFC2317</abbr>] <span class="authorgroup"><span class="firstname">H.</span> <span class="surname">Eidnes</span>, <span class="firstname">G.</span> <span class="surname">de Groot</span>, and <span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="citetitle"><em class="citetitle">Classless IN-ADDR.ARPA Delegation</em>. </span><span class="pubdate">March 1998. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.6.6"></a><p>[<abbr class="abbrev">RFC2826</abbr>] <span class="authorgroup"><span class="surname">Internet Architecture Board</span>. </span><span class="citetitle"><em class="citetitle">IAB Technical Comment on the Unique DNS Root</em>. </span><span class="pubdate">May 2000. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.6.7"></a><p>[<abbr class="abbrev">RFC2929</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>, <span class="firstname">E.</span> <span class="surname">Brunner-Williams</span>, and <span class="firstname">B.</span> <span class="surname">Manning</span>. </span><span class="citetitle"><em class="citetitle">Domain Name System (DNS) IANA Considerations</em>. </span><span class="pubdate">September 2000. </span></p>
-</div>
-</div>
-<div class="bibliodiv">
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.7.2"></a><p>[<abbr class="abbrev">RFC1033</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Lottor</span>. </span><span class="citetitle"><em class="citetitle">Domain administrators operations guide</em>. </span><span class="pubdate">November 1987. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.7.3"></a><p>[<abbr class="abbrev">RFC1537</abbr>] <span class="author"><span class="firstname">P.</span> <span class="surname">Beertema</span>. </span><span class="citetitle"><em class="citetitle">Common <acronym class="acronym">DNS</acronym> Data File
- Configuration Errors</em>. </span><span class="pubdate">October 1993. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.7.4"></a><p>[<abbr class="abbrev">RFC1912</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Barr</span>. </span><span class="citetitle"><em class="citetitle">Common <acronym class="acronym">DNS</acronym> Operational and
- Configuration Errors</em>. </span><span class="pubdate">February 1996. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.7.5"></a><p>[<abbr class="abbrev">RFC2010</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Manning</span> and <span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="citetitle"><em class="citetitle">Operational Criteria for Root Name Servers</em>. </span><span class="pubdate">October 1996. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.7.6"></a><p>[<abbr class="abbrev">RFC2219</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Hamilton</span> and <span class="firstname">R.</span> <span class="surname">Wright</span>. </span><span class="citetitle"><em class="citetitle">Use of <acronym class="acronym">DNS</acronym> Aliases for
- Network Services</em>. </span><span class="pubdate">October 1997. </span></p>
-</div>
-</div>
-<div class="bibliodiv">
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.8.2"></a><p>[<abbr class="abbrev">RFC2825</abbr>] <span class="authorgroup"><span class="surname">IAB</span> and <span class="firstname">R.</span> <span class="surname">Daigle</span>. </span><span class="citetitle"><em class="citetitle">A Tangled Web: Issues of I18N, Domain Names,
- and the Other Internet protocols</em>. </span><span class="pubdate">May 2000. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.8.3"></a><p>[<abbr class="abbrev">RFC3490</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Faltstrom</span>, <span class="firstname">P.</span> <span class="surname">Hoffman</span>, and <span class="firstname">A.</span> <span class="surname">Costello</span>. </span><span class="citetitle"><em class="citetitle">Internationalizing Domain Names in Applications (IDNA)</em>. </span><span class="pubdate">March 2003. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.8.4"></a><p>[<abbr class="abbrev">RFC3491</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Hoffman</span> and <span class="firstname">M.</span> <span class="surname">Blanchet</span>. </span><span class="citetitle"><em class="citetitle">Nameprep: A Stringprep Profile for Internationalized Domain Names</em>. </span><span class="pubdate">March 2003. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.8.5"></a><p>[<abbr class="abbrev">RFC3492</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Costello</span>. </span><span class="citetitle"><em class="citetitle">Punycode: A Bootstring encoding of Unicode
- for Internationalized Domain Names in
- Applications (IDNA)</em>. </span><span class="pubdate">March 2003. </span></p>
-</div>
-</div>
-<div class="bibliodiv">
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- Note: the following list of RFCs, although
- <acronym class="acronym">DNS</acronym>-related, are not
- concerned with implementing software.
- </p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.9.3"></a><p>[<abbr class="abbrev">RFC1464</abbr>] <span class="author"><span class="firstname">R.</span> <span class="surname">Rosenbaum</span>. </span><span class="citetitle"><em class="citetitle">Using the Domain Name System To Store Arbitrary String
- Attributes</em>. </span><span class="pubdate">May 1993. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.9.4"></a><p>[<abbr class="abbrev">RFC1713</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Romao</span>. </span><span class="citetitle"><em class="citetitle">Tools for <acronym class="acronym">DNS</acronym> Debugging</em>. </span><span class="pubdate">November 1994. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.9.5"></a><p>[<abbr class="abbrev">RFC1794</abbr>] <span class="author"><span class="firstname">T.</span> <span class="surname">Brisco</span>. </span><span class="citetitle"><em class="citetitle"><acronym class="acronym">DNS</acronym> Support for Load
- Balancing</em>. </span><span class="pubdate">April 1995. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.9.6"></a><p>[<abbr class="abbrev">RFC2240</abbr>] <span class="author"><span class="firstname">O.</span> <span class="surname">Vaughan</span>. </span><span class="citetitle"><em class="citetitle">A Legal Basis for Domain Name Allocation</em>. </span><span class="pubdate">November 1997. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.9.7"></a><p>[<abbr class="abbrev">RFC2345</abbr>] <span class="authorgroup"><span class="firstname">J.</span> <span class="surname">Klensin</span>, <span class="firstname">T.</span> <span class="surname">Wolf</span>, and <span class="firstname">G.</span> <span class="surname">Oglesby</span>. </span><span class="citetitle"><em class="citetitle">Domain Names and Company Name Retrieval</em>. </span><span class="pubdate">May 1998. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.9.8"></a><p>[<abbr class="abbrev">RFC2352</abbr>] <span class="author"><span class="firstname">O.</span> <span class="surname">Vaughan</span>. </span><span class="citetitle"><em class="citetitle">A Convention For Using Legal Names as Domain Names</em>. </span><span class="pubdate">May 1998. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.9.9"></a><p>[<abbr class="abbrev">RFC3071</abbr>] <span class="authorgroup"><span class="firstname">J.</span> <span class="surname">Klensin</span>. </span><span class="citetitle"><em class="citetitle">Reflections on the DNS, RFC 1591, and Categories of Domains</em>. </span><span class="pubdate">February 2001. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.9.10"></a><p>[<abbr class="abbrev">RFC3258</abbr>] <span class="authorgroup"><span class="firstname">T.</span> <span class="surname">Hardie</span>. </span><span class="citetitle"><em class="citetitle">Distributing Authoritative Name Servers via
- Shared Unicast Addresses</em>. </span><span class="pubdate">April 2002. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.9.11"></a><p>[<abbr class="abbrev">RFC3901</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Durand</span> and <span class="firstname">J.</span> <span class="surname">Ihren</span>. </span><span class="citetitle"><em class="citetitle">DNS IPv6 Transport Operational Guidelines</em>. </span><span class="pubdate">September 2004. </span></p>
-</div>
-</div>
-<div class="bibliodiv">
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.10.2"></a><p>[<abbr class="abbrev">RFC1712</abbr>] <span class="authorgroup"><span class="firstname">C.</span> <span class="surname">Farrell</span>, <span class="firstname">M.</span> <span class="surname">Schulze</span>, <span class="firstname">S.</span> <span class="surname">Pleitner</span>, and <span class="firstname">D.</span> <span class="surname">Baldoni</span>. </span><span class="citetitle"><em class="citetitle"><acronym class="acronym">DNS</acronym> Encoding of Geographical
- Location</em>. </span><span class="pubdate">November 1994. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.10.3"></a><p>[<abbr class="abbrev">RFC2673</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Crawford</span>. </span><span class="citetitle"><em class="citetitle">Binary Labels in the Domain Name System</em>. </span><span class="pubdate">August 1999. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.10.4"></a><p>[<abbr class="abbrev">RFC2874</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Crawford</span> and <span class="firstname">C.</span> <span class="surname">Huitema</span>. </span><span class="citetitle"><em class="citetitle">DNS Extensions to Support IPv6 Address Aggregation
- and Renumbering</em>. </span><span class="pubdate">July 2000. </span></p>
-</div>
-</div>
-<div class="bibliodiv">
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- Most of these have been consolidated into RFC4033,
- RFC4034 and RFC4035 which collectively describe DNSSECbis.
- </p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.11.3"></a><p>[<abbr class="abbrev">RFC2065</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span> and <span class="firstname">C.</span> <span class="surname">Kaufman</span>. </span><span class="citetitle"><em class="citetitle">Domain Name System Security Extensions</em>. </span><span class="pubdate">January 1997. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.11.4"></a><p>[<abbr class="abbrev">RFC2137</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="citetitle"><em class="citetitle">Secure Domain Name System Dynamic Update</em>. </span><span class="pubdate">April 1997. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.11.5"></a><p>[<abbr class="abbrev">RFC2535</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="citetitle"><em class="citetitle">Domain Name System Security Extensions</em>. </span><span class="pubdate">March 1999. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.11.6"></a><p>[<abbr class="abbrev">RFC3008</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Wellington</span>. </span><span class="citetitle"><em class="citetitle">Domain Name System Security (DNSSEC)
- Signing Authority</em>. </span><span class="pubdate">November 2000. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.11.7"></a><p>[<abbr class="abbrev">RFC3090</abbr>] <span class="authorgroup"><span class="firstname">E.</span> <span class="surname">Lewis</span>. </span><span class="citetitle"><em class="citetitle">DNS Security Extension Clarification on Zone Status</em>. </span><span class="pubdate">March 2001. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.11.8"></a><p>[<abbr class="abbrev">RFC3445</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Massey</span> and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="citetitle"><em class="citetitle">Limiting the Scope of the KEY Resource Record (RR)</em>. </span><span class="pubdate">December 2002. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.11.9"></a><p>[<abbr class="abbrev">RFC3655</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Wellington</span> and <span class="firstname">O.</span> <span class="surname">Gudmundsson</span>. </span><span class="citetitle"><em class="citetitle">Redefinition of DNS Authenticated Data (AD) bit</em>. </span><span class="pubdate">November 2003. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.11.10"></a><p>[<abbr class="abbrev">RFC3658</abbr>] <span class="authorgroup"><span class="firstname">O.</span> <span class="surname">Gudmundsson</span>. </span><span class="citetitle"><em class="citetitle">Delegation Signer (DS) Resource Record (RR)</em>. </span><span class="pubdate">December 2003. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.11.11"></a><p>[<abbr class="abbrev">RFC3755</abbr>] <span class="authorgroup"><span class="firstname">S.</span> <span class="surname">Weiler</span>. </span><span class="citetitle"><em class="citetitle">Legacy Resolver Compatibility for Delegation Signer (DS)</em>. </span><span class="pubdate">May 2004. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.11.12"></a><p>[<abbr class="abbrev">RFC3757</abbr>] <span class="authorgroup"><span class="firstname">O.</span> <span class="surname">Kolkman</span>, <span class="firstname">J.</span> <span class="surname">Schlyter</span>, and <span class="firstname">E.</span> <span class="surname">Lewis</span>. </span><span class="citetitle"><em class="citetitle">Domain Name System KEY (DNSKEY) Resource Record
- (RR) Secure Entry Point (SEP) Flag</em>. </span><span class="pubdate">April 2004. </span></p>
-</div>
-<div class="biblioentry">
-<a name="id-1.12.3.2.6.11.13"></a><p>[<abbr class="abbrev">RFC3845</abbr>] <span class="authorgroup"><span class="firstname">J.</span> <span class="surname">Schlyter</span>. </span><span class="citetitle"><em class="citetitle">DNS Security (DNSSEC) NextSECure (NSEC) RDATA Format</em>. </span><span class="pubdate">August 2004. </span></p>
-</div>
-</div>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="internet_drafts"></a>Internet Drafts</h3></div></div></div>
-<p>
- Internet Drafts (IDs) are rough-draft working documents of
- the Internet Engineering Task Force. They are, in essence, RFCs
- in the preliminary stages of development. Implementors are
- cautioned not
- to regard IDs as archival, and they should not be quoted or cited
- in any formal documents unless accompanied by the disclaimer that
- they are "works in progress." IDs have a lifespan of six months
- after which they are deleted unless updated by their authors.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="more_about_bind"></a>Other Documents About <acronym class="acronym">BIND</acronym>
-</h3></div></div></div>
-<p></p>
-<div class="bibliography">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="id-1.12.3.4.3"></a>Bibliography</h4></div></div></div>
-<div class="biblioentry">
-<a name="id-1.12.3.4.3.1"></a><p><span class="authorgroup"><span class="firstname">Paul</span> <span class="surname">Albitz</span> and <span class="firstname">Cricket</span> <span class="surname">Liu</span>. </span><span class="citetitle"><em class="citetitle"><acronym class="acronym">DNS</acronym> and <acronym class="acronym">BIND</acronym></em>. </span><span class="copyright">Copyright © 1998 Sebastopol, CA: O'Reilly and Associates. </span></p>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="Bv9ARM.ch10.html">Prev</a> </td>
-<td width="20%" align="center"> </td>
-<td width="40%" align="right"> <a accesskey="n" href="Bv9ARM.ch12.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">Appendix B. A Brief History of the <acronym class="acronym">DNS</acronym> and <acronym class="acronym">BIND</acronym> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> Appendix D. BIND 9 DNS Library Support</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/Bv9ARM.ch12.html b/doc/arm/Bv9ARM.ch12.html
deleted file mode 100644
index 28ebbaac..00000000
--- a/doc/arm/Bv9ARM.ch12.html
+++ /dev/null
@@ -1,540 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>Appendix D. BIND 9 DNS Library Support</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="prev" href="Bv9ARM.ch11.html" title="Appendix C. General DNS Reference Information">
-<link rel="next" href="Bv9ARM.ch13.html" title="Manual pages">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center">Appendix D. BIND 9 DNS Library Support</th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="Bv9ARM.ch11.html">Prev</a> </td>
-<th width="60%" align="center"> </th>
-<td width="20%" align="right"> <a accesskey="n" href="Bv9ARM.ch13.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="appendix">
-<div class="titlepage"><div><div><h1 class="title">
-<a name="Bv9ARM.ch12"></a>BIND 9 DNS Library Support</h1></div></div></div>
-<div class="toc">
-<p><b>Table of Contents</b></p>
-<dl class="toc">
-<dt><span class="section"><a href="Bv9ARM.ch12.html#bind9.library">BIND 9 DNS Library Support</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch12.html#id-1.13.2.4">Prerequisite</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch12.html#id-1.13.2.5">Compilation</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch12.html#id-1.13.2.6">Installation</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch12.html#id-1.13.2.7">Known Defects/Restrictions</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch12.html#id-1.13.2.8">The dns.conf File</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch12.html#id-1.13.2.9">Sample Applications</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch12.html#id-1.13.2.10">Library References</a></span></dt>
-</dl></dd>
-</dl>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="bind9.library"></a>BIND 9 DNS Library Support</h2></div></div></div>
-<p>This version of BIND 9 "exports" its internal libraries so
- that they can be used by third-party applications more easily (we
- call them "export" libraries in this document). In addition to
- all major DNS-related APIs BIND 9 is currently using, the export
- libraries provide the following features:</p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem"><p>The newly created "DNS client" module. This is a higher
- level API that provides an interface to name resolution,
- single DNS transaction with a particular server, and dynamic
- update. Regarding name resolution, it supports advanced
- features such as DNSSEC validation and caching. This module
- supports both synchronous and asynchronous mode.</p></li>
-<li class="listitem"><p>The new "IRS" (Information Retrieval System) library.
- It provides an interface to parse the traditional resolv.conf
- file and more advanced, DNS-specific configuration file for
- the rest of this package (see the description for the
- dns.conf file below).</p></li>
-<li class="listitem"><p>As part of the IRS library, newly implemented standard
- address-name mapping functions, getaddrinfo() and
- getnameinfo(), are provided. They use the DNSSEC-aware
- validating resolver backend, and could use other advanced
- features of the BIND 9 libraries such as caching. The
- getaddrinfo() function resolves both A and AAAA RRs
- concurrently (when the address family is unspecified).</p></li>
-<li class="listitem"><p>An experimental framework to support other event
- libraries than BIND 9's internal event task system.</p></li>
-</ul></div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.13.2.4"></a>Prerequisite</h3></div></div></div>
-<p>GNU make is required to build the export libraries (other
- part of BIND 9 can still be built with other types of make). In
- the reminder of this document, "make" means GNU make. Note that
- in some platforms you may need to invoke a different command name
- than "make" (e.g. "gmake") to indicate it's GNU make.</p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.13.2.5"></a>Compilation</h3></div></div></div>
-<pre class="screen">
-$ <strong class="userinput"><code>./configure --enable-exportlib <em class="replaceable"><code>[other flags]</code></em></code></strong>
-$ <strong class="userinput"><code>make</code></strong>
-</pre>
-<p>
- This will create (in addition to usual BIND 9 programs) and a
- separate set of libraries under the lib/export directory. For
- example, <code class="filename">lib/export/dns/libdns.a</code> is the archive file of the
- export version of the BIND 9 DNS library. Sample application
- programs using the libraries will also be built under the
- lib/export/samples directory (see below).</p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.13.2.6"></a>Installation</h3></div></div></div>
-<pre class="screen">
-$ <strong class="userinput"><code>cd lib/export</code></strong>
-$ <strong class="userinput"><code>make install</code></strong>
-</pre>
-<p>
- This will install library object files under the directory
- specified by the --with-export-libdir configure option (default:
- EPREFIX/lib/bind9), and header files under the directory
- specified by the --with-export-includedir configure option
- (default: PREFIX/include/bind9).
- Root privilege is normally required.
- "<span class="command"><strong>make install</strong></span>" at the top directory will do the
- same.
- </p>
-<p>
- To see how to build your own
- application after the installation, see
- <code class="filename">lib/export/samples/Makefile-postinstall.in</code>.</p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.13.2.7"></a>Known Defects/Restrictions</h3></div></div></div>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem"><p>Currently, win32 is not supported for the export
- library. (Normal BIND 9 application can be built as
- before).</p></li>
-<li class="listitem">
-<p>The "fixed" RRset order is not (currently) supported in
- the export library. If you want to use "fixed" RRset order
- for, e.g. <span class="command"><strong>named</strong></span> while still building the
- export library even without the fixed order support, build
- them separately:
- </p>
-<pre class="screen">
-$ <strong class="userinput"><code>./configure --enable-fixed-rrset <em class="replaceable"><code>[other flags, but not --enable-exportlib]</code></em></code></strong>
-$ <strong class="userinput"><code>make</code></strong>
-$ <strong class="userinput"><code>./configure --enable-exportlib <em class="replaceable"><code>[other flags, but not --enable-fixed-rrset]</code></em></code></strong>
-$ <strong class="userinput"><code>cd lib/export</code></strong>
-$ <strong class="userinput"><code>make</code></strong>
-</pre>
-<p>
- </p>
-</li>
-<li class="listitem"><p>The client module and the IRS library currently do not
- support DNSSEC validation using DLV (the underlying modules
- can handle it, but there is no tunable interface to enable
- the feature).</p></li>
-<li class="listitem"><p>RFC 5011 is not supported in the validating stub
- resolver of the export library. In fact, it is not clear
- whether it should: trust anchors would be a system-wide
- configuration which would be managed by an administrator,
- while the stub resolver will be used by ordinary applications
- run by a normal user.</p></li>
-<li class="listitem"><p>Not all common <code class="filename">/etc/resolv.conf</code>
- options are supported
- in the IRS library. The only available options in this
- version are "debug" and "ndots".</p></li>
-</ul></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.13.2.8"></a>The dns.conf File</h3></div></div></div>
-<p>The IRS library supports an "advanced" configuration file
- related to the DNS library for configuration parameters that
- would be beyond the capability of the
- <code class="filename">resolv.conf</code> file.
- Specifically, it is intended to provide DNSSEC related
- configuration parameters. By default the path to this
- configuration file is <code class="filename">/etc/dns.conf</code>.
- This module is very
- experimental and the configuration syntax or library interfaces
- may change in future versions. Currently, only the
- <span class="command"><strong>trusted-keys</strong></span>
- statement is supported, whose syntax is the same as the same name
- of statement for <code class="filename">named.conf</code>. (See
- <a class="xref" href="Bv9ARM.ch06.html#trusted-keys" title="trusted-keys Statement Grammar">the section called &#8220;<span class="command"><strong>trusted-keys</strong></span> Statement Grammar&#8221;</a> for details.)</p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.13.2.9"></a>Sample Applications</h3></div></div></div>
-<p>Some sample application programs using this API are
- provided for reference. The following is a brief description of
- these applications.
- </p>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="id-1.13.2.9.3"></a>sample: a simple stub resolver utility</h4></div></div></div>
-<p>
- It sends a query of a given name (of a given optional RR type) to a
- specified recursive server, and prints the result as a list of
- RRs. It can also act as a validating stub resolver if a trust
- anchor is given via a set of command line options.</p>
-<p>
- Usage: sample [options] server_address hostname
- </p>
-<p>
- Options and Arguments:
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">
- -t RRtype
- </span></dt>
-<dd><p>
- specify the RR type of the query. The default is the A RR.
- </p></dd>
-<dt><span class="term">
- [-a algorithm] [-e] -k keyname -K keystring
- </span></dt>
-<dd>
-<p>
- specify a command-line DNS key to validate the answer. For
- example, to specify the following DNSKEY of example.com:
-</p>
-<div class="literallayout"><p><br>
- example.com. 3600 IN DNSKEY 257 3 5 xxx<br>
-</p></div>
-<p>
- specify the options as follows:
-</p>
-<pre class="screen">
-<strong class="userinput"><code>
- -e -k example.com -K "xxx"
-</code></strong>
-</pre>
-<p>
- -e means that this key is a zone's "key signing key" (as known
- as "secure Entry point").
- When -a is omitted rsasha1 will be used by default.
- </p>
-</dd>
-<dt><span class="term">
- -s domain:alt_server_address
- </span></dt>
-<dd><p>
- specify a separate recursive server address for the specific
- "domain". Example: -s example.com:2001:db8::1234
- </p></dd>
-<dt><span class="term">server_address</span></dt>
-<dd><p>
- an IP(v4/v6) address of the recursive server to which queries
- are sent.
- </p></dd>
-<dt><span class="term">hostname</span></dt>
-<dd><p>
- the domain name for the query
- </p></dd>
-</dl></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="id-1.13.2.9.4"></a>sample-async: a simple stub resolver, working asynchronously</h4></div></div></div>
-<p>
- Similar to "sample", but accepts a list
- of (query) domain names as a separate file and resolves the names
- asynchronously.</p>
-<p>
- Usage: sample-async [-s server_address] [-t RR_type] input_file</p>
-<p>
- Options and Arguments:
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">
- -s server_address
- </span></dt>
-<dd>
- an IPv4 address of the recursive server to which queries are sent.
- (IPv6 addresses are not supported in this implementation)
- </dd>
-<dt><span class="term">
- -t RR_type
- </span></dt>
-<dd>
- specify the RR type of the queries. The default is the A
- RR.
- </dd>
-<dt><span class="term">
- input_file
- </span></dt>
-<dd>
- a list of domain names to be resolved. each line
- consists of a single domain name. Example:
- <div class="literallayout"><p><br>
-  www.example.com<br>
-  mx.example.net<br>
-  ns.xxx.example<br>
-</p></div>
-</dd>
-</dl></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="id-1.13.2.9.5"></a>sample-request: a simple DNS transaction client</h4></div></div></div>
-<p>
- It sends a query to a specified server, and
- prints the response with minimal processing. It doesn't act as a
- "stub resolver": it stops the processing once it gets any
- response from the server, whether it's a referral or an alias
- (CNAME or DNAME) that would require further queries to get the
- ultimate answer. In other words, this utility acts as a very
- simplified <span class="command"><strong>dig</strong></span>.
- </p>
-<p>
- Usage: sample-request [-t RRtype] server_address hostname
- </p>
-<p>
- Options and Arguments:
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">
- -t RRtype
- </span></dt>
-<dd><p>
- specify the RR type of
- the queries. The default is the A RR.
- </p></dd>
-<dt><span class="term">
- server_address
- </span></dt>
-<dd><p>
- an IP(v4/v6)
- address of the recursive server to which the query is sent.
- </p></dd>
-<dt><span class="term">
- hostname
- </span></dt>
-<dd><p>
- the domain name for the query
- </p></dd>
-</dl></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="id-1.13.2.9.6"></a>sample-gai: getaddrinfo() and getnameinfo() test code</h4></div></div></div>
-<p>
- This is a test program
- to check getaddrinfo() and getnameinfo() behavior. It takes a
- host name as an argument, calls getaddrinfo() with the given host
- name, and calls getnameinfo() with the resulting IP addresses
- returned by getaddrinfo(). If the dns.conf file exists and
- defines a trust anchor, the underlying resolver will act as a
- validating resolver, and getaddrinfo()/getnameinfo() will fail
- with an EAI_INSECUREDATA error when DNSSEC validation fails.
- </p>
-<p>
- Usage: sample-gai hostname
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="id-1.13.2.9.7"></a>sample-update: a simple dynamic update client program</h4></div></div></div>
-<p>
- It accepts a single update command as a
- command-line argument, sends an update request message to the
- authoritative server, and shows the response from the server. In
- other words, this is a simplified <span class="command"><strong>nsupdate</strong></span>.
- </p>
-<p>
- Usage: sample-update [options] (add|delete) "update data"
- </p>
-<p>
- Options and Arguments:
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">
- -a auth_server
- </span></dt>
-<dd><p>
- An IP address of the authoritative server that has authority
- for the zone containing the update name. This should normally
- be the primary authoritative server that accepts dynamic
- updates. It can also be a secondary server that is configured
- to forward update requests to the primary server.
- </p></dd>
-<dt><span class="term">
- -k keyfile
- </span></dt>
-<dd><p>
- A TSIG key file to secure the update transaction. The keyfile
- format is the same as that for the nsupdate utility.
- </p></dd>
-<dt><span class="term">
- -p prerequisite
- </span></dt>
-<dd><p>
- A prerequisite for the update (only one prerequisite can be
- specified). The prerequisite format is the same as that is
- accepted by the nsupdate utility.
- </p></dd>
-<dt><span class="term">
- -r recursive_server
- </span></dt>
-<dd><p>
- An IP address of a recursive server that this utility will
- use. A recursive server may be necessary to identify the
- authoritative server address to which the update request is
- sent.
- </p></dd>
-<dt><span class="term">
- -z zonename
- </span></dt>
-<dd><p>
- The domain name of the zone that contains
- </p></dd>
-<dt><span class="term">
- (add|delete)
- </span></dt>
-<dd><p>
- Specify the type of update operation. Either "add" or "delete"
- must be specified.
- </p></dd>
-<dt><span class="term">
- "update data"
- </span></dt>
-<dd><p>
- Specify the data to be updated. A typical example of the data
- would look like "name TTL RRtype RDATA".
- </p></dd>
-</dl></div>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- In practice, either -a or -r must be specified. Others can
- be optional; the underlying library routine tries to identify the
- appropriate server and the zone name for the update.
- </p>
-</div>
-<p>
- Examples: assuming the primary authoritative server of the
- dynamic.example.com zone has an IPv6 address 2001:db8::1234,
- </p>
-<pre class="screen">
-$ <strong class="userinput"><code>sample-update -a sample-update -k Kxxx.+nnn+mmmm.key add "foo.dynamic.example.com 30 IN A 192.168.2.1"</code></strong></pre>
-<p>
- adds an A RR for foo.dynamic.example.com using the given key.
- </p>
-<pre class="screen">
-$ <strong class="userinput"><code>sample-update -a sample-update -k Kxxx.+nnn+mmmm.key delete "foo.dynamic.example.com 30 IN A"</code></strong></pre>
-<p>
- removes all A RRs for foo.dynamic.example.com using the given key.
- </p>
-<pre class="screen">
-$ <strong class="userinput"><code>sample-update -a sample-update -k Kxxx.+nnn+mmmm.key delete "foo.dynamic.example.com"</code></strong></pre>
-<p>
- removes all RRs for foo.dynamic.example.com using the given key.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="id-1.13.2.9.8"></a>nsprobe: domain/name server checker in terms of RFC 4074</h4></div></div></div>
-<p>
- It checks a set
- of domains to see the name servers of the domains behave
- correctly in terms of RFC 4074. This is included in the set of
- sample programs to show how the export library can be used in a
- DNS-related application.
- </p>
-<p>
- Usage: nsprobe [-d] [-v [-v...]] [-c cache_address] [input_file]
- </p>
-<p>
- Options
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">
- -d
- </span></dt>
-<dd><p>
- run in the "debug" mode. with this option nsprobe will dump
- every RRs it receives.
- </p></dd>
-<dt><span class="term">
- -v
- </span></dt>
-<dd><p>
- increase verbosity of other normal log messages. This can be
- specified multiple times
- </p></dd>
-<dt><span class="term">
- -c cache_address
- </span></dt>
-<dd><p>
- specify an IP address of a recursive (caching) name server.
- nsprobe uses this server to get the NS RRset of each domain and
- the A and/or AAAA RRsets for the name servers. The default
- value is 127.0.0.1.
- </p></dd>
-<dt><span class="term">
- input_file
- </span></dt>
-<dd><p>
- a file name containing a list of domain (zone) names to be
- probed. when omitted the standard input will be used. Each
- line of the input file specifies a single domain name such as
- "example.com". In general this domain name must be the apex
- name of some DNS zone (unlike normal "host names" such as
- "www.example.com"). nsprobe first identifies the NS RRsets for
- the given domain name, and sends A and AAAA queries to these
- servers for some "widely used" names under the zone;
- specifically, adding "www" and "ftp" to the zone name.
- </p></dd>
-</dl></div>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.13.2.10"></a>Library References</h3></div></div></div>
-<p>As of this writing, there is no formal "manual" of the
- libraries, except this document, header files (some of them
- provide pretty detailed explanations), and sample application
- programs.</p>
-</div>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="Bv9ARM.ch11.html">Prev</a> </td>
-<td width="20%" align="center"> </td>
-<td width="40%" align="right"> <a accesskey="n" href="Bv9ARM.ch13.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">Appendix C. General <acronym class="acronym">DNS</acronym> Reference Information </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> Manual pages</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/Bv9ARM.ch13.html b/doc/arm/Bv9ARM.ch13.html
deleted file mode 100644
index ff93ff5f..00000000
--- a/doc/arm/Bv9ARM.ch13.html
+++ /dev/null
@@ -1,180 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>Manual pages</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="prev" href="Bv9ARM.ch12.html" title="Appendix D. BIND 9 DNS Library Support">
-<link rel="next" href="man.dig.html" title="dig">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center">Manual pages</th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="Bv9ARM.ch12.html">Prev</a> </td>
-<th width="60%" align="center"> </th>
-<td width="20%" align="right"> <a accesskey="n" href="man.dig.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="reference">
-<div class="titlepage">
-<div><div><h1 class="title">
-<a name="Bv9ARM.ch13"></a>Manual pages</h1></div></div>
-<hr>
-</div>
-<div class="toc">
-<p><b>Table of Contents</b></p>
-<dl class="toc">
-<dt>
-<span class="refentrytitle"><a href="man.dig.html">dig</a></span><span class="refpurpose"> &#8212; DNS lookup utility</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.mdig.html"><span class="application">mdig</span></a></span><span class="refpurpose"> &#8212; DNS pipelined lookup utility</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.host.html">host</a></span><span class="refpurpose"> &#8212; DNS lookup utility</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.delv.html">delv</a></span><span class="refpurpose"> &#8212; DNS lookup and validation utility</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.nslookup.html">nslookup</a></span><span class="refpurpose"> &#8212; query Internet name servers interactively</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.dnssec-checkds.html"><span class="application">dnssec-checkds</span></a></span><span class="refpurpose"> &#8212; DNSSEC delegation consistency checking tool</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.dnssec-coverage.html"><span class="application">dnssec-coverage</span></a></span><span class="refpurpose"> &#8212; checks future DNSKEY coverage for a zone</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.dnssec-dsfromkey.html"><span class="application">dnssec-dsfromkey</span></a></span><span class="refpurpose"> &#8212; DNSSEC DS RR generation tool</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.dnssec-importkey.html"><span class="application">dnssec-importkey</span></a></span><span class="refpurpose"> &#8212; import DNSKEY records from external systems so they can be managed</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.dnssec-keyfromlabel.html"><span class="application">dnssec-keyfromlabel</span></a></span><span class="refpurpose"> &#8212; DNSSEC key generation tool</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.dnssec-keygen.html"><span class="application">dnssec-keygen</span></a></span><span class="refpurpose"> &#8212; DNSSEC key generation tool</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.dnssec-keymgr.html"><span class="application">dnssec-keymgr</span></a></span><span class="refpurpose"> &#8212; Ensures correct DNSKEY coverage for a zone based on a defined policy</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.dnssec-revoke.html"><span class="application">dnssec-revoke</span></a></span><span class="refpurpose"> &#8212; set the REVOKED bit on a DNSSEC key</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.dnssec-settime.html"><span class="application">dnssec-settime</span></a></span><span class="refpurpose"> &#8212; set the key timing metadata for a DNSSEC key</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.dnssec-signzone.html"><span class="application">dnssec-signzone</span></a></span><span class="refpurpose"> &#8212; DNSSEC zone signing tool</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.dnssec-verify.html"><span class="application">dnssec-verify</span></a></span><span class="refpurpose"> &#8212; DNSSEC zone verification tool</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.lwresd.html"><span class="application">lwresd</span></a></span><span class="refpurpose"> &#8212; lightweight resolver daemon</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.named.html"><span class="application">named</span></a></span><span class="refpurpose"> &#8212; Internet domain name server</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.named.conf.html"><code class="filename">named.conf</code></a></span><span class="refpurpose"> &#8212; configuration file for <span class="command"><strong>named</strong></span></span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.named-checkconf.html"><span class="application">named-checkconf</span></a></span><span class="refpurpose"> &#8212; named configuration file syntax checking tool</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.named-checkzone.html"><span class="application">named-checkzone</span></a></span><span class="refpurpose"> &#8212; zone file validity checking or converting tool</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.named-journalprint.html"><span class="application">named-journalprint</span></a></span><span class="refpurpose"> &#8212; print zone journal in human-readable form</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.named-nzd2nzf.html"><span class="application">named-nzd2nzf</span></a></span><span class="refpurpose"> &#8212;
- Convert an NZD database to NZF text format
- </span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.named-rrchecker.html"><span class="application">named-rrchecker</span></a></span><span class="refpurpose"> &#8212; syntax checker for individual DNS resource records</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.nsupdate.html"><span class="application">nsupdate</span></a></span><span class="refpurpose"> &#8212; Dynamic DNS update utility</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.rndc.html"><span class="application">rndc</span></a></span><span class="refpurpose"> &#8212; name server control utility</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.rndc.conf.html"><code class="filename">rndc.conf</code></a></span><span class="refpurpose"> &#8212; rndc configuration file</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.rndc-confgen.html"><span class="application">rndc-confgen</span></a></span><span class="refpurpose"> &#8212; rndc key generation tool</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.ddns-confgen.html"><span class="application">ddns-confgen</span></a></span><span class="refpurpose"> &#8212; ddns key generation tool</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.arpaname.html"><span class="application">arpaname</span></a></span><span class="refpurpose"> &#8212; translate IP addresses to the corresponding ARPA names</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.dnstap-read.html"><span class="application">dnstap-read</span></a></span><span class="refpurpose"> &#8212; print dnstap data in human-readable form</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.genrandom.html"><span class="application">genrandom</span></a></span><span class="refpurpose"> &#8212; generate a file containing random data</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.isc-hmac-fixup.html"><span class="application">isc-hmac-fixup</span></a></span><span class="refpurpose"> &#8212; fixes HMAC keys generated by older versions of BIND</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.nsec3hash.html"><span class="application">nsec3hash</span></a></span><span class="refpurpose"> &#8212; generate NSEC3 hash</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.pkcs11-destroy.html"><span class="application">pkcs11-destroy</span></a></span><span class="refpurpose"> &#8212; destroy PKCS#11 objects</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.pkcs11-list.html"><span class="application">pkcs11-list</span></a></span><span class="refpurpose"> &#8212; list PKCS#11 objects</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.pkcs11-keygen.html"><span class="application">pkcs11-keygen</span></a></span><span class="refpurpose"> &#8212; generate keys on a PKCS#11 device</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.pkcs11-tokens.html"><span class="application">pkcs11-tokens</span></a></span><span class="refpurpose"> &#8212; list PKCS#11 available tokens</span>
-</dt>
-</dl>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="Bv9ARM.ch12.html">Prev</a> </td>
-<td width="20%" align="center"> </td>
-<td width="40%" align="right"> <a accesskey="n" href="man.dig.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">Appendix D. BIND 9 DNS Library Support </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> dig</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/Bv9ARM.conf b/doc/arm/Bv9ARM.conf
deleted file mode 100644
index cf095caa..00000000
--- a/doc/arm/Bv9ARM.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-TexInputs: ../tex//
-TexStyle: armstyle
-XslParam: ../xsl/arm-param.xsl
diff --git a/doc/arm/Bv9ARM.html b/doc/arm/Bv9ARM.html
deleted file mode 100644
index 91c8898b..00000000
--- a/doc/arm/Bv9ARM.html
+++ /dev/null
@@ -1,421 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>BIND 9 Administrator Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="next" href="Bv9ARM.ch01.html" title="Chapter 1. Introduction">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center">BIND 9 Administrator Reference Manual</th></tr>
-<tr>
-<td width="20%" align="left"> </td>
-<th width="60%" align="center"> </th>
-<td width="20%" align="right"> <a accesskey="n" href="Bv9ARM.ch01.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="book">
-<div class="titlepage">
-<div>
-<div><h1 class="title">
-<a name="id-1"></a>BIND 9 Administrator Reference Manual</h1></div>
-<div><p class="releaseinfo">BIND Version 9.11.0-P3</p></div>
-<div><p class="copyright">Copyright © 2000-2015 Internet Systems Consortium, Inc. ("ISC")</p></div>
-</div>
-<hr>
-</div>
-<div class="toc">
-<p><b>Table of Contents</b></p>
-<dl class="toc">
-<dt><span class="chapter"><a href="Bv9ARM.ch01.html">1. Introduction</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch01.html#doc_scope">Scope of Document</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch01.html#organization">Organization of This Document</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch01.html#conventions">Conventions Used in This Document</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch01.html#dns_overview">The Domain Name System (<acronym class="acronym">DNS</acronym>)</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch01.html#dns_fundamentals">DNS Fundamentals</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch01.html#domain_names">Domains and Domain Names</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch01.html#zones">Zones</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch01.html#auth_servers">Authoritative Name Servers</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch01.html#cache_servers">Caching Name Servers</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch01.html#multi_role">Name Servers in Multiple Roles</a></span></dt>
-</dl></dd>
-</dl></dd>
-<dt><span class="chapter"><a href="Bv9ARM.ch02.html">2. <acronym class="acronym">BIND</acronym> Resource Requirements</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch02.html#hw_req">Hardware requirements</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch02.html#cpu_req">CPU Requirements</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch02.html#mem_req">Memory Requirements</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch02.html#intensive_env">Name Server Intensive Environment Issues</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch02.html#supported_os">Supported Operating Systems</a></span></dt>
-</dl></dd>
-<dt><span class="chapter"><a href="Bv9ARM.ch03.html">3. Name Server Configuration</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch03.html#sample_configuration">Sample Configurations</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch03.html#cache_only_sample">A Caching-only Name Server</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch03.html#auth_only_sample">An Authoritative-only Name Server</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch03.html#load_balancing">Load Balancing</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch03.html#ns_operations">Name Server Operations</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch03.html#tools">Tools for Use With the Name Server Daemon</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch03.html#signals">Signals</a></span></dt>
-</dl></dd>
-</dl></dd>
-<dt><span class="chapter"><a href="Bv9ARM.ch04.html">4. Advanced DNS Features</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#notify">Notify</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#dynamic_update">Dynamic Update</a></span></dt>
-<dd><dl><dt><span class="section"><a href="Bv9ARM.ch04.html#journal">The journal file</a></span></dt></dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#incremental_zone_transfers">Incremental Zone Transfers (IXFR)</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#split_dns">Split DNS</a></span></dt>
-<dd><dl><dt><span class="section"><a href="Bv9ARM.ch04.html#split_dns_sample">Example split DNS setup</a></span></dt></dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#tsig">TSIG</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.6.5">Generating a Shared Key</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.6.6">Loading A New Key</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.6.7">Instructing the Server to Use a Key</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.6.8">TSIG-Based Access Control</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.6.9">Errors</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#tkey">TKEY</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#sig0">SIG(0)</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#DNSSEC">DNSSEC</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#dnssec_keys">Generating Keys</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#dnssec_signing">Signing the Zone</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#dnssec_config">Configuring Servers</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#dnssec.dynamic.zones">DNSSEC, Dynamic Zones, and Automatic Signing</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.3">Converting from insecure to secure</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.8">Dynamic DNS update method</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.16">Fully automatic zone signing</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.25">Private-type records</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.32">DNSKEY rollovers</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.34">Dynamic DNS update method</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.39">Automatic key rollovers</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.41">NSEC3PARAM rollovers via UPDATE</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.43">Converting from NSEC to NSEC3</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.45">Converting from NSEC3 to NSEC</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.47">Converting from secure to insecure</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.51">Periodic re-signing</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.53">NSEC3 and OPTOUT</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#rfc5011.support">Dynamic Trust Anchor Management</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.11.3">Validating Resolver</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.11.4">Authoritative Server</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#pkcs11">PKCS#11 (Cryptoki) support</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.12.6">Prerequisites</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.12.7">Native PKCS#11</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.12.8">OpenSSL-based PKCS#11</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.12.9">PKCS#11 Tools</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.12.10">Using the HSM</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.12.11">Specifying the engine on the command line</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.12.12">Running named with automatic zone re-signing</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#dlz-info">DLZ (Dynamically Loadable Zones)</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.13.6">Configuring DLZ</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.13.7">Sample DLZ Driver</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#dyndb-info">DynDB (Dynamic Database)</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.14.5">Configuring DynDB</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.14.6">Sample DynDB Module</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#catz-info">Catalog Zones</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.15.4">Principle of Operation</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.15.5">Configuring Catalog Zones</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.15.6">Catalog Zone format</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#ipv6">IPv6 Support in <acronym class="acronym">BIND</acronym> 9</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.16.6">Address Lookups Using AAAA Records</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.16.7">Address to Name Lookups Using Nibble Format</a></span></dt>
-</dl></dd>
-</dl></dd>
-<dt><span class="chapter"><a href="Bv9ARM.ch05.html">5. The <acronym class="acronym">BIND</acronym> 9 Lightweight Resolver</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch05.html#lightweight_resolver">The Lightweight Resolver Library</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch05.html#lwresd">Running a Resolver Daemon</a></span></dt>
-</dl></dd>
-<dt><span class="chapter"><a href="Bv9ARM.ch06.html">6. <acronym class="acronym">BIND</acronym> 9 Configuration Reference</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#configuration_file_elements">Configuration File Elements</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#address_match_lists">Address Match Lists</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#comment_syntax">Comment Syntax</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#Configuration_File_Grammar">Configuration File Grammar</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#acl_grammar"><span class="command"><strong>acl</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#acl"><span class="command"><strong>acl</strong></span> Statement Definition and
- Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#controls_grammar"><span class="command"><strong>controls</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#controls_statement_definition_and_usage"><span class="command"><strong>controls</strong></span> Statement Definition and
- Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#include_grammar"><span class="command"><strong>include</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#include_statement"><span class="command"><strong>include</strong></span> Statement Definition and Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#key_grammar"><span class="command"><strong>key</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#key_statement"><span class="command"><strong>key</strong></span> Statement Definition and Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#logging_grammar"><span class="command"><strong>logging</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#logging_statement"><span class="command"><strong>logging</strong></span> Statement Definition and Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#lwres_grammar"><span class="command"><strong>lwres</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#lwres_statement"><span class="command"><strong>lwres</strong></span> Statement Definition and Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#masters_grammar"><span class="command"><strong>masters</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#masters_statement"><span class="command"><strong>masters</strong></span> Statement Definition and
- Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#options_grammar"><span class="command"><strong>options</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#options"><span class="command"><strong>options</strong></span> Statement Definition and
- Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#server_statement_grammar"><span class="command"><strong>server</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#server_statement_definition_and_usage"><span class="command"><strong>server</strong></span> Statement Definition and
- Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#statschannels"><span class="command"><strong>statistics-channels</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#statistics_channels"><span class="command"><strong>statistics-channels</strong></span> Statement Definition and
- Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#trusted-keys"><span class="command"><strong>trusted-keys</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#trusted_keys"><span class="command"><strong>trusted-keys</strong></span> Statement Definition
- and Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#managed_keys"><span class="command"><strong>managed-keys</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#managed-keys"><span class="command"><strong>managed-keys</strong></span> Statement Definition
- and Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#view_statement_grammar"><span class="command"><strong>view</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#view_statement"><span class="command"><strong>view</strong></span> Statement Definition and Usage</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#zone_statement_grammar"><span class="command"><strong>zone</strong></span>
- Statement Grammar</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#zone_statement"><span class="command"><strong>zone</strong></span> Statement Definition and Usage</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#zone_file">Zone File</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#types_of_resource_records_and_when_to_use_them">Types of Resource Records and When to Use Them</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#mx_records">Discussion of MX Records</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#Setting_TTLs">Setting TTLs</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#ipv4_reverse">Inverse Mapping in IPv4</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#zone_directives">Other Zone File Directives</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#generate_directive"><acronym class="acronym">BIND</acronym> Master File Extension: the <span class="command"><strong>$GENERATE</strong></span> Directive</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#zonefile_format">Additional File Formats</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#statistics">BIND9 Statistics</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#statsfile">The Statistics File</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch06.html#statistics_counters">Statistics Counters</a></span></dt>
-</dl></dd>
-</dl></dd>
-<dt><span class="chapter"><a href="Bv9ARM.ch07.html">7. <acronym class="acronym">BIND</acronym> 9 Security Considerations</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch07.html#Access_Control_Lists">Access Control Lists</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch07.html#chroot_and_setuid"><span class="command"><strong>Chroot</strong></span> and <span class="command"><strong>Setuid</strong></span></a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch07.html#chroot">The <span class="command"><strong>chroot</strong></span> Environment</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch07.html#setuid">Using the <span class="command"><strong>setuid</strong></span> Function</a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch07.html#dynamic_update_security">Dynamic Update Security</a></span></dt>
-</dl></dd>
-<dt><span class="chapter"><a href="Bv9ARM.ch08.html">8. Troubleshooting</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch08.html#common_problems">Common Problems</a></span></dt>
-<dd><dl><dt><span class="section"><a href="Bv9ARM.ch08.html#id-1.9.2.2">It's not working; how can I figure out what's wrong?</a></span></dt></dl></dd>
-<dt><span class="section"><a href="Bv9ARM.ch08.html#id-1.9.3">Incrementing and Changing the Serial Number</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch08.html#more_help">Where Can I Get Help?</a></span></dt>
-</dl></dd>
-<dt><span class="appendix"><a href="Bv9ARM.ch09.html">A. Release Notes</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch09.html#id-1.10.2">Release Notes for BIND Version 9.11.0-P3</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch09.html#relnotes_intro">Introduction</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch09.html#relnotes_download">Download</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch09.html#relnotes_security">Security Fixes</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch09.html#relnotes_features">New Features</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch09.html#relnotes_changes">Feature Changes</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch09.html#relnotes_port">Porting Changes</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch09.html#relnotes_bugs">Bug Fixes</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch09.html#end_of_life">End of Life</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch09.html#relnotes_thanks">Thank You</a></span></dt>
-</dl></dd>
-</dl></dd>
-<dt><span class="appendix"><a href="Bv9ARM.ch10.html">B. A Brief History of the <acronym class="acronym">DNS</acronym> and <acronym class="acronym">BIND</acronym></a></span></dt>
-<dt><span class="appendix"><a href="Bv9ARM.ch11.html">C. General <acronym class="acronym">DNS</acronym> Reference Information</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch11.html#ipv6addresses">IPv6 addresses (AAAA)</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch11.html#bibliography">Bibliography (and Suggested Reading)</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch11.html#rfcs">Request for Comments (RFCs)</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch11.html#internet_drafts">Internet Drafts</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch11.html#more_about_bind">Other Documents About <acronym class="acronym">BIND</acronym></a></span></dt>
-</dl></dd>
-</dl></dd>
-<dt><span class="appendix"><a href="Bv9ARM.ch12.html">D. BIND 9 DNS Library Support</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch12.html#bind9.library">BIND 9 DNS Library Support</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="Bv9ARM.ch12.html#id-1.13.2.4">Prerequisite</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch12.html#id-1.13.2.5">Compilation</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch12.html#id-1.13.2.6">Installation</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch12.html#id-1.13.2.7">Known Defects/Restrictions</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch12.html#id-1.13.2.8">The dns.conf File</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch12.html#id-1.13.2.9">Sample Applications</a></span></dt>
-<dt><span class="section"><a href="Bv9ARM.ch12.html#id-1.13.2.10">Library References</a></span></dt>
-</dl></dd>
-</dl></dd>
-<dt><span class="reference"><a href="Bv9ARM.ch13.html">I. Manual pages</a></span></dt>
-<dd><dl>
-<dt>
-<span class="refentrytitle"><a href="man.dig.html">dig</a></span><span class="refpurpose"> &#8212; DNS lookup utility</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.mdig.html"><span class="application">mdig</span></a></span><span class="refpurpose"> &#8212; DNS pipelined lookup utility</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.host.html">host</a></span><span class="refpurpose"> &#8212; DNS lookup utility</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.delv.html">delv</a></span><span class="refpurpose"> &#8212; DNS lookup and validation utility</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.nslookup.html">nslookup</a></span><span class="refpurpose"> &#8212; query Internet name servers interactively</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.dnssec-checkds.html"><span class="application">dnssec-checkds</span></a></span><span class="refpurpose"> &#8212; DNSSEC delegation consistency checking tool</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.dnssec-coverage.html"><span class="application">dnssec-coverage</span></a></span><span class="refpurpose"> &#8212; checks future DNSKEY coverage for a zone</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.dnssec-dsfromkey.html"><span class="application">dnssec-dsfromkey</span></a></span><span class="refpurpose"> &#8212; DNSSEC DS RR generation tool</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.dnssec-importkey.html"><span class="application">dnssec-importkey</span></a></span><span class="refpurpose"> &#8212; import DNSKEY records from external systems so they can be managed</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.dnssec-keyfromlabel.html"><span class="application">dnssec-keyfromlabel</span></a></span><span class="refpurpose"> &#8212; DNSSEC key generation tool</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.dnssec-keygen.html"><span class="application">dnssec-keygen</span></a></span><span class="refpurpose"> &#8212; DNSSEC key generation tool</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.dnssec-keymgr.html"><span class="application">dnssec-keymgr</span></a></span><span class="refpurpose"> &#8212; Ensures correct DNSKEY coverage for a zone based on a defined policy</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.dnssec-revoke.html"><span class="application">dnssec-revoke</span></a></span><span class="refpurpose"> &#8212; set the REVOKED bit on a DNSSEC key</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.dnssec-settime.html"><span class="application">dnssec-settime</span></a></span><span class="refpurpose"> &#8212; set the key timing metadata for a DNSSEC key</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.dnssec-signzone.html"><span class="application">dnssec-signzone</span></a></span><span class="refpurpose"> &#8212; DNSSEC zone signing tool</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.dnssec-verify.html"><span class="application">dnssec-verify</span></a></span><span class="refpurpose"> &#8212; DNSSEC zone verification tool</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.lwresd.html"><span class="application">lwresd</span></a></span><span class="refpurpose"> &#8212; lightweight resolver daemon</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.named.html"><span class="application">named</span></a></span><span class="refpurpose"> &#8212; Internet domain name server</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.named.conf.html"><code class="filename">named.conf</code></a></span><span class="refpurpose"> &#8212; configuration file for <span class="command"><strong>named</strong></span></span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.named-checkconf.html"><span class="application">named-checkconf</span></a></span><span class="refpurpose"> &#8212; named configuration file syntax checking tool</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.named-checkzone.html"><span class="application">named-checkzone</span></a></span><span class="refpurpose"> &#8212; zone file validity checking or converting tool</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.named-journalprint.html"><span class="application">named-journalprint</span></a></span><span class="refpurpose"> &#8212; print zone journal in human-readable form</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.named-nzd2nzf.html"><span class="application">named-nzd2nzf</span></a></span><span class="refpurpose"> &#8212;
- Convert an NZD database to NZF text format
- </span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.named-rrchecker.html"><span class="application">named-rrchecker</span></a></span><span class="refpurpose"> &#8212; syntax checker for individual DNS resource records</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.nsupdate.html"><span class="application">nsupdate</span></a></span><span class="refpurpose"> &#8212; Dynamic DNS update utility</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.rndc.html"><span class="application">rndc</span></a></span><span class="refpurpose"> &#8212; name server control utility</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.rndc.conf.html"><code class="filename">rndc.conf</code></a></span><span class="refpurpose"> &#8212; rndc configuration file</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.rndc-confgen.html"><span class="application">rndc-confgen</span></a></span><span class="refpurpose"> &#8212; rndc key generation tool</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.ddns-confgen.html"><span class="application">ddns-confgen</span></a></span><span class="refpurpose"> &#8212; ddns key generation tool</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.arpaname.html"><span class="application">arpaname</span></a></span><span class="refpurpose"> &#8212; translate IP addresses to the corresponding ARPA names</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.dnstap-read.html"><span class="application">dnstap-read</span></a></span><span class="refpurpose"> &#8212; print dnstap data in human-readable form</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.genrandom.html"><span class="application">genrandom</span></a></span><span class="refpurpose"> &#8212; generate a file containing random data</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.isc-hmac-fixup.html"><span class="application">isc-hmac-fixup</span></a></span><span class="refpurpose"> &#8212; fixes HMAC keys generated by older versions of BIND</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.nsec3hash.html"><span class="application">nsec3hash</span></a></span><span class="refpurpose"> &#8212; generate NSEC3 hash</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.pkcs11-destroy.html"><span class="application">pkcs11-destroy</span></a></span><span class="refpurpose"> &#8212; destroy PKCS#11 objects</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.pkcs11-list.html"><span class="application">pkcs11-list</span></a></span><span class="refpurpose"> &#8212; list PKCS#11 objects</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.pkcs11-keygen.html"><span class="application">pkcs11-keygen</span></a></span><span class="refpurpose"> &#8212; generate keys on a PKCS#11 device</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="man.pkcs11-tokens.html"><span class="application">pkcs11-tokens</span></a></span><span class="refpurpose"> &#8212; list PKCS#11 available tokens</span>
-</dt>
-</dl></dd>
-</dl>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left"> </td>
-<td width="20%" align="center"> </td>
-<td width="40%" align="right"> <a accesskey="n" href="Bv9ARM.ch01.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top"> </td>
-<td width="20%" align="center"> </td>
-<td width="40%" align="right" valign="top"> Chapter 1. Introduction</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/Bv9ARM.pdf b/doc/arm/Bv9ARM.pdf
deleted file mode 100644
index f3ed1826..00000000
--- a/doc/arm/Bv9ARM.pdf
+++ /dev/null
Binary files differ
diff --git a/doc/arm/Makefile.in b/doc/arm/Makefile.in
deleted file mode 100644
index 69138f6b..00000000
--- a/doc/arm/Makefile.in
+++ /dev/null
@@ -1,56 +0,0 @@
-# Copyright (C) 2001, 2002, 2004-2007, 2009, 2012, 2014-2016 Internet Systems Consortium, Inc. ("ISC")
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-top_srcdir = @top_srcdir@
-
-@BIND9_MAKE_RULES@
-
-MANOBJS = Bv9ARM.html notes.html
-
-PDFOBJS = Bv9ARM.pdf notes.pdf
-
-doc man:: ${MANOBJS} ${PDFOBJS}
-
-clean::
- rm -f Bv9ARM.aux Bv9ARM.brf Bv9ARM.glo Bv9ARM.idx Bv9ARM.toc
- rm -f Bv9ARM.log Bv9ARM.out
- rm -f notes.aux notes.brf notes.glo notes.idx notes.toc
- rm -f notes.log notes.out
-
-docclean manclean maintainer-clean:: clean
- rm -f *.html ${PDFOBJS}
-
-maintainer-clean distclean::
- rm -f releaseinfo.xml
- rm -f pkgversion.xml
- rm -f noteversion.xml
-
-# use xmllint to process include
-notes.html: notes-wrapper.xml notes.xml releaseinfo.xml pkgversion.xml noteversion.xml
- expand notes-wrapper.xml | ${XMLLINT} --xinclude - | \
- ${XSLTPROC} --stringparam generate.toc "" ../xsl/isc-notes-html.xsl - > notes.html
-
-notes.pdf: notes-wrapper.xml notes.xml releaseinfo.xml pkgversion.xml noteversion.xml
- ${XSLTPROC} ${top_srcdir}/doc/xsl/pre-latex.xsl notes-wrapper.xml | \
- ${DBLATEX} -c notes.conf -Pdoc.layout="mainmatter" -o notes.pdf -
-
-# use xmllint to process include
-Bv9ARM.html: Bv9ARM-book.xml releaseinfo.xml pkgversion.xml noteversion.xml
- expand Bv9ARM-book.xml | ${XMLLINT} --xinclude - | \
- ${XSLTPROC} --stringparam root.filename Bv9ARM \
- ${top_srcdir}/doc/xsl/isc-docbook-chunk.xsl -
-
-# use xmllint to process include
-Bv9ARM-all.html: Bv9ARM-book.xml releaseinfo.xml pkgversion.xml noteversion.xml
- expand Bv9ARM-book.xml | ${XMLLINT} --xinclude - |\
- ${XSLTPROC} -o Bv9ARM-all.html ../xsl/isc-docbook-html.xsl -
-
-Bv9ARM.pdf: Bv9ARM-book.xml releaseinfo.xml pkgversion.xml noteversion.xml
- expand Bv9ARM-book.xml | \
- ${XSLTPROC} ${top_srcdir}/doc/xsl/pre-latex.xsl - | \
- ${DBLATEX} -c Bv9ARM.conf -o Bv9ARM.pdf -
diff --git a/doc/arm/README-SGML b/doc/arm/README-SGML
deleted file mode 100644
index 8406524b..00000000
--- a/doc/arm/README-SGML
+++ /dev/null
@@ -1,57 +0,0 @@
-Copyright (C) 2000, 2001, 2004, 2015, 2016 Internet Systems Consortium, Inc. ("ISC")
-
-This Source Code Form is subject to the terms of the Mozilla Public
-License, v. 2.0. If a copy of the MPL was not distributed with this
-file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-The BIND v9 ARM master document is now kept in DocBook 5 XML format.
-
-Most of the ARM is in the single file "Bv9ARM-book.xml", with certain
-other files included into it:
-
- - dlz.xml
- - dnssec.xml
- - libdns.xml
- - logging-categories.xml
- - managed-keys.xml
- - notes.xml
- - pkcs11.xml
- - BIND man pages
-
-All of the published ARM formats - HTML, PDF, etc - are generated from
-this master source.
-
-The file "notes.xml" contains the release notes for the current release. In
-addition to being included in the ARM as an appendix, it is also built into
-a stand-alone document: "notes.pdf" and "notes.html".
-
-Building these these files requires DocBook 5 and dblatex. These are
-available as packages in many OS distributes; in debian, for example:
-
- $ sudo apt-get install docbook5-xml docbook-xml docbook-xsl-ns \
- docbook-utils dblatex
-
-To build all documentation, run "make doc".
-
-When committing changes or submitting patches, it is only necessary to
-edit the XML source (i.e., the files with ".docbook" or ".xml" suffixes);
-the files in HTML and man page format are built from the XML source by a
-cron job.
-
-If you are familiar with SGML or HTML, editing the DocBook XML is quite
-straightforward. You only need to know what the tags are and how to use
-them. You can find a good resource either for this either online or in
-printed form:
-
- DocBook: The Definitive Guide
- By Norman Walsh and Leonard Muellner
- ISBN: 156592-580-7
- 1st Edition, October 1999
- Copyright (C) 1999 by O'Reilly & Associates, Inc. All rights reserved.
-
-The book is available online in HTML format:
-
- http://docbook.org/
-
-After editing documentation, it is useful to check the correctness of the
-XML; this can be done using the "xmllint" utility.
diff --git a/doc/arm/catz.xml b/doc/arm/catz.xml
deleted file mode 100644
index a0a8362b..00000000
--- a/doc/arm/catz.xml
+++ /dev/null
@@ -1,274 +0,0 @@
-<!--
- - Copyright (C) 2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
-<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="catz-info"><info><title>Catalog Zones</title></info>
-
- <para>
- A "catalog zone" is a special DNS zone that contains a list of
- other zones to be served, along with their configuration parameters.
- Zones listed in a catalog zone are called "member zones".
- When a catalog zone is loaded or transferred to a slave server
- which supports this functionality, the slave server will create
- the member zones automatically. When the catalog zone is updated
- (for example, to add or delete member zones, or change
- their configuration parameters) those changes are immediately put
- into effect. Because the catalog zone is a normal DNS zone, these
- configuration changes can be propagated using the standard AXFR/IXFR
- zone transfer mechanism.
- </para>
- <para>
- Catalog zones' format and behavior are specified as an internet draft
- for interoperability among DNS implementations. As of this release, the
- latest revision of the DNS catalog zones draft can be found here:
- https://datatracker.ietf.org/doc/draft-muks-dnsop-dns-catalog-zones/
- </para>
-
- <section><info><title>Principle of Operation</title></info>
- <para>
- Normally, if a zone is to be served by a slave server, the
- <filename>named.conf</filename> file on the server must list the
- zone, or the zone must be added using <command>rndc addzone</command>.
- In environments with a large number of slave servers and/or where
- the zones being served are changing frequently, the overhead involved
- in maintaining consistent zone configuration on all the slave
- servers can be significant.
- </para>
- <para>
- A catalog zone is a way to ease this administrative burden. It is a
- DNS zone that lists member zones that should be served by slave servers.
- When a slave server receives an update to the catalog zone, it adds,
- removes, or reconfigures member zones based on the data received.
- </para>
- <para>
- To use a catalog zone, it must first be set up as a normal zone on
- the master and the on slave servers that will be configured to use
- it. It must also be added to a <option>catalog-zones</option> list
- in the <option>options</option> or <option>view</option> statement
- in <filename>named.conf</filename>. (This is comparable to the way
- a policy zone is configured as a normal zone and also listed in
- a <option>response-policy</option> statement.)
- </para>
- <para>
- To use the catalog zone feature to serve a new member zone:
- <itemizedlist>
- <listitem>
- <para>
- Set up the the member zone to be served on the master as normal.
- This could be done by editing <filename>named.conf</filename>,
- or by running <command>rndc addzone</command>.
- </para>
- </listitem>
- <listitem>
- <para>
- Add an entry to the catalog zone for the new member zone.
- This could be done by editing the catalog zone's master file
- and running <command>rndc reload</command>, or by updating
- the zone using <command>nsupdate</command>.
- </para>
- </listitem>
- </itemizedlist>
- The change to the catalog zone will be propagated from the master to all
- slaves using the normal AXFR/IXFR mechanism. When the slave receives the
- update to the catalog zone, it will detect the entry for the new member
- zone, create an instance of of that zone on the slave server, and point
- that instance to the <option>masters</option> specified in the catalog
- zone data. The newly created member zone is a normal slave zone, so
- BIND will immediately initiate a transfer of zone contents from the
- master. Once complete, the slave will start serving the member zone.
- </para>
- <para>
- Removing a member zone from a slave server requires nothing more than
- deleting the member zone's entry in the catalog zone. The change to the
- catalog cone is propagated to the slave server using the normal AXFR/IXFR
- transfer mechanism. The slave server, on processing the update, will
- notice that the member zone has been removed. It will stop serving the
- zone and remove it from its list of configured zones. (Removing the
- member zone from the master server has to be done in the normal way,
- by editing the configuration file or running
- <command>rndc delzone</command>.)
- </para>
- </section>
-
- <section><info><title>Configuring Catalog Zones</title></info>
- <para>
- Catalog zones are configured with a <command>catalog-zones</command>
- statement in the <literal>options</literal> or <literal>view</literal>
- section of <filename>named.conf</filename>. For example,
- </para>
-<screen>
-catalog-zones {
- zone "catalog.example"
- default-masters { 10.53.0.1; }
- in-memory no
- zone-directory "catzones"
- min-update-interval 10;
-};
-</screen>
- <para>
- This statement specifies that the zone
- <literal>catalog.example</literal> is a catalog zone. This zone must be
- properly configured in the same view. In most configurations, it would
- be a slave zone.
- </para>
- <para>
- The options following the zone name are not required, and may be
- specified in any order:
- </para>
- <para>
- The <option>default-masters</option> option defines the default masters
- for member zones listed in a catalog zone. This can be overridden by
- options within a catalog zone. If no such options are included, then
- member zones will transfer their contents from the servers listed in
- this option.
- </para>
- <para>
- The <option>in-memory</option> option, if set to <literal>yes</literal>,
- causes member zones to be stored only in memory. This is functionally
- equivalent to configuring a slave zone without a <option>file</option>.
- option. The default is <literal>no</literal>; member zones' content
- will be stored locally in a file whose name is automatically generated
- from the view name, catalog zone name, and member zone name.
- </para>
- <para>
- The <option>zone-directory</option> option causes local copies of
- member zones' master files (if <option>in-memory</option> is not set
- to <literal>yes</literal>) to be stored in the specified directory.
- The default is to store zone files in the server's working directory.
- A non-absolute pathname in <option>zone-directory</option> is
- assumed to be relative to the working directory.
- </para>
- <para>
- The <option>min-update-interval</option> option sets the minimum
- interval between processing of updates to catalog zones, in seconds.
- If an update to a catalog zone (for example, via IXFR) happens less
- than <option>min-update-interval</option> seconds after the most
- recent update, then the changes will not be carried out until this
- interval has elapsed. The default is <literal>5</literal> seconds.
- </para>
- <para>
- Catalog zones are defined on a per-view basis. Configuring a non-empty
- <option>catalog-zones</option> statement in a view will automatically
- turn on <option>allow-new-zones</option> for that view. (Note: this
- means <command>rndc addzone</command> and <command>rndc delzone</command>
- will also work in any view that supports catalog zones.)
- </para>
- </section>
-
- <section><info><title>Catalog Zone format</title></info>
- <para>
- A catalog zone is a regular DNS zone; therefore, it has to have a
- single <literal>SOA</literal> and at least one <literal>NS</literal>
- record.
- </para>
- <para>
- A record stating the version of the catalog zone format is
- also required. If the version number listed is not supported by
- the server, then a catalog zone may not be used by that server.
- </para>
-<screen>
-catalog.example. IN SOA . . 2016022901 900 600 86400 1
-catalog.example. IN NS nsexample.
-version.catalog.example. IN TXT "1"
-</screen>
- <para>
- Note that this record must have the domain name
- version.<replaceable>catalog-zone-name</replaceable>. This illustrates
- how the meaning of data stored in a catalog zone is indicated by the
- the domain name label immediately before the catalog zone domain.
- </para>
- <para>
- Catalog zone options can be set either globally for the whole catalog
- zone or for a single member zone. Global options override the settings
- in the configuration file and member zone options override global
- options.
- </para>
- <para>
- Global options are set at the apex of the catalog zone, e.g.:
-</para>
-<screen>
- masters.catalog.example. IN AAAA 2001:db8::1
-</screen>
- <para>BIND currently supports the following options:</para>
- <itemizedlist>
- <listitem>
- <para>A simple <option>masters</option> definition:</para>
- <screen>
- masters.catalog.example. IN A 192.0.2.1
- </screen>
- <para>
- This option defines a master server for the member zones - it
- can be either an A or AAAA record. If multiple masters are set the
- order in which they are used is random.
- </para>
- </listitem>
- <listitem>
- <para>A <option>masters</option> with a TSIG key defined:</para>
- <screen>
- label.masters.catalog.example. IN A 192.0.2.2
- label.masters.catalog.example. IN TXT "tsig_key_name"
- </screen>
- <para>
- This option defines a master server for the member zone with a TSIG
- key set. The TSIG key must be configured in the configuration file.
- <option>label</option> can be any valid DNS label.
- </para>
- </listitem>
- <listitem>
- <para><option>allow-query</option> and
- <option>allow-transfer</option> ACLs:</para>
- <screen>
- allow-query.catalog.example. IN APL 1:10.0.0.1/24
- allow-transfer.catalog.example. IN APL !1:10.0.0.1/32 1:10.0.0.0/24
- </screen>
- <para>
- These options are the equivalents of <option>allow-query</option>
- and <option>allow-transfer</option> in a zone declaration in the
- <filename>named.conf</filename> configuration file. The ACL is
- processed in order - if there's no match to any rule the default
- policy is to deny access. For the syntax of the APL RR see RFC
- 3123
- </para>
- </listitem>
- </itemizedlist>
- <para>
- A member zone is added by including a <literal>PTR</literal>
- resource record in the <literal>zones</literal> sub-domain of the
- catalog zone. The record label is a <literal>SHA-1</literal> hash
- of the member zone name in wire format. The target of the PTR
- record is the member zone name. For example, to add the member
- zone <literal>domain.example</literal>:
- </para>
-<screen>
-5960775ba382e7a4e09263fc06e7c00569b6a05c.zones.catalog.example. IN PTR domain.example.
-</screen>
- <para>
- The hash is necessary to identify options for a specific member
- zone. The member zone-specific options are defined the same way as
- global options, but in the member zone subdomain:
- </para>
-<screen>
-masters.5960775ba382e7a4e09263fc06e7c00569b6a05c.zones.catalog.example. IN A 192.0.2.2
-label.masters.5960775ba382e7a4e09263fc06e7c00569b6a05c.zones.catalog.example. IN AAAA 2001:db8::2
-label.masters.5960775ba382e7a4e09263fc06e7c00569b6a05c.zones.catalog.example. IN TXT "tsig_key"
-allow-query.5960775ba382e7a4e09263fc06e7c00569b6a05c.zones.catalog.example. IN APL 1:10.0.0.0/24
-</screen>
- <para>
- As would be expected, options defined for a specific zone override
- the global options defined in the catalog zone. These in turn override
- the global options defined in the <literal>catalog-zones</literal>
- statement in the configuration file.
- </para>
- <para>
- (Note that none of the global records an option will be inherited if
- any records are defined for that option for the specific zone. For
- example, if the zone had a <literal>masters</literal> record of type
- A but not AAAA, then it would <emphasis>not</emphasis> inherit the
- type AAAA record from the global option.)
- </para>
- </section>
-</section>
diff --git a/doc/arm/dlz.xml b/doc/arm/dlz.xml
deleted file mode 100644
index 0658dabc..00000000
--- a/doc/arm/dlz.xml
+++ /dev/null
@@ -1,145 +0,0 @@
-<!--
- - Copyright (C) 2012-2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
-<!-- Converted by db4-upgrade version 1.0 -->
-<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="dlz-info"><info><title>DLZ (Dynamically Loadable Zones)</title></info>
-
- <para>
- DLZ (Dynamically Loadable Zones) is an extension to BIND 9 that allows
- zone data to be retrieved directly from an external database. There is
- no required format or schema. DLZ drivers exist for several different
- database backends including PostgreSQL, MySQL, and LDAP and can be
- written for any other.
- </para>
- <para>
- Historically, DLZ drivers had to be statically linked with the <command>named</command>
- binary and were turned on via a configure option at compile time (for
- example, <userinput>"configure --with-dlz-ldap"</userinput>).
- Currently, the drivers provided in the BIND 9 tarball in
- <filename>contrib/dlz/drivers</filename> are still linked this
- way.
- </para>
- <para>
- In BIND 9.8 and higher, it is possible to link some DLZ modules
- dynamically at runtime, via the DLZ "dlopen" driver, which acts as a
- generic wrapper around a shared object implementing the DLZ API. The
- "dlopen" driver is linked into <command>named</command> by default, so configure options
- are no longer necessary when using these dynamically linkable drivers,
- but are still needed for the older drivers in
- <filename>contrib/dlz/drivers</filename>.
- </para>
-
- <para>
- When the DLZ module provides data to <command>named</command>, it does so in text format.
- The response is converted to DNS wire format by <command>named</command>. This
- conversion, and the lack of any internal caching, places significant
- limits on the query performance of DLZ modules. Consequently, DLZ is
- not recommended for use on high-volume servers. However, it can be
- used in a hidden master configuration, with slaves retrieving zone
- updates via AXFR. (Note, however, that DLZ has no built-in support for
- DNS notify; slaves are not automatically informed of changes to the
- zones in the database.)
- </para>
-
- <section><info><title>Configuring DLZ</title></info>
-
- <para>
- A DLZ database is configured with a <command>dlz</command>
- statement in <filename>named.conf</filename>:
- </para>
- <screen>
- dlz example {
- database "dlopen driver.so <option>args</option>";
- search yes;
- };
- </screen>
- <para>
- This specifies a DLZ module to search when answering queries; the
- module is implemented in <filename>driver.so</filename> and is
- loaded at runtime by the dlopen DLZ driver. Multiple
- <command>dlz</command> statements can be specified; when
- answering a query, all DLZ modules with <option>search</option>
- set to <literal>yes</literal> will be queried to find out if
- they contain an answer for the query name; the best available
- answer will be returned to the client.
- </para>
- <para>
- The <option>search</option> option in the above example can be
- omitted, because <literal>yes</literal> is the default value.
- </para>
- <para>
- If <option>search</option> is set to <literal>no</literal>, then
- this DLZ module is <emphasis>not</emphasis> searched for the best
- match when a query is received. Instead, zones in this DLZ must be
- separately specified in a zone statement. This allows you to
- configure a zone normally using standard zone option semantics,
- but specify a different database back-end for storage of the
- zone's data. For example, to implement NXDOMAIN redirection using
- a DLZ module for back-end storage of redirection rules:
- </para>
- <screen>
- dlz other {
- database "dlopen driver.so <option>args</option>";
- search no;
- };
-
- zone "." {
- type redirect;
- dlz other;
- };
- </screen>
- </section>
- <section><info><title>Sample DLZ Driver</title></info>
-
- <para>
- For guidance in implementation of DLZ modules, the directory
- <filename>contrib/dlz/example</filename> contains a basic
- dynamically-linkable DLZ module--i.e., one which can be
- loaded at runtime by the "dlopen" DLZ driver.
- The example sets up a single zone, whose name is passed
- to the module as an argument in the <command>dlz</command>
- statement:
- </para>
- <screen>
- dlz other {
- database "dlopen driver.so example.nil";
- };
- </screen>
- <para>
- In the above example, the module is configured to create a zone
- "example.nil", which can answer queries and AXFR requests, and
- accept DDNS updates. At runtime, prior to any updates, the zone
- contains an SOA, NS, and a single A record at the apex:
- </para>
- <screen>
- example.nil. 3600 IN SOA example.nil. hostmaster.example.nil. (
- 123 900 600 86400 3600
- )
- example.nil. 3600 IN NS example.nil.
- example.nil. 1800 IN A 10.53.0.1
- </screen>
- <para>
- The sample driver is capable of retrieving information about the
- querying client, and altering its response on the basis of this
- information. To demonstrate this feature, the example driver
- responds to queries for "source-addr.<option>zonename</option>&gt;/TXT"
- with the source address of the query. Note, however, that this
- record will *not* be included in AXFR or ANY responses. Normally,
- this feature would be used to alter responses in some other fashion,
- e.g., by providing different address records for a particular name
- depending on the network from which the query arrived.
- </para>
- <para>
- Documentation of the DLZ module API can be found in
- <filename>contrib/dlz/example/README</filename>. This directory also
- contains the header file <filename>dlz_minimal.h</filename>, which
- defines the API and should be included by any dynamically-linkable
- DLZ module.
- </para>
- </section>
-</section>
diff --git a/doc/arm/dnssec.xml b/doc/arm/dnssec.xml
deleted file mode 100644
index 16ec45ce..00000000
--- a/doc/arm/dnssec.xml
+++ /dev/null
@@ -1,286 +0,0 @@
-<!--
- - Copyright (C) 2010, 2011, 2015, 2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
-<!-- Converted by db4-upgrade version 1.0 -->
-<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="dnssec.dynamic.zones"><info><title>DNSSEC, Dynamic Zones, and Automatic Signing</title></info>
-
- <para>As of BIND 9.7.0 it is possible to change a dynamic zone
- from insecure to signed and back again. A secure zone can use
- either NSEC or NSEC3 chains.</para>
- <section><info><title>Converting from insecure to secure</title></info>
-
- </section>
- <para>Changing a zone from insecure to secure can be done in two
- ways: using a dynamic DNS update, or the
- <command>auto-dnssec</command> zone option.</para>
- <para>For either method, you need to configure
- <command>named</command> so that it can see the
- <filename>K*</filename> files which contain the public and private
- parts of the keys that will be used to sign the zone. These files
- will have been generated by
- <command>dnssec-keygen</command>. You can do this by placing them
- in the key-directory, as specified in
- <filename>named.conf</filename>:</para>
- <programlisting>
- zone example.net {
- type master;
- update-policy local;
- file "dynamic/example.net/example.net";
- key-directory "dynamic/example.net";
- };
-</programlisting>
- <para>If one KSK and one ZSK DNSKEY key have been generated, this
- configuration will cause all records in the zone to be signed
- with the ZSK, and the DNSKEY RRset to be signed with the KSK as
- well. An NSEC chain will be generated as part of the initial
- signing process.</para>
- <section><info><title>Dynamic DNS update method</title></info>
-
- </section>
- <para>To insert the keys via dynamic update:</para>
- <screen>
- % nsupdate
- &gt; ttl 3600
- &gt; update add example.net DNSKEY 256 3 7 AwEAAZn17pUF0KpbPA2c7Gz76Vb18v0teKT3EyAGfBfL8eQ8al35zz3Y I1m/SAQBxIqMfLtIwqWPdgthsu36azGQAX8=
- &gt; update add example.net DNSKEY 257 3 7 AwEAAd/7odU/64o2LGsifbLtQmtO8dFDtTAZXSX2+X3e/UNlq9IHq3Y0 XtC0Iuawl/qkaKVxXe2lo8Ct+dM6UehyCqk=
- &gt; send
-</screen>
- <para>While the update request will complete almost immediately,
- the zone will not be completely signed until
- <command>named</command> has had time to walk the zone and
- generate the NSEC and RRSIG records. The NSEC record at the apex
- will be added last, to signal that there is a complete NSEC
- chain.</para>
- <para>If you wish to sign using NSEC3 instead of NSEC, you should
- add an NSEC3PARAM record to the initial update request. If you
- wish the NSEC3 chain to have the OPTOUT bit set, set it in the
- flags field of the NSEC3PARAM record.</para>
- <screen>
- % nsupdate
- &gt; ttl 3600
- &gt; update add example.net DNSKEY 256 3 7 AwEAAZn17pUF0KpbPA2c7Gz76Vb18v0teKT3EyAGfBfL8eQ8al35zz3Y I1m/SAQBxIqMfLtIwqWPdgthsu36azGQAX8=
- &gt; update add example.net DNSKEY 257 3 7 AwEAAd/7odU/64o2LGsifbLtQmtO8dFDtTAZXSX2+X3e/UNlq9IHq3Y0 XtC0Iuawl/qkaKVxXe2lo8Ct+dM6UehyCqk=
- &gt; update add example.net NSEC3PARAM 1 1 100 1234567890
- &gt; send
-</screen>
- <para>Again, this update request will complete almost
- immediately; however, the record won't show up until
- <command>named</command> has had a chance to build/remove the
- relevant chain. A private type record will be created to record
- the state of the operation (see below for more details), and will
- be removed once the operation completes.</para>
- <para>While the initial signing and NSEC/NSEC3 chain generation
- is happening, other updates are possible as well.</para>
- <section><info><title>Fully automatic zone signing</title></info>
-
- </section>
- <para>To enable automatic signing, add the
- <command>auto-dnssec</command> option to the zone statement in
- <filename>named.conf</filename>.
- <command>auto-dnssec</command> has two possible arguments:
- <constant>allow</constant> or
- <constant>maintain</constant>.</para>
- <para>With
- <command>auto-dnssec allow</command>,
- <command>named</command> can search the key directory for keys
- matching the zone, insert them into the zone, and use them to
- sign the zone. It will do so only when it receives an
- <command>rndc sign &lt;zonename&gt;</command>.</para>
- <para>
- <!-- TODO: this is repeated in the ARM -->
- <command>auto-dnssec maintain</command> includes the above
- functionality, but will also automatically adjust the zone's
- DNSKEY records on schedule according to the keys' timing metadata.
- (See <xref linkend="man.dnssec-keygen"/> and
- <xref linkend="man.dnssec-settime"/> for more information.)
- </para>
- <para>
- <command>named</command> will periodically search the key directory
- for keys matching the zone, and if the keys' metadata indicates
- that any change should be made the zone, such as adding, removing,
- or revoking a key, then that action will be carried out. By default,
- the key directory is checked for changes every 60 minutes; this period
- can be adjusted with the <option>dnssec-loadkeys-interval</option>, up
- to a maximum of 24 hours. The <command>rndc loadkeys</command> forces
- <command>named</command> to check for key updates immediately.
- </para>
- <para>
- If keys are present in the key directory the first time the zone
- is loaded, the zone will be signed immediately, without waiting for an
- <command>rndc sign</command> or <command>rndc loadkeys</command>
- command. (Those commands can still be used when there are unscheduled
- key changes, however.)
- </para>
- <para>
- When new keys are added to a zone, the TTL is set to match that
- of any existing DNSKEY RRset. If there is no existing DNSKEY RRset,
- then the TTL will be set to the TTL specified when the key was
- created (using the <command>dnssec-keygen -L</command> option), if
- any, or to the SOA TTL.
- </para>
- <para>
- If you wish the zone to be signed using NSEC3 instead of NSEC,
- submit an NSEC3PARAM record via dynamic update prior to the
- scheduled publication and activation of the keys. If you wish the
- NSEC3 chain to have the OPTOUT bit set, set it in the flags field
- of the NSEC3PARAM record. The NSEC3PARAM record will not appear in
- the zone immediately, but it will be stored for later reference. When
- the zone is signed and the NSEC3 chain is completed, the NSEC3PARAM
- record will appear in the zone.
- </para>
- <para>Using the
- <command>auto-dnssec</command> option requires the zone to be
- configured to allow dynamic updates, by adding an
- <command>allow-update</command> or
- <command>update-policy</command> statement to the zone
- configuration. If this has not been done, the configuration will
- fail.</para>
- <section><info><title>Private-type records</title></info>
-
- </section>
- <para>The state of the signing process is signaled by
- private-type records (with a default type value of 65534). When
- signing is complete, these records will have a nonzero value for
- the final octet (for those records which have a nonzero initial
- octet).</para>
- <para>The private type record format: If the first octet is
- non-zero then the record indicates that the zone needs to be
- signed with the key matching the record, or that all signatures
- that match the record should be removed.</para>
- <para>
- <literallayout>
-<!-- TODO: how to format this? -->
- algorithm (octet 1)
- key id in network order (octet 2 and 3)
- removal flag (octet 4)
- complete flag (octet 5)
-</literallayout>
- </para>
- <para>Only records flagged as "complete" can be removed via
- dynamic update. Attempts to remove other private type records
- will be silently ignored.</para>
- <para>If the first octet is zero (this is a reserved algorithm
- number that should never appear in a DNSKEY record) then the
- record indicates changes to the NSEC3 chains are in progress. The
- rest of the record contains an NSEC3PARAM record. The flag field
- tells what operation to perform based on the flag bits.</para>
- <para>
- <literallayout>
-<!-- TODO: how to format this? -->
- 0x01 OPTOUT
- 0x80 CREATE
- 0x40 REMOVE
- 0x20 NONSEC
-</literallayout>
- </para>
- <section><info><title>DNSKEY rollovers</title></info>
-
- </section>
- <para>As with insecure-to-secure conversions, rolling DNSSEC
- keys can be done in two ways: using a dynamic DNS update, or the
- <command>auto-dnssec</command> zone option.</para>
- <section><info><title>Dynamic DNS update method</title></info>
-
- </section>
- <para> To perform key rollovers via dynamic update, you need to add
- the <filename>K*</filename> files for the new keys so that
- <command>named</command> can find them. You can then add the new
- DNSKEY RRs via dynamic update.
- <command>named</command> will then cause the zone to be signed
- with the new keys. When the signing is complete the private type
- records will be updated so that the last octet is non
- zero.</para>
- <para>If this is for a KSK you need to inform the parent and any
- trust anchor repositories of the new KSK.</para>
- <para>You should then wait for the maximum TTL in the zone before
- removing the old DNSKEY. If it is a KSK that is being updated,
- you also need to wait for the DS RRset in the parent to be
- updated and its TTL to expire. This ensures that all clients will
- be able to verify at least one signature when you remove the old
- DNSKEY.</para>
- <para>The old DNSKEY can be removed via UPDATE. Take care to
- specify the correct key.
- <command>named</command> will clean out any signatures generated
- by the old key after the update completes.</para>
- <section><info><title>Automatic key rollovers</title></info>
-
- </section>
- <para>When a new key reaches its activation date (as set by
- <command>dnssec-keygen</command> or <command>dnssec-settime</command>),
- if the <command>auto-dnssec</command> zone option is set to
- <constant>maintain</constant>, <command>named</command> will
- automatically carry out the key rollover. If the key's algorithm
- has not previously been used to sign the zone, then the zone will
- be fully signed as quickly as possible. However, if the new key
- is replacing an existing key of the same algorithm, then the
- zone will be re-signed incrementally, with signatures from the
- old key being replaced with signatures from the new key as their
- signature validity periods expire. By default, this rollover
- completes in 30 days, after which it will be safe to remove the
- old key from the DNSKEY RRset.</para>
- <section><info><title>NSEC3PARAM rollovers via UPDATE</title></info>
-
- </section>
- <para>Add the new NSEC3PARAM record via dynamic update. When the
- new NSEC3 chain has been generated, the NSEC3PARAM flag field
- will be zero. At this point you can remove the old NSEC3PARAM
- record. The old chain will be removed after the update request
- completes.</para>
- <section><info><title>Converting from NSEC to NSEC3</title></info>
-
- </section>
- <para>To do this, you just need to add an NSEC3PARAM record. When
- the conversion is complete, the NSEC chain will have been removed
- and the NSEC3PARAM record will have a zero flag field. The NSEC3
- chain will be generated before the NSEC chain is
- destroyed.</para>
- <section><info><title>Converting from NSEC3 to NSEC</title></info>
-
- </section>
- <para>To do this, use <command>nsupdate</command> to
- remove all NSEC3PARAM records with a zero flag
- field. The NSEC chain will be generated before the NSEC3 chain is
- removed.</para>
- <section><info><title>Converting from secure to insecure</title></info>
-
- </section>
- <para>To convert a signed zone to unsigned using dynamic DNS,
- delete all the DNSKEY records from the zone apex using
- <command>nsupdate</command>. All signatures, NSEC or NSEC3 chains,
- and associated NSEC3PARAM records will be removed automatically.
- This will take place after the update request completes.</para>
- <para> This requires the
- <command>dnssec-secure-to-insecure</command> option to be set to
- <userinput>yes</userinput> in
- <filename>named.conf</filename>.</para>
- <para>In addition, if the <command>auto-dnssec maintain</command>
- zone statement is used, it should be removed or changed to
- <command>allow</command> instead (or it will re-sign).
- </para>
- <section><info><title>Periodic re-signing</title></info>
-
- </section>
- <para>In any secure zone which supports dynamic updates, <command>named</command>
- will periodically re-sign RRsets which have not been re-signed as
- a result of some update action. The signature lifetimes will be
- adjusted so as to spread the re-sign load over time rather than
- all at once.</para>
- <section><info><title>NSEC3 and OPTOUT</title></info>
-
- </section>
- <para>
- <command>named</command> only supports creating new NSEC3 chains
- where all the NSEC3 records in the zone have the same OPTOUT
- state.
- <command>named</command> supports UPDATES to zones where the NSEC3
- records in the chain have mixed OPTOUT state.
- <command>named</command> does not support changing the OPTOUT
- state of an individual NSEC3 record, the entire chain needs to be
- changed if the OPTOUT state of an individual NSEC3 needs to be
- changed.</para>
-</section>
diff --git a/doc/arm/dyndb.xml b/doc/arm/dyndb.xml
deleted file mode 100644
index 6a6ccbd9..00000000
--- a/doc/arm/dyndb.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<!--
- - Copyright (C) 2015, 2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
-<!-- Converted by db4-upgrade version 1.0 -->
-<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="dyndb-info"><info><title>DynDB (Dynamic Database)</title></info>
-
- <para>
- DynDB is an extension to BIND 9 which, like DLZ
- (see <xref linkend="dlz-info"/>), allows zone data to be
- retrieved from an external database. Unlike DLZ, a DynDB module
- provides a full-featured BIND zone database interface. Where
- DLZ translates DNS queries into real-time database lookups,
- resulting in relatively poor query performance, and is unable
- to handle DNSSEC-signed data due to its limited API, a DynDB
- module can pre-load an in-memory database from the external
- data source, providing the same performance and functionality
- as zones served natively by BIND.
- </para>
- <para>
- A DynDB module supporting LDAP has been created by Red Hat
- and is available from
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://fedorahosted.org/bind-dyndb-ldap/">https://fedorahosted.org/bind-dyndb-ldap/</link>.
- </para>
- <para>
- A sample DynDB module for testing and developer guidance
- is included with the BIND source code, in the directory
- <filename>bin/tests/system/dyndb/driver</filename>.
- </para>
-
- <section><info><title>Configuring DynDB</title></info>
-
- <para>
- A DynDB database is configured with a <command>dyndb</command>
- statement in <filename>named.conf</filename>:
- </para>
- <screen>
- dyndb example "driver.so" {
- <replaceable>parameters</replaceable>
- };
- </screen>
- <para>
- The file <filename>driver.so</filename> is a DynDB module which
- implements the full DNS database API. Multiple
- <command>dyndb</command> statements can be specified, to load
- different drivers or multiple instances of the same driver.
- Zones provided by a DynDB module are added to the view's zone
- table, and are treated as normal authoritative zones when BIND
- is responding to queries. Zone configuration is handled internally
- by the DynDB module.
- </para>
- <para>
- The <replaceable>parameters</replaceable> are passed as an opaque
- string to the DynDB module's initialization routine. Configuration
- syntax will differ depending on the driver.
- </para>
- </section>
- <section><info><title>Sample DynDB Module</title></info>
-
- <para>
- For guidance in implementation of DynDB modules, the directory
- <filename>bin/tests/system/dyndb/driver</filename>.
- contains a basic DynDB module.
- The example sets up two zones, whose names are passed
- to the module as arguments in the <command>dyndb</command>
- statement:
- </para>
- <screen>
- dyndb sample "sample.so" { example.nil. arpa. };
- </screen>
- <para>
- In the above example, the module is configured to create a zone
- "example.nil", which can answer queries and AXFR requests, and
- accept DDNS updates. At runtime, prior to any updates, the zone
- contains an SOA, NS, and a single A record at the apex:
- </para>
- <screen>
- example.nil. 86400 IN SOA example.nil. example.nil. (
- 0 28800 7200 604800 86400
- )
- example.nil. 86400 IN NS example.nil.
- example.nil. 86400 IN A 127.0.0.1
- </screen>
- <para>
- When the zone is updated dynamically, the DynDB module will determine
- whether the updated RR is an address (i.e., type A or AAAA) and if
- so, it will automatically update the corresponding PTR record in a
- reverse zone. (Updates are not stored permanently; all updates are
- lost when the server is restarted.)
- </para>
- </section>
-</section>
diff --git a/doc/arm/isc-logo.eps b/doc/arm/isc-logo.eps
deleted file mode 100644
index f101cc89..00000000
--- a/doc/arm/isc-logo.eps
+++ /dev/null
@@ -1,5022 +0,0 @@
-%!PS-Adobe-3.1 EPSF-3.0
-%ADO_DSC_Encoding: MacOS Roman
-%%Title: ISC_logo_only_RGB.eps
-%%Creator: Adobe Illustrator(R) 13.0
-%%For: Brian Reid
-%%CreationDate: 3/25/10
-%%BoundingBox: 0 0 118 46
-%%HiResBoundingBox: 0 0 117.9991 45.0176
-%%CropBox: 0 0 117.9991 45.0176
-%%LanguageLevel: 2
-%%DocumentData: Clean7Bit
-%ADOBeginClientInjection: DocumentHeader "AI11EPS"
-%%AI8_CreatorVersion: 13.0.2 %AI9_PrintingDataBegin %ADO_BuildNumber: Adobe Illustrator(R) 13.0.2 x434 R agm 4.4379 ct 5.1039 %ADO_ContainsXMP: MainFirst
-%ADOEndClientInjection: DocumentHeader "AI11EPS"
-%%Pages: 1
-%%DocumentNeededResources:
-%%DocumentSuppliedResources: procset Adobe_AGM_Image 1.0 0
-%%+ procset Adobe_CoolType_Utility_T42 1.0 0
-%%+ procset Adobe_CoolType_Utility_MAKEOCF 1.23 0
-%%+ procset Adobe_CoolType_Core 2.31 0
-%%+ procset Adobe_AGM_Core 2.0 0
-%%+ procset Adobe_AGM_Utils 1.0 0
-%%DocumentFonts:
-%%DocumentNeededFonts:
-%%DocumentNeededFeatures:
-%%DocumentSuppliedFeatures:
-%%DocumentCustomColors:
-%%CMYKCustomColor:
-%%RGBCustomColor:
-%%EndComments
-
-
-
-
-
-
-
-%%BeginDefaults
-%%ViewingOrientation: 1 0 0 1
-%%EndDefaults
-%%BeginProlog
-%%BeginResource: procset Adobe_AGM_Utils 1.0 0
-%%Version: 1.0 0
-%%Copyright: Copyright(C)2000-2006 Adobe Systems, Inc. All Rights Reserved.
-systemdict/setpacking known
-{currentpacking true setpacking}if
-userdict/Adobe_AGM_Utils 73 dict dup begin put
-/bdf
-{bind def}bind def
-/nd{null def}bdf
-/xdf
-{exch def}bdf
-/ldf
-{load def}bdf
-/ddf
-{put}bdf
-/xddf
-{3 -1 roll put}bdf
-/xpt
-{exch put}bdf
-/ndf
-{
- exch dup where{
- pop pop pop
- }{
- xdf
- }ifelse
-}def
-/cdndf
-{
- exch dup currentdict exch known{
- pop pop
- }{
- exch def
- }ifelse
-}def
-/gx
-{get exec}bdf
-/ps_level
- /languagelevel where{
- pop systemdict/languagelevel gx
- }{
- 1
- }ifelse
-def
-/level2
- ps_level 2 ge
-def
-/level3
- ps_level 3 ge
-def
-/ps_version
- {version cvr}stopped{-1}if
-def
-/set_gvm
-{currentglobal exch setglobal}bdf
-/reset_gvm
-{setglobal}bdf
-/makereadonlyarray
-{
- /packedarray where{pop packedarray
- }{
- array astore readonly}ifelse
-}bdf
-/map_reserved_ink_name
-{
- dup type/stringtype eq{
- dup/Red eq{
- pop(_Red_)
- }{
- dup/Green eq{
- pop(_Green_)
- }{
- dup/Blue eq{
- pop(_Blue_)
- }{
- dup()cvn eq{
- pop(Process)
- }if
- }ifelse
- }ifelse
- }ifelse
- }if
-}bdf
-/AGMUTIL_GSTATE 22 dict def
-/get_gstate
-{
- AGMUTIL_GSTATE begin
- /AGMUTIL_GSTATE_clr_spc currentcolorspace def
- /AGMUTIL_GSTATE_clr_indx 0 def
- /AGMUTIL_GSTATE_clr_comps 12 array def
- mark currentcolor counttomark
- {AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 3 -1 roll put
- /AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 add def}repeat pop
- /AGMUTIL_GSTATE_fnt rootfont def
- /AGMUTIL_GSTATE_lw currentlinewidth def
- /AGMUTIL_GSTATE_lc currentlinecap def
- /AGMUTIL_GSTATE_lj currentlinejoin def
- /AGMUTIL_GSTATE_ml currentmiterlimit def
- currentdash/AGMUTIL_GSTATE_do xdf/AGMUTIL_GSTATE_da xdf
- /AGMUTIL_GSTATE_sa currentstrokeadjust def
- /AGMUTIL_GSTATE_clr_rnd currentcolorrendering def
- /AGMUTIL_GSTATE_op currentoverprint def
- /AGMUTIL_GSTATE_bg currentblackgeneration cvlit def
- /AGMUTIL_GSTATE_ucr currentundercolorremoval cvlit def
- currentcolortransfer cvlit/AGMUTIL_GSTATE_gy_xfer xdf cvlit/AGMUTIL_GSTATE_b_xfer xdf
- cvlit/AGMUTIL_GSTATE_g_xfer xdf cvlit/AGMUTIL_GSTATE_r_xfer xdf
- /AGMUTIL_GSTATE_ht currenthalftone def
- /AGMUTIL_GSTATE_flt currentflat def
- end
-}def
-/set_gstate
-{
- AGMUTIL_GSTATE begin
- AGMUTIL_GSTATE_clr_spc setcolorspace
- AGMUTIL_GSTATE_clr_indx{AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 1 sub get
- /AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 sub def}repeat setcolor
- AGMUTIL_GSTATE_fnt setfont
- AGMUTIL_GSTATE_lw setlinewidth
- AGMUTIL_GSTATE_lc setlinecap
- AGMUTIL_GSTATE_lj setlinejoin
- AGMUTIL_GSTATE_ml setmiterlimit
- AGMUTIL_GSTATE_da AGMUTIL_GSTATE_do setdash
- AGMUTIL_GSTATE_sa setstrokeadjust
- AGMUTIL_GSTATE_clr_rnd setcolorrendering
- AGMUTIL_GSTATE_op setoverprint
- AGMUTIL_GSTATE_bg cvx setblackgeneration
- AGMUTIL_GSTATE_ucr cvx setundercolorremoval
- AGMUTIL_GSTATE_r_xfer cvx AGMUTIL_GSTATE_g_xfer cvx AGMUTIL_GSTATE_b_xfer cvx
- AGMUTIL_GSTATE_gy_xfer cvx setcolortransfer
- AGMUTIL_GSTATE_ht/HalftoneType get dup 9 eq exch 100 eq or
- {
- currenthalftone/HalftoneType get AGMUTIL_GSTATE_ht/HalftoneType get ne
- {
- mark AGMUTIL_GSTATE_ht{sethalftone}stopped cleartomark
- }if
- }{
- AGMUTIL_GSTATE_ht sethalftone
- }ifelse
- AGMUTIL_GSTATE_flt setflat
- end
-}def
-/get_gstate_and_matrix
-{
- AGMUTIL_GSTATE begin
- /AGMUTIL_GSTATE_ctm matrix currentmatrix def
- end
- get_gstate
-}def
-/set_gstate_and_matrix
-{
- set_gstate
- AGMUTIL_GSTATE begin
- AGMUTIL_GSTATE_ctm setmatrix
- end
-}def
-/AGMUTIL_str256 256 string def
-/AGMUTIL_src256 256 string def
-/AGMUTIL_dst64 64 string def
-/AGMUTIL_srcLen nd
-/AGMUTIL_ndx nd
-/AGMUTIL_cpd nd
-/capture_cpd{
- //Adobe_AGM_Utils/AGMUTIL_cpd currentpagedevice ddf
-}def
-/thold_halftone
-{
- level3
- {sethalftone currenthalftone}
- {
- dup/HalftoneType get 3 eq
- {
- sethalftone currenthalftone
- }{
- begin
- Width Height mul{
- Thresholds read{pop}if
- }repeat
- end
- currenthalftone
- }ifelse
- }ifelse
-}def
-/rdcmntline
-{
- currentfile AGMUTIL_str256 readline pop
- (%)anchorsearch{pop}if
-}bdf
-/filter_cmyk
-{
- dup type/filetype ne{
- exch()/SubFileDecode filter
- }{
- exch pop
- }
- ifelse
- [
- exch
- {
- AGMUTIL_src256 readstring pop
- dup length/AGMUTIL_srcLen exch def
- /AGMUTIL_ndx 0 def
- AGMCORE_plate_ndx 4 AGMUTIL_srcLen 1 sub{
- 1 index exch get
- AGMUTIL_dst64 AGMUTIL_ndx 3 -1 roll put
- /AGMUTIL_ndx AGMUTIL_ndx 1 add def
- }for
- pop
- AGMUTIL_dst64 0 AGMUTIL_ndx getinterval
- }
- bind
- /exec cvx
- ]cvx
-}bdf
-/filter_indexed_devn
-{
- cvi Names length mul names_index add Lookup exch get
-}bdf
-/filter_devn
-{
- 4 dict begin
- /srcStr xdf
- /dstStr xdf
- dup type/filetype ne{
- 0()/SubFileDecode filter
- }if
- [
- exch
- [
- /devicen_colorspace_dict/AGMCORE_gget cvx/begin cvx
- currentdict/srcStr get/readstring cvx/pop cvx
- /dup cvx/length cvx 0/gt cvx[
- Adobe_AGM_Utils/AGMUTIL_ndx 0/ddf cvx
- names_index Names length currentdict/srcStr get length 1 sub{
- 1/index cvx/exch cvx/get cvx
- currentdict/dstStr get/AGMUTIL_ndx/load cvx 3 -1/roll cvx/put cvx
- Adobe_AGM_Utils/AGMUTIL_ndx/AGMUTIL_ndx/load cvx 1/add cvx/ddf cvx
- }for
- currentdict/dstStr get 0/AGMUTIL_ndx/load cvx/getinterval cvx
- ]cvx/if cvx
- /end cvx
- ]cvx
- bind
- /exec cvx
- ]cvx
- end
-}bdf
-/AGMUTIL_imagefile nd
-/read_image_file
-{
- AGMUTIL_imagefile 0 setfileposition
- 10 dict begin
- /imageDict xdf
- /imbufLen Width BitsPerComponent mul 7 add 8 idiv def
- /imbufIdx 0 def
- /origDataSource imageDict/DataSource get def
- /origMultipleDataSources imageDict/MultipleDataSources get def
- /origDecode imageDict/Decode get def
- /dstDataStr imageDict/Width get colorSpaceElemCnt mul string def
- imageDict/MultipleDataSources known{MultipleDataSources}{false}ifelse
- {
- /imbufCnt imageDict/DataSource get length def
- /imbufs imbufCnt array def
- 0 1 imbufCnt 1 sub{
- /imbufIdx xdf
- imbufs imbufIdx imbufLen string put
- imageDict/DataSource get imbufIdx[AGMUTIL_imagefile imbufs imbufIdx get/readstring cvx/pop cvx]cvx put
- }for
- DeviceN_PS2{
- imageDict begin
- /DataSource[DataSource/devn_sep_datasource cvx]cvx def
- /MultipleDataSources false def
- /Decode[0 1]def
- end
- }if
- }{
- /imbuf imbufLen string def
- Indexed_DeviceN level3 not and DeviceN_NoneName or{
- /srcDataStrs[imageDict begin
- currentdict/MultipleDataSources known{MultipleDataSources{DataSource length}{1}ifelse}{1}ifelse
- {
- Width Decode length 2 div mul cvi string
- }repeat
- end]def
- imageDict begin
- /DataSource[AGMUTIL_imagefile Decode BitsPerComponent false 1/filter_indexed_devn load dstDataStr srcDataStrs devn_alt_datasource/exec cvx]cvx def
- /Decode[0 1]def
- end
- }{
- imageDict/DataSource[1 string dup 0 AGMUTIL_imagefile Decode length 2 idiv string/readstring cvx/pop cvx names_index/get cvx/put cvx]cvx put
- imageDict/Decode[0 1]put
- }ifelse
- }ifelse
- imageDict exch
- load exec
- imageDict/DataSource origDataSource put
- imageDict/MultipleDataSources origMultipleDataSources put
- imageDict/Decode origDecode put
- end
-}bdf
-/write_image_file
-{
- begin
- {(AGMUTIL_imagefile)(w+)file}stopped{
- false
- }{
- Adobe_AGM_Utils/AGMUTIL_imagefile xddf
- 2 dict begin
- /imbufLen Width BitsPerComponent mul 7 add 8 idiv def
- MultipleDataSources{DataSource 0 get}{DataSource}ifelse type/filetype eq{
- /imbuf imbufLen string def
- }if
- 1 1 Height MultipleDataSources not{Decode length 2 idiv mul}if{
- pop
- MultipleDataSources{
- 0 1 DataSource length 1 sub{
- DataSource type dup
- /arraytype eq{
- pop DataSource exch gx
- }{
- /filetype eq{
- DataSource exch get imbuf readstring pop
- }{
- DataSource exch get
- }ifelse
- }ifelse
- AGMUTIL_imagefile exch writestring
- }for
- }{
- DataSource type dup
- /arraytype eq{
- pop DataSource exec
- }{
- /filetype eq{
- DataSource imbuf readstring pop
- }{
- DataSource
- }ifelse
- }ifelse
- AGMUTIL_imagefile exch writestring
- }ifelse
- }for
- end
- true
- }ifelse
- end
-}bdf
-/close_image_file
-{
- AGMUTIL_imagefile closefile(AGMUTIL_imagefile)deletefile
-}def
-statusdict/product known userdict/AGMP_current_show known not and{
- /pstr statusdict/product get def
- pstr(HP LaserJet 2200)eq
- pstr(HP LaserJet 4000 Series)eq or
- pstr(HP LaserJet 4050 Series )eq or
- pstr(HP LaserJet 8000 Series)eq or
- pstr(HP LaserJet 8100 Series)eq or
- pstr(HP LaserJet 8150 Series)eq or
- pstr(HP LaserJet 5000 Series)eq or
- pstr(HP LaserJet 5100 Series)eq or
- pstr(HP Color LaserJet 4500)eq or
- pstr(HP Color LaserJet 4600)eq or
- pstr(HP LaserJet 5Si)eq or
- pstr(HP LaserJet 1200 Series)eq or
- pstr(HP LaserJet 1300 Series)eq or
- pstr(HP LaserJet 4100 Series)eq or
- {
- userdict/AGMP_current_show/show load put
- userdict/show{
- currentcolorspace 0 get
- /Pattern eq
- {false charpath f}
- {AGMP_current_show}ifelse
- }put
- }if
- currentdict/pstr undef
-}if
-/consumeimagedata
-{
- begin
- AGMIMG_init_common
- currentdict/MultipleDataSources known not
- {/MultipleDataSources false def}if
- MultipleDataSources
- {
- DataSource 0 get type
- dup/filetype eq
- {
- 1 dict begin
- /flushbuffer Width cvi string def
- 1 1 Height cvi
- {
- pop
- 0 1 DataSource length 1 sub
- {
- DataSource exch get
- flushbuffer readstring pop pop
- }for
- }for
- end
- }if
- dup/arraytype eq exch/packedarraytype eq or DataSource 0 get xcheck and
- {
- Width Height mul cvi
- {
- 0 1 DataSource length 1 sub
- {dup DataSource exch gx length exch 0 ne{pop}if}for
- dup 0 eq
- {pop exit}if
- sub dup 0 le
- {exit}if
- }loop
- pop
- }if
- }
- {
- /DataSource load type
- dup/filetype eq
- {
- 1 dict begin
- /flushbuffer Width Decode length 2 idiv mul cvi string def
- 1 1 Height{pop DataSource flushbuffer readstring pop pop}for
- end
- }if
- dup/arraytype eq exch/packedarraytype eq or/DataSource load xcheck and
- {
- Height Width BitsPerComponent mul 8 BitsPerComponent sub add 8 idiv Decode length 2 idiv mul mul
- {
- DataSource length dup 0 eq
- {pop exit}if
- sub dup 0 le
- {exit}if
- }loop
- pop
- }if
- }ifelse
- end
-}bdf
-/addprocs
-{
- 2{/exec load}repeat
- 3 1 roll
- [5 1 roll]bind cvx
-}def
-/modify_halftone_xfer
-{
- currenthalftone dup length dict copy begin
- currentdict 2 index known{
- 1 index load dup length dict copy begin
- currentdict/TransferFunction known{
- /TransferFunction load
- }{
- currenttransfer
- }ifelse
- addprocs/TransferFunction xdf
- currentdict end def
- currentdict end sethalftone
- }{
- currentdict/TransferFunction known{
- /TransferFunction load
- }{
- currenttransfer
- }ifelse
- addprocs/TransferFunction xdf
- currentdict end sethalftone
- pop
- }ifelse
-}def
-/clonearray
-{
- dup xcheck exch
- dup length array exch
- Adobe_AGM_Core/AGMCORE_tmp -1 ddf
- {
- Adobe_AGM_Core/AGMCORE_tmp 2 copy get 1 add ddf
- dup type/dicttype eq
- {
- Adobe_AGM_Core/AGMCORE_tmp get
- exch
- clonedict
- Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf
- }if
- dup type/arraytype eq
- {
- Adobe_AGM_Core/AGMCORE_tmp get exch
- clonearray
- Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf
- }if
- exch dup
- Adobe_AGM_Core/AGMCORE_tmp get 4 -1 roll put
- }forall
- exch{cvx}if
-}bdf
-/clonedict
-{
- dup length dict
- begin
- {
- dup type/dicttype eq
- {clonedict}if
- dup type/arraytype eq
- {clonearray}if
- def
- }forall
- currentdict
- end
-}bdf
-/DeviceN_PS2
-{
- /currentcolorspace AGMCORE_gget 0 get/DeviceN eq level3 not and
-}bdf
-/Indexed_DeviceN
-{
- /indexed_colorspace_dict AGMCORE_gget dup null ne{
- dup/CSDBase known{
- /CSDBase get/CSD get_res/Names known
- }{
- pop false
- }ifelse
- }{
- pop false
- }ifelse
-}bdf
-/DeviceN_NoneName
-{
- /Names where{
- pop
- false Names
- {
- (None)eq or
- }forall
- }{
- false
- }ifelse
-}bdf
-/DeviceN_PS2_inRip_seps
-{
- /AGMCORE_in_rip_sep where
- {
- pop dup type dup/arraytype eq exch/packedarraytype eq or
- {
- dup 0 get/DeviceN eq level3 not and AGMCORE_in_rip_sep and
- {
- /currentcolorspace exch AGMCORE_gput
- false
- }{
- true
- }ifelse
- }{
- true
- }ifelse
- }{
- true
- }ifelse
-}bdf
-/base_colorspace_type
-{
- dup type/arraytype eq{0 get}if
-}bdf
-/currentdistillerparams where{pop currentdistillerparams/CoreDistVersion get 5000 lt}{true}ifelse
-{
- /pdfmark_5{cleartomark}bind def
-}{
- /pdfmark_5{pdfmark}bind def
-}ifelse
-/ReadBypdfmark_5
-{
- currentfile exch 0 exch/SubFileDecode filter
- /currentdistillerparams where
- {pop currentdistillerparams/CoreDistVersion get 5000 lt}{true}ifelse
- {flushfile cleartomark}
- {/PUT pdfmark}ifelse
-}bdf
-/xpdfm
-{
- {
- dup 0 get/Label eq
- {
- aload length[exch 1 add 1 roll/PAGELABEL
- }{
- aload pop
- [{ThisPage}<<5 -2 roll>>/PUT
- }ifelse
- pdfmark_5
- }forall
-}bdf
-/ds{
- Adobe_AGM_Utils begin
-}bdf
-/dt{
- currentdict Adobe_AGM_Utils eq{
- end
- }if
-}bdf
-systemdict/setpacking known
-{setpacking}if
-%%EndResource
-%%BeginResource: procset Adobe_AGM_Core 2.0 0
-%%Version: 2.0 0
-%%Copyright: Copyright(C)1997-2007 Adobe Systems, Inc. All Rights Reserved.
-systemdict/setpacking known
-{
- currentpacking
- true setpacking
-}if
-userdict/Adobe_AGM_Core 209 dict dup begin put
-/Adobe_AGM_Core_Id/Adobe_AGM_Core_2.0_0 def
-/AGMCORE_str256 256 string def
-/AGMCORE_save nd
-/AGMCORE_graphicsave nd
-/AGMCORE_c 0 def
-/AGMCORE_m 0 def
-/AGMCORE_y 0 def
-/AGMCORE_k 0 def
-/AGMCORE_cmykbuf 4 array def
-/AGMCORE_screen[currentscreen]cvx def
-/AGMCORE_tmp 0 def
-/AGMCORE_&setgray nd
-/AGMCORE_&setcolor nd
-/AGMCORE_&setcolorspace nd
-/AGMCORE_&setcmykcolor nd
-/AGMCORE_cyan_plate nd
-/AGMCORE_magenta_plate nd
-/AGMCORE_yellow_plate nd
-/AGMCORE_black_plate nd
-/AGMCORE_plate_ndx nd
-/AGMCORE_get_ink_data nd
-/AGMCORE_is_cmyk_sep nd
-/AGMCORE_host_sep nd
-/AGMCORE_avoid_L2_sep_space nd
-/AGMCORE_distilling nd
-/AGMCORE_composite_job nd
-/AGMCORE_producing_seps nd
-/AGMCORE_ps_level -1 def
-/AGMCORE_ps_version -1 def
-/AGMCORE_environ_ok nd
-/AGMCORE_CSD_cache 0 dict def
-/AGMCORE_currentoverprint false def
-/AGMCORE_deltaX nd
-/AGMCORE_deltaY nd
-/AGMCORE_name nd
-/AGMCORE_sep_special nd
-/AGMCORE_err_strings 4 dict def
-/AGMCORE_cur_err nd
-/AGMCORE_current_spot_alias false def
-/AGMCORE_inverting false def
-/AGMCORE_feature_dictCount nd
-/AGMCORE_feature_opCount nd
-/AGMCORE_feature_ctm nd
-/AGMCORE_ConvertToProcess false def
-/AGMCORE_Default_CTM matrix def
-/AGMCORE_Default_PageSize nd
-/AGMCORE_Default_flatness nd
-/AGMCORE_currentbg nd
-/AGMCORE_currentucr nd
-/AGMCORE_pattern_paint_type 0 def
-/knockout_unitsq nd
-currentglobal true setglobal
-[/CSA/Gradient/Procedure]
-{
- /Generic/Category findresource dup length dict copy/Category defineresource pop
-}forall
-setglobal
-/AGMCORE_key_known
-{
- where{
- /Adobe_AGM_Core_Id known
- }{
- false
- }ifelse
-}ndf
-/flushinput
-{
- save
- 2 dict begin
- /CompareBuffer 3 -1 roll def
- /readbuffer 256 string def
- mark
- {
- currentfile readbuffer{readline}stopped
- {cleartomark mark}
- {
- not
- {pop exit}
- if
- CompareBuffer eq
- {exit}
- if
- }ifelse
- }loop
- cleartomark
- end
- restore
-}bdf
-/getspotfunction
-{
- AGMCORE_screen exch pop exch pop
- dup type/dicttype eq{
- dup/HalftoneType get 1 eq{
- /SpotFunction get
- }{
- dup/HalftoneType get 2 eq{
- /GraySpotFunction get
- }{
- pop
- {
- abs exch abs 2 copy add 1 gt{
- 1 sub dup mul exch 1 sub dup mul add 1 sub
- }{
- dup mul exch dup mul add 1 exch sub
- }ifelse
- }bind
- }ifelse
- }ifelse
- }if
-}def
-/np
-{newpath}bdf
-/clp_npth
-{clip np}def
-/eoclp_npth
-{eoclip np}def
-/npth_clp
-{np clip}def
-/graphic_setup
-{
- /AGMCORE_graphicsave save store
- concat
- 0 setgray
- 0 setlinecap
- 0 setlinejoin
- 1 setlinewidth
- []0 setdash
- 10 setmiterlimit
- np
- false setoverprint
- false setstrokeadjust
- //Adobe_AGM_Core/spot_alias gx
- /Adobe_AGM_Image where{
- pop
- Adobe_AGM_Image/spot_alias 2 copy known{
- gx
- }{
- pop pop
- }ifelse
- }if
- /sep_colorspace_dict null AGMCORE_gput
- 100 dict begin
- /dictstackcount countdictstack def
- /showpage{}def
- mark
-}def
-/graphic_cleanup
-{
- cleartomark
- dictstackcount 1 countdictstack 1 sub{end}for
- end
- AGMCORE_graphicsave restore
-}def
-/compose_error_msg
-{
- grestoreall initgraphics
- /Helvetica findfont 10 scalefont setfont
- /AGMCORE_deltaY 100 def
- /AGMCORE_deltaX 310 def
- clippath pathbbox np pop pop 36 add exch 36 add exch moveto
- 0 AGMCORE_deltaY rlineto AGMCORE_deltaX 0 rlineto
- 0 AGMCORE_deltaY neg rlineto AGMCORE_deltaX neg 0 rlineto closepath
- 0 AGMCORE_&setgray
- gsave 1 AGMCORE_&setgray fill grestore
- 1 setlinewidth gsave stroke grestore
- currentpoint AGMCORE_deltaY 15 sub add exch 8 add exch moveto
- /AGMCORE_deltaY 12 def
- /AGMCORE_tmp 0 def
- AGMCORE_err_strings exch get
- {
- dup 32 eq
- {
- pop
- AGMCORE_str256 0 AGMCORE_tmp getinterval
- stringwidth pop currentpoint pop add AGMCORE_deltaX 28 add gt
- {
- currentpoint AGMCORE_deltaY sub exch pop
- clippath pathbbox pop pop pop 44 add exch moveto
- }if
- AGMCORE_str256 0 AGMCORE_tmp getinterval show( )show
- 0 1 AGMCORE_str256 length 1 sub
- {
- AGMCORE_str256 exch 0 put
- }for
- /AGMCORE_tmp 0 def
- }{
- AGMCORE_str256 exch AGMCORE_tmp xpt
- /AGMCORE_tmp AGMCORE_tmp 1 add def
- }ifelse
- }forall
-}bdf
-/AGMCORE_CMYKDeviceNColorspaces[
- [/Separation/None/DeviceCMYK{0 0 0}]
- [/Separation(Black)/DeviceCMYK{0 0 0 4 -1 roll}bind]
- [/Separation(Yellow)/DeviceCMYK{0 0 3 -1 roll 0}bind]
- [/DeviceN[(Yellow)(Black)]/DeviceCMYK{0 0 4 2 roll}bind]
- [/Separation(Magenta)/DeviceCMYK{0 exch 0 0}bind]
- [/DeviceN[(Magenta)(Black)]/DeviceCMYK{0 3 1 roll 0 exch}bind]
- [/DeviceN[(Magenta)(Yellow)]/DeviceCMYK{0 3 1 roll 0}bind]
- [/DeviceN[(Magenta)(Yellow)(Black)]/DeviceCMYK{0 4 1 roll}bind]
- [/Separation(Cyan)/DeviceCMYK{0 0 0}]
- [/DeviceN[(Cyan)(Black)]/DeviceCMYK{0 0 3 -1 roll}bind]
- [/DeviceN[(Cyan)(Yellow)]/DeviceCMYK{0 exch 0}bind]
- [/DeviceN[(Cyan)(Yellow)(Black)]/DeviceCMYK{0 3 1 roll}bind]
- [/DeviceN[(Cyan)(Magenta)]/DeviceCMYK{0 0}]
- [/DeviceN[(Cyan)(Magenta)(Black)]/DeviceCMYK{0 exch}bind]
- [/DeviceN[(Cyan)(Magenta)(Yellow)]/DeviceCMYK{0}]
- [/DeviceCMYK]
-]def
-/ds{
- Adobe_AGM_Core begin
- /currentdistillerparams where
- {
- pop currentdistillerparams/CoreDistVersion get 5000 lt
- {<</DetectBlends false>>setdistillerparams}if
- }if
- /AGMCORE_ps_version xdf
- /AGMCORE_ps_level xdf
- errordict/AGM_handleerror known not{
- errordict/AGM_handleerror errordict/handleerror get put
- errordict/handleerror{
- Adobe_AGM_Core begin
- $error/newerror get AGMCORE_cur_err null ne and{
- $error/newerror false put
- AGMCORE_cur_err compose_error_msg
- }if
- $error/newerror true put
- end
- errordict/AGM_handleerror get exec
- }bind put
- }if
- /AGMCORE_environ_ok
- ps_level AGMCORE_ps_level ge
- ps_version AGMCORE_ps_version ge and
- AGMCORE_ps_level -1 eq or
- def
- AGMCORE_environ_ok not
- {/AGMCORE_cur_err/AGMCORE_bad_environ def}if
- /AGMCORE_&setgray systemdict/setgray get def
- level2{
- /AGMCORE_&setcolor systemdict/setcolor get def
- /AGMCORE_&setcolorspace systemdict/setcolorspace get def
- }if
- /AGMCORE_currentbg currentblackgeneration def
- /AGMCORE_currentucr currentundercolorremoval def
- /AGMCORE_Default_flatness currentflat def
- /AGMCORE_distilling
- /product where{
- pop systemdict/setdistillerparams known product(Adobe PostScript Parser)ne and
- }{
- false
- }ifelse
- def
- /AGMCORE_GSTATE AGMCORE_key_known not{
- /AGMCORE_GSTATE 21 dict def
- /AGMCORE_tmpmatrix matrix def
- /AGMCORE_gstack 32 array def
- /AGMCORE_gstackptr 0 def
- /AGMCORE_gstacksaveptr 0 def
- /AGMCORE_gstackframekeys 14 def
- /AGMCORE_&gsave/gsave ldf
- /AGMCORE_&grestore/grestore ldf
- /AGMCORE_&grestoreall/grestoreall ldf
- /AGMCORE_&save/save ldf
- /AGMCORE_&setoverprint/setoverprint ldf
- /AGMCORE_gdictcopy{
- begin
- {def}forall
- end
- }def
- /AGMCORE_gput{
- AGMCORE_gstack AGMCORE_gstackptr get
- 3 1 roll
- put
- }def
- /AGMCORE_gget{
- AGMCORE_gstack AGMCORE_gstackptr get
- exch
- get
- }def
- /gsave{
- AGMCORE_&gsave
- AGMCORE_gstack AGMCORE_gstackptr get
- AGMCORE_gstackptr 1 add
- dup 32 ge{limitcheck}if
- /AGMCORE_gstackptr exch store
- AGMCORE_gstack AGMCORE_gstackptr get
- AGMCORE_gdictcopy
- }def
- /grestore{
- AGMCORE_&grestore
- AGMCORE_gstackptr 1 sub
- dup AGMCORE_gstacksaveptr lt{1 add}if
- dup AGMCORE_gstack exch get dup/AGMCORE_currentoverprint known
- {/AGMCORE_currentoverprint get setoverprint}{pop}ifelse
- /AGMCORE_gstackptr exch store
- }def
- /grestoreall{
- AGMCORE_&grestoreall
- /AGMCORE_gstackptr AGMCORE_gstacksaveptr store
- }def
- /save{
- AGMCORE_&save
- AGMCORE_gstack AGMCORE_gstackptr get
- AGMCORE_gstackptr 1 add
- dup 32 ge{limitcheck}if
- /AGMCORE_gstackptr exch store
- /AGMCORE_gstacksaveptr AGMCORE_gstackptr store
- AGMCORE_gstack AGMCORE_gstackptr get
- AGMCORE_gdictcopy
- }def
- /setoverprint{
- dup/AGMCORE_currentoverprint exch AGMCORE_gput AGMCORE_&setoverprint
- }def
- 0 1 AGMCORE_gstack length 1 sub{
- AGMCORE_gstack exch AGMCORE_gstackframekeys dict put
- }for
- }if
- level3/AGMCORE_&sysshfill AGMCORE_key_known not and
- {
- /AGMCORE_&sysshfill systemdict/shfill get def
- /AGMCORE_&sysmakepattern systemdict/makepattern get def
- /AGMCORE_&usrmakepattern/makepattern load def
- }if
- /currentcmykcolor[0 0 0 0]AGMCORE_gput
- /currentstrokeadjust false AGMCORE_gput
- /currentcolorspace[/DeviceGray]AGMCORE_gput
- /sep_tint 0 AGMCORE_gput
- /devicen_tints[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]AGMCORE_gput
- /sep_colorspace_dict null AGMCORE_gput
- /devicen_colorspace_dict null AGMCORE_gput
- /indexed_colorspace_dict null AGMCORE_gput
- /currentcolor_intent()AGMCORE_gput
- /customcolor_tint 1 AGMCORE_gput
- /absolute_colorimetric_crd null AGMCORE_gput
- /relative_colorimetric_crd null AGMCORE_gput
- /saturation_crd null AGMCORE_gput
- /perceptual_crd null AGMCORE_gput
- currentcolortransfer cvlit/AGMCore_gray_xfer xdf cvlit/AGMCore_b_xfer xdf
- cvlit/AGMCore_g_xfer xdf cvlit/AGMCore_r_xfer xdf
- <<
- /MaxPatternItem currentsystemparams/MaxPatternCache get
- >>
- setuserparams
- end
-}def
-/ps
-{
- /setcmykcolor where{
- pop
- Adobe_AGM_Core/AGMCORE_&setcmykcolor/setcmykcolor load put
- }if
- Adobe_AGM_Core begin
- /setcmykcolor
- {
- 4 copy AGMCORE_cmykbuf astore/currentcmykcolor exch AGMCORE_gput
- 1 sub 4 1 roll
- 3{
- 3 index add neg dup 0 lt{
- pop 0
- }if
- 3 1 roll
- }repeat
- setrgbcolor pop
- }ndf
- /currentcmykcolor
- {
- /currentcmykcolor AGMCORE_gget aload pop
- }ndf
- /setoverprint
- {pop}ndf
- /currentoverprint
- {false}ndf
- /AGMCORE_cyan_plate 1 0 0 0 test_cmyk_color_plate def
- /AGMCORE_magenta_plate 0 1 0 0 test_cmyk_color_plate def
- /AGMCORE_yellow_plate 0 0 1 0 test_cmyk_color_plate def
- /AGMCORE_black_plate 0 0 0 1 test_cmyk_color_plate def
- /AGMCORE_plate_ndx
- AGMCORE_cyan_plate{
- 0
- }{
- AGMCORE_magenta_plate{
- 1
- }{
- AGMCORE_yellow_plate{
- 2
- }{
- AGMCORE_black_plate{
- 3
- }{
- 4
- }ifelse
- }ifelse
- }ifelse
- }ifelse
- def
- /AGMCORE_have_reported_unsupported_color_space false def
- /AGMCORE_report_unsupported_color_space
- {
- AGMCORE_have_reported_unsupported_color_space false eq
- {
- (Warning: Job contains content that cannot be separated with on-host methods. This content appears on the black plate, and knocks out all other plates.)==
- Adobe_AGM_Core/AGMCORE_have_reported_unsupported_color_space true ddf
- }if
- }def
- /AGMCORE_composite_job
- AGMCORE_cyan_plate AGMCORE_magenta_plate and AGMCORE_yellow_plate and AGMCORE_black_plate and def
- /AGMCORE_in_rip_sep
- /AGMCORE_in_rip_sep where{
- pop AGMCORE_in_rip_sep
- }{
- AGMCORE_distilling
- {
- false
- }{
- userdict/Adobe_AGM_OnHost_Seps known{
- false
- }{
- level2{
- currentpagedevice/Separations 2 copy known{
- get
- }{
- pop pop false
- }ifelse
- }{
- false
- }ifelse
- }ifelse
- }ifelse
- }ifelse
- def
- /AGMCORE_producing_seps AGMCORE_composite_job not AGMCORE_in_rip_sep or def
- /AGMCORE_host_sep AGMCORE_producing_seps AGMCORE_in_rip_sep not and def
- /AGM_preserve_spots
- /AGM_preserve_spots where{
- pop AGM_preserve_spots
- }{
- AGMCORE_distilling AGMCORE_producing_seps or
- }ifelse
- def
- /AGM_is_distiller_preserving_spotimages
- {
- currentdistillerparams/PreserveOverprintSettings known
- {
- currentdistillerparams/PreserveOverprintSettings get
- {
- currentdistillerparams/ColorConversionStrategy known
- {
- currentdistillerparams/ColorConversionStrategy get
- /sRGB ne
- }{
- true
- }ifelse
- }{
- false
- }ifelse
- }{
- false
- }ifelse
- }def
- /convert_spot_to_process where{pop}{
- /convert_spot_to_process
- {
- //Adobe_AGM_Core begin
- dup map_alias{
- /Name get exch pop
- }if
- dup dup(None)eq exch(All)eq or
- {
- pop false
- }{
- AGMCORE_host_sep
- {
- gsave
- 1 0 0 0 setcmykcolor currentgray 1 exch sub
- 0 1 0 0 setcmykcolor currentgray 1 exch sub
- 0 0 1 0 setcmykcolor currentgray 1 exch sub
- 0 0 0 1 setcmykcolor currentgray 1 exch sub
- add add add 0 eq
- {
- pop false
- }{
- false setoverprint
- current_spot_alias false set_spot_alias
- 1 1 1 1 6 -1 roll findcmykcustomcolor 1 setcustomcolor
- set_spot_alias
- currentgray 1 ne
- }ifelse
- grestore
- }{
- AGMCORE_distilling
- {
- pop AGM_is_distiller_preserving_spotimages not
- }{
- //Adobe_AGM_Core/AGMCORE_name xddf
- false
- //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 0 eq
- AGMUTIL_cpd/OverrideSeparations known and
- {
- AGMUTIL_cpd/OverrideSeparations get
- {
- /HqnSpots/ProcSet resourcestatus
- {
- pop pop pop true
- }if
- }if
- }if
- {
- AGMCORE_name/HqnSpots/ProcSet findresource/TestSpot gx not
- }{
- gsave
- [/Separation AGMCORE_name/DeviceGray{}]AGMCORE_&setcolorspace
- false
- AGMUTIL_cpd/SeparationColorNames 2 copy known
- {
- get
- {AGMCORE_name eq or}forall
- not
- }{
- pop pop pop true
- }ifelse
- grestore
- }ifelse
- }ifelse
- }ifelse
- }ifelse
- end
- }def
- }ifelse
- /convert_to_process where{pop}{
- /convert_to_process
- {
- dup length 0 eq
- {
- pop false
- }{
- AGMCORE_host_sep
- {
- dup true exch
- {
- dup(Cyan)eq exch
- dup(Magenta)eq 3 -1 roll or exch
- dup(Yellow)eq 3 -1 roll or exch
- dup(Black)eq 3 -1 roll or
- {pop}
- {convert_spot_to_process and}ifelse
- }
- forall
- {
- true exch
- {
- dup(Cyan)eq exch
- dup(Magenta)eq 3 -1 roll or exch
- dup(Yellow)eq 3 -1 roll or exch
- (Black)eq or and
- }forall
- not
- }{pop false}ifelse
- }{
- false exch
- {
- /PhotoshopDuotoneList where{pop false}{true}ifelse
- {
- dup(Cyan)eq exch
- dup(Magenta)eq 3 -1 roll or exch
- dup(Yellow)eq 3 -1 roll or exch
- dup(Black)eq 3 -1 roll or
- {pop}
- {convert_spot_to_process or}ifelse
- }
- {
- convert_spot_to_process or
- }
- ifelse
- }
- forall
- }ifelse
- }ifelse
- }def
- }ifelse
- /AGMCORE_avoid_L2_sep_space
- version cvr 2012 lt
- level2 and
- AGMCORE_producing_seps not and
- def
- /AGMCORE_is_cmyk_sep
- AGMCORE_cyan_plate AGMCORE_magenta_plate or AGMCORE_yellow_plate or AGMCORE_black_plate or
- def
- /AGM_avoid_0_cmyk where{
- pop AGM_avoid_0_cmyk
- }{
- AGM_preserve_spots
- userdict/Adobe_AGM_OnHost_Seps known
- userdict/Adobe_AGM_InRip_Seps known or
- not and
- }ifelse
- {
- /setcmykcolor[
- {
- 4 copy add add add 0 eq currentoverprint and{
- pop 0.0005
- }if
- }/exec cvx
- /AGMCORE_&setcmykcolor load dup type/operatortype ne{
- /exec cvx
- }if
- ]cvx def
- }if
- /AGMCORE_IsSeparationAProcessColor
- {
- dup(Cyan)eq exch dup(Magenta)eq exch dup(Yellow)eq exch(Black)eq or or or
- }def
- AGMCORE_host_sep{
- /setcolortransfer
- {
- AGMCORE_cyan_plate{
- pop pop pop
- }{
- AGMCORE_magenta_plate{
- 4 3 roll pop pop pop
- }{
- AGMCORE_yellow_plate{
- 4 2 roll pop pop pop
- }{
- 4 1 roll pop pop pop
- }ifelse
- }ifelse
- }ifelse
- settransfer
- }
- def
- /AGMCORE_get_ink_data
- AGMCORE_cyan_plate{
- {pop pop pop}
- }{
- AGMCORE_magenta_plate{
- {4 3 roll pop pop pop}
- }{
- AGMCORE_yellow_plate{
- {4 2 roll pop pop pop}
- }{
- {4 1 roll pop pop pop}
- }ifelse
- }ifelse
- }ifelse
- def
- /AGMCORE_RemoveProcessColorNames
- {
- 1 dict begin
- /filtername
- {
- dup/Cyan eq 1 index(Cyan)eq or
- {pop(_cyan_)}if
- dup/Magenta eq 1 index(Magenta)eq or
- {pop(_magenta_)}if
- dup/Yellow eq 1 index(Yellow)eq or
- {pop(_yellow_)}if
- dup/Black eq 1 index(Black)eq or
- {pop(_black_)}if
- }def
- dup type/arraytype eq
- {[exch{filtername}forall]}
- {filtername}ifelse
- end
- }def
- level3{
- /AGMCORE_IsCurrentColor
- {
- dup AGMCORE_IsSeparationAProcessColor
- {
- AGMCORE_plate_ndx 0 eq
- {dup(Cyan)eq exch/Cyan eq or}if
- AGMCORE_plate_ndx 1 eq
- {dup(Magenta)eq exch/Magenta eq or}if
- AGMCORE_plate_ndx 2 eq
- {dup(Yellow)eq exch/Yellow eq or}if
- AGMCORE_plate_ndx 3 eq
- {dup(Black)eq exch/Black eq or}if
- AGMCORE_plate_ndx 4 eq
- {pop false}if
- }{
- gsave
- false setoverprint
- current_spot_alias false set_spot_alias
- 1 1 1 1 6 -1 roll findcmykcustomcolor 1 setcustomcolor
- set_spot_alias
- currentgray 1 ne
- grestore
- }ifelse
- }def
- /AGMCORE_filter_functiondatasource
- {
- 5 dict begin
- /data_in xdf
- data_in type/stringtype eq
- {
- /ncomp xdf
- /comp xdf
- /string_out data_in length ncomp idiv string def
- 0 ncomp data_in length 1 sub
- {
- string_out exch dup ncomp idiv exch data_in exch ncomp getinterval comp get 255 exch sub put
- }for
- string_out
- }{
- string/string_in xdf
- /string_out 1 string def
- /component xdf
- [
- data_in string_in/readstring cvx
- [component/get cvx 255/exch cvx/sub cvx string_out/exch cvx 0/exch cvx/put cvx string_out]cvx
- [/pop cvx()]cvx/ifelse cvx
- ]cvx/ReusableStreamDecode filter
- }ifelse
- end
- }def
- /AGMCORE_separateShadingFunction
- {
- 2 dict begin
- /paint? xdf
- /channel xdf
- dup type/dicttype eq
- {
- begin
- FunctionType 0 eq
- {
- /DataSource channel Range length 2 idiv DataSource AGMCORE_filter_functiondatasource def
- currentdict/Decode known
- {/Decode Decode channel 2 mul 2 getinterval def}if
- paint? not
- {/Decode[1 1]def}if
- }if
- FunctionType 2 eq
- {
- paint?
- {
- /C0[C0 channel get 1 exch sub]def
- /C1[C1 channel get 1 exch sub]def
- }{
- /C0[1]def
- /C1[1]def
- }ifelse
- }if
- FunctionType 3 eq
- {
- /Functions[Functions{channel paint? AGMCORE_separateShadingFunction}forall]def
- }if
- currentdict/Range known
- {/Range[0 1]def}if
- currentdict
- end}{
- channel get 0 paint? AGMCORE_separateShadingFunction
- }ifelse
- end
- }def
- /AGMCORE_separateShading
- {
- 3 -1 roll begin
- currentdict/Function known
- {
- currentdict/Background known
- {[1 index{Background 3 index get 1 exch sub}{1}ifelse]/Background xdf}if
- Function 3 1 roll AGMCORE_separateShadingFunction/Function xdf
- /ColorSpace[/DeviceGray]def
- }{
- ColorSpace dup type/arraytype eq{0 get}if/DeviceCMYK eq
- {
- /ColorSpace[/DeviceN[/_cyan_/_magenta_/_yellow_/_black_]/DeviceCMYK{}]def
- }{
- ColorSpace dup 1 get AGMCORE_RemoveProcessColorNames 1 exch put
- }ifelse
- ColorSpace 0 get/Separation eq
- {
- {
- [1/exch cvx/sub cvx]cvx
- }{
- [/pop cvx 1]cvx
- }ifelse
- ColorSpace 3 3 -1 roll put
- pop
- }{
- {
- [exch ColorSpace 1 get length 1 sub exch sub/index cvx 1/exch cvx/sub cvx ColorSpace 1 get length 1 add 1/roll cvx ColorSpace 1 get length{/pop cvx}repeat]cvx
- }{
- pop[ColorSpace 1 get length{/pop cvx}repeat cvx 1]cvx
- }ifelse
- ColorSpace 3 3 -1 roll bind put
- }ifelse
- ColorSpace 2/DeviceGray put
- }ifelse
- end
- }def
- /AGMCORE_separateShadingDict
- {
- dup/ColorSpace get
- dup type/arraytype ne
- {[exch]}if
- dup 0 get/DeviceCMYK eq
- {
- exch begin
- currentdict
- AGMCORE_cyan_plate
- {0 true}if
- AGMCORE_magenta_plate
- {1 true}if
- AGMCORE_yellow_plate
- {2 true}if
- AGMCORE_black_plate
- {3 true}if
- AGMCORE_plate_ndx 4 eq
- {0 false}if
- dup not currentoverprint and
- {/AGMCORE_ignoreshade true def}if
- AGMCORE_separateShading
- currentdict
- end exch
- }if
- dup 0 get/Separation eq
- {
- exch begin
- ColorSpace 1 get dup/None ne exch/All ne and
- {
- ColorSpace 1 get AGMCORE_IsCurrentColor AGMCORE_plate_ndx 4 lt and ColorSpace 1 get AGMCORE_IsSeparationAProcessColor not and
- {
- ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq
- {
- /ColorSpace
- [
- /Separation
- ColorSpace 1 get
- /DeviceGray
- [
- ColorSpace 3 get/exec cvx
- 4 AGMCORE_plate_ndx sub -1/roll cvx
- 4 1/roll cvx
- 3[/pop cvx]cvx/repeat cvx
- 1/exch cvx/sub cvx
- ]cvx
- ]def
- }{
- AGMCORE_report_unsupported_color_space
- AGMCORE_black_plate not
- {
- currentdict 0 false AGMCORE_separateShading
- }if
- }ifelse
- }{
- currentdict ColorSpace 1 get AGMCORE_IsCurrentColor
- 0 exch
- dup not currentoverprint and
- {/AGMCORE_ignoreshade true def}if
- AGMCORE_separateShading
- }ifelse
- }if
- currentdict
- end exch
- }if
- dup 0 get/DeviceN eq
- {
- exch begin
- ColorSpace 1 get convert_to_process
- {
- ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq
- {
- /ColorSpace
- [
- /DeviceN
- ColorSpace 1 get
- /DeviceGray
- [
- ColorSpace 3 get/exec cvx
- 4 AGMCORE_plate_ndx sub -1/roll cvx
- 4 1/roll cvx
- 3[/pop cvx]cvx/repeat cvx
- 1/exch cvx/sub cvx
- ]cvx
- ]def
- }{
- AGMCORE_report_unsupported_color_space
- AGMCORE_black_plate not
- {
- currentdict 0 false AGMCORE_separateShading
- /ColorSpace[/DeviceGray]def
- }if
- }ifelse
- }{
- currentdict
- false -1 ColorSpace 1 get
- {
- AGMCORE_IsCurrentColor
- {
- 1 add
- exch pop true exch exit
- }if
- 1 add
- }forall
- exch
- dup not currentoverprint and
- {/AGMCORE_ignoreshade true def}if
- AGMCORE_separateShading
- }ifelse
- currentdict
- end exch
- }if
- dup 0 get dup/DeviceCMYK eq exch dup/Separation eq exch/DeviceN eq or or not
- {
- exch begin
- ColorSpace dup type/arraytype eq
- {0 get}if
- /DeviceGray ne
- {
- AGMCORE_report_unsupported_color_space
- AGMCORE_black_plate not
- {
- ColorSpace 0 get/CIEBasedA eq
- {
- /ColorSpace[/Separation/_ciebaseda_/DeviceGray{}]def
- }if
- ColorSpace 0 get dup/CIEBasedABC eq exch dup/CIEBasedDEF eq exch/DeviceRGB eq or or
- {
- /ColorSpace[/DeviceN[/_red_/_green_/_blue_]/DeviceRGB{}]def
- }if
- ColorSpace 0 get/CIEBasedDEFG eq
- {
- /ColorSpace[/DeviceN[/_cyan_/_magenta_/_yellow_/_black_]/DeviceCMYK{}]def
- }if
- currentdict 0 false AGMCORE_separateShading
- }if
- }if
- currentdict
- end exch
- }if
- pop
- dup/AGMCORE_ignoreshade known
- {
- begin
- /ColorSpace[/Separation(None)/DeviceGray{}]def
- currentdict end
- }if
- }def
- /shfill
- {
- AGMCORE_separateShadingDict
- dup/AGMCORE_ignoreshade known
- {pop}
- {AGMCORE_&sysshfill}ifelse
- }def
- /makepattern
- {
- exch
- dup/PatternType get 2 eq
- {
- clonedict
- begin
- /Shading Shading AGMCORE_separateShadingDict def
- Shading/AGMCORE_ignoreshade known
- currentdict end exch
- {pop<</PatternType 1/PaintProc{pop}/BBox[0 0 1 1]/XStep 1/YStep 1/PaintType 1/TilingType 3>>}if
- exch AGMCORE_&sysmakepattern
- }{
- exch AGMCORE_&usrmakepattern
- }ifelse
- }def
- }if
- }if
- AGMCORE_in_rip_sep{
- /setcustomcolor
- {
- exch aload pop
- dup 7 1 roll inRip_spot_has_ink not {
- 4{4 index mul 4 1 roll}
- repeat
- /DeviceCMYK setcolorspace
- 6 -2 roll pop pop
- }{
- //Adobe_AGM_Core begin
- /AGMCORE_k xdf/AGMCORE_y xdf/AGMCORE_m xdf/AGMCORE_c xdf
- end
- [/Separation 4 -1 roll/DeviceCMYK
- {dup AGMCORE_c mul exch dup AGMCORE_m mul exch dup AGMCORE_y mul exch AGMCORE_k mul}
- ]
- setcolorspace
- }ifelse
- setcolor
- }ndf
- /setseparationgray
- {
- [/Separation(All)/DeviceGray{}]setcolorspace_opt
- 1 exch sub setcolor
- }ndf
- }{
- /setseparationgray
- {
- AGMCORE_&setgray
- }ndf
- }ifelse
- /findcmykcustomcolor
- {
- 5 makereadonlyarray
- }ndf
- /setcustomcolor
- {
- exch aload pop pop
- 4{4 index mul 4 1 roll}repeat
- setcmykcolor pop
- }ndf
- /has_color
- /colorimage where{
- AGMCORE_producing_seps{
- pop true
- }{
- systemdict eq
- }ifelse
- }{
- false
- }ifelse
- def
- /map_index
- {
- 1 index mul exch getinterval{255 div}forall
- }bdf
- /map_indexed_devn
- {
- Lookup Names length 3 -1 roll cvi map_index
- }bdf
- /n_color_components
- {
- base_colorspace_type
- dup/DeviceGray eq{
- pop 1
- }{
- /DeviceCMYK eq{
- 4
- }{
- 3
- }ifelse
- }ifelse
- }bdf
- level2{
- /mo/moveto ldf
- /li/lineto ldf
- /cv/curveto ldf
- /knockout_unitsq
- {
- 1 setgray
- 0 0 1 1 rectfill
- }def
- level2/setcolorspace AGMCORE_key_known not and{
- /AGMCORE_&&&setcolorspace/setcolorspace ldf
- /AGMCORE_ReplaceMappedColor
- {
- dup type dup/arraytype eq exch/packedarraytype eq or
- {
- /AGMCORE_SpotAliasAry2 where{
- begin
- dup 0 get dup/Separation eq
- {
- pop
- dup length array copy
- dup dup 1 get
- current_spot_alias
- {
- dup map_alias
- {
- false set_spot_alias
- dup 1 exch setsepcolorspace
- true set_spot_alias
- begin
- /sep_colorspace_dict currentdict AGMCORE_gput
- pop pop pop
- [
- /Separation Name
- CSA map_csa
- MappedCSA
- /sep_colorspace_proc load
- ]
- dup Name
- end
- }if
- }if
- map_reserved_ink_name 1 xpt
- }{
- /DeviceN eq
- {
- dup length array copy
- dup dup 1 get[
- exch{
- current_spot_alias{
- dup map_alias{
- /Name get exch pop
- }if
- }if
- map_reserved_ink_name
- }forall
- ]1 xpt
- }if
- }ifelse
- end
- }if
- }if
- }def
- /setcolorspace
- {
- dup type dup/arraytype eq exch/packedarraytype eq or
- {
- dup 0 get/Indexed eq
- {
- AGMCORE_distilling
- {
- /PhotoshopDuotoneList where
- {
- pop false
- }{
- true
- }ifelse
- }{
- true
- }ifelse
- {
- aload pop 3 -1 roll
- AGMCORE_ReplaceMappedColor
- 3 1 roll 4 array astore
- }if
- }{
- AGMCORE_ReplaceMappedColor
- }ifelse
- }if
- DeviceN_PS2_inRip_seps{AGMCORE_&&&setcolorspace}if
- }def
- }if
- }{
- /adj
- {
- currentstrokeadjust{
- transform
- 0.25 sub round 0.25 add exch
- 0.25 sub round 0.25 add exch
- itransform
- }if
- }def
- /mo{
- adj moveto
- }def
- /li{
- adj lineto
- }def
- /cv{
- 6 2 roll adj
- 6 2 roll adj
- 6 2 roll adj curveto
- }def
- /knockout_unitsq
- {
- 1 setgray
- 8 8 1[8 0 0 8 0 0]{<ffffffffffffffff>}image
- }def
- /currentstrokeadjust{
- /currentstrokeadjust AGMCORE_gget
- }def
- /setstrokeadjust{
- /currentstrokeadjust exch AGMCORE_gput
- }def
- /setcolorspace
- {
- /currentcolorspace exch AGMCORE_gput
- }def
- /currentcolorspace
- {
- /currentcolorspace AGMCORE_gget
- }def
- /setcolor_devicecolor
- {
- base_colorspace_type
- dup/DeviceGray eq{
- pop setgray
- }{
- /DeviceCMYK eq{
- setcmykcolor
- }{
- setrgbcolor
- }ifelse
- }ifelse
- }def
- /setcolor
- {
- currentcolorspace 0 get
- dup/DeviceGray ne{
- dup/DeviceCMYK ne{
- dup/DeviceRGB ne{
- dup/Separation eq{
- pop
- currentcolorspace 3 gx
- currentcolorspace 2 get
- }{
- dup/Indexed eq{
- pop
- currentcolorspace 3 get dup type/stringtype eq{
- currentcolorspace 1 get n_color_components
- 3 -1 roll map_index
- }{
- exec
- }ifelse
- currentcolorspace 1 get
- }{
- /AGMCORE_cur_err/AGMCORE_invalid_color_space def
- AGMCORE_invalid_color_space
- }ifelse
- }ifelse
- }if
- }if
- }if
- setcolor_devicecolor
- }def
- }ifelse
- /sop/setoverprint ldf
- /lw/setlinewidth ldf
- /lc/setlinecap ldf
- /lj/setlinejoin ldf
- /ml/setmiterlimit ldf
- /dsh/setdash ldf
- /sadj/setstrokeadjust ldf
- /gry/setgray ldf
- /rgb/setrgbcolor ldf
- /cmyk[
- /currentcolorspace[/DeviceCMYK]/AGMCORE_gput cvx
- /setcmykcolor load dup type/operatortype ne{/exec cvx}if
- ]cvx bdf
- level3 AGMCORE_host_sep not and{
- /nzopmsc{
- 6 dict begin
- /kk exch def
- /yy exch def
- /mm exch def
- /cc exch def
- /sum 0 def
- cc 0 ne{/sum sum 2#1000 or def cc}if
- mm 0 ne{/sum sum 2#0100 or def mm}if
- yy 0 ne{/sum sum 2#0010 or def yy}if
- kk 0 ne{/sum sum 2#0001 or def kk}if
- AGMCORE_CMYKDeviceNColorspaces sum get setcolorspace
- sum 0 eq{0}if
- end
- setcolor
- }bdf
- }{
- /nzopmsc/cmyk ldf
- }ifelse
- /sep/setsepcolor ldf
- /devn/setdevicencolor ldf
- /idx/setindexedcolor ldf
- /colr/setcolor ldf
- /csacrd/set_csa_crd ldf
- /sepcs/setsepcolorspace ldf
- /devncs/setdevicencolorspace ldf
- /idxcs/setindexedcolorspace ldf
- /cp/closepath ldf
- /clp/clp_npth ldf
- /eclp/eoclp_npth ldf
- /f/fill ldf
- /ef/eofill ldf
- /@/stroke ldf
- /nclp/npth_clp ldf
- /gset/graphic_setup ldf
- /gcln/graphic_cleanup ldf
- /ct/concat ldf
- /cf/currentfile ldf
- /fl/filter ldf
- /rs/readstring ldf
- /AGMCORE_def_ht currenthalftone def
- /clonedict Adobe_AGM_Utils begin/clonedict load end def
- /clonearray Adobe_AGM_Utils begin/clonearray load end def
- currentdict{
- dup xcheck 1 index type dup/arraytype eq exch/packedarraytype eq or and{
- bind
- }if
- def
- }forall
- /getrampcolor
- {
- /indx exch def
- 0 1 NumComp 1 sub
- {
- dup
- Samples exch get
- dup type/stringtype eq{indx get}if
- exch
- Scaling exch get aload pop
- 3 1 roll
- mul add
- }for
- ColorSpaceFamily/Separation eq
- {sep}
- {
- ColorSpaceFamily/DeviceN eq
- {devn}{setcolor}ifelse
- }ifelse
- }bdf
- /sssetbackground{
- aload pop
- ColorSpaceFamily/Separation eq
- {sep}
- {
- ColorSpaceFamily/DeviceN eq
- {devn}{setcolor}ifelse
- }ifelse
- }bdf
- /RadialShade
- {
- 40 dict begin
- /ColorSpaceFamily xdf
- /background xdf
- /ext1 xdf
- /ext0 xdf
- /BBox xdf
- /r2 xdf
- /c2y xdf
- /c2x xdf
- /r1 xdf
- /c1y xdf
- /c1x xdf
- /rampdict xdf
- /setinkoverprint where{pop/setinkoverprint{pop}def}if
- gsave
- BBox length 0 gt
- {
- np
- BBox 0 get BBox 1 get moveto
- BBox 2 get BBox 0 get sub 0 rlineto
- 0 BBox 3 get BBox 1 get sub rlineto
- BBox 2 get BBox 0 get sub neg 0 rlineto
- closepath
- clip
- np
- }if
- c1x c2x eq
- {
- c1y c2y lt{/theta 90 def}{/theta 270 def}ifelse
- }{
- /slope c2y c1y sub c2x c1x sub div def
- /theta slope 1 atan def
- c2x c1x lt c2y c1y ge and{/theta theta 180 sub def}if
- c2x c1x lt c2y c1y lt and{/theta theta 180 add def}if
- }ifelse
- gsave
- clippath
- c1x c1y translate
- theta rotate
- -90 rotate
- {pathbbox}stopped
- {0 0 0 0}if
- /yMax xdf
- /xMax xdf
- /yMin xdf
- /xMin xdf
- grestore
- xMax xMin eq yMax yMin eq or
- {
- grestore
- end
- }{
- /max{2 copy gt{pop}{exch pop}ifelse}bdf
- /min{2 copy lt{pop}{exch pop}ifelse}bdf
- rampdict begin
- 40 dict begin
- background length 0 gt{background sssetbackground gsave clippath fill grestore}if
- gsave
- c1x c1y translate
- theta rotate
- -90 rotate
- /c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def
- /c1y 0 def
- /c1x 0 def
- /c2x 0 def
- ext0
- {
- 0 getrampcolor
- c2y r2 add r1 sub 0.0001 lt
- {
- c1x c1y r1 360 0 arcn
- pathbbox
- /aymax exch def
- /axmax exch def
- /aymin exch def
- /axmin exch def
- /bxMin xMin axmin min def
- /byMin yMin aymin min def
- /bxMax xMax axmax max def
- /byMax yMax aymax max def
- bxMin byMin moveto
- bxMax byMin lineto
- bxMax byMax lineto
- bxMin byMax lineto
- bxMin byMin lineto
- eofill
- }{
- c2y r1 add r2 le
- {
- c1x c1y r1 0 360 arc
- fill
- }
- {
- c2x c2y r2 0 360 arc fill
- r1 r2 eq
- {
- /p1x r1 neg def
- /p1y c1y def
- /p2x r1 def
- /p2y c1y def
- p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto
- fill
- }{
- /AA r2 r1 sub c2y div def
- AA -1 eq
- {/theta 89.99 def}
- {/theta AA 1 AA dup mul sub sqrt div 1 atan def}
- ifelse
- /SS1 90 theta add dup sin exch cos div def
- /p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
- /p1y p1x SS1 div neg def
- /SS2 90 theta sub dup sin exch cos div def
- /p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
- /p2y p2x SS2 div neg def
- r1 r2 gt
- {
- /L1maxX p1x yMin p1y sub SS1 div add def
- /L2maxX p2x yMin p2y sub SS2 div add def
- }{
- /L1maxX 0 def
- /L2maxX 0 def
- }ifelse
- p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
- L1maxX L1maxX p1x sub SS1 mul p1y add lineto
- fill
- }ifelse
- }ifelse
- }ifelse
- }if
- c1x c2x sub dup mul
- c1y c2y sub dup mul
- add 0.5 exp
- 0 dtransform
- dup mul exch dup mul add 0.5 exp 72 div
- 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
- 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
- 1 index 1 index lt{exch}if pop
- /hires xdf
- hires mul
- /numpix xdf
- /numsteps NumSamples def
- /rampIndxInc 1 def
- /subsampling false def
- numpix 0 ne
- {
- NumSamples numpix div 0.5 gt
- {
- /numsteps numpix 2 div round cvi dup 1 le{pop 2}if def
- /rampIndxInc NumSamples 1 sub numsteps div def
- /subsampling true def
- }if
- }if
- /xInc c2x c1x sub numsteps div def
- /yInc c2y c1y sub numsteps div def
- /rInc r2 r1 sub numsteps div def
- /cx c1x def
- /cy c1y def
- /radius r1 def
- np
- xInc 0 eq yInc 0 eq rInc 0 eq and and
- {
- 0 getrampcolor
- cx cy radius 0 360 arc
- stroke
- NumSamples 1 sub getrampcolor
- cx cy radius 72 hires div add 0 360 arc
- 0 setlinewidth
- stroke
- }{
- 0
- numsteps
- {
- dup
- subsampling{round cvi}if
- getrampcolor
- cx cy radius 0 360 arc
- /cx cx xInc add def
- /cy cy yInc add def
- /radius radius rInc add def
- cx cy radius 360 0 arcn
- eofill
- rampIndxInc add
- }repeat
- pop
- }ifelse
- ext1
- {
- c2y r2 add r1 lt
- {
- c2x c2y r2 0 360 arc
- fill
- }{
- c2y r1 add r2 sub 0.0001 le
- {
- c2x c2y r2 360 0 arcn
- pathbbox
- /aymax exch def
- /axmax exch def
- /aymin exch def
- /axmin exch def
- /bxMin xMin axmin min def
- /byMin yMin aymin min def
- /bxMax xMax axmax max def
- /byMax yMax aymax max def
- bxMin byMin moveto
- bxMax byMin lineto
- bxMax byMax lineto
- bxMin byMax lineto
- bxMin byMin lineto
- eofill
- }{
- c2x c2y r2 0 360 arc fill
- r1 r2 eq
- {
- /p1x r2 neg def
- /p1y c2y def
- /p2x r2 def
- /p2y c2y def
- p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto
- fill
- }{
- /AA r2 r1 sub c2y div def
- AA -1 eq
- {/theta 89.99 def}
- {/theta AA 1 AA dup mul sub sqrt div 1 atan def}
- ifelse
- /SS1 90 theta add dup sin exch cos div def
- /p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
- /p1y c2y p1x SS1 div sub def
- /SS2 90 theta sub dup sin exch cos div def
- /p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
- /p2y c2y p2x SS2 div sub def
- r1 r2 lt
- {
- /L1maxX p1x yMax p1y sub SS1 div add def
- /L2maxX p2x yMax p2y sub SS2 div add def
- }{
- /L1maxX 0 def
- /L2maxX 0 def
- }ifelse
- p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
- L1maxX L1maxX p1x sub SS1 mul p1y add lineto
- fill
- }ifelse
- }ifelse
- }ifelse
- }if
- grestore
- grestore
- end
- end
- end
- }ifelse
- }bdf
- /GenStrips
- {
- 40 dict begin
- /ColorSpaceFamily xdf
- /background xdf
- /ext1 xdf
- /ext0 xdf
- /BBox xdf
- /y2 xdf
- /x2 xdf
- /y1 xdf
- /x1 xdf
- /rampdict xdf
- /setinkoverprint where{pop/setinkoverprint{pop}def}if
- gsave
- BBox length 0 gt
- {
- np
- BBox 0 get BBox 1 get moveto
- BBox 2 get BBox 0 get sub 0 rlineto
- 0 BBox 3 get BBox 1 get sub rlineto
- BBox 2 get BBox 0 get sub neg 0 rlineto
- closepath
- clip
- np
- }if
- x1 x2 eq
- {
- y1 y2 lt{/theta 90 def}{/theta 270 def}ifelse
- }{
- /slope y2 y1 sub x2 x1 sub div def
- /theta slope 1 atan def
- x2 x1 lt y2 y1 ge and{/theta theta 180 sub def}if
- x2 x1 lt y2 y1 lt and{/theta theta 180 add def}if
- }
- ifelse
- gsave
- clippath
- x1 y1 translate
- theta rotate
- {pathbbox}stopped
- {0 0 0 0}if
- /yMax exch def
- /xMax exch def
- /yMin exch def
- /xMin exch def
- grestore
- xMax xMin eq yMax yMin eq or
- {
- grestore
- end
- }{
- rampdict begin
- 20 dict begin
- background length 0 gt{background sssetbackground gsave clippath fill grestore}if
- gsave
- x1 y1 translate
- theta rotate
- /xStart 0 def
- /xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def
- /ySpan yMax yMin sub def
- /numsteps NumSamples def
- /rampIndxInc 1 def
- /subsampling false def
- xStart 0 transform
- xEnd 0 transform
- 3 -1 roll
- sub dup mul
- 3 1 roll
- sub dup mul
- add 0.5 exp 72 div
- 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
- 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
- 1 index 1 index lt{exch}if pop
- mul
- /numpix xdf
- numpix 0 ne
- {
- NumSamples numpix div 0.5 gt
- {
- /numsteps numpix 2 div round cvi dup 1 le{pop 2}if def
- /rampIndxInc NumSamples 1 sub numsteps div def
- /subsampling true def
- }if
- }if
- ext0
- {
- 0 getrampcolor
- xMin xStart lt
- {
- xMin yMin xMin neg ySpan rectfill
- }if
- }if
- /xInc xEnd xStart sub numsteps div def
- /x xStart def
- 0
- numsteps
- {
- dup
- subsampling{round cvi}if
- getrampcolor
- x yMin xInc ySpan rectfill
- /x x xInc add def
- rampIndxInc add
- }repeat
- pop
- ext1{
- xMax xEnd gt
- {
- xEnd yMin xMax xEnd sub ySpan rectfill
- }if
- }if
- grestore
- grestore
- end
- end
- end
- }ifelse
- }bdf
-}def
-/pt
-{
- end
-}def
-/dt{
-}def
-/pgsv{
- //Adobe_AGM_Core/AGMCORE_save save put
-}def
-/pgrs{
- //Adobe_AGM_Core/AGMCORE_save get restore
-}def
-systemdict/findcolorrendering known{
- /findcolorrendering systemdict/findcolorrendering get def
-}if
-systemdict/setcolorrendering known{
- /setcolorrendering systemdict/setcolorrendering get def
-}if
-/test_cmyk_color_plate
-{
- gsave
- setcmykcolor currentgray 1 ne
- grestore
-}def
-/inRip_spot_has_ink
-{
- dup//Adobe_AGM_Core/AGMCORE_name xddf
- convert_spot_to_process not
-}def
-/map255_to_range
-{
- 1 index sub
- 3 -1 roll 255 div mul add
-}def
-/set_csa_crd
-{
- /sep_colorspace_dict null AGMCORE_gput
- begin
- CSA get_csa_by_name setcolorspace_opt
- set_crd
- end
-}
-def
-/map_csa
-{
- currentdict/MappedCSA known{MappedCSA null ne}{false}ifelse
- {pop}{get_csa_by_name/MappedCSA xdf}ifelse
-}def
-/setsepcolor
-{
- /sep_colorspace_dict AGMCORE_gget begin
- dup/sep_tint exch AGMCORE_gput
- TintProc
- end
-}def
-/setdevicencolor
-{
- /devicen_colorspace_dict AGMCORE_gget begin
- Names length copy
- Names length 1 sub -1 0
- {
- /devicen_tints AGMCORE_gget 3 1 roll xpt
- }for
- TintProc
- end
-}def
-/sep_colorspace_proc
-{
- /AGMCORE_tmp exch store
- /sep_colorspace_dict AGMCORE_gget begin
- currentdict/Components known{
- Components aload pop
- TintMethod/Lab eq{
- 2{AGMCORE_tmp mul NComponents 1 roll}repeat
- LMax sub AGMCORE_tmp mul LMax add NComponents 1 roll
- }{
- TintMethod/Subtractive eq{
- NComponents{
- AGMCORE_tmp mul NComponents 1 roll
- }repeat
- }{
- NComponents{
- 1 sub AGMCORE_tmp mul 1 add NComponents 1 roll
- }repeat
- }ifelse
- }ifelse
- }{
- ColorLookup AGMCORE_tmp ColorLookup length 1 sub mul round cvi get
- aload pop
- }ifelse
- end
-}def
-/sep_colorspace_gray_proc
-{
- /AGMCORE_tmp exch store
- /sep_colorspace_dict AGMCORE_gget begin
- GrayLookup AGMCORE_tmp GrayLookup length 1 sub mul round cvi get
- end
-}def
-/sep_proc_name
-{
- dup 0 get
- dup/DeviceRGB eq exch/DeviceCMYK eq or level2 not and has_color not and{
- pop[/DeviceGray]
- /sep_colorspace_gray_proc
- }{
- /sep_colorspace_proc
- }ifelse
-}def
-/setsepcolorspace
-{
- current_spot_alias{
- dup begin
- Name map_alias{
- exch pop
- }if
- end
- }if
- dup/sep_colorspace_dict exch AGMCORE_gput
- begin
- CSA map_csa
- /AGMCORE_sep_special Name dup()eq exch(All)eq or store
- AGMCORE_avoid_L2_sep_space{
- [/Indexed MappedCSA sep_proc_name 255 exch
- {255 div}/exec cvx 3 -1 roll[4 1 roll load/exec cvx]cvx
- ]setcolorspace_opt
- /TintProc{
- 255 mul round cvi setcolor
- }bdf
- }{
- MappedCSA 0 get/DeviceCMYK eq
- currentdict/Components known and
- AGMCORE_sep_special not and{
- /TintProc[
- Components aload pop Name findcmykcustomcolor
- /exch cvx/setcustomcolor cvx
- ]cvx bdf
- }{
- AGMCORE_host_sep Name(All)eq and{
- /TintProc{
- 1 exch sub setseparationgray
- }bdf
- }{
- AGMCORE_in_rip_sep MappedCSA 0 get/DeviceCMYK eq and
- AGMCORE_host_sep or
- Name()eq and{
- /TintProc[
- MappedCSA sep_proc_name exch 0 get/DeviceCMYK eq{
- cvx/setcmykcolor cvx
- }{
- cvx/setgray cvx
- }ifelse
- ]cvx bdf
- }{
- AGMCORE_producing_seps MappedCSA 0 get dup/DeviceCMYK eq exch/DeviceGray eq or and AGMCORE_sep_special not and{
- /TintProc[
- /dup cvx
- MappedCSA sep_proc_name cvx exch
- 0 get/DeviceGray eq{
- 1/exch cvx/sub cvx 0 0 0 4 -1/roll cvx
- }if
- /Name cvx/findcmykcustomcolor cvx/exch cvx
- AGMCORE_host_sep{
- AGMCORE_is_cmyk_sep
- /Name cvx
- /AGMCORE_IsSeparationAProcessColor load/exec cvx
- /not cvx/and cvx
- }{
- Name inRip_spot_has_ink not
- }ifelse
- [
- /pop cvx 1
- ]cvx/if cvx
- /setcustomcolor cvx
- ]cvx bdf
- }{
- /TintProc{setcolor}bdf
- [/Separation Name MappedCSA sep_proc_name load]setcolorspace_opt
- }ifelse
- }ifelse
- }ifelse
- }ifelse
- }ifelse
- set_crd
- setsepcolor
- end
-}def
-/additive_blend
-{
- 3 dict begin
- /numarrays xdf
- /numcolors xdf
- 0 1 numcolors 1 sub
- {
- /c1 xdf
- 1
- 0 1 numarrays 1 sub
- {
- 1 exch add/index cvx
- c1/get cvx/mul cvx
- }for
- numarrays 1 add 1/roll cvx
- }for
- numarrays[/pop cvx]cvx/repeat cvx
- end
-}def
-/subtractive_blend
-{
- 3 dict begin
- /numarrays xdf
- /numcolors xdf
- 0 1 numcolors 1 sub
- {
- /c1 xdf
- 1 1
- 0 1 numarrays 1 sub
- {
- 1 3 3 -1 roll add/index cvx
- c1/get cvx/sub cvx/mul cvx
- }for
- /sub cvx
- numarrays 1 add 1/roll cvx
- }for
- numarrays[/pop cvx]cvx/repeat cvx
- end
-}def
-/exec_tint_transform
-{
- /TintProc[
- /TintTransform cvx/setcolor cvx
- ]cvx bdf
- MappedCSA setcolorspace_opt
-}bdf
-/devn_makecustomcolor
-{
- 2 dict begin
- /names_index xdf
- /Names xdf
- 1 1 1 1 Names names_index get findcmykcustomcolor
- /devicen_tints AGMCORE_gget names_index get setcustomcolor
- Names length{pop}repeat
- end
-}bdf
-/setdevicencolorspace
-{
- dup/AliasedColorants known{false}{true}ifelse
- current_spot_alias and{
- 7 dict begin
- /names_index 0 def
- dup/names_len exch/Names get length def
- /new_names names_len array def
- /new_LookupTables names_len array def
- /alias_cnt 0 def
- dup/Names get
- {
- dup map_alias{
- exch pop
- dup/ColorLookup known{
- dup begin
- new_LookupTables names_index ColorLookup put
- end
- }{
- dup/Components known{
- dup begin
- new_LookupTables names_index Components put
- end
- }{
- dup begin
- new_LookupTables names_index[null null null null]put
- end
- }ifelse
- }ifelse
- new_names names_index 3 -1 roll/Name get put
- /alias_cnt alias_cnt 1 add def
- }{
- /name xdf
- new_names names_index name put
- dup/LookupTables known{
- dup begin
- new_LookupTables names_index LookupTables names_index get put
- end
- }{
- dup begin
- new_LookupTables names_index[null null null null]put
- end
- }ifelse
- }ifelse
- /names_index names_index 1 add def
- }forall
- alias_cnt 0 gt{
- /AliasedColorants true def
- /lut_entry_len new_LookupTables 0 get dup length 256 ge{0 get length}{length}ifelse def
- 0 1 names_len 1 sub{
- /names_index xdf
- new_LookupTables names_index get dup length 256 ge{0 get length}{length}ifelse lut_entry_len ne{
- /AliasedColorants false def
- exit
- }{
- new_LookupTables names_index get 0 get null eq{
- dup/Names get names_index get/name xdf
- name(Cyan)eq name(Magenta)eq name(Yellow)eq name(Black)eq
- or or or not{
- /AliasedColorants false def
- exit
- }if
- }if
- }ifelse
- }for
- lut_entry_len 1 eq{
- /AliasedColorants false def
- }if
- AliasedColorants{
- dup begin
- /Names new_names def
- /LookupTables new_LookupTables def
- /AliasedColorants true def
- /NComponents lut_entry_len def
- /TintMethod NComponents 4 eq{/Subtractive}{/Additive}ifelse def
- /MappedCSA TintMethod/Additive eq{/DeviceRGB}{/DeviceCMYK}ifelse def
- currentdict/TTTablesIdx known not{
- /TTTablesIdx -1 def
- }if
- end
- }if
- }if
- end
- }if
- dup/devicen_colorspace_dict exch AGMCORE_gput
- begin
- currentdict/AliasedColorants known{
- AliasedColorants
- }{
- false
- }ifelse
- dup not{
- CSA map_csa
- }if
- /TintTransform load type/nulltype eq or{
- /TintTransform[
- 0 1 Names length 1 sub
- {
- /TTTablesIdx TTTablesIdx 1 add def
- dup LookupTables exch get dup 0 get null eq
- {
- 1 index
- Names exch get
- dup(Cyan)eq
- {
- pop exch
- LookupTables length exch sub
- /index cvx
- 0 0 0
- }
- {
- dup(Magenta)eq
- {
- pop exch
- LookupTables length exch sub
- /index cvx
- 0/exch cvx 0 0
- }{
- (Yellow)eq
- {
- exch
- LookupTables length exch sub
- /index cvx
- 0 0 3 -1/roll cvx 0
- }{
- exch
- LookupTables length exch sub
- /index cvx
- 0 0 0 4 -1/roll cvx
- }ifelse
- }ifelse
- }ifelse
- 5 -1/roll cvx/astore cvx
- }{
- dup length 1 sub
- LookupTables length 4 -1 roll sub 1 add
- /index cvx/mul cvx/round cvx/cvi cvx/get cvx
- }ifelse
- Names length TTTablesIdx add 1 add 1/roll cvx
- }for
- Names length[/pop cvx]cvx/repeat cvx
- NComponents Names length
- TintMethod/Subtractive eq
- {
- subtractive_blend
- }{
- additive_blend
- }ifelse
- ]cvx bdf
- }if
- AGMCORE_host_sep{
- Names convert_to_process{
- exec_tint_transform
- }
- {
- currentdict/AliasedColorants known{
- AliasedColorants not
- }{
- false
- }ifelse
- 5 dict begin
- /AvoidAliasedColorants xdf
- /painted? false def
- /names_index 0 def
- /names_len Names length def
- AvoidAliasedColorants{
- /currentspotalias current_spot_alias def
- false set_spot_alias
- }if
- Names{
- AGMCORE_is_cmyk_sep{
- dup(Cyan)eq AGMCORE_cyan_plate and exch
- dup(Magenta)eq AGMCORE_magenta_plate and exch
- dup(Yellow)eq AGMCORE_yellow_plate and exch
- (Black)eq AGMCORE_black_plate and or or or{
- /devicen_colorspace_dict AGMCORE_gget/TintProc[
- Names names_index/devn_makecustomcolor cvx
- ]cvx ddf
- /painted? true def
- }if
- painted?{exit}if
- }{
- 0 0 0 0 5 -1 roll findcmykcustomcolor 1 setcustomcolor currentgray 0 eq{
- /devicen_colorspace_dict AGMCORE_gget/TintProc[
- Names names_index/devn_makecustomcolor cvx
- ]cvx ddf
- /painted? true def
- exit
- }if
- }ifelse
- /names_index names_index 1 add def
- }forall
- AvoidAliasedColorants{
- currentspotalias set_spot_alias
- }if
- painted?{
- /devicen_colorspace_dict AGMCORE_gget/names_index names_index put
- }{
- /devicen_colorspace_dict AGMCORE_gget/TintProc[
- names_len[/pop cvx]cvx/repeat cvx 1/setseparationgray cvx
- 0 0 0 0/setcmykcolor cvx
- ]cvx ddf
- }ifelse
- end
- }ifelse
- }
- {
- AGMCORE_in_rip_sep{
- Names convert_to_process not
- }{
- level3
- }ifelse
- {
- [/DeviceN Names MappedCSA/TintTransform load]setcolorspace_opt
- /TintProc level3 not AGMCORE_in_rip_sep and{
- [
- Names/length cvx[/pop cvx]cvx/repeat cvx
- ]cvx bdf
- }{
- {setcolor}bdf
- }ifelse
- }{
- exec_tint_transform
- }ifelse
- }ifelse
- set_crd
- /AliasedColorants false def
- end
-}def
-/setindexedcolorspace
-{
- dup/indexed_colorspace_dict exch AGMCORE_gput
- begin
- currentdict/CSDBase known{
- CSDBase/CSD get_res begin
- currentdict/Names known{
- currentdict devncs
- }{
- 1 currentdict sepcs
- }ifelse
- AGMCORE_host_sep{
- 4 dict begin
- /compCnt/Names where{pop Names length}{1}ifelse def
- /NewLookup HiVal 1 add string def
- 0 1 HiVal{
- /tableIndex xdf
- Lookup dup type/stringtype eq{
- compCnt tableIndex map_index
- }{
- exec
- }ifelse
- /Names where{
- pop setdevicencolor
- }{
- setsepcolor
- }ifelse
- currentgray
- tableIndex exch
- 255 mul cvi
- NewLookup 3 1 roll put
- }for
- [/Indexed currentcolorspace HiVal NewLookup]setcolorspace_opt
- end
- }{
- level3
- {
- currentdict/Names known{
- [/Indexed[/DeviceN Names MappedCSA/TintTransform load]HiVal Lookup]setcolorspace_opt
- }{
- [/Indexed[/Separation Name MappedCSA sep_proc_name load]HiVal Lookup]setcolorspace_opt
- }ifelse
- }{
- [/Indexed MappedCSA HiVal
- [
- currentdict/Names known{
- Lookup dup type/stringtype eq
- {/exch cvx CSDBase/CSD get_res/Names get length dup/mul cvx exch/getinterval cvx{255 div}/forall cvx}
- {/exec cvx}ifelse
- /TintTransform load/exec cvx
- }{
- Lookup dup type/stringtype eq
- {/exch cvx/get cvx 255/div cvx}
- {/exec cvx}ifelse
- CSDBase/CSD get_res/MappedCSA get sep_proc_name exch pop/load cvx/exec cvx
- }ifelse
- ]cvx
- ]setcolorspace_opt
- }ifelse
- }ifelse
- end
- set_crd
- }
- {
- CSA map_csa
- AGMCORE_host_sep level2 not and{
- 0 0 0 0 setcmykcolor
- }{
- [/Indexed MappedCSA
- level2 not has_color not and{
- dup 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or{
- pop[/DeviceGray]
- }if
- HiVal GrayLookup
- }{
- HiVal
- currentdict/RangeArray known{
- {
- /indexed_colorspace_dict AGMCORE_gget begin
- Lookup exch
- dup HiVal gt{
- pop HiVal
- }if
- NComponents mul NComponents getinterval{}forall
- NComponents 1 sub -1 0{
- RangeArray exch 2 mul 2 getinterval aload pop map255_to_range
- NComponents 1 roll
- }for
- end
- }bind
- }{
- Lookup
- }ifelse
- }ifelse
- ]setcolorspace_opt
- set_crd
- }ifelse
- }ifelse
- end
-}def
-/setindexedcolor
-{
- AGMCORE_host_sep{
- /indexed_colorspace_dict AGMCORE_gget
- begin
- currentdict/CSDBase known{
- CSDBase/CSD get_res begin
- currentdict/Names known{
- map_indexed_devn
- devn
- }
- {
- Lookup 1 3 -1 roll map_index
- sep
- }ifelse
- end
- }{
- Lookup MappedCSA/DeviceCMYK eq{4}{1}ifelse 3 -1 roll
- map_index
- MappedCSA/DeviceCMYK eq{setcmykcolor}{setgray}ifelse
- }ifelse
- end
- }{
- level3 not AGMCORE_in_rip_sep and/indexed_colorspace_dict AGMCORE_gget/CSDBase known and{
- /indexed_colorspace_dict AGMCORE_gget/CSDBase get/CSD get_res begin
- map_indexed_devn
- devn
- end
- }
- {
- setcolor
- }ifelse
- }ifelse
-}def
-/ignoreimagedata
-{
- currentoverprint not{
- gsave
- dup clonedict begin
- 1 setgray
- /Decode[0 1]def
- /DataSource<FF>def
- /MultipleDataSources false def
- /BitsPerComponent 8 def
- currentdict end
- systemdict/image gx
- grestore
- }if
- consumeimagedata
-}def
-/add_res
-{
- dup/CSD eq{
- pop
- //Adobe_AGM_Core begin
- /AGMCORE_CSD_cache load 3 1 roll put
- end
- }{
- defineresource pop
- }ifelse
-}def
-/del_res
-{
- {
- aload pop exch
- dup/CSD eq{
- pop
- {//Adobe_AGM_Core/AGMCORE_CSD_cache get exch undef}forall
- }{
- exch
- {1 index undefineresource}forall
- pop
- }ifelse
- }forall
-}def
-/get_res
-{
- dup/CSD eq{
- pop
- dup type dup/nametype eq exch/stringtype eq or{
- AGMCORE_CSD_cache exch get
- }if
- }{
- findresource
- }ifelse
-}def
-/get_csa_by_name
-{
- dup type dup/nametype eq exch/stringtype eq or{
- /CSA get_res
- }if
-}def
-/paintproc_buf_init
-{
- /count get 0 0 put
-}def
-/paintproc_buf_next
-{
- dup/count get dup 0 get
- dup 3 1 roll
- 1 add 0 xpt
- get
-}def
-/cachepaintproc_compress
-{
- 5 dict begin
- currentfile exch 0 exch/SubFileDecode filter/ReadFilter exch def
- /ppdict 20 dict def
- /string_size 16000 def
- /readbuffer string_size string def
- currentglobal true setglobal
- ppdict 1 array dup 0 1 put/count xpt
- setglobal
- /LZWFilter
- {
- exch
- dup length 0 eq{
- pop
- }{
- ppdict dup length 1 sub 3 -1 roll put
- }ifelse
- {string_size}{0}ifelse string
- }/LZWEncode filter def
- {
- ReadFilter readbuffer readstring
- exch LZWFilter exch writestring
- not{exit}if
- }loop
- LZWFilter closefile
- ppdict
- end
-}def
-/cachepaintproc
-{
- 2 dict begin
- currentfile exch 0 exch/SubFileDecode filter/ReadFilter exch def
- /ppdict 20 dict def
- currentglobal true setglobal
- ppdict 1 array dup 0 1 put/count xpt
- setglobal
- {
- ReadFilter 16000 string readstring exch
- ppdict dup length 1 sub 3 -1 roll put
- not{exit}if
- }loop
- ppdict dup dup length 1 sub()put
- end
-}def
-/make_pattern
-{
- exch clonedict exch
- dup matrix currentmatrix matrix concatmatrix 0 0 3 2 roll itransform
- exch 3 index/XStep get 1 index exch 2 copy div cvi mul sub sub
- exch 3 index/YStep get 1 index exch 2 copy div cvi mul sub sub
- matrix translate exch matrix concatmatrix
- 1 index begin
- BBox 0 get XStep div cvi XStep mul/xshift exch neg def
- BBox 1 get YStep div cvi YStep mul/yshift exch neg def
- BBox 0 get xshift add
- BBox 1 get yshift add
- BBox 2 get xshift add
- BBox 3 get yshift add
- 4 array astore
- /BBox exch def
- [xshift yshift/translate load null/exec load]dup
- 3/PaintProc load put cvx/PaintProc exch def
- end
- gsave 0 setgray
- makepattern
- grestore
-}def
-/set_pattern
-{
- dup/PatternType get 1 eq{
- dup/PaintType get 1 eq{
- currentoverprint sop[/DeviceGray]setcolorspace 0 setgray
- }if
- }if
- setpattern
-}def
-/setcolorspace_opt
-{
- dup currentcolorspace eq{pop}{setcolorspace}ifelse
-}def
-/updatecolorrendering
-{
- currentcolorrendering/RenderingIntent known{
- currentcolorrendering/RenderingIntent get
- }
- {
- Intent/AbsoluteColorimetric eq
- {
- /absolute_colorimetric_crd AGMCORE_gget dup null eq
- }
- {
- Intent/RelativeColorimetric eq
- {
- /relative_colorimetric_crd AGMCORE_gget dup null eq
- }
- {
- Intent/Saturation eq
- {
- /saturation_crd AGMCORE_gget dup null eq
- }
- {
- /perceptual_crd AGMCORE_gget dup null eq
- }ifelse
- }ifelse
- }ifelse
- {
- pop null
- }
- {
- /RenderingIntent known{null}{Intent}ifelse
- }ifelse
- }ifelse
- Intent ne{
- Intent/ColorRendering{findresource}stopped
- {
- pop pop systemdict/findcolorrendering known
- {
- Intent findcolorrendering
- {
- /ColorRendering findresource true exch
- }
- {
- /ColorRendering findresource
- product(Xerox Phaser 5400)ne
- exch
- }ifelse
- dup Intent/AbsoluteColorimetric eq
- {
- /absolute_colorimetric_crd exch AGMCORE_gput
- }
- {
- Intent/RelativeColorimetric eq
- {
- /relative_colorimetric_crd exch AGMCORE_gput
- }
- {
- Intent/Saturation eq
- {
- /saturation_crd exch AGMCORE_gput
- }
- {
- Intent/Perceptual eq
- {
- /perceptual_crd exch AGMCORE_gput
- }
- {
- pop
- }ifelse
- }ifelse
- }ifelse
- }ifelse
- 1 index{exch}{pop}ifelse
- }
- {false}ifelse
- }
- {true}ifelse
- {
- dup begin
- currentdict/TransformPQR known{
- currentdict/TransformPQR get aload pop
- 3{{}eq 3 1 roll}repeat or or
- }
- {true}ifelse
- currentdict/MatrixPQR known{
- currentdict/MatrixPQR get aload pop
- 1.0 eq 9 1 roll 0.0 eq 9 1 roll 0.0 eq 9 1 roll
- 0.0 eq 9 1 roll 1.0 eq 9 1 roll 0.0 eq 9 1 roll
- 0.0 eq 9 1 roll 0.0 eq 9 1 roll 1.0 eq
- and and and and and and and and
- }
- {true}ifelse
- end
- or
- {
- clonedict begin
- /TransformPQR[
- {4 -1 roll 3 get dup 3 1 roll sub 5 -1 roll 3 get 3 -1 roll sub div
- 3 -1 roll 3 get 3 -1 roll 3 get dup 4 1 roll sub mul add}bind
- {4 -1 roll 4 get dup 3 1 roll sub 5 -1 roll 4 get 3 -1 roll sub div
- 3 -1 roll 4 get 3 -1 roll 4 get dup 4 1 roll sub mul add}bind
- {4 -1 roll 5 get dup 3 1 roll sub 5 -1 roll 5 get 3 -1 roll sub div
- 3 -1 roll 5 get 3 -1 roll 5 get dup 4 1 roll sub mul add}bind
- ]def
- /MatrixPQR[0.8951 -0.7502 0.0389 0.2664 1.7135 -0.0685 -0.1614 0.0367 1.0296]def
- /RangePQR[-0.3227950745 2.3229645538 -1.5003771057 3.5003465881 -0.1369979095 2.136967392]def
- currentdict end
- }if
- setcolorrendering_opt
- }if
- }if
-}def
-/set_crd
-{
- AGMCORE_host_sep not level2 and{
- currentdict/ColorRendering known{
- ColorRendering/ColorRendering{findresource}stopped not{setcolorrendering_opt}if
- }{
- currentdict/Intent known{
- updatecolorrendering
- }if
- }ifelse
- currentcolorspace dup type/arraytype eq
- {0 get}if
- /DeviceRGB eq
- {
- currentdict/UCR known
- {/UCR}{/AGMCORE_currentucr}ifelse
- load setundercolorremoval
- currentdict/BG known
- {/BG}{/AGMCORE_currentbg}ifelse
- load setblackgeneration
- }if
- }if
-}def
-/set_ucrbg
-{
- dup null eq{pop/AGMCORE_currentbg load}{/Procedure get_res}ifelse setblackgeneration
- dup null eq{pop/AGMCORE_currentucr load}{/Procedure get_res}ifelse setundercolorremoval
-}def
-/setcolorrendering_opt
-{
- dup currentcolorrendering eq{
- pop
- }{
- clonedict
- begin
- /Intent Intent def
- currentdict
- end
- setcolorrendering
- }ifelse
-}def
-/cpaint_gcomp
-{
- convert_to_process//Adobe_AGM_Core/AGMCORE_ConvertToProcess xddf
- //Adobe_AGM_Core/AGMCORE_ConvertToProcess get not
- {
- (%end_cpaint_gcomp)flushinput
- }if
-}def
-/cpaint_gsep
-{
- //Adobe_AGM_Core/AGMCORE_ConvertToProcess get
- {
- (%end_cpaint_gsep)flushinput
- }if
-}def
-/cpaint_gend
-{np}def
-/T1_path
-{
- currentfile token pop currentfile token pop mo
- {
- currentfile token pop dup type/stringtype eq
- {pop exit}if
- 0 exch rlineto
- currentfile token pop dup type/stringtype eq
- {pop exit}if
- 0 rlineto
- }loop
-}def
-/T1_gsave
- level3
- {/clipsave}
- {/gsave}ifelse
- load def
-/T1_grestore
- level3
- {/cliprestore}
- {/grestore}ifelse
- load def
-/set_spot_alias_ary
-{
- dup inherit_aliases
- //Adobe_AGM_Core/AGMCORE_SpotAliasAry xddf
-}def
-/set_spot_normalization_ary
-{
- dup inherit_aliases
- dup length
- /AGMCORE_SpotAliasAry where{pop AGMCORE_SpotAliasAry length add}if
- array
- //Adobe_AGM_Core/AGMCORE_SpotAliasAry2 xddf
- /AGMCORE_SpotAliasAry where{
- pop
- AGMCORE_SpotAliasAry2 0 AGMCORE_SpotAliasAry putinterval
- AGMCORE_SpotAliasAry length
- }{0}ifelse
- AGMCORE_SpotAliasAry2 3 1 roll exch putinterval
- true set_spot_alias
-}def
-/inherit_aliases
-{
- {dup/Name get map_alias{/CSD put}{pop}ifelse}forall
-}def
-/set_spot_alias
-{
- /AGMCORE_SpotAliasAry2 where{
- /AGMCORE_current_spot_alias 3 -1 roll put
- }{
- pop
- }ifelse
-}def
-/current_spot_alias
-{
- /AGMCORE_SpotAliasAry2 where{
- /AGMCORE_current_spot_alias get
- }{
- false
- }ifelse
-}def
-/map_alias
-{
- /AGMCORE_SpotAliasAry2 where{
- begin
- /AGMCORE_name xdf
- false
- AGMCORE_SpotAliasAry2{
- dup/Name get AGMCORE_name eq{
- /CSD get/CSD get_res
- exch pop true
- exit
- }{
- pop
- }ifelse
- }forall
- end
- }{
- pop false
- }ifelse
-}bdf
-/spot_alias
-{
- true set_spot_alias
- /AGMCORE_&setcustomcolor AGMCORE_key_known not{
- //Adobe_AGM_Core/AGMCORE_&setcustomcolor/setcustomcolor load put
- }if
- /customcolor_tint 1 AGMCORE_gput
- //Adobe_AGM_Core begin
- /setcustomcolor
- {
- //Adobe_AGM_Core begin
- dup/customcolor_tint exch AGMCORE_gput
- 1 index aload pop pop 1 eq exch 1 eq and exch 1 eq and exch 1 eq and not
- current_spot_alias and{1 index 4 get map_alias}{false}ifelse
- {
- false set_spot_alias
- /sep_colorspace_dict AGMCORE_gget null ne
- 3 1 roll 2 index{
- exch pop/sep_tint AGMCORE_gget exch
- }if
- mark 3 1 roll
- setsepcolorspace
- counttomark 0 ne{
- setsepcolor
- }if
- pop
- not{/sep_tint 1.0 AGMCORE_gput}if
- pop
- true set_spot_alias
- }{
- AGMCORE_&setcustomcolor
- }ifelse
- end
- }bdf
- end
-}def
-/begin_feature
-{
- Adobe_AGM_Core/AGMCORE_feature_dictCount countdictstack put
- count Adobe_AGM_Core/AGMCORE_feature_opCount 3 -1 roll put
- {Adobe_AGM_Core/AGMCORE_feature_ctm matrix currentmatrix put}if
-}def
-/end_feature
-{
- 2 dict begin
- /spd/setpagedevice load def
- /setpagedevice{get_gstate spd set_gstate}def
- stopped{$error/newerror false put}if
- end
- count Adobe_AGM_Core/AGMCORE_feature_opCount get sub dup 0 gt{{pop}repeat}{pop}ifelse
- countdictstack Adobe_AGM_Core/AGMCORE_feature_dictCount get sub dup 0 gt{{end}repeat}{pop}ifelse
- {Adobe_AGM_Core/AGMCORE_feature_ctm get setmatrix}if
-}def
-/set_negative
-{
- //Adobe_AGM_Core begin
- /AGMCORE_inverting exch def
- level2{
- currentpagedevice/NegativePrint known AGMCORE_distilling not and{
- currentpagedevice/NegativePrint get//Adobe_AGM_Core/AGMCORE_inverting get ne{
- true begin_feature true{
- <</NegativePrint//Adobe_AGM_Core/AGMCORE_inverting get>>setpagedevice
- }end_feature
- }if
- /AGMCORE_inverting false def
- }if
- }if
- AGMCORE_inverting{
- [{1 exch sub}/exec load dup currenttransfer exch]cvx bind settransfer
- AGMCORE_distilling{
- erasepage
- }{
- gsave np clippath 1/setseparationgray where{pop setseparationgray}{setgray}ifelse
- /AGMIRS_&fill where{pop AGMIRS_&fill}{fill}ifelse grestore
- }ifelse
- }if
- end
-}def
-/lw_save_restore_override{
- /md where{
- pop
- md begin
- initializepage
- /initializepage{}def
- /pmSVsetup{}def
- /endp{}def
- /pse{}def
- /psb{}def
- /orig_showpage where
- {pop}
- {/orig_showpage/showpage load def}
- ifelse
- /showpage{orig_showpage gR}def
- end
- }if
-}def
-/pscript_showpage_override{
- /NTPSOct95 where
- {
- begin
- showpage
- save
- /showpage/restore load def
- /restore{exch pop}def
- end
- }if
-}def
-/driver_media_override
-{
- /md where{
- pop
- md/initializepage known{
- md/initializepage{}put
- }if
- md/rC known{
- md/rC{4{pop}repeat}put
- }if
- }if
- /mysetup where{
- /mysetup[1 0 0 1 0 0]put
- }if
- Adobe_AGM_Core/AGMCORE_Default_CTM matrix currentmatrix put
- level2
- {Adobe_AGM_Core/AGMCORE_Default_PageSize currentpagedevice/PageSize get put}if
-}def
-/driver_check_media_override
-{
- /PrepsDict where
- {pop}
- {
- Adobe_AGM_Core/AGMCORE_Default_CTM get matrix currentmatrix ne
- Adobe_AGM_Core/AGMCORE_Default_PageSize get type/arraytype eq
- {
- Adobe_AGM_Core/AGMCORE_Default_PageSize get 0 get currentpagedevice/PageSize get 0 get eq and
- Adobe_AGM_Core/AGMCORE_Default_PageSize get 1 get currentpagedevice/PageSize get 1 get eq and
- }if
- {
- Adobe_AGM_Core/AGMCORE_Default_CTM get setmatrix
- }if
- }ifelse
-}def
-AGMCORE_err_strings begin
- /AGMCORE_bad_environ(Environment not satisfactory for this job. Ensure that the PPD is correct or that the PostScript level requested is supported by this printer. )def
- /AGMCORE_color_space_onhost_seps(This job contains colors that will not separate with on-host methods. )def
- /AGMCORE_invalid_color_space(This job contains an invalid color space. )def
-end
-/set_def_ht
-{AGMCORE_def_ht sethalftone}def
-/set_def_flat
-{AGMCORE_Default_flatness setflat}def
-end
-systemdict/setpacking known
-{setpacking}if
-%%EndResource
-%%BeginResource: procset Adobe_CoolType_Core 2.31 0 %%Copyright: Copyright 1997-2006 Adobe Systems Incorporated. All Rights Reserved. %%Version: 2.31 0 10 dict begin /Adobe_CoolType_Passthru currentdict def /Adobe_CoolType_Core_Defined userdict/Adobe_CoolType_Core known def Adobe_CoolType_Core_Defined {/Adobe_CoolType_Core userdict/Adobe_CoolType_Core get def} if userdict/Adobe_CoolType_Core 70 dict dup begin put /Adobe_CoolType_Version 2.31 def /Level2? systemdict/languagelevel known dup {pop systemdict/languagelevel get 2 ge} if def Level2? not { /currentglobal false def /setglobal/pop load def /gcheck{pop false}bind def /currentpacking false def /setpacking/pop load def /SharedFontDirectory 0 dict def } if currentpacking true setpacking currentglobal false setglobal userdict/Adobe_CoolType_Data 2 copy known not {2 copy 10 dict put} if get begin /@opStackCountByLevel 32 dict def /@opStackLevel 0 def /@dictStackCountByLevel 32 dict def /@dictStackLevel 0 def end setglobal currentglobal true setglobal userdict/Adobe_CoolType_GVMFonts known not {userdict/Adobe_CoolType_GVMFonts 10 dict put} if setglobal currentglobal false setglobal userdict/Adobe_CoolType_LVMFonts known not {userdict/Adobe_CoolType_LVMFonts 10 dict put} if setglobal /ct_VMDictPut { dup gcheck{Adobe_CoolType_GVMFonts}{Adobe_CoolType_LVMFonts}ifelse 3 1 roll put }bind def /ct_VMDictUndef { dup Adobe_CoolType_GVMFonts exch known {Adobe_CoolType_GVMFonts exch undef} { dup Adobe_CoolType_LVMFonts exch known {Adobe_CoolType_LVMFonts exch undef} {pop} ifelse }ifelse }bind def /ct_str1 1 string def /ct_xshow { /_ct_na exch def /_ct_i 0 def currentpoint /_ct_y exch def /_ct_x exch def { pop pop ct_str1 exch 0 exch put ct_str1 show {_ct_na _ct_i get}stopped {pop pop} { _ct_x _ct_y moveto 0 rmoveto } ifelse /_ct_i _ct_i 1 add def currentpoint /_ct_y exch def /_ct_x exch def } exch @cshow }bind def /ct_yshow { /_ct_na exch def /_ct_i 0 def currentpoint /_ct_y exch def /_ct_x exch def { pop pop ct_str1 exch 0 exch put ct_str1 show {_ct_na _ct_i get}stopped {pop pop} { _ct_x _ct_y moveto 0 exch rmoveto } ifelse /_ct_i _ct_i 1 add def currentpoint /_ct_y exch def /_ct_x exch def } exch @cshow }bind def /ct_xyshow { /_ct_na exch def /_ct_i 0 def currentpoint /_ct_y exch def /_ct_x exch def { pop pop ct_str1 exch 0 exch put ct_str1 show {_ct_na _ct_i get}stopped {pop pop} { {_ct_na _ct_i 1 add get}stopped {pop pop pop} { _ct_x _ct_y moveto rmoveto } ifelse } ifelse /_ct_i _ct_i 2 add def currentpoint /_ct_y exch def /_ct_x exch def } exch @cshow }bind def /xsh{{@xshow}stopped{Adobe_CoolType_Data begin ct_xshow end}if}bind def /ysh{{@yshow}stopped{Adobe_CoolType_Data begin ct_yshow end}if}bind def /xysh{{@xyshow}stopped{Adobe_CoolType_Data begin ct_xyshow end}if}bind def currentglobal true setglobal /ct_T3Defs { /BuildChar { 1 index/Encoding get exch get 1 index/BuildGlyph get exec }bind def /BuildGlyph { exch begin GlyphProcs exch get exec end }bind def }bind def setglobal /@_SaveStackLevels { Adobe_CoolType_Data begin /@vmState currentglobal def false setglobal @opStackCountByLevel @opStackLevel 2 copy known not { 2 copy 3 dict dup/args 7 index 5 add array put put get } { get dup/args get dup length 3 index lt { dup length 5 add array exch 1 index exch 0 exch putinterval 1 index exch/args exch put } {pop} ifelse } ifelse begin count 1 sub 1 index lt {pop count} if dup/argCount exch def dup 0 gt { args exch 0 exch getinterval astore pop } {pop} ifelse count /restCount exch def end /@opStackLevel @opStackLevel 1 add def countdictstack 1 sub @dictStackCountByLevel exch @dictStackLevel exch put /@dictStackLevel @dictStackLevel 1 add def @vmState setglobal end }bind def /@_RestoreStackLevels { Adobe_CoolType_Data begin /@opStackLevel @opStackLevel 1 sub def @opStackCountByLevel @opStackLevel get begin count restCount sub dup 0 gt {{pop}repeat} {pop} ifelse args 0 argCount getinterval{}forall end /@dictStackLevel @dictStackLevel 1 sub def @dictStackCountByLevel @dictStackLevel get end countdictstack exch sub dup 0 gt {{end}repeat} {pop} ifelse }bind def /@_PopStackLevels { Adobe_CoolType_Data begin /@opStackLevel @opStackLevel 1 sub def /@dictStackLevel @dictStackLevel 1 sub def end }bind def /@Raise { exch cvx exch errordict exch get exec stop }bind def /@ReRaise { cvx $error/errorname get errordict exch get exec stop }bind def /@Stopped { 0 @#Stopped }bind def /@#Stopped { @_SaveStackLevels stopped {@_RestoreStackLevels true} {@_PopStackLevels false} ifelse }bind def /@Arg { Adobe_CoolType_Data begin @opStackCountByLevel @opStackLevel 1 sub get begin args exch argCount 1 sub exch sub get end end }bind def currentglobal true setglobal /CTHasResourceForAllBug Level2? { 1 dict dup /@shouldNotDisappearDictValue true def Adobe_CoolType_Data exch/@shouldNotDisappearDict exch put begin count @_SaveStackLevels {(*){pop stop}128 string/Category resourceforall} stopped pop @_RestoreStackLevels currentdict Adobe_CoolType_Data/@shouldNotDisappearDict get dup 3 1 roll ne dup 3 1 roll { /@shouldNotDisappearDictValue known { { end currentdict 1 index eq {pop exit} if } loop } if } { pop end } ifelse } {false} ifelse def true setglobal /CTHasResourceStatusBug Level2? { mark {/steveamerige/Category resourcestatus} stopped {cleartomark true} {cleartomark currentglobal not} ifelse } {false} ifelse def setglobal /CTResourceStatus { mark 3 1 roll /Category findresource begin ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec {cleartomark false} {{3 2 roll pop true}{cleartomark false}ifelse} ifelse end }bind def /CTWorkAroundBugs { Level2? { /cid_PreLoad/ProcSet resourcestatus { pop pop currentglobal mark { (*) { dup/CMap CTHasResourceStatusBug {CTResourceStatus} {resourcestatus} ifelse { pop dup 0 eq exch 1 eq or { dup/CMap findresource gcheck setglobal /CMap undefineresource } { pop CTHasResourceForAllBug {exit} {stop} ifelse } ifelse } {pop} ifelse } 128 string/CMap resourceforall } stopped {cleartomark} stopped pop setglobal } if } if }bind def /ds { Adobe_CoolType_Core begin CTWorkAroundBugs /mo/moveto load def /nf/newencodedfont load def /msf{makefont setfont}bind def /uf{dup undefinefont ct_VMDictUndef}bind def /ur/undefineresource load def /chp/charpath load def /awsh/awidthshow load def /wsh/widthshow load def /ash/ashow load def /@xshow/xshow load def /@yshow/yshow load def /@xyshow/xyshow load def /@cshow/cshow load def /sh/show load def /rp/repeat load def /.n/.notdef def end currentglobal false setglobal userdict/Adobe_CoolType_Data 2 copy known not {2 copy 10 dict put} if get begin /AddWidths? false def /CC 0 def /charcode 2 string def /@opStackCountByLevel 32 dict def /@opStackLevel 0 def /@dictStackCountByLevel 32 dict def /@dictStackLevel 0 def /InVMFontsByCMap 10 dict def /InVMDeepCopiedFonts 10 dict def end setglobal }bind def /dt { currentdict Adobe_CoolType_Core eq {end} if }bind def /ps { Adobe_CoolType_Core begin Adobe_CoolType_GVMFonts begin Adobe_CoolType_LVMFonts begin SharedFontDirectory begin }bind def /pt { end end end end }bind def /unload { systemdict/languagelevel known { systemdict/languagelevel get 2 ge { userdict/Adobe_CoolType_Core 2 copy known {undef} {pop pop} ifelse } if } if }bind def /ndf { 1 index where {pop pop pop} {dup xcheck{bind}if def} ifelse }def /findfont systemdict begin userdict begin /globaldict where{/globaldict get begin}if dup where pop exch get /globaldict where{pop end}if end end Adobe_CoolType_Core_Defined {/systemfindfont exch def} { /findfont 1 index def /systemfindfont exch def } ifelse /undefinefont {pop}ndf /copyfont { currentglobal 3 1 roll 1 index gcheck setglobal dup null eq{0}{dup length}ifelse 2 index length add 1 add dict begin exch { 1 index/FID eq {pop pop} {def} ifelse } forall dup null eq {pop} {{def}forall} ifelse currentdict end exch setglobal }bind def /copyarray { currentglobal exch dup gcheck setglobal dup length array copy exch setglobal }bind def /newencodedfont { currentglobal { SharedFontDirectory 3 index known {SharedFontDirectory 3 index get/FontReferenced known} {false} ifelse } { FontDirectory 3 index known {FontDirectory 3 index get/FontReferenced known} { SharedFontDirectory 3 index known {SharedFontDirectory 3 index get/FontReferenced known} {false} ifelse } ifelse } ifelse dup { 3 index findfont/FontReferenced get 2 index dup type/nametype eq {findfont} if ne {pop false} if } if dup { 1 index dup type/nametype eq {findfont} if dup/CharStrings known { /CharStrings get length 4 index findfont/CharStrings get length ne { pop false } if } {pop} ifelse } if { pop 1 index findfont /Encoding get exch 0 1 255 {2 copy get 3 index 3 1 roll put} for pop pop pop } { currentglobal 4 1 roll dup type/nametype eq {findfont} if dup gcheck setglobal dup dup maxlength 2 add dict begin exch { 1 index/FID ne 2 index/Encoding ne and {def} {pop pop} ifelse } forall /FontReferenced exch def /Encoding exch dup length array copy def /FontName 1 index dup type/stringtype eq{cvn}if def dup currentdict end definefont ct_VMDictPut setglobal } ifelse }bind def /SetSubstituteStrategy { $SubstituteFont begin dup type/dicttype ne {0 dict} if currentdict/$Strategies known { exch $Strategies exch 2 copy known { get 2 copy maxlength exch maxlength add dict begin {def}forall {def}forall currentdict dup/$Init known {dup/$Init get exec} if end /$Strategy exch def } {pop pop pop} ifelse } {pop pop} ifelse end }bind def /scff { $SubstituteFont begin dup type/stringtype eq {dup length exch} {null} ifelse /$sname exch def /$slen exch def /$inVMIndex $sname null eq { 1 index $str cvs dup length $slen sub $slen getinterval cvn } {$sname} ifelse def end {findfont} @Stopped { dup length 8 add string exch 1 index 0(BadFont:)putinterval 1 index exch 8 exch dup length string cvs putinterval cvn {findfont} @Stopped {pop/Courier findfont} if } if $SubstituteFont begin /$sname null def /$slen 0 def /$inVMIndex null def end }bind def /isWidthsOnlyFont { dup/WidthsOnly known {pop pop true} { dup/FDepVector known {/FDepVector get{isWidthsOnlyFont dup{exit}if}forall} { dup/FDArray known {/FDArray get{isWidthsOnlyFont dup{exit}if}forall} {pop} ifelse } ifelse } ifelse }bind def /ct_StyleDicts 4 dict dup begin /Adobe-Japan1 4 dict dup begin Level2? { /Serif /HeiseiMin-W3-83pv-RKSJ-H/Font resourcestatus {pop pop/HeiseiMin-W3} { /CIDFont/Category resourcestatus { pop pop /HeiseiMin-W3/CIDFont resourcestatus {pop pop/HeiseiMin-W3} {/Ryumin-Light} ifelse } {/Ryumin-Light} ifelse } ifelse def /SansSerif /HeiseiKakuGo-W5-83pv-RKSJ-H/Font resourcestatus {pop pop/HeiseiKakuGo-W5} { /CIDFont/Category resourcestatus { pop pop /HeiseiKakuGo-W5/CIDFont resourcestatus {pop pop/HeiseiKakuGo-W5} {/GothicBBB-Medium} ifelse } {/GothicBBB-Medium} ifelse } ifelse def /HeiseiMaruGo-W4-83pv-RKSJ-H/Font resourcestatus {pop pop/HeiseiMaruGo-W4} { /CIDFont/Category resourcestatus { pop pop /HeiseiMaruGo-W4/CIDFont resourcestatus {pop pop/HeiseiMaruGo-W4} { /Jun101-Light-RKSJ-H/Font resourcestatus {pop pop/Jun101-Light} {SansSerif} ifelse } ifelse } { /Jun101-Light-RKSJ-H/Font resourcestatus {pop pop/Jun101-Light} {SansSerif} ifelse } ifelse } ifelse /RoundSansSerif exch def /Default Serif def } { /Serif/Ryumin-Light def /SansSerif/GothicBBB-Medium def { (fonts/Jun101-Light-83pv-RKSJ-H)status }stopped {pop}{ {pop pop pop pop/Jun101-Light} {SansSerif} ifelse /RoundSansSerif exch def }ifelse /Default Serif def } ifelse end def /Adobe-Korea1 4 dict dup begin /Serif/HYSMyeongJo-Medium def /SansSerif/HYGoThic-Medium def /RoundSansSerif SansSerif def /Default Serif def end def /Adobe-GB1 4 dict dup begin /Serif/STSong-Light def /SansSerif/STHeiti-Regular def /RoundSansSerif SansSerif def /Default Serif def end def /Adobe-CNS1 4 dict dup begin /Serif/MKai-Medium def /SansSerif/MHei-Medium def /RoundSansSerif SansSerif def /Default Serif def end def end def Level2?{currentglobal true setglobal}if /ct_BoldRomanWidthProc { stringwidth 1 index 0 ne{exch .03 add exch}if setcharwidth 0 0 }bind def /ct_Type0WidthProc { dup stringwidth 0 0 moveto 2 index true charpath pathbbox 0 -1 7 index 2 div .88 setcachedevice2 pop 0 0 }bind def /ct_Type0WMode1WidthProc { dup stringwidth pop 2 div neg -0.88 2 copy moveto 0 -1 5 -1 roll true charpath pathbbox setcachedevice }bind def /cHexEncoding [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12 /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25 /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38 /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71 /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84 /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97 /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0 /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3 /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6 /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def /ct_BoldBaseFont 11 dict begin /FontType 3 def /FontMatrix[1 0 0 1 0 0]def /FontBBox[0 0 1 1]def /Encoding cHexEncoding def /_setwidthProc/ct_BoldRomanWidthProc load def /_bcstr1 1 string def /BuildChar { exch begin _basefont setfont _bcstr1 dup 0 4 -1 roll put dup _setwidthProc 3 copy moveto show _basefonto setfont moveto show end }bind def currentdict end def systemdict/composefont known { /ct_DefineIdentity-H { /Identity-H/CMap resourcestatus { pop pop } { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering(Identity)def /Supplement 0 def end def /CMapName/Identity-H def /CMapVersion 1.000 def /CMapType 1 def 1 begincodespacerange <0000><FFFF> endcodespacerange 1 begincidrange <0000><FFFF>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } ifelse } def /ct_BoldBaseCIDFont 11 dict begin /CIDFontType 1 def /CIDFontName/ct_BoldBaseCIDFont def /FontMatrix[1 0 0 1 0 0]def /FontBBox[0 0 1 1]def /_setwidthProc/ct_Type0WidthProc load def /_bcstr2 2 string def /BuildGlyph { exch begin _basefont setfont _bcstr2 1 2 index 256 mod put _bcstr2 0 3 -1 roll 256 idiv put _bcstr2 dup _setwidthProc 3 copy moveto show _basefonto setfont moveto show end }bind def currentdict end def }if Level2?{setglobal}if /ct_CopyFont{ { 1 index/FID ne 2 index/UniqueID ne and {def}{pop pop}ifelse }forall }bind def /ct_Type0CopyFont { exch dup length dict begin ct_CopyFont [ exch FDepVector { dup/FontType get 0 eq { 1 index ct_Type0CopyFont /_ctType0 exch definefont } { /_ctBaseFont exch 2 index exec } ifelse exch } forall pop ] /FDepVector exch def currentdict end }bind def /ct_MakeBoldFont { dup/ct_SyntheticBold known { dup length 3 add dict begin ct_CopyFont /ct_StrokeWidth .03 0 FontMatrix idtransform pop def /ct_SyntheticBold true def currentdict end definefont } { dup dup length 3 add dict begin ct_CopyFont /PaintType 2 def /StrokeWidth .03 0 FontMatrix idtransform pop def /dummybold currentdict end definefont dup/FontType get dup 9 ge exch 11 le and { ct_BoldBaseCIDFont dup length 3 add dict copy begin dup/CIDSystemInfo get/CIDSystemInfo exch def ct_DefineIdentity-H /_Type0Identity/Identity-H 3 -1 roll[exch]composefont /_basefont exch def /_Type0Identity/Identity-H 3 -1 roll[exch]composefont /_basefonto exch def currentdict end /CIDFont defineresource } { ct_BoldBaseFont dup length 3 add dict copy begin /_basefont exch def /_basefonto exch def currentdict end definefont } ifelse } ifelse }bind def /ct_MakeBold{ 1 index 1 index findfont currentglobal 5 1 roll dup gcheck setglobal dup /FontType get 0 eq { dup/WMode known{dup/WMode get 1 eq}{false}ifelse version length 4 ge and {version 0 4 getinterval cvi 2015 ge} {true} ifelse {/ct_Type0WidthProc} {/ct_Type0WMode1WidthProc} ifelse ct_BoldBaseFont/_setwidthProc 3 -1 roll load put {ct_MakeBoldFont}ct_Type0CopyFont definefont } { dup/_fauxfont known not 1 index/SubstMaster known not and { ct_BoldBaseFont/_setwidthProc /ct_BoldRomanWidthProc load put ct_MakeBoldFont } { 2 index 2 index eq {exch pop } { dup length dict begin ct_CopyFont currentdict end definefont } ifelse } ifelse } ifelse pop pop pop setglobal }bind def /?str1 256 string def /?set { $SubstituteFont begin /$substituteFound false def /$fontname 1 index def /$doSmartSub false def end dup findfont $SubstituteFont begin $substituteFound {false} { dup/FontName known { dup/FontName get $fontname eq 1 index/DistillerFauxFont known not and /currentdistillerparams where {pop false 2 index isWidthsOnlyFont not and} if } {false} ifelse } ifelse exch pop /$doSmartSub true def end { 5 1 roll pop pop pop pop findfont } { 1 index findfont dup/FontType get 3 eq { 6 1 roll pop pop pop pop pop false } {pop true} ifelse { $SubstituteFont begin pop pop /$styleArray 1 index def /$regOrdering 2 index def pop pop 0 1 $styleArray length 1 sub { $styleArray exch get ct_StyleDicts $regOrdering 2 copy known { get exch 2 copy known not {pop/Default} if get dup type/nametype eq { ?str1 cvs length dup 1 add exch ?str1 exch(-)putinterval exch dup length exch ?str1 exch 3 index exch putinterval add ?str1 exch 0 exch getinterval cvn } { pop pop/Unknown } ifelse } { pop pop pop pop/Unknown } ifelse } for end findfont }if } ifelse currentglobal false setglobal 3 1 roll null copyfont definefont pop setglobal }bind def setpacking userdict/$SubstituteFont 25 dict put 1 dict begin /SubstituteFont dup $error exch 2 copy known {get} {pop pop{pop/Courier}bind} ifelse def /currentdistillerparams where dup { pop pop currentdistillerparams/CannotEmbedFontPolicy 2 copy known {get/Error eq} {pop pop false} ifelse } if not { countdictstack array dictstack 0 get begin userdict begin $SubstituteFont begin /$str 128 string def /$fontpat 128 string def /$slen 0 def /$sname null def /$match false def /$fontname null def /$substituteFound false def /$inVMIndex null def /$doSmartSub true def /$depth 0 def /$fontname null def /$italicangle 26.5 def /$dstack null def /$Strategies 10 dict dup begin /$Type3Underprint { currentglobal exch false setglobal 11 dict begin /UseFont exch $WMode 0 ne { dup length dict copy dup/WMode $WMode put /UseFont exch definefont } if def /FontName $fontname dup type/stringtype eq{cvn}if def /FontType 3 def /FontMatrix[.001 0 0 .001 0 0]def /Encoding 256 array dup 0 1 255{/.notdef put dup}for pop def /FontBBox[0 0 0 0]def /CCInfo 7 dict dup begin /cc null def /x 0 def /y 0 def end def /BuildChar { exch begin CCInfo begin 1 string dup 0 3 index put exch pop /cc exch def UseFont 1000 scalefont setfont cc stringwidth/y exch def/x exch def x y setcharwidth $SubstituteFont/$Strategy get/$Underprint get exec 0 0 moveto cc show x y moveto end end }bind def currentdict end exch setglobal }bind def /$GetaTint 2 dict dup begin /$BuildFont { dup/WMode known {dup/WMode get} {0} ifelse /$WMode exch def $fontname exch dup/FontName known { dup/FontName get dup type/stringtype eq{cvn}if } {/unnamedfont} ifelse exch Adobe_CoolType_Data/InVMDeepCopiedFonts get 1 index/FontName get known { pop Adobe_CoolType_Data/InVMDeepCopiedFonts get 1 index get null copyfont } {$deepcopyfont} ifelse exch 1 index exch/FontBasedOn exch put dup/FontName $fontname dup type/stringtype eq{cvn}if put definefont Adobe_CoolType_Data/InVMDeepCopiedFonts get begin dup/FontBasedOn get 1 index def end }bind def /$Underprint { gsave x abs y abs gt {/y 1000 def} {/x -1000 def 500 120 translate} ifelse Level2? { [/Separation(All)/DeviceCMYK{0 0 0 1 pop}] setcolorspace } {0 setgray} ifelse 10 setlinewidth x .8 mul [7 3] { y mul 8 div 120 sub x 10 div exch moveto 0 y 4 div neg rlineto dup 0 rlineto 0 y 4 div rlineto closepath gsave Level2? {.2 setcolor} {.8 setgray} ifelse fill grestore stroke } forall pop grestore }bind def end def /$Oblique 1 dict dup begin /$BuildFont { currentglobal exch dup gcheck setglobal null copyfont begin /FontBasedOn currentdict/FontName known { FontName dup type/stringtype eq{cvn}if } {/unnamedfont} ifelse def /FontName $fontname dup type/stringtype eq{cvn}if def /currentdistillerparams where {pop} { /FontInfo currentdict/FontInfo known {FontInfo null copyfont} {2 dict} ifelse dup begin /ItalicAngle $italicangle def /FontMatrix FontMatrix [1 0 ItalicAngle dup sin exch cos div 1 0 0] matrix concatmatrix readonly end 4 2 roll def def } ifelse FontName currentdict end definefont exch setglobal }bind def end def /$None 1 dict dup begin /$BuildFont{}bind def end def end def /$Oblique SetSubstituteStrategy /$findfontByEnum { dup type/stringtype eq{cvn}if dup/$fontname exch def $sname null eq {$str cvs dup length $slen sub $slen getinterval} {pop $sname} ifelse $fontpat dup 0(fonts/*)putinterval exch 7 exch putinterval /$match false def $SubstituteFont/$dstack countdictstack array dictstack put mark { $fontpat 0 $slen 7 add getinterval {/$match exch def exit} $str filenameforall } stopped { cleardictstack currentdict true $SubstituteFont/$dstack get { exch { 1 index eq {pop false} {true} ifelse } {begin false} ifelse } forall pop } if cleartomark /$slen 0 def $match false ne {$match(fonts/)anchorsearch pop pop cvn} {/Courier} ifelse }bind def /$ROS 1 dict dup begin /Adobe 4 dict dup begin /Japan1 [/Ryumin-Light/HeiseiMin-W3 /GothicBBB-Medium/HeiseiKakuGo-W5 /HeiseiMaruGo-W4/Jun101-Light]def /Korea1 [/HYSMyeongJo-Medium/HYGoThic-Medium]def /GB1 [/STSong-Light/STHeiti-Regular]def /CNS1 [/MKai-Medium/MHei-Medium]def end def end def /$cmapname null def /$deepcopyfont { dup/FontType get 0 eq { 1 dict dup/FontName/copied put copyfont begin /FDepVector FDepVector copyarray 0 1 2 index length 1 sub { 2 copy get $deepcopyfont dup/FontName/copied put /copied exch definefont 3 copy put pop pop } for def currentdict end } {$Strategies/$Type3Underprint get exec} ifelse }bind def /$buildfontname { dup/CIDFont findresource/CIDSystemInfo get begin Registry length Ordering length Supplement 8 string cvs 3 copy length 2 add add add string dup 5 1 roll dup 0 Registry putinterval dup 4 index(-)putinterval dup 4 index 1 add Ordering putinterval 4 2 roll add 1 add 2 copy(-)putinterval end 1 add 2 copy 0 exch getinterval $cmapname $fontpat cvs exch anchorsearch {pop pop 3 2 roll putinterval cvn/$cmapname exch def} {pop pop pop pop pop} ifelse length $str 1 index(-)putinterval 1 add $str 1 index $cmapname $fontpat cvs putinterval $cmapname length add $str exch 0 exch getinterval cvn }bind def /$findfontByROS { /$fontname exch def $ROS Registry 2 copy known { get Ordering 2 copy known {get} {pop pop[]} ifelse } {pop pop[]} ifelse false exch { dup/CIDFont resourcestatus { pop pop save 1 index/CIDFont findresource dup/WidthsOnly known {dup/WidthsOnly get} {false} ifelse exch pop exch restore {pop} {exch pop true exit} ifelse } {pop} ifelse } forall {$str cvs $buildfontname} { false(*) { save exch dup/CIDFont findresource dup/WidthsOnly known {dup/WidthsOnly get not} {true} ifelse exch/CIDSystemInfo get dup/Registry get Registry eq exch/Ordering get Ordering eq and and {exch restore exch pop true exit} {pop restore} ifelse } $str/CIDFont resourceforall {$buildfontname} {$fontname $findfontByEnum} ifelse } ifelse }bind def end end currentdict/$error known currentdict/languagelevel known and dup {pop $error/SubstituteFont known} if dup {$error} {Adobe_CoolType_Core} ifelse begin { /SubstituteFont /CMap/Category resourcestatus { pop pop { $SubstituteFont begin /$substituteFound true def dup length $slen gt $sname null ne or $slen 0 gt and { $sname null eq {dup $str cvs dup length $slen sub $slen getinterval cvn} {$sname} ifelse Adobe_CoolType_Data/InVMFontsByCMap get 1 index 2 copy known { get false exch { pop currentglobal { GlobalFontDirectory 1 index known {exch pop true exit} {pop} ifelse } { FontDirectory 1 index known {exch pop true exit} { GlobalFontDirectory 1 index known {exch pop true exit} {pop} ifelse } ifelse } ifelse } forall } {pop pop false} ifelse { exch pop exch pop } { dup/CMap resourcestatus { pop pop dup/$cmapname exch def /CMap findresource/CIDSystemInfo get{def}forall $findfontByROS } { 128 string cvs dup(-)search { 3 1 roll search { 3 1 roll pop {dup cvi} stopped {pop pop pop pop pop $findfontByEnum} { 4 2 roll pop pop exch length exch 2 index length 2 index sub exch 1 sub -1 0 { $str cvs dup length 4 index 0 4 index 4 3 roll add getinterval exch 1 index exch 3 index exch putinterval dup/CMap resourcestatus { pop pop 4 1 roll pop pop pop dup/$cmapname exch def /CMap findresource/CIDSystemInfo get{def}forall $findfontByROS true exit } {pop} ifelse } for dup type/booleantype eq {pop} {pop pop pop $findfontByEnum} ifelse } ifelse } {pop pop pop $findfontByEnum} ifelse } {pop pop $findfontByEnum} ifelse } ifelse } ifelse } {//SubstituteFont exec} ifelse /$slen 0 def end } } { { $SubstituteFont begin /$substituteFound true def dup length $slen gt $sname null ne or $slen 0 gt and {$findfontByEnum} {//SubstituteFont exec} ifelse end } } ifelse bind readonly def Adobe_CoolType_Core/scfindfont/systemfindfont load put } { /scfindfont { $SubstituteFont begin dup systemfindfont dup/FontName known {dup/FontName get dup 3 index ne} {/noname true} ifelse dup { /$origfontnamefound 2 index def /$origfontname 4 index def/$substituteFound true def } if exch pop { $slen 0 gt $sname null ne 3 index length $slen gt or and { pop dup $findfontByEnum findfont dup maxlength 1 add dict begin {1 index/FID eq{pop pop}{def}ifelse} forall currentdict end definefont dup/FontName known{dup/FontName get}{null}ifelse $origfontnamefound ne { $origfontname $str cvs print ( substitution revised, using )print dup/FontName known {dup/FontName get}{(unspecified font)} ifelse $str cvs print(.\n)print } if } {exch pop} ifelse } {exch pop} ifelse end }bind def } ifelse end end Adobe_CoolType_Core_Defined not { Adobe_CoolType_Core/findfont { $SubstituteFont begin $depth 0 eq { /$fontname 1 index dup type/stringtype ne{$str cvs}if def /$substituteFound false def } if /$depth $depth 1 add def end scfindfont $SubstituteFont begin /$depth $depth 1 sub def $substituteFound $depth 0 eq and { $inVMIndex null ne {dup $inVMIndex $AddInVMFont} if $doSmartSub { currentdict/$Strategy known {$Strategy/$BuildFont get exec} if } if } if end }bind put } if } if end /$AddInVMFont { exch/FontName 2 copy known { get 1 dict dup begin exch 1 index gcheck def end exch Adobe_CoolType_Data/InVMFontsByCMap get exch $DictAdd } {pop pop pop} ifelse }bind def /$DictAdd { 2 copy known not {2 copy 4 index length dict put} if Level2? not { 2 copy get dup maxlength exch length 4 index length add lt 2 copy get dup length 4 index length add exch maxlength 1 index lt { 2 mul dict begin 2 copy get{forall}def 2 copy currentdict put end } {pop} ifelse } if get begin {def} forall end }bind def end end %%EndResource currentglobal true setglobal %%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.23 0 %%Copyright: Copyright 1987-2006 Adobe Systems Incorporated. %%Version: 1.23 0 systemdict/languagelevel known dup {currentglobal false setglobal} {false} ifelse exch userdict/Adobe_CoolType_Utility 2 copy known {2 copy get dup maxlength 27 add dict copy} {27 dict} ifelse put Adobe_CoolType_Utility begin /@eexecStartData <BAB431EA07F209EB8C4348311481D9D3F76E3D15246555577D87BC510ED54E 118C39697FA9F6DB58128E60EB8A12FA24D7CDD2FA94D221FA9EC8DA3E5E6A1C 4ACECC8C2D39C54E7C946031DD156C3A6B4A09AD29E1867A>def /@recognizeCIDFont null def /ct_Level2? exch def /ct_Clone? 1183615869 internaldict dup /CCRun known not exch/eCCRun known not ct_Level2? and or def ct_Level2? {globaldict begin currentglobal true setglobal} if /ct_AddStdCIDMap ct_Level2? {{ mark Adobe_CoolType_Utility/@recognizeCIDFont currentdict put { ((Hex)57 StartData 0615 1e27 2c39 1c60 d8a8 cc31 fe2b f6e0 7aa3 e541 e21c 60d8 a8c9 c3d0 6d9e 1c60 d8a8 c9c2 02d7 9a1c 60d8 a849 1c60 d8a8 cc36 74f4 1144 b13b 77)0()/SubFileDecode filter cvx exec } stopped { cleartomark Adobe_CoolType_Utility/@recognizeCIDFont get countdictstack dup array dictstack exch 1 sub -1 0 { 2 copy get 3 index eq {1 index length exch sub 1 sub{end}repeat exit} {pop} ifelse } for pop pop Adobe_CoolType_Utility/@eexecStartData get eexec } {cleartomark} ifelse }} {{ Adobe_CoolType_Utility/@eexecStartData get eexec }} ifelse bind def userdict/cid_extensions known dup{cid_extensions/cid_UpdateDB known and}if { cid_extensions begin /cid_GetCIDSystemInfo { 1 index type/stringtype eq {exch cvn exch} if cid_extensions begin dup load 2 index known { 2 copy cid_GetStatusInfo dup null ne { 1 index load 3 index get dup null eq {pop pop cid_UpdateDB} { exch 1 index/Created get eq {exch pop exch pop} {pop cid_UpdateDB} ifelse } ifelse } {pop cid_UpdateDB} ifelse } {cid_UpdateDB} ifelse end }bind def end } if ct_Level2? {end setglobal} if /ct_UseNativeCapability? systemdict/composefont known def /ct_MakeOCF 35 dict def /ct_Vars 25 dict def /ct_GlyphDirProcs 6 dict def /ct_BuildCharDict 15 dict dup begin /charcode 2 string def /dst_string 1500 string def /nullstring()def /usewidths? true def end def ct_Level2?{setglobal}{pop}ifelse ct_GlyphDirProcs begin /GetGlyphDirectory { systemdict/languagelevel known {pop/CIDFont findresource/GlyphDirectory get} { 1 index/CIDFont findresource/GlyphDirectory get dup type/dicttype eq { dup dup maxlength exch length sub 2 index lt { dup length 2 index add dict copy 2 index /CIDFont findresource/GlyphDirectory 2 index put } if } if exch pop exch pop } ifelse + }def /+ { systemdict/languagelevel known { currentglobal false setglobal 3 dict begin /vm exch def } {1 dict begin} ifelse /$ exch def systemdict/languagelevel known { vm setglobal /gvm currentglobal def $ gcheck setglobal } if ?{$ begin}if }def /?{$ type/dicttype eq}def /|{ userdict/Adobe_CoolType_Data known { Adobe_CoolType_Data/AddWidths? known { currentdict Adobe_CoolType_Data begin begin AddWidths? { Adobe_CoolType_Data/CC 3 index put ?{def}{$ 3 1 roll put}ifelse CC charcode exch 1 index 0 2 index 256 idiv put 1 index exch 1 exch 256 mod put stringwidth 2 array astore currentfont/Widths get exch CC exch put } {?{def}{$ 3 1 roll put}ifelse} ifelse end end } {?{def}{$ 3 1 roll put}ifelse} ifelse } {?{def}{$ 3 1 roll put}ifelse} ifelse }def /! { ?{end}if systemdict/languagelevel known {gvm setglobal} if end }def /:{string currentfile exch readstring pop}executeonly def end ct_MakeOCF begin /ct_cHexEncoding [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12 /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25 /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38 /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71 /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84 /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97 /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0 /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3 /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6 /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def /ct_CID_STR_SIZE 8000 def /ct_mkocfStr100 100 string def /ct_defaultFontMtx[.001 0 0 .001 0 0]def /ct_1000Mtx[1000 0 0 1000 0 0]def /ct_raise{exch cvx exch errordict exch get exec stop}bind def /ct_reraise {cvx $error/errorname get(Error: )print dup( )cvs print errordict exch get exec stop }bind def /ct_cvnsi { 1 index add 1 sub 1 exch 0 4 1 roll { 2 index exch get exch 8 bitshift add } for exch pop }bind def /ct_GetInterval { Adobe_CoolType_Utility/ct_BuildCharDict get begin /dst_index 0 def dup dst_string length gt {dup string/dst_string exch def} if 1 index ct_CID_STR_SIZE idiv /arrayIndex exch def 2 index arrayIndex get 2 index arrayIndex ct_CID_STR_SIZE mul sub { dup 3 index add 2 index length le { 2 index getinterval dst_string dst_index 2 index putinterval length dst_index add/dst_index exch def exit } { 1 index length 1 index sub dup 4 1 roll getinterval dst_string dst_index 2 index putinterval pop dup dst_index add/dst_index exch def sub /arrayIndex arrayIndex 1 add def 2 index dup length arrayIndex gt {arrayIndex get} { pop exit } ifelse 0 } ifelse } loop pop pop pop dst_string 0 dst_index getinterval end }bind def ct_Level2? { /ct_resourcestatus currentglobal mark true setglobal {/unknowninstancename/Category resourcestatus} stopped {cleartomark setglobal true} {cleartomark currentglobal not exch setglobal} ifelse { { mark 3 1 roll/Category findresource begin ct_Vars/vm currentglobal put ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec {cleartomark false} {{3 2 roll pop true}{cleartomark false}ifelse} ifelse ct_Vars/vm get setglobal end } } {{resourcestatus}} ifelse bind def /CIDFont/Category ct_resourcestatus {pop pop} { currentglobal true setglobal /Generic/Category findresource dup length dict copy dup/InstanceType/dicttype put /CIDFont exch/Category defineresource pop setglobal } ifelse ct_UseNativeCapability? { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering(Identity)def /Supplement 0 def end def /CMapName/Identity-H def /CMapVersion 1.000 def /CMapType 1 def 1 begincodespacerange <0000><FFFF> endcodespacerange 1 begincidrange <0000><FFFF>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } if } { /ct_Category 2 dict begin /CIDFont 10 dict def /ProcSet 2 dict def currentdict end def /defineresource { ct_Category 1 index 2 copy known { get dup dup maxlength exch length eq { dup length 10 add dict copy ct_Category 2 index 2 index put } if 3 index 3 index put pop exch pop } {pop pop/defineresource/undefined ct_raise} ifelse }bind def /findresource { ct_Category 1 index 2 copy known { get 2 index 2 copy known {get 3 1 roll pop pop} {pop pop/findresource/undefinedresource ct_raise} ifelse } {pop pop/findresource/undefined ct_raise} ifelse }bind def /resourcestatus { ct_Category 1 index 2 copy known { get 2 index known exch pop exch pop { 0 -1 true } { false } ifelse } {pop pop/findresource/undefined ct_raise} ifelse }bind def /ct_resourcestatus/resourcestatus load def } ifelse /ct_CIDInit 2 dict begin /ct_cidfont_stream_init { { dup(Binary)eq { pop null currentfile ct_Level2? { {cid_BYTE_COUNT()/SubFileDecode filter} stopped {pop pop pop} if } if /readstring load exit } if dup(Hex)eq { pop currentfile ct_Level2? { {null exch/ASCIIHexDecode filter/readstring} stopped {pop exch pop(>)exch/readhexstring} if } {(>)exch/readhexstring} ifelse load exit } if /StartData/typecheck ct_raise } loop cid_BYTE_COUNT ct_CID_STR_SIZE le { 2 copy cid_BYTE_COUNT string exch exec pop 1 array dup 3 -1 roll 0 exch put } { cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi dup array exch 2 sub 0 exch 1 exch { 2 copy 5 index ct_CID_STR_SIZE string 6 index exec pop put pop } for 2 index cid_BYTE_COUNT ct_CID_STR_SIZE mod string 3 index exec pop 1 index exch 1 index length 1 sub exch put } ifelse cid_CIDFONT exch/GlyphData exch put 2 index null eq { pop pop pop } { pop/readstring load 1 string exch { 3 copy exec pop dup length 0 eq { pop pop pop pop pop true exit } if 4 index eq { pop pop pop pop false exit } if } loop pop } ifelse }bind def /StartData { mark { currentdict dup/FDArray get 0 get/FontMatrix get 0 get 0.001 eq { dup/CDevProc known not { /CDevProc 1183615869 internaldict/stdCDevProc 2 copy known {get} { pop pop {pop pop pop pop pop 0 -1000 7 index 2 div 880} } ifelse def } if } { /CDevProc { pop pop pop pop pop 0 1 cid_temp/cid_CIDFONT get /FDArray get 0 get /FontMatrix get 0 get div 7 index 2 div 1 index 0.88 mul }def } ifelse /cid_temp 15 dict def cid_temp begin /cid_CIDFONT exch def 3 copy pop dup/cid_BYTE_COUNT exch def 0 gt { ct_cidfont_stream_init FDArray { /Private get dup/SubrMapOffset known { begin /Subrs SubrCount array def Subrs SubrMapOffset SubrCount SDBytes ct_Level2? { currentdict dup/SubrMapOffset undef dup/SubrCount undef /SDBytes undef } if end /cid_SD_BYTES exch def /cid_SUBR_COUNT exch def /cid_SUBR_MAP_OFFSET exch def /cid_SUBRS exch def cid_SUBR_COUNT 0 gt { GlyphData cid_SUBR_MAP_OFFSET cid_SD_BYTES ct_GetInterval 0 cid_SD_BYTES ct_cvnsi 0 1 cid_SUBR_COUNT 1 sub { exch 1 index 1 add cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add GlyphData exch cid_SD_BYTES ct_GetInterval 0 cid_SD_BYTES ct_cvnsi cid_SUBRS 4 2 roll GlyphData exch 4 index 1 index sub ct_GetInterval dup length string copy put } for pop } if } {pop} ifelse } forall } if cleartomark pop pop end CIDFontName currentdict/CIDFont defineresource pop end end } stopped {cleartomark/StartData ct_reraise} if }bind def currentdict end def /ct_saveCIDInit { /CIDInit/ProcSet ct_resourcestatus {true} {/CIDInitC/ProcSet ct_resourcestatus} ifelse { pop pop /CIDInit/ProcSet findresource ct_UseNativeCapability? {pop null} {/CIDInit ct_CIDInit/ProcSet defineresource pop} ifelse } {/CIDInit ct_CIDInit/ProcSet defineresource pop null} ifelse ct_Vars exch/ct_oldCIDInit exch put }bind def /ct_restoreCIDInit { ct_Vars/ct_oldCIDInit get dup null ne {/CIDInit exch/ProcSet defineresource pop} {pop} ifelse }bind def /ct_BuildCharSetUp { 1 index begin CIDFont begin Adobe_CoolType_Utility/ct_BuildCharDict get begin /ct_dfCharCode exch def /ct_dfDict exch def CIDFirstByte ct_dfCharCode add dup CIDCount ge {pop 0} if /cid exch def { GlyphDirectory cid 2 copy known {get} {pop pop nullstring} ifelse dup length FDBytes sub 0 gt { dup FDBytes 0 ne {0 FDBytes ct_cvnsi} {pop 0} ifelse /fdIndex exch def dup length FDBytes sub FDBytes exch getinterval /charstring exch def exit } { pop cid 0 eq {/charstring nullstring def exit} if /cid 0 def } ifelse } loop }def /ct_SetCacheDevice { 0 0 moveto dup stringwidth 3 -1 roll true charpath pathbbox 0 -1000 7 index 2 div 880 setcachedevice2 0 0 moveto }def /ct_CloneSetCacheProc { 1 eq { stringwidth pop -2 div -880 0 -1000 setcharwidth moveto } { usewidths? { currentfont/Widths get cid 2 copy known {get exch pop aload pop} {pop pop stringwidth} ifelse } {stringwidth} ifelse setcharwidth 0 0 moveto } ifelse }def /ct_Type3ShowCharString { ct_FDDict fdIndex 2 copy known {get} { currentglobal 3 1 roll 1 index gcheck setglobal ct_Type1FontTemplate dup maxlength dict copy begin FDArray fdIndex get dup/FontMatrix 2 copy known {get} {pop pop ct_defaultFontMtx} ifelse /FontMatrix exch dup length array copy def /Private get /Private exch def /Widths rootfont/Widths get def /CharStrings 1 dict dup/.notdef <d841272cf18f54fc13>dup length string copy put def currentdict end /ct_Type1Font exch definefont dup 5 1 roll put setglobal } ifelse dup/CharStrings get 1 index/Encoding get ct_dfCharCode get charstring put rootfont/WMode 2 copy known {get} {pop pop 0} ifelse exch 1000 scalefont setfont ct_str1 0 ct_dfCharCode put ct_str1 exch ct_dfSetCacheProc ct_SyntheticBold { currentpoint ct_str1 show newpath moveto ct_str1 true charpath ct_StrokeWidth setlinewidth stroke } {ct_str1 show} ifelse }def /ct_Type4ShowCharString { ct_dfDict ct_dfCharCode charstring FDArray fdIndex get dup/FontMatrix get dup ct_defaultFontMtx ct_matrixeq not {ct_1000Mtx matrix concatmatrix concat} {pop} ifelse /Private get Adobe_CoolType_Utility/ct_Level2? get not { ct_dfDict/Private 3 -1 roll {put} 1183615869 internaldict/superexec get exec } if 1183615869 internaldict Adobe_CoolType_Utility/ct_Level2? get {1 index} {3 index/Private get mark 6 1 roll} ifelse dup/RunInt known {/RunInt get} {pop/CCRun} ifelse get exec Adobe_CoolType_Utility/ct_Level2? get not {cleartomark} if }bind def /ct_BuildCharIncremental { { Adobe_CoolType_Utility/ct_MakeOCF get begin ct_BuildCharSetUp ct_ShowCharString } stopped {stop} if end end end end }bind def /BaseFontNameStr(BF00)def /ct_Type1FontTemplate 14 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0]def /FontBBox [-250 -250 1250 1250]def /Encoding ct_cHexEncoding def /PaintType 0 def currentdict end def /BaseFontTemplate 11 dict begin /FontMatrix [0.001 0 0 0.001 0 0]def /FontBBox [-250 -250 1250 1250]def /Encoding ct_cHexEncoding def /BuildChar/ct_BuildCharIncremental load def ct_Clone? { /FontType 3 def /ct_ShowCharString/ct_Type3ShowCharString load def /ct_dfSetCacheProc/ct_CloneSetCacheProc load def /ct_SyntheticBold false def /ct_StrokeWidth 1 def } { /FontType 4 def /Private 1 dict dup/lenIV 4 put def /CharStrings 1 dict dup/.notdef<d841272cf18f54fc13>put def /PaintType 0 def /ct_ShowCharString/ct_Type4ShowCharString load def } ifelse /ct_str1 1 string def currentdict end def /BaseFontDictSize BaseFontTemplate length 5 add def /ct_matrixeq { true 0 1 5 { dup 4 index exch get exch 3 index exch get eq and dup not {exit} if } for exch pop exch pop }bind def /ct_makeocf { 15 dict begin exch/WMode exch def exch/FontName exch def /FontType 0 def /FMapType 2 def dup/FontMatrix known {dup/FontMatrix get/FontMatrix exch def} {/FontMatrix matrix def} ifelse /bfCount 1 index/CIDCount get 256 idiv 1 add dup 256 gt{pop 256}if def /Encoding 256 array 0 1 bfCount 1 sub{2 copy dup put pop}for bfCount 1 255{2 copy bfCount put pop}for def /FDepVector bfCount dup 256 lt{1 add}if array def BaseFontTemplate BaseFontDictSize dict copy begin /CIDFont exch def CIDFont/FontBBox known {CIDFont/FontBBox get/FontBBox exch def} if CIDFont/CDevProc known {CIDFont/CDevProc get/CDevProc exch def} if currentdict end BaseFontNameStr 3(0)putinterval 0 1 bfCount dup 256 eq{1 sub}if { FDepVector exch 2 index BaseFontDictSize dict copy begin dup/CIDFirstByte exch 256 mul def FontType 3 eq {/ct_FDDict 2 dict def} if currentdict end 1 index 16 BaseFontNameStr 2 2 getinterval cvrs pop BaseFontNameStr exch definefont put } for ct_Clone? {/Widths 1 index/CIDFont get/GlyphDirectory get length dict def} if FontName currentdict end definefont ct_Clone? { gsave dup 1000 scalefont setfont ct_BuildCharDict begin /usewidths? false def currentfont/Widths get begin exch/CIDFont get/GlyphDirectory get { pop dup charcode exch 1 index 0 2 index 256 idiv put 1 index exch 1 exch 256 mod put stringwidth 2 array astore def } forall end /usewidths? true def end grestore } {exch pop} ifelse }bind def currentglobal true setglobal /ct_ComposeFont { ct_UseNativeCapability? { 2 index/CMap ct_resourcestatus {pop pop exch pop} { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CMapName 3 index def /CMapVersion 1.000 def /CMapType 1 def exch/WMode exch def /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering CMapName ct_mkocfStr100 cvs (Adobe-)search { pop pop (-)search { dup length string copy exch pop exch pop } {pop(Identity)} ifelse } {pop (Identity)} ifelse def /Supplement 0 def end def 1 begincodespacerange <0000><FFFF> endcodespacerange 1 begincidrange <0000><FFFF>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } ifelse composefont } { 3 2 roll pop 0 get/CIDFont findresource ct_makeocf } ifelse }bind def setglobal /ct_MakeIdentity { ct_UseNativeCapability? { 1 index/CMap ct_resourcestatus {pop pop} { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CMapName 2 index def /CMapVersion 1.000 def /CMapType 1 def /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering CMapName ct_mkocfStr100 cvs (Adobe-)search { pop pop (-)search {dup length string copy exch pop exch pop} {pop(Identity)} ifelse } {pop(Identity)} ifelse def /Supplement 0 def end def 1 begincodespacerange <0000><FFFF> endcodespacerange 1 begincidrange <0000><FFFF>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } ifelse composefont } { exch pop 0 get/CIDFont findresource ct_makeocf } ifelse }bind def currentdict readonly pop end end %%EndResource setglobal %%BeginResource: procset Adobe_CoolType_Utility_T42 1.0 0 %%Copyright: Copyright 1987-2004 Adobe Systems Incorporated. %%Version: 1.0 0 userdict/ct_T42Dict 15 dict put ct_T42Dict begin /Is2015? { version cvi 2015 ge }bind def /AllocGlyphStorage { Is2015? { pop } { {string}forall }ifelse }bind def /Type42DictBegin { 25 dict begin /FontName exch def /CharStrings 256 dict begin /.notdef 0 def currentdict end def /Encoding exch def /PaintType 0 def /FontType 42 def /FontMatrix[1 0 0 1 0 0]def 4 array astore cvx/FontBBox exch def /sfnts }bind def /Type42DictEnd { currentdict dup/FontName get exch definefont end ct_T42Dict exch dup/FontName get exch put }bind def /RD{string currentfile exch readstring pop}executeonly def /PrepFor2015 { Is2015? { /GlyphDirectory 16 dict def sfnts 0 get dup 2 index (glyx) putinterval 2 index (locx) putinterval pop pop } { pop pop }ifelse }bind def /AddT42Char { Is2015? { /GlyphDirectory get begin def end pop pop } { /sfnts get 4 index get 3 index 2 index putinterval pop pop pop pop }ifelse }bind def /T0AddT42Mtx2 { /CIDFont findresource/Metrics2 get begin def end }bind def end %%EndResource currentglobal true setglobal %%BeginFile: MMFauxFont.prc %%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. %%All Rights Reserved. userdict /ct_EuroDict 10 dict put ct_EuroDict begin /ct_CopyFont { { 1 index /FID ne {def} {pop pop} ifelse} forall } def /ct_GetGlyphOutline { gsave initmatrix newpath exch findfont dup length 1 add dict begin ct_CopyFont /Encoding Encoding dup length array copy dup 4 -1 roll 0 exch put def currentdict end /ct_EuroFont exch definefont 1000 scalefont setfont 0 0 moveto [ <00> stringwidth <00> false charpath pathbbox [ {/m cvx} {/l cvx} {/c cvx} {/cp cvx} pathforall grestore counttomark 8 add } def /ct_MakeGlyphProc { ] cvx /ct_PSBuildGlyph cvx ] cvx } def /ct_PSBuildGlyph { gsave 8 -1 roll pop 7 1 roll 6 -2 roll ct_FontMatrix transform 6 2 roll 4 -2 roll ct_FontMatrix transform 4 2 roll ct_FontMatrix transform currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse dup 9 1 roll { currentdict /StrokeWidth 2 copy known { get 2 div 0 ct_FontMatrix dtransform pop 5 1 roll 4 -1 roll 4 index sub 4 1 roll 3 -1 roll 4 index sub 3 1 roll exch 4 index add exch 4 index add 5 -1 roll pop } { pop pop } ifelse } if setcachedevice ct_FontMatrix concat ct_PSPathOps begin exec end { currentdict /StrokeWidth 2 copy known { get } { pop pop 0 } ifelse setlinewidth stroke } { fill } ifelse grestore } def /ct_PSPathOps 4 dict dup begin /m {moveto} def /l {lineto} def /c {curveto} def /cp {closepath} def end def /ct_matrix1000 [1000 0 0 1000 0 0] def /ct_AddGlyphProc { 2 index findfont dup length 4 add dict begin ct_CopyFont /CharStrings CharStrings dup length 1 add dict copy begin 3 1 roll def currentdict end def /ct_FontMatrix ct_matrix1000 FontMatrix matrix concatmatrix def /ct_PSBuildGlyph /ct_PSBuildGlyph load def /ct_PSPathOps /ct_PSPathOps load def currentdict end definefont pop } def systemdict /languagelevel known { /ct_AddGlyphToPrinterFont { 2 copy ct_GetGlyphOutline 3 add -1 roll restore ct_MakeGlyphProc ct_AddGlyphProc } def } { /ct_AddGlyphToPrinterFont { pop pop restore Adobe_CTFauxDict /$$$FONTNAME get /Euro Adobe_CTFauxDict /$$$SUBSTITUTEBASE get ct_EuroDict exch get ct_AddGlyphProc } def } ifelse /AdobeSansMM { 556 0 24 -19 541 703 { 541 628 m 510 669 442 703 354 703 c 201 703 117 607 101 444 c 50 444 l 25 372 l 97 372 l 97 301 l 49 301 l 24 229 l 103 229 l 124 67 209 -19 350 -19 c 435 -19 501 25 509 32 c 509 131 l 492 105 417 60 343 60 c 267 60 204 127 197 229 c 406 229 l 430 301 l 191 301 l 191 372 l 455 372 l 479 444 l 194 444 l 201 531 245 624 348 624 c 433 624 484 583 509 534 c cp 556 0 m } ct_PSBuildGlyph } def /AdobeSerifMM { 500 0 10 -12 484 692 { 347 298 m 171 298 l 170 310 170 322 170 335 c 170 362 l 362 362 l 374 403 l 172 403 l 184 580 244 642 308 642 c 380 642 434 574 457 457 c 481 462 l 474 691 l 449 691 l 433 670 429 657 410 657 c 394 657 360 692 299 692 c 204 692 94 604 73 403 c 22 403 l 10 362 l 70 362 l 69 352 69 341 69 330 c 69 319 69 308 70 298 c 22 298 l 10 257 l 73 257 l 97 57 216 -12 295 -12 c 364 -12 427 25 484 123 c 458 142 l 425 101 384 37 316 37 c 256 37 189 84 173 257 c 335 257 l cp 500 0 m } ct_PSBuildGlyph } def end %%EndFile setglobal Adobe_CoolType_Core begin /$Oblique SetSubstituteStrategy end %%BeginResource: procset Adobe_AGM_Image 1.0 0
-%%Version: 1.0 0
-%%Copyright: Copyright(C)2000-2006 Adobe Systems, Inc. All Rights Reserved.
-systemdict/setpacking known
-{
- currentpacking
- true setpacking
-}if
-userdict/Adobe_AGM_Image 71 dict dup begin put
-/Adobe_AGM_Image_Id/Adobe_AGM_Image_1.0_0 def
-/nd{
- null def
-}bind def
-/AGMIMG_&image nd
-/AGMIMG_&colorimage nd
-/AGMIMG_&imagemask nd
-/AGMIMG_mbuf()def
-/AGMIMG_ybuf()def
-/AGMIMG_kbuf()def
-/AGMIMG_c 0 def
-/AGMIMG_m 0 def
-/AGMIMG_y 0 def
-/AGMIMG_k 0 def
-/AGMIMG_tmp nd
-/AGMIMG_imagestring0 nd
-/AGMIMG_imagestring1 nd
-/AGMIMG_imagestring2 nd
-/AGMIMG_imagestring3 nd
-/AGMIMG_imagestring4 nd
-/AGMIMG_imagestring5 nd
-/AGMIMG_cnt nd
-/AGMIMG_fsave nd
-/AGMIMG_colorAry nd
-/AGMIMG_override nd
-/AGMIMG_name nd
-/AGMIMG_maskSource nd
-/AGMIMG_flushfilters nd
-/invert_image_samples nd
-/knockout_image_samples nd
-/img nd
-/sepimg nd
-/devnimg nd
-/idximg nd
-/ds
-{
- Adobe_AGM_Core begin
- Adobe_AGM_Image begin
- /AGMIMG_&image systemdict/image get def
- /AGMIMG_&imagemask systemdict/imagemask get def
- /colorimage where{
- pop
- /AGMIMG_&colorimage/colorimage ldf
- }if
- end
- end
-}def
-/ps
-{
- Adobe_AGM_Image begin
- /AGMIMG_ccimage_exists{/customcolorimage where
- {
- pop
- /Adobe_AGM_OnHost_Seps where
- {
- pop false
- }{
- /Adobe_AGM_InRip_Seps where
- {
- pop false
- }{
- true
- }ifelse
- }ifelse
- }{
- false
- }ifelse
- }bdf
- level2{
- /invert_image_samples
- {
- Adobe_AGM_Image/AGMIMG_tmp Decode length ddf
- /Decode[Decode 1 get Decode 0 get]def
- }def
- /knockout_image_samples
- {
- Operator/imagemask ne{
- /Decode[1 1]def
- }if
- }def
- }{
- /invert_image_samples
- {
- {1 exch sub}currenttransfer addprocs settransfer
- }def
- /knockout_image_samples
- {
- {pop 1}currenttransfer addprocs settransfer
- }def
- }ifelse
- /img/imageormask ldf
- /sepimg/sep_imageormask ldf
- /devnimg/devn_imageormask ldf
- /idximg/indexed_imageormask ldf
- /_ctype 7 def
- currentdict{
- dup xcheck 1 index type dup/arraytype eq exch/packedarraytype eq or and{
- bind
- }if
- def
- }forall
-}def
-/pt
-{
- end
-}def
-/dt
-{
-}def
-/AGMIMG_flushfilters
-{
- dup type/arraytype ne
- {1 array astore}if
- dup 0 get currentfile ne
- {dup 0 get flushfile}if
- {
- dup type/filetype eq
- {
- dup status 1 index currentfile ne and
- {closefile}
- {pop}
- ifelse
- }{pop}ifelse
- }forall
-}def
-/AGMIMG_init_common
-{
- currentdict/T known{/ImageType/T ldf currentdict/T undef}if
- currentdict/W known{/Width/W ldf currentdict/W undef}if
- currentdict/H known{/Height/H ldf currentdict/H undef}if
- currentdict/M known{/ImageMatrix/M ldf currentdict/M undef}if
- currentdict/BC known{/BitsPerComponent/BC ldf currentdict/BC undef}if
- currentdict/D known{/Decode/D ldf currentdict/D undef}if
- currentdict/DS known{/DataSource/DS ldf currentdict/DS undef}if
- currentdict/O known{
- /Operator/O load 1 eq{
- /imagemask
- }{
- /O load 2 eq{
- /image
- }{
- /colorimage
- }ifelse
- }ifelse
- def
- currentdict/O undef
- }if
- currentdict/HSCI known{/HostSepColorImage/HSCI ldf currentdict/HSCI undef}if
- currentdict/MD known{/MultipleDataSources/MD ldf currentdict/MD undef}if
- currentdict/I known{/Interpolate/I ldf currentdict/I undef}if
- currentdict/SI known{/SkipImageProc/SI ldf currentdict/SI undef}if
- /DataSource load xcheck not{
- DataSource type/arraytype eq{
- DataSource 0 get type/filetype eq{
- /_Filters DataSource def
- currentdict/MultipleDataSources known not{
- /DataSource DataSource dup length 1 sub get def
- }if
- }if
- }if
- currentdict/MultipleDataSources known not{
- /MultipleDataSources DataSource type/arraytype eq{
- DataSource length 1 gt
- }
- {false}ifelse def
- }if
- }if
- /NComponents Decode length 2 div def
- currentdict/SkipImageProc known not{/SkipImageProc{false}def}if
-}bdf
-/imageormask_sys
-{
- begin
- AGMIMG_init_common
- save mark
- level2{
- currentdict
- Operator/imagemask eq{
- AGMIMG_&imagemask
- }{
- use_mask{
- process_mask AGMIMG_&image
- }{
- AGMIMG_&image
- }ifelse
- }ifelse
- }{
- Width Height
- Operator/imagemask eq{
- Decode 0 get 1 eq Decode 1 get 0 eq and
- ImageMatrix/DataSource load
- AGMIMG_&imagemask
- }{
- BitsPerComponent ImageMatrix/DataSource load
- AGMIMG_&image
- }ifelse
- }ifelse
- currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
- cleartomark restore
- end
-}def
-/overprint_plate
-{
- currentoverprint{
- 0 get dup type/nametype eq{
- dup/DeviceGray eq{
- pop AGMCORE_black_plate not
- }{
- /DeviceCMYK eq{
- AGMCORE_is_cmyk_sep not
- }if
- }ifelse
- }{
- false exch
- {
- AGMOHS_sepink eq or
- }forall
- not
- }ifelse
- }{
- pop false
- }ifelse
-}def
-/process_mask
-{
- level3{
- dup begin
- /ImageType 1 def
- end
- 4 dict begin
- /DataDict exch def
- /ImageType 3 def
- /InterleaveType 3 def
- /MaskDict 9 dict begin
- /ImageType 1 def
- /Width DataDict dup/MaskWidth known{/MaskWidth}{/Width}ifelse get def
- /Height DataDict dup/MaskHeight known{/MaskHeight}{/Height}ifelse get def
- /ImageMatrix[Width 0 0 Height neg 0 Height]def
- /NComponents 1 def
- /BitsPerComponent 1 def
- /Decode DataDict dup/MaskD known{/MaskD}{[1 0]}ifelse get def
- /DataSource Adobe_AGM_Core/AGMIMG_maskSource get def
- currentdict end def
- currentdict end
- }if
-}def
-/use_mask
-{
- dup/Mask known {dup/Mask get}{false}ifelse
-}def
-/imageormask
-{
- begin
- AGMIMG_init_common
- SkipImageProc{
- currentdict consumeimagedata
- }
- {
- save mark
- level2 AGMCORE_host_sep not and{
- currentdict
- Operator/imagemask eq DeviceN_PS2 not and{
- imagemask
- }{
- AGMCORE_in_rip_sep currentoverprint and currentcolorspace 0 get/DeviceGray eq and{
- [/Separation/Black/DeviceGray{}]setcolorspace
- /Decode[Decode 1 get Decode 0 get]def
- }if
- use_mask{
- process_mask image
- }{
- DeviceN_NoneName DeviceN_PS2 Indexed_DeviceN level3 not and or or AGMCORE_in_rip_sep and
- {
- Names convert_to_process not{
- 2 dict begin
- /imageDict xdf
- /names_index 0 def
- gsave
- imageDict write_image_file{
- Names{
- dup(None)ne{
- [/Separation 3 -1 roll/DeviceGray{1 exch sub}]setcolorspace
- Operator imageDict read_image_file
- names_index 0 eq{true setoverprint}if
- /names_index names_index 1 add def
- }{
- pop
- }ifelse
- }forall
- close_image_file
- }if
- grestore
- end
- }{
- Operator/imagemask eq{
- imagemask
- }{
- image
- }ifelse
- }ifelse
- }{
- Operator/imagemask eq{
- imagemask
- }{
- image
- }ifelse
- }ifelse
- }ifelse
- }ifelse
- }{
- Width Height
- Operator/imagemask eq{
- Decode 0 get 1 eq Decode 1 get 0 eq and
- ImageMatrix/DataSource load
- /Adobe_AGM_OnHost_Seps where{
- pop imagemask
- }{
- currentgray 1 ne{
- currentdict imageormask_sys
- }{
- currentoverprint not{
- 1 AGMCORE_&setgray
- currentdict imageormask_sys
- }{
- currentdict ignoreimagedata
- }ifelse
- }ifelse
- }ifelse
- }{
- BitsPerComponent ImageMatrix
- MultipleDataSources{
- 0 1 NComponents 1 sub{
- DataSource exch get
- }for
- }{
- /DataSource load
- }ifelse
- Operator/colorimage eq{
- AGMCORE_host_sep{
- MultipleDataSources level2 or NComponents 4 eq and{
- AGMCORE_is_cmyk_sep{
- MultipleDataSources{
- /DataSource DataSource 0 get xcheck
- {
- [
- DataSource 0 get/exec cvx
- DataSource 1 get/exec cvx
- DataSource 2 get/exec cvx
- DataSource 3 get/exec cvx
- /AGMCORE_get_ink_data cvx
- ]cvx
- }{
- DataSource aload pop AGMCORE_get_ink_data
- }ifelse def
- }{
- /DataSource
- Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul
- /DataSource load
- filter_cmyk 0()/SubFileDecode filter def
- }ifelse
- /Decode[Decode 0 get Decode 1 get]def
- /MultipleDataSources false def
- /NComponents 1 def
- /Operator/image def
- invert_image_samples
- 1 AGMCORE_&setgray
- currentdict imageormask_sys
- }{
- currentoverprint not Operator/imagemask eq and{
- 1 AGMCORE_&setgray
- currentdict imageormask_sys
- }{
- currentdict ignoreimagedata
- }ifelse
- }ifelse
- }{
- MultipleDataSources NComponents AGMIMG_&colorimage
- }ifelse
- }{
- true NComponents colorimage
- }ifelse
- }{
- Operator/image eq{
- AGMCORE_host_sep{
- /DoImage true def
- currentdict/HostSepColorImage known{HostSepColorImage not}{false}ifelse
- {
- AGMCORE_black_plate not Operator/imagemask ne and{
- /DoImage false def
- currentdict ignoreimagedata
- }if
- }if
- 1 AGMCORE_&setgray
- DoImage
- {currentdict imageormask_sys}if
- }{
- use_mask{
- process_mask image
- }{
- image
- }ifelse
- }ifelse
- }{
- Operator/knockout eq{
- pop pop pop pop pop
- currentcolorspace overprint_plate not{
- knockout_unitsq
- }if
- }if
- }ifelse
- }ifelse
- }ifelse
- }ifelse
- cleartomark restore
- }ifelse
- currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
- end
-}def
-/sep_imageormask
-{
- /sep_colorspace_dict AGMCORE_gget begin
- CSA map_csa
- begin
- AGMIMG_init_common
- SkipImageProc{
- currentdict consumeimagedata
- }{
- save mark
- AGMCORE_avoid_L2_sep_space{
- /Decode[Decode 0 get 255 mul Decode 1 get 255 mul]def
- }if
- AGMIMG_ccimage_exists
- MappedCSA 0 get/DeviceCMYK eq and
- currentdict/Components known and
- Name()ne and
- Name(All)ne and
- Operator/image eq and
- AGMCORE_producing_seps not and
- level2 not and
- {
- Width Height BitsPerComponent ImageMatrix
- [
- /DataSource load/exec cvx
- {
- 0 1 2 index length 1 sub{
- 1 index exch
- 2 copy get 255 xor put
- }for
- }/exec cvx
- ]cvx bind
- MappedCSA 0 get/DeviceCMYK eq{
- Components aload pop
- }{
- 0 0 0 Components aload pop 1 exch sub
- }ifelse
- Name findcmykcustomcolor
- customcolorimage
- }{
- AGMCORE_producing_seps not{
- level2{
- //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne AGMCORE_avoid_L2_sep_space not and currentcolorspace 0 get/Separation ne and{
- [/Separation Name MappedCSA sep_proc_name exch dup 0 get 15 string cvs(/Device)anchorsearch{pop pop 0 get}{pop}ifelse exch load]setcolorspace_opt
- /sep_tint AGMCORE_gget setcolor
- }if
- currentdict imageormask
- }{
- currentdict
- Operator/imagemask eq{
- imageormask
- }{
- sep_imageormask_lev1
- }ifelse
- }ifelse
- }{
- AGMCORE_host_sep{
- Operator/knockout eq{
- currentdict/ImageMatrix get concat
- knockout_unitsq
- }{
- currentgray 1 ne{
- AGMCORE_is_cmyk_sep Name(All)ne and{
- level2{
- Name AGMCORE_IsSeparationAProcessColor
- {
- Operator/imagemask eq{
- //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{
- /sep_tint AGMCORE_gget 1 exch sub AGMCORE_&setcolor
- }if
- }{
- invert_image_samples
- }ifelse
- }{
- //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{
- [/Separation Name[/DeviceGray]
- {
- sep_colorspace_proc AGMCORE_get_ink_data
- 1 exch sub
- }bind
- ]AGMCORE_&setcolorspace
- /sep_tint AGMCORE_gget AGMCORE_&setcolor
- }if
- }ifelse
- currentdict imageormask_sys
- }{
- currentdict
- Operator/imagemask eq{
- imageormask_sys
- }{
- sep_image_lev1_sep
- }ifelse
- }ifelse
- }{
- Operator/imagemask ne{
- invert_image_samples
- }if
- currentdict imageormask_sys
- }ifelse
- }{
- currentoverprint not Name(All)eq or Operator/imagemask eq and{
- currentdict imageormask_sys
- }{
- currentoverprint not
- {
- gsave
- knockout_unitsq
- grestore
- }if
- currentdict consumeimagedata
- }ifelse
- }ifelse
- }ifelse
- }{
- //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{
- currentcolorspace 0 get/Separation ne{
- [/Separation Name MappedCSA sep_proc_name exch 0 get exch load]setcolorspace_opt
- /sep_tint AGMCORE_gget setcolor
- }if
- }if
- currentoverprint
- MappedCSA 0 get/DeviceCMYK eq and
- Name AGMCORE_IsSeparationAProcessColor not and
- //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{Name inRip_spot_has_ink not and}{false}ifelse
- Name(All)ne and{
- imageormask_l2_overprint
- }{
- currentdict imageormask
- }ifelse
- }ifelse
- }ifelse
- }ifelse
- cleartomark restore
- }ifelse
- currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
- end
- end
-}def
-/colorSpaceElemCnt
-{
- mark currentcolor counttomark dup 2 add 1 roll cleartomark
-}bdf
-/devn_sep_datasource
-{
- 1 dict begin
- /dataSource xdf
- [
- 0 1 dataSource length 1 sub{
- dup currentdict/dataSource get/exch cvx/get cvx/exec cvx
- /exch cvx names_index/ne cvx[/pop cvx]cvx/if cvx
- }for
- ]cvx bind
- end
-}bdf
-/devn_alt_datasource
-{
- 11 dict begin
- /convProc xdf
- /origcolorSpaceElemCnt xdf
- /origMultipleDataSources xdf
- /origBitsPerComponent xdf
- /origDecode xdf
- /origDataSource xdf
- /dsCnt origMultipleDataSources{origDataSource length}{1}ifelse def
- /DataSource origMultipleDataSources
- {
- [
- BitsPerComponent 8 idiv origDecode length 2 idiv mul string
- 0 1 origDecode length 2 idiv 1 sub
- {
- dup 7 mul 1 add index exch dup BitsPerComponent 8 idiv mul exch
- origDataSource exch get 0()/SubFileDecode filter
- BitsPerComponent 8 idiv string/readstring cvx/pop cvx/putinterval cvx
- }for
- ]bind cvx
- }{origDataSource}ifelse 0()/SubFileDecode filter def
- [
- origcolorSpaceElemCnt string
- 0 2 origDecode length 2 sub
- {
- dup origDecode exch get dup 3 -1 roll 1 add origDecode exch get exch sub 2 BitsPerComponent exp 1 sub div
- 1 BitsPerComponent 8 idiv{DataSource/read cvx/not cvx{0}/if cvx/mul cvx}repeat/mul cvx/add cvx
- }for
- /convProc load/exec cvx
- origcolorSpaceElemCnt 1 sub -1 0
- {
- /dup cvx 2/add cvx/index cvx
- 3 1/roll cvx/exch cvx 255/mul cvx/cvi cvx/put cvx
- }for
- ]bind cvx 0()/SubFileDecode filter
- end
-}bdf
-/devn_imageormask
-{
- /devicen_colorspace_dict AGMCORE_gget begin
- CSA map_csa
- 2 dict begin
- dup
- /srcDataStrs[3 -1 roll begin
- AGMIMG_init_common
- currentdict/MultipleDataSources known{MultipleDataSources{DataSource length}{1}ifelse}{1}ifelse
- {
- Width Decode length 2 div mul cvi
- {
- dup 65535 gt{1 add 2 div cvi}{exit}ifelse
- }loop
- string
- }repeat
- end]def
- /dstDataStr srcDataStrs 0 get length string def
- begin
- AGMIMG_init_common
- SkipImageProc{
- currentdict consumeimagedata
- }{
- save mark
- AGMCORE_producing_seps not{
- level3 not{
- Operator/imagemask ne{
- /DataSource[[
- DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse
- colorSpaceElemCnt/devicen_colorspace_dict AGMCORE_gget/TintTransform get
- devn_alt_datasource 1/string cvx/readstring cvx/pop cvx]cvx colorSpaceElemCnt 1 sub{dup}repeat]def
- /MultipleDataSources true def
- /Decode colorSpaceElemCnt[exch{0 1}repeat]def
- }if
- }if
- currentdict imageormask
- }{
- AGMCORE_host_sep{
- Names convert_to_process{
- CSA get_csa_by_name 0 get/DeviceCMYK eq{
- /DataSource
- Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul
- DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse
- 4/devicen_colorspace_dict AGMCORE_gget/TintTransform get
- devn_alt_datasource
- filter_cmyk 0()/SubFileDecode filter def
- /MultipleDataSources false def
- /Decode[1 0]def
- /DeviceGray setcolorspace
- currentdict imageormask_sys
- }{
- AGMCORE_report_unsupported_color_space
- AGMCORE_black_plate{
- /DataSource
- DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse
- CSA get_csa_by_name 0 get/DeviceRGB eq{3}{1}ifelse/devicen_colorspace_dict AGMCORE_gget/TintTransform get
- devn_alt_datasource
- /MultipleDataSources false def
- /Decode colorSpaceElemCnt[exch{0 1}repeat]def
- currentdict imageormask_sys
- }{
- gsave
- knockout_unitsq
- grestore
- currentdict consumeimagedata
- }ifelse
- }ifelse
- }
- {
- /devicen_colorspace_dict AGMCORE_gget/names_index known{
- Operator/imagemask ne{
- MultipleDataSources{
- /DataSource[DataSource devn_sep_datasource/exec cvx]cvx def
- /MultipleDataSources false def
- }{
- /DataSource/DataSource load dstDataStr srcDataStrs 0 get filter_devn def
- }ifelse
- invert_image_samples
- }if
- currentdict imageormask_sys
- }{
- currentoverprint not Operator/imagemask eq and{
- currentdict imageormask_sys
- }{
- currentoverprint not
- {
- gsave
- knockout_unitsq
- grestore
- }if
- currentdict consumeimagedata
- }ifelse
- }ifelse
- }ifelse
- }{
- currentdict imageormask
- }ifelse
- }ifelse
- cleartomark restore
- }ifelse
- currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
- end
- end
- end
-}def
-/imageormask_l2_overprint
-{
- currentdict
- currentcmykcolor add add add 0 eq{
- currentdict consumeimagedata
- }{
- level3{
- currentcmykcolor
- /AGMIMG_k xdf
- /AGMIMG_y xdf
- /AGMIMG_m xdf
- /AGMIMG_c xdf
- Operator/imagemask eq{
- [/DeviceN[
- AGMIMG_c 0 ne{/Cyan}if
- AGMIMG_m 0 ne{/Magenta}if
- AGMIMG_y 0 ne{/Yellow}if
- AGMIMG_k 0 ne{/Black}if
- ]/DeviceCMYK{}]setcolorspace
- AGMIMG_c 0 ne{AGMIMG_c}if
- AGMIMG_m 0 ne{AGMIMG_m}if
- AGMIMG_y 0 ne{AGMIMG_y}if
- AGMIMG_k 0 ne{AGMIMG_k}if
- setcolor
- }{
- /Decode[Decode 0 get 255 mul Decode 1 get 255 mul]def
- [/Indexed
- [
- /DeviceN[
- AGMIMG_c 0 ne{/Cyan}if
- AGMIMG_m 0 ne{/Magenta}if
- AGMIMG_y 0 ne{/Yellow}if
- AGMIMG_k 0 ne{/Black}if
- ]
- /DeviceCMYK{
- AGMIMG_k 0 eq{0}if
- AGMIMG_y 0 eq{0 exch}if
- AGMIMG_m 0 eq{0 3 1 roll}if
- AGMIMG_c 0 eq{0 4 1 roll}if
- }
- ]
- 255
- {
- 255 div
- mark exch
- dup dup dup
- AGMIMG_k 0 ne{
- /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 1 roll pop pop pop
- counttomark 1 roll
- }{
- pop
- }ifelse
- AGMIMG_y 0 ne{
- /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 2 roll pop pop pop
- counttomark 1 roll
- }{
- pop
- }ifelse
- AGMIMG_m 0 ne{
- /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 3 roll pop pop pop
- counttomark 1 roll
- }{
- pop
- }ifelse
- AGMIMG_c 0 ne{
- /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec pop pop pop
- counttomark 1 roll
- }{
- pop
- }ifelse
- counttomark 1 add -1 roll pop
- }
- ]setcolorspace
- }ifelse
- imageormask_sys
- }{
- write_image_file{
- currentcmykcolor
- 0 ne{
- [/Separation/Black/DeviceGray{}]setcolorspace
- gsave
- /Black
- [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 1 roll pop pop pop 1 exch sub}/exec cvx]
- cvx modify_halftone_xfer
- Operator currentdict read_image_file
- grestore
- }if
- 0 ne{
- [/Separation/Yellow/DeviceGray{}]setcolorspace
- gsave
- /Yellow
- [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 2 roll pop pop pop 1 exch sub}/exec cvx]
- cvx modify_halftone_xfer
- Operator currentdict read_image_file
- grestore
- }if
- 0 ne{
- [/Separation/Magenta/DeviceGray{}]setcolorspace
- gsave
- /Magenta
- [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 3 roll pop pop pop 1 exch sub}/exec cvx]
- cvx modify_halftone_xfer
- Operator currentdict read_image_file
- grestore
- }if
- 0 ne{
- [/Separation/Cyan/DeviceGray{}]setcolorspace
- gsave
- /Cyan
- [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{pop pop pop 1 exch sub}/exec cvx]
- cvx modify_halftone_xfer
- Operator currentdict read_image_file
- grestore
- }if
- close_image_file
- }{
- imageormask
- }ifelse
- }ifelse
- }ifelse
-}def
-/indexed_imageormask
-{
- begin
- AGMIMG_init_common
- save mark
- currentdict
- AGMCORE_host_sep{
- Operator/knockout eq{
- /indexed_colorspace_dict AGMCORE_gget dup/CSA known{
- /CSA get get_csa_by_name
- }{
- /Names get
- }ifelse
- overprint_plate not{
- knockout_unitsq
- }if
- }{
- Indexed_DeviceN{
- /devicen_colorspace_dict AGMCORE_gget dup/names_index known exch/Names get convert_to_process or{
- indexed_image_lev2_sep
- }{
- currentoverprint not{
- knockout_unitsq
- }if
- currentdict consumeimagedata
- }ifelse
- }{
- AGMCORE_is_cmyk_sep{
- Operator/imagemask eq{
- imageormask_sys
- }{
- level2{
- indexed_image_lev2_sep
- }{
- indexed_image_lev1_sep
- }ifelse
- }ifelse
- }{
- currentoverprint not{
- knockout_unitsq
- }if
- currentdict consumeimagedata
- }ifelse
- }ifelse
- }ifelse
- }{
- level2{
- Indexed_DeviceN{
- /indexed_colorspace_dict AGMCORE_gget begin
- }{
- /indexed_colorspace_dict AGMCORE_gget dup null ne
- {
- begin
- currentdict/CSDBase known{CSDBase/CSD get_res/MappedCSA get}{CSA}ifelse
- get_csa_by_name 0 get/DeviceCMYK eq ps_level 3 ge and ps_version 3015.007 lt and
- AGMCORE_in_rip_sep and{
- [/Indexed[/DeviceN[/Cyan/Magenta/Yellow/Black]/DeviceCMYK{}]HiVal Lookup]
- setcolorspace
- }if
- end
- }
- {pop}ifelse
- }ifelse
- imageormask
- Indexed_DeviceN{
- end
- }if
- }{
- Operator/imagemask eq{
- imageormask
- }{
- indexed_imageormask_lev1
- }ifelse
- }ifelse
- }ifelse
- cleartomark restore
- currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
- end
-}def
-/indexed_image_lev2_sep
-{
- /indexed_colorspace_dict AGMCORE_gget begin
- begin
- Indexed_DeviceN not{
- currentcolorspace
- dup 1/DeviceGray put
- dup 3
- currentcolorspace 2 get 1 add string
- 0 1 2 3 AGMCORE_get_ink_data 4 currentcolorspace 3 get length 1 sub
- {
- dup 4 idiv exch currentcolorspace 3 get exch get 255 exch sub 2 index 3 1 roll put
- }for
- put setcolorspace
- }if
- currentdict
- Operator/imagemask eq{
- AGMIMG_&imagemask
- }{
- use_mask{
- process_mask AGMIMG_&image
- }{
- AGMIMG_&image
- }ifelse
- }ifelse
- end end
-}def
- /OPIimage
- {
- dup type/dicttype ne{
- 10 dict begin
- /DataSource xdf
- /ImageMatrix xdf
- /BitsPerComponent xdf
- /Height xdf
- /Width xdf
- /ImageType 1 def
- /Decode[0 1 def]
- currentdict
- end
- }if
- dup begin
- /NComponents 1 cdndf
- /MultipleDataSources false cdndf
- /SkipImageProc{false}cdndf
- /Decode[
- 0
- currentcolorspace 0 get/Indexed eq{
- 2 BitsPerComponent exp 1 sub
- }{
- 1
- }ifelse
- ]cdndf
- /Operator/image cdndf
- end
- /sep_colorspace_dict AGMCORE_gget null eq{
- imageormask
- }{
- gsave
- dup begin invert_image_samples end
- sep_imageormask
- grestore
- }ifelse
- }def
-/cachemask_level2
-{
- 3 dict begin
- /LZWEncode filter/WriteFilter xdf
- /readBuffer 256 string def
- /ReadFilter
- currentfile
- 0(%EndMask)/SubFileDecode filter
- /ASCII85Decode filter
- /RunLengthDecode filter
- def
- {
- ReadFilter readBuffer readstring exch
- WriteFilter exch writestring
- not{exit}if
- }loop
- WriteFilter closefile
- end
-}def
-/spot_alias
-{
- /mapto_sep_imageormask
- {
- dup type/dicttype ne{
- 12 dict begin
- /ImageType 1 def
- /DataSource xdf
- /ImageMatrix xdf
- /BitsPerComponent xdf
- /Height xdf
- /Width xdf
- /MultipleDataSources false def
- }{
- begin
- }ifelse
- /Decode[/customcolor_tint AGMCORE_gget 0]def
- /Operator/image def
- /SkipImageProc{false}def
- currentdict
- end
- sep_imageormask
- }bdf
- /customcolorimage
- {
- Adobe_AGM_Image/AGMIMG_colorAry xddf
- /customcolor_tint AGMCORE_gget
- <<
- /Name AGMIMG_colorAry 4 get
- /CSA[/DeviceCMYK]
- /TintMethod/Subtractive
- /TintProc null
- /MappedCSA null
- /NComponents 4
- /Components[AGMIMG_colorAry aload pop pop]
- >>
- setsepcolorspace
- mapto_sep_imageormask
- }ndf
- Adobe_AGM_Image/AGMIMG_&customcolorimage/customcolorimage load put
- /customcolorimage
- {
- Adobe_AGM_Image/AGMIMG_override false put
- current_spot_alias{dup 4 get map_alias}{false}ifelse
- {
- false set_spot_alias
- /customcolor_tint AGMCORE_gget exch setsepcolorspace
- pop
- mapto_sep_imageormask
- true set_spot_alias
- }{
- //Adobe_AGM_Image/AGMIMG_&customcolorimage get exec
- }ifelse
- }bdf
-}def
-/snap_to_device
-{
- 6 dict begin
- matrix currentmatrix
- dup 0 get 0 eq 1 index 3 get 0 eq and
- 1 index 1 get 0 eq 2 index 2 get 0 eq and or exch pop
- {
- 1 1 dtransform 0 gt exch 0 gt/AGMIMG_xSign? exch def/AGMIMG_ySign? exch def
- 0 0 transform
- AGMIMG_ySign?{floor 0.1 sub}{ceiling 0.1 add}ifelse exch
- AGMIMG_xSign?{floor 0.1 sub}{ceiling 0.1 add}ifelse exch
- itransform/AGMIMG_llY exch def/AGMIMG_llX exch def
- 1 1 transform
- AGMIMG_ySign?{ceiling 0.1 add}{floor 0.1 sub}ifelse exch
- AGMIMG_xSign?{ceiling 0.1 add}{floor 0.1 sub}ifelse exch
- itransform/AGMIMG_urY exch def/AGMIMG_urX exch def
- [AGMIMG_urX AGMIMG_llX sub 0 0 AGMIMG_urY AGMIMG_llY sub AGMIMG_llX AGMIMG_llY]concat
- }{
- }ifelse
- end
-}def
-level2 not{
- /colorbuf
- {
- 0 1 2 index length 1 sub{
- dup 2 index exch get
- 255 exch sub
- 2 index
- 3 1 roll
- put
- }for
- }def
- /tint_image_to_color
- {
- begin
- Width Height BitsPerComponent ImageMatrix
- /DataSource load
- end
- Adobe_AGM_Image begin
- /AGMIMG_mbuf 0 string def
- /AGMIMG_ybuf 0 string def
- /AGMIMG_kbuf 0 string def
- {
- colorbuf dup length AGMIMG_mbuf length ne
- {
- dup length dup dup
- /AGMIMG_mbuf exch string def
- /AGMIMG_ybuf exch string def
- /AGMIMG_kbuf exch string def
- }if
- dup AGMIMG_mbuf copy AGMIMG_ybuf copy AGMIMG_kbuf copy pop
- }
- addprocs
- {AGMIMG_mbuf}{AGMIMG_ybuf}{AGMIMG_kbuf}true 4 colorimage
- end
- }def
- /sep_imageormask_lev1
- {
- begin
- MappedCSA 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or has_color not and{
- {
- 255 mul round cvi GrayLookup exch get
- }currenttransfer addprocs settransfer
- currentdict imageormask
- }{
- /sep_colorspace_dict AGMCORE_gget/Components known{
- MappedCSA 0 get/DeviceCMYK eq{
- Components aload pop
- }{
- 0 0 0 Components aload pop 1 exch sub
- }ifelse
- Adobe_AGM_Image/AGMIMG_k xddf
- Adobe_AGM_Image/AGMIMG_y xddf
- Adobe_AGM_Image/AGMIMG_m xddf
- Adobe_AGM_Image/AGMIMG_c xddf
- AGMIMG_y 0.0 eq AGMIMG_m 0.0 eq and AGMIMG_c 0.0 eq and{
- {AGMIMG_k mul 1 exch sub}currenttransfer addprocs settransfer
- currentdict imageormask
- }{
- currentcolortransfer
- {AGMIMG_k mul 1 exch sub}exch addprocs 4 1 roll
- {AGMIMG_y mul 1 exch sub}exch addprocs 4 1 roll
- {AGMIMG_m mul 1 exch sub}exch addprocs 4 1 roll
- {AGMIMG_c mul 1 exch sub}exch addprocs 4 1 roll
- setcolortransfer
- currentdict tint_image_to_color
- }ifelse
- }{
- MappedCSA 0 get/DeviceGray eq{
- {255 mul round cvi ColorLookup exch get 0 get}currenttransfer addprocs settransfer
- currentdict imageormask
- }{
- MappedCSA 0 get/DeviceCMYK eq{
- currentcolortransfer
- {255 mul round cvi ColorLookup exch get 3 get 1 exch sub}exch addprocs 4 1 roll
- {255 mul round cvi ColorLookup exch get 2 get 1 exch sub}exch addprocs 4 1 roll
- {255 mul round cvi ColorLookup exch get 1 get 1 exch sub}exch addprocs 4 1 roll
- {255 mul round cvi ColorLookup exch get 0 get 1 exch sub}exch addprocs 4 1 roll
- setcolortransfer
- currentdict tint_image_to_color
- }{
- currentcolortransfer
- {pop 1}exch addprocs 4 1 roll
- {255 mul round cvi ColorLookup exch get 2 get}exch addprocs 4 1 roll
- {255 mul round cvi ColorLookup exch get 1 get}exch addprocs 4 1 roll
- {255 mul round cvi ColorLookup exch get 0 get}exch addprocs 4 1 roll
- setcolortransfer
- currentdict tint_image_to_color
- }ifelse
- }ifelse
- }ifelse
- }ifelse
- end
- }def
- /sep_image_lev1_sep
- {
- begin
- /sep_colorspace_dict AGMCORE_gget/Components known{
- Components aload pop
- Adobe_AGM_Image/AGMIMG_k xddf
- Adobe_AGM_Image/AGMIMG_y xddf
- Adobe_AGM_Image/AGMIMG_m xddf
- Adobe_AGM_Image/AGMIMG_c xddf
- {AGMIMG_c mul 1 exch sub}
- {AGMIMG_m mul 1 exch sub}
- {AGMIMG_y mul 1 exch sub}
- {AGMIMG_k mul 1 exch sub}
- }{
- {255 mul round cvi ColorLookup exch get 0 get 1 exch sub}
- {255 mul round cvi ColorLookup exch get 1 get 1 exch sub}
- {255 mul round cvi ColorLookup exch get 2 get 1 exch sub}
- {255 mul round cvi ColorLookup exch get 3 get 1 exch sub}
- }ifelse
- AGMCORE_get_ink_data currenttransfer addprocs settransfer
- currentdict imageormask_sys
- end
- }def
- /indexed_imageormask_lev1
- {
- /indexed_colorspace_dict AGMCORE_gget begin
- begin
- currentdict
- MappedCSA 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or has_color not and{
- {HiVal mul round cvi GrayLookup exch get HiVal div}currenttransfer addprocs settransfer
- imageormask
- }{
- MappedCSA 0 get/DeviceGray eq{
- {HiVal mul round cvi Lookup exch get HiVal div}currenttransfer addprocs settransfer
- imageormask
- }{
- MappedCSA 0 get/DeviceCMYK eq{
- currentcolortransfer
- {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll
- {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll
- {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll
- {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll
- setcolortransfer
- tint_image_to_color
- }{
- currentcolortransfer
- {pop 1}exch addprocs 4 1 roll
- {3 mul HiVal mul round cvi 2 add Lookup exch get HiVal div}exch addprocs 4 1 roll
- {3 mul HiVal mul round cvi 1 add Lookup exch get HiVal div}exch addprocs 4 1 roll
- {3 mul HiVal mul round cvi Lookup exch get HiVal div}exch addprocs 4 1 roll
- setcolortransfer
- tint_image_to_color
- }ifelse
- }ifelse
- }ifelse
- end end
- }def
- /indexed_image_lev1_sep
- {
- /indexed_colorspace_dict AGMCORE_gget begin
- begin
- {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub}
- {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}
- {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}
- {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub}
- AGMCORE_get_ink_data currenttransfer addprocs settransfer
- currentdict imageormask_sys
- end end
- }def
-}if
-end
-systemdict/setpacking known
-{setpacking}if
-%%EndResource
-currentdict Adobe_AGM_Utils eq {end} if
-%%EndProlog
-%%BeginSetup
-Adobe_AGM_Utils begin
-2 2010 Adobe_AGM_Core/ds gx
-Adobe_CoolType_Core/ds get exec Adobe_AGM_Image/ds gx
-currentdict Adobe_AGM_Utils eq {end} if
-%%EndSetup
-%%Page: (Page 1) 1
-%%EndPageComments
-%%BeginPageSetup
-%ADOBeginClientInjection: PageSetup Start "AI11EPS"
-%AI12_RMC_Transparency: Balance=75 RasterRes=300 GradRes=150 Text=0 Stroke=1 Clip=1 OP=0
-%ADOEndClientInjection: PageSetup Start "AI11EPS"
-Adobe_AGM_Utils begin
-Adobe_AGM_Core/ps gx
-Adobe_AGM_Utils/capture_cpd gx
-Adobe_CoolType_Core/ps get exec Adobe_AGM_Image/ps gx
-%ADOBeginClientInjection: PageSetup End "AI11EPS"
-/currentdistillerparams where {pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse { userdict /AI11_PDFMark5 /cleartomark load put userdict /AI11_ReadMetadata_PDFMark5 {flushfile cleartomark } bind put} { userdict /AI11_PDFMark5 /pdfmark load put userdict /AI11_ReadMetadata_PDFMark5 {/PUT pdfmark} bind put } ifelse [/NamespacePush AI11_PDFMark5 [/_objdef {ai_metadata_stream_123} /type /stream /OBJ AI11_PDFMark5 [{ai_metadata_stream_123} currentfile 0 (% &&end XMP packet marker&&) /SubFileDecode filter AI11_ReadMetadata_PDFMark5 <?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
-<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.1-c036 46.277092, Fri Feb 23 2007 14:16:18 ">
- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
- <rdf:Description rdf:about=""
- xmlns:dc="http://purl.org/dc/elements/1.1/">
- <dc:format>application/postscript</dc:format>
- <dc:title>
- <rdf:Alt>
- <rdf:li xml:lang="x-default">ISC_logo_only_RGB</rdf:li>
- </rdf:Alt>
- </dc:title>
- </rdf:Description>
- <rdf:Description rdf:about=""
- xmlns:xap="http://ns.adobe.com/xap/1.0/"
- xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/">
- <xap:CreatorTool>Adobe Illustrator CS3</xap:CreatorTool>
- <xap:CreateDate>2010-03-25T14:28-07:00</xap:CreateDate>
- <xap:ModifyDate>2010-03-25T14:28-07:00</xap:ModifyDate>
- <xap:MetadataDate>2010-03-25T14:28-07:00</xap:MetadataDate>
- <xap:Thumbnails>
- <rdf:Alt>
- <rdf:li rdf:parseType="Resource">
- <xapGImg:width>256</xapGImg:width>
- <xapGImg:height>100</xapGImg:height>
- <xapGImg:format>JPEG</xapGImg:format>
- <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAZAEAAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A53hQ7FXYq7FXYq7FXAEk&#xA;ACpPQYq9K8sfkxeTWA1vzfeL5c0NaMTOQtxIp3oqtshPblv/AJJxVM5PzH/LXymDb+S/Lyahdpt+&#xA;mNRBJJH7ShgZKHwHp/LFKQ6p+en5k37HjqS2UZ/3VawxqB8mYPJ/w2KEri/Nb8xYpDIuv3ZYmpDs&#xA;HX6FYFR92Ksk0/8APzzG8P1PzLYWXmDT3/vYp4ljc9tioMfT/ivFKLk8kfl/56he48i3f6J1sKXk&#xA;0C9JCvQVPpMS34Fh4hcVeYatpGp6Rfy6fqVs9reQGkkMgoR4HwIPYjY4oQmKuxV2KuxV2KuxV2Kp&#xA;nYeWPMmo2Ut9YaXdXVnDX1biGGR4xTc/EoI274qlmKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2&#xA;KovSdI1LV9Qh07Tbd7q8uG4xQxipPiT2AA3JOwxV6/Fp/k38pbVLnU/T13zzIoaC0U1htaioY1Hw&#xA;/wCsRyb9kAVOKXmHmrzl5h8035vNYummYV9GAfDDED+zGnQfPqe5xQkmKuxV2KuxVfBPPbzJPBI0&#xA;M8TB45YyVdWBqCrDcEYq9c0TzHo35mabH5a82PHa+Z4l46Lr3EKZW7Qy0pufDo3ajdVLzHzD5f1X&#xA;y/q9xpWqQ+jd25ow6qyndXQ91Ybg4oS7FXYq7FXYq7FWZflr5Jt/MWoXF7q0htvLekRm51a6rT4Q&#xA;CREpG9Xoenb3pirIL/8APvzHBq8S+XoodO8uWZWO20oRR0eFD0kbiWUsP5CKe/UqUp/OHRrC21+1&#xA;1zS04aV5ktU1K3UCgWSQfvU29yGPhyxQwPFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqm/ljzVrf&#xA;ljUW1HRpxBdPE8DOyK44PQnZgR1UH6MVS27u7q8uZbq6lee5mYvLNISzsx6kk7nFVLFXYq7FXYq7&#xA;FXYq2jujq6MVdSCrA0II3BBGKvY7SSL82PJr2U5X/HWgRcraYkBry3HZie56Hwah/aOKXjskckcj&#xA;RyKUkQlXRgQQQaEEHoRihbirsVdiq+GGWaVIYkMksjBI0UVLMxoAB4k4q9T/ADJmi8n+T9K/L6xc&#xA;C8mVb/zFIhrzlfdIyR2BH3Kvjil5Tih6f5nj/SH5G+VNRPxTabeXFkx7hJWkYfhEgxV5hirsVZF5&#xA;Z/L7zh5lIOk6bLLATQ3bj04B4/vH4qaeAqcVZ7D+ROlaUiy+cPNFrp5pU2tvRpCP8lpCrH6IzluP&#xA;DOf0glozanFi+uQiriw/5x70v4TFqOuEU+MtIlfuNoMzYdlZjzofH9VutydvaaPImXuH66cfMv5L&#xA;oCkXk12RvtF5PiHyPqMfxy4djT/nBxj7SYukZfYsaX8g9QJSXRb/AEt229eKR2UCnWnqy/8AEMhL&#xA;sjKORBbYe0OA8xIfj3oa5/JTRdZhe48i+YodRKgt+j7ukc4X/WAU17fFGo98wMunyY/qFO10+rxZ&#xA;vokD9/yeZaxouq6NfyWGqWslneR/ahlFDQ9GHZlPYjY5S5CCxV2KuxV2KuxV2KuxV2KuxV2KuxV2&#xA;KuxV2Kpn5Z8w6h5d1y01iwalxaOG4n7Lqdnjb/JdSQcVZ5+cnl/T7ldP8+aEv+4jzAoa5AH93dUP&#xA;LlTYF+Jr/lK3jil5hih2KuxV6R+RugWt15kuPMOo0XS/LcJvZnYVAloTH/wIVn+ajFLCvM+vXOv+&#xA;YL/WbnaW9maXj14p0RPkiAL9GKEsxVOT5t1s+Vh5Y9Vf0QLj60I+C8+dOnPrSu+Kojyh5D8y+bLv&#xA;0NItS8SECe8kqkEVf53od/8AJFT7Yq9Ph8tflZ+Xy11hh5n8xJ1tAFMETU6MhLIP9nyPfiMzdNoM&#xA;mXflHvLrNb2thwbXxS7h+nuSnzD+cPm7VVMFpKNJsQOKW9n8LBQKAGX7f/A8R7ZvMHZmKHMcR8/1&#xA;PMartvPl2B4I+X62ESSSSO0kjF5GNWdiSST3JObACnUEkmytwodirsVVLe5uLadJ7eV4Z4zyjljY&#xA;qykdww3GCUQRR5MoyMTYNF6bovmLRvzBsE8recgo1ShXR9bUBZBKdlRj/Mfuf/Woc5/X9ncA44cu&#xA;oet7J7ZOQjHl+roe/wAj5vDc0z0bsVdiq+GGaeVYoY2llc0SNAWYnwAG5xVluk/lF+YuqANBok8U&#xA;Z353XG2FPGkxRj9AxVksH/OOnm4RiXUNR06wjPXnLIzDueiBen+VjaVT/lRmlJ8Nx520uKUdUqhp&#xA;4dZVP4Yq1/yozTJKLbeddLmk/kqg28fhlfFVKf8A5x385GMy2F9p1/H29KZwT3/aQL/w2KsZ1b8p&#xA;/wAxNKBa50O4eNdy9sFuRQdz6JkIHzxQxSWKSKRo5UaORTRkYEEH3BxVbirsVdirsVet/k7fW3mH&#xA;Q9Z/LvU5P3V/E1xpLNv6c6fE3H5ELIB7N44peV31lc2N7cWV0hiubWR4Z4z1V42KsPoIxQoYq7FX&#xA;r+qj/B/5G2VgP3eqebZfrE/Zvq9Ffr4emIwR/lHFLyDFDsVen+RfykhnsB5l86T/AKK8uxgSRwse&#xA;E1wDutP2lVu1Pib9nxyePHKZ4Yiy15s0MceKZoBNPNH5qyyWY0TynbjRNChHBPRAjmkX5r9gHvTc&#xA;9znQ6TsuMN5+qX2PH9oduTy+nH6Yfaf1PPSSTU7k9Tm2dC7FXYq7FXYq7FXYq2rMrBlJVlNVYbEE&#xA;YqCx3OFfUk78r+S/Mvme6+r6NZPccSBLN9mGOv8API1FHy6+GKvQv+Vcflx5PQSeetc+vaiBU6Np&#xA;xJNf5WIpJv2J9PFKnN+eGn6PG1t5I8tWmkwmq/Wp1DzOOxYJx3/1nbFWI6v+an5g6qzG51y5RW/3&#xA;XbN9WSnhSEJX6cUMYnuLi4kMk8ryyHq7sWb7ziqnirsVVILi4t5BJBK8Ug6OjFW+8YqybSfzS/MH&#xA;SiPquuXTKOkdw31haeAWYSAfRirKovzuttWjW286eW7LWYQOP1mNfSnX/KBbnv8A6pXFKoPI35We&#xA;bt/KGtto+pv9jSNTrxLHoiOSW6/ytJ8sVYR5r8g+a/K03DWLF44SaR3afvIH+Ui7V9jQ+2KGPYq7&#xA;FUx8u61c6Hrtjq9sf31lMkoHTkFPxIfZlqpxVnv576LbJr9j5n0/4tN8x2yXKOBt6qqvL/gkZG+d&#xA;cVeY4qm/lLQn17zNpmjrWl5cJHIR1EdayN/sUBOKsz/P3XEvvO502Cgs9FgjtY0X7Icj1JKfLkE/&#xA;2OKXmuKHr/kfyHovljSY/OPnmP4m+LR9FcfHI4+JXkQ9/BTsOreGX6fTyyy4YuLq9ZDTw4pn3DvS&#xA;Hzj521rzVqBub5+FuhP1WzQ/u4l9v5mPdjv9G2dVptLDDGo8+94TW6/JqJXLl0HQMfzJcJ2KuxV2&#xA;KuxV2KuxV2KuxVmui/lbofl3TYvMH5kXX1OB/itdDiNbiYjfi/H4h7qvT9pl6Zwr6mgPNP5z6veW&#xA;v6I8sQL5d0GMcI4bUBJmX/Kdaca+CfSTih5yzMzFmJLE1JO5JOKtYq7FXYq7FXYq7FXYq7FXYqzr&#xA;yl+cHmfQ4jYXxXW9EkHCbTr4+oPT6FUduRUexBX2xVkFz5E8l+e7aTUfINwLDV0UyXPly6YLU9SY&#xA;WJNBX3K/6mKXl2o6bqGmXstjqFvJa3cB4ywSqVZT8j49jihDYq9csCfNf5EXlo3x6h5TuPXi/m+r&#xA;mrGp8BG8n/ADFLyPFD1f/nHzToE1zVfMt2KWmhWTuX/leUGp+iJH+/FLzLVdRn1LU7vUbjee8mkn&#xA;l7/FIxY/rxQ9N/LPydpej6V/j7zYlLGA10WwYDlczb8X4nqKj4P+C+yN7sGCWWXDFx9VqoYIGcv7&#xA;fJIvNfmrVPM2ryajfv1+GCAGqRR12Rf4nuc63T6eOKPDF8/1mrnnmZy+A7kmy9xXYq7FURFp9/LG&#xA;ZIraWSMCpdUZlA+YGRM4jmWYxyIsAqDKysVYFWGxB2IyTAhrFXYqrwWN7cAm3t5JgOpjRm/UMiZg&#xA;cyzjjlLkCVF0dGKupVh1UihwgsSKawoS7Xdf1jXtRk1HVrp7q7k6u52A7KqjZVHYDOFfUkvxV2Ku&#xA;xV2KuxV2KuxV2KuxV2KuxV2Kq1neXdldRXdnM9vdQsHhmiYo6sOhVhuMVetaT5q8tfmTYw6B5zKW&#xA;PmNB6el+YECqHPZJR8I3P7J+Fu3Fuql5z5t8oa35V1d9M1aHhIPihmXeOWOtA8bdx+I74oZr/wA4&#xA;/wCqRJ5sutCufis9ds5beSM9GeNS4r/zz9QfTirzzWdMm0vV73TJv72ynkt3PiYnK1+mmKvVNL/5&#xA;1z/nHy/vPsXXmW6METHY+mW9Mr/yLhkI+eKWK/lZ5Gi8y6xLdakfR8vaSv1jVJ2NFKrUiKv+VxNf&#xA;8kHvTDGJJocywlIRBJ5BM/P/AJzl8zaqDCvoaPZD0dMtAOKpGKDkVGwZqD5Cg7Z1ui0gwwr+I83g&#xA;O09edTkv+Ach+O9DeQVVvOuiKwDKbyEEHcH4xk9Z/cy9xa+zh/hEP6wfUN7ZWf1Of9xH/dv+wv8A&#xA;KfbORjI2N30GcI8J2HJ8gKrMwVQWZjRVG5JOdu+YgPpPyF+V2ieX9PgnvbaO71p1DTzygOI2I+xE&#xA;DUDj05dT+GcprNfPJIgGoPedndk48MQZC8n3e5MtR/MvyPp2ovp15qscd3G3CRAkrqrdKM6IyAjv&#xA;U7d8qhoc0o8Qjs35e1NPCfBKfq+P9iM8xeVPL3maxMWoW0cwdf3N2gHqpUVDRyDf38DkMOoniNxP&#xA;wbdTo8WeNSF+fX4F8u+YNGuNF1u90q4PKWzlaMuNgwG6sB/lLQ512HKMkBIdXz7U4DiyGB/hL2P8&#xA;pvyv0tNKt9e1q3W6u7tRLaW0q8o4ojujlTszOPiFegp3zR9o6+XEYQNAc3qOx+yYCAy5BZlyB6Bn&#xA;OueevJ/l2dLLU79LWbiCtuiSSFV7VWJX4+1c12LSZcouIv8AHm7fUdoYMB4Zyo92/wChW1TRPLXm&#xA;zSUN1DFe2lzGGtrpQOaqwqrxyUqp3/rgx5cmGW2xDLLgxamG4EokbH9T5l83eXZ/LvmG80iVuf1d&#xA;h6UvTnG4DI30qd/fOs02cZYCQ6vA6zTHBlMD0+5g2cY+kOxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku&#xA;xV2KvXvJfmjTPPWjL5F84SgXwFNA1l95EkA+GN2JFTtQVPxjb7VDilhVvaar5E/MCzXUk9G40u8i&#xA;kkYV4vCHBLIe6ulf9vFCdfnzpA0/8xryVF4xajFFdpTp8S+m5+l42OKsj/OCyuoNL8keRbGMyXkd&#xA;ujPAvV5nCwofpcSYpd55ntPKnluy/L/SpA0kYW51+5Tb1bhwG4H26H5BR45veydL/lD8P1vK9v6/&#xA;/Ix/zv0D9PyedZvXlmQfl/8A8pvof/MbD/xMZjaz+5l7i5vZ3+MQ/rB9TXv+8Vx/xjf/AIic4+HM&#xA;PoeT6T7nyT5eeGPX9NkmIEKXUDSlugUSKWr7UztMwJhKu4vmumIGWJPLiH3vrzOJfTXyX5t0TU9G&#xA;8wXllqKMswld1katJUZiVkUnqG/z3ztNNljkgDF821mCeLKYy538/N6T5b/PPT9L0Gw02506eeaz&#xA;gSBpVdQG9McQd9+gzVZ+yZTmZAjcu90vb8ceOMDEkxFMA8363F5q84T6jbQtbrfvBGkbkMwKxpFv&#xA;Sg/ZzZabEcOIRJur/W6bW5xqM5mBXFX3APqeCGOCCOCJeMUShEUdlUUA+7OPJs2X0SMQBQ6PlHzt&#xA;qEmoeb9Yu5G5c7uVUPX4I2KIPoRQM7LSw4cUR5PnGvyGeecj/OL1b8tPzM8oaR5NsdO1fUvRvLcy&#xA;gxmGeSitKzL8SIy9G8c02u0GWeUyiNj5h6PsvtXBiwRhOVSF9D3+5gv5veYdC17zPDf6NcfWbf6p&#xA;HHNJwkj/AHqySVFJFQ/ZK9s2PZuGePGYzFG3T9s6nHmzCWM2OHz52e95PnKveOxV2KuxV2KuxV2K&#xA;uxV2Kppo3lfzHrb8dJ025vexaGNmQf6z04r9JxVm+mf84+fmDdqHu0tdNTq31mYMQPGkIl/E4qjz&#xA;+Snley21nz3p1rIPtQp6ZavtzmVttv2cUrX/AC9/JuIN6nnnlx2bgitv024hq7+GKFv/ACrn8o51&#xA;UW/nxI3bcNNGoFKdwxjp9JxVa35EPfAny15p0vWSASI1kCOQPaNpx95xSw/zD5A86eWG9bU9Nmt4&#xA;o2BW8j/eRA1+E+rGWVT4VIOKHoc5T81Py+a5oG86+Wk/eU+3dW/XoOpYA0/yx2DYpRfmjTv8Tt+V&#xA;up0EhvhFaXzHv6RjaT9UuKsi1Q2sHnnzL581FRJbeW4YtN0eNukl20QZ/wDgXm4/ST2y7T4TkmIj&#xA;q42r1Iw4zM9Pv6PE769ub68nvbpzLc3LtLNIerO5qTnZQiIgAcg+cZMhnIylzKhkmDIPy/8A+U30&#xA;P/mNh/4mMxtZ/cy9xc3s7/GIf1g+pr3/AHiuP+Mb/wDETnHw5h9DyfSfc+Oc7l8ve/flf+a1hqdn&#xA;b6NrUwg1aJRFDcSGiXAGy/EeknYg9e3hnN6/s+UCZwFx+79j2fZPa8ckRjyGpjr3/tZ35g8s6H5g&#xA;s/qurWiXMYr6bHZ0J7o4+JT8s12HPPGbiadxqdLjzR4Zi3h/nz8mtS0KKXUdIdr/AEuMFpYyP38K&#xA;juwGzqB1YfdTfOg0facch4ZbS+wvJdodiTwgzh6ofaP1sD0X/js2H/MRF/xMZscv0H3Omwf3kfeH&#xA;1/nEPpz5A1r/AI7N/wD8xEv/ABM52+L6B7nzHP8A3kveUFljU7FWPZwr6k7FXYq7FXYq7FV0cckk&#xA;ixxqXkchURQSSSaAADqTir0LQvyV16e0/SfmS5h8s6QKFp75lEpB8IiVofZyp9sVTQa9+SvlP4dJ&#xA;0uXzXqKbfXL2i29f8lXXjsen7r/ZYpS3WPz68+3qejYyQaPagcUis4lqF7DnJzI/2NMUMI1PzBru&#xA;qsW1PUbm9J3/ANImeQfQGJpiqAxV2KuxVtWZWDKSGBqCNiCMVZr5Z/ODzvoRERvTqVh9mSxvqzoU&#xA;6FQzHmu3gae2KvTvIbeVNd1uHzR5Kj/RGu21BrflwsFintpCBIYvsqKbMpFF5Acgta4pelQeULC3&#xA;OnLCeMGmX9xf2sVBRfrMcwaMf5Ie5LL4UAwK8p/PDVYbWW18s2Tfu0kl1G//AMqe5kZ1B+XNj8iM&#xA;3/Y+CgZn3B5P2i1VyjiHTc/oeUZvHmHYqyD8v/8AlN9D/wCY2H/iYzG1n9zL3Fzezv8AGIf1g+pr&#xA;3/eK4/4xv/xE5x8OYfQ8n0n3PkCxsbu/u4rOziae6nbjFEv2mbwGdvOYiLPJ8yx45TkIxFkp7L+X&#xA;HnmKJ5ZNGuFjjUs7ECgUCpPXMca7CduIOYezNQBZgU78kfm/r2gPFaagzajpIopic1miXpWJz4fy&#xA;tt8sx9X2bDJvH0ycrQdtZMNRl6ofaPc+hbC+tNQsYL60cS2tzGssLjurio2/hnMTgYkg8w9vjyRn&#xA;ESjuC+cfPWi2egfmU0Fsojs2uILmKNeiLIVZlA8A1aDwzqdJlOTT2edEPC9oYI4dXQ+mwX0tnKPe&#xA;vkLX42i17Uo2+0l1MrfMSMM7bCbgPcHzLUiskh/SP3p/5W/K/wAy+ZtMOpac1utuJGipNIytyUAn&#xA;YK23xZjajX48UuGV25uk7Jy54ccKq63QHm7yVrHlW5t7fU2haS5QyR+ixcUU0NaquW6bVRzAmPRo&#xA;1mhyacgTrfuef5xz6M7FXYq7FXYqy7yR+Wev+aud1HxsNFgqbrVrn4YUVd241pzIpvQ0HcjFWUTe&#xA;d/I/kZGtPI1kuqayoKzeY71eQB6H0E22+VB/rYpeea95l17zBeG81i9lvZ9+JkPwqD2RBRUHsoxQ&#xA;lmKuxV2KuxV2KuxV2KuxVHaHrepaJqttqmmymG8tXDxuOh8VYd1YbEdxir7K8s+YbPX/AC5Y65AQ&#xA;kF3CJWBP2GG0iE7fYdSpPtgpNvl7zXrTa35j1HVSSVupmaKvURj4Yx9CADO10+Lw8Yj3B811mfxc&#xA;sp95+zp9iU5c4zsVZB+X/wDym+h/8xsP/ExmNrP7mXuLm9nf4xD+sH1Ne/7xXH/GN/8AiJzj4cw+&#xA;h5PpPufKPlDU4tM806VfzNxht7qJpm8I+QDn/gSc7LU4+PHKI6h850WUY80JHkJB9YTRRXNs8THl&#xA;FMhUkd1cU2+g5xgJBt9HkBIV0L5wvfyZ8+Qai9rBYi5g50iu1liWNlrsxDMGX5EZ1Me1MJjZNHue&#xA;Fydh6kSoRsd9h7/5V0d9F8uadpcjiSS0gWORx0L0q1Om1TtnN6jL4mQy7y9ppMHhYowP8IfPH5t6&#xA;vb6l57v5LZg0Vvwtlcd2iUB/ueozp+zsZhhF9d3iO2cwyamRHIbfJ9CeUteg17y7Y6pEwZp4l9cD&#xA;9mVRSRT8mrnM6nCceQxL2uj1AzYozHUfb1eQfmL+UvmebzPd6jotqL2z1CQzkK6K8ckm8gYOV2LV&#xA;IIzd6LtHGMYjM0YvM9p9j5jmM8Y4oyN/F6j+XXlq48ueU7TTbog3YLy3IU1AeRi3EH/JFBmo1ucZ&#xA;cpkOT0PZmlODCIS+rq8Z/PDWIb/zqbeFgyadAls5FCPUq0j7+3MKfcZveycRjhs/xG3le3swnqKH&#xA;8Ir9LI/+sZv+XX/p9zmHuXf9Yzf8uv8A0+4q7/rGb/l1/wCn3FXf9Yzf8uv/AE+4q2P+hZ6j/eX/&#xA;AKfcVZ35o/5V9/hS2/TPpf4Y/d/V/q/q/VaU/d/7y/Dw/lrtX3wKwP8A6xm/5df+n3Crv+sZv+XX&#xA;/p9xV3/WM3/Lr/0+4q7/AKxm/wCXX/p9xV3/AFjN/wAuv/T7irv+sZv+XX/p9xV3/WM3/Lr/ANPu&#xA;Ku/6xm/5df8Ap9xV3/WM3/Lr/wBPuKu/6xm/5df+n3FXf9Yzf8uv/T7ir0Lyt/gj/CMn+H+P+G6T&#xA;8+Hrcab+tTn+88en0YYXxCubDJw8J4uVbsM/6x8/5d/+nvNx/h3n9jz3+tnl/snf9Y+f8u//AE94&#xA;/wCHef2L/rZ5f7J3/WPn/Lv/ANPeP+Hef2L/AK2eX+yR2h/8qQ/TFn+ifQ/SfrJ9T4/Wq+rX4acv&#xA;h6+OV5fzfCeK+HrybdP/ACf4g4K472+rm9Jm9P0n9X+74nn/AKtN81Q5u+lVbvKP+sfP+Xf/AKe8&#xA;3P8Ah3n9jzn+tnl/snpmifo79EWn6M5fo/01+q8vUr6f7NPV+OlOle2anLxcR4vq6u+wcHAOD6a2&#xA;5/pRuVtyleej9Un9fl6Ppt6vDnz48Ty4+n8dadOO/hko3YpjOuE3yeVn/oXyu/1evf8A3rzcf4b5&#xA;/Y87/rZ5f7JmXkX/AAR9Vuv8JU+qcx9Y4ev6fqU7er8PLjSvH2r2zA1fjWPF5/D9DtOz/wAvR8Dl&#xA;15/pZPmI7Bx6Yq8quf8AlQn1mX6z6P1jm3rep9c586/FyrvWvXNzH87W11/mvOS/k2zdX/nP/9k=</xapGImg:image>
- </rdf:li>
- </rdf:Alt>
- </xap:Thumbnails>
- </rdf:Description>
- <rdf:Description rdf:about=""
- xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/"
- xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#">
- <xapMM:DocumentID>uuid:7127DB5039AC11DFBC4CC917F60414F5</xapMM:DocumentID>
- <xapMM:InstanceID>uuid:7127DB5139AC11DFBC4CC917F60414F5</xapMM:InstanceID>
- <xapMM:DerivedFrom rdf:parseType="Resource">
- <stRef:instanceID>uuid:7127DB4D39AC11DFBC4CC917F60414F5</stRef:instanceID>
- <stRef:documentID>uuid:9EF2320A284E11DFACBCF5F943788E24</stRef:documentID>
- </xapMM:DerivedFrom>
- </rdf:Description>
- <rdf:Description rdf:about=""
- xmlns:xapTPg="http://ns.adobe.com/xap/1.0/t/pg/"
- xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
- xmlns:xapG="http://ns.adobe.com/xap/1.0/g/">
- <xapTPg:MaxPageSize rdf:parseType="Resource">
- <stDim:w>51.000000</stDim:w>
- <stDim:h>66.000000</stDim:h>
- <stDim:unit>Picas</stDim:unit>
- </xapTPg:MaxPageSize>
- <xapTPg:NPages>1</xapTPg:NPages>
- <xapTPg:HasVisibleTransparency>False</xapTPg:HasVisibleTransparency>
- <xapTPg:HasVisibleOverprint>False</xapTPg:HasVisibleOverprint>
- <xapTPg:PlateNames>
- <rdf:Seq>
- <rdf:li>Cyan</rdf:li>
- <rdf:li>Magenta</rdf:li>
- <rdf:li>Yellow</rdf:li>
- <rdf:li>Black</rdf:li>
- </rdf:Seq>
- </xapTPg:PlateNames>
- <xapTPg:SwatchGroups>
- <rdf:Seq>
- <rdf:li rdf:parseType="Resource">
- <xapG:groupName>Default Swatch Group</xapG:groupName>
- <xapG:groupType>0</xapG:groupType>
- <xapG:Colorants>
- <rdf:Seq>
- <rdf:li rdf:parseType="Resource">
- <xapG:swatchName>White</xapG:swatchName>
- <xapG:mode>RGB</xapG:mode>
- <xapG:type>PROCESS</xapG:type>
- <xapG:red>255</xapG:red>
- <xapG:green>255</xapG:green>
- <xapG:blue>255</xapG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xapG:swatchName>Black</xapG:swatchName>
- <xapG:mode>RGB</xapG:mode>
- <xapG:type>PROCESS</xapG:type>
- <xapG:red>39</xapG:red>
- <xapG:green>37</xapG:green>
- <xapG:blue>37</xapG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xapG:swatchName>Yellow</xapG:swatchName>
- <xapG:mode>RGB</xapG:mode>
- <xapG:type>PROCESS</xapG:type>
- <xapG:red>255</xapG:red>
- <xapG:green>242</xapG:green>
- <xapG:blue>45</xapG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xapG:swatchName>Lime</xapG:swatchName>
- <xapG:mode>RGB</xapG:mode>
- <xapG:type>PROCESS</xapG:type>
- <xapG:red>189</xapG:red>
- <xapG:green>213</xapG:green>
- <xapG:blue>118</xapG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xapG:swatchName>Night Blue</xapG:swatchName>
- <xapG:mode>RGB</xapG:mode>
- <xapG:type>PROCESS</xapG:type>
- <xapG:red>31</xapG:red>
- <xapG:green>113</xapG:green>
- <xapG:blue>184</xapG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xapG:swatchName>ISC logo blue</xapG:swatchName>
- <xapG:type>PROCESS</xapG:type>
- <xapG:tint>100.000000</xapG:tint>
- <xapG:mode>RGB</xapG:mode>
- <xapG:red>0</xapG:red>
- <xapG:green>153</xapG:green>
- <xapG:blue>203</xapG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xapG:swatchName>PANTONE 425 U</xapG:swatchName>
- <xapG:type>PROCESS</xapG:type>
- <xapG:tint>100.000000</xapG:tint>
- <xapG:mode>RGB</xapG:mode>
- <xapG:red>94</xapG:red>
- <xapG:green>96</xapG:green>
- <xapG:blue>98</xapG:blue>
- </rdf:li>
- </rdf:Seq>
- </xapG:Colorants>
- </rdf:li>
- </rdf:Seq>
- </xapTPg:SwatchGroups>
- </rdf:Description>
- </rdf:RDF>
-</x:xmpmeta>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<?xpacket end="w"?> % &&end XMP packet marker&& [{ai_metadata_stream_123} <</Type /Metadata /Subtype /XML>> /PUT AI11_PDFMark5 [/Document 1 dict begin /Metadata {ai_metadata_stream_123} def currentdict end /BDC AI11_PDFMark5
-%ADOEndClientInjection: PageSetup End "AI11EPS"
-%%EndPageSetup
-1 -1 scale 0 -45.0176 translate
-pgsv
-[1 0 0 1 0 0 ]ct
-gsave
-np
-gsave
-0 0 mo
-0 45.0176 li
-117.999 45.0176 li
-117.999 0 li
-cp
-clp
-[1 0 0 1 0 0 ]ct
-20.5381 45.0176 mo
-63.8301 45.0176 li
-60.3721 31.124 32.5381 35.542 20.5381 45.0176 cv
-cp
-false sop
-/0
-[/DeviceRGB] /CSA add_res
-0.372549 0.376471 0.384314 rgb
-f
-62.46 39.5361 mo
-54.5381 21.667 23.9551 8.62402 0 27.083 cv
-0 45.0176 li
-18.1216 45.0176 li
-33.1802 33.3477 54.6216 31.624 62.46 39.5361 cv
-cp
-f
-63.7471 38.749 mo
-60.9551 20.874 52.6006 1.02051 38.0801 0.666992 cv
-38.0801 0.666992 li
-32.1006 0.864258 27.0381 3.77051 21.9551 8.37402 cv
-21.2773 8.9873 20.1318 7.98926 21.0381 7.14551 cv
-24.5068 3.95801 29.2256 0.833008 33.0381 0 cv
-0 0.0263672 li
-0 25.249 li
-25.0801 6.70801 56.0381 21.333 63.7471 38.749 cv
-cp
-f
-65.2041 38.874 mo
-68.8721 15.208 81.1221 -10.792 83.7041 11.542 cv
-83.7471 12.583 82.2471 12.583 82.2471 11.667 cv
-80.9541 -8.08301 70.3721 17.833 66.8291 38.292 cv
-78.4131 10.792 107.704 1.29199 117.999 12.917 cv
-117.999 0.0263672 li
-42.9546 0.0263672 li
-55.5381 4.42676 62.7471 21.749 65.2041 38.874 cv
-cp
-f
-66.0381 45.0176 mo
-80.543 45.0176 li
-80.543 25.8945 li
-84.7637 25.8945 li
-84.7637 45.0176 li
-89.2861 45.0176 li
-87.9697 43.7939 87.6777 41.8916 87.8086 39.8379 cv
-92.0273 39.8379 li
-92.0273 41.7656 92.1133 43.3867 94.4316 43.3867 cv
-95.8555 43.3867 96.5547 42.4648 96.5547 41.0957 cv
-96.5547 37.4629 88.0605 37.2402 88.0605 31.2324 cv
-88.0605 28.0742 89.5684 25.5586 94.7109 25.5586 cv
-98.8184 25.5586 100.858 27.4043 100.579 31.623 cv
-96.4707 31.623 li
-96.4707 30.1133 96.2207 28.5781 94.5156 28.5781 cv
-93.1465 28.5781 92.3359 29.3301 92.3359 30.7285 cv
-92.3359 34.5566 100.829 34.2207 100.829 40.5645 cv
-100.829 42.7754 100.14 44.1553 99.1064 45.0176 cv
-105.153 45.0176 li
-102.93 43.1367 102.927 39.5938 102.927 35.9824 cv
-102.927 30.6445 102.927 25.5586 109.884 25.5586 cv
-114.187 25.5586 115.919 27.9355 115.753 32.2656 cv
-111.616 32.2656 li
-111.616 29.584 111.142 28.5781 109.884 28.5781 cv
-107.509 28.5781 107.202 30.8125 107.202 35.9824 cv
-107.202 41.1504 107.509 43.3867 109.884 43.3867 cv
-111.841 43.3867 111.757 40.8711 111.812 39.2793 cv
-115.976 39.2793 li
-115.976 42.1104 115.377 43.9248 114.243 45.0176 cv
-117.999 45.0176 li
-117.999 15.374 li
-108.704 0.791992 74.0381 14.624 66.0381 45.0176 cv
-cp
-0 0.6 0.796078 rgb
-f
-%ADOBeginClientInjection: EndPageContent "AI11EPS"
-userdict /annotatepage 2 copy known {get exec}{pop pop} ifelse
-%ADOEndClientInjection: EndPageContent "AI11EPS"
-grestore
-grestore
-pgrs
-%%PageTrailer
-%ADOBeginClientInjection: PageTrailer Start "AI11EPS"
-[/EMC AI11_PDFMark5 [/NamespacePop AI11_PDFMark5
-%ADOEndClientInjection: PageTrailer Start "AI11EPS"
-[
-[/CSA [/0 ]]
-] del_res
-Adobe_AGM_Image/pt gx
-Adobe_CoolType_Core/pt get exec Adobe_AGM_Core/pt gx
-currentdict Adobe_AGM_Utils eq {end} if
-%%Trailer
-Adobe_AGM_Image/dt get exec
-Adobe_CoolType_Core/dt get exec Adobe_AGM_Core/dt get exec
-%%EOF
-%AI9_PrintingDataEnd userdict /AI9_read_buffer 256 string put userdict begin /ai9_skip_data { mark { currentfile AI9_read_buffer { readline } stopped { } { not { exit } if (%AI9_PrivateDataEnd) eq { exit } if } ifelse } loop cleartomark } def end userdict /ai9_skip_data get exec %AI9_PrivateDataBegin %!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Illustrator(R) 13.0 %%AI8_CreatorVersion: 13.0.2 %%For: (Brian Reid) () %%Title: (ISC_logo_only_RGB.eps) %%CreationDate: 3/25/10 2:28 PM %AI9_DataStream %Gb"-6l`OMbE[LJ_q]3tS#.hk;RCln\`W52%O[2PJ[A8p.$lUE-e`+)02HWtBjem;l`:l^'^%YrXh)pjOjoWZBi7b__jiWO/I.<,% %gjf7q_jBgUr;Q]Us8D8Q<;K=,o"3_BQqtKl`IE=1f5JF<]]V232W_s5g1jbTe4$?XI3dY"+Wl(/pu^?*Da/X@Rnk-`]`%]mLQ>ej %r:KZcD]\oFM[qarn\stKs*ShXJ%kmHX,m:,F8sc,DuQrh0CJhPrpKU<=)X]qIX;%52`L=d#VDq2h1,=iX"XMDg\:aCp=$3`8hNHU %^XEepp?OTc)HD5Ent1DVo@:<W^AZ:poBhlordOh?fCC$^GP^oLhgY1AHAj_D\E<S<Is-=3hQLk79t5'+GFpJZEV%@<s6[_K=!)ql %n`Cq.qY'<[egLH`oq/dm>,M;G8rrP\-omT_?iK3U0E:1<rpo<NUjDXA\6Z:Frki*XrVa@3^\RN@2t&qZq!Yu'WW(/spODu'Mf7J; %U?9g?lV3sNrnK`ucF#3L<ua.Zho6Ai9qCCCO*3USh6RpqmD$;\qldb@X8M,9LMoA*rQhoO^NoRnf(e[^2nse8s/]491#;JiN;D/` %IeEE`hgThEc!$SfUhLqJMiV5ZrCWCaT7-_($X#]@Y_^'GAN0P3(S?0Vp7&I"5(<1,4R91h7_jMU2u*6-Is_(WCQ(0$pK)ihqr)HW %rgh@.<??/)-ElO$kpE8cDL0D`WS.$aIa]g]1@!J#7P]^W^nLX/p>;r1rE#WJrVkW.?XmRDGCT>Nh3\$+pN/4X%t0&aEVM]mgEsJ& %pR?*XI__c2G's(C4\c9lJ+;:dNDCY1I/*JCQ@J;1?ehiOrF,)p[<:j9r+Gu#p$lu#@'eI7s6_O)Y.N;t>%=0';ZCD-mPeL$]Dh-B %5(3A&%tFT;T0AiqH2$F@IscV7RkMMOkB11hIe`L"?ep6Es1GU4/F)PFs74`S[pQfF_lpdq]YF7f]B&]FJ+\m&j6`=SeqZQD5Q1<1 %GMg(3irf8RN@`PVS,6"=If7SOJ+N3j=$FCjs70lUXAlb15K7pF7R-D$Y<LT2?[i`,\GW4H1B,1>bI[TBhm!+O5P""K?[VOs]AJ,7 %iXc(em`eC3nA>5&2qe60J1k,>r6sF!H2T,jrZ9hbhqnCna04?JrI44T"6DIKI/<!]S$1]Jp><U`k3`%152,&OIp)pCY\Zp[qX?.V %^\[_\_^(fD`J6*brnA6]rpX2\bA6sPG9=P(-Uc;P?H/&prueWGk-tBg`?3t%FMIY7B>*oGhd[UTou2\>52@XCLD9Hgp@%!Rk:F_g %5%soN@Z3h.pZg:QnAKcss5EJ)J+i,b0Ae@!qs0_Yrp>IO?bCmcjj!6[qUOi![!6u3\c;6m&#]I+']Q]Q`a>X9F0P\*#5l:JI/5L3 %V='uD+7C<>n*f`5kC(*`p[u8UkPKKGm[ihfn*]Z4mcM+W?+VV2q(CKWq)k;3_n;W4CWn]'OttJp1Q:MeF;b\MIOt=4UQ))sNjPt9 %TDRZ[*r:;WlPdJ2\usI[O$0r7p9_!CG2LmF[*e`]=tAp]Vj:P%TnW>JT@W\>Xu4=I=4cXk7]iDVXt-\+Xt/!uT%EYBY(q-_QM!f1 %:9RO7Baq\g\EIQ4IjJ?^=+9"mXjf/0-b]6"lgKVu&G8i0i^6mN`8Bf&YDYX"^ZD&3E^DncDu99kG5OA(-fX$(l$D".-iI]LX.EU` %<;sMi)HW/P>"&6@?N+;eY;s5G8qjZRO*+_;QbN:9JSX8V_f`07""sS!o'9G]e)U$u^_Li8^Tq2M=7rU7Y3sn$4Uo0giOV*UpLi*q %`V"J)S^nmTqt9mXV7UJZo=d-\>hf7,Xl&0-kAq1":o']70!4FbaKMiYc.tEC%r3VdqXXt;lG6Y)aZ9WCoHD!3\3$hApRj&81nN<m %N9b/SRF`%QlY>bTal/cU9X"'%Nq&l.p[_Zm='Wd-YH-H\e$T\FqSp-e\f9u5bHLfTLNU^3PN@)(&*o,=9'aXcP%,h/F$7V(,lN2: %jBfT4nWpe6qt4q.E3_EOG)UZfK(&ZE';6pVYiF>\hUg68H9PZP"V+Tr]96DHqeKL5i[Pbrjf`iM.5O'=?[dtNYPHl;md`DEOm`8% %[8s<_r8MqpT0rr;Ni]u3qpjSPEDcV^Y/Md]2m80)m7Q]M5Eer>p`]H_b8#$=Y9,0Erhi<;2)j>TlZm%fmaeOh>\rI]`jkC2fTu<# %nSW3Ra8!<=-`+Ja6q_qKS%H)7*uBQTc7u5%f%0&1X93L8+.#Z'CDBKKqa8<D>ao)Dk-OK`Umn6`[k4fM@I^&S[GGmpZEeY3S9I!\ %l`B-B(HLTTFi`s+b5msi?1_O.6`h_>::$I$42l5lp%5D.S+OqIGo_3)f)_/3H."KOoe]E,JIcefF>_?GR2eUTe%uNQ5E]L`#<b.Y %BA>C`*dg$GO$mS3CjY\j@??Pmhf8@Tn!b:.?7#/.,Xp6V&,'`9Z'K\6R3't\H!E#iiH\^)CQo)&rLeZ3](\k-e63d3.uLtc*OE$d %0H)\f#d!3cTKG/<'c2-%eUW<'l4rZ+Ia2:Q%een&J`WW%U%IS^92;b2jn9EP@APFOYe7IoL%pSL_Srs!*gV2DYjPbCXM=._TbFFe %!VoK;M2s^WSW;(iG'QUKIY,>&HX2&(H-o9jkV";hn"Za?%_?7MD=^p'bm.pP6T*-rSMNUuHrRfNDU-^o@3)@\?Df!9o!of7[*Lha %5.g*P75`Gj)X%hkcoYp69f:9K3p:9t`Fi1:+&iQ;We<8D4BDSM&,dTbqTILTJhXpZ28AH<q2]aWlam++f1EO+eTDQYb5.`aA_Lj# %Hh)HQ;uZS<B6O7LTRZRZ#>l;gT6L,js-1:e:@#*_f>+#!FhO5aC&-6=2\^B3.=W`D40?\T/ZsTO^[Md3)=5;qfhjKnW7M.NHk;S* %m*C%+MsSb'r\4r8P-:b%%FsK,(Q^SJ(8m4&[4!,Z@jO6."SbrcV(Lq.@'bXjU/m0npd_Yk:AQU)`HSdhQ2o><(D6TkXAS<kPt('F %/@i.%;q2][--IGeqK^2d7o>sT9:4Ol-Fa1_?XG7jNek9Vrkt;E)j7\H(EeWSb:O*\[C"IGkn;+dE%OJuYQM5-Y,DsBiq@)78m]r- %GHW4!/-.9\ol5i>[&2[2@lu=04fh.)H6VcWQAQYfHIPN?kd(Um&YE!UkOY-J?737de%B4gWl01RGYs)8Q<#ZMY=Zp2g@""LEoUUV %9=$cI:d1hVN%-3aP^HGQe4cs@k0MjmCCc?>4g/]8f8:?ODRs"-,0:m$@]65";Uiu/C-FaF\>VAbjV]7WM_5YU,1rK(/#oh;mmnr- %1)/PjYc.E?c)IHeFYoo&$)R4Ob];DqPM8\W2j@\k\Qs<aKT:5:Rl(b0`WSst/l?mtJ#F-cQV#`HJ9?(7R6a2mVM6NQ6[]DUCXCd3 %>N<l[37o.IK<[^0j$?ZcZSA'-Y+RLUg]43oCG,ssk2^IC)/jo;&&*ta2D&9d/NsuBMlmG:o$sU+C,W#l`jqc?l#Q?:/gu4\S33>M %b*V4cnicNl7/1I;eOsu/n$6uFE)P<3it<d"PaT\S>,b$NZ<kBgoSB7h+\VI`$Zs*FZ8fEP-eBJW=glp3@QEl4@9#eF,qrENctC]$ %giQ@E?@Q,hXH0FKrBVO4qa68<8Y/_LXt06Al;)_*IQ\LZCQ"UY-*Wum;1&qpHs4O;>C9R5Z8q&T<m`f=/%4ai<m3]pP[&8*9[K24 %'PT<F77F_T+FZMVj-c.pBBB+ug]o;@jBUmQ?X+bQkR_g5W^,gkS&N$i:j2K4Z]X]*VtF<EKM;-M=17Ln3"0X99!j]cCfi]JO3/@B %%&7APS^]\Uqe0pXJt&'H,uBWih0<Pu>uUG3`.C,^G'W]*@W;=B?SZ$M@mbXZ[!ZoS1;gckl:s#Ho?iQA">fYUNht4@Zh1P1l0)-9 %E%#RIOu\`MQ)'G9'DtDImR&Jn+.;F#Jl\:a"T(*`F;t`gF/')'VC,<0ZRK#!hhQ5u?Ho[K"(WpefroM-U0T/*V>Cl3KBq_&FN`q: %_6<aR[=?GbMCuMq?i=q$^U?MmW0V)2<*)07?[$gNbpqIKV?u4J%*YJdH#6ZT)3sA3jjB_`)Nt[JG5F0CLYM7$+AYK0*pQBVc2tC# %\/kSXe]5\=?UkK1D>4c4J3':2JG=n`K_&.,Th5a.,=Ou:q3&3aKdO>N7FF*Z3X#7*h:-DMNg'tAgX@g)pYuLgs8!FIQ\%:tP1rS< %F6F,j,YKpq,%/P@j`d/'h7>e@lYToTo;;69`FOnQj(B4OB#In@P+OSK68Ma)VtC1lb7EnHJr[71HjkA#>&RUbLC*q/O`Wc!q(kI* %0jF@mmG]L/9Zb%P,,T"LaQ)$q9=^T>+(k'W`m?`e@f#Zd#@5FaUTS]r[E\[(m3U(_Of*OE5AccFPP[k2KefP$rPG(?_n?WG'^ACt %hnid!rJKm-2-lnA:RGmI4i$),>!dhs>h,\mW[$<"Jc93BI#9<8#j)=3E.gER/(?D/ZqS]Dg;+C:9;/nKIddd%+K6C5i7jVHeIA/h %*+W/k))`"C;NkOd$;cISMF!8n<"lPS$"Y!N)<D_])J!$)>g)D-WK;!EhsM==GsI='M)lAp_$+/"K7u%EIYab$,Xl/k%k7fAU2gld %-l2q8nR2$#BDL)[T8%;XGL8/$(/fMCF:^ME*f+5Y#"Fap9"a0B9'=e4;&_uBp2qERfOD:]?/sq5-NneAYIi+cf=r@ZY7ll)bNnE5 %?Dk,Z56(9@o[ATjUBAr>_F#@VJ"]_YH.;5c5P]k[n]7?\Fuqe[C)iHS%fQR)+EmC@HC2j+!A#"*EZX_[1^i7E`WHS-,NcnVK-Iq\ %^fG%dQiU1?'5W=L\.F<D:q*9E9AZn`_h74t:N/8rFWXd0[@@_3@N7?2H,\n]!?B#P"Z]&iFbmEY8\IW5gc3@')>@P:2)uI]['-%j %&`k=:Bts'G9]b-!$5e\TCCe'ho9T`BOk2@8ce6R*l-t>LH=T8=TY2BaO^=qASojttZR>^eZEC@ZkPjLna*mFBoYWoamm#_@4lUY# %T+;Pt+-&9jq?_.`4lCY!H,/_RP5TX@m;UPR2u10_pIUG?P6Aa%bhE0%I_b.*J3P.:r3fX?YJLN`;JY5>oTL5tEkqD][iP<N7pIp& %PH"[XRHT+DO",]$oHtXN9?!PH8oFsJT5`M>T$TP6F@S2SO8@O<Nu&$bH]U^XrTWV.cblHk5LUlAHgHfKs7H-9Is,*>s5S60"/jIa %KpSu9?L_0iEIIfL?`3@4cZ_1?MsL#QDZ<Q9SfdKpd96,13afV1dc!O8aS&q@brMI.dn\+-r0U!>`HYPf:G].C9BGSp=<a#rKS0f3 %C^<P+5P&$U@-WVhZ_9n[?5#;i1u=HlMiX9pdZMOhYO2ck+A*Q(.[nL7oW3jLntZ[EWKg?sRi7aBEMq%Fl-u;h-Y3FY\t0UE50o\K %&XCV^B;YOVmPWK<X-#8E<L#/g+d'\BI+#N)eAH'7;Z?,ko/n(fkDMfJb.B(e1919cFkQ>d9H&]t]q.(Y@;1+UOf:]Il7=!!N("bn %qK.UmM\stB72"ML=VN>jAb',4VmH$0QP08BYO^?Sq%T_o7c4flg@]T7JL!b`q>'i#4mKpgo"2l:LLufNbor4^Oe<c.8+kTlWLp>C %GG`=c5.6f@/[!PSY2`(9JW_Y51<)r3_auq_F:9VcjGP$Y@U'5%V3=M1$SF0H_uLH<9FN[2bbTe:%lILoM.mh53*F>EJkd5-o"^HC %Sh*fblIkL'/6M+!la_r[6tn(7K_YGX8)Pt;\7m]?1PaFJmdR!+E#t*&4>fqmPY!^R+Pot@AdqC<?=KO&LZlCTRQHN)9XQ1X`dTI6 %Y5s&_:?a%?+:m-iCKTeWTmPGXN8IEjgW6C^_Gh,l0C#seaq<Z*e\0n7r?kC_G_B7Fn&ZA-n)?Iii[ijDKN&=PZ8bLan@XXL>J[t0 %a5D66gXU2nkq&$-psfmV4']gBc>n)>MOJpY\p/L+b,Y(!q[(/)*Uu?7nNS&a5998Y*Uu?7nNS&aruW?Q@j(SDE1Urf\BS/d_)kKk %R2\!$Lfj%]P6baL+#G#g&^iWX9BWLqcTh2W5:qgR?OS/S#pX$m,>OWf_dDOg][3"f830H@G+eU<5@+3=j[V!(jE81HCtImCVeZqE %^7I\VS+lH`VJk/"'E38ihO1I*M@N/BK3G59N%jG[5bZ8_(Q&q%;<^M,&$#G$q['E(opVUWKL+!Ic09L7P`(oI'U_(=(hc:ALjBi\ %hjLTQ"Q^hg8:=4$r7VpQ4td^$aOIb!a.amE,c8D$Fi6FF%Wc@Oi,p(0]^ke[VK)7FRNL)nMZR@n%(RM*W9@dXKf=11?60]W[IB)S %^=_IJJK'$D9B_nq.=6ldTJVBefdGi/KsP/[;\:rfgta1e=Bqn"'[h8q=9Ppf5L)nd5%"$RS`r,3(\;X\,9uBX#rtPu3W8H;SF`bL %Z]puVKq+Nq@qs=_MTnpF"$'Z<JUD,(k.b\PX(<VB,O:8Fe5iD,d^HSFF]><J8p++5g.A2SPLJb:'W\!DAJ73V=#Sm:?J2+r:-*<, %=;M=1A`m6Gm\PduOf*Q&@\#p)&fp;>DU<.Z*jnHi.JpHmP!k8Zq20-S0u*eoa:OL<O;b[%Xm?/@;H?Xq0^@@T+raVSEFkOh)tuXb %6l;"<_g;*)cc).s[EZ9h6="AH[pI[mH9W^(s8N!h;thSXJ#GI#H#:g;[cuW.j#TtMD<A)]pX;1EGocK/#nuWL4hp'MJ(_;*mA,-\ %[1.DV6fLZ+:f,QS<;$"=i9B1qi!IdeU-kLU\HXfKmp:f[?fo!@UXpR3dNSWmb-kr!+7ch52+Q2`T2\b'<ulRVkuWX^Z5@qP`3"/% %@dV5a.r3&F%n6J!e0%=:6OHi'Xe3^/qlrL3<Gm4WDs4$tl@j4(j"<s8TB)MB-tkktZ37Xa4*,/W)?&'YF@OCDr+nJ5aWIrY+2$\h %C&L,P(Ndfl2U"tF0[kr:C?Zp>N?uX<m-euiqkZX?o:"^Lm=:D$rBCtNa8_rcg+df"QVLnBd*<Jf*n.I.43P*q>aqZ8XGS.u<\0YC %dlg;#8W0O1Q;K4sn"bisK,5_9.U>9>6Om:T>a9:7bHOD(#ka(4V.G.s'/`E.IQo6%%]HV3)Of@dhk'8LF1kFbouL=;P6RR[CitLG %RjX1A71BM;NR)]"=1UnYdZ]tD74h#5lq>rkWB'_o&[>,e)#Z0TLT,a_&?<JIFFj__:PdFTlVCSJ.^Cp@#Mi:-(GBs;!.<BE)B-XX %'K_lRcES*j_H5q,n4aXA/9cEg5i:%ae0u=^83PH^h0FhF)+@93TS_c(GH+ih!]!(ib$TjWr0a#9l`0*Lm%,#W?W8tVXt%P;'JNd* %^q7bb]$AuoiR8sPk,dA6TGLu$``k[aC$X-/:S,2dq<OWg^9cI9-9H;%YO^AKg?UNudQb2.lh%^hkoZrET0?=!rF>0-:+p8mpYSc- %:bQ$Qmomk7!oYUaQ"6i8U@CKC<^dmtaK6mi=$Cgu`Y1It`#h&79%#A,%na8*i1"gb,*r#\T3h"_I^b)q5"]8uSbX\Q9=_*Qc[D%M %pJ>2m-d=_uY*C`N58jmk;@BSO+maT+9mj-KAN=EB5ORR/I8MSbpr)R(_?Na&LH`2eocNf6Y*GQM36k=KG4LRF:4C<W2QhFAgQOO' %0l4$n5BD?lJ(FJ?l/75ABb:9iqP"FD_N_ka(ipRd/11B\CK=j5HpIP5U7-$?mc:@#P:IR=77Eu^U@Cd1&UG%BpLj.@d!Ho7"*tKX %JUAk-'d/PDTW+rI*<EhCi<4rlH4/_AM2uk^ne@;9ptsooQ_5BiT?au3kL,]<l,hW,D&?s9(27!;?2AHiCB#8-)HS]Ro_jIHJL_WM %-72uX]9)Ma8luUX(qZ;W(DJ&Do*"e1WsZPCn-lTpb:toa&JIP>Fi;LOjLE;,[#l#"\uW-jW=I72iQ]]i>gM>r<U*UI+i0&-`Hrk6 %4i%7Z"5(tq%Zi]s#KWF;V`qY_HAMb9(&['iTe?<9Uo@3[25dF".1lQG[KH_`LSlNb:"RP3\O(A?em'[`7rR:MRWGXuS>eX5.(OP/ %f$TsUIhk1Nn7fF7lNq&aSGBUZ@U[n>lJPQ/ffWO3ERDs@*gN@n6+l-/3.4$iiH$&r+'R#,IZCEfauu&kAND=+G$^-.-r=%k(-!s^ %P$5hHSBObMl[2Hm';)9UfJkFCX=T'!G5DZQpns,Cdq!HH;&36L"*IbJL<eB9O+/Nb4/>6;l:&OhnE'8ie^K6G^NG$0!/=)<i)j"W %f4C5JrI'1dIki6i3/Ejte9;r"TcSB^<)GII.m!lG49NBHJ:61'96@t4E@oTqaEc26GJf[H-6oZ0>%eGH,;>#2<H$O[CQDaG>l/Vp %3VNMm)7bPuciGgF=8'Edi7ab;d%Dh&b`g'$Wb2#E8qE\U9W^=6#cgZs8=!N(lLVMQU2JPleiX7N%(mQ[4WFt^+nAP$mh@Fpcsh_: %M'jFb(efl*j<>KlI*<cMdRjBQP!OF*K0$OsGZ%Ua=^kcr&>6B*]9C$;$><cO^lM5F2$?YjrocRiftI38$U2"_s78A>rZ0sAdl-V) %W);aQN0fojB/kiOY_rKa4<:[A%rdEh@#:s`HpGBtUFR3XX;ur!&P`cQ&Z@NXf]L-<,+<#rEDSGPkqY3,q&N`'XSY&EK:j@J:d+YA %6-*clK:j4FWYFer#BjBZ\k>@d#]_sV"$819pe7CG2>6K76t?t-i:J$2LED>mB$/!T8,+#5JLll<>PS9A*Du*8AW?j-!upAW]B(hG %-f?&se'[a6D1$H0.\_c;XrXo7U/[9<KT5>C;MQaXWL"O'5s!<'q_RV]HVn/>Tq5S2U5F1O*S>Ko<T0mh*S!)IhB$fDhs4=8LYT(V %oXTp"3chp#]4G<Y>9)\VZG52P6D)GRf,(Wg4h9TAY3TFWU$:iOY1&THA+Vf&&<Q:lJW#nDAnG7H:#%;JWgZ2'-#.J1R3fG'YK(cd %jJ9jWaZ(FSC4`GdHI@nP>+dh[6$^>"mf+W\66cP:kRJH^)<fZ_qVYXFj:q+;Eo-"Sl4EGTE$5==U[n;XDBK%5'+hYZn@*c#i?G$i %8ghk/H\<XcCW-G1/I'("IM[h#O7?)=rYWiRTg$WJ+(lKVN+\YE'Bq=]\j)`kc_%g=q!8`VfBMXol*FIjNp@)inoXTOcThs^WgBom %IX[gts#Bme&ZG<LcZ\GT\1IRU*[!m)_I(%XJGjn(MR4#nFN=Q1&Zb,B65;L_dHP^c7HZQU0M%KYUmf3K.!4[7_B53OK[!+e6YOd" %ZF9QP6h"_-d_JZl6I_D_1L_B%EXlYY@CHi.L9^%!_]]Tk1Q5o=-_IL13JM-1Rb\8!QeT@X!SDI)RfAULIZj*O?SXeA\JP$&=Mn.m %m&&%6'\^J)?Oh=OHY]"E9TfrEBY(N/*"]:;mX=Z5`<rC*Ng8HSH[JU;N26#STPff3?.Q>V(Ms&4=*sa(II9>FDYc#QhcsL#nr$Rq %nVS^Ts'8siGaVb*1En3)coo'=")sL:.XA4JhtP^348a1*#[@;(\_K:F[2b?t$n^;<LC;U_&C\oBm9nfj@ZH_Wk*1;H3NC+fbA3X8 %o"nVX7Gc^SgIo<[o8GbL\%K\G4f.Tn,Na%ob_>3kIP">T$9Q6al-A!I=Gfha.H<=gF)gf7MsNqEFTM+,K2\Go8>EZbZ_UN>XRgh> %5_gT?JGO7V#kDN;.UV`jrhOPJMj+1&/k"D$8cM;M9;+r/B(RhXl4e.(f'gBRf@.4pg)]b`rnl9krf?`is&c(H]dYmiEUs_@4ktE6 %p\sjM<=.)6nYYq\6thjTpSV)eq;0Dnm2X3NccBs`>HsrVbRn0U*BsHgBD#?lh)&rRgZCiN;==d5(M+PA1lkmOr:'GfSBiif5rbo/ %m2AVPE_H(;dIMU-bK;MBC^mbJJjlAugYUu8_o\i5<1.lB9:]3!HN!DY]fuCYhOe];q<@SpFY:'g-^"#fHA6+N%)(J70$Dg$W]2=k %NjlDCO@:2&Z$U9P3^R0\`*,>LEd%D)#bKfR#$=*B]G<*ZhR/H46B6[#>YOkmcV^!_eu%7TFrd0L/e':SOQDJT]jp;'p2rC!(Lfcr %KZlAbAr@SM1hnLuEu8m;EI?@nFiqse'>Vig3mu2>PlF;F]m.e[glbAUhZc47,3I:Q&]JJdZ,AY^R$[TQW@`.\'a$!S[GftEqQqn[ %Ru[YVb[=66@Ur5N)0XEKAa(EVAF3YrD4)c6`3o&n\5og0e7tM@)HU36*ALuQff25g'*FJbp9U%:0L/bf\)1CLXfuubB,4"0Xl\:t %ZCZN5>/RZuo&@5JaKcV?5$L[hh*t`FVY)Yi`l4ug2e'k-gXI"Lg<2_@.W(`'%+(2$gU]37#blQoDX>*Krb^Q-N!o!Y3cBdE"2-WH %2*gT3911(3noaETn4$Xfa,YibjUBiCCXXp%&W`#@`;ic$7#Bob!&9721"R^8I/pZ)C^.1:N4?B*ZS0M(l?fIH4jCdLZ>CtN439(@ %@1+<'8^P]uf6T9C6^`jNg;MQ_QD#\1['^#&/M(eNP\V4^OW,?.6=$GI?;ZN<R#C?c7I9fZSd5/fqYhe%AV832E<>B5>m=Q]0ngJ3 %SE9G6AK9a3f1G,32Y1aUbc0iB/Fcc)A!@KUou8>d2Hm)i;g3f;TWArmRrO1nfWa4:f1%R91rRIn+P&`m1Y4_J!(.rWi30P."`p'U %5//.>[qq&5UP0!5qD[8)>5P8X?=hk\%-p#bZ6a]+A$r;Y&l]jk\e[,d'mDYPp1gA@8M`?u3mo,Y^1u`_N6sB;ROKJIWC3J&s0Xr? %EcAa.UQc(^mE`5dF18-N<K]s?+]aqp:#_j+UNHm]0aH9L,^b%L$H<YrM'3=c3LM?5XOW-78^XuE/=6gPdK3K)L'jn7KuaQO"0U>V %ng>!Z@-b+Cs"q0q%XsZ@VfsW2Ifk/(=DTp:_QFX10aI/QCCK33lfBhc"8G_3"'\&OZOpCI_h_/b)"(Y_0kBiGg%cVsJhW-;E,T(\ %gh+oPR+Inpf^`HTgB3\J=0TMUL*e*\FdO.O>6=ZGil[rqLtRqQM<ePh2p5X7EL3=-4Cu_4Bt/@)9+^@KFGm9mWtoblR1mc,`eJ[Q %^ebed?n\_T#R8"ss%oQK5JKrUFc*nXgM>#K+5Y[ee$NlgVX91mdQstNR7HBg'=+Z9/ha6#g0nQ5Y]J:IiU#k/ZiS`lM%trA'$H*s %[,I+TAobM?7Ra_`eF&sTc*kYR%FI.@P>;W=2s#MScI*J(N;dS'lTf4eW>5mbY%BAKDMjGc;oEBD6KA-GE3bo#G(%>=NFW8*fkZS" %WD?poD/K=,0"Ap4D,btM,';Y/,7eY6"c'Ogh:j1)]$WS,/NH'8YD&Sjpa4Z;rr1K5L9]FE2eMZ0[A:^->`t$d["PiFi$LO(@XoeG %pGL!.__jlqQGjV5Tki%gRSAJA8Tuj1$>NC6`Pj[5FU"`abp5?-l"=-5lA@krI[_gqjCddX*co3#TiYuseJM/Mf'64JL&^c)ZV\JB %$:Mn995X+l4H=bql;[&9e3TEPCGN>Hf"KIiM_8Woi4C=96%PuCoj==?#qOBS"q*Sd^Qq;&-b%pD2M7"#2Y]%VmEQQj0,AgN:q/I\ %CCsRYo$-`=0;<K&]sgdNolCG5MZ'iAlQT!n+![hcAcq8=dnuBG^A>L2^%MF/8iGo=@P1cd-LB'7ZV[D-SNOV^;jhcLb]OinACD?8 %mA+,#0a,cbj.30R2e!XOI%mV$3pp,M&-cgO17OdOU'+8.UbJS7a&,OD=(2sZf*3Ys'frK=`Rc5.BO,C,UhiCL"uRWK\8kLk$7!ZV %&)=uGL+k$IOY0hCNOr9t7#GXa!MX>1(Y!/'OE7ONf0$;32)\id#,jZKTSLa1GX4XN$:9]kn8+GZoU0J``oOe&+Y<34MQe6o25rL? %.EAk;X0KRQG!*.,@MXn30P(c7is]([&k(=Yp*/(cg,.f8kIEo+XbYC,QL6DTN<G!;,#F*CQk!YiS1+,sLeO,:C7ei0+I^&QfV9oj %c^Tb$3Q1VKac5cCm"FSu8u;"r_M*pc/%)%HHZ^Ve2SE^?`+=WJ$m:ih'k0=-lISmmQX\bU+A5po,25&!d8Y*qY-DD3;2qR1c+%;9 %%D%f$g7]H7pFr?4GFM[''e`r36P2tfS'e:t(,MOJ%u?3L,j>hHf7o)(-*Fq:He41V+=<Jg_'\l+!I1!/,ZeS"2]0:G];d^B#&tZA %K#KS^?kJSn4uEe9$jgNd.XBhWb:[qP2nBUQ7:52U&LQ:`#=HV822nT>pGL#baCF#FKiBi=(?=EA'?&N-mT_lF01[(Q'io+-M>-#^ %Lj<0-"];g\g%Zf]go\gT/*pk(R-`!Whh*"?EFT0%^QAaCgJo?*KTqIi/96>3]C$FZaN2Ug!VRjnNu3.ZPF-?9EWPor0]0gi*HqE] %mS07`ds3gGHVoID)p=i4E:3M,B#`M5?VB>S<hLJAaPAdnXfXUm<$r:eEb"O&9N\CoR1#DZ0RH7D&)nNNF,qKkK-B@r=aS$!afIRt %[/s]pZ<I.<G^n47-<ic`7Rg@cB5]Po3BIjZ:>uAEFc3/dkQ-M`oCK68"gesJI(l#iOpPNGl/u!6M>%c!L!_hb2",uedNsK,2CM=r %P2T&tEFC>U5e\R_'c:1#fUK?UgW#QWTrA&88#4E?SVD'+D>RY<.J;)nfKkH2)^(9pa?/VZ^-hu3F9)PiAQ44T+KDS6>@Em//P@TA %k;@(C`C9IfV4te^C9_0O)r-ZPG;5Y%eU;475!+"g,qQ?5hP?pPXCXqE.B4bQ%Z!+.4e1M<I#Ybi\C;&JOY1+KRZ/`lB/E-(e^qX: %-sm5h]ubm:bX3AI7T;1-?WTjPkUabW>R^/V*L=S_E(^`V@Hhl92Q0a$!87?@g%l:AV.q!R?QS:9]6`)PLScsiEV7GBBd#Zff3tZ" %8(5RR$!umaKVmq8,uIa;)b1S>Y@%2cb[Ri;Y+jD*/FTQO<AUqt<Xm#X,[3k/Kni>9X_7fmguC6B\61hOOINb*TW+n_,K+![KBij% %bq<<o*F5]#U.oGr%iSB3`2V973,"#O-SiXNlBD\hdiX10(=W>>lnk8#&,c>:*F<Z\#'on?19\GUc'r)>lK7R8gY#@@7sk+%j]N;b %Ns=4i7<%XLL=aLeMb+Oe*\i/FYp#39T90pO>'hPSO/CSQT-59\OZ;*FqXtVA*YE:"!%kN(0f-9#1"P&U*a+og;lugW7GC3ZRfV)g %?YY3V66'kE/ZB41/rB?E+BHM:](%coa0OID4a\LkG^"iI>C(.m@J_C0Mn[*"eG;^"^^,d3h_<Z3(.YKhkl&[;0VTJp"=Sq#(9Z6X %rC[?aHWp+S]up_J98STI*0bR<>*%N&n7<Yu;FQ.VLR_M07?ef*Zb)4>dW&LR]u/XKV3nE#UY6%jZ)TebQ1jqIjSm'Urf*)Jed'B5 %]$I*^*1V/YKt"e4kNS\-@W,6$.li\J#Y^po';/9G&T\s0TSqiicIQ\FA6krs##+cre7Ad-5W<1\r)0=sGA"XS_[6pU@Kf"kU;(qD %k`G@42`k"`C*+"V@Mg=8<QqFW7(Bk(=F%UTVl@B^EE*X:V`JIdgs1nS(2@!PhA[7I-Y&sL8MB1SK>jYM/+]LQK3TrUqZ]?X-!BKk %k`ZKt3e/$O%M)FP9=9RdPO%g'ddtmB4SDbp7W_g!.S-)1'Nj)6UHB/(.l<p,;;!IQ^EWSiZ"8[)&:ck6^"%B6DrsZ9Gq&A*<OfX) %2A0pDh>KYmoZo4W,"1eKCm-(ui0e,R^#A,dTIn0DN7b]Z^I8j'!ge(L?W7ijjpc^aoNWtgV;;DHdS^X&VhW6ZEB1s!`0lD`:rKIs %E,Se)V=u1P-,dgt5<K^pPi!>A3JL=ZVY.?JB!uH<C34V07;4T=-L)G,AkfOsbT;cj_^-sn/US@o/3pa*9kVBnL#:IEE%am2g!uNV %?irC#eD7qA;MmTQ)D8jm<Hu(O.,>,a@$dn.]n+Egi;/`B$OCnJS`@+kXOnfsp5#kgdHhU*!eELr\,*i\1,.c0UNpdEoNZ`n?81!P %j^,lFQG!d77Ri*02;7r5)>%(*eP*HqQG#:+PsMuH`%aVTYsp"t:e2&L*Q++6VIKf_0)?H#U44di\-\#t"_7nOYi9+n!2%^/EMk5k %17OSSDc9f5MVtcTkQ"K+JJ'2qlOp6A.^dtLH_i@YojC.Cin1QeP&RlKS5&oq@em]G4Ar:@+ihFoXa0ht(8cqD-)-1k&V[a^7?R(S %m3m7\#VgJGb%5r:2d*Rl7<.1u_#R>B0Q!tbZ:,6>ES9$uLuo\`))N:4FdNXF\!Bj3Kp3R:)-$:89[e]d5Bh&P+fZm6Gbg$tKWJf` %Gu<+?W;:Wo)8ASuZJP*YOumb;m/m#o6pX6&%0O0r(u/THgk7sLSW#X3n_E0U!HhelQR_++pA(.kc_Whp72g!O"V=`@/W<joo7-n: %RE7UkWQBV-SP*(:_a_Z(FTLF/'q]-C(!Os5L$]RQq7!h,am*Y@Eot%Z@rp_EVDrDbGnHC>!,mn-r0"a]2;;e";XW)VJ.TmX2*i+o %.b[hFr!4Gr:,Z*/oc+C(nkfJ)>f7ue:tD:cr*+g1=G*.")-e`gb#UEU!>Ztm'R1#O&`M<E9,YWO&H?6PLrY*]2;l\-NVbIbr33TQ %8Z.K#0Es@3"rar.>t5Rb`_c"2167'8=$3Ju$I#5V16j@*'6<F/1SeQf0W*,Z8N)$9AFVRnd^WnbjCRCU1r`MQ<(MYPGp;!X_tlfT %@RW2ON-dGGB>cb7dbI_F+&F>mh-3$[VX])\%Y:'jD=*-Bq2=//kIXOI4MH16c+B#Y^A.>=2nr[p?bV\DpK0o_e]iUCm5LZoIJEcc %0CSAuhRr[XrEk'PjpS`o=#^0F](:DU^R%+W#R`jAJ1DLm%=*T>9@dUkknsb6<Kf1]VJDu;9$JqLd]SILnNdW*VMHK(d@);JK#_-7 %Lh\&Yro7,H2,$;t,@BDulO`KaPBj1aq#gP"/+fJ5(1,.[.8DsXWdhd]mnb5a_D2Ht/W&p2nrZgeBD&YU;o3fU:j&#8/;sim^_B)j %%_.j3/0Rb%E>h6_+d<#c!f<4.L+h"4"!r[mLLO"!N+b;^-$->YN(N#Q:0?O5N9_co:0W@R7\"KH@@qZ"Y/>ph.1#1\42r0a990'M %o0S\*/[":ANuH/5?A<R=QW\p%c6*<(0AaR8TBRr^(8f\4RP+CWY0it9S+o!CnA@Lg%9J@WnKtNpXr`^614]Y37BDuu'eOe_c)F@` %-X$%o!(q;*B=0hO%r@b.E]tBG:_"nlbWR0<[VQ@/8]Z!CRm@a2?Pb]$=#h-Y'MAX(iZ_@L.aOASK#sRPG:5k-6Z4Z/mNV8q'[rK2 %b=oC,3%T<V(c:@<'Ja8PB@?M+IbGENhDTqQ)V<>;];?!>V$:AFG=@2$f:0SpaoiRS(Ue+ZNHk?OIXd!:gLJ/1qSAZ(hI7YV-5N=J %-J8U'#C5;q$TM&-&hCKD;Mp.+adk*QUS!GZ@GeGNkD3$&?nUcA#/u.kXq7'K2*@A>r#qUg>uikCXoe"h[HJ`#,8M:o=hjB.\8dfq %f36.j;`SC^C9i&chdsV`o:i2GV>L[oWQ#LRC.KD7C(f^0,`>%+L_d-*@LJG:X+g>5M:(:Te4La>(AIZQ0f;&Ohn#Ms<SPgJ.aD]W %*-Penc\V&8$0d.i,e16M4aFs?KGnEJC*DVpn>D*j=sLGU6f2Db4lDlCE@QQFa<3%e5i3tFre*6d\VC!NoNlEmPYH;GZ2r2G$#XQc %DkEYaJ_#QCWe#,/+MHt+."uZ]DAl4g%,.]LDD73OoR`H502r"!Aj/^Q_E3RF+W[dNP4W9sHdlR7-sABDA`,8M_$$[D#FHYDSg7H7 %V'3L:4Qj0_qF"i_fPO8&_[`i"Y;KF#>D&Fa!h`&c;$@d,FSDON;%)kPd#^mInQZY,&,87:$"O,,hFIjNWQRstGk!*XN,Nrs&'('1 %7'f&E1sLbQEeDDQZ,&;<2r]M:\Z&(WRI)Qp%QjTe=lj[Bi;#kmQP*F5d6thd%Nr27?$7-KhIIi`Xgo9G$Dak]!l<n\4$!Q9EIcJs %"6CbC(qC]EDdX35d@H5,aau40BnDp/3\"-![qCA!bU1WtXta*<(96n@k+IloL`\Jr'7;1;RjW_ZIWpC`<[%7W(#CaRb8o?#gh.'e %(`?3o,'Q`2;^;DmEI^&aC+T<5lGY^5N2d1%[H(#9:Kl?)D5CgTbiIuPc<F^?b:Aq^`$&hF[U&+!O^Nb'3&dY/WJ\qK\/Zp&G>4od %k+JVGM8Bg_d0(^SWIB`7j4_O.kDC&h4FTn64KGm\#+BLr)pC*+9mBe&TR@lAA)2L?Y1`*Sb\JU=kDjc0ie0=R*2GYSHEKqWk%Z;V %"MI)6O1GdZ/4K[\HnEaV'a%C&!j$t?HIg"`o3:KW*gVX.4K"V$h4[&JTPqM)(>28_i>]f:`aG<\RO`>Yj!e%oM]R`XVG&seA^JYO %mM(t&7*>s9iir>$aa[u9TaWk>FfGJ27#.qH.:*c>CV%<6SmMkT.F/U@&$qXrg!AYLM%`WPcd5gA,'KL8)4?to;-u(+NtEtsJb*%S %bPjq"qK$Z@@q[k>]'Kn6YJ7e6[@\rTrNd2_-3iWZ8&R/35^e&MQ1l^eC?O]Lf<kM@&"(km<8SR-WEVDB2=Ds=2^W[uC4%s@$PQaK %W0o/V&K:e[`Aa<M)8aH1;$Jc%\$T+ANZ(Q'9L4n@)k_FRr),SFnP'<PU;U"\n]Z&!GP2AQpQ?prg<#;IjiG(R)$2f0Rd8_!S0p,& %kr.$P3KLX8!T.fpJpX'-E=r;kMFlB:/j?F!gh^4kRu<I->sX5$[MC'3Gd(3>S]^6A^j5UCI!LiR.(lfhi)GNR_ND?IjIh@?bCYP% %c\p\8&^"'6n'q[X_M`@T2m8s;SNouK%+(EV":6K`^_]k+"n\uW(m8$r#faaZre*t>\8:"YOL[JCja+$RdE`HFSNJ*;oP:83\CASY %%)YG;a>ril1*n<*YL<.NT=@6#d,8[u"$Cc%BTtK)PBD,,lq!Lq'dY!b+^$T&i\1bego?X]f5^TNaQ[Dk'1`4#i0YaG85YRnljRXK %:=WZ/J+=C1G,k=dO`bc,o>TuJZM;m`.2.N)JY$1cKUSDW:qI:EViTGA_EH<rVaTU1$aDKe?9O?LaHM(#<Noe^>k;>'&[&Q2Cn7J< %Ue'Jn!RCMGlpi-VN67C^_Xpm"g-@ZL3qI/&\IZVV`rgOa/OC0L.BYXbS<g9'0;c!<@83-tGeU`_VS?6OpE]2MIPjba:S&@N,BWVS %j7r2YLJ^##nhjVA?1M9Z@_DFX1Wa8(j)o?J<no3u0dNJYIb5SooeSo:=*!lu]BK'O;V6NBn9C=QTS\8fOjuD79?(sS<nV[3\J4IO %J64TT`kjlI%5`RrhGh/7Y[E**0n=J8hG0]=U*e2N63<A+#n\J$5u4"Fk/77FJ6.RBO(s_)\Vj3omG5/5^(JsmbfkZiF8^R[`G)FT %/%oIDl?cHE9*n`dFYjk10]f@QIuQMlCIXM#qG.Xf9?'p_\@3!G;-CWn$PVHYP4Y<(PbkdLf^*'noEned'V[f_BiXkAJWT+X@0N3V %?WdMT0eU4;_gG#I/<`U*48:1h0:"T'i`h5XfS^:qYZ(sT\7ZV79"N3u41HEb*b5o4I"<,q6m!5EB$p2K\_ENo;!TI"4W#5b,YIfU %G[R4KKlu2+9SfXCLpgtdN-V_I4]`sT,kL/KCi!..(0QUNRs?jl!ZNt#5IG"NFu-%![o*I;H,R86ik^G8K]1=M7FZWe1PHJ4]t,/' %_]/jk(kB'hTYt+m923h[!PA^le'pZNga/Ll5cGEYqFJoTFAN;D'm`*U>M0Y:2r1U0r)a&D4.+a5(KL_j;`INGZZ$N@P8U$Z3ZQZ5 %L77%0)'m`?>Na9b5#f-LVa835oH%!,9#`%!r;-@7q,u8U=jBpI>k$a+>aVA=,]iXdPBYu]WN8-KUrM$P\9W)LL])qJi5urGr?L4? %ic=Q7fSc%CaD#[J8b^*tYa[!t:Sh?o3p[k1cUd1,DtbH!W$'Qs_j?b:GB*@<P*]BQ(8bj'OA,b$\(C6*'AaK&.Xrn5?PG8ETV]/$ %X<O!F-u6a-Ud.K_TG_,>f3_$K,J@-&dPZ&:?3;&nXp]9(^r9B!Z0?o[</r@6g9L8nL&"-^QoJRg%.=9e=1MQ!jTStCGm0L87DCWr %plSEVqZ?@]9^5C6%[gAe3gkCL$45_cD@Nk8N"dcUUS[ekpaK[.FiNuBb:%DY(aYcQZ1^YNIQ.<9AT8!0[/"`0C`pRY-qeEVfeTR_ %5tAAP8"2e!6Wo#pVNjeS;^i,S-`\iH;C*rgB00kQfjkFDc@[7d^ae!%Xg0FEh_/SWENC&XVGn,3d"pC+U_Qrr>pWkX+r*=aE?Nm^ %eQ3#-'T;a<BUX91H5]7"b"77t`A65)4d]NG(n'(EZ7H<9Abf/"U_X<Xjm-6)Z/?'Vm1ghp;]u2U8,=7n&"BjO"\"(*fL'K/JaZt7 %L[Pr`%_B!jb:jR7l#b^tnpMZ__Y&#c20Drbq//ui&Xl*N%Rn^J=60`bD'r=lQ1m$mIGdabCHI#HT@pr6ji>eiU1<rBiO.aJ/BjCp %@`7IuAa.F88VKsd1'XlV[\>g6<XLArLQ#45,Vn5mXB\mkA=Q5o9'?"eYqVTcio7QEZgIj%k!ekM]M_7Eb%DGu^%m3j4.F7JkB5I2 %Y6p!fB#JMr`_oB%-<rYm.,^nHO1VG2=mmKd84[H[1q6"FIS&'?1]$_EL0"Qn3.*U;59RS:3-7aK!f:%\eIcGkQbs,M!K,6YH&(c^ %HIIW1(,Pu'<f0gW\Kr=A5Ut-a,-P?26=kXf*-ML)XeP:UV(EQn'T7:Zk0rrR]o-%a,(3.eQL=iJap?'t;3=h+S&)'KZDW$9AmkVL %7POX<W_".hlm*.K9LN&KMPP;janiH+n:n[DetV?&2.0E9EWT--8+9lpcl<J@!<#K!UNM2RoL^k`C-kVL=.Ni-Hp<mTkp=?cb#oS_ %V.^,M`?LGP\b,flh\l$g+mlC?G;JS.Wud(JV&k98^P_W0iFgY;3S0`:VpFOha:Qb)jta2HgS9D'],O<U]@L@/1LEdS5\00Q,@!`. %]N3.mY7Sbq.TnoW&cp?+`3rGh]s?JQ+G<jqd`i>KjtE<6l\4t*%snLE>48PPf)u.)U0Em_E=JY54XEiU_j)DQZKXB<+PQcpH:lcB %q21`hM[JO"o+?I=a+VM,5B_+\^ZO@NQg,W:(1MHZ7S,Nl%_HRfefdK*`,jru\SeuqgL:m#;8K$eKu,2$&a^]-%I$@'JKFcp%KG[E %:_hr[[ZFTD*Gi_^gj33j^7Zc>Quc,>Zd#nPoiZ9`pL0hE%X)S\]"uK7ko@M?%D2G&KF_Sp)_%SW58dAN(6PO;'4K&Pi^58KR&H*D %@eQ</J_B4bP;\N:?HusUJ=$Ap2r`2m_M&gTU9joX!tYoWRd,LF%8>=:'YMoRihg;DqB@-',tVCIqg&iSJMr+]CaDhCm)RmhLCPiU %^)L6*6AQ05qM7ZCAtS?]I7k(n1el0%ZJC4t4FI@mn5@V4.u6%r;*g0hE^Q/lMNSA1ls:MT-88^_*ObOMpHbZC\MJ3S9?8pOq]Ka> %k2PI8G'5ueIYXIW3Wr<nYB<R)N,OH!YLU>m0m-GgKl)2RkIbF0*5L"r!#IF&DLj:o=,,&OBd*_#LqO$r\kPH5Q$6\B<FLfZOm8u$ %@_i&i`8-!C+5cM$C:H3c!#FPTNJ-j8dkubT7orR:!Bs<Wg?)\&H`,I(d6`r+$D^uipXZ^W"&n+0(BH]c;()mZ=(ac:Zc\G26?(b; %OH@[W0d;/.A-.V2hD135l7?/_D2lO;nj6k\-j!io78H*!K_S6OCba();6ck%CXa+5N60<n:MJ?@*K[WEibg5(9;\FV/C1g2aDPTX %6R-Z]ccApU-Ol?XZZ\ai-j8Ufn?-e^l)RPM?e#7i$IfXh@W98R?8qKoFF#*KcP>GM19Id;<\\VT"(370At9k_QPkEiCS-G!J6(q0 %55$12e\YUO#eo5N>%1qY\e(&-l))@&+L&9Aq?D:2g/6e%gWh*UKLsst;d%\7m'@XbB?m%W7HKXlV;2`f7%X+l4Pank1Yi4pZPKXF %a2l/+<TKWqadd'X0YrplFe2gU"_:Qrb/2sYTr:3^QJ*gF<$'!L;`EG2W2dL73K#dFTF061k[[*NX@Y"0a5[:5LO#fF6g7l+fm#HV %n_7ReLA9`#&N&"0T3GT<ZM[-C2E7P2^q'&]^^VU_]af&s?)JGZCH/B[8Mog0q/LD\%rd5(9NmfCC4=lYD[:U)H][3cNg^PNTML.5 %N:i,32)UaGBuM1jHrq+'>"+W5hD_snH]eKkd](s'OA^\QY]^r$M2?1gfajC14X#Ild96Ygf$^e7ScP)6=rGEg8$?cp;W`e^eTC8" %'be?F*%"VH"44J70=`-j?Pjn7,RgB>YlqltAP'cNU9YC7-`EZWU(`gVr4<@n!1<Y0>^Ts0m_qqURf/ggfJZ&C>$`\c'SVM+.n'1# %PLXAtLa)7t2YFu2?Usa\i9;!(&m2i#!K*AYVi+NFEL@,c/OU*RlGe(ak=]9-6(I(DeH$Qn7B,\I"SO?SL"*L#_=o4q8TOL3cX(=b %c;Y@mi18-?#QjdONGEg966(gaUfK_Snm7h'f!9I?K36o'[c`"#I@()]-]m7@k49F\&0%Zn2\r4ui%o!@Q4VU?dfFt>HT_H`Ai"h\ %@TauXgJ,b.Nl>:j,5BfM\3nJ'mLJq4D9G/V4>%54MAO<k+,BqX!PUhM*+#&nqni>`EG@nYcV()s,*l<j55=+rhcsp_E:N1TN$aNL %`/`;#,tOGhoL0I%0)Z!i6s3OWSiV*SjMfaBTEfeM"eS)..doZ8+<P,*A'?4XQj6.2"n@-G!!8otf]MkM?\]F1G7MS(ZX:d.O:8f[ %c=8d5,XDcZj!;k_GUA<-N/C:eft7IReOk?.^Rs=.R\L!g8b.4+"8aQ%gHQe/s-V<-)pLRgUM<K@>i]9:npo7?`(hj\7HT&5!do(S %_M)JdD9qr!_](%Z/fm#A7ld-3A""*]T=0%nE2XNPdf-)T6,'EoHK654Y%Ou:FtkbM`jR1&DKh,R:$@>eU(fb;D-EA;Vaaq!l*V`s %WZ1Kt`OthZp,^627fM[05_f"Y41]]g%pt+mJJJ1gYSVK7$)r#Z^7C?_]Y#,Z%a[IGqj9nd(Gg=*,I!@\X8$[Z"G5eAl`.VoI#@'> %YY0b'R5c2J8S%7"2C4E$g:;4@_plf4.ldSchNDq@boQ30c*3A+JuXDC.C:3^:QLB$J-/_?d>L>A#2i%.gX-]eCs<!JTHMh<i"I@Y %r<$j:1FPr]BeC(Z+I8b]P9>/Ca=(OlS,jA@?k$F%^]`k92!)m:N-+:gV[[8%VZ:fN>qE/dMdlHX)'p?.]Q'QpL(isT3`6:5Tp^VY %!8_j,(^71jkeN1XAMp+4,Zo(EJXh<@)+J\NP"[#S+agfW2',uOpa[F-J!0$_phn*`6'sg3*6O<SBBNMQG5XT7`)i4+@S;.iL*M7\ %#AfDAda5Vr1*s,aSIk"8Ng!TWRLRsE$bH,EK<!j89GB@AWe-n$)-QL5W@D_jSX"f/*,I\tCTke7,.YKq:cJiLa99[?.ckA1%U=,q %=c'[p'@0-Z:77ocd/fE+"m((YdiUi.(a[U$:;&V><MuJ*"3A_kAmF-&M8qp.-GZ$<1kef?;G>^::*-R,:3PtQW6X6lm%G[89j\qq %5]m7@+H.d<i42P=S(BGU/fG`4#PIUXp-o`XCQLP(00SmV`t.ojJm^pQo$u>jbD_*^eq>P##RYiT`mPl.UEb7_Mh_0NmS07?=M),f %^,78;r5El"'%o^s0S/orA[46$6KYdK9+u51"Jh>'>]t[,?Ed$ug.O(-9>un+@_mp%W4?%5"@EJ>4<kHRK.Y%m!&A+VK&Be%Ec31+ %-c:9dkjU]%@LQO:i37RR:5j*4<:^Ho*1Sc8Zudo&+omhG#8W5!ejKDcHaB=s:Jf;I'/,BI=kfLm,/LCHaMiLf%?WruW/r[ES>,g6 %'I*)[S!@PKE.H0h*mBet!Gqcm/%,[;7M<E'b4W^:+$`c!@U4Kgbc4)9+s#&rKRugY-:KSM`9^3b4ObV3W1];3o>nX$BHb^fj*NG2 %gKqEGS`)33[h>$_b+O\#4LO=+I;+]^>>9Wf"rt*Ueq5OUo1,h$"Vq]P[ff'I\%ZUdhXV0_R[n_1o(?_de,)]obfSu/l_Y&b0Gdh= %>5dK72:X(/6_Fj+F&9!kq_^m'PZ;4mkYAj<[ii.R1*V0Yf*b0f)lFj/VsPBJH*t^TB\Ss(>m]iTcds-"_0=JLhXI)tkm4!YX/08N %3S/HPL$7oN,3&_k%1K[8jS%kL)4$<`JpM-Pg<>^=FHdCI5GdUpgIcu/+\!5G0YsV33oLe_2Jh`JNn;i&(o&?#^?YciUL)/PQO5RF %g"S<h<.J]'h)MkU&SBM_L;>hi[;Y<h&[lc[K$7%\K%IL#E(]cHXhJRNih8\K-O3mNGB_&;3Dd-]JG1<b*`hEV9!:jG;*?:+\n/an %=9ZL-7_](Cf^t,kLN_88,YeRl/!\'<@!Gg?PAmb^m;SR2I3dF*YkL$BJ1=:phq#oW_hQYp@8;s@gk`T4H&dU64LqpKE]<hYWZ1k; %'6s"8VioKP/]1"I>XS!L;:1W)3=Yjs&`P`>&+R+rZ;VMa]pqVG]GI^Y)$'K;3I8,ZZ^b;25jrkP%YcWXLj*aolUTm>8\kXe:rgP% %-W>CLL]f#!!ic<gmdjAP+1ulbn\qGrFuFpC#ed[#U;TsIS,)PIOQ\cj/HPFYCj;h@>c#Mg0HL/lAr0Q[:qsaT\Zn6UWJtO"A?,+I %+oIF*T9(G4Qr+jrFBG=>4@6#%KBoR@>b2&Ii=4-,]nfnWQQ8P<eGd!#N#hkm[9;OlD)Y+h?GOUuP]l83,[oS*5n]"rOhLL]<0@^Q %*k\$07\.3Lc3'XQF_T1NGp,0MpEo1MLsAQL^(TIp?6tTC;i^N<MXGAXlPVk9@1o'%pV)RB]BQ`IL8CeQKYlZmBF'kOI/,+p+@`YB %$#qo:i>b]Tjh#\Y?)Nm]+1'q=W3Nt@X6j`@md[$#n<.m1qhPPl:sk(MRr?Y#%[gABA.q2a\gs#8lX41):i3E5!%blar!k&]Z'S:2 %(tkI?XU9[C:UNI8]E8>k7P%F;:0.?b?C&K7QK0LVKJ$U&7[gaGdA92t`8(qM,W;Yo8?<\k\K\?7b^A;G8s7Ds/+2s9q6F=o3-[E' %.--^o.C_+%208@UNT:N\iEMF2NCH@?YYe+YG^+gqY=<]*j5G80,6J.hE[!RY]6;b=3BTUbpsEoGQFpLk&/,Ell>T\2Oql*PQDPc> %ZN,-pZ4;2[-soI6nt^8]pdna^,I2K31k`+IgUe2U)0'smg,.L!B5<NcMfWI5E^6$[R_4D&WsFCBD-&Lp$ps=1cP.nH`pK@.f\O"r %)IS"gbbJKV=6Fe.6?n+`G/%oU@tb2CX9$1-U,RARE7^k34gPE4;b2[C0aAa_GdJ3IVgC^352o2\UKGFI/uj`0+],"t]=+QEq^WC? %I]53Mi(%<2N53L0%(6-MW4>IL<>44qK?T0pGL=]T&5*+%1Q$EJ"f?Ti+;k0+I-WYAGZ\5W,@O#Qd+BFX(OZY#i?VVXPGmMX.jLRi %o4]T58j*kK9[C$Z1h@L33WON+15/'R9%cj[%^J.7RA)%N+tGsT8t7F@a6?SgW^K`=$_.ki;R<`mf-Cl^eHOZ)G,88>K1[?JBC-9" %'C;Xa5A34\]*EHP>0lP=A9XPiqm+^)=H\&7VA/ERm0M!6TY72t)B=;&g<JHjK%uTX*fglaXPQ^ZR67n'MbAhW*)=F4=AU;b9n>]3 %C4sl7l7;6maQA-21Nt1n(sTED?]2F%&S#TWHh@B3rS6WdYZ_)qh`heljGpBa_c[f#-R2DZGD.5B)BBb;87G2eS^ie'!g5A$DQkj3 %O[fS=XmiX*q;%&W-1BH&IRYV=,VI5*,RrSh[';VU9lmc]7[4R0O'XE'1?,ag;i&6$;Ks=a9NKZ>pG0(J)[N,L8"]iOI0A7<2HL^I %QN92cMO4En"](58cME9G@FKEN?f3n]GP0I98>UU)H;M`<Cf=+&)IugJnoYh!_WI^#ib)(*>,Cn$#p';d&BT2Tfnjo2It[t<PFV.! %+MLPKBtm:FWm!PEhC:>K7[qmBRUHlB7L.2oOuZ^\;Z!31At>rpnn)M5=8;-`#A9oP:`1O7hS(&iB9;)=WjgYG%p),!'M5.>8ZtJ) %3W"SIB+Ba^f@DE.d"c=hcq<@*XKJ/K\@H$u&um0iTZ_4-G7*&MH37d('_@<8?!PU5Nc!1r`^ZB1d0@FmWkUbuZAcD^%EgIgA6-M& %X]m2]:WffS6[>A]Af"Crm8di7jF&Y:U85ogrp;e@`Op:Xf4,I3bMojHp\)u:f`su9fXjE8.r$.hW5Xno<7j:p4R,A_0SOa]rqqbP %3l8Bf)l$AK[-X1uef"]thhjG']`AD_NXVQm@p+HJ:+"qbMp=j="+&2`?6f_j*4`C1C)6"U$m@MXD@M9W0mG#a2R3/LThVJYdBJss %Q1dLWFFjMS_>^8>],"322Q;<[eEk9^dRIY#gBaK/ObMJ0Jh!JL"VAR+d+"7fT-r)50UfCX.=lEM\=,;27*=YlGRa3H+3M[k[J$GI %774>h&_T+@Qo`''qt098<)37pa[6m>XC8RtWd@dRWJ`(`@0r#WJKr>Ai7U.>3EL_H)\Jic+!JIJDUfY5o1#f8T^u#2m4>6qqdNXX %r>HBj%7I"dCAj6RW_#u/VEHC\\*P[ljq/8dH*;9/g:ee69(e$t)P_K]fmj-lX>#D[0U_q!fqL5%jB:38+Pdu@mU?oF+-W)N]Go?+ %88$ko`(,K`=)btM%&-Ke/-;][[Duf(n2@5B*FK1_A#NJ%Gr)/:QHiu-*0C?V5jb5Ek!L/X!ol=f)9O$(_R>Y1Od[V!YOE#jeuh@$ %a0CW\Ys^,d:Uji8LHo/^G/D`f@fo8=@02j.A2?339:k_uUKVYu657"Z'hgcp02".@6=JR^X..+N0JLW#@J9Qiib2&$pXY_]J[>/Q %?qkg"AFsV'\JIHDNT2DKBHSu;c`Q-;:F:FL6YBdR\I6s4A:j]t?)BUmBT/oOfYV_m_e@n%)doGX<VWjh2s`]>e*E3NS=,:h#ekI) %+P[tn'Vqir,VaQfHZp;\'L0sH0dAJbh.bDX#F?>dXkbk-`"Zh\1uTr0X:Y'*j?mh8,arKs%Z33Y5-_>@7.\;W*A\*ZLsJ5:QBE>- %D[S+%QlWHYYs"Pb2H)7gBZ,<4'FFg3FLE+g7lSquC"sF7C53+,/&p_lfod=H)QuH0%UuAgrmEHbXDccB_[pf1`fLQo5aiKsG_MdJ %^dRm6b,H%kK46TR]G?X#hW$M[NC6VA'pp.U'rJ^u(f:jJ-hOG!+d=>!K5>JAMl*>S9XF@d/ebA$FC.cu8/WO+d5M]8DmC?ZM9S\Y %"#neQ[OmNocGXl`87&9ZQUa,`&5O:_g"Z-[RXu72B#:VY+L0#$ZX0/Q?.Q**i4M*Mr4UVk=69LpKVH`U9nbABd:jP0%M08:9j*n6 %O6DZ8`mMJ/#LfDKT>8"Ll(!o,@24e\KeO]NTXYBmROa`1V$9T'WWut,G>m]?WF2.p$AD9l4,alK=-@D3=m;d'9$>EHeol#sYheZ` %%],p<i/QOtQn'4/Z1F7#O-j>nc+ILfM47$e3kq#$kJO;HD[7dd!V7o_,^*pELV*c44k[<>mJ/Vi++rii,Yuu#jacYUlGXagL-Q-P %cf=j>'YSAZ]!2EaPT'unYAsMIBdqooD\1"ldYslnj'197`gXeB]\8"18*^ZL>/eA<i3FctD%Y'^?HrEKPc)>1,.K>[Omfr_1_PEe %"F;"57Z/CRFSXR6Rh]5*VLuj1l1bjAAZ'/".kB1<hZM-Vh3Em1rH?1u-m)<=D&p."*n53roZle,dnK):EjGk0,?m<j6T(CXfDGB/ %6WNFDSrT53(FXl#:8WeK;e8^:4+q+gM.C/Pa^k$O^'Y:*m)EFh(&YS,2e\rK%V\jo$PoGCZP^MRK2mkV1cMb_TS(rE(1IZ67GGrE %QIl@'paB@5M,f<4@728`;/QEuS8H/LX3Y`M?l)jp+GuSVJA;iK%nnZi':Dn:OU9$Y?@tpm/6Wqr=Y-]Ri8HQPHN8*rhKc-ic2lDB %m`;uA#O'jjg0nQ=EGuqu(.#l&#O(RuPsV7f[V6bA4]Qb3c."&9V6M8^m%Ao7H&k.a?0>ac^t6BML&GH5o5'kl`+9p@X<XBX]rl4g %T[$Dm404H]-!hn$pC\^N_Q$)79TSkIEdMep.pURr7M_u9R_ZeRN&h&dY#96%+k0bWRFE28WhSfUG8tfYEOV[\IONe2"Jh6&ce?O5 %S]Ql9V)#\;es7KJgA;]l]/:j03baRYb#8\2[uCFB0b:&4b"'[*@gLUGDKKAqi+[nY#Qmj4+[BSnlkgq`'O0\/X:[sP4M@(0;\=>V %0#=g8?!SBFH+&Lli"tM-?*n>7H+l!$"5;nrh([P,6tEh=&+`CN3-oo[Z\1==>GMb<]qh0'eI,s<:n=H;oAoU+Uo6qs#g);8fEUmN %XU]KX`4Y5sfUTk6AHT0c-3.Frl'UP!Zl*0@g,M3GlAmh'ZUK#I;=>\2pg[;GPe$\DEVB2/P=R&$"flbK`D-1gG&0ZOlSs.WK^:'N %6=l94lcs7uEI5LqW2sXYM'7$8E7ocj^BSs/G!PbU1rCR0!UX-.%2&/^@uoZ1:/kKh.@EP2&j*4<+hE7?$\R/j2;g>e,PhBm!J82o %0ROoOJ_)g91(E(g=EfVZlM(T@60"XE>T:<&B;9T2QkU0,,!p2@W'8!tSn0.`,`*!r-HciG5]cu]H!c2X`SL%bYL.e*le<cDY+Mr\ %T)>]s8@'J(*D59N;\7^Od5fI%Gn'=.cBFg^2G.@RN-h<S8L>F'SI)i'8Rs\Q7B[[Ej=!?W]MOX!I1AU;5,c^fn^YKSB;.EndEk:8 %k]u%=SZ4r0FeC?8O];p\V?>gg=nIaI[uGSC2OJT+0_F:/%YRq5n#JBNCt4aHU'"+(:RKe+J6($+cWkQKoiaX'C+DUrY\ulj?J?OB %j-+hf>M$qmBbIUh]@,YN>P9s*&Wo!u![q+;h4:pN!u1+I"%(i[>A[m`a^)fi_bEjk\rT=US%(@N/Qu=dRn6#'fL+nZ&[Q7)D$9<U %L*EpBJ<4S/4X4c*&IFd;>=-*ue]Yp1+G]$X2F#OeKj4Lnn^,R.,J>p;;5W8rUUE9jQU1&"cAJpm+@-/1U\8b-6Pak"%nLGuQVbfe %[$:Xs+GN=(%B1B8&mk^>U87mp!M\;n(^h8_4hIU?Gan?l&^Xnd+l?Q1V)fYi&'qKc82e5Ih;-^:00/@g'dn$q(X_d=qI""We#d]l %.^_)Ep"XM#F_,g?3jnOuqMnSd?acA`+\sNr*\]UcM>KhNrV=k6:1:d6OpX\HjKoet5H6U5YfU]ZN2@;<b*$PEh%[gt<&^?e[)XM, %1XL,RhE0NhJt)2Ij&j]_:>/'=Kine<^otZcgsi&W!gF*hYZ2kKS$(PWm/n85c.h'M1naQuhCX7,!Wp"=rrUFs=LAIdOCGFhldTSA %U9/[2:bVIn+B0Y^Q9Z\5]1fWjD4e6k>D[<6mr=NC7cEL.C_L++\ek2r-4m!iZ(R@i2c/^>eh".(+4NVe)ZZ<&>KsK`_eKZPHSke< %(4;^h2?t6?Uc#bi0FirT2'ZA'.mB=?<Y<ifNK4??bm0gq!FfBAq[p^h)nKc@TCug%`:$l+,-O*4r=!Hr1pDlo<m0H`2Bp'ZcQe?' %(=@.Hc1\"F?NumS%.(2TM6D[T)(Sr?B$O;$'=&S7"?[>cUe[N^Mu7A`!g%pb5";BnKXfEF]Z?n9R&4"&$p^@?R-,)$@Bq9YDWrHq %:Q^e]2OmOKP%8p@e9obCgXX/5@3"rgjs/#4aqRsn+-ItlKfhiB_Z'A$?++>5`i9;NHGViVNalV;N&,a7pX8#9d;>7#gVFfRPZ]>M %%q&[T%4'(nWVXFMR(Qq82<j7;"qg8hQo5q,CNM9BH"OQ#p?gEN"tE`()*^pld=C<Rg0H-<*m]<B\-D$YA3ePlmc[Wt6+hm70qabF %L"0IW]$5i<lN?0Z4*uKgAT8\4-/p@-b[6L6<\1TmfiXN))X2d*?^o)o2CaIJ@TNd@Ao`l?j?'D@7oU!M:COSuNrX[]fO?+E>E#f6 %[<fMSZEP8@r#fI)FGKU397nI7*H4.L;C4mr.u\aj\/?I%$;TeC+X5%nn05$ne]9e>?BQ:\]Olqffgu4]V&Q1r)Yr=l4"W`]+^jr& %#K1Xi+Z:[\KKODaHAYCT?mjNoXD5.F6ooRJgI`,e)e)-O*[N*'Npmh;$R9N_4]J(3qgA$"3RMS.E%gKoZibRTOm,"I)ti[Wnp2G, %/X&LBb6C.rVhtn#<Da48!pD0Xo8<2`(?)5(Nu10U6nhZ1jD6DHb5mEPY1$Q:[kufZ]!P/<@KLLkW]-G-Z39Rn^aCXD%o=0I:%K]C %2$%FEYQ6ei#afDi!":_Fk"n&*AP)FOg/_Rb9Hmn-[F&urQ[6>'>:-'].nO8c$h4EN!ol&6&rtDs^YaH<m/#Z]Qn<V$fTpeMA#QSb %)i7:GT`bp'O:h6F3BB"tiUhrDnTdqm"6X:CkEUW8DSZr.(lN'-r4KaHrHt"<Lq2$Wdu&7cUOJuK/?a'&@;`S)@75:ESrQ$>%.i>A %/+,'cmYILF#Wr$`=I2K.m['S,>^(3rYd_qI@&!BbR4.[rc7?>O@@mbS)4XEcER9'LAC&"GOF,-S#H;hR=HpnlXc.HZ/h#V3!iVkU %:M,pWh,,Gnj!pM_<On!tn>joib/b=N>/At!aPt&i_L+FJQV+aCmKb9"Q71o*(.mS&@%p2r<i3<DUMC0>I>U2U?5urHq&3?r.^&ZU %2^:>]G58Mqg8]cPp$ai'fbc5,4K%NsFtn7T#7+PYUYls8Kh64UJ4?Mg%3EYW258Sr-Q:[MAW2^Z[[PnD)V!\k4g4oZ72T0AdEDq$ %X^LXXeH&9SkO3,mP=Fo&#F@/*8%gSaK)Xe.ggL\b_J>7"TIT+pV!JR=_5jtS[`oCc$3Bel+elT=![hRdpU]UO<$AU@YR.Y2D.PiH %:,er`.j3.]m)Nst=)F![RIqr[)3rtiU:<&@`#`2ZV&s#GE\KntaXFP<\=+#A@sYH[e%mTjNPkiep6?KuZ_02im+<.0]3=X%%tYeL %ahN[m,gVq$H(l,Af>OUup1,=L/!iO*9kr`l4a2Kd,MCgo-;#f2'fd:`]P%P9iA'NVnC"TlJLPNjgWg/:o-e?j5A$Ca-*j[J<hMO% %B&/P$dfhXsL*.@YbaSraW=G;8p&Ob&[Eh8<.b0N/i7/ZfP_(\Zb*qTFBs<mp3!Y"K5eB"&SJc05_5`/K/t9QZLSc`DEKPj`$]TsC %BC]l@luBplO`k?BG@:cK%k@<bl2c4Bq!gK2V9n3&,;SjCCr'<5BX,f"pAgNVl)lJ@#R4>gpG6goI%)/r0c`iGPsK`YHKl&`atgH9 %A>$i4CH3[_31]28g:58Z<URq7M87NC+J*k%8jL(JcI_*g,p<6G)#Z,HR+5S],@1Ed`iYeMI0(Ic`'Xo*lD,^e%SkMG"8dK<4q>1. %:l0/=l,"Q./`5W*69>3gJEU,q$oaJo$k'q^.)^6^&`A%/FQH(W%j;EKMfH_+Fm;El!X8=Nq%AK*bi=sf:l63*_')'sk\4Y@UJBM0 %Jtca^^H@,O9P)DrF5`R(3_"i@9jS+4h?Nmc,opHNl2g)2K0rB(I7J4p&M5<[Lob'G#Mc';3OA8,/Z.N5(,ZK>U'n7a/!K-%2d:l$ %D$csWHY7U3hLPrZ$1+1Z_6<&FfUi#Nj$n<?gQ,nEW7N<@*PLa_aZTOLTtU#=rYN8sfcm<:(!Q9Jbdi1d-[Ro$Pk4?q>=,^%aR:%O %fn(Nj?ilppV:H6nNYV*#<PLZL5;<9KP(K(b*nnV**a\OR/3W/Ra:qdnU4FTA84a#jRtj"'^qq[U,"lbY6g$P_>!AQlefTug]6cQ# %oI3H!N."nRH+4Y:R$6?^g\8eE`]Q@:"@YU75X,Bh(n](O(s5=0l151,40OZ^3^M,6Ip>@j7$bW07^XA1O0J.b$1T:IFTh2i8f/^@ %U?ndO4'`'[2.0pM4P3Xc7!D&@/'jeQmcm%YlrJ8e1:#j+k<g`!D?;ksG)MWu_-GAkh2!TkM<61m`S(@Tk&&h+4<3<[P-SGIbV[+G %3i/#\6<XK4,ZC8Tf!E5""OTGs2er@4Likj'$St\G$QEnqeH>M8F[+*tGF+4($75NPZF%C:q@K$]3I>IF['DN;Icm290\@Et4%=&U %cI]V26!2e/rp*<+.u-K20r'dY'OIFo$.:*,BN.pkm/F5aIjl`Q.i9/O]"ClsU['KlGQh8)+:&o/\AB3kELqe!3(D6*9[aBbik_O\ %G1iQs2u((c0t2cr;Arl$)%Op6dr#n[PS"=#R#Ig/e*^a8BKS9Ldl?Qk"^MU:5N"U>8Ct3ln\QFY0K%0/M&(Lui^T:FE4%#am\`*G %?&;nKURSMu!rIp2[m0OQGPM>oI6T\*!HtXX*)86m=RPdh'0P5fGj12,*(`D\r6*8iJ$4mb4jN`.E5U/:-A)f6W.FOa$_=sFKW:P? %)hSVk85<"(lkGmf9Z%PG40FE%=?c3HL;_,q#KU/K_`O]$d!:(<pMAu&DIPdnoo2@AidplrQM@hs#=.`PWDX?=r#0,:L1K.?-Vr;" %BqY)U2F%;]<d#-@2+NB;#</M\*=O5Ti.TsV!d.0Apo[qH)I/\';B&c;>I`^$OUKeWUKjdEPKM]S6AUcp>CkH%rEGV!P(h]GC%Z5e %>hnR$<JhI5miS^lZ+_CKGZ=BX;*E-XH=VJrq/![I:^:R=JlP.:\eQWm1gr$;JZFrTi`$pY3-iZI&7)#))N:Y_K*ft>Y_gRhhHL3H %KbB<!JMojO+u=?nR0grp269BlSjo0+LWC)Xp(n=#M/<7]7$-5(4*2Xgm.@7LjVFjjq+rHH0kOAX?*sK]V(K0Nj"qjLi0^X7MIUWG %Qq=Q/?eZNU^b4W*DA'@kHgX]NNeb,`.L2jY43-Zs'_IgtpZeSe5^_\J0\_\=W>o_\lKRjd)l6V&F@<jeZ_k/A/0->?$(T4=*)\s; %&:gllUdZumKd:34,%DKk8e)ONSP?lGp;tC2Ji=OeMb&p>62QF&9<LFR6Y:a=%Wn0K3WWUMI2M_ZZGtDR[Mr0!D)@i(c#@n:1)#G, %GNDTi:d+1.:7F##9tJ:obr351R!,8:.uPt3CHD\)(.sAIR1qbV3>&AT`C%rW3nNHaNFgr6&!r?$`a90'7#A"#/WR.VVaEOW"'sCW %KFGUcG'BFmr-QCIZC,(bnm^Ya[5iTR<:o$Z63QTd@O(A1p%"T^263g4WpE;B9t30gX%X9:P<F479d:e5Meor;YSXuq#l7?T^Z%9? %8I^0B/1ABG]nP[K0'Zp-\D:i0H&]*1Vc3/85I<]AU"*EULI&<iM\.m'/W8hrH5?9S6!@=tlLLpQZH<9:M`3X!c(qcbIC%Jal&Nhf %1X,+/%8YpQlC"n4^u2#W#VquHiW_?Be2?6=Ml"!L9A'.bA9;pICKh%oi_lu%k@%+C>=7FSXE&/qm&'(#)?#Z"Wo?2S=jPnF_UKrQ %ZO4M17+t[3WrjnYWZKqsf6Hh*ZXY`O%c=976A5\H9Ht54!\Tf,V9u8&k<$P<VWRa1Yb6gb,N+iA=1,%X*usOODXfF^SNImL5T\-r %G,260jGj*!E@bBcJg@Xb>bmFU"!7(?"uEl^,75@CliJ;k06Mo])[$p0@;aYPd3T6dQ;3CXPRg=N!:U]Vj;6oppuEY(.D.[HNuY#J %F?J)K1[h4%o)Y"=5c83[I&Ob`Jn-No)!8Bl8_@_=$CqTn1q6SfI7hm=UjbSp:XLuncaN0P(=^qn\53k"XhgT<e1CFs46+-9\fkc/ %3(.B_7#GmCFGg`O;N.uAh2Y=K-q$I%P[7+Ai1Y35KM3^TUupn-L1WgkdiCb1]0pI[?tkl>*/(_2p-C_>i-BcTA.HKXhD]?)JSouV %i5Q_NY4s^Y0%.>][c87`XcSiDM3=1D-"E^=b&]SC.99J5?J52nD2#.In[Lu(4N0B9Q@bST>/XAp!Cdk+.Ko_1jUP\jc;+Q9"#7"r %\gEMK?OVB`G*c4_TTR]m5,lQB^?P:6Uu_$Zo>mQN2:cAiMJplOrN#XZOhJMQio6Y[l1F6TOZh@&e,*XN`9tnPK]WFT.33`>0Mbd4 %C:\CQOsO`Z6&_D$U%_;=lXa!?d=]-EGt,u8jPX7rf!fHaR`U!,SX72M$JWi8F>k"FB>_4D.>'C+^DcPc\6Wu^O.'?c`le,X&-lMY %SeU4$@L8,^SK&nZT"kGYC,K,RDUG]*2@?_"'P/q:>W1Hq('^G\Y_35h"aa:a/O\HBnQhLu:7(1ImPZMS7Ceo;b63>]1:Jc0*2h?r %4riC-)b!5$p:7b6hi7!B6.T6d^.pW<m0P5(CLEiljO*GPWeqEO@2W1dS_Bd>Q2:h+@q@C_63X%e[eYqiFIjE:CLl'k(L?]o7gq_] %IV<<+H&jrLC_c!ulR%Ym"kPQWp?-"pSFrc<:A!d"HYK_%Y\o(af,JH)@lslRKP[W[;'curD-Un&"b2:hpT\5+)=bccMpS?bfS5S\ %2"I_SBp$%n;udp&iYnnU;^1%VaR##7Hb$ZAC:ZlnSg5dLjheabc3u%0#Qj@[gj#;^hi77_"(ajW$1rnm@eY,+e`OYBLsbN!ZUDOV %jS%8uF6hj5hsErb3I:"6h^H)mKKKeGEH>Sb9UV-sMro-6<#H-@Un<Ef\)L.-c#3Eb2\RQH0EsRhb17Y*es9s&P*-K2nFEBHPp5TX %)@mbpqt8f#H)`FH.haUk&VH@WEWSdIOTCmS[\[>b@<'?GStR,QA7ISuPfoCRK2jl!CQRSPPh_"+c5o<?f"B#EE#DAoL<2J!'5/F' %GC&l)6aS)M9fF(90GdeX;*XhJj%(1VHh?Q5+DR?gXZI[]FCo*)as.MUQ;Ho.3EG[lJ/lj^%.8#bW$p3s'`p$GmsK6n:n6rXP4.l+ %YWsJMgtfY%%\O+@591FD*r2SGCO-@WM<(@u__f-(ICug&@6j.$N9P82?&9ih#OgG%9F!bs<qf^_T8,ou]Mp]5K;tXu:^5;t!#!\4 %FiWj^D<qa2MArEh1P&Dn-PJRqCU-r;@$-*^*)CZ/iLlU;G5)tdA2M6\P.>8b3QC`.@*R`I`9Lm_UI<;LZGYu3J`UkKDt%\g=I&]K %SKreR#YC'IL/6LG4="0lr12'3U^34!=-g^6Nd[oL2F*sG5ns[OiM>ZG7%KE-9DJ%SQ"/S3.mog]m,h94.D'R%OHi:kVMJ1r)kbTq %LhF8:SNa6e/&aB^R*qT9-&UG?ZDrUn@+j08Oq^$H<DKaPF@0%@WY(0md))99O`u.JB(FL^;*<W:ES]qWB-;=14tbS6CYcq14:6Y7 %&mfJrEhm8OTU8JmJ"[2C>jsR+Zgd3YSqgQ[8[pEY6oOP6a#9DnLR$Kq7c`"eqR4?/IX)<1'=*cEq&C`TVJ9R1#MJc$</D%,7?l@B %&NR>+koB\#l43`N&gBZn#*IbV!=I&OPC%3i\-rqi-lLEqZ5Q-GVE5!Xm\0/1D1#Nd[0a4J.Otk4`?&GgH9"MCUJ_LuI\%S/V`A^5 %A]hhVV&e7Z%$@*b"1n#-pRC5jfU`4!p5Fc=E?,71p!0QE\@tU+X@hs6HDjG(QDQ[32qI?@O`=]\`-g]b<NQ1-mK]+uedA\0f$YI^ %,I3I#YW@mO%'\K(ehf>dql11bFXrRYlSrQ\;XWdYLrjj`,>r>JJ5foO^;fD'9W:_Y=.]B&cs'H0F\8b(@]ef*lU_j#X_]r*ej69] %0sk-mRfT,Fo0W05kLq,1V/t$%X-XBD7nAmfR2(6S!`f6_?C@pg<5uGK#H6bJ,1Ti=-(WF'aq_B&D0q161d#8b@'N>3@]#hbe$bte %Se4C"^VT)kJc3],JZp9iP%NUl6d;b"8e/'E7F]G:.0G<;2:s1KKXO>S?^uMSg5=CU;k7b$FgbU.0H)Mr]ar\udtlZQH4+Q!'G%a> %$8Y!A#CE.)2R_6Wcjj6P_csjr5s;khM<lHH$PcKj2GAk_UF#&Pa'b@.%?Qs@+`A,Z8@?3NigrN1l_Og#+:m0Qb^O7ID,etD&=B,9 %)sV9[2&*![\#dl1Y0>+['4R[JI[FnpG=pc.4djih#9hYT[t"Z1EF:Q.SRc.Q*S/IC-tDc;q3IBiX0t_J,R9KUodJ67eM>U"FNZ!T %2WRUL,,6:_4&O'm4Io7+AL:E>9SA<2kPgc>$81B8^U'm$lBk0iTUHS'6&EDkR+@g*X2O[.VrMM,M2B](7$OG*mY,%^TgjuF8NUBt %>]^X'3/j)m*=Y3N@<3-<\*<>DdN6'810F$ZCr+L\p'HEdYt=.5d)Q!5H$e:O9:"p(lj<)AoH++0i>u!JB1fq[[XZqC6\Z#l,RcsU %1eEN.c3P6t+mA=,A$(QPFa@\+$J)%.(nbM9S_R4J=deS#,1bE#6VFS.&"u'iCK)<]TIFuC(knfJ+ndFOU-S*9"1SgB4BV93m7mL: %$blFf+?7OA.8-uA!'T?./KNR6R4bnTlWsI*[7=q]*a=Ep.p]M)^Y:&;W6(Co<*oMdPBF<*H-h@5MuMRD"*pr[X6We7l2fW/aIr*- %,+!.68p[QWnaWJf6C3Sc!g_<]6C012Lh']Q3Xl8g9WGoE-+oeglobJVkIuWk.<=H^Bj)^G5)"(Aj5qhL`mFT7jXVTTn#DqSl\;P+ %j&Q[ea%uV8C_<p3a7$C%CfRS6nS-,$mkds[3:.L=-3hNZ;kcRAC6+rXLcM`OV#jf:Y.G"1042U?>;RWjS?hAalgJ20.k_W<(Ik!p %fo&XE`c,D`E.M;9"Ll)LIP%PO-R%`gDLSXpZd2?jMqE;6=l(3FT!=bcF@TlQ;>oSP?+4]#k-c>\!q5(hgt(!qo87Dn4co-m$39L5 %/rp4=]49Mp<>>(CKOcr^#,B_rVtX2cToKff=-WLWr[q5>Z->j%\cGA]))!eqn7j8>5bpiik-9@($p@`e$H%_/Ks\&<4UKOl;O#\` %PZY+X/q1D=LdA53oSs]s+O"7o9-C3k_8r3?c0<"#3.QO>/KE0#648ik056r&YD.UgoeP(7Hg=M@GA*:F^s(Ulc#ec:nR[`Qql,4M %p"oAm5"cn,D0,`=\O?a2p$J4B#-J.<FCUK=ZO<J0jVf.ZAZV`_OIq"DpN:c9h1!?&JPlt^*r"KV\jeK,StdYONpgq,G%[-NhDV92 %4do*7PJ<C4]M!MZ$ui2f<0+a=E6+c;Y2Ne8N4#A^=mXA%*7`SU^>JfD>AJ<9=3p._YO#*#j="II#lj0kJ.q7Nh$KmZHJu9s[*^i" %Xp4M(:Wj4leZf25NYB]uhhWJN>s)e!+,j<h<`X4t03,HmLWX/^aL$Cp+$t&]I1&UakZ=E5HF-c@)a4H)`Jup$Ma_cf[Xb8jDM`I] %]72@ep3(>C37Y]cr=RGA)Ds"JBT\>[='08o@0/6PqSK`5\DM3THet2O)cu;lB%l>#bifkreBPo'>atH/m3G'HXm8l.Fu8G`#DKNe %IKis%SfA6tN.QM:'MZZeqE59._*?a<qfqiI4[Q[oI)oltg=*J?"g2H3]LUr^IRI&VDTPHA&L;np--J9SY84<tY8XMJeTn`h&Ggic %]&O]Uan1][BGU%?Q.7Mc^DS.;8Mc[r\(4j'5o[b$)3SSM`%^4sV.!amI5qe^n?RRc*;U#J64cR_p9j,Q"a1"l,U1n[[(l#W+$OLg %DFt1=BGJdYK;*u!84De2]=P96f&g3%:j&"BQUS!lbdp#i:8YRSq%d,qiNZ;!N;S'8BOP9KlMf,e`BF1l#&iBWlJb1[@.iCfRA5nT %P'/OB%(BHQK"P!8:Y`8Yrl%ith@to'Pf?j=gATrJ%$J>]3pR!J1leNW`Oh&.>$9qBBX)o!gPqAu6.;6P81]Ol\QQG_'qh/4BaQAZ %Tm+i$WT&=0Ga;MCG_.2_T^##8;gUU99+@<Ek,F+HRe9f@h\'X6b=!RXrf(3oFU#FP1;AtT.1^V6@U;OrVS!oYW$<Vi2+8bG%KAnZ %`qlf=nno7s9-^d5U.L,DVHWX`*'q""Qp*CD.'-UMikkBX%V@^!0-d[Sc.G99jH_q297[Bmi-[R5hMo`Yi20!#GHYl+OHSL89[WN6 %&C8cQaPm)eI1%Yb#V<m`%GuVs=U;bmlHM33FX\ArXc\S9Wqu>3$gN;Q6P4Zp#'<s>],g2`aR`ul>$<U5^fns&CF)2IMXX.0H,m:V %@#>BE/QI(&FP5WP69"%l,&CJ83K31X]E,8[3F;Se0"SL;,r@!'&b&^m-k*<)BRh+J#n:V#WeQUR8.?c9k)E:@pk*3e*$q%uD&S#0 %`n(:]K?>=;8V+LL>GgER@olb'HEm9bj^,ptL/hC;P0KYZQ#pdI0A"aWe/Y8t?\<@YK2nfd(^!nm:((qi3ndfp8-=\0fPcqM-&'o@ %&,Jdf+[4M1]m6(LA?N9c(R%Dsf@A3[P(L0n6_Y$N41&XgK'NpWE*ZYAC0cQs.-_Ks/W6n<0%s#l&U2#$YF/>W2CTEKcupl4m]fuE %%d#_aEcA[%O]R<,`&"M!<sK9V_Tc<W*B!G#)-BqT=028/26TgGj%+/cd39"V=4KlMN"18oY-R<t6l$)SndTD)`qp'0O0/Z;'B'Eb %OUmn7b&!cChmW"WK%qihXhrd2?b!`>465\9Muf0JC2B3!!LpQoLB<[Nq46?bA1I3&W,,)LZ-JFNmt"pOGT`@\d8La/Ijshs'`?<: %ZOTFt5ml1o5.K=76X"8YcS9erBjAWUF'%8a<"Aeo+oa9,:RPGPBf#YLbq#me"r%XJXfgEf02=\&c'C,'k,a$lI*7B'<!UWk(faQ= %XCA=t3iJEtCKK],!Ya;gWeOk^f->)_;D`X:V-F6Ui.lQY!$_mEN%5dkYKmlo_&!!WOS?s7JUu?k%bbtcKA/_:X[cfB\*ia>V",V. %7!Q78kQM!R@#PHTm^<J/K@2tqG3dNNQu5N(,PW0-dOhk^UUk?ZOI7c`V?I4i+n;eq>P;!HC6)\Id&^^@I4*h9DM>P6(tYH>#bPM> %q"!FRX:X_fJL6M5ctkR_J7"muq=2Y+8\DLK4''DK9ng7(%(a>uP`'EeQc4,DPFH==`X^K1qn_oN4cNSPgl>Hq.oFY:,V<UildV5i %#q<)O:nZR]oFM*DWpA1V4X5,J#82%#H[lR5Ti:7A%Y@AFCT1t&N.W,&XXm;hL)&8P3C5L\V-qicZC95+"O;q<Zk6sE:&8Nk]5u#R %D.fT##7kn-UY4KIZi&'ff>^E76Fh@JfHq@S`2'6,*f=/fki"nI^+@-kh,rc$N$t5aLb$o`+gk?g:rM#9J:l5g>ER46Rn5;c*DfDm %nP#oqf8V)FhMb!TY7?B(VJu.K!Wa4e.a+d>EHpm#5EQXC)nO(TI]_l\4^.%!*&,$S(\a*$Q5uCYUh1N?;jf,HTE$?o^E)g\9uu_2 %'mdi2h7[_G0<Ik3L.n+[DM`abWA223q(E'q!FC%c)3h0o&udJ14uY"&XPa\6GB[b;15a[h%/@i7aruJF`+6Z3&b&k&8AkT>'6%4P %\Jqd[N,"W5UWpDenWN=cK,]%2_dIa.5XHDQMW&-Er'?-TK#:4ZUtq4$2s>)LZBTI&B%1DQ1uMfSGeRYTf%lq23BL,W7aaZKf=<T< %UF<CLZ8GV!R."b:6+Wp9cd^ih/^"iu_&DhF7*G?Oe_`rG1e2L`Db\SnB);Q]:+/n7[i\nX;h0$48`!K4R)7&k;Y:uiD36+aFKo$n %m)KXJ7J$r3_4eEm%?\lIU)#\pYHm_606db<.s`)E*675AD]t:<D29n^"nl]1#I2a+jVI.:D>eWUrP-19Dp".@T*Dg_JQan*(7-:& %H-oV;^"/00p9gCRM9WlJqtAHOPXnQ-DO@r".<RIL$Lu3V)IpIsdVurG(9SX#BLm*!eP"5bN_&i_];tTo%nH@\5(Y8Ne]EkibhVH_ %4.>^D"JMkTInC*G\FM0K9^35A)p/I^;Gp(99>>Peq-72iap1I1[sA_\S0?Tg]J#?cV;,+\n$k\BVY^"acp/k-)VN*0mX99Gp>$LB %\(.mh']S@].U,"1EXW%0rp#PQ=r>sRRWbJGS@(DI8Z:V_1'_j@=q4SI%F)oecrDf;NO04ahB+TCGb6g<TIuYpCV,9n]1(kj,5d1b %!.Pd>hti\<JpfR5AjOEi^oo?N.,43BduTe"9BC%9*HHfBH&r4pb-*jIXAQK^Q0;;a[7;?TmHW(%&Jt"2NW?=-S#m,s/jg#"dFFu' %EpL37ddAc1CS0$[=O=6O)/VbOU9u+KhhqSMBT^9</gQ5T[Mka0BEi/L0t/s8<#2XMj9]K]_BUmKQN@=S6DUsF,h`8r%6mkhNe"'K %LVgIcSM>$bfEpXA+M4S@rZnV`)@VIqT(3Rd<e?dX3R]]JQM2?iKiH#j:/jl%`lhu;&.NT"TCq0f+DSbB-QN1U(DZ?ii;S"PmM'Fq %.YkZf2f2#Kl@+p'BIdU6DC]TnPNqNr[2$_Alh25>e!oSF.h-"<2oX-u;<d?W9kc-+e_P-t@)DG=nrXh1b0I46Bmm0h>[t=V*umOd %oXhDa7T0n>$)WBI<nsLj/J6mAcS$Ltg\u;)41-<=#7BT\r;RlrXD!\UXZ9-M=&lnSCTet:O_>h`>I3o*hJEOboi&>;)C&F3i#<UR %Jk4jk`\IsIeaMs<d%bt)8cuLj"G0EZ[Q&j,C(JsXWetF]m^EX]SIkj0l_`OW\9HB#T5'?QoSm.>1F31=10p"D%g?$2'S`-g@-lA^ %E_'JMdEa:A3:+$&!&Y-I@3p&9-e.@`],[0]/J(UDD7QFlQCeji4\^Adeo%>=hJZ+RN:HE]F%CcgU^gW$B8KZa>97r0/U$CHZl.N> %>8NNn1"9@Nq!EH55]uu8J#1:86m.fB2YLc*1eV,ThDL\cPfooCP#/Dk%]\CF0UQXo's,bIL#O"kqDbPEG<df*X]lJBs%.Fc!XrYg %`O^mm=)'J)%t0Ha%rViPfqVjF6FL.ogTQ$d]1A7o6:O*.gR-qlN.@ior$)tkhhiP'>;OXh2\$t5fi0RSbp^+H/WurnQ*S-;eT>E# %l(Xm%Ec__30kcb#8u`q,V@eKNH)mI5&^\;O3",bkXUS6!(k8!+rJ#(6^Pp73=!T4;SfX>/.3^?>/]bS'ZfWZ`5EF&*P'8CB'!&l? %#c2pf"p*Ms,shQ7![C"&NiDsNXUhFua&W4Y]ZF#`!AAo5!C7C&aQ[p_2+K"]L-lZIrGLa;&?j:9i%V$42\ZXc:;_,G;=lO,^h'12 %&"9[FF7,C;nY<$]PlRaPad/+Jm\j##CtnE8\Q_B*_US!+ELKf7Y^>HEhq7\5A&nJWXE7*Ta5ZeuTql=9du-;[I5YuUk`)6_WXeP9 %2r<aBZN>=_R_&SCk\S7QUF$-Kml.+*#"*D[6U.uZUNBUjY83\*EHMNeA0hE:a5GlH$/HBVe9(&?&\E2h)`k$NO82K,c\(H4=+HVi %rsF6moOmbkKC"G'-ZC:PV&C!l-9&>Z,s\\$)C,QWnU6M4;"TT=T0+]iSN\u60VBU_qGN6qTX%ej@2"aiVd]BMeU2/D@2[i2RRbrG %X<@^K%4dRKZ>Se;Wiq`>q0jAh%lpDM`,]GV%qRH$fP2UoK;VN?eF&ArQ;W%nhL+rX^^T5KDVb,;#F^^*cU=2jUg&I3K%fF.F-f5" %nd(5+(,r-_K`e:UF\.6od%R\Pf1Z&fI_()[o$1,9MmkcHX,F^(>J2?YUF("MNk%VJ_JhHaJN8/WqQ7I/OgPeSNMg4@U:]517+(pD %Kn:<=/F*QdO-o-4ABH*L)^5%`GlYQ?$sT"4'*W#9/knl%Z?@S\&.,uqi,_##%C%bJLftW;EgoFiTjf_QYmA_B2E$+MCZlr%B`kIY %m7#7rML[M:6iAjL)a0l)1t-4b+&$N/p,\QA/VXm'<gULU5n]<ghBk-a-q_2DhC1Cgqg`lsAT2k@_hcUVb,q*,2k,C&28?F=i=*Ze %q\/2@hF@L;=cIQ:0[e\C?utXZI'K`G)0`.2MaHcB<aOl3/Ata_Zd\0tg%5jh!+s0s;>0_16q"DA-cuOb[UZH&^Rkc,*q+3UD9]_A %iaC([p"U=+Y@ZulQn^*mWG]B"nVrS=rAX\#A./fh:hpG5PiDT/s+iTh6WMYLJU/Q'^C/SM%3c-&MG4du2^fWJ*J(;d[q.3qnuKe& %55tIT\)(@sBK7NtW]9k+/%LOdH#5_gN6tjOGPl7NY#CMM6%@I[7`0!*o6pqU2,H-+j1<'$.5mE&!Ut;:e[r88`VfUQM!sjlQp/Qr %6:tF"K.+O;6Ieu<_QVeoonojKnn@`$gdP64P1b'O&u[GM<X[OjMKAuAFEE?Me<u.n^JtG;;1k#*#M>76e%hD0msF5DFKm9k!5YUM %D`T6)AZ)1i\"n2T.@N'u$SYj0'RY52^LqFT^m*d`b7CG>](0aiC7E4n:hUago>fiLNCXGm(^.mZn)E^=FD'_/`"k[QcVRN)DUWf9 %]sjS".48n+/%;MEp?^WYhDKCAVBoc';fqtPl;$J.%k4k^VUWA,!+=]&G8$=u6*e1>kW/KW<]Y0t@;rV__dGC!9UX(-gru5n7@p%B %QA%U-qWZ&7`Ehijdk:Ikoq-$aMQ;@6VO$L'&?#!WlLhQXnIN[FI*aE@i,F@L)s&`5kj*t.A:sr[`tB,^^j@$dJ3Wb<MK?E4bs`s^ %gY*tTOX<tu/!bFla"3Zpk09;S.cg&Nk^=[U=l7LcA$[Gp_&[cN:,6oH=fEe$qs<T.*KKai4LT\q>#?Y>kNe8+GF8Lse!"`>VB[d. %o-Sc,*qE$(&d"mciZJ*PO=$ZYn=()Z[Se;e+N5-2C2iXNbNB_#'M*.J<Oa'/7D3/GHfo;#=LSd`Or"snq.G%)d>nXsV&k1U:Q-$R %nJsg,N$WdoD6;\MaT\q%X\3SH9_.*na1s0m%5E-I2H!i#P.mX_KbW$H9Qi5b]Sr%k`k6HO;Ic(KK@>'*aB&HL3jD[6`XIkA0o0`> %MOmUp)Ff`YY_YF[S"5MS)O8!i/t:I:bSDY9JZPds4B!G?$qemOEV-!Q;HLT.Q-=t?4Cuj8O22A,mLI.U^9?"Lchd5I:9IJe0]jpq %Z>7gFc!]^/qeZUAl=N%)6RYdcDF_p.Vh4gSp(%E&DoAOB6"=(rf7(u=dhj>@_5M#NCM;tK9P6fs\<N!AmR=22O*4ct#o4WK[O7H/ %X<m=M;jrC.qS!dc9qs1lFi<OmA')kDSG2JFZ[EK(=DSK_B>D\Mmmi0ZQfge"TDa/-SMRN/m]Da#AdS'F$EiU[c:!/urHed)_AI(3 %@&uP0-;)S-dsX=qfn+GQ]6C9/VVcr(%-M.I?ZCkYf:Wn=X^kJakD9(b2bTe'[dU#*Gr(3`AF-Is0Qs=dU,0%nXlGUp[/ofd,FWFS %TqX<_/J0If!4R)d\1C5YbVM#8<#!1Ld1]5k,NafnY4\16!'Sg3W.3mJ)D.Qdl`[WL19aJNb-8*noqW>I@^])=fFf11"Vfq,;+bF. %VE3NeIlI&O#WWR/1"!X*blC2RSb:P7DX75E%B`;UYbZ9f<1g,Wmbo_+I_hSLjKhC_$b%(r+IMbuL;VoV6AtP`6/O"-"tJr;k+"42 %$i@Lm$Ge[LU5a*l?tKa&/S#;2K/6GVfFaf(I6.75;'?mukZ/QSiej1M$;h&`eqfoGH1)#r$7LA,IATK7?EO+0fO60hH6<(cqJPcb %i.nbaVR3Lh>WB_?`*<=6)^@tpGMP[!<pf[8(9p`crPosSikOYgiRCai[k_mh@1Ro1Xg["NC%"(X!Lf-6YMP&b<$8`ul',;*/>%fK %4/R]+)i["VIEQZDnB9J]N(f0'L=+\2_`(+XXMR*-q6TEN3gn`oJ'28Zma%#EHbWdqI%:npG,Wn*:Ea@u#)I);Y!A&9*4bW^Z9LRm %W]J\?f[PZ&IZ#>h\(g`p\#YL(H(utIYI^K,au:;s:cQWAe,2DNp4'PpV=A$Us%9+s3[pYLU9H9"[MjCO4oRQ^pQl51eldWs9*g`V %L.jAgqsX"BDM5g7D4trZSpH/[=7!dXGNfJFeUQJsi);;X.hAG/Wb*abJJCETpFTGZ_8c=s3nALlIc9C9\o/QR8Z=5'Ft6/*bm%8g %i28Zh+8*$@lIjT*F"t#Z-_1V[bs@I44)9b7:UN-j5EK*3);Qmb)/2n94Lqpq04CDEIXu'ZA2ZGfh]Z.WSs(bhbh,r5QP/1+5019P %"]FRf9sr6RTSb%S\VQc\V[1T;639Icn8>>50'[Z8r\I%NZdkH!9Hrl8_G+@rLVQr5]?Htb>Y$sH3E*Y&<CbUpBQoEN.T?K@QLO=` %XEq(MAqdaq8@d!hIL@S$-*Dtkp!pJ)H<d&;nA!;@(]P2#X_@'@>sV4kq,:(!M(E/!:,QcF[-2^olN@TB4[\R+>\sP@^)FYMJglbg %+Pk=SZI>>Jh2lhd[l6G4e,X=l^*N-*I1lZSC]s`0_)f10J%0YXQn&`KViQ^ZRoF0'@;i;V`*CS;3duGqQB<A]m_dS*gtWT=)\h5B %bX4WHO!EEsI>,AhiFuP7"-uZCT=-7/GR(<I?D0i+_[,!%GfRDOa8,GY5O>g\n:M>*PCSB(RH;fF/C=1hc"UOUKL+?*^]F!lo:h!O %qipm`JUemhF58ngDk%K43Zp$>1kbr_D:[.?[%gqJeosG%""\R(2fG*K7\-/%fVb&&e<`.L!k\13dh@@-Y&qZ5&iEjP\Y>e*TZoh< %p?RHJH66[YrmNP>?2@b%Fh9['(X,IfQ30-8EKo"*7s^58:,hRLd@!u*qce01?=mh=glbpCZW!dBO8N*A.ILfLnsJ9hh2a/)b&qcN %<kJ1_=*0Nb%HD%2TR9OYGN376'<WjMVr*!l>MR7po;qh.Whh9O.b;Bp'icXl>fIl74rM*7dt8WHleaKZ,#9P2VjJ!LEk<^Bp&JNE %;Mo2_WnAlALk:ROpqIo+ek[(SgbYX,\R2]"i$+.4Q"K5?h:a;#IZ8ZAV5k?uWbIG!1(T,D</*=t=N@qdhgmm8MCQ:<O5_"E&"4eJ %T;)ZQWun6O,S1i]JF&RRjtW@haq3$4PG=JL7Ot"CQAenD95b[mR&SE%UD"RNnCeIDAIso'a-/GYUSWRuC#c&Ai#u*sW<M6Vjg;$k %==-tbBJI:T"\,_%'pb?cD+_SBC8`VHp+D8K;%F?^^%3kJRmOi5p/$?9!RaKhL/"YQV>k(ID<Tu+WW$5u?T]:OGKo5I6M^P-!GH%D %eI*&f*GX!qm#t751C\%7[Zht):t%:9Zslm+/_=X?O+`.kJPb1kqs=T0B.JkoL`YmUl<@.j7NK&RGr$$OPXUt*WfU7sYi4aP!\2rO %I]%J#YnUdbpQ-Y(QIuT@rPmiWGls/mr:osB8td1O]'W`'bMT[n:IEtcAo.ts+UheN@`V+6H*1A\81W%M493VggdfGgRB^molF[)n %*GG0prn8B%"L0%(7kRg*UmFprknQd!jO]f*=l.d))[C<_W)(IS\.tMJ*516\gsN9j>4>E^U,P,N*bJn/dEPbNO,ZqK`dJC:[.,h" %IkC&2OQ^'$#tdrsF`KGJM+.Q+#H;BS,dhB%MVkQWIUb9NkT<qcl#[.pp8r`a=guE%B#m3t(jX*knNc/Hg_*4YJb!#4DDC]#a^M\k %^1dee-'_U9M<U!?Gn8-+MD0+CM80)PYC9V]rp7tGr:U*cn?7?3(]V\V&-)5Crq8#FplGI$J,8&Ps//*[h&l[T`kVG`s7d+SpgjB1 %^\YhiIfJq^J,?)Bq(L?d^Nf_OYQ)d!s7lH:od,$slp$!u?XNinIsq:Us*gC8bEr(eJ,AedrVPp(hr<@>qodSG?S7#&G0!0V1W@tA %^75uF9"tkMY^ZUg*SKK3n"5A[0ZP#[Y^?7+^HdMj/Y:3=J/`9,p@d4rXi37b"2+Tig[A<'[G_ACaPqha4$256Wo@M,G3QD^b\65c %2qC$8jm*+&>W&j=k'_aqJ):!"Ss?]*>"GW[Z"<YSb\ScRB'ohXW#7[;@qIQAr:g7o$NK*Mr6)kMj.H=KJ,&Q3J,%?>q#)<7l^*+o %1B!V0bHE_pcbKD$s5Qn)r.dN7a"Mr9Q[efI5CWOja1qT!J,2;\rUV]Bj6OR3rVE]\KQY?$I(&%%.5S_&W(AdgC:>cXS;Gsem5?ga %U"t[Zi8tAdGr+m/8AHh(#hR4kc(cumqq$aU]<o61"<(LmTKh94D`B]&n^7anUN:2@m>emTBZBW6"aR)<`+HASWZ,6Wg!0D[]pe)Y %68b%JUesA6^i0)+/XbV!%oIl6qmc9Y4U?-S:nE+TBtmAkc1l\%T)@8TX4Q7uW:.1D>;n5a5H)dV-i!CQ1W8>F`8]LOlQtVpRt(7/ %Hm44ASt>r]O-qk,eBF\&@]d2Fg#cW&3%iF`$kB:U:X_!*lLXqr#+sM:W;SM:)N*+`p3"IMjnKrL1M'Sp7VU)TOQPZdAN-%sAB*&' %h$,VWSh;kkbNa-N%]A\0poRm$MlI7kU!WrL1Rj]<R6Asn1,_kf]_;?]]FgeS?Uom[nu`c`M*cq/!1#?fe?q7cp9WOg/Da+H`jN"h %bf8PL]/"5(ZaIZbcNjpR"QIi*>AIgH%@E"ccQ/J.[<+Unf1*Ylm2f0>bk'qnj?bZNeo'Q7!oln<`f)n&B;N.(L7.f)^\i'l>h<`! %4I;7Yr@C9hc"o<&E>JDT^b3#S0J:'ka@'!%^umTIRk7Dq(j"p<T.(7ri%HJPAu)ZdAhDD:2?9R[:]<:r.<5o(Hb2-;2rg;(o4KtC %`'NY4#G#"Q3q<9QEEoP>S'b3/bkV$X-]JF#<&<*Sks^-bi!obZ!9!F[Og@\_(C.JBZt`]Tf4OGp-q'rKa/s<mc.F]+<qc=+Y9[&a %bag?t22c-!g8S+)ouh?hJ(&UUbL#F'HsAJBr+"$U0iHh@lF_#)EH;Xdf2gk;]>fC@GoYe4R5$kBGLt[;e:.ngC(@Ii#J%fjq,VM0 %GGk&31k<<?Qan6%kMm<e@#V/8*;kOq3L#FSNc"ZDn)[ZESPPT=*L:Fi`<@u4F$o4":h=!sNaR!NBq:1&ld]UK4id2T:1N`rVmWrr %!4RCS)"NZ(>VUaf:O<t;l\2t@b1oRNkb4>X1'Y=u,>7Dn"3m6R[E<+s]^9:5?7t3E^2#$1`4kkR=/Rd^U>*gq+`;1+Sh$ra;kNQe %N@T1G4T-sZR9sink+H>B_(-Sfh3PJ;@)TpY=HMEWf.Q,03Ie37CPR7<Qic-n*3U=3cX3O>brG"-LE&rK8Dar#rqUjtD/JLbil9P1 %#Ok'Q)9467egg=3iauLq"2'XUIpMI8N>XstNV9thYOVg[2&##2V-,ZYqgI@\%sQB0Z:r_IcaCbgbOBch>d4^he;r!U\hCsI>K:Q4 %kkCqH_?\o5f<SlTbLhsIdLgH?T1[o]Dk@GUZn`p4i(N=K"79%R#6uq'3.IgDqh.pCjjUgkLD`1gM\3gVB"#_:DRS-UAi-V$2d.9P %N)jqr>9&]BE]j.U/r`T.]Z&/Qju%%JE=BW-hg!g.:"LfS9s#aPe%oXIK)[j^ZY"AcS1V*u.eF3E>1S\qSC-6^)?B%VRVpqshV!VI %6b0H3D6Kr)%^M?Wq.$b"df?/*pADs-Z2]$\G+kMQ([dbc7UkZ2p,5'EaG.%%Da0QcMLAJ"W&(RsN)O_#aO-Apa_cShYD[;WlRc.4 %c&Tg]]%M2iF0R%gj-PNoO(1BRro%1E:\?[LRTX`HpId:\<j^VXDVS!J#o*9oB0WNBCh-3L3[2O!4B:lu",GKNI'IUJi)^`=:Q+OW %IX,+Qa!LVe]J4;nr0A&O]H3cD-1ABMHP2*s#Mg>,^!&_RqJk*""4PF!g%*X,SDDMiC:u!/I'!II)Ch$2b\Y3`(m-<@D7_fLpLU^$ %h>U[(pKnj>.RtPNN(PG4bKU8DbI7S0`q`gUQhMeuaAA<^SddB2[o5-Tj^-uSPG-D!E[/dfN>pO*a9F^[=9!8U?i&;NSiM1JY!K,9 %l?$]Fn_uC^TnQP#n(<-E!XTCs4T0iiV[%c5aE]Ep29J#g9C@t&*9Y?49bfHn71]A1<4qVOd607QPN5LF-*(nkC8)lQVhe"tcf75$ %gD^"uUV?Q]eo5Q/"nnZf%tln)7ue<.-bm&mS6bkE2uc4LG(ua(M5$Xj&Mi'q2ia?fiT6aa/Z^!F^K/(oa(]k;^4R+g]<?u3A/4m. %:)D07/n2P"-/GI!6Lt-O/<:Rj=QEp7q;5a9?)RMjoq^A%*LrSn;gF<7a4o^de-R.)\cZmq45]^%QgS7-nG+iR?3stH[f3JLbmRkn %&%IdXYDSo%#L0;)Md^MT5+j:p(^ruEZt:A.ZPNiM2eDJN"5V'jWA/o*iTt8k[5\mMPNFMA+jebC[Da+,;V[YK/iKJ]3r*ts_SbZ6 %.$6l]Ta(a@@tQC?p-QIULIP:Bnd>&Ta!ak^^`KUiT$oW'lV>.g>M"n.Ge.=h.)]t7Sn4*"=uVn[L)]7M>b2"<@qj)s!%-;XJ4kij %OZTVg$aVHY4"Kkp95^%G^=+Vla-s++`*O%n_:W79(ph0]F_PSCjgY:&D9BNAWbgD]a:Lh2/jFf1]_5d`LH@KPmI@`IF$M^j^N/H- %]-G&"'c&)+m1.BSVrBYtrY1_Na2?*arqhQ`e0LLU#aOeDmDgjA,SmDBNH_TD7$3r-eZt7)KBWAE+2H=\]J8l1Ce"6o7&@Il'ntb, %nJX[\p2Zi\T9q-,I?B)OSk>gYek6EJRfY2XZg\7O=i\iEUjMpA.Ij==epC)b+bBH"QR9?[AKsZic0W4*[H3QM,<'&/HO\psIVlfC %k%lKe2GJf`VJCF,HgPVh5bMWR!Q%oZ!ROb7j_oUSCe^o^<6a'RR8)GgMGb2bMEneZgc2'PL?nqhTMOg@W[$[JkQ(sf<u`/00N3jm %c!s_G]b;nsP]^J2iQ(TCKR\<$+2?(mr.]ppq;5$T#6q:HGDIeMR3U@Vh$`/q!Zgsj<U#N.I5'F5s+,BInopN=oK(pk]s]Zq#7/;P %3sDr']'UWY-,:VlNs3sn(W1<<=Ph47E0'3MemW9W-A[j'=dFWs7e*9oVBino)a,rY=[%Adn2;pEJ0UAoCaMP5Br$XeA'%E%64U2g %QdR:r"!_8ro3E<I#eQ4aBa=`PmtYfCmW7,Vpsj;+.?aoa#;9IqLr%er"%cGQ>@8Mkp?P2tcHB=/U=f:qL9$fZQrMajEB+?`AO[>N %2``/NAL``*Go8'rmDeQu$FG5L<%]M?KrOM0$&7Q&9c;9#,h&caDId%iN.T!Y\M"HN?AI4hF77_p-U84orpK$:eOCX4C%DkH4f><A %Du)5$(&!B)+g=toiW!EuJBe51f6>^_Rf+*"?<hY]^5Qo?2eH-C11P5=QOj:G0([tI;=lkB'$F=6[0QA>Le2'Dmu(k=ZqW?_d#2]< %a<##G;U*8"W-2(S`_7ZGC.qB2"e!hXTK4[MYC2-"f]bIqMH8?GQ0-#uN$dL(IrD\J]@8/37LEXnZ18o7'>*=jC%,5Vfjo$f"t[u? %,M+eVH#a?oCDb[ZBJ,2IGca`dQ6WDXJBM1@lcX)SQMjdk=QT3fq\XY[H87XqcFH/k#m&Zdk@&#L[ENcA)/J[sk+G(%`6>@p@)c*g %O6F\]HoKb/Z,J_hjq+!K6VAID(4XNF)Fu*NG_18;NaiNQH9?b`K?a=OnMK,sk!;GhX1N!9j:G:TO^6B8<in9$o-b)m0Tp>aP<Dpi %a;>C2b&'@.2`qL,#Bs\IX=U#0matH"^0LX&m\()(k3asKK*EY-.*>"H7[_dc(d3B=17HC_!N_l,k.3NVW2aN]dX3Q8f8Zd\,7t*c %$1"&5fm@=Ag"QX,f&Gl+VJSBhWA7Zd@%WKugW!^o!QO1?\/5<tC2ko9U4NS'0X[=.)#e7(Ye@Qc]G,8&M>Tt%gO7iBH?lT_f1qC- %YX9>Ff3Xg>k.WZRI#5YA=0CuMaZTU.`9fCq"#Ml2]J?m$p(R3MLN,K)Dq!7&p1$Ue^h>Oe7[<#]KP+$Io#npI1JV:]MnE:R3lh:/ %55%<`_q[<Jaan/2p_ao2bI@*)^Q1[9^hN#+;l`)Mle:Ud!T2l,2rmFq1n*qQ\\s%ecs$U*1(GC<bSpB8\<5'Y]+n0/o^hh_*s/p' %;I.A\Q^7:[ZBLXP-B)+)H%@qMDd%-C\h.c;VHS@Nd=K^R`O6%pS6o%Yog(a\J<OB["CLX\@aJo#2u5^b1G5#S/h*Q8<00E%cf/#& %/q6<-]Sc,A`Q(gjIc6t;/jgM9a)$T$#iTi@3cZ]VhM9;rd?sfnI=EaKR_ZG5*l0V"5!\e-jA4>IN/35,96[Fn.1mq!"%htN(&#a$ %oOR/6&J^b>BG">ngYL;BDQARGctg7`9.TEFc?;.dD+t%X9EZkHd86:4jT'C)Y@7#:OEIX+G[&:6\EpJtk("$VK_dem@.SO:.8u%_ %[$T]nW0bb8Z;tE)K+aM's6.j=2<c\J7>#0uVgGZ$]3#$*A'0H[,RJalk2C%h04SI(?o-O%nLMe+c%dYun6=Jge;W*RMIOMdgMO5h %P@L(dr)P!&`WHDd5&`C7=*]]U4sQA#d0g^+&gYJq_D9%o<dq`,KJ(H#(sJaF2>i5"/oTY3a"NLGo\n8KfHcIrb&Q`mfVT^u[);&# %YYcH#e`6@MhPuXkqY:+NT+t/Bb38meT2gYVm<AUp*1"WtolpU(*7r6+rP8e"3XdCnikYqHE*/.Gc+sj8E1)m3F>,Y!=4^H_1bD_q %n's+nB(T':Xc'>:R6H;/`F$*SNK^RRfXaC^R-Wh,e2,DWp:]s292k>*gng&nqJktR3%#cmPf)bWE)JihC5;ELiN,/5X2bnKiO"%n %g#%4.#Ck^r>9(><K>[9O2Of[1nHGRZm'HJB-\8MHNbc=O3rC3?U'SuWK[`-Yfsd=Gn]TsE3%gbWATh7>Vkn`Dj6)K^r7*pJ,_u0V %+jtXlM@L6J1"LZ0bDn=41"n]YL;t_5(iLH?dpif5N-69fj'rdON44kQq([mo7f;H1^dB1%OE#Nd:)l&-a.11[IcQkh3G)QW)4E#H %.C(snq5i\R0/F6Sg+JZh45%LEpJQ-WF7YsRUkO6*+TCesZZbRZRPDe=cXlPakq(<r@8+BMRuuXg('KWR>k-#;SmjULU@NF+BN\Gj %^:/U!nFQ#UfspN@>O`aU9G9$aCBtKdf;nZK+CjUF5he0Fd/nsP=mC^G$%:ZG3.^is!71=chHUt,.Y2??Vg_U\7IZB?X2o'f".@M/ %l-D,<[I;5"3+fl5kqK>6MNpKcXXsL4n:Xl?Z)Q//3]^(i\jeJ;<Za+n@qM@,Qa$pJeDZAU!ICQlEEbn-1ukO+Q-Ceh]]KWIR80M` %6(^3gE<"3`J<@&e4<D8t%T7hI3&YT'H/0RNqtof[3_q)+NTBdgNaOa:m&-k#k((YIc6lFps(19%g(Afl)(5%8!7!E=`oFHoVQ%m_ %2Ogh"Zu4la&RIGIigF3p(QXa\^V3_HR"'1spo><uTpgNn[0SgZXq*4o)4T<i'aEKc\s=u]p!Dt1g`.5?06;ZGn8>bq:f7c&2N5g6 %e*\8QiV_jbB>0;)q_BK=*E]tM._(">nLH33mK;t#I65aRh+o"sKDR[p5X=S,,]#@H[f#UI$Bou.9*U&r5NQicb9tm9qK@,XbDS;C %!(bUnf=K8%)6Goo)p+A4_\")7n<8J/a!AX@c%A68jfNgM/-O52]W[=cKpb+@!YSE_H5RkiV#_pXYIWZV\9=#@g-er-^5a#m![Pej %qql&W-h(Smj+N#C@V^dP22,1sTC"t>i6iT?&d2#h9"`U3+Wg\QJYr$_OtP0F2DJ_$k5i+.L7cpp4a[6qX6eP`"j)PY-e+6U04Y_1 %dN-Og2tMeU#P.qmLi"fsWTu-Z;&kMSJ$G"^A84N9&p']Y1:U7]^&h.gW:9Q*?SX0tMXc@Ki_m%?K$`%35q63IW;sMh%=Zsi1*'mj %M7?]0S/hH'S2-$N=PO;ng<uH7B]=7hi%#Mn:ZC12fP+W4aI]=7n+$#L;OnO^+q$FLCUY"tXp=1M9gT&[>^?ANWrpRY:F.3>q2"o> %p%MLWo>N/gI<!?0)3&?"a:rj9bOLiU!NCmt%*r_sL&bBpD,h\[KA63c#'^8qJbW^@(_d<C^Fq>ii!)UP=Ph#H^OnqsgL:Wr7btj+ %:6'nX>NM,E8Jo@GZV['g/SE-`ePt!e=%p:/]U'f:9%q<m$LhC\ePb:0;@E-ecjl[uh67.*=bmdh.E;_sBKZ(a_W57'i!*gT0CIpU %%j!I"\E:Cn6)SI02C@TFVSDOOV!;!taABRbZtXl^,Vp'D"(RE5XDcp"RM:\*@%:Ml.kq3Xr?b%9=SZ*5rB*6Nan^-CA@^\0Opb'Q %NSnNpZ`=$Z>:%tIT&cDtP<Br>M>)%c*Au&A0t<Vt^)$X4f6LfK/Tu/!$"0:6EX=A35ZmcdE$ui,%3lKq>a<)-32d2(92K#<D7fGG %RBJDVN`YG)]bt%!.;A,Lk-RN8r,$Y/JYshLY4GLuCsJ?@s*#'+O*j[N2lmId[.jbZ\qjr:Heap(mb^!SJs`VGgg=7mb0J:bG,EL^ %c`P0_bfrAg@Ve(oG<AA&pJZ9/H'$9s73#AWRKq""CR`%_X2=QR[5\pdQ_`A+DUC8;Qraoj]PA6l4#)2cD-#7A#uk03)-hQ-^&q=9 %2_9d4$::3nHH".t`!/J\K:>sPn1=-=9i(jG';qO4'QEGl'Ia06nN=Iu)DHM`W<&b@5FueUc#AoJ%=gHRVV:Mp)__?5U23Rp;[W]I %!%(Jk'`nnk,=$rAc7C^e:4iaM4O=_T/o<B!q;"3N^p2F`h7H<k]9,)h]3!loHG;VYL2qIEl`ua`hfO]=imZbkL(<Xki2DCNnH"Bc %ZZlK<KH4HJIg='(q0.eM.-XU.47UkJnrl(kiJEPtR%=S0(#T10YAL':Hc]7j.Y<R)+<m=>"g;mC%c^+QbsOd-j(X!:QGS61aG/_M %#KO@E[F]R?M5N5RR'4bS6aI\bep#pk8f#:?]!7Yn#nDRDG2&.=OW>Wg+mPS2of`Q7#n0Pa(lI(cC&k@q!9S+:)XP!_ag.FD!%%0' %X$/p`j/:Q+gpDIJK)H7cXA0%On(ZiAW0W0]X`B6@?"GrEe$`MPh2Pqs^sc%&i#/+KZW=G>Rt:"Y@?oE-h&REo^jH'><(Tf8[A*?q %ke#%h8kht#<[33@1)Q-JdQ5;SF1$k5n]M,;<W/hX)Jd"-7RoD@=9c\A43u+3W[78*:YnC:\&G1@/]f"@d5,0$Xq:O.12]LMee+iA %Fg<E*]L*d6q)s$9btE+3eoD@b2opsu_(u+80,R\[#V_R8i;k*Ei8LBC"YT6V35Km8H&R,D==,(<"%hN@+2"`+q1VV2'0q@ZMXDU4 %H@nCteS[VR)16,t4CDC99P0R`@(qfP;D'9r1(rWLSq9YlQ]m4f@&mQa*@$rpK;'t&G!Sn,j7q\nZ+Z]rR_>%W?<!XP[TuC0e0QDW %1N&,M^+3;DYHNH#U!sJ#8\0blbBG'c(sk8*JG-X63]L[:p?!r("s]$.QI'>GB9_"Pn\p7j&[(ei^&]@%*#.QUq>;tS1oINkrj,^) %E&ra/EWmdQ7J83VVSJ8G6*G_N6lOgMd];Pf^9kG\$V_T9@@"tOqsSSO%E,Mc1K(I/mhh9sn$jPumttkaR/%2dKr"SU,>+NM3E^5N %I;o/R&#aW%-S;XtQY#:M,bQ]NrmnkKnWuRB`0jqcgR))ThX$h@WseOrQ*\Vh'C#gN,4/LmGFH=A6f)XnM]l<k0*Ogg*B1;^I5/&c %5'3Q]\s)"sTFktEjA@,1!?;89ldNi"l+Rm4r4SB(1"?\kla,$HLEVX`3le(-QLt6[*7QiBh+4'Yg-05W&:qH</hVn*Y$9":T27C& %@%dkA(3-6o3RRY$DPTTT>tKi[:9Hho9[E)&!)ljGQp&Or=-l%q]rl*ofa?X)K-l=F9NPag-u2iC)fAT^;KK7(;KOdSC&tR,d.o", %$jOf,DCM7[A+#IKWCecC!Sfa!n7n;=N:]Pd,9puSf5tb=#I>61!dC]M@$9t<27T8qKOYO?K3&7n\L0NAi&mFV<JMYV0Qq^DM\.V$ %;^kj2^O:VHmb8I<.2kAHmb!JlkJe4Vj,Ap]66h&Se3h?:[Hf,`#6P@9(=2olNKtl5-!OT&s0lb2MK?.4_c"dZmbi9F<afHNKm(la %@!_O^Y9_o7O[lGQk^ICl]u?,#HjL#/6gAq$`mH[SHih!gXdt!p1lE:q^1c1k;R-QBg:gn+d/D*4TF?9h!p,H-(+6Q`rmV&"W:R15 %702>^gR?DNqJ($Jl@k:,V2HE(mn#oa,H//=@*i^EeI<`X175,q1^D\kY^FDgOeL]<<TZ)=AM((7q&'>qh(DFE>DV0Cd]G@"o+;k+ %.k0r<'j;b"P7*R'@S<%<9&3/5:`-<bjEJ!f4GH:D,G-h<$S-^+gKRu]eR'8EJ.r[=Q8"MC$QP]FP$.@E-D<os%(Y/Ul<!O;/&aE$ %cI.!K/!ugil8\#Q1sK$W5KbFd08[&A$%L[DTo>@,%sh)mh'pC98[(?:94,L""9)22U_p:.b::Xl`WMgdnlDZ5a`OB]B9`nT=#ehI %e6&NA*2u2].k(F3aS.LN''#;c3\]+rAJq)IpS[,5"(P3$,2!&8SYT`O:>V4Dj)Y!^6&mpH9phlO_:XMsMK:cr"gaG,AlTdW&Hs>> %Pj[Q&kUd]WXV*s/fd%YilmNnePdr2kZ?]-\=.>)WU+g%,rkVPqWTu7i/hNok_oVGr[)'.ah3:p@X"L$gg(o1GqLOL_m`0H[)g^Hh %S3jT[XZE7ESS/+jL5Re^Q$X!=pbWd-$obN"Z[tCG]hWT]VjKfqHHk^C8\=QRYV+IAa<,8')[6J<X="8bKW4oUMUjD[;-%n[r2ErZ %bU!Bng"r(\9o[>8Ga.Sb@NaS:-]d]!&e"CJ*^t$sj_u9PGBe+;,&4-5VLStc_UL^/niooI::91s(E,qLW$NcT9iJ7e6B_QFMVV/1 %i!jJ8kd\JUCB4^Lp5GR:'O/\`:/[9f+^Q964Yr'=fu#-<?h\_srqAQ2+[$CYX5CV]e2iTV[Oc:uA-VrpJ9e1E/B4b`R'!@'MH_Z4 %.XUirK/o7>Ig9n!fI@q[W0e&2AnjH-rGRTd4_CQj)p0X3(g4p3'!W`j9n-NQV+L&R8h?.4^s+N-?WJcj;_mXhIq([lbTS*A1>Hc; %dY&i9!Ob8*U1VViAIn.9GP0o(#XYklIXqaVmm$\YnAQ_+^D-21-3BkuoEeE-D(6F0jb0*d*ss7ab]^<&pOp%=B:sTSc-,Or<YW8J %+k`_M&ER1PIrE?.GPJ.ThjnM!^qHV^5N*RY$..[H-9d^.2ZNYM=@UbIGE`0h1/sKT?-K1YNkT9.qp6:!9NaH!6?VKE07-gP:bO=k %cG4/<PrQ+eFW0s?%nehr`c>3]e*=(p@U)5o&35(q&k82G!+L),U7j[rW<smB4u"UVXb@4jbt-Ar?s&7p1?k)u%''DL2$MR%@ld5H %:OlR5ijJFK$pGkCD+f3[[0[UmF(sD4"tuD!R)E$<QQFKUOH0lFRSXnnm^^Fu<`nGUh%De-eHBA/SQGO[D/dQuQ6eH4>J1Tsg<#=L %,0h.SL?S1R@2ljoC,<42?0KPW=po6!CFs]]:UZ7p0PM&QGbhJ;!;qnd`Z-*3-s0`,!shU-W"D>6aeMlU^gn`,Vb8_HYlh5sM.PY7 %`0[`Vb)]mL0-uB-#8e"$@]qED&\N\s\.p/Apo-\*+Fpf*B-`7*\ri9M)moi`hl>:AWPEElJGOICZfo4-87YGR:*NV>)J%63i'0!0 %?MV#9pJ5B$=f(;mLic*9Q.'3Ch&`3o=G[i:Bi6)r2&ug[PipChf;UP7TL;j6`9d"%1eMniH7'4$0c3b$=XRkr"tR6/S,.etII>rt %G%f9)6UD81GN47+n;PVY;0<@t\a>T5f2CW=TM#>SN1(H)@,r]\FJH.EI:lP:VO7R"<KSGMC!m3aRrk:_,cRICe$>/!#+Xc[bN%%V %R%=>#o*WXI,R1Q]!tFM=CdIb?N"=8<p1e=GA=2H;YqAN=%%T,p8#>^+V;6NLlA84o]AmRX'LJ7g8mmDHAi@&#LEHQn'!=k:Bj]qP %*,Pm)59eU_WGk\Yn$XMJCXSO7`A6)eA;?.7.<+ZU$"MEmVAnc8H%$2l_lNX-+e3TdFJG+jTWTT-Wm&s3Xs&#oisjVdc)KKo+6jSG %V\4<ca>l8N!U#*eqd;8$^l>8ufb>-BLY)8D`#ga+_-6F_da'2T,GFTt4Zj9`Icau7GDL=Il4?lEakAZL6*n@^%&EZl3gL.BCTm-@ %-tpH,*B%kC*"Zcem`A1Sg+aGo8TO=K$-hD`2M:R)VR:?XpXUVRK)<?^Z;u0IL]@!gj_lgFHO0[V=*N@!MW]g-j==nObq$lL:E&(F %bZEo6WaRabU1@eG_MiM:;%[lCiD/Om<s*8;@1!VWY#c+KFt&'Q'kJ5LpYBH?SSNb66nq(AS'[ntfm7N-oIFoc?G2-!H+a:s&D-c2 %OoDff9bZHt8]f\r"MR!LV9!*Y&1B7!m:LqWG/So@.LB8+a;R=kT1FU:2URqBE;2`a)`#^#fh-D$f(p-`WBq'Rlt#eta.<is0NS9' %Gc!`-cu\#k8!/3,+,TPu:`P&K8:kD,4=6k7K_O,ugZ$Qf=!QncP)1%6$2b8R/Y),:HL4W`*U_no\GfC7TbIChI`!F/AI0nuY]_ZD %fnA[Q)^QUI6h4XS7gs_*7e2^>a'O\D.r5*CVMo&Hj:$t_qt\]e("\D_m7pGVq#FE/dQY.<LVl1e',%HW;$+G7XmUhVkB&@a#l\&^ %X-Oh4mcXuD^38pgW*bINPME5O"&*WijfYJ*0@P7#lgL7R"Fe<_L1:c`iA4;dpRfSfoNTV`I,1T6CM'rh"pefdQ2odMn.a>;!>2On %c0UhipQP2[mBQ6Db7]pTkon5ajpDrM*q^IUIPY>4GTWe^\N!aH=0hgKKm1=IJR(q(-pNit%(HGM]&E=_)ut@Sj9\V"#\GWX`*&?? %f(SG4FAKdL!1Lh<O4ugMo[Q:uiFu2["[U"pVVoKRDKNOpSttie*Hsb0%+6;jK#U.6B_S5P+j?N'WBjJjSSb0^.!gbNUs((S:=<-< %&r3iC$,2B.[R)hj^S>e0)Y%%TQ"Y5p<2&=SFo"uqMa62RWPA_>a-'t>cq!$QLX'A`F0itm767W_.X&NpS^of*2mCBg7a!2Ua,D!; %D)@TR"C(TKpkNmF?:?QS6XkT(pW<o'%dL<rZ`^u80`o[,U0"o"OXM/aT<s>B#s\W^*4\hs-k9\`_;)$NT8Qg50G5(OD378?.uIPc %M2TYW7C3ki92s8<jCI0Y=@B[!leS#W]L<p83V(toJE#c/I$9IXX'KtER`.OUrCoA'9hNf(48mou<?Go:<^gJB`<j3J-?U.*Lq`do %S-+i"`l?r3<snh&>djiZEftulI%#Ye\maJZ"#c(31X=AflLUs*!O66'P>4HO^e)*f&\,1V=H,-G15-`%-#*G7o.E5XR"c0>ZL7eU %5m8rr2f"9hhR=m<N(lDd/(_cLC_T`N.KO5K:MdB%&sQOP-nDXE+rH[7FVK[eME,2Q@'0OX[&PoGU5%XTYF$l8OJ!K6_mAVn1V(]6 %ELrk-C42-(Iqm*3B:QXfebDhCF7:4Dh0^i\SJYa,S$NS"g6QGlj1=<:c2_!6;:]LbE!2`=BnE^F9+S:a:iR+)m#sbcE)HHEc,g</ %8Zk[L#'(G!)4;4)"hYOMP\M,Ye+l0-of2F]oud`+3-Zp4JX6T*KBU\tduE'-7D1AMasLOj(!k'3UcuSQIHr*/%96:q<PmV'O`_5j %C!*n#"+KkC^;o[Rr"'*q@#$"R'jVHB[5#g9i)rDMcN;u^:=MHJliDdCqIE92$fR"<(%i5ohHb+!g9UZn.b6sS3@@m9FSS\M)a@G) %B%^t(fZ^AfORBgpMnH.)Fi[WTWIdrEZar./>m&d!)I9pT&KAVo2EWG=@nRHtF(V#WAm:P/E<U-1qsuAn,;F7`($lQ%2^lO>f"!ae %f8U1Uc$4*Z#?-%lKDpe.kKm=bp*_srk'\U,`>eEYN&Jdn:o!Mb'@P3.(9k^LdAp'Rc$u^mRp&$a8)-Iq`W6c#DgmPc_/O7/:^Zg2 %k\!Ul;$fdF27Y&lU+=n-@mI)f&*[&.ld\`)84_m[3@.-3Z5m7ra,KZ$;(^JU)jiOoImG3OZr!VIcGHGM9%QGY1!X?M^$l_tkY7nA %TdKpeWQ</-97\1dSL3<++[dL#0m0Jhk&Q=:%<^UU^WfCso+BtD0G4^Ok+0#hRkBZP6ZU[SdBS3o^j1X+g#I=/m"^5D#<&_(nVF[p %1fA:L9Z-@a`m7p2oh#[9rpFJQ/H`E7Cl3r:C6ti8OCP3*E?S#t2j'aa!4:iiF*LZ[N?Hd6j^8(ceXcf+i5l2+RfQ]rBV\6?oiHdD %1#G#Y[rU&oD!PIae6XA]HYdV$`.!?Y^W/tLm2I%1;-O;u-dT!n%2cR/?EI5(^)HR(`>CF@&EjRgkG2<&C04G*oVa0SJo/k)ShD=h %aCijiC*P*-[F"u#g>q0\s"Pk\7LH5C[8\,5MkVbV_'dnpmYZG2#4S3WTaD1fnhAAKQ--R<Vs("DQZ8rU:n\jd$+/3*PE#bcK<W3a %peCZ%<MNDDi)t/Yf84T!)mET8\bP(N6N`+C?.lknY+MOjki#;-g%+1\s11jF"V4%T,P69!-#Nkc:A(_C2d&EA[a2u./185>Hm?K* %qe'^]?<euA$E/4W(Bn(bI0l@\7HZTPcAF??-DtDG5:t'ckY&/FJSSVVc=J<CRqJE3_\nQg^4F#Zl%3;.mhH>!,E%Xk?r%+5)#gCb %HNg_XAMH!dVDf_%Lu"$j`msm!jZPjA)91gc5C#p-k:6_aG%;3Kn?/O!egU9l+c$EoY;>r)@WXPK!";s)D$E$/)hfAI-Mp'R8lb-] %;&j`;;%BDbKqc0ZAmgt,_;CFUN:o"O,#3aVX?Z&L`#1hp@@0k[ZFl8Fl*21M=S!4qg]lN[?PA]@R6]X/&G?j2>??lQbM<rXFO132 %'Of[$72Bn.@a5!s@X#g=Pn!Y$c"c$gl7]+?bH(V[*2JTlQt0C4MMm=pXl5<s\1!bE#Ces0i4Y38P%-Xf&n?g4LVP\i3uHE)?+_Vc %/[muq)fI3>DXdeeRsCnBQq9>*=ahcK?\m#qV4UncG3f#0o2&^X5[cH\N[cE#`dVJ*G\pqE4*.H(YqsT9\nK8>OCrc++eZmkg\p;- %AgkV>]us4/)o1$IIta<[7"4W$`GA&nW1c;Nj(>)#G9iePCLYA9K5t\sM-r+h*9SQG9b?`5^V(=dh\(Sa(eHkA6(iJbh&SJ$-SjR( %n*e=04L,8hbekYun]YWni'&3-P"/"'"8hZ1e3%b4+8DH5Wp#RDqSYT]E`J1%ejfr2JLu60eNS"mO*oacZhK"SI,kYWGf:15j<J%- %aD?<56(]"C7rIu5&,XH$5-hfH9^j9Br6-fY;pgZ-o`osCM$e`Cc(Fe(B.EnK[K"&25AC3=FTW-M!foqV8(E3d^;3YSiM`5b<*4BE %@lPttS2;:IH4WU6LpP1@=cVL?>]J-#GgO>fC1eMd2BESnhS_L9.N_HD+@l*d#G$t^9p1-Xa\h<`/;eJt:H@X?4=IKTeQYd(0+Wpo %n(KKdNL;.WR\P&N;<?q+&a-*aF4Algd,]K!ml;lr**%Pb!^\9.TgqhOK7;3Fl0(tZkp2pD:g/0AAND;#]dl6/BL89_UQ.rF&#rT! %"fnELeUoL*;+'ZJ[e6<;FV=4*WdR#YK,mt1%XMUqg11^TAk0hH#BdDKP1icSm6RB3W9&2%I="qL4/g8lFQ^p^F_<SDU[Hs57c%!< %n"@>fT[NS-k]bDQHdE']C'l$4#9T0;:SNS6otq$2`1s?l8Up7rX78d5nYcG5</Z-#Q98nY*q_"Dg6P5DbQl,2UUoSbL\!g<o0M:* %TEKRA%6Z2"T!_*2FA!]4:60.g-fNRM`p-E\odnmEe9F-V_*09f*`ZfJEjTK@g7ugX=V(6m485\[HW9'S;"#u&clee?VeBon'JG_7 %^o_UB'#haRb*1uL/e%/uBfcH\&jUo`d_8(kX&-;p:u)1EFBIJkAQZOHGqJ.0&b<ngbkaBF*O>Rf&,Dmoa<`jP:*(6%mo5STj5kh4 %o>%.^F)Fb>S0O*XaS7d$K8rX",Nn9AT6-qc*B6h*r2:j,lH$P_?t^S6>Y!Z&"%V]G-TgnE*]Rm^3noekp:uf;i6r^7G:/^5OjSC8 %r]T`R:R&^@p[F<CGi1DBYocb8aYTpeaM'bl2'\Z-XA0t.MX0'p?#a:8ED;M,e=Xj`%ij1G+83dGI:V"P)7^"?mK:f06jZ%tLECc\ %&"M]>p@8=7q109/U/)kVeji4'Oh:S-o7#VN+5,[%UA9q8INks[nD'(pp`k.bJSBUEje(f7-`6p-._nnGi1r5Leg3:*(d+`;4=DEo %1__#'(67)W7hpda`J:3L`)0%a6$)$OTAlMSnXt3uUl]TGdQ$Q1*&Td;C*#n,O/#=g8PeD5HfV8,E`=l@:d6rHV&U4M*n48O8hDD^ %QO!2MK20Wf:Zarik+kps<4$r!^,`.Q*;+Cp[<IWl4U4EJBD%mL:s_L*kYZclTN$$_1j[M53bfr]<L"U>Qr#6ZdjfVM@jG,Tg]dh? %2<6j7"[rU#(H5<pYSE>I61LMA(sRsLCNY"6+O=UlL&m`e:$t&Y/+fc,oq5E0e@%F'?l]rf*gF'm.U3LA>t8b8UCPq/B%Tsdls5D5 %W*"5o2ET*T4Xd0J[FL9uCepL:7s2;)'&6>Am\hf5TLJUJ>Ba&VHVhUA.d%g0p)`l$%bc>$Q+mPm^ls$$;.]5_OmkZMn>LDQdR64_ %-_?S=c_?@YSGK46R+&#4H@eW0:GS(3f0qjQnHLY'='hY5]kmGLSeWi<lBgrpR1G1D:[4E^S^)kbk>D9NW"f*$.XG&:4\:o&Wg^X0 %TH9@r+&u<:!j(i_X[c+;Zhj!?:@(hVp8C4QTN(faCAY/aHdp2dd+*Qki'"%34t-:lVuRq4Jq'($5,o,8Fc+M6`^g!fUJUNVVXdT5 %q5DbidW@\<59H/b+'#.E*fa!(^-<mf)(Ua"5sYeC$;#7QGmTk[3%tVY%&-j6MTHsu'qfSO\V-@mJV:K@^^>nF<!1Upn#&t??P3;c %Xe$EikhT`k)3n8qUpRrt'\,]o&a"HiXWY,uhjPQk0JTXWY;TTdeZDKHWGZGZCF_0>'-u$>0M:9#DF1k8FD:m/i"t<M8]i3h6N)lt %RP\30[6MIF]ET$Ze%#:5aiTjKN&Sk>9CW]#E.N>YU_[eJaqdrj,/?_hM0DoGckAJC&#L7X+CI36+/BMr<oRYl%Y`:W_ub^NR1KtM %XR*TBCc,]D][o@$N'#B0g:S+j,;WPtFC<,1FP"f59uB[`/u+S=)jJ?7QOnqu<mo^7'GOui\pPqI3PYhr:hK'BZjKfJK$1E\&\i^: %`DEqRib\4$m8S0a4_5=F^f2c#3_'kFeK&JbT"Bo89^>e!D+XoqBA("q">=6ibJ5__3Pc`jrXbOM+*EZO9Q*CdhF?mq/`D&m3d3WA %8XT_B^I9V$b($peE*X,Li^k%6CQp&iT^GHtGZf/*;qGV6lIu*gW3(3aAMql=XE13+V,mY_>@:K9P_RHHN<A+h77>Pi%%1uK`<+IZ %?Mo>Wk_^PGbPA,?)8=31llLi3jTSDjQnns9JhqdR/m/%9WnVK*Xi>'e<kllOFVlNcA:k"4]ri:\X2`8BQCicjm;M.XR,tBDnf.so %hOa*=emkfmF%Ahm:!r(\EpBqLND4"<_6Vi\(mQQISg+NDQi!:2J2#G`UJJ$uCbi:.,G6P0*G'msGt#m='s&nXQhH7=ZlLBCmCSVB %bUG=PK8rWNGh[@XW*CjDO/7pB)38%q:jfH",Jb5,E]#.u[XM%N;cSI=-&kN..AW(S\mdg$"Z=HqVBSK8"%udNPaCM)^08hJ24&\n %!V1co2jc*jjI@IjHYm5[ebJoR(kc7GY.UCh.]8)8[[W^QYJMcF_Hl?jGEU<^6,_,_naqIPPF"#U6-6\V<+]YGLU=a2=abFg=Hha6 %ejS5s@kuRLs8/hi[CH)al-e1m`/.[J&*]E8Xi3<20p.C(e1G'j5^tMBO^./8X!`p_2"u0]!MD,:IDF'j"KZ7-3_?7b(`V4rgpHu1 %btXPgdc^V8mJ"YUe!<)i"@?\n<-e=@S'6"':N$J%\$i+;KI"@`>A%N7HbR"H0R<a;S9m.kF`&H[\$<i0.LcMleJ3>\X2RYn_U1\E %K^\TfNKIY8IVK5HpQ^FlDFpK9P;F[jjmFVJ2C^[R-VWK5$=SdR\M?S8^/EJWOt-fP!:k2*8hT04FM?hWQsIOWBuH.4fOU(E5:!5( %L<A)+qKN?EJpbi4lB764,:4Dh1keVX&4IFD2(po^-tF,!U-ut]M1r6NX3CZKp'B`BRLi%1VbO]&Qkc'.=P#n>BWZod!Le'?I<!K9 %l]kL_oB!@cNC,#I()L"!TirsAq0E,pRLZJJRW6D+WR/ee\jWO,dVRH>).,WD>Da&%fL:L]V!L+%j*""tQ:TGM9/4:W9g`/YKp><6 %Gn'Nb&9M2bf4nS(2bUAX>Ufp'WBp]7KKQ%]9CB-[ouF631[)j]1obTi!,5]\HNH+PrVO%:>Tfj\j8n#ZQ3;I=lE]5b8hTg3RIk-B %bKDC=;<K\PbN8b+q6aZT7^lWg%]OXW^[N<TCpBG?nG9SqIh3?&odWT@/A4\o9(93#O`;"5>rG!lb3qa[j8cHd8=g^%3XHMie*k%9 %?@KFC$]pn1Wl2%Cm\n7liUOo<1qW7u".1-7om2I&!;Q/ZqEoWupF3T7bIb_.?DU#Z12;tP?kCIB)tc9baTB2oI'lRb?][/SYRqLI %%a$lqXZ&D]]W:SQ72u/BM2?ki48'uh#bl4EY2#e*ecNLJS,1MW#'&]YN5?h0<dfK60UY\#])>TH66l7hpca<p^S.i1]e#so)<U:< %Ak?VmmEDH>fgK/P_p==#>`A)Jkmn^5Vc+A+LuP7rCbWnWFm<!c8YVYYX#.p`"n//r&Y4M9Fqt2.g\&?OI7kil6Bn[6a>e'ZN!0=3 %<+Ha^7ckX`XR=O*cR;>D^la.ghPHGQ_OHZ.#Hgne%/bMcV(*g-8Da_VN^D^P&TGhRns+NQ<i*:X1]p+1'>,q!9L+X\!pE'Mct7&\ %oX`4<)Adlp!75!X(fO8BY.CH.=_9F(T5W9lAG%E5OGBFa_j05C(8l(b!+qc`S8DU7`F8/J5@lGu#WlX]YDg?mNJil)AqN8W>q6Or %V)N[%`'<*[\nN!/EnJ2EE:(q%YW2-QcKbTkOabCpmG<g2=WmDP3&8[rA<M8HT>3uGlgclc)jThscFD4$!]<Ku$962na:*T10?Sc6 %.18/I6jNq>c#F%429)JLms[mDBXB2ZG;e7R`eb9nA1HP&X><lej-"S)%B[Xk2k-VIX#;(t4?80&F`asbLA!;["dTqrpTI@aZfN0A %];mL!"$uhAhVhm5"%J)uDoGef^ZZj6a&2Ol*B+_?X&gaH8jEeW=/$&[=piYgobB8Oeg89C_;#KqAimY^:]r\bLP,Zm&cS$N)5j:! %-g<p84enrp&$,'\g?OKS@3DVfV5aV:ktm^Q`3"dDVWD,3T2nM_[RKqJKFJE4Gadh>c0e>SP9sI\T.!&/`CuAP@CJ=8Q4ED,)q`dY %`G+O`:9L*%P)&p]5is^m&_%:+4*lu7XGuA)HiP\Z,lX/WqnF%W40?UnDI<ho+FAXtfCI?6Ymf:+W5,ib8agU(8ImJt;4r):<'RM% %3au-9.+/_WKiu5>i4m%m6?<Og`hMa>996i%Wql_ad]4aDf!C\.8b_nN&,W"FHW6P!ldJ%2ffnWV*Yi^VC:Zpsh4mI.K:_Oap?tj) %pd%dP9mcZ6;>d)"I+1>DW['eW.R0jb+*F#JRa+G%kHe(YK<"Qr!qfEkH:qH-Dc<aq30CJl8g;k,]Aj*;fVNm^5L;X13rP/n=!.8t %G_lVoP$0#f-F-3dX:(7*iW3J057C^;A9d(Z.9"/E<F`T]ceM)HHc^D,YK[%\glK)l%LEaa9!UC*a_:R\&!0+kF*Ru+NV'`r?Fm;] %Qb5G1$XJL]=PCp[0"H/EP]lb7YSe"Pq0`S\o/rARgY*XBTQl^Lk-_bBV]1o%IkA8NB`o%u&J9h7%Ps;'[07.Y+cDW'GR8\6=Y)Ld %^9a6@>0pNS;9"M`eoT+"N_lQsZ3Ht8,(^^f"H,&k?U!n"#rj_%c,ELA6^k1"KkXlUU<:/@m5bdj7d^N$"nXq;CC?#YLQSb<Q`)-G %`lani;sO;b*8]+YqV3"*#p2cV,tFr>@lB;uYq4Fi0^FkAUY_Eb;.n5+.a0V@]3rbaqdXC.R"d[LllM=:LIC&TAb_X!4Jj;EP*X,k %kN1"$-VbuC.s1D1KO:&gTLeUQT=<eIVfGU%R2J>`I3pSHNS'H+]M/4@6_/d^$8F=R<S"dXk%iH23P]fT[7kqP,[M`df(*sggj-kA %]"3)kn`4601>`Z"bKJ+IA/YtJ#pMSZ2iigBA'4Eu]dfsl;K:CB*$Zsub<3`?=7H3gGh!r,CGaD[#L1^0Tod'R#4!!c7g]-WF=Ft2 %.J'6JK(b3EJ4^s^h35bWP^A*@CtB[q:D@&,RN]nN(o0eeX'3!:lJ!PRSo_hG2ufU9=>j&X[<WeiX"1=':V34!*\?_JG,/<d/VP9[ %B'QJ#-jNg"+(/@!5;m#m.p-63N?lR-ON%CJP3)^;WGa_MoH\tP9Jf[lfSris`$>pcM<Z3ZW-T-D"&dsG2ul47*<RNp>^!5Ne8lGZ %)Xf<.@riBdTOtqT()WU5oXZsD.e-U.-rql/;#D%5<t8rQI&X!(lj+[V/S/d9oaH[N/>4YqWH*LYf1J"UDL_cjGh62``OV@#\2("e %Lt[#D+u'Xo?cDrL$aVk6G"CGV&VSWe0bo1DkRLi3^O9I?n#>A3O=LRJo8C^uG\T>HUA=J">P\2XSmSP?P0'j\Cg09o-;UWfc742N %%\ZUc1CRZm;B6h(jK>sk1>W3#]!X%6ZRW%l^EGDtB=$-(kl\_6PlO0HU7*6,[hgm5h7u!05g\J*pO53][*"`<-/fY065Jp**Pc9] %_3X?$W5(5YC##Hb4@7/TX.15DA`D?D3FP,Ek38WN:JW'V5S]8@7Gt..FQ-^#KFgWGc,e-tJ\oVtCgIa_KTQg:aL8\NE2?*jhuQMD %e`"jLeO=)`O:(6u/pP3T2-q,,)&O)@8n]EB=3(S+$J:;)!j=VF[)WSsKW?T<.PW00Q$a/P;9=gnE;A30*ch#Up*!t78K2?k)1uof %Y9r8WN17:QRpNRWiPBMQG%tT%kshQ8CV(b(93;,>jB%9/+\X&qR:_!l8<T]+:d_@u9XT.%F5G>B8Ogf):T(tTfVRaf'qs8(U*fEA %4[Sg8Z#L338qW`tb3)[J$"eBf@,,*@F61D3i#Hi'i-^&#Pp";e&tk"R7MCJ-U(\*G$3=?GKn'G$AT8(skn6[GaZ[R+Rnc4C/9B8B %-<+75cAs]@#CQR_M5n]rAooe<AQsk,Higm%Q-_[d6QLCtp]u+M/h3`/]YB,n>X0kAE<T%WFTUpMZ=$#k^[.kM!u+Hem+N#oAt0=* %7'2>%R2-E($[!)VCC/!bZ(a9T)rp\fLV/+$`sb64C;k0_aC8Jmkgm&ISu;A%0J5@d3V;1o<gh4+aA\j[qKV'Ch1MIIn_eL/*L*<L %oAK<^?)3Z?F`b6e*42IkpYbbY3J^0qno3Z>V.BU*@NZ9J"'S[_-[Uh,IQl//e*?O5M1,<m\/^P;pST>:ND"Z1'H6sU)LLh7im&@f %qPH_h(aN4D=9B,B=,ZYiFAlAf#/GQ[7c%DMpCI)[QcG0d\37KA-/Z(pn4:`RO"<Xh)>cNF)@4CLiW,I%A*-662,9CodAp:-nIZ8W %g">0#I9$L!+#L<:6JX>4muL%I2KKZji*"1u0#\Q>=UE.f"\KHdDYc-]\KZ[b+NS;"?2f8fTq1p8H)XOJ[Q\`,*6@CtT+=b9*kGET %EDr+aJAs\(W0dU`p=4P;;$MHm=ure)[7(\1,`U]Zn2Ka9#W9@?c@k.o*:;/8"r[#I$.g:jmYDA3-a:M?#@,1R5Of#e&.?*=U+JmM %2\bPEQSN%AOIAH@6flZs#<8=--p0$]XWs8J^X'\%Xmq.2E3r)^"K8\PqS?PC>pWlQ'*&GD'e;ol#?[Z+R%\o)2/b)EZ-F'Z'3aAr %=`M5b4Q&*Bd#N;Ua8mm`hjj9kC*N^Y)jSdMEbs;gUT.KfH-Ze]IGP<.<'mtCEj"'sE.jR#nRF+p2:4(Mjk]+&%$H6Sl=?J626',X %HJW=G^J]/5Q7%]HN.3Tms)peYr:9'T*Bh$PcMMChoPm+q]_DHa!!50X/T'4+?%l?DY2)dj0o!esl?q&*'LRN',X_iqPX@,kn3;'< %*`(kgg&:`2J",PDJ,b/`jd:hW6G=.:3Yrm;S,-Zc@\$D$5np^4!Z\\I\'[>u:`)`3G@6l6H83DEke\-=+t&`ibloqDhi5PWeGE:V %bN40X=-JR$aE6__in&&iqC,s##]G`Scs+lh51<nqB_F"5m\fu*F.XmS"_6R1=$s+cFN4:5H$DG3:T*PS7UuPXCUBR^-c]g%L0rK( %#4DJf#:kZS#]MXG1MJ/nhsXM5cQ]C_Ib9)Hngat*nHaP02SPq/O*JboBViMsp!_esAZ(9[*K2&(3H8sZpIhm*<*cRYf:Y]90n<XG %-\6+CI=TQ`Dt<jGXV?m'm!8(:hN.QCNnb^5+1l_=qKtO""FoVWIcrWfd$=O&KDDLsq7.sNTmupDe,!!Ap-\lRA#K(AY4.2Vo#G). %%t3]'4m\6cmUn(n8t5VVTT?#S77o@p/BM,0d2<,tOf\=>]AG.HEo,Ko-p[dGZ-sD$&5!\`p:AIg=UE]i;N,jTYbBr+'*&;u>Wfio %.kd2><tt"/p:<5n-<YhJ?/c#&C5UOQSi&4:"RKkg\a,Ddqlk`n&RUS;J@3?#8ck%0,4QGW_f?XHfE3`t^=_0!`c=*)<9oVo9:224 %)=^0`=WJU9/jir9WS?;t#/u-s(/"Gd%O$;8/N+NaFf&8PT2r<[Kpdhk0RH.sr&HWsNP;sqEW<BXS9BfLhu87?p<YU:q"?i5@:V1@ %3jnko8314N#jB#;6=ISG"\^:6I/PpEk7IuG6Auu5V0Fl_%8Ath^OaOPKBc4Ae)cr8M\j<G0IkWb(hpssF?Y7i>990j;$i7p[q-$< %MI'ksgmMasjL]FPcVX*UCA`T8J&J'',-cojm4H%6,,)X&>1c:q-o@pa5kInf'\XppZk5Xkl`Z/[*ee'aP-RURg$JN'8)@*?ddeiF %LiIUM^m0T\ff)uL(h$Pf5?LCaa/'nMh70d*IAtsRR2Y@8M>*[_nL]Ik8./,Oq]qbF]#>keAD@F7#)[KC2pnimR_VVa7@(7kN83o1 %IZp`%#[toB=U*RH6@mH+`8)@tmcuZrmL6`)$(]\]'$N=@5>@*'5r/BHD]o`V2AO]b^,rAE%?1D+X^pt8:YdJHB*uI2.Ib2;cl\.? %J3,+L?n4OP)haTL[*31q\OYAP$qkc%,l(k1V,Burh\ie%MP$c3pl0LE4]?lQ<$DH$&EJ(=h"BMGiUiWj6jfE)N]q-BHWL<CA[3@T %Y@)u)"8cCtc;D,Mga7pZ-;b?Fgl1RWE&4!5A%0;/c8!,I3V$Xnfc:d<n_18*+5u^Z_[oE3MCiiB5r8*ZNRaE"-:9E#BR5`LY9m@( %!St"Lp.+cJ!!\\rm#t*N.EF3c?_o$G%tG3a;Cfm0Tgr]ceab4323u.!7(N>G%0=i;H=L;fakaSqR95hp/*I41Q\)5tk%TeR3siW( %DSo1Q]Ml=,oXLr"[0g1pR&+YDq^LaX-a*D>[:Gq-]ncld-T+nZRC-"ep:1Kjm4=9JC(GbIriW]JrX.P-`7]ZIYQ!KjVkP7Dm&\*X %9`S2/o!*cd5!7j$C*N[oRr%F")NugN2hi8*2iTqQC$`m=[bB8c#,B>q]=!'==aJI(f^3,'@;+MZd%5;,>-07A5%$<Or=m9o;^E/g %EGu*,BY`#=7ru=/p)XILK0&WXUP&ngSCm%(95hL)[Jq1Icn,kSIH@ljX;.9DH"`k75R=8i'X&f6nX(A)3^,)JH`PcLnKU5Gkpp?u %3D/L&F%f)jm8rtH'psgbKX^;Z(7`<#A@YWTrO\m3)WEV_1R0'VQGtcL'5E70@8:R'#W[sJS"kHWq"!,kFcs>4c+,B!L4mG#=1m!t %GKkkfF82.17r$[:Jn>t/>nO%][J@_a$ML\,:`O5BbQt659=qja-sU:+@XM$KRC0<D!$F_>)I(#F(uOEb]Z3HP=@J=<XjnsG'u`%D %H]\G-[:U1XX3ub3`=h&0-.n>/enqHkiDqe<[W0!!(fgYN$tDrq7PA`Lgi61ea'tJZHj!#W![#p%B;/eaDJ&FQOAE+HT-:N_['j(O %X&&f0X$<3GcABGe_sH)_T(0Ka,k*$nG^*NC<#=@8=Ynd:K^,SrY)B)1Cnpp:mi]fd48?=sV?m;L_2\];=Ee`_n@Y!Te!)<a_aDV' %2F5B/hVl(EZJIVE\VrLKp,+.k0$4#A_V;PdE69?=jiTf$Ao8$&p!.CPcsDDo">qpLnFbr9[Ag:I=&UJ=`29og4$aGG=Yptpb^p6s %RS%_s]Q:mDQ@QFeDA2PTJ::-51;;k#Ik>#TbUfBld*ot5]a@#ajuO3M(qc`EMtaJ_n5NUO<Zupp=M1K8JaW_l"!rV0q.u=g0-mo% %CMq4/j8XGM-#*e6AO=h7+HL`oWXkMY!`ql@XHRJO;.Ai>`q:J0FVOXtO97R:LRhDa*otD&dU`qEB*U`0BCW?QTs^(0gOjn.=mGAs %$25P`pE2;:Pb`YfY<,;2*C]K>"n^)LHUh5Q#78/?gttsGn15c.'HB5+'0aJS5"H_9`=X2F'T\uH7sW+LPiGX7nL+tE+=?n,4F*0i %4K2JTF>&[VR?(gGBAq+17-?k\o-F6ZPR)\6'0Q\`*X,.XUeHiTV[%e&#;OaA6?dKpGHTn4bc#q#]H>,f>E'K%jNDGH1"9Re_Bn(G %S5]dSW!^3_Ej_e9=eb3/FLjt*@"uh+FdJEBH%Dc\&$Qd]?=rn#7bd_%A1*$l!pWTWcD#Ku/G82&0[G&R-ZtEA%Ycp+QdBqOdZ9l! %aHA4FkO$:JjEHgFG";eRN2q#3,PnbohpIQRjL,pO9Y>Cg1oG)Un(Vh'9T$4Q-9YZ$Cg*$)X]VL5_FU[eN*"l<k>`>`iW$\Q(Uls. %C'!7I\k?#pf)V!-CXN!*ZM%lP4gfmhI_@90[7#ZH?5^F#%6.l$k^Sq<T?sLlC!MMIdd?KLG+G.#`W<$`T@gpb2Z$8*orMV;=E?$I %1d^<_=[tl&IDuDEi+*fT1C4'_T7STE!(RB;=tG3'$K>$7#6`4D<O#,^)^UTQAYMKf]i9TjO?s$t.oBat_p?g):sXs.Bp;<BCB:H# %7hL7.<r8,QRUsqB>mrGR"jA#RD7(k!*s7/O<m8Wc<VEOH*>mr,kS#dkd2*.N!R%j'O;!0g+C6^p"\_NXRfM\/0NZ;6N)1gNO[,\H %$c_kRMfeWC`qo;FL@$sJIe<]LSS?JGN&V2WWJG.@VI<.tJBn8(_L>QTjmD#jNZPc\feK6Y-KRZE*B,PP.:'dg!KIpY@Zn=?_+;_T %Bm][W5?cQjPP=kF!G^[lErbGp%Au,[S+AulQ]U?g`q(FUA7p]<a5MuQL4_h]\5B3NA5/Tl/A,64AU83_-c%+A&rcfmpYZII?DuT6 %p(][,-"RK%2oAYlYgCaqWb`3F3;0:'>*"?6^Ln/p@2C**aQr`dC+5qn^'$kE&bejaI]=h/&-^!Kol9m-h;2U&6]QBU+`URr@("q8 %\Hlt^<`n5BkfPA\hM-'>7\$3&iao!pDc`HH!J:oEr$1mHQa$B7W(*iEfqXUaKsGbi"RO!:3er+\.lOi<K55f&(D@W_DRY&sbR:b' %m)D__F>;O_M=ZHML7*<5lhW;,f/&+r@-o5H.8T?gnk&bSd,,AU)02:ZNG(-GHLtB!nI-igG-]%;b*!a>)F'Ye\G-,"[S%2MK-0.u %L/U1Xea51C!s)2?M0l[S8-^<J9@n3a>;Y!KO'N)l)*5SL]u"UKD-UrCmG:07(/'`0j+0E5JpWm;W5<;309F@JN5.jp>ET(NMGaEI %.(Fo9og*ZD.9t`2F)bH"[^%O;]Uh+hlcVXE5:fH,3bAs"As"p+XX*`R-1lr4m\=:Mk"]iUC9oknUJ(RNd8t\alOFuoK=CX6=WVt; %K>79SRqe=;A94cq55nFLY.e#=9.07/l"KL#S1j5R`HP^GQf1^_Ou(nS;>BK+P'3'gH]VPQJT+[j#MV^N"Hf&]cdsu.i9N0Ui<Wn; %!'Dr6A:fD"Og3pY+<)U<2\[G:2FFkRRmR)'V:NAI$HOp,Wb`skmr7*+'?+A]m$Ybk=hANjM:YANpDKKB"S*NU5B$%ah`e)c5g'Ig %V6;XCWH-mD93We5T*b"B1WGj.E,,a5CakgHD7CNi7.2@;@O+tMEP"/FP*EX/'s@Jf"a!JV,%J^,=Lp<691"ru(?7q/NFi&j,t#B= %LFmc#fbtm:H_`H\V]aeT664gJKS$pC+e2:lhI/1uD\=[3B<u'Rh5&g/Y>j7c*Z3=-gGA24]kdlIkQapUD_QIK8.M]DEa+YM\6M.. %=Bi#HAJC:._n;Y1DJ,FX6iWO*ZuCtO<oFrrM:]TL.e;4;;2*J38h?FPTnuI=C-[&YqP'H!WWC"QP:[P)4@YYFYi#0n+;TDA6k&3' %0-o1.Q`>2e7)1,Zif%)SQErWZKD4CtYI`9P]Q#IDqb[?u([@q5>g!b]23_sjQ@r1@:eer+.PRhj(/*-q(+WR?n+:c#P7S+3HF6;E %?W("T=ZpYu%R".>i9XNnBL9^RJ.5RS,a5Wq/r'rnF9a=LK.;mN*rtP<$/o+Ug:qC5)jfju\8f^P?WiIt_!YekfjGO3]*/p&<_/l. %`cDGH`!`9dZVR:+6I,mD?'6[_85NXX<,!;$&nEq]"tXr#5jS@\F_Ie#4e[ms#iu:>o?XAuIg4fkIAR1f4M6s>qg3S>a*$pVJt?#t %Bk8@:nABQ*YuON+BebFAn$R;U'HboK_n%n3^phkjNl?D#dQW,*f_eL6jMQ^uhKk5eoPlrg[tR>PR;%r3p*hS,dXY&AD`;-t_q#uI %<rc/qphB8o^/:Th;Nt4h-C"N,<=j8"=EG8uW65>f1+->K.ThU_Q$rg@#sX?u>]JUG3/&K;TK_F)QR:'WK0I'bF4?^'VeqAc?pTD[ %&=A^NE##dB2@S"@\-fn^PW1:TC70Ad8X*T-D03!QM9m0G):=-a:6ld/\c]K-Kts"-'f;r/<^je6Cm9o]No['WkQWr$!qhX;GdE@r %@:\ubh'q;oHUS,?@0?iLQ&jL^?4C=b>lc06.XL5J,C7:BkBG\50['+``"8RO^eX7'<RW^gZF?I;+b$6SZP5h.=d/IXGKAMV0m#f" %*H4O[R&(%8dlS3-!B'NMYW;fi*\^fX.RGX"/a%9RI<N+Z,T,d%e#PbQi"^;hBu24T#"3"ZQ`7@*NTt^fk=nDc2cc1:W<-Q^OhtM% %4LLHG0)h)4O(/M;H"ucl(&1>'?UA!h^t5F2[NI8MM<p"3,$.\rZ$O/u?ta/T>[!'1^A:Pc(eOEM_4<%>i?>us#4T@P#3@$MBC%Ii %JL''22KRK28X=GmiS_`BD-H8X1-PoaAW!HY>TSu5c:];:7qf?#'NC-a8@YQoN<2eANAg&K_'9]^:l:_V's,F$iLWE!ih^.c;XE(r %;B?c`&_(,jSQB4D".$lt-[369i=R8ADXkX9Z@3eKAYVYb!g^^(9JuZsj5=WNrYV6:s2";c8F?;^d/t<,mI^G>i'2kqkBPqs>9)[b %F2W*TDVbP6LT1p\cL;0*A?HhI?Himh^LbG+1AB:Mk1Hj!eC`oW$-oe_cDe"m@ga>YSh%V`DRAE758F-QQ.-i*Ror9p1P`3n'Kujn %&bMugk@cfMNFKI]LCXCGM%[aYj$W'p-h_Z.orACAeukCdqL//>9hjhe:s'n(96I]magajbi"9>kJ4+cM/KPI`7kE^GDK<@V@ZLPc %=`cW0<6g7'CqPGj3?TQ9M@Q/n@akR]SX-?BC0,Gcp?*Y>NP=H^9b3<?q"ct-^+?Ib>t@+o>;G:B/*L5,dbd#;LaTg7H7,(11h^+C %6(Rno7/o%0JQ'PZX,DRF@sY3JCIknO_R+Oflc.4=5S>ds;l-EKV;l_nV7:LE>Heo/9-(s6@@`"Ye55#2:2eG>Z$f3\JWO^@EoK9Q %9nnpgc#aK@NU,$G*c-%BX36B\#]N-547?L8%u-ITP\q-Tkrc>l,9d-j</PPSOL^1.gR@N+-kd%)`D^cM@DCBWV!-d(_s\<ej(7R[ %CF)`6f,r$\)a:E]ITAJCC*0&0m1+ld6"rdrp+%s2ntgJc5\[9jVN%SDd9,p:7h&s<g6JiJTLe++1:TnjL2RdCM><$%8!NY=`Tm,? %SBSHcM[0&QdgstP.\RHQQ*Ed3E($R!MUER+-?YK+H;W5K/3``WhfaQS;AUUdhS<R!"X4b#'ORNlMlYVJ01`"@/g34BA,`\6Qo>m[ %r_,aO!>qA,L39>8h7`c;"s>5[-8V'Ig=4WFJ)LkAO3Qeg><]ht1/pWsd8hNu-=i<_Tq#"aM-<u<StjkQaFuNZ2ldItL7mY?(:(], %PA]qg@JO2gq$4Bk1^ATb&s:/!Q)$Dq#jo-J[(*5EiUHr[>%,9Q\`\*Z3GA'-o$p*.[;HmFp=EUrUV_HpfUZdeUR.:?EUM28:XF.' %UlRobDCYtp93V,?FgVmc94Hb<4WS-&$U^T5GAS0Cjk'H3HrTpnrSEhofEl[gTEK/L-"g8t!rNaBFX2N*]R2-2<JT_k%Y)N`RXf&b %$%V*@\m_2-4\fq(#2^(Gnj8:TCe*fj7f[`=<%`nD!n=?])P%7bl>lBHInsq`DTch0k3,[u%1S6/['ENuC%m\F]uh'5r+7?P!#DDB %*+UH;pQZi66"8rAhY&oV(r0ei[_E[MB]dl`*%jSQNK3Opgf5)#%RGoOUJfo;9sdOPV>`[!q]8hKcjk*'Coiu4hAu4^DI3t"PkHq" %QQJ'AP#1KYOK3_)IQeA`Q0U"LEWldr\!o1HY8,c.8T'Gd`80'ljBA^o2*smF0c3;8/m_O3#a<("l6;u5D7>^NBE3r-jg]G'ioKKg %:9V!RFd^]tnRh8E9`7q1M=tTGUb^"!L+3m;g"4YmF)kMX]&iiNp4'hXo7c@JJ3lgNYVeT/n,WOe<$!U>bqpU+/C9R`K;4Kq1/f*a %7qcsBQ-Dt0Kha$qWAigBmkI':53is^QV2C$S0bogg1Qb`(L)aQ#ADObL$tc3C:Aj,AS#8>JQn"a$i8#4]LO<*9hs1-^K)B>P3^XV %FRLY`QIp#>#V4=s-@$"Y0H@Z$08EfD&T>YnW7rh.WguFEQoIH+=^>c9hKEQIi-_K("eJGU8/"]ueUWl`CQ7b#dE7qVq1K1'V:]JW %r\dK:?I:?OH($-`FC<se,1?Q21/f[/f%V3U:M.K=g<AUZB-H9-W7D[><S]s!9lG^cqbqk:;^_BNbPAX@o`"Ub0730A*6E2k$3,VQ %&,;k)frm-1]P!Z&I\7h*Tag2uVQ?%m@tOek5S4ba1^6=)rq2cDnsl`Jc5JO;3J24JXd'\d;k92AQ'ZQ;c>tORJ@DKDgGjeWJJ?RD %\R#V$NFcR#iOlD2kf6]Z@r"0D':2ZT0q&=P=>I6D3D25pJ2t!q?#%u6<hUW)IMXI\+O0h2=GAYb*YI$B1E;m[1+FeMc;[Ka=)jn] %LE3;i>[%ZD!,aPk,BKk.>!#r.@+)*Q`jZ+UUp:sL2VU/EhAUQ5,pNpZiufL(DZJXOjoCZ-C"IX0(J!2eYFrlU'3pc&p3qYo>T-`& %9(0!a0/0VSg"O'NmL($($[hJMB)+UsI@%.ObA?'I_='/A06$7OB_]2urEX=@IMmZ2_16E7J`S?aSVdU,g'3IX&3;Z^]%%N2.PZ%G %2K\7HCt+%r;r%^/J9&#s_DG5jKpjM\63m7mOe-ONM2Y5Goe7`];#sf/>NrRZVgL3`R@[FR;a^o)cs024g0LUc#["i?T`:]M&<cd< %EWm-i#pkcgLYuL$gi]&.lHE_dp_%hHiR4oKEYIXNL.)h>OpIs'Z'&W+:_aC*1d\.`81[^e:kFUNX%Bs;QeHtA.J`lVX-N6J$]K'* %Ush/!'-e5`;?"e^&X!]_L=m\,`E@m,;qA!KjAM^qj2?m)$-Ba(UAc\t?[#)I]6)a7eCt+dp=_&;?-.WSe18cTi.rYe!+Y,1E@UoS %bU@>IQgB7UC-)e4I#OQ(>.:NeVu$"$:0IOu9<(?X:+CX#)Mm<cE<_Iq%TBmGN'@N0jZVkX*JekLbIn2Y??>GY=&66B)b)47ZlUgn %NPoGGCAa1&MM'pu;"hlAg=b*6';./+,3HL9^6>SH':bCd-NuYX!k3X4KD49'\<@9H9c@,/0^.RAFHRF9q$d_2&=o&BDK8/n%AT8m %Z&m\EPQoQ1(g0B^EH.F21$>M!YbVlY=*D/I8'lD=NjA0cnD$O5?qBkoJnbZJ&E5Adbhg?phbstjGRN"18L_CikOd%t2E&uF2AXD( %!n+2C#OnXid9VJEpm,jh;bit%$?:[Cjt;h,!j%?7>hk9g7Ca!ho<7Z\:9%>RWG<XXXICcl9e0F=6!Hl]lR'&_PMj"YF%`KTrA;0) %b$I$;D]o]hiDRli/*[[CJRrA?"tBFAM24^$p@@1<JHEE/<]KGCATi#@d`OleBN_ak*6%^/-c?oNAG_0RFih_lK4B7m3bS5F>*Y;r %CH7VO0K?lS?oJB,P='P25YcduVZ2\/<F#Ga@_j9dh+Drh<sP53!S*1iBF_C)bQ@"pj61?Tc;lIX,9s%B%]ikLV^W&m"*0,0-YaE= %4Ft@baKrRS1bsIW8U!_hO>*\)F>4:Fh.^iJOuNVU0r#j;Q(8`7M/.cPifGe[7<QEdl,gn0<"Igd0FJ%7DmVP(hBZrKe_[=9Rt9>= %ea;MlG&r0MZ@t7/MRsbIrESH<]]O)9F>m-E.BC%HJ_eT$?HDHh9E=PDM(dqS,B[M-24:EPS5M>C.FCf5qf-4gdT">sT*Ug<X^FOd %M7QUk8gd5-EoP<YpB0A3Ti-!#NHXgT.[C72W&G>9p`0W9k`@0Dr4t-#=F/p=e0X>K$)Ru?R5he\!!=Lq4Yb.1mNdO:N9m5^JMkR* %W`kCI`*,U"18;Wn%)A<GQA%0SoK<o,*Oar[YOQ(j<Au4>1O3ard7Xul_AjM'H5\*//L"fB6PXJK_CSn3n2Q\tO((qA;"]&WOO<h9 %R99\M`3(5,Lu!$&:*GLuE892^W`h`KR>l.3K9LXM\VUiO4CS@>%u<X9M.JR_>VI,FK(8Mc/'R#^a%;dZK+tg5!WFE@*!mDMmh8fE %2[FG"QcX@H[(CaD?3N>&85Q=9ENd=T9!l@Knjf2W\P-7@L%bgf=d3lcSA5-dO4MY@]F#I"UcY*q?$>MpXN4]PAN/5HS!Rht-P@pJ %QS(f>L1O1'DleO3Hg_14r`7"7TFSE]N9&,Ip8hF\"J&%#X?d,f\<fT=>bU&6atu]aEOM7*OrQN62Q/fV/;[OB>LYj]La()P7"')e %%!iG)IPP"_il9(8!V$t'0])t[mt9\JB_ie>4pZsM*X0f`<Cr'_Wh&j(#GcoWSj>:[@4?P3+k*-K'=!W`dET)_An?'>3&YJN'4;nu %TOb/A65]h,9J<M68O<lVE#*GB0;7M0q.>DZF+McG9E3Zk$=-=;kb]$cnd`5[$JEejj$X]SBBad.EI:QF6mn\&RsM?,VU9JtSJdrU %b_>/p!2ri+nI^-;j:1h9>89Y:hal$hr(RH_DC;O:,%QpR[JCsH_h_@-_Wf0F-ZV,ie0CZLLG2LQnma2PT;lZ.)kmY(/W2H?PRPRZ %K1@R\WOnhh<?-fOcoNL:+L)Ieck$B`@g&ck.u_hGkVUU:ASAHs%q+V"\Ju9uVcmY_j]mg@hT%s;82m$6b8/mp(%-#PDmI]87*i]( %HE1LO//!V%R8X4Q&s9%EWL.1_I?GI_.o>-m<Ik75<kW?,P5I$@Qa:LW.j-XF)0\giY5nrfd"J2\d,V$0lIOEqQId`2liI[0K,O-/ %b85-]?-IU2h7eDmn"SsVq"b.FrW6uPMst)p#!cn;d0`j5hCu#U:^N[me6?Z,4N"WXNg?Gt%SbH-KD7<!)2f>J9bsMN)[<o;S>:7b %:a_;60G+n23"EM;eCu-%QJ;W6F96nhVjHDp^%q5Tr>UH;RlCb.SJ4PQ:(IAQ9QYBO;dktJQHdo#OqFu\URWTkVl"ZtnuG^/P>4S- %"0eVQ3m.hhb5X4j:A4c_013,tD%7@#7aUF?^d/r4_`3;!<-@%-UZ#HJ!L%R,DZ42]D;Skr$,k+n6!:_><MAgiq7RGKN%1=V4E:pc %!@J>@61E%LW5S%hg;'XTX\QHJb"uH,qE(HoF]7_8'5,&O+M](eS8f*$$[U8&Wf9IZ+OMPjd$]dlp!TTBZ>`9@7.2%aJX%Mo7-b9_ %6^MY(32fK/+YOu8!!AE,AF7L&#*g>K\rg&:4+f6VlDHGJ\q=QbqEm,rJg1q3^#-W<H&kWSl9Bml?kjS*%8D:8:U7.B!H)7\[uY27 %,qrq1j,>T]k0s&*+Nl=O(KNI/[[<$=;0>V4rk?TGYLV//G(EQ&%TG6;n8KTr*Gf3n`5A"P8dBde&<R[RWkicc<DHS-*.dq7$M(O6 %,(ti+#Vi3</Q^\$<30&!]0Q=i@,HeHeUF#fBL_p]":E6_9Vufk&[&Y0_J"kMK<1UT9amD\()?Ron4sgHj1sNN!;88E0Hbe4!IN,% %99RgFSZ%PRj)Cctr8_*^#.u7l>SgSq"lV$7p,_-G/du\21>%-oG(GI-TZ%DVYmZ7jKM?V4Q<c1V+1Tu-H1p3i$dd9Rbd7aKm:036 %@'3d#liMF?"17G^EYmZG?)VZX'YF\omXgE[YiGrno)d^X$]OM)W4RTG4u@Te`nc>rGJW5G5k6PkHi]hQ!+kW9hE(`5"Yb?@Gi+5= %G5u!JMqG6DLhm*2`^*_f&1X).?$%<!U7aYV80R;2Rru$b(A$-9F5=E1E=3(ph-@R0<o-.I?T6`CRhrSr6eKXBlt.RsA2,]I4Dn\! %0'#k&nh%JAR7g\Qh2K[/C?Ru"l"7eH2`#S"Mm]&Eg.RE2aJ/&JgibJp(UA:t)8G"_i.X;QDU*5L4*`!5Gp2LaRif>29AQ^Oe#@04 %WIhGgX6)6%;"hB\,ZHp;$UA?'?`,_F&h7:/R&Ju-PSoX0.`MIW-6'</UL"XU=+pr<Q[M+JK:uDL1D34M!*l)B:/G83.'IGd73i(k %k<rB7ADl72MDZOR&FkAI)F[5PCgP4oBI"4J@jJ$<YW%3J=XMAqKe1lqE3%t::o"6jSKn*V!@+:G;`A)KEti=V01W&td_rum3Lq4j %!DX+ZScN(5/Yl29Za)5R"$FaUJI/;f4g,<g1JTkQ)SoBm"7jecC7/cn:dVHgktB\&hAQ';RaCKZ)7O"Z'8B5lU+6XPA*Ddl7DIRS %hMMVF0:!k([44V`8`i/;/BjP)m+6mdXM\hhiZ4t!81"Y)4J5"0<a$@='%`^Tbq&(gn.Pgu[-BE9Ze(USDrF%J,TSd6od`B!6JiUD %h3@ep1*KiYRT,RZ7DbN"l4(QQ<em*Eid_c=AYIdb,P]UK>mt)>JcmOLDD_BF1#-5Qcj0h@[An5dPLotZ_P)4Q2ZU-/,gC7$6*I_^ %[tg,3+)bT7PbN4-#Y"B?X,$uCCdJ]3#=1hr,'(g-9_/D9-Xh)5[mr?:<]1>,HYC.*0q`3eZuiIL@pj?X]hq6Eq9X\YZ/Ndp<)0fW %^n3-kUZ=P[*"gQ3==p$'VG&G_]2aW!e((J=Tf`^L#fAX4[OY&',kN4XOX%^oi,IsIatSY'L=!g=4/B^>6\EC.Wc8"'34ZDm#Xc`A %Em\Xp$s/HK'\T8&h.2l(Lp\W7fII2$UFgi#gIJeVj]FFI,*&l[kpr`+MG1Sna>Zhsfc39gaVsOLW\\l?77]:X4dt+P-PRCj((M[b %EbH%L&BG$c##H>I!@ss6J-V<m!K<0+"q/TU=0(l?n'sd'bb(=]EJ&sGZ74&^\>P2s"@C5<TE-A<O&im%M@ZaL"WnuBV8Fa9)T/'B %;dH9#AQ#R\j>]OuWDTL7.KJ"C3m\bB,TO0UBS[LeOh#gj?%pfnRT>SnLmu=o[jnPHmhh;TY8Rd)j,$&#L;YkpLdeNX`^17BKEUU_ %-,]jHHnjL1ND4SkQjXMP1<Vm]ehYOJ8!:Q[(uLO&hb2DdB(IZdro]0_V':[3$O]jH@SEF)!0/`P0V$"t]'Z63fjk/IO]?pb]\4eU %dhEdq.&^J1,ZaVll7C=:8ZpF>f(C#IIY!=[!A<l1)4HN&RULjQj<fc1=e`(bdbJsOnN,`V+(7*HP5JafD\<+pW<8K$#.p+Q*V.($ %i:oV]]b>EnfIl!^e_Po7mFp7Fh#h&Aj`$%gZ,`EF_6_d(R9SED!orJWD_+_,FQkp!e/pi:O9It555@a9VIY>-":ZJjbu?Y8Jj24< %dt#$+J8O;BZ-ib317r]qX1c[BGn.jrW(IkdQ),.mG?/RNCV:Y#X3<;siS,NDl-ds1:tKf'DRtK\$fj<RU7DH[Sh>Fe0m?nYWnT6Q %XbI`*S%D1^ZYAoH0Laf4n?p.`e`EE,i2Z)5>'1^eqIE_l>-0FWecJoSQe/:Y!4KZY7OEW)Mujga#Lds78!;D\pe$hRF(ac1n/5FK %&U6sH,FPi5\S@KuWn!g^.h,kl=;&T/afp"&n093sG"@e!"E-(G#Ude(+;_CGk*tcGOf$qGR8QLW)95i@jj-9H:5XlI/Js(J/f>UI %P*E+B>lgCC6=LE#d'D#hP&NuGP)XU@agr0u*P/RO^V`M^riO1O3][)nm/E'^"L-:u:!/8r'gFck7/,)HUYQE%451cVLGbi.qKn4[ %"JrlFA1/JPP_DNo@VS/Z?]BN</G=0RW'/sF=SYPUT2(8#1:0QN1e]hA1<BWK^bc$C%A'Y#1$_eX]!D9A@C^)Q,C=JoX:hZ&[T"3I %?Uh+qDeu+*fg6^cDT/r9l=f!QgKmWm2gr/;Y%%K6H0&3aG%GB6=lP7#*lC"^nu#>)4U^5V#f-P6[4DL'0J-E_gZA/4SJ\$RBdA88 %V'C(A/+@1R3`^F*i:UK2pY#IK,g>HPmT1m_S^E(#BpkBn>e".RH?D%.j\Rs6WnCT_FqW",IU<7a1Fm'5mi'#pM#3<L/gPit%+>@; %1l,&b=!ijIPZd3I[Cr:o&Qb;0i7'.j[Z-G.Uu,/QRaJF!\U&LSE3r&=jAo`pJiQsnTXW'[cRJW,6:L;,HIGlaXILK$AqP9HVhtb2 %i(+NSQFDgM=X9@X,h0UCoftdB]\tuO2HVOs"(%(!%(+DR,dPOl%=kF0G'Ca?0LH+@!gMl(#/s/7N'0ojV?L:f,mobefgq0kUe>1& %5^1Xd7d6)7/C:M@WEC!M>WRNkMhDa,DMg''`<P;?`ur4O=DK%LkcW+S$=6j%$Tk,qLV!@7gPHZa!Og]dNIANb[<HgaB+K.Y>E>1^ %m:s/]EG?tH[.5D_#&+'t]HE)9>b[PJd84ok/!e:/3`T4moiN#F[s%)MFt:FI<0'1@GC?h:$>O$NXt'K8QT(!3RmEiB5&5Sp5VSeC %A;Du*Q5"cmj$bWrpY7A?(K'qH>.EB(DSkh4\T#<$hSn;THg-:R.g'(ZTrVUD[?7WKda<&`>"*Q).jM(C>nPo#dp6VBMT4snNu+f@ %G:P+dCG,A)1M\iQq0f[Ac2`YpH^?/pcqDACo.D91L^MW@FsPV9[R)!#Gq"VkhoHT\%0euB,[J!-'YB]sF@_(bekjo]&KV!d*'h&< %2@16LJm[TW<ogt?4V4rro<B?D<<:4*2kUFQ:kYe>Oc^8E*sLLeY3BWW&'1T+9J[09.Gcp"*G4c1p^!5Dju@9d/^?q3p(h:%$=aI# %;)Z'(kUE9+bgJn%kB(/+2nme-HpM%5PWjH:!n0c.Q).".ZH2Y>o"f)2H2>5M;3;/Pq7RZD.g'n?!Lt/JRH-1+/`B8fKdSKhWMT"6 %h5J"]h)tb(Nf*h8d]F&;XX*p'=\TLhJY4-C!tS$*_qb_=<XMqQB8DBc$c_FX(c-Kf)Eejr!Ych7e&Ztf`m$cM7\J+2?o@4)+>%OY %/at6@#f\B%5?1/DdB=!o@g7GJ]5_mFgo=K*^M+iZn77)JG;NDkM6f<UNfhKO'#i`PS([&hLk62(c0Xrs/o?etDO>]DB@q5N$/hLZ %%n`iCO:Y=78OT1AduO^n-S;,<JO,#"\'npNW?mk1*h?<'q5V&u3\,-2/#LK?dq,1T@&m-dPVX(*[M7/QS7V2/4;m8E3+!4+<(ia; %Ep=GN$fLAO*O(LB4A4pf'A^r9OSiQFfVt)`P^@?eDA)s<,3k?o/^OcG.>J0ZAnC\#E66F>"Iu>e<5hdm0Z'5MRI$@Q6H?(<58Yr] %RMntYd8N:i+Gs,];WFM&IFA3*<hIV4mupo@#/[Kp`'QnO)f5_fM(dn@03Bd\;mf^R8Pqo5>JQ&qfcf3NQ&:fLd9'*Z#%#!=R=A^9 %@>C4l[X'7DJVO`>Z@R'^=U=5g<$d*O4<i:;"M1jl4*BN]mG-21-eWg>L7^k(gY?VS]%B)$;E_mr"`gUh,-*?XeH.nbk0E8[_8Yfq %g"F%`@.CVfSh/\RB]Hc%Bl>j13XT2RS3R4Z]2^TNZka>nk!4`T+q5N!004-b'M7PC>S_$u2[FcB`4h-T^g4h80"#YZL:BlZga>$e %+@:7XBIg^:7-JHqR4U[WHt6<]X&N^p8-//7@8QOF8bJ.CUflBM'X\0H=Ihro-'[>tVb'i7j!Zl9RI'2gJ0*hkiM<cZ"s0KtoY&6G %Tk8)(#=)r7ffa-\-pWPpVOS1(19f0#3*Jb<1u>C#XJLJYq4!T&O^c@':_G>jBlb;=B]-*B!YN$Vq\u):Sg8t[o-DG&-9G[CVE]l8 %))Q<S:eFEt3eCXr5IN=,.]/d#ZCDOSHJra&AJ-VT^+i&VSrn@/TRbPa^;:a>VANkX!rYl^jf/CtU'/bo@bhn.G06(/X#%^c-rd0< %BD"i)i@Z!^Q(-ld"+s"m]WfR&(4"'P8>SQZCDm1fP\+sXB_Hu=@Ls8TK`9<t2k>cq9BVJiqQ'c=@l1!C5]&BTTJLZ1.C8U/#t,4> %gBQ2=[[A2,Z65t]>;"7oBqN9*FHPsg9+07G&F('cmT,BT,M\G"k](Zd8\?qe^Z>+sA[T,R\@]_k#K+-5!eQSra5iRL/"2^MiB6-) %#if3Q1)Z=uMMMHAjJ=qlH7i2[mhJ@]<`*5&\DAa]hQ>eO;=U3,T16>!H&q:b;19N(WigekpPtPk+#A@PNC%fM1,H3beY>G)^QOC- %Tf82;Fs18r\'BMZTi_DLE@[uicR46_Q7t3f)T[N_(2ZY/#q,F@l*G,/0gfB(Br$\B,+^cl2&aNu<AjbpKu#K^@K9akBjf@S0S@8V %S-qj)Z>+PbKga"`kN*i!B4lOLC+^lJG+_3E-l0ZF=\c[4?&j/pAZZa10EWPc_QHG.fsof>=&-=3q8_FMB6HZfkMRQ9[h+J#c3_K* %4GG!#)6?I&dS)5TgMM)8#9SXAFV@b+GhJ^^I/4>_k"SA#3Wo5\9"SWu?!?onS:^\aTZf><WKP6bKGL:S!jnc[;$(c)+9KWc+e%E@ %/cgSC%Ku9ZWe)IRBp^XWMM40J,l)>PQ]L(9Ti.9oXokFh'C$1GiOXu\Cu@oWj,)V2(tC!q6%^W.Z49,&iMPq*ogAmDQM!r0]3uE7 %Lb*Kka/'hjY9MES(k3RR!HOGJAj%V&p+Xn+-'Vl:FDi;0Os%0XoII5p=p9iI;.<_n6"b_q_+;M>ZKOm_`)ee/9X2ti*(/eQ(s4&0 %GnY,,JZBNuj[-rC:2Sm2%L705/C?V&M'3Y7(3M)H/_!*jW12;=Z.,nqZr":^g70WO-Kg%#5R*f(ibJnj'Xb>0nR/^s)mNu9jWV@: %$o8ms:Cl6n#s$fiF*=VD:._g!n[+!:C]0uDh=>CjV;AdpiOT3R(5g@Z$e'5kfI`?"l^#QV(=??.G]]H#>rPBr<5l2JidnuoO$Ei: %7p.cBW*JmJbpY)O0T9("[L<IJ(bN"-5S_!o+s>.e<dY(SFJ)b:Gk/hB%]j^OT?UcZ?\2s:Kil<&L6#C_D\?eG5<E-p(mKREbef4P %%>8_U1'Sk\<i8(g+$d#;hpr)!D?7M+;L^oZ=hmaZdK99S>>2##FK&K9aU%CW,HpVJY1s!]PcTdb$2`Jr$$R!#$g?V';Rq^"IM+AZ %g4SJf,lQ]+]_=P#<?8*3(k&_3Bh!6<&!&Q^kL"1Bl]LW2!<;*0E'i:Rah[rPb7CfOs*O>ecQ?7(r9X%4eh;N$pZ@eQn(rNba,A!Y %X+rbKrpo?Xf68b)TDusfh8Sd3RhM*ZW;)ugUS#$qroO#8_t9S[`6EYu^Y0e0eO8;e`09)Lr1F!NS@kPns.(2/oX-,V[8&9sBbHu_ %78@<JkL8lX-2?.6GN05+_+-8Fk_%@aOCag$rZb!c_;rO0@V:Bs:AT`L:>17AcpIA'oa0W;VSEB3Wd03g(BoW@4"Zu3YBJ(QbGs&g %E6m0jgE?F8_2%;%>'mF36.3"$NEQ[_$'h]uWf\Fk1=I_@A`B%?e(4c>PYg6?GKLql6o&LW,-riM-cs+Z,IhVpVtO3\5Ai?anP9V4 %?p4!Nqe?Oi,Yg]r]-(RC?m;Z.8j%')2_,)sb8TOQLh=ul:o32!jFpO+Jo,aM-/(lZd%[OgB?K`rkX+u(3R"R^Dp]UEFaflV%t1+$ %*\1#@4ZNp3[K>_:(<<6L(cB?qQ>'d8[0BI"G'\+>?-C3HQsh6cf7[@^Sf]K2]G3e.RGHd$:D.&<s.!5LRaG"SW\(NaG@>qkQ1cHZ %VQ<-9[SB6RO]9K!fHM"KP_D,,q)7V24(8+Eg*7?.k=nmnmq[k0h%!h=$8NLhoW="9erdrg/[\s@KlqEd^SbR>p5!?j6lQ(JKG$DQ %&TmA3I`QSlm.Xi]m:k[\B9OC%Z7T(Ik;"f(NMDb;NQRb"P,Mh=Oi0"0jE]_J?6QGSk]pUDYp@ULkdKD_o==S<8J$EjR[m,7"rW?8 %j(0/CHhPrm?j7Ya$dGd^Y%l.GMO]Cq@hPNV8n#]P82`O2[)'1qmpa@]Fu#W'orP.F\tI\IHOd=9VS'HF0_&lsfE,)_PZA=JMF]^f %,=`RGo/S'h1]+hTq*W!MfAoQXS/u5/Pd)iU,`.4sNa"(p'btQ#.GQ/^SY_[9\EY7!R;;G"V9684lUUp0[0k,EL9.Q3c%0:]8R6=^ %eM=)a(?-OmaA&HBUnu.YGCXtF0Lc>Sjen0\%3dMD.S-=k.a4Z*\;_PCf8..hO='n$CJpIGc@^QSN`)IL=95;+kk1;eTrYU>,BEVq %a%p%UkS6kc+/?^o1S=bk<)jD(Lf!]+/(`T+2WSI<ko;cLot]U!;(M\[ifX^KILq?a-s.cD:GF&n>8;o;_X*0*JYdp]=P4ek()W]F %&3VU?T4u=1Lq7AT8()o,[9PFoV(*]u&JhD3,uY5UX*X:rB^OT*?8&J[o9aBWN;BQRmRbsWUXB/;!=Wee`SO;0FA&VG>*/rCJf\0" %:24DQjas'o?MKr#MeTWB,'G-"d3Q\^9pG;;LZ`nA([Om`9Up=]d,Te:85pR$6\/_"`$+,ti2kUQ(&OF^DM*ak#FYikX&AMZ=m1I/ %#,C!e,RuiYDAa$ADknp!X[>H5$lmd00X2pKPT6F"VucB7,]ut2Rro5F]/j/'/,2K1l@k3kS:1<K^p"B7*!9;ckY7^&-F'G-O]Z+Y %,]r5b<YS915hJV@OUA,.+V?tC4Q(r:HG57_M4G[+G:)2UO:r7&fCpsK2oJrO"u/V`FW@+_IC(.c@C+@`$*/XR+K<u"'Jqj7#!'*Q %`0e:6g7k!9l=fGmEti">3@Rra5B].u"F(^*B#(]$W$k-]->OaY$IM1+XPQT=Z-=>_CLeT!<ImFDb#7D>>9ob3kY,;THG9,XGW4W0 %)1tE]=Yroe(<XYoVg]'U]:REYkZDrZYIm`X?`c5gQ@Oeq(5WQr/UKR[]ldiPFj^etdgT5H_AQOd&.cT(W*#%;N6Uat,^:!2K0.>< %n2"oHMuL!k(!o4pZH(W*'VVC;br721(%jjc_A@Q"+MuTbik?2l@g4n)MVf>F=?+Y.%h\)l@S)r][6W?NJ2\.Q%]0h-B?uSM2THMj %dTf(aQ/t:?)T1!g=qOCG4K^dkktUOLL2uF7EQ8^2IXi'4cDN!_ft%@T=Fu8reT@^8Zr@j<67]LsgOP)?XTb]<2(FNh4Qn:j9aZI\ %qC&K\V88:dU\^"6)!QYsd<aicV-U>A21La;XV>k%ELdPNRMV5`f0+o%n9_:B_7Hb5o,EZeK!/!6BG/Cckc9;3L2.EuC<)kMD2sN/ %iHD.JJ&He1=megFjT_U\KhY(EJ@J4Y-4C3#WWg5Ji:'S6aI1^B-F)%bgbPTOX]s%<9%H6HJSl]k+G$5C7t?anhK4>M$m$\FXB;Vd %>P(Xdi+m&<)%0GOGJ_IThfGlU`=[;CeKG40;IU3tP3AP`p2C$=UG+pe3C8oU$Yr0/%pD==-5qW,B>Z-F#J"^5cq:b#[IT?b>9st; %33`"[&jI*C;B&I**"/;A=KP1'8hsTS;)<b-%n8cAHB>-\pfV7_?oV5->8pC1cil(F/7ca4'DAkHr@I>pfY1'Sk&heNIdk^5Mul*A %Ur/*(,X-k7J_GWp84S$X$U'9:/eVlqWV)(_Ok<%e*)jdI'[=^?;leB$a!_TXTQ)$!<jT96<HUaX-%SNuP?"`H;FK1@/0tmCTSi1Z %4!.n;ch&kO@WA#6<Hooo5GGJ1i@H$+r.K&T'cB=hfJhaTQ?,4Lk:SZ2m+f%=m%,^`>A"9Eo.?.N1^q?)A7W$mB3*L<FOc">LL-:j %bRKa(6s%]:<pa&09U)2"BL:6KTgOl;=LCI/nX_hdK$f<S;%R;D@s6Eg$*]VUECJ#:9WPaE8)&P4ZI-'aL^/kj3ZD8Hg+_`U8a*gI %GBSOLqj+Qt@7>3970k^T3QH*7E**rEF1Q@]6mD.PX@k/0f:C]p1bANm7I'Q'E.i3iPr6X7^u5f_Ug;E&#4l=Qk7Tp^@<O-rp%"n+ %d9uaRi7YYpfYa\Kg'C8ZX!.YZqL[:],kA[LFJP<h:Yfe;PdI*`p".LcrArO?7luX"^]SISXOp4<HG(Pt\MkLEf(Y\PI&cIkLpID3 %YI!dhRiT:D;Z6i)"3o&jL8\SMD)E,o5!-RAOJck@"rpF\Y+qM=^+CfQB$f""q`<Yu>C6=UY;G2ZlPGHiQC3rhlT%r,JlA7BkBXfS %r>mR!\5JPGYB0as+eQGG(5(s,@Y'`Y0#`%!*R."rg1K=-Tm0KZ[fJ*I'XMcdZBFf\dg04^aYUt#AgQ?!g76seUr)U\*-m:t(KJd' %EQ39beV]j@);?Up:fb*F+cVE_?J7,HMD"^\-0KjuL__WgLcZMg<u4OF75-\j_SDO<,`E\D!ACRL!Ea_U;O1(cRYlg='ZoFuT"HK] %bRsd*leWhVp0=GX(RPe0o[ua`b/sWKnH:X27V%[DE:OJgNer4uVJd<h39tc2J)DYJ(PA8:R[:foILlgD=l!*fB;usQGD?I)LI+2c %!HU#`^(H?tEBqem5O-XI8`-bXKnDX7Wqdsg!5#G1"*Eg;;N!QKN;.?'Rn]>JFu&nBk$6oXd_8_9%;j=KK>jb\A\'E"1bgU<K%2Vj %eE/[IASbjD!DB>NF*SXj53[Sa/Ck)OW2/I(JJ#?l>#cb#RTqnU7*P<Qi1\$-pTm4\;cdXZC8*B+!\+TLY+9sN+J9.Lp_<Lt>S-o) %Bkkup,IV-6.;9;!*OJ4R`cG9.gm%_Vc?'?7m)"*h6k;W'H%bN].Ub?S3b='SH4W6:;&tq=U5ImhTR2^//oA%o9IV/e*>"Lf<*<\R %*1Y'`)8WAQ(bM0XgS#nD$/hW7EtsE1nSC9a'9QF^fi"&UIe$WTN(0D0SBL8&8%Y:#>N[IjQ+%[VSYL'5C)=]ZD)-`cMY]/%NOpL1 %o2(RIWYQl21EmZu'QKM/gW2Qd[MV;t'@pbO$%gR4;G[kdSsJ!j?4CSt!c$Kk<T/NAg6$>>W2'^IE9$N=/)*&qg<^Y7:aMG%1Aen0 %gNjhEI,p+q"i`IS`="3eGi3Y-(QJL>ZQUZ!&Nr5.[=g#@'fE-p>_#4iCF9H+DRDk`I7T()]*]rGihQ:VVEJs-;KqLf6]iMMfb%XO %eBjGRL=3CD&S;4^&Oq\_Tcu0LJ;oXUA52&4L5fr%D?TS!C]^O@:5!UK_,fA?G+MC/(7XfG3=rk9P>VMZA<<$:_=q[S]e!#l0(=LT %5g-ad3g'W9SgMjD?4mM<b+1#?e3LhqJl.C+_WCsFe*j&>a_;)YY_\*;/EC/T"Co;S'g5NA:C0::FD.dpL,`8QJPe,CRsuPU%S3RD %,g0CBP`$*eVMI2eQbV(,72,O^p\9KZNXgLP@n"'AWfC':_[XmnI@[p;#l"OUF_=NgVCf'j)o(R9S>'>Q)t[A_[]%If/PEm=@*p2B %=I"mGM].BRcJFF./gOIo!D.q&'qfa_K=$8rQ)`5C1T=Y;0F=1j'eV=d`hVA+G"BHK>%SS"#.8ZCGqQ*?eQjmOrP[;RK[o5\8&@,@ %@.5gZ*H':R)"]98+sb_a/is5J'01;l(;U\XBV8IH7Urp_.nNcP-#^^6V`C_mZe<='ED"(R.\QF7&m;kIknIPU'N[=snR.sVPYG._ %De!ND3\5chFO2u]\,]PlIUNGVC:(/a4Ml>Jg!maUV!b;+9gT*W@"D@gd/gp;]UPT\pb-0#<0p<XE4UL3F-rLf%N1I"KS*)ZD2Jfk %%JjnT$@SR`=ZK!H!/mt2=O#Q4Nk($d$IKud7%#2*R#LW":W9/]O9=YU*En1J_d`:fFqd]YLK*.F!>6][iG9/q,B?9P0WgSU2DGUa %:S5diSA?\J[D+Kjq`(T07%j7RK>L:@!UV?uiCl^OS?c`b-P/(,FNX].[0Q)OVh>]<La^g>WK`"fb'Hq^[\36%%LZcd^lDFlR=9'^ %,6ckbE.Xo\je(a>Dd%Lhi)j(3"MW?m3*\0[dOYSt@N:KYNq^NJ*g;MSSkKe'eB[Z#.P#e"7GmY><1f,&&K/.BJ9YK*,^s+F?OVn- %-aXT[2(QaS%1K%M1hg?f,JFf5WA>pqFP)B\Md(sohq&-i&;iDk8kU8XDWK2]^UXFi%#1df!$2LW`e^-0Won9)#kjQT"-sA;\#2,< %GDmZ,Ko.aWL9<gj&^O-lXT93Y$Nm"5eou(2j&m9Sc&fjb@5YmRM%m2.a\3+L,$_FiFhn5JGi3CN-]9hIB7MHAIS7:]AcV/B&%(l2 %4lAU9Bbo'(`D2jr[Rk+fCnf>O(1VlqR-ND[]:dg[9&,.2A6odUpD8j,DDpNP/Y5^]JEk?%RqAMi%*u9_N,,G7X"5ODC#q.L!^c"i %D'_s1U/W5-=FaGo'^92Fb\@P:978&\$<Hb^H4WTY(rS`IH0-3J8ZS?p)^?Q#*qB&&bYS`]<BaJ=YU#G2b.0]$4)++C$,_QimVIH? %)/9kgPYgP08eDMg?3Niu&I4(HK?`=2T]5>K)[&UAgZM$SSpZn"0Mt+$1+X,=%gL)``r?l,Z&uc%H!E[tHofe%Ks$>eL,H6qn%h-( %VB1P<QnC:e&RhP.B6=S\!u9GA8e9ib#uXVuKTe8mS3s?[TNb@/*Yjs43eiV*bZ:=;D@[?al9U!k)SAKG<'ePJ0pl=7[;e2U#Q(k/ %7`H-B$aL7^!?j!`eo"ImXO!gY;M45^I_HVK\++1h^iZY*.Wp9t=Ob;WV;?hJDA=hbe'-7VLS3N@TOk!GUh;Kj8l50TBN?F$'=][t %U(@+T!QHK?UN=s\MKt-)H6^uO_aGUb2[TU_eXJO4=4=S]V'5NJeFRZpTNPGX%Yo&h(d`.qXqtM9!+npOD#gkAhrCMei2T$CGb6RA %_Lpf_;icN^Pu(MO[m%r7P?<GWd3t8NW*(n',/h[^/*Meabe=G7:a>gBNt8tU"7=h)Tn]qqB^1Djj7lIB3'_('h3<CFeJJQli7`K. %l%N&;TN?H@FcKI#pfI.EgQ'o%jkA_iZTXdMkLiaFmAeP2F0!H+pY"6CB#6Fmr+fTRliF5#$tC-<cHHhQlk_"2P;Pbknp.t^[2CEg %G(``9X7oZ6PIm1_'^'_p!011g'1b)clbOaFGHG-k%MPU)JS,Z6.e(pg8gsj.c65(L(ss6SU_K^')5LVTmHP(9mX>/U]V;8B;oh&! %FlQH/Ua@'h:,>d(l(\E,4_#DT!F3G,!l>2`@J4[ua\7MliU4O)SqCHtFIAiY=B!.=KBkF2"AeJBn\\3G*%ijWTp`V3p8T/Y,"CcO %$FuHtN`77%;^d^ZO";P`9naf=I35+rJ=`D&l5g7ZH3R7"!S+u[(e`;m'T@oiRu)(kCk,eL%i4dI&fj:@YjIYE1/\ut>Ec;AM).Aj %>?mMP)k_ep_+m\'R)cTRe;#.5iZtfT_a7,bYc4!.X*&,OR7\PCEr*@8XJECY;=5iH+OBSFfud/7%MK!N01)dR?fs])AB_aRUX\QJ %>">F7h$mWJ*=J)<+jbb&Q-UE5[S$7Eh&<.]96"UgXTlcoESP#+5d+'/l@@DrW(ms9$LEbpcGe=<]I!9E\5NAF0RV4;HTLZ#90&VB %KZ0,,i9Vh',9]^X]p*/Dg=&Yp85F944=q+4&Fn4_h]T]M+^Q3g,6MQ$cb>at>0fV''.j13=@\dUdD;eGBUoAeb:Z5>N_$)UI&Xr< %B:+8+%P"@kCn)d)<=:A!PK9-^1P,ntJ[[WJ)8cpG4bg+-K=))UlZ$,2$Hik!/>\\-Gh\s[8kKH:(71DNC')6j/BZ'Co#'8'-,Q&0 %I)/DWeWP2%$DgecF[?0Y/OY74A!h%NBE3"V+N9E&asgdSl+*suQl2/XfH@J'DT_1Y<Yc/_-IRH)WprL,'Rhfqd3r)'P8.S=`aY6, %9a7I?)ek%FcXeRL5NO4m,7fWs-V\qST:@Y`P^&1%:(23gZ$,qgR,-Oh+.QRNYd.EAP,!_tLPV:4dLlrd\7Vq_3&;p03"L"M3ZPfF %q=J61"cPe',nqZX7*O\Cr[3at.jO?@Z[-[T:.Kdj>!riT$>q)7"'8WKZ\gWD0$Jnfd92pibYT;ho+1q[@q$F1k8VL?M6"IO1j=\' %%rH@LnJPtTJ9,e-JbH5PLSe\GOno62O5\YYWA>V>P0`![lP7#Z"uUC6ZlXc@d&T[r0ahS;K(4Yg27%[0DBbZ)48FIe,+enM*Qr51 %[[;[)%U9t#Jaj<ZXpQc+C&ff"[K]ZVa(es4(Y]A`o8+/08iSo5NODkqO;r$"dRonR<cD.P%?@0nSKo#D._uZSM)2VY%&f%`'eXTG %@b]sYhU!bH%XpT1F%=adVGCf.f3nP`_7ai_J+1O0U0XX<ZIR8.X)[A^i-8D.'4J1G18R;[iAfQbO15oqCaL^b?'<*@1(\7-F#_7* %K+d@_Bcsmq8/"2J<*_:[!5YsHm;,9plk.`?`?9b#%51"d(.)qM/`BBas!]0(raO5?:ESr1DfKI&ahVT3/eoc>?I4EVN9GiaGa!4< %I^3jP7Y@8r[Md2$KKoP7T1#%TbqXo-8=Za^[Cque$Qit-S7T<89U.5-%u`Kj@%iUX.Mo\8-`jVGd>u\'D.',!MmeaQ+@``4)R+&h %N</)XQJY2!>?Su4?+bl^*(jEH41im)!0^+Qb(,rj=CA!./VqIKgWa:?/::\r4%kkQ=pD3G4%i.a<dTK+DG+*&5GI,<0Q49Y[@%ua %npW/#5r>NP_B[d&-HND-@&.P>"2)qaDBM)[Zn)oFereNF\X[cR&FZki,U[[q;afAJSS!O1Q'&O,?l,Mr:EU`jO'm+E69jQG&srd? %:Us\$:I?VF@R*RFUR/8\MkcUgs-Z#()<f"4.h#lE=AiRrA#k]Ra$LUbCsg%!is93Ro0Z^3+uD.o<0Z\T%`leI-(csFki\7G41>RB %1<j<pP):rXS/&=P,IB_,[SKB7)ShE>gKL3@!M=`hZrpui\-SC`]r\.%KIKWj:p7tL(_Vq%SL+PA>m6SHgf.4P4V9`.@#<"X6$ES3 %Log(H"p)SOo]0+5>k:oBc^B:!/H0?eP,;egC"O#T7Blh@M$'nVSr@a`,]MsJ%QVM@AI"Mfp15NE1=k5Nl;o0qF]V7\<!!RC:Te7u %@@]c%Va<,f0@rV3=_%+Z-hP#0=3p$pVLGVSN.)J%gPKb`?)Ie;K2qa=()Cfi215'd,0Ik]=)NHRJ6c[6H.a))f5Qh2k'/EG3-+OZ %>hl+F7co4&1"<QSJ#OdVLmrks@5L2aesN=l9<1m7&RjJ]_3oF?.t6Lu5h@^*^tFlioI9B@%5W%.br0\!-(;[aKKMljK',mV7a%C( %33'BZRHCDP/dBU,9'R*2PKG[!k[o\[Q>B.N;+ZJO&<fTDUFG)"K16k/Bia_s9F>)?0?u"JJAL305eb.$dPRU3V/!\#5ZAOsD'6:Z %A:@!Hd%Y506oLr/e0HH`;_F[IQp;@UR=&X>i3#+L,N;,%=pdOS47AE7ifsX>&Ad1-$tgJk+=@e_Ql=C1cW089F-BR7H?rH1$$F0] %jAJiqps:MW9DUf;8='0UR=_)C7^M2MboE_9'$B2BURihYFHj[DKNbmc7\lekV9Y<C7J!9dj*$6A20m>U).?&#FGg^1]9^I&#*Mql %TJri/+]!Btd84:Oh-ijACugpp9#M_ApTR1DrG'\*!,-B_eu-%\OnP.dmt8uk8-AIb'EROHP6k<MV-r@D$Q26oUgAata$WU6I0Jjl %`m5Cu-LnX(PK$5TCXd-qZ:tG:/rDUImg;"Z"7*[KK#&F!`BHQlY8`SRoVRRJ-^PTsfP8F#DK%(b3]an(oO'4ZFNJ62+FOl,c6iE= %D''U4*$ARf7-U?aJG"J.F;27VB;I:09-]5t620.KRT2`[]da'<bRPFG&<*.&^.o8:Q&JCZ0bPgd5:.WieXqX?/qKmhMa\MY.:Z'X %=*C+q):AgIi"eR/E9W1HmL-)]+miJ4)N=[HCma!cHDRpoZr@0jl7AROc]5o"WCuLA(OnZGWD/nZ9jGr&L?ohYU6:'W!AoUgkm[tR %AQ7&CD]8pBH(f9.L`OEC2oTl-)c\)=-Vm[">&;F-;DU'\0IP'MeH4=MJ2=@*B]u8O/Ic4$BSrEf_F@p'@\?j-%XtS/kmGY0?@cWr %9Z\/-fP!9jEL+[5i`Jp!%2t-VH>Q=l[Kr#/)9l;R<FZZqS\W3d2(R-X1`&T;Q6[1s-F'OkW2;os/q_b>n-OEA9#IGt0P^S,:FAEP %X`>cU1Q9Tdi_;\\H0lq.eu8)C,g\^)7MN\)i9-sIfT]2,oeO9P2-.o+TX#aEK:R#HJEqT>9\MO[[Ke2olJ(=:BcD`:X#Y#X.W[+E %g>"J6.A;N)!^A#5HIL5[P2[f4oMN&H&j2cpXYqEJl*IhIWmOX2J[UFi-G)s8btUVM9\"O9<Jh&\Zq*fY*<6D0"as"*8A8?aH1o@! %?>==p&_6t"1b3`.5;,`$+fVU7R9nVP0d'rMgi!ba.Spg;`&6M2!MG7+gF3qJ1/CX_;;SS'H-j`J^6Fldh3:`o$R,p^#Pm"&,HcYe %0k:g4.OAe`Y(b))/fSL@&"P;%en6Ao%'#4a28[`t3'EeAPb>#BAqX)7&h1F[?VTK'e3Jg,fI/p`.XMedR0#A(-u6+r=!O91qO)MD %Kb'Fo<lYBmWm6Yq"Ye>pY@ge>]_rc8.jPFtbO:)&+=B'np*ejH7ZKEDVH&<^;-"Qb6B_,TF8Ej9&0sTt0GM1n;ajR_5NH*:J&or^ %LCL5,pRI]j5BTRsRk\j(2Ae#;J+IcMNh(@Bl]1#\#TPo3$RaDr3<LS]mMt$ZNZF!N'V#&[Xs(h>8I/4I0HnjQMm:s?o/2!bhHrna %gkg\krr2obNt9idO4ST*4ZsN7'6DM"iRRD3V13K;r6lI3rjUcihm@!%rPJOrq:A]_pri-OIt.L\MZ3P(p#Y6,rS>H1&+BCNcVArg %pY21Lp.qTg>7]=m]mID<qbJU>o'.$`5<N2P4`U;Bp!&t]X#p0%J+ANThE=X67fVfELMsB[hgRcem%7%%nO76]m]WZeI!9T%:*04> %i<`s8V[(pkJ)Gd'g7EfngFke+q=^;90AVg:\:4&A&EoNX5)(Y$s6ia-rU8(ZF#Rp_p[><C4FZmDs7NYq*5a^:f73b]n``?t\PGDH %qlg"blLOJ3p[@P,[/U$pIVHVl6i*5^U&VX7IXM%b\5j[MQS$4]0.5N7]8*S]S;N*&\*n4Cppt_<PCHjV`OhV?]?@6&a!/9DC*[Kg %;kJ/+Q[3ZT?X:=XqTZq.J%odZh;[!gHi0(gaZheY]6C`6\9tsamV7Z>2LkFa&*<6YMoY/(bGE+&)UVc<lqc4lgC.fXiGHl#Ks&&^ %FT'>!mcmSDD5!rLn!Wou4M@odQBpH6Z(Zq:q1AJ&rnYKRe\=7PI/D1]jV@sOAfT,NN5^fOID>gUlJ^amro*)R9M[k,?9#R3rV$6X %p#@r7iF?t[Q&-mGrJP#gI=:\>d9ufA##dW&9RCMj*"Ad?_6i)La5.b/?U%dP/c+W(pXa<ohILrdZZTXke'g8%d:,.?9Lk$*BJCMZ %VAE_sSbduIR=9GSh:9adhd!h)s8J*I9j<%"IC5X*$a?21)8hNESIW]Qq!."tdQ)J9k(VU=lpj(k48NYKr9`O6?X8)(I6g$L7VePZ %rG5R.^KnL!qtBmGm[)*ID''MEqldb`HhI0*:*7jVfP6Tln@j.RKq@jI5:u1[>?pT7rr.l2pCFnI%VXn:rV#OI&+>g1HpG=;L9q9( %ZsDPGgct`&pYRNk47au^LRTlcBDU9N,l1BOIi9j-p>*X<(RJ31>[D7>'ipoTL;:XSj(Y"Ih9EpVYQ+UhrS?#[(>EEl(S?.]>7^&d %rpK16`K(nfoSZ)bnk\)gro[,&rR8,JkP*IuDAN40^&O_&HiH=VW!3+hrqc'QHn.#Jj#Ghs^<d=6Y.*Cf,M@8sHZ+?/gO>3seO0=u %^%qQ2WGep]s*/OsW&bpFY24Uhm-Tg^+]5hKeV([hGnajrVe>_.lUu!g]^'Ggc%Wod/\3"sZg1i^ftT\jQG%OQIf/@%l>_a\qN#ie %*KF_,,M_A7+1okkl$djLnCK1Z]9fIN]VsN`GTAd'8NtYMYtZKl:E<-$s7XXBqtlji5$VClcdON?r<8C\Vn^$=HHD[=@S)S>r-_Uf %[d\P/lacM,fD",lnKIrsme,&>aU]2+Y2=*$O7:pP+2jZ7Ru8lXcj+-grU0[DgMcLumf3-jI^22,rt_j8I6EZu5XNri(ci^*a('r! %nc>NS\*3_G+%4jo=7,6<FS\o[4.g65*ZR<5X/?L.rS=Y]>[2Wj?ai!JpN=BfUb(r3QdUFrEBan-4_A[UZa`6hcrpd,+2XlEFPlim %db*R-hHtBM+^]Lj0:oXW@f;o*jT#&)6+O=?0(//1DSEWl\[pS=<o3bn-QgpS599"bdDO]9`O"A5^UemkmENW3ea:oCj6nV74f#.< %J9fAIkkk?d'jFqnqg-m)-hu$0`h./1cR6cSIr1knijhiKf%Z,6eC27a+(n#*dqNqo$&ZKEhgkFkUjCa(g>A+Zl+ZWd8[ZN3Z*,P* %(+Ft[RB'b'G1"bpnb'fum2!JKIVKD,-BIn*SA4gEdIj@%D<=%>JoX4"qXag<S*r"ZG^9M[FF(TEf^9T?#=#oQo(4?EU7*lB\.Ic, %BCP5)"ap7EqW;B?K\+I)N+%Y9FrH4Np\3J3VhVSPpa70<c1ToC`R=habDVk5hq`2OTUn=B%)1Q0VcVTkjlO,/GOLCXcTf_AfhXf# %LFY:3T,u@K2qO,Bheb.hHh*TSq2;lNgMJ;:,GFT;PV27lJ70!noR6b!M8Q_I:?rJrn`ff6!Q-%gkkj6*f58gVIGM+\#mTqjl@3Ze %C39YG*.\YCG\eBS&7UR3n,Ke8cp3CS^@\!t;NF)!,7ri^^Ej@+#]Y.*5_q#g^Ah9R9*.Gi,7ri?K_T4Bja_mn>P*@D:T>WN@L"$o %?:Q.K#KO*o+gCV`I&=)jL]h&=T[8_jrmT3j:RT"J!7Ur;3q,fr5CCJXc[YiRYF*;ebFd4^GW7Y-$R+on_Q.u.ds-Vbn]-`**"T"B %+&McX5TT7np%69d*`0lZl9GlY?U$B`;1UdhoB?E,:fk"2O2o`>Gj6AH8+l+sO/Eee4ro]^j71V^T&sIA07QU,_Vq"_a/\IG*O>&B %.K>JkjQTM`GK<#<%f,/XhlgqsG]WDmQNs#^pM$[7HtoC+i?UPq'U(`[q_hQ]fqX=EOLZ&!R3,1/CB&W?C&e.5rS@JQce:UR*'TJ0 %D*^R/,_S,i6>Vq<IXAhsXF;:F&D),EY.hWa>HYn(?W5ig>s/+$S%UP'o[DtD5&in2/AK0YDi*H4a\a)S/Y:oDp]orjfGD6_X0&D& %m]1*9<U]Z'U\uADO<#qKIG38=W"f2cG>FRo4cg,YIC*X*PB=8qD>/1206Z\Ij#fOt3V@%?fIqbYl,R(XHb6J2e8`+0qtk(lhVXVC %>-kB\1],htV;3oq\pK175J<!T[Y/+YG<P;*f=0D<Is[1rHgu(Rps&3VithL05MhrS3,\I4G9%a2Y.!W20k0rW6nAk9"Rm85r!/$[ %niTamdLVse2^cWojY9AQN)Hf#'?;N_V]4$AND^g#plA:pA!HO$V0k##g-'Ru*i"ts[&r4jJ,T&P/U5S8G%Y_TJA'jqLE2b0Rc`o& %]8*TE/cN_T1r:b=n"ErkfA5-Y?*j%g[THWN5M3k>al;4K'<OCpaTqFTe]lA;pJ6h5k5):=4LT`(]d3$kV['X/r#rV7A4f&_lbh9' %h.Q+7\b`CqT@\S+s6RA`qjXY,cQ97GI!5O/EOY.<4sWAAYrq$ncZJe8]j*eN<X8BHflV<orT'lmdFn0YRZ+:CLVb\CkPFo.j&59? %q>B9h:VN.ce"aFaC&c4sNfMefcfX?aeMS:!kB&[J(I6t]@S!'U"`ZfNqX(anQgJ%)GS,c$_tI0AQfbO)@Q_6uIf9"ZgPrn+b@:&Z %c[[CqH<f4:@Q&`+$u3eF6hMPMGG1T8nQi(<K3]<aho3ueEV*NVI2>E2`R/mLoN`Gb(OL)]h7Ucd5(InSdIkp*a3jQ(IJ?,<Vk`_B %OFU_cS$W!%^<,5XP)_!ecbI#/Xrm[gEP:T43M;qV2'-[cGP)=eL-OTqr%4)KpGE\8Mcnrh<;\>ZIS@^FhIYHuAM8R;k/Z_1H[DH' %X^)q8Z=iFu^><Ek>++DV[V'g;i<4hC^BTa`10\nZR9ok:-tU-fk2OYapW!UXMdorNP<#.Ck*R!u2bNAaCe_sgi(nT*I/W`mX%2II %_pt7D<n?,GPJ`-V5$c>!c-t2Uq3cZtqU1'Sn+tq6E?"q/pVT4Mmem05s$\Bqqskak<[?c,5/GVVg,hC[e>8d#\Ho[SJY(m'RV]J9 %jojN*")Mt<rr!`2mc*_XhnQpTZONp.+8b\?#[<8HS#`Xk>5$b!'<ik)gX-\=X>#$:nE/+3YX_m\d1`a&qkG48-X_k8+$BZ%F"&.n %!W2C-Nh1c^d".r>?jCKDnR<Gj`ST=s7k:N&0:)q1+5*CWH`rfCrfhYo:L+msiSsFuio^"0f39LSaKM0R#MT1,TYoAWe#@_;nb26, %%p/f0mcs4\$Z17XnPAVdH5]>"p[7_cm/qgH%=,tkfhXet]DF6&Y9,Ea>_R5X!Bp.Sl^MaG[.<]0S_;c!eup1`Dn!6bpo.oYDGQJ5 %5Mg<u>22>0kDs.+qa'@bUdA5`-I529ZHXtHA4"+_N_Cik-BuKPDU!k*;*61THM?pZ]:66e&'o*9n2q$3)!1X0'`K?+,94CP?#BUS %#E0jqNkmB8Eq^'Z;msXmfN0'?n,dPsgPk*I,<AX3qI;T1%c7fqplr@60V7(Y`OU#]`_[X<\NeB'HaK/HR)QG_+agYbN],A6B)8;] %e'iO2d:PGn9LkT:BJXL#`ST?C0+%[LFN4$*),3m;k\)dnNM`JuF>TGH7ah`"RSM[)Rn`q[rr1/L+"k!(f6_9hD=n)+eS7]0^hVS8 %$qIA_5cppNP$%JOCj8PIp'4ski+_N@QuW-4&%qXJ(a$QE4u*<^hYuA9`df:Xi28ei[]<WD\*)(\h;A)SkNeUL!D3gSJ,SZpipq#[ %SVZM/gPa8@`uk;')`R0=`uh`>?S@I'gD9So%IAUgaBN8?4$2eWne1EU%q7*C>F4]B#P#O.*WO2EfmPl[[]V$gYG]mY"5*LGl**m< %VkH1jh`Z@8EI%5rji(7=a3)l'hDP/:=X!,!m/E"Q05k9/XT)Z=#:5:Xb>5M9n0]=%pYTeN#CWADW));p<R/Ukrqmp"I(A\N9[Mh: %dtc#L[eqrF2>^3Sr`=,d*_XZuQ'A&,Z9;n8(>l=qrpB[?eM_0bjtHF):I-A;f=j.mER\*^rFiihc])sE=H3a3+Y,*Nk^dg)=S;cI %EU^-f+'1"A:\Cod_tWscpX\HkpO6anmCM03?2[+Z@8ABbIp37Kcalltm%LQO\"uUW?$H0+lUrKko<*lIm.qKEp2A9^AM5+-+2>A" %g4nJ`GaBH>ZB(a:mHo>1o`mK`A^AftID*e3\:s\M.bg]`a/eP,YHl(9U)p@SmDjGG#aaELbl5ZK^]Al[-[?".8/6Ob2.Bo&fua\5 %W&th7H88ZPA6\lV&+XZ+Vf1Gph`.9mpda*hH[?=9P<o5tqo^6\%Zp_E@cu[[:Hm.[Mq6D,g]Ke/Y'Do-lK8*)GOHKt548?8Q)XC" %e?C0;^clUs5J4db^5q@Kps_u.:[@e&Rt6'89Ypc$>FA`d[.OCj,,e@'i*b:!+P?B'aPNLY8"eF^D=JE=])5'h=F7Y7g_RknO"0Op %>ucCMqWd#uf+0OMiU\dANl-]`5$iWE`Q7f-=mo.XG&?h)s1G0iCZXO<UYg?@GPU\4F=OqRQ1VYX$n!]N/cFFD/Uc'TjBh8ZoZQEL %.'Q9/$*o&,\@?n_obM*%qm30!n)@]')1'bm9r$?Ff>3MGBD9tJ3dM=.Iu?+7lLUL7O0H/*a.i?kkM-Z9pJ^&A5/tcq<5julIK!G0 %I/3*?2cb3W7#<0rrr2obO0&^89fNmX0<bA$I5h1]=24c9gYdSXieQ9lmVcG1r:>]%YHHa]GO*\XiT0V(hnOR=l<X;erpXZI*QsOZ %4W.S(R"gb&W'2Ik[Qain:\u@H@J$-:GfKUnP<8T``N':]nWt?Os7*kX+90kZhk.iNhjs\;s#Za`U%eN_X4'tegg1W5PF;aQX1e27 %M8u<t4-#HAj6PE*82BqN`gT?Y6]<Q)YMBa&$0u@cL3Ra9c+5V5&uX>m/E7$C_s<J^JMs7Rf#`F4ZfQ=n7!Wq]_<]9:.TQ=Fj&#D[ %eRa38]M?ENIbEA&k!j&-^CI+0UTFV^->>="kd8a!P:*&RS`>f-0"&#?eb3eta4I;MN'#dcBY>^#lTd(oL$j(%4U]I!S6XPJg6W^- %MsK[G9%!ouRR_XkMDcgYo$u@A5]&`,K@a7Jg%/:<G.hth]^r=T:)SJ9AR4M,O#>8u3%'n@T>A2^on1f9'>nYs2+\m;.J.=i*FD<$ %E6#i]_55i2l_#=YL+'6_m>LS[[TA18gA`rngSUB"hSd=t;T=4fQf:EsSKG7j+a>Y'E5RK'FDWkKOP$t%j8!8'@WDl[B%DsqgX8.C %<LCd*Uk.7>j'<7:>J0AlKYbbk#d:r6C3-iR)$1S:o<S:3<U<'Z1U.;QYUL!P(Dqg<BV8fQL,<!7JNqg!gK0g^83sj,I@;(Q`B3mY %D16#5g5!`ul-!OZnf_a_M_XJma@R.bRt_b7Z6<c&N=3#6FrKW:?>9S=9qa,n[V>9;(k%XjD2Tg7bian<mCR$6D:o'F:U=\hf=<Kq %[8u%^TT65KTX<fa"t.))99s4)o8[]u_UlMhI`g[)#s!<7V/^01Ps8gdXZ]`r,5J_m@<q6Tbjm'CcQ]H6Y^&7Ppe-i^LL==T6fJ:" %>)d%=QdqdX?iCZab!:*I3o5?4A,eE[/"p\g`\NdD'e.Tfj:YN1n*o&Y7pT9ZXg;N=IXO_nAd^9Iq<hrABP33,h.LT9JduS1-hI,E %pbBn-%6@^8)^X>([2j67h<@+emuZ9B*+P'`S82?3[jj$,g%.2o&g`Yn8VG(%$=W"`,p@Db^Ht\t]2!:"G0Xm<HqJ_A[T>rc=.@Vd %=&*S$7"=*k,6bcPC0Oa:Y')rg\T4]T"8iliI76.^`cdYIDDu2i0\b!s;ijL`Bn!S8,&#f@CV]6`B_&NV?aL(&<+!=Ag<+0AJ6T^@ %g7(Q\q>@sA;prsF]RI?O[TnQgQRcui'"4Pni?!ksRV[F$g.D>BY%_(SU5%Bc""c'QBq_;l5@g65?[S$e<(E>sk@NE>]#>;%WL\5n %8-aF,E<fcdgU_]2$L"F+6JnB-A!2P`kd]6I%GMVg[;;iImB*h*Fc+nfT<ko\P,(]hGK2i:hK)hCN(i"L7nDrI.7ojs:0%%[CU_fD %mhWdUqi%[9h)S3H59Ho,?uD0(q+I82?fh6g=)$`@BqHN.,EJLg)#F-26VWguBs5^7Q5*c?M%5(lo':`$do0=H4%7/R7+`!T;Mk`Y %;fuVS4RJJ'QR!S(=gjMim8$V.g+Zb21)_"`r?JN*du/Pa>e@!C2aGD<%j3c!a%,P_D7sCYXdtucl&1C[%rq#&C;"V<Rs"+i&ac?1 %dN#d'mGonIHX6GeFP9!#*iE(DEKtDB)H]NZl.1tkRbH=0ZC]Tg=&s(DD<sTX.F.35o0/j(CQtYaI4Tb+;$41"j_f'uc@aXCd^3`D %K^FL'JR?t\e`p01n2f8SZR&4DCb%t%],`/C=cf@5YaA2Q3Y]8!a$eVd9`a.#Ef]Gc?E$p`]D)-f0sM'1/"o[>7QJ+p3\-cd-G79> %Q!IL?[[eM.:VT;TX5"gR=Z]jBc):m/>b#7b5'V;52TgTc/NoZX5+qL'#H&J]athePSI]uoEit*MlJbEXoi0H]]_3k`912f.D5G)= %Hmed!U85."g#`a%/$!t\W,eFlegBeZWi'=l.-jfZXO=(kL?iI`%C#51?[2uVS=Q=t!)pkFM4:38\oGr^^Hm32'S\Ti.W1#V]?U"r %itLTRVlF$e;-rAKTTO(f=SJS.e`n[Y#-/n(It?*4=iKc59f\(jitA7o3al9>K@1ZOhe4@$<SYmcdB>]+[TFB!#`#i%=kGX!+7pu+ %Bpaji[e*PVp0!FI2Ta7a'oEY,/%3bBe(Pe#FE-Tr(u'0(bJn]l%s\R=YIXU^L#-VJ0.4,/G]ZXpD:c617!gUj?(S4-s&<c1p(o<? %G+rrrg;2TOW(4>kXAP"Z2NN0.KsA_Y+E>"-nAXsco\"C[kV@7S23AHRC4gLpNfDGoc0VI4A$J2OI8Z5$=RfB"g89XMn()XefsuCP %6,!FS<&)LMOUi]59JE^)g!73^pEtC/ZWHI%hTb5!ijJif$Yh^,5O]8YHE\Gg\`anupXkm;=K2IbSPnQEC!4\dW.u?C*n"^sUE8[4 %Wl;uQI4'eg';pd!kcuLCONl.*I,9^!^rC672RdI,`)SDCVR0uBhsI.YkWlap,>V_]#!,+_Am;Tuc^f7?2_?QGieW;lau1e.NnO_S %.\`Hhm9K.\D);D!G7'a;_.A&'>rk)$X]LX-qU(Ed&A:b\V;%Sgi7mhEU;\t.13%5&:KhS^4jNr1#m7;/m)Hk%h+WA>.V[CNbK&Dj %mcE6L??oUV.3`TC&$.A02f.rEhii</.ZTp6EY:8dR>45c#;VoSpM@/!FEbZHLA7K=WX:K/d@"MHkWk@IT16ENM^TMHD+&i&4+#_n %=*::;&DU?uB;0Hfe+tIC^8\JV;KuV0;>?pf\e2S]lYW9arlj_+U@6p,8jRWKU8>aHYmCZ6S5"!<]d4&@e--ouDBLrB-;E-QjS&!T %)/QWCSHoVjAGH@FA-4n9RTOtdoXS.\WX/9f*dq_U*A:pN9W.tp73e+7<aUNO-DKDGb6$Q8Hm$ke2.?AcUq"JX1VeTUk"31Kpk(Rf %/9hnk1/Ib(*/Fc6^56>4pK1XiRI;%NqjfXGk><R+NYRkb.ELm_X"oUIN_W[M-pFt2L3*h^YZgjUaKqX['ZFC3/rV7obDq9u,0Rc@ %/'u=2?G9,q?/(baF<RG'lF*%[JsOX)(Dl-=(0;A+$%3,[3"IIuN2l7),b]-gQ6%dGSe*Vo4-+BdE,)&),D7N#IEPR04UC=rCRZW+ %``,uD)DSK[dK[nkr0aRU=\S`Og_,ND]ebXg+OY[B7I.#@hrAiqVFN]LRYo@j50;g3pIAAW8`i@bEu2+De`INbZ_-l:Yum8!p-mF, %^"c3G:.\bn-f7L.n?Rk-$h:*uQr*E](8baSjMIfG/^HDnltr<VFkg$6:gj".bYq&%D01)&[@`H<Y%hEJ\E#<*c.m,UneHTI$G%(X %\Fq0'8u-R>_<DGB>u64YB#]r*:*Hl<<VOOq`<:'F26'jW@?BqP/dbI1gHW$.mS^_1g%!bG`be1oK^Ye?U&d_I>ju:%2"RrM2E^!u %+`DuoRRm#kptO/3lF9B'%S<!1mGB^"EDseAlWmLBT9StVa>0um2JbGf#DtJ0,X<B0?G<?XEus_SGXrCT]7AWFc)b[77Ds%l\;=&L %(2nPnm4/)p&PbRYD\2Y7]C#5UU'W,-J`@"]0%#\)(U[n%=n!.+V[eb3j-p5:65jN0U>@&GGcTTSn1/$*dY3.L;^QS?KOUI\WGV@; %>,EpZe]YWu`=<2XF^ih,jqD[g68trhYTK$5CIo4m1NboJP9OZ9B\$@XNYje;BMI`Bkf&+-j]Mh6)/4D+ZaW0<!QG5791+@U3#kG1 %KOH[6_5YB^)mVm)/$X)#A-hS[0a6sO,#?1SmP&X3Z-jqq7_>jfF3k!\Le)'#NTtQRVKTE:&k*ZaV,(AOZ"efFKH\GQNu=O%Ed@l% %/SPeB[d;Xb'#aN<l4s2fBjTdIVlV7qge_TLDSVG<@`W?2[P-rW`?t3A[g&i_\:2Nk4B!o"Q`HOX$8Gom3cB6XOcO,dhqUJO]VslX %,J0hJMa'aNFE&=HnRi='AV(hJcA=a"l)5gshB6.;1!'R(p;pN7!_mNGW\kX<G=muA0A`^P_2dO?T%TJ\KW!La@9e5h"BfZsWh/u\ %@MRT!O"8,+0&"8324R,&)p3VG2_?!VUlEP\#U(f`V^Bmbm$M<aZr+oqAjAK/UdObI;HHF%#:G@`.+WHdJ/i$old6[gr>Ot@+pG3A %JYTRlW[[l!gm3%&B<QWT)oVagi(>9D+@t,<Ve=nT1bb:AXiMM3673!u).fO-qE_J=f#$*ZAY"e:20uZ@ZBJZK=WE,i_'Z7X:5n7+ %9]DU9i`qZO7Z(r[3"KNKB3SST+i9r`"0Tn;jZ"')R6D+Pc!F]l#'%CtWu<1Z<_"fk9bI^ldg#H%-#q!p)e_%0h/XFn%=E2A'il/7 %+j(:+Yo]9BBK#UHo\#VN,c>3MfjdE:7,Z_7MFGKAo/SuN[KFDDE7/#^&sAuoQ%G(GNkS^4B)N36Rg_m/^d.ub0/^[8X/jLXa!%J# %,!WUD8R#6-0gROsKFSQ/1lu"bqh'<f,:o64b?&L:I8g"Ij.KF:T>E?5#p<.?92QKU262Y)Q4ZOc8JlD2e$B[dUOcGnM`]@8@S<b@ %A<`m`h,>\g.'JWqT[kJdk;6(E2!LRWmLe-Z&P!Y:!^dT10%0DV67C#:7T1"j&.=dVQf(gM"#"pS/4D/AIDiUD:h)=='22+o%E"%g %=iWrLWl,&(WckICOu;Rd?mi?j5Qdh]M>)P5j+UJo&k[85D@r62d\R.qO<,,3R*pLjDmV>FhqG2&mCf9tXBLe@mb2?>!0tb.D8]Cb %&WB_koU'=&l"A@1QJ;VGp^plf[S%'W%?a@QLIu0"&>rE1bVA<&*1Ws/,AU3HE=B,Za^$PpQF>B!]b'9s-[RFA4GFR\MBnCcH)[ho %Q(WJ8TOWe2m:K+ph,FpB'+*Cnbf_dHD1KPRW*"J(,g7+(%h?Wf4+4Mf(`eX\Fs"_$Qa!LiD*D=I>'++20k9HiQLu?</<omU.)Y-4 %f@.a'-'M;1]IX@Mo8?OU9"sNdgGdGR5IA+]1s?:i8dnXE^P7CiSrnbD1S?XQnM#4P!tKA,cjimU_r_`a$e;X@0oHo2a=Q66f[QNf %&Q?59gFP8[")\3`s3N&2!ua)):DdK1((,hrT-]ncg:F?*8CMP`k\$"tZBoN-W-r$AGSG'a7I5UA;O%W\Pd]ceWM(j19V!G#>V`[C %oZS6UI,o-e7LdV):KC41Jf(ut]TO'5>3nC"(]$tQCZ+S<gRLS?b5TG^s*44C07WNf_rD*pnRl5.jo99!l_!(Bs)m$_45KHlm"fkK %-?_X:8`t6tQsg]`6-SESSNpf8j]u8+5Pt$;p0W]RF*BMc9_rUL!\rZ_li7rf-?ap!=T_k/a5lKUTOW6*%cB);32\o)'0aT7O="jS %2c(1![f[2dReUhM)Of:gN$_?h"@kfm3rm^qj)0IEo],?DPN!p4!_Q$3G!`&t'AI!FjQW5^C%>\U_5C#bAI\EVCD3uUoLZd>0&S*k %@0`<k1p@?c9j60bX!UX2J6'S>pe\VlI*ht=*4b3%$-B.uE]a4ean?8)Okb'>s6&b5W>TVMfBI"gY\^uA9`+I"IeWPtD"8)u@G//I %h9]ud`$V'Mj?"O=Ukp*GD4%mF8$tnr45no'M;=81gr)t?2Juq^FIVX(Sa^JUnTR7.aVhf#`m&VY%nF0u9(Ck"2nSuO)!Qc:Hir[] %s0*0j9pWsTGW.1`%n=4b<ONY)9jY:2l4&rc"7AlIkt];Y=]daohdC*bJ:80TE@:[R1pJV6%]8M$(cZDB2\_c=YnIUB#-nmT%[R,! %(2j'mIQSMY`qg0i39e@VLcB*X(JL@CnkQ,Cq:7Xdijaj$OE''o:=qOD@2F$U1p@WWNgnZ1+X^"NKTY:AG!jBnkL^(g-gPLpUms9H %/QPX?_Nnjq1q`ut%KkJe0df]^KUK/&jMOi936=?$2g8lCoa]&'W3[S)SV-f]#P9"=KcTZ(jph0+"<ErP7:MYFmiMs*=/F5<o[cOD %=oP,NnQ#TTDb'rJa^e9_?=Y#%3b[V:Ja8s4mJsGC$Y9QnS`mu'5jY.@Dh.2u2Y_6Y*B2@Jg52N8-.G[nfbSBO:N$WMPG`U)geAHl %"lrE"h$%m*5M?UO4#:5-*-d6%]E@d947L/(G;>RJ_=+TlG6$QXf4QH:*h7:5JFLL*[1`sebsC%cj2jOP"NNl'@g>8j1pIE6%sR8n %KCTQqkQ:AF%m*&J`9,\YS0q%t!md&GFopl!'0AMP6s8CRUk^:?JE]W=3s##Y/9ZR/fs9@clTtHBJ3=e.:67VQ@MdC_['0pScXu>B %JU>kcmXY&m+*N5(8IIT\pr*0f$,S&jpeDqqBjq;aT?P4`5X'"^%u0Yk.J(A`5-2.4i-`tk:4PNB@L#Gr1p@XlcgI54L\5(&Fo_6h %hX,mk0Zjo]pYcn`E.FSV<'D;]#LC[*+?t*NGC]M29G>]i4See;Sc%T!\%hof!VSH#)'6',SQlfHjL`#_-Z?c1q"F"6Q9"sDV*4KS %qeu@]J,0,us5I\I+"nZWY9*-2nF#i/qX3W-pCCVYqf))Ce\ga!Hb$E>$%H69dI*>[n#fE7GQ71"2tnhmG01uGe94m$O8eb2R-NDq %`!0etD&:R0-E/LmrBDjYD'PRlZRLurRE;EZ(C1m%@T&CDN(C/s0o'1/bjegJ3f_gS0T.8F6LPa\6!KB9#;hMDLX=e-jF'A3+Qj8" %gWkhR6B:Y4:J(_G<7W7&mrShPKafc\?FDKI<mNU"08-&?96j'Cj;#+ugT>82C:d6Z8P6iCJS-6D7'QWP`?TNJ&^E)W,sajF$K55\ %I^oIgG_sAF\>4djjX;DuK=1>C!>@K)]>63fm0ZUcM0"bM,VO?2qQ-`,2Y(_.F5R<I<:'@"0p=Fo0iH-$.pnFCB42W9KlN&0K$809 %H.H@d!easTe&X0CJ?f6S=@Fo=OYHt%VJD2]&@1;pWe)HDFR4RD@ri8MBSqUT!@u%2"PlAQg1:/TfraV4&Rgq`dGY1qW^e>qi2#B! %**?L(5_B49j`Omf*.T4A(/59jI\Bg,_>u;,#8J(TjtpgQ#W5d#^GkbE9L@?QCeONn["TBH`6g*C,LtE`XT?j=,h>>6[>H-3hC<8b %'sFPC$cb#kO:`e:m(;?f@^aTPUAuNDilLNtH<-8fap%qi`(e>#cuibji+8TYO;f;P".[o:=oq\(c72L7SCiCuHkL:(Pa>q^]CKpo %WY&Z;SR`G42Y+3Y>015/?Z&ie?:5Qi3f>8I;#2:]gUba9nhgTb>]_d,$ELXK($fK\T2DdkkuWRm:Z*=u0<5_#Qd-5^jj/0p9OVO6 %Mbp*sFYjdVUNtMn6jmE+-&I5OFEp9eX(f@h[Uqq[/=ElMOQL$/6*%lRPZUkb_X-Qh#80)Vj\`+_8K/\-2&ZY!`CndfrMRJ4$!`C- %XAKp:fH<%O-*gXkFa0dOO2Fe9-R<\m';WjfWsB#5;-?R>^Re)V'?,h??$b]CM?+]Bq\lQk))DeK=p8"L,fk#KJcER.nPDZ\3T\%@ %44O)k)3\[tZW]8Ggq\`e'0/:3aS9c'A*XEtTW+t`DRkSqA8sXi'b@U%86qIY-K?>k"JK/:K80@OeV2fY?H$[&Gd`-T_D]r.iQ6`@ %'^X-HB_d(`7"g*&:P=<JFb!/kUPIYa"O!1hn)^k`L(C^!q7^,8Ah_"*`P)t9FV$n(9IXO@/N*(0OMBDYE1!qbRZ:;L:sfd03bHpF %K4g.u3$Ls^_GNR+UBV<l@N#GYA-TFhBs\Kp)iIhYdQgPn1J0V0O#c]=Y7n-Z.!Sn=70-P'0XYeX8Nh6*8AuJYXahFu;9_B[8eS`S %on8lqX/Zs9%1H]R9P4Q(N1a_KE;32kX0!W))M5jC;k+qH:IPS7$MB3L9/e<J;>jni&thYPfAd8AV\'.H\fB4((Fho?WaIA[XC-%" %@&T9QI?)_V;Y.gc:"NKF@SaBke1&E<Y#>Y-l_,!:OE;1=n7qr`1pO?'ai:IJ<`$^U7D>OK5j6s`U9:_&i/8ir3"$,MLhG8/6TX=2 %eF4JJeLmi139%T**'&Q<P'Y0SKV(f6`bd$+PBSog3M]1cLO]T]>S*NsqKHVag;4R4DZh/K,:bN"R\idH>kZ4BKq3j6RW_/g8]lSo %HuFI#/CakC9H8qYLTCc>;"A^!BH1u4Z%p5PhuIXk)/&lGk?r6I!bJ8EdK/Gp2R/35"-nQ$n-TdQ*"Sd`,:1K_p8UYe;Dtm,S`jRL %QsPlT;1tGk_87XnPn\K5O_)sNj/C;428h+t6#`s3Z<F"K,_1jJ=Rp;Lau,UN*gS=-F'/4m@5jdJI$?i=7mTafcO0>H]2Ali.j00R %X#go$8/r^G3)om5M*0?M!lEHl0p5G=H\SbE'!+b-0p7[3*<e)'TOJlkgpr:8HiaR>'QeAIE:]t/=($ZDg]8]_cmlLD3"P;$A:LiI %QF[T@'e&.1FB_0LHO3G6@hge^"-OQ,Vd2Gr`0?#_TPgK3L]h<GW0&R_A&G;gLQdM!e%kp<1`S6!3I#DBMnGs?`jAk^-_X%;$&DHs %G3*T/+EY2R8Z\q>>HnS]5NRP3Z&'@Tj2LSa\E534JLD+:Bn3BmK`X\N8HoJ*nqtu(Yjt9Hj[LTP!+i>F7[VMW*%&mQ7W3"[C2t=$ %/"bURP[NO^a>im^=L1fE&"I0A&<=V1cGdm%.$9CQ_$6;1$dW;!_=4d`!(`S58uA6e?'[FKj7hoj\lcXDP<DE&N_bR0;>J=4!<SXf %;=<EjDDNs9dPN._PG/&Q:)P',PX5$EWs@XcaE#q;\;4T\6<5%MF$uQ#qY/-U6rHjP1lt[JV.YAZT*["Q!^rp<_*g5&0X@Gnpbnl" %<`"#S3XH<ocB&t@"N;E6aeXH+R&29E?te'::[iMRq8Qa_;\#c_MFk$_F;maQF)`*%rt6bs0/lB837fTLfgdd9BT6!<?cQ$P\ptFs %nAXpEmuUZqgE?=f*G9a\^9(;\J-J:<;m>`l.5t^k9nR1BD^'l]GEZKHKB-]:s7sB=NFL,s`$/aMW&fn[nHB4D)#tHFR^sHEOEq3A %>Wf/7oWjOOKYh5rLAn!<ZB-<<Utf,aOra`-H8\6c,f!#,HPFgq;%YYgJcH$D(e6kN7nI8\"(A:"%'0HPVE5)XNi`f2V4Ou>YS',d %Z^QZ+PDB7h/4M0SN6&OTf@%IE5D&373fd54M&Q^hO9t7n$_"3IKVK31;aqao)F2TGjmW/&ZH*?/5^H>MYu%h?W]EHm7E@(.3]'Z1 %&N@/7:q[Gj8jX7`nlVl$J%8D+::%oIeD7.WnM*UEgpNUUi"*$R$3Q.8W@mH;)DGS2Do*cQ.b_W+k-L8uf=EDQ+;CL5PD!k>Y'8$; %*X1(Y#qpG*7AkA'/8%OUR<)rD,;%&2,-.3\r3L_6?(?c'T4RY`#US&068Y>XrmbX/iN*9JO?GKU_L7N.c$DY<G:IC1;J)o[DXls" %K;:*sE@)G1[=)t!GGEl&"TS25][cZrki,^8K9_jIN+ro2FYOP\O()8e&gDFnrjf<c@q,ZX!lt.>baupViNt9oA]hVV[f-<)-`<@^ %cqEMrf3uN[#T6R#f[OI!PGoZQ+L[+sn`l0U/AQQHbS,gBs"P=1&H'jhXQu!.DjQP5H+aFs7.bK-ZS'iJQo:II?bKhF<osH;+l!67 %2ntrS1D9:aBf$FOD4H;&c<dV:X'b0^`I,e1Hpe;]8oS@!@a(Io$p&WR0F;:3MOcXED#so[nq3$cmkP:[PG$<ce^"fO<1Yt?d:>p& %-7hDN-D;8k,iiJ"LKCNNGff_bm=@_ck3a+-f/J+&=DooL5=LbB0q-V"%m-fug$pXsla:Oei.,d:GKXFtPLG4JMW:WlmZTTN`2iJe %=L,k]@KqZh@D4G$_8$c6ZZNS^<,gD?#hLu[lEe(D<eWR;#Vh##Ze\Zo4g6(`'8kZa6-a3)kNdRUP)7ICqg`2_kIUNga;kWId8b/l %)4jJcDMZZ8$I<&'T.C7bc$&dp".H?!Ej/<OG.(?n?6.FN&C[==Up\IQqQ_K%>V9m"!G9)Ln%h[Wop(5DX'6/&Xt8j<Tqo/e&.M<B %lg7ru_o7)F!`\^Tnl+LkYL`S)HZg%UgeP^;f_<RsAXs":]@nutg.ab/':u?!<ni$uX4Su!8uK%F2@S8X7nZ1U3of"c\(f3lRb,j* %GluLseL.Ua-?8q#^ccF/,fCP_Xi@=sc2:_=n$#ch8a$;F3u8Mf.#.DQEek>Z>htB*]K>_u(oGFdZg/:[7Ijt<@pStfe!!cUDO7C_ %lKg'qZuqmU31J!!NFS?:D#$*%ppjV=2FLY_7\Cb\<2CG4??*f+p]t[br$Si:0FZs?;lG5?9\Zf7\--[ld!MSoHI7XIYb7d)PS"2[ %Z%P6gf&ZRB`NumYXqo9RSb1X(:c0qK!:NhUNJa2gbug4H&<>5GIXir-KJ"R!P'tMeG7k]dcWq-C6)SK2\uE-_Cr3ge,Li`4(b:8V %$Jhd`1k9Q#lt(h1E@_FJH8(1g4i#6AKPQ]7=WOqakQLCSXtI["NAFN"!2`oJpX&?>OF-KQ`j;&$klP-*D@UjD[&Ztt64A$+3#h56 %.dOE:M@?.71F02X:0.k,a^WmZkF"E!Y`hsp1r36IEtPqUJjcm]g0^7R"OT)TJ6`<=1)2DqG-@&h-^FJ,\5gLVQB>IgVrW^ONYjJR %%%ISQW]QE_Sr!\Q*22b9'E9\]ArYa+cpS;-M&UOh<IZ12@3hkMrk`dqq]P"f6')[/5"JG9&<V^+,mT6W[M0+B^Z=QQ$/J.B-h`Ye %3=\`C9DF5hGHD5(]snZJ(D=_b7NVe`+Mn\!Re_[k?`f7>p"=I*MblrSlq))Fd%(TtRerT]4^&]d3U=M=O9)U'!npZKngWUY'UV", %6t]o#P<s]:&Y50fcbq$g*0t.ZWs[:*6If3)dV-ikOrlCp7_l`>)i,9od?dFIXItp"8fp.s@,u&;];fI3/54?6C"Iq4#2_`AptM$+ %IbsG_:h$0/6HKC;"Ns4a4iB<aG2g$&MoT9uN8hra'6;`<&u'sFZgdQ^$bu(p;78E:]P:=Fg-0'mD59BB!7UpMF7..qYDDQ\kC#fl %1;+g&X@<NYSq$Z?pAF$QFX\M'.tIdc10.q_%$9,&5u45V+=^^rK16=NN1(()+pT#oLNm)1(`4h0ENpb.E;=6S>VoP@'@&oTF.p'p %^e[,Z"MQ5"SFTp@"qVI<QK:gk>!b9VJAt8",Ztom9[@Irr&ge7-%biC"tHVU/Eb>S6D[+S(\/l)8;G2L#[BsD_"h.6-;*"Q9)Jf8 %_c7l!<1U?$8/6q$V+A3Re]SLT)P:+M=`R%oV#5$<cmDARE1/hZ$F"3#QjPeU6Li;$k=HR;JP]:?8*%sAmu7uQdVfd2ndUJU&#0;u %k$egPX:#&ZN2*U<9L8lP;W`C'$j4VeaG</#W*h5W!5mo%`/4s@9eDs2>81##<:W"`A;5/A1T"d8K4IZ3/&I5ZjLLAF/CjnDfo0c` %R`&*W\n5Nb9+dcDbLMY@C5S+KE!EWO5)D*i_;hjLWuU2eY?!hJ`9Ta*?kO6k`*(kidfc\DV,nEQd>M`<lEi`(]nTpAQ`nuZlJ.eE %L,)rVBgp)L+d]c[VSlo@qo1PdM@>'R6))&.LBkbu676I1Ps^\$*_%7hVNZnC15&24G1cMBFRc)Qo1B+[=JU#3(KQLFDQ+0Vkcn7' %EGj$u5]KTc_Fa9d^)*[PQ*e,<-j*H5H6U0c$Rg-ga-<,K(L-BN/l[WA$)=AHW=TM0\cIZ<-K^Dk6sg86-DVsZn?'Q8&\agS%"qn& %7SP%n[5s(<a!*I=0J=UG3XP&bn9%I(8c*0d_!WKA"Gl2m11g^@$aH%[%('Y-aKZX6`fnWD7O].?g46YGE>"KK#pg+NWOIW4\25u` %#G<lIl8nhkZi-J2Ydg]+0c1;Olrj!!aciA/dpTOORiS6JlF!@"o;Idco<=?2YPK-5JbV:.G\T6>/_Mgs$(l6iMGQm,O=P8n<ZMNP %b)1q6:3$(ch`iFI#en;&$8O2c,0EIs<H4jo<=_>LKTsnj_,JTT5&Oci=nW`(X'#20iAD7Adn!k#N)(Q#+,N3MTkd'.e$JCJP'3ns %Cs:m(SLF>LJ(59UW<3q6'H,M1"DGXbLO&)YK^B]_Z-=.6N!:W6\p#Wf<Xl)n"AX(PbeY86^"Rut@er6T9d8!RN13a`;*km&mW;0Z %8Q=[Fgfd79-8?hR?Wp.6Mbc<D/-?N"VYhZ*4To+N^+P.*30c8l?kR7&MhI8E]-bJ+f%)E:U\QQU?XX:;O\jJ'VVhk1QGks]Nm`!6 %C(crF<+d(ZbS1>cQ`;>%FbV)F&b?K<(YW2e$S?$Jb<]@gpCf==:5J-g:a$a=jPtNS:HM9-")WoSOH<biX-%u/Z[-M[c]9I^%*[&' %PuA2[p!og76'YR]!%4rsMbW()q6T3`T-(?'<QE3CEB<ZI^A@2<,>;a_?6/>jaroJro:qqg6+e^`_C>k(X&k2JS;4c)_!Fh^@\oqp %0cNI/mPNlWM<G_H*9>s_Dd[`mk8?8ce,"u!a]V+m'qh#Oes-#0"CO5Q];dOBaZRQ(=-XG0BMPial(HqI=r0\ObcM.FAX\8Z=?G8N %^bi$E"r>!k>p.oJN(Vqh;oFi(8scQM+aYXF'DUhI/=NPtPP%cZ(m$*[;sa^$Su6XhSp2cM(jm"T#<.:(j/Z?=SomO&\ft[,1)a9D %s%h7*LN-"*X]m9.iSK!+68Ne='u5?"1%RW4$OI:L01-703QY[Y9U:t_8o(ar\"Cn0L[_o5)cH(/dhR4NB#.>>Je4HSfT;<53jU!S %P)$Sm\mk-.@0o"6ipO.:BtGRZb[=(0St!r05jB\@(!BfUQ+>:[CS&Z#%/l&2j8;HVD8Z;&CJQu:4&Mn@#WW6%pmN^Bjp[YIQ0FMj %X%`7-1LQrIjih^BKO]#`HVki$;ulM8bVSQr7@[!,I+J3`[_X+lpChZi9o5Se)`"%uX]S,N;l-XD]%Wu_fDQ!E[:+9"S:98t2[PHe %Dt:97'+hcs69rj:H^h8'9aLFG!OM(3liONF5hsdQ(\$77LA+R+ICshAR(`Q0TA80ATD,DfXY_fDbV.K[Y5-9.0+dkV>HY!\T)JX6 %gq_lUC,DW:fr)34U58lTC3BUIoSsh&iToE"UD1rg9IHkA*+[Zb:oUTX$XOI"&6$-hn;/9T'-42X=U25Yhp=5*`:9._:;V"h8O.Po %FVr_:B#P/?_Mqe)"L5O`&'6QrnN9]*"gN/YetZX%I*Ej>/&EaD2Dq]_L@;+2UTk],6N`n7&#\p]q6qpcR9>=`8cqW'?O8el@?T$A %/gMo6&4TCB@#bH06LtcNimX1&kq#*"jIjt"7P$I'WB&iD7JYT5I<2t8oX21=jjX`GV49#V\s+VLOAqF[-]J\D#W9A8(@<R(3-"TC %O<1d0:boIk5p2o[PMEBf1u![t']R]MeHR/a[ebV?bL\)!@n^Q[$D!7#[6[lA8pVUL1[S<gi;AX=`+_Yrf[Pf*R70BPLG4b7_GKT_ %:2@m/WB%hu#U(,E%(MSoJ+fu#'d=&m1=6./`(i=*Ma=["2\;s'&Oar=6[JUC9JA:Wh17(Cgjtsi"i3U6;hS<n31SCAB.g)N+:62Z %B]ibb70s8T\<.mG`'E^?LmUB!NrE(u)NLCbMQ2=BWX:Z7&6bE$`K[j1@re$o5e7#H_Y'>VJkDE\'G9^N1sEj:b>+8haR-8[<6[lN %E9bR(m*S,"M9HohC.&uQU^F:n^fJBIcRTG1,%aQ*=/k\*XTp()i061a`DQeVm]'*)*&3+U%=h)a&f+K_<uQTc)R'qOej,bVd"p1G %+9JK=nSJr/ERK0\4G&M+?Kb8:%WnS;<E<k(fQjbUf;^?o60=)03uasCk8MO^1kLu6W2?ts9iIX\C>CC,WQ\tkZWHI%UFJ.&"#5gN %d$92=;U%QBS'_9/b>\A\PLWE2](9Z4B/;fQB[P^iV7##?7m+JPf;Y[Kmt[b&m4bB_V,Yb`h4=Lj*pb.V>1aD/<',e?s8PW:G9'>> %>tOYrnfP;fJ3&La7tdCb/!W.7(cd-tFc1GGrV(Mu1aA!o1:n&N>*bF,L51OKk^44WF^J,f8-\_mZEUNHr5r5Yo4m#mE(A$p"??Y\ %!bWPdSu<`T8#F2&:u(uC"$8Y9^+!'A'jagAn]8%lj#2,eLI=9)TY>"@D"hqB/MlF.#nYMmU5aW#k*A@FouT!!UISr4d#m9K=b^^H %GOAQ?3]4qdqR&-B0=lW[UR0YI(@j@1X8>1@$A*[*&U#^<O$5$DqmiUG,eXf+0*hR0N/+bl'EH\Y"_J9?YX[_)KRa^gS+\OQ9..<9 %WE;*mO+2W&n-r]l-<7jEl6$6A*`\O^.>P&6>`aiZ1EUNh81*V%&4aD#'mZ'!YrJurS-5KCRd#$8Bfa=e?>_R_!cE"H2&Ic:SoC<# %q[OfQTnp"\rMC7J@*hj0eUpefZVa',_/:pc=!VS_=m%p(:W?3G#U:+_&]qB-N)e))<r7h<">pWsR,U4l:D+_s?I_;1&N%jAJ-$Jh %@u,XUDQ"\ZX;[lOWBGY=[ZfSB,qogl\BeJs<j=07`Zc@?>,t8@PJ@p\.1mj^K,+4QH7i]G.S@^(nDNL%qnd_@_UX7),Lg!Dr-Q"2 %0ojM37TO[CB]Y3[O_CB^\Q@,B(R?:k02T(F=1^prdBa#*'.A1kR_/:*Z>.M!s*#X&B(6Be0cIi4!B/r.3+4A<C-`/@]0#i:&k1Us %&M%sDO6cAGH<+2RjT].iO)G5b>uD1n6+7qaI`uc^0N%<>H2Y(t@+eHTXmkjQ'@\7LZ!iG>]9G%E?OXNH&A]ae1o!H)N=RPXZ:4_[ %]%hSEQ%?!7DhT?B:[@'Sk*=gGZNsl,T:K]g2@JHqDr@'_cA9p]Hs/pR`mu1g.4(_Z3C;nu<l.4mXd\fM9oh9c%(LI1GX!K+<qJuW %PX-@co1EZ"'f(gjSo"Q476`@7'Mrb7$SMMi"Oh_(;HRM9fZ_=mAd*gr3Vq;6h]aUR%5#Tf"cHYiC93^=/TsS/Cj"5=YIp3+`lVg( %^73\'Y@.pi=;m[AP'ZJaCe4YD$U`chLUT,:D05Lhf<*YimGL:M6%Y^N!Uj_+o>ge6m%Ip(82CgR@`mV?gcEa&5/4>,/)U4L5hdWf %mR\$TJe[,DkIp6_L$8`g7+h^Y[s1P2]5c\5#l`0.HY3s0@5YtsLnVA2A#tWm!PU1[gEb_E;=c<ZX>riUUgSV)-D3P5g@r8>>OW,& %!eS]9J=do>S?K/[bZ^jG)'1Dmr]4teJ-*%^$YrW36!Q14*!6+aK<l(<6GW21^&<N_grZp5g/^78L34#SVZ9]1nC!\$C=W*OSF]`t %VcEg1Ja:rO\0htA!r`4B/*ePcJ88)BYHe3-!1"_#_)0XK.(a=Z$K1ghX_i>2Eao87d_%@Pg]S=Y>PgcO5<TtXMrcJQ4=CD(R@o]Z %Tp*$pjTNj,^4ZE!3'lk=fliJl#jE*PP)OreU`9JR>K<KK_8Y/8)_G7?jVu!erh#684]NsrD0iOaS_D4.7"X9Y0-Q_H#'Da(jR3JR %l7-1%hQ/mg[Uanq3/>0mn_EioF!mXG^(&BE.X2*rLcu.g2$"62R+iBI$iWea?uCb2$VD44ALu@AeblL:`;Pum;VD]Lnpc$Dh21V0 %d]hUo^UJU(a\>K06+?RfKno'S'i\0lPrs$fGWF*J?Qkm/-oQH'I?_B[="sK-9$2O@YE'RHX23(3,>Hou=$E0/q[:"/'oNsdnZG'* %Nu`=.1_fr_-IL:2\u$PYq/@h[jhlSTL*\&HjSj^N`?E%V3_pU#[jZjm7CpBh/6?&RJNdMUp.Oo<8&&1M5%4_Ahj*LCE_Rq^;,O*i %'0h'7(20s;5?c+g@7GYb4H'.Qp/m0ahGXF6i!>)<g<P-II13i/'D8l7DUlJL7V"F7rL#q'T4oN"pqCF;!lLS_MQ\:4gkEGP_&MVT %/Vo-mhj,fO$&`[W2(O(Bj8J-BJrc!9"l'?8C$ou)(``I5>lYts9[28n(:7iY&hG7FUs=/#es;sG]+s,A-sB7^a^b\#;H_+5dXrk* %/nnlIQpr:)8rCe>8(J[[cSBMR^ecF&7E4>tCst^qJJ#SaYsT4U)8jCrR%(>CN%.d*DE8)BA6N6\)[XuO3?Ql%C`+"=qV!@kf,rRi %4>b)@N9+TGf:N^-#4GffP"$auW*+XhncVQaR'_RHZjfZ$GS4*]e;=p_p+>uYR@NrSK2`_o)>s](JD0fYjZ6M[C9=<[ZcrQcD-O2? %)^iI9P8._")7id^JZT/mqJobDfVu4_H2<nXiF/6PK6%ILrZqrZJaUfm&#s+pLcE+J5RiZi;?H#./&*`e?lbNf\S2j2pcNMhWa<O; %q,]d]^$O?d.fM/N#/C7W&_ki%c6Rr,"'B0GpU!-*=XOG9^hFAP]J&)M6lDIsiU@E&GBJZJbBHQPR0oY+:u<_s=BQf9b1=[$,ju)m %h^E8S<0Vn@!B')F_'banU;p:S?rNMtCFS@gM?F?L\^)srrq]B,Vq,--UO<%Yo\%$L7oU4<.fS0Kj-O,/.b.dA*dW*p[blUXGlfs4 %Sm'm[q_6Ht[Ii50=7:]H?!)!=foaI4n4<+XKCb\!2?Y$g"_A8:Y,[,A4j]Zo?;#R5@1NpHWL"TAbF#4T<Gl0t<Z]8hX]p/e5^ikL %Vp!!K/*MD]-Ba+u2E7mC$8R'$5RkL\bI_)ecA^\HgIk`A)1jtXhF]ej-&S@e\YZ>ho5[=u%fI+6pm(DV]9HuREnJ0G4n&%Y?7q`9 %Lalk`9h1rnadXqF&e$GJ59,em+#?#UW2?^ol5qThW]=2IC*p+1d]k9sTKkJ]WSg`S+dF^BA][A.dYr(kO<EKU)uQgoFQTGeg/?0a %pQIm6NE2n,D<]*$M#`,EY5`mnn>LY!lr^)a8@KpA^I/70D/#Ud[D4/aHtQ/R^>k]5^HVKB[#Pmb'C7r%D40k?H7L+n&`BaCM[-qM %VP^kN?0L3RdhTJ#$=o$h/Tmsp3n3QsBp%@l_=^3M8eh7PXHuY3AWfLY=HBu=X%_A&'[50W]Cc$YL36)i"G.`q"RO+_6H'kbXA0NF %+WDlQQ'Q9\0GU2aEW[+%Qc=W_b8HE+)Z)IkKk*X1>k-,aF>f;MOi\5#JWd0UaOuk!2jkO,?>];EUaf73dB0OO*PVV2@A4Hs#1C49 %=VPTY2C!TC:'hrMo"%\]6:0"PqFI.np5&C/4?u6_<&@1MNh\.0A+DC_1L_*<K.IlVE2<GIA5ULEe_9j,%MGd!bGZ+BR#k,NC"L?Q %V8a)/Kc6",[4Q-oU7c7/qG&p66ZPbWh/6NU5UM)=qcBc,,Wk%F11TT6eteET?pm/=>C>'-hY<3'$HbFW6sL'lgSft-aVC\k6ld%p %d=XN<h=S.b<NnV6WAeQQ:,H_nk>tJVUb_C-gqO&?d.T%4llX$cO_FkH8#E[_\Hna3g(K[3B=U$j[0I3@qlR=VpP2iFp2ql38D;WB %QU*0'\[EQ;<NabY"I)taYeiLjY'_5$Ld1Jn./pb(5hl.QIXfSDZOaG^)X'K5GOp!%3-Ug;=Lu<@;/#bXJ?4I18-M+";>b>"Ei%0a %&/qU()T=s`Z`MDAl/V,,\QM9K"k9DMhJV$GFM"tJ\&[QBmGKeh[J,07N`NXY$?mBrbBW;l;lkAV;U;70CWf+.J<;@0B@qpF<KQs! %M\k14HBa16S;3kk]RDf=%^NRoZ#':>=RRQ6G-M=]*[#i//1u)+nk'oc:cJdQ'MN)T.PMhL;?2+6g9u=S5^<!,Y1-6a$d;";"l8J9 %q([(EgLd%S=:g?/Z#fnM@2Wi-/nliY=+Q?N:Be8*pUdIiWYHiqU[";ONG`B@Dq<1GMi1FgL/ZFHggY-b-Ge#h\Lh*pU?RMbe-`0- %;lt`!SVGE"Q7kZ@>Bh&8T\q*8/'YRZJ4-eGcVLP!f9/NAP)!;&e]M!+9+!)7DPdWd#h$NZiYM-Z[S<Iu0h`C]_CP]=(>?TSBf<K2 %5Quh_4TlJ">Zp'?/E$gfq(@=cTr^="[+kcSH[%Lui.SSEGQ^Gb_#L&ZM&FGT,(+b!@qf?470nSLE[^neHtBkl;_&bW>>t]_T2=Uc %7+GY=JU@W+P1_Qf6e"a7M*ngtKeFXuX1kIg^Rbe0)X4=sc_;N.:jF4l`+&T!5OYP6fKtj+.=LY$BY0H-dd,qQ6Bcomj_srepW<jh %/E]WSEmU1Jf"OocLoU-3!8)*f5]/iXBdIsmTk^P_k<>W[=$'a41VN/,I(U$Y!ZHl9K]$r=p9k-fD5Mk!5Zl&,iO1PCJ/Xe2L@a`+ %%s[X#aN,-*NdO<Hg]C'^=H#=.6"A#Oa\b@0R,A#)#"Gup$l^V0`rmX^eMf1!S"#:-/b2@];H+SXRg.R^kmuES!l(u4)!<qR&@q5A %rqF8m&IY\F.1-GZd4pN/.Y1o!goOl)<nH97mdG!7:q[TW(;T#lk,mh$[_hl?>7X$g5uG%GJD.Wj,<?LGGY.(N,ZdRfnsJjPNiDDH %I!O7_PD!t%fTo[L%28gGf-#4)Ha'c@J8in">:d,;Ef]RY\HdIr6R(GrEVCA=P$dc1Jj>&iRJhbtaS>!O6&Zk'OF03Eq\Z'cGPbY+ %0:T]8$`;JuDZK:12I'.O]\4\_B*[$Z8`Y+d`tJ@tgcdrSIOeoH$Vmj#Pq$27^qn@]'u0kH98JP&\k<X?:9:#o-TN4#NO!.(H-LqW %9PVrhX-ckr;%TgS?QV):,+;"Cej*3jds=+s:5Zc3"lUT+Q;XkW+""pW$ITe9I7:Q?q%\RoOS#]uVaq^d1,$YnPOk%c`-r#VSq0Y4 %nk2RS=McTlS=q2f4HPn9%"kX`p.H8-a__ptOq:L3.h<Cg:283aaqAEb1m;\9Yk[nT=Os2[Wm<5;BFU<ER[-]S&Ds^\U<:`!^uW%B %e>@%d<1T"7eD9VdDZZ_O#nX(PGtC>t0Z9^#IfkjC(*uR$T\sbCU8D<'Z\iCNf8X]6G1XZc(UXT8.b1K+/<&i2%Eo`fSVVGSB.O6_ %SSpr'fm#f@kVDJ4.4:t=H5<8%<p/Yd%-QnT0NY/Ebu//rB.R9'#qh*)iE>6bD*'!fAD?+ND=3Mi9"?MgJ;EgS++6'Z\kah=\ZaKE %>qL]\o+SkL%Ve?e:dI!M3@W#_fab53O5pU<Z.4"X-W\E6/CpR3@G*%M]]\r.7NMjYV0j^#ce:>M8``NiE/$+F;C4PJr2qhQ^T+uD %)F0k\QuIs63*=-u1]oLXrpGZ.?6)XV`8.3Q0ta@,lMOLJ9'STKoerGa>KM6RkNg"\?iT$(qQKo&B0t)rZ>Wthh&!`8lbQtiSd$%M %`(SLI=DZ2@3(X=XlK4/sl_q8rWK5$ihAb1CW`]'63$[\Ki%.J!=Yn?a?m+<.jJgo:#(#VmmI20)jHG(K<PVkZIZK\uEb1d0.kM5+ %;V8-7!DVj9[)c;#Y$;:D<9%E5Gti(&m)[c%c/KD^`FZTQ45JZ6)EVrXFj1)RG@V"=CRI,"9CUf5FJCj4^g=KZRMgp-F60*4'bUt9 %]Lo/uf0LlX%G]:+*4LH*gH2m;]V9]_B[SFCjMkQoigW=,92'iHMl,kqPtD5b`1i@iJ3SX4dOR6WHSR&A1J/0/`bX>,*aj#1l_Vmp %T0Q"c!\C2$/(WD9r+n3TT(t&UEmIt$YM-%E.)VqH96&3lIdA0de<Y4fO`+0"N\n-^pmSnBoEMg\:dDiZ8=BMZq7ZGBdU;>,5Cb[[ %KZpTOh-d4anYMoT>4f_oi8ku&^Xiqd]XXGu=X.2/Fs!hY1b^Et\;4-p!*n-PbQj_='QWZBOQ2Amk9L.,fhZj\jV0+f/*9g`5Pi>8 %Q4gXeo;DKT/CgL$\l9B2Qn0p@TW[N(Bk$2l59q(DH;K;Gb1pL;L!*]0?7K5m;O%jY\`:cqhs6;L6[o8EkiX";I=)5j4sqZ\4DM/& %ai!1^97Rj?cn]qZ<(b`H/WE<emWQOHip,l-_4fM<cH5G18C8M!Fl(l":a(D/n[W,od3=)@EK4mSgKjnuT/MK,<tFX4YeG)]CWh/\ %gRPfMm!N@546^/HKD?L$gNj@nY?CBQ`aHh>q)kUunH>=SfHa;AmW]9gT8![[.!Vqa9`G+(%Zk0#4\/2u4:sX@+B:1B"hb,mGTG98 %#0jskP!,oRW+45qf'f/YLu7"dbL.P(_?Q81pEOQha75gC_?uc_Xd^V_E5t7pL$u"G%d$d4g28k(50;7OUf=AfkDF6T?DPE'1H'!S %oIequ$='3F"pK3co\dG^J0,?QYlKD%,@2OA?U8Mo;R_e'GC*4Ebor%5EQ=.fQPT+9cm@"&[nC,#^t8Pil3iDuJ_T7N"DC:(]AE<h %\OkaTj5<kFJ>uc4PtpRPU9VejD)1/CXMp/[%sIU'M#`aB)*Db@ZYGNd+Ikp=$%)VZHWGS7qgl%7XPY2$#s_7\fCWZnWS]9g$YWOc %@]@<`<10Ner3&<!8]/;nB%=`go0oaP$[>.O(>OK&E,ON--Q;;!mD7Qb?p!<,(T\*$.9,&j"NQKYSh*+N)t'uuGFO:>/4ugdpXc40 %k9n33Gf+scf1un"5n!(kmHD?:$=7nB`dE3o06UaB7I(G,XoO+0cinr9_&h]8QrCDXS+\V,L$9;-+Qlcj-:^<OBZh/]9-hfif[$Dd %dd'g@<2rEiRct3_@*Xdf@1o_IQLU)-8I98pWMIO3*f<16lZ((Xmbt"ekc&EkWc:m!E0+SNTb6$]NjfA*\2q6PK#PV'O.]DPVkms_ %<re2i&W6TaTUR2Ti:IROIi-IRRiA;EFJOhtf$%kmCE?(@\gQUrE(\m&@(S=cb2o3!k)?p!9uIn'1FZIf#LrGOhTN!'Y[i&3B"q9H %,9tNNJX5PG]iYRn15<H<(3'Y\FG'&\c5J1k6WpV@fe+\Zc,A=4RT'5(//tX;>\RE7[Z'C[S#g3J]\]Mo)2RToM1PI'OiM"lf!]:d %/l6`_H4l+\ZNE1:WtrC#0SduI=T<kabEm'DWs>d8j`YmTU_ca)1>3r1F_=m=>Mb8Rg:39@g]6Bs0S,>kQ6$3Y_hc#"*i'2.n.8X< %:2"6^bcI+"GeL)cl^cN6G+T$LU.V-F<s4m/H5mX]!3(lrck-)lR,Y@n3[O*lIJ)uH>JfO[[_n`QUFPc%,.b(9)_\'=JrV34!]G@A %3A[)]r$h&(du;-LYZV1m6HppQ!IJOjF%;a/Nbs:_H;J\C1sYZscX5(oYeAJq\r/,.BAF\\0)Y=6--*ae?#_r!PT[<9aQa^+?+8Cl %dUXQqZ-PdgCF(g!$WPt_(UG"$:knCq0SC:G-aZMKf9NeV$U\mP4Jd3-?fkMqe%>o5.c/u_cP5BI_rpVj^8dFjSpGt#'m"Tq;DpL9 %/JH0A[+!q*0^ORg4M<f5#nq07(0hjq$fhL5n(,P].]@7J;L'<c]X]E3pqFR5F+=q[+,3]s]%'Ii#FPH1AjP:;G%'&tUg%[EN9'uR %*j\m1E9Q<4/Zt,_Cg_?GNie2KN1:%^C6_m$.gfeC&O[*?CJMR/=i<aiU^RaqnREERa7;o`hqMSSj%SQJfo=BB>D@^%fH[Y&aRm`; %^CQK?Dp,bCSWa<4k.!0mbeWPDri]-DYM=FU_90)=?!!`uGN;eV2l2$*n+d\l_&/HI]QPtqm3Vi];MV>\)(1;ejsge-E&/?E]@8Eq %5H[b7!QL,E">KcH#1&6Z?;lDb8BpE*;FQNFc5@kC*5GrJTP>:X=*OlDh#@@*jYF0e<0PR+"k?AeirH'#7,2^lF='EnGV_'b"aOa\ %iq0&M-)[d<=WYX:))T6AY"#V`C<i2F5fgT*\ZL1#QN)O!Do*1Jn4'B=IikX6NoBE\6%(j(AGWA0,clGd6@hIE;*?ILl\:f\Gb]/p %ASc)Y1iPZV[$JfAjl:*@7a%JP;'ZUHs5-G<*#IU/lCO=kFBY]OJKgc&H[SLOV!Lcl$P]T0*qgYNVbaIqjac^U",3i`?kQgnfFK+4 %SOl)_e4\!hMbSYWSNT5EiM3&#h5ZUTVZB*f<d[bVob%)>c^4<X#p;gM\+CF(RDndc=*@@+E&ro6$'>OD^;4>C(W4X_finOG;H1Lr %1)E&a/9,=6+NflhA`U-Jkb3F%!%@:g(F9etH-WU*d+j<VW51%QD;b!#NLaW-f//%s5uaHld>'@?H58>G@k`X[jaHnf?XjJ[`sU.m %n*Y\>_5t%UA!OlN%%OTs?UfY&I&u_(A[p?6P!fm!"3#X:4ZKV`)hH%SD[Po`pG_laX78rI&LMu?L?mhjFj^V(H>9'^=hF0rj.q(p %5;`n9I",$4k>>^P6#Op0pV$Eo?NRedS]QAq_5)Id3<F9\ajS6o\-oS8+l[H[HK<9pENL?G%o:H^".kE4rUK&CA]U;]C%0sKd9kTO %=PVb?5irnGrF\*bEfNRFT"6c0Zn3169,;?>_=\5WG#"/.$6<^SGDf%Ca%/Ebn%gAl.*U;J@KC`k`1Lu;20&rT1).YeULqk9:>*%b %2-J\7VZ4q<&/JNVohuTka&VZubAfnbR9pEbg6\?fP[r.=k8.Bu(c+,IP`Cc<!'YJscqX@)"r14cn6'3S$PAt%a_Tg8CMIG(f,Ka] %kso?O_,'L$qoQ:G=dG]Q$'MFDXUKIBmC+5%1&5_bBPUR7adjS-L!-@=/Crpkb2mF))6rO1>_`aL<I9ST/dL!TA&lUfTV^C&.H#G+ %X=;uJ).b/t1NgIh.k"4LLbWPKB=Bo1F.3!N*e<"2)_@nH"Yj?FqV)S1I7<33=!%TBQ[\Bhm/a`^dAb3i"m<)dY,\;el"S.i4Rqdl %Za+@BSUe5!=>07?Ic)?ZZI4s@Wnd6.GXsW?ch%0/5BQ3B3?I)85ZZ#?`\4:j\Pg9LpjuXIa$@R>mo;!/HqE`bW!JV6DoWW3[cV:J %%bsZGq;4*c_/LpHXabii0Mh@se;_/<:0epqp!=Ng;M]\S2').mQgPGcq<]#Has"FXIVD7YNm3<*n*@%V&*[6%`b/#p--Qg<4ZjcG %7:D':,N9X--bfJ(VJ#:u"5N^q&33&bA'Y^<k;VSZhqWeI17gXQ(XFINd'$>)Ag_KLG2LL%=jXKjcR99lIFY1PT0;U$UB4\d]V:he %@AD#)QE:a!gaZ:]530sfm?k\'$u31jmY6!=([H.Y/@"dBh7u'iBoTeM<ZlMkB-)&nhj0n*ms?A(Sb,VCHSskc\]P_'!G3C#1:6%l %]>h4uMEkRP_h_;(S\hdE*>MO3&&A(X/5a(LcO$`^>m&P!R>Q6581K!o<%VF>E%.*oJdir?7unYaDucu)d$i>dl`05IUhmb.T6j;u %/']#\X!J4I!->>8GcBL/Sot3sOl&7k@+M`M-.ipm\!CpDiS&ROUAFcVlS]DHpCf8"FeTBL-=j?sJc_&=AfBhFnUT"bDMNp<q=4=[ %[9f]s[go'DOq.^4pn*(hnBp1W\[YA(&#0t>_^oBXOh;jl(m._hUoE'8)sE^)/)-K4WHj)U6\;'-Yk,qlM2S&2-`j]DD]f9,m&\r7 %Ip;6s]?`/EDH4W%6&f:T=o5D*DQ?brPf1[jV;6qb.;]o041*M1]Qc_PEc<Z4E:K<XNEX/]SrbPE7^b`CIJJ&uAB-Gp0So&m]h7sg %`kVfA^]&H&Sd6f.@U=,^5g[3p"[Kqjq%Jc'.?,45H,<6aacH20=)P9apc*YmBqGkK^F';g%uDf%DI?k<`&51('.L74CO)E*5>"9^ %37@cd0BM,S7F'.(;b7<2+3YFQ/*ui,;.^_a^YNPJD5_.7XX),&Fu&YD(ruj2"\F?30[M+>FT!`JL7;f^DAR*<<Ri>I^oOOHP_sk? %I`9ab<f'Rg;jTX4^?aR,8qWD`NC_Tck9H*WPoI?+[1T,"Tc8!&p>p@]#:3Vd`M=gtf\ED(lU!*.\"9ps\b)e2!#=iUMoC[;`3MND %3Cij1-&'-,eqPgC_<[eX?Q4+u]@!LtdGUkhj<t2G`@2EB9?Pun'p,$tr&I&tfaC33SipWE6cu!6<HPo$EbfI@8oIteW+';fp)a"# %2$alp&NnL[ec[DFd!L&*h,7+"R2+_.#$'61pW3++@,#I,[ahj[HTNYVp#IFZfnf0n329L36+h*#QtLeh#Z-nKK;q$e3S,(UT.+Nd %$IX,!eb3U+bH*$dn8AG?20fKUYL<*f2[]Wn;i;Fm%7DYe/g(PB9;K6WVQPmX7sU?b_'/%*$$Y%%g^3V>erp%KMoGYf0r#O3/;"qQ %i;X<kU6__u7c6A.o(#Qo[]9Zo'CNN.<Nhn9!<Jq)\ST3dV2#k75lf%7b>'Z#qZ6>aJ-$#.=X"Al+<LdVlf2p;IOhhA/%N!UJE'b< %[!#D8Qda1$R!UYY57X`'GSa2iV:3/SnrRDn+BNe:8nnT.L7I2b`sabAY:<*_q_BA(X1EIQ$05OC<dU<!cp:nm#Y?A6N.G7[Qg5)K %=^6EEcY4k=^jgk+H&pOkVq.5/^ThZR6h]3]F)IIS'Ge&E_S,7X@<u.e#H8VQNRiP\8MdpQ:A]d_(\3S)a;bZjZ(6;kbV2sWnu.qk %3)gOW#>j0RGm(S#pHXsi\*u;CjBW5=o0^?ggh:XJ5ZoqRK1fgs<#0MkRYBN^5;$FJgen$iO&d)DS?m"M+j@Rq9/h)>Q>9VJ#k\Q, %keL@H]J%&X_F7fS=iI_9E[K.]6GNc>5ipO-/`ijN.-QHFXRYeC/@o!G0H*I9&fq0hB&V`t(rN@6T*f2UVh1N3q)&Jg1,p](<&IE7 %a]-4b41D&!E]fc-nL^\r'j#DoQl-`BWbZ$JKlmbX8+0(9V__jJYAS9uJplKVA&oLm;.%BmZ;CbYinpot>hLe'I4%On;1SK9OF#EK %J.Y$9Jm%DF??OB>c6AkAiqU[*U0E=1N,'^OZkp'aX)<aK1XO=D:n,/%*W$$mnOC)*j_debkKFhqh/,6D.GA-*K>L4<MSOr:h+8M* %eI&6\Yck)IX]EXdRJRq=0NtIIF2N-VcCXb4TBDZ5_A6Jjqu8q\gfc#j$e.Q&2IckCR]s8*#I&!Faj'L-hTs>ue[EALi!'LDN@TXF %hDIk7@4@2HGH9HoN@Ht<_\)arFP-aAd(U<I&bnDSK4/K38!](jnj[V04SQ6q!oID)9:;8O>[PtF*,0AuBc,e]jt0&7^4CoC:\VE_ %1do@/CL;cRBY?ae/KK\O%?<&ACiEa"4/CZ(\=^r58O;$=O*#WMBsY>]fbWoF>^38d8FCkY:!M;qoD1fqWXE5L0b'5^0qHj*6F9\A %K.lRA*`+5f>uE0jRVJ\g:9nGU.T:dbO:,m8Rp>'QhK[kCq_qCi\XE6+cX@_3N=47(qNT+?5_T&c.d;@"Gh_,+R<^[,\FE4:XF6F( %^8-;%TTm+H$26$ZJO)#^kKG:Vn,U2N1?].*Oc0&i`$1VuM8f(AQuYcA5DnjmNf<._#r@!ZJI89;j,]G\m80po_P-i%0uJIAp6TV= %A$d0=_Mu3M>E$l@()*``)6PnA;NPcRie]/l#L;V:q1Ub<QR3#^"dq4g@TXfkHM]s'+(m?\N/TMR,0D;Pg("a*GXR@aO5U;$Us\HP %[56;)/cK^.[cDkgLbg`?arEW$Gi-s!%R*(DqBOO1c(A&Aj^)A`2\sUN1%*GPXD*`[poq!F1ILVo/t=)A92)2eR\-=+'JgTpj<0#) %U(EKWkjRFTZ\MGD8.H7?pEQ)N&X*KCR..$W)H`)ss+Ft*/,OIB+IX5QiQ*[6/&ZPHNDCp+aqGkP!ldRh1.Gf8JK"%'>fMaJf54/* %P_dLT3L&/i\<m=#M9?lB\OJceL10KfIIIq\bq9*CB,Q?E14GU&ASfk+6PucRc]"KKmY*B_S9?$Q&Xp-dD$6r%<VPs%#*=%F9d8<m %s4YbD\;-70TSKT>iJc2l1<eW^5.'?mc(Kh-Z!0tV>"[9-S_#efR\310ZM.&$=Gs7-\TuC`q4rNB8!<`Z<mYjfYZ\V(P0?ME0rojN %(]m7Ln(s]0R^dW(Lf@gjpd>WX_o':Q=mEgq)!6Xc&WL)1Z3HNF`hZ)NOaH#j)6-YmZ/25KUN_[Rb[J6I*<LJ6D5$:PX\VW"]%XX; %0PV3e(W*$p+MPg_YF3nKLI8qo,pIOFk5r@<''a,"9DF)QAu'n,)ONd%XCs)b-T4(X+\63s.sHd/^I^(SU;GO-\YSQgie"WBKSM!@ %oXu%eU#`T]N8G//A$3f1E"7WQHG\r>!ob`JAe$%#rqbjJ89W7oqP50]"HCqq9?-C!TTHQE3S7jRnF&u)/$i>^Wl%]Q9\qNIAh\9P %C1=OkB\Q4hW4#4Q)mY,c:IZ,0ASX!$l0hM0EY]uq_IfiXE?46Dn&ec:UF.;$Vic)*nn>+,'1-<V.,b%1!M%/BVF):>/9dE)9Kc;& %=Sre"!IH,=5:jCa<'_3%%?N"pV\l/0:<$$'>aVh7A1ekHI2V8WS9L,]Se4s=+Muepa6I3l<$cTkUhOPARsAI`P6:A*1@^PoZ^,$2 %MH^?G:efKHn&W^oj;)OsAEh$VbU0)h]?i*VYbAA"2s"7D+A*$T9%keMF9Mq".g>69D(eGC0<XeOiYTqe2*\)rg7@/S6"LpSZ\BY8 %>M8g_X=)Fj:Sn9mMEi6$:)jlfs/\oV9$.SP3qUD1+Wu\pm(6IOQ$[>T^KShpkS!XpbZEIRU2p\D.E=1oZGm6N<7-7So9QlHc)S+r %$o[nfaL7a3ZK7!N%%ECmE6H9!U72`.].d!E<fuK"1hZ#"OBJN^f/,H/VI7D\*Z6<V?JuIH$PC/k`7BPJgQHM0<*fp!JY,F:orXK[ %UQ:RWY_+h:;[u=[_;b$r>1Cd4*7.T#SZ"@JSB25F<![AJZV4fB/qRK4[VNZ&9/0'8\,[jNDnH`fgF)%X/#_fZNf$H0!&S%3!@!;^ %=-6i&$'O5R&pdckk/ToSQ16>Z#Y[1Ia^c!@]4Te*.e-,u!VLnP"*9[p3?ph5Y,'#I!RB_OWEMiJ$p`tQ*[jmR2p7ZCNoUh/.)Tkd %/CAW.*]l`L88$F3L0ib$'%niFmQ=Y=ju<[q@%"tMP5G(`!Z7ATB<X_)<[[K!VW@51o!pU`DfB9S.oB7868kR8Z91\4/`+.nUa.`h %D*mF2h:6>=c^AMAqZ9.82?g,/,*W>[@/ADoE4_!X*R?!?FOZm/h]in1cJ?QB[T&IEKfso>bcneU!a1&aFGb3`#8O=/C^i/1hKb'# %jXC#%U(Uc*&"ml+rkMLTPnRG_[jV3Q;ElWS,d#%K5I`+-'GmoAd)`.:8o"&OaNlsT-o`TYK'.L[%mUJX?l=/r/j'86@*sqPYXeN2 %I),he?=_BJ\F=ic``@B9#K.E7La3pF(Z>L'q?6A.T-L\2:d'K'iNMqa1GgNGk4ldPEh?%5,KjP+(aRS+HDcr7cok[FL4$7P=O*$H %Q\\OaJRrj^C".3*I&4]QEqp)J@<@\,)K?YmRU4p[hNs1jo9`X(WB#/gJ;fsbl&2a+%_%,(#<n^p$HQmM/ZE/A\EKr>Y:T8HY=V=2 %!(Cd"Z'DrR,P`@s?Ys3%Y<1].od?#V1ft^;>^`jLg?sX`Y,u0*bJ/UI9(nnZ.Po6<Lg)>109RR_>h2&]Zf&6S+ua&0CUFi_56][S %r?d%_HnD-NbMWr%VtV*e*Mp&tMD&c$[sDm-lg;ZIT*JC1q_[6r>gj^Wa1I,7XBQ^.-kL*D5he"h"!b`G44``XljOKT&Df3)]>UV* %dG>]WA-"`j,".,YUK"ESK2<MjqSP*5P(jEe"d*-lJNXccHp;D=0D9aIe.t"jVNmXiQtZF]0@og)W_8ia2rZ`cAj%"hN?H*oo*1fm %feu3kgUKoWmpB)iP<A6so8'E1`mdcT`!)kLXZTT@ABF)]Y_U<GdXkGb`C)G@qcj=/^sgp=>Y>9<Sa)WV>pK+#6;;CVRT8W(gbm6c %')iUH!Y6Ar_*;;SQRiJ5cg1kgX>*L3&5g']Cfg,)N=9bboB'&5T4RaF.Z5f]BfHHC"2ca9G0Q<d)umT?cIj"m(?#cZppGT6Qj08` %SG*q1Pd,)1X;O:kAcq),'Ih.\ZiC3WP)uNW/>R)H9ASF!#8U3,"+u`87"G25H"^2WCiSQ$XWC?ZNFKYNedRRY$XjRg\62uU?T)_c %MIjn'?o3@fQd:C4G<MJLd=#8*Wi"KJY-UHu8,8%ZVJP1q%:1.(9oDcS9,-"JFnm48R$Bp47aYA;"nO:O"Sr;UAA3N/c3MjRq@_Yd %!hY8MaIRF2,)&f=FF4I.!B>ZnNX4O-O)Ziq_d9&1BCIN\GF3E](Ip6a_8i!g)j\LVduu&MV7&"_jX]%s_+gFHf+h'4[[Rp-bTf+P %gidRAR.c;%[q!!hjVt#?,LiI>mutC8:LoM2\p5KpL><$9e^XD)j1U>%e[;dg<@(SMX"p=rG1l>3#-Z?`+3CgQIDUpcTZh]B#'9+4 %=!5CU&k1T`fOY?hq"6AZ=`?/I^M7K.X@1,bT'Sbq7gr^r<30u]NP-mQ2%@"b8'8:M'^'QPK=.>8)mHaj'IV.dkSIM$IHkB$[C4/` %m,/eSLg+#D`HWi][1'R=>$buMSEdulr;)f>;4GDe]N*ejEd#sBU'D[TJn[A1&cCZ`ac]qVko(VMr-]RXeh<oNfB6=q%73@a0['%n %L!hVO@g>R=[.nO(rrr2j0uM,PQnr6fdaGS&?N.Fl]3GOb<j750XW.Go/*.V$Q`66)4lHAu!I6'=S?m3*F>gnn(0gXF_U6q8#@gSB %cl^4o,s6=P#6S9C0=f6e20a8M8!Q`l6L"8W163V)a==HlUTVT:i;=<ngB,\nngj3#Q>3Do4K<@/eV7ralUWr8$7Cm2e_U3*F9.ng %5m#d^G,(d4I%%`noG2g-GF25-&cuG0q4p62"i7AN$51^[V/f403(l-a<-kYupjK2n]7iCNr9>Xm_g&L[9!I=7>Fa\G^6bgX;$YZQ %j-/S@2L(I65Io4Qbl_KL2FWO$fQ3O_#_<(D<*iRLaWMWQ=58.O8N9,q&hU?0m@GXIK>S0g`B'46c=eY[`EEeXT"+%0?>[eCAb(=^ %\uA]CVH]0;6<OZ-?=??.#0pkGM:T^B(:Gc[r;"aunW[h^!1Agr"lr!]S4;BL%GpjpS/*Kd_?p0SWCRVU6VO\f+p,l13^h&Y]/39` %EKr]Ra\;gu*aPPrJ4DYP?Qa-aO(&K.0LCB`NB4\=(M-BW<'"8)]Yikd=P1L+/R=jA1Mg(M)<8N0rV7iKT?m6S$Z0(*7V$+Mp.rFf %11ja^DccjV:EA(4e,OK8!PnY>X/p_MQHF*m],e%rIfi180fe)\0N@f=cPs=J'l-h5ZSIgHH-lKA^EaL:2mZ<H"<R.IgCB+g=KG=m %i_c"/RtG/&Y^Q+T^AUU_NeK@-VE;kEEghA$^WB:QUqIq-.L^LL9D%qS'0ZHfQ=,h9EHsAAH.TKDVm%p[Yf$-Q"RcUi[K4*D8rZZ> %e#$fagY0t7N;&3XbN?lHji,*HA<SRf8_2N,SjB[U2Xi]jS[K*((`GI?:fHQ]qK28"?OX7LVglkej@6HOP..F6LrU_K2*M'M40\Mt %8IdE#rPA"*-i?$'a4C_h#BFZt\W4[ccM2d2m[Oi-7qbCd6[Sq>;;9T0$>&@fjKA@`Mp6fG7[9Pulcsa<![TX.H9M*5c;&TgBs).- %SuK!gO16R*IX,3^0?45=l`>Z6TNW3,]oT>?g&[8(g6*f\&jVN[?n.JNR@@`"`"<)%fFkn)Na]aOPI(6#o_^HS!QLUJ)t0E7atGOO %,>V*K"W*U#r1lhO:-2"aL2XU7kl`\W,k"M^<I(6SPc)XT%<+J>rG;rWjudBd%W$_aGmmD=aX[\\S@sOOib^%>74\WtU/1VBBJ=4q %3Ol1*E)FEb+/d=X$Abp!^H@&!gQN%Hm)Vl0Z'k$r"K?Td*oSVG8'cjA\1UtCns,pGYU#1eQ4hP"%XD(beE2TtnKGI-)-+H]gJPqP %q#G\ho(U5+[&?hkTFP/T>URMYO2>XO,V6UEAUR7)[um'o"3#c8M!p!"Y3*,A7ZoOX5``1I-:p@<c'V2Zk<]cfBKLru1>pm%,:W0g %]OS[TdO:Nge\9KbbL+/t#q$Ou?_!(.J#VFDB*+*S_Cgb/:/)LZV-RRrlf+P^Dl`&d"^ap9`UBeI'"rpC!ao9"X\Vo,)),t\\#6fE %W#ob1R)^:9hXdE<S-1rGVOM,3m82&'B_pAP>"m3M_D<T<$!KAJ9ft;nf_.8$/FJC-%OP=9<a`T.Pl^aJm1k#G?P%1r/VPlb,#h-H %b=D)&VQcS&OK[S4;m:[jHT^]3P;Qg[r7bIIR`Zjs/9)imFopdF?oT:4oILs&6Y5ol<^'k$L-]1B(\0!c'C<-RJ2tF1M_0A98mX!^ %C?5WIZq=q!DY+t["<guYE2:U:-ik2M5/7AfpYT>?F118r23DS!E#1_DI=B#I1_J!YQn`0Mfkkc/lo&\7emTVkN.I")o$0EBOo4c@ %`CsIUNb>^KB-t,U?"N<T024(f02QUk0!>@NHlYRd34f-H?fNCdPWA>j>j/^NPDH&Zs'SZR]?.o8@@ng!Z<gl!S(g2>IcHI<4<LQF %a;n7P8;:Yr"A7W&7YYs/?-,rYo)r.Z/\N'j5i0`!f*7Dc5#?39>)jb?%%'N;J'OS-dkf\Wo`J03XsW2[EiZqG3Br%3M!!?Vg_5]' %q943Vi=uNII@;G?Q>(@f@h/b@!:GIjR5QFQps=QSO_2UJ@=,5EEr:OFf\\U%;bgtO<Co/<N8G-%\(6_C\\9G:M<6J+GQEc-:(=4- %gIY+cgN2LS2=rQE/JEK6Mhf<`Lpd/2KhsU<2/\hNM<D&[9lhK;#SsU&p"kLDf-_;IeBY`c9p#[aQ*l>5<ULJTI,g>t&aFt:Ba`5f %?Fq3:Q9TC`G&gJ4ZnkfWnl4\<dHBr7[!eFUGrjn>kR6k<mr*Hk0ZctANc"O3`"0H`"M'B6CcIC?bR$%:3k)'+,:iRNP:?5-hkG`J %'=3`MhB+ARgj%2LWcVjb[?pN-\)24#fJR6+B2eQ!@mS,&B5ZGjil6n<JBOZXk^'psG\$&d^Fh4.];'W[B$>m>M;I80JLfQ2GIe^: %Ii$<[mWsj#]lb<4H?bLc+94mHlV:>rH?UB'8r]/a)$D5Iq)gF;HSE%Lq?$9R"o@=Bh6bRm?V>gV%8K*A,N?OXofEom9(P-u^)!D! %2@CRt?JOkh(Fa\_5lMfJ/,#7<?k8"Z]_Y.hd%hHCSl>6_6;\W.OA<#F[PoW-TtS:`_es"NN).P/F,gi!`MV"pa7aKt*:#*;;A!]t %Vo<4J0t6=9#G0]XWZlL="A&kaE=WpS=2m?AbsYg7$0,GE4j%jj'sUi4"nf)]17<S?qiURp)(@,r_XaIr#A[:jFr6_f$Y(;*2PXrO %=qHNf==k+r[=ibaQZG22eBfC/&4nDM:MXoWLObp@8+ru2[W3OF>1;mlTXn<[.r*6UMIP/J\"ru'&MR'8I5Sb?hFn+6pCa\o2o3g( %$`l"K";f2L$sV>]cU-[Jb)Fs\=\Ao'#X-\oQ@!^7_$nOjGZ-c<\)baj.^^sahGtXF<!4'>dlrFO$gr)QD%`7e)A\k6pDug4LCie8 %[Y36_BAp?<c@m2!7CR:^Shq7HF.jP3*&a;?(kFiga1GYaJhEXZ)T>.WYs7R8hB*%-/sJIX56ReDV=b"u(ih42)_C&+kSbG]OMc2d %WJ=/!!UCs1j@\.cMKL"4NpaNr*9nmn!?c_SGQdh&p(E$U<j8993;4k^D`\rVE$Fh1IU\lSQ-?p(.0>K5p.;-G)u7GOE0La9Y7g$2 %`EFI+]FNG<-rWa?%Ef3.*G<+fKCO\8s+V!D7KW)N@tk4*cl75V?o^KlO<@>uJUlG>^IqY^cO@7Pq+j+0odO/SDMGcN75fq*i1@S, %ap^&rn`t$u?+Q&k/s(Wj1UZ[sqYQ^u<ZH*cKSZbt%Ia(M+-uH&7U`O&3E2fTj[B9Dg&fCB<7DUGp*=d?C(VAl?MBs*[;L2`E26EM %JAjQ<Sk7m_6PL/ORQJT6X@QLNPajVL]+7s-,U(;?9EoEF\3^hh`HpeZdZD449'Dh1QkXK[I+ttAlc96i\G<&(i62!7/kHkdBDt>6 %k/PnBgI6[^3oIHAFU3r_7^1-YL-!ZbS.Wq6I@iB&7_6@1\#3Ql8.mi?%[L/$n=gQpjeb*e1^_5Io'b@*RAfJ*a_I#U=L:<0OtMuM %8`cY9K1SP[o2XTGr/dM9@2=Jhk*AGWA/oXZ!]]@N')rl/WFT0OIuh:iY`fp,p3]&R%Z@k3Yd*AD.'5H>c."dFlK02uZg_Nj<PR*G %&6HE?;@olO>g#,_(e)c:(jbgt)9@,5+E#n`1HVR_*AhK04mZDBLE8.K@[t<J[F.10bUj3M"uMBnZG:_W:eJTp%L[?bP2JZRi/E"> %d$IuaGmSmnd45PK%U-.C+Gu<21#]=8FL5Lfd2G><e$Jl+q)?[CZGV[UIfHY+&@Z.X-NZiR#Kd3r8\($1+\X7fbE&.J-0.Ihh]2<[ %QSkO>bh;rVeN.%f#u0nmN'%*<b-In<aI6F/ZTFR)Z/_5G!R0kl"oEgbB[(L@lN"ZM<m5!oe?XUMKTQM8OqNY1/Qn^sN4uN^;5o(/ %TE$<2i`6bdDu))O&^hF@!J[RZbAj\qCA-XK>$:dACPlC+:h.U*eF[2\5jr)l%2"peW`IQ>>/A8e%*%L6oEJ)&)Vn#\B>GoVbJ#9< %J!-_B5gNo7!7XtR;!0eZ"uZjc$-V>-<fHHW>%*0Z(n?_q,ulqcOuT3mSRpb&kCpPCYjGn(ed7[\2%mJ(korED[Z7g<A.CqhA5ljN %)1LscmfEc,E)V@\&9*5AmrAY.1u0qo3);dCh;uj>i5c0Wl45"-qiZhe!oGk?C\"Zc""uZ33a^^3$Wjk2'[/PU!d+d=F(bg5.[^EU %ml_j^Hk2Na4Vi*+qtugiRWdJK)dDlqnIrl)7Bh,JF-k7;<D's<;mUdI;Y'tqOm>>K=8lVZY<hTf(j#O_<3X]Sg4FLVf4VEe]g9Tt %25U<U4N7jDT$Y_'X(ZT]i#olPWur8+m$0VjY_<'qd".j1eRQR^K!C^$-NoCkf`.g#DJm.aKC$G?6lBo[fr`(b7p?&mr0Uo'hu+cZ %]n2SekcaJZe,(o8Q\$%<@f)W<8)D&CR,7+mg0LjfnE5^]F-jTA&VrN`s$7Z#+4\/Bh#P$m,6XO!"7@jXBg#d3D/@XD"p[0<4"Lmm %&G`p9;=Y&A*9QX2cfCE*W<]Gi,fh$+>OU2d+46P-H]20<O-eL_3GT-8c2a2DODDiE^sTD]MX2MWiE;R,m5/CZNu/-[FN*AT!g[5P %Ei'KYm?/j^]!A?ij4p:T#imnt+!0V75i&Jk%BP`X%G\:+Q3b!>f5sKGaP2/[?VQ\T<+10E`:Et-KfaoR^rV,.2[bcf85>!`5gRIH %qNt^@HL"HBX<(VT-&Wh7j;YII0$4MO-p9O71r#ha^kP2`VuL6P[:&?<huOnWf+E.GFpac(%ip=O;l,MS#N"2Z^U\te:duAE@]]XF %+96La]kr<E[6Wum*\f0N5_3QIW=G#4b)hDY"T]Ple=8(XD.(lJaL3ngN^ia#+53UAbu+QWHl)9h%rh>C0^9@mmn<!J6_%TC.;Kd( %N^jicm-';r;f%N11]pm'(uY;[V/:eADX64I8'>C2>HbOqm49*ITEnpdI"E%DDMFD1gSXhs6,,1&IE\p"FosktFs%nu_?dFPKXXKo %mK,XV&0TYs\'dPaQ:`Pb^^.Sp2ATEJXY.MZFUZK]i>SAOCHj>:>N#9X!=OfR)7Z@/'9WMIi(b>A;N`o!$']%6$19H&@H:_6bVrr$ %=d"':JTQ#kYk?r/[X>8*[<gd*/d`^Wr0)9+]W1N)q\$(F7Z4RES$WS)GLH@Q8]i;qOW#;nYD#D2Y)Jo+%[Mpi,M_$;ahVZ@o>uLM %+9`ldh]KIK;d3(FpQg"O:ThdN'lY&=p5_f5'dW1o('.u9YTN_T'j$8P8c)l770krq<R`^c$BPB;86udp/'L$]P*qGDS'<u4;-o;4 %<,kET:<!F)q0&O<r]-B6nf3csnAcg+M#?8leCl\><93HZan5tN[%\Z,./sTY,?9=n6\#oR3GFpO\:_0Edrd2!(,e4f=htNQ'WG;i %^B?O5'kIUHKh9Qc-H$Lf6'5?DoUt,*CF@3@)H\ZY+F?rYI;)mrP?1"S_Ya`E93Y#*i$=QhVP0Eo%2Hc!kZ([H='-\L]m!,bS[!lS %^n-c\CW=UU!T/J]p$6+BR<rL/O9cDIf$"kYp2n`a_.h(6<*PY(OktNp/eMmjoeF?#G`:]l%?)d1$*jd>,PC=nrg.8+q52$sa2>RL %nVT*YpBB!i>Fb3mgbL2EfuU=<=-V.>d2@#_&T6)%ggN^L!/-^PSj<rb@&;r;N!Lel[U#)3jp06T'k<p+!QTSO.U_pWbH/PbJ(n#\ %CDqi/[m?7e"cCe2>7V9YV6?@E6bdK`2h'Lq.9_S7P:I4aO'o@g0+hU;*M"/JP&]Yc*AGnHF;EKeiDkcd4KJ26E\N6K8-H555?T*6 %YscU+G*0l2F\1^FHAtb>SG<)fn?bCbbFl.s^^Ghqh"J%=!>hUc,afIO[15[OZ0g`0*D@Ou_j:UeI6e;LMh,feYTLIjm`>A):?;g_ %%:@iUN?4IAa>_kkm2;QV>?BTMeh$607"o%6dg0-^RVcI7G9n3Ac%$26&g2u$JLub'128-\mj(D&1j7+H4r4<R#s[Y:;#S86`PL.I %qT?8+$6:\e%b>21.2A`!SG@6%8)%P[cbaHHn50rj0mm)19E-kPf*#g`gPi^dgB7utg^Ftf&2&I=EkYL96m9'Alk@Cb@m:!H._riB %\Xj+,WQph%q9e/j[CUee9<,)R%V*b-&A(;rR_,Q,h6--ZgTc>@,('iH[NW]-r,Z_3;9?^D#*A0L$U;DG^9n^UCg1^>[Gh:9rAauh %!LA"Mko'69"Qt>Ni3Q\?gVX;k-05o$&.8TV3)Q-!5"[Yk%R[A_+;>rH1JsJ1@B!@C[fHCbolb!?f<ak?Td[$IV'=5sIb5NpebqSj %F[3^oLu<m2ksL>YqWMSeYlF!PSg%dWE3$!hlb=;JU@Tlf5C`<n#^")Ck4[i$am=L?.>T7W9<WKJ5P*sS'o`;dptN6$Gcgi_!;JF" %J_$.E<C!>.h4HV,$Km\[MniW-pVF\\52$XQRsBE60eUt1lAk7KSO_)NZeaB'7Nnu/f%^-H;et(k%)0/kSK>4lVaYDC$FV"?gm*oJ %)I'V\2"5*n^VX3Z3pBP2^_lPD5MlUj7^O%m-O%l<,bqc&OaS:hZ=r?tBjaM41KP'2Ra5T-L,K'@P5G*CiH*\LiS$lB<0O@eqII+Y %dO1[n:iML9:PVt3>Fu\h^]1J(,kp%7I/R>hq61'DcDbB^[A@TF[H/5T`emY7KakPK/;u53G2`-$mX:Qg9,XSfk:g7m9q=f/5Gh2L %ocMZZCoo:'nD(Wi]SW;t]a6+II-\`WP)q<SkLZ*!>jF\,dXqU*&&)bY".<&&-(lPK6lb7Pb`HBdmoA9O^6,U[)$Y/s0#\%7p7:.) %RfIbf;TDcbNU5n2'RoAjV#$lt41\N>:*4T^=U`?$)c@=\a7YKk?-AiDPZLULp*RnUIN!>Eb4N3=(doIanhuA)'VXl>>Je'Xhgt)+ %oXiT?l]p\"]72Ocf"_H[4eQG0l@CogIfeq5LMdFKZ$]Z&Z(F;G6%0fSUG92il9RFilRT2N^;;W2LHW^kf6,!s]EDf,:X<g\_OFgn %Gr%g=:+OC$ThV\3TZ"tg-"@&4`r``Za/;kOEF45.4rHL#"Q;;Ckt/,:9W#6<(majFd8n#/KAX%d206+s,6FD-OPZ9ZAd)J>2I)I; %6+4+?qq$;.dUZh>IBsL-aQl+Zd]Fh(kT;ML<@F;E:+B/u-WdA!_E$NJ@`%_e#fm#IpbaXses>58FZsEaj""^BLrSYBI4')/#<bOu %3Xl@=W>,jdh]KZfoDCm>akW1*/b1;!lB-j%9TTNF&Cq7j:m&Cn752hr'_'2<FW)&r>(OUgD,rDKlJ;eKZZ&<#/*B478C$Oo(QeN0 %RWMUK9kqt0J/Xe*C+`5Y-fqcMOWA58-Qbc]c<+S+]1=BG]?;3Oe9u8GKCWtZ!7mW>.!6T(m0mmV[-2HmllSJHcHg-)'%-IDqA-`d %*;'hZdG$j#!R?ns,2Z`,[K:IjZra4%-*LN7T6.-L2M__'JCh/H+FA&DF/93tC[QFogSYNL:4pS)s#r[0aT9Q$4uJA+AFMEj00fW[ %2!(a>8?J1AiBH-%*4+=/P02keOG>J*LpU/9V5AFiB7[oDJ=t*f?$$S=nUJQqDf#e=W<K^OP^k"2m2u4sf06cr(WZqrB^#SoD%gkA %>^#"V[3)Nj$ug'36PHGO<Sk(ffXWD<4gJ04gKLcII`TD.o]nhp5)AOLb#,ihJ_@.,nYjcp0"8:=Ig1=rrd#6nmC,5P5gRQD:69\1 %o=tVkNU59SI0G))p([pN?f;mC1%j*F-/s&],?h9YX9m7$X;8/@?iT$(qQKqliJY`M7)<n`>Wm1UI4`FeY[`1]2-tckQ[5mmLu#K\ %?"=B:$mUhh[W;ciP(PJF*_UmBh%bX2%:&W4jDnC%a.m>nO4)IA[Z,j:TZf;dN]RY4CKBn$L>*#pbe*q.;Ks@mf`^`aDKU1MSaM#f %^uA.RUmEu8!uJ6u-7P\.a0$PG[n->)g9E&6OK$*=DCRkq+g4EiMcW`"4$kG3n23Sk")6]4j?eKo8>FPBHJC/e0U&<a^aLBK['<^3 %SnM^b=l?R6WWpLN*4aL:QbB]@i5YIcm6Tl\P-m1,N_*HeD7"QAI:+Eo0?QQU/-&u/)2TmFSrjIV3o9):J^f;0-ED[\Fb!*qXK<P' %HjAPt0YA;452%45ZZp"k4H:__ar=FpkZ3K--?&/i-&`7cMqdK2!KiOb%KCAEr$%ntV-u)2n4N!%NNB5dJg&+=8XK_Hn^-3Dbdu3a %?9Q-Y[?*ho?*W<n=X.`:"Dmu?=6:HJ0Q46`UE#_X#Tp;f*+!pQ$QY%.4W?[n\?5!ii`m&f\:\uOa'[Y(1HsEi#:!%2=gHbFe":8t %/I4!b[Wb(RAETH*.+f1HE$^'hLSf[rG7EP[^-(2_%c7\Th1B.YH%k55<q&]LO2]=43qIk4&)\QN,m\Z7gc'Vq4mc8XbT%+RMM$n7 %_bQ#5T(KuTi4_<?LS0/4m'9-](7)6b8CVo;R"@tI.%S'#jb!<[Ec)?o+FWuMIM`T)"V^i3=k3obs"psF$U1KM'(#-Sji9c9LNb@q %05UeFJd2Ni3rlG:OumqZfi+!=(kZF^1'Dh5]U!k+#LN64fi(jaZ<\=/F=d>H=R<S*F8S9YA@1X3>$LPs"LO8\/)iSY,YO-[->((A %UkIKc_UTi.m\CcU1/*DW9?J^8@8qVlTV$</7rlbS-%HCaHR+"oHLqEpQBN@Xn-k5p-mbCkNDLRfKJP8q"GC"bF$1_q-FOj>V<]gF %q(>^X1D$Ci/X/+*f*tEN:ij@jQ>=uX+?$QgKgKcI^r[#-/)6()\W5`3[??6:fDcTh/(FJ3Wh,6$9gJBEWnCKb;9VgGICb'9_OSIT %'k@/<@.oef0]KiW,+U!"0\X\tULg]G442-4JY#.SA(4c,.`&9m*ElI=m:&3<Sbu.ATJ`tKUGCA?C7>9,:Vf0KLf$9taR5)RAeZpq %,j%jbA?-:KAh;,#*5L>p(t^'O!.L-4.cER<EiIkteA=Q'K#F0e#hXh<NU10sB=3@ml<(9ZPK^q[jSUl[!5,OP[g:b<!\/jjU0*Yc %;L'[HYIZ2/p8gg^1(8PA(3B%OW']XE:&KC4^4*6tI26Z1'I#&r,n[/A:@`dOh9?#8Q!1Oq%r:,bN+sRJZaRQ3gc3r='9#&P01Q'0 %=Oj.P:m_N/crVVlBrrq</sI14MV8Z5]p%+"5`fV_8@Op\GE?!Z#;1a+FXM6f:!>$.j?cqN/[,5=R-PFO0WpYcho)ue@R2t5;#ddI %+^(XN+X7$"?qfr9d:8tIpO9c+?Gc/hDr>fhK]e+N2\N!2Pd7Q?KIa+Ceril2#E'19O?Ijep[ZBl9NYVfh5]asdOh6.fWVb*!<,iG %Ysef[Raue$0H"/c!!*[o8au?3Dq]XB^--6!_#[Vp#Gj'M6gT%E&ARBb5Wq0e^p5r@W$h<Pn6G:$f_5l7A8iGiq:<Eap?/%(TOor_ %E[J+E33V'#_s3gQlrONB%]MM@KnN(P-8Uj-p$un]k;35V/u'HAE`<EN\!d>*.L4,6HPp*u]mO3pr,n;p]pCJE9A^kR>-=FN#e9:3 %9SSu`Mu2/en"!*ZCaYg^O,Wks"Orbk'YICn%GkO/ln;a4XEbYQ/D>GP2(6oYYSC4W>>(rP$>(''IGL/(["^0K"G$$\^/T'`)MQeK %N#YmMM-A0ZR]KOr(OY06q(8<SjcD&@/u,_Cc'7gtdOnX<dhJW,6.S>d'se!Qj@?ET@9]YS1[k]0*b$t89I("OH^7Ee=*RhJN,X<W %$J65L_LKQmKHTn]bcu:RWT)0CRBmIkm9i7(8fj&uMg%kM"t^+-`>*Ag*j(XF(Ce=!7CoK1E:>Ye1aVKV(0MY^L2#.=(k7k4+LN5$ %g%L;iNnS=CR1OqWA19Rg;43\0^o*B<<AY?(Z:Ar9!26^)@!R9)1`fT1<@W2!!1f*5XFXL3"??[bd;*rk?u1lcGs(GP]*.PN#S+nQ %i@UAtMS%--mWV\D(Q^EW,]0'.S=mjX,P,,O="OucJ1Z[NVYu>?U2#U/)eK[T!8?nJQLhW4\$jr6V$a__>"7;NGn3f7;"XCj1)F>V %+:3R$a4tABnhc.XKbhXTj">@D5/a_hm?QE,5RJo!a7.CFl;`O:#'ThKCg.$gnn$l4hI%huXEa,jPEo"Q"#G>$Z"#(Uh6WE\W"Km` %Rr-_7:mkTXMK";Mg4NaVa^"?.k:!>J`B#+VS#e6F(u]lnfY_@JLrRN$kaAsdCe,AD29BAu!Ke]`$"02k'"@NT35sXbPb0dp\+P1# %HduFF9DJoM5Snsf6Y2i(dP@`$=;Gk9Z!=1EmYgf$7)\ch7'QY!P*?"*-]H(+aOus%CqW07Xf!AV&kmVV0,TZnB/sChU)EsrPn__a %h$D;PDaEPri5?WM0C'@+4ENIJ/NPXKeIWI'<<S>1)AnQWdI'_l\=JT9"r>BY%cW2"O<-#K0BW`!^u2HeT']#<6/K*36nmX88]s5" %jQg<1cNB*f6E*VOB[[iWQCN^b]@r2]aTn/cG]bJ_-P?U4Z?u":-g2\,iIOqt81IBn5h'j83=m;4*pZ!1C--23nu2KaR+n?AW972M %JTr6P[&9*n;?W5!EKNpn9\jRf`#_pi$+QpIr:JNC0J&sqEH%,r#ZB[`pc0@q7Z.o'<hbJBR8d?O\(S=@@!(S<%WY\)r>S>nCQa># %"eH'5CAEC"<!EWoQ@c)HpI"V]j6oZ0&coN<\Nsij<?#"09:roCZ8V4M"$D48,:ba>9?\,"=*fCDK(^<?j^#u/3#.?t"Tdpd!'`^1 %Yn[9Z(t"I]&DOaEZ;?f8(,b$An.=Nao;[G4$8hgP4q#*i@CYTE&>eD+>HS5C*?_Q#$C8[8rG]=t5=_QcQHD\95]s,+aqm"(e^PPJ %V"'d,"%s:kFGR9Q\6;C():/ajU066g2Q$A%4B>]KQ@ZqZRObpGJ_!k`];0<`mA*\-GP'CE5e9NJ3d:BOf6gWf8ThNJ3@8sfJl0F_ %K6bfmk_BrXG_CZ]6u6s5Z)j&kieqj>E>Ech3`8%tggFQ6e@*B4\@dHhS?W0ma;m`P`%lAC7`M7H8S:Zg\FW\T_*\MGRbTsN(0$k8 %mK)2'FlKsU,Q,\<GQYd0HA/U69$G-nS=,%@dQmd]4](W3eeth&jE84O=69uT%R05a0JM`9V"6csd!bc-bc(AH101E(-`!63nc8)] %@fr]9W;qk6J!eV<8Cg^&81ma+lRCM'dP2_1]iuU.m>;n!=hh:q@&#2ArU));]]s^DoZ^kG[;XV7$-L&^K".!Ch&hAb7LtP?ci[O; %g0j^fHsmH^,#N<0="ZrCUS=r)q`N&a+/**3[.]9#g\F_'OojoW.A1"JJIs%^$"2,;:'537HUL=Z-$_!EggEgUXWsTig-fJ):sSkJ %J?g$$d%jimb^(j3ecD>@J[NF32-VWV8[>nfLK#rf%on/Si9R/UK*A/6Qt*@qR)_#f#EIPH^l;_=%sU=D*AAu:,p8_=D`oKcPkFmW %f?SF(pXH<,WZcElaKfr$!fW,T[=cDYaZ;2_f[8?(K&I+-i$j'E4"PCH?FU!'SUjWbQ:QVNQ;o8l6mt])(n$kH4[L4_>/9t"0P"Cj %c@RR'V-UUsb8NDp$`@EL]rte,4>s'QYXU7@YI2mm#($G*Sr:.s]YLF9!-9s$7Cctt(A>7\a`,)-mh4]!<:KK1ZN,%\mKE>6F&gA+ %`f@1?H'm>(gWn_sMpVMdrOUB:05K6)#)G*Nd96_[X.7gD@%=3%k2KLL8[.%okp3N!L=KG0L>O[FMjC#tZcUAsZR>M0OU5b[NsThQ %NSsOe@b22!R`/pBN#d<N(jA[\=:okJ2HU@`]MBkii/:fimhm[K,Eo_BK[::g]Gg,.X:b2r81`Ep^Ae.;_5ce$.g-u2W8IZNI`;L[ %8\f^T$Lh56I0^NlpO*7,LoR+uLuM#d#1a5I1O(S9od7Ihml^A'.,\]F'H?]:T)IZ/N%Ko0k7M@I*X&V49X"ua32`Nd2%P1Wp(hJB %EAG_ob=3+IS8,TSE[$"l%8Ngio>IQ:'KM)R><mU[_]0pDiM^c[rY:@1QE/"T&We#WfoL!="rOEpbbNcaAc;skZEAsOb6Y5=k0Xq+ %(5L"lYe"QWiaO6mb"BJ9r0iq'9\LT(lZc/*fn4W7f_.Vhl3f]j9^caB+Z7OO,=Z;1\"R;>JW-Pom.'H^8X^1\(>i!0,%B,+;r6Kn %7bBePc,@Xg:RQbec0,c/'>K"P5lmTTER4gH`sDbl3O(:5.mRS`B9J]p*^'?Sa-l2:@">Y%k=SXBn/:;ij8En8-C#?K)b^@;B1T0t %Y'STe2/p+/_8.H5LoVr3B1)tUIIt1LXi,%)a[uISK&(6l]2$rtJqP#;]07Y41k@TAO9&7p0m41@D]n>R!2UXXi*>\oW@NmXH<T[@ %?N!:F/3Vo0]a+,6=GWR\!:in<bVl4?N@E>P;?1kl$97c>&b`0&#cT&/09d-%e8<+fkN?dWi4PI\$,s\YG]1%HYOek$^:YnF]r`O7 %-K;]^3HR^^lF+S&d^N.JLg/G/i#/?!d(j)/k2$:&_d9XWCNOu9o30Q9XI<t&6sPooA*It,H;"B`eFrJb@)a^>ptN4^W2#j3eq<6> %2)/6XCRW:TA<A=W`OK.lg1IqXOpNfOjS+7VSB@7Dlu">TRq%6%pH$ouBe;RdV1<-,OA__(2G[5u0?*&Q+N2X7iJkKG%F2VA"IH2[ %,R`L/n(c=8)0S=?*eR[;'W#sf+")4!aNNTen(a!4rN>7+fU9L&D:\IZjDBCL)-a7B0V1Zcoj^g-47_ICMCf7MY1"-LN:G#8[S*fb %/>$onR(q/r=9n7..-7NTMn:#p(aajeUhWPeH_Kh)gO2`<c[GqC0Am)^D.7blS4QKWM@M_dT5`.8OInnBII^uj]sgR[9]iP4WLLS@ %oCNUJ0r&c`Ja8G_.\PV%jNiftM_$NVF1I65FbI!dg]Kc;o*!]ZA>,!YNng8BUns@dJahQIm(js_@l3!g<Kq^J[DW!0Hrebu.2(\J %ZD`UZ-DfGG`IMUcbRY$Fb>;3nH5BCc^4ClIB;u&!Cf7Z@/!uh&cN:h/(i=-\$>OIcf0,`"0hcA/d_F:(J@.,@n,5X[WT8"S>MTBs %,7,OT,N>Hf2,0jOrCbmcLeCD6l-%,,:k=Y/@)^^#%1i'n`sgE9h*="c)X)'O$G^@)h@l;GjeCVi)S`o]V84@K5R)BgYQ?n&Zm*'2 %.+l>A@>b'$+j>!bDcJA;Ts",.J"Ro)3";t!N8!ArohA57Ep1]/,7t(grO1t"?j-\Sq,X+\%a=dRZ5KYE9/]-TmFht!?7';cL9PcJ %=p"h(qk(ZK<%EjY@>;e/DQsG@R/fn]KCKK<`Z+.-5-E9@3\ERk@:`"to-/eP`P1<A,0XI[12@enD!>j(LU+rLTQ3dK[)$7e9c*qd %^-;D/<^]>jmLA5PQ=+(@)QB+E8VT\-mrI+LFlWi!%4ZZj^<<HK=^Dkj7"iY+P+`4`#\S%Pc')BoS;)d@^grs(<9>*c[%r6(OiMFL %U=n>1-jO^ed6G+'<d3(9p5g@\fk+QCGVO7,-7)h)2stu+^lF\>.CVj)h:$9mmX0H=X`upB]J=f;(.&gFnBM;/dU(SGQR&T,36p?a %73pA(-]stR2M3SsO)%#rAPQuWWN0Y7LMg?Ko\"-nLcS_\YT#M>`/5ZpV(Q=21rd<*1)MT0;rqk^.55nB4,3Ko(B#hkhBKq\Kp3[Q %K$kBu'$T4e0gP1+7()<adlijCd&+HDn:r#l7K!1jQ>n%Q9g&J@TC9ra5gt?a28#;A^u,4qf6e>O=m?/?JmVPqFgY7u-9oQkPQKR! %U>if8g<D,s_FcC1@H:0]A\k"$<m&H@j#u<@^3mOKColPh:*'.\#R/H`\33BK+F@f)a\OGhj9*mT+n*RSN/gJ)?qK8&?]T4DeB]oq %V74\8Pqp0K$;m5+]sKp1LbY>BPA7sMFCk<lOVZd7-83&DnA*89OcT=:E-rsGJFju_<g(C#I]JdNdp_=kFRXkGYt9Alj,n>MP3l2A %)bg=mIIg;U!tL=_JAIS8RFK&HjROur/>?)7*tYmT)T;4VE@5IZi5-s#Pt*1+eXBa/!DEX`nHtn15Y&qf*E"gcEG*3K1YKK+>'0Of %7"MGrer6+8;c"s_cU%7)Gp,kdMcW/!4s0JkUFDV)(F-Eo.p0T_b?nE9j=V[TJOm]3j7YnBb_Y''\@&D(2DY_KDV#7Yp>SYgh5MMU %_m<dSN7S4\OV9;tO1["I'KfJS:I-6O8k<\=K+).iPXl+'eWJ,#R,.p^.fp8`X$,*f/%So=J;i(0=#bf=TaNj%s3P*R9F)-3#D.7W %?00q1eL?(<"M#5aD.W4]0Ru;W)t$D;%1n48#kC6.OIL%-`T\@Mb4LgBR=Ica[?S3L4F.2b9CZ-?Ogi&:aE&@n-=FO0@YO(ff,?)b %37/8/FQ5sKe9lAY%L.X+n!O.$a7?G6p!Mc?R?.7n?nO:8Vadl!B+?`fpPASS+3=qXnY"S,6;I/n+?B$9(W;jY+!)FA7Hk8/7O>0_ %SIUEV7U`#<FgSh"b0-U4QFa^R4NZQE'oDYBLiIC[&j=Qh&A0N+E((u.QDKI5"caQ^#;:ZFp=h$AH:>]Jh5sI0AWF!jIogo_2$WX[ %^Q1^KhNg%Q?Ca6'#]P,W:N(ncIKM30;S)Ydb,"[HVE&#t"<!M5c9Th;T7k&7n5Lt*cK(hf@I/MoYH^G[Y5cT6*#f&l68E^m"8@2L %W<]%;s6n!XrGS4HbHaG4n1;RDER$ABo14m'F&3i=d9)R.\=b\9g0bCFcCWo8Yn9CNL`B_.ekVMs,CS%(SYS0R#)[p4CZ!Ch#2Sr- %N1pVdF@Y6]1;6,"a:'XkWW2.VbAD+6dqdl$f68oIpO<`NHDJ3j62iQi?U);CJI)%=_/[VJ8(^>t/OM6*r:e5?95iLg#$/4u9Tt7> %Y=kiZI.B0YG&2DGWle;(*[iG?RiH%oQ3!C7?:EDp:Xr@JjTN:dA'2-Hn]'%g?HTJXa;d"d/==Q/oK11m.UB92,+u_^C\T!YFfGE( %j4ccA]hP`f$VPtuh';CG[OXMrBgCDBbuSE1f`+r#pf_"D(h^AmIfaf*LVkJF^2)Pc]gsCVgu>R<KWuhtfTMm[5US#k'!1uu5s!:Z %GA_\'`<GmfAd;urDY/7#s6N^4,lmEci*4R3!+2u(KS.cVUb4VLjC*8"(k:dMqZV;k<qcb9SB>9/MqI`ihNeCe83$l_e2DQ$dbI*e %Q#BjKiHQOrE\dC%?nYFS9?eL/P/cOhM*!rXI9&H;iKn_5Y4o\CE!%2/)-1)%IZ$]3<Z&\p>>glsQ4?[0>GL1]f?%KCD,?''1Err< %SVOudVtP2;h&<m@C[n5!ROooa2<hApWEZ$_V)i9_F>j,)B/KDDUH]7X%,U/1K>K4j@<1)D_]$UV!Lu5p7=jItEA)GDnEp<pWG-r' %NRU#"0q@^s=Q^V4W1A6fL/U/S93kltq[MW<"o(+N+F0L,p9aaA'_IYb#)#^762-/#+>>?n0X/Zj/1h`$CD^dR12,+Ok;h/DC^@5W %>0+G2_$I5\e5@$l.a1`+2QGJg*oE\r-''P7q>Bu&8='[lVlu.!G*W)g8I&rg?tqTFBBcV(BC(]CG;9N%+=7P_lCo&i`X5nD\H;2/ %gH^d9'9G^aZ@8'#Zqm$W)G<+t'>9tk8,Uct)rYu<quiToc)K!a(VHIX;T<l=0`;mmV`EMd(:\ujUk-XB-50Wc>`PM03PG;?jHn9G %c-+#6+GQ2_VOHA?d.GfU0jb3l"42;"/Ha"B"LHg[hFOAJ^HYn3R5!N.SD*qDWitt"C0:(-ot)cu=Yg/$o=?HM-?YuUfotfc]Ct;' %i#Y+8j%eHNW%\?'!3/n7q^om,!M$e1f8/a=5H<H]2'%*-&aKE\[u>n#ajH,`SoTV)XN8;B1fH7CJH'mn/2FrRg000T1V&q\cDN$L %-i4`#'notHLmIXE+Ko#8^4BOr3aOSV/=GlfVe''N7.%9c5V9V![QosYTQ=GbdsdAco1+nCFqRWU4KQ?b<\<J-$Fq.'gM]BF/S>)D %_0Xi;ZWddZ/#7;Q?hXd:-A,G$HWs+;CpRt"n:S2a?dhB>EZT`OjQ=noeE0[jZ5cN6ABP9m_.$r7Q5p"KHf&JOXkOX_W;bR5E)V'? %>n65BGqChhhIU`.?LH@2en8AqSor)PQJ<S9AYe\XIW=?8$bk2?^:6"]cNcE[a)t#f0^[g>oPVqNWO/diY,bK8.kslL"o>NdYj60$ %A,q)BJ&.(HB`l-YAU@>\3@Xb%V/:'qFaKBJYLN`RBo,LMmuP":.26<)2iqf?DoJPCp-)jr%1Deh)+]?#Qlfo#MTm1RDEZA$^:'8a %]ukK-IE%mE0eJUiRjI7F?WTr0A]SQensIe4$>'e_o_84[T*T,dilJuI_Eh^Nn&T!RRna3&@;==6'[CG(AbBaQ+qET<QbtqAUFKU" %B9[EK"h#K%RfT*Hn(,8N@GT[e$hB4,8+?+E!9jY+Qpr\34Z8=-$qH2`eM"?qktIaE&>*r?(YJG*<s$lH<d%'&*dIn_eW:$::-/VJ %!01&CC@[2EdS'I`#B@)H7I:I!?C90E,oG.qlTo='!Q*H`?l&/Q87VWXD,ol0D:dZhXPhm!'`@[LHk7ZD;f@SpHlqhr7+j!FL:jK: %C'C`CHY`Cgc%J!m30gWRhp_tti4N'<4)]UN3PP."hH!Bh'Q;1e5L\3?Q9PP[NIh4$=SSd5]%XZ0X(l&08mYS2hNah@9RkeFe'OF% %A59U<G,l._]N#9JK$/YlW!W4K.)T=H#!:8oYg`';@".SHDbXfF3@b/OM<^>Kou4I1(Dn[raPN'Y>[<8'&?OAbr.8>d+`/cmA0BPu %ROt%7/X,U$Yc&cR;JNK^oP.&7Hm[!73T6narDG"JM[Lu;Pc/L8<$s`+J5?Sc!NBd67%<D$79'X_1ObqnPGPr/]kjYC^H@24anclt %Tr9(T\U:cV48A9:gEuB,#8&UW0HQP-7<8@3[$ulk&6hKK%eBT5*l&25iN<,=@)P!\0q]A;4,<kc)EB2^omOdP+X#PH]a)&7IR*sc %WT7gI5^G%$kkE?J2Z_gCD*9;OY1GF<Fd$^V'rc$&?D3+NDUL;G7Kf;FO,.kNlf/W[&<USd3nA,*fJTq"M#arb'dodlej'lH:EU__ %0RAhCG%.hd\3O$:.-"]43i\[ETs.`[ba]K!Td<&ie"n32OPaP^osWA>kFQM-ePt<adLo;!Fqg1,3[d2uW0ZOA9#<X^8/6KKI_Zk# %fG-ErLs*H4N)ta6+oq0]E+JfVK<s!*9amHZ"h#.E'18'j9oLEARb8Cj%AKsW:A?RL^$cl0YFO?YR$@?.-!,/l]g@,NH!#KK"sVog %KmPe8"m<UrTUSgYqNs?6PH0)N#4dtY)7@;kTdo7Foj;W)P8q4-`>ZfNVO"NrHd`ue>Mm_`664:m;L5G&]Sck?\-phbQIL[L/9t4F %$'lrPSTNa/Wq,LpNo)lZooq'[m:jNk?fn/A:KMZ_j(YG=`U>VZL2+m"2`4%r*/)s;KL1A=F[\l1)KS;3"&!tRrb`I4m+FU:>2T#r %$R,5!I3UTOY1bJ4_7U=;:m=C`Ki8M6MlR`&;VT^Z&[M)+jbi><_0J[Q0Q2dTat5=_B%>2U4fu_oW]Sld%9d9uY:Xmp7<uOQmF#AS %q=jQ*l]C&%!k50>>IWKabKH(4XU1qD=]toZ"KH^F<p`PK19&u/pBt$T$kS\))+I&5I^T.:=buP3:Vm[ef:G.+SdW&>ffsa`@hQN5 %XUQ%^SYT8%M`Qj4g;OFB^ES"T!ii^KMl>mqfH]1@'CidScB]OqUE;P<M:fg5g\Mcbrg6pQd#`fr!kE+IEf&bD-Ll$V8u9U6N;SVK %J.s6ZMOZt-O4mAh4f436K'sW!'d@$Z`;0->Vq3#e(cEFCT-&-tA)7an_m/l0&'$!($lHDFMo\",g;C<ElXAoch6?0@e[0`Hd/NoG %=OIi?r9[\B!]bVgj6om[]=%=bhDTG,s7tj\=L5^/kh:Xt;WUU4BN88D)?%fp&^%"X_\bW4G)bRGraos8QN"Lg?,P])pLt'gAs(jF %Jo114CVcU.]m=d(>Qmd#Q,(XZ\$_)"cVhLYXbP5#V'#1I:+MiZ:;^(M+9ROGrVDo?lak`7'7NZEf*;)e;Dj'GA<i+W3EhhTFF^Ie %MQ]POCBjLpoZECGSHc(4ooce`)<s\WHCum[<%[t[9+BI0P-8""l/&mJNr!+/D/*+ld`f\qfK`U\)d)Nj;V:YNBe/EjX:JUP%rH=T %P'CDL$*3*.2\>.Rh9j1;h8$=\b:CZO'GLQOQ@l'Vc/KE:#eF#c13JBo-j*d>#e<MaA\)c#U'oRi:=T*N:TEAQm[duL'`h#Y"[JK) %(QaMu?$$+q>XC6$4=p)6bKMIsY:[>rdUq%NR\gt9dM03)_3-96>tV\m?^:^oYl$R\._:l:H3Ge_J+_[L"I1nrs,PT>dchp/%a(rW %D:9@T'ta5J+X$B%lZFKo\A">0Uf51De1@S'OVSjAWkrS'@MY;V=-k0X<itF7;tR(:0l4h$pcZe2VZja-$F`GqBNAbYLN<l>>]Pu$ %O-%Wrr<VXZl'8W\H$rUtRpV:b]UV8f2+G(/RP8TVX>sA]1muH[.LW&QO0$0>LWQ?/+<LcKL.9fUosgtBPWl&mhH`S3mpVDr"kNMI %b#i?g3`;NlIA8q3>>5'BJXIJ+:d.#OU(-G%S;aOqB./mbG8(T\j6+J<2@o]?2CW%>cDfZ'D+-h:mC:uPbN^H6E01Lshga7$P1r:9 %4c05:H1LIOhU\+Go^l$V>2'*W].1%uDTT$8Fr;N)pTACN_&tGbTB3N;"RoSH4b2*C^B/N$5GjWMFSaDeIK4d0Vd-5A<`J=WH3Bkb %9?fpPEs87L;no?@<67cLUS@ci[usWWka8T&T!jF2PN`e(qq(K;lbBL(cperY,OGk#N;J+qHF9Ws"PIl$01H/T!BA@Z<>*j=kFhD= %k?0(>O.%c+mISsWX#qa1eZaYs_q),Y.nOR^CQMB;Ru@WObu!gW[25hlWPLo__%!MtHrO;UeZm]6^q:@1kc827"'LNS$4UNQG:bVO %D0+mfhF\<UQfTsB'1EsC-^sD9Fo$ta;0Yk$9Ms=icUh+D,R754NO6KY[\Fa3ks_>mX(ITb\*?3f7#=o$9hT?*MO9[7W>V0U't`!T %hr/om_(P`$JZ'b^O9354;BD;[!:e30nleBm3fHU]%S@6;i_c<ihfe@Il-2!K5Wb:G].Q#_?iA6F/ZO8DWVd$#`sVgSmC/_n6d-W2 %4_LcS2it@5ghEeMbJS?QX#DSF#fBLsXfr0'Q:mdeW71t^(U_rF=n1:LmC/`n!6^F_[_G&h4tq(_Y(5V"9253%f4*r<mMk/b;lhIT %e>9O3+*JLtroABu?:*=e\2JecZu&;:&<`ki\%/pUlV#DNda*sk)lYX;3AFmrA?%%+F0.]O#ZC_I/Qj^`:=cn.otF\F&WiT!D(1Kj %Q()Z2?/4[Gf.BAflFK&6!Gn8)n%Ok((h?3,I>'6%W)Bt#,CAnd!@Rq>GSZCETIi=b+F9+p1DLEGPqadS6eH33b=i7TC>1;+fqf<L %\(H=bjV:T\ZbO?aesZ4HoQ@n\cpj<&g9+KYg5/]tdPB,Ma\:)"P=DG[_T&Gd%[JM<A=aBB02XE?(^b_=W&Fm1.j;UY!n-!o[A&n> %N45*!>38=Xc>"<?9nFO_ggsmc.3jN411`"5MbDmM<K3_;9_C!VBU\2#VS,E&(:N#]KMC/AKr2OhH^&D8mCZQkogR=OVaDYH?XkR/ %)>PgpK\)8/3b2!EDOXN@(2TCmC9UT45%)Ye[:<p[?uOJ2M'#$KgW]]]@&hF."rN_Q$Am&6e#g?YNco_83h0Q^o^F]`a@WAn)?&RZ %C"=r/G7gB96J\@L2K)@(/PHEWWY]#[,BD6aS"8>+;pXEnIPS++:G5_E%RR:d"gG,artW`s["9NnJu.+jAt.WQ?2:kRq6+CI3K6f, %HLf[l\"$Nc67TUgBhl$N2?9*P/H[0^Z9OLa[nJK'=I0A!!A+l=Yg@55,.&mAkQ(R$#\cKKTO46U<ZMmT$G\<>"QB9*_$?oZbGBHD %j=`.K,6`J3-]-J0'p/F<e$r=4M@AoKJeV%#^-]EDc_9F#E3&[e8.WHBa:JB#L%53GABY.'gV%HT4/t:un?@LDZY*EeS)3fJ_RiR) %^2:Ho>?a//>7V'GGDW5kJ/SO[R$Remcf5a(5N]E2K0MQ^f#]/-6"&-q$M<:\MN26Ve7f'1j-^%7NNEMc2;/1<)-_h$WeM\n-s$<0 %a5$/m5SE)).LJG0`@_d!:4a38moAG4Ceb^l7IUrlU5!LPDA0@L#!HMh<<nWoo)c*FGa*J0N3N*U#(,Y_6:3SmViG/tE(//GgWBnN %h)CCY+B-&e+n5j>bT<bd7G=&aZ%6K9DK*Ug<ME@n5ncMF4^_KN5qAqr/s,gZDY<\MLIOTBCClWEe\5qa1TNJt8ZSl"P*r2?jF:e@ %P3.6p^tfN/l;eqN'WccaU%6G0KKQBJ-0]jN$>@OIA14/D<X1?8Ft6$\PV\k$PoEes<^J@pB^rfgC%&UWk%7:Q_l>k'KpKmle\q`- %4,np^2:q4BAMosILaE(?`kC+tc>QV[RQg6h:aiJ"'J/OQX&TjIOi.^H8<dDZ(P3EPb^GPV.,9tE@c2\FUg@ToKYci[ScP%;<Wlqo %Kg#hqf`UlSGeX[B6(!b81^7j-R%jnYIj^m1Q9D0a+o19lA+"1@YiLak9^cOA+00FH`@G1j@''+25k+.D\F8#o,>/&MOE0Z;rrA'- %dm<KpA!WUV;;3:sVLqHXA?`D#8[?W75=UKRiANI<X!$8YhPnE6.P`^C&/C1e@Esea.+&HOY3kM8ImTe&&Z\KnW'4J&m(J"m/S4D] %bFK(!'<4;>4p=H>2;`Sm4[%9ZIMSV&(@^#3b`:GI_Fa*!@$2YGSjJ$)At+JSKu%tDi-AZ`AKb?]KAMamU<&\^],;FhIO0Kb^aS^, %'';6FVCWtG^0si3)rDEtiHt,Glm,"Q92sU(`+!8#fMhT#5@In$nZo`mdcgBffV4<=:4kpf%4aV260)V+8-rK?:R'`Ybo3LGOL0i/ %F['__h*@/^2SIf\.+e,I@n:QbLU1ica;RU58$`Yh+euHA,p_$.%]3%.$h1U>-_j1X.OD*o>b,WOOH<nY3M^RrbmUKp9(W_'dE1P? %JrauDJs%To5QsEPAe,5DVgH!A,db$7ga=GPM;5VUs#D&rH7*C)4<<jX%`5\BOR@!GLW!Rt9uUL:-C8>M-p't8908*b0abkLD0";# %rqB&ki*?>pg'"4&8BheOM?!ghX<0$t.m5:JN^tb&;7j#IgUs_&9Mbt.pX.`9KijjGRH9e[IFMk+JK)jK;V%AiAog@o.1$5n+@Ah_ %3/PCXpL00+;8h!rit8MS3Cea5IsuK\Np4[l,g0Hj%O,b^h>7'5D4?Xn;;]%l85Nh-hG$cpTO(\h[U'^lD-u2/V==q#JI.l([#'d? %5)r`>b,3d&D1-Gm?U'&uBAEJV!B%X?/6Jdh+2HH[1/$aB;39q&B!%;?;lcTDI4eES[]8Et@fdGfpSkUq1A3Na]ejh11*AW:$j[#< %QFH0f#+'I"[%Ai(&>&WC"XVqpO!V&lQRP*SFS)MqoW7HiTS:-Uk.KQOj.\urPikF+PL9o/kC^p2A.PU@;1*-?X/+3O$D#PO9>>/V %l,cs[S`Zd+2$^`n^_q)lVDE[6Tb;K#(FXs(.R<p+V.5C4I#B/:4gPJ?8):uP>2DQ0>#D<fDqb3\d?WV5W7SJPB.N2kjf_6@]+qhN %Eso1&>sML/7^#gL_@BC,D]!@A^nrVN?,4+UiBH(tjHcH_9">N2d$E9mq,hsDQ.N3T=d/-;]tZa7a4b=fr`$PT#(!D):9(E`OIXra %<Z<QQgS"CT=$5(SCYT>Vrn7LVla:k3^5?l=X5"u8er-d=W-^D5`B/=\@-,u:FotBPdX(rGp02K^'X.&2!q`o_$BZX>G]2hh6"W2D %em.GaM]*d#Lf.\O0&g.:7lK[bW)TbSd:$]..\I-haeN%%\bbAi%SeBL8U]sLEmpGBp!@9:'i/ptMh#&*>";"6q!u"=]s$uZ]k(6Y %OX4%n>\#RhJD</3%rsgK%oe($MiRp!)'f"DZE9A[X"f]FK.9.O$7b8KeGm1hbqJdOT_IBX[ol&eLG)]cem!1?E-c%@95U0[)KcTg %Y&XI%=W:8J5Le-J;GH+6mX,332X6V%O3@BkEWj.]kKI&Y%&C0DI,_fb:bL=^D-@3hgrXf9D6'no?.X%D/$C6[n))[KC5U=12jFHP %3\GrpJ02SegqFH[E!N^eY"fdk`5lt523V8!!jCp]F;m<cY4J$A9>YPnquf'Ki)fAu^Z0`;&'I#Q1,\E0p1'o4!]?h^*QqMpgDTX@ %5nm/"4KP?-"/<!K7M2J0?)0ZUPO#KB85M]0)"',ZgeokIYfg1>oJO(VD&2].5XU.1[3<2O[D2l46sWe%<tMd\.A1(*AL\8!aE9'8 %S6qrr@(.b#j*%DG>m^)u5^3K%!,`lZc[B&:iE/=Pr>'34^h'EY\')1XK.pDrfl1<D]N2iWaeJ@4<)enpgSgF1mgm#\,S4##%cR]e %4I$F.Tj)-(gl<gdTnD^t'1;j8^kY'aqppO6[%on."ao<I)V<>E<^MOQo"o/"?!50U73-!c>MfJaLKV-ID?Vm+'U`Zg*,`PO.bc_] %pVZT[#(I^lhUtrsXkE8N!/l#u&^S7'c(]bt=H<<N$)9=H,hrQ*J]`&+.-q@+[u56<@GP`Bc$cdJn9(kV,^>bQ%//\UC@o`YC,j>$ %mfLKlQk^Dd=U*aFnEurpAXB\(L;hNtEuj;C/ZL/lQM5A8ARWF'2T!K]0MGaYFus6WmGPrUVI`"KE6ls/)1Q6PbE8S0cG4E/Jmkc# %?JY%\dtl&QJH#f^o4W_s%pI]h<tn&:TO1JDT]?Sp9P=s^ja>ok_$+pZlEFHd#^Bk_gfWqrNj=*BFW9Z4AA'YAH3VA8XB*pp_4d*/ %"lJY;hY'7[VtR'EpV>W?BcAdO5CthtZ9J[=LjIT-\?At6BFYudNRtiiMe_`ofYEZ4P.&VL*n%WgE*o7n]5'?=.tMRIKAHLX[iVk? %V.5:m*8HG,I(<*X4psKN%*'B+<aHV@*gXe#]t+)s)_L#t-N!l#f9O+30O^\3-9j0Q[%sJ#\*&+rL7V`Vmap9/&@,k3!"E7pMf%JW %D<D^2:]o&(.Bd<Qi<f72rQumDcj]KDU`Mmo7ulo`UdU-^]+1)FHA&7BMU#/Sj:@o!;Uje8FrbROR"4Z]':bTHp+jic.#%G,R;T3c %I"lBE22\@<V:!jd2eU7u_R=N4-?*&DF^>p0Q[bmGO(uC/$%7'+V+(u7^/Ji$\`\&D<].Xp04q]NlZQV(29'a%f1S]lf(u5=/;BI, %^<cMN\f-I./2!VQC=*#ngEe)$(iKLgUgG%0_[ChDZn`3V"_WWm7f7?>0h2?qi7k]t8tC:tp!MaM?"oi'^]$`rYB9Kr0oKYMA]VBG %d@u20i0_R3S9t/+p98JN,<U&=/!PlZ^;:DRRuV/%75U7;/Mj7-rZOn8N0p^P't\S7A_=h`WaOMeRTu;W`"EHI<Z`om/Df-=)=ng% %VV5J%Xs`gFH;GhjL;>e'dK=?Uf$t\lD[!r?3t!IcUeG>SqUVH4b8A0[Q.X&DS["0]aS2!'QG0Q-X<soSQLE=@_>Q&@kMY(^SZRE: %Q$GLd>Q<eV)2(SR`\.d:,T$S>%eQ7!id7Vi!'ek`Q_$*\8d#i(8I]Gkngg6f:^%-GDQ/&q_)YqQ!%CpmbL2"uYuelAcCu61*sL$N %/)qq)M@<\UYFok.[_d3a>9t$BkJu@9=&Odtp29CtC:%ktDB/>R#2XtR%G?bV^h)u8*lre2O$ZM5?obm&"h4=\5RrKo=b%KEDqc%p %a-$dKE#us'OT.*b-Ykk]B_4/hpBRqhmS/49ZhmfpA%^%H:a5&0W%J%!lJ?[HP3'1dH\-^%raS3Vh,N5a2Z,r=A.N4[0ns6[X'lhI %\OC:ES0eOPGm8YC=%',)OgXr_8GVlX*Y4%U3O.nnb,WTWjGF[&3&ZJVnMlKP`\5CFn!Npq(+k:.]_AHWn+XAr=QdAg8psq^/)G"# %b':KsVj7#U;mtn8m-sQ#kIk6UcCWK'5l]g$*6.IX&/G$;YRLiaIi*)5E5+i;i9Q.g1D4Iuj/picWY>9n#f(iVm5mdsbHM$D#Ig2M %lZd-^4*^Z+a0i1_hqfnK+WTminT4K_1&N5'FH"Z``6Z&`+ff+S*ldePa!870p755u`5=e4i-=4YOb'as<k#:%eA.+US("KF^7&m? %YE)/40!Sn?9/&Hpa(]pkK&Y=rq!`%N^lM9'`hK16`hI?lN*#SFdrgO]fJ,X/*K0GFQr/#cqqF7QG\PZGp,m6kg2l3L]Ccnin)3.E %E^&p7(ZV.X(?N/rO,jsHgu#rsf6uF1DBg\NnG*o&Sq5&=/5u0#_"YBd:6B&ST&sOO`jV_[g-9t01s6L0l.Xe"@OmCsinR.96]/qT %V'DM#1TGdX+'k`+F7e_0ds6H>%FNYV2YmIK^S]J!?5YXbd:q&>4o[P&hj7\.X_@"qTrpc:Ak`*SWS0!tIG,;X&+*KYU/bI?#.d4@ %*ZK@WC)D(m552j*]Go2]dXI=uJl/KIf"gAQVhR2$7"W3ce?"X"A':C1)Gt)K1e73610PAF^n\fCO`1-W@bDAQltJa+6,>(-4c3)K %-T1VRkp&hZl38Zf9F"LT`Te0Fmpa,L]UiXe^ittbm*.#QhVE>aOG<:T)FKo[Nh]/PfN\">/I!WA4%iR:0ZBO/MgpVpD.R;9YGEtJ %fu!9c9NN,S)n9/m7Y\Ek`e^PMg=9t'_ji;?q#F917RFEp;=b&hC]7`H"O'Cn0CuX3U(boh-KiP3i>-'Y)T@.^.aZBD1bbe=ND>qI %=rks714@pbn22.UQ6aXmYo'CX2]n%2P#jgO<c/@O+$roW"YJ?aLDfFAjUS_G"(Ie2j4#;_8QouK,6hViQJ,UU):eu>N(*CG4PFQ[ %FQ6u'6/XVinMhSL;\]q`W(H[5^hID&jY.l`r!-K]9&<(R=H"!f3c>JWCQd"`>\Q-TCB\r9]U>&>o[*.>+!/\I[AD4BA;kD+<suXr %$mFrc-u!pl>^%&CrB8$EC`pq-;MfChqJ>6Q_YDmd!o^'Ig-)bgF^7I2l]9u42,I,1e\g-R/6Y?t#X_r8?&.RMNmP)FnC*?[SJX5` %j,>2>NQX,(VZ^/s5!uPiCh0549JUh`S&U+&KuYJ3mj8"[L2APdJ21W^4<ooqMXc"67X\[?o*l-S$OTA5G,](O3eO8@>S_!8"/)RF %,H1@nlEtir&]5?)1$XB>?5,J3MM-N&H9Chm)p@4L6d)mNl`3/j2iQA6!r,YmiN"ON6KuK(Q%VjT9W3(N(aefYh1jm#7e(%/pFuO" %LIX-EmWTmbo3tu!JGnLF\<^*ucYl:].Z"g=ho\Ln&@2ZO*2J/_[@e>k>BMEIR+!9siO/4L#Yp,!dI+]!@ie%Ik)ksW4G)$:hDL=% %M_A7F!t#W)hTSA'hDO/9&8%QWV\+lNqlSBCp=-ltD&?3SO2ced,>3]hOPI!%NS\D..//!E1:`I$#'fNP3R]Oi40Rg`i)i&KPU6ll %_7<*G62gZ=IP$pUT4-SG^'MT<XNBa*#9Dd;:h+!^>j7;t.?#p(`eSDu)r%W/a(FEI0tG^^=d+('\;c]3G.I^XD<b?<4h))DBm:W$ %D'_o#6Ggl_Sh3F`j5qt<HMmH\#F]3gE$c(8#bDd%W72'rFkP/-Ef*i<kiRR.j(\_/JIR:ch)H<KHA)02DL=eR9+S-8I\8]VmlHV< %L#d\7q%_bd)h3+Bp@*#sYE^Cr6nDd0Fu[RU=dVbe]bsE(E*(VMDeMDa4Wh?9E2IQV5@*p9=X_M7;<B_3;<Bu&\;lQ9Qds3i*ID,m %HOtdi5=9XDr88C.;n6%%>JC'p@:\8'I!`G]+8!DUP-s/c%p::OqDbD/Y,*l:fXEYJ0WueGbiGMd%I@[(PG#MBN-YP;&&S6lX?CE? %UU9%SYHE9'iks$uSke"L<:]IGWi4lMJ,aR7j?.Va*D!u*=VM$764Rq[CP.cpESkZ_<[pog'UC:H'h0ANUUKi;D&Bt:bC>n:'tr4O %+Sn4Xm*c%bUAG2#&qrNeHoE+KT#Ne]HtiWubl)-4j2eYq_"dW^n_.Mg?ROWM?pJ_4PA51rE$.fO;6cr>T!!3D.bY%5p?@;`h9^6K %VbSB0HHg4Jgu@7pj(5\bf_+o@.X,tin@Bj9l-LE0&('*WD)?Ppo)9./!1LN,94P3.:0[798K`1H\F>c;YN,VKZl\S9GfoWtnVEsA %k]f4NLR<K`0gbg&K_k*GpfrZY`i=-&.McfAMAlWDU>sRJGDiXB)rVYuNCEenH=+D=dG&>F,b+rIj7*P>q_U=jM9N,,%c$*c4m6GH %;/XD%TDgs-_nd:J:Nb#%i_%Q8^>;?)_/YReV65S<5E/93Hi*<9\FuSN`Im$GAFZg_CZAtJXi@$F2/o"P*dKOkq;YnS3B87&Z\)s) %=4Y_63SQ]q.dn4ZhpD/&XIdY+(`EWf-skmb0:C_`aJ"VCGd*Q1UGAD^Veb@U+86;g<kO\rT$3hl'GC"SprqalC!D&*\,4a&C=/SA %=04QDl;g)n7Y_IU9_^ue4re=;3BVPhLM/tu-\jfeHn4@RF2[4jOgXWbCHf=*h):mG1d6;>qmBl)2gZGFNSt^6ebEf=<;V%T\Vh0u %\>"$%D$3[lmJ`c'eSk1.n+Zr=NN'kiLPPC4H5<d"*]5Uf4%:5#qL\4?O&CPf1K2d&rqB7]k=H!'rZR_RIJ@7`^*o3ea5'rooJl@^ %jil_cra<*CrEV&B\2JHF*:Q.7_&Pa[I;qUA,I*aVKj>[#394HLmr/^R67*WdDnWmSfkLeN3Sr_H2=*Uu*F0Jb4^&:dgjm"B#)>?T %GL>rrLCRar5a$#r@Y&-FY#mr"LX'l^GAb(2T8/Y-i3.q&OheG*.mC>]`Om<Tm]p$b(l@mrDUNS.7h9jHWtsM1E.t'6`ur2E7P0R? %b!ZCam@%"-nJARSTJZ?+JFO.UY(6'@`RlDWf$lm%7_JZ8pi*8q$8:PhC`FOXE&/DgIM;D^[.iph",_l^eN"$K_<ecOMGSj[SmUGg %49cG=E=BaP"YLd;bep3Oh(cGgR!i:c9EO432`^kI`h0U$Cg_eBESTcVd='766OE7lRHmnE\%9gn`q+*"SjmWUN40l'!d?h[0:V\? %Y\9VNb3rpjH/FTO\"Zk[E\YSFHZ+Gj\f'P=]WC&iIJL;6qbki27q6N2DXF1Rj14`9:tW%F^rT"OZS1+3d?jX\A?[)e4mZi*.X(3. %MYQ!d)+(hD)\PHlgQ(F+lFA2R_EB0?bm[u<.\`NS:^.B5PtGP>0*.`#dTF#+;)ot*"%VV/]9R]=2rcce9Mab^V;>o+3U]GIPr([L %Rtq!rc05/IBiM;)!D5IBd12pQX?PF6>I!8)o'Y,HM`rUkhi(1j?ishLam7u!2^>p<j4f>Z1TM&bBqlJe^\?ZZaLpjT+84Y*!%AsH %ZO\uO"F6&,#HH'4J.u=6m^,jO2]rU]I="(6Tdo'"gSlX7i1kk08DnJ#M98qUnaNZuB0QQZ&-)VgoYd0ZE;JT;OW7ml%Pl)(/["_% %gNhjV,;CMF@HWKdH$\Y)k><)Q,j.*dj@'ZqM<)<G>->u=6s4u*gr4GRHKCTrU/9`fVUg,.[Za1(b4TYjLJkDQ2Xj7T(1Vt,Q5FtV %W()teR=kd/8u(k910^d1F[!@MM1*->:aa,`2.KXJ8ZnR9(>,o5^FjR?Xiui<ZaptuD^Hr@[[rJ[EK+ZCH!P#Fl)M:<qZ)s;CCEam %<Q=YA:Y/VUopbL*-_?<s'BZjL)V>Mjm/]sl1"Eli>&X?[gomPoRZ,1[EB;S7BNH0Y'*UUH+O#m%*o7]lHj#mnD/8kM]$%ur\*@SQ %bhfgarkj-P;`@n8j-;4H(bVR$h5"3D)B3T`Q]Q"VrkcsXm;d'm!!fAS;F#-^-Im=afG(*+0WMGj`]&j#h3EuQK&Aqaa?::G9</i= %Dp-"Y8k^\8+*';QGR0X5bL@sk@tMF@1MR0JJ;/6t>iJr1e:))HUsbOIikem>[HQ7[HCr4Kb3bWm@@!?GLhXeK8Y$oI1XR[Z%"!Mb %?"VWI&`^95.Bcq3XIbq7A%so<jb<Tt[K`m/CY*aEp+dD[>:XKg(l!CnlC.b9[s`XWlf=2]JYXRX@h_A(,Zobh?t]M?#t<aD(!F6- %q_6=Gje=bj[YYNhMk6.F6"o_#i,UF.U;YZtN3grZ]j7[N1JWq:aHTOK_>VN*E))J?Fj/LJg!.Tn]j.`q@MJ?9R-uuG)>OcFalC[b %nIC9YhiF0NVr.2]`(IrP_X'p`'X'5X*1";8X`,R*@)n:=04(@m[/71,`=)GR0gj9p0ODuNC(*K%i*e+,Nt@of2gao-m1K-1O2jC& %Qqj!XR=1P1j0<s%`p2WF>9CM/p^0Ln"6+r^j]=JNMOE=EYLBEZr:$r;in>KZJ?+^J@hW7kT)8(me;^#I@+Vh5S)+Ckd6J,$S&5f@ %r+I3:qR$[([eMRu@/Tl[^<XB4m0(\sG3*f\P[d_)?-=O6gM,&oip/cdE36-3dreF[aB-^2NC(J,BX7te-pR]R3*]a:aun]VZRsFg %])VHbRVBXiH0&am](XD2g*&Tu79$D2Lh)i(O7CSho=FPM"28CF[Er5Y^HM=&)lg?^lg1gYSRO^1U4-qoS$.tso.iZ3k4[d2jeg8m %0QJf+<:S)Zs-,QuWd&t7]=lrGoQVsI0e3EJ<&M\-qfjo<ZJLQ!m+uX"3UtlZ1R;@=-H]a\*]G"iVPdro9dGS#qq0X?dX;sll$[(7 %o#/jMB%K@aNP-(e2!L]Y0tQ?N^7!`%Ghd'Pe7(6&)R#@Yncl8Ef:Qpr`hS+K_=>XnhB(8qC`CEfM^r`7i,UMdIi@4Tfo4$Pd?D]/ %2209c@W]#p4JCMY1NjbL@p,Og%<,`9c>pYSSZVa+GX!@k[5_WE^,mJ#ajYIpe+e$,Q/hAkJ+t\rh-^03Dh%L?s75i,s75J_rSqhr %nF=9-9`OV>?N9U5^VBb<rd4Td]oMBFbgUYb^;UU/@m@(F_e6Et6PH[(20/;l6e;ui@<QJe_tYBTSq+j6W``>4-0co"=fVq8"bT5( %LW^L`QWnI6YX+%\]#2&F1r1NIH04XL)7O1?gl9d]\TqEHdqE3WKUKOT`&/]g[`PRi0Mg:6F-,g`XE8;G:[HkOPX4m9r*^[34C9[s %14Jb\YV-LQCOaDTYuVP?WAGO\^IVS.+!&IW]?(6\9%qf^WS6bsW:Qu%CdAABY`J%!5W?s,,&$N)))j!FWUnJ/P$8U=5Yde@?k1:5 %fsJpTj$;t28N\qO+q4\ofRstOe]EK%'A)J/q7QBQ=!^n`/(m<*EX/iiB_TXMgeQ42`*lr45m,,sHuNBZ)DV]'+&MAo>qe5GIsdD_ %'/-9U4-T\QTm6/U*Yt'fn\]*D#WJKMQZ:OOpl[8i>.i9=$*=L?XA""l"jZdPKKlHU5+defDD]aR_D'?J'l_ulqVYg6P:kDY`\D4N %b=!#WTN$p]0>%f%"f@!)#^+'%gB="-3%5k=8nX!#-FfMTfZ]ZK-P^Gt.R(p#VA43Z9lO3b>;ioi@@RVGFNo;''4\4d1nf:d],F"V %@]UNgKd<Kr4"d"Y+6%`Zcu7l79oN3-KbN(4Ke6l1ku&\Z9F(^-_3g"'Xs5$$d+#B\1#)fSU694DDHo!B;Tg\f8#jJZXl^aq-l0>D %+/kA^.c"Qb`B[Oe/!W<!a?baK-Z*'#O;+&cX\F$XZf(,]N&Em?L)!6(c(g!@3rf\p7n5<+?]A-J(Q8pFbnA;_R^fLQ"\@>M/>9Ik %Cn&%q@&1l]N=+^RHB5BK;`=_o_N)Q48LH1++d`L902#pk4U.3WNA4BPq]E_sr+\pHNK@OGBo>HQ@hMSC-!]f[4O;21>%Y3Mc"ph^ %N+TD]KObbFj?iP)b,`Rgd>%-5gYI,61h432<l!cX8r2qqBdl"qG1`fqR8TL\+Bo6&&p*CE!&%gJ`LHPU^fK)lE?:hXjk/;u8:MYb %.MNOj[,16!E%e/'Z3f(MZl]9Ua^`Q2X+@rT066(<RJgrr=Hl,+`jOFl[b7q1%)n!Tb\3[4aZ"mGiaobLSMkJid_!nOGr^BuQ'?jE %8_>[]WPd\^;KfMo<OCi[:0K)mnQljnbB29ie5eKt1(j4kb3Y&Y>&-G+D$(Ze9F_dA7+kD5p/nU?DA+eG<6@%dkdaR5p45RS2Vk&J %NQ<ke$SQRa?Xth)aE4j;hT:\)R6ge5D&l?H16CqD=+>@eHWo0Eg51+WAut*A%,6`)E8S@Lf-J<%:jUIaYjcIqDm59d>cShYaU*"p %42F$oBn@%gV[W63ifE6.,O+V$^\UBrr6(W,Vu1nun7B'-bImfj)?A@,4,O%l[0<.D#h[''eUj.a"u!=pXGM.c'4,E)4QnN4GnVj] %)uce]K@`c#-JfQ"GZL2.YhoELV..DZD2SW>N+h3:2rjLf+'ts`]W^/]ogKNIe3!Z>IL)Ef<Z?=`9Cf/mJgUJ]ilN]b'MGrF""tBj %?>?f/l+!sSG>qpUkefM2afp>_RPQV)Bc_A4U4JZ22_XfCT!WUl7!"K)_/9q*K64G$,Q0)H(+j)H_EGq:<K[VS;(aVW7dj1#E_3,U %9qc7[V#h5Y^Ka6-=qCi_PF#>SUtOa=Fr#OkX5OiM`1H7ccUJ1-Z&,#0Kp2R_Lp>ZD#=D"?I6cCZ+ebZfmT7RD$8YHlVXgCK(5LI` %N+dU8BiaM:eRmXl'PV+lU$1V)Q/OJsgQu/">-UOOaoNlYBULW,T$oJH=3QUS97Ih]:9/bZ.j3hGXFV@t=ca@EZKh@lZb"rFU$["s %]tjcO@M]gLkMq>@rnpkaQ0f*,>m]OP%UJYd$Jq^t>5,K<qJ+q7^=$K^:6^)(?q*rm`TWIrFp-6]PE,I3X5/):@9ISO0nMD/`khJ? %f8,88cFE35JIa:L>9aU$9'.^3>Ae/=;`,XKPdUGKabqfjSgo2fhtX:s(JSEc`MT+IH-L5KZ"$4^lrE+g5"?RAor=ib7rP4fTA"]) %f4,IeHn=LQOXVd.D7O&qY2[<_L9B0j*U@A_D[pa'E?ZE;2<RCMDn8u[k"aS2'aU&XEt5h:Nba,(Y<D6E%srTL7N'O\qRR3L0.riU %(G!XK='g6I&]uI"W1rKKm84Z,A.t3qll9#W$Pcq4.DaH;;0c_:5K<'>l6H$jN>*MJ]E3$'(sT_HfAfS'=`m\^@MHQ!e3hK/;h%cs %rJt81MZ&`o,hK,r:<0@7Bi/eLjT*uN[c9GuJA3;J]q13F\P[,cZ&-+0p9LGKA]or-)!(34O?4je/%KrhKM3MI-q\UM`6updj`%#D %Y(OLohPlt5ZG+1C/I"-'Z?!iE2'*h(5suA>W^j_'1\"G.Jkc0"$5R9RMgJ;02Xn#(`lhO):N\\M`&gs]?Io!uWXZfl?<.\a=``Z' %5)D/eZC8lsF\eTDUf\9`/#p6\Hf_5%$_)BDe`CB@Q\Sa!d004o;HX3,2,Y;dh(^]4YJdQ$N>_m6Oi,onB]3-:$8+4Q6&^FBR$W5- %29rJHd=f2FX,k_S^XD\Kd>R-L(%#EC01u/T-jK=<E0)sI:77fB"c8h.(U8g@8fbSrMY'_1M+pNMYZG&OW88j+ZO69!IP4Z_C'8.6 %MT[@1;]H(8)Fnio&G<H.ZV#/_U\q@Y"FCXua;,oQfteTH(1Vul+mAp6lkaL_0BXm'7ObK/aop2s>de.-(a[C/)4t]YG4-p.pkJR( %B%r^caI'pEC_%0=(l[&3qY92IXKiEa"Q`O?4Ya8Ad\qt#oR]:Q@sHjKGVeo&0Ld^ucS1Eg+-#+b;98%g\<9S)&'#,TiuAuC\Jn$g %rFf[(8P!P*`a9J@[B&8$E,CXdYAZA:;3W0rXQ0*7o@"5.+lQ]1^aCk3/1Wc+>WFBsm&>?K'\p@rnj^H7L/u:`ipP2:q4Uj,V&Q2E %1:kJ?#fLOP`8=!mDoS3I[YCN5,(p#o2+_W&P30_cC'!29.W@gSB1V18Fe;A:/p"o#:!.huUS?O5'-8hNd%#!VZqM)dqh:tbF]693 %P,XHn$fGMU=]kNhYXj(L'A#a&-jY&8Y9P2*eI8Ilr^`^BK!fD7O3oM9D_bt303l2*`o>*LMaaT+#@&/VJ<6HhoZCr$8ta0A`jBFO %PJ6sVl\5T\!6&4H3o8LY#*q2N:506gfa@J0%pBE<ZH^jg:bdtfZ#OA;NJk(08R\g^B/KF8BPt-NN>]tu[B$XIM.5NP1QGsI?$j@6 %NX@DbQIRU#1m&_`ju%KeH/@oLLGT>-_DP/"UBc>A/iArKGG4UjRV6C:&-grYH_I91(&)!I=2IlF`dI,lnfVf.6',Fu7U9X8$oXLT %0hMq?)7>!C1i_o]r1Qfs:#hkEb*Xn<m(Lli!a.!:#_,\1e7\e)n%"H#@(Z]oZdFY!dJ.lAZ/>j2j'P$ZbEWME5O)2AH:j9INH[3< %Ku5rY.(.u<VT)*ELA'0SqfkK[:#I?CAPS0t'r?9$L""\$RE&e_*!7<1N]3RW,c&#fj/3JZLZeor`Xc\J.uhIAK3ukJ;=O^o@a(%V %((1h6Z0b:rGWpFn6:Zp0m&CXd'oI"T@&sMZXjcHp0$d,6VqpXU"'uH>8sA+jHF/Qj`ugHVKCM6N!O)^<M`pU+0qe:4<Er7/J'G[4 %@)MO1!XI12o:q.2(eQ6STAt\md&L;4f%OGZFn8ZV[W<a0R!m*)>[a]rjSH`4NQs;!f[os.d0,!+^dDWMd?u)\a%sG5>djc*Th$/^ %R7<Ds(4K?=W/PdcH$%`^6ihZL>qM:9@h.O2N<"+#U5?0);H6ro`R>S_\JeJ9`Ok]1BlJS)6We1/D(EmB@qFbnA=?>(]R4?\'!D&F %8$":6kSDWrn9LSce3me!1h+!,<)dfbHI^b#jpYj/M\4!H"casiGu,BY7eBIro3F7l=A?\'N&)>D527%#$f73g_l4E?/MQ8%*)/:k %Fs;,n5c\m$ndDiCXU/DDR#k0)G/=b^e7+"teBY4i,-k.b5O%;,fkEiSU9*4TS5;o=5m<_"JC-@-._9/%@&sN?r\Wgc`>PT@M@t@X %X[;?Y^n;Ond>.T0CV70'^G#k<CHo1-9c3XP`YleX`YP16K(5q""u<"lgSuqWQ-bIh.haO&45OOTXHpkMl%"SCd"\Y/_Qnct)W[Zf %KqTfP%p^V=2No;[!nA+%>%MX=#?*3QA)=lP9!jCO6V;)mKTA&3-I&VN1qJ:kB'uV<VZN],>UK(eWecsI`YOk:0_>V6BrEb/LfQC6 %o;BU6EMX_(@hbi*co(kY0jY7/2C%K5?aa!U$ena$!+H;ECVs`s=a/WZ'HZirXqbVn64+(QcFQErAjt[[=A\:_lhJ;TQuh^6LOf2- %]nuLbq:TC6OPYE#&qWrb18[++klabkY)Hp8BjCTiXJ$t(4,59.+,d1"jQ$hb_VU=lLE!RG]OIDO_(0MH'pW0*CJZ8Hft4BK\=%WT %Za4>JpEJ9"]1#cRKJ&6n9`?.a-(m^:HlW`L-U_;>k8-?nH8jNaXYjJ#n73][<22ZOpcmX,85Ka\*R(Y\N$?/K7%a."5@>2.jtU7i %f6'A]:0:sa]en\")27l+E_n/D>/1Z#ea[*>EeO;?enbcfRAdh7O-/V>bAsSeR"/6b"'-MRkmX-9iWA;!.hqLl^?qesH:/qf[<s5e %=dd:m6(8<HHSd'B7QHHb9$iX&,*=[(9Z`BX32R1n251CN[#c<_AFQV()Em7c/9k`N">-%7as-P-[d1LFEi!B<`g+S21b7WDg]_+< %Eu!.X\qq8F;?pu2g\G>6h;-T(B'`X<A&JXu7_Nj+6kJcs/`YE8mUPg?AZ;`8Fr:0DVF<De3;9NkXe>&qk;:9kZhTd=$9b7apH4C) %$e[@P`qe,NHNbQ/#f.L]3cnnAB,[YK&c+=n]\GZKhC/?a[d?s7k@m-r??"$A]kc.(X"\tFj?Bb_TGe?hV)SkZDXH_DrUH,I;q3WZ %?9Se#bUngL$0-\RpBnQ*V49@uf$rrPlsXfg>OWf)5TlO\i.`#qIEslI9RojU%uMCF5FU)oK<!aQ-+&Z+(DUC4Y(S&i`9p!n:;!q; %>o=L4$h=,fHG2FY2F3s*N7?$4_Y!E:oo1,?V^aJV<aF[qPd@<1A)Sq]&4iN3E&Zm6h#(nUN7EaEQl:+1M:.V'0CU<IFX00[N)'+c %`Q3=N1Ib!&ra:=7nq1oH5DMn'1O]=PF([2A<6Hdr8X,c%R8T21+etKCB0"O0_68eYH*thkJW6eO7$TUB=Yu7XGF)!bKI2j%`$UH< %I#3W)C@/80#uW=]!&D8*9rL>]qf',</dO@Q@(fgHN,4jYqs6Q2nfPGoB!_n$LVhsbUcBabq^L7<kg&u+&MZ#o.7/uZ7&EGKhoX-' %]haO/.)T3B#(i;boG42WZ-8"bjjLQnh>^6.*'052Z\1%fiijaZJ(4aR+Ps0Wl1/e+.nsNnWd(.IZ&#Lj9)i&$DHLR?/I2#>IK7?\ %2[cIM&S21DFXXUs2@X1,M/D?Y$^R.=5CCmeh)8<ch)N!ZEZ"T\h)IKW=#['S<g!s\=/qCrB]bZH%g+1t_<6SkZY'p\\Lq@(:.f.4 %TSlAG[qsro4WFc]MEcL:i$H0je!Q9Pi^UAIO\OprrTlc<01>O?O.M?A'j$kZc.f#bm3SQ#ldnJB.)E0JV:_8=$24G)$U$u?fL!_9 %\D"$CJ6QR_Qt-iPY>q.VqeSIus+f[tA^oM(pPkWPo\;ju70^rnd#/T/\EZ8p.t\]?>!lsm8l:7>Yf%D(5NijsJdc[SjmJW?O29I. %6jRu_Bp=d;5nJkp895,ia<Bdd`0:'n.l7tMho&:eg"VO!-poLUZ!l/3*P>6WL+N4a`Z$It6[;KNA><pp06%PC"pi:d,"!9dIs<eJ %@eXJfU>^/,e2.U)O<f(%S>G$#$ti5.,&BSPj=E4p;$]k7BPO8,QmV&ui!kIkT/NqiQXr`E,!!j4oH"?i;0u@ap4HfqFbL?/]I6I$ %BE1Nh>FoN\KJQ"B+c&Nfk71k=Nl6sIEL%S<cq[?)SAM"<]K4_\,YO\;%4_7&,\9+<nC`:V2.Md.)j>%"-CCGr+O\T+,^qma+6d<s %UM>RsNgA<#*1Eo7f>9mp>`moLrG4ajNU>Ha'%lEQ*3?#Qls7mPN<_C33:mbnSu+188NH[6Be)Q,ZTX-BQVfa^CdPG7#I!!_^FXp> %%:=r(\^+_AA7(('WkiCEE\9c7/r6,no%&b:1J=E!2jteQ2ds),lNcJZ$1>2NmT3'&IWlj+8fS"6I!oQsCbt0p.K@,&RTU('d<s^` %%b92`?A8;b?3;uRc.I'U#meq(0rD'0hGGh+*_k_^5BP64!9mRDbZs_'PTb;alg0=;S&Z&L@F%dCmY_B/HW(S_a!b.o81)rRXEQ.H %8j]j%2)jV1ZYH]]C<B[9!Fb?r\tU(cRQ,/HqDFgO4C"Y?9b7cDIMf#kLSE12oMTs-OCG<VrCA0![MQ-u$lKlk44G3%-:I5]ETMc3 %l4<#qaU`7beXK?Y]F0B@A8g/;`=kLX1c.K"r"O"I;Rg?_=`55OdIsY$ZYNRCe?JV>1rGhO25LIkZ;0!r:$2+:$eLugVG$V>0_;5R %7pV\Q?98:$JG8jdEoG]X-Efe&m5-7]<.3-[1*3+SRB/D7'\'"H?_(I)hJ8EOe%@E]@%8gEjqjpDON+b1R'@sW"eVI[o-ojA/k0Y- %F8/7#`g;<tF;ff2U-DbE>(0isapD4K7q;.6a#mRFh>@Bj*\#R8Op-/bkEHjW.-V>X*1<85ed_NWV;VIGMA^&Mj/0)YHu$TK5j;*& %(;D"LS@o^:X'X;'r:"MbRdbL<:]DY@[o_t2pF[eN!$J:Z`X:d9-*Oq)J00Q=/qUI$K%S!0f*q-6U#IiFdhep^mGg2`$cRPp.91+F %)!aHB@Ak6'Yre,2G<VJB*-cV4.0LmcL0Wqhn&6hULgNAklLI<9Vr#UiXL9Q)M(pJ6At3h,H'N23B\=-@NKKB*MD,lLodDj7C'1-= %^!%$.a&0j8'Rh,VVJq@0H_CLV+r'E_K)4!7mu[_mdeidfRo^;h+"3_$e7OL=i),o9hA=H.#FrTu7\$IH7U8T\M3MU8Ie\T]Z31CB %,KK_qM'3p.`XeI$;EHmUT#u8RO]<?X%0O$MFW64AdUP$Yl>C-XKPY`32DH1bOfd,$42n`dDah%lL<FZM&eVs1fKdB#0j=I"6Qq5L %Ie<H"MM3T+fA?U]V'+jcpD;F?oXrH[/Yh#pHE7Fh-A:$A0Sfp24Sph+AV6o=1FY.]3PLQu/GYtJ6?kK5MD5W+e7[L`DT<1]l7F:> %&;+CU1HLJNoiR02^tB<j[3$<LaC_TS)QOh3FJE?3&R*^,b!=^nK_F5*R-Fu,kDIRpih80@J!lki.a#VYKj'FcUS95qW77pX,H@cJ %$2$#kX2SK]O0?H56=<29fK_e.K@bB&,B>jVBL)i^5q*>bIfYc<:\m3QGDaB71&[:B*Z@rRE;[KN0O-*QB^/l7>\riNbaJs)kfdWP %;XMW>C&)3-@^#\sDtPl#H9rIDKk:2!iRA>pY4cgjd46T5d&b]kM9PH#lU#`&hj_g<Y3j;\$(:Cki/h"aJ1<dN!0A8o>boeim)2Am %O2H33\aK0+<#ZRP>QmThk1L#/C@$`PQMc7XDg,Iu;8onU]@N+4DH-&1(c=q&-GZK[J0Z(F8;slLKFFh&,l4(?!o3s-._pu[V2#<E %7V"R8N@hXgk7<_>RX$bF1&ru"<:e6FG)j-;g4W+3STP]9=Kn'Gl4"r*$5dS`<"?T<W@u.N4J8fC\)9KTp:tYgb+1s'UF,oSX[7u; %7dfhV1j5=t,!k1p+4RD(&WKZVb$nh%/]G]f.KkV@=mGk$`mn>)`Fq,_B%/gTj%/*OSGoPdYW!C<gZ=82lP`T!W%BO8n]40[?MmY( %+[/a7>#`Ga!)HL"U5A[()ZJ&aZ_Z;`"P4ti-:Z@%FiTX.<ad-U@+<P5'.+Q?epA(`>$G&2LHmbEb\-L,@[:%[G>WfTeeQ`[FlO9F %@WBD.9%;[_%'(!Ag=]?<iD>iNfi`LfB%1,\V\`G+I'),2/5f#e_d8E`VT(uhYm]euc[RHql.B%&VsBjBdGms+'V7Of*5QL(OogIU %AN?qFB+RW2N3):W0=c>uCC+9,$+l9hGbc2@G;:gG=FeL`M^Fag&`h\V.29dqS1q\RR)S?4'Y)YlB?!49@Td-q9b.'BOJBlnN(ol- %0O@,;MU_6(&2fnQq2KMt9"c*F.J5Bhh66k4-<P'WAlS<Fk9djID4AP)?=%spUV72%"*)#5qpjH@f^6h:1ufoqi=>E?$Q+cK:c$K[ %iDWCJfb,")+Y_;sQN+=6?u>sb2/A^\f1DdY+o-^&o$IRR/#'KM@19Q:Rh5he+.HB+,V$EI6?91`hIs8ghtmP<RKj3G(<C5.iimSQ %`hpTc(5@'L@]WQb@M;[K9MK^7@NiaZOVmCoZU5d!o9%=\*8+JV[kZq).lT9PPhEI5/^*dh(Y'E*19Okn=$q`sFk:FiY.Ug$[>+11 %k&C]ro_Ia,&T>$j5n]$+>PqeY('O/tenE\m/NaD!)WkBlKC+lFT;![TU"1PWWE/?H61?Ju<r'Yh\1Cn`8Ms`hjKOs#/S,UY%kk+- %1Hc]/]a<o?.^O[@Fs&-$2Rb&rU=It-@N4@Wa^$;^EXfoRX]O&U,'!+9$K>4hkt!NkAV]`SHrXj4]cB>)EHGqNJgR7=`0lL8Tu&$+ %Dp%nWA#\2_D+f;qnOOpfOht7=:0-1E7h`!qkTYhfYY#<lo;dPS(:''"+N7NGV-kIeR&-7iB^)I)1c9iAE\2%T22j,CaGHs>646SJ %I5,:I?LtKg[5@E'`<l@CN;i4`&$D],;K;Y,SNY93ZS7TO<ugtHjEn0=9OKS%b/gTpGFZAT7ABb)g!)6+A(j<udb&r/*^N2@&EI;% %khPFQMaf8(cgTjF?Bdj5[dIgtnTM$?h]eB9W2Pf5LL?EFpU@&iC,i4f,gE:rliA]jjR/Z/2@&OaO3)GBipin$:7XO32:L%us7Y:[ %cg#BIRNHL@S#Db7V;L9f;PBrG)JX;i[VX"L$?9N3*f;]n+tP!6e:o%X:6JM(gK5SmrDC7coX;Q7Ljb)C&5@]).T^ht11*aa"'pBO %*665:rJ!eD#`6*@$bO88C.ED+0tIG)$3>sm0K.(cSJi[[MHO\1+B:OI+hFSn(c,57*%&7pq&$`[DG/.'<PT)6Rk1bad1De+ZSueF %OuH;"ib9X$aW%*YDKhT:"]LL(]6<YO&ukQ4RK+H.L8-+D,illN+'MUueS+XSe7aC7)5I:MgCFs!\"/p[@QG<;Chs0Kjnn$(iJ5ss %'.aNO%,U0f31fZu^B61b(-gm*+%CDhIP/]Jk\Dpq@;hG^*4ar^i^P73d65lf(OJWnKA+P*"*n1K;9,(,"303i"3QNcJ%9ta$jkM= %N/r-F4-1\c(TYqcC18GuG-V+U(lu=T)*t\l8DDs-DZW"nZfmV8,u$bsO:lptOinaH4)`b39j^$(1#W49@)B]<rrG]S8#^Pa,2Tki %Xp8H@/;enTj@S+'7OZ@-K\4%or*]/\U8YR5_\rb2Xn(o_2frtcRi4<@Fl;B?626[BiF7<7ZTnKb&-(DW:\j&.I..,VF'c;Y-'&XR %O%eHj^L,9%h1!;"O,3OsQhQDRcT_8Glt]D5pZQ"ej:IF=,IE!HX%.p0llVoE+?aHb:-WS>DitBb6iRW"+IiVrbd7$3[oYdjbZTl6 %`mX.E+Br)8=O+#=26o.q#-P,-1@W>?-Y[B.7.fsP,DZRb_RiSSo(MPr18<2Xdc3^U`"93j?_4'-$RL>7Y)hK9i).u6&jpPZI(\92 %>3K[KI+a@OLX3K\2ufRS$qPi_:_BI"_o6<bO%7]P`imdCJ`ld.R6\l]j_O4AX3;4qnL]42""Ehj<'H;J2b,k8"]eF\e_:VW'fVms %!g]I>'"tJ'&U"aY6Qn,Tc$t8`[Uto5&;oS<CRp=MePY2*V1R]/E]#6kd]=);[-1*TFrrbboItN]U2;9,dl7:-bXBj^>G:)DWEkCe %4AV,tDp^hr&9]<Dk]T$@ansSCUP#"^[;[s%%B+1uIaHeUB"WL**'5#KH!_t,,X+;n:/ob6D%J]:YJk,2006>H2a(8b@%jf:nT(2H %cZ+Df-]QDirduYSR>r^UT7afT*F,X0Wd)*9,XhTrbM(?&NK":@09ef6?p.*1Iu>D[$eYUlP2+B"rjHU:7:CL$"sr>6e*quGnL@rR %20N`k^C\JQ0)igO25emC^\lhnrU/^<rRKffo^V7N^]!<H^]2hKIJaWUrZ?X]bE(P0rD13+o8iq%Fk(t_rV-0gs6sB%s.e3.s7mad %pUaf3p/h:fpV6Uq?[h[ks8LWbrO^tbp)j>(bMOAmqu/6cs1A=!=9%o:J,&_erq]._qd9BoTE""SYl*2/5CWLS5Q=c%rT>9Na1o4b %q[`_s_s]hNO+6hll_"4>qX;2t+Bc9K4D9uc)aimZ?Oj=@*$X5tANc2[1IYPe<M$UMe+e]JprBG#/ENb4s89bVY(-6hY(-5]0@PFK %fKT:1+92*8,CTJ;\af]Oo(7Zr#f<bpdbc+iM7EV4;!p:O\7TkM)+unl)=:.1%aA0Q9Rp\aAfOMN#JY3k@,=3%cn0)mbegr0hJ>1T %-OV?QEA%onKU@/ZMoN4:\#5m%gPmRERYY$dh!?_h@rJR.mUms]DI;/tPP%.@s'&e,>qA/,)r;gbdh4g+G-sZ7lt;`\%kl1hbP;_r %jfs'CB0I9^'4r^ik-JtjC8pgn*N#Hn=q2#QDe>'dTS'(]/$eDA+"fdS;j0P)4[6YujMsJ^Hg]uCk>M167$p71C-]HRH;DGC5fM3V %rquCUb^iiZj`t=K4[)Zc\,b>+VsV\'rA7WoOaJ#$T:^QlVS]B*oDH&-?N4ZM<<&HFb5L1Gr;D,T)SN9(Ij#3nrtfHn'pp=8PYVci %hdC?5Z"p"A4(luPh6pmI*%%YZ,E/1s+&6<i6E?u@2;lQ4B]8ZBU0Zg)2G:7HA)4=&T8/]Q8Dd?'I9#(GitoFsMs".SPTsu"PTOM& %]?8W$e\LQQ64QJq^L[#*i:h6Y<gNmW1UN"oe-tlQ5Gg0AAr]K]ArA"HaL9mB<:&_C(Fo`'.?)NG&o!_Z^GS7s_JY6ipJr5!(8PWP %l@jsdjmBYJF\m^2,F-"hc+*Fd)"dnt^]l9:a0kfS)-&j2,BO!h!La2e7U\J\D3uY[/8?JfLu3$G4k;0N=<F5-paJQ?:*lStRJp?s %U+q?l<7,+W5>f`2<ch<[+:V+NLM0>U0`UF07U.2ra&i%fd]jueH/1ouM<7oS&WV9pL(htLZD`OJU\:?]+cahE[8js4i*)WlCr5@$ %iRlU_;![n&kG6l@NQQK4.]EbGDHcn#pA_XG\/8F,.eu@A6O]`obX^?I*>!NAPag[+KR:&G_[E-b5!]q+6+^JC"64(f0V1E5o?gdE %6eV&/\Va3QbC4gDV3,mSQ7Edd=jf2@gnkf53>CtIG1J@0jCXBcMdRQCXjieic<q;`>m)C=dV(.^Uff/+E*R`acXKdK=0%Rn4cJ,, %F"SamMcrkc*dZB=QV,!/1b-]u;OsS>;4L!`BS5JVRICo]o'G]([5p(.VjYN,32&\-83*$G]qLZYn39pnfZ,YHTU0;;KC4I._t09A %26kX9@lEVr_t2%X)f(1cHk0%Dac!hJo'VodaD!M-B9#s[f.LX+[p,ngna+)+m[ep)[5L^EBMmM`Z@MaV[M;Eq_#hKG_Q3gU.2n;m %V#1c6],Qfrj>9XCZ>,Q.I7;6FIF=AFbLH^p"u:n)/?Ls3:_KcF@RLW5B?tOZZ:C+dN\mZUcUO\'@a5+6+^0cC]obukn8os.F\kQ3 %\gnmupR^F(>#@-@i(0i1\J`R/\5KXcD*oC=(72$d-r%;::8lHAMCL&/6?n*S&S;o;/<k\e9Hp&2TmZ[-UUJ'2?Ns*!a0i3RfEui0 %)91G0%s'N:bcOljY>Jm?4eV<q%ZJR6/C&%?.>OmbjnVlb$%G/H8th1/D#<Qcr8!<GYpu!)3Lc6>P>d').t4c\TJk.JG%C7V%=2*P %bAEoZjN+3H)!qcSJ1]rl.Yknc=N$U;j03hJec<spUPo8>h%?1>KPKt+)u0rHOn3hb^irWnk>#j.U]M^uV;XagQUOL,Jgi3W-*cH8 %I"9uc86<qCe\@Fji7t<]%6CC@jtm*:`U$/Q&NPIN[=;^$M-2lA_01uahs..Q,[lV'c/_XA=jRRcXZ_TjAC!I=Rj&&d"#s_Y\E&<V %MB)]&l`\8=T>g-"<9'9l_%8Pt?1t9*lrjpS"\NRYkqB7/-K'Tk,^s1p]!W2T!S$<<gCWDkkhEMFTuc4YL4rHmTk,_d)W%ZRrn7?L %$k\cFH[W.O#`W%ea7\@g)dt7bFWKpRV(Y"7+@$Oe&t+uiB?UciGP*Dm(ZJh;2'f/2%D;8rB'@4bF%_,n5,VmKX(:eTO:`U*TOrf@ %NC.q>Yod03]e,h6[.5`k9WZecDPBfM958/%*7h#a8Qd+9XqN2F&D(?k*/D"-YsW+KlmSdWA/3<nHc?n5aVtP/fP+')E`'m>rW:sK %`JC9t5o)KMWK46$7`q/F/%s<):.P$KY/j37K)O&<L?0PW-T$JPY%b)U>V,pVOgjN.I6g*/Iu8!1lF.;d8F;i813Ej#r5&:eX*UQS %q'[khEc]b[S,2["QQ4c*^<%.BQa]=HoRK$eMMUm%m/nd=)5R)f,_Kg:E15LPH%KgghOJ1BRI`"g]_QV)_Xq"j".j.e.k^jkhIt4, %4;[[Dp!D"uA8UUiBc:f^,j;B;fa);7r4-34)GuSqAQLA*-9XOiMWs6_A"465MLq%j<GM3?e-*@N\Gt4&G88BS%e!]2J+Z0.dBD%B %Lh(A^I>J6AnTmX$5o@^N?Jk2B@m?oMnBd6VHl;n018qfKp;:VIc?he*gJ%RN+1rWjOZ%.oQ(Sg%TAt(d5rh]6+6[s7MDCGeVZ[Dp %BTJoUr*j_MPEsDW85k*fq;QQ7Y<'6Fb*Zl[9`#F_P\YFp*nVcONAV_V.,`8R%`8EQ*D1bE;9)r4%2QaGf=0f;R%S](Rj8si^5lad %"leQS>_RdkDA:AnKBk:O!Gh(SGT`$]<EtmD$f,)c[r2g3X/mj$!r;I%`*?%6=,U,4$!1m4(`X^cG>qKQOfFWGP%7KW[mScTmQe^^ %B5HBW.ZO]_5k+=bf]:G3A+&c"gAEmG8co\P6BYj'U:Lb_\3,G$0rn<F#*gNXRP:7`ig,c#8!j2=DDG8lipU4Y17f<ND]`:<oq1-r %(1+*,5J4K)^UW)1E"ei@JT%a*LX5F*rQe6U&+;OncSt_%X38s#H%._8:PBlS]UUsRhjn<([mNBO\%Q^`2p'D7mVpLai=GDFSBnZ3 %5Fts'pK-,4V=KBP0,N3cmk2K'[sRBFGEhiGTBE?:Tc`''*r9km9$aua."-90^V+Zo5JQM05P`bm]^'l.hhtFpl+HLUc5'2'"2!OP %1#hg%-]Y+:Tc;<NP)[ke"mkhBCYao&lA'R"[HG1#i#CUl0)Ftk*VXi'ro*NVrqYB0q"](tr.t^A?i8b0'2L>+rpV_=6N$GI(DjAb %jEF"H(khjJfT:,UIsuL\rqnk;6e9%s7>TTOmt_PnPP;\`7*]]Lq/IV,["!P#aBJAA=HPK2?-sj5id9ZRf"h#JN3%a%MA\R!io`^h %ls5'Agur0KrLCq@#K:o*Ni\*+MB:G%rN>o--i2/L+PFs9Sf!W5iHq:if"uXMOWNAsc\Wp0V=P_4,a'ao,FV"acZd<kp`SH+;6hO_ %/#MCGUn8`/U,29ZE@#X,^E^&FeCpN6>B52Yc]9[r9DH-Y9:dU.F!F@R#Q+<O->VVQU.k8-^+7K>9mfa4aaN?E)f+HFr;"_eH\h-J %2e`pY,#1f?pl:_?A?%dZ^Ycp-ZbbNilMJ-U\+S^,n8Gc)ZOq/+7B]N[qr,/+9"+[=8>S36?!&D^p?t6sDb2;MGZA^#It#=n]B.A" %=g8K%5A\@ljuWWgs*mRHpc#tdjY),VnZRE5Rid-*A&Ki3p(7Q/J&,q9%<dq#'ND(6M3HP%H-(q%,+WeMTY/!#f@q+[Fn;Ea8Ec/8 %#\B`pG/]2_)-+&fZlGa]/ii`K6+9+CY,hXQQB2.>DQDM:`hnHe[&cB\]5"<QETL9=:'*8FAi`i_LE0&'odJ'q1.B4(Wch%+E@V?. %/dgH$cCqRN+P#_;HT*jHnGW4BDD%NIUK[,Pf<uk@kijTOd\+[iT(YumJoL^sN^,[+e_1FrX!.YhMBk%kVC?2Q\S0*6C6uS>?Fr>9 %>d0;X&TP1X`E%_YJjR`RY6aTih%:)%MHs@<0:TE*Bj=.=_Q5d)M$7c>=sgWfcp6B$m<Im$@)=J<2MCFmR^5/om\UM2mW]TI&S0\T %h($-jpQbN`LJ\N_pFF!&3eU!_YO113o,auF92HHcDP"&^/:0150G]+VR2Ok6kq@%c;tlQj:#7J$H@_E-I"aHUEE>8Skd['YF99gh %5RZ/CjtH<<6jOQ8\",Iq[8IQe)R\*cbd?h-3`P\?`Q'!_]cB9r`3ncqh8`Tak>:;#R$4XE2&a1sn#L3r[eL3"9Z8)45,/CNdQ"ni %FuJ8W7!)i3aep(j2"3=@Q$W(\-#:$'.4LT5s&^qPX)"TM20/F&MrZf2$iY!PM?`%ie:F0'PA/JpThF)e"5lnF?4]IVk/Gl[":agm %L<6O'Wcg/AEau#RM54k]REahjCX1[&'9Ik5]TVs7+]BR.V)ks>RZp7]>!*p-W.!3mR_us0F*+]tk7E$=(*$o<WX,7u4#T%@A@)OJ %2,dP!M$$I'hh\.CPrK_E'XgPU9)jd9&F+uk"*+`$DK=:ZkasubiE8V=RT*jD1G$RFXo>FS!751=ZHAMYnBB.lr$$LkEN'R$''QC( %KoOOGeKSfFZ9^W-&Ig/EQY'3NP8DQ>?'%"rH0U*j-DeL*oSgL>p2;h#6or\jWt[(jSP+]!*TEu:B]Bt_<>LoHFTeP5f;k3rSNMZu %lq"?\^6t2n\P/1';m(\C4DV&j&Pe/A*Ed0C=mG!tZ\XB%BT*I<lGIhAHPn;/*jhl$N'\Phkm-OtZQ82Gkd_6tY,4h'Oir_VS(t.] %XARJ.XOR[*M$0)cl%.Dik*g/@Ni%QN"C1>g-/^[0_`+GIX0CC;HIo8RFZ,oY+mF8!oIS?&,R6^\;Dlq77<Pn_44';PS$h@\+NmpJ %GqZqJrS's<ea\^s)*_kh9=4;tB[",DR=@s60'1$S\-%#(VSK:iB,!/-'ME^:N<>XpUlmZ_F=72NIg$3H(!lNk]<5"dOK]eLnMPt" %TWX!'_=I03+5?A:Vtk<*pK$?B,@bT>-Vc6<%QC2h'.7Rb-6BTh/Hoq)Kt@oGf:A\jW$tdFcI9BJjlOI\jTCo_V@83jD>pSlB>JS" %3?MJfK+o+Uca0:%;T07s0:OuYcX5Vt5?Wa*Ut!TmqImL'puN6*>`2&;.n_CKCKi@H->E>,etEgHAVmq!2HW`^Fd)L*5#<@:74aYD %gTdo5C9r?mOelWHe;o9:[!B3i&q7N=%T[A=)nFtq"2BLAR\F8.30PcAU?6'EBRT+@]-`k)*"ZPE7=1MsU6[Q<Mq8$2("!gYoYmf` %f+ur>jA\W4.STQ#@E^#[9G8M2K*#+9RF\7YUJgoGXB_!(l,s,cp'.nTP)6r35)J_sA"``%<J3<N[FK0Y-;>nP#4D^sIKeC)[BE"/ %cd6bcAQT1q#MFHd&"BUK0.55"B'N3K<pe+WQ2(6a9Kh&_(fYqqHlW_?>@a?9_P#+H4I,OW$\Sdpm+i0sWPX)2aX@'nOF;I-7Chuc %50O$Ilt!_6`/HN3fU+$Z@R9>:"bdF$Oqrk2Ra'<,*6Gi`F1eCW"'`8ElF5b3S![=8-P9l(<aaQD462o?lFuPt$qI;A-PF1^G^X5H %\__0Nn6?Ng1R@;-EH]uEJ_<Cj:cW)t$d!_V1c*HpP0r)Oma8,=J\D6)()K,6-qdb4%DYsK[X3js3pFAY4P\*jnE/5@,>ZGK[DM;i %Gk9IMg([EN>^hkOhis*K=3fm?4hC&1/g>j[;ItI@"WtLJ]TjO"#A_(2X&Gob&q,P%aMl(O5d>Mj@PuEH/Es6L[8AR8/(P_Sr[8d@ %nO-=-5aZ7o>F!RNeceBLrirSANXbqB*hG/2*AQ!%It!4W1chJQV%TM]'?UeM&UlYD&LRVo7dqO2c=^)MagD'2f,4Y">d;nt,o"/V %=;J!Pd:MO5N]i>0U"cVt*a)!,27T63`5&46c'8MB)8\C$o[&Mo$0GND!:e]^FJ)dDQ4@0SX$:^!U?%!?!mmOg0*O<?`:YX*A.+om %lO_U6Mdgha<QDObk9:f01S^HUa&c;Par!_B5]u*e$k+8g1hpZ*\T!nHg]bDMh@18<`=uk1Y(Nkc>>:tuC@54B`EhC)B5Tdn.(+%m %`tK#h'5h0PaRCV,=!!'@Q`8`TKe69di/.(>q50Og\U"$@R%miR:fcp>`/4NUog&NC,@'?O(!G'^'7"\Hfp@ZD/$pA81UT^MG-FU5 %>k'VXAKn-1&c6*<8_1%R"Q!Ufm&)M3E`7ld'\eQ(WYR4\gIbD5mP!V4`N$p^J5<sb*b"joGPF_G>hu&1E`H;E4ff:OmT)!?$bR$B %92N3,9$G-ql$@\_1UJTUX6e_(*Ji)5W;=4V-84PD^@>Hujl4*,2BX[#e,4<#hN/bTI'3\CS&P-1Xi?tI#oTW:,p<g3]r'h"<J4mK %!:NKB-`%$G'"Mi9k:f_NHP+i[-p%%G-XD(uM.p;5nn@1W3-tI'1)$9c"7!n>E[4u&*3XNU$bYbR"88,uU9UOF"&"N_/RhtTG^;nh %':i.&jG06rUeQ8KT&@5eCTVi7(t1Sn!&&8X9gGXOLN5`5#1b9'b()WN@L)-KU1kSf,MarSC]bsKiI\`r()r/S^U#[YY@4Wc46si. %ea_`^qI7]lE^\=<\5qh##/()=*2Q:gk*5?<7K]dj<Yr0;m#M"*=L>EN_:AjZmt)qbUr>aS&de\J6\FCeXk'&'1#&UAPR`m!N9$Fn %(GM?*]si0#@1uEXJ4jmZNm/1A6Q#m#9opkG`2GT`FB%<9<MG.$1CK3CMBd-gg'h]4b,RG4j1$DT*G'2U96SIp_K3M5@CPYn+s]p! %Kq'5sL`A%i_@NtjiZB`in1m=VqSi8^*8'^>AQsieHd::[)ZHn'[_7Re3GU_D-C8m?/;pc4f'F@#ouK"M`/OS(Rp6W_;:\#VVd^94 %;O%f9@\b>^cT"(qQ=J_jd+?me1!7p?-\V/1_W7=qT?D&aH$,!kH/<mj2RFU9bN-D.;YWV2`29VSKCgkJnQ$m"q;k3^Ibg*_O%E:n %HbMk&9(WCYLH(h.<[X<]M>S09$;)VtgZjH\s$>$_H.MPXX(!a[V.9,>"a]8_g$jFS>eP6s?FXh&`!Zh=[4D%M628_(F!i<uD;Tg@ %dk?4J0>IAH)`cmOLU(A4ShK;9;]P?(GZ?;O5<2n0r8O?Df!SL!=+`q.#'EALJodE7J98@#r.+shW/oVIen_OC!SM\!p@H`<S+A&B %.`>X%.UbTmMNG6;+i!M7$H]sOMr]baW7!:V=\+"YafW!D1SoY68Q=i5*7;_WrIT**R:J)@icT'AYIIX!ZM]AkLTU<nlE!,F?oQQe %m_Wt@n,U0,<Q`kN0-('O>t9@<)kY2<m*djaP=ch'5COcqL.GSEA)$=c$*k[V<+"Qb>AY-%2M,3bDD<Ue,VPjjlU]%C9sp^@[*V,S %f\.*:&^$2:PV8;Yj@]gS(>GN/pcRe(C?YrW?@hRd2mAiB.TEqANAqiWdpE@4+Rc_--L<Q?rsQ'bBgm%'>,[lC0/4o>r>M\#i>Z/< %gcN6$TPPQ:"kG)f?q"(tFA_'"3L]cN`UHm9X$XI6esNnZgm0J-.BTBdm4&H*PS(WsTIH)Rc:Gk+=Q3L"0Rkp=i$UXk<IE9">JUW$ %X;?$(MSGYcE)qTtP;+GcHtUs6`Bi+XFsm>3@,C4JOJFW!04`<MQ8VE8rf_q8"8<]`]_E-ESg!H8XaVIIZ`X%e$ORs7cde%uRl/oR %)iG0(gJ7DT:7@@F"EOSQ"U$2?NhjIl[C\0B'bE-M7V30%U^=Vl59Z>bWh#Fp7AlEK%mUE2q$F!h4opN`9<acNHSqWsCD+$n/TQXc %#D0o>Js:)Vr.6&s-G(l`ch/NO:g`)KPRIk]XVkB6eTITtTfCCT]iI:NS-dT;\seDEXVCLeV_maT0RoTeon+sESeGs1MV7-D/[J65 %gHU7#A8b>-$q!b.&QWadmDFm)qMK;blK24(9g*2!VIUtqI_rK]X&9EP/kJ)ZC>fFoVIF,D3YBj?>!IkWY$moqKfpY^97[HKi&H*T %VN"#*e4?0cAEEI7JLn\$OZ]]1S=/=Z8c,B<Yc[hfh/$%`!nohQ7F65<Fk).s!u`G<^]O*%lua8:>n_H]`b0DO8B_:8kUE>Q.CY0> %^e\J',g!=>=0/N=B`i,n>g5j^Iq\mc0=tFZi!Z\f]Z,t8-j_(eXJ3t>f`/m*Zge5<:)EK8XAYPmc.b#6JgS%nXh'Ic=01$XKleVP %8u8g.0'j3kZX+ASft)$CIfeUK3L2^#1b/_*$[Bg\;$.5mIj06M[6*^m/KBh)_Krnk<02O&_p6u$;U+&',;e#gdN;)_Bc*NQY^r7* %F0em$INq36M5R/o2IQekK\aX+h1H'7]_VcB,()ZmCk@I=TPkOah@MuOQ]pjnA`=#h5'`&o>0G2GZ/3[Ko!m5h`*5'+;BqrNq9.$# %7WMQBSB6/YCA]EJ,0R8He_AQK(gZL(%"OW#=?&a!L)Fm%`-8>2U6+"([$h?TG*8K%!#RPeSLF3SUo%DF1QT0Q4r^aFZW[A`26I?0 %%d[@Vl9n^KeasDoF)tb-+F/WNRGj@?/='CQm/(\loaRtM*"*(<8pg>lB#t6dZp9u.;%U:e$2Xg*EB[J^[)IuPD>:c$^N$YMaX7,Q %n@/i)Clf(uKZ;7Bm]!(D&>)3*Es7dT<\Qi-.Po%@nm"(E^oh`\L9<Dg=S#&X2_1$NYOr&NRne3'euiBi9&S-jarnSD25m@/Z+ImW %%ZF:0iB1r"1/Uft:7_'e-lXbX)70Q,SM]*s;VC`sB^t#6ClF+s#bkIl+7)E\B"$^_T.JaA-3T<MN'J1BYEbMTOgLgcjpU1#,9'N[ %Cp\WmZc%_.$eX6Zd#bZhat$QRdnoO>4a_)j8(;g>D>5!M[aPTH*<hD&<A181>$;eU6=p9KA!g?hS9\/PfMtnJd`"X?8-63)L=e:- %qmJ!kAqAL;$8813XU/@Y>Zn-@+_@.M8M*(`q8Fhs(I>/"TUP\o5us4W?@i3-p=FfnnLsq1GB*idph,(((r0MYprd%Cdrj7ApOE'! %G-_.Ss7+o<rmsC4k(F,*"@Qe,d1o5J@nCDs$4SZ13D'd=!XX#^L=#LX`nd]8jtec-/I*@!e^;Ubnor!Wp-39:20Z^qgr-gEoE+:6 %li_Vh-gme@'[O-8Zl*@P;W#IT1gctt;!c@&8(doXoDRJPL574Mk;_5Q-c2+Z/O5ObHU4hZT)6C5?S#F1N!0r$<2H/&]4G"sf=;r' %W6=C5GG5=">D5U(Ahp$^GGs&>eVlJJ^@+WW4FLcuAcsd;;0_-1)'imq>_)4#aljS2b4K/4hPW3d)q4X_Ak(L^H>[gMlJu;RWt_uR %%!f`+$tio\+lNfcS%=FV1jhV(L.*R<3W@Q18C?+qWeg4Oq$"@#Y$mjUOgM.])odDWA=1!0`3]Zq4*0Ub3elu*Fa3j"?qY:_gLN/[ %e;-_!C2?j+#ShD8f=#A$NM@7C%(c^4m3#N94dpF:L\e3E#'L>WKn2YBC9S^Q,-]PS`o=WCV9(4.$FBQM$[Fln&*SmVl[QE7$;SLk %nJ02+.OT&5WGTb6oPDYn:J_8hH7_q\.X%5_=>eN^$<C7moLcimk%,hC%AS"E3tKBBV._H7cK\qGE#t`/coNs@.U[%,&k>Hu;OhK< %PdWi/X;[5Khec!"iIIu!2Z8LSAW[MSl(ko7%+Zf&hi`^@8Ot_$Q(B@O7TR$(XFI$[=14*qnB7upfJ'Y_/#6NA-Tr?VgPgqPW#HZ3 %RMBTPDf%(b$RLkL'cq=CY5)\_V$a]L;_,SED_I*K.@0,mi5GX!D.Xa>ibsiNAfkeI%U2EdWZfq9*o&Bl]3K3gnH]Ff3W0k^+OT=S %#[Lh`P$msam\spr1:71j'P#Gq#lqR*I)34#GN>H4B_7Ji1=mt#R,<G*]o(72i2)q`1ASt[$fA%W0Hng+*cOggf)A"3aH!-t5QU8L %m?E.EbLmG/&gm]_^;[=,TAVdV42-Lg`*O`T/EHCP>Mnk73U7E<L.?9$4RdR&<X;!u3\js`fj2o=-S6Vf%AK7[_KOs8^^OB8Zj'sL %=SNOOLO`[9'9fu3Lj(1`hblA>YuRo'\rf\+(bb,#>slEQ/*Y.8Qkn4!a/9l@5Vj!h)kS='P*sMAfk,6hX?c^WXO@h-`W%Lr@0)[9 %?7>be7TN8<aU!V?L6WY,&6'TR#uc$dO+C8>'[5PG?[Dl_.%XS@]9'u^jD^1t[F5,,)/Ea(V<1&P.4R,Fq*>Ejo'XT9a[e9#UT[jZ %70d[d+hX7[D6ekf3-R]WD_phH7A#+RlR"nu>rQD'j"u\%.h*(h,?[8e.2.c&SrP'aY)*m^d8;WE$q3,A[gt=!F#CFX7C3*c#8q9) %14UMu*,1Y\Wj+0QK0C/9'YA(g2uno.BD9[&01Kh*)sSWa-L2&%Rb7op6o^!;joDC8h9\]4I2YUOh<Y]fLLbPD6P3h+I&>i."Zmmf %"p.Op/TiXK*MCl[EH`<M28?gIoifQ@P%U43]9KhkM_WN\2P"_#HictW6+7[n&V;a$m9);CN5cR)nI99\a:%q"22`iRFXD/jq`S/# %Gs,s,]"mi?%&oAsG:iiF/)e"$ZBt3a#(rmp*M7:&RS2WS6juhs9p_bZf^%+9]+oqtF!aZaSd]5,DX<<nP\(igUp4qT>@,io=l9Bl %_n77S+"`4Gnm2mH.!6Uo1ltfQ4[o=.Eru?kp]QTR2"DY\W+%$qN'e,u7+f<`Sp-+e_oShaC2O`b>khdYY\6J0>KrrRoL2mZ>5F,3 %r+n=AlmNP[QH*j^.-Ss_:h+WXS)/c+@TW;(G7b3^[?&Da1&+k1Fmq3HP?:)k71Sr9fjc0`R[?+2[^IoUOqB6Q[TOip[Xn2I@6m/0 %EOCJ.)L2N@A]4g1\Maft;T9e=fnf',W0%g"e6JQTaMM]0DIKfFe>Uu$n,V8nmD<a+L0\p=;d:Nbmh,rgAo)AW!\+M1J(9LaHm4G] %M-^C(-GiVp9KWK8D?f*`?Kb=L2ETl5\>$hr'dJ&:kbsrjVR]EIRn0fJ*7\r0T&bZL]IQ/1=q:a$0;,Oc3m=nKAhmqK7jQu92;e`% %\sXED5*F[l.[]*%Ni94nE@aoP"Cs"E!dOD'm@),i7]b$)D_lm%K=dabN,0_&+(Xjt*'0HjNmjPte5T=)eY?N>Y3(`J'`hnUe+E`n %SGUKS*G1PGK"Zg(Omg:1>m#BW@VS:Pkrd^&Vn/P$9F]I%i9JCNjJf=BQ0G6D0#h0-iu:`LBiZQ*j+NSRO\93S`OX#a_gC'.jXV7b %a_)jdK>X&[5c'#i_cY^(GSk:jB=cb+H/Pc?cQb:,FJBqU]-U0c%g[\VET9M;@%NHJAD(YC@a#<u<<-7#NDa#12ck_fNC0G[\I^tg %We(\8r3hmW2A?Vmm,[M2`R(hBDHf+,Xj(.nMa0=E!L_E2LW*)PZ94f3D<5.-LdfFa`CR'J+BBmJ5D,/,2=7Y&YJ)_%Gq$u5;:Dl= %*sT!tY"?g"U-+d`nJL[sQ8*`./?>90%;+_,>?I#VS!1\*%;^eh)i@Wk3;.5Q-"m)u:Dt7(4c=#pRIPSQV#+qLJ?Ph[i+Lf^m$"p3 %&O&VZO<?n9hdmc#N%RHtD5Rs3b_R)d(T:L]T,='.mE=KHDhsLW9\rT%k>fMqCC:t.k=lPLZQS(r.5hs`B)E7+m#Q+fF8uX2"ent. %/3%jPfk:_%:*0#8rQ9(XgVh6he;Y3]hLth?$+*3)oX^@(.nM:,lU3/%mrr6lM5OsaRoJ`/C;f@:;*WYjcqY8M<VT22f^\(HK"?%( %Q\nZsd].!#)o:k!9X1/@gZd'6Tjog/&LK-kN0s@H:lCj.bfuE6BFOI7W=3#V[$7QC`3n_G_,G2\<HB29CEPsBmLKMQq>#]<#Wj7% %;aAc>i`FaYl>$CpoNl*RUM?lQpb6NMT-n6RBZ2daZ:jSBd3r:0>Y)5"Z\?D`fk9f\,`9nKFTd]r_H;W7HC5U-)ml<G[>%=5@Qadj %/?\WbDH5W>Z!X2i!"Q,kAI1b=N,SBj$]UHWUIJC/#^ch-hYSX?b+M!I&Q4T(i"RDA=#$`lB7n))I4mNGqk@F5ZrUb)!s*)tqL6Cq %LPVW*"-&f+6<kYDEbcFD>h;]LROl`.2nK;N$crespe-^,S-62a(h-ScS.=d%^fO)V-ks3g8WYTEOanJ[G!V#:-JLs>2]lET2LQ_e %L8Jc-N,,JHne8/X#d/ep#hR68'P/a@((q4H[kVPl=^+fIFFejU[55Um!/g+%!X"`I-BCfs(`!8%@02!J)#\Up(1sQ9]iA+fd_F;q %WRTVe+qJ#oKi<XAqD@mM.A<^V7RSPukG<kfDat\0m4p))X9E"0-QpW(d8=Z?#$oi++e%h19:3M@7`eIYF'J!kke'N#3Nf8uk;,kX %,]uYf(Wb[CZqW=`l>Lq14Mq)d)/[tD8^a3?i-*9M+O_)!,`U$RCR)B@ake$:NCRsV[tF]2d&p)Z83UVUidfbchCINiCF?F#$B;>% %+qQ"[a9FdorhirFRT>gT8.]fNAHW>j2FJUlSbCq0EN(I["3CbCA.'>S2:\IoAAprb7UWfBV@\q:iZZlR*5WAc@";b+:gTa"N@Sf' %MsWi]i$K3ae):ra10\Q70ltdgNXCeY&9EWg@9N)6!Nm#'cAm_1%`!'$-u7s4>btjNqIksaRG=rCLc&/$_J7AM,_DOJf(p4I3,][P %kW/kIiAAIV5c#^+=BFtV?0A):Co"8u3Y\.GT592o4<g2O.5\29=I2oMfr;q"?d/k)"e_SDTs^l))D`PfX\';OH5Bqp1)9aQ,;a=A %)sCN0VB(Q=\;q:eQIpn-10^Am1GX(%lNrZd1sCFq@*]+_/7k;cR)[92_Ys2(M:B;26b#]TpM*0f<)t0\9N56:P>3QUQ(h).UbIqk %T81U.OiAMhh`_5Y0[ZYJ2T9SoC4b"Q8AeWlIbW+Pb#H>B%GMY.n'f#pae"bm]#o17\h2&H)2_I>6o@GR8XY1oD0LM4=VVT>+'OAi %S/@*GW-Rhto>$/"%dtltNF@Jcj^Buq:Y`AASY3<iEYtjL@Rie!EiF$n)AtIH1WYcDhLbI:Jo#H?-h:"8c]#L3.Ptt`'D(Dr&uEF/ %-3.H#A-LsB-\JU)`f4K1J89;t"U2CES1Q'L[2He=j/h*gg(TPtAmfI(C'21R*1X#YCIVD!OIYOG$$ANp>51"qL=F_W`#M"[^;NR0 %7q7^jCT3_A$52ilj/(QOHa<n2fe'PJ!"Pf\.OgiE1-E`j,ItWuGJF1?<$iO`$1*"N[50m2'$L\K3Ba3dL&Z`=4AC*R?^/+`$QF#P %1S(iGFW/GZi>3o;$)*n\=f,N[oiaBs;/CeuFR^P$*!2.'B6b2]BJu/O1D9=&ksWGF"e@uOOl;b)aQHA:?9n.[%9>fT"hEXA"F/1D %*.%^Yal*2VB+"=m@GJLSGam/aUM;-WWOUB^/FQ</&TM87L'A[H!6gBh:.!No/[0br,ZDN'9$3KlEUr'cSV9VqU$P%T/&efYK`Gk3 %[29L<:+jN1fkXcG,"&\u327BNaC>Q*3mrjQi"G>$Rg7K:TdT#&b!J]3-i*"R+68[Q+CXpu-5jZ.0KNtp1]"U3q2:^+CFXl*<qk`r %%VUcJ<r)oE'#KDAe2]870%6:[)/^[LXHUmi+?WeUfO;LL*X<)%R$Hk@UHp#;>iaZsa,6bsBmFu#&X%j?N-t"q*ZD)gj*U,(gJ9p8 %S#C0C89QTuQDk_>_\%5M@s&_CKIGr'N(P;M!W[3lKB@DNUCPqC:?P[Y9cVJO1]E2i/E<aFR2r&uak,gkHNV&0jOcf?CAMPn]YMoN %(hksB'pqoJRr'Up1's'tB>ll:q<`2MfAJM9`@-Dc7[t.%X*15ACmi'p*"%B=MKTiIlc!4+GO=*n_9=i%)cV(jp&ef;(?DSRUa3sm %O<pUZ5A-f9`Bj+$m+[+6,C+rc=OOjN75QeqZVaauf+R0&,imM?Z9a^3RGOPRAamBAF?r]/4L@Q^*dH;:Vq.7a!puoi'VF9K*5EsA %,mBNP"BkgIG6cBY-*$_J2#W!5]WP!I,hPYg`Et-KWoTPZ>/75A(0iqjErZ6XMlcbofM@@[B!e9l0H5"5bXh:9BHO,kJLZ3ADGC*f %UWYSG9FBu\p*lZ)h(qP5kCsQK>E;+rp(BHj,q(l<:Sf#""i`qo7'6d9W-'6u)Zh$L`^Tqt$H&;Ea)a-+=<l`h-nh64*,NeP'5_`i %a.fDp''Yf6:dMIZN0$[%E+;s-J>Z^$GuM.HV2?69P=X@pU+d@/e\WJlO1A+C@Y*8KXTZ[EZ3/l3!@J@=58tjUX@Iq"QW"*8juPY! %D[#V^6?3QJ.$L_e9?tu:N8Zh.dkh:YCT(5Y#&`MF/ge:H9+P1X;B4c!4QUT^9$Y09e9"c%Ak)F^6F!9!Or@ar&>H#V)kcb6c98VY %9u^i=W@W1mb_]4O!4uG/[%n\r=!PCuV8HNcf.X.@ir0PI,g3/HEEP.o4`O#kUVo*$YYZ6_;rgg/'-fTOf`qNf:!:A\Q;UF>L[aF[ %2/1IsR"M7*Y/;Hn^m\t3GdCPEo@siL-WfhE3;O9EKRej9P5rruHtcTFh9psCVQ<[QHpu1mB>#5J_qN97c=LN,iH#l67G4>llooIb %`B?,G9oZ1o/iRe%9qNG$SZuO5?2=X&*df&l.$EYBcbqsIm7iekZSTV*)#ludi$TLB^eLGMT[<rDU*U1YHi^ZF89W_8!l2[#<2ltI %r7Z%22@XDe0DHFJ>33^*p`.KaJkGj/7j>LZ&"P:"U3;5\=F"]4Bs!4%Q!hsHIgVRlq1a%g1"Q\6$>]dA9nSX?4:pO%gg.n/8]V5a %6#5!dU++XPC.p7sj#T/lR8KUfCeKkI,YjZ+a9_$@Z;UE>:I$=jF)=-E1-<t:2,3/SKtq7g*O-mkj8l#c4F?l6?Yn6m<8F1.cf4W0 %MWOI#'gU2<bZ#t8T)N^I/^qREP6pGP=+3Y1+saL\QT1?M3u1^o%-'o]YD\2k&80jc_6W?oU#1jZ-9*=uoqhoR(O3b!WHMhcVjAAp %#LHR)1!$S+mb+_('.7CnXI\+P@4C8V(@m/jMNR^`Yk$jKDf7njaM>Zp(2#N"Z:pQ(!Kfj*l4SG?REh^B1f/G,;N>GQi!)J\+Z8U: %)F+XiqEp7Y%E>+I_qmG5i+$'4iDA]X&ulF)>EW#544Mm)N7tCK>_Vc_qCA(%:9OS)<^;p:%9ift;ek&/+>TOMW,6;)KrN7`S5h2m %gX$H9)Ku7FeE[<MQeTS^5R'1i,W%b<ju5[4N4aA!]Ski3(54IfBY7f=YQqodGs'(!]o"uhSFCNMcl$K(h^"=8[)5$[6>p)uZogu_ %Q^8NKY(.A=[3\@5mT9qcE<u\?@'+MG'-Ili--5*F6nZ'q:2?)tYZk[Z(bKL+``9\S;=/oKA'AUJab$lM7W[fQ321eQ"\3hFodX[C %QmsE^'P6(8W&1WGrMPh%1)H;kA!6<'HA\<gTZC,m=f<c%-_R;g)"RANcu*erbp\D3=+10@0eIt`>%sZApK1;>aQ1t'a94FZK8_op %**[7h=>Q.,,FBq-:6&cYB9W,D1P3ja77d3*-pOlS8fbi]no$5BqdC4;0cg;qTqEM?&',P3:<\MHWCG?X\5^8P;]L.onCqDT&&j-J %)8a2WPh\>eb46mp%M7R(1]Sdn?DGPp>t<+0@hT^oY9?dmq(:;KHrf&rX9X^i8;50uf#:b@pS\1Ch"3<XCtKD67+2#/%YlbKD%\&5 %;iKk9lum=t`U(^IW!B$g8Y<54\>!<MG]+MR?jD^Rc-H667LXL6T9HSH$b?F[qI(DfA:g6tI!Vo.3*<*?iYodrp4PIgVHc8L8]1mG %7O)>:N6kJK2NN]:`i;b%:"mgre2hfEUei9Ul\\3K>;_&ZfT6^u:PJE[kpn7LM@h*lO>-J76AM%`\"$`=<Rdj]A;EuTl\*P'L6,=G %_K"BT\P0h"D.#?H7>#/*1=9+GKCU5U?K>(APJ_9%[+)SiNLM$[RNIefZ&5E-;Pk$!=BS=1A*l\tCIS/^]N>\fi#Eo/Ff'd6o**<& %@15]!;pHH0PJT('fdV5Y+WEru<o'\XGaHJELnn$)Fdl7(EGZrZOf?Z)-,00K'+Qo>i;W"1///CH7pDLcRYc\\5`n;l=fJ,sq0uRd %"r1gWPd:p?ZO=i'5:NX3rh1%*<C2p+P8>Ep#Qd>?K:/cc$B-Oj/u1sl$+&5*8>`o7Q\uP'1#qA+03sn=ml3P1<\RhfLmlMcM)MP* %]*$_b/o7K:47.-g.FmM#C8F_/$oj42pt:>`#V#)4l7bOZ(1tqFVA$;4-42Ggl%';[S*$13-[1M#EWE"W<UJN-eA_ntS/Cc%1Fd@" %GsTot&#)\j6X&+fX$GR96\u.cng3;n02G%Q@eN1Ei%\19!-4i2.uB;eTd&IYJBD%XeQ[!u_?"QoP^*5B\4X7SPA@t$RCk+"NH\;, %0I&[0/N9/;^^A;a\Zr3b($J<u;POET<]a7l@Nj)lTZuQb@LOTc5gp#m10Lb/i^S#%qjU]M4eB,s.iI?"X9FHtCu-Vn`004u[>D7[ %aWcs_H>\V/,%ogV5mihpl-BgENQjH&AgG\lNadVd8uj5:`YPQ*ZW,:d=DUC4E_PA$H$M?f+oMjbOTCM1JT'">UrOBE"A%2rTi*^f %+9ULP#Er22)R4-(f08u?,1H"9=Ogj<#)A_XFlYJ,QOE#[$_YL3L2clOYFA#BW!MNga;V3NB\4dcc&>*Q>-e1(*JY>7%Ma``Ck$_. %Lms3p$0g*q2\*-qW#D!1l`qo-:aPTk3";\[nIKRN$<G5;cpNeFPg`G:P",TbW-[ZQ46<kPI#S[b"!bd:4>8[6__c/$&1=a?lk;t] %h)iFiD1I4,.l3e5>c,Ef'BL$eatX@>!PQa4.Dsa>Xh7c9&).99V2;pX!H^=rbgN?"gKd&pST0(=euK\a9&5a8ZGiQ+F&2dX[a4O_ %55WKu?io[m7!3*#6>K*W,,;nDW])0`gm#B3q(2qGETsl%Tb.J;;X(ZaAYbZ1?o?'Cgn^:f21X4DmSe1CFRW(i2^c.XfrD4+7Do\? %OO/!f,b@%75SV9NW5`?ZGG<lIF&q[q-4oeNnO;N(1Ec8nS]i*n=jgaHi*`<07jEY&;$9?0(8Skho_rrsIZW`E"@rl--s7P87]sL. %'Sg2.?./*EamP_-VB_;"&6dUh4B#jWfL0jY.fTRC*n,-e7;EN8m$m@T#t^F$0!q''Ysnl^2/R>r<o9"@X_E^M5TbCGiJV4UVOliq %0]FpOXKK+H"'=c\H6[<Fkr>^Jp="FUXhj7;5(]7mZjA+u#-)#82s]99>)*bfW)Lg,26o%`B;;0a7H[Ng*>NE[olDhk@$A=),4]9! %HAuk($JLfmP4PV6,@O>N0mY_+"W[K/"SgT.Zq\Yn@JbiQ!9iP.NJsdV=Qe@8%Ul-\-/+J&8WnM2/\oqpk4#@I^qtoOFLYKW6cNZ' %G"`tF8>q/u)$pEc@>M)qZ62MK3C@X^G>60+X;S<L?lF/[3.sShe;SYhDBf1.T,?$LRpq=_4]U-oIKm@F&3go^QYS[LcH54+`B4*F %\Q?.Dn6rqIYL/\/F_:3VP(hB\#)\9&BjGq4"apf`.XV_OBfjT8DgV`C\LGX#l8920!@DL8(e\/3Su$\$?[W)r+Fo!sU;X`KBr#k> %2Qi2\>D`p[\0]7Im3*/g:i6DQW%(sPdk]`o*_,+TknKN(:U=/-->DrNg+J/7V\<QU:mMnJf#;@s=RFY[I/3.Q<orWWOr&-+gGNU* %2F1t3:=b15:*\iDW[A0HhR0Tk1erUiP[*Xk==+,_&p!pP>MmOYJQ,ArOo<A\82][fkuIf$Y:IKRZqZd+n.b<UoKTHcjo!)P$89Bh %pu+nG1>4MZh3E;I@Ut<G"Vr[k7EqJT2Wm-4p4O>g_l\#TjD)'ui3d&+KFA`#:D`K&&m&npd*q7[Vbru7N+>a#mZL&)*/HUcB/PJ_ %#YOVD@1B1hHl4?$Ws=JDit?HUof"%d>`>mrc6AW)1-]A`*YPH$,%BuU-8M:E3(`'S!0b`>EE$ckj#e`[E'^72T#u4#_DEF+VTs4U %EFk/]d+\#ace9`:B[c4M;q!DQ-ml)'>tTr(ANsKt\2ZM#,AdrP,V.(!^nu*"G+up.SKu4"C))3c#"=`kAmM4=ED'7DMJ4?6+I4;) %eV7H!fWM4;m_mTgA[_HX3N\+%)@+<kU9n:T!+P7+jAK`NSc4=S<u.K,GQaHmbQrig+^gJh!L+T#`%YDu@E]E_eC#1M!&8!nUD:q9 %C#5OYc].;BN3[;4oOM@/VifcYN;lJg*eb#X]u1).Fs$46@Wb^Se79p_ij>ruA_Rr)"-)oN8ZokKW0g+Pbu%RFot@[,J7_1hIm\gW %'J!.KPMLCA6Ar,]4.dY@!t#?bPBF59`%7(/^56V@b&hgLFB1t2Q]&0bPW++k+Ho5d['B]Hi69Y8)=qD>VJ1YE`3flqRB]SN.$s>r %$s@;f%ejYe5-PejWl24WitVK8-`<QG@_!0.aj)DI,WcN,B;VqC3BYG&==16tkO=*/K;cr512V():RNT$K0_JA`%Zc9L22o-Ak%jM %43r9op`S,N`RkfNiG;h5W4o;SmJ'ju/ria4*/E9AA\m?\dU=f\iNYiMD5=Vm949`_0+m6;`+f0F2IP&X:&N0&hjMX;j-aipm?'2< %)AU2L.,'c8`nHrr-M,snK4=2l\Sp=ioC,WF9Sur3$:iZ^`g)Hp%P`TW]G^n"asg\.lHM`@NfmSjA?:UU0u^2I7^c-oq#j*)ZDY)Y %(0^J?)HEM6chipc@shRA\?TFRPt7XLVDJ"2>re/-<iuZEkt0UZWB8OZ6^#A[+EaaU]t#2R%#!o]0irmo?:H3u'"qOAdh1=#3SMaB %adW%M_l1HBN1X\)Nm]`KE[]@M][Ht-BsLWqVKHsL90eQLPAo'>?5No5cU/9j=ECreZ\<:]UuRpl2&s2V(>gHcaG+S!Ud;%,_-OiF %'1>uhXhjm5J=tSpj"k[ZHnI'?YC91O1W[W]_T@)Y,85Dcj0fm[K,$'sZd$2nrH"%0ark@-X)1c"FW:i7VmUIjkZn+Df4Id^ZBp>u %!FR`i$QM/Y'L^3k%E/W>!s!$sE,&rS'J3b$DkYBl[&Wm%Rl-V3'5JEac4a]Ub+_l>b6d1Tkp';;I6Wk02sQ++-kE,fW/8m*h9Q47 %m/SLrD0S!k]Ga"WeJ$m5!XpoTYrIuU=`Hr1XT0JFf*"sadfj-jH*mn=Z;M312k\JVPopZ:OBN8LR[)Y9j%m0#[0?$NEWTnFTEt4B %?*Q0.IZ#pBJQZtr[[[5=?E3,"fjq[YM^#:`=98!*)O\L-RP0se'!%J9gMF:$^[hAlmskH\WBIsb]GQ=9b!GcfH:KT.]:_b:RU'*9 %$#Y01f4sf89QufugAl>>Ej]me2@2"[@$jR&!^a$<\`G:kCITVrg[&X>%2>ErR9k:k^9TWJcVT0K?<S3j.A#k]XO]?m!%*NGl/]>o %Y]an:B'bg$V>FrLI__igAjdBA<KATf)jFh=<)2JC563(?OjU5oO\eLZpp76FJu62J.l&)Q-l+kP<Kr*NZ4@T5oO:AAPT.lW(u&Z= %-Sn\L\1fHV>6Y=FnU7&L^.*nZLELTL+LNa6.<0>tP,oSB7Ls[TK7;nOF,*K7,>uF5YnBZn5.H%s'@pd:RHN&aM))up)B*XiPH,5; %GCTb.i[4ul9$gl[XQ_Qf5bl]=A-:UW,Wst01SUY.4BSYV;.7u-_j?aC2h5D*,/Lo-!14ZDJQt@P3,39fUmRiUV):@j\i#\LaY'XM %TZKe7cH;?I$+%MXNKV?n7P%H98)gQMj<8-^T,K6L*/>a&lXk$8WP2q$pO3nRfQo@*MXmmZ;%IPQ94SQ0PsW\GL_[bm`@Q$e\h99u %hQ[)N7i.)&g/hC<eoGA-4&1]2O%R.gc^"pbYgq$0\E+PI[4dgpMg,bomBca*U[.85\o6T;FeR?>_uTKRW5kjfH-WX:_s8lPA0I5q %G6NdpXAGk^^+XBM1)/-,cHJS@mnge15+iPJ52);5`C@hY=;D@Bc4o\U[0n_dMclRo_g*.^(Ad!^qoERb1XB=\nV#tlj8'@W)[@#p %")JT+>b&b7n)gtk6m$N<RY)8&f=L8[n0<j)>@%f0+[hHZ=8^G7FurVHhp=W>6afb2DjBUKb>A$fX>cj&AibFg&_=NnMcnrmCl`Qu %%u!(Cg?cWG1),\3Y!Y$e6GZ9Q8;LLUOYB4+D4MXI:o\)X5Z4OiQ43hNEcW7A9O-]WrZ.s>.qDA?V3KX2G;)#Z8S)&7K?g^"KqQH% %r[WorNF"ana-YmRUJIB>_S=6:ffDDjF/5p:Kk=O`/Mjh$OZoZ(MK,Q2<dULRW0G:*`f/,0gB$)JcUlri^<I^\iNNFWNk,pokn\": %%rED^LWeEIpC'25AkQ\OV^hr@G5ibdE$]^S\"P@FoRIpki'B'I^qCTn$,MK''S=_X0lJ+lA8)c]l]FlE1,M)^N6&NmZOi7MNjRAV %EgR'i^3,<SArf(<S#qofgR]t/_6d66.:EodhpDQjZ@KksSn0>F,;:]0qpBM@,_:-EEc<r;;tY;CrtOgJBY>URiY;4oGb*Mq:S=8] %5+nk&X?\jQe3Jk+(^:+(+E$rZ/-R%3bJfS"+6bD"*[Q5!#UYnL.nj5:Xb,"`>ED?UhhZic9o2eKq_$>`$%uCsb2DdL0'7a5@U6pP %AlQq'i;k$I(nJX)N1G/>W4[@X?f*G"oiM/"b>8("MEPSfHbTL*5CFBI8c<ud-nSe,<sgMe*Othfm[^JmoOI.L:KgbK1+:gRkcI&@ %oZ1sV6#Gt^FK,Su?E#AFLfB0]!badIP1I_hH:AJ`;Wu!M6]GPpWl%4/$`,S`Bb-@i`1TRXr7F&\iYoZp@1o\S3e9oZ,5J,XP]]^% %@+c)N$q_'[<:Yf2T9-T"9A_AZR>$T/e7Ot7Zf6]YDE\6i(?ji.8kRf!L\%ZXcBR-(gH"E@c<,+(p8XY#R-S(e)</GieWI5-^nB9Q %+_>727$U@gS7ghtR3Lik7[FFRXFtO!_8f)<<A!8eWU4S[3MQ7sBX9@JYReoprJJFq1FjM6@T20eSlY43)5U@b%Hqse]b[Z.>[:me %>`k.l,\/fLYB$V^EPM!g2$8=6Am%IC?6e)i;B_4(%#SC8/rH$9mT#*m'1\C[.S$NaX0J'hW@9-2U]sAdHa%&1kLS>hGsjAVH*XQ; %-&/3NjQ]`YPg_KF;N=m4&.8(CgDa#V6qc-DA2[Pr%AYU2]?FVO"Yo8D6CP!uD2]h+)2*O9/qdhifH[WiZt?J!Q_@H<.5%SDBr^VG %E*>4qUf*5ER"fFY-n[;+2AbV0,#d'1"kcPnVPULDQ5G&1l4[=4#t=H?E/AH#QFUKq<&Jubp/n1iVe-Y:'r.U@r]eW?mB.bYFX6Y` %pDrZD!TPo'Y0-52i?-L!%EiG&L'B!S(`3>;L`X`IP6*>D^pj&u=:m(LFC,K9!Bh8+U7,lLWEm+c.s#:'=:mNrkF_i@B[$5`/-$du %DFf_I'!.T_X4Ms>at8Yg7)P]h[S`RF\B$Anq`C>kG%,\D8WMf7l,u??cC,f7-2Jm^mHBfS73/Ra>GZSf7S%mT]K6r^YCB1gIb;P! %0'gZ(%/jfn.ud3[(gjpVok=3q/Ymn_OL+eJIPss:+pZHK/H^i>`sN#G5J@Id#g_CMD"sA-b#n.("-!/!]Q\AH+t!8u6k>3f<CIV< %$)T!Bg6@?dTOLB4S2PH.L5fA^^R>]jL+Tsf9#1![.oRHp6^,&VHs)!f#^XuE%?97FXfF?^`L&\?oT4@5>HA\/MZ6Eko3HiLog=)m %3"R((Fn;lZc`)(ff`k0leLUF+bt8cI4jnh\QHdHQff&Cia+cn;\FcLFW6#\aZE0`;:,.-Y/fR@5>;:I=242UP((3["BE[dfCcnq" %#=#P'_JEt(?*8(H3[JMP?L&au5\"HMk+>5J>2#;eIR??/VqJsONp)DpdWX5]h_[G"dgq1<LH+c$E!b,Y$`?ZI`pZ0YH!31_htEPd %VIMnt?360<comu/*:Cd>nQ/gHVcjq8JhO\<\bs1YEcG\fFJfmr4C@OC2X)jb97#F7CKUOug3A)3C4P3\qL#r:eaf+Jo=hni#g$tA %=6XDZQb^2mof+Pq4"d&p>[-G\EQ@M:Zbf<:QWtd)3a^S>HGqB)9eX8LIWoNmoPC9GbudVdhep?h)VYVU(9(6WJO/O%WnW3._VVWF %e0K#4">QK\g)K]8[>S54Nc1AKN8q:<npf5)8[)=EhA2"gVUZ4j5W^673PX,bIf'O(j#QOl6bB*Yi7W9Zh8$7Dn$phGHpiSKKh1GW %M%rI;8BL_fp*^s#inU2ZCSi%&[?="h_o5c*l?h(&\e$t4D(m4-Y)\WEb7^?d#gPiNiO\58GU=TIg%>uY^9-I7X5Y9_/lF",O"<N4 %(*:37Cg8ZD?IkV2<q'O`P$Z&M4?e*r1p"kV9=P9o?<W`,Jkh2^=[.q;<rB;hYg*,O,L),+@OYtod)H.Gbf5@8Ph8E,UrEj?[nAt# %'t@"Xgpme3rBp?YAF:q7e`a[FP"Btg_(3"4jIq]B,&R$sl0+>,OpUuh>qYF.+b"K'l`!Bq`HrEAmY@ad)83#fSUrc8>.1na1W`C. %44Q%\@6=?na<d:ED"pA-s1Mc2`f.%0OdBYJkd)"b=aFi#e`2[=<VY-7/sSR9r-u-.A]&lu,8"aC/9<07/po_mLe\P`f_13'.UXu5 %XF#_A$jJ9D,CEQIq1k1:=*JAq[%\%60(.t^L_\m/*S[-3Ze!qI6]%Gf&hl;A0L9m8S$Fh-M^#6jY\q"_;%-N-:slh#/Xu$mW*cGk %JG)`V6/6Ef!\:Tf#.M=([.$"=*46nB=5:&/#-W\e(1QC5CDr,3\lNEQ^"E6UL,P1)/Y1BH7L2WD<*^)S>(CJd]hU1Z/?Fi%J(5:h %alAqsYCBVcT_U;\[.M/a8BhA5SO#jFp/mgA1^\U8\f'B&=eT'-eO6Ir[$nn:M\<q<;!5f8j8.j/CNP1ZlF(g>hjb;aF->L,am4n" %+IK9.E'\Gc)^KGWs6_i)2DOl>OZp6l5+bgr'[.$mo<&qt<pO#<*/tcNM:`R:#7>YKMl?/PiT\pTU2GmLET4&h%gFc!DV`]n)bJ$1 %L/SYZYLjPr;ZbUF^4[a"LMQalf+G;$X5"JkKeib8DnPg>4\H&bD2iI/X43T$8fnHKLMOYnc=dV([Rc,0[&I&N%D?+7F2e-@*N"si %C;8ZH6`u79i4a[;6XEfL`Eb4AB86+WjGI8X7atq<QITLsYR^'-bZVLkkoqMZ3+ekhYT[(PQ6\XTB1U4/[N,h:9YVj1XfY?oC,;2s %-roS(#pbnRqaDl<0t*.u-aU:4?.X<ld#I\n6in_VpQ:21L*W=i?.TY.XUV+L>r,H'j#L0SmKq=.5g(lko,]>gAdr7'>9n-i_ukP0 %k[fJj]66Ufn"PI'JoctLN>uD`H=lV+/%o9u'2>gQ+CYqn>(6g'dY^cP_-Y;NUCOL;M>`@ME<<Ulc9Tk<gQ(:2_j%JQ(KuQW`mA7P %:#o#&i3Z)..Oc-f1<q-89mGWf:-EKn>#H)BV@S.'Te9)>26'U<CKj2ei00E/6fUA/MK.iNWJ$DrdRUWC2sp"1n&'04$p8kbR8^)R %"th,>*UbiN30_:B#Qk`JfD_l8[=j.Np@4FZ+`m8>C;X(RnE`H"51?<Z5n'MuJaK.FNnj7bHLlooL<:7:`)TY"f,^F[DaI]/`B[Pm %dR`SS;hPh.@1*h7JCrW7?&qY&.d[*:l/6PS%K*Y\DZjonE=?1S-"$Ihdp,;MMae,u"qi0\*dcmj-gK.Y\b#2lOq1R+j>q`K=[W9+ %o(J9b4i?M9,F1?UF]BOIZqs`98EBf.2RF2+kKOLs6Ye1:K#;K8G)Ds0:4.Bt\+>lj41#A*h'Y*5b?h`),7:-P@k91^&[J%eCicnl %L,H,;F>1Ub?>7Of)r*BGa7@ct02g&&*q?HH9tChkh*JX^_+mPE]I&s>9goB)p=bRQ<gL,EBh_bhM[P'Y[1H.7D^F3,P=0Amm\&#V %$bA$%Q\GaCV;meUL\@Qf>AQ=B6U<E[,RIFF)66_ZSV:)5YV._^A-LF"\Yc-UjET^eMAdJ\\sJtM<E_XhSNB9Vkn_E$e*(:E5n?8^ %"Y_p9K?^`il22-Z^NEJP'SW=DJ]3m$@-2M<\tgPTV1j&s<=Rssg2[P:HTm%q"gRbk33-#Y(SG@qL(1GXWYOVPD+D+>7lVjTka"YK %6_:`VZKX28TY%$\oMAG;0I9ZiF*gkPe>V?aaC%&F2l1:%mN)Reg3Xb&@/ZNk&F7`oo<+u&%8a,0BnbCV\*));N^[P%0i<BDgbKl< %4G&1GCS6aY`Wa8<6!GQ9(=:@WMIXdUL^4$qn#&FIntCC9hjetRkT/V!o+SDfrWNp0#0mor/;)dPd*o+H$k(*D8u1J&AP684CYXR. %=Q2f[W<2$1r@j,M8u3<5@6=n5m!uogk+^q-]D"%$T>,Fr@;or%+*a%/.*q7MbE6[K79:TD44^K6fA0%:GD*kdR.ZWF%$W<QW%Kq. %P?rAL["s$]H\Q#c)aupE;'(S]e^,mKd,&UF1KS-IqGMU@[qft9;mPVQ48R_/@I.PlR[j9>4>rS#/>VpN!klb;7s<bjJ::5!X=MI= %l^V$>g%#mV3%#R;!6*9p*KKe4jh0DKiGh%9Yk#@HQknMZo$+<-]'K?DVJgZ;LGOP6FO8l?#T));jdUm1ePDR;kXI7nIX#0MPeHAc %oNkQm2!.PL`]QgcE>kO^D?ha"bOETWC5aKXo;a\a1$EZ;O[SS2]l8UPb1eVb9E$6H7h)gr]#Q%ON%9)D_pB02UTPX5lZ'#"0/J0T %BkiZ9k-_<<lA'>"4fsVPZ-@tHMP`g^SIQ]o"8X8`6H[(laR-)7,Pi==F@!*#4+U1HBa&B7%dObnQ6Sk6^HWp,_*>PjB9q0L^Hjd3 %C8o0:XYi)_8\5';%Fh`?l9W3.Af^3<_L7/gI>p-th3P)JLh'iNi)!TUS8C!l*-K*?)OH))*\luf45.`B/J09#?"k5I[p)c#[-8mV %WBbm#5_WYk?ie#).a!pBJqI2O.rAG0"q7.93FG[d2q#0`;dmnIp@A]OC)Nh\;J`h-<2DS8<YhkP)^M6Tku"D@"]XC0'%Ii;DQ=Ks %4R@pd)gJ4Hc3dl`"Q`F8@!/VO\,-COe^/IcjI3.b_uuaX8GhHE0>2>`8JXDURQP%/n0ZdHd[/7\9GW]$NU=C&[l\er#HoC8]`mX3 %3dEMr?'?9U1WFT@=Ns1g$Anu;:9t/BgF$rTgX&/nV%);_p$YCeg)q#:D.K\oFuZ^)P]kZ+XD350qNPB_g1[F!><N%)C0":,]e)l; %DWS/FJaj4)/01-:1O-OlOMU(mF\-!VKVKAR/mkDh^"A?jM]nnS[&cjdc>sQRQK/>KC]\s`l5[p9IUl=DfXne3HC+1dZ/(^Gi,C=L %[I1hVlE<V&"F#TYEQh[[Fs>lsr=]al>K!gnr]N4:0f!2HG$2oW[bA4a[1IZ)?B697(-%QbpRT76?;h)J]DE.(otKfP:El8E\F7;, %[I.(4nF&^i1?f#[bC-M9d)"c#V.kiHm\Dh.#8OMIA4^*FIur@a#`T.+Ib4J6>c;fXUR?sddufsGP:s.\/BKF18CG4#TsUu>r0<J> %QMhpNhXNRBH[#ZaAedV*]l"T@(X+H@1Rd5HqmE,3%t#XS[T`-.,iM`"lE5#:7^o[*Nl5W-2sbY8*e?6SW6'505ZP3+cB>:O4_jWH %['O]T]*A^JIpVR-LG03g3r:XCLm$8X.3-G<43OZfd6$3Sce?L/]@!Cq1kKeYX-"6K^ma@^hH.T,NjY(aeEFX1=I\GT;LR4VR'H8i %kCu$in?"&=>YuXD4IF^mkW9`L;.E]sm<Lt%/!YX_2(!URi\J_Ki4PU$ea4DIL']bM"%/_2F(Ff1,)gGd\9?!,%q8h]4X9*qki-#I %o'uIl5BU.<>e;+,5H:N&kCB$`XYfM!pinU^Q040GN*g,\iLS78eC@5iZB5pT8JD1(.2QGYjO7-A[h^UUk1q4@#?-"EAsYBL8sKL# %bOSdJ*tU)$ECDM7=6SS3\hoj`Bfg1ZnM>Q?;c&Q2Q;J^rW!#kg;<XH\,"a^o&rCeHlft$%oUMR^A040]pQTZf.kdn-WaJfQFfkh: %JC'jQ#$-h<E9=TA,.gD'o`Wer[)Wi(OBru-qIQXa\O"^iFj#+ZY;pd(p'A471/])`;aO;;V%LX:,P*P^c<tJ,mkQig<;62u[qU;j %!&o,e[dU;T^*Y$aae3*-@iNMIXWs6s):seJQl3D90Vn3*[;[':/?3&$37AcK'dSq>%Q/J\D<8$G9UV3Y)toNd@l10kA=g"8eM0LZ %&\PJ^D6`R#4n-u["2RpjkJ1[m\>BnKEO@1*4:Rr,/927tZ,CY4YKUu35\3&?KVrXP)(s=F8!6g1YXQ)<K=;,f21:c%eic^u:0tab %i]Oj6EPOU>Sa7NT/jfc9YgM"%$!]@9[B9Y7G7%DmdM@skLW=A(e85aY*U9O1ee.93!f!;5oXa^+YE:eE?mJ[@bm7@NahlD?(r@dU %0pi!SCfeG\&Cf+nGT"u!Ep?JGp]Q$K:sk4\\]NYQhuRK&duD`X1ZX7BP%kQ`fp\r-iHgH6@mc6[n=X2S+u8ME^DS&ZQb*A3`!$+C %oOS4C*ausL/!7E*(-`)i;TH]7B?62[_M6!p<YL!GCda=e977$2=7mC1ZZ$cn1/2D?_u_c:3g]mPR!`g55qn#qpUCh:9K'O')\K^d %hl2[g\72rfnU?B'NJ7M"'=pm@R%3U&j7`f1$"6TX&N54X#nc$3kq"O@eoFUT&.II!k]hFVZrJHc4"]^EOK`U;T8FApY\,\U5rVq2 %CM_=DWni2HO:rTa63]>2*?S&&CNC*b?=GR>'cAibN;-f_Rk*X'ikAq+>677QSI[M)3LQ=F5.p>2#^^@5'mp^=/StNR9?-Q89MBE) %cH'?=Nac?eAoD[/$>/fY4VYC4dY$du*T'B<e='r_)%/P#+Pk'3UMB&Vl:Q7bo_*2$Hj7V@O'uU!e@>"h%7:Bo[>hP"Oj\hoSc'O- %R>u^m=X$o;j4b97KYM8W.W$,&.qC?]H%\&korN;E/iRfWQ7.OT]=@LEYcg-kTIKmeMQIn&lS8V&\.U6uF_,?9>'OpKJJ$CPOK+Ib %Bo=YAoLf2FpRnD[-?kP/YGYUI1q<>ndtF6Ta"LeMY6&5s"A19m\Bs&b1Zhu*TM,KXh&JY6X%E(mbO-o#2&YO3+l[Ajl"@Iua=a$s %SnkQ<fI3]C&mAr9-1LKlAV##KQ`FCGBNpI;S1iA+K]$maSV6YpN@[Za6i8rLLA5#/\Wu`Ga)AA+kmCmRT<%4*/,(!dTQA(t^uCYF %RD=il%g+&X]u4,LL$YB$M[2r%A$9;#)-<*QhA4`U`s1DWX^<)7X.7JV5Rm%uX%^0(m2SC][CmHgi<.jR1b7:.R7IWp1j_u7S;8,* %Qg^"c"9kj6=H),--CXI;'Y%aB8rIC\_7ak>FR:&<igKo#'^;HR#>E&V70G35=p#`;r#jg;KNg=sdTn_1c9I-,MIT;cce,gS+55t, %&s'=+/p/&F?`A`bA)tQBM4n7/GgZsj@s01I-AF$?XO+O?KJ@M)oEI<.T+L([C\"pGf*>K+<4<GL]4cl*Aa8q31[A<T$<1IoQ/b9Q %2A4u327hFLiKc,QD&!_bPTk!lfL[iggY(=<c3H6KM?OE'Dq8B!lbAec%%oq0>P48?mUcW7Y*#((SYtSZO0!5`CuOS0H]P>9E:r9G %mRN_qHh'7">bZdDe!X*h)@=6NA6'%%(t^qQ7XHau,i]Y4Z1kaAf5,Ss:-3Z30DE$4CkT?_6+E\B,D)fXaoBfiVl_:H6N#'8RMG2P %lj7W7%s91;5&)i"A_c7I<3&e[6cIUO,3O(XF9A$<+Z:VMXA9.oc"-/c2nm^rC0?0QF)H`?`BcFY[1<6t\R1TZ`sPN9.AX>CNI)#f %)c>\o`(`_7NRIC7^1icTo_mujnH8p@Y2fN`CsA(.9TKS>(&ce))O8>1.=X+p6(bQe[78GO>J%9>LnK+6D5SrQA+_I'f=[Bf[iI*E %h*9RLcZq>r,oc!D,5!5V'QN!@%%2IRS%3Di\Y(3/:b4:uoo/'-6'rCNUjfJNq3J,bppo40Bs&5qC7QM%!/4NSlc+JM35"+@?RoPW %cYPBHj+1Kjmh!%DasHH\^bbFai1XX>N._ni_$PO!q)=Y4qZ$Qj;Bjj#$CWIa4]3ps&/4Y$=YNHejHO*6;*[KmCWj=="i1tJIN=6t %k)e]XIkUC%qg!Z(8F@]_-k&mW_sIk=QtF&g6obqCFX^E:-Up#L^"IFC?=oHjeT)UIZ#ON*0^gW(gi,at)ZW<X@XCHeqD2-Z&3Lfg %E5s$;eL6;2L7Y9bd)-,nPc_*lGF^u3Y"XP\$QH62G:O8H#YeMj:'1kQ[=oCMXMNQcU:YJr`>0XadtQ.OZ;Gcbmd\AR1(uU;U=Vd_ %lVdKtO00h=@aCVYp7V(2a,8@6EZX+aF>);n(b"umQKNC7%uO]KBgl`I5JQE%+Vn7/WUBYMMcBmu_4,WS;u#lOIfdMsHP(:gg<k9- %J62,UqBjY0N/X2!=Hi@.F8&q6d&g]kD%rm)0Jj:tX@,f'=#G"oc3.DT7=\U#$-!chW1rh,N0@G%U]mqh6/`M01nK'q+\'YZq84Xc %JBb-6MJ<)Q#"PDW,PPLh3q"r\G!i6l^C5)O(',n-Xr*Hqb>IfNf-6;*LU<\CJS"`UUU9g7YV:fU;,A24n=M#i0EVK,pCjL-(kq9f %9q"m7XMN%e2r]'d1m-a]K<a/EK0rlupNU9^P<ks)e#n"U]!T*l(n/)l)&*Y;3SNATA!kYcVBEtH9Kt)CRDZ%B'Ve7/W3IBtU=2PI %m(*e!Ueul".q<([3f?LOMn.ruUQA0B6sP89)3-uuNLXY#HGf5CHDCSfQ9E.l$D*L_Ea1o^^6,pmB>H(8-8NQ!fp3UFrRfVQd`==t %X:F9`C\uA&E$h@6`SbS5"6"'#Ps$S\Oa:N<($HLaBWq':oE@AB1opE?>qB6k)ac<Wgm&.;5?:!@'g@%29[g<MRCVE89'kc$D)T(H %jafa91!&fkI4L+!;F.WY\S(+i<h,U%6@YNtlBYfiTbp^7226af(lS(R&pG+V8f$Cu'Nn/)_S-1T1?2&E"6NaDDQLr\OJ(k6&/0N. %?AM%[e<0RFI9-u!GQJ>LDQCb_\s9[]_AQcn0!>^md9PDrojlELXb3;=+i&o;P,?Ll-dK8%gTGuQF*9Z`@_Yp7O.o1F4##]Q[mkF) %bOQ0mCj3Q'e0rRr^ls$('EO!qZ#]1hF"1qF[As`s%<7Aj83jM8,mT"`LGi%4WuR1&KY>ObM8m#jV2LMuWun%Vn'K=dK&4oc`'8/C %IqDpH]uLZQk"=4,F<81H>a#Ca)e7^Ri\GD'K.GEuI714_gm%c9<_.Lt^^7H:!,^i;@8g"gh;<ZoK=5);BQL+4C1Z8Y?2TSWBj"ge %>]OTK*YdX)qgi2QV\iB-_,SKf=Ceh%%6A@<71`k!;M8Y!T?&DS)-#bq%D+CRfILZp24QfHe5$pdpG9C,9=&0)o4;-/1ET18^c`+o %%t^Y%]SUgE+,=jGEq_J4pPCVdSPO'hohU\0#Js)sg<=_X<$nV8]+DdWBT['dc,!/K%(C#al+!4k]CW%UkkZ&#:t[3l"/3@%"Rc/$ %l#aGi6gPq.!J4GM[J`]\d[GQ@IUtHC-/<*C;=^*1WWs;Yj'5'BUt^R^M`,N3RZooE7in/ta==SU!i?3-2!M9"BOZROdUfLmbW]`! %&([O.fWi=S4kB$m.le"]LSHcHRf+!e+a4jqh8RiachF3W%>T^FM2qG,L7Kp@/:?(G@,>]oA,n-h<r'YQm5qe]rD>fGB,CJZ@G%Oc %d'NP?_9j5b:$ua(CoNBp`)Cd=(2i9>'Uo!M*nI?>-B_Q]Q54&FgW6*LrV3@YgIJ1?;&C@R>QV3r2;uj5W`%Ul`sSqG1],cr';d+u %QB9-HS,<'/"2[hI"/obL3Dh]/,Q2#>=0d<9[46D(%#PIdaW%oeD"F-LQ?HC4l3*Cu1*1okM^c!GnBC5F45IMV>=keCh\1iOk'9.o %0WqMZMm?0m\<$'WQ5WoXZ^gJ.4i>EB7XM';:lF"Dod3pNnT[5JDndSVZu\2/9._ZHf$YGr+jqq52R_.;X$.)DZS[iWmFD%*M&R?l %bO=)%Qrki>$D#bm'!Ch,ULr^k(B\`)-Q)3l/Cam?kV?CUm\9p'^Za;sc(u^B.E%s*)`h?W'uO?R3qOpJ=Q?dNDf30B'C9G!EM&ik %Vkf7qC@9_k]EGuM77-pRC(XXp5i,OFl/VWj;(!Js*@#e'`epH`/pm$NXHK8FiDY7tVmPEBk"/b!USjW/8csN:2&EV):,CtE+i<q3 %?c\F(P6\0l<J>b+-`3OC.jGX*"90,?mTl=Q@qaSg\suL\b,#k/"LCUKn+E/Io?1\<>Pl`lbWtJ;oQAnn@.HnpA,n+tp;2D7CFppg %P(9lD<a4W9`YJ,N2?1W!f]]a)G%S0Q:HB.OZ_j7$p7)RWR@^rA.$mA!<QF9;6[H.]Q:-:]iVi_+Zu'6&*c$ReTKP3F*AKmJe5tRf %k"6T6*f-pX9E+AEq4\6`mF`jM7V_*8iA)l,/T&Q>TD'_+60>*)J_cB=5%jJ2='3t61m=MS=^;K-4-I1BQRu2Kgki(sCrVjia;mRQ %T3!_91p"/P:u_-h_0-1BBmDm\Tm_Ko%aSo7Rj4<(+Mu9[G02kiPN)%)3Urc+VoibcDaCajO?au[!(n<l/RIT\\rsZSI34eG9M7YV %`]BBH5dmi&+ieCH:uYs,q4=qf&-^"Z(@_#e#-H0t\^)52<!J`8A/T:P@jqVuI>TqjHK3+A[dW2.O#f;=.o>#<Q\].6m1]$KA.BfR %!/@b\.EgKW)qphO,Im0J%Q'*'/pE"V8OKN@brd7Ac#3!]#=['P21#GG<a%g6R]%,l7+C[EQ*Dn@HSG0Pp7G/V]=^=$dF67E+aPHh %pZT?LXVF+ukgLSEr!OARblY'biDLaBg\$h-M"aq:lp^`'J;t6j>2kIrq@H4rm)a91!Y`I4=:Ae#0Z))0J<PtF47?3o!bF[-'!I7X %XX9"<K]6eNc(2LgM0tC1mjN%e3EtejaNZ/28R?@-`H!5dC+-e<<-4q+dR]\fC?1;>&Fhj;P8)5r^pXauSC%<OiT5[*6($uk'n/fa %q20L5Y9<C4^>_m::0hhl4"G@6jl!Mk%60L!'J"AJiiH4_ZMU'!>Ja1UMhX3lk^uq^PFkh3a'9I)S]!6_O5'1g-+k]'`(hJ4EMY/C %j+J&<B5j*aOWFk3Cp;Gf8.J7Nm-F.5p-Ub8cLn:-/BM.pq0V;3H,g8n@.hSf@H1W@W'[X_W=-ocM>CWmfnN!A*Jb3a,7?2`_-lTs %pR)bM4'P;g>S]tC&!B_-H.E];fXpk!e7DT0CMt@(*Ploih>>nDG#*Tbl4\DN_H;t.pK13.X-o':EcAM])S@V:ZsB!FpQ5Y6fX;m: %9;4E%'kE=*2c<QL+dP:'_ZIY/N4/-J*A.),j9*0m%YYV&q0IT><&S*)`I-bg@>"*=hglhRD#BJ+`j%bE?+Z7N8Gn7)AhQ07B4>NP %jO^:@GBu"VI.4em5"!^L+3#)]1$r3ahdk/X(60!W>;h]>ctf?U_qZ<sib_TqWIO3L+K#l<P!WVQ^,rW8$KdTb8Yr)"rJ)eW3`?[I %$jH<?%q@;/q4eo\b'7=?+u=i,AUDf@;o"t"Ee8!q7e*Db!T.'uR7b0.RN0`sHgcT@?2=T`^g?I%m:SJYM:qOB7=5/^r;q.??VQ%H %L-4m]C@poh1=V'jU4jFj[oF"re@N(;&T$j[qg\V!c#MPT$\W[K=EI;0dtW)FF\mu.G0(VlET,uDQH#A#MOW>'e@@kig+t&:Y.OYM %JT&-qfUXMnHMUVGBGf5S_PWYc^N6.Y&bf_VgQq)r$U&;#=JK!Za'6eNgTT(bNE<?E^;s<e'D8tH/JI!jbOmMU=CM_a/s`b'n3(9d %.pqt8'P'+EHcO5B_R6\UB=4NF5fYsKaCQXGbc)Yc'OK(ZMAY=2jifsI]3lM;@%Q<Mk4EYpV/&gTS?;58>KLX>"P1J&eQ-<N4["h) %1;A3gOM'R/9So(+g&c;jr+q0icV*sV8mQHfc`q%4dk>]f$K[XXgL:r,Rmfju"ak7bVj/AiMbH=rQ*R7:7X'u\'Ed`INPG9kao#lH %;6hF2U9^qa&?.S`VbcDL)1WXc`!E>jNG>m>,:K4q#"[\$L14)3lIBRJ]3e@7$C^+tH6P4AlOGE5[00Ltn?p.KUra/<c-&><kP]5X %<I=+r4=EIrdOTdHJr_-B=Agd_WOVA5\WbQYPdhu<1KkF8n%bV-<RnC0>^8MKhbhqk$<7k`V"S>.?'.[+e$3cHe)?UI/UD]G!$R<a %ar##':N"-DN\\FQT6KDKV;o_o12OG3)&lkrN&tHdSID:Kfq1*IcBS';RHb;sa2cc1X(CQFb;&kf[o#(R"g7a=kT7u8n..S@30KWi %'H@TSXb7NsrWMJ+PQYjDa9"p>)XO@>U`$q.c4i_T&+#bH&P+BN^C..jB4g:1_tF%8-h*p4;\^Ngb4maBm1[!r)d.r=dLfel)5ktV %5Zh%f=R/Q^>PAH&,3']VV(>F,OD!C[!r/e@jN$).0>OuXQL29IIai4OFpdD(HhMTXXrL3@XZ!Jel[+r5G0n2OVl=Rs1Lg^9G>Vm$ %VK1R^_r]O@\H;E=jbtALjEXdIEI&+sSg(3@Wot^27h7u5;EYgtl4mqM.#BJ<FiY`nRIT6)\.,=t%Wl5'bj4:QI1H`WpP8)G_TN,W %#Gc**?4=qO&&<kNl&fNr\V,p_[1jTUg<Fc:&&o=/asK"'`-(8E8oTQ4K7n*$DVn.kLZK3]Y0QH:6GG/ENp(1RYSt$b%`utS5jh!E %&*XidIR4BSG+-g1P1.3g031)Sc;Gs,7Qj\:)XR[[1)1U$&Q[%1PI#fn9AQLNJ,;UsSkXgNJs!glH]E)<e^H^]%&Utng%B;tG$W`a %o%4`(4`#BHLHQ'+RFL7?XDGh(S9:[Ra#L(73-(VP^n!S<[k3XIQAuHHbb[o>@_XE#j)BoXOE<_$=tBF&_a:70g=V^lJ[?WPZUF*O %E+SnhZuh`Unq^BqPW/QYlHHhT'J,)MAHU+L$nJU4qRA,D?fIM"N--KBRLf;KZ1&+4@/u/[l.?KbnE2#Y>BKekFfsXt(P_h>YMJHp %i1eMlM]0>eYFn#GG+ApB]'X7'C@WfZ5G\Yu^@Kp/j4u2OXR'.QIQgua$r6Tk1d5$rFrtp"f8[EJ,qG:-g:dUphXG9N>^D[#262>J %(N>1^j4)9'P5nuHX-q5(6mB6qgJY4GYd]nV/gm_P&Wp$C\MF7k1c4dT++,ocnGQ<p^:1:;ioF<j_`)6!!_m;M?+Qo/PiZDc*a3bF %3R\87\@)HTN*qu?f#ik!G;GTCc'+;qniFti-%bD8"0([pf@PBQ`!(Pm-*9HHcT^J(.si]Vm(S6(^kQO/0q4(.O.O.P1>i[Tm5b;1 %0]s'>I*&UfYAA:8:\q"`]+M]>#rGVb@ea+r/!dsT&@J]p2716(LYd&9\Z0i4T88Elm.Pl+]n6NCT'DcX,uJP#bHN>\>!A8<2?7:$ %_A*rT!?`7'!EiCb+Q,^hB^JFi$P9-'bQ^<GGUDbJJi!5kLZ,T;L4j/B5p0R1Bf,F+cFki&&)C':$lf2A(LQkGOH8l$Eb949ba@GI %7>jM'ZC%/l!E%\T9Z-;Z<3(ptS.a?u<DlkZRqFD4#.Gs%K-WSl###]mTG`e/ci2@1^B8(f1PKBRj`/>_O#QC>+uAE6j,qc?CqKB8 %Du;PefcD,W=FgEblF]tb$!&KimG#qC<sh_t$+s_#%23U?WA?U_iOjVn,X-iDp:RWG(*#$YW$:R$QuT&<e:WRr@rL6#R@8g`f2`.0 %PTNGd=$,JcalHj9AVI0#@Mj_[.F`9Fg4`3sOGE>C\C`CeSB94tB;d[%qeec`qiZ%EYB<rr%UhrGc!s>+,*BH6jll;1G?7b#Fis@+ %(?GZZH^l5&cYa8#cjQYnK'(1t2$/)OOEn5C[SlP(NaK2p\bHc"A;/(>$JUjZh/FA6gJ6)e.k09YDCf.tYSNWnXOpBo93SMP+0'Vi %)Kj"J^pGi%>P[iu',XSiBMYVpmA,8lfKn8sA7i%7')#+a=AaEZ9pJ2ho\Hs$pO4)'!7?&jd7R1um(rHHQIXT2J_AT%A3%UNpQ[TR %ga)Oqmm*T5co2->8MKqG_W*Dn38KN>-+/=4g3WJ\?8[#'p)dQ('NuTme7crsRdlVf-VQ#.VQ!@fa.Bj*UO-kqS0H"u-AqFjZ0dd_ %B4d@u2VWGZHH_^]8%E)gMIY`d"[0l[UeO`A/h(\L0KeHq*A,leSekr#iXYFpLGE!E[=i+pSL`UJSnZ)5Gaa)M$)-cdi]O=WljI+) %&K8]`E`gImQ#kg@+pk-)BtkX(br]!?9J%]I-/B#d7^dUq=&T*&MXOXt0gq`WL))]r2L4@s.h:R(#"(3()NR\=*4#iWW*lnGDaPsp %*(in*a_$IED0f[s&HM3f1(0jF='R;&(V7/gb<R#DEYUW$GmqHRfcgmpD7m'>iJ6_H5T0_L@\7.^^aS@;>W@Up<n[,_fb'Y;JXj:4 %Sap+aX;kJs0j(;*fu"SD>5?/HQW<M"&I(j9)@uMqf#"bk^.rm!)J3Hi*8+Tn%QGJ;:$+sLR&Xkl7X?e5h.@)<<u98JZ-iU[7bH+f %!9>nlV`bui!O.Pq*TZDm@SjB73h)j##o"h2gMn#R3T^u(:6G='^4JLo(V_AX<Q[KH^26Dr==>;_VNs(!<YYfXp,63AOLd(%N.h0j %qshk8It4P,*&`?2ln9:]I"]N<.$^`o%,/odRUErqA\2Bq!_`nl9^YM+'3HOR0g7_>jY8seg`Z9$/:>Nknsc5&?N5#Aa<SH9.nKTX %`bj[JhGN[P2*@`Z+T/:d4REXVTc^%IPQO6*";eE2?&Fsor.6UJ[+'\:*ZH<aVkoq>K/O&&SOhe%=a:sKi?(AHX\M/%CV41a<r5,n %GdaO5E6a8YbAQsA;`V:;?ld5!17bg=72e1^B09%JI=l%LX3h%I3dO;Mku4P##'NZ&]=q/fR+YAr#J1l,T80T\7\3\/WROAhLB\HF %=L3pF":5odAK<B]6)*;iQc<n:'&Fe2&^1Y]aK$B.Omq&'=O#94?YT+T`HH1L*2gtSmC3@<,$ENN`^]0kNmerU[NGDanP\(#=2de# %!X=-dT-$oPoR#YJYn[L%V/ZhD91Ts76aC&Yq6@ESgKLtU'&'m=hJIt2I3hQD;Rmf6H"&"SANTJBlGbi>,DVQpO84,d0D,_JF_\QW %)Ll%/i5Lb5dLUrrmGO+#0&EuHcl5C.:C0,VFj(QihHcmk,BAJU'#Sr-5&5M>+spYp:<(qX#lbhAe:J95,7clA8aY=F=:G;8Ta$E. %3k"?U9S5L3Cr04^W#42N&_eAt=a>mbk%J().?Tp0X^W4HRYG&ZR52M:V%o5Lq4"Y,L`Y&OE]-;!Kn]%iSsSm\H8&fF7Sj_"Ug&'1 %a@^H]hQ1VoGib'jDPF[L-l(Y6Phe#LT3FB?@!u=m*-U[te$4,H&8!`['O*H.6F4\4q8N6`R*NKk%f<M<f\HJl(=/U*/u*hZG3FGK %=+C&Frm+sOjq%La)]YnAr1DLJqQY_bN!A@LCqj9F7&f7D<Qo=+S\19P.)9<F`>8?O_C@9KP&Rbn$N7^VY,e1+O*?RLP=,umP=ZP# %[lk!B*e]5oO2H-LJrQW(.M#u]oH]DAd1G1_D4ctfg\AJs``]R8=WY*H^&/Wue$UK"MQ0'?WEN`:6b7H<XG9\)_qIZP!h-!AVbV#D %RQ3sjLJ4`1$j`,/M*ZYJB%`RXQ]*/E9W_SE\aJ8o:.d*H>+YCJ>Zm=Q!If5k_iS(ZIp$R/9.!;jCT[geM@FkH1HHWUc\QbV5A;0K %^Z*OHN#"O`e^!nFZ%s.]'RTNHK&^?s0(kDF1cYm$?jFR2_AeHmO[W#FE<VL<7pJD';RI/.Lb,MufB>,'NUFr\%:Lus&0(#aG&W`2 %n8b:]r,H`)RLLED4rH1AP20&X41q]\;PI06*.nh-,:gH:GOaf9HPC1KCmI;*G97T*]Wo2P'pEhE;os!]]RlEEHh]&nC5np`ClH1M %DlI:B+`%;o\0AjS`$"@p@8FU.*-n#-9Oe5RiBi%P27^C0=X%?0(^"Z1PdW@sOt[Tam%5[3N@,S-F/Z''UVJ7%]p1XpF](6MFtpmk %9nK1C`PU;<Bo-3Dc$1UT4jqD0lEt0,9qtTfkUp>['\BFq26JsRd30(3gk^-uQoS.36;Zo[oa[QGZ<b6=W,Aa(VB8;FO)9pICaGA. %r([V\hJ9et5_5Xnbqc35Y+=!r6T@8c#+G<ZgnI@-VZ#Vs&Qo7j(\Ck[BWkEVGn#Bak$(-1ipo,dP;G7N4DnuuOsX&nlm0Iadm3&- %CVcj(>2<&FElh']Ke@8#h8JHd7\V!Hh2#="-b*V9[BCAAH)tA>;^gSBJJKAfCJLR@CSl3ZVc^/icrl`8RNj,hUPSeP>*7'U);^L^ %J'kMfDSTT<CPjYq>+q&5OeEVI@^]l;)`gAhE9#*,k9]Q3inJ?Y>$G,LlR[$egK\L;HbicO&gj.g5XUlUqRqhebqqKAGJum.eb8T/ %a+i:Z_O<`O%r6C.jA=5&LL?BE)0/uIaC]G$/T^)WS_/rPe-'2Sc:fK.c\@f`TV4.jJGVrd'>`i)$4*<D>)%/dP&EEfRV'Z608#Th %_dg3]dp$;hERJ/:VX^)>g7-7WOa-U3#^XsE<6$3"iB`3X8J*.I"-pd$6q1;b$66m\'8M0NQSru"oUZ(1X#"7:G>c+N9-2!U-V&EB %Y+[C]$#2(9&!+Q+hJUD4@X<CQ5\rN$[Ok-(ghSX<B[*b:GV*!5L3S<>Nkh/O*KGIj3Z0Fp=&De*k&h]f7m>RU5Z,]2;C!WY?o(*6 %EnrbQ7)q6=`=F)*[i^[]DNCWa=9Ho8E`ZPtiAa[]Wi59[Xp?`T,#<s?R6(;fVJlDFoQ!664a&#n3aO>]SCPo,qm*Q#@W*`_BWF,A %_[bK7(LItDbFVRXC'<<h_g0l+D^QiEr9=(,.1HT7H4h(])0GG1MJQh+JDJb66g$D_2S%i_![(???fMu?TN+,LfYII/Yq1sl#F9Z. %iA,)uq4lc(YhZrV*%UL_0T<i7Q28!8o%A5\/CNH_,J=[j2rt<6+uNCD(`PjJhgTT*$Apup56949hS!O0U18%Y/i[j#riW%c1_:Li %?.HCF/[,f?Q+=V`n7%.6E9(laY@5DLg_mcZ,Np+CH3>=N<MmM!,U9G?H@<j3)Hl2\":`Y[Ma]]b1%/TgZ6,=i6V'RH%Fo[>AIsAs %jtaR!NB2\d'!T<Ehj#To@Jres#tPu3TWg"ik7$YU$,6B!n3+KI2D)==OAq]mG:`oXVIo(g3L@R7ZmSb\W=iM@$P.m,kh7J<E<SM^ %[ZAI0drSA)/+3?Pj^W!7ok*7L9r!1+e7B2^H^3g(FtdGeb/;C5iFkQ&*d`5lUl!KiD;(EfC;=NO7X9X!73A=f?;VrI^UG"I#,M?p %i7h$;?c1i2>:AkH:bI/5h!#teJM8E>>4dE;DJN3p]N&nEgkFZLeg'B/.+-H94;Onl'bTEP/'h2`"C4=bW]lVB:&9AR#_@sD`^k:B %9fTUg7c].Q*I["BMBSs)01r=NDeCbX4KD[c/0PtQ:0$"A(.:]\R=]?A3?7.ea0E_oUu>/C:0?kSWMVk?!qn/9qe^8q9QR7hQkINM %/_fDdIa;0]LL\G?O-3ZWWlHLTqfg83;`T#aN0h(&bp9r1)_oEhfO8BZ:$eN%f$7D?a0l*lO![#B]g%+GGD=rt0$FYWh+#-V$*G4i %'..")2_V8qXg,kL>2',U^b&HR2M**pL=5i\-83)`/*?!h0%C817IR+c]bXfm=e3Tqi$<i$VnI$+2PS/`H)s`N>DV)a\qcJW'kAk3 %?M#]KDcGdm[bZ-5jM+HNqYuMY-8LI:74ips&,6/BSS#>'5Y[YQ@5An=.(c:0[V:Cc^+(ZP+EuEJ;td=FpH?_h2F7J-g8*%rCFUL/ %)3P&r<P-Ck81W6c6+62>Y"@SN@]4<#B?*VNXB_6M<hY.bG_S&VfFOsU\31,5LJGY0;A"XfNtOqP"pYsQQ^)%j>ahblkn4bNcb#`; %)Y%F[YshdC73E:b0<8ZJYG^;Gdn%@J6]4aQYtQ)RV"aY^)*JC.V;?V]H*Xc,nm.)<7TVSX8q,m"Zb%B)$j2\sHl0SF"i>`(lYXP' %cCH(-<s)5p;FCTh\"tF5(gn%t9sLe",5`2+iC##fNl(:oTn,k&=1%4,9b)J8QWo-0.;>Q@D*(\4.%%2')qDrK[#P]F/e`&gMX]n; %Oea5\*`O^>Z$SkMV7QDn4tLDa(Ypu5E(TD`2^:;KT>F-5.MTG&T@cb#5$-jKd%Q>ip`+selg][nM^9F)0u.>-itYVGb$]gAR.m+0 %5Jl^T>hQba"V0Rh20)G3\En8=(c;p>e36nlZmhaj[Tca!S(\Sfff^2+oT0Zi>eqOs+fMYs@&uM$5*/A&Ns*`LXal[[8)l"D/u]I= %GkS`$^78*(P^/Rc\F:sV.2FN$M^OqPmAF;")]NpZ\Rd[Y]N3Mkfs(BXVmtol'"m<;ESfVe+\>3['tJk>BV/8kG8eo8"i]l%ZsCbn %UNlo(JH6YhDd8U3A!c^BPUas>gAh"!O(m/;F1&nqZIJiLeq,Q65sqa-`]]CM!KUq)08F3)d3.]N!%r!ljKat]Fp6D,62Tna-o=@o %a9,Sb?%$e$7K+Ki<ZhXRXW>^s^aV(e3'+2Y5nR$\OZP781Sp]qD7[KcS_uEp.7k];Y'>?6@QjrFk&c87R9tp:LACTUZ1G<K<2IcJ %#I>k2/i$dRj[NtG]*n=<.-^dO1Bqq)Wbdo#0/j/ac/=s7'p5I=#PVq*ZqbrL(T8lCn*O_2#338?#IO&MGi$"@lHeFjIQ*f_V+-p' %F?SUI@LRF<nV$E\Q)jDMgK]UKUp-ics-q$'g1]ZSGh[72R7FuIc$?etS;K6(o/jCUpo:&<J8OmK;'%lQH3,tHT5asjb?QjJmIul4 %[7J/%p,sPr5iGmW<JC`i#)r'"9C`5FA8BIu&:*N&Wk'TKq!tScBcqT*a$>>@70n#fdGA-L%Rqfr#7O6qHs^M6,f^&l'B*N94RpMn %E>W#n>J>XP<==:0%:rA9e@(#p=6%pq%3qh4`4AT2GuAsQ^H(Lj3:adGNYRX6`rR%+\I!*#/B^r&\S:5S9Bqh,Xmo-O;Gj(WD@X67 %]sb27H)Et8n@`5UU&<8UK7:sV*.65ZDI,l[A(^p4q8T?N*O+X_LU\C>3%4%&2+Ob_?1brSU7kF0E!V=CWh;Z3OP^.h@4!?U[2=WP %I6V@UE[(Y"]?bY<^/9*>29&8=luf/K*J2+(F3rIT[[%I=EtPW=c73(28IZY^`b=1[J'dRg2QZ4S+K^gGm?MP?!#6$a3MWOWjNh@u %eC`9+@jqKrd#oA1ej6=t#a0np=PMC=qF@P",em?C@Bc1><ZQ;Y,?MhHZ$+b'Nb6n8<P2?e=>V&$gq#MI?k=F2&Lkc&Met@NS*er# %*Emh!+7#dSnNBSN&Te]*kp@cuJ+o#EcCL]=4fK[5^KuMq:NH\UI]@D`.R.?f5:o0`7\=BmeYe&e5dsWFE]D>_&qUD#`>Ju/Ph_Rd %`ciT068\aR?e\%[RcK!Sh<Bg!IXm4l\5guoUH?_aU6Q.X//GD5IVseu\Ij\<3e378IimZeKE6ea'210kaP=cT%HYqHIsSP!X=L9I %J9%C-*)@u>3`D28%%CUS\Q,<ab01hk:%J]13S#<^G^*";Q3]))C3DuN_jV+92^_+^a,8BqB2<bJ0"_OklDL;Yi:-@0f_-_4H:jf% %V%pYh4W'#%>*=$a[]u?X?a(%!^''/G0>\_E0!H:-g=<`Ip;'bN2l<.?e$Mtk6us2a!f-p4\nqi:-W;*e08.k`:_.T*'K=ao>38;= %3f\ok*UalqYr+LEaosNA)9RP)J\kS-*jlIr^3@WRj4HG/lGrT$H"tRo\:DI3\mc/./!0)]]H0^bC0b3'r%j^VV(6ot4rfJ#4Sj&q %[##d8as1S57mn.um7s^R0N6pnZp"b!E%YE3_0L+I`3>gj!D9_J9IKH"2.KGY<7]@GTt#^@8On4[cJ38#$t:-Ej7Wn6h*cTH`@F"i %gSK3oq#h#*-ne!X%aGuLj/.bY4Jt+&Wnr?G^:d1cm[5..b5WQ6;\fW?2\hBqb,+r9*Va@G!B4j:`C&>G=,!V()-]8?12,s/b0W+3 %i^`3GaF*bWQsJ@Aoh_^@TsBYgHUpJP0a+a=c;smPhb.]Ekm;7R7(e)o_54j*G]X>>/,iRC<dI\^IIfG%V:mlteQE6H/I+lY_makh %Qq53!go==8pUDf$9]P-;!?Zn$ZCZ-JKc2*!:.J6*:(URQd\cku,!;3mC@5p>?u]Bb>ieQjh92dtWVN0RfZpN,bnV^-%/Zk5kZ,uD %'#NYA*^UZ%kO,M+AQk+-a*S9Z.%r\0!TLZIVuBZ/(E<K$,,eg7"KS@?kTi*0?LrGnE/3<%aGoe30hs^2ZX%r]Zt`L4Tm/^Y^jIL= %&]%KF<DM$T'rZ:gf+Z`HclXORp9ql35_<u=4K6ffO4TY?S2(ltolO.#`)(6b^fb--&fu0fPj>2K`&J*1m"+k_+o_5=_BcV<+)X"e %`PN@*NWKF@LN0[R=]N1j#I=,bib>O]0o7%1PQ9Aj9,]H`Z&JfAh-AC[*^Fs!WKR\SC!Gi`aaATJf8!e,?rmTZ/g?G]$>a:>dA1', %Y\Sc"W)aR*<PK^CZt[B<al[>M+0\Tp8L2`=(rZsCgg1^S^5t/5D;3T'kkT:ZQYMZ$XB6,nQA$hTh]hM)E*@>o\sQ%`Z>#Khm?Wn0 %ZG(apg=9QP^$ROKAbZ#^_GV9-]6^?G!ApOFn4idu&RrQgp&;Sa.]6#VGH1CJmG$K.[g-*J;t(>J'AHeo<aS-#FAP>T<;NNGW@=]` %d?/%d83Q@1frS-eX:L>X!5?iZ[sZp5Pgr(/)t,$U@jGH*r+m3?>ga44P![tWQP.D#1a,mX*a#FoQ%s9&K#ar:n(4GhZCB?Si('_' %BRr^Z[T*t`iEV7$Kh.=*Cm7fWB"M7X6$4/g5r,&ILgoQMTMBlm5!*eneP=Qb=dd5jePu$]rL0%/5-M233'5pM5=7(=QTB+2>P8h> %E?gIlnV@I/UO$L$,8\_c'51`EP,q:FKUfGO\l4Fj/EBp.EET#.+W.%VACe`r5*UJb\rGBA2b`Go:C'm$*4^J$4lH]^,rbc*TaN,D %Mi:for^mrJYiEOu_#.T=:kFu=8*WcMEATUY'nO_6^SWg`;%-J@\+%ZoCQP-9)d0"HJ;.aenI[UWM;dUAQ@uOlJ2,8nT_j!;c,Q!T %k.?AHRM`=*Q"V=_FgS46fg7t.*eSd:Kn=-b;&o!Nn#F'7*YH,Wm"Qt']3f]d5Qf'WoZkKZ[8WIp#\`M9q]hJhEO^MtENCu8M(V<G %$Ih`!#C6rjh_eJ,KT&<g-uPX]dA[o6#`=#uTE.t+XeqIVT:X:7oCs(DGe7b[3h4V[3S<^mGK#8*>'4U/T,r1^"P0Aj?K3fVTH2Cn %P3P,mc@Xu[kR3#4Cr<uNJ?*G>qm+R'n.\I96Z,5B$Wk]8isIF%%dQ`l/Jur,jU_Q$YM@;mQ%NCf>n6XKlt[UTFL,O"Z"ATd='0M] %03&'CH&(M4?.GUi'm;L>*B6lpoW&M!Gbo073dcM/SYQ8t8J`?:;7dBAO#Ed^+]j=1W0&.;fW4SEpZZ<SaE%8V].4O3T'F"lhCLY] %k1i[K@bQi(BR42H?<o)cYbVNqY3]#6g8h*m`KIc$S=jE#hQ5`*WqFdrGTM4BV2rUj@:ih]M&(a*irn"Nck>bj3e?_8mIh+r",:da %m3dBda^_rf<qQXs$^U$3^fho9pHs(Y@-u=GcJb[\@JFTi-[hngdX$.o+tUI_9$(L@L[NY:14VCP.YeTpgYphS_e+3Z%[DJGrhV/c %:A<I(BXCg:lfYO7SZ$kFe')Rf7'OOOe2X"BQt5pu(S*H2`M@K"p8:n?@fCg*%Pq8t<0g]e;&dPd9T10s"pl'Cak-GuaW?c1cfGEu %9s4mB-FB`%LL\l@!9C9YpQIP%1#N!]B")h,#'MjUE/?CRgcMr5%f.Jj.=N@r/uH)3)Gu5LVqhq&Hjg!r&8Su_Ga@"acKD7$UgP82 %4G<T5n)#-Im#F&d;Ya"CD+[mc4!0%Df-BcLH^9SJ<4s-,f8[&A&N:V1glKP$IFYXV>%6S\MaK?X0u@bWLp-PG>hgNZ7-c<?o*mea %Yh6&NETC\RWEB]hE/!Q9#o_#2\/^jHK=D*!7pq1l3Qt0>=r^l`5YB:+Uca4<43=3cqp-G$P@]\3JTuME$2?R+a7YSUVYG)Qh<5@1 %>[s7)LpU#[ahkr5Wu)Aldc';"4NZ-/QO=SM;2EaQ9uL"a`#is>5<h4*R^-9"o,Tsi>4<j_kZ\qk[snQfWIM^Yo5YS,,3?"`qGgs( %<H,>Yqk8#be8B<\+jM8f,0Run\F"/p7f$P"M+3N(J]E<fl5=!mI,M)5<r0@qEO;EWIs#"D'(/m+C(U+r2R\f'AmHY*RbE[X0]q&, %h>Sab^h.a-Nh1&uC`'V>>pFMeNpkbshfb]$"g*Yq`R@:Qoakk/(/OUd:*/f=C#D0c$#n$uWBI$XE`tRR01;jEc!);nn<"D!c;^KX %9L-)LAL.]'1$kMtCOlaA42GYFH^>m%H/4*-"m#>m_.i]RCFD'\>\h!Q*hUWD#cY$eccb;c+RIlmGZ4<D6aE`Smb5Q0T%U8Bc/VK. %bQk2H+_-;!<!:sNP&,_Nc)i$^0FW&e;WRJKqQ`Rcc.i+@g]Pr"O_R<36uAme'[^:<*YSE%I5F&I,.L_'S]s:o(#4Nq=l=IdC7H3H %^U)uOqKbV,WX"/F".;jrcB?`,#[#4%A@;:&BM$rK&hMQ';<T-kC/E"cjD$;i!W4s`7t-7E]^VHS9=Bo?,_VV:]@&Y,_c]3o5\bG; %Y@bPahp7]2N?k\[G;lF;fkNtbaBKbS]fXpm??Fe<L.@5`D,T`)'I_kciGO"Lmp.D/RJ79CL3U+hS,TgU<VIM:o\,Xj#7$TZh\W&e %d7?[IqrrN;8ObmV1#o6JT,U:,$f-^9bZN6kVEMP%lptV^5*OW7Uun,rMH2^A>"<a:5`9XW_MDfQo2`S-+Q.6U<H%ekU0O]bV%/HT %?=CUrI9q,N5pZ$p=inK;:J0-T"*0RTQ$;tOjhU_u)A"13f3$F*&+IKOD'mYET=K@k[FAbLp;dbD6f1f0iA2e`AX*?RCZeP_QiY^U %K<Nkj"OoKfFFWPt[[gL[`2t)*/eIKjg"A-`7T<I#];*t_j*(ZCBLROprDTeZl(m$+TK\+8i3S;_LOABMZKg``oWmo/dMTW]O>0`l %2E"Gc;N,%9CLMLJ'<Dk[I:UIU!5LH,!KW</(;D8Xbm%]qOkeK!)I1n-P#iJFY,g;d'1(.K!rh[2+,NDMH2q`=_>lmVmOqqPS$qpt %EB2J]mrXPnVag$B9Q2#le.GCK0Aufb@@*RaJ'jLi'@0^`RC'h*9jGM*dUTPK'?6Kn"srZW5c5&+(';&<>_#_'=cLAjKh6_cdrL!h %atTBPGO<YoQ"&]('asdPWE8Q<Q?VV\@lMn\,*S`URZsNQ,'S[rO5_b@(AI'o9=+0#rHR\jNM#mil"b`Bs&T#2dMUdGFdM;A%-p=f %:,QXh7`CEcd(!E6f(07GCX(ag-BVN51LoN!nIFj!_,]sf9@2C%jtn5RNchq7`.tPO(?*,nWU+dP\C_V,+=?hsASZdBEh@O+$$o3l %!m(o&VW%#(JORjRLa^"'*mEj&GsL/d$19'"Q`NeOb!A@;Do+E5ap4na\(Ke[eVichR8JbG!$to2Z&/`!PEN!&@a%.?8UPS-.YeTk %3\"RBkAd\Ag:p20==X].5V]M4(`XPF3,=YQe!L+)"Q@)L%HH[L*t`'B)O'd"c6!q\q&n0C24F9#a7eT^WML/"b%2:t;Rr=gq9CS@ %(Ki0$%$J/s?"5on0Pf[uEiek0'/(dfr+IW2ZGn4W3iRI:[Q6O*&+.JOmo%h*YW65QSWu6M$r7Q:,WpnmLg2n>O(Q#q@9`i[m\V%/ %!1VsOQV]Td+:.*PA^F#`pn%sr_n*k`i96sCi(BN@LYINl*N#TUQR[7^"^<I2?[8Ub#sYYuRmi?o,PEmnlD+q"E2agrF5-<`Dfqe` %,]Sp_Haf(-a5Q;Ek`(p9WlMBf5(g0^Ui\bcL50U;9!l,mJ&,Oq2VI4qSR93VE,"hQ*7jRV`MI,DP^CI9j`.bN%pW-e\Ibm+ceqQE %bXtb%.4[NA6WT[#R1Oc[Lqf7rP+2a7iK)o,oBEFNE[\i['_hD(g`Nl+8'puqm/Q7R8/L*t5b[oX3ZBKp7H4ieac@_KP@[>fg47\< %9"_Y-8+8+&ijHK^G$&pSq@X*Zb7jpm!"@K3Yg84h^CnR_24LN!>qjbK1_+%6cc<:>^LeJj"gqt!Ys0q",+:](g=.QJnkCisbIWb8 %kM6?fp+@Uc4i^&%23cB\lC>j:/sEFiVeUU&<2\Vk7Ki'*3&:jU6&M/SSKCUb3s@4fJYMRC5-=Djn@MSY(meejcg?GXQl9jDNj(<; %VYDASq.Bh%BobsrRFh'p"!tYT\Bo<sardfRIORsr$'LHF.Zj;0O3U;9^Uj%l9_>VI(Q%uo6159qgkHcnDMK`a$3BQ_\29H7=a19O %&g\PqABNn5G:V_g&!DjBpSS5*Aulm(:A7]$]+Y&^B:aMWp0!LJM$^ECmO?"H1Z/LQPt2EnD!4[$L(#HbSsf8dD!$tj0IPbF2or:1 %fe+HiD@[`--]fo44nnmK,UGrs?(V"[.$Dj:4W=R?L;#0RNSAJo2Q"rt'^\='e]V4lLq*.WX+QE%D>'G^2_kOYi</!^Y3a8#[e_]^ %(j5]D0@uLa@d9Z`S/&Cuo/.5IWPoP2;s?2lVebNS\Ot,O-[rAD6SR+a6Ys6criLt#;1<(?RcMR-'#2""aXldCr<!>>3+(-`L!2J7 %Xe0TAkl?<t#M*7M0D`,;'M;bcHWC]DM#aI>Qht=VX/6DfVfo#$no7^fR\g-1B_qknEY2b"6ou+[o4fHd8HE2CFY[Qc_--CRN`BC? %\2sKTkKm1%m+Ei"1*_PhN91*:TQ)3n6K\K\J=e)-Zp8Ed!n@.'T^2d36fNlOC_mfM(M76p&+cRSF7;o9eHF%J03o_dKcogFB:[T. %q%%,/Q^8rB/k/BC;22,/lIiMV"QH@6c^me]4F>9>p+@iG?O'6;eM'3`-9YVf*R`O;VIPZ(^S)#TS%'S0a*lfmk;E&-8>*pfgB*pd %@NIUO1(nFIc`=b][8Y$NVP_8!Zm]U>SKEtDd0QA6Z[?'0J"I6/K!eM3IR`_nZf)9$Z$@2A/'uuU+rC2ipc84B;Kd9;[>*4_@d<E* %G:3>"RX7o^&iSglA!ko:N#p_d@6:W6bnS>%:n6Gs0ekJ9?WWP+*eo'fMjgXS28h6ppp21\"6Kmdjo]`tE[/U.m4pj80*IX1(#/<g %9SoBsn4I5,:NNGIq!c`'Gn&69BLqNLCJ0d"BN=Y,ebkE"9Qru$@(ls"ZDk`65BWE@HU:;Cn]o7'4]Du:C0i*HP[uhg/%i*@oFN82 %`(2D`YJ>)/cAo9&X4J'`rSaiZA<537C^fXPdf)Eud4;VZGQh;!38I^6G)$Um\hc@,dj/<nV(+I[UIE-S?\)Au."cX[Rl_f$B(D(C %W)23F,:J](A"139a4B97<5_umQtdpmf*Tru9?3YUiolAk7lgnD>Mm]AH!9$`%9t=hLu;ik+cD_\N$PC[42dKpm908WLaWnXS@X<T %[R<eC_`+&N6[RCZ]n0f160$YP0L\gpW=Jb-7lJ9&#SWge+)XXha2DV<Q)2=0JDpI!Fad`tQ.UNP\%<L,otb&'Gli8O*G5V_0a6>Q %_\:8mU;qi`R[l)Vh#A5:lt?O#&N`fB\&13:KDh#[D0p8,iI]*>HMFE[XQRUu=MM2lBb=o'3jFLdeEq4E2hD?6Veu^VQg5iV@n@$S %n%.;5dY6eIa%.P^Zn#BrJts_Li<8!%5DIGtoG'oRT&JpDQ*p_!:ickng#:].UKLs$4q9*q/8/LI_eR<]/hp'^CN:.;*D)VUjj/(+ %'>YXn,D?FqR(_)^a4>;,$Ht/:W@h=_3V*t&4tH&.?o"&[:Guf*Q'(VkD+8dBmuOU==e$cm$c9c;&S8.+.()D7;P#pkAR-CI)7j%, %*rL\[4V9-%>M\8ZJXg-<%Qu\`?gY(B/Za#k<#q#W:6uhsH'E(]o]AXMmDi^,nS:'/d#EJ!m@!Dc4@$1C(%$Ers"nU\7(IdtH*7oE %M"Ru-c>cWVC;IGr)hf'fR*%Va+P*G1RAHJFJA+q-UUV>c99$.5:&sg(X>9?lH3oFCcMJ4G'dt/9\9JC-g0eqn/]fTXSl7,]G$AXZ %)m+?c+$9).N9mI68+aZU7ot"Ph'p!cR0\:Hdlp+TITrZJESP=f:n*DT;q>e=;YJCHs4q\j\Y<c5i&V>,4+g]r'f>ooDuZKNYq;#J %@4?d4R]csOE?-4kbPfB/Y]]r0jcV,3fF%HV]Zsl^o62QSMm^0nls6$iTP'Vjc?dNR:oNWl2NF'8.`EO#<3c4e0UQtRFumOb/<Q^k %DkkO`E'f,j,t9p.\6MV/+lE)nck$1mKU4SE,J3ECp1fmkQ)br0mo/5k)AM3\:3oID,PZN;;\ntYD%L]+JKM_L5:8o=0^+&/ZA><b %Bpq=?[4O<Y3XqM[,/q0_4cOh@^M8$j\UiT&e(B[BoN$KsIr]:-h0i'XUu*W[['naRCc;Y,.QDGR/g#r5,Z#.!h/VU7%12M88_C4u %1et<B\?$[FQhdmV"`/I,6e\Mj`--j3m5Ne)il/Z$pGo5T5MiS._c-IdB\33ts73Ssm=504O+7&QYQ'-BpZk'DF,(H)n?DTbMnaVp %ZN=Zge+o:@lW8M=dp73p+EssMBgTWH]\"lWFM1*T)Ag*%H#V.jASfh:3"ADN5K50:Qm2Q1oE^4Pqp%oWm3YXrTWiIc)lI@='%#\e %XTnu3]#K$O1Jhq1^gOp]4NAn^(p`ZtN2m<b+SLD,MQ"HnJ@.aO`^9Q,ScWC5a-r/td2gk]%IDM1E6'>dG9W3735H<3_[hta[q>"H %&?e-'1EP@K9:7p:*TFL5hD/U[Q[F^?X`MtCI)ZClXf=ah2hG8uF[`q4jAf1.^>]hoII-aE.cJos(kPffY3`Jl0Xt?M%X#`r\$%AA %BFK3V_ViDre:ME2SrYpC/-i!sUNTRk$4d6`^.>rPS:Rs)$\rRAirNJ6W\_"p^?#k6TgO38->o*G$dVOk1uA*h,nmQXHlfP,k'(NL %<3bo,H-0uu7$Dc8CG-&eON65`FG@$1l`I,/#sg2%IejgH)6h(WqV/g'jQM>Lc:ni!3#X+UI/<VG8fG?3b/\S8^Q/l?Zg!(Z/qU"b %:@@X<QY]g&B4R!prSA)jnb2Do&c!,8H.9?)E(rO^K+ZUj\0Lq1YW].kqoh."$[b2fB$fO,56[f97`ELb"P1&!Zj?4?qDtMOA,3q] %US<B?>"SqRfSCXjX:S@=e>K7s-o"[Pq+kAS(dCNS]2,gKEP*urO#,^I[t]gPQQXmRg,Uf[NCknIV3D?XAYVO?cS0/Jc2i,J)ZtgZ %c+)9;W<#AY^c9o\+ADj6h@Ah9`fVQCES/N4WMm_<_3W`^28o=IiL.IB.Dec4+'e*W.020ndUX6A1R&b3WBHh/PjT'ZO!a-)5p9ab %&1L%H`SPfaSDog-kT[+UNZD^?WucML%b*>mK<"KkcEQa(%sB#-[ne1$$"_6!H5q2_,)!Sf0lPs+BO[!YAt<>R<=#nVjZJU<+!9\r %b3bs.WmV,OJDfblG[<hC"o3Ti6.25]g_,.HM0$6m5l4honGsqn,$68oN;(hcI42[BMA#KCVkDra5'T%:ghZ6>3McM3cASDA\a[;' %b@AHeTJ,#Bq\^icYMc\J_O$C"LL?$GY>8#29WP[7bE>3n@c=uf4Tp&"-oJaje>hOC/,!FloT`&AX>*-4:>rP2Ms)D/=ntShk:jEB %AbRVfN``>%Zp>X&&RhpI5up/@6a1j<Hg-/c9]q3U(!]HC;m/9i!49hSUF]ckO_#*M:Ts]G>5J*R_)uMlWl$o"6Yn$.h@f8tpBZq? %&pp>W%'J_kA#E'>'#YGS]gY3)Kb,*QWEI]0_/tDh!P`k_1KJLf]6f[U#K*CF^g.PI=Gfnf`5KV"eft0H::1L8h$?fe3-ks6k0Ic0 %#)TA+TEk'L=5=rCBAS)m!,fjB!TUOm>SRZ*6k#qUnf*@g(bWiTqt4mh5n`S_P33>S*o9\uHK-@WGE(q/bV_2!$jO\DKi`js*c'n# %R+;fMa4r'OlLO4@dk\B#O1\f%GB``Y%l"?m1q=gg7UMJtX)1dS5cS-ZM`!Y8i>S4@qp#uXl5.o^2Ur5dT">^h<kCC0>CF`8nog!k %<3au`J7t_!5)#i7PT'e^j"85!Sqd1>:ZUsLI*I?VE3*sJ5)Dj\b/?9iGV*TUk@hd=,?!uBR7VRgm'uI!,_7q!kW^_3]u0q=B>n)@ %@R!cq=5;55/WDa/X]@T6:f;0l>V$aTg>IMa1PjVjF,DA#o)ie(FHpU.e(\SU"@nS?<WV*#MP3?X:*Goe<O2qnfBY>;RJPX.3?`n8 %BR(=uD3t$jKs1luO>91U$J:\t+l:@?KY38I,5Pm?!IN^GMUf("Pt2\*XB'6I(MT(QMWlHXlp['&I*Qg%@&IE@IFFH;s'cVEgF1$X %.j;Th&8eqFZ"MERhIA^_<!=h%OL"CcZ0[lRNOXk=_sQDX]tB5\a:LPFVM4&;&-)@N<sHQDP=P><GAe[deL<+$14_bXN#%sCF8-rR %UpB*\H7kpkQ:eS8:K!jCk4bEa:CK]K.YDS#:*I%%D+9^urk?a6M),^`g([\8>f,_$a[@I?hVV`X6Nfhig![G(I9:YVTjr_NR^QEG %4aVS(d;T_SIJe2n07lNV3@8c4LA`HW]Gt8Ckb:G\+:*n^TTI4bdN"TYcN'djkL@?!_Lc@c%OXCfPBWWCZ7dC1/Mdlc&H9@V"cH8@ %K!3F3d?Wt\,IQf^\W9nVY0Y_\^;F?eg;4F-8uU`'W-RG2DYndP,%#1.fX2g<?^'QO4+,deR:drDiZZ$/nX8E7,<6TiZ$H<ShQ7-f %@5d_CVhiWC@P'=D^J9X!9@:aH\#6/L.>"B8@!XEgYC*3_Rj'N.?025;j1\O."aF5^=QPQ+I0@7#84ZLNV-^0*n[`3;/iuO*N45I> %i'?h)[W\V<Gm;hRpjic<]1VHXdnO(89uA)EkFo'G;l%\W^+cur3/%cmfm,Ni[c1tOoOuC32`-,[Z&3-hm+B(DUC1LVFKYjJ#Zi3R %-\VFBX*Ms8!1O^N]q0\)`%!F2RK?:tjM]%\#F0qC2F9hdb40b7'u(_=>qCK8EA]Gl)N>ZFpC"U^&jc1qpp'N*5\3MghZBflaMb-Q %deB]mH@"K5Tj+ReB=8Wj^.7ZY-Ga3L\IRO=Ka8eq$22M3aBJDR50V38OMTKQo%XE.-D/R6XZEJp"W=o6Et#G?@p=2C+;bf+k]GW8 %<s+j@0sP*%P'P5LoK7ga$$Kl0aWI5E`a,L-?FIBC^4t_^"n"`/E'PkIg<@RK7&kIC;W*#9iGH'YpRMb9eGpaVOS12=Fn*K'*h-BV %q3)*W,qgMj/kY]T[ZSDa4bGNkB$7Z)1f)QJ+f&^5I7YUY]KE2Ad_fJgObbfG!\U)E)&TP&Hc65!/%k9S7[/rD/e!K4G`Z>2QBb*K %_>A_[i;_B`<Hbj[eeR'#-2I7-Oq_h[#(#/u$#LL)cK-sj(:@[8h"/@HKCr!Eb^3P'`f:@30Xmo\Idf>nb+R=R*RdaHBn_SXcQGD/ %Pp0['=I*g%:I'kO\=3`l%(,H.F6)-W%b#tO\eVHHW5=AJ(F;ZVAX']^I21`UP"":6_VVe'&Q`Mi?LoC1gWC0W^^%eBie'+sNiiKq %3!Ou#LYs\>PUA#5q6Sk5"MKsUK6;AI/&0?r[Ff]:L<bi5!pJ@bi4,,>=5\-@[ZZ),:]_]&I[fLEJ.1(a2D;V/*`#3aa'N,T0t2ae %k0.8s):[`(i!afGQ7\@<6&36>\fZAk[BKdrM-'gt<B;>&eHeH8)XZRp_CT#8MValFM>KiW?JUI]3BO#iC-B<6L**!CS=UrB`$B<" %p2(<ibLQ:D6G2J1!kH2baoR<"dApMJL*'<NLdC&<gT,B1E^%MKD.H8m1O(RFGKD)B"hJji9$8A9oA+\AHIq33P#O^3=WCsLn=5)o %6k#D']*.2TV$t[2_p;<5BUH+mM_+J9i.Fk_=q_]MW%KHj13F>dr-WU3,!S,dQmp`\4ljpLmZeg=PN>:h7W'A+`V=S9/mDi!-D/JB %cjW.,?@Fn%Z+B+!*<`kmm_YL1>Q&^d\GE/%\JZ5m4WBojAb/K?&GOi&YW0`faIF#3e\D=hGZlaXU_7X$Su,N\,YTW5giff_ZQjWf %G-Vqip]0rtFX4Y?cSfVTp[8_J34im]0;1$XW$Be,hANsH>.5Rs!5>dtS])eZC8'WnDn?+\['Q%3e<-p-eMoq&W"M6IB<GLXB^D?7 %\.,1@YLC!g<nS]IT%2D(ACp\CWYI[/[8.EeAtdbRdmpW3Y0$Cm1[e_40J(>]AEEFY5^]Nk`cD)#8K+^)k+-"(VJfKk+.LH<QtnRt %qnM7?VCCP,QBg2S.i#+uJo>),]Z'KNhWpjgd=^D/]iNOE[=Kl<B%STVG.(:J@"48%nUd*,W1ZtO[otXrMVI9_#hk($%e0MQj4mA) %57oREf#K,mIA($=\%'gn`>\IGgsou1rjA'D'aZXVB^>\@c?Zb-?/tWQ]sB(Z?/+lj\`m[nNpZ)H?Bo4P_A+sgH0k:[9gMti#Xg[G %iOFZ'QJM`+""*Ier$O;(#55[b$:oN<cT*A/*Da;(iQLY_XA!cARN#J`*6Nb]I3BNu,];fSh:@93;@A_JTL<iT9<6+@TWieV(0[O) %(4NBEeLfI#hW/a4*H!hN8^m!WPU*A`X"4F4(N9WX2?Wgc/lXhE+nZ13"Q`]R.A:@5Z1B_L2b6uN2>))uKBk]B+5<MQmV*>'fOn=N %:+^,43:/6$PfLd2dU%bhS8m[?HLG@jMUJMN4'K'KaiqR,2m$&-2lmZ[3F&Pn0cLlmKan4&&(#_L^g(a)RU(8NJ4\d^H;1<U^bugS %i"?-8E5dg>GH]Rs);G+[Pj7fget]-aN79\h4%KmR;$9CufHb6V5"3%jU5ep1.%SEmMc,P$CItr>SgGAfcuNFJ4`4cAGHNS(Xf8_V %g78[qLK^p&/g'c>K-TdQ^1%cS-#]9K:qCa-5Ne;jc;^ht)g>1X:!M:_rjkY.@Y9Ma4:^<P+5B5i5Y^R(=&P`Z>:ui;Im(<SkKcYB %0<?or'(V@u(Q&@2J&uuRVs)+BEY%k,9*>iK.ng=uEeVeMmR([\;6@49i`0Ur^p#<QeU+_.I'7GN;q0Q=LY=55@a%jXSUI[ZFSfe^ %!F)25*`:s:/8M[nN_!D!BSL%.U7G(W+*W0iEq8ba]:\"OTg><%N]6JjB<jauqFmZ\e2m6f+mn*,&OR=9rA9X;-f9/iGIAa/nm1!9 %pG3WFK?I"E/qbm#rj=$Dr0!aIrr$Lj7:tS#C-0_i,>mXNJX#:]=7EeAcb.<6ju&$m>+(]+^Yf1];m[<^k&LkPZ"46"W:IGR.ADn/ %d[mq!>"\_.=t9l]U34S]5#)]\%X_omkFJicm-W%sSAK/9FkgU#^=I$>al8Shi\YZ3dI-@/EU_,b"SM?$H"eT\*`p1,T"Y:a#WdOh %m5Q$WD3GL-%BoX+^fWnBY%8![PLll%%j:YgfDTjkd@1kN?h8l$`GUgjCN@L<8TC/FJQ.hS!9V@BVtF(9NdVlJlcT?p%'Ehtd<ca6 %G9=Bp;Hm\q$OP.JXd*:?5H9h_me9P>*Q_o02()D^]\2\T]BKJu1N]tggjQbV[i_%`K$hu'IiV90r`_o8@+inq5;JSF^JHaMVj7ns %G\A;cj6LcNnPT/<:eU0OTN*_`O9'Jeps`$K]hoi["a&dk?TB@)(bBN>kVP6/<Y8SoTUQ[6)fb]gF"b3ID@[Vj=,:6Y:V^:RL@pq' %EJE\[^e8k^hkSf8j4@5r8m6\s.kUD[iXC$SBic)pBU5MUNK$OO)B_aV)E'bFZ4gom./qhDD6LTICM7Z"E818lM:&mgGY!u^Bd#t9 %Se(&m4%al3/342sFt!T)m4a,Bp<H%E)`&Lir>%j1GpifBaL<W&O&`T3>L1)IE$^YIk,;i7>0(<qd6t<NQ.cP*#D^jP'Xr`Q?9p5d %,Pq,Kjj@SK_>=us)=PtYn>k[D^bSX[d.pf$nI*l9ZEfasQ\SP:"ho>gMQn2uhX`5`TlR'&G-A&D9JOun$]cHG%i$[eU)-*96itXe %"9nS`5Z^?S*ET[uNEinHI\S$?fsL*5`'^S/1cG#:B8Kd=(@#dP"**o>[tc#<hr4,tgieE1bFp',Sa)&2;4]trA_D2#/LSQ(BU-@p %3^>=`bh57&f]WhT7Ft\IR"XArT^."J#q(_2=@\JHG._9VkkfLnmZOJZmq)><P?6QL:"e=28Pr4,_7:Q(IKqf2Ci>hQG554lIL9l/ %AOgms-p.cd'$2%fUKH(5Vs;T72cF\r]j)kKc*(lsHEp=@#Y^jZI\>i/RS$d/K`pV"Yp>E$a2bYoG$?Fq]&=3$6G;'?8WsthJU@4q %O7>3K#a,">O4-3C]fd9b]uE!j!)CAn'Kq6dpgE:Eml%kA[*g&?5L(/%G!7\G7;uHq1=uL^&=cA5I>X19k);ctGT]@lr(Q'h#'Y=q %hp16i9pUi1bB9=9E5dP4YN8LAA[_?!j2IaPlbQJPbX1[Fkqb.,"aF\Go+!PF-ZNR]>`$DT?nc,)f[]a>hpQIMr^SgO27+MI[t7A- %jQsK2X5j$EMepqI8BCF8n%eD\oJ`Y/<`>hirl0ECgU>^o)8m.eMh7B3cZ'P.Wp'*uJ+,s%Q`]iUV?*Snb#gKqE#"_hM79!/b%Rf^ %=Dj@dAlI4k/qs];gkt%$p>Zk=*%Fh=Q^Z42[O8AB/J^KpSenrYGj5_*HWV7&-]._D2,"]Z9YPT6CAW<f>A1!V6/#UI>`nD9hb,]K %]8*a;n;P9>$4Gpk,*uM:#L,Va'dfEJ&f/4J5*Koi^,Sli!I/7VIDdo0KlTTekj'<H1^QCObp(kP3X%?T2G)j0R6^/d4cQ+-g,iZI %^2<0=q?#$%[lhWcHUl2?b=@U)hV[#dgTu;EW\5mgD"muN<:PN<=r\QN^fKk@96cH7$>bmG%N-4Y(*pX-!p_n$fOH6!Ocf@RONq"j %EJ>D#kcX&#+Sa*g8Bm74EL^($2%YM^jnO%Al[(oG7=<`oNK+%pWJ;#=YFmgiB^OTg[4SgO*j+PDd:0J`*n6@r7`Y)@.2'D,SD1mP %/:L:7hA'XI>uVfP4@N)q3`PINV/glOf^4\0k\HiM[g%o\oY)K2(8n*c[a7UA`IQTk(o@fZe$B8B)F5h!+Sa"qYQJC%':DFT]^%'Q %gmNtE9".a$HaLg^Lr"ZRS>e-Y80h(JO&*;,dPc6nk>_q?+^<S`4Z@g,0AcK#/G^+jEZRd'poI>iN*m%>%0Uf(L3%%HXt^t82qbLQ %YYnOg+.aYg]Rntq]<+1,X9WG#pq1`e1&S9W#p<uLF:@LK%Fdr5rGdSD1tjdhgr"i9-15_Dr3ePB)W=D=rXRKtC4)[(%S$1&2,=@- %1l:.+PGpiA8D@3CXims;F3Q+J`I!SN>b@^D695;"&$[1XIA2UnN1r,,-m@$(IRc,7`Zs6E4&FBeD'S(R+?LJ;^8kos]PZn'-c[LY %i.EP##dD7CWnf<c#')WPNPLe/78eJE=g&?BQSe>c2aqD.c<uQe%)GcR6P.VF/tsq!30pMI&I_tpIiAr3pL)k/P@XuI;S?EN&uGaA %N;8jb$F2XNY:_i`f4b@0@)PIV9=lb:]L1:P(K_L.]H]%8%3&J<q@+Z79-PdJU#LXnZ6,X_WK`%?W5Z36%NA@"Bum9_A`C2s[2"Yk %moK&J[r\pJ=#ViC?RVHr:d%Ycf=B)1'%!4a!VKq13mR\R-JHPC*4`h3mF@iSQ6c4&5Kr2e*R+-(E%KGt)?ur5,L-g2N,U&t%n!?Y %2Yt6s`W#,RRF8QkLtHIIJ""Br@)FU;g/;\QgZ83$FbH6TXUj3OMs])7crIDD3Bg=1gM)h(\?&6'b]82n=C"9f?J1&Wh[dDF3`Ygm %hja)&I!;/IM2>aT,:Et=b?rD]d'J\6Pea0Mk.#j33'CAfP2M\Md+"/6r#4\<<?IcA41)urYV1:BMg=`Dil;Z$G(pB;OtE+(;1u.K %_&VSj&8:hQ's_9J#%fWn:$,GC(;47>;7,C\QX)%r?V9`\-$\lWG\>ocN?5nt?KPatr!V-Spd**ZP=um7$bkc:l<9)5n.TsWY9lt[ %LVWHC4B46<Eb`"2DR2J59!@X0%Yk\S&l4hY5bDYEG$UR:ll*dAAFSO.LJCt4qfQUj2<%A.cq*_/RV**(I%\T`X_1r2%YoZ/cqn"+ %15%3UQ%bOC$(%*">\i!CfV7KrZ:d_kIJ=1g)g;jAB!=K]iO4Z5lc^j2"n^fIPS?Aj%Mrh;-(Z,'Sl'`Yi!\@q-:d4.Ak=K$(+#96 %'qtbj9(f-3Xs6s!JiSI%[\3+#6g"2r@%.r(`Xur7?h8p'DJc=Ok2"9M#]pBQg:1#!Mp;#&>p')9+E9[V*@]Kg<g8$skjJ'-@7KbY %S'b_OgVRAHo!%8:NORUM^>p*5aQJjW4lc*>@m7pL6cbV6oDh$.4u1a;I&qX9GM7(F(at7:n[:U<;;1_X7\VTif6i?9$h"cj!B"+6 %&)4+okB6;":.7\^D<_,[D"m7:mM>]IA'#%M?rTjf7pu/)X*\)4[)Oa,j,qr7QIj`[`tEF8!YA%4dA#()00(?R'V[:/4PG7b-/WB. %r1r9,GQ:j-r193'*;8PTl?M0F:e#6q,3Ck+d,jgH.XEsX1F-C3;JQn5buebcd'pVMY2PZ8p]KoKE$pffAqBJD,HU;$lMGRY=(^Ti %YOjraX*BJeNF.&Sc\Jp@0a<O4>)Bt*>^-FCPgWGrV1G(?"(VSQDR"#k4))M]9sMHrp)j(@A\VKl(,JsXB)=^uj@C)aSYJYGRAW]C %JXTIB!%pppOV03d@M(@'EHU#C=<aNXDju''hqs719`eEB/Wq%An(7I[GZ+H)DGLP(iLh@l,-=<=+*8p(<k$D'/QY/CF2Wn6f(@\X %L2FP@p3nJQn0M\5QZp\&:Tb8>\.6T'B3X&#JPB2U?eN?h#Pu;AdY806_*]u7&IcM4;g]"QLFXrTE#"^.MOa9seGR9:;\.mo"jsOf %^e>u$H]S\kkH@fkW_VM`E1D.3*pV.ZJet%Vd>sm=DG0]/?a6ar:/UtbB2>?5Fk^8d:P`CcV*Fh?c7(;*EbA<6K$D,D`1%%]No3#/ %*;i(L55f=mH6IKIe)7IB(-hWb]S(eXWRIXoM$,ji0;VKu74fDTTUaHu3ZO3oGZ<eSV;52/8j[JIA=B)SJ[J93S+i%V^#%9*kVns> %B'ICiqhJOpZjn/t"dqmeW:P,/"O2/ZkBV?p`ZEb&hG^U14*l*PMkAa4TRsJ(0J!rT,Ik17cfX2KI=KpF5MZd"/TBXCr2qID@`.%d %oRHVRIb`Sui2s+=?2AZ#&.n#*rq-'FK>-u/mdmam>4SBph@@tLl1%-0nJKAZO;]4O3^B-!TGS(Pf6r-ZYsT,?kXKXb4dq[ki#HLE %q7P5`%<f3E"]P0`&#'dBJk=.QGEUKXPd)H#D>3W9icemJ(6\@sf#n?)hAca-4hZGirLTqV`qMO=gKY\tK?NEmrm0M:3P&7cMBA5U %.,fLYaIRB=1.^U90C@Oimr5<T1-R&Hi)TQ%SCZWg3^fZd;FXCT<V#?:'pR;b0;;^r8+pSZs(bBX)q(k]0J/\gZcD%^@8%4b./is' %>'#UN;O0$I0:eFN2o"jJ5$hV.g*<R_q%*EoHA1fs$jsk]Tb";L,kZ>k:Qu;9`>qZK!J#%4rR0I75rgZ^c7'2'A7n?mXKkW?qW11D %,fLqZ`bq/W93B_Y.Sm\4FEEN5ClsiLpQFO$3:S-pNU#M$2\Mo&DtO=;Zg5C3[783oD)N/^j`ZK%?U!qlVs:.kAVHR[(fcK:`TYc" %7Wc(Feji36;%ee`f>l^#5YYA,Xm:(S!#ONBl\_>-$d\I5P>_-BFGF1KmX=<gG^"YANHM5\'#A2Qf906/5N7;PI2Y:8Zi7%[L/6V, %SP=CfU\C3!Ls==6R3Ak0q'aH3N/-?Jo'@TIE)%RhN37SPUUjsVc">6JF_t>GZ1B4$Fn5')RJsVL<O3(Up3s*f*6dn+:T@uJ.AnLF %M*qQiP*ks`I&'=VVpoQ%N\:Hei$mH=.)[c&9L%ckqla[s?9eI6J,T7oqYB%Hj^6oscgQAYqN$.$kMQ=<ci4M4:k/K@LVJ=RTDlge %rU#+3q@=Wos)5[JVgnR1++O=*rprAQmN6oXg]-dSJ,FNjprD:il*l.i*5A>-qA2-chu+)#s8.<?Vm$-Z&&6SCs/Y&Va+*lt,6-eT %qM5+GJ,RQ/rq,+GFT)-(YQ+LSJ,/?$ItC_d-*bpgs80:?Gm430Vi*`o"o>2[>g&4N0.;^jNr9\=;lua.a0NJXl%=$Ap%/4]qT&X7 %$N8/omH=N2kC<M]>X/6O^A)Ut@BY*<A<sr%869I\>*DCl7)O>L\l3YG8k5*o<iGcH0"ae6^rSI-fTPPSZ4O65p&egI9G?7*K$:j& %M%'?m]8D%Si.&$Y7u;n.7T\jCD"8.Ibs"n@kN?`fjhBB^C0FR[^$#IK7570mrFW%m+:dW[IV0J&+J(]uG>=W<qmV!;<jZej\IX`D %8g=PkY?B%mpD+]X:!$JX7g3iUWThG*qsiXZrU_32PKLT=3TKKc\KeP!aqa$_YPH$#,+[%ZcXA?:f]]ZId^N!0:\e!^f`oB!+F?Y- %9<jHL]pHaU/WXDe<l:?sI^#Wp+M1Sfk#UO6j+EaAUi*[*WW3crJ=*1A9S8"S#kgBQo7PnSAOlH&.D\YQ[Cd@tf`#9jgO,&=L<$XL %OR$WR*@)ch3ZDU2UW#+D&]9PFG"'$O@5\[B17+8O*j[Hs[>',@&mV4#h<&GH"#,GS#;*TOn:>+@fdp*??Uo;Fdd-,n$Wk"MP<FBT %IO`+^A*bEiNUP[(W*QV+Gdgg9mdnK^K+'TJAGejo!PC1656%o1J$Dt/dmF$.i4A6pJO^p-)BX__Ms7AA0V5PAOtt6!r8brShDeIB %ciK$N.g=e[HX=,Dn0g?M2N%@[C:Q8K7C'dl@KT-[\VQio()5kkqcCe%qLn.p1b!WH7L8cOa:SA_hmcpO7hUW%34`hNoP/j6K6+Y& %EIfe2+l.ke_1)=$W>E6g.e3C,A;Rd-[AjH)'SoO9F\0sW4l8g+E8rlp^%!nX<Hfjq."R:GC#$>tBH]1,M98DVda_f=ihD9obC3kp %Hrl@!?Yt,[f3eRJO2(XCfmD2HbHA-U2##W]V,tu>RKHGG5QiR)I=kiL<Bs+Q&qY\%(a1?BPY%O^$7;$'"sP1<P70JU!f/g4<3@@: %0]^XfG\iCmX+D@L1(Y08_$1--jR0L&hDs3EqnjhKN;MYt*/)PH^U_p#CT]\Tk'<T^RVPsuFlbK-CISZa,HEc[<XWnD[St.e+Yn7n %l?;Gq4[+J[:o:H0SKT<K$5n<m3R`Y6#uq;<3!HplQ@TfUFO_hj74JX/Zj#!5qFh'h!iZ=O!l'_&ki:Q8p*1L6IoLj%bZ`1JJ.ECI %/EffO+YK)<RY"Sf+%AQ@6NBd@""A#h@+iQ]Z5TKkA-h;81aqXc>g.lR."`ei<^8\!&6J0G9]<ts`DItT%/>1gFRWTN_FA%?)b;;; %9.B%]TOUf8957..I(+=(nIg&T^Y@cRY#20+Xo@cm.3_Br_#R_OA-en5\]U$*:-r1-NC+>MHj";e<Q"lQ!_j7o&\PNO]G^>*or@^k %L12s0P_tqS2bThhIA@:W1>do!!+%_@.t]UZj!KY'U8lhHc2)8@$/c#@muScaRLpZ7JD-8!Q$F&S#qEJW0L![AU>h\2F@N!uK<,nP %b0G8+WNj9o:hbeuF0Rg"@R?ckU17LcHc8AZ.;VB9Af8D&L\Tp]C-!.G/)t5C)IiNBGK_mV"X/62.\iZKAR&m15a4.Dj&-bVr>P=\ %3C<qZ7tc>Z-9c)_2OP<d6-M1@QL+!NE/LtFTp^#&d?3,i:?_EApEf.#;(_m#L,KT1(5'ND"q-K(,(H3gc6_GN_:KapVLY3&^_i.> %5S"Ee>O_u)1[dF%['Z-pCPhA;r]2M929YR+bDH)@o#M^8f;MJG^YC&LDn!f.5,<IbVI+53)KgSLZ3sj,bhJ"U#>mpmj<q6)gHoeI %\TTk&.c6'7eAOBVKJ%s+PeXsAAc&3`@*Xd(.>o2*K=mI6ZK#`FDX7X/8H1!0'?mYBNJ9YQF5r.gX^*"-n]g32Tr?@P__)k6;^j=7 %.$C^<%Fe@^?*2hdURc.0T?O*pY1r.77VVV%rE#D3faP1M/CU[k,BenP%S,3Q!UIp\=#n"JS?T+S>?tIf9F8"VI$:&)!=+E=:>['B %#6O#Ma1De8n]MOqeQl/h_5U;4lNh6<o4%J0<YmZN4O0V)k-M&XD4YP\@'*R-6>#?Nn/Q/'KqOUoE"GIC,5^"]"G+:d:K=6lA1I&8 %Cc1NS^$ubWTKr\mLu/LB`%96Y9jK5LFO2Rdl+qDejL@_-mnhPQBnTkb&0D'rJ%U4K$Y1NXRnu.e&p;S&#\^%oj#S&2Mrl^X.oelo %gg2kqR.)fRNR3YaJ]@Mpo@(-F2dX>gp,<*67E[H>Cmr##4ij,_7S]E^_ECnq2HdW/frbJWmj>,kY['Mqg-h6J8&%Wp5iLj+U)>Wd %QfgX?m;ZC#71bKJX%G-J<,aTe]4r&lTYUijqBgU+R)O0fUn*HYJ:rP=5imZ3*s#`;W9NjF'jGCem.O\Y<\a4:E0(<8$DjK&.V7D6 %`$:,%hX2e[I#e1=cVTK$$SrenHRM7`"Xnoc!HqE>WMoUQ7Y0nto,*"+mc,4[)nbqP_J^G's/qa)/>3l53B`8+!Z<bkasBG3Ob)0L %[^me&:Xu7`9X]eY2NBV04]h%E=sq82`erU.^6#TK'u:U,)=.2+(Q7%o]_mYIDb*#FID/%JRY$lqW.fop8a?!6AAPY^5mV3XeOE)( %Y@W$:o)Rh#Tb=FXRuK&Hj6D0b-dGm1GjSd>7muc3,>c1;Z+^fI4jgK-QKF[N8QUnF8SbVY[r`-NRGjlZ=B=4L@WADa*[H"S6KZ@K %*<R]G,2:_ora&UNl$o\r.fE-P2ACdPd,,5[,oQ+4NPN!\RoOW$6?L_W$3A:pbUcL@Zt[.<^B^ejn+]/fdL'JM!\`n:LH#\j,&Fn2 %OFN*'_^S</?R94NU?5?/?F[2i>a`TieJY[(A5$5RCU"AVFqL`.=c'+D2?I5l(!dRlp\;mgE%#FqK9Cm7DL'_5D$QA5a"47Y^h!f= %(6)U>A$H,RmCV'-r]/AM[Ts"iYhl2e[n+V<hAeo0piTIOF\c4AZ&;S:'KspGA@][g<(1[+_fG9)j(op032VHA\mo__k](GLM?&5f %=P%"kfgM86`)br+XUtpZ2_4A\))Rcn6El>&_D51P_Vi;iqO<64'GG@b95nEG^dmdb#Xl`FFU5MJ&Z:qa_A#abD9[ZY'I4,j#DL5E %f+mP]Fn"<KI$5d;nH^8Fk[(Ru(+u4Yr[Q$EK81Y-;u>[:2KN;_TU-qF]mSU<\39@k`X?G1-Z*r:^et^jQW$.rMH@e0]NAB-QH?3$ %\-X:Jcj0q2(LcaZdaI6O+^S<)>W3uW@FX\Jg&2_tr[sLV0-/%GIN!@BAeG!r[bc5;IKabR&\fQ/r!Ltr@]FQOcKWIdW[@nb&epp0 %9$MBsZLin8[?>g5$a)SOhBeY9@cOeB]*e2YEM46P14lNpkBr.h1P88[*roMW:pdCi@]4N72nGr4(PfjeC8<g?2LJ%pF&qqCmc(cr %K`h_^<i[2@'>l'shfL/#>N\hc2Gt9)L<=X-JA$\?a'SR9aHXjsNWCtD&5PZ-"-pWF`V2\6Yr+dAWcD9G,dTP4PgL!uM4=q1!!JEe %"J]B0667b?$dDNkhE0F"Ld[IZ?q9+7d[X=V*Zj3T%SZ^E#AOY)k66g#:0E$(%>J/4"!H"1OQTgmLlAF>(.$0b,h5dG>3f:`(!LQ? %@PU2+`H7mQink)#*(Vmr.:HsG:psQ`9EQd+*TQB>1TE\?nKt_o::o8q1:8>UGh#*N_=dVNBNCLG2Nfg2>6&Z%QZ%a?b\ffmG)TN4 %#btB>f(n*+Z/O\78X=u=.Za]-:_?3mj]"O/12M?<G\LR0XhrH.2+K66:/"r^Au%JP`=E8pRKdX"QHdc!T<8q]5Z]g=>-H)Z&8%7W %#bs79o@L`u@,ol2IaP6q"Y+PV2fXYK%h&U&ok9qK7n"lU[3/d&C!su'_NZ9CGi=4s@cp61H2[4hS$37CWi7>79b.7M\U=mJocY[: %Q=s5<+G3&O:_as6k]1p_gsL,*lDJ:JLNiCB9rF,Oog(PHAJZuO84@:+UhOA-n@0I16$Nll"=FYPDin=8OrulBn]NCD]a:(l5$0E: %?)p]1MH[/>l>*;)()*:rBU5QhJVpI@QOD<TEs6AHWcUgfQrJmh*K%:l2Kt[HP9[]I;6.e=rA%/L+78jK-GfI*)^?ti`=VCs+^g9> %i"q(_HFHZ)L\99W`cB:rH`moL9[1"6h7T*Z-]g-rU,m\"oJL<>KST+j<l9JY"S9.7="FNnKKWr%]Uag7R1:);4-$7Bq1+4,!B3XD %1GPd%%N(=pU6[]OAF.c95YiVtVoXEP/ub$]pGk3$%D0cr.%'$UHr(R1/bAJ6d(2reO!n1WI'I3"5H50n9`^jmdd55m7m]O2PaDO0 %=J0CZ8%hg+;(u0`]q*sgh:YfBJoPDrnai**I=//")M?`iH=C,u?u,B)(st\Y^W!17m@A5+?L^tSFZ<"qpthq+NlL<m.6645S;#>r %F2jNX2<u:4\Cij%fF^g44F+Co?EXscL@_+<7C8u;qOnLrdb*QE6'L0pZraK@__@$0^]Y)NL&W47DW*m[AG2h:2M`NP1"[M*0:6[U %K@),n9rbF>K07AO&)YCH&5N\4%+gBAdUcq*W+aa;HTeB]E24l7K4J?94hm6GSE.73+e`b]M,>`u@b*n$Jb_PV\kO"mMs(`pTtp2& %[V_677ARGT^0ch&KZQh)@8&HR9_%mWQ0al\WAtSdcU.BG>UH!P2Gn#cdZ+dpmF&JeHGr4[gs&f2?NS0lj7?bBXXV#gf%,l+SS7Ka %_6Vl@a,:TUE*!\pWM#9s!-?!%j2'-Ye6fL1/4.,mn"sg/G\=Q$l0h)`^"_MHc%t`OjCf)^7d6FC$aJ"^9@YhuM[9HCVmrT_QgL<_ %\^Ts5P!PtR<?D\p++7miF?@.)=d[J9ko4!tme.0;Umkb;<nTk6eB1eOQbZc)Pr['TGgEU&A\c.GR'R'DY>A,L4aKX#!"DV4ps(Gk %^a7YL_J/MAke7smXEe)BOYu.-%3>OO?JG.bh,YQJ[rU&sY^:4dJ#c8dL>Y$$-@(1>0eO5rk?LkJ6mQ]iYgD'.b`P[DOAKt5l_lo( %c5()^AR:0Q5e`C>r)j@u-4m?=[T\8I:/T(ED,%HPbLfi/Nm:Z0X[&&\7sQdH"n8M907aUT[5=mp?T)!5me4U'5;8I)OCaNemEO(X %AS+Y^;_L,7[94DVK]p^9hl\h0,H=n2>a(4`!cQ3Y\hd;of<)anI2:#lno?]<.;2]lEBsjFRL'jhk_,,EFlfDT2d[g%6+!8[!XXHL %h#u>#MPs)-:6S"M)'H_#U6cA'-Z=o'>G/e_h)..&(@26%m?E]ki0[S$=fA@IFhZPk<(75+M"KF36G<R30fOO?,<f.(X59i)=q`0- %)&L0)A4QJWNLo4noGc>eJ`CMY.cDdS5^Y/@p!PZQM-/PHL(<Rs`mVf\Fo'Rg2r!Dn?_FY35u_VuXG5`s)=IsuP,+lk^_o"8XOrQa %Xk_4Q7dHoT`\81+KA+qiCpjDoJoG79fOT6VjU<hn1:U2fcna$Rclc;',=nfR`ct`D!(@![Ee-cG@XFU49`2?+0Q_*:4tNB^_b7Z# %^t*+3e1*q(-eBBkg8p9C)metNl5<s%;ZLZD"p[8kmO#/M2Bd:m]#tqL'i9Ooc%P\O<6Ro[*d$a(\09p;a8q$a@Q($r&+La]>@*u; %/UC`7+VL&09L;0CY/?U0X+lWsqf5imOB5^/&#Tf/9G9<RXo'a>lFI:^dtaj^\caB*Y7:dl#jJVt3G%Z\7L!Nd6YiLBbFg(Yo9>l+ %#aj$-%8.ff!o3?_9$GPG_r#-m9/VP+2g+#\40ZA"[X\_`2C1M%CbbJ9<pWFjp]SKp-Nc(Wp:lsY,fXr$h1I^kPf;B4J6.^r]bC\' %H3gZ2?6fgd2gD+J'Ah2MPSLKCK"cBSD%&-k2rn-hf7u]I\epfeg60mI`++')dD4bSJ_1X49bBR@(&OXB;jMq(&2GaF,$J7%+k@0& %bD5W^noTeh4EE&=NpP1afKWaeX;WII=Yc1_Wtp>s%<1"!3H[GLCmJbCA^:Hl6":a8m`AZHr`$Aaq0.'VMp^*^h<stqH@3UZmkT\Y %jj@O-c2;+LJqrS,ePmo/95./W[,?bC2d/qYIc3`[f,%aV41@ZWoP?MB4@KE]OqRT(Q4G2q_>5ci"(K/G0320["(!=.crE$QW5Sim %:LSpD[<:G]/cU2T-Cb"/)0gbPTROC_CG0)O\'el:@3qKLqKHLU3[AOU!WF7V/7S5D9fFkQ2M?!L2dNEZj`u-(\&H0WT-11I[J[B9 %RWstuYg*E%h[l%9aem)8,H<)!ohqQ0c=HUb^g]M&$ls'Og,Fk88f7bt97s:l_\A!&ociHs]Ia?WE.CkE5k::.`4B?S(Ja>4b*J@6 %dW>fr_:"S2&$<Z_FtYZKbF_`&;3O_47Q>S?hp7l;l18Ga!!&iqN:1lA\6&aCgK"ItEME/lNB#&J/<74VX[\EQ!ntUB0P4A^Tl>S@ %c<77OZ_a>n6.&KuOND1`!\t$'"U28)?7cR:]IJHY^88k,"5FL``:M<kpo<m!fHt3AeMjj63a;P,[AiWtn\s4IQu3Al-erMq-^kc) %6p8k1"HRRMJqYjtg05ue+dKP`Nhj*49pUG4i6^UW;n-l<:<\9L6>.o::IA_cnbJt-@aC+g)PW+J(fk>l^c^h?f=uS9gl1>]&YfcO %\Yq2(0%tBh$=:P;=CDqAq2MZmPL&HpEm`m#/EJB^<hkhM<M>9cS3e9J65?X*>!CqNh)LbblZ\/AWR;V.B,*&!4G?\fisPoo7C:eQ %=Uk31HbC,e#>JD;,tKW[BERMCpW1V9@a#h+`35`SX4>&Z)QeD@:n4hX[HX4/,%,QG;#q`Fg`r>d'^3g&QMP!SCVV%6[4Ff,+LXnO %X0k(7A5HrS9nT%_aE"#f7gr3EaO3qHl)[9&g%jCXBrH1C[Qd_S>,5;#loD&3XPh*-[aFN,8^['-<kBjl)2a4m&PG)0>V3sXT2jCQ %L)5kSZW1KcHB/shMRooX],;3Cks4PrcU$k'Whggp^;Io:!H1G[bQPNdLouW4T.YI`=&rPJ``U/YSM@)3`?fK8qVg[.6W(+=dQlp@ %TV*4U&%a5GMdL4e!qPu;f::Ys&!b5!^sn3mKT-LlGO'E;gVao.pqPRkX8d5mQ_-Hl#lq]<!mdWBLE2V9/IHH1cT8^S.%RFK`SW-Q %b=(G,`LD[j"d/7=nMaB`l`X1:`?gpY5<]QZ+'KA4#/N)+RT3=&#6AW*$h81t\W@E,0'HBqI'=N,Ak!e0.a[Q^6#!LM.@:>R]5dKT %-U9#E<>W')K@I;!%6H8%JZJW;H\sFX4(*gV$0Ocb^_A>!'%/aW\jO2cmq'lDb&5($Dr=?$Ap=2"95*:ePm`O45S6b\>AQ>j3#UMM %78oD??5FT^Q;+1Uf1h'Y\3_Ynb0R,I(H&Ll2t"LNO:!`]GK6"=Fg<imd/\B%lk?J-[oucpHFql5j/r*]j0]f'`uce>]c&qLETJ3n %R6hM(Ru8@Whf:ZY3\*DfFlIdlc%]+f4YHVec39Bne/32.Z&(3L%'Q.%PjMHi7F[nJmGhZ!$lrf'Zq`mC3[%/j-p,j&,f,IJ&kdAG %,&p,j"lZ[I3r\c>0XDFA)0F"]`T9hX"M*0#]O-reTFO#DG3jifm8bXF;Al=1qRR-#WDiB7!\NHKS*Xq;?^h=9(N+Q(Jga6uobHKb %dQVHCp6YQ,pR0TJf>;40<;*1!Y9/TQHi!A"aGAmA$[n)Q=t1Nub),V?n2sl#GA$^PDCj96g:4a8S^+Y6K?VGQ4]?XDh&@@Y8OZE\ %d;#I--g>-@&Ptic4GA_>8Y6-)F+c@qI@M4^aO0;5Mr8]Q1"U"_,PD+X2Y+[8eG4mP[7SW<"OImI%&kYOaCWf?lP)>LkX\Na'XC`I %,eQ.(2.Z[I,TFpAFeBIY%sqsS5g;-TmHF%/8m(/TPt&i3:k6[QC=RALo2nUhN*Fir?]#JY:lTT!5mqWm/.r84R^a3.3>B+]V84<, %$24cDDoi.G,jiFU(+mcD>!726YYihYMCNe18hlS^V!qlM>,iVK9eBFNTf<Np0akLBTTdd#@bZSf:i;Q:)>laN(lG+V-'64tLg@bI %/hS+NX`]m":8c.<K+.7o%S,5\n3j9,>1Ca&.+5X%=/CS@Pn8c91[:%3BQjjo8lmB8%QXs84/eU(+:b0AMMN'7\lIOK)RInFYH'&b %U^=SO_15F^4A>!iH8.T0pjlEJjpqcA/u-^JR2?1$;NILKiT.u9;p#iOYO#(Z6q\]W-fPql+VLI?9qd4oMcta\^k6Nu#CP'\NAr]E %O;/s,2Q3Wqk(jcfmljnmF:rnlSW++jQl@%WE(C(=65@N0Wk)!)0S]MQP&6KrZf]^"qW:RT7g0s5)SI%F?k,AL!Y?hgcrA@c`#D#: %frjL!U&R7)27OK>gr%:"72a`+hJ>r#<6NWAAH!e/.id*7mFmcNBJt!4LTe8n3<)hMMdk@4>9,9;"S$UTjAC3,qG9ZmTP]SHXcToR %f9)"kN>'W7?i`L&.BLu':o;KKon8UW\YtZ4!Ds5LRq#2oHHR"T6:__*KS1>WZjpB5*N(O5AkAcEPd(rCB8oE)I(?Zl>h/J.Jlai? %#T(r&MF+hT;79b7!Upi0BHnPWLgCH35sQG'`F"fr\IOR^6QF``\Nj=l"R0c`HUSClR-9tf9%)HBA)EY7$7[<h'Egj_fENes<cF_; %J0E4[#W5@`iXI"c"k%N&W"(988ZN7$Y+o;eNl0QYM*nU+jC%s>%X($_9&oio[3P%'qfH6/>S,@Zab[f)=0+b6$dmtXBghVJWsSU1 %U.f'u63fk(!*V`1,h9,/*DlE$6Pk]EZqeLfB%C)XOJ=.T,G"J/>Yt\=E2mJYF18UYY*0<)%]l'.jsn9=UMfp%$a;R4TXc?Frlr/+ %6\mUQJB!F&T-Dmd:EB3C5S+"n(Z%MoT.W$VBM+Pa*LhBZfhUReZ?T(J!D*f#]BZt+],Gq$'8c-?D4oejfm"VQVehA99r51(Ep0Hs %+h,abO<*X`p/D51O0aQDgI-LDQ];^(co5&M?)PQLUjq#.-f^8#f9U@!i#,$JIdncPQV:;8kur$?Z:Qf8R2!K_S-HfZ.TLC=p!M?l %Xj7)+nCB!3MTOWo5R#ATEfk2F:;fcG][cCseMq^jKScSG\ho*1Ua<+9o(#ri.3.H>JdPf,#a96"a<./i)R[Pih6NiHPi[XM6\"cL %^u>nQmbag6HG"$Gm=Wn^").*m7>M5Q0aCZ33btDr/ij(EJIcNlFBgg[dV&._iXS_DmU8i+:j3O[SF!EbY,YeP0[,VDm+B^b9o/-a %La%Nm(h'h)>!tTL\cUAMeKf7)C]X!HQ65&U.suChW]WI7'k)lG12_I3`Mj0ZbRd]C2ga)?q$F,R1,**6iaFT!D5`;n91/tp;B99Y %WYnHj@+&\^Np:&#KD/0Bdq08GkQm>@);OMMRpNJ]"F=FDa,J/Aqh$iUakfg2[Qio7XOgj.EG`ohQDD;'DTo]Y>b9`6,*<@YSFSZ* %kb09O,:cfbH-mmtR7A,gOE,@:Wq(,oaR)DV[Rpi@(?*]IBiFu/<lnPK1-'d3^8V>CTj!&;.p6KuOLd>FZr'1aPWB02rli;4NNp;2 %T!V"6`h?LH%@*32XL`g_pjKQt_n3u5RJ)Ge#KTB\5"rR33s3ns`"g/k@0&N6;IZ7ZTL#Q=q'fpK.^'2DS>$DqXp<i':6]Xt8"+$U %a2kffR2^!cQKtN%XdDj6L\M4_&Wb;`l33kK'GS'^,(B[=2/[MTChC""WmNC=%U!51<Z1*HBab.UX1*?[@EGDWTC(7X/uTX4DM4Fs %=dUFD#c51+_Ua9BKBOl1rlqbjL;6!85Ouk=l/fGGhUGu6MojWLM?e8I<+GZHkrc?)GU5Fm/2^g,\>=keg+_l(NGm\0>3'TG:b"fP %#Hb53A3SQfNJ\DoiW@@W9T@2[FMroi.PIcJ^u0[,<&p/oJ-23K3)+*Tf^Ct&Kscf5.UMql7t>)l-7PK#QTFCLgGr8#0^,3C=a72K %@h*)4_InEf@Dj'@Cdk^sI'DNI#@s2UKW%^\%i@\+=Ht*W%>$Pm-bU&1d9jj:OgZ]?6K+`g[0(/*PeUf8?%-WM-Y7R29^%9C'?39T %5Y9KXJBjr;U\@W`NH158DC\G7c(ecpYJk_tV\QG@?4[trc:'Ne0t)-MJ]Np<"m&GGETO36,Vjsa<ScA;q$]%;Q+*UX0M>ls\,q-n %MCDL#>27#Fn.@U8O>FGhp]d\-.S#[g/=[uLV,8Bfg_c9PM-4\U9LBY6MM_tf&GGG$AR**5*8,d^lX0/$V5LqDOCsGci_i[e2,-48 %r5D)T0G<#j`Tle..:Om-f'mGk3eABsn8^2fi[i>!O?9YCH:?UI">Di%aGl.oUuX)3c>jRN@9;B;i+,TKVR0l=\u3QGF(eO+"rZkI %Z0F;Q]0oM2^P;63icMQTI+=M(%I+dV99ZP_`+)Ur]FjT^h()&/^Wk/W&/*A7AV35`OOt6MS&cPJ9!6,@%JLmIUG:ki:7ZZ'E/WD# %-ZN_0C$7bW.@qU1JnD#@A`k="Oqr-a$'ZRZMlGE5T3X\lO="hb()<'6Oh%iLm>+ZV^l=lHR%fSVl/!K3"6:is!ZL`I:7CM-+^CXe %%<4aHkVreMEl,)tZA#&@68q#S0iQq?%b1#+i?CkQMaqGZW/lfYq!@Qh^lt.p#(1HEi>HA3V'J09AKl%$]MPa]eUZGhJZK)nMNXTT %.0^bXS(18mNY/#1G"Y+1oW$dq2fe<G=N@KU0#%nm.1cs&&bS#BV:n9G\C`!A_td$k^oE@UB$`]-E,b,2[VsLDc<E,n&.Z)SKl[*< %UEbD_Qk1`/f']"69/Xu&QT:%%!Hj/g2rW\HSVe*_9ct.(j3*sl)/5#))0ec!-FH;X&Lg(X8RaX#MAH+n'GEnD>O*"/AS##sY0<[U %i"69aK#qeS"Xld_'P[c!@fi$WL>\'l1-7#FkS>BjKa#:d1a<-ug6WC<@9?OY:S`4MMN/&/@EV7\A%<GlX&[,1-4Jk_ojC]N$6p9e %-O";r&=]U8Jjn@I-bpa&^S[qaEX"fuh$n^-kZ1]ML,W'EGWfM'#eiPblEEk%6;,I)aS+ua^^311\>`>Z$OJ._ERC&ljeYhrKl(Y^ %ac#+(kYC%N/);j[?HP3"UfhQCcUu*8iIGMiWq+,F>!PIi;u/$XZT;P_0Y=$#`0'n4=M)G6XA`On&,e@)P1%E>?o$t%Zmr"(7ofiu %fYH+2@7e("nRsOD;oJSXL9H\E_;hGo9QDE7lRA3uE/FY4nKoX^LoaS7]WMui:6!B@BkLVhX-k98S.Vf;W^J3TPM_N\0?*<Fa(fg* %9821V]Q<AbXDjB1jj_\Qg,4iBfs1:9>0sU9=0?ot,#62hL`REbmN%R@<s],n9B0EgOu-e$dUKVK$MU4ue3aUj$segeQ.RfnE(N!? %%L#?(\7V;G;h7Sqp%+d(7XU"QI.<(SdEmhg6sZ#/c8aq:2YN,oO22>:pkY1gD0pc[A'8i14&ZAT3O)M)KOCY(K09le:t5q<10kSN %fimjTj\@Eh0QadlCI(0UXrQ:;*TIf3(^GKU]!%4M)R8s,JJ3NW_9ZN-eLg"Ade%Ej$h6O'S[UdOhbf6k]E'_+;L[teg'r6oKYdaT %/m?RLhn!YW=]'H5?M9N[B"g&B$cS[UpSHoaf--pSb\h-6kI;E^J3m>J27[]fg$Du'%d+D["CdP$`k07,eO!cGbDKDB)cG//bT?Gt %.XEaaDt8$#!"*ocQ.;#)-`<HT^pb$%_jQYD"GjS\;/F:</M/%ti&eY*CR>Pn@<)hF0PF"6-pHtg@r"OPqr#cDIDcUdcl?74V],lr %:+.o/_c56s93P;BN7\0F6l8u[Ggh4N$Q,$o1M0B0l\^`%!gK@>$ut<Hcj46OU(2#KDI+&<pj*&=#%8-5ndM`Mgs8$SDto6.(.)/G %Gaq0X/.o6AA446k'$jRdGgqWAQQ^rG7bXB(iaT$kBm]$&Q)?*CG*89t%$:Yp3,CU[&Y[=07o<kQj!(*R-"=r+$NLkpY&<Tc2*(Vf %>Xl_i&ogO*RUm)QLZA"0US;oBhH.h;(0!`^U/eJcCh:C-X;ZcQmfTDVbl4Z_7%&Q:$s9O@:[oA;_ph=iO#P5lNf_o!r\F5!#pD+5 %pl)iSi:AA1_;`U,;p%BDRGE6,KJ&;]W&]L2NP9pWFPL%/:;9+1nA,ZfLnkN`]%e14f0R#1N=CPFOrT6@$Y=F@'(-U_\]9X=j!LaO %'Lr1?>r5k[K(Lu!_ld$X'D_GUe@jWsY32@TA<U^her5EG=YOOSBG.@E4d7,1-JF1o;fW&iBWGVXiu?!dD;X(R2:BL,K:8!8$GN]d %'I*V'.=K%PTkhspffXu@Co>.Q_+O@pV*ea7b97Y12]mr\W6KU6ba#e!Fl:a3YC&GmWSaD)ZoU=h,L,B.;&LU+9]%t$`&-,Zj=P>` %RHjkl\"&f<ZOYB9kDgM^Vj9:boD\QQD%QsR5:X.+9)6Vg5d6)Y43+3=G[tHhEMl5+b^l2kf#]JRXsp=t',[L^6Z]IadV2D".u;,Y %W,HEU3TFMD'.9+U>S#CR()S"qY3aLQP**U%_M(<]nXGK/K&%n*YBI@p;"]#HrBZ=#-e6,ckT)U6[N/tk-o@FPiM2.<\/JRV;^,aX %S]j]*)25SgBO3PHcZG+_a=^Q@r`$%#Q)<-KL8Y0'e<gD)>u_GQ%,bnudTnPdpnG#9@H,Pc[^$aXXcN*'G=XKR3_3UhB68g*6hapS %m<K&k74kcg;PCs$),@20Tu='X5q6lLLP*Y(6mu'8Z;ZCkI4.fsS//dD0n<1081lg:&<oW-b,Ms5*q_Cgm^.S5kp2NeVP)G("f*gR %J_45HP-&]#'Osm[FY1H'<LaalF.8kJW'ec((mc/i[($k-_r>*EC0r"!:"j_[j%gqBAVsk6#5t4-Lf/T9pP_mE=W+_:O-1"PYNeR. %)W*ZnZp6g7>#;5d&\K09aA&+!78Y5:"1P0qn!t2?!gp!m]"$b9CSN-dQp08oFY9M=8XC7Wn0rf28^sbf;::hr<%agrfn)ZpaQBGq %n?_b$;E_C>;l>^_H@mZjG7e?3=).qG<RheNG;S8*1`AqmC@>jT@C=)_p0j2\.;YC*H9k5AD8Y4RDQXB_I96oi`7`&EHLQo0DPnG? %7eHt-,18?J6DQ!mVbge\?L8kA)dL)5nRrTog>!:V3j+a?dMUa4?OQ@Y4,T#'Ci%I>;4Uh/080tRL6-GjWbGH*pTuZ,Eb5$4p`__e %3Ia\-2cN6Tm+ASY^XMr/^pg*6cY=4;D#k%djUFT#^p,h3g7L6n4\cUE,%oC8.`5*ad9nDK3`s0[l];A?*'T9'o]R/,7k+hs<65[n %HF:*$BKDOp,n3UG]`j\dUj]S(3,Oe\kCC6%l\q*EW\16`Hq[-ib]`8n^rE%S/@k#J*[Hfc:NGR?j5A4fK>3cHc*9\e[%BNP$9&HQ %6(@s#YTFn9^?XFie@muTn\mIPs+,bQWFN)1X@@1M+Mp(]nR<L`-:f/[lF3E+o.^)]+pZf'eb^%C*N/l\4EO0Jn@T#t2&q$H6:&P4 %VRj@cPkNi54VU<"R8Z!7Zajf*K&?eK=*V,mg&s5B)L.ou`Xs=\Ve)pADL`1),4o?AAckA,EX2LBndNZ[,-jQT&0M]%9S2plG`\12 %7>TMB9SUD/Bo>O(8<Yj2']AT)nrnkR<L;bYnY^_0$1uiJ-R(I7$o8V\f+aMNj"RB$O4[a&!k)qmSK%f%P!3C1[8$EldR>U"(8XhC %J"`@uAqtH#pD>6q,aM\pnrSRaFE-D>@7"WD3<q=h?8.$Oe/qlY<a!%)^ZcN9Z:U^bb[T?s7ZfQ4F_GC3Pf>,f4dK<3^dKZe+JCG9 %F:H-bZlKB12\m^(SH+mX!*`GCD?<WAh#K#7/Sh1EbIK5`17ju>4;(*!YSR%+82VhJU0-ekk*XOud&>1f4N%N^d^97:;qGsmc&BFF %bus@/iU&+;?&,Ek44qZ<3lkjOET9NIJOjC+F/,a/ma/@C:2lfq<6Wg*pJhmZi3s`,MVJJ@('O^/8"=5%9Ro$S#F!-lPh)VYGb+M$ %im4Z$L]BWXWk"a=,\"-4:QC5[%bMJB+Br,J@70TpZSKsudPpcb"gMZ"7QhkH>+\uh^`^ZZL`Ft'NnbEcI]O\b4D%W77QEEdQ(`0a %JAm&ENB_spIHX622)dm3PWkW<`XBus=5@j$YSn!da*_J+jGPZ2e]?Yn'bJtsLJ-q%P_%ZQp2',"?:mLpEI+&fRK<paL.>*A0SVjZ %=@X)53bAp-caMiP=^=Cg"-.E^+O;-p2rmR6U%2.VF;uY\YmWl=!.9#R<?dc)L7o<5![>%E!UWjT-[^@M>9-)3120\C`6f/AgF1RF %I!GNGK&JZ2MAR.0@N4U2'DUHPR\_Go"!)K:#qJOb[<nFkjZ-2.(4/_.?KpJ%\/o:KC*[kUCtPh%+Io-/CO1dKLT7.Fs!nOX-=o%l %Gd2RiV&M@Nn#D.O\N$a$;<*uL!(P1^[8t,DT>2T66Vl0S+cXX170aA!pP?CL/0'snoY;rX5(frW7VYa3EX`.WN!@-1M6'/$SK"u? %$d/IV%\cXb3i'$i`A!&m=I6$WR6hh5,3gS<.,gue#k.G@&Cakg([oIpR0UrmnL@p'A._]rihV==,a097Ee2!2EAu"(&GWBpCilK+ %FC'-0nk^\K&Ea<)R4$NAB/(\k:40%K<=9,EXduH#e@P)_&\_qkN/h!b_g82h'VUE6-aSOVDS)?K?HIhUVUM#T!!&R]b,2G;P[R*= %Ih>eL)3(XXY8@Qk0*"S(FjkOJd7(;rONqhKF3cm6L-9$=W^?h[d5]k4T`;<r_r1\=LNFC<5<_EuW6J"E4/<Ym2D4$Lg<nAS9!<r+ %XQraG;Yo>1cY4@m9^S.T1jVR6g]YhHd^L4DOc:090edVqAQYS_nma_fBo$65L8@8f64M7&g=-:Qac2uHLOc5CAe&-MJU3h*j"B46 %?F;>OeQUSHn-?6X3])@L:g%n!2EY$8VplPZOdO0kM$dnR%O96@%P&oB)..7=Yc4(A)ad#e+Q-UnflCeYP9Y"'m/P2/<&LX+iMl&p %$J$/;/ne`CqHu,q^#agh:WlC'P!>DnRq3O@USmEZRcirb''*cLTk`1Mjs>6s8fc&Y1`0(<$qr%i+._@=p`l!IgKBc'cH+EjKZ['g %0UA8k,1+_sP4aie<S@h.201iFP@Ur)FMIrlX+\C?M(r"!co<F#NETgd)p`U>oQ$Jifl$A[4'8PnK[tt:@Y*=+D'p@sfQBc?`Bg#k %Z-fLp!+&`(6b08$!Zse<8#0sRB(RR>Uc1_HY,udACT,IG&i3%G9:_"%P6K$+Lp1Ed>(TdE:l6:!P=j@"!cLkE#j<7QZa'[Bi2j4j %:oWn5,T/T?30;IeD-]54S0#!O?B^2_`*GbO64HL,PPHbcCNL+kDfeN6P`8ObSIr5VD(l.a,3o$J3ane_5[VUUUU^"YCkLReVfC7- %PX7+1L8WHc6?"fQ%`>Aind2<5\U%2<X8$9"U\\EPTa"=nZ$C0pUCI&9o:MAJDF'`VX19IJ,GQk`0M'tg=R(gaNudkuB'K]+$!pZa %F.h=@f!`"5/U)Cbm1]\5RuVFgpp$ADpf]NH7muDd]2\2k[bMb!4H=AE'pZs)!@Y*R=(8R=at%dO&\^nPK,fHaT7_t-@8h=e]_L.t %"68)tG/kkb2m;8;iI,O<J600?%_`;2(_4Gqj?fpd_)l(H$U9q2V$.0('-4,o*jWiE%=>I*&)20WIPS'P5aj?%H0_Ia@I8S@'Y=u8 %F4O/,L$aR4kG""eq+KuA7WCIHJmO]#UKJKKBs&K0n)i3$H7BRpF"e`[*U2BY9rZRm2C"))kpNl2Wgu>l>Tr^7PsS"U]m.gLplc/I %beFY!!"e_G=\FQQ2^JTbDeARb]Sae'$A*r5K]@d!9hkBD!h(33_JWk>@^6Mt<7]4=.]'0##V1M+^8cWS*$<'d\k-*985E(gJ-]2L %SATnZW75CC1*c3W/Eebo]+V*iYIR-aOE^m<JqD4\%&]G:6#[2%:CaXflniMnbla_h[(uiK:e_.FSuSc((ZZ3VrfC#3VUOfU%FbQK %0W^&hK<D-q]'<m.#[JmK%F_;`RUls)*@+M$6AL_lDX#NP)dt$CN#Wq&Y43@&kU;V`Ho$2V:O#7bAu"3*eM4"A+br)!@r]b%LEIbl %LV5r\@L-Rs;Z-uO^&m\2eL_1q2%XH^MJW6fL1d#q,nJV#40\$TCs)04.!]6^#?A[8EkF@p$:YnPqcqHA2OlP=Hf:V7%pu?$\75S> %1%DY"*`5G9[o+C"`<s?rfrp\>S(F!r,G[Vm27^VXq,3K:T/Y2/MPWq&ZUm,r$GK!R<Do(0ehn0K/!Il[:r]MDTJbsRC\DM3Sd%d/ %Vg3>>"ZaFi!Wk,q.pR1TbR6\mD9+baWN_[a[#,Pkl#YjHad3)KiZr$l4L.]#nZ<BbG:9=#]%j,@;XM^7EN5b?p8fJH=!8Z!fso"" %<bDq7PK'Rabr2@Xg)XU@1/e=_3E(ub,Ys#_%)LPb87V+_=<Y!#;50g*MKAiJ.(qc\>p98;U$ONL,Be'eGQUB?!=,"e<%hB67-.jZ %%+6E9jAKV2K)#8_$`+kJ_4@stGN_F]=uR7B[rcZ0Z#F^aF]04lp=,J'Kf(g/Cqgr@%b)('$oYN%W6l<L+_X6&6?:)R-54W(V/Mfk %5!d^'!X*4n8$U6=5pqJ-.M]YeE?$9ufIg;j>Q$<G)MfFhCa=mC9B;Y,.<3#KBF$_=<,trXT90D?ab]<8QKBbikVAOWG+5b,4(i'r %1kGBnPZ]&S0ZuNtRS].EAga<EP-koo2$d<b/Z=Nc.'0b1[)trKk0i!.r1&Am`XMF)7X-J][RAGO[45/fN[%(bm"5SKW^7j#K;_X$ %3E54(1ENM6$!bRe(KKa@Xtjm.e6+%aALP&tFO6bFNe.VEXMm*QM!^QNEmc+CG+iNEMPTklIKa5DS5'7S*@r]G[q*cd;g)N"EO:>u %0Y29*HdJ,(W-`g=,M0f+J6c@tO8o\9do:=uF"(&hI(\O9G?1VP.s2,dKH?8U1D;NI`-7W3]0f/q$(d%E?#AX5.,.Sjl/T,nKUQ<4 %Rad3dRrSZemVAg`?uZX(nf5<.7ZQ$?'(Dim>ch=<6tKi`(^2=ibfN=,gXI3A13j)`)/9W[E,5Nj/jH[:$l9d[9c%B45"'.@efduS %m7\Of!`pQ4C`*O9#Q0*.k"nOBU4N`eiE[CrC>oN,8^o"J8o7IkCA)>Kn]2Q__+SG[`9Sa66W\oC'K$)rS]LjY<5%!UK9q-dmQ"ZJ %)**NZ'8lrPR"iFNBP6lRODh6SVN=%FmS;^Q9rW4>bXN%eg7O"WYd1/=8^b1rWbi&Kmu5DTa$$O'UDPMF&#73Weh%QP\5Xh,jD<'K %,N*ec=RAuPE*6bT604AS"LkM,m6:2j!0G'nqO1qp;-D6%kQh`fS=ig1mR;1H@3ndGk&+9uXWuf?Wg:&+LLLOf;$k!@_S/9pOCq+) %1&t/;E&<aBQj;o7A2$[+8;eR_,8T0p:#f]Q@T#e4N1c'Z`H>bpE-V!!1?>ME.#c`I%??$@UN4)KCSrT;/]%+X\Tg&0H\?V/l97;[ %o5l7EcuhGA&1.ecWY6efa"Rsr]WAKdMmNUGW_2(I.gK"8D%^VI1.JJXf+f8GTH2<&.'.jebA-k)jf^h?K0a:2=?Fs1Gid#.2;uEf %&<qa4AhNE'Z"EId6u0-X`3=T>WfUb(#S7X)g;qBg-7YTV?bk=4(a8?.&ma=Ef>+3#VN(p60P(<Y[i:ioRIq?&0o?!-j_o.U-ZV2< %CL@$6@*tg8/'D9Rn'U>I&sT6`?`,*<`>J6;*+`;ZOLmEjYs#>TS/7>Q2fpdRK!X\nC6^k4?]NV,AG?P"d@jhf('=P[[WTNC@H(2G %oV1kk$2u`mJ"K4cBjB20O@I'=Zl,";19%[$8uApsWo-9j*F&%K.jGB>J_.4%;[7DDh'A@;@6nW23'!JBD-aFu&7_"W>N=N,;Ym5I %G6$Gs'FV4hI8Ff;Sl`QZl3IkE#cdr03g+bs.Fr/:c"ccC6U8huMQjp!3:%(;\`k50kY"/h\9WGJ-8-J(WeZ>M/dk%I.P6q9AMrs$ %<,!eEj42<536/2hP0-6cJR@6SS]S4e``H0]fE(S0(4+'Nk.Z.iC2E\-Cfen^D&s19@B4:GaV.15N9*ulKtAd-D&`Y>jt#F@9H=.W %O*[aPReWbG#a!p"dZeRaNcH:(X[EAE27`jL(eB=d"XO\S=4&*d.?*f\@d#</V8,T-jop]f&Mf];YNeqj67cJ[!,N^u\.4qF*E!lR %#9[N(LG[=N&Pe;/!kMqT)n"$;$3XJ&V(LGV67bSkLQ[`jj6D$4PLmku?-C';'Ra]-LP43Pjt[*=S?B`3fe1"jVQ7=(=q9=be:D7> %FD"e_e2j<AQ<@u%0!\h3n['Gn4GHE7Yu7TID0.c3)q\\qHo#4N`BeW9:T7Cn2$\`QfIG%\\<Y%Hj1%_ii`5E.<+qF5,]-M5>Ii20 %-nuMNaVqPE"MbYk0c=O_iq9hFe=)8k5kMbsRfdGX]33)UW`;WX%sP*B7$"j1lKC^Xb0;IS.RDU?5;g!M_S`o0*%!+5.H$rWP&QX6 %+4p/#O#Ei8S2r]/DLD=p6u%AgJ/?kAS*cH!BH"c:&sLk=4_iL07b=cI=^u-oX\5dnm$(FSJOcsi/bRQS_K?ubMI?J'+^qYmra$<? %8FS#<qI`#Bj4Hj5+l?VG&K?:NV!;>h;&NH#7l3%!l`P)hbsP!7Wm#6BX!Qb_<Z))QRZ`pq.$LU.OaeV)a:5mbdVF;*@Kq/iKaJ=d %Q?fZfgjKCTJ/VF'Qi*.%B$[>1ZOYFC$C;J!r+5l]4mR&-<]J!1-KD5g(q35-aAOMuL1oT4:@i7DdM(8Rbu$IE<`t$0`7X^%6c-2W %Ng>I4&X,6&3CAWdRNKj)R;lXp/6*$oVE%*3g(W\$%:8^P/!m)lG0\$F4'R<c+*a`lF(O4lcjF3ej]\-,O],::CuTkU=/pI%g7%VX %VEVfd_a3Uoq/T3jHA9foA-gu<ZrALW4&9ED_2d4lXT-d@U!@(],0%ubktJLuEmNRc'Q.`%mfnpr+%%G'Pai99@+G/(FGMn%X@;o@ %9kFHG:D4>J6gBbR7%UjU3Y=@#]XTZ`UgcZO'969%o*)lDJP:+;V>7>^<^;X<U,n#ool:.m!>iRQ1X\,\5`Mr)qsQ[ANnEh8I;\Ng %=6GQHmH,#!fe)TdW0o_.9_;ZXf:)B8V_p!@dtAtud[]Ij>f<SA&@K;tm(1"K@7TKNS0B'rI3LqVb!dbHcref/K?A0H5=FmG.3.<1 %g\3.o+RG9h6+b7`!b&!K":QM#0;:r)7S&5Tk5m]O*0BONLp7[M^l>>ZS[<O?453'd]NO'qA+LD$JrK#'9)$;f<RcTX>)'P?(tK`i %[FB8D#NFgAaeNR'L.K%f+H7S9q=3(q%ePQMRGl1,d6*f4-ngW0S&H/e0*s=Og2Lmss%+cM38<WQ+oJ1P@'6[Ijbp!,kH,]u^tS:A %Xq_]X)9R<dSHlrR(+"mpdKdp%\?k'h1]9^<p1&PIj8]V-3j!kkXQ]]p;b+jf!-N+eb1;l/!$Y@f<NIAg=#dMC24$7$7=C;bDpQlA %nSP@sWr2kg$]&E0lMd5?fm>J<m>800cBsfqb0[7cpE/c$F3N3KnP^XuS&R'HbuB]/,4Uq;HT=?uDf(6@Ms3_\\L4kb///4SM7N^L %'L)_AU)H!"k/K9FCXJhP<Yk/r)?qr\U4C)cC5cpPKNZVAk(qX]O<(`8\SO2PEb&A0-6,>W&sXl)i,KE4'?C#YZ)pcFm-fP4i^S]R %$<KG3Yn8h]8]CW;k$;'L:^($l)`;Nij<,OV@ulFZ,/gRZM)=O<#A\DUO/(iRS2XDpEB2m;bLKc766W;i%R4e@BL5F<g1hn[&<hQC %%jj%a'YU7a6d=Q;`$;)6K$m4s)mclGd=\?*U0j!9AC+Se<r[.6.S%`0qrD0nTsQmQMKF`5Ki*_:LM!_<@F`9GA2C#q"=orVXlqF= %38;Ug8)s0mEMJgB$c$]a)4;:k&^:L,XJ26.RF)AO=fndBX2DUgn@5Fc-I*?==#a?$GqZ?pG76_%3A):NNc^R:=JXp"Bq1VQI%%`2 %egKGe,U,g1=GC`plUa<O#!W;5`&?r=$DSE^#Po9C'bn1j&?<uD]:O_PLSMrp!nqk!DIC(I>T5;sZhNmg<t(X"n'eG2;*LCWR>f8Q %7U9R+%t[ts</'S$=#)56)E5Ys>K*X;9MlGbd8CD/D@IBD`^H\@b8H8I1jM.WHFn"8nht#1EahdYoN$rG.JPrR(-9AbDaAJ]NV@Yn %[BGnQQD+RuKP.W2(UjCJ_.\e#eioubp,4tc&=7)83?F-+"NDr_Um+0d`#uMHOM@3N%&ckGHQ=GJkmZBi/"5?nV>4#S5*TJp';Hgq %GhKX`U6(^&1iVQR/0hPQ<tD(p"K=kZVB26D>h(Ec7>+,9eMl`W&d$S(0V"<XQ%H2n)l5a.Qm*(N&Or=7;5O]b:r#K@..q3A[_c"M %P2H_a`[&B5W^d2W[d0o51dTK^q3<=H`[oE#;:%_qm1tI"?CjnZjutsS,lnUg,7[rA)p\gVkRi+%jl-&L?XI36&)CK5)u,+RKR68u %1"a_-)]d%NLa*8Q*?%9:$UtTj&DS"CB\D=L;+lFaLn[7UH=X[8YN\8)&OG3/rE98(gfP13Ob:)r3eGin;MPftE8*j?Y$Yn4ru-#/ %dr2'LN%_$EBa'*KM@;LS"1/9Q$UC]>-fbp,:b$S58@pW=5),_S"b`%.n+^s\(q5>P]]J82!ZQsVTp5:69'CTI3d`baF032d0e%qt %7d/XS8J^BBPj'7[E!/(]hZgVqC!9KO9d+,6F"A#VW2fC/AJ\joWD;N;Jjl/%'qm6toGG')$>bfo%dnqS/PT`WC2^@,?BrI/2p)<P %_c6A\@+td16o%Oe_<"YJKCl"9L:0)Z4EN<>DUjG/I%`SU.133j=@H_"<%,+YBS_12j>[`B'>i9]Xe7Qa/lHg&eela^r4?4&ga4F[ %=/*W<NBhf4s,uL,O@[s9-?mqbG#Au0SqY`c1=<a:2+9M`kCaYb-?Y<[VC/7-Wg`QO+MKqG@'g]<$Faf$Yj0@ilI*b4.pEhWk"\rS %jhuJAKB.bJP/nn<@3ckKeS8a;?d+tta`O#IYRAPLB8/BKh9*>r.jYr?mBrXP8<7iQT!XBiJ16kH"><LS0>\-dL8ED1BMgIf86&V[ %/3Q'([+%[W4<[PTQD/+oo[B$H>iqn`M#<B9gWfBLEe8`+L)TNUO'aF.8sSrqGrSFH;,iX2)e[.Rdd5_JVAN$eK!2"?'h'V^7srol %NNoTN?8WY?&s_:?A?C]$2WOq<Ocg+D&.VmP;7/R/!mGu:=Wh:FMeN!J3d+GrC3*bdkXOONmBNA`+IZ+S'/W+^n#'A@?Uu3;aZthp %W)9>T(f=cGJ&2o!gUt#'lD@7E@b&n>IXRESC-gZq<:5K739B"ob>;\8\;_KG51"59?87q;Un4Y*C,50=%oK4XN.RckOuT>+o.Y5& %Q-*3Y<=.VV#_$%NN@J9f=,%L`!;U+,%PS1eKllrYAqF:MU`D`-A8*t:Em9b@gV'kD:m]1i+bP;X;PV<W=7sUk74QD/jru3l8sE2n %!(n1[da#@X=O@Cf.c%3@C=)BU;jc^fB+B,>bQ7;k@b!5IKum5Z:j<9n^INt[U7"nY@M5;,a)RHHQ'g\`ZiN;*>326q<9S&8d8TQc %F_LSs@bfe"[;0*.JcT&V5^LNYVd7]EfZb-lgd)]LCgLTYF%lm`J9h>R3ntPR)Y7V^6PKpj84T432M[Y=k?mXP6Yu_oeo;K>=\jP< %:TDn4N#1h;fBTKU#7O^e2KDj]K'Al,5']BWY#'o7X]U<@ch`nqp(29?oID2V:8/gUet!1NX]B=\eAXDp\<)1i\Ja8QK%4Ch:Ir(8 %?q;F(3YirqXG8a3.E9oSb/tcGCKd8uQE)(J4MthC3:6H0P<F2J"g9eL#0Jkh[M/X_"A,+Md^]sN5P]q9?e-e_bK2"X6Q^L`<&EX6 %,t_baYbtGe9:G[s\',>1f)q!rSr'gRCDcrI.UY9,TT'k>Bai53C2.g;*CDZJDK:\.j'?EsP'74!;Y%bYAuKuT,Mk;%Yen<'kU=6; %!Am3!N1r.dM9g7G'qk0ba/;Bc=&B3<o4&Ab#plcl>+o6`cobb^.%lHh<>pN/X?.]aKL<uck7*;@<PbTp8-9Q"AcnJorOg7-K%?T) %.<S?0abS;+i#I^&*%,/.ZC%5cRZ<HLVN!2I(PEQD;$<,4H,T,;,YcnqT8FCoLE\7\HrISUp`A4!0a>nDE20[GW/JKOK7T==35&Mo %a`eFN\r,65@QRIa8:mG_2Gr@/8>]UH`l>M>12%nIT"0HGkfRO1R3Uam9!B=K7Pa6?DTs6AllI1i#2D^#SgWY9F_jdA`Ml<J)q(_2 %8s(#Fkisqgmc]T.)Jb'f<.]R9Zg5XT4\h[oO!BXQr#qu+>`li4<#'*a,S_M_GZb%YB]7GLR)n1rB;S8:>#7_Z-toX--:gY+9*1l_ %[PlUA%otiqi0tFAac9%k@'cM-[DbE!n6B8#i??Vsd_]r!N!*b>gSi'EfJGPB6?^rAG,ch?L(^L%+SW]EfqO=o(S_u2_D>?SqY;/: %XZ8f5)hCY9a@ghW#rr3BaMfuie!9?Cg)X];mA&sJEZ>lFFNGC^K!;Cc*uX7BX'N1Zrq4S/*(=JC=O=E53suCO^U]jRP"aXmRG_!8 %7B.W[2!e1#guXj8HL72_H-3/XNHG-OfP9<53gt0oj0S936S[Jq2X5/rQh28N;Taf!'iX?+6>ja*d"(ubkSjB?eE?4AllO.P904Tj %RJ3UV\t.@l%=kkUAg^!.I;g&^LDV>t811tX#6ngaFXJ)8U9m=mKmhn,_*Li\nCW#u*/E>#NL:n5fWhk*F3m68D"CE=YJuR1bssu> %LRZt^e3)cO0\=#hnS;33eZf0KEI-A\k_1oSgLYZFS]Nq_";lhKFU4<eDqJJ>apE`X%tm,fUM6Bl44;@"bLK&0d7b#dM!njmaNW'< %^%XLSZkZP?r8Y;sB#0VK2&K7^`.8h>`i]Z]&G,"/UG3AOG\X=4gVc/g7;)(7gl8Tup#2/F.YZP<W'FP6:,]p9pt#iG8..44n]I!\ %Y]VG(,11=?kj%qZf08cm<q"l.?V`oHlBCtQEqeX[=.M<sp%8RYaZK4\B:V#-nC08>o'YH(<I9e>lIlo<*PCNlUQ7N\E:9gMNd^Z< %H`V\h4feUarr7[r?i;)GXZu:<acjcJ54O/=:EI:A`3K2FFnPQk]_^jba0)"_D\o=V0=gP.bKdkOmpT9<f7-#4m.)Z&BZmC<??u>] %-P)euo'"W]ID?jcA+cH%+*HMqeUK_iocO!ZT)[]%7h:9*DIlF3j+Z*gqTiLHO,'q8*d'.W4QkYA%rhh-UB,i%J6;/5'fiU^;=#;_ %V#1<dF*&k:36`U!DQfdB_?+jdS#9V+q-Q4AZ,n*J^Q[e(e]H!A'=9]#l-)!Xq"9"^S+jU;i($gHpLE3oB*<%.r7PP&.Oqa6eG(mA %i%0kmQj"5s#Bik]5>\>0`K(CO)\sZZ+6,Q9LMi7ngt@/.1q0Tfo@--,-(e[chgP"do1r\@jb_.kSpL2$)8!N4mesq$-]c\oV\SA* %T(0nPX8d_QX(/CV4EL1&DIpF#Hk]kOLj;X\TE!cR\[IpNRVRS1eOCj^`ba#3bB&`MDp?$3[@ZY"UJ?fY!ubQ^k1q2R?p[=oNE]DH %*fC)ZHj=i(o5D[^VGT:E_<ull&$o'un.huOGj9oWS2e*(m';81?[_RP/!$h+#4K9Qq?H&rq<+(d+>K=MV9f0f#lhbcWn/A.O2H;L %*k#7`LCYKZB+MTCs.Bhd>2G6>06$Sko_L3'J"IK=\a>I+R)$^s3jNHN8&?9&eMVPq7:)`UHJ,6]^"aIOfEX8@FnCXX3@K8:_+%#) %hdnJoTs,tA8^cl4h;:n^Po>!LIiac"K_^FCnu"NOm\m)6A3"F>7.j23]g?HJ7U8V<jcSq9Ff:0#jfse`3nC*lPpjO_h3tF)%%SC` %+=H3/]nJ^'1-#hEA>;;E9qARM28E<EfAWhX$pdu0C$[`EX-SHUI=;e9H0`:_1Cq&)3/>q\ofJ[&SZ(edkR=r"?:1Zk&^>mt.?TGm %&LAe[auk@J99FK&XqqV)%H[#XDCHY%7m=R5[0.$,%@\cb8/YQ&OAg6\s!\E3[#ot[(r@[:allRf##SBDBQYQ@<XmqYKZ,+CBo&KQ %F&qXon1\G`N3Ml82"kG\(V3+q&5i3gOuZp9@NcjGWj0Z7]<`\@WA-dV18h;)(t)N?RYe_`"r29XobD*fN%Z`5bd+9UK/@l`BN1Zu %P"%(Y&e?[U"9J$O9<gu/O<gRXfCW@V"+g5;Kr:Hri&&,F!a\Mh^(%eQWi:UJ02cEciY)ItEj',=/X?Li%O49b<aaF-3G6;A@4ioi %<gcuW!Vh^H2B3tjU=?<ODH/JY#CUYm4V?."65A`4.\?8IMA<g+*MSudLa"F,rF;QQV-p2<m'Lur[jBCI0?tGA`G!AlOX#Os8JGJc %l@9:+H_j;h8B&Zi&oZOS\DU(u>5L].89\"Z:Gkk;TV]U]nZ(=1A:72!T?Ua7\/"'#kq;h`]+F>Jg-#hGREWrE7DrDlB@5nH5\Wq7 %d`N(%Brr'aPLMFn4+mYCdM/TnY],`RhjX$NSIXIkUMk*@nNOUIe]n)p>u#MQae5\+DldGdq``5PIQ`a-'Z0HIN"eA0F$U%oiB016 %@UDja\YXl^2icM+'`Ca=NC$mIH,BpG[\P=IWp=t.$-!MVLpG)\Eflr8S!#ZrQemX0,r`-sJKY:Ai:K_e=AFg^BPUf48L[Z#CUH4P %08d[h[Bo5&R/^[GNk&"N_kXJ3in@6e#IpO56<"@<2CXbe9hHGDNF=A3rcO-7^K+fT*>dE96;K$h&Jd;kW%Is&=RLk%KL^1CSQbFG %B_,YokABaUclqI2neZ;sZ_++n_\Wum*k+FEi$E6NkG%diH%KVAB0;#%Bq`f7<^]K)q.iu>?bVSq-f`5$UFk1@>V^jpQ[N(B'm(S0 %/P?A,>`88EQ7m,bA8tl.ZA+i\@M^Q/.8jmMD,BM.l^-*Y`4l$73jA^gJ"^sLD19\See@r7Qf"(XA)8FYlW%0Ageh0K][Z'B6Z+K6 %--\LdiQ[;8ZENZilZq9im4QEHao\lbp>QQ^frCM7e#qMl:MkN@V[J7-QKJ:Bmhc?pT,_)rd6#XA@GZq4ST--)#SKLgH^nFGe.6iJ %Bh&t][4KWn_qr_;kl-X,I\#&>]c;7-MmDI*?b>KW?Z2@g`j7r01e=]r(a`q?&WLK]er%I9r=piLMS\>T7Oi2nULWn'q>^`;0<HXW %LUFRp\@V5^/PIr18Abk*%64b)HJb$#T;:WI_EK5B(oa`F1FAM'K7R$dkt)ACLriC].Rcq*:issXV'r>,H;"MsM]gWa1mKNPl-gEc %RQR!uHk+A>nmk@P97reJ(o_@V1[eHN)OV[,".`)*r6fGTUeF0oAb%Rs^$2LL*>0!Z=4$_]>q!H7Fa@h`%fI``[WIF@1^D>6%MYa^ %P]C=!DKRT!BlM?!#R=H);MQ%nAb;cao=U_jjS:n':pm!sAqE%!BFNHOTLSQiFb0_d6W39>$Q7f7Y@-3mo3M6`/qBimY?b[Z-_Hd* %&<l#DTP<MTb79#kesPs!:7aJpjQ3u;a7hT(&nf'F$itB\.Se(ieJN$Fgg1WI[1$d&kbgm\K4eKeVRq=IalX`qZ:VmL*8k>V>(F#J %#^sdC&O'WP`U9(4QHnb3D)3Y/gP548:,*aJMGsh%7!k:d12VjWd<;<gj:OtX7Z@p_aJjASN3(!rW'_,$;`'DU6kN@cia0i%R6Xt7 %7EIURki+@p7ZA"B3^hl(&OhaZUlLl_,'=gSj$9_>@)S6'+#eM-7SM2rks,ed@uJdfn8!kIY5NA`T=1U*f#KC0R4ri8dnml`o0nS5 %F-lVao*`g,bbJEd4H:sjD=aOGP"M5cSNc0u%`e*+P*k(Kf9aEk)FNFo-f^nkQ:3Q"gfQu*KCgk$A>ClQPYOt(PO^^dp#S4]YA#2h %+02!K$,J5!ro@JFdIB(+Kk^8P6Ip(9\7.`5Wh8M5di;^N,L5>^MY5G2R949Wi-b,P8ZZec"Oj>f-Gs(kJ4`)0d`\rJH&uhHgFdV] %j9i1L%fm_cB3Euoj0C%MgSO>ajL=<krX@3G/pqMoI@kfY_qHP*\a9^R.;+N]30e"pV[oI*I(&'1%P[%r+&3$4NC=LDW:?rsq@`Ef %>opPX$SlR9<N=dFf)^!-b^hFbU'Qo]7to'tM;7_cK\)]$5`-W\Wq0O#rMR)VLZg1NDbmfod#YCHXtg&3L5<i+]['!idbnKMqG<B/ %LCJ#'%-skcB`PPa"?VKf:qNYUqqf2G@dUM[-Tb!r0%QIHE`t?G=;]H\?e(D$kbTfY&8M!F1n^G"Ag4ObGXS;FPUtTIflC\R&s+.S %h.EV:Com'BXCZ\.hPVOH#c7k\\:Vt1-=F$O%u5.!A_K#eGJTemlb?bc)`Pc:3M+L-J.BWZT!uor$Z9eP=jWB(Rnmqf1PXJd^6'Wu %`*11m,t+&a(aKK*rt$qnd4kNnaVQ:$7[\W@fd7$VY!i*P_\@Np=NUG(Aoi33)W-sn7Pnp;eiS#MWn(./+k5m'0emTgEpB:I!GiY! %*2O`LR!G!!%Y]'koS7k5XGSGVbf(&<W!4*d2YlM>b%`JP,`OZM*PiKk4C].9Tebc`5DNp"<+T2*\FF>\OqdpYWDXWj/W<ecej!)2 %WCq(MZf0%.#_plA/2>*$B;`$MUL"5!es5/.'[2[]?o!#+Ou$j!4aP'f+Ljr6MXNlglnj+/9mum0/\g(R9F7?5*=PY"$at&1](Zu+ %PF3/D,c5>&_9^FNfNjjS'S:tm\/n9'7On&%6](C1K;n7C%@HG#\4VXfjY"L-iEmrThKqm%N<,$hDQK+_)!lp2OcBQN<Yh0G1\ndA %Z$AllN=qlZ4sJVrf'bZBl*6a'"f+dqHQ!/sD`g)a],+7(RM>4">Sn7rG9J.(`VW,DI^(X>akp2jM#/i+?'rX>onde-g0+u`2EUk\ %T2FcuR(fF?oHDCrce(#9YET$Y)38G0VEJ$ekq3Oa,euYRfIIlI+JFE/-Q5EF[UJ(22T3]q#A"iF=X3%;^:d[$E8D!NTqnr1:3oIS %:"IaWduHQ=RFB_MEh@+drCE/Ja21BH:'\j2^oe\:,@*AO:*Zr(*Fg<%]QWMD+DK#B6K3U%2E`7X/'fPDO#VF`XBc-0]4m'PKanK[ %L""^<_`Sh.?q^SnF-,&#cr6<%fQSC&qd*T)ZfI=01ihks2U][^:H$YBePA*OaR$+`8-9)Nfgl3"0\Ju!?a+.M%Q)%5issk]A.9'2 %_j]sT+;'g64hq_p9g53c9*9Y$1+$dd+?5*[0]4!f5/[GV9Wli0OUN=I5YflMZ2mdigp[;qR2im@Hs(Lu#>A`M+pXcQE]47$B$E=V %@%GE)*O)-WkoCn>2&CO'L*h\%J;Yc+HU*_E*;'>;Rb[ajE#S`UJ4$FB$O1ch6l$!JC'm378CgtS@K<p8i5U:n9js+a$sO+.$lIY3 %@MsDH$cNNjg03-@6F)Rnc\-Q_iLgK#[gX<PGe+K%RZM_<-tOg?AH6L4oSm81K`)iuYmDkhi96b?KbeXV7O;BM3qW67d1';p)\Ug2 %463sk(Z^tDhSt9$n;JF'hMQ]NW\&Ljc%;'VD&P21J[iJTeLG2eB7YK<`sQ9$Af7'[/F\kNV)fYKGj^`*2`E+o4(c5crZiJud4sIg %1@fW<kg0JYeBT%2Nn"nWd6KRYht+]9$F,8idM`rY<*P_Y_q/\N:"Nt(07]X?r2`1NQP2BbR(ek-1SM2!e+?YnPToS<^=;S9J7V&^ %(AW&#r'/:.ndZ3GIu1HF)PIk(i2^\p#kG/B6Xp:11ad5!^E`rQG]?r#JN#^4],[cLaGk=p0o*3F#5Dm;P)_FnTKK>-7g0D\eIpnO %^U5i1jGOI%&>aREXc?XZ>AgqO?rb"0SB6[;&8:At0NTckiu>,A#n`U%hLT[T(m0TGN[GBtf*'m/Z8GN:W@Z=RTq.n<R&NNTK=go* %&Gp9/>bai)d2`?']iON1js"s0i7:KD?g[.X7$*#;5*XmA%"g*)8H8f&(k_lYEeqO7]Q6W4h+U!c$jj*`\V=Le&Wj>P;oaV\f34b' %"Kgf\kU([8?#C7fjf2GslX$($4A!sT.s`RZO,QXgQZPE'ZU^c\.?`nG`>5lT0A#>&-CZqBD-SmMB$bD!Wjo@aZ"IM<K"FR8H7qUX %g%/UbgR-&Eb:'I=RasCf'lp@V(>DNSA5BWPHDNCiY;S.IeRTYX\'gO+'uk7YCI>=GXEj^]!?AqF82gR'ok6&HU$&j=NHpBqHjuPA %BA20)lMtgn:-f+D7#;Hm`8D*Y.oZn@>Np"uA6-F+![Oj>10^Gs1C+Z++n@nM!6,<T4Ju%;Si"/rV1dP`Oa37gi!JmAM.roAB*\c? %^*u)W`@.pLjKPF//#,oWPelFj[]%j=QjeADq30[O?F^PQ%ProE'kVbJ27]1Ck\?7jgcCF?NpN>fd"W`86O;MYW&IX2S51I6k;J#i %:iVK\H@KWe<U0dQWO[OO6b'!#k>=qZ]`eDR=LEU80sDFV+G3:j+f_8eXO)*<(=N]6)bE<@&Ys8C=u.[iU?WZDX8pT^8-.30A]VRl %DbO9a!44'U0R3X#\>iZU)FcX2(g/R)(W\e<^6g&?RR*5UZ^>C87)'3H@1$lQ=5-]h]Red>TSm!76r6K_JR0l`!a!`'4@BOT,o9T? %_,$dn4XL$1:U)7o+i]R/U_+#Gk)I)l@iFqQ&`?uf@b#m80i1_b$b<(\ODrQYo*27C=,Y`_5bFE%fYfZh&f%"8](S[q)Bk#o^HRX& %MG*a-C6@jca1uBCP+l-#5eLt(26!S2>cLLc0T1WZYgTiV!RO;I..ITJgVr&T0$:=re;NG#0op%3S@!#(XUdT58c)KR$u'74db5bZ %jD6DVa-k:7EN6;m<[YD^NNM.F7g<ge3NOIse8,Y1`biG[`B6Sh=YI@qZe4`<Fb"K9#6Z9ZHH.AhW]$lS<,[]DT2M92>L?*)2?\3t %%[br_V`7G2jZNT3(I;Ec-[t6<C!:Y*,UlLF4hJ\`#A9kr*d=C%Y'csV9RZ"rkV&>+@*1L1V*-:43VhrjC_VFA:8\G?p3_*X7oJ'^ %ER`GK%?3%K2CC9+Z9SU]D5\Ujh()Hc?uV7Mk[B1]1o!,h;MrGo[(OdK6rEUUC`kLQ+K_&?LD44u)@b0RAW/oY>'Cq7R&@I4:JQgj %/)$/h"H+6X2W%mEMK?)EAV^]jh=)PUb@_%UTP_eekrqHV;$WYG":fqM4)FP@!S1kfS75DRT/niVf"ppAl2i7sC]FXaOD<kr<-$)3 %#0_b48LOs7,#+@>MA(CpoT'5!K^X&L8+nQeBu/nE6_oAY4;ufu1=*6l`!HA,OF1B:'8:>TD"se/NfL:/,`GM#AJ0X,GGc%Y`s;j` %*^uS2?ie]FW1`(>TdU@19D4,M`EI;a(rCBcfB+e`EXD*&FKGiV(=fgI/':tuN2lbgZW*?"]#F#J5asRu*755PW.W)?lp5dSL\9sG %MP*3*"1(AlCs<ndXA*4cb;JYMQmIr_o2*_T%$`$V2^LT'gl2kG>/L!%6<cH/+H7[4%9=]`FBjQ4!N7]ImYYPeLhR;[I##?jNt;e= %S]5]1:bU6Fi0YaRCqA$\0X`]NbchT@DN3')81(Q]2u33e&D]4.Olq:5c-Qa&5iU@TS^AVMRl-;/o1E[[_.hM532WnC;@Qu/&Sd#d %.^0]IhJR.s;dak;(<[>[>?/NC6"b(O.V:!SBt9NEnl$t6aE2V6_!NIrFq($YR,&Y$]9qOMfh5XZDe&S@J@O>V]2N$$joeg`Y*YM^ %>\g>@$e3,eW!721!k5cADW<$RZ)s@r.n]qSg[pft*cEWg'&-O_&6DDtFCVE5e_)Xl`\g*DP9\B5%Vp]g<3Sfi?W.U+I(;!kE5el# %SFdk!qpA.5-B#"<FW/F`.Qpk^H@mrm&thBPh$rhHRR+9@-gE9]'!BQ=>9iIp/K.N9Jg-EDk[O;>">4JmSSuBRYM)s9D;)MOVQlY$ %b[$E`9HHC[(jsanG7@JmWMt=H6AU"#Gti"UQ"tJ%DCLn0%,L<(Q?OD0$Qu4<,;A#.P,r]01YHhU:1J!9JF1bm'PEdIX0Z/5-n5We %Z4`lYMF3pgce1"u4\_,NSP)O)/!'-;QJ--^W&&<6Y=ia6G>W@m=(,rV,/e6kn)ZsGRYOG*&+d$7@L-d%KPP&2B_"8"S#$+AqslmL %A4:bLZS8HLU/MC`RVfN;+UWTLF5\FuUIcW]/UD>&GeKc$ml)T!eWg/9@bCJh7prDdCN)[>!WY8pSs8ViVkE0Dl:?ZN#t)M3;Yk22 %CkVd0,*eW"(hCK@o2iE:Hu.)<l$:>#'b6JWjEKpX5X6P?,%G9#.kD"R3]>!`U7F7Y0L>k=.-Cp(K^q;Nh"MWe7?01(23);`Kka2q %:(c\p:p5o_b5*CGq4X<Xn6BfY%<8bq^o\YseXgd,+=62;:;F;MnfGfkH3KCue<gJ"+XI5Ti-8VIlZR[B&kSPsmWL=I3?eoiM"OmX %`iW\u_mjPL_sIu*@mNeZ:B=6[&3>!+Gm9U?9=XB#i0\I5$q:cXe]e]+S%s7Fc-bP$==5?[Y!V'ZV@_N85/cRBUDoHe5;1Q,6LkC. %@UUVec(-_HWi;m?or#+Dk%&oAYqN4Pf=)0^.sQ+VRqZV1dJtdUOsmIY6^DFIJM:b+_.ad4LC=pe]#MmV,r[GDkUsc7]rYG!"&UG` %c/u.kLu$oka,Y;Hqmh_jX58&ZD>:QI)/eT?/K;1-rRQPhSUbSS5iD>>bW4X6T!hfto+g$2UUDIg;q<jG>.#5]2f/4N6=2ek2Wq?h %mV6&C=LaLg<.)eeI7'WBm+PRI)gFJ,A#?7I)PVAlhK^AeRumS(`_N![oj=%_`Mum`!khO%L^3-%5X]L6D&USXC5.,\>2Xf)30FY) %o%;-T"fjUWDmpQ2OBV_FFR=-Ihg#GW6mKX?A</E(d\rdICgU&o!k].tg4g=T%#VPQOX1i1_%*][#2CCMT_:\WmVg`d?rUMrU":5l %K'(m'"R)BWju#sT98)47f^`UFA!!o8,6oG1aC910@t_7(C]i'5Hj(kh!7B$K6B!kiGg8V52F.Jf"Y%(4#gm,b6QA^H!ZU8C&=OfH %JrT7`O.a)oS*Ul'R4;c=$R"K`/2h\pK-\8T)ACqa@*Go81Y/glq\8+!=Mh9[^0YpfD]gW4gfZU`$u:Hq2QP2*-eK=0_!E[_/`s&6 %6*rP2H//sHR<l;OP$Y>](,r"U[7&)K[#)@%3S/0=/c^Z2N8V;3=gp(mPE;n)hcMs40p(K^?E0aWn@:L@0hlZis38rT)(B7(L`'-) %;2Za)Erf$W4t;OBU*8&)8*Pi!n>/U&oaiP)`,!ZjOp2(qTK=ll)$`2u%o`N.2FHqY='r@Zm,So%Y.\G`cjPk?IgZR.8Zbt8E9$6N %&:fLK=BFetMI+D^)S0:X`%9=s8ST<L4!5H[%!lj1\CsOj[:;+JZS[Pm\L0fb*#?a@_gJN!+^iPTjs8+:f#Tu*=TmGErPU.t`.j=0 %1XcuWR%r.ud(Qk52="7qFQ?a1SDe't(^Zt<E!BN'%>*n*90GTJWdHEh39b\qpj)P^K`$SD:n,Ba8B=oDXpJe%g"]T\fcCiVXc+;F %,V=k3eTMnfnd^U>8-UK,7&D4hM*HcQkUc&7Y8RN&";D[eP5>lD'ZCDHY"EoAITn''\9.e#?Bfj#b0*-:n]c3i>M5C%GM&C0+_@Q: %3FQ0Z>L68/HF^R2BVP8Q;J=KV71.%6<,M+t^s+d>9$l04UFL_Oe,cr[9$162bn.otQ+q6P9X8[LX.DlBaquS]fM-'ce+$E&6L5!$ %Va[MF<_u\m^qu5M8lR#NXGF/%@c+Rl;:1R*af//=K-O@UM>Udn>\elJcbn2C@eG^J*0a8X0McNFH#ZJ'A21[Vn$P,f[86sZERXI_ %<o8;,K79gU/Q,KL&Ni:SAW+iU#l-Pl\4WDgHM(+<_p.I07+4N!XD24KMN8D'4euUt9Sqqb%'U+kl7TjEOp!fkfUX8nVg@&bIHNl> %AY02*I4>e&KIipt!<NH52R5<aic'QFW1,:mC1OmWhW%;_CZQdU)Jj0LrCsG5NFR$;[1NXTm\lp;j9r$TZg+@-op+1;8QD&?@+9jE %4ne4Q8][TiGpD'D/oN-FA;V-3J<rdK(C#/>*YlWq6e)?-U1d+h"d>)*O@R=P)Y=M,%Vooe^]P^oQEROf+^de6/V@NUiq5W1n3t&$ %Ha>8q.3D&80>3;q,&@#>V7_@Xm>P_[\=PPeL6lK'?Tp#%qEn3-$hXR4Phf?0-EP]HV.q8K.hR?O!6*^3C^)m9$e`sS&5f2HN'$V) %7H@W?'i/*CQ3[$)_h;Tj[G4OG8d;4,0B%m]GK8qP8.iune[Q&Bmn_uAj4p&OauWG$kC/u)N7qcKCkT>dBSk?9f!79o*TXWQi%MVV %WUYhRpaEm'I6S>9c$`,'HOqjlT\)UL<or+7[eO;Y!B:#;;RJ&@;$j+"UD([Kek=KJ-&7M:dMD`CqHH;&hS8q1%DCJ`8W%N\3*?o- %F\OnZ,BNtMn>''jg:.Z62;$m2%icd=GQP9Lm"#45fo*9Y"i4qDKmmU:/J_3p4M5mr7ooA+q!`Hjo^qt:&"\7<<@<:Sf^;a@?adQ- %Ha*7Tok$u!JR_32T6'YceQ4r'NRT1cS9:](n3K9Ze^]#pV<7$bL:urRLE4"fN3i@,WuF%ujRpQS>r"#o)6m_"??k/W6O[>?6Njq_ %cbHE8]T7&]qDh'LGm+.#J+3*J=']tHi2Je>Sp82YbN&kqfj9L%M9^Q]=6E6EGNJ@)pVahNNVrrLY?>#nX/=FD<c^9"N;i\o]C*ht %A#gu!rP8l`rOA5:0*hg%PGEL+[KV*2N5969;G$D?K77t,pf1NXGi9D;\\I21TRVt$DY@JTb+MQ&^ZkI\bkHRYUF2,Zo:THmjEfb$ %ZbH-ts8O2;kC:*$YB=Vem(_A6fD:@X^\+c&[C>#8rS$#`m]19.CYe^649,%Zku-Dd>)RU7Q*,8mH_5HL45W)c]&OYE>^TlTQ<WBI %\,3mtY'e/6B7B`[ENR\C\EYg#+$]5D>N&J(4T"meT)Rf75Br5niEH'*a$'=qc[,5;\&,PemG*magiV#O+8+R(Id+&$G+\E$T6]Z1 %=.ap<0DVI4Y]K@q5P'c%SpIJeaY.eZBb,L+MdGrEk<J+[=;q.scZn^#^>u7(5OtY#KXX2/g?63:A^A'Xh!b$$?g<kS07<-XJ,2T0 %HH=pVoTrapY/gS'Mk>@PI;ag4ST=Qo+8<Da4S-McHq>ucL=;iSJ*b2<4lsg>m=PAD0B<)Dl[uBhg'p8d=o+:flRT]$s6Fi@52u*. %II,AV-,%l2X"BMVqP_G!qN<LNXoB3=e-"V+<W(aPT(e%2?1ZG@V7bC2h#7f@_#NH'pO:3?M+c.(c+^sjZ7joW^<N4`99$;WcbB%/ %9CMnOqu600^K?Eh)t)_STi:cQG5`cu4m12+5Q.mkqB@S9VfY^a48n&\\CZ?c56"shA)H0mjk"lW(V<C$j,@Lfqd%O\i1b;@^*_U$ %J)(oNIc&-e3U8lFQG^2?o7#nt1\]dT^\[92o"TXQE8P`^3TD1<BFT/GoAWCr3c_.sIfC/?peCe=RGBcmH/AAShl!/do0!mpG59+4 %&+90.?[nP`rOW$_V:,=g^YlaLLV@J;]A'm:*dQ;4pYYGPr2O\Ke"(CJp&C:MSb8W`cbH)Z/;;h"Ib8e(]DgdPgh!*BqRScEr>p1Y %:HM:O90N'E#N%bKm1\pI7mHs,Vd/iOr>*KA:;>udSG')bPtR[5DS+L!D<G7&m$I_Do7-\te$oA52kGKnm/,rFPkjpQnbs'QG,\D8 %q7]?_mh]@*.kcDKQ1s/7ddDFr$SH`js%cndS)+&:\^W(eMW_bJS\P-s?[9J1(YjGnTAKCF9<Pek6%-p`mdnbK*e#5;l?6CC^AZLC %^%(jsr6PE$bqK*R+5F:k^>nQi-a15SJ[a9>^"kgnE7"i%kO&$;J/eNl5Pp4sI-A94ppnF/E/W=lg\X24YtobkZ2<=nM1&%N\`gnO %b-kHTr]0jYDghZ#IJT-Lq=D)OoZ4bCs8.g@q8T=<qk.0W&>"4J++!.'^N[Hkr2^jor\pI\q;tKQj1A[iPR$#aZiA+s2n\X*O2'bA %)*taDpI2]\md.R'SpfW\5P3WuDnc$WmsFZtNc)RsDgUu7^YiaBHJ69_puYe$Xj\>5jkcj.g#i[5Em",@kC<KKk>p42`*`Pa$[+I) %::L,-QbDs&T!`e;Q<`_cpV5]bf,ef+p7LsShta1ro<mHKgku\\FS?HprV9Onm'EkMIt6dUps@&Dq/KcWTf_^sn+u85;E+XQqqh+t %qepZ8p\L@couf"<qX,pi,k%sYbql!lN"bs@pBMMJr&t'LfD=YpqEM1@r7-!SjCtfBc)Z?jM&5'4&+%Y1TCe;=IGpq3n(3&uPHT8h %-WZT1bhrHoMg)pOU\e@^qGXSDmAjR_W1>LjFQ9"kM!+cclX'CoF8+ubr7&4Tm:YVprl#hJ\EP-,qN.WQm'"(qkFQh8^@,I<=RUP+ %V/LbYYJ9G(Yg750I+.P4A@46Xqr)btb`s.)`PDdas.WkLrMs<'j6%N>kKj1_QVIL#YK+<HS\P2ODg:]HgS5U@Y'K\es*Zc,O2(]h %:HN?epNuV*r<ofYr@;f6pqEe*4V@MQN5rX.?13-t]3b*)c&q4^SK$EOO7;`_rI^_(^9Q#ArR.UXicT0ac"^GZL<%#C[^6N/nTB?R %TauY2GCTU\D6*@O-XQV?Ip#M3diWtl1H'.5e-ho<ZIceSf3\7V5-D(K0H41cT(HgerTM<%p&2XNe&/Y"m&Xj6jb'11?0gDIjHiWC %mhp?F_&r^Af=g:jYJ'2JkO*-9IEa^sG1PV"rn="EgZLctYO?h]:MoMbGMi;n5Q'_[AUOKLIeP33Yh&R9%t)So?N9_C^A/S:rWQa7 %#B'.J:]L-:5Q9A$>CEQErT?Cnj0Kf4IP@;jN441bVY/UQ^$Y?=Xm]Rt^Z\aKlh>ko%55HlHUm,-:\Kcl]`%I6bK4+9pHR-9qVcY5 %k)!`R:[@3Ci$5VtIcbQtD/XjF]?bcYn%@i>s7=c:qk4T5rbq*Tff+EX[nd\7cD*>sp-6oln];=?YFkjBjXWFY)/oKSm27j4k3q1! %\E1BkoUmSFlF6f[I=M1gQ_1qBB\dY-^?*XaR16b)4nVO!`<1Se"7LKNdJ5<)g[SACr]ef;DZ8EUrml.Vqeit0V/QC?^]!(4^Zg$m %L\YL#516p3HB7k1?7kJee,-oUoDeC<?[_LXYj[Xb\G>9:IEsDbZCLKL?MC$%IH3caH0sXQN5ihlbQ$A[*oX9Z0`Cloc[G]JIYscI %5JHIH:(3W`/m#^PpHJLX\^i/.qTVg'NK*CSfF-U4JUdXmIoq-Xdg#i;)_TRJgnTW"KD;#[qisD-;rd"9]`5)m?>OuapH@s;J,V15 %e8!lccd2XT[(ibEe/s/7;kO'Y]3]O*1t'ulGXr)-rk8&dPDSs<a'S>k+8Rh/QB/]UQ`de'e,u<>cG07`?L-`LrS;Djo^T2,me-A, %^\?VLs7q_gl_Xn]e,#s;ETmS8f@ag!ahG:R'41F2rur-RlaK%?4Dhdt,CYZfA,YTNmsjLp-YtHIcVr]mrmceu07WcF$cY/5Hi*h_ %@/X9dEQ7ejm'L2QhrW9&]^p(:NIC5in,A"SGI'g7(]SB>](tstp/g^1q/p?9U:];=hYK133IgBk?[:lQpT*b-Qg^<N$2Wi>cM55N %QTVL3KcdJn`HQh(F7R?-%&;gP)h-h"T,uUqq/[YT_!h9^P928ikKISPrU2p;9BM6*P.?4gG@0s&^?(q&??(AeS7r#kXDD*Ih4OT6 %]3]XaS*f,'0`B#3bWc#M^]3",GPP_B^Yp1T>$^H8s7EI\?TrYN44YWhKJd9:Zj/bRjOHch57X5Oa'\A>J#&;-k)]K:lQ4(c5reE* %GCB7-2_Y1+jPU!b)kM8Adqd?jI,_?dnr.Y0"8gqrci=!UoT/Efm_c5Xm)c$s*p_k1-a.]?)Xc((qi9jDm84r#ZQ%N-q,8C7j#90b %@B8GHX;g%_cZ&Q/s6,fQ0/g"\4o!H\5-Q\Fe(Yp(p6[6-`5rCBNH*R*^$muVKDtd=J,eVsdjO:\I-GSLrFa]aFn;Lqr5ZSKX<51J %.;.Q-)f5'"r2II2h3[THQN-FP_CJD%Hf/UrM5>tkk%W.fi`/o>4C.iap\ZhLn;mP4X08:Zp.djMgp_aj'C48]q,@=_qlb>4rDns, %><hm3rCl)<U+<K%T74V57pgK9=c9'HD@\r,o]P*+KIcIHT'c8:lYZROT6T7s4mq1VE;6]Qr18tN5K$S%#N#:9X3Wm(/8UTDVc3:E %h:_4BhMK;O`1rA7T(h!oT6^?+chj[\Y5]YX9m?Wb?i&f4V>(#h2a*#,e%=t\i&BNmmi0k^m4GMeg*Pq\poFGU?a\jbs6S?UI-=jX %gdaKc),Ied)OB7"%mTbJ0D_ZG*^=Ec=jMB=DpgE?e6fud.:RATqpE1JHQW+F`l1.8(N4]@\Yi^-_V`0GnX4n'UL3g'4_;h)j)9>= %PP4E/YJiSNs,TA875',8O'OkAN75!/Q,!)R?0a(<Q"tg278JEhHTqAlokT!8")iYN=f36gd]_]D\bT/GqHlJ!-Vs9Z`K,Gm:HeTq %/m;BOl-^qAs2?X9b*A/LE5>3HmuR%PoNJ/_G3P!)plgc??gNsuI-WT74QZ"O=69O,bE)\b>Aj@I[KQ#;mWHj)nI(q7q818K[WATs %k)4,gn_/'(6bMkDhnJqN=7>IspX,;U/pmSerq%FN$ia-II*:"-GKMAt55T3&LT^XPlp(I-00P%+e1':!ieEf4oJtNp]1@Im9:t^; %07No\Is=)o6]ZQ2#<m;%-iWZG:H/GNiRmbYoOf7O?L3jtGghjX?HkVTougGXF9oPPGn8kN-suN:QbNBOO'fIhG<GW\%53%D;m2Rs %cJ;S%jX37ln*b\loqTc;r_m`amlrJ6`D?EnlQ<`b7,RO]s+e;^Nq02Bdmeh:h3iW)l^H2$B>+k!=&6:`h9uNT#BcFA:_X%f+;cPc %)F1=DPV<@m-B]np'bN.('N>KK>Uh.h`MEWfR#kkZ'L<uq"UT>Go7h\=0,,+prUnr'Ve<T!rB"YaI<L#4I\6@[DLHeoQ=Ab62sqPM %,J*82f?B[Fle78T/YTE:W`sA12WCfSj4+*kO2'GaIEh^"3<R=jJ'6g^^<+-+f6[lDEC2GFOn\7)ph%c<A&q@A:%rW`m[cSH^=XS* %D:bY!1N1"e6<f<7ph)hkIfD>Wn'!HNB!/`4q2]]0CM*23<Hn)4?b4L,h=cl"mlrk))sifO2r-3(@XZ?17+?_7mB\,MZ;sB&>@69n %s1l(PB:W=M>;5QTAa@+UhR2aQgU]u0(2qP1hY"]pQZFZ!2u*5P[p;p6ZCUmKH.U9NB856U\kNPsfS-D=Q<<Q]_k!u\Ok&ICDr)t5 %d/K)TqRuj17H<#I9a4=`EV#G33Q67XcBp<[iV?F%39`TtFj(!G]R>.k/g2;8^tP@TmueUoB(+HfB#,muTQoC;2btB>:?g'oN,'M? %o'H:tW(m4Se!AA/]RAo.ZV0^:*'a+]/[iX,YF<q(;Z/,<gE`DLQ&(du68J&!)^Z"WUD.+aF8@\2XaKsDM=p'*WP*>t;XORtf$$:T %oNd0ecYTmCriQbQW9;36]sUS_p2>EQf'[qOM%/'1]rHSHiP])Xc<J#3j!Umn5()f^$PpMUfhO$nmWB&lQ+uY<0C6=EDHo*qA:3`s %Vq:7Yr;DB5Vss&"oN<Cc::\$GoH^NejC^^2p>*442Q_=Em7/,(ab7!=dgOd!=E8'!c-,bfW#n-NGmE]Bf5/onrU/\n`q-+84o_f: %;_C/HUhc@Be_=G>i:#G!mC0^6H"b7PLRRf2hnO9G@.H,>F)/t5YLbsdlaU/j=M;[;ZubV_%;\e9"0T@Hb33.X43]Q./RDeu`adKl %k58*3J,aoUBkR)V2.`p.bkX?oD?"/.X"2b>bKBS(MV1,+O7(S@rQS81F=uu"poFfqHo%(`[iUu?G>@lRk7517o$)A2>diqhSHk&? %33[&9f/n0=d_:0?L5bS)1\"1W4JDPV9P[W^?0L#@e_4RFc(-Y'mR'c%I;RM))o(')q7c4L])3<bhkpmtnW$b9#)&hF[:2eJcU'MW %f_!R[<NB/MY^YV6gV56pgr_;A>r9:qE;h_9k1t#_D6`-ZN/<g(9<N^#mG,F(kI5g3*bbA@gh#2tVOpdVc!9c-?!$^q:&\.B*]3Vn %(-h-S0=,#r#eAOBnDMcVhgJYtH!JC*TDnW?6g)kNC\MI;:GChibc;gfqXWXVUJK1MlIbqpQ>bW(kWE$q*Vas2]NR,(msfW5Wb(p` %.KW,10Q,;83tIlNl`]clG\c/hgE(kAj3Kr9AaZdsDV06gZ41B"h[s.@2S]"+MKN:nfY6>;48\3'I=E)Qf3;H`f>Cd?mG#$sa6n?\ %^>HSN<m`r??i&.'*J]+ALKk(uIVW!Yr4>^qnAMm[Ynn0]gK37Z1]OWOf09('q53)j\TYYJn,3*q3_WfVkoo6"+*d0ZpZT]r_/P1q %I_'ajh=1?MH,i7r2,CFUWTrugQ8`F:c>mlmo\iTr2k"s)pX%":_/VGT_4%!pcbn%22Q_&oY2Augo?AjOnlW?PJSjl25<.7V\kH?) %fh^-YRWj8XgnZ`IF73ZJf5CVf5&C8M(%[/kqlaMqDLZrL:\J5SY$ZS:q3aNUF87&]\,M0k=OFPNb;\RC3RaRt*-:*2-0p#[Y./u) %4,YFkOI]"S6gfDG_a06N,ItPG]Q2EL\g0B8D1DA6Dh%;@]PRV.orlT3E3>\DlOW/QH$&.DnZmR)5'q@uNIu!:Ap2qC;]gF7j/sK7 %k9&?iFkuAEgt5^1#HFqtqXF&OGPnDQnb[5_XBmr;@_WRLSVh:1]COep5MZ+qNO/(tCg?l._HS\\e$`(r*Re`@XCkUQh"d^mgAX7i %2netNUU./6psdFu&jcO:*dR.jc+B#.D$Te&gA9L7Y<4`/MZ3!IoI./[i6"-RIe2SOh]Bnop6gp07k9lgEr2.#3Z\^mHq_Q]f?A[* %XcL3O^AE\um_HP"]?H:^jblpi4)Je>c(P^!D,,#:2#"!$f7(;Vql\c4n(kIfFi3.QrpP("g:m7'cTYV0ne:Vl:De3)M(Kmuo%1X# %]&]mEO">SDSI[p`Cr<,'^\[er?/L(FGQ7XE(#O>q_#D#o^,9j)I/O<=]^bQU8+4.Unj2),DKVaARu[He:;1T%_P\/6s2)s_]k)AO %GitAE>Ka3%>;guAn^A"M^[^md:G8/$l_]O!0'R]1iJ!O:F8T`8/fB*![?IKEE:`Jg(-V9eM_Dj9l>*T:?@'<Yg8hEi\Fc1Zn%J,. %a]FN@e>mZfj',H)jmPi;Bn+k$B:RMQESRs#VVQLGoU@@9dr2g;g>m%h%.)[C[$p$(KFj2&a45:ueEMoJ.pZeXdHU95VoF4?5a&n8 %$h:#5#5:JA.Df[mfD&I3Atrit<XusRJ[_P!8uk"5qQKo;;h^n",$GsSmom"999M)Y,i@Zr%\3e_eINb$_7MV9VIAE0T`YPo01g%G %E('*4%=7d=<.Km!?HqHI#VA5"1CeEfoWurb'o@(5Kuo@r6%"?%LFKLk+=s,'9>I-/UXI&gECB^KLmeR6MNT+W*'t`9bk9&q!(&2O %SdL/W,77BR$@E&'`WkD2!4/-,bGKjI8u/"Cg(QQBi^fTRr4LoF#neBqMZY<NLqog[r3/SXd3O)?:8/ZCQ>aRE>2ueG:g0]Oq'kO6 %S;]1RjJS@J5h4*\B'CNY"Qb7Zl9D#]!TcZ-Bb8$lq-_(J5&T:f`Ek*CAAV-)'`^W58Xru4#aMlT1E!5q8[6^&0`a*fOR5adLVrYI %7"E8D,0.%^&EV4s.@Z)+MTQo1RM=:Q9&t/`=KjGhhiY3#AD+sh8=qO8&TO[7d#k\X,3g*#"IalqLM.q%GHo(!qP!OUnB:XOP2iiQ %/+]/sclEV+[?RI%j93[/@1o>/7U7:G9n*XUbe:Nj&3``dI@PG1_"<ic_PcBCM%b-b>YjTsbVpkWS81Q*IgLO!fTMaMP=9,57o8/4 %Nb73Q4qj9^$^i<[(Psa$$LuhZR:f[T7laj!-;eeNo<OMl6uL4JVF"5aV+3?<5[`Ps[M#!0&EG:CVs79`m"opTcmNPU_@gDo#Z3oA %%#VC9I6dqkMb$;&Ql)%?H3-;CVACP76R@"-mLa!23(dtN+!+5Z80T4[;j%Ud;b>>7dIP4cINY0*TqsSsAl-@GcsV6[Pa",gfd'1k %>&Q#jjuCX/9?q,TE'(V#k[Z.oB%inY":J21O,$?r%X&^DE&'/18*!8Z#9nehK&Oq3E`3i?O$9[^F[WE89nZ.`NLiq)L$cqkAEA_i %SZlXVJbY<4*i;t6g*RH_9d0^K7+mf>O0p7SA[s9RQO*S&9oHq<9LT[BAAW7]B)*uaDOT4#FZKWN4&_."((-.0bLGceFPO;-q>)<* %!M6idrDNF;R!9_FM6'!p@L:M@P'3+$&46:<8r>hVoOX%LVEW>'&7Yp0'gM.iZ5Bh2':0M+f!N3E'a98,9(4.'WfoIhr<&bEESTOT %A5dD!KDZ^S]@X2Lq0*EjEZja\HDdCF7IssQ5d;LJ.Oj><7j<#`@<=KeGZOAo@6t;7+lNHUN<lV@TkKJF4u]1l*BHm)c]?+=Z5*Qm %%Kec$J7TRLaHf%e,-8RgIV5K%'>)2,1Wm]m,NqXkd&D2]mZ@d!N=0nTcV$DL#agZq*>e)P3nmU1*sJK>BH!?cf)\aXO/:+V#0'6, %M[:^i-I;<oAg]Yq<h39XmsfS*Nf[mDbD3gs#`i$I"\b#$5um,JV/F;TF,7Hu,<s$Eh$Q'2^s#,p"(XImlgG>XM/pDtTru9CZoe,g %.4b=b_qeFeEc/q8I,`B/K+9\b]Z2n]of;YMq<Qh*k)?>T\^g7nhMh>Mk],h@E`\=d&'R$5d'r,>j2Tt>U[MVS;7PQ(S,45_'.8g0 %G3NGdmmYifY7SiuYcHsK:$i=Bs8+LAkVf0l0Dt`E6&p6/q,mg3((.f<">@\Xk:jto0C3%E-ldSi*rP?ZWViag(H@,c?WmdXP3_<O %W;=a;E7.1Q*HYij.T^;uIK4bj-hM:2oZCFR%<I4eHPjTV:9;(k+Ar$PE>aqK_ki]`Dn]N7+amRR4)<Ro"&>CNiV&+e0^CQ37$eZ1 %#^`.[5I/2fKo794kfE-QqNAu5CMr%G=if3NVcPI`9`@5Y@<<rkO0:@Z>[`EC3=FGWGuL=`F<3WO@_'dP1du&/N\fSmIc%ctmG$sH %oIl3+_,Yj*/JlR%rLWh^\bZ1SlqbY\%&kq)<=QKKNXiTCYO#t@rp\(sa'QZpQTn=aE;0:(o&h;PmVZqABL;DsO"j!ON5kkg+.jma %eh3#2h;#[2WpI4O'<ePM3`e7iakVg8mn)i6Rm4G9qlTRXknPP>oB/<PE.n-Po'LkM?eh1M2LPM["N;l4_5CPQGk'!6q!YAHDK#OJ %$&a'kA+n?)%J\tM`=W<,*e*4U+nGC#T/@^8A%;LnC?^)kdm*i6Wp#:7\%hRX9YjY7]%U-P<;E6R6_A1Cj&5et9]h>.$"<Ih'p$O2 %H9K$@q4#F#I`AMB]m&!Dr:S+sE;O8RQLD<Ph;tshW+Z+Tk.P[CUHc@BgtLPrMVc`-)fbn23TRPoeuj@3+T8qHMgJ1'Y2EBoZbLeS %CD9A5Q^jCpQK%5eq*KDo`"/?,RlB2[5J&K%dbOcF,NR#A1Q^8hVVuj_l5f2n`uc*]$h*K.8(#FK/B@'',5KQUZG+2ZS+-FV*D^c5 %Pr!=\\T_@!C_A+Fgt]R*'rp&LkFJ[bZtW;\r7^hg#Ms>Rmom]/[Wa>kA"'"(Gl_))kgs2s?DmKDLub\-R[ZO2>o<@2!2r,L<%&/\ %^9@@J$Mq??`sgG-bI`!A*q&\P+;^Y6[Sd^h)t#blE;=k*c!(tc9TtLJVGX7oZS*=/W;'B]dsW)FlLW[V'Q3imI.q1,FoLI$g:-,$ %f)e]qrj/Hhm<9ol\h)Rd]QZC4o^Uu)gj#DQdJ^YU[AMgDI9,pSm[&YB/pV/To<q)Tl[%GNhlcGHDOGr>TeQ2b;O?L3&"HW:p=c,# %:T!*RJTosp[6R8YQn\9co*T+oYdrhG]l0@rfDiDK]2t%LGFa!G"*Y9==7i#3hp":lNA'`Lq<j7:RgGn>K$V2X#n>SRed#jQB:M3H %hQ)YiN.-P"qtS9WjSQ]=N>c6bM@UdsT=T"(IFi.#h>'"eAif;R[CC)FSV>'`r5>LSC"//kkq*hCI;bT85TBXVBfDK,^4I9`'/T%l %P4O%`di@FlktA&n!F+%A[MsSZ'>5_e3DZ:BG[dAu$e204]:+5_D#'r.R(7t/29CIB4&;5gDLm+dkuCXij/@3LQ^u=7:0>,@qst8N %^'gODf(S`\jOIk"*kN=LDRlf%Rqhc2#NaPV2`<U5J,@(6epm<WL6&n7Wi"e`6f&q&jMpAmjU]!YR""B"4F61An+N6^)eP^%GD]Po %c@1pbIu=!Uq:\Q<9m^.FZ#(R(LKqMOh.lf:X^@CdWm=a21M>Qk).I^2@s1GRi:_LfR0%:Vkp=RZG(6h]pWn7<8*Uc$B.o\)YAi+% %dO.Yj:N_gOS2u#98$=N@oM?&TmoX6>d#%4>^UFs7q0fI!JC1D^4S8$N<fXUaI+5_Ter8'*Y5>#;:TV67T=D;1@U"*:$@+n+]CkV0 %[A&odNHb&PWNH)Wk10%ah4J@,E9G$kQc^_'Vj4I\mKHdg$`D6fAPG%3E?Fq<g*aXQh#i"*MT'_S_U?Q1Kkp9I&up6B/ap+T#lF"i %[TB#@pY&Z`F7u],OVs(jmTTG2TcWuXm2^A%6T;RRa[<l$p8ksfgd9D2iOpbV4pZ+:cb"Cm="(W)]):Nrb%&6^3j=%_luPfA0NZlL %++!m<%:qern$d_NHL^Xu^^[ld%)(YT7pfE0B'n=Hpfb:Qc,u@h?9bUm_)?RE)Fok'r!L+i+#gd91u@>tEW(r6]?%D9ZW&NRU>oGt %!.H>B-9*>i'F05Z`$.%+`9M,W;b)KY,B]><^XNu]("-Gf#=Lfa)*!jV`"`MW<>G[tTL^X1gTe<k,:i;\^6qs6cf2Qj6AE[PC2R6G %R/Q!p&70[Lh,lOtJ]RZ(K-?Zo:^H0L`Ar(o:tbE72"NsT=d871q\0PaS<,;?!02NY2MPCi-iR5rFKa(#7(FRP3@OS23@P9e6ihWJ %q><AbWO=$B3]WmV>(uZ]f&u+n\h\#$I'<$mV5f1t8oC.m!aG$H&WI3^$ftuZ1*q3j@8p\gMSmAYm:+Z4+\>kb1kC1D0B0LAlBO\O %b#Q8e#QdgC,\T;I[*oX"gGJYnNg=^[\7T]Xe.skGTL)U*)%_3\(G'!m'bZ-eS<SnJJG;YRM_:^f#+j)TPn"_;DQFP1SU<-p<ata" %E[q3C?lb<*K^9qBI4J4tGm,_ElLIFkZ$P#p!8qKri^b=_4`uB#d<AaXeced\\pcGZOXFFj]Q]r^_hsa%WN#cH$ulDbO?g(<lP'gj %'h:Mh7uiCNCDVSc]YI')$[,)!m^85JTn4#P(#c.MI:UMS@N84'8[o!k/WA5GTZ7+JW>^'=pIKpqUg`rI,Tp%eC0(Q-P#01!)UaWH %aG$l+("IW+69dc)LuVMN5"H;WIGCV#Tc(dg,f35!cq=O=O.U/f5U.ih"C+=X!Ic(sUTW*;3WO[kSlB)AIUC0/,Z`H%*TnbL*.I,0 %!K6Or*fEX2V1d7sT$$]%n9]jl"u6e-#;3l>oIeQ@9LVR*@0WIN"^u%FFeM@CObPd4TN(\4Lj_V%3164./6EFU-V.FH7[.7hcPO,A %p&("H2$c2EX%8ZBKLlij(Ye\BqKrY;=&2(!*[?$)B;5poYac_65[_!_-ok6eGsUSG!ob@N]aS:6RWrjK"9,;=!NV=M.V5(PY!RbM %c4l,8h?1_:7UH./'kZGk;HD,p2(B^orCQ2i9+T*,n#.#6<\3u'kg=>c_B]pF,%N%Q"c*^GL57mhcJkeSR.VY'$\t"aBW=e/12S9\ %mXP^6Ji\^i[N"]c^1X-+XMKh2iAukI$J8\q8M;J7f16*$/Yehm$L*Gb-tW]!0f1fn.\;o-E>Ai<"<u5,bCWA"b<.5-<eVT@WOAT* %Dbsi/MUNpjYfi8r5oump!a.p$d\M&oS^U+n!0XO:1nUr'Uat_$o=<5RW>84U=@CE.0[LFtZRV5@#uplF[E'sVCfN.BFBd>u/Bg8c %%9.X%Z/5/lZ-*;rD7*fb,SIY$(GHlS_"UB('Ar#Lg']ahcq8gsQ#He-"3kIO'tCh__f/7ID(j4pFhNp&8bJ.dk/i#Pjo?;d0Q8eh %Csu!uYA\&3-k5bn%(.0IbsCt=T!'>nH`$iPGf;tC$=K8TLcAH;4(d<9o]fgA"b@WF/tWLAKS0RjdtlD5:gpYC8Djk=!^7H"8tfZa %oMn:3&;2;)$hj^QRaBhnLMEP0]Y8E\lc,*g9PruG0n](j;f?;WLq`G("W?OM/>'0oqCK\.:rZ&UUBopi#=:ZX+`]/<$f+VZJs]CU %eX&uJ%2-NsFkkCR_V",U;Emf"d1%<^52#3,,@1[u/:40=#XF976I8bE4[pQ?*/-_:+Vk8B9>XYjBKDRB3/SSLRcq*n`[XN9$qUA_ %YWnokC-e^J72S<=OHikAPQet(>%l<I'(A'c\n;d88-O(2\g,f.8d/m]^?peY<iWARZFj1\&#Ek4%JD:"MkC*j-8)O%1:dHkNBGmn %A2#k4*U^t8.qC8`$sFX,3N7o[i@P.o#cAiDPt5*>4I>iEgM?YBk`$Gn^d3<IPHL2gWE:HO?flE.+[-D>L`*hQ$8>t899<9C8W7C] %LCUj)C.,6UPS,AqalK9&*Gk)0-YYCcj-jE<>C4L<lf%q&@KrGKOW+_0Qdl)2g12@1/)1tRAm/_>O3hMcEa#:R3XV-,`td'cbZ+Fh %0\!4"P3p'3UD&o"f%DmeU2rSHV=k:ihTej:W3-8,?\qcO($3CG!&"u`MrG`G1lUh!0!M"daL*$]eh1Z&[Sfu;YVB*29u(?f.n>>F %)(;3E#`;CO"Hap4IMd(3phL'7Qb_)^)4K>6]SJu&6Yr*7/jj)5ZG1s,fG0i-0YAN:=>B"(YlnhB<B[d(0Re;!$hBcJo0&4/<^@!s %@.&]AeStu'?Aso\]-<H+\@O0r,IOoJ$"C]E_I_H*9%g(OU^h*_S$X#!Rl/WIO\=^rFR8Q=7QTbN9VrFY+Rdna)=gr2;034#`s17+ %6[DgAIZ7V""UXF(P.[?PQ!Y<a^pj#mW;ns"#WulM+K3)4$/4RJq4_^SB,6&ngG767A:F5.NC5<5CfC2-TWXp9K4JcDO1A]!.6>8d %&:Z1X#]#BbDNgFq01Z4]NT;4i,0rA/plXB5`=dSa8ph]@*-EuEr,q3.4<o[l.:7TWQrqn$7LWt)mYdmKF8'/9HaMDoXb*UolPdIX %WXIi$7(T$_<oYFL._t3rYF5ub6CKROSR`Qf+;fuRS/a&HePV^>+4(KaOK<h;K/0uoi_orAE(.'?LQO")K<OGN!1/T9k!rZT-'1tg %;?^;N$MrF$-DKhl`7bAh>LP#4B94O;g[ko:FbMf[QsWB`?!_?Kps.[G*6E4\!BnGU[@DY&+9S7t6THkFkVK25lPQAWO;c[Y%G?Ar %^b]oQJligV,c7Qd/Ttn<j_6YnA8J,j`!=t/f8F3`;rBAV3\HmNA3=i9&;a,_7H8W5D^a(*W$dWOE\/.SCaF$)JPLM.B5H0$Sg]dD %-7@[,O;N+4/SjJi)bGTkQSb'!Z:Ig?M(NPFikT4E7K+VBhW=l!+ta."8Ts8^rji,IH-Es2AO%GDcG?`RTXJ\Xo#n7@3,p-LCTMY= %Uf9I_MnOg5gZKL&QWmr-'LtOo2gAlp4&GuX<Afd".!?K>e8,.PY+DJ,.5BDk>;>g?=_8;2ZSX_)XcX%QgkV,(_ltVoAPJh:?K?0b %k--O<OaEquP4N$B(EtRH]+QGl&kN:J(5/V>=4OP&B,SRHPqgc3PB-F7[%\c_S8rKPUjV+SGp)0Z08ald3Nu'Wg$mZ\!2."0Bi2@d %"pb:=h,:S]kO+5Za1Q3]3@mG,&0Lfs1#q&)F;Qe\4L*>K1cb&k'8L#/4f(=nRs@pEW@5P+?TfTPFF0I>KK,A032GWaF&H0(3AZ.Q %Me!-"13:.!EoLYFl.UY"Re1&H^?fT*pj4r]GU.-C-armEk%0+n/9P6u6o2su5I-Jei3I6AP/UIT](Elies[&uI`?AkRRCi.=:X7f %4,uZ;:I+s]2^6\Og+Fi?l3Bl7+r#g/mcjClnepqAdHAUmd\C%DH9QY-;=)H7,"B_;'-3V_E*h^@J<6O=*!fp1,m"=kNd)l.RITC+ %=8$gu/YZ9sDZPT9bu)I%Ai*+J)+%O%7)qFY3*%:gjr"g6hR]/<)i83:S<<&NB#ZWFn0(m$VkGC$l'H*Wq0[:)Ne0P*$C;gSSgs4^ %7h2&!-mpj^k'(r"-)']kQ>N%X0s9.E5bb@K)F(4;.OsPNA8A`BgHFcklK_S"HnTX`EY.dXbL!\;/_3CNZ*d=QcTif]1Ms'U3lU$q %<)Me'`t??qC>B")X3G^[@fohHBi&;/KWoG#ag3r>I;XP)/;o6;l+ZatV?c3k0aH1[DF)O+-0KqqUeX/XiQ4guM*-V;":+8!qYOgR %KqF-e@`jss6;2)NCb:W(Cb6DY>>((1W[102FMU?Yoq8P5j&suk\/*Ed'1,cjfQ;D/<`/XCl0?8$J.5meAf'%1`f6',Etk%&n)7;I %M2%)12sk7h27Wut`$>PC"Z+[]]6SXAHqu;/#=4/9-kh$-ErDU?A8+K_r\o^F8Mi=/Z!&-:@[:abqC4t?<4El3ne:rYXb^Koc!KsZ %+HkiA>\+'55NMZL&m<3*5Q2MZZbL1e3`:mfc`<(29DDS<4S"+%/ug<%Fa/2%g>U+A8);H2O'L[#3pVI:mq\a1Uh?;rpj3(V+%FIT %4tu*e9o^Up5)"@M59>P'=h]YYJtRNt[mC+7oj>2,BMs$P;dM0Bf;=aS)*RtNp0alsD7c)k",j@4q+XU\mT8f"bBlsqCDmKkrR*24 %s/C,=qNtd`+5Rc:Bc#V$jF*B+#V,Vm+_#E#2NKlDbEr!k;ZRdYnB`ZnLDC6sqR]'r:B0qsH""=W6Wg&L=e1EWHr;U_[RVlopUO.T %_B7+jG"ubQb0duMbF;<bcsP'=fI_SG]@t(d)GaW6jiWF66CZ]+@3mBl^IuHg#2MNAcEq03eTjTC_J/$W2&6Pt(N8.0ear_IKna<. %T37[Ue1&Q?o2jeRKgN8*Z_lgJ.!saVki&"C/-F=@lO,XISp0XGB,'HICtDu^;/UlB9d[QO5;6`;;^c<bopW5bj%hQg8`J#kf=\h: %>g\H;a'Eq=Oa,2Z!qUEph=g?nd3f]YfnKYGWk-DVOb5?+HY;c#pAU[MBs`<goC<R>Y<;H-$YM*%[D,XRP>ZW"K3&nu,R6.(EljRo %bO*&_qaX>H4bjblEW4f`/RLV]c8[W2S5[eTX*^AonUeC)=ci'sf5FLLB@smBR)r)C41R8AaYE!JdC<=<!08"fMM\FXW)6h-k<J[* %jKX'n/V;nuf5pRdqK(TM#Hu;a(KV\s`^n]1G>']]le(nY<gapt9qU4A:`(iO(<u15<*%._DgL=oe)5pDoA=rehE2(nmH>0NI&-S* %/uKk#jm3p.]YbGlgS9^0h>-DkKn#hZH/d?:f=ZE8TuZpU5PjN#`Im`LF>63tGj(Q2$LJ)J;>"4:ca#t>^>H;KCNZN=T/<+/[p\$p %Y?0PhGg4eAc+@>$b1B5:?H3kbI:M*V1[gbeJg.N*4LTPr!fEj1Y^FWa6G]Q[^YdLER[a%hs-AmihTa"Z'abrd?Ztgp?glgYn_GQQ %kbms]9jbVV9s;Db7L"@WC.dO*`4K7NFKX:Uh3X<V3r6?ZDHTY@jdg<GY^#XF4.<Xns4i3K6?0YJ`<5-Kr8b6^Ee*1g(2$L,5Q>lb %e8(@eV=`)P2Tp<<;#gGgT^FTbM(bJ=c\(hD%9Y$i?Ha+H&8-7=]q9A$Gk6ZPI=oD)$VN2$?U!29Dk=3g9AHd/CS%uuU1<'B0(J=a %ceW3Eo;iRloX``Rq7WEG_8*g1<5W&Ma)jGo[,0JojPB\k52/ot=ooTAp;LHoT:+"fp!sX/\GFL[VHKmpj*HjKbOp`ehm7'&@DlBh %.,n%cFt*>Lq/,*M-amV)^H:2qKZA7#Y9VP>YHkD5)eKdr('iOZ=[(P5\Qsj)OI%OoqqJN&AT>(KT:RltB)r0_f0/Y$1#;Q37GS;f %cgQ'u@FUcM_XH?n.nB/VnjOPnET?5m2]((\o>Y!.%iO&B7c@66n:1JSh#(u/H3<-,04%hb04M-0\!c2:l.YQ.-D/Q/"2tZ(YF.Rt %o_@`Zpo<F<R_N'M8`A*EAt2q9HCMP9c=`"lUb9/enI)P'qW-S.$/8dY\*VWM/hRQ>cA;#`du*]E%![$9\h=ObI(O%G[SNOZ=6M:Z %^%TV.9L_2@p50@jM3^*P=&8NAS?[UZHM(i<H$$Uaq8[B?rnQ'ljC#,DkB/<iVQ?]1h\hp0j+OJ)=utJedjp2c%:1t>l]U]NQ))_h %X4BJb[nrH5Yf;f!&EIp"3r43JebMo(T@gC>o8!/XjrQ9%Vg5'%/;9L!d,,r$RU>mr/2g:BI-n33LWlN=pNptYh789\_g=?'fB(_a %;1sA"i\oZfeV5_;O52H"bC<:-HbX7=o-N#>LU!^gqukWZ1)d+TqWnFXj>"Imr`(N4d49YGcfD"$[DO&Vg8Lu2E7mNHDbJ\`ZO:E+ %)O4HMBABudcjuCJqq']2E7+'@d8RPqoaghhrS,'anF=?*T!IF4On`g@jm"Ci]&VSoaN)k;hn1ol(G.iA`R[]cV:Y^m*j3i^\'o!& %o)fnEo1N#&C3jL^];%5\5K26okAKWk.(X`LrSTA$a>Z:CVG,pRfA)DsMqE3ro4(D!0\<iGIaWNOJGksERpJtbZf.%->PU^7[_;_5 %%@-Tfe%td^q>*pAftV=o]%+urRTV('T!'3E4S@9[m<`$fU%j)c4"i]Ml*B8r%n7(MC;2:^4h#gX40)Gd?6e(6mshWSf:IEfp[?kC %j,4W[Y&<TROQZ9tXoGW&d:;ee48,s1-JuT5PrIQIl]'MfIq2.ZEDip\\)5Pp9hhC;2dU__p4g>Al[M7!8j]F*IVPAGJ#[88IH5?G %QDuk!#Lj6c5II26E5-:u,6r=*cYmZAArF.j(c/P5XD!@rc@QQt,";F&D<h!17;'Fq)@<8e@4.L)prTo]GjHAa&dNp1"H#L@d+Qp. %'iP0]'#Q?DNQmif0P*5F3p;:L0s\V.E3>(>$33bid>NK6;URPNMk\G10!RjZ+tW7>nP1BjFg%37q$BF[6B9UD&nnQqmQG)1fX=o/ %.o!m6('gui?6FBZ7N):.pDSB+iCS.q@c/sX<*aLK'1afZ'F"?@)YN4$obctQ>eSc'lj$tmX?W?96A0)cE'7H?>d]Ca&u9LSd#'?p %dj3$If1Fn(PZX)2J4!QfQj[1G^6>;2ES_T$=q@ZDWk^[?"IG+8XdCOcdu5j+kEmjoU^9UDh#(=AT"+0<D+DZ>PK*E<,RiIOWNWJR %+ATh;7W9*A+q]OopPg&R$RE$r-QpWo"$mK*`S>sR0*(DSD4mInFXP2+RrKuZp0dr=$FhX&""gNbTZOa#^5SdD+rjXI"S<##Jip'I %#4r3%)890pEeXoqf?_m6eSJfI'QjNIrsH1TnWuoP$A::h,"oWcpj?pJ>@%%Y5uU*YmgV$J23L*lirO2C86tJ"!@PGaI,J([!ZhN@ %+NT?uji]tD_p*HF@hBnU:;[JD-Od4kAGs/L%bi">:h6O"/mr-/iPr60Kb6!TMZ6+AUqg^ibL$ZHV?@F@%&W/K,7+dDQI2'hQ`5RZ %i"m\/&ocK&HuCY,JQgiO9*V`#BP0+i3-j6,J>;,p<GS;6OdAN0,mk=8MIDmIl1Q:Z562`>&-^$0`_t\P-o/5-INX[r%A*tbW_2$> %Rc=aM5[$Ii\qpUBB]%/:8g4)V2bmC.=eEl$5o0\DJ`gtXVdl,j!>CQ'PJm\0LeAG#I@QAVF1?QDY%>i^dPJ<3,miKrYT^nd!#]to %qn+VA+t&?cN,/n8ieLh$5k[/?&'sGJOjtT>h/tU1ds#)S[gE9@%877qIOAHVc9Z=E%.CFd(Bs+rkDX4>#l'jB$9V]9#=%Z\LfZKO %A7a"d?ka`>A*L04TLPW765Z7*QQq73-%&<!=:B=]"+C8,cT71?D8$ZP$4"aDIJ0N\/Il5(k['@i/(.m#?Q0+`nc8k1pNIb"@pd,d %5k%GAWdKkO['0[p[sZMRn3Zo/NT)3k6!?Bj&dF+GIYeNH5e%nk.`EH!D/0\i'IZA)!I]d_'0^X`nhg1i<EsGn!NW'C>I5sh+;"sc %7%Q?&g`'a4PZpki$^uiIaN?pm8MG?rWMKWIMdhP;d\%LHic3SsAO^[l6'=k4]FGFoeWYQc;'oFS!U@#m\l_W0Djt0W@N-QopnJC$ %k<bi[MUKQoU&>0WI23bKI*HCF<Ds$aa0V)?(M<`$V/d%/r.8#m7`:uON9DMWGfHR0<IeQ3j"(m>``I>%d>D=PM`?S#+[2TSEChuI %K$-!:cXE#pH*Al_G*FDN$1TkSni)UU#ZtJ$G-N2U>Mq2<Efu>EM$"2T$UZ5Zc^G&;_8>OIe<ko)a\&\c/V/[<_"_Cca>aIr5u81U %$IlJ[FoZ^:L6!bK2s'<taI#<o;&]RiQF2W,0]Oo`h;Vi^>,*m_c69'<,@;ZN;=*l]j39Unih[J]X&CA^+:EtKJcYCD(8iV?f+Gu\ %a8iW!;4[nT(L+rddZKpdfTQ18qoeYl!*H?jE&>KGk"EK^%DRu)E8WSc8B`ANRHacoj=j80SADV\qIUaV9L$B\@L4r:'PC5<'WKrG %kt$GD&k=l\_V.`S69H"qm117Q^6@gI.0SP2^EK[mJp8Lq=P+Ap#+nKrETlV8+H(-S8g$8/CPF+sU33aMj9mfK`T83\bcUpp=&XL8 %m&<8?0=*s/E?jO'":,t.Lr@qUO>kdb`/s%lK@&?)72&j*>4[JJXF.*g(4P^c#%mh,0`#7:.mcc=LJh"=EYWdY&a9S;mL\\#a:]P] %\Kk&CG/WoiKNrCK_?^Z8=[?WtaXXo9XitMqTj5<kVK7"nN2SYn;_`b+&fl\IRp6Cn&4^WC%IN:JF)@(R3ld6NlS[90CE)?$q^g>! %PC&hm/r?A6>`M`6)G;"?;U+JUCpG4s-pJf1'gR"8M<[JsU*J&?)P.Wk&V0?5ip"6S^_$u=X;nLb+]+ju5H^p"9F^()5G)dKHj%2d %S@%W4I4qA!00@Em(%Tjm,s7@,SV_!:S`*;&"_.b<)h@e$N#U68:`\\FE%3*0XBFdMg<WU#9Y2;gi3[NErf=rj>?d0gX^J"+gagT* %Xtir&6"-Y$]*W(A:[ikCL+qEmj8Yu1dus%c%t2VEY+PZ..rT51FSHCHr5Vj4)ZRO*df/^1$\']o=14'+Ck6L$?emp_r)<0dN%H8g %>A3\:SraXIG0^Gg$iek"`VdJ&Un<$`T0`ErTW)97<Qm\i6$GP3!?9d5kd^-bEe(UUqa]guXieh[s6SBI%=>c`+)tl@3B8A=Y>Zg8 %?X-"RrTCP^lJq,])L<4IBZI#b"1:]rX/XDEeFnjp^rR5h-3$D`547d/29"Lm'@&\+&HY8%o/h^rEf%R"g`7N:haJDpZL-n)H6-G9 %0Rgm3b6FYd]o,D3\qT&@,6-E>kF[0=iE%Ct@9]u'Kh\>bq>8kU\GjKfSI1&l=&86g./^sX9<Jcbo?L,=7sF<6H!EFi]kLs%Z7H>G %Dg:cflams&cC5'7_/ZC7^@RE!/i3_om^uk0s(>'=lfJPmeAkq(kk18`Sb)2PYKlQ5n9aneE^TY]F%p5Q3ToDqo'\@^cC<:t4GuPn %I4I7(n]?Lp+2'dPE8r7X"+c)nld%`k!(YGIi?E"3GjO42'.QhET/>f_c+A1J^@qL?:Z"),U6Eh%qR++9:HZ*:i-ArF+50GD<M/OM %hgAjX(5;2NJ%513-$MJco^QY/WUbP^S[;\+hLp:B4DJC[FHF6nolAT2pK_oNKflMcC%]qb$Nk"b&aJ__.V*MP72L*D0$o$r@),S< %"^(9j4!'f2EJ5r55I';#1CM54T/)kMoA<6HUUj;ic_2iXqDZrn5CV&k)>BN4k`Nt-b&TIag>`RV@=HY/bPG*!5PFgTB>DHb_g".a %))^c&PJ_AHC+-dfSgW]\5H-JtIeQ$K(Eo?\N?*qkpRCZ>6Dk-6#lF,]_lp_ke518s1IJXDo'"PHQ$u>\Rhm`giFMj$NLDUH.29YZ %O"POdrk\K1B#7t8:.6+$GEc7-mdA%i?=2\@+8Wpu-/sItEr-:^'p@u3^Woao4`r:Qa?=Eg?tNd;^V;k:)\;1s-U,9:i@FIqcU+i4 %hV[fX1U!B)rK.8mN#Fq#HqiBQJ*@V*Sm<`QHsl1@oL8.#3/a\q$g0X]jR2rDS:94]S_pOpK%M\S+'nI4]Y!X'!L-!-)je4Jm'^sB %f=\E_=o+j&obT=CkIA\W>5#nQ>j#dHGt2rIqO*%(f9,eYH0*FXYIJGs_OFE%!u@tCp\'ep^V9N5<E&)bQWtf_UXQDNo\<^i.e9*" %!<(T_G0V[t?@W!-kGOkV(c[#u1XjW+9g.V"caS;lagU?oDk8c(:+s>W]?W:)k:D%-MADuQh&hf,J)==s[dDrMfn6ub5VKkCgeD'J %'ArE<QE?W7lu$^tr7"_67gqU@Rq8dLiAH>&f%dVV&*3MM#gu4+^]'F`-C\&HD!BYR:YrG3h!rA,pJ.a7M&f8oq;)e%=^D'WQ9;0T %,>hWOr:m-p)]gkJDg^L-g#j0S>P!:7[qd'(/^;p^^o/c\^V/aPk65NTDIjF:E5uIe`t%i\Cu2k\2"RA#\!a\hrpYY*?SA#UK%/i+ %+*uIccbI$aoA.[K]Z@2G*Th4[kKpm1D$&-[q4tRsiu*QRdr$7W1>_WFBCF(IHoSh+^),Z)JgH;h'_H;!1F;OZYFbhhH.&TuUV6PU %LMim?V=oJlT-[=gH1TnkL9VKj\%Hi*GHQZ:9>P"C4uM;h_OU[omeu-tAWpgrSoid5o8*WqOCG>9Y'YQUQ+\W2V")DZGg88:/Ud+5 %Ias`s"V5t-N7mjTLt;t1Ea[@sZd14n_#qFFl0Y<M1cJX7mH+S(E^0)ofon-I03s.ApODi)Qqi?"#ePM?qnF]._Hn1!dV^aPmep4S %c8_-RO$B%n\Ks4.T^!1$L.V8OL1YGI6SI;7C1I1RW/&??O`Yt(l/7oBI1QP5[n@FB3HWAu/+;n(\/K<PJ?/2@(CQGpJEJC]L:ocr %85R"[hVPt``AN?20HrI5:.`,hf((;9qV6^CGot].jQ2&"]>`R5C[GWt:upFc5eE`]'iTk.W]&k5K>Ic#]X-gVCTa59$B9<r&4Bm> %Gk9J;c+`YT_(oskc/3KE/=Q<Nqs:)=2\e]R^A[t^<Gt'BX$t*iqB6EU"5D^_I(Zl_IMdTOgZpfZQ@ZC*]\=pcAH(;hG'9"YeEcPs %%hjQ's76C_:gmi_h=]W5jg"iD`PW$/f/[m_V]<<5><K/1DUn?][B6Nk"1u<OIK.YdJ?<n\?JC?\q/5doX'^3oH3L>]=-)$QJ$o$D %cgUjJbmOn+>rM'/;_$s<g33<KX#KFuZZ#kp8n-Y([su!ed"nrq!E\(Rm)s=[p%Aa(<gr?F2'6YkZ02#?4$HrTjK;-[;T(#q3n=`\ %flZIl\]0RG4+>>(k?hHmlI0r_ECiUk?E:6Xq[X]2V!h`L1&\M`s$<+P+HgUbX+]BS(ZLBCiVjBDl+f&J\5lut!7>3@$4JI^657df %M=MsTm3H^%SN)bn?:b2Y.8D&j7_):Kcm)mkBKc>c,Z\T%cj4Ul(eFl%&2M.mZ@"XU>=S$F&N*8s3J(1J=4FR5]7W\Q6=@qKjjOc) %#rmhE?X[3VHOO4$\8;q6Pqo1,i+:CM)'<$q'es!@0HXkR#)'*ff.O]=)>crUHF)`IV$]K$@7=k3^R3Y8\@Um1TC9a=\g'Ttf#'k> %(;>sN=ISYG=_#8UVX+]+s,^.lN]p+5"o<u'QNMR86P*Nb1MhWf/@BTe_W_WI3L=_g#oOM=js*aO%?rn*n1<TG:d#6E#sp!8cnfVA %GCd.n49coS-SM)gBQK@+qS7==qb"jC=;E.N3@Bq/[gW(g<Yh<-$geeD!L]Bt@^/7;>LcW+F"pZ[NU!f:hjF?Wkf*tUF4@s8MP]qm %GSO08KO>p'>56%ae6sI+J-kWFn]lfR;\3]j_TD!%(iA6$A+!JrAd\8PLie(9Qq1YdKi+>p9>oDY>TKKMAoZ`KXZY6HfF&4fCPK)+ %;0A$4=7/&h;9S`n)<2m:@W,EqLsRJ7NgQ+Kn;l,\#0\A"M@42\?:]N^mB6:<T-oFKA*!]jJHmRu2MHN=[CiP(F*]?U6Ps#m\YN3n %n-_b'JY+YXVZM/Ef;ld-EmH,W=i?[2Q[QQ0d',>5a@*SCi+*@(_*TQ:<FGdB!(_p-EQXJR?#^'WN`b,F23[@]@#alVa(6eMJ>r=d %BU6Rd!\ZUM6)JB<>?^_Ca9dP&jM>0p+CqZl28LWXh]<&dY?L_qPjC*E<?3J@G-8'r8r+)t1VP+/Lfgo_j<)tH!^A>j0lh=Q!#C/_ %bdo>*(-Fe^;k[UVgrmJl)l<t(8-OuEj?QF0'kcH:OF]eAf07OT7S7(o$<A%;@,giYG/9NZO`@)3q6*2%nC7l<'g1!=oOkA1+AY8F %->r'E$.6U0i?LXi&fL<OkhcLH+Gju:/Zo/J5\b$[Rc,T)phR$J72G1le3sq%,oPbYgbFX@mK<IQ:u3ktGPS[fPZM$)3H]'E4G(A" %QLe%Rf74\CVPm&u#>D'#hGN\n@(_^f'JU,ppln5E43<UhiX<;4!CEpHL=l(h#%k8QbQYZ**i!F[ekua]U(ajfMrk:miE1f'<rLXe %+UF$W&@lFqZD^HJPJS.(kR9seLu7<p=#tu^_m-?m=&9]ZatXhC0/AW'$ASqQ9-7)`i]D[1nUpc/'PITt49_+f1+H(n?dg<hRm>nk %\VYk+*K9QGF,1su",mCQTL;YMK=4D4@0UrfqVmV5OHr*D?>7I6)6hK?its&cNnIsX2+hp9OQL0)@h:Aq52YTZ\37pSnd(+>)?hg> %$*YO8QKL1kKCNAa'-bUJO&e%e.4^1(G#Xf\fWo[H2DL\YI6WK.cIP"#qdG$El>;t7j]l(UYo4hq\FXd3P;%P#2Cl'A#Ve!OneFQ! %_<>eH>TdW3GMnQ6G[^lG$PO8="/'EPSSA`h:efcs4Q9e.K;U3;W(j97KbHG'q@"Q'iCm+*h=CT4BRs2cj*qHD5c"DZ343FNW604g %MJ.PJG8"/1T&BWd"^8_9r;X3=J\OEY>,mm9h6"C$LE3>aoukL,mR(@]O+.%G>#-bMFCf$eqVB!UC\c,qrbogum(O7<^WVuB&+T*! %4+i%X=^FAk2^b/@f\c5"?PEjfAfh!IN8u*?QdA<$rVtjf5;*_`%Mk0<oK9as:jQhKQ*Q_Wa75(;8"nE'H>:7i1#;\tAT8+C2a?S@ %G$Y.5kb8Ims8#Ngmb:'NrIf_H/l3D&8U\o`^4LjC5`]DN3"Ddd.`"ON`jF\H$(Bc\RP7Xqo)IS4r8ZmsX),EGmd.OAD+t&+@S"]b %IUDl8c]Ep2PHV?KX#9(-*<#tGga99(Ut]HjH^K#KE)N8ml8N^P_S7BrpuBE>&ERqRSUqi[O0q!a8q6TG@J5s6((,NRdrQoFpZ-fW %r%b"(5B$DS;lsGCVt3ZJ55(K>*OO>(F.]$gYYb+Ca51+'Ie,:lK3[UnGY?<3pY:+TT(&=.T`,)ciDeNp\ghHjiUM+uT@(L);V/WG %2%(T:/%"X+'KV2fF2@7]L$R]V1"QkT9]a;pjrYW?-qp?!PqP'KL6'tIs,p^TSTS[#!HZJik6r=eFmaiAQh*^h(jc'(F"b?7S79'A %d]_QMP/DG2n(mlgST+4F*B&F2?<tU1V:tBXm2Z]hS27;a\UMhm^3Ip"c]K>eqqCWo*-'XSEK?[^eCVsi?U"q=FdGtCa=.[ZS3Dc> %pNt]baHL\c16G:tR;ZuroBk7'e9p;S9Y:;H$b<a=2X@+?TSUEsF<*H#%^ioD^%YRe@Hhh26OP4rRFN`bQc"aTbu=*M?SHWrbfKs` %GE.%W,Uit!K.Q)8#u/qFcFs2(]DCNJpp.ME$2)S4MjWYdirp57g0]0T9ikUE%]'YZY,<@*]ZN(WA^cB2"'ma-nH2Hg:j:*)n^%^\ %a6:65(L8cplH=s)=)W3:1X$!-Bh"fCGirmtU@b#VdUVWK^2WpCi[5`AVYE(CI^n=IU"qIf&>dDBIdJ.3SpBF[9.9>cH-9R)JmU3I %Af]bgHDS20f$CNU4o9a-?]kKtKN$H/D;)Sc"bql`bZaPn_c6K[$Qg"%Vp!Yi-fbA["+G-CeVH/)NgDo0KK&#(2-\Zs3NcS[mj"l7 %biQ:CncPB!2<LN\Zt!dj.s^%0qC.pqD>f%a>?<GKs5M%:^OD/B>Gk[\MGJ+Es#d!-:(R;hjF*lZ((rbr\&V@Z#JSps\)\A"UO2^Z %3&/-qZ+b0Ls1UPWSp#$YeopLdjFj/0.d+e,o@C=H7N]qGHYcu6e#h(gS?/>;iSD0$kj-3blME_C7.[d$`LP\LDT^kErOle:N3Ii: %L1Nf<*F"iSSGcn'j377)D(]h^D1*q4mb2AmZ"3?J?Yr!6J*r5-0$h@$L-C*#I[ZF8gT+9E"EYYrX?J`ol%,t?9eTtt/+f?Q=MEKp %T.HC6S3`ifp785pk!1T2^AIiYH\S+m.(sr`ZLkKSI*)AY)d^5PdPK(<7pV(Bs8(n?^-AReo7:2:f">tJW"rZsB/\TEm&MYohlrk2 %--!Z)?`m^Yhh6aTo&n3DDtqt#mpEYRjZAb;"+1q-J%9^FLA0S32Le%\`T!4!V1*YD)91d%mX93)ghW>_*e@\'r<3uWN6($ti;+P! %jC*9Z>M.ZXhY#4-H0o@UY^H#1$%TUI!t#G76)6t80/"K:399g:"B28Ej[bYHD,]"nXiYSh.EE^X,3R/,f?;tJT<beHX4m0Ojl0*7 %XNFF='h,#M#ZPdZQ.2m=OM*--aPn1YoFjeM)S&<3nB6kt;;"Ro+,@1-bBco90Wc9a"'@g(+S*R/62*O9YEsi0+rAG-<Ml@/3V\%S %Op4M\5mM?IG=KDAeWiM4pbOB(IT6dg.gm`R/6W<C.g]2@A+-Q;elFL*Xu'0SF!qR#Wu-Fi*j-knOD:(/;<Wk_m]B$3d5\MgEG\er %qqn(\N0DF'RtYOQ-ISuC->`O3ghk$j.RY\"(?3e;84Hd#(/>)Arq=hL&I+q^f-=<N.moi,-A=o?j'4Y;6ree5ZT6G-=K0/M2?D&( %*e[L7)(<:b'4Wt`R]t2+J\'gbW2!9[blXC;=q`+;MmV!#*^iCU^$O!3mm8n8rg:JXUCGDrc`f24*G<el\5"Kkfg6_#bUBVf.:L;& %""Cim/']qSi`J@fk_">[a3c*FR"Ukq+(5srkdg3&AJ:R.71_!k0l$pON<;[A9djVCh-D5F!7r&KQtDIo5E823M*5H:OGZee$HGI= %,?8acG_7jYBJ6C6K8O*RM<_"eGW+1a9KA4D7hXsHg-jdMH0?C"l\\:a>R.u6mul[R2$Z4Lj"_(f(M18kGK21_//h;(>Kr>N0ags$ %.7D*!9h!W!gOm1:&Irb[eLZi%qT+MqQDGteMTBpC"]7K/&pBDY%J+V^$mm^hQ7!$-K5s2D!?5^-%9Zjp[.12Q;eEKBJd%pNp#0-c %!*gXhAmaVE,7_sSM&u!.E$EIJ7g)Q.Eem#K,4AHVO&uS"U$kZ]gg9^B&0[576Xnm9@DiN!&/aufEF1%)X]\U7PV*cDXs?k=),qBY %DF+-19I<uMW$nZO;1?,VWEXH5"18GWj<b"YdHSet1\MG>&jgb)91:*Me'@MBW_+)+cNn"-M$6Rt^?sRS;9E$,[YMF;E'_V\TstnR %,M,h!0Jcc5)%d(jE#+IY`mJ3`HjQWWSqY7F/TD8T2FZo"Y@6@HIRqC`DX,3D["g<X0&B),8klbRSA5MX1dr#[9FF7MEfZ352^Y4A %Qu\fA%\'QZaB-WW-.!:2*uM]6:B]5^#Z(]T,=0pbL_TeE5GU$e&m,B+=sY1t1S?+_7$$LbaWXYT"27n_^S+(kj:7=8gLUr-pZ0AR %]Vm4d#SeXN3gao&^!o;;`;j[AJE`b?b#FKa1'O%K2'\MNGT$p?8E>+uMA1J,8eEgaR[,rHi@/7S[`qWLjMj&kOUB/U1aj"%/.&qa %lUhQD\9@59b,Jfb3M3M/iL0i_*-n2=G.GJ&0M<%/>Y<ujnq8?k4+<jI&%\d&8]s@na)b&qX3N,LGEa'uQM-t/--2BiaSIlibUo+b %/!.:Nh+Ep"Z:%k.P0E8b($gLU<YSPZ^>/#TY_s`p7T*bAU1(4la(G%&+pJoG9'DF/OF0cg"]HYn(Q-:tULleY<#\i&A\0c$dn^UZ %AJH>0*#T'IW'EpUjnf\<VUI;N$AC$%(c"\$mj%`r/@2G;*s36c`[#D6XA!F`,1SVJJX)0/Le)4-Z'nW+f8lUQ@[u.sbh.Y&/)o%r %JhcgY?8cr]P\%br9GRi=b;Y&KR6%Q_[Qp8*:`%)+U,$93WGHi8;CEYJAXs$k%)PkFE?S+,XSEV;.:6bbPZ&nGCdBmQZ`#!$=&FpZ %JoD`C&OC#&q<K#-n!8)3`^CGQ"UW,.#_Kpp(WOTf(.Uu971+Q?/-_o;Bba_d[5p%!GXAQ'SO=,)<tc5^"r-nNZ>G"s90lIAM7B*D %l1QP:nV#Gm]i[m--:>l3d=Q%?"aRum;M^hHUrOM/\eE_N94f)1/E'-qfN^\MG[p%.%_B[RXO&,<-`M*D"DUEKkd$VNbaP+<",q%+ %kj8N3:4VNf5#fgefuMr$a=Q&#qC8ok1H?`segM"Rd?k-DDfS[DqEj,&>VTk*X:/sp=LXbf#:51GAllf2c*0LZ+qgq&UpZ=2$mDIi %n15]@0i#.#$23/[P/u<P/eM=d<(&r<X7g-0II%44Ks7qO%l-uCH@0-<V#g]-*T]_L4iY[&LilbCfRi]*KQ<>=$3DA/FhCO$Y"ZE+ %/$=KNBgkVCEqNE1$lE2KKOE8c(04Y.$L3q');gj:ar2[SlrofPO9gb;l8u7MI?;#A;\iCH;WeeRDA'+seHERSP^H'oYp0+E:GuK( %Jafo=RCK6V19ASq:pDQ_,`*RO&TjBD\qp6Wg1;#_;6oFmli<]R"?Qma,GDFp*u&>"5r&('m)I2eJcVP,-*dg;m[-^UbHg9n.-7+n %mRgsT-!:FacbSm)^<\p"eHF-V*GQ5Ej\Ai^R:_148N>c""?NElD\?ZK!iLX`_p4A,H6cs8T\D#Y)hMg\[V)nfAm?O5Um4R[N+0&4 %j^e$LYW+SkoL*E!4SarWg0']nG3na"))k>[(8"3X5CCOa:O<).Q]isgRfq7*5r[r((:<>(.b(&%)_E0sIHk!lD?q,LB!Uo//007E %3T$h^!O&=*H-LqI4ATpT4nV3G?=n,'LbRG7U.)+c&D<Je\;^Z*R?CHZkG4(Z-^naD^n4$`R=,A2&^olC1=/j.4=S\,1X\OLF@\_Z %<u6E#.>Dja<aCR:WK4`^%RKmq3?1:"5p.h>K`Vdq8Q\Ht>A\d33jpOuGMV!3]6NZCi>^Ig1=0jZ0masN>7lfuMVHAcQRdZ89)ueV %m+m?!VB>"JS7m5/@/Dh"KKu]6cEep/f%=.#:D?s!/>"R\.@^"Yl%D,.,QPtQa`9DOJWu2EBr/FdSe0V%Ehl<\@]h=7\ZJ$+.V$K7 %<@D'@[$c^o.ss:sM9cNSTQW91on)I-G*hFbE^Ci"n<J#)8W>]-*-%]`ehmeeD3-_Sp]jtVnO(OCm)=/r@:l1=e`Utc:1f@)KPQ%@ %2Ej#eSg4q1@Wc89EO?$]b5j%8DkKiA->gdA)7YfQEcdQ1Gkj\9SckL\3'$'"A"0T9-+cgMU/#I(\q8pXA%(\p@NkE?[8.D;8$$\n %Nl0F(ocsc'V:7)tq&sp7n2sP7A!7b.TXHMo$J<!\69+;oG2>3`#fMAV`h<U/dA[<r&sBqA,A]7Qp(OJar(O'"L!-#ReV%$],QKd$ %WA,3N8p63=J58:1^Gse"7!s5!@nt=Dicm86ND1,MEf`7,PV$p_-G:[f_f>5k<GIG>48Cq+@ulTrD(&N3Y/I=CSnr$'J1G$.cj^sX %/eU0kGUF*e;.K3XGkFSV8Dn/@*PI3*X2J*%lo7n,OE`+Y/5je1i_/8=A33?;W"^A>8t++8,;#B?9tG.e1&n1A11p@#dn.[/*/$O0 %OtCF.bsFh7a^3L;bj+Fc>*.IVaM'1M:@u@&T)(4M&ZrcpZ`dVmQF+B-3GPk.MI?jHEp2S/B#$6,,:SH^3E%*4F\WXRI%3Z?*1EHq %dOl)(CM%3Ni#F_:dnhK-BeGbN&<AZp]171FT:N"?#G8nQaj(T(>dJr,SiAOJO&GL8EaK-^1$cLt6J'Jr1:1JGY^aRp'&#<?KOX/. %QmrIo(`IH#k+Uo81Bs0eQm&&\G8Yr7D,mnmf_$MP.+9soZ*4icDcp'h!/VI$"L4rlam9@5N@0Ql2`%.*X#f3C.TD(^\C=bl`mKeM %T/Z/AX)aeH/E>gETVtb[0Ys*t)q?X#?H$[HYbC.K_,u]!AiFlZ&=Q-2V=+:]W]5h=#uK1q\bRJGO:Ngab$c9L[[tPgk&=c9k!`bC %8J%R:e!>bge_)LtE_O@TNd6V3d9o&fEe#Ah@:!l]aCM0[@gV*<l;Ylkh&@'EmC1$GX5E+3d)$g+V4nD=8"r:@F.cu:jG0mDQd^Vs %9o\iO4t+HcD<S<'BFL7fMHoiVd!8NsK^8j$,7AR!9,rP/YpX`WM)qtjLM@`R("*t//&mYt7IUbZ.q5O/<)<mk(p[WVSh&,erbabL %UI9-$CFS32U,<psSO?6sOj=upbQf,_5h&t/art_,()!kX:Jr)]j134an0qhXKlu6LIX3!\k>(a@"33@[gg0a#;hYuPNC$1fb8MYl %e1(3"GWnjS<SWu=6%.jt8u4L$60/YJ(.CiSC_f%07%/C]_`W-XOSX"q7IqCd.=A]7]/<-"p.M,`#bZfGe]siX7#+72\B;o9;/\N^ %=0`f4a-XE':E#)68l!WC,t):=Pt5!#A`8@6KBpRG"lsE-)V\.(l_n@>V[BFSAI:#;ljG,6(?c7u_o#qUm<PEE,Zncfio6K3,Lt7N %e1r-C,;F36!$'VoD:+.AZf0\sEbD3YX"an,+k=2W3-'(7?*Oe%Cf$(MZfnK2?qd?o+_4VrW(P-f$`G:\EQ?GV-*)]D]>itug.(Gi %NBII?Pe9dX@t/@sn)dTWlSNi3@!AbP<B$^nk`AYoqc/W+k#5:?OFHjk#XHB,F`Q;U[3J2m%j0SLeB!AqKBkT/);]f*nCfVi_fPS, %qEWm;+a+sVGk$k"q):`E8P5IiUP9:rW3>Jm41q3-m8$54<MoiFG:>8%ZmYPYNH91*5J:i*_0mo0!_p<&Lp2oY?AV$X*V"-Vb#9ID %"o*W&GF5:\I=i"OZ[6<V3Ka*H#tmeD(gb(R!]1(+!B[F5YK?8CQBO#RY.ZXM4):&jKeP[ZL9#KP-TVCG64fW>8H]ud+35]G=b^`W %?q,WlhSZ%-B-_i'*<*cW7,u*Bec;>-d#?6SRr8[g6Y:]\$C)_\=&;I#is7[RiP1oO`8UrbOXbG^Jb>CUn<bN-4!Mr_qH-]jkc=DU %^j[jg[:M&P5cPB4^t!:VH<+7!@/YpAFQ$*a@lkNc>9r.eH63.&=MB;Dkkoh&*"IKlLnE.OD&pf]Q8&:.r_eBi;"HIQWuS&Ei.(8= %:hI<l'$UXa0c6<gZ]-_o2a*BE/e3;tF=7:);<T8rB7h1RU-h7"Jrm[Sn6-&6]]oQlo-bI1n5XV6S9*kgrptrd3'Jb,+p*BV_T%fY %)eXC\BZA[;_OKdU0*)1W;C1l=J$^;R'90RLg5eGOGGMA2I55'S#sIMQTltsPHD[#Y^J*Wi!?2rHZk0'_QE-dklH$&j&qj.:2nR\L %V=cApX8EXX"aG,[cKI[igHtd(TPKYE=_K5);aUdF8ch<D=h\i7#[.:h0=1op5k28.]7F*taCRl%8s_UHKI7%9"TMkkYnafEn_1q' %Eo`_Uo^K]93YHhjh/``p_HIG0&cfm/3FmoIXH#&&,LpcYlpGb:#DtTdGFI=qW$NOe@9N1'[J7Ydd??VV/]*@Bi%/C.L#G]Y[BJ"b %;r0>g6CEr^LJ%LXl^<$]WFS9T8ohlOO6Sp*Trim!.u&TYUsG=^bAQh9:7D9p[Ys_lpSsH#[8M8=qq8n="$#nJj/:HW"eV>-$'[b9 %"NY5r*!h'K_Y9q@JG<j2#kt)nmu?OM/@?F[i^@/8dO:OHcIC%E%t+Wj&rqR2!Q;>01Z6Pepd0teDNVhfL0j5&OW>q$_$iIW#O'i, %l=H26A>KG:_c#W\e<@>cO57a`o8Lj%?7-@Q?J4rag@Y^64H`!ljSAnBTLNNu9hs@Ki/'G!NLja1dC(Y;]/3m8-K`O.`2kkc*+cGh %9Rg-P2lc3*a*K.hK2#-3L``U\%ZFqLqnRXEHb-Oo1E?Bb-d#L,I@),2aY'%u_7CsNPP]s]cDs]X@`EF(VLlo&P6]<A38,SoS$Wug %Gk/G$C"8-KH`CE[aXe-[1ch]cE0E!N+AnV/TM"!$'AI(b"hTt#J:)1KE+/8kgNf>&\H'X,n3\XT38BU_!WNe@=!0I@g<LR_g:Pns %O(?SG2uk.KU2!\%PFL94k]1U@'B@/*6J8E')[0i0%nsHS:/AlgO7b,!8ie=;Zds"g!d9!=JIOTD;]d/&]N>SA_PLudaSn!GZZ\0l %!7XtW;,Yci/YSa]AR'C*KePd)<E"oA3L*B>2j94fTp9'd%\HVV>=;/K][]^=f90"oWG2dUU62?3\.bg\-3rE>L;Qkp/O#-Ue;-ma %1@?IRAUKpUe@*40+u[.`;%CMj>M&.]nMUf4ih_\f+VJN9jc'9DI0-POg+Mum&d_m-c%_V[rBS`Qa\?0@#s_qik.2mpq,o.N8Y"#- %Z7BH*B/>NB$?3UgZ^i1Y2r_%Z_0Q>Ir[>EJf$[1VmZC_JDUg1'b;Xi)/8Z9+"dVrM_d%9d=Kb:mA6kqUQ'e(("ClV^(>WbCepOX2 %`$gs<QCN9005%hmEJ5$=,+$*22Ks*5?+F4`l_'9JCJ\S,Jd%551NSlY6t=V,CQi>to+HUfWB8TuXHEcnOQjT&7ETj54uHfQ/O!B# %@$GN'rS5E>bGlse+C4tQ#tEiIUgSkgL_$F%:Dfq5h1_#g,4T3+4AS]t9(QQW3[W<(FZ!%2^hdo=UR9g-4'%.hYahGZ_ru2+Md^6L %B-=un9pRAPk_bKs87#%:TGX*mjAFhJGh/V`,WH(;,p5CE2>,HCqZ9@Mk9C@SbhX3mELMCnH):!A%2"G'2&Ug"1/R&1*K;Jr],0dt %QT/-]`!W$a6s].-Ej5=F-rhQ+OX3:+q8AB(5Fb$*S64!?Q>>b6rE$-)R]%Sm&Sm?gmm[/4.r]!PY[Jp$8'2P--&[f$(.lA8WdHd^ %a12kFgG8)K&igY:6DeE`O.-oS$b=gU5-SN(9)F\M%r5^MOBj$BZ+fT-#m8;ta@]R0=a4n_+eP1T\]u?'So/GU;C#(rCuIq58DK?U %M!e$M5f-%R!;$XUcpQk0Sb1BfI&nYc>eUll7%cGVXO\[E%BTXi9?a7WZ+=`;$q7n91f@^GN>QqDC,>AGr_Lks8nVqOPeig0lrti1 %FR0@(D+Lrg22'PjNckL"Y1W<(k3"KSV<cXpjHBsB>\;Hu@oms#TR8g"0ilqZ76jp:6YWnl*5O'2BAq$o"[As'%kpB;!@^lO?8r;? %BJF<gEu>O4L$nW9-,YO-b#KWNb0NU9$UBAi0B07IeN*N#/49r(*X=<CM?KrhTAhD^BLg$:Y9V_!.?sX`n#@(aHNa3qcJhB<<lGpA %+1/MO/?ig.M1kOnfK2R!J2\nc,IWL9]B@7^B9C.e&K#D^#T^/r(nLj8CZpI(9fJSr8@Qa+(TDPu&50rXATP"BKd.uQ+0:/e<,3I0 %4O^+s%%ZZG(@hd*Qa":kM*VpBiOb':A=#g-JK[3PCj=o,J/]F1FOZs6,TY-C(-!Z(fiWD$84m.s$R2rKFi?.YIQk0B$k(:P7#j/k %,!4kJBKE)pa$<>ZZ:J8@fSX9$&ei8"+ORHcJ?mG*Ae@ZM66a"0PV!-0+:$IcVF#s)D&uR[a+<RAH#(R?^e_$T(c.XqFlf0pAg,CV %0EpK-.oRJ,&aL3R+pY34(#iE8=UM-)+X->8d]Jta%2_K&qeu2Npt#C8T(?4=:,T&8!!AfrDT6M?F\MMJQ.@\8_W1D+qB:t%m3-#j %Q,!S:3Yq%J6U_QuPCZUdFpXU(=[X/4Of5K8peE-(Wkq53Vn42+b%hbWHo#]Sh`lKM:K^ZNd.7c<[&(6)S&a(JF%D378i45\H?$D= %Oic-^S:j1s>Brkh1K(k1o?OS,qJXqNr>u-2lA&G`*7?OF[XY9+\gq$<M-66ond,*Ys21IJ$(C-ICnhd[j(`C(BOgF3pU/T[pGJ(N %1T](2!$bqP22D;Z<%2o@^_RJVL7SLYjCYdXM?Qd2-L-9Y`H:#]Sn`jNq9!H80uAS:_f9hXn1@)=8)b0BWcf448XM&\3?_GI;)rE$ %e#+%$(paWhJJ^7Ycm):g^!Zo]13(Gkh\kB-3^8=A+g=l?M@kicKEdg4G]^h9jZ!mB=Eda7]oJ\g_G8Qb\Pu:D+J7*[=]@"]UdGI3 %VALF>%jP1&)/2JdXBaKM@0eQR&V]r:\8E+&ql.H`9[E8(:3rm3B1jO3REs$a!M/E^R+Z)%SXA@1pgk'P7'%G9``Nl\1e31SJV@T4 %!I3nZb=^^(MJ'Dgnl[mQ:<tL`$md="Y.2[:H`+'_3:%Fof.HE2YYKbQZ:spR"*lkf<W\/AOjHLfH*d>iI)YI61"^"f,)R(IbIH#B %6QCdT3;#UqB5Vo+*f%PWB1#NT!+*TS!\p4/NRBBuVNPo)5m0Q,,TP/aC&^n5-u^"i8A3Xlre/)9Y\\Pq"mcAto7-r#4aX,&UEJZB %=b$M+00rPuAZ?.mNX.&[E!pLn"I^kVnd`Y<+[h)>T?&iT;_siP-Qt&:GCdW$@Sho$J77o&INho#-6,RqIh_sc&;J/rji=)OJDmA% %`U\n_A';:mc^(q6_dB)Y;b@[3l2c/\SMmMT)os2P`r%`18]jb]]bFPJ'3WnALijE16n(kqRtM'<UQiT#J5;gQ>OCL-ipSEg%>1]* %e*+YS^p>0&a.&q4/ZpnZ0[^4l>jhLj_Kopt'@^/RD\*d$e$-hu:mn![kYIV0aGBE4-d:0RGYHi1M-`ICq@RoPSh*3?N::B[i53LN %)c-A>+q4SUKFjqIp)n>,/.i)JYGKL,Yo?WlQV]ri[!-RNE/Q]8@dt_m@B^Bj#GQ."g=S=])%b$C$Z)bEQ=u4Ea0Ek]V(LQn'2/E4 %Yp3;5#fmL?Z;KoEA!VupZ#gW*-m4*jC+J55RUcd!kY<3='4"j'DDgtg_9FQ#TE:<*@Sa#2On&q?HchM+ZZMc=HrlB!W1GH@%-q2, %[>7(g6C'N5>'@tT^Co!l2[4`4g(@Hd"-Sd*k*jT\5XR%&LuhnM[B'-F/&^)JJd?BN=p2h\8s@Y1+e1YrT+H;OTi)%o97/$;budbe %F,`',-`..X$XTgTg4Z"<A[k"j"3#<aj+m.V`7@;8$*"&uN<fh=;%/RB!$ONadTHXE*"jcr:Qu,4)mP9dM_s9I@B_eP`md`L\<H1( %(Q'/,F<drK%-IsP(F%[n.+hMLQ9`n6H?-4X82*ArkjV/D;t7Q8h2g`*k/VY(+q0tZ0+],h-tK7>_dYq(K>bUO.&s(??F=p7P<sB$ %9/`#08rYT/;TMFLdBZPk)332l#!gDg1@Wi?JAE!-#7\>t@b>q<`_t-UPC#_.d<;!KWsg-_oS%C&&G$g;K2q9B+LI=d'Oo,faqoTX %FQg5/)bmH"e00h_/;L3&[eVBHV:`epPuipGJH@+H9gVC##3s&]#sh/r%MA!<_FfWG!"P:d4>shk`PKbF.SMJRI3PLGAu,!/Eb>E^ %:aJq'n0:G4NfApK!1L-!i;A_J4X(cAMKBK=3!r8.IN/SaZ#6NEPb(LTWH0_)758VRQ,ir]Vb"[^"=ZnP4',ZM_E#T5>9V$bVlhfG %V%gT1MH<.gW]4N\q'=5F0O`4V=42Hs]L:DO#`40<D^m2PV"@^SK2HH=#dE:36^1L,f$td8rkhQ6ln39f<SeoX/Mj!<*6"0k5nl^& %`+L#3MW'@9+RS,-j$j.jV'ebHQA`dA%/M%Jrj(*EfT;FK%a*fsR&[0E/$aIr`l$gbA"Ok+Pe.JmOSBI[T4l_%S9G*9o,VCBWR,#< %If+m>Pok"5,UsMW?DBL<_O+Ogia=NZ4mf8:VF1Uq/a^(5//,JoF[='1DIpM[0bY)&$S_00`j'EPBnOC<;VD5(LiO[K*eM1i_\--/ %\QAX54O^tm%m]c0-@!p+/h>4)*P_AU;Z\j'ng2)KMNurgX44O,i_HGUR-AC,21RJp?i?692;>_((n^&5kVls7JV7m)c]kZD1h.)J %S\nX!E:X,1B0T>?_#rY]nM6CoR9a@iZ;tTf@?'ORQNL,(HBLRe15.]2(L9fFkYNE?`.Ord>@oBQEoK1GYEsKKpcj2sM_cJ\MO"%, %JKmf/--Jk)n/p),,*i_'6k19gn']lViZ$9reHKg@5qeJub7dFFkGdAV:n"EYKeJVqA2k7T5\#jE,,Ya!2YM+0TdL82W-.3;2H2%A %*@445A5oWap(T:.Th"5,>*gNl;\6(LHuI)'aZQRK'W\m]Y`42T'1nR^c[KnolNk-oTPu+#7IFJo5/rPBM-E')_i-m\Qar5'M[j\^ %4GZ-3Kl^EnC/Bo,/cb>%eFjeT%+JCSAUlYU;PCS))8r,NY:5&5!$N\ZTp[$`V6lrc'B3R`s0a"(JZEETO)g7,0@L`VkDC)n1.\p- %:jiLF=p=#Pf.G=oSsbXRMIdekq(ptYfKn"b#ZssFPB-m`,u/R9!&5-<V+*2Dg$U2\2qJBp7P*mrJ[F*=VQi?J50R!:^EbnIPB3++ %Jd;1YNK8@sb\L0#m2JppYs]\FJsD9[&gHitZ+BlX;@(gj9ORDd,Tt=477=ShI15XGoQWQ,LrC*!g\Wg(&ju*M0K582!1kUqS,3eu %)"U5Bg_'.oAYOf,;-#>6?V1uk";OpBdq3d36X[@,-05Gp"!+BR6KAfll!m4)p0*TM7T-`T/LjStP<D.NJ:"qVPK7a_`oUM?aSC$[ %[_*EmdV,&HZZC_p#m`+nJ#<%]JAEmu@UUr.2k8=M;p_>&!o.K?eg0EDM9q.WQ6QU?#d=2og/L,bk@dOfnq=o`\>r"YQNVkcTO?%N %8J&H?bdF=CMTUIl'a;RNJlt!%GRQ`lFL=A;33ATf.CFK1i8ZM<GF9e3:mOZPGioF69+HZZApQ,eK.ph$;>r3:\6PA]^"BU0'Ki<t %3bVDn&BA\:EHimUEY'`^>,XPmAM*LPQu5.tdfC*,'a'\j6&5OTA+5&K#S/+)L13,.h+3?u-E.S1U0.L4["^/WU<nhI.Q-%P<;27a %q5aC\=BWb&g*=a"/:D61fFgN>VFtrA;k<9s@^.=k,mAfZ/NT".Z0PQ!>s^Kd.*KgEGe\-<;Pc/nQ5=.mF<l+"b:5onHjD)]-),IS %Q3)?6;Bhu)p:t*lTk]9/H8attA7hthK_C'.M$;fHQU!#TMV20hj'sEqFY%#+$+BHq'GT@jY&-F&pc-5-QXeiK*HcKI>+Z(U6ARS] %GWCh1F(o[G6UMi@nRmNHX[bG7V82/JR'qC1DE2/HRsrP/CfcPqG*eeK+9jga2']?L@bId^F:n@mTJCf3^_s`g@j#kbNn>PV6:sO5 %FD-3R2!/-+,&m/5?-:Sj_=)L:N^GQJ*-Gf'`_hI4qt==>/VFdKih5@dN%ICJ:-gA*fk'j18n/lSjZM)/kE$6pL[7rRqh#d%c75OO %7F8+;66I>&^93chM\:m;M6/Qa!VNLs,E"eee?`.s(^#LO\jRI]jAZsLEkhr<H='Aln<PC.%-)taCjqenOQaFOpjs#XYmCmRc]/!k %Fbe^G)3HW+EdbN,rO-6qJX@B/ke[rO-:M`Gm,QRA^46q`\6:lCX?sVC_&5KTm!-?D<>pQH!gFm])Gj\0f_<j7".G\J=mFFC6jJn: %"9<k0=-k=*1e1%kJJ]aAY>#Wk(P])G:QR>[86#a=P=0gh!3WP!#[D*g-pfcEF9EL+eBug!eWTA6dssSF=?'Qo$K,T<o1#RU,4Gk< %1+#p7Zp=O7L(YGhT'jNF1bMaO!]st-Etmjn4a\&.?82Q*5s6P'-LHBci(KDZ/JkDIb&-QMnIo7lAH\O`%5Wf\6]83m!k#p.eH/57 %:q"u3K-IiRMJjQG@Cr,Y,d-e(3]W=q!)Mc$Ns)&ZAD,!_L]US"f:!lWNA,'k.eA8/MVUTM>dWmOQN]9S?0)E3B]V>hYXM/+:Fg.S %*7&<[H-.q'a[O<S"3))>4CX0o,T@Y>LrE=g`^8Lhj30<$!f<c]FbRbW+<nH5VAFB(V2cNW&99K8e@bM=E0&RJlfnS[8YD>@d?Qh$ %o0F5$$'s3j3Ht,tXm*pUq9>3#`Sm0cSr5_90mkjU`1diA>o3SC:F3!'m?;o_A>?epX7do$8Ai:`$J_%O?Q/#G6B5-(XIkQ?!RVJ; %+H_T0#%Xng7Z*:U&D8eUcN%gG,?%*k-j&!46At#>?OtsH76-K"m0]]s7Mm@KY\2t[fl?Y#MJr/s:Cn44,XV_'b)9$l$#Mo_Q\W0: %Tp:Gub:+bjNMWk>7,2Cp.qmI8_2B3@J<%m"Ot*r20:,ZiRdZ@/<7R8,17@i73O#@n!iHZ5LY5*G6@126J1:PRPh@RO8=<<5PiOCi %;rO0<-(5cJBjh-ffGCP--_Oe&L%<lY/-t&J$0$q>[cI46_]MIk,,=4ODj*bAEM@"*5FaQ0HDW[nA2u\Wh$e-mX'+G=V'6?6]Yq*M %'C^j,[HM*SkT]!\Lb&qnq'$&Z-jsK0Rlk`<-Hq6Bd;<e.eB4<ZQ/M^Sd"..X[N&sW%SFfu7`u>O'ql,&?kHZ:Y0=beDH0F4>iI<J %ieKY4nSi()DcDFS;u].J+hSOhES?PC*'h:Wg9E+JShM@pi_`@F6^dKI*;tska$&NS6`QUh0t01]3[u_8Y0&Gh:so2oDb/PTMeRml %f;6=nK_3X#T)1KVo1;]&3&+.\rf7r9<G1Vl`'lr,)PjAV+oCMc[XB`uOD2+Z\HqB.OF1KfjTl;KZin&K\]S11)^QB$0G.&>5*$;m %N(V@lCuVAJ4#rEuTZIB_6'@0U;OM>Vbp,"$6F#1-d2uQt*fuC%7qJCpI!Ua8!LJ$"jl[EtT6pBJ8**[3ZL\aTT]0ZY`H.FSB/lE8 %US2qjF)uKIT=S'A8.Nh689OgfD[?;$pW6r<Z.Hl0Ddc<D!O$,c92K53.c[TVa@iX47.L@R+@k7ZIRGTSO2>2!88?@+M4?#qLdejq %;ldTp/%")K.XED+SZER^Z":)m3ZA<$mcZ6H$;9n=]9"O'Rk$Lr9><1P@TRYq=)a.7N='>^c$%LeDu-0=0,u^=!K4E17Cb)jV*PT5 %i)SEma<r5%:a@\lf&i-('1AS!8#qAf'j#A@F@)G^KrbOk-gD!bT/Cs9_)X'La@]hA,sJI34fAWa-j);:FED*`LC11sV5(*TW35(, %Y3>lI108R`=)b1+Hf+Yp8tPkp>l#c7s13$dF!Dj_;h'fpib06J+Q5$be7p2Xi^c0Nj9$-M1f>s!fH.PIY1VgGH8""d/#f,M#8#/& %Y"7RA9@S?L1HHcjG7r5,7aW/X:>.\sPpTVcfctKP<'68oeus=G?ZsrVa1ed0A"WuA6A`=Jc?:=#[1l'J.V(/$qReM@PU]6^@sp8( %op`XBi0N_A-l+\^bE).].Jq">AY<UH1W^[MmP@/*Q%::4==M-iFtW_:LWHQQh5l;$jFW&*7S!de4\8)TF""@Uoj>6cnq7pHc6Dmb %P`).lbbEJbCKf$@1RC_nkgh4XMY7V>_A'8Y+ELj8b(5N..<)rPY,CK%)8d_^GgVoa<(o],YP]LgP>)a/Hr%,PZpnab6UBY(N"T\Q %/TI.l2AP%`PoOe/S9DPl;Aqes#>9Rl_%W4p%QXhtU2Ua,5d6U;2IONoM.QT5$FC4p04h;BfIm@$B/`lt"fN7p:a*W)Z`"_$:ap@W %;NQNKX"&ilPQsu`$FJ_h<"-sK(r/ulfYd83Q\C/n$mMYbE5H5gQ,6HL#-sK4]LWNt"(]Q+C&4(MSV>p"%+;*hcsnMhbE"(km12M, %@G:gT!-'49AXo\cRXsBq-o(;`;N-QcTQAN!duuq)f>Loi60]qQg/nA1=#JrbZM>kBZrUmWEM=7qidb'upk0d.ihN0;6^EGEG9D4d %ZO2rZTB^u;H*3#p[Md\=.23t9M%BM`8&+i25d8A;K7U(@:Ma,H(Ad^;]KU?U=@R?O;s6U_7DqS%i3JXC;*B]1-t"d,4sD8-&h3t1 %h:OK/$YOG32sC#7D3<;%pub(Y%2mr<pqX]j#7g0/?-UJ*&X`UWW3_6<Q\9kQehG8EGLqa+WNR7d<1?h_%Cs!_lI=df7LZ6\;EMCs %J,Sl:Y/C.)66,p4.fQ]M[\7,;s5C@Q#7R\t4*qARda5/>Y8TI-l9A)Wm4-ofVlFKq7K38lpNLGP*EcD,rh<Uk-(B61M\]Yrr'6&C %\i/(s']2Mc<4Lh,ZnR9ZR^2FRdelf]krRHRmsq.%CBi9H%'&T!2gjQ&(H9k0]p(tI#MPXWenOWHKBI"7J?nB'!&#0q2rmfSk[?Ya %:fY"$_0#jd41Qsnh0r,$l(iGh)MS[(l997`O?rOkj\AtJ1EB!YX)Ia1Wj^^M9Kt,oF?ag/D4trC-fppdSHSsZc_:C!s(>CErU7R[ %qSV0+],\RF`;`8$p4)F_qXIp_oj)mKq5;8?C2=*+2Ru&op\H0N>nu(.:<``_m%X;IhWts,[/$Uqh]+^Ulg@R@ak;VA0/i-MoWN"W %DKRJEq8XH\Q%ln">Of(Q5%<[,Sq@:"2V.W'o%R1/J'^..<Jbql8;BYBAW[k4U_%F.0*RYKErQ$eKu#<?;Ng7I>9.=ojJM=m>59\X %9n$@r.14r[p<$aO<+X6K8^W^\XqNMCp[CdtfRkm>?VHToNuZVF5N8VbB+>u'l!X@C0aZUA+#<+j#R0FZX(ljE.BG8ig7;\(a/40r %Z!E>kM]E$\R*W^GVDAW#>fAX@lC[8Bg;tprWUs$]OgV(N%f4PO[3Gn,je"eD*qU&*rbgp\>jaJ;j:,Jf9g_DL7t'2)@hJFPO*mFE %>#f?\&*T%&-L:O.X?+)\W2_bdCg[Mj?U\n83rZ(XG26ngO0%h&2+%TB)`;SF$_NQ2n-;s;akKW>#Ck[)[=lT,3[.I^.fOof+:g^U %CE-VLc,"@o_[r'JI74ldhi);-"[:HFYc9TE8(;`rWZU$(?b]Xm2NQE1_eTL<ps1,$)ui=FahGKKrM=Au^nIXgo3aAhf?5"EPC'`D %O+AMp%b\7+@7TUH1)5d6RB)OOG5kEHCOU.@dSt_m7GUF2E`$R):"?r2i),Ik6\Z)PVo1h5LROWFL`,DF'kCY(Db/p(s3bZB9SX,r %BdT^8g=Q'@?=,pkdSKm?gM^IOQdF9T7b#sHQkFSDXW'9R[WsQgMLXr(B"Ro&,1',VboX,VDS6OC>H`pp%BofX"uGfBY*@T%YW@?\ %D\r`hAK='dD6Y2DVT2_["4t#SGKSkCglFfskruKJs(h)8pCg&_KteG^*=0YqOG&EJQlHOCZ,$Gg9X9Y7-L@<aJ)"]:W`rUS!ja\p %B@$P4=X1=8<*/LfY!+OQoSa+a:GFZ9*t?enP!(9)5)*-g%%!1G!^@2._C*R/&@>O*4&YciGh65]\nI[/"8O4<Y8,'A1f+2HDpPa6 %D!iquQ,SDHZ<RbnXFGM\'!DWmnuD2o]]rj1oaft\5F_',HY<+\c&X\hPFDtnK0=a;^Gi30$O[S2=.QoK<;b(H^Hkf60CZGTQHjNb %=MTlaT>P5Y\@/hp/:L*18&N90ZN=fnhkHI;li7qYI>IZL=aR+V#3ZN31hi6P!N_a]%>i>2fM+:d&J;Kh!_6f>%&(IY[`1\C)n`Mg %$_u6]df%#[A@oe>-BB_Id=6F2^cg!R^,E%b<8cMIlcfj+m?;gFr9%`N'Yh7cX@@hN!K]i=9+=.^q%?&1i__HYJLZ:;l_q$2,5X(* %jW!#EbiWG*_WZJM+n\q/#L:r.5%KrC+7[9$8g44PAuSJHJKeK=rAj5)[riba<*eBi^+h%s\BPsI35OY/kC!)4r.LCp+A:9,nL*-q %s&8Jr^0+*^AG;9b'Ol[8lMeU>Nq).OH`QsQZQ=/XcbQ\'=sfZ$.(LD'#rh%ZqH/@+Kh4d*9G(#GEZadN/pDQB\C&M1\dS;\=lB8I %P^AU`/NbJ+2ld[,L">$iZW+m[8Lr87o.e:]Sf;\:ZH[d))NPT*m/V:h[))e/-e5EHnUIn8riJ?3b4XQRU$_m.YZCLk]C',kMURL2 %K-mW")h>nY`A$9t#8b>Y6g@(94'Gg/?)41oFumSAVT\UEX7S67kuacp0-B<i.O-d,U>Ko9G+<`4/obARmND>jV8&-bs%<dFE-0:K %$nJ9(UhM>X_oS(WP1l;!QA%ou@U^eh)OVXSGB=)]5I\FehD)35!A4-&(p#0sIR>Q_2cpF[-F89!5nAlD:iH.%&%]q="3q_ocT+6a %U(f20+*s.XLV%Yo:IL4`Pa(+4PS$p^5pEB/A1:hbJ$nYC)S,^FjAE<Lr,#-]_c[;ur#<qiW.o`'8i$<gL0^LCQP$+>Yn(s$6C;C_ %K/I0,nIK$As-7m?jmL>5PlBRqr5X?o5MbO97esZ`qI*2%@a%99U4^iAldC]4p4%ZS+B>c8_`u,Gs8@rmGU5UqX<;fbn$0`<Nti.B %3CY6pnc(C=a5=]nobWH*;GldWKO!T"5?6barlCA:#X`!T_F;WN0(0?=C1%,/L&W4.DKAB\-5lTF9E&5,,l*Z&C]>)=4E"$dIX$=R %GPAu_IJf+Cpg@@F)9!L=`ElZ-mYQ`fd;`!73@Xs8^8$1ll$UnWZ'bP4Z*/p*lbC74H\:?;)!<9`;`4p2.S+](0c(VsCA*\)c5t3d %@Ir!Y0Pia2]6\s6%G/[?<TRrc*fMg4o-$<4K'1Qd9UFHor$:p%0"o5HWNF'6EY#="psZD'?6&u&FGhQ3M`W+bhh77,8gNt;d%\_' %<Cf(F0BrH[d\XfbqGQ**kmF!N$<-l3-Jdn3Utf>BD>9#W[1N1nDIMZ,j:3d%9[jZ(X8K^Vqd6r7*U#]\;apE+2"PmLNnE5kqhJ?g %QU?#p]:<d<,'/YM-m=\t(<3KZFIpbp?u1[9hY9u/Ca*<:aIgJos(Y)dlsdr".%Ag%BBn6G/+IQu^)A,m^GR,n9VAmO7Lh8"iLDh5 %!IteX,1SsKEt0>mC7GQN8e"r\acsd'YNh,[J.2c7@a#.4)CXga2(3]dNlMJB:G?'.Vp\EP?84@u6j42f-f4bSK*6f.6L#!b)]ZJF %CET9k.2G">Ce\^\;#D<6pMU@qf\[V^/D&tSYf(Djc7_u"_Nh<iT`U,Hh]!7\X,'8*;(?NZ?>f8q&dT&53nI('X[0e"i:*b2&h$<= %OolF0)6[BZ^Go$PJ&8_S4U:J_4P;<p<rBAacrs$!/FW;p!b[e8A/1+*8M2_\`lF.F\%it-&GCT$n.f.$5FGWg?Z-n_6UHl*4rTq! %6)$W&Q:E*TT,fQXp")7YN5X!,\Cn;#`d[5e"C;<U3TDM2\;1g2MjUgsW6"EBZrN[Ap>Gr0Y79Ja7)o4'YqZCgO>%dXGQfqHm/_]> %J8e!Y[fc3E!qt;u%p??Za83j9=#kOD&(Y1N`ii>gJ%rq3J%c6i,,;d<J+i$\jkt@0!rg0M"0"VBQ?FgD6tI*_#9!6)?ML:]Lah+g %[sd-E0+&H^qanlcRC_iWcq+1&Q]qB+Npq'rCfE_0"5"IF#91S\5\0fI?!4"_]qru's80][d9UUYNVHNDrI*=*X($!]fNit:%Gq]5 %@gPbefVf[-s'*Xuil?)b=&8Vab1PZX16'OpN4fk7ah57B68.t7'sAOFrYV(EF5Im'02u&=!2H'*`cU)5`0fH&Fe7ME[c/pS+HXj* %K6MnmQcm1:7^C\VJ+Xg`^Klj90D6YO?BV46MANg9NgJ[u:e:-a7Srd#s.N,i^GRM-M$^P:V^7^\C)[,91#_;+d/>I2IV.+"cO&"q %>P!Ap`PJ78^i+M6rYp(drqU.uCU@8^J9Q2R0^&@]1?j8cO%'rclT7#i+(=3&#iSAt-=IAj0fGUYMQ\j(JZ-=7G?aeSebir\fb/Q) %/gY;04*b2ZB>Yk@<)N-V>8icU#-UeHO&BD6CT8cIW1T+FhtB&+r?_B5U#/1`q_@q1&\c#EhRXW_n^c6-i%8$b.UIT"A$nf!fD_f[ %3MG-P\pu]mSj-9[.$1aHB8PO,mTJiE>lXQ\*p.]to&\%q.e9Y/?iHC7r6%-M1$bM4f2tP)i0'N'3sF;VD+VN(G:>8cRa_9d*rg8A %?cP<m^FApPR<Ju8Q0X8+.^L#gY,:fOjlh,GO%K?V%;)+`_I^rE\O%rhiQs+#?$%+I:;k"Cbnm4(&ao5A#dM..o5A^u7=rd1#_om[ %)Gr[S+-[c(TGphD9o9$\lp(RK>Mfb^><4QiZYZ>maQ'IOaeuGbTAJ2[:WM!krm;i#$cgb&reR8IHMt<Z)0#EWKqg.%^VB^&hr;N! %?g#LZJu@GLAGm\b`m)nQ1#[hkb)+![hD&ALmKm>rN!;hJ[:h/%6@!Q/aR]#GFc2bK!%EGSn;8,Ij5hTB:H.e=$:kcFo>Q?5naKnD %r4/ZOhhIHorc>Ff1@OoHP_6(CXbQ5ekV\7e=aN+oR4?F)AkuLeqtb!K/Rc\e*U)R)o^TI]27/%>TG9%b1;Uh_;n0@H7sDA/[nc'- %F));7c>:;K,(%PNR*3P3X5ud[r$7.mi!sh9a2?\ldU?`?mRHoUF`giodT"/2.h!\ON!=%XG_G,H9#*8<$<f%u%'nkO*4j]%Do<?g %EicXE2N+mWAJ'"#Fekb#*\,\j`>@RUZ68(`q$%#mo&7+<P#Y_.LDQ[XH3sWq$0G7Za0[dtTPj`N.QYuE%9MG#1Yi=8X;CKiic>UE %o%iQi"/d'SO"r83B['=2X#5W')$JC3RU%K6Cs0=+_!mC.Y584j#LrXWqZ?k2\l]GD/"kMAC?jc>&rZu&g?!]C>^m5B/+d>X>TbEp %9L/NkK,_$mQIaK31;Z,j/--M<?@Y'Zf_mJIq\unf"gDSjc;'2m%EoUd&kNQ-m=)V`%Ruqeok'$/r>=t?=1<\dOB0)Jk&A":=A'=' %-_T8%#-8KH)_lL]-FS9aFFa@\am!hh_?=dn01J7i))!5HPL3"rBXO52AWN]JHkpqGCFP/oUNJRY-YUrZlt/DihK70%YtBbL"+ZVY %JSALLRVjI">dUiTfB@`#+QkGe>5QCI_liIeU4.q=$VI(FOoI5.bi!UD!!J+k=V'3IKX/d4QYH-!]/W(UU/q6=d:BI$ZJa]IbIP+G %T/F@X$GCR(cW6T$]$&W\#_Bogs6*q;MVFlg/!Y96*hV)QX<bR[VU1_cDF$G$TE6gbJJ#tB/J!N%]<81nRK<0Z+:YC]O98Sj__1T5 %-Z4@*mGAQiUa@>qXaeh(EG#FEFa*Kp'7(`'j*^^08H&"q`KG]f?6!]p*0l!p*[XroA:l$7!D(E_3rX64J@YSI;u%e;l0A5nhcLfs %@PV%[7fC(`0+LK^_+7N2N)s6L%jS^`j&\$DMN.jsGVl,'Rf=5AeR-!.P)KPX$/NSua^g=p0Bc1aXn5[IMN.fGjMfMLeE7BG]gc&A %[J\!j`>OGG$gQ!gT^UBcn*@%9LcNW/?/#!2^Obmp>d$0F/Gm=)EanrekmoQ7=&36c>^)TLJGnVmfQ/*o!UFJTJmG+j1A:uE>.Jk. %nI3X[q.=J4Sui1RP]_%`H["c2fuKue0sik$$a+n7&d_'->pECu]&`5)#Xq[3op1gWSa4KV-TkSW-f+IBg-\@ACjs'R5&k*!GZt)$ %['k_h=^-f:dCS'O9h+Fj#3Xb$6*<:XTd_E)SOP1aL9",,`IrY1+s38<je1c2P\neO<9aD_.#\A](%7R=SHKI1h3EiT)^Zj%^"TP( %J-O^`hGS/8%&l7W<4Zj1Qn#+9>:lrG>:%k>\#dpQh$LCG`GNR'>"IC;UGB#^_Wj\/qTc\kQ[%585DJAMcJ%SZ]!MCE?Vg77S?9?+ %"ru;c,,LSUHj7@6DVUkC('&5_5Q(gFjo_9Qo>Q=!<obi=+I=\W!A3"seuO[!rd*$^\888XrtnKjLkS6pHa8'_+9'ARX4V+V,qN5/ %?jKF+2j)?[]H#(_XiedoX;!?XE@,ppO<EgT?h7U.O%peJ>DuG9C]U%3#j5^]dHk]VOBSfAB\9/'Fn1j!nS$;Pj;IQVa>+HOoQNLf %<G1cAX+64`)@R>=aL%%];9Uqc-=nfA)WbNcHpgGZ@PY`k0Ou-6A+2]1`d^m/Z^Y_)bV[Kf9[9u3I%uG<G^/nY7Lg!V?lGpIqH`#> %B_3DO(GhQc]HhleD2sYV;9<e>?:Q8?j?"Ra$;X4mUE,/#Yuh2JhjQSMUG`5:=H=1)_@8p(Fs<\)Q;DEE<l1-$&[`8$%mm7j^2,q) %7cNBkJ:JSIM5eN<,ZEFbB<hq@k6&t#0*f>hnft(nB=898]b=t,b$3i'&?[\BG(42L*&h%pqENKWJ8*K)XgB2WD:YHgY=C%9grFLV %>]IS$)Jq`;F,GcgS,RHB:nR=UC`OKh,[7"qB!plCWsUA:ZjKP2iM]9kX'cGC"`$eU'q>^t\gT=5ZVc39@m[aag.Y&5&TlW/]L(1e %p"9K\-"=uRXcVh`h$,07DW4^s=Tj(,+e[<h.4aZsLBd?=J$.7.V6P-t@'DB(a(=.B;sn\1"?:40I4YYR)g,f"\L-LVXi)bj&s]9b %"]A*MQuNKX7L?l2on;AC=Q4DELN9Ss2;:f,]118g!7Ao!Ap=Z@JR4rW'_mDLM(L`c+&,&k!ZHDu+WD"^`@89%F(?@akd4S%]K[0g %MlpbpDU(4=FN)NF(Lbc-4L/RV3oXPW)L]gt@0(*PnS\&&-]2fZq>3^@_t*3+X57MQm:t!"C<EndaqP=C+UC1=h%>X@.5[oZ>4ORD %&''68$C:K#BsB^L64Mh'%<7_8Mdo"_/7E7'3J`S'f2<B`b\h]g"e..&Vh)8XhQ)PpA8h4R9+>RoG"Y^-T#_sL>5a5meK[Z'"rJ4a %Obi.aU^>bM`I'Pk)&m]YS0<MjPLJH5J>6loL9)gc=L;=O),n]F<c%FsSY6oRVbM#1-qMp@Xq+S;,d:B];+[$WAH3m;FTba@L59Jq %)f*`d^gSrJN2ee.G*h6S'TEPYk39cKgSM@Pc7!srjnkQ,JdlfO?C]LrcZ5Y6%!/CJbntHsAi2"I!Lq=;LQ$@4_`f)/"%oh7gU<S, %rf(OMa_DiLs+H#\fa8W+MYueXAm:\u>5cciN%K%umUQd.Rl8eXCoT@(W\pc9)rel4<Iajt'f!'>m7FnO/mnj!d[eGUEqm=6Y#]`' %K/(%m#/f,OG9H4r*#SN=F<kIk[E(5%AC*l9o,[-kK4Tt\)Ikn]igiDG8e$!t+E.5I%3mN;$@+(!a@hpf?HN]I;PoPB15!6(*-kCm %-bW;L?nWhD?>Xe[jOd,i2)g?)PSrhab[<*'L:nBGR:h[M5.(k/UG$<gI7[B$9:A1SdL>u8VU1YdK>-D)qSmX(QSa?/U^V[ZnWB'2 %YEFJdBl4K18MfR'RR(:I%=Rh4\hdXI-&gk:@1%2b;n,Jf_Hk"emLlC9QS='(`&@$Q'btu`-RNf!OQ!?#1(nW_ea;-7mLj,NQOr1p %<5!!q^+kN(OY$uS;kKdm$=uWiIP*tW+JFDf&K-l>8V8*%6hH0Cd=]SS/DD8.7Sk4:$J-M7E':M',O;`rJ`m[`U2/Zrhcb]sg'Vu@ %0VV(5Loptu'24iq6X_mP:\Sob$HI7I'A=.qVG6#&D2M3>Arr?;KtOc1jJ>Qp05Uo=Bc6Ik3R$Qd%3mNC(jTgOa@hGRQh-eJB4EI7 %)&0VUFIX8l^.HgWUJU76.uju.5A*[`^fIfUV$&64O/p@2TC'o'd,5Iu:\01iZSn6]e:F@f'cU/Jjb2_Z/MF_#G$V$<>PU%^-B,Z< %SZg%W(\?=ms,$;=KlI8-.6H:l^6Pmgeq=e'6%-F=`3;D5inc.'%G\Eop_]n3+(pr+5Ng40?/*u1qHZkBV5jCRNSjpspL0!O[&TX_ %hTeUSngYpl_Y#>\M_UnZg;fH5='X6c[_J@,]'F\:a)JT;r/AK#^k%+djDVI2>ND?gFJLX`N&^Oset'7J-Zo"h5&$qs;dQe324<lD %CHhS&@2i9\rQ,9&RWo!>hm&[S0k5j.)$qqFqbB<":ba*.GeBinFY<'s:e[o^CkL[P;tj45Js,Dc>r4:`6+k4_)a07K,J%P6'I+%b %k.;!J;Kt%J34\'-rcU0;-P.k,!0%bg1tUR:!1.t1F0#\b#t9c2`'MS8U&jXqG<KbjDPk*MG;R^=4MrCO)t&Kp]@$+DK>LMXHr(D\ %aUHN62YgHe4UJ#CL_`Yl_\Hu-`[*@uC!B6s8<#5+I:djYg]1J/1R`+7>)oHrkb(S`l-8_8?qUq+SE:D?:CnY6X8JB]AkOI9"\k[: %.&naeU[mO&9>gVU5KKN3c+<\7?)R(LR>tL?8,\UJ@e$Y0gWY=@>hCa0WDk`64XBR\Zh4dE>Q*FSOC?E4d>i(qA-L2$/Puk,.>]RL %5uH/":,:_V\*Vp@5;"f\`OOL'4ELr?4$r6HA:PC1CL)E"X_`fX(%qffJX,oScf**ZlMc@Sm`qnCR=oYbCNkIRZR']#,sFI<BEb)[ %\qGR0Sc+poX:#TG<Y0RE7bZdoRI38c9nst85^k3l`d^#O"LG8oW/LZ%3l38m?0e<`"6Jsd_LV;6!d1p8J"l1-B*B9Q,]pq_2?SWi %_!L4P_XO=cFYau3S%4-*GJ([1/VG,HRhD;Kg1Homa/i.;EW%A8G'3`D42"G#::^u8oC29M+I?5sVk;(lRI.Xto=J<(;)c!GMV_Bk %;+EB_>>APPB?C"VlQW[joOF^AFV/h\2!lEA<T1"Ji?sX@-a,gSk1%.JAQCZ<A8u3VlF&"jk^8ruW*Iq1Vt@3]+/REa687X"fG^bR %BZ#)"6HPXS4dO]RYEp7-)";19oD0q@D6?*Ol)8)j.aU][\Z^kUhVp*!'B_NtcAl@jpXn<pdrVs_&)O8r.W1T#adeAa0:ClN3;"$a %c:uDd*kY^I(g*Un+Ip=GbC(p#a\3b=n%$ber\O7=9#0t?>j.CEn'($al^m>GVS('dI_<tbYN,(<F\oL-!qEIhCbt":0lqU'%Q5)8 %ilg`T(]0>1GQ*foS=F2^iF?6_df8IQjB]6kr,C[jhjlhm:\t%X)#Z>_(#S>LbfD%AlGf-bUUT=JomDjj36ti\V=/\nXZ)<UdJQ.q %POm,)`>LhLHc]f2IFlu8\i:#8VU)5=//DF&LU50QQ1U'",i<+HE5&mcYf0kbfR9,(,Y.Z,(\X3.8@\j%@;Z]n9UQX&lcr2<HKr!n %q@eu+lq@"#l:Atdo2ji6h;B_Roc,Wpg[r\r$VEq&%^[NXdJN/#%)FB`)ge:[(,bObFb5!\>SKN\e)QV9pUEVd7+$oog^A"/E=tE] %Q,\=Nd\Tn9YLEAXNG5!Y(Z1V*W&@WZe9rHel#b<K(!]!@Cd7Zne!%W"jX]1ZI_sIh<A).K!f_6`qug>Z$'=T)%;I_qn["$'=6O$g %"0%m>dDtHP5MIZ8q$QSag39gVFWKS<^"_l%8thHo[QaTSCu_IDO_ms(f_oXQV<reO#*6`Y\$HMS+pMg/B_jb*3f?dcb6k^em<R[( %=WCgo6FU6]0C:a0B6FRRCiL4PV!fp+5Fe&qbN7n=S\2Hs_`JQnN0[>n4KmY/RjVP(TTh'6%!N1Vbf6B[/C"o9C?$o]-=i,rO!N\V %1,3878On.!bXlSecaM-NRr)!EG#AHeDW;h)2Y='SI-`pSb0&\M\Od3&mc0!Kru&Lq/G=luDdg.\qMAW*Fi$q-!='-oH9'_?-S`'# %#2Vt.;JX*8odeU)BV3u)Gk68cb?hmE/kYs6o/K%eH@o+E0Pt=^WNZWhga&?"(]'/pl`%p0V<(7ik$W2G/;@5[o%5sUTrq0'LC"X_ %anto-Cut'\n<\W1?J'U]K^XT.PX4B+\sgCs8#oK$EQc-rKCV"%'k()i_rU>%./Cl8d-JQ83e'9T#5rcN4r/m^cFUKtmL5uGk1b/) %1eP;O9F($h8i5;6R"&Z7>1IMi(r(O(3)=rjnX0X&U?J4V;PiDencAH3P:6.FhoFLPQp<!(L+sc7\a$sO;m,K3ADn94]C&^MrOM.E %c)3LfXgOWSMc7R2\bDXg.s?<*YCF#PM9,0-(Z)L$=,@?q.?uq8gF$;3nD)\.81N&O]k)C0]cTlmNTb.2#gr4Uk\p,m!6+8N+RFk. %?TJo2j1!^=5;UKD7b7aL1`L2X.b&3u5j>Wmn_gli/K`gee%BgcETSV26kJb9P<bbFpt<_]BC:)>=JKnV6hXi)Zf,EK;3CDh^#mFW %^7IW?V#eQW'J\r#cUbf4J&X]G>Fa,[R$RLbqO']E0onQ;5GQIaFcG7TnCRR<H1WZ.FHnuuP[]b?iJ-V[/rHUL.I^lt*'G_>6fh.> %9;*G>'JuDgM[ViG2#kN$DLuKL^f/*kJ@.X,=_9-sREU91U_%WOkh-:19GdqW+U8UJZI5E@-OVZY@oE_.r65OoMjJE1J<FW*-HAAk %p2P,tK:n([acCHl>)TV1C!Eb;]FhGdYW-25_0glc-1m1`J`.jX7gcFlpkcWB7kP0jYW/J+R8uX7bq3A$N;qm=`=+6oA8k3S0as]Y %C0]q'-(p,8B:60+!\;6k'N5JHNg-b[eG)WBW%puQ3-c(4ABX%BP*C-0-Cmk;p_LW0%Ee*s5^+E2OmHgd^foM15pE?p.OY-&)a*_" %OH`m@$,[@!CD>9m3G@C[#!)$6Jg9/s>)<:>V=C?q%Lqr_0G$>-#JbDnM8i-5(&j*l5JPWKoIfnK%/_X"b.U2dQG%SDW.A,T>K?q: %[WPZ@PqjUF[Q)IUEX,tbECWI/al_<&>3`1nhTQ;RYka0#%i%j("cc"9KLdVT>=mgtJB>kd@+5u(_*3uq7OGoYWTBj,;#NLPWn(/9 %jKW%6L;ugIfFEuqaG13-M_dO]-Xt&Fs.(dlcG"#_.(RVWHS]HoAt/,O[-4QGgsWZq;C:@-E(7g+7khZE!NJqtn*F%<f0DA*X'JFG %J,p#lBjoGTMNj+Q8cSK2)gac`.@`')Db;$\,F+U1[W[-0H87Rg>N`N/\f*2(eZU%=J_5D]o!Un^gNLrP*0>?[faase=R>`m==_$k %YF;.^isF5tich!A\&4I/8_Y([22*SVYq[M3-s@O!@6\;+8qjJG:4DgM%@t.-SKFN^H:`WYqCNJp)9gLh!ePm>Wj0gjMpN2H1>CJH %ag-_KH%/)jn.G/[0`t[9dr1nX?+KNu^32[s8uIj=?:j*$YslZ_p;)o"#Ql.^mm3_#_%20Q*QWM&B5jG2:=2JZN/HXPKBE::1b'0C %/-PoYWr7i&RMZQNH!&G/=*j2.'8:Hgp($50OWp_ZI3J(Qg?*[H)(>uS'tIc1Xpa^-^,#3B;M"BIM@9Yt9,5R!"N.`U:QNP2F;6=> %^3CZpib\3U3>9k$]DJN*UX2q%eut_/XrA6\97)!,)Yff11OFQ']IO^Z"7Cknm.4^22W"'E7(q/U#WB!Dk<M1j@:/StcaKW&?1)eo %b^'T4%L-^ZnV%KQqo665ZUs4lH-M>JPYHD=3s(6!?ofHm&@k3UIMBF8@.>\)IHZe2:$GPL\r5LSn*I4Sbmi$WAPQuW4.))$2JM&M %fk,O!"oFHd;OL`n!q-0HJWtLK%2$aritoMOc9>;K]ZH"G@&bp'CDXQqXbrYQfuoo@\q2+R)&8Rl:Yn$iYAEO5gP,`l';G,h$,^R/ %!M2Br*>fQ)@T&Z0X'lFY[qp'6/+1V(onLF,7;_lIW+bn7d%c@j?0W/!"B"Um?ujB<R%0BJO[mQ\DSLG*HSf-lMn6$KW&IfHHt%?; %^8.OeRmQUV&BH+M^W*pBC.7Nd=e9aF!qHL1ht'\goPfuPi9;/75)6=[#bEPiEofWFje2@I#SQ`.DL.QP.4.nS0'V0A-N".B^0)2! %hWVRB@L7:7:ap_Opl9!MpYVa0pIam!PC+d8]4*`XA%O+7(+5F#VuCkHK)6>*DRLkM#!77hL])Q^.1@"oFf\>+*Hg(eSl(2FlbY7_ %+1n#l>9N.TNf"idp/6-R(#COfU47Wsa[S&=VddCqn]93+ehd-\*!8Q&fOLu/j^#;pcQFu:"L]\-lHUp_M+tEu'7*61?K:LYj7cm4 %(Qj$]LndoT0W+7A"m,Qge2d=5aTnZjhc&1g%pS2nX?RD*TY9&ij1WE%OK@75fk7P.TT?L@^&o\U4Q2F9,(&u4-$6uH=#B$^5]/>' %h>q!'O3r(?Wgu.Q,foALZ0foP5g*:-HL=dMKUX4lKAQ?GPK,q>83FIUq-eB8D&'WmDA%03$-N92as=0n-[<Ns*+fS:nG,JPs6p.Z %;n0p*ZngOn\D^QO8#_DH-<YA4UM%u0ErIhDGK+ER;-(EL:.P8\6FD<laO0b3H>DPJ*B"HM`-'1MITB6DSkEj"$"c+N#`)N>T%&e+ %mtD:m$QVkmJpC1J7UDc=XS&:4hM60*FAJg+,A.6ipM$lKH<`uuDe<VOf'uVDe8ZHe@=>lQip54-O+!,En1:c$]q!\kE@*>diMULm %F_m6ab?:,![a'2u=L>"_9UP_QXF_Q07k('Y!>R=fI/lH3n@'USc]FQ3@[o$YZE_?m7tQ359js/E6F@+4"C5OfGlfdOMc\6?$>\Ig %NAIKs`BD;bac&2[k[Knu]@Q.*\o#3aUn2:eTp;ouStm0Hn/73@Y$Q_U;4NR//t/1QBm>YcSZpm?fE!>9@m]B'8]GV6,u;.XcIU_1 %5W!/SFu^rZV?t$4bQ;D="tkB_rXeiX_h@2kT+M[3nu!94_t@<\^C'Fdo1>Y=*B=f+\)h<Q4.4d,4&gqfYl!W406rrr4Vqk@dh&:S %;:j&XWCXb89?HO[S_MM<2fSas.%2Vse%)Du&Lg\k'B^/2R5@#+S!P)497qq%eXd"`.4(Wcs/+0rAVbI6p3bFAft;bH9\<SA9nEGh %$,6KYT#F.SL:qI8@pI#WYugA[.cZbb^9Kp_.ClM.CuY'^dSVJN/t+*LJd1@X5Q&TUF-![nMl[g"IgHGt5/YR`RZ;b2rkFUV%0ShO %US()sA`PCkL.9/O2N9`:=k]FY/\5#s(W8j83O"=)rt4]"&8n/C3_H`MUHIus`@a^5q#Hi,[I!h_at'ojZmZZa4_O;!,!PICJ&8)` %BWn@$[on/443K9s^mFR\e9G7P]tj&KNj(!bcR=pI*6h_&JleSB,-4L/rUZ3(j,\d16p&5La@u)3j2j"&^LN>_U?B#FQ&8iYB2n-6 %D\iiW/K>F^mD\"sjK=a]i_@G&HN!1q0.,@aDt2+TMcA4*Odk(b?Qr2n;d"Kh<%5m)4N`*IZl;*;^1q2JRp0W3TL>*"l?'B7Z'Cfq %$n'HNgP%GWXoVcR:N$5B(PB:dH+Q)-,+b0WqSh=('$t@E3kg(mG2K=ngsgO!'$qVYM6r>Mb6Q\aOm(S,esV?^[T87gb'O@OZ/Y]d %Q+M@a8S$%/^Qu$Xdd^p(bgDn"=?9i(MemFhAEo0W#7VFr\Z`2+VGJ:<Y7'N2G6o:B<ge$(m%c_^W_mba>d\PrT5Qt6hc=(L8fB7] %`\&86KQmF^[C65NZ9KYSm.bt7-E9l';].a&CB4U8hb%4hp,8bV=)*V3/Bf355Di;e29^p05GE3'%SgL2"N'-6?$JS?325`m3`YH= %Jg&5aUK@I#m)I0e9>:7kkWHp6hj:Q[(']JCmUg1"CRu[;CS>RW]NV)7!Dr![h1s4so3a6$c<n9n_p_]!Y[LYsJ"o:t^Ft+c4GTZQ %hUSmYYL0fc0Wlmj;J5q@-tQZ$<q^,\rt_@Q=OjL&N'#4$4N:Qqbma-m<8f&7[=]TH*_"Q8hBIk9V*6E#G]q$30TLLbnsZmC)TP%" %1R3gM$TOj\br-YZ%d'\N`R/Hdn4YUL7WlD(ga#.naq'ODZblV43[_H:`#JTZq*Yf3/h@R=`ke287AJaNU'YY0=[E1kRuIZ)p;2/) %E/tid4$2bVXG!?G9iQ,;M@A8(?+(Vr"\aYFDM(o*?#QP-n%f?k[05,.`gO"kXF#7HEDIbq^YJuV=:hMaEI,/,3D^<l;E<>XkkkVQ %.+AJPWKt`IrDhA-nOOume0*(S%SIR+5jV`?HW@+gd7J:]@"bJ]'f2h)Ha2HL5+Qfa5rT)b^L31\q5F)bn9N2J54JuI`c'8ZX/@TT %mooD4Z`J)=0sZqn-hCe3lA=RS4J#Dd<k\3DHb-CH;nONhb0JG_@kl>jIt6f*%Z#;#-b/AaXa?@[/e$ROoM/!R>53QZWKUY/S1;11 %g("^h$&"4)&?u0`.@i6O623M@R2H,7eOfa(43tXQ-.,PjFNVS/NCX"R[!mkX4,Q?@>fH]^5!flB;XCfK&`Kft1@eop'U?f@gW4q+ %j$JHtM9Pq+mo[D7T*2^pjj25tClQl4qh7ATn6@r^]b@-^Z$gh&:T@K]RqVBO[KgRcQEWmLjfOJ<NE+-HM%?CMG[Q'bJ7te,UuTEj %\5=O!nJ*^)$(s>O+$5LEgeV"EZeONZ;<#%ZFHlR1?c(#:1bt>&RID)]j8YtOlm`?J(2LV#&TTC;JZU3cm)3?>ab?tY<^L3!>6lcj %6L)p?8TUbsr8ppt&)q%h>KL)9_+JDF3"uP=</*baP]H4D3'(%:6ns/:Q]A_t^^TXbLlh)B$`_B2N;fR8e*CP3IrWa5KjU@'cW]WS %=:jS6`Gq+,Jkk/to5?'bl6c@AF"LSQ2ZMqVd"T`r%m"S,cJZh,Vb0[Q]<_"&TC$$rT!/7!=?,PFpuiV,%iX))R]*liT:sBGE<o0F %\BJfI^5MhN=:;PapU2acL/sF/iiQ3U_(OX.L,YOIlJj^#aZe8_O/9I#-F>,^d.2Pkh_anKJ;>fG=g0DN[:s6q\bYNRq28NmIC3>. %Kb4oC(rq:V(8nCRj`C0QL)%Wc^3&%O9WtDF"ZNE*RG,%*HLS7'+U6!SK"0R!e\gss;n*r:FOMgJF(^kq07Am8MOd@ciBqX?ApYgB %o]7u7:`VB5*?Hla#(9^iI'7IB6#lOo0PnH>^$,_L`BdSqHW"_-$Cu-Ja3'%+g5di2Q0W+t:g31*o+jH/pPs-_Pm6oP;K]C47NIN$ %a308m.+5[qqpp3A9"F/N,(T'WYP?KrI*th0PUO6>/#n5*SAu?"/h4&iD@_PDH.c6Te^F1DQ#H>cn/4CHg/HT[aU[$D\R8d?],G#4 %Kg,%"Uc7$Y8pBrBq,4_<TKt`qW'nDIlelVFBi'_/q6Hrh$cC*kNF!5F%^eV"bL\`LTKMFLdHgRfDD(FO(8l!$Q",q,W=<#kULrS^ %nt<@fm5p`k?7HBkCY?@s4Pn;q\#Zl:U6I('<<eFDNgb18'9tl<01>'$Ee=V9QCSGL<[Z14kcUmEB\C/2<#sIGr5`+l%16lRT%ZNS %eY7&:L@oEbpq#NLMe-]1^p/T@d!@7pAd</Xgp05@c2.2F%r-*I`TM54ZI[&);1C&b'F2$I^/qSEj#X2"k_44@;B"'E`5?3,SU?`+ %ldh_)*ho&BY*90n"eKL^Tms1(BX;c'Jd4_BCjW:Nc^"*lg7W`NcLh`M*jk@f1d?;=\84tY"V5r]-g.K0^+G,_'=C,A`8)W-;&T#M %F8("\QF/[ef6Vqto;W;Sl"&E?.YBq6`620(,9%=d@>;J.qY5@bS9bnTI9?fY<<o'QI)cb4K9h>=of%cc;dAWg`j:'8Y4@I&(;BoJ %PsOFFg\iEqB*RbWf4@&m)MO;2[^5)XreX*sqR24Bb&QEdh+TmaBPJt<oZ_`(`""h'GU7u35*(PYb6Z[`aqMp_G#opjc5'Zf50b0^ %d(hPdW!@1cNbA_'c)e?alLR-S%!q%gqXL5''GeKmD!B*]%/R8)SkE5FXm`'K3_+gW[Un_U)2Qh(^L5F:7R$$VF9[,O*B&0`PchE7 %Rr]XCi^(Ip\+R=CV2hHRV"]Ng%C+1M'?Bg%olUuRV*%u9`H%C6c#.sTn>Yn`r&,@8[;YBWkDF1:?/$f*IJ0e.hBL8&Ff!4JWo6d# %%sq.DgRPgL!d^o_ep=Z9XE6k)[p)C5YC%ss1KQDlWD`!ZC`0j2WC0_BY1IYKr>8I^><TE+Y3q5"_HVj\B!8@5C=RCG9)7cknP],W %+rcfVdEZ;M]l>L7"b"U$X1^HTZ+GPGfC@$Sdc3N<H9lKJgRO-\icfD^j6P+Qg[7upbs4t]rMfZHIsR_aH(4E^+"]uCQ+%KX-Qd1g %$ZDjQ]?$;P;P(*_q<Q4nc`^?HkYld(n21ZY6Boo&"L6/7pH1,N`g+;V^GIq+=lJb+pPHrYmC/YT43S/a+P(t6;KdPkV#5E2E*6B! %YD12<hhd[qf2pM*!\rm:p#+,4]0'$gHFZ^lY/?ZC[i<!iDSN#geZ8#k'YTbf+f*"d44BJ^`DmK+V\brRKua<_CaP^O*.;8p_q8Vt %JG07m;E^mhHEtPe[rt)i?0O#tgtVaNY>&P%[VY@ZcNa?u!1S#![fpN;Lrb$<VrhKV9f%FB'1NI;`+L\V"WoXYT=]Y7^7XtKK$GGV %V0X30dd4qQ]Fg=t^87B@V&BA([7,8!LuG3O@2CgbYo#cMc<+J`i^%;)1Zlg=@7>h&9<SBH6*ZuU1+9*0@-;XMqNtgGp8c3+AQqQN %:h8bYK8(\)`kgM%qYr?1Cj@3.n;DNf\p5P*mrdb^2!ElmfHCZ\[=;U],V(/@7b[l/Gu2*.<ZfgtqB/`B"faue^WK`T%]''te->;T %$sG!@&q*G7/Cl7L#=U\mXVuH_We2KZ<iR4aG*V]P^4;!ZJ$Br4\JZ6!GNB[ag4<h/eC&f2Z5MkG\`o'D,&Vt_/9(s#KZe+&n?q.* %o%h)gH)/>X0jqL#jXIokFTX>3n?`.b&QQYL8'nuI=1%usU@Y9%a2$\>:O.+!h4#BX1c\>bgk1o_28Sdmd-%Xk7/o7A!PICm3*M!g %4;CD*m]4:ia^L&#$.rQF?$(u'!R<*,bh&r.9PE3@roTZRb7u?tS4B)E'YanQ60KFG(>,$\nLH$_d_0Tg"@*R[bI7rUH&Tt&NE9gd %Jff`8e4P'cTogSaa8[j_A:-!b:ETc1qF1HFf(g&3NrQX%gXQYs4!SN`^%K3+a@b_]'XW'<I!4,Qd+^eb"cG$m9d<d_*X/b:`2a=u %j82nqc=H^lq(5TtV:!te@:U0YHqM0uhHf"L4(=KU=b\EhAG=/Ffa%(1gd=\QBD9@rjEiCUS:U>^.5;p3Z@=364iQU^69G7_H;2u. %Gi>I1nQI2r0<6kc79CFXjk;GiPUXDNpjBK8;WZJW0Q6]\J"FSrdk02eOVM,"@G<82ktsaRf4+O=UfQAcC"PZDm*H"10ge<C'-W+d %cE6B3/5C(gSn#D_A_u;;0<h,%EBtS".6\Q"&kqK1:kIlKYRs!`lK[AG8sc0bQ,!HgC^Mlb8b]!KPeQ:B7Zc%^%88,*o>)gGSLIKC %O.%;A9M0M7HX1XAAjq0X`&@uY4F)9,rC&sB&%boe+iQ?CoYPbRgW@TdQ4%.lZiVOtm2)R5B;*Y^0=<sHjL:T5mnqtAmP/^aN3N;O %><rYGg6-H'JN&7k?=?b$p$GY@f,A3`AH\<^Y\$RoJmd$Y)+FEa-qh,9[TMO^BQ<>)ml8&7>C0gn+"#mOB`eaF0;L\+KO$rG$M-!F %d_U1#%^d`s"I^)!%pMUT4/eq&FZ(kIqe'p6WH:VoEu\QXU.X:-`OS?K"';sFC0j$3h!Ric;"e'<P*O%+hEY_R>2:eB'6rmF+=?2` %-5Xf#[<OnEQ$[0LUkWXgO\0V3mF[b3V]!4"ksa3g:o8l+MGa'#i`+AA.WS10B<(m.!5r2%\XEglR5p=.JBjQ]Q)h3rdK"BJRsj%q %@5K:;h2SC2@mOt0=/ns1i\W>(DBd(p4P<+>9:VE-*Z$Lc&ZKZi9gl-glG,fKlt)Jk0C7Y?(o`>64`k@Y2E>h0.1%chE'K0i\Sia^ %d[@_O2E-/D;ko3Ygp3piUVo>q#R&@*72`9c-2(;;@oA(i!5N"Ujfds#(]^Z+fW;ci]"YN3on<^4c,IRK9WG<teJ4=R<^i4M?<3\o %7@hDc7&k9STun6(:'JO*bpNIj'(;X0D$jCT(Q22u==-UE"'?-KZ>pmd;A)d-0o:hO8tLs*Ga;ZZoBVsj86j,$i]1U6,g(p4erI+s %7\ffAkfH=dj=&A2M@I(+cfP!b^GJX]il,Uac+Tm!6f]7Nh\+*opjK%&`,ITJQS""VZS8YWo8S#;h3J`_+!nYc*<@Ac94t6al]\RT %T/q'Nr&%qa+Rh+jY<f$ZUKD%nW_1n(WjLI[!q!$:e%jl^qnfLj`LqnXjmt4.#qp$k0dt'JM[;\:]KQ>/eDrA]N@S`$H1KZ9'n0Sj %DJ@=+)a:lVL<VAB&u!J-:>:;[?'>:?C,0KNQ7o*8,8G;M%"K"5B_ON(<WP69"4/cqb@9;Uj7Z()2dfVr9iH/3@DW'RQ?s?iE8i,* %HU)r&(;o\QFVZ`a?4,Q?/Y7n^,PL4LH%9O>@tZ4Fi[WeBj!%9F@O:J5C.RbRS+a_Y4@DEV-P\s$(5)R-Q=bOEEk*R=IGC7_K[<\2 %1:MM=3>;$ZSm0'14f2Z;Knd1%MArOehj!.)buWlO8*,\*9o4+.)$Hd<rKM=Z.94*-]F#YGG&NBfm*"5_!$#i5<b+O+ld[sb>E./D %I?Z]05'^3fV,1gShAct5KVj0Ig:oM\d>ZHOmG8flgFp(/]la\;b5ompEBbJoUU(@`>i19<*0TLe,0hjtZ4fRTh&n^=h"%t3_a<%5 %\F@Ueg+*Qrg+i(_@J+isN7QLu%33L-FrFbo(8ilF$_;!Hp"E)?b*/O*]qZZGS;uB8'VE&W-KjB0_.SWSW8JNbUSGmJS4uiBmFelh %,FY:E5X4OuUT]i=:D7\[j;sj`*EaGu9GTC2m/CDhrU[L]/2V)2+WF'EJ18T,bBC0GgR05V;*UKNF[aK$YWF"3f02=N?]*\.mEuVj %It.Fr?<%c0P@F7joR!E@`7_P'5J'HRPmt?u2#PJXV'-0PpWI*@&Ga1argfnEK9fH(%@prP\j_/eWp>G.]l)?.6iou3+B;4pOKkIR %;&\#-Te"h6k;P``8U!SKX'gHtEtFfY:j3ZA5rg8V(o25Tdo.@mRHn&=\^D"dP>=c@84=A(0e/QB$:\4RW*$@hL=(WFWF;S?Lg6.t %qe^U0]c&;Y&6J:.Cd1b'/aD\,8$n*5MtZBEl>4-a&oU.]Ld,%<@Rs5uUcU"5^/ad@ZCRtn)#7Q1,PY;u&Ku_CBMD*B%(]B=W`W&/ %K#/8B'BdQLDiS;j16s90N2t\7nN[?BctR.>=e(8hU!q;[ZT&JZ6`6J@-bI'#k8ZPM$p$tgi#Xn#g)5"\Cr+qKkd3/0jOo-sk0RgT %crlloae@2/TT`ppm[QYBSO(<Y^?qIYVk$+$jRDT(6g)qBTMtNFR*;8QcCbjH/i3Zne^N@j#)ll&%(pm5:e!29bik:9la:`Fe-k&, %p"Tc""-oTcUc,MU:O_>+-^NPtV\e:@0G@*^\ofX;?C[0U36ALCUnL3m<lQ(O#4n77PL.jGrIR*%+)$(MhAf>g>EO"sf,$7t,p\T^ %9M0Vu@sUbAbXW[4Qj0(&;s(;K=iY`&$t7oiV5i2rNZ?VCTMeQ]edDYD=a[ElIGDi*V$07AT,LRA3_M7B$DJ;MhtA^fJjIU--F3X1 %]f`tsUW59_Q)%)'-pLF3k;RYD!+6C9V%H'__[M+A<:dHcR>#NkdL[t6=j'".&lI)ca\D9cY5LZ:Vkdhpb%#cj7[$Mg;bXeLJc0RN %H$A#WUj89N\4IAY<AY\N^25gNTPPa%aP_p*33Jk*D]fE]QH/a,elF/WkOD-6/IF6%-M"roF,)C1iYZp"8Zg=a<Q(^'e3`MQLInJc %_"4"fU&@V(.IH"F;$:)E9\oZrb2^sqM(sqtBOA4:6.d']<)R6pB,5)?dtk"_%l*19R2mHJIM?7;Oig`K(l"F-nJb]T6gIUHO'X0" %0a7HLU78s>'"b1$;EnM`V$it!<JD`/5.4#E+!'WQT.*[Ip/-V9WT]X`=2WZh<5ke@gO:^H>+>!?Tju#U&WS`WF%.ubjc&WSp;r-% %c(gliVFUM=?moW`;5V-;+@f0MY)`gCQKD)m^[f=:jVsQOOjqRS(R43I<P>J9R22c^aY0]_)7P<+HCRIEOHf(0B1*V.:H#)2_5*$# %I&S0)9(]BT[JT_AE,s'tZkYl;'MdBM*>o2tGcl"'S/G+TqNPC^Fm_$=`_3]gL!<1DXUI9i*Z<MlF<N5R(H=uL12#\DC?t;Jn53Yg %A()=caIJAMq$e`67&c`HpW0;Q^e`8ejH5"i\b;(,3]GuZYo$&"gY3s*Z3:p!HNshKCO9S[)6%rXH$adH3"J+QN2cFhp#I*C:"0_$ %)iKm#Cprn2PLh_k\8`b9ntL;`SA_a<;EJ@'W1d'%>WPK+(fO2#7En*YX@5>_/`kYII14)TC>BkA1jr'phCsj"dRBR6Hf^;D(11q! %GeL5l3gCBlBr8+`J-\oQ;no,#KmL_LV(>RV7Wu:P-`QUZXW<P#.-MB3QZ?S^k^5@$5Q@GKi=+O,[WanT)[.h:Lc]]BS@JpU?1[%9 %EIH)aA<4h'iV(A/1nG5uN1q44GbBFD/g"5b&U3Gd37ajLW&$AtHoRs,!fde_&'*M]U(qFR;a0!&/Z*QiK7#*Q8EoVU9.QQ\0uG`. %Z:fr&F\<r6O]tZq]@$WFros*3#oS\T1sjSB[2,W8GYp[\j*A\u+=2L*9J4hUmTlW)%(q&-o<"lW9IHB]JXDB)'oqi]&t91_PS'V- %Z@Iqeqbl(Zllohrm.)*nNK[f@q9B!%8GSW&)&Ak!p3fBm*O9&G-c>Z;+L_C3IS>is>*Krjk5]%KHJ,a'c/*T\oOB"*>b]lOEZ!;o %oSOO"gSQg?d`C$1g3p9:,4nQ!J/L/A;$PGl1/aaZ&"&IdSK0=-p%eIb)6'E;Soh;;7V^P(iA\aE<&.@FT*+RWkXBSKZ<'7[bU;5* %<9)RqCUg`2T+W=ZND!3p"rSTXi"q32+!p1&fa*4@W0do>n1h9&3bD:K3"8p55BrPp3"a(;q/^^PKeqo$gbfgAa0%O$.NG0!F\-qY %<&hmu?m*p?Y>dL<5@uJ5%a!$;DM2)VaM!iq5[oM]3an/,.X-rJQ$&rB'.CJ>d!u39Ff'2ATm7ZU[ut&Q]^+MX:14glW2&+8MJth# %#O4V[@t_g85WjknlAT/)>W?]Z;+<[P5+l\gC7HJ/98\GDhOiY7>]&t8]srGaF],?YR*=_[kP#/#n@Vm`o/0_fB57G.Mo+B5#./L6 %9+T@F!Tcr.$]I'^mTu#?q//:_/:MjkcGbs3Mf[[])j1J,BaRs'R=AtP-+c==-G(igDb3hbW&V\T-kY;DPsM1*UY(Rh74m1e1W+)B %f#k3I4!&<?#Ba$n_%3qY/<;=u93.*,6AYo3VLYdRZ"'KWX$#&EQ+3?_A=\!&1[OJ)DGYIPU/X3kW!jSe39eW'RsKfp7k<9[.&oIE %q:bA;1+90CkI_^=FO`/5DDZA?05GdsK,0BS-&DjJL-8uu/E$M:F7D0F<(OUt.db)u6G"7>L&&u_bSo]mQ^k7;K'7kF[qWAsarfOI %i`)/'SC`Y/f+#9UKun\J&W^lt`5qn/aT*^]e=Mn6@%$r:_H>2=W@"]2-0:LEQrIB>T%%/6hb$,qC8X[E$<(tKN&l6,/'/\%_Vo:V %%K`Q=<6X[KopI6QVsB&k]ni2@ol5-3N5k/J9hDhFJ75)ibnUeeV!(f4:d<8#P`Yc3Za-B)\EclnkdEUeHY:eFp;?6^9rF4K-\C!% %ZK[U>AiY)oSJo0]2OeUAbfAP#Ym#u3W,+L@\^()l&!fq&m"UUMZft.Sj?9g5Uta#PdM_OXS'7a.o!=-iTK5n-SPh)2H>Lp1flTiD %TgESAT%S4[^g0-j:?,Z7*OG!pEp9f6H-g@gV(%8^bCQt`P]H#aRaN@bl'.E2hU?hUCc\Ek@s")*B%&3.K=d`EWb9d0Fet^;Bf;GU %)e+TFVGkX6gBV26MP1Nup<'723^uu+J_rJW:=K=5(uufO\dMeu,L3.'')A3RFNQ?-LX)bql@@j8LWlVo8ftqcEY"U5VdqnoZsD*A %ACDt-K/.l`N@HmrLc=uG%X60p;c63+p%\.dVWf%MBC<W7AcP^^X,j[--k^;CLtT/oDD@[VA2s<a_4)\/aTnhIQWC%c[sQp6[<csf %prQXAl>Y1RCo[Ra!D5<]<_otSL'!(:C)pJ$le0X\bch/rPa&5lm=S2t.<Ur&g:1!>kuOFAE>X[,%<\i.:h#iE4iD:VKsTt,\Psh& %`#flebafh")TlHU48)DaD3]M;13\oHE^n?0G:I[C<PMEjO`$LI_.E/Yb(]9-/nh<0SJnue9N*]Pk"a=!-nf[T1*^5>bagpE)iI&4 %/p!qVqe#3a."$4(Eu7.Hm<buO[=dRDS0b@E7eT_el%Z#\h0\>U/8BoK0t-UNP4a3GlSMRZ8#Ma4G#FIXXu)G8B/]Hb5us]g6hMQ3 %j)t5eafi^!UoGii25Bt8U:\o3.r7)?g\F6sWDPsZF"W3qeUmZ79KQcA<:c4!:egQ0:-%oc8)f`p(OCae&;FM7m7079<p57B.lI/` %6p@NhinU")EBi0i>HEhM7!@P79IJDKo>KaI[0ftL_m>T9PW!t@+R1L2:L>iQiCUVT%+Z7.aY$RiILX!ETN%rcWYIl1g6tO'a8jP. %MDWF,ERbok>GF'U[51bLk(h>0R'$p#_=2>[1m((fp/g8plI<sDotB#lYN5aAL:1tKhW_BcpTmpb-We?'l\a\-=!^R9Qel[p1mL?L %&6"DoH7-?rp[W4`'=ki"2SuBtSum"Ah[qkMiD)0Q_Cukm<Oah^[sF)BGOitu^!!-#<k-nl;P#o>;6Q4.OF5?j61U0I<k'sF)rJEI %S\3g[]Z+728;0.#\!j'7'gq)Wob+Qp__lVIG8,2N0oubn;KG+4<)'I]g3Z:o#+DF44cXMC5j"hmbAq^n\RPEge!l&>j3Z*Q&o1>t %.Y1>M>>2dRom>XSP*l$g'R@7%Sb(UF&#)2fG5%hDpol[po(d!Q"s6c<@o<>=B;qH-_T0P28n32"d;2n>Q\U3!D2u1/Z[I&4V%dCm %[^ujX&g_klR)C9@O.eDJ4*APZ:,,.8P/f&>]Tlj,)!6I%/]BCc'MV]seg<cX=kc3P8'u`$qA&6Y<GuX!.JKd6O6)!TAs)&QWM$;J %*lO$#\E8G7]D6X$@CG/SbT8B-CCBR&j,/`TD2UO<XChWlR@8?4ab>Ae*CKu-&tr2NTJR^VAi@jdQY3+X8^V=E`S-$d;S,qR/1ra3 %9!i_YETV>YIQjA3ePI)qF2<\Sk<q?of"33._fiYZ4=TI2S_BZgbULPU+j'\p:,^%h,fti5Sb0,8P40Zf?K\;)Xu*)rM%[8HF8o;7 %dNG>H-rFa@Y#P[c3eSJ-G5%h9@W*0;Q3.H@T^k-[8`,CI<0Wh`EFJps&"iM.Q/"U9>;\9T\ToFMPONst-WBQ[@.H-:NTth3qai=0 %DlT1BaCV35k,jrt>4J9+p#5(!D:"tW'&N;6KNlUJn1L?U.YG_kP2_2d6*Ick'VC5g'7diC9M[.G<+pJbW#bhAQf_AL\+DMEG-%(4 %7hq7`Nc7X\a]@dV9g<Ve.B6W'Csoe@]3OB@I]+`.WhD,H*YS/DTC3eu,Wjn=8XTp>;9u\6BY+(?ApGli`O1P?C=Vi"2-`0cBEkmT %gL<q^F.lSP=_Z$0<P)e<ks]9'A!>VP"=WS2'0/dgYIuV)4fGVLD:Gq[R?V%.'@eO':D6R]SUR)pYpkO)[,b4C1<b-S/KH:P$I6-5 %<SP8beR_J*9R/5XG^Ls^HW@R7cKH^K'OjM!q5\hZT`G8j[<R4#*a%.f^AbCh,5,g>lQ:aB2fN<0GH^[*4Ng1E5INda%-NQ5=tQ[/ %l!8950DXS;V(?;U8'U-uZX%o`Hd,#?9TRmI`^Z7SK@OlB2K7qedYsS-R=3M.9,4W;\qEcUZ7?#04.[qtZ822e#Y>"^=o[%V*IU>[ %OU#G,iFjj+/A@G7,76;,%&X0@C>X)?.`Y.7/mdOs<LFKnNXf(X3A@+cMl.hAGOe\LqO#B(5UjH,P00c$.?,"P`dm%H]*mh,(</F7 %chZP]^@BJ_cdoMeV,EQb3n#\[COBIL+X*^hA8;F+W>GB`!FiENB3XW;lImDN""9EfB!VJ;889X[;!T/8eLjNse<=%=-F3]3joD]W %In,!od2YC\h9nP(T[=`E6WM?0?t-dCSjol]JLj']3IjT)Ct,ckNTXECK#?A$0Ub"PVJKeNdl6Y65X&[kCQi>`e%S9HZn&F&W[OK" %0AN^!q(.EWJD-fB/]stfOmOM1j\t;OLG$_^dGoue.E[FR5#_ROV\\AmYEj=PU3s!6/,(I7-_"#)I[6R_MBbH*%Aa8MFo?tR-rorp %l#%o'\pc`Z_X11O:Bb3D<PLoV%>F*Dm2p1\Uop>-SC0^gqIs%(1OM-G:0g)ZG=1b!f2"q-e@Z`8canSZ+c@b<it-A3Zk[b\#bkVi %qT5'SXm2hJ;qdqJT6<>\7GjeSW32cddO`\]eFbmk"VCXDIbG0=V:aXIrO@MBX]s'EYNr),EMf7i\7>At3:ql"5!mj`1Mb[YY+JU0 %Rm;+CAYnXW+u+BGQ-m0lg86L#.IC?kO+Xl]<Bp*Jp^WDW^2mREmAbX4eDi?6TVA#6@]ll+Af)B183K@H5P@?2V5g.9LNhYJ'TK,A %P.6E5lM>397JbO.`EZ\5"kUUX8sP11l_e%=mk@mY-1*QO6t^moeb.BTkh=/oh6F,TG#c:?lLC8j'!,)oDspmmpo8cJWQ1p;`#He[ %fWOOQ0^h:^g30[2IL:?2U+8Z$U[2"4:E6^R?.El6X>H.2)&SPJ:tJM7]K$M0Iuq6jg1I^[H@3?VlB]r[3rg-J=7t=M*hQS>>3Ya8 %mCIbD9(C$8P2E4E7pS@HWdYkSO/D4=mENZ[eb.BlEs*K;YHFL6?8AR-QWorDlMBo+leA,9T3<lPDf7=3f2"&4j=k`T[!TVQV$hDf %]?-QjQ)]9[mS9+4Tqni`OBJEeE-2](\[m5^C4KED*N$!32CMF.d6lFViut;`c.TfIc:H70G$R=RI`l$_qIq<N.bm.s6dAVCWEn'# %<:lhQ>sE2F:rLEJWp?Rb(iGlimTA(:"dEh'5IH[eZZZ5R:M_T-_pnA.NX&V/Y2,eST.7cuVL\YKP-GXGg'9Ucm+U:]qIp<BGo#SG %Fo@PY6_+]ri?0/;:2<OkOUG?ZQt"Zbpa@j,aW.o.Vp[#kdD1*Cg7mB!-2=\]=a;PAHhUM+o"p?R0*m0Y"Lo/E\CfId[7!kUR*GTj %g"6?Lf*0I)8fVi1lDs$0>%MR-O6(L4i(P2Imk5m<8CY-FXG5l,Y,a=:-bO(f7uqgtFmZGF9/e#@q_ag)C>M#ZcLIu=G7?bQJS;Ch %h2.*rooI>lmIJ`cX::YU`8u(%qlWLCC@BEnld=e%*4jeXFikbLVj$k#^=n^QX(fIqo"OTVB%BUfe*U<k_acW^HoMWsM5/B1cXXY< %k=bS&h!+:&Bq6)#B8,I</D77Q?coSg)jS%(peL[-L+!XHBqj+g0+hd9r/rI8?%+DmUU.aVo9jd(>lMnf>.BR:ZqPrcIB!#''A='< %:4"4CGHoG6ol9CB6<?P%2MjT1m(VEUde%9[GV!FlV,TA'(J6qJFTc!\mi,hG9h;kkH$f1sbflfJ[en7:&$OLB<*\bO/U6>>G!7aC %i[9q[ZdC=r]AB",'V.4tM#-o-:tVZ.@N\]9rW9IrPudTV2.0XK?:$&ko*.V+eP]k70iT?1=)ZB@`4(WR$.e"&':'t9+#+b\@]ne^ %S>(r9\aR.(B^IAOLIok+:p*>h1@Xqq4S+$V]$+3LDjS1+,^!-[*8M%o0B\?&?7D.Tqhbejj%J4Vja/pI@<)/OIcmThY#MH4nMPT\ %+*Bprg72<N5Q4D#H?g>4W(pp^-UQYX!0ZkB-mBjc^'9.VRZG@!\+Uq.Y2OW;_hF'n+r$_6pa8<X1P_So+8uSbI.Ie31BI36#C7Bd %n_`<#e'kd(a7E7ThHr&\R?P4!$1k<V-gE'kDu:!HpdO&mj'VT#05em_`Q>k%MI1e-hY@t@kXFF.qT6F\o\c!tjgr.K5P'^MQX>An %quYWoQN?WW7?Tp^6EE_6>S8GnBhDF#FUJ)CR(dpN:;614+4I$p+9Uh?J7gi3J1Bso*p#H(2!RU&W1Ri,?Q2f7.p)KngMQu\M8X!5 %&SdY[To8%m$u]@!r0HnAP65^L<fe2Qn/TCRC=356<qIb%YF-'`mRW;"^bQdnMCm%hl]pT0csoVtUJcTo&i\Sj+mP0u3EE&lgQQ2* %I7mpZ@kRpC6VX/mV@DQ=XSI^q:?V;8`L3jahnKK]7<peD0t6e%&[G5e8d]9apC)4DKuY[bTREM`'k.-2gf!KGS#9=]l;Z0[m;0b% %1@e,'/"9^%7:a_CV,=N'g87Xt.-^a'4;1mMc7nW%2VlB<,2(/>k->hK5%RCo@*B\)%,bITQr8?;PIkaLM>Mp=97UA;Slb-(aB-$$ %W$"o#Z]WHDdZ)Fci]<Ir1Zi6s^2%Z8\8Pp,I'^Ec'TWp/OWO#uden")>2o$Im$(qHn$gCd7@+;LK4brcpj^WuddR#@+mS`VaZ?[r %T&(AQU_Y?T[-g<R<!tCeiI?grH.n$+@X"+8gGh8[$HaVQZ-Q$_/qB#oD]N9j6)kK@ne%R9`eSa)66&50kU'2S!W^]j9@.t-R3ou^ %ah\pk6=`?m`]%_Z]BqR5(KH#tT%W^<4+):Z7a:BIRGLUR*o$qRJU^X`Fl:FbSJ>;>&f5D^gkg2VONmQgh4?e\ZYDgAmM.6NJ@-L9 %98oJS2^X:Q84_=J_a>ZlFF`dZ8<)CK*=a/>@DRV@W;(`Q#To[$Oap425@UsX#)f+)!dtkqT"V3d@>q"Y,'=KQ^H--2mM88=Yr<@n %+4iii@AL*ZKps6IjKkTtD/#<KMdOi/pLtN5EE=;od%D12quX55pY""'9U%0QDb4=mf[7F[m70H6OqoY3$9nT"QjY3nlHhIgl;`3e %_N_'1(0"Bnq$"ki7Jg'H/M0rHA0g*TH!^%%=<,5o'#u'QZ6YCS"C2<-An:>C?*"baAI;::A%l77\M.V0It#s>]3sh#.c-!'mA8N+ %KFD[MC`DHEcZqrb3)=C0>Seh]kec.;\p7?08WP&l!L#BR+mm.]iuE;Jm*-3rG8W\H:gtD#Z4''rM\IIOk?!G+$k`GeK0AdhB.Bfd %En>tl&CP`t`Mq^hTgef,@42?+ft1=#H.i"Ba=E_//:>m-h-GVT!Ka:K'dH#Wg#oFcPoTEN7Z@=GQ(6s%5?T:FI!pX>XHErPs3FZd %;*578jZcloLOE#uTb")b$QS;AWoTh4,Gk;cX5pK<81E^B3&,m*NYt!4;1__`2kpKlT<jmd]c:34(Mja-1\fX0_QM:(,.)LuZ&4*t %%Er61/sQ&#N@k]2bc]sAG^p9WnPAqX4V+iOQEe--e<J#-9EWe2c"T$lH<:E?Zh';Dl,2:#Hur7KQUIbCB*dJ&]?;+j41"s[(UpJ. %:WGR[N*h+e`.7R1.A,g,f3SW74e9W@_bK56DpKt0QJ849+X5@8SM:g,.)onDM]CKISFg3k(IJt*9:XZJZ@(tuK=^Pl`Tk:ms%?R* %nT_tjO2PPZd*6/X>[B!P+/>7SD`P(UZ;m(#SIO_Xj`&ijrb#N(pG^R[Ci)mM6eQ(c>)c#Z_u>$;K]WQiDo+DY=dL5rLC:.CkY=q` %QX&K4;'&dY2lU]RSS4q_mQ44SP!\TK)iN2-992kcc66>sq*2W_k\#`Lg)0]]jqD?kpGYo1UL$H!\BJfI^5Mi9TiSQY"k=Zp^6)!j %pg&+q7DOT&<[(+JiQV&lP^C$<R^$&YbRZr8!QIID`e)^bM)^!DpPE3Knt`L=^HT)O:+p=gN&rk3:p=e,Km:]$pLH&Cl+,&_D83IR %qS>hsili1ZL'KX:`C%W,rH9_(VT1\iFcHS<j^WHKbcDJ$j%GpQ8#2-T5Q]160^auY[N/N=2R[+K4p&E9\g@],0Z7(H_f!N>rq//@ %ZLiag'@@3eR<0Z]<#BZc*S]+Y[L9;Pf:5]@,m::r.c#6!6XhJN#V2"a_,3D8]uUFHXQ]o;KKp-d$_Y\(/GJ.]jBoR*VHZ(B'qU7P %0'E0WGJpP,luFt>'EKjh2:#AOHU%^`D;`ABM1:+R\&$B[7d.I:irn:C$&`OOYcqOG@iI20j4LJ;O(7&m1qF#;9AL*\Hlp2N>MQ?I %fpkn!.EkF/!5IRDJc,U'5S+&a],hMC2E(u_pd]j:+k/Y<:4CDl\#%OtrP]GBRl,`>&(ffN+/LA&Wh+`TcLO<2Z;*hS%d(@aHm#q' %c[#FL&MKJ+Y$nA-*MdL&?*tbF!L$`P8G%-R*=!t%\hjqNXr,Q4=."d>=Z5$H%C$&_HQ^C9^$:0`5ia`,V"[KTUq%rYqpt(fnR'^S %(aZXG`rLA\e7Sai+"JHp5=L'mUOUQ+0&Zb9>U_H/T#7c@+EYhrj,?OAR'FiE)L=+ail`X:f]hG:=2A<F'HnC2WhT7,/gKh8m#g)) %\/F6b>`FlW?h(G?:>/(:6R@odF*9[?I@SLe:\-ko9`2]<J%.ftO]"aGBG!3+LF!3X38=M&V*Ws$["7/jmNb<C8M?k8]#AE.3oakk %,GQ?Y90j/:GZj^ZN17o'a:j:!dlF\X%tOU7>6diQX;lYb)&KQ=pEa)aF;JD.Nl[9QUb3"ZdfTst?`I6KE6apOZ-6@W>b9O7"_S:0 %DtRe3ZNa^gGenOlk*1"=N4<3S>O5@9UsA(>.9if8jkWhD>Abn$h%4e7mFMD5%Tf9U/t15##pYC4bn+6]j.\Zb>RY&>)iT:X!o^MA %IFeAjZHpO6+54I8n'E%FP"ce[hqci!fQ>jXRTJWjd"&17D9Tr;GE$H"Q2m-1XsJHW'!i_IVbk,!Pe"(if<OBQ3=.QK9?@q;>'^r) %%\e;:\T:%I\lUcJ&0N1?G"%F)KmD]Efo7,,l96S#^/&/^AD:L3W]L0aIsW:++\X]ZAbSW?(@#1]*.GJ?^t7+SFWoVqSX+h/Amd:d %SP/)GPfuFPqZ=k#&:9_PjC,+FUTf'=P`&kiDOhMX(Ktl:7(<<@&X>\h`t(%k?bYe;r6kA#@(t_1cf"@b71QR8,h8b$.-H32K2p6I %MK6uFd>?BET;%k9,&:Z\r21t+]\1K-k<DBqa2.@Vp&(^9kJAXiHLtX1o0_d?g<)GA\eilfT;%i#4sj.Q'pS<[Y]])(;XlasF3W`@ %4A!Mm_T/W?o-BTFhYu#g<)+ZErEn7[e;7EuS`4H.Fq7`G:3b2,Xu?a<+O\@@5=Vu*pW%5e+g&ug&b(;6hcR`f;K43%M85/XH<Tc? %gpjJOoN:FpQoh#.Ea9OTf;&/C]DQ)3U.5_1p"O5tR^=he44*]>lA!t'*G>nc4NJo#JJiV^KJa/;s6qE6F(HMH;(<QZ&lp1n$)@No %5DV^tT]$D29SR'@8N91.kQLl09#jKp8":'Q[+4!R?FI!hMcQ:(=Dp?I'b=d^_(H%Kq#N_*iK#X:oV[t_?<Eh+#jVK8i5S)P@k`AM %)M\8]U(Q*?[=h*qQlonUUUhaF`.E(V@1C7Kr*Lq>@(qN;JcneO[sH/#hVk4t0LA:gX&p3B_&q#_5r&l_BT+?]7)CIs8e^/k!d.1( %LN2r\4;*T<2o5Z*2H2LGUkj7`ngk9dM?72&0K"A.D+-h2E%?0eqVIeSSgCHr*iAHpoNsGq31a&.JNA<A-"+"J=N!gq,RapaVdOOU %1km*F<PUG&:LHLC&!Hf>7`GJ*@W[]bYA*2bNrG]G$$PhqX=%HD_oguTE0LiBGXN1,(ksSq^.+)+M(j#RD4#2b5rp"'5QW@nGGo:> %_,rN2`f8@'BYjoD%7p^JnZWk5pe`;oV^qg4((>sQ=CW&O/f5!K-4KJinc"Y:oH+t?(k>LM.RE',#^coO,0U6:TNfnP(!#X:WA*p* %9E\kp"\k'qS+7?e"SG7u"LLq^aiOHn!K[(Dhp<(a&Zd0MZC%)RdDCH^E5OBF*_cuiJ.N(tKn]^u@>4tGiCO,d!R@A,'=^:%J9rPr %'VI+<)A,1A',60ag&j)C%:ae'^e(aqOoYaf$^SVj1$fG?!#cG-UA]%_U#'2,MI7)D@WAH\g<<bKo8gGi2q\Ub8k2N"AJ@f]E_K#[ %7X,]0!]gEh^p>^4N(8]&nh\\&@6c2J6]sq>'t!HaTOTO5Q5'U#7VN!@R!&P^KV$*q&]?#p@#U+"3t#Rb!f$<mlJcFV.5HXl"<o/u %TKs\414asI",`<4W:6U$$.Dj-5uY/#<B(hl8S/GX)5kDKJ9Ah@b]it@TN[4<F,)tnKJ2ft\rDW>!6Y`pGk<S^B0_AC*45jX73Z/6 %0a'qoGb20./0R,AirT,mdT/)i3IV$8`o8`N"QM.E<Z(43P*&:oIo7(ITn:(o@X)n.R\P*o"9J&o%3HmpM!tNVO5pR55e[t`Q_l/f %aY8f2-$b*NT8qjkEmJ2[@oS\`2MN/[;cHlkJ-lp&GL1$i,M82>Sf9eb-l,`p.Yaf@L$_2?'#XrE^`Z)+*>`ZG!lR>nRD*>Qm4Wo$ %No:!PnV#s0C^%ZA'E8IV")K\9C;oX,,T9@pLmV_FU;-n@(f4J<-qF[H$U,J*#&SdQ!b+pCn[=)_Y+iH/#nUNCGZGVFK:*phK*N)* %([[/p$Gp+<BSPu6=omg'oEC/0`JB?6M0R/?1I1Oc't"B3n\i8)-R'_$<<DWGcjHQ^%C--0'I-1]k&Fd-QuRZWLgd.dJ7187p/t]! %N!Rid.Y`KXgQoWZ+,qC`":tZV-RE!Co3B\o$[apgAHd[!KP/i&F]0P9MIMNdOn1lW?PR]@_A]H"er4W]mE_\gq.;OhY!0IUTliC< %$q6Ug4i\t0TKZhm/caI]ZdJ^g[[,as"OtJQ<VMQJ[6'l&fA6+=!H5%]bMd2!?OidMq4HjWI)7`G7J*Tjq>]':>ds~> %AI9_PrivateDataEnd \ No newline at end of file
diff --git a/doc/arm/isc-logo.pdf b/doc/arm/isc-logo.pdf
deleted file mode 100644
index f6b9de52..00000000
--- a/doc/arm/isc-logo.pdf
+++ /dev/null
@@ -1,1193 +0,0 @@
-%PDF-1.5 %âãÏÓ
-1 0 obj <</Metadata 93 0 R/Pages 2 0 R/OCProperties<</D<</RBGroups[]/ON[16 0 R 38 0 R 60 0 R 82 0 R]/Order 81 0 R>>/OCGs[16 0 R 38 0 R 60 0 R 82 0 R]>>/Type/Catalog>> endobj 93 0 obj <</Subtype/XML/Length 19687/Type/Metadata>>stream
-<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
-<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.1-c036 46.277092, Fri Feb 23 2007 14:16:18 ">
- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
- <rdf:Description rdf:about=""
- xmlns:dc="http://purl.org/dc/elements/1.1/">
- <dc:format>application/pdf</dc:format>
- <dc:title>
- <rdf:Alt>
- <rdf:li xml:lang="x-default">ISC_logo_only_RGB</rdf:li>
- </rdf:Alt>
- </dc:title>
- </rdf:Description>
- <rdf:Description rdf:about=""
- xmlns:xap="http://ns.adobe.com/xap/1.0/"
- xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/">
- <xap:CreatorTool>Adobe Illustrator CS3</xap:CreatorTool>
- <xap:CreateDate>2010-03-03T12:03:19-08:00</xap:CreateDate>
- <xap:ModifyDate>2010-04-12T11:34:01-07:00</xap:ModifyDate>
- <xap:MetadataDate>2010-04-12T11:34:01-07:00</xap:MetadataDate>
- <xap:Thumbnails>
- <rdf:Alt>
- <rdf:li rdf:parseType="Resource">
- <xapGImg:width>256</xapGImg:width>
- <xapGImg:height>100</xapGImg:height>
- <xapGImg:format>JPEG</xapGImg:format>
- <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAZAEAAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8AimFDsVdirsVdirsVbAJN&#xA;BuT0GKvQfLn5R3ctkNY81Xa6Boy0YmYhZ3B3oqt9ivblv/knFKZP5/8Ay98sAweUNBS+uk2/St+C&#xA;SSP2lDVkofbh8sVSPUvzn/MG9Y8dQWzjP+6raKNQPkzB3/4bFCXRfmb5+ikMi65dFiakMwdf+BYE&#xA;YqyCx/O7X3i+qeYbG012xf8AvY5oljc/LiPT/wCExSipPJ3kXzpE0/ky6/RmsBS8mh3horUFT6TE&#xA;t+BI9lxV5xqel6jpd9LY6hbvbXcJpJDIKEeB9wexGxxQhcVdirsVdirsVdirsVTGx8ueYL+0kvLL&#xA;Tbm5tIq+pPFE7oKdfiUEbd8VS7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUXpel6hqt9FYaf&#xA;A9zdznjHEgqT4n2A6knpir1SOx8pfldbJcaj6etec3UNDaqaxW1RUMa/Z/1iOR/ZAFTil5x5l82a&#xA;95kvTd6tctMwr6UI+GKMHsidB+s98UJPirsVdirsVXwzTQTJNBI0U0bBo5EJVlYbgqRuCMVepaPr&#xA;+k/mJp6eXvM7pbeY4146RrfEAyN2ilpTc+HRu1G6qXnWu6FqehapPpmpReldQGjDqrA7qynurDoc&#xA;UJfirsVdirsVdirLfy98nwa9fT3epyG38v6Un1jU7mtPhAJEakd2oenb3piqeXv53a/DqsQ0GKKw&#xA;8v2hVLfTBFHR4kP7bcSylh/IRT36lSln5raRY2+uW2s6anDTPMFsmoQKBQK8g/eLt7kMfnihhOKu&#xA;xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVNfLnmbWPLl+1/pMwguWiaFmKq44PQnZgR1UHFUvurq5u&#xA;riS5uZWmuJmLyyyEszMepJOKqWKuxV2KuxV2KuxVtHZGDoSrqQVYGhBHQg4q9ZtZI/zO8pNaTU/x&#xA;pokfK3lJAN3AOzE9+x8Gof2jil5O6PG7RyKUdCVdGFCCNiCDihbirsVdiq+KKSaVIolLyyMFRFFS&#xA;WY0AA98VelfmFLH5U8qab5Fs2Au5VW916RD9qVt1jJ8Kj7lXxxS8yxQ9H8xx/XvyZ8s35+KXT7ue&#xA;zY9wsjOw/CNMUvOMUOxVP/LvkXzX5hIOl6fJLATQ3L/u4R4/vHopp4DfFWbw/krpumosvmrzJbWJ&#xA;pU20FGcj/JaQqfujOWY8M5/SCXHz6vFh+uQj8VddP/IvTvhMV/rBH7RZ1/UbUZmQ7MzHnQdTl9pN&#xA;JHkZS9w/XTjrv5RoCkflN2RvtF3+IfI82P45cOyJ/wA4OIfavF0hL7FrN+SN+SkmkXums23rROzA&#xA;e9PVk/4hkJdlZRyILdj9qNMTuJR+A/Whrn8n9J1WJ5/JmvRX5UcvqN1SOYL/AKwC7/60aj3zBy4J&#xA;4/qFO502uw5x+7kJff8ALm851XSNT0m9ex1K2ktLqP7UUgoadiOxB7EbZU5SDxV2KuxV2KuxV2Ku&#xA;xV2KuxV2KuxV2KuxV2Kpl5d12+0HWbXVrJqT2rhuJ6OvRkb2Zag4qzX82tCsLhbHzroq/wC4rXFD&#xA;XAA/u7mh5cqdC1DX/KVsUvOMUOxV2KvQfyZ0O2ufME+u39F03y/CbuZzuPUoTH/wIVn+YGKsQ8x6&#xA;1ca5rt9q1xtJeStJx68V6In+xUBcVS3FU2PmjWD5aHlz1V/RYn+s+nxHLnTpy6074qr+VfJXmHzR&#xA;dehpVsWjUgTXT/DDHX+d/H2FT7Yq9Jh8uflt5GFdVYeY9eXrbAAwxt4MhJQf7Op/yczNPocmXflH&#xA;vdRr+28Gm2J4p9w/T3Jbrv5qeaNSBhtZBpdmBxSC1+Fgo2AMn2v+BoM3OHs7FDmOI+f6nkNZ7Qan&#xA;NsDwR8v18/uYg8jyOzyMXdjVmY1JJ7knM8CnSEkmytwodirsVVIJ57eZJoJGimjPJJEJVlPiCNxk&#xA;SARRZQmYmwaIeg6Vrmk+erJPLfmwKNRoRpWsKAsgkOwVj4n7m/1qHNHruz+EccOXUPa9i9vHIRiz&#xA;fV0l3+R8/v8Afz4vmoerdirsVXxQyzSLFCjSSuaIiAsxPgAMVZRpf5WeftSAaDR5okO/O5424p40&#xA;lKMfoGKsih/IPzSEEl/f2FlGevOR2Ydz0QL0/wArG0r/APlTGmJ8M/nDTYpB1SqH9cq/qxVo/kxp&#xA;z0W384abLJ/LVRt9EjYqpTfkL5t4GSyvLC+j7elK4J/4JOP/AA2Nqx7VPyw8+aYC1xo07oNy9uBc&#xA;Cg7/ALkuQPnihjEkckTtHIpR1NGRgQQfcHFVuKuxV2KuxV6j+U97b67o2r+QtRf93exNcaYzf7rm&#xA;TdqfIhXp7N44peaXlpcWV3PZ3KGO4tpGimjPVXQlWH0EYoUcVdir1XUx/hT8mbOyH7vUvNEvrzdm&#xA;9Cgbr4cBGCP8o4peVYodir0fyV+VsU9kPMPm6b9GaCgDxxMeEs4O491Vu1Pibt45OEJTNRFlqz54&#xA;YomczwxCa+YvzJke0Gj+WIBo+ixDgnpAJK4+a/YB703Pc5vtL2bGG895fY8N2n7RZMtxxeiHf1P6&#xA;mDEkmp3J6nNm827CrsVdirsVdirsVbVmVgykhgagjYgjAoNMbzi32JOPLnlHzD5jufQ0izefiaSz&#xA;fZiT/XdqKPl1xVnf/Kv/ACB5UUSedNZ+uagBU6RYE1r4MRR9+xPDFKyX85LHSka38neXrXTIjUfW&#xA;ZlDysOxYJx3/ANZ2xVi2qfmX561NibjWbhFP+67dvq608KRcK/Tihjk0887mSaRpZD1dyWP3nFVP&#xA;FXYqqQzzwOJIZGikHR0JU/eMVZDpf5k+etMI+razcso6JO31haeAEwen0YqyeP8AOO31ONbfzf5f&#xA;s9WiAp9YjX05l9xy5b/6pXFK8eTPy1807+VdYbSdRf7GlajXiSeio5q33M/yxVh3mbyP5m8tS8dV&#xA;s2jhJol0nxwt8pBtX2ND7YoSHFXYqj9B1i50bWrLVLc/vbOVZQOnIA/Ep9mWoOKs3/OvSLdNbs/M&#xA;Vj8Wn6/bpcI46eoqrX/gkZG+dcUvOcUJp5W0V9b8xadpS1pdzpHIR1EdayN/sUBOKsu/O/WUvfOJ&#xA;06CgtdIhS2jRfshyOb0+XIL/ALHFLz3FD1byZ5I0ny7pkfmzzmnxN8WlaQw+N2G6u6Hv4Kdh1bwy&#xA;7BglllUXD12ux6aHHM+4dSlHmvzfq3mS+NxevwgQn6vaIf3cY9vFvFj+rbOm02mjijQ5975x2h2l&#xA;k1U+KfLoOg/HekeZLgOxV2KuxV2KuxV2KuxV2Ksq0f8ALXRtB0+PXPzAufqkLb22jRms8xG9H47/&#xA;AOxXp3YdM4p9jQPmX83NVu7b9FeXIV0DREHGOG2ASZl/ynWnGvgv0k4qwFmZmLMSWJqSdyScUNYq&#xA;7FXYq7FXYq7FXYq7FXYqzTyv+avmPRozZXhXWdHccJbC9/eDh0Ko7civyNV9sVT248leUPOlvJf+&#xA;R5xY6qql7jy/ckLXufSJJoK+5X/VxS821DT77TryWzvoHtrqE8ZIZAVYH5H8MUIfFXqdiT5m/JW7&#xA;tT8d/wCV5/Wi8fq5q258Ajv/AMCMUvLMUPTvyK0+BNZ1PzDdClroto7l/BpAan6I0fFLzrU7+bUN&#xA;Rur+f++u5nnk7/FIxY/rxQ9G/Lrylp2l6b/jfzOlLKE10ixYDlcS78X4nqKj4P8Agug3tw4ZZJcM&#xA;XF1mshp8ZnPl957kp8zeZNR8w6pJf3rddoYQfgijrsi/xPfOp0+COKPCHzPXa6epyGc/gO4dyU5e&#xA;4bsVdiqvHY3sqGSO3kdAKl1RiAPmBkTMDqzjimRYB+SiyspKsCGGxB2OFgRTWFXYqrQ2d3OCYIJJ&#xA;QOpRGb9QyJkBzLOOKUuQJUmVkYqwKsOoIocNsCK5tYVSrWtc1XWr+S/1S5e5upOrudgOyqBsqjwG&#xA;cU+xIHFXYq7FXYq7FXYq7FXYq7FXYq7FXYqrWl3dWdzHdWsrwXMLBopo2KurDuCNxir1DS/M3l78&#xA;wbOLQ/NpSy19Bw03XUAXmeySjYb+HQ9uJ6qWA+afKuseWdUfTtTi4SD4opV3jlStA6N3H4jvihl/&#xA;5G6jEnme50W4+K01q1kgePszopcf8JzH04pYHq+nS6bqt5p0397ZzSQOfExsVr+GKHpenf7gPyKv&#xA;bv7Nz5huTDGx68OXplf+AhkP04pY1+WnkyPzDq0lzqB9LQdMX19SmOwKipEdf8qhr7V70wgEmhzY&#xA;TmIxMpGgE187+bJPMGpgwr6OlWg9LTrUCgWMbcio2DNT6BQds6jR6UYY1/Eeb5n2t2lLVZb/AIB9&#xA;I/T7yh/JKq3m7R1YAqbuIEHcfaGT1f8AdS9zV2WL1OP+sH0Xd2lp9Um/cx/3bfsjwPtnKxkbG76d&#xA;kxx4TsOT5aVWZgqgliaADcknOyfIgLe/+Svy50fQ7GGa7t0udWZQ000gDiNiPsRg1A49K9T+Gczq&#xA;9dPISAai+j9l9i4sEAZASydSenkEwv8A8wfJ1hftYXWpIl1G3GRAkjqrdKM6KyCnep2yqGiyyjxC&#xA;Ozk5e2NLjnwSmOL4/fVIrXfLOheYbMxX0CTB1/c3KgeolRsySDf+ByGHUTxG4lu1ehw6mFTAPcev&#xA;wL5z1zSZ9I1e702c8pLWRo+Y2DAfZb/ZLQ51WHIJwEh1fMNVpzhyyxnnEvVvyy/LnTk02DWtXgW5&#xA;ubpRJawSjkkcZ+yxU7MzD4t+gp3zS9oa6XEYQNAc3sewuxYDGMuUcUpbgHkB+1mOsecvKugzJaah&#xA;epbS8QVgVHche1ViVuPtXMHFpcuQXEW7vU9p6fTnhnIRPdRP3BW1HR/L/mbTFNzFHd21xGGguFA5&#xA;qGFQ0b9VO+RhlyYZbbEM82mwarH6gJRI2P6i+efNGgzaDrt1pcrc/Qb93J05xsOSN/wJ3986jT5h&#xA;kgJDq+aa/SHT5pYz0+7owfORfV3Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXqnlDzJp3nTSF8l&#xA;+a5ALwCmh6s28iyAbRsxpU7UFT8Q2+1TFLEILXUvJfnm0XUE9KfTbqKSQj7LxBgSynurpXFCb/nZ&#xA;pYsfP13IopHfxRXSeHxLwY/S8ZOKp/8AmtaXMGm+TvJdkhe6SBWeBerTOFiQ/S4kxSv84S23ljy/&#xA;aeR9McF0C3Gt3CberO4DcD7dD8gvvm67L03+UPw/W8b7Tdo/5CJ85foH6fkwTN28cnnkf/lMNG/5&#xA;i4v+JDMbV/3UvcXP7K/xrH/XD6QvP95J/wDjG3/ETnKR5h9RyfSfc+YdDeJNb095iBEtzC0hboFE&#xA;gJr9GdfmB4DXcXybSEDLAnlxD731HnHPrj5j8z6RqGk65d2l+jLMJGdXNaSIzEiRSeobOv0+WM4A&#xA;xfJ9fpp4c0oz538/Nn+gfnJY6dotlYXFhNNLawpC0quoDcBxB336DNZm7LlOZkCNy9Jo/aWGLFGE&#xA;okmIr5MJ806vF5l81TX9vE0C3rQosbEMwKosXbb9nNjp8XhYuE71boNfqRqtQZxFcVfcA+kIYY4Y&#xA;UhjHGONQiKOyqKAZyZNm31GMREADkHzR5vvpL7zRqty7cudzIqnr8CMUQfQqjOt00OHHEeT5X2ll&#xA;OTUTkf5x/UPsel/l9+YXlbS/KlnYapf+jdwGQGMxTPRWkZl+JEYdG8c1Ot0WSeUyiNj7nqux+2dP&#xA;i00YZJ1IX0l3+QYb+aOuaLrXmKK90mf6xB9VSOWTg6fvFd6ikiqfslcz+z8M8eOpCjbou3tXiz5x&#xA;PEbHCO8b2e/4PLM5l9IdirsVdirsVdirsVdirsVTLSfLev6w/HS9PuLzsWijZlH+s1OI+k4qzHTv&#xA;yK89XSh7lbbT06t9YmBIHyiEv4nFKOP5P+W7PbVvOthbOOsK+mWr7cpVP/C4qtfyJ+U0QPqec+XH&#xA;Y8EVt+m3ENX6MVW/4B/K2ZVFv51WN23BljUClO4Jjp9JxVa35KveAny95k03ViASEVwjED2jM4+8&#xA;4qxTXvI/m/y43q6jp80EcZBW7j+OIGux9SMsq+1SDihnkxX8y/IrXFAfOHl5P3lPtXMHXt1LUNP8&#xA;sduWKUV5jsP8Rn8ttRoHN6Ira9Y9/SMbP+qTFU/1D6tD508w+db9Q9v5fij0/Skbo9y0YZ/+Babj&#xA;9JPbLcGE5JiI6uJrtUNPilkPQfb0eR3l3cXl3Nd3LmS4ndpJXPdmNSc66MREADkHyrJklORlLck2&#xA;o5Jgnnkf/lMNG/5i4v8AiQzG1f8AdS9xc/sr/Gsf9cPpC8/3kn/4xt/xE5ykeYfUcn0n3PlPO0fH&#xA;3tv5dfmXZahawaTq0oh1OICOKeQ0ScDZfiPSTxB6/hnPa7QGJMo/T9z3vYvbkMkRjymsg2v+d+37&#xA;2Z635e0fXLX6tqdstwgrwY7OhPdHHxLmvw554zcTTvNVo8Wojw5I3+j3PHvOn5T3+jRyX+lu17py&#xA;VaRCP30SjuQNnUdyPu75vdJ2lHJ6ZbS+x4ntT2engBnj9UPtH6/xswvSP+OtZf8AGeL/AImM2GX6&#xA;T7nRab+8j/WH3vqbONfXXyzq/wDx1r3/AIzy/wDEznZYvpHufItT/eS/rH70JljS7FWOZxT7E7FX&#xA;Yq7FXYq7FVyI8jrHGpd3IVEUVJJ2AAGKs70X8odbmtf0j5guIfLulihM14QJSD4RkrQ+zkH2xVMh&#xA;rf5QeV/h0vTZfM1+m31q8+GCvsrLx6/8V/7LFKX6r+dvna8T0bKSDSrYDisVpEKhew5ScyP9jTFD&#xA;DtR13WtTYtqN/cXhO/7+V5PuDE4qgcVdirsVbVmVgykhgagjYgjFWX+XfzW846KRGbw6hY/Zks72&#xA;syFehUM3xrt4Gntir0byU3lnWtYi8yeUE/RWtW+2saAWAimt5DSQxfZXbZlIovIDkFrXFL0ODyrZ&#xA;QHT1iNIdOvZ762joKL9YSYMg9g9wSPCgwK80/OHUobaS28vWh/dq8l/e+81w7OAflyY/IjN72Th2&#xA;Mz7g8V7U6y5Rwjpuf0fjzeaZuXkXYqnnkf8A5TDRv+YuL/iQzG1f91L3Fz+yv8ax/wBcPpC8/wB5&#xA;J/8AjG3/ABE5ykeYfUcn0n3Plmzs7q9uo7W1jM1xMeMUS9WPgM7KUhEWeT5FixSySEYi5FOZPIXn&#xA;GKNpJNJnVEBZ2IFAAKk9cxxrMR/iDnS7I1QFnHJN/J/5pa1ojx218zX+mCimNzWWNf8Aitz4fynb&#xA;5ZRquzoZNx6ZOb2b2/lwERn68f2j3H9H3PdLK8tr6zhvLZxJbXCLJE47qwqM5ycDEkHmH0HFljkg&#xA;JR3jIW8E85aRa6J+YDQwAJaGeG4jQdFWQhmUDwDVp7Z0ulynJgs86IfOu09NHBraj9PED830FnMP&#xA;pL5b1uNo9av42+0lzMp+YkIzssRuA9wfI9UKyzH9I/enflv8uvMHmHTjf2DQCASNF+9dlbkoBOwV&#xA;vHMbProYpcMrtz9F2Lm1MOOHDV1uf2ILzR5R1Xy1cQQaiYi9wheP0mLCgNN6hcs0+pjlBMejRr+z&#xA;smlkBOt+5gOcm+puxV2KuxV2Ksp8nfl3rfmblcpxsdIhqbnVLj4YVC7txrTmR37DuRirJJfOPk3y&#xA;YptfJloupasAVm1+8XkAeh9FdvwoP9bFLA9b8w63rl2brVryS7m34mQ/CoPZEFFUeyjFCXYq7FXY&#xA;q7FXYq7FXYq7FUbo2saho2p2+pafKYbu2YPGw6HxVh3VhsR4Yq+tPLuvWut6BZ6zDRIbqISMCfsM&#xA;NpFJ/wAhgR9GBSafOnmXV21jX77UidrmZmjr1EY+GMfQgAzsNPi4ICPcHyfXajxs0sn84/Z0+xLM&#xA;ucV2Kp55H/5TDRv+YuL/AIkMxtX/AHUvcXP7K/xrH/XD6QvP95J/+Mbf8ROcpHmH1HJ9J9z5n8ra&#xA;hHp3mTTL2U8YYLmNpW8E5AOf+BrnW6iHFjkB1D5VoMwxZ4TPISF+7q+mZY47i3eNviimQqSO6sKb&#xA;ZyINF9WlESjXQvA7v8pvOkN+1tDZi4h5UjulkjCMtdmPJgy/IjOmj2lhMbJryfOcns9qoz4RGx32&#xA;Ke3eW9KfSdBsdNdxJJawqkjjoWpVqe1emc7nycczLvL32i05w4Y4zziHhf5n6pBqHnO9kt2DRQcL&#xA;cOO7RLR/ueozpOz8ZjhF9d3z7t3OMmqkY8ht8v2vcvLGtQ61oNnqMbBjNGvrAfsygUkU/Js5zUYj&#xA;jmYvoGg1Qz4YzHUb+/q8s8+flj5hm8xXV/pFt9btL6QzEK6KySPu4YOV6tUgjNzo+0MYxiMjRDyH&#xA;a3YWeWeU8Q4ozN9NiefN6P5D8vz6D5ZtdPuSPrQ5SXAU1AeRieIP+SKDNVrMwyZDIcnqOydGdPp4&#xA;wl9XM/F5P+cOqxXvm4wRMGWwhS3cjcepVnbf25gH5Zuuy8Zjis9TbxvtJqBk1ND+AV8ef6U7/wCs&#xA;d/8Al2/6fM5x9Ed/1jv/AMu3/T5irv8ArHf/AJdv+nzFXf8AWO//AC7f9PmKtj/oXev/AB7f9PeK&#xA;s18yf4F/wzb/AKX9P/Dnweh6Hq/VqU/d/wC83w8f5a7YFYT/ANY7/wDLt/0+YVd/1jv/AMu3/T5i&#xA;rv8ArHf/AJdv+nzFXf8AWO//AC7f9PmKu/6x3/5dv+nzFXf9Y7/8u3/T5irv+sd/+Xb/AKfMVd/1&#xA;jv8A8u3/AE+Yq7/rHf8A5dv+nzFXf9Y7/wDLt/0+Yq7/AKx3/wCXb/p8xVnflr/B3+Fn/QXH/D9J&#xA;uXD1eNN/Vpz+Px6YY3Yrm15eHgPF9Nb+5in/ACA3/ij/AKes2v8Ahnn9jy/+tH9H/ZO/5Ab/AMUf&#xA;9PWP+Gef2L/rR/R/2Tv+QG/8Uf8AT1j/AIZ5/Yv+tH9H/ZIzRv8AlT/6VtP0Z6P6Q9VfqnH6xX1K&#xA;/DTl8PXxyGX81wnivh68m/TfyZ4kfDrjvb6ubP5fT9J/U/u+J5/Km+awc3pJVW/J5p/yA3/ij/p6&#xA;zbf4Z5/Y8p/rR/R/2T0HR/qH6Ltv0fX6j6Y+rcudfT/Z/vPipTpXtmsy8XEeLm9LpuDw48H0Vtz5&#xA;fHdGZW3qV16X1Wb1uXpcG9Thy5caGvHh8Vafy7+GGN2KYZK4TfKvxy3ebn/lR1d/Qr/0dZtv8M8/&#xA;seX/ANaP6P8AsmV+TP8AB/1a4/wxT6tzHr8PW9P1KdvV25U609q9swtV4tjxOfwdx2Z+V4T+X+m9&#xA;/qq/iyLMV2bj0xV5rcf8qU9eT6x6Xr829bn9b5c6/FyrvWvXNtH85W3L4PLT/kmzxVfX63//2Q==</xapGImg:image>
- </rdf:li>
- </rdf:Alt>
- </xap:Thumbnails>
- </rdf:Description>
- <rdf:Description rdf:about=""
- xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/"
- xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#">
- <xapMM:DocumentID>uuid:9EF2320A284E11DFACBCF5F943788E24</xapMM:DocumentID>
- <xapMM:InstanceID>uuid:6e7acc0d-a5db-48fe-a148-3d0ba888c54f</xapMM:InstanceID>
- <xapMM:DerivedFrom rdf:parseType="Resource">
- <stRef:instanceID>uuid:dd936053-2ab1-11de-bf43-000d93c1f82e</stRef:instanceID>
- </xapMM:DerivedFrom>
- </rdf:Description>
- <rdf:Description rdf:about=""
- xmlns:xapTPg="http://ns.adobe.com/xap/1.0/t/pg/"
- xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
- xmlns:xapG="http://ns.adobe.com/xap/1.0/g/">
- <xapTPg:NPages>1</xapTPg:NPages>
- <xapTPg:HasVisibleTransparency>False</xapTPg:HasVisibleTransparency>
- <xapTPg:HasVisibleOverprint>False</xapTPg:HasVisibleOverprint>
- <xapTPg:MaxPageSize rdf:parseType="Resource">
- <stDim:w>51.000000</stDim:w>
- <stDim:h>66.000000</stDim:h>
- <stDim:unit>Picas</stDim:unit>
- </xapTPg:MaxPageSize>
- <xapTPg:PlateNames>
- <rdf:Seq>
- <rdf:li>Cyan</rdf:li>
- <rdf:li>Magenta</rdf:li>
- <rdf:li>Yellow</rdf:li>
- <rdf:li>Black</rdf:li>
- </rdf:Seq>
- </xapTPg:PlateNames>
- <xapTPg:SwatchGroups>
- <rdf:Seq>
- <rdf:li rdf:parseType="Resource">
- <xapG:groupName>Default Swatch Group</xapG:groupName>
- <xapG:groupType>0</xapG:groupType>
- <xapG:Colorants>
- <rdf:Seq>
- <rdf:li rdf:parseType="Resource">
- <xapG:swatchName>White</xapG:swatchName>
- <xapG:mode>RGB</xapG:mode>
- <xapG:type>PROCESS</xapG:type>
- <xapG:red>255</xapG:red>
- <xapG:green>255</xapG:green>
- <xapG:blue>255</xapG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xapG:swatchName>Black</xapG:swatchName>
- <xapG:mode>RGB</xapG:mode>
- <xapG:type>PROCESS</xapG:type>
- <xapG:red>39</xapG:red>
- <xapG:green>37</xapG:green>
- <xapG:blue>37</xapG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xapG:swatchName>Yellow</xapG:swatchName>
- <xapG:mode>RGB</xapG:mode>
- <xapG:type>PROCESS</xapG:type>
- <xapG:red>255</xapG:red>
- <xapG:green>242</xapG:green>
- <xapG:blue>45</xapG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xapG:swatchName>Lime</xapG:swatchName>
- <xapG:mode>RGB</xapG:mode>
- <xapG:type>PROCESS</xapG:type>
- <xapG:red>189</xapG:red>
- <xapG:green>213</xapG:green>
- <xapG:blue>118</xapG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xapG:swatchName>Night Blue</xapG:swatchName>
- <xapG:mode>RGB</xapG:mode>
- <xapG:type>PROCESS</xapG:type>
- <xapG:red>31</xapG:red>
- <xapG:green>113</xapG:green>
- <xapG:blue>184</xapG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xapG:swatchName>ISC logo blue</xapG:swatchName>
- <xapG:type>PROCESS</xapG:type>
- <xapG:tint>100.000000</xapG:tint>
- <xapG:mode>RGB</xapG:mode>
- <xapG:red>0</xapG:red>
- <xapG:green>168</xapG:green>
- <xapG:blue>204</xapG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xapG:swatchName>PANTONE 425 U</xapG:swatchName>
- <xapG:type>PROCESS</xapG:type>
- <xapG:tint>100.000000</xapG:tint>
- <xapG:mode>RGB</xapG:mode>
- <xapG:red>94</xapG:red>
- <xapG:green>96</xapG:green>
- <xapG:blue>98</xapG:blue>
- </rdf:li>
- </rdf:Seq>
- </xapG:Colorants>
- </rdf:li>
- </rdf:Seq>
- </xapTPg:SwatchGroups>
- </rdf:Description>
- <rdf:Description rdf:about=""
- xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/">
- <illustrator:Type>Document</illustrator:Type>
- </rdf:Description>
- <rdf:Description rdf:about=""
- xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
- <pdf:Producer>Adobe PDF library 8.00</pdf:Producer>
- </rdf:Description>
- </rdf:RDF>
-</x:xmpmeta>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<?xpacket end="w"?> endstream endobj 2 0 obj <</Count 1/Type/Pages/Kids[5 0 R]>> endobj 16 0 obj <</Intent 17 0 R/Usage 18 0 R/Name(Layer 1)/Type/OCG>> endobj 38 0 obj <</Intent 39 0 R/Usage 40 0 R/Name(Layer 1)/Type/OCG>> endobj 60 0 obj <</Intent 61 0 R/Usage 62 0 R/Name(Layer 1)/Type/OCG>> endobj 82 0 obj <</Intent 83 0 R/Usage 84 0 R/Name(Layer 1)/Type/OCG>> endobj 83 0 obj [/View/Design] endobj 84 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 61 0 obj [/View/Design] endobj 62 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 17 0 obj [/View/Design] endobj 18 0 obj <</CreatorInfo<</Subtype/Artwork/Creator(Adobe Illustrator 13.0)>>>> endobj 81 0 obj [82 0 R] endobj 5 0 obj <</Parent 2 0 R/Contents 88 0 R/BleedBox[0.0 0.0 612.0 792.0]/PieceInfo<</Illustrator 72 0 R>>/ArtBox[247.087 367.565 365.086 412.583]/MediaBox[0.0 0.0 612.0 792.0]/Thumb 92 0 R/TrimBox[0.0 0.0 612.0 792.0]/Resources<</ColorSpace<</CS0 86 0 R>>/Properties<</MC0 82 0 R>>/ExtGState<</GS0 85 0 R>>>>/Type/Page/LastModified(D:20100412113400-07'00')>> endobj 88 0 obj <</Length 843/Filter/FlateDecode>>stream
-H‰tUIŽ$7 ¼ç+ôb‹‹¶«Û†OcàƒP°}©`ÜÿÁLU7Ð6
-ÈT¤$.Aëå·×òòåµ–Ÿ~~-Ç£–±¬tµrãâŸ??Ê÷ãåõ÷Zîo¥ŠÏgçsF)owlÿŠí¿ßŽEKÅO‹õ!ÝZq¼[oQîßî|;ÂÅ`¸–ÇáK¦GQ—¹ð²²$h¿ûñ×ñõƒ=¯KZôUà_*Oƒ·!ˬè‰Ï7ŸÒ*WYL¢›D‡m‰æ°zá[“˜Šnâ>?|°%6Kø
-›Øiê?ÃÒš)0*¾ßƒ2!} j´rS…[2 1Z“ÞGA¨u£r•~îωãÞeT䲎‡¦1'ïÇIŒ‚HGGŠ`´kf ò¸—wa±FÚFBA[c)L‡4SzZŠÓ¼ÄÓSF¬äDZÊІ9ù¸> Hº¡
-J‚xi†þOá@½-M†xôÉ‚î³_¨OC8³Ä:JXl 0$‡(•vàª~FC¬žm†¢Ëj£4QzÐŒT³«´$Ù‚±³
-F ‘åReBC[¬ÐWçz %A2×¹NôØVš‘æ
-BqÕ•l9uš
-Ì‹<{a˜ïºõ4ÖØ(®)tAtR÷´[bvL·>³o [Õ³ü˜“ÓÓ–²\AYŸ`IõÌõ„ˆ‰sz£“$Œ‰ýÁ˜˜IO
-!=§ ¨Œø†vGc £I#/'~<1‚ÀÔRPy±´ýl1½Ͷw1 чd }¡þa
-Ë9b :žÎÞF" ‹>64”~0IGD˜Ë Ø°$ÙtMâ¯%Z½Gð¾¥Úñ§aÑÌ‘ I¼ ý—/øýzü+À
-8;Z][]*Z8,$q8Pq<-a,+atR/Xlf;Og>R'7AkC?`UH+a:[!:Wd2gY.%C?Yr]87.+,n
-j3C.,APLcVQ0Wa_MIB(XjL_"klFg6$$NL0W09-&5e4ja+~> endstream endobj 85 0 obj <</OPM 1/BM/Normal/CA 1.0/OP false/SMask/None/ca 1.0/AIS false/op false/Type/ExtGState/SA true>> endobj 86 0 obj [/ICCBased 87 0 R] endobj 87 0 obj <</Length 281/Filter/FlateDecode/N 3>>stream
-H‰b``2ptqre``ÈÍ+)
-rwRˆˆŒR`?ÏÀÆÀÌ
-ò‹KRS€j!îAˆBPˆi
-8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
-b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
-E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
-6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1
-VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<
-PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(
-l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 72 0 obj <</Private 73 0 R/LastModified(D:20100412113400-07'00')>> endobj 73 0 obj <</RoundtripVersion 13/ContainerVersion 11/CreatorVersion 13/AIMetaData 74 0 R/AIPrivateData1 75 0 R/AIPrivateData2 76 0 R/AIPrivateData3 77 0 R/AIPrivateData4 78 0 R/AIPrivateData5 79 0 R/NumBlock 5/RoundtripStreamType 1>> endobj 74 0 obj <</Length 981>>stream
-%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 13.0 %%AI8_CreatorVersion: 13.0.2 %%For: (Brian Reid) () %%Title: (ISC_logo_only_RGB.ai) %%CreationDate: 4/12/10 11:34 AM %%BoundingBox: 247 367 366 413 %%HiResBoundingBox: 247.0869 367.5654 365.0859 412.583 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 9.0 %AI12_BuildNumber: 434 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0.658824 0.8 (ISC logo blue) %%+ 0.372549 0.376471 0.384314 (PANTONE 425 U) %%+ 0 0 0 ([Registration]) %AI3_TemplateBox: 306.5 395.5 306.5 395.5 %AI3_TileBox: 18 33.1201 594 786.96 %AI3_DocumentPreview: None %AI5_ArtSize: 612 792 %AI5_RulerUnits: 3 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 0 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: -381 793 0.92 1268 743 26 0 0 117 75 0 0 1 1 1 0 1 %AI5_OpenViewLayers: 7 %%PageOrigin:0 0 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 75 0 obj <</Length 11082>>stream
-%%BoundingBox: 247 367 366 413 %%HiResBoundingBox: 247.0869 367.5654 365.0859 412.583 %AI7_Thumbnail: 128 52 8 %%BeginData: 10932 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FD1F52285252A8FD04FFFD05A8FFFFFFA87DFD4F52285252522852 %525228525252285252522852525228525252285252522852277DA8FFFFA8 %7D7D525227FD04527DA8FFFFA85252275252522852525228525252285252 %522852525228525252285252522852525228525252285252522852525228 %52525228525252285252522852525228525252285252522852525228FD21 %52A8FFFF7D7D525227FD0752275252A8FFFF7DFD215227FD2A522E522752 %2E5227522E5227522E5227522E5227522E5227522E5227527DFFFFA85252 %27522E5227522E5227522E5227522752A8FF7D5227522E5227522E522752 %2E5227522E5227522E5227522E5227522E522752277D7D7D275227522E52 %27522E5227522E5227522E5227522E5227522E5227522E5227522E522752 %2E5227FD1A52277DA8FFA87D2EFD11522E527DFFA853FD1D52A8FFFFFF7D %28FD285228525252285252522852525228525252285252522852277DFFFF %7D522752525228525252285252522852525228525252275252FFA8522752 %285252522852525228525252285252522852525228525252277DFFA852A8 %FF5227525252285252522852525228525252285252522852525228525252 %285252522852525228FD1852277DFFFFFD1B52FFA8FD1A527DFFA8275252 %FF7DFD265227522E5227522E5227522E5227522E5227522E522752277DFF %FF525227522E5227522E5227522E5227522E5227522E5227522E52275252 %FFA852275227522E5227522E5227522E5227522E5227522E522752A8A827 %522E527DA9275227522E5227522E5227522E5227522E5227522E52275227 %5227522E5227522E5227522EFD17527DFFA8FD1E527DFFA8FD17527DFFFD %0452287DFFFD155228FD075228FD08522852525228525252285252522852 %5252285252522852527D2752525228525252285252522852525228525252 %2852525228525252285252527DFF7D522852525228525252285252522852 %525228FD0452FF7D5228FD0452FF52522852525228525252285252522752 %2752527DA1A8A8FFCACFA8CAA17D5252275228FD3C52A8FFFD145228A8FF %53FD0652FFA82EFD0C527D7DCAFD04FFAFAF85AF85AFAFFFFFFFA87DFD05 %522E5227522E5227522E5227522E5227522E5227522E5227522E5227522E %5227522E5227522E5227522E5227522E5227522E5227522E5227522752A8 %FF275227522E5227522E5227522E5227522E522752FFA827522E5227522E %FF7D522E5227522E522752275252A8FFFFAFAF603CFD041413FD04143C60 %AFFFFF535227FD3A52277DFFA827FD11527DFFFD0852A8FFFD0952A8CFFF %FFAF3C3D1414141A141A141A141A141A14141461AFFFA8FD045228525252 %285252522852525228525252285252522852525228525252285252522852 %5252285252522852525228525252285252522852525227A8FF5227525252 %2852525228525252285252522EFFA85227525252285228A87D5252522852 %27527DFFFFAF603CFD07141A1414141A1414141AFD041460FFA8FD3D52FF %A8FD10527DFF7DFD0F527DFFFFA9611414141A141A141A141A141A141A14 %1A141A141A141A14143CFFA827522E5227522E5227522E5227522E522752 %2E5227522E5227522E5227522E5227522E5227522E5227522E5227522E52 %27522E5227522E5227522E527DFF525227522E5227522E5227522E522752 %A8FF27522E5227522E5227522852275252A8FFFF3C1413FD191436FFFD3C %5259FFA828FD0E52FF7DFD0D527DFFFF8B1414141A141A141A141A141A14 %1A141A141A141A141A141A141A141A141460285252522852525228525252 %285252522852525228525252275227522752275227525252285252522852 %52522852525228525252285252522852525227A8FF7D2752525228525252 %2852525227A8FF52275252522852525228522752A8FFA93CFD05141A1414 %141A1414141A1414141A1414141A1414141A1414141A1414FD1552285252 %7D527D597D527DFD065227FD1852FFA8FD0D52FFFFFD0A52277DFFFF601A %141A141A141A141A141A141A141A141A141A141A141A141A141A141A141A %141A142E5227522E5227522E5227522E5227522752527D7DA8A8FD09FFA8 %FFA8A87D532852275227522E5227522E5227522E5227522E5227522E527D %FF525227522E5227522E52275252FF7D522E5227522E522752277DFFFF36 %FD2314FD0E527D7DFD07FFA8A87DA87DA87DFD04A8FD05FFA87DFD15527D %FFA827FD0A52A8FF7DFD0952A8FFAF1414141A141A141A141A141A141A14 %1A141A141A141A141A141A141A141A141A141A141A145252285252522852 %525227527DA8FFFFFFA87D7D52522752275227522752275227522752527D %A8FFFFFFA87E52522752525228525252285252522852525227A8FF522752 %5252285252522752FFA8275252522852525227A8FF85FD05141A1414141A %1414141A1414141A1414141A1414141A1414141A1414141A1414141AFD07 %52275253A8FFFFFFA8FD045227FD0F522EFD04527D7DFFFFFFA87DFD1052 %7DFF7DFD0A52FF7DFD0852A8FF8B1414141A141A141A141A141A141A141A %141A141A141A141A141A141A141A141A141A141A141A1427522E52275227 %7DA8FFFFA85252275227522E5227522E5227522E5227522E5227522E5227 %522E52275227527DFFFFFF7D52275227522E5227522E5227522752A8A827 %5227522E52275227A8FF5227522752525227A8FF6113FD2714FD0652A8FF %FF7D7D28FD22527DA8FFFF7DFD0C5227A8FF7DFD0852A8FFFD06522EA8FF %61141A141A141A141A141A141A141A141A141A141A141A141A141A141A14 %1A141A141A141A141A141A14285227527DFFFF7D52522752285252522852 %525228525252285252522852525228525252285252522852525228522752 %52FFFFA8525228522852525228FD0452FF7D5228525252285252FF7D5252 %52285227A8FF611414141A1414141A1414141A1414141A1414141A141414 %1A1414141A1414141A1414141A1414141A141452277DFFFFA87D28FD2952 %287DFFFF7EFD0B52A8FFFD065227A8FF7D2752525227A8FF8B141A141A14 %1A141A141A141A141A141A141A141A141A141A141A141A141A141A141A14 %1A141A141A141A1428A8FFFF525227522E5227522E5227522E5227522E52 %27522E5227522E5227522E5227522E5227522E5227522E5227522E522752 %7DFFA87D275227522E522752277EFF52275227522852A8FF52522752277D %FF8BFD121413FD0F1413FD0914FFFFA8FD3352FFFFA8FD0952FF7DFD0652 %FFA8FD04527DFFAF141A141A141A141A141A141A141A141A141A14613C3C %141A141A141A141A141A141A143D3C3C141A141A141A14FF7D2752525228 %525252285252522852525228525252285252522852525228525252285252 %522852525228525252285252522852525227A8FFA8FD045228525252A8A8 %27522852277DFF7D27522752A8FFFD051461A9AF848B1414141A141436AF %AFFFFFFFAFAF36FD04141A14141461A9FFAFFFAFAF601A1414141A7D2EFD %3552277DFFFFFD0752A8FFFD05527DFFFD04527DFF3C14141A141484FFFF %FFAF1A141A141A85FD09FF841A141A141A14AFFD08FF841A141A1427522E %5227522E5227522E5227522E5227522E5227522E5227522E5227522E5227 %522E5227522E5227522E5227522E5227522E5227522E52277DA8FF52522E %5227527DFF52522E5227FFA852275252FF60FD061485FFFFFFAFFD041460 %FD0BFF36FD0414AFFD0AFF60141414FD3A5253FFFF7DFD04527DFFA85252 %527DFFA8285252FFAF1A141A141A141A84FFFFFFAF3D141A14FD05FF603D %60FD04FFAF141A1461FD04FFA96136AFFD04FF141A142852525228525252 %285252522852525228525252285252522852525228525252285252522852 %52522852525228525252285252522852525228522752A8FF5252285252FF %A8FD0452FF7D5227A8FF3C141AFD051485FFFFFFAF14141460FD04FF3614 %141460FFFFFFA91A141484FFFFFFA91A141414FD04FF611414FD3D52A8FF %FD0452A8FF525228A8FF7D277DFF8B141A141A141A141A85FFFFFFAF1A14 %1A60FD04FF3C141A1461FD04FF141A14FD04FF8B141A141AAFFFFFFF601A %142E5227522E5227522E5227522E5227522E5227522E5227522E5227522E %5227522E5227522E5227522E5227522E5227522E5227522E5227522E5227 %522752A8FF5252277DFF7D2752A8FF2752A8FFFD08141385FFFFFFAF1414 %1361FD04FF36FD04148584856014133CFD04FF60FD0414FD04FF851314FD %3D52287DFFFF525252FF7D5252FFA8527DFF3C1A141A141A141A141A85FF %FFFFAF1A141A60FD04FFAF141A141A141A141A141A3CFD04FF61141A141A %3C616061361A145252285252522852525228525252285252522852525228 %525252285252522852525228525252285252522852525228525252275252 %522752525228525252277DFF7E2752FFA82753FF7E27FFA914141A141414 %1A1414148BFFFFFFAF1414143CAFFD04FFAFFD091461FD04FF3614141AFD %07141AFD2B522852285227FD075227FD075227A8FF7D27FFA8527DFF7D7D %FF3D141A141A141A141A141484FFFFFFA91A141A1485FD06FF603C141A14 %1A14143CFD04FF61141A141A141A141A141A1427522E5227522E5227522E %5227522E5227522E5227522E5227522E5227522E5227522E522752275227 %FD04527D7DA8A8FFA8FFA8FFA8A87D7D52522752275227FFA8527DFF277D %FF52A8AF13FD0A1485FFFFFFAFFD0414138BFD06FFA860FD05143CFD04FF %36FD0B14FD2852A8A8FD07FFA8FFA8FFA8FD06FFA87D5227527DFF7D7DFF %7DA8FF7DFF3C1A141A141A141A141A141A84FFFFFFAF3D141A141A148BFD %07FF8B141A141A3CFD04FF61141A141A141A141A141A1428525252285252 %522852525228525252285252522852525228525252285252522752275252 %A8A8FFFFFFA8A87D7DFD065227FD04527D7DA8FFFFA87D2752A8FF52FF7D %A8A8CAA914141A1414141A1414141A1485FFFFFFAFFD071460A8FD06FF8B %1414143CFD04FF36FD04141A1414141A1414FD2252A8FD04FF7D7D525228 %5227FD0B52275252527DFFFFFF5253FFA8A8A8FFA8FF61141A141A141A14 %1A141A141A85FFFFFFAF1A141A141A141A141A60FD06FF85141A3CFD04FF %61141A141A141A141A141A142E5227522E5227522E5227522E5227522E52 %27522E5227522E5227522752277DA8FFFFA859522752275227522E522752 %2E5227522E5227522E5227522752277DA8FF7DA8FFFFA8FFFFAFFD0C1413 %85FFFFFFAFFD061413FD0414AFFD04FFA9141360FD04FF36FD051413FD05 %14FD1D527DFFFFFF7D7DFD1E52A8FFA8FD05FF601A141A141A141A141A14 %1A141A85FFFFFFAF1A141A143D363D141A141A14FD05FF3C1A3CFD04FF61 %141A141A60AF85AF601A1452522852525228525252285252522852525228 %52525228525252277DFFFFA87D2E52275252522852525228525252285252 %52285252522852525228525252285228527DFD06FF3C141A1414141A1414 %141A1414148BFFFFFFAF141414AFFFFFAF8BFD04143CFD04FF3C143CFD04 %FF60FD04148BFFFFFFAF1414FD1752285259FFFFA9525227FD2352A8FD04 %FFAF141A141A141A141A141A141A141484FFFFFFA91A141484FFFFFFA91A %141A1461FD04FF3C1414FD04FF8B141A141AA9FFFFFF85141427522E5227 %522E5227522E5227522E5227522E52275227527DFFA87D27522E5227522E %5227522E5227522E5227522E5227522E5227522E5227522E5227522E5227 %522752A8FFFFFF60FD0E1485FFFFFFAF14141485FD04FFFD041436FD04FF %3C141484FFFFFFA8FD0414FD04FF611414FD16527DFFFF7D5228FD275227 %A8FFFFFF3D141A141A141A141A141A141A141A84FFFFFFAF3D141460FD04 %FFAF363C3CFD05FF141A1461FD04FF853C148BFD04FF3C1A142752275227 %52275227522752275227522752275227A8FFA82852275227522752275227 %522752275227522752275227522752275227522752275227522752275227 %52275252FFFFAFFD0F1485FFFFFFAFFD0414A8FD05FFAFFD05FF36FD0414 %AFFD0AFF841414147D527D527D527D527D527D527D527D527D527D52A8FF %FF527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527DA8FF853C363D3C3C363D3C3C36 %3D3C3C363D85FFFFFFAF3D363D3685FD0AFFAF3C363D3C3C60FD0AFF6136 %3D3CFD16FFA8FD49FFAFFD11FFAFFD09FFAFFFFFFF %%EndData endstream endobj 76 0 obj <</Length 65536>>stream
-%AI12_CompressedDataxœì½ëŽ]Iv&öçÒ?tM*î—¶1@æÉLY%5º[ @±¨ÇE²Áª’Ü~zÇZëûVìs2Y]7Æ@ç“™+÷‰;"ÖýöÿÓ¯ûâöËÿüöE~nNñçOo_óñÓ¯nzó×_}õí×ß|Ð/~óË›¸îZ7Ýþõø7þÃÛO_¿ûøáWú§—iýñQ>ý‹»Oï^¸ùÍÛw_þòæ¿\àß½ûæ«·ëýÛó_}üýÇ/>~øê_üæ¯î^¾~÷K>xtÿú›u[ù˘þ2†›•ËÍí߬î>~ûáËw~÷ñÿþÕM*ý&7ù×nJÌëÏÿû»ß¼ýúúž—a´)7¾¬­–õC]:×GÒË:äc÷ß|ûþí‡o~ýéã›·_}þøÕÇO_ÿêæüÇ5û¿yýûõ—×7ÿçÛ¯¾úøï7w_½~óÖË×/ß}õv½çû×ßÜLY‘Û¿Žé‹»oß}õåß~ûþŸß®(¹8¡#þý×k¨5ªü,àþÅ_¿_ß¾ýæ›5Ûõ<YÕµÇY,àMxÙꩬ†.Ý,ÝÍ?õí[Y³ÿyÁsOµLý¡•å‡Qr,7¿øõíßþîïþöᦤzó÷¸]¯_üÓoÞþþnëZðÿúK›èïÞ¾ÿÃWkñuírh/ëMžU¾ïŸqçz{½+Ž›œ_ÆâMå¦ör6»g¯ëÛ{÷ößuó·?¼µÅ»ýôÍoßý?k9ZL7}&ƒþæÛ¯Þ~úûï¾Y«‘4méþæã—o¿ZòÏ>~õZWL¯ˆÿÃM°~÷úÓïß~³ŽÂǯ¾ýFæøÓÚšW¯ÿøV¶7Úþîo?üîã?èü^ä×lòZÀ™nbj㦗|“š='ö›^ñȨŌd C÷µÐ¿^{ûwŸÞýþ݇_abý‹¿úôî˽ß=Ý û¦o°vwÿ›üg“\ïûÍ7o?`ÒëœÿæpnÂË¿ùízâÇ/ÏßË‚-¨²¶÷Ã:Kë°ØßügýËúø·°Ùëï_¬½ùõ§wdÌÓßê_Æ¿þêÛõ§¿úôñÛ?üõ‡ùxú…„_¿þæ_&¼ýðå× ± f¿ÞØ'ôÕ»{k°…ÛøåwŽ÷»O¯ß¬ÇÞüÝ?ÿ··o¾Y`ÿôÛoß}óöOôÛ7²LŸnî>}ûõ¿Þüîãǯ|~—òi¬P¹ÿŒgüZ?ðáï>ØJ?}n¸~ÒÂŒÿáž²îþüÖÿGýüú«¯ÞýþÓë?üë»7Ï=à™¿û“ìo?àa Ç?½ÝŸ×_ùÿ÷8–|ÿÏ¿z÷õû}_¿þôÍ»7_½ýí¿þæíû?=ÚýÛYœí°l
-}øðoo¿úø‡Ã$òú×7ÿåõ§?|×вMÿòî× CŸ÷2~|ÿaÚ7¿ý××x«Óýæ_õÎß~cüÕë¯?Ý(܇ò³Îï¢g—$É`>hýbÆ#é{ñâ;hb¿¹ûpøó_}zýå»Em—@ó÷>¼~ÿöË›ßôËÓSТñõæîËÓ?þ·Sˆëú¿N?ç`ÿ øƒ_øôŸ×JÝ=ÜÝßïîînïæ]¿kwõ®Üå»xnnïoïnooçºúm»-·ù6݆ù8æyÞMù³Í%–Ì4à ãq<œÆyÜc´±ä¿‘Öúc¿_×¹ßõ¹®Ñ{¯ë*=õØc{lëºowm=§Ö×ÕZYW>µÜR -ÔÇú°®óºÖ$ëm]£ËµŠÜ¹®¼®¸®PCy\×úÎëº/ë•Ê­^£ŒÓv=¸èg
-¿®È+?îËVê׃^ûçõÿ9œ£~—+žÓº"þOç¼.þl¿Ë=ñä€xñgûý;þœ×ñ¹t=ìç“þÚüª×5”¿w\ã ¤ŸÐþÄËÿtxÌŵV*¬µº¯ëj¸tçﮉë×^g\üzðëQ®ÓýãCÀq%¿²_Wõ«®î×8= ¿æáº=\w×ù꺿¼NëÛ羟¿ôT­cÞןëØß­õ»_ó|ìa!EêyÒº0A¾ÆBšÛ…<çµ”ýq„±–²Ð >äkŽÛÓ¾³®ôÃx\Hj¦™ŠÖuµ…|‚œsáôÂ÷…Æ÷úÞ·a]q¡w^W¹]صq=ñvœnÇÂùº»=¯K6M–çñ.¬+®+­+¯KÐLPs½È¢$ýnÍäNŸ²hËí}ïÎ'Ûñ 4"ê?û¡+Upâ>ïëáp=/¡‡+^\I®“ý·®|u•«ëú«=¹”˜ì?¿Æ³×üìu{}ž€îþÔµVªÜüÅwŸ„ .Š¬ÿùÕ}QQûn×¢“úWÆw»Òºì{2È ?$ÿ³\—|ý@ôß…«®¹éñYï++q»Níý"#1Æ¥ÁǶØÏŒ·ëÀÝÇÇõ>)åu$Zê mn×ɾ_æ1ÇœrYG£ç±ä.ß/ž°Ö*–¼Î‡°“¹¿œÌG=kIM[»-[v^tèq­w\œ¬¬Ó"ø.ؾp˜^ËO É ÅÁ½‹"öBjÅhÁfÁdÃbÁ`ÅÞ…·IqVðu(š.Ô<)NVÅÆ©x´ÓÕ¸ e‚ˆ‚ÓB >’b
-½À± j›7 >]ü!‘X Ù^ô[ä½Òwà¾Ò}ãB«„?§¨z)bŸÖ·µÌë{º_[s¿6íü¸®‡5ÊYÿõ^w~ •ZK~E–·¸cV²BC†õ¸”dž«â"-¡pE½‚]NÏùåì`/.X.rrŸ~±äd[\n_ÑVšÜË‹‹\ˆ_\.¶]ó°äã„uçÚcýít PÕ È3mïuÄ[¡ëí²G²?ÁwæNWßV^ä’,òËI×û(iŽƒ¬™TÚ|Tyó ‰s¨ÄY!sFH÷*wÞÎyZ<¬CôÌ +¢ ŸëµDú¼U鳫üYT*>@½…ÚTÍ"ƒžU|Tô¬BèT!´ãyÂéÿôÕŸ¿NW€ñ=®ù]×ɼý^×ÝŸºNJÍž\G梤ÿQH¦aÃ:“ OùýApv}?ëÿü~qa}¿Õÿù]þ¿=­ÿ¦^ßåêz5¥ÒòÝø7t|—ÿ“þŸÖe_‹êŸô?ü‚ïÁ0ÖpGÙÀ½^g|?‹HsñýNä"û~Â/óp-þjRÜP9NdÙù´(}­E鈠•Ð aàSu–¶¸CÎ"ˆj-Šð÷¦­œt/eã»k)‹é‹ ‹~Ò(z…r£…‹/­gªø"_²£ÿºê´˜Ù­H‚‹±õõHÑu„ÕÅõ;‰’ÝàÈâÛrËc-mõNºD²4\ ‘1 a×Q¢Ý>¬OÉ& Ù{e±e1Xa¯÷‹µ¦5í¾^㼤÷°^±(FÜ)/>ºä¨“2ÑGe Â>§2ÏÇ5»¼0¸/l^<SEâ¼0^Äàó’êEö5n9TÚ½_Rn\ädI¶'0ʳ²Ê¨|rsÉ{GMÅjªþÜ.²v^îq“¸V´¨vÓU›Nv>‰¢¢:IQ=c¨úpsQv¤Â3XÔf]Æ$„±=ÚQTf'ÏHÊþ2ÝzШúÉÕ©£*uT¤¶
-¥üáBsÚ:“ëJ'W” ¹^tÔ„Žz«5`ƒFŒ=.VyZßT
-×˸ê"Àz:TÍ ¢AUÄ—¡¶Ó5¨m¨®ñDÛ8觃²AE㬢Žé®WP/®
-¢Á»¾ùgQ8Ò— ùÚ`P-\¹ÌP/»šLżw%3AÍü¬aét°,=oW:Z•& JÛœdÆ$3%©!é;Ò£Û
-ìGf:£U"A¾M-GÅǪ̂B£iÉâl–Ò÷¡”žWóëh
-‡‘‹T2 y¹ù8xZ_ËjN©ànÆßné59ÃGµX2»à /ÃÀBJ?øQÌ“"¾”³òAõ¨œ„ÊÇJ<h=ÙI~uí§ÁÝÒuL×…T:ØÎÙ1tÆ@IrE‰W<\éò:ÁkCÏ;.=
-›Íö‹k\]ógÏåuû™ëé×ùú:A‰»¾~ìuºøõñ§_§Ÿ>ÄŸ"y„ÿ…JÁ5ª²?8Â?‹ò'˜Ý.ð^•ƒò âŸá1ÔOja*°HÀÉiÀý’,„ (ð˜ ó‚ì&[˜m iOÐ`Bª@Ù–Ò-iæg•C`pj>4Gj9¨Ä8P
-ÒŠM-(†Ñ RŒ†ëài5L½ƒsÜ(ÇÃõ ÿ59¡·¯]Ð¥%§i_·¢rçD„ÅܵÚ²éK„ÄÈk©½—äæHtêA=’Ÿ~^„H¯ÓMºüú,¦HÖ“ëô¹?\Ѹï}~øGþãü¡(nþxàèù€Þàé'øÑÁ½‰àõÎ~DpCnêÿÆßvŸ½Ä¦lÞ¼:‚Ï‚?øüÖV©¯ÂpRmáÈô“+¯‚àÅí„~Š«$pRQ€!ÝÑü(¢?
-á³;iíOO0þîB’ø,Ú‘ÿôy쿸ž¢ÿñ:Óg¨Âó×5­ø,Íxzýè¯Ó÷¸ç»‰ÑÕuúa·ÿ¨/Qüg4ý‡¯®t¸2²­—UcNhÃ4Œ¹…ó(²MK iFÕ¨©ÜžàK¤Ð’°Á ¡h´g>êL\1j6%ï4€ãAýMé´è˜‰)awj¾°
- æzÏŠ—Ž(uEà¿s¼Å 7 æcäpºŠ¾WαÃSUC‰D“âí•gÔ°øåÅ÷ùpðÎ ©¹UŸÏT]¢«ïÇüôêÐWâ”Nâ r—ý£º…躇¾NÿýT¿¬Š LÞü¢V›¬1žTÜ îÚðŒ{ˆ…w|±ã..#..¢-Nµ° ‹‹@ «Ø±Œ«¸×¹Mív.")†_ýpµÃuŒæ,W&«É¡‹××5¯º¼¾3ü3ŠÿÅÿŒâFñ?£øŸQüÏ(þÿc?:’ çé&‡—9«/x;Š?sƒºá«}ÙÄCõõ‡Š‡4ÎÆÔù'îçüÁŸæFœÏº§¸³»'Ôòá›9ú\I‡JßßðÓÕŸ®?zý×剱S£ßOOAøÿéúżï5ýÈÞžðë­Yg²*: ­gÕPÍaÆÕD‘O)°£ÒŠjT³ŸöL§j5E²¢·ÓópH1Û("y>Іdµ,˜½3[¾ÒEîúš4øµ-*}™.R©s«†E ÒI ƒíjˆ;[ sií`u°¼òߦq´ÂšÖ‹|²t¹ ̨èdë•5v»^îá¨5÷‹e¾ØëX‚m³‹éœÔ({ðÀ 5†6ÙÄ(… gKS7”ÝÝ!XL«‹Òxš˜²“?.S?>Ÿöñá8§gãq¾#"ç³9É9ýð˜œË¬š‹œ%…œ•cbÏs‚ÍOH9]ç|gôæhp«E&?"ê‹‚Ô¥:¶¶8u¨¶HuªÚI§f“Óé«£he=
-W6Ý-^Ù¤Ï'7$¬+Ë¢s->÷ZÄšˆÓ}"bDÂë"oÐräî5G.)ù3Ï’xŒÕø
-w’ÀH’9©Ÿ­ìk)«(+uíî+ñ¸²L{Ö%¤Ë°^þÎcqåMí°®M¨k-n×v=ªõSÂ÷ïî4t_÷‡š3×Ѭë˜ÞÞß/|Jë0u¸"ç…æ]&z=>gŸÞ¶Mé¤|Ö´ ~£C%ˆô¯EýÄâ1DqD‡¼pr DpÞ>ãǾŽy9z¯Ý›¥Cþ©mØ>ÄkCjŽ*/?¨¤|§2ò¸¯ád1ö&[ bíˆ'+ëÀÊEþ*b˜!„*¼¬Ÿ‰Lû±C!Tn}Jo襪è…q%â.J¸ŸÄœUh¨ýdnùåÌ©gôS‡Ò%ó³ñd$Ùyð%‡Ië÷0ž‘)Ú0?IÂLϪ¥«@5¦׋ÿËáÿç‘/sŽãÖN.öÿLå>þ;9ÔŽ±ë;uúÚ…vAhM/âî,ÞFbm¢º°*œð[°dlM÷ ñM¢JšFµä¼“
-vgOD¶Pº~‘‡4¹*á’aàâK‹þŽ'J–ü>+qÈ°ªêšÚßî½c½‘iuÏ\«“:˜lu‹›õ%EuõÏtOWºCŠÒƒ¦&EMGZäKס9øá±Oý1@‡¡~ãિEéuÖŸà¥gÔŸ®‚dd«Ç²¥þ+žìdø®K4ÔwHv:Ý^ÖVx®¾B‡ƒo*»cºÓƒ:ú©NÙJ‚ÔCŽÓ­»ø‘Ô´š˜Ît«¢¥, =t"üUHÈŸÉi~šÕ¼…ÝËdò«ìæÓ“Lòí WðÎr~šçìÂðéVs‘î|‹ŸÊÆ[>Þaë’O»îñëÁ¾£Øw$;cٟij[¶×g¤lÞ×és Ò?V4>}.AúÇæ}ž‘"¡V¶ªÖµ”-ÂEd
-É“E☬‚2,‘[R¦¬|iŽŒ'X$YèÒ*I»¤½(ÅæƒmÒ‹1Å÷îôŒ}ò»-”´Q²FÑ…R¬”;û÷ÒFùy åµ}Ò¬“—RcûEèbvª–çv¼¿¾×-²$÷q“¾(M|âå°Ä î‡<·ÆõôO…Ÿ8ÎO“vò³ÒN~Ξ6žØÒ¶%m@cØV«~a
-/JVi:Ʀ6¢‚H¢Ž¨™÷1Ÿ6rBHwUR;Õà91¼Ùë<²JÍŠ'XѲx‡@«¨À¦
-4—b͵ps´ö=s.… ‘Ç %wnË:Z³hÏ¢E 6-·j=`¬ó…mk V{E \*(›…‹6.Z¹Ì¢ò“$ˆgŒ§ï'?|ÎñCÚÂÏ‘G¾ÇtµLCEÝÆ‹ñÄ TֈƋš$W1'ó“ǺœSåħ
- 6Ó#+S!“Ýþ /þiãü4^\ŸåÅUê:/VEgËõÇÿj;¤C¢êUªÐåËÔÕÓ•ô¿ej
-hî6-I¡9_–uÌ‚?ÛV %ÁEYg& íѱ”I…ÞÆj4ôUçŽøŸa,Ó?ùfï14úÑôFT}yY8
-ö<QÍÊ(?I÷ìÏ©žýÒ
-ü¤áIØì†Í‹ÚÃ߯|{k5I$!bÐtco8T¸¦¹÷ÁÃ+”ª[fz?oñ=!1’Âu»wï²â6M°õG^íùëô¹?\ÜôŸ¯Ÿ\ž½ò³WzöŠ'Äÿ]_áx™Xñ3VN¦{z&àÈw•ó>)ü¾Æíá§[”°åO˽Ã_Ë!˜Éª¥Ûu¾ª:bÚ1£ä{—˜cæ«eÏ;Fõhù´Îvyft‘wtâ¶Òoû<ýÎÛ,o¾eé{N‰ùœ
-se9„]ËŽÂö1Mš³öb“nÊx™^Ü<g"ûÑC]•ùúÁ!Pk¤Ñ[ùY©8Öe<U Á‘f@ý88i2M•ÏYÒ8ßEÉH"í…¤ÑæRhÒµ }Ì¿<…›Ûõïÿýôíºv‡¼üãúåÿX?ü·ú÷›ró77ÿô_ÃÍ—rïoN/J–ˆ7¥Ç"L«Ü¼?½É÷å\ÒÎüêÜæx)z”€9Âs°ÃÇ?è¬þníMÃ!{ÙœIzÕ;–º‹r „›G®1~øÇ×—ó U*œUŸv¥¸¥z³`yíÝÒ2 [l‰`Q`åeïñæ|2è UfÚgÖ„^=ÿ¬W§ÑûÓË…?ÝþPç+t9¿\ïm˜¡·ÛÍeéZÃ$Àñe­ `oìÞÚºŽÐ—
-Ú
-†áÎ%ƒ'”Îñ(Á÷æEÏm ȼî\hË—mmPÖYÁ«’ˆÕa|d È7‹*‡ZÁfKî.Äâid±q£ IJ¥ý4Ü»”%°tRºEÖù¨EÜZæIJ„±aÏÊœå… à›ùêýó ã)SôEÛ^a^yg³CÓªu˜6 ¥XƒL,°‹QÎ/ª„Úaer0¼i퀻z>m€…-±b”cpa´5ãÛM$*ŠE¥vÿ|nv<6D£tM>5°Üäû­;I[41úÖt—ÖR-@LÍ Ý¦lLä
-9áÖÐ+¥Ìj„¨K3u
-´BÿùñY(à-"ãÖ%6w|èÞ—8•:&u%ËšŒŸuo4å¢ ®<kR”Õ¶þë3%aú:`¡çËmY@1rÛ½ë0بë€/å×ôb—…{£o‹ˆÚ•;KÔ^@¥ÖzoŸêçbBçe£ëKó«ªf(æé¨J5_|^Ì^g
-3*}ÅÄ{vQqm€bÐq_<!u­³² ±ÔŒ8áJM(„$O¾pB ˆ#]¤dw‘°‘XÕXÔ©[r­{×<pöÕ7`wˆ<é ‡ÌpØ  fF#xvÊŒû̵"cr^NxIE8£W›Ù„c;ŽÕÈá\'ÒQ1 Ƙr†xp†¬M "kÛˆõ©6 ¸ö<Wð¤õ’:À’ýÅ®‘@•
-0ÑOŒr[‰ðd9ªöéu¢Ù †½ªÂߌuÛc’+ßµ†è¤J%óB… +¥ %{u.2½fnÀ¥…$ š/bÅ+µë¨ÄK¶î¤-¤Èö¤.’*nÌ56 *¢1…»O°A—p_;d#¥Túnój³b†ÑTº)½
-n1ãAlÜ"Ax\‚¸Îî]WLPyƒM쌈LS‚+³ŒÞ‹^Ušƒ¸Ð¢`qMXÀ$œOUÃÅC‚©œ
-^·B³KÝï®Äu‘—9j„
-7`ÁPpk ãêö¾x1yŒÛ¸ªæAc\´}ÛÀ‹¦sƒÄÀY¡µ¦˜x/ÐFÔÓÒ*€JLÇx·ìЛMa²‡uîƒ#£˜±‚ïo$âã¸ê —²”Nh×Ý¢¸™%ÀvBèˆ×1‰Ø“ ¨‡¸ù&FîÐó§RoÊÔÆ«ÝŠ"„ÞHöƒsÇÚ)g‹|-†ïGzØw?¼µ¶æÔRHPȸWaÑòg. îÃô1?ˆm€Ä=†@ †¨o$í ÷&ÓîÖ
-l5JjíóbýQ#™±PÉžíd4uv$šœÄ4ëfO5ÑCæçc¥ h ø|3–%ÀùÒϧ4ï-Æ
-£ºhÖ㤋wP`¤‚aK“q¡*Œ@º&f(\#ØÎÛ©mcsþÐT©³C¦áήcß %¥>:;ˆ²b$ÒÙƒnû%p  (À*£lPe5ê
-ÃdhYZÁœWÐaÕ»—ˆ%ªÅ‚Ån0S6=Å4¢U·­=±ÙÁJ-n‘Íó& •e-C¢IQ-Q4@ÄAëáóâ+ܽƥ|‹t•ÕtD‘?£rž<FEy $ô&/:01˜PÕL>®”ÖYŽ³¸â•,‡à#(BÒi°l±–²írô#dJ•8^=?È+7õ®Í‡¤69qµÉšj!6|—a)ÈG“ÉL^âC„¤ç¦%W!Gcü¯ž}f±HGWÖé~–÷´ª)Ya‹†b1’£¤÷ÂB&‚V´„ïqkܬ”FÀMÌ<ÔT¤`0ÿÁÓ `g­¤Œ.YnÑ&6¥‰JbÔê´BØžbˆ:%BÄä‡`ª%À!'MçÐ??D†×[)A>y¾ÌëïOó濼ùÇÿrñ“úÑ>|yáEû“εvå\û¡î5’ÜbœD—GÔßjdàWàEŽÖYÉͽi6ÈgÀ‡AÄÏöŸ¾=Å›{¸Ûè@ËÌIÌô­¹µv¤GVÆ÷TëhdÞ6Êf€vß—Ø`¯‡«@‹«C‹K¾€•þ¶ntÎرœ63ÁÖ]B—^ÇlعÉb¢ï0'µ>’0B¢Ø7ÌôŸÅPk Zÿ²8Œ(Æ-
-f”…ª5<ñ`3OË¢u9As)‘žƒƒ®VëÑ›;¾ÌBQª0n3-²ˆ°C`v³QY2n˼w˜y¹“UmT[Á"Z5' ÜÞ>ŸÜ~8ܾQ’æú`YMöY° ÄY¨-´õ >O Å}£â^‰¤B`Åš
-LÚÁmQ]T›7°=ÓrµÀ•r IK@è}Æåàïc" ˆYuàÞ¬¬Kï…‹K€û?ܽ„ßh9†M¦õØ@5[¥IU:»»¢ÔGu z³¦èK¦Ç’a’Á¶‹F Tœª3ü”BokI¸ª’œj °œ\êéà
-+w¥û
-‚KW D-
-Œ$®‹­†¨Ðj;öBMÐëņ
-pë‹ÂáUÛQðbꘕóø.f²l³Šb¼}ƒ¢ú`Ú\?eó.àÒ³³Í8f3h6ªÊ0n-¡Æ
-)81¨jg™& ;}î TIšþHs·XqQiQÕs¨òu5¿XáÒÞ±É ºv{3¼ "ò†Ùn‘g ‘NF«Xîqë€8°øK•ô[û|ÍÔçRx:ÛmÄB £–Î8 
-ý§¿‡•rIŠÓPåï÷´ªGFHF¨%þ½B:Rª¬¾dJÀ÷QGÁKÈ  Ôã€{iÅà4§N4 ¡
-*Ê
-^ŠtÂÃ,@HgW»ðægÚe;´:E“%ßÃ4ZTh;‡2~((*á
-Ð#ÞÄWÛÕ"2Œ'P¡5uS¿¢¹O¥9u)ú&kž`@IpV»SíÀF©$æ£a
-4w
-ݘ&;õHo°—Ô\ ( ÒO€R‚Çmv4
-äã
-Ë4™ ê”Î[¡=ËÌà°;.´Öˆ³ÀcœBÒTĦ\Šä]Cé 9(–)P‚š€
-¦ #›GÀ@ÛÒ}9j,>Jm€âAñKèlF7ÅñˆSÉÄ3ËÜÙ+€ÝS¢$h'Ó‡–#ãndÄ@h¬owpžŒà¦ÙPóäÜß|ï¨8÷:“ãÄŠ“¨Ý\|\5¸Ù¸6%ø» ½m-Dp÷`«f;•Õ™óê9ùò"¨Phc7Ç©
->/vz(Sé¼W=Pp/Â|Ü<‹BN-2@gø8 À7¢sè?=`f‰Â ãû"‰âÒyÓ@äò•ëµP¢_Œ;xDÆè×Hkq©‘; ÅCLÈ9s+’ÅVég„oÜ!¨óµ›;l4
-œ~È:¬D†&`Eqˆ¹KÖ”€8L4³jeðu¾:‚=mpiÀs$!j²ŽNÍØ)ÚËáO¾c‡Šï¬£»Ÿ/VßÈâo«©L
-N}=þQsj¢
-ž>™r©ÃAŒnÈ .AR=±uîøâC¶+cÔ-AëA…­dÂÌŸî‚Ÿe­å,ÙÊ'àÂ(µ&‘«¯¼'MdÕ!"%¾^Çͳãž÷Á•Õú'žÇär±$ØFËä49¤yárØM“š‡Ò.UúŽ€g$q†µ{;DéÒásÄ绨{ÉÓ­*S5nȦ€¸Û§óÚÞýÊÉ–Ÿe2ŽÐ’Ü,Z‘ó4¤5ÉPhF±§#©‘^+Ätõ\’Ö€Šé‚T!pñÕ\l2¡:•#’‚¶/}Hb>+gLà˜8Ãû@ÒUîæzy†Ö`^éUÑüȨÌ}z%*ugå™Vð<™}/ â¶n Ñ” +£%ûõSDëôå–‘ä¢>J¼Scîýp
-iÓåß@‚ÑQ–ÚB³eTwƒŽl96ƒbŠ²8µM*—¬¦Rè¨N–[¢©J\@vÔœ³É`àƒT V°3[eU2Ÿ/jkñZ3þ¤Tà±PÚ „W”ºJ¾þE2~h″Q²¯àX(æñÐ$÷x´4ŒÌ*'šÓp#Î`vqbdF·Ë²$$–åCF‘j(—Û½cÁ@ì ÄS¢&Žô;Ú6aMŠÓ±‡è´Ï_ûÃ}E=Yfe Ñt:naú¾€+Ëõt¿5uf•ùiOàD=IÏÐWå m'Ya•÷26}à!¡µ?«ïlÏaú±´œè8}sx.93 ³E…0:PI:ciRáÛ3As¾-©NJ+&ƒÇj$ÞÁ¨\Y=DœI¬J'þ¶XLc~q]üY÷
- ¾êíà]ºoĨ€êg¦§ÃIå$¡ ³Û´¦ ‹-füϬd§.rK<D
-jö©¼Ô7÷@…¦iÑVvº’§¯`^šj°fVTPå‰Ô©¿"äÂ8»F DWU‡-¼îs)PîµÇü¤­Ò\aÞ+'Çø; ÷hDö¾æ5U¾ö½–û"ÀÔ‘-¶ò]œò^ p(–¶¸šP dñ¾°ú\*RƒØ{€¥Û¤\Ù£ªZ¶©n… p"îDýø6ÿU«{#`VÞÈR^¢ºfêè"j:”Ï»¶YäÞé9CÔ$¯¡×N½5¬ì@Ôwí‹
-h#×3@ d‘¬sãë2b0mé3QÐ,?Çž„¬R¸‹Á¼PJLLC`òBºé° ,l­§¾A߆
-Dºm\BD˜ø:…eMɾ¸QhæÜÑPSÚ½–ðÓÞ§ÛÍy¦§Àë¬Ëë1ð°²*ò¤^2gÚéL° qçfqÑTº²0·ˆ+*°Km•@
-bù©›l ¨ªì­à¢ŠR…ªrt"XÖ$ËýqR‡q§Ñ]é]2Ùx7³ñÛd†Øá 4äŸ_j]m2ýE56¥§”s'zÀ %ù½^ä(ºL-4Öꬪ%Ѥ;¥ÇÅÕ>”+|B¤…ˆ#ç§M·†€&¼–ê¨,ô)å=c½ @MæHXñ—¾V‡fѤ]ïÔé=Á~éTíTH*A¥[;àÀÄrmÙKÀ‰h.k©Ø=„àZéÉ G«m•Tæ×Õtëq¿&CæªmmZòt\>0€SˆB‹Æ²Ž Kꆑ•Ep‚ÚiÌ;QοÓ0
-s?LÅ­Øɪf¿'º€Y-/jŠú
-¶ûdy
-`¼³y5‚
-Ý[”¢G¯M ³áÔXWmzêJ<l1Ͻ›mçx™¿:­ Ã{‚½ºy _€(+ö Ô^Ø]'$ÓñvFòò&˜:@pcVŠ¸šÁÙQ`SV±ã‚Ç몼ø|ˆæ³K‡„™8¼Ê“ðÜÉhJ¢mÚ±qÃÝÔÉjWr
-r¤¥ùyZTÄ:Š^Rh
-¢ ¾AB¥[À
-CzšóÄ8XKQë“ xôH(cLœÁ` ^8ÀDÑÕh•íŒté¥ ¦è§€ê"ºXžEñ¡0ÊzÀ²ã>u'Ú£:B Ó¡™…Ì
-&dÌ­J2…È€ðáv×xlQã[>Üÿ$ÞÛñÝ„waör?œs½:õX_U|‰-9: ¯–½`st—†ÞÍ”¸:vB :NFAh4dßtõ¸ƒ¨à]L´jE©*f`­MQa«íÌlå ÛÑXûtÜÍ’ ô-gá™Å2 J~ZW]GV`nO£2¦LÂÚh
-£r¥¨®ï<\4ìØS½…ØCJš¾œ1@u¹À*@Ôs™~6ŸÎà¸h4 ÄÇ#ØQì¨AÆœ<÷ÊO>~¸×²•Ÿ<žRfd f ¸b€ €'y,Ía5zå¯iÞ°À½©3k7—Ù·Æ䟿z'‘µ cXïŸ{“ DŽ ·4ö&@”ÔÄeÆ+¥¾ôÌ°ÜXX,X
-eMÛî4IÝZñ\¼Ø*2(òe§S4GC"±YZæ™döö`”¬`ç§Y²=€1è}WžNŒö4%*Öh@­Z`T¤c5 S¤IÒK$0{Ó%wõH7*ˆ¤Í,²/¬´Çõqß‹Ôm¯\™Nw—Ü[Y—‡Â ŒŠzjÍûÒ¼vl5ÆpÜjQ¶Œ©îX@´Þ’ò»õU{é-ÿPA³3ÎKŸ?½ßTÝœ\nn7M…±À:ÑêgYS}cÊð6Õ’½_qÔH^5–ˆîà'{ pËÃãWv¾4¼qâwÚÎA’­EÜAÛÆœîBX}~z€Î~²®Î†Ÿ,GÍ·–‚‘Ä\ú ÐÛ÷DúèlˆíÕÉÒ-Qê¹Ãi3KÞÐQR4KÓ¡n+ ”02™‚6%ѯÕ`î=Ó±mÝ c”ÄŠï:@ç¨W3Ø© aööÎL`Øq7Êm@¸Ù4½aÐOGé[ºx„mœ¿Ó•‘`õíÛ=r«ï\•xÈÐØÁO¦»;c2¨Z|À{‚'‘•1¡Ò«cT •n™°/V)`L¥_œ6lzFÉC;kv§'+•ÀêÅð²Mb»Ùá8-ÚHž¾Â>×ÔªüX'—BÄ8EvscÝÏS,Äæɽ=‘ºÑöQ]á2³/:…”ff.:üR_MYšÓ°_Küæè.þvvÊRI/'‚ ï…éB@|lŽmÞ,f—к݌‚áa^âÇ÷é+ðÝ$áƒC¨á⽃É>X‚' ª¢.Ýç§F;xó(ã«Q7ìb—zm EŽ¥Š7ãá Ñ·+[äƒÑð 'y"ïÎtØû›Zy@ý~bc·ÇSÏZ‘©¾±Cè!¥>Ov1#;êé°Hõ%Ç ¦¯f~yP‡7<Û÷Âo¥;ŒêUûç~1vô“Öf·¶Ý,±zSÚ¡Ï‘¸};Idýˆì½ÿ$“l0öàù`7Êäýå<Ô³¢,íq:ÏgàÞD¹ÞqÜWÖ¸¦UIýîäcý¢»ézDOõ2‰Íñ½ï¤÷nr-£ai)¦0x2\%Z¾|™#Ñ®,q7¼á«rʳvv]§‘££á<©±»±«íhÃîþ¢~°’tmûˆ ¨SÑ€L›o&‘VÍx?Þº ”œë``YPi¯û
-?ÕYóvh±H8™ù#qY^î²$)géâ5o„YK]:4DÜýPBb£š„Àš+"ËÍÈ÷Í¥$ÈŒ²âN¿‡õÂÀÁÊ!‘_B¥`ÆlÖÌÍ5’7D„mE5½ÂF5ù`á î¾Ùë+eP,&²3°kG–Ãô]?š-Ó’·+`b¢C®êV’"¹×Â$cE4­ƒV*ò—Q<=i<~’ÒXY;x5„±Û»%‡pzGÚ4ÙÁgKŽ‹ŠseŸÄ€2†4yMfÐÛ®f8Ø)Ÿi­·{awÛâh(óklù2;;¿[ °ûuÓ+@du6½Éë.w=ºç3 ó6tHs êÁ¢­yº'„åc]éydk¸×YkkH©ÒÈSÛRÛý•Š+¿”gpÙ #åã|›J©¹HÑUÞ^̉u7ÑÎp`K¥f´â!˜êÝd
-Ô·4^ƒ°¾vs³°TnJ ‡‹kVo'ÚŒŸÚçŤCF#âL¨’¹¦@ 25B§/õ…v$dóÁî‘;“ÕMµ3[‹˜`áck–{uF¡ýÜi)°\«¾H0È]熓.ªOžäîZŠ\a4ltTS õ¬~lœ(w+Ãy0Ù
-/{›ßmXRðÞn³3*.q"aè§Íùiª»ÍjTp÷èÕT)ný<…ˆzWZˆ"“%u齌,èV„Ѐ##?m
-›‹ ìË
-~‡Ìú†æŸVnà8wµÔ
-`d«r»¬~¦¦àgª2´JíÅ<¬
-4wKæhýJíA“Í:U@åÍŒü¯°ÙYÎLÛ H
-ov1QÝneLÞxÁ*JüíOß-f¥Cu=6‘±(>{º·ˆ>00ÜÞl_«öÑ‚Z¼Ÿ2{¯9|Q4La½1ÿÆT!\Q*ZöÈ k‚®oÅŒÛÞ
-¼ ªaX‚Øèê•Ò¼™¥Ê–ÌcC+²ÚAT͇<4-ŒëÕËþ %l;¡iRëÖ¡ÈÜUˆü@ÛèKDò€æzHÉëÂN˜º36€ä&€™F6ƒS¹ä12ª%÷h‰Bׯ‚‰ö°DU,†M1»iL/&ñ:Œ^Ÿž­AíÞ“2p6Û
-´Éî%=›Pî…o×ñu4°0 ñVê»O{Cg`¹ ÔÕd÷‹;Msª1¦êŦ×3Œfí´vU¸
-[ÖèV{Ïîôü$gÆbÁƒ¯XîŽ
-ÒV ˜<‘½{0$?Ь1##dÝhÕ_.5rZ»K@‰!Ìöi–¯ŒÐBÔ®’±U“Õ\Cñ¢xÓó óG4>¬Ó0C'ƒØÜ3`)9r{[`éÂì ½¶GóÖfjŒuߤŠ„z:Ù (G7ÔªiÔ%ÔÊ–ŒÍ³%9‚4^\½ˆ¡2úk»T²¾e/¬†ˆb ¹°Hó Ïð“:0‘½›rꬶA6w½áÞã6–]‰ ú˜"e¦~ØèQ«'äª#JçA²7`EÓÔW†Yz'—‰V_z.' ¤ èY¦o2PÍS•Öt²-†ÛÎÀvUH^¨‘—¨݉'áìmz½š‚$ßf–Y¨Ä"÷Îz…;­YûÀyv¨Ø{«#Wæ
-³p´)„)Å8×\¸”#5˜ÊUÝ ½›B¯Ó
-›+LÔ
-F©lM`â^Fž¼W)¸óàj.ÇHê]⪢ëP÷:îšânI‰ý¬ÑYN𞹕=;‘›JeXa¬-CÞ¹÷1vkHtÒ©”‡$oƒjÇDFÓ•5ÿ Të¸Ñ|¦ö" Ä–
-Ì+€7:OvžÛUƒÖ¸7ƒd¡י€ …DfÓTôÊ1FŽ$‰ å˜Ûæ `ïƒÚ¼_-LufU'Z5Qzœ·v§*àaUȬ Óp2-zûúÛ®wv1éâÅЃw9`%¿¯Þh±Uî‹^h¢xÀĶ´‚{f¢£ª×
-úP[" û6´ãµã8>¹wºv•&þ×+½ülËÞf%Âó¦@Š•{w'íé
-vço­6‰ä¦a9á&&KÞG£Òͺ6M5Zja›HD/±‡Ôf—ZÚÞû IdáPB²íðŒ°ë‰ˆ»œµ%ô±/žOž8$µùyö/Üâw‹‡vÞ»ÒK£eŽ7jËÓeÄîè¬È«DêÔ~©jÈÂnýAM² •tN[p
-µTo¸´º2IJN©¼1¿£•ÃÃ6ñ±ÊS
-ƒLP7ñéÖ_¢®w
-Ûù—0r'¥Í(ú£RCÌ&ÅhJáX–\‚í&(6VuÓ¹AzlRm2ÎÌû„[_p“½ˆŽ]è¤=¤e˜µ`ø¸ 7µè
-§ž|xpj>Д‰"æ5»1¢¡«zó©O6 ü®)òJSÐÏ°«v…cµ´±BÌ™”±€iº7mø2ÀL$`‡¥IÜvd¬0¡˜:KéMÀ®|³à™TDê´ 0É¿VO
-^ŠaŸ/Žc`«güûÒakÑc˜*ÛÁZ)ÓLÚÀºÌZ‘(¯JÕÖÀä›­I7±@˜¡ÚpÔ-ÑÅÀÊ3ù°·æe ‚Å—ñó,?<_» åÁýùÏ®x:¥hj÷êTÑ‹x Ð}@)S «;ût«uçÆMvö
-Òã<F§T8=Öáø|Q;+ÎM§Ï -^¸K
-Þ–EvÆÛɺTšívGH)n‰tÞ`žDnE‚µ2µs]JÐìSœq·â¨Èm`ꨘîÓ>Œ¤ ÚåÓVk‹ÔÃm(³ÑWNÙQì¢ò$¶˜GÆ/E&­Õ¥lpW²%:QÉÞ-c µÕÔ¾W€—ëQ °T¸‘M­Ð¢t¾1;@Áìü=-wÒ€}qé“óª¦AÐ~\ŠÌaSxðbTåEÊîp<[KfÛ¼âJa}}‰è&§À‰YÀ½zUÈlÝmÂèh[÷°ÓÌ(åçöë6«Wm¯;õ'µ3*©%Xqiˆ‰=šœJ?lXòbˆR'£Ôz jì^Ó“ùŸ^ÌÂÍH`d_™Áb”f‚¡³‹åú •C:é7«#É»fRžè û5Ñ+™=XHÖÊyPA“yW ÛHÎv‰ÜŠ|E°ÃÑ‹z`îsN^^ZV%0ä-{ÛYw¢¢æöc¶™R"óÚdº—Ϭ»¤Ët† ¢!• ÜçM¼T/˜qñõèµÏ¬öUª+Á³1 •‚Dòšê"i°–IÀƒÀ0 œ½p†R°,aŽË¦¯ÁKÓ—âu‘‚™ ˆVgòn­ìqÃÞHÙì]‚ǃÊ}™r€b?ž'­š<`@FÞ…ÍX -v8ãÀb?Ý4EAÇ*ì~Î(ߦh#ª#Á±ÒIÏXO‚FYÆ—Œêð—RNÉJ§±–6nòv•Û³W"êh˜Ï,;% ßEçëþÝpôþ—pŒj°¶ÏÆ­»>Q¤ÄC Kʤ%zœ¨™öùè}v  a¢Ó…ƒZžädB;r€èQ8t7–tt B¹(¬ë`,Àé”ÈÊ“r\R-Æsæ©é ÜæK v0÷WR@)® /"@3ÛuÊn½öõó3H¨©lqzÎ\“MÇÀ`£ÉÖnÀVÒÁ‡¨p~>x©IîwôVÑBb È,æx¨[=f6¾t©x—E‚1ï‚ÍÊà9–›-ÁKm ¡ûdy Þ{ 윦ίèE°=øqûòô¶ÉìQ¯žÛ{Õ›ƒ‰ýÑK{åéô/z§³L×+˜çQ˜sù&Oöt *çÏ‚YB¤±Èg èlÁ‚c0ÑRíˆcF|pÑ/OöO Áœ¤
-z;®Žf:© çö¸¯‰,ÇŒjB<_aדe‰'™­W
-mt: 9A(3,4®˜† †®‰'X>ïù†¬%/¹P‡=¥\Љ?©{4s231_ŸòFbYâÿž¦ø´¸@ïMÉR
-`Ò†dÖTOæ ©£ô@A‰­ì*~j^^ ܘZõb(Ñ Nè½)PÆôßÕÓNƒ sIr# e 7,pÙ¢—+UoR¹{I0’k!6>Ë’ ²{;µ^홋;=§JëÄòùÃE<æ7¤íÊŽÕÝlÈGæç϶ uPz+˜%”ªkJö°pUrJœªWNò*@çh“
-c*f`7l"3÷–QóBÅÝ@»BÞ3t-™
-ÈŽ5ÌIÊFšŠ»È2ö‰m
-Ø*FjÃMHö,2¦a¥ä…¢“égÚ>øðåxY¤Cªýƒ¡%—Ò!²>%/t›¬tæ}ø²Æ”â¶SÚm4â¸F8¼˜ÃÉ»r§xÈv¼Ó¦ $“®ñJ³ O)¦)ÀÊ$KöÚNÁ ¥CöL
-¥œX­;ÅCÏ×äóiÝn—wú_­Pˆ™[¼Înœ^Ú)[ÑE@À°{d7·i™ÏøG4ós]^ Ü 6g˜ŠÞÛL€ =l,<Q=ý&nÉ*k¢*{P.^ÙU&‹…Éî=¦`ìEŽÜ^Ø«Þ:,úÏÂÅcØ“*þ¨² Îm¢WuQ+ÇíÓÃk]p:%ï÷C ´ZÝ¥pTû±pW¦eý“žþVàÖÕœº|+Š¬òfâM^‚fRZŒ~Øê»#bÖ¬ætçgáòꑱ2Àच02b'ë7ËÔ5à„‰¥º=KÈü`Éèè×Öªù¥^‘ÎCj¶†Fµ˜åÚ\ÙMÕkgôC¸ª²ûÄÊznö¢>Y7« ØœpÛêÕêP–.Uwî«i¼ø¸Ùk1åÛªB…®F&ÂL,ÝS£SsÊw,+ššËsÃœ&Œ(¯4<«UEùà•>ëf¥“‡—"óži‹yWþr?–®#‹$2“\¸W<ÈtfvÃ#2êìR@ _Ë}7,žÂܬ£s-5S>TZGOM>(oÅ'kš#çÈË”…Ž·ÚaæÝ„|¾@òè”,Xªï– ÙS#†Yî‰ »š¹–NO\+æ>¥èR?TëOÑ#ø/Žì±,¨¯kp¦&•·{ŠQ²è‡Ú×­’æBtf@¤èJN7!'EOËØíÅŠhZ¥—SbñÐ9L&³<¤Æèì†f¬2¦'„`v‰Øå¥UNð"¬-³Ò¡
-=mÇ㵋·c,WS4‰©bô.¢¨äç;€Ñ:?­°€½Ð5€çbðQÙMViœÞôI%>öM§e&%/ï;ô ]cmÈøÙеnjìýµíK§g§ïÁ‘Þ#%vw–Bhž€‘Ò¡ ãte®&GYr¦ÀèazïD³^6E9Ø»›g´¼H^|KÛú–-H3¸oºñRˆFaÛ¹îæìløV=dPð­ñ>‚Ûä6ö¨ÙEf¬¬
-«Åƒ[†r$“áQ.s«fÞW
--¼9x·÷d$oÝ%Š‡+žö:ÔHބ˶Ț71+Q!pT–ׇiUL§·¿Ð€{.xš™Qø4*ÏC,±Ü."øÔc›MÏÃJì#|ix~[bt¿ì‚è„ÌdH>‡ÉRS5±£ƒœz&ªDºå"Rë ˆ˜[9t^þRòGY"BÖžÞi
-Ì«“zo¸ H(éÑ’´x¿¦$ï¡v}Zɵ Ôµ*3
-³ù¡Vz:H&¡Ò¤ü<;¦O3àÚÊ”ƒ…J;²ã";atãyÚo’û°- žìÍâ:öêUµàúN±,½cë¡*YªælÞX³GÆeã™»e±ú‹¹`ÂX+ÀF]Ksä ÈF¾ÃòDÎ`·Ý¬ip
-
-
-ɶ…´¯Û= Ò2R”ÔØ”X¯E.~» ˆA¯˜ôŽ¸ ÌaUK ©ŠÁÈžJÍé¿ß8€€Ž-Ñ‘B m/iœz¯†Žõ2ÕÂ{ëP¼wh–YÀÌÝ5Ítˆ£ñeŽŸû©ƒ­õÞõÖ>Kmsÿ¹E`õíš÷® tc’±³ ¡®åqe¬¥ÛŸ÷uyÛÝ~ÅâR[÷Ý–ºF3ž£'Žïpqvg— Þ6§T=šM›“¿•Ô¼Ky p©ÉT¾$pÈ¢“®áa%Œµ¢YìÌ›ÕÕl¾ßû3[ksÝWÏê,¯ìP¿ä(bÿêW€ë­Ý ¤­záµê´Ñ7í®ôOË"Õ±ߎΎ߈"¢]<hSŒX˜VVqß/U¶»‡ÊdÛÈ´~SBt} IèW 3z´Wí>þÅŽ8v‹Eu©¶€§jn‰tz»,2övn›8Õ½výÑ”5*¯h‘WXl2a3˜ú·ó¸ßo+{Þš9WêCfÚäÛÌèÙÔÍÃô\›öÉí$CÑ­ëRvv4éU…´X~YОߌ‚~‹MÈÄú= Á?Ý<ûx÷=B¹|Èe¨ÚÓ¶®fM¼Gâ~DQËnÉHô$€î%Ë8³¯¯ˆ¯­Õyº’ú~cºã{Éô‘?hï•Õ.ý¿ !I3–è·Ö]ÄAÄŒ’fÄ0ãy¥a`:}9Íð²€sú
-²BEQöµèïv!$"Ù´¿î(>l|nJ[hÍ—ƒ¢ƒHEé±ìÖæ[êPu”q—E¬Á̺?N¦¹ƒùYæá±RÄŒü|fha`
-+š¡wÏÄ©â}x–Zx‚$t êFïS{;¸K ™Ü橇šõY5ßidËD#Yþ]¹uº£2¿’)wb^Fô¦¼ ¨#&5E#Ý ÿFÆú­Wòn„K#³œ¢I‡Z¦ZõHAµí˜>5Á(¬Z§âÂõðf8ý/#¯ÚÍØ@1ä–=K !à|:'ÞÌTà¦FÞw¯mÊ’ßiLÑõVÏÒ(Èáý›} .5,Ãñ ß~‘Y¿+êÍ5Îu)”­‘ŒöªúóÍ ê¸C{tXJ»ë%ÈóeÓZZ0/ÀZÌrk%?XŠðGöyÇ´”`Š ×-Uy^tÙá©B7æ•"l[‚9Œèݼ± 9^û[.º¶Ï%4'…ðSL( ¯Îh€x iת†oH " æSøƒg`%šxm‚¯Æ×ðƒÊ «I»¤[¦âöcWWóz±ùpå^Åó†UYä’Í •tk/×Õ®Ô¤h_ƒqãƒU§Y-N n+:Ú[ÞHˆåØo’¦%…ÖHúGI!>׃½y›d®´%“I ×Õϼ’‚·ÕC¢ ;´g™‚ëp]Z¢j]†Y(ê+-‹².ÚMJwÀ¯™Sî6)´Ðv)÷î±[}æ8rp¼d‘W‡EÄ3­WÂÍ[ô5ófXVÀW¬ú¹5¯OñãHqOÑ" ßWÕI`Œ}‹®²êD yò lFÆû C®Öá>‘š…Êl¡žß¶ð‚Ü*½­ÂÚ_¸»ó;äê·Œ”±jl–’›·¤‡“ºùÝËd*óרlJ˱Îïbx ˜
-ÑS)ïdüÐ7³EöA
-Ö>¸Ú™CZk„Ï1|)i\ŨsWßêTûš!ÿ1cO™[êi3ûçÍ+¬óþ­®Û·/N=ôÍ–2oæ¬~ã|ˉÞTÌwUU¬b®@:¨˜‚kWçµÛ
-æî¶
-³ƒÒ?evëÐù˜nJ`#ø+Ò-µ‡£ºnÁ™/å¦ê!ñ°á[öSj^zЬbé}'Üën…·ס6Ÿ`¿øòâ·¬ìF&‘…Ðl5v€_ž€ùñ˧I¼¶Â;VÇÐM…¼Ì ºÃt”‹n`—ÅvO“›j×ÆÔûÁôz=Y ÜŽW+QÐ!$-f;ëÔ–› )°KP ÛÄôªëÕ=#vRqÌ{€ µ¡Sêê‚LHk©gÝŒƒØ­,PdžÖ9B2â¥`Õ»²šÒé΋¼´göMúhD»sÇmg¢Šs×£ÙÞ!³üÍq×ÆJ-B¹y Ø&Ĥ¥¦Š[AèáCľ,ÂœÝXå<Œ(Cˆ+Ò¸!µVnPÄØÔ€ƒÑ[‘ή›I0‚PKèñL©h×%šÞŒH¯ˆÀ¦póÉÑ*˨ÓqxíÔ?‘=ºÇ•~­ê$=ZçÕ0¼~÷’¶–™ê¤fNS™*º 
-^yi”«J©-Ñ>7+¹¬àvwwil2Š×] øÆŸÊ!…³ÄdÀ}ðWVHÄ p\ù¹± Œj•‡£Í»lñ’î΃wúÃ`y@B=Šáe§üAˆl‚ÃJý¤Ý’í7èló²”tžfÔeä4àa»x¾bîÖÝž½9;RoFÒCÍ×¹0®£(±­²5TØïiÑAº¦ ÏÔßm-ËœÁñDËø%ÕßI|4GpSoMÐjfû
-ÍÁ¡¹Ù ‘̼¢7´¯²òj/xk+zºÇçTo!’¢mˆ1öj©±Ó}åêÜmývRý¿Á˜oÊÿŸ¸ßZ4£—$3yÑU$½ÖBöµ›è‰ÍÁºûöÒh”HN‹n˜¸–)u4X
-ñÈÅc½ÁÒp¿#®vhHp‰ÕKÏ¥ŽHõÆ»«õFG÷B>‚*—ÕÉnÌÜéª;šò¡«7J ¦¸ò+ýLê×Ê NRRI*K¿sÅù\]?ÊHK·zõœ!ÚX¼/¥ÜV·ï¸B6¦úö§Ð@$ÙŪî}víöÝ‹·Õµ®âé[*[;ùr 8þêaZÚ9šv¤œµ:›I¨â2rÈZVi ÍÆ÷ÐU1m´™Þ4ïxŸ4y .™æk»…K»Eæ¶"ü†›
-æCüÿ 4¬h9­9NLWU¼sk¯#…‘h{[³óÞm—õS·n#Zzà‚HáÆ2 xÕïïeУ|J¶E‚Oc¶8ïjتŠgJî· ˆ
-môgóOƒì‰a'p#¥#&7µ{%@°B$›ñ}½Pô‰MŸ<-”>7W0 "KúR‹Ì ²[ïaí§aù)Õ|kºaÜšGÖ¬!X +‘µ²n檯–Öù~[9£•Äreíe0³Øj"“ƒ§OøÔîS–RzéÞ|ô<À âÏnÝù~š‚ÏD™ð¤[ƒ9‚Úèqs—B³ò7§I…©uI„`С°¶×Ký$~ºòÎR‹·;S«‹¾»[½%ù£&rEŽ¹FEÂp7Õ9}ýú­½ü‘µÙ§aÝ¢»Ý)DÑüe…‚÷,ë#˜èWdÊ"„!úy
-wPk M”âûïÿˆ72CUÕz#‘¿ Õ‹ "
-!ŠMh7(®¬¢·e/Yò«Æô>þüN·Þ\_h9)ݪ8úÖ+¹Š~ym>!ŒÑ[twük÷®S’ìAÖ¢FÃjéó~º5P4¥ãºÁM)6”fðwZÕ»¶yÅüûqˆïñ6˜>DzBJZoƒ(À­BÕR°Â¯ÝýõŠ¬üòhö[ÜEUð’Ùwô¨.íV ØŠtrtt‰Ô™‰U¿UUQƒ‘÷Ø“öÓÀš5ï{çzt±)¥
-æ¥DOŒ•ñ>½Œ%zwm­ß1ɱ.­KoiLòà-ÇÀ*™ 1yp6R]Æ’¾¡õ…ÔcLv3õ¼Œ“mƼußRc˜1ƒÓx9ÈW:±U)Æ Ž1ˆnôŠžOFŽI°ˆ=›ŒÁ•½….›×wÌ)¶¬¨&<S"l Jбqô¢ÑRW¾¤•Ì†5<eÏ¥ÁÿîÃȾ¯Ó“ÏúóN®RJ0æ,·²kЋÍ`çMûmYêf9(C(PÛnGÌŠ§‚ü ö÷oĦðAcZR×~Í¢Ó$Á¨hkhéÁLgF¸”ïîE«Ûv\› ë¶'˜—¬%ïjSš„ïú¾M£*…uÄéÒcÉÊ+œ÷ïK³}XlgÀË8ïGˆ$—çE<Ÿý|œ3±6î­•%f ól
-®èíÎDÁý{‡ÂkË`¬>n&JÎÌÓ}<Ù‚x»wª…¦ßT çd%_q‡ß× ­dV×çˆý}7KŸã¶ï¤hy3‡ d쮧0v¦ ¢3±­ã“µñš#šl]¡¢2Ç-*‡
-Á7Ò¢p
-4-d ƒ3S€Ø¡&}:û`Q!ÆèV/⊚y
-QÜÖˆž}yïŠ
-(~¯}¦F«^­û±Øa(:zý
-vÖYƒžK“£†L2ëûïïïn„À·m¡qcžz‡DWìÂ0wé ÕßÇàS/Ó+¤„ªf+@÷-WÁÆúy:Öwm~áå|ºo@I©+’v+IÈÍXà§;ØõµTêÙÒs1³à' ÍA‘;k‹ŽOµ7·?[‘Ý-ÇiOð<¹·M/aK~e~d69qß!YÛž“-çÌØV—ß+>ȹnRéMµÍµ Š%Œ¹ˆœ±§ÎðBBðn¬².êwÛþ3G ³Õ˜ÝL"íºÂM^â‡ÀVu»Ì¡Á\H;ñ9S¾dUGÖ1hwŒÀ*Tó–ðîȬz¯ªf…¸«H¹ÍÌ~ (û%®†EõÕµÛz\ž¤ð¿Ïžÿ­hìq]AN]ùSOc‰,c‘N5j7´èwŽë {=CìG\m¨¾¼–‚)µ ÝÎe²Óœ°Ýw]·7<çÔ
-€!$sÝ;oœž: -ê4….mÖÒ±´£^ÖwB,u 7o™?FŸ+ا–íÔ—8†»÷ÓƒL®tÆ*5Z¹¢¡µ ÍCöë†jzdþÓ0]úZûu»9ðÌI–9Dq”Õ‚GzpN7í·Ñ™Tóû[t™^fgEÜ’\«³S§ÇüX;)îf¬ò˜Þ‡Ý-ÂÊusyV»ùÜWt: ãf |OvwãeT®+”§ßî[ÜÇOó¬ûpª¥-*ÖÀ8U(\ÆÓ>¾ÿÓƒ^ëß3:"O&y§˜†r»'Ëö
-*Û{~§y·±f÷$Z–Ù úýÆâŽyéüøõßJ¡'ºí\Ëß´—OCÞ&fm ! ažbÈHöy®[·H+Ð=<
-ÿâ?üË¿øãŸþ§øñ§øÏøýÿë—õ2ý™E˯3õÏ¿üËÿãOü‡?üÇ/ö—ù?~üãÇ¿ýÏú=.ýó/ÿãëÂýú¯=„uÇë|¶â˜)3¿>¨I3vj·-=œ‰Ú˜í65<¡ÝŒ×àæ
-qy3îÇHÀ-Ð×ÊŸÍ£0ÿû׋»´¼â[Ò ?Ýÿo87ÐñÒ
-)£sjò펽øhÆòòy©Äf´Rª]½ÙÍû–½šæ£B5•Æ¤Q?ßÀoúÞ-™â«Q€Þû¸ôŽ=t#Pž~i¿M~Íø|ÀžüÙh«×ßð¨ï¶Ó[70(?¨Ì+'øön3ÄãóÄâÚ«ë%ä®›ù£|"ƒýžžþÿ™5WÔÌ£jb­¹°Ùæ^å8.̶ ªoOÓ0 êóüʟכ¨ý3?ŠÖÃöuÈöåø ,3eV Fi̶æååe7šdÆÒ]Ý2 ž.4óËês§íø­^ý‹ª[¡Ñ
-3›–µ™=Ñù26Mä¼öþÞ¼ _G‡¶ò®1‰B†
-Pe_’Ž`usi‹ÇëÕf¬=ÇôŽNcïZ§µ¶=
-Ö*ôÆâf^S¼Ž;]íö?Âö»\¯ò“5ã¥Y5Yû}ߌwÐb²LÓUϵÆOËðy\± ×ÔÑSº/Ãz[Çlƒè÷¥õÂÝÁײbðËØ‘ñÒpÉŸJÝoŸ n´2%àKé¾íSì08¦Äû„TMåÓ»*‡;¿‹€f¶Æßn¶Öâf4­7ZÔŒVq§[or<ù6.M®¼ÅÎ4æ5nžq À#ßxÙ0M×(äM­&cÓÁf‚ÿ9Ö³fv\œ-´€*ôLZÖæœÑßî
-Kî’çÆòM3bEþT¼íÙÑ=2™“äO%«n j¢!¬§ˆL,Ïã?Ûý £¾ùßÖpo¬ö¢Q„7çGŽ"'¿µZœ]÷27ÿB±v†¢¼‰¢ '2Ú‡7Žšäáå¡,-¬-¿V¾ÎÇizþƒE»¯‡døšNÍ.b¾\%ݧ
-õ•Ç(SOÀ­fžÓ7\ëN½ø[׎ xºa²(Ämfže“Z7š¸†åù\žsciʺ
-´}™T.&u…©îð †åMÏv$Óªnd]ÂŒ‚Ĺ¹/à^‡ÙÜsï×¾'@,þîé–ÕF‚ióº=§ªoú2fö†u!°UÑáÿd€Î¾×wÔšýú^\v`¾Œme7fW‚2co—z.óß{Qô9LËV‹µõjˆIb™ï‹h´M3³Ð‹kýÈhRÍÇèvRÀÆL$îjLNa™Óo :-ί}…øØé;RŠV×•æĽŒ&áo´0»Ô&F
-c™±òT»ä•iðX‚Ùdoì,Ìt#×5Zyr Uk×Ýh.‹x­NΖ#ª}€Ë\!ëËl–ýT¶Xåõfû{
-غBg˜ëä¡Ô3Ï ö½ðkKSðyÜ¥;úqï8'ΔÃéópR=œj‡óïá¬<ž«Çøá´~8Ùß}€áè[½ƒÃòó6›ñ Lì³ø‡'°ÍŽk½v:ü#¢̾„Ô<÷Ù·—üñËã‚8.‡evZ‘§¥{ZãçáüÕ<Ä$‡øå!ÒyˆŠÔ1ÖzŒËŽ1Ü1Ú;F†Ç(òo#Óc {Œv#ãc}Œ·±ù1Ž?FüçäÀCáqxÈN3ÇœÇc~ä˜K9f]Žš)ô)²9ù¬å¤/3½Ú.•ý;ÙÂö÷RuvsóÖ¤…}¶ þvé%š1ÅßÏeïé,ÔaL¾›‘àâÞ\ñËÿžb6ž¢òtÿhYX„¾·´ðóí Ù¸ðF[ñL.]k¿×«ø cè@Û5Óу×Yê…± }Þk8øJ
-“ïK„{?åpWË'Öøúvx÷Ë‹7>
-†
-A¿/2'àEXÞÅ¿ƒDÊÛbFÝÀ%NŽØ[å•MIë³P™¨-gÈ7ÕTÓFWL½¼—!øJÚÇ_
-ð_6ÕRß\R ôñП€Ý°ÈYˆû)Ç h<ø÷Âäd¤àg:/îå01¢¸æ»GA§jf6&ç6¦¿î.¤êVÂÈP½¿´i{£$3dc¬oÝ\š‹Î`œ]›+1€ý&G¬XùYhý<=µÉùw<d¹â’ O˜ài̳ªÿ0[%Ù͞䜈“=Ù‰÷r£5ÌV1¸™%¾ü–×yaÌ-vr? `œ¹r .½@X÷²p( R #c\•À8¨
-ÆKP`tm»ô²™¯3cŽW莽[x)iìæ´D7ümw§&1®óQ`lΖ¢ÿw|MÓ7¬ §´ø2ºˆf{Ü–mîß8€‚˜¬ Ü_[
-ÊÎ΃v¦ÌýÏ­Å¥ÌÍ?Ábl:Ew<G
-÷SwKyÍzEW(šÊék›¾x«Âö!µ8?—¤ÛGnÑ3¦˜Wœ¼kc;1~¬mV×/ T\­\|o¾T7,ˆÑ
-B›zÅÍïÄ@…ƒ›X ð,òaMP2§¡apíƒ)~ñ<¼¾0{y©£&?žo‘Íp”« €9j¦Úð20Æ¢lNGS Æ
-®õ’¾ yçùü1´4§¯iþ³XRp:†Ür&=Eö*y¦ÀÙA¯~Dۜҫ牾´¹¸ Mùa–Èûïs$ ıi3R°×ï”`ï¸"4ïŠj°˜ù £…¤û#JË9Yn,}pýï¨u'-²ö—eåó$ ,‘þÖÀ>ñ—BUÄ™^…Û˜XfÞìž_« óû•³Êˆê}"íXãwšÀ¢CÞl¾‹![ì/Fv7³5}1³5>t£º“ß$ k±äQ"·KëÓÅÐé¾Uü½•¶1Õ Œë³Ò´‡!^:Ç¥d–õ
-ßîƒ&†JLWd>(kUãnSµRsµ‹Rt5‹j°îÐù& ÈÚn)¡cî‘F©J.
-:0Öežµ÷§åŽcQ "Ù¤bÞNÞ”aãrú–AŽ8tM˜¨ŸÁ؇0Šs9³”hfU_!”îâóè-[­BaÙ$€ì(”¹(~²yLÂW›Š¸¢0b+þÁT;©ë0×.-¥žÃÈóдÁµiÝ”U¬«.ŸÌÚµú‰âîÇuczá%œB´¦­:¤Bh•†‹1ù•{Rø4 7³´³‚?½Nrh§˜BÍzÍéïI»òã°.ÕkÈm[Ÿ¬'„©ý]ŠÖ.ªQVwÅü©\àÌ%WÙÞ—êMËpx”íFb à 'î¯ öEp~åpºwxqc"jª‡¦€ gÂÔ<äò?OQNµåhKY¨%&?MS¯óB“õŠÝR
-#óÌv³÷„¸<g {YÍËîÈV¾U!Ù¦5å]1oƬwø©nßjmÀ½¦Â?áû Ðâj&>•½6ÿûOXFÓ`w”ã2T”m]̦¼Ž¾jÿûÐmLY;tBuè./{XÖP/+JÎÀiÌ•8³ÂuöBK7ÆrYTÓê®7b\BM9{6F–á
-#ô>1,™­… ³ÍHÕe`X‰b2é–L «r5Öc:J”O€Xëâµôñ >"`mK{µ wsiÜ/™Û˜ÄVg—ÐLšPHî¹É7VXäõÝ;6Õc&WöømpÈX–%6Ë[½ÓÚÉN"ÎІèò$a¼jj3´]èÍÌZ nÖk-v-O¶»0i‡x¤­ù
-Ê´$²´ éÌlAö$ŒÐöjjd˜äâ±.Fõ 1ÉG¥ð¥Ý|€ê‰M7»ãh„BšªJ`†õf6µZ‡ÿû®K i_äm#?"Ô²©pPÍï¶%kÒ–ëÅ2ØÈd‡G)píW cÓ ¦éky~ Fëú¡!œst£•› ®%—ªÌÔ®!xã ×Ïͩܤê\§z¸È99œçƒ×û`4ÇÀ¨Ùt‡×÷!Ä2IÁZó.ÒÏ$Á#¡ðH=<`~æ^üwˆs´êS+ÉÚ6úA³À‡ ¤ø¡:– Ek¯íÀ(hÁ¸6p^hîÉMÚ1ÔIrðÒ ÍàÜ6ƒò[¦µoÀ÷Ö$è‚ûÀ¨²VwR‡ÿôtåo/õ{
-®WÀv)ƒ·e˜÷Ýfák€‹D1D›Ð¢îÙzmôô+q[^½‡±y½×úƒ‘þ¶ýMà¼IÉÚ¸¾<¥Èb(0ìíf‚
-vÄ€c* YÒÈ@ÑŸHƒ­6Ñ™pøAê2ÎÙJu¾Öú©B âìdö Çž†0W(x¦@WÐsÝ}G‘}
-‰òcPæH‚e0<&¤d„÷Ø©ÛâÐ W#çß’‰à ü-œëzíS.îâ
-¸þR¶¡ýé~Ã$Re ,d°v/"Ù„ë% Cò`ðG zåFò’QÇ^‹Æ+ký¦Œdä ŒûùÓz׌ÄíNOTù
-xõZ~3_Wx¦T¹8YÛW²þv…wÀj]KÜ(?‘¯ ¸¸ºáõ«
-m¤(zŠU¤Ì#òNÒUO‡´~ ¾ ¶B5¿£qñ[Ë•hsˆT¡ãuúR8‹@à/©À¬Ç’d^ÐGàá‡ÎbÛs³É[E:¯¹*v¾EÖ9[7°ÈêFË(OÇŒTm4—¢[öÓø‡r‡^E0³Cb€à÷Ê Œ걦³®½L1Ï]¢W¹÷‘(kŸ´†F @š¹NØ(aüÁܩ䟋X0‚m‘E„+Š[†‰‹ÎRE´ŒKTÐUädàXD¸ªëݚѼE 9òÜï€âè|“‹F«]x¢šÅ@“ýM;MJÑH;ýÛ”UhæVEbxÅ ¼ò&u
-ûR\·vr’o|š‚ªºaß=6‹¢3ÎÑêó¨±fB“NB´ÀIº+¸´ X4 2…/%j
-lI®J“r™@¼V”jÉÓù>
-óÂègMXQ H‚5¹&‹¢+Ùc@« éTjëÕMøHHæÂ9%F²^xÇŒô¹Q-ÙÛ˜6¹A ¢´P¦'ΦIJ×CÒ1Îeq½ðèM¥™¡'#©ÈÈ{K¬&ád!D!Ð1u©öær‰à uàпÍK$óâ;0
-7渴›.ŒØCrÔRѱ€JÀy…ŸÙãx‚쇃Õ6®ñˆ¸4Rp‰LÃð”ÆÏ]õJ uþîi.-µÚlŠ…ñj—§mc§Âq!LÉ7‘ ,
-¬zµTC‹¢,…Á'Ù7îŠ}ÄðžK¡
- ãò0Îâ•Ê·X§è¦–—q¨-P¡5 ´Ôv“Žƒ°ÂIøMüU£Q.àYt‰×‰t*°\î¹øßïC‡©]Ù¼Y®Ÿ¥UèáNòÙòãßÿºKtE„#ôyÃ%nÿNõ­07Y@ù¶ÏÇ,'À^|#Áüûgl^\*å
-¨y
-]} šÄEç7 Ί1“&§dó?-Ë´èK°êk_“Îe%È›g¡Ãؾ¾äé‚`@ï—#‹``O
-þ¦ƒ{³e13Φ7#ˆÝ
-dÍŸøõg*þ™µÿÀï?juúJGÕ‚£¾ÁQ ᨛpTXxTc8+7œ4ŽzG툳ÈÄYŽâ¨\qиxÐÃ8jgU69ÞÄ;Ž*OŠ Gõ‘M’ƒ~ÉQéä,ŠrÔO9è¬<(²Õ[N2/Š0ïÚ1G™'=š£vÍQåæA稞sÔÙyÐäyÐï9*ýUNB'¡¡GM¢ƒ~ÑQéèQé$ tPZzPe:*8½+==hBõ£ŽJSªTG«£ÖÕƒ.ÖQC먶õ Ìuñ:ª}=(ƒUÄzcÚd:fGųu´£’ÚQsíAŸí¨åvT}{Tˆ;¨ÉtçÎug5»£îÝ£FÞQOï ¼÷ Ò÷ èwÐþ{Ð <j
-Õ”
-O¢†GõåģªâIñA«ñI×ñ¨
-c$WTÜŽ5ä;ÀE²7T¬°’ÏAñ¤Í‹ku| ÏeK†šwMî:l+ô¨Bõ XuÔ¶:ê`³”µŽ*\Š]Gm¯£؃fØQ]ì]‡ì¨XvÖ6;Ë =(¦µÕŽ:lOšmGu·“ÜQ5î¨/÷ E÷ [wT¸{PÃ;*ç5öôøÚ}G•¿EÀ“xàQeðA‘ðA½ð¨sxÒD<ê'ž•Ï¢Œ9œú©~˜Ó¨ýz‚FËO2‘þ×E=Õñ/‰W^£e½l÷³ž-ê—ï2™ŠšOê›g΃¦çQÿó¨ú *zT =I•>ªš¾  •RUUO¬ïJ­GM׳úëƒNìQSö¨?û Tû¤jû®€{ÔÊ}ÐÕ}Ðà=¨õ>(û>¨
-Iry ˜É80r ¢XcŠÉà r[¹„™„· À
-ˆÑTÓÎï§Oá_ÿ'­žâèÝcu•WJ¤´Á8ÕGræ|)­ ¸xßš]01¬(¯6[WÕ­K­©nj k+2©$Ó0Jà¦nB¸­tj×ààSIÊ!¼Bý0š4Zµ?ÀļcÓ¸û‹ÉÉ–ªŒ7ÉKñpzˤmÊTi"ÀH‰wT&Ð;¦g `9[¤&Vâd­…Ñ&扙Ƭì¼ul5c¼×>ÚŒ;Ð!Ú¼H#3[¡t`ÆÉt×ÎNMÃM6.£’b”ÆJ—‡ÏVÒÚ¼a¾º|)9ÀQPfì}´
-Uj‚˱¿|vÅP´»âlójíTt4=enÀT)Ã:GåÕláž»‹†LëXmJêgÙ¾¥/cËÀ..9ÁÛþš×u^LoF–ÞFí’-á{Á:w:‰I™ä¿E*)ʸ–p]JâI$k”#z îKxxYuS×f.êÚúÚ¨­uÉe5ѯ¬s¤ï¥W
-Þ÷•…8nI “4(Yåî*Ô6*8C'Lái
-a‰‘¹2Dæ¾RÔú’+i
-Q‚|Íðê’Z#&á4…L†E`5/7ö(d¢Dʼn…²k«ÍZöä’šI§M¹˜šoX×Bÿh­ƒ©šs}q̱ë•VfóåµC%ÜV'¡Z+Nùz-š®'šqÈ5©ÐÊ©ºD©·ÒlÕ]_@[ŠaØE…˜¤ì9ŽãvI¯–HÒzK1ÂLMC\K…•K®y øt]_×j]7K°Y\*Ï©B|„<¤,KõÇ®ú3èÇ4ªrö
-8ÊêÈ €e/ÊF) 9ºDÌÍq 5Æ¥‰ï~J¿h´(ów6ÜûƉAd*á?¬3Vã’vp ­ÆÈ7›¤°«6 Q<9‡ut³£†ö07–ô÷¯OI³åj»«,ÁAûßÞáaGFˆ‚oÅW¸¿è!õÇQö;7´«W)¥J@ JW¢
-àZ
-Ñeõ3EÖ%Å ÁÜ ¤f;¼‰P6¶‡„
-ó<—¾ÛÚ£ x”Ò浹ʧ•«-»i*ˆk3“1µl!‹•Ãx znY,7†¾³™½ZÐ\ªQÆ‹FÖsÍèŽP¥x² h"‚1‹32_>ît 83:ÍÅP<Cš®É…i^æ¢Ê½Ií:FîÆô<ãk ŠŒ‡‘®ý—¨#mÆÊŸSêýÞÒjúÜÁ Jm%G©±c6-±,Õ”0ë‘Ç£Þ™ÏQgÏÖ*Ì1L»`Êûcj혆;&ì’{‡Dà1eø˜^<¦"’–Ççåλ'N%Ü+tô&„_—  HñªŸ·áî§rPD™BŸ}&.ªØ“º¼LûÄC…
-13UÖ»¤ækÓê9ÀvmµL{±$^$GÖòu±ÜyÅYººw]ñädÓ2ßÞËËÌndF "?$7‰ÐcÊô1½*¨eRqÙØ#+?Ë<ÄûWðþ©xÕ ñk4ÐÉÍÓ¡À“ë;G ý’t)¿^)ó¡j‚öŽ€J üÝ“Ä
-éÏ.xÁu5^_.Jh"¡WÈ9
-ØŒC¯9´Ç t„«*À*1#•| QÉùpùÚrø
-[…€Jeq éLˆÉ=Ä>›N@M,sÓ&T\çÎ1}
-QTB´Ör®Ùp„—uñc,x5Ñ/ åÝç® ’ƒeêdž'5ªFfzÞhd¿Rt8–'Ž…Œ2cÿvD}üòè¯=»ÃÎûk»ôq?ÿ¼÷ÿà
-rÞÙÍ(@þ¾±ÓiJÏöºÌrY ׸RŒx†°¡ß-
-Ù7WmaY?XF·Ç¥ Iݸ³}©Û.™êx‰÷ Æñ-…úH Lãû$žfºÅ"¡dÜÍŠsÈ7Ñ°=šÀLíE–³ŒÜð`~“¨óaË–YÙíBÏ!ÄÝ@îë3˜î »û ×½Ì8]?MŒ—A2ý o!=6Ó̾;«) ídñ½OÝ)Ðg
-Á3)ðÂ=Њ£€;&ó`+A·„˜´Ìh¹GÚ¨ Kv‹$ùa;¥RLbß´VŠŸ¦–øwÐ=S€tT"3äxYÜõÞáôœ+D
-›sŽ>h–{W¡e²R¯`ƒû^KÎQ¹RÜ&‹
-]2˜¥mwû)èÓ'®ýIµd Q½ˆ¡'5U‡™µT ö¹ í,Ž€j~0þ®¶Äþ
-ßxÄÙ€^¯þác§¢ì¬Ã„M
-„·ìeœÄ5d¹Slý»¥â5a3•÷–Æ4îj† aNj–9­›£"øòÚ.u’º¥Í¹,L†„ÂÞW¼Ókw͆ysø™
-GjØ9‚f´]©$µùÃÌ
-ö°PjŸÌªéK»¼Ñ(\d!b|QO™µ±Ì
-@æ:¡¼¦¨‹÷±^ðT[8V!~®X¼¥±ï€%„bùl•Ÿ/$´QknÈkãÿzÍ%j
-ÐeBÒ› wѪ™WG)¬“lÖQbë(Æõ Üuùz;J‡TÆäÈŽÒe2gA´gñ´w¡µ“$Ûƒ|ÛYêí ÷ ÷ 4w”¤{¯;HÝEñôÎb{GY¾ ¿£ÜßQð,"x<H>È>HÅ„¢‹GyÆ£”ãQöñ(ù &ù <y”¨<©Yžt/™bšgáÍ£DçAÍó$üy”}P=
-J¤L²§Ô1ÕBwsww®á`̨}¼Åø[­äËn²1Ô_ÞÂ%ß œTã¨
-½#rµ¦óY¢êÑtºG=`†Ê­u—–Òy¤›°g^föFFÛøèd'„;êPN΢vÁ,õç¥0Ïza'u †7“—ÐwNÒ›WÈ’/ïçíÆáäw“ßvHÂŒ«sf#ú´&ßÑ‘Cä¶$L¼ru4§j˜ïÛqLŠ´ù&=]ìlZ“X­X§»ÂHª9ŒWÞ­çUêáÿÀ8·Hõjà†ºKTô×
-sZ,۩
-âTËLU±I—%´e¢Aû½T‚´B(+QbÃÏÓõPψ¹i”LÖkª•GßVû”žšeÒø] 1AÌAmµ*²ƒÝVÌÈVUö­-æîè4oÑ
-Ë´„! ^/¡LJF›
-T:Á½Âlçm\mêíÞB\Kã?‚{˜Ø¨Âj‘/ËHŒÀE[’<ŠQÿö(¸ƒ³õAsÍ)\Þ¬sq\j¶².×¼ž9ëËC)?,KT:fúf‘4ˆ­$ú%ô†Çî£càæNoj³7÷£KýêÑW{ðëàƒ·øàY|Ѓ¿úó›j˜{dsªÍ>þQñ®¾X«K'ñTéhîkœ/ìxÅw`ˆ—áO ’3ÜäQøì(’v”S{^pWUÛFY‘˜Ï×3Üàë34ábx
-È0²ªl%ïpÝvÅaì™ÃªY»mq‰×JÖ÷œsò!?oð ß>«x@Ë †¥¯2E©rß|K['ðŸ ð‡3Æ™ÎpkÚl)š¡m¸\Dï#mb$Uúq»7k’”½)®üÙtMÃ"cȼXº3ÎKB–ÚãH!eýX%C½õ‡-xÔÙ²{¤3’§ Ý8BÛ˜„‚¾\!œN?Þa2áo.bg³b³Ý¤Ü¯TÛbÒXÛ3ìl½løèPIo0y»H«Ër[‘"¸\<fX[°Âe’ü ™ng›Cÿ˜‚´pŒ|VáT‰×Â*òØ$Q…ÓgJ,šÈ¡‰L¤j@yiú¢›ªÃk“-1<F— °ß÷ ~D æ$/$Ø6—ªuáDÀ&âŒ[g–³:´ƒ÷ãI¯ºÕî¼q+ÉûQ
-½”8.j™zI”_Îmt°H‰Ð±Ñ…%N–ºº¹?…À–„4ªÄVEÀl”XŽä¦qè6ˆõ<x³ŒíadóÜÝ)áe{Ea•Ö–^ at]#>*zæH#zÄiçwÛØ0ËôøÄ ÀNì´UÓ2•²·Ÿº!~¤í³E
-yjîÍøH¯_B\IÀ×¥Ò¶ 0z‰ì‡i"WS/±z¿h`hf®\Z‹Í¾úM;Iö)Á)éá!À9ð¾Îå"gì4¿$Ý6s×I–søáàÆìmZëØ2>ÉeŠ©I\^ÎK ÞGh¶›TH¸§PL™6ê&Á#íPŠ›¬ÆÏážC‘â¥c«RìÙR^Ô^ZW`Í–ÄŸ'w½á"`nñÃó²~Üe£Dž–«L5ú€ãàiTþž¸ÿÁóŒHíûµÑÆíôÿäà?„çxá[ãsÄrˆnÞm‡ªøÎð
-?d®P^Í d¿eÇ2÷Ô‚æØ®æÔØæ¡ Î±_Ω¯Îc Vž+Á n´âº?ýˆ•ÔÖ›YHg3‡°á>
-Fô§˜çh7¤bº<‡
-%·›3 ¯ÚmIn‹UÄÝØzäZ®µ5BI¹1D4.^U0“Àùê"£m·“th
-Ì3¤ˆy€
-ÄJ•ã¢^œ™$ì‡T`D1ª%˜w=Hvè5#`_+?ª$?,9¿Sž^~oi¼EeßÆ~RL“åz)Ø4–™]…óÂ&£Wu­í O\RÑÌh`ÉÐæä,ÕTæІw©_×Y…~Âû]¨˜€´ðïaÒ zD`Ìpl’ʨ¬<9S1A_ÅJ¶Í÷¹¶Üd¨FæTC´v±âÀ¤WMï ¶He9l¶o`¼5ìžJFnÆABnÞ¼Í*uÒ®óR/Ž´k_AÛ\”Vö~‡ÿ\XáJ°ª¯0°ÙÚ‡¼î+ð+|ñCfù1 ý¯~Èl?dÁ2æ¯pëhø‡ŒýCnÿq€AÁ€aeõ*ƒŠÃÚ«u5†ÕV*1 «6 ë;ìÔ‚x¡ºT
-($J&_Á½"¹ë4AԙŦñ%ðFÃ¥_áä&Ð) ‹*x$Î3b%É *„h„P•‘X¨L ËV“xÑ.µSòù+V+å•ã
-#¦¬W©È¥DíƉQ’sŸEýYa¾’dé´W¨· íµY8º’¿©Wš!ÀIlÆÊãâTú‡˜QÚŠ/Ù ³Õwø7oµnU¹OõçÙœ²ú]×T‡®œTøÄ4ÁÓâ “¦pk
-$Ë{Ò©í–{ö½åÖ_®žj‰7ŒNÄiÝ,÷ÄfÂjü·Šƒã PöÕ½:Ø×Ã`0Í"æ»S¾“ªÔ3œ—Q'=x
-0LXO0ä" ’Æù +©ƒ”‰arÅ c”®±’Ú±–2LYI.qqž>1ç¨è°¤ÑWvºJèºqGÙø'xî£T0¤ùAµ…qfïãÃï©/¼ꆤ”_‹szg);é;‹d'éF¥øSÔè.Ó|Ë7ù9§Oa…8AgsI\VÆB.nAÀ¢Üˆ»ùWøý Uk˜Ôµ’
-7a–­xœKÊG1(D¨z<Èh|‰Ì¬bW;Än¸I§ÅW8îí4U-¡ÆÌÎ7ÁÉ=¢ÜÄC1“D"óÌ2› .˜ iÁøzÁæ¶Àq§Í$nÀßĉ#Áþ}kîAîù:™î˜vwLÑ« g Jõ/î•ø^‰öXþˆS!—™ë¬ðþ`-‹Α üÑúiΫp…GzÀ9=d§^ÏŠePs-‡y™v"±¢qé‚ô`XõñÎ*±÷î`ïoT\
-ê`kÍH®dϪÕCÐy”Áš„@Š{I$ÃúMS¦Iº³Åì”äÐ ´AõicIÔŠØ¢öiFi õÉ•1è=ÈùÙ`Õˆ#ç'Ä_DÁ|ð} ’¡éGÀû vy4V%)ª©v>ÊFyÃŒ„µì…•L‡ANÄJþÄ0×b˜•1ÈàØ¥UM€}°’µbeL0½´% 5pÂYÄù½„š+䛚ÎJÏ!ýç(t5E`˜N0Ê;¦(dC§·™.:/Ò÷Ôãøž$‰ABÅ0õb5M£ë":38™ ˃P§pç#ŽàÉ;ì³7*ŽÂ¾‘œ¡ø»,ÝNX­EÈ(×jõ?†­|…Ó“³Îälš©GB#ažRäÇVZ?U×6D*[i )Œc^ƒRA×›8i wLz@b! !LÆRW¡‘ÐižYÊÐèŸÀЦ¹3À§Zeõ\ŽAÞÇJ†È0›dÈ<äpï²ÏzDÏÁ†z£bP,„A™Sꑦ/©˜-,>ɵ¨oøªÀG«ÞÖŒ$¿%ár–ÍodZZpçDñ°MHš=~>¤n=_gyòÁ®àÀ˜ñ¸|‡>ĬÑí+Hø!j~ˆ¯_Áâ¯àö‡ÿ•l
-÷vq;)Œžø˜èèF§Â"g,›©=%#duF9I OMïjò«sÆ“ÎF9°¥ºÈ Êÿ2ÍN÷ L/Sµ+m šhõ8à ¥©-`5U·S3œk097à–_FÑö]¦”@ì¼”…›]êÞß;ñŨ²)Î#çPpÖ@¯ŒJÌ~© 4%juÒ•s†ú‚Ôߥ«›s§8ó¥þÈ䌃ÐYЛPm4‚
-ò‹¹"„Šƒ1¦-WÛÍT¬TU»@ý£`ß™Õ~œUhFüå
-É&Ó8É7Üu¡Ù¢ò k'D¦çEÅ= ü“ÅÞ8°w.€= >LHŸfÀž3î’d5GgªãÉ8Ü(,?;•o .7„Ö Ax«€½¸o\… à…C â*hq
-tt3RÇØ՘뻞
-|:_§¯@Ù‡°÷@~L?Þ!úÀ×ù*6l
-rÑjõ WŽ8Ù£ÈÝd—WÃZ”앃¦Ñ–½ÚíM.V9–ͬˆ Ö%}%uI‘I×€|ÓôšÝŒ¬ÑN º€×Q„TC×ÍÜ69¡ÀX²p0 •C‹ø@.È5€ê¤ X!%< , `ŒT7XX¸ZŸ¯’bþÔ¬‰,´’MiAÇ=W” J® (ñ´Ú½U|XÃ)øÉ.N)ÔÞåŸ2U­“Z$Ç!BJ*­S¨~ÐÁ8%á ÿACÄ€ŒÌÝì*lþѵ’¤CÜ%.»Qqµ|Ç \ÕX˜Oò7$ž1A,‚u0Š8 $X§+!Øá«ñÆalrÅ\‰x–Eþ¡²–q6=’ìÅøžÌûQ’þ0›%ó?Wd.9ÄXXJcu
-[™ü3
-\¼ŸLç±IV/â+Y
-̽PW‚ÏØÒˆÀ[:É”}ÊUÃR­ÕXi
-ÐôkЇ–…Kz•llHL6¤0Ðíúvòðo4.3ÈÙf÷
-&€nîRFܨøÑ)#†v`ØÙá°¬£Òß['(ý=$CЦ¬$zS
-üjô{e±§#BíéÃÊÏjÿ R¤‘¡Ý¤Ò0ÝLÈ$
-a³E\äVb±‚9Y8¡·ÊlÏ)øBEíêzÓUœ¬œ"—fƒvƧŠàH3 –·Œ¦Y$˜!$ÔÀõ@@ª¼á<¨6X-A^c ´ÑI$²Éª €©‚vwÀÄ0CN”çˆÅIVŒ=Î1¦^5
-‘!ÙȈ˜dHb²Bw2bF’¨¬Ð­ ©YVh\„/«„#nŠ!‰Åáŧ ÁÙYk œ®ËÁ
-^Yí+;c¸‡†û-ۉŶÙ[}¾wµwÆ` öÛˆ™cëj¸Ñqj*v´ò"ti
-c ‰Q6¼è)£TÌÚD çteöw¾Ôž|ACN”1{Ê
-ÓÊ•eDß²ÊôòÁjñyú½ùQ‘ Cù½§+tÐœ™ä4-áIB…'®l©µí7ܨ£M=<
-X"ˆ‰ Æù{3FÔ#Ž"3ÓÈ~*ÆÍ@¬F ÐYa52 ­p%­ð*Æ+_?UEóÑo jgî»qw/ܨXÓ¿i!DðdR·,£ÄEž2ÇHåv‰âo‘ÍìôsDAËfvøý¶É<7̼¦3l¹’ðP¬%UOH©æ$¢O¤éG“ñ“R‘À ÆÛù:óÔKÕˆÎjÌ|5\Oƒ•·Ê3ä•2Ь°Õ¨Ê‹[
-iIÎ2x8žŒrtœ/ˆª%ND9õ ‡pöªXš1ÏRºßL·Ó
-’_¬;•…r.Ã]Â^Dcr ¡!åaŬ̞.ù€ÓTŠªx*F8S)“]óAè8•÷ƒWSã)1zD‘ªGj\Ôºo:€Éê“Yÿ}2‹Ý@¸u’X¨ˆq£5€›ø2.ø‚ÅÂ=U‹U’UD³Œ¸šâ=U©Hiµjº0ðê%-ü
-;Ĥ³Õ+a<t€• œÊB@7¥* Dä¡Ž$Эܩ+÷ïà¦Þ9ɶ 5ü,:Úîf»ÑÅ> ‘N­S­Y )¯Vè±vwÖp®n×ÁΫ§ÅðdžA;çÕÏ{«ÐQðrä"hÝŠQ§µ È0BiàøFÑ‘óµHÊ(ä²JûCØ;$ö]%©…G4ÄCÊâ1¹ñ
-²[D[ÙM&Bg³Íl"ä#»r]¥ºèA
-pïN“’¯ÎªD%ÍÊN¥¨=°Âê<2+¡Ç=M¢2GÁIÉdWWô0×'•U5ð½¡ïÕ
-„š­M
-=¬½E¸%30âæ’xí~ÉïWÊj p‹uO†um‚’Çä—<+š”1à<ãã]‘2”ÉŠˆ'ä¥;…z®U<GVQ_©¸>*Î>¬â¾SñŸÜ°¼Çuû(¿ UW?¹{›¥àÇŒŸW£¤ÌŒlJõhÐý¯$bLè ¥€]HØÀ½3àa(ÖÀdÜ
-jëó `œ%Œ ’² ¶E[Òz‰}Sú¬ÚVÌP˜a)cŒˆgÎiÆñyU?\apÌ›À×L˜4Ìà0çÂÑ°¬šV!2ëy9 ïÙ =F5—“4;Ð!: a’,'_.G¼Ê²V s˜KaW$Ôl\î+gÃüSpï3;¢‘sp‘ëˆEWçã
-CäLV%zm¦Vž¶ºÕƒOº‹*¼ìÏP>ý
-^é@³
-±ŠÓ¯LÞ$Ôt~vºD0(í™…m2 V§= À¨`ßÞëa¿•R?YÀ]|Ò
-úwXLiXtiXžÉðÈ#¯ñ®Ü
-lÃs+Ñ>Š‡UíSŽoA²×ÉafU|‹þPÓùu:=ôz¬<Åôä4éØ
-¨ƒX“ö£iŽ!-ÓÂjk  >ôà…u-×0ÃHH® ·
-=ß*Ò¼CM™Ýà
-Òó®)â÷5Ƴa0=™ŒxúFÅJëHã‹–Ú/îÂ:;ÀßÓ1){Ä3ÑÆ? ¡¬Ž]Éy’ýÞ ¿=­õlÒ£R¶¥ªó\F¦¬q´rªQ™“AU,%’X&†</Ý+¤õ=/Œ6–Ä9Ým~©ýr ±f'AÆbðxÙÎľxh-0ˆ…æVWµeKEÎBü1 Ñc¥°â^$›Ú`[¼w1d;;™ÎßzÖUl]Pì¤} ±Ü¦¼¹]0ñfØVb”VÙŠH8£‹üù’¥™}^Îü©àëkr%mN2wÊX5’ÄB:Ç­œŠ
-6àî†ogé¥$®zHyæ}©Rå[ õ£þîZf!CVWíîÀ0›¤®8½jTrq‘mäfÒÒRd½;À¼Y#„ÙòÓrƒH †
-Òh¢
-sÓ ·ÓíÑ·OÒ„ŸuMÊ’ÏyÒÁQÊ—*V€)-z=¦Hèªmƈœ~ÅñÓ×z…Sý[t¸c&4 ŽªªAj^råº;ņÜ(cççx¼,Š@B\’aÎ"±«å)¢ºUq("Ì®èX8‰•ýo jÑÓâô™g¬6Ô]#<’ܨåŠ+U ‹°PU/™bx]Õ‹ÏAkçôzqýŸ[¶EÒôUsÝ“ª¥G¥ðØ”‹½™é–T#´" =¸²œÔÎ Ê=¼ð3Ób•EìB8£IŠ›(éû_âá\°; 1ñr؆'TD¢âPš
-Ë.Wg;T±¯Éã6ˆ¨w iд*%ß™….èiÐì>#qÈaqˈy#e©hªaà æ…™-Á£ämE €w!©‹ÚÛ¬{(ØÕÙûZÁBU/ldâìãG†… d `Õ¡7º˜Äš6FbU’СWXQ4µa#¡E*¨‡D
-}´!Da³Ñ­ «ú ©×´4:Þ‚œÚrbÌ_|kÑÌ+µ™ºÃXMNJÕ,žÅ²™°l
-*ŠÑ³ÉȶB´P«÷RQl·èYYU`Ђ²ÔyÛI§:“—’žïýÞ5œ/-x4Eótf¡ì¼î×°ëm‹ŽE‡ýÊåå³Í¦Õ0±À"ñA´eogµ·nl½NúÁtš¡êH8Cëâ)Ø«q‘±¹½–ïÂ~p§ÅþBТ¿lC4еì¶X"Ô­å†%±¢>hIøbÏ
-Dx^QÜ×}Ì
-˜ØyY‰Ÿ‹© ¨zŽ…N¬V¥%™­‚¨™@“£=HU˜ü¢³l0¼Tq_PIÐ/u,dÆö¶fý"íŒØ¾MMæu [ endstream endobj 77 0 obj <</Length 65536>>stream
-~òÐ~Œ<
-«Vh"Þs‡Y0Úð*
-¢Œ«eg ”
-‡…14§ÇI$ϺԒ~ÃÉ}Hò¯Y¤^¯Œ»¹¬A`$í’.4™C9—èÙ
-³Sɯ×'=‰ÇÏÎ ÄNuÔFH[èÕW´–$‘÷M¥#-üyê^c¡¤U­¿öbܯ—Úáhg±xÀŠ›ÉS¯wD4÷†ƒÍúžÓOU½q6áîuVÞh·˜JÊ¿€k ›yÕUì½­æ‚Òg'¸ò|ÍÄ€ã)Ùu”SзEEÃLzzi_'\r[¯Ÿ÷•&ÜcýbñÁ2s{} •¹à”çÕùr܈~—\)ʘW:
-l‡’X'€“r_ª0LˆgÛ‰šˆÌ¢,–¢œó³ÏBc4òìì\f×:ÚåÛºT‰©¼U3wŽº=¨]/µÉ Ò)êS“wkBç¡"ÏU-H¬gD0")â05·‘}Àl1‚°$¬Íf£k¥ Î=-¯Í½šÐ¨Ô¸ªÂ#´#á„PI¤áÎå©W¶s ´¡/P¡J¬ïeöƒé¶õ8øÈ!
-Œí´‹VäñÀç(/l
-nµD,}H…¼»
-(8â£øµ¦=r`Rwm[ Hð숰jhÊPCéY‹3ƒŠ£EØP˜ÀFH ²&ñÃFµB×À¼»˜
-‹…ü« %ÜUÑC•÷”
-b5kŸ9æ*Â9Dƒpe†(`2.÷<—Bœ;th® ‹ÕûÅQ8ÓR}SH”°†³MÈõôRÛÄ0ˆ<}*;r&«€ÖÿÊØï­©0D öªƒÂKâ í*;áBFdœ²fv'3KtËvµ탧„܈(Õë©”‚ÙÊzQû¾ sÛ†…±8`ǪýL¿7°‘îH8ÃÒæòOô¬7­=Vp¬+kßéZ®˜i'1ÈyÇûbnÙÅOO¦jçy5••¼Ã¢oùªOFˆŒÜs@¼0¿¯æ/FßZ
-úšd¯R7š4Жˆ¯„rể=6"ÄâÖ¡â÷5"„â žÒÒÛÖÜÌö[:Âd¨* à±Ð`ŒÈ9¢zî‹`o‰4`É|{jKÇY¨X³ièÔñÂ4×`¼0ða}'5ž¥Ó IìVŒHë›ÍÄà%Â%\\ „Îvv²H³~¨âà·´°îü@ÛäVì¤Ùd›tÈ&}o1¸Š©®½½ šM Ämè@æõ váØæf3Õâét¨Î²iVZÏð…v€qMui•…$:­|U@¨¹­Ä9[”ê Ð*™"½,˜Yae©o$_Áj~Rb³‹A,”þ‘š´Ê9±1"êŸÅ Õ Qå—*–d¶_9×h'Í='ahˆä.hY FáJ uy©Ñ€èUp”qp( Ø N*Þî°AP´»n„âÉw‰´.ÃBAõ`€Ì`üÁéËšÇ%ɧS-RèºHhX+þÌ3lꈧùbÚtV·05Pq­mô
-º5çëQQù¹cØÁlåÅêö a ¯Á[¤@t“ùuY—“r²O`dÌQµ ëÂbdíVuÀúŒ:!5˜.í—{xŸ– ÌÇz¢RØE]<Tê=âVñ2>-,|ú}ZfžGz6C«EfUB7û2 ú ¿`|ò2z©ÚI1o±YoÄúa˜$ãFA
-†¯]=
-
-VBYqÞú(WMb rD£T"¡fÉD‹¯¯ #Ž2û*TCèw=>øV´k»‡Ò"£©#
-ãCÍã
-<£ÀP§NPJòbS€­áBJa¾ŸAúµÕ®¾èî'`Ì+jº1…¼ƒZ×æª%5á
-ïX L”¬|ÙÀ°U²ìÖ0EZŠ;cn50N‰ãËz•
-Q¬.Cu’xR`oTv.®Þâ-±ÅÈ€á{–ßÓ‡]Êù”",–Äg?1 Y:í¥¼HÓžW²Bz’[äi ‚ˆŸš}ƒ
-ý”SH`?çn%= ©ôŠ-Ý‚^Ê6-Ž^ªügöÀl 3­0ˆÕ`I…i‰­BF a|°E[#”ÕÌiU‹ÐÔ`PQ®'8!+–|Ê`£_Z¦ýÜ*8Ë4YJ*ÂPrVÈ‚ŒÐuÚ>%k
-.¯¥©¦T{"tÁ“±ƒîøYá „ÉèÉVw\óT'Ï™Á,þyZ’¦eRiØÅ¢X
-òœËç&g&ß™¸«NXCœ(WKH|çsU¼’` "¸›‹áLãäD↩!]ó¥J]vn–ªLO/*9¡ŽØ™\*JZ…}I¿ÇÉ’+S´Ìh¶œ©…#5[BY\`Ô󌄎rØŠP WÕˆtÔ¬Ô™Ò­h~ÔlÜQ²&Ϲ,#ìHnBu×ÒØÒ@’Ê ô&õ&ä9Ï7JŒª;L “üÒL‰˜“þI¦_Mº
-âšpÅ
-ñtpûl ½á#}µ§Hൂë4ï?ÿ¼ÿœ üO`Ú?]éåOŸ1íWÿöÍo˜Åà›ŸÓ¥õtnœ/„´wð‰LãÇ!Ó8Pï? òé€zºÔÃït@¨'z@ýó]œ¨§|>}
-Ô­ÂÓñt:žÆÇÓI}zÂÇÓ >Ž§Óñ4<ž–aŽo~ÎXÿÓ9¥NU×O;dßRþ.wÈã>í¿ãò‡ë¿]½þÃë‹Ÿ¾yÂécŸ·êÅç&
-˜ÎÒÃ@1éã¿ïƒ[<ú”2wæ¾òÓ™KýOgý¿_õ¿ûÿÿUÿ‡³§¤s{œ!N„{‘)ÜÜ®R$<Bˆë7¯®¾»~³^‰q¹¦~¸º¸ÿÍ>{cñè#|•ÅÅ{Æò˜o ’‹Çó$(.Rþnø-ŽEoùvŸêªGÐÞkGk |ÈN–ü1mëKTŠþý»‡Ë÷ýöþÐhÏÑ&ïwNë_íØóü,åÔqc´Pvõí¾þ ãöh÷÷Ã~¼¿¬E´]§gŽ±ëk»eÙu÷]xÿe Å´ìz8ήï±eÿò;öâîúþû›«û=ô‰¿¿;íé¸Ý?ì:<e]íÕSÄòçˆX>a½SÄòï bÉó@1K?}µßœœ¢”§(å)J¹}Lœ¢”Ÿó«œ¢”G¥ü’ˆøOQʇ,Äcô›½³ó¥|tç)JyLÛúÕõwß½Ûƒçüèwö¾9ÚÍý´“Ó\½}w÷]W¿Þ“FxãéÏ>œŸ®^¿¾ýëƒcz}ýçïïû¿Ÿ_3äãÚ~þò÷üJá`ôPxqû¦›áoö8¾v~ð”ÜI²h¿úóÝÕÕ›¯úqrõU7?¯ÿ|ûÕ×·¯¯î¿º»zõÕíÝÅ›U÷òSò3Ê#žüL'?ÓÉÏtò3üLe îälúÜ·{}8vñ_×7ïî×j[-?üì‹+?<Š«×ýÿØÏѱxôѼ¿¹f½ø%íšÇHüFtô—ºsŸÐ²~ûÃÕe?´ï¾DøÓöWìQF_këq÷`í=®þÛ]-ùqÍ¿8Êq=%S·Å?ƒwééø.ÔS!¾ ud° ãä»8ù.N¾‹“ïâä»8ù.N¾‹­±œ|Çgä½~müÂÐ'×Ë`'׋ôák5O¾—SÎîgþ&GëI:¥ä?þæ~}}ÿ‡‹ëUWÖÚÙ{ÃØŽwW!ÄðO8¤ðcMÅßcÖ5®ŸRñOwÙ¾wÙ@-óaúÝÑ^h{k§»ìQº~¬wÙ‰Væt—Ù]ötÂû_ƒ'J™½:ðH/ÿ"(e¾þþâÕí_O0VÇ´Å'ótŽ™/#­ù‹H ~˜­é”üŒï¾{{uO¾»zµßÊ:úmò´!«—²{õpµD~滾v!-»þ·GÜÆ¿çýð÷¡{ÄÞÿ¢”ðcùŸ*’ò>ÁÉ::;èÜ¥_<¸÷¸ãÚ«ï{\A{„¾Ïöçæ3uqzøüõúÕ>¨2}ìó!ì1†ï¯öhÙs'OÀ‘o'OÀºÂð¹Á›'OÀi¡'OÀ±íút={týä 8žKñä 8Žïpò|‚œ<X¤÷û ,ŽÖ=YAãy¹|ØÇpôÊÝc8Úuyùsâ]>7gûÝÅåýÅëßÝ^ï‘À ¿zhhû³ç<}}¹æ‹ZÚ¡ôØ\¿Þ‡pbãáÏï½zIùæÝÍïûüqŸÁ,Ÿýü ÐçÓÁ|{ñöê_î®þﻫ7—{XC[?¥3{ŸÙøîîöfk‹Ÿz„Ïù0)üýí§Åí#tþDærd.'*”õor¢B9Q¡ìŒæK¢BÙç²ÿ»aBù$“ÿxw÷í»×}zŸžÛìÉó$ìcЫQø÷Lpòµý_<UÑ=?^ Ñ|€³–uøücnúpDûŒá„#z¢ôû¾Ïž¾ýþ!uïäÉ}4OîÊ'äÈŽÁ“{²˜¾0‹i¯Cød3l¦“Íôø=6ÓÃ×ÔÉfzì1œl¦“Íôˆ6Ó ÿrÌVÓÃ9èOÈjzx0'£éó}“Ñ´Ýý“Ñt2š}[ž»§k6íÕ÷ã5œþçíí«?ß]ì±'×jJ_€Õ´ÏNVÓµš¾ŒŒõýRqõ”øBŠ<lOœ2î?ã÷fÜß¾/kú lô§Ípâ|ÚŒŸpºWAÉ£?s¾{ÝÍ©ŽùOß¾¾¸üËWg"ºýáâòúþ§ÚÇ‘ööþ§½ê‰ËcŸ¼×§ÚÿX}¤-ò/ô]žÐùr¯è$û8Zoæ[æÌ{ñ3oãÜÝǪvü=ûdå¤Ú·¢àÑO{—F<ÖÍü´Mˆ‡0oßÝ}wqyõõåÅ^
-ÓÆÓŸ}8ý~Ÿ,Û½J¬/µýüç÷øî¹Ï÷üHá`ôLxqû†‹cïanÿà)9|yu=ar>DNµåA¯9†Úò¿‘y*-ÿÂ1Ǫ¤<|càcíeìþâЯ{ëŸÿöÃ훫×ü‹“Nù4tÊ'¦±œ–“Âò*,_ëùyÒXWcùBзV,ýHõ¯“Ã÷ñ7÷Þåê~gïíñ=Þ]ý…àÃV þ²I_tž9B“ð/k,»îŽsÖר|–]ÇÙõ=öì_cË^Ü]ßsµ½ýé.;ÝeŸD½;ÚûlïrºÊ¥ëÇz•íq ëU¶G×OWټʞŽõT…ë8¾Ã'¸üžÀìº<¡Oÿ /ÁRE¿ˆ±'²•B¡§bC?ÓXN•ÇuÿkÿéÛ÷àžÐIü·ÊÑÄîlÒÿŒþ2Ƀä¿ö8 ðÜgèÍEoêaî»kÍ€z}{÷Û÷ èwþ—•nõE¨a'â€cÚ ¿ÿ³?‘Ûãsó9=¬Cmþù)ÿóoerqÒÒÿ/‚õ#¦#‚íoíytj×ÿÊ®Љu´ÃíQLù¤Ò~ÞUõ§ï®îþåúî pø|Š›ãéÄ1ï/¾ÝcäGí¬÷g{¶y˜ÜÓµñðãÑï¼{sùïOèTøVÒór6}©ké_Oké³®%÷åK¿~,ˆ›”ûwoÞ~·úñ¬iê»ø—¿ ½éCÓ(ŽÖuðAêìÑI'ïÁãoqFPýêõëO°¹ŸŽEñçÜ —÷sáò>ÅË?¨âÈ/~õonúæŸß¼²Ê#$J$ùæw·oþЛ`Ò„sÿúêÏ×o–ÿðìw?hüO_ÿtóííëgÿð«»‹o¯ÞþßÞ¥gÓÙ¯úÿô×gïúÿ÷ûgÓóX¦TëÙô<Å45ú£ú|ëþŸþGœBóž$xÆû“;ûÓųñ§Ÿúÿñ?úÿ§‹þzÏ~{ö¿ÿ¿éì½ïߟ—ÚrIhg5OôWëM·©·ÛZ$q{^û Iæž×X³È|ˆ‘…á¹›B"a}îZˆg/´Y×R qz^Zig$ ÏK–úˆz[gÿ‹Ÿ-Ï»$ʳS^_VR©Ò¯§ª/«.ó“åy*>ðËZÿ™kÒ@~JáG{|LÒhÎÑi£!'OBÿ<Ç)Ÿ]jgcªýÙÔÚóÔGÆíOôÞ’°w ÏB÷<5ÏÂò<'µþ¥¦Êâú<†’´©æ&/SÑÎd_>ûŽ¨ýgnò:‹.{þ
-Ô®wŽžwþ¹Ï)£±l ýóVMs2ÉòÜó¦¬FžnsªIúàK¡O[k{ýÄ Ï'—?¯“~Ü¢¼*ö/Î3Û_boÿülŸfêxOÏKi.ʼnÐ;ß´)x/=pSÃ$º>_HìúÇñü²>19†,3ëšö¶ôÎx¦–Š4Pûx¼+"î‹×‰08Yá¹—^íÎ6>CÀBr^–ߊ}(a!Vav…Áóƒð¨˜†)MÖ@àO6Åþ•æRÐîFŸæjñN¾dŸ™›þ!rJú²˜|ˆšúbLº>r’…Û§!FŒl
-sãB¬²}ÞKm ô)”…Û7-^£2¹}å³å|±°m /› ûiñìô<÷żÕj_Ôñ­”¾\Ë䤷­dy–6os;¾õÅôSßOÈæe•Æ©ïTþ”%ôö\‘‰ä㊄幫1Ë—H>‹°ÚÁæå,ã/Q’‚}M‰To5¶ /«Sÿ¾ü%J”êNu¼ÿJÆþëBWBÕ´2•)Ó3å7ïôÜÑGÝXå½³-V¿½#z³…îr÷ôô3Åmî³>]A‡µÜ“¹=/¾%Y¸Ag‹n£¤½ö#îl8Ý/ä;ä¾[ ò…síËõFÅE?{n—(‰|I",.V#Ï, ©+ürêÝuz;ôs^ûåSÒó¶¿2j¿ú”F¹rbß$úû>)èõTû²âwõëÉÉ•Så௘é+Ê ÒúYR¹ÝœíÀìG'OAnÒÒòp—Eлm×€×OÐåió¾èÒ©¾y³ô•Õu·y õ75~ùò¾êSÒÏ…¼}·å¾\¦¬—+okö£6áŠršì~(ÚIÿí]×´~C õ''ZXüÒBG9È>U¾ø$«©6™çeÛóºÅq©Ÿw9Hy—q]íÛºzU
-è¨îBߟ c’…SsÜkׇíŠÎZ6UƒöV_Û:Eýß_²´ß’¤Jpw[n¼÷\–#7ÉÒûUJÒ%’SÕ½çú-5á»…0ñ>£«MwN—ðϧ*+˜ÛäSþR§ËWyïUj</ýÄÖxýÄÐßgjªtI{]6´¬øêMt”Ư÷ýOO]Mýi)‰°d¥¦®êÈ´xÚ/‰.I:\²l'ŸúŸ¤Pôaöþe40õûG^ŧ÷ ¸~Un€Žc@슎ÜÚ{ŪZ?9ŸÓ!âÜÔ{ã7ëú=#ÚGߤ9pgûÉ]¢÷ºòcsÚ@r§W_q•nXH)éÖ‘MšúÖ˜²žÕtWVjµoìBš)Îê–yŸÐ™ÕdiQ _NÔ
-²ë-Þˆ]8AåìŠSï-Y0¤.ø0qÉÉ2éÂ~$÷wŸÉ`»õéDXh'Ë'è#›ØÑÅêC¡ÏÕ;TE¨çtó¡kw¼ŒI3¡d5,Ù¬¾=MD¿¥—¾)ø@¤©ëÂþµHq‘#f‚ÑÍ“~'ñstXð* ežô9 Ö|Ç$î±¾83ß5höGmVÏ£Lª+,­+Èý^«2‹¾6§«»‰Ï,“!ƒ ¬V>!òâèk¢Ø‹Ð…¦B±ìXH'² ·}ÜäåÛôÓµŸ‰ABš¢n{¹*hÉ,|qAž`q•á’З Šó”2ΨÊ>Núnfé£î ã¶ó çJk¦l÷-O÷ ¨Û­o– SÙpiÄÄöH,ëó/TíÌbâ÷á–Xœê©ÉH÷m­¯²×±™ýè*6¯ú$‹Gßeu&™ 9Ï]ÄšW›OÄÝ~ÒïÅbU.ØIï÷r'±;%y]|'½€—ET\ˆw…Å„¢÷²0Ek >eiyƳ·wž×q_SÙë2O!µÑéMÕÖÄ]ÕÅ°pÉ_"›¹Ûää+úñt1^qýGº•Hér“Óκ 
- ÌŒ)ëBbŸªî)‹ Ü…jTõöÃ$ß›\¢ ÷f'Ý¥z#²ã³«ÛŒüßM_EŒ|¸àÉNéæaQm¸áþ!oƒ:šHóžøÛÐlê¸HoI—!íߪ⦈ƒÖ»ªZ>)éÓ”e`AmØ~$NoàI€:½|Q9æ<Úeñ” îw·ºYÕ·‹ˆûüp¡Ú-Þ÷BßUüq"œ~Üß î“~ÛéDJvÇH\¢I.jÏô²à+
-úiEžŠKÝaâc¥KL~_'ç è‘Èîjêrð¦vöïE%¥O]1±j€ˆ„!Éžgrz½-i$¶ìØoÄ÷Lêûži^b“SÖ“?n* !7àÉ1å­gû—u²b“yõ{Õ\?dz¾P/——«™¯
-1`&:ox‘gßÜD†¼¨ãý#»®£‹?HotqyñgMôe‚|Ή>¿ë¨#GÞ$^¼–dYûä­'¦¾4ÕŒæ;¥H‘oU¿`›¸º6¦
-áiö-´ÍgKõ¦­ê‰ï$V¡=ð¸2¼è¢]ìžÃYÔ¿¡ìÇ~Ó¡@ڸ܃âÒsj2Í϶$³¢B¶5â©&š·—ºJŠ88I<E±žûä#]æ¸è×P7)€ý lÒr¨¦ðgs[Òuœ½ê…nÿG€+‘Lƒ ]럞}gÒÀdŽ´"w¤äd”‰é'Ñ®X gÕu2zWójÉd'Á\²8
-›‚]XEhäJLâKâ\“EµTœ§õÙÞ–Zˆ°¨Ã„k³f9ÎE_¦ƒg³——…IÜoܪ†ˆ©Õ楯I!/´½bIrÑúLk·œ†xŸ\^…FOˆ²CY¬f Ýæž’>³˜ä´ *{ŒHˆ[X±¨¸f>Ç—Â~@xΆëHBR4¶RðqúÑw£Â¬ß¡k“!é8(À祆xhuõ™÷8DuXä'!iËj7&(Æ•Ðb²+y°¯³Á’©²|ÅFÓ7õoÐ&µòù–QI
-Nš8'9 Ë ·ýŽ†ƒ±~
-¤cfr*ËBFˆ˜Ô$ V$æ0,‰9>+BÇñ:fÑdHèÃ(hË‘ý€Ràz_¼OHäüágûÙQTÈqÞùIi ‘ÊZD졯°)†Å˶…Üê MÔ ¡hÇRž’y…íè~ëš±Ú¯q’’pJàÉìdñHs„3LtIЉB¸’_nB^"ñ,.)áY9JIÈ`-}RÀDŽînpLP»‚“éâdÉ‹]¼>몘|Ûò8Bû½\Ì$MUŒTríÊW$ìY˜Ú®0¶h#È 7g Ö#@:ü
- ³Z„
-ý«ÍPˆŒæe-„JOéòˆxW×€ãb͈°[2ig!-żƒ6…½)±¦6…ÙÕE$tÂË£X_“6:k4
-V‹—¬eûσ­¸a«QUØ 5U%²XÄuøB3§©èNHâ'H™W®¢²˜L~½”'Š!ºôЙØxû¬Ü3yZX$ÈrÎÿÉÉñPE³9çÀ?;ÔùêiI3õY-›7Ðy"çÇ?Nzlm°ººšä–‹HO§ƒSñ$+ˆÔE‰j2>²%õú4ô/©.äþ÷*V[Ƴ¶©ž O|§`@Ëï£%"Ü}"D©d’=ì¾!XÆü~/Ÿ]0|°MÈ÷í
-0ƒ>(ö•¬ƒJ/”RFÔRo ù{m §9[¨ë8E
-^sQ@–L½[-©Ç.L©X¢°c6ª9èEIbW£ž°‹qUõ I ŒùÌ ‰”¬?ê|õu\CpøbŠó£í©(O¡±ié&E:ªŸ¬]”Hüº-0pq ¡ËA½u¡b´®
-Æ‚Å
-'†:9Ùç( 5O|Ót%%öT‹Cr à:—°º:Ñ IG¯æ£‰•mK6nU·‚"ö(òBß¾‰ºÂb/’Xà,,t Ϫ;‡tÊVÔðšj—Ô[q^CŽÀwI½cYÂO$Tã¶ØÉ;­R$ŽS@l.ˆÏMý;4]}ኅ×ÀÇåÈŠÌŠ¦)³;—ý1laç ›¦ŸQf’r ß›ŸK5§¢æ!+Â"”<ÜRìáð!8€›TÆ?ê9˜œ†@Ùi…t@9M,£Ò@%a9¼‚Äǃ¨q£DÐ^IKʆv¤½e‰é¹EÈÙ,œóYIY&=66}¶¯!vL‚k••Õ%!d¼Ç’ïëP®ÉD÷°\ œÃÂç»ñää£ü 9
-R’{V¨¿ú•:A\Ù«X݉
-ˆ‘4òv¼(€Š±U¸síù‚(èäáæÏ®À%¹Jv Uî7pžÔ÷Èþ`Ñ-uÒ*PÈ1鶊,öœ„Æ*f"$5 N»zʈ)O@ÝDÁ ÌfP#U²Ç¦M?'e§û†41~9xm¬‹¼§ƒÆ´Y'¡G_ ˆQÄvåmî tºŒI¬ª|_± #?焱‰ÞãÅò£¸fÐ@”¯4À×®B"°$“yÅêYXy£ór#n‚²W#ÌçC3f;£·´b5¹Ž„•OîDJ°ñ\d{]¬Ù'äN²2Gá,ç¢ñ>J¤¢e°A&Á³˜p0üì$
-袨ˆA€"ŒMÐÍQRYÑ@hU“`Ùu'ɱÕÁ¸ÔsvVÂGhVó4s1€šÅˆÅ‡†œKr-MŒû#¸Ž¦ó8UŸ¸P™Àα ÙJ]Øœø›2âÀÔ
-.ºáÖÆÙ|V7Ù¦P‡
- ÃöE9E nîÆ Þå^ så‡Åõ î"y²”V·>âüd•ˆÛåæº8K(mgÎ&òXãæ#[~N.~î® ÖšhÇ U)ƪW\0>[
-ÿÉâ: “xê*`(Ó>ì%.ô^é^ô",(©¥!ÜJÈ mM~ßW<; –jÑâÙY¯]UCð.¿Vq·§‹2Âq~ÖOp…‘Ð¥¤O²oíÎâ¢é¹Âtºf¡›kÛ,&Ì;0Bm
-§V!ìSè­¢„ã/›$cM¸ÕƒY¼è^¶!ÜŠüÉê°EC'€Ous)Îhœ…b0Í–¾‡v·…܃wžÅÔÌè¦pw°ó¦Ý|rb°ÂÅ`çVYŸ}Pd
-þ@„!Ä´ð _>Û³ësè2¡ÆØ“Ü
-×KUùº@nˆy‡n m//…´Yä mîûo'Ä|¨ Hòñ2ͧŸ&š6ÇHÈ®äÍÈÀòY=·^.( ,ϲSBõÕ£QA•Y
-øùÒ,Z¨³õQ gSíhžçKžx+”|à7ƒšã›Z2žuFÿº!dt2ØÒÿÏ·Œ‡Ö’Ûê–
-a¸ŸÑŒCa0`SÌüÛB‚CÂË0NÎ25³¥¥†ÒÖl/í'³ú!üqˆT»ì|ÃÞ\Xp”“ g6äl°.lH³äa.žoØ»jXÂŽ†xøìlÚng3ØR—&óº ^ÅòVSei´Ûšg26C¿âɸ<’mÛ0¿õÖ“ÉNÔ)B6a ßrE,œ!ó¨2²f•éžcL”³\8NŠp,n|/Ê£
-`ž…ya½lˆSɻϚŸÈ68„Û~¢¡£)QdGæ“· )qªÔmOW¿ë¶¾6ìNŽÓo»àf¡1äÍž6ubwÎè…co½ ¡Þ:`6ý˜C`öˆ[¾‡Ðð1Š|Œ7ÓW@ì³{{àó^4 •Ff—ù¥zÂ5¹ÿâ~jËUu۳ߟ„;8üK& 0û”öP4 VÍ žÞ¦!¾.5JÑmÁt¶ÀAv= •êš³à%Q1•K Ÿ‚9ÑÑš•u [ò ]3Bo¹é$l 'å-Õ©m½ÌŠ,…;¹ b ó’câãe¤fbéÄlGÁæùZD¶6„slmn`C ßÓ0Gc78‡¹NáÓËo[2³3”Š¿v¤Â$Ío.$*Cš&i0Gb¡y
-KñùFÜt UrÐy)#ÙÔ\î…¢|ló¾9ß
-úZ\‡rê&¯RN•9_K”YIªÉà“FˆY„šß·ˆö”lœ8zlHúU([‹ QðInØ2šmÂÔ„¸õÅf[ýIŸåk“Å1&´;‡Î›rmП’ˆÑL{V8ÿcqÚ"6µ!tfî!Œã‹0û¤ÓÖñMjŽ°+Bˆ8nãü_<«w…ƒ—L´
-øFJ–"߈ójHÝ"€ß6±'­Í#ÈHáýÿI{wK’]Iô ò¶|€:ˆ§G„œƒ+•:9+u‹wý÷w‘4#¾2»0Z–•/†‡‡?è|©Gݹ¡;Ý,X©s`5Ù×kÕ]¤Aöƒ=Ðç&ËD½Aë4­¦M[ž&´îFe¶??f8©J3ÖÁGát5çLTó@b3;À~mV?ò_½S™îÜ{*#`ªè…ß“¥õÎsÎxz9®ÕÓþ|Þô¶ÜLísꙤ»òkuvÚ]:Ø®ªbÕ}Um Ô#Ⱦ¦ñ+o©Í«mŸÁ%7äà œyDx¢~Ü™£Bqó‹ìôù¦T5VxMeÅ#ÏŽÛàñüƒúš°ÝǶ̌Ï%@H/ˆ6ú¡š[=Ô'Ï4ŒY@G†ïd®Þ¹c)èÔ3è×Îœ¿èþ™Œ^f£YÈÛ˜¬îÙ(òýGرœ=ú¨¬ìçžzôF¿
-XŒ!v¸¡‚°²jb¤öô5ØNzß—À8Hâ>{­YÅ®4‹l¼i­*åMWD§D”Ì VäË빌½©(ÛÁƒŸÓï óåW ^ŽPwðïéÎÄ86YÙ= •7&D¢}âç^=«_XŽä½@Õ¾_í5EÏLO è¥kîÚïʪ%ÿß…›Å?ÈÄh
-Ž±2¾øº„n“€·Gͯ ³æ$‚õš€úißóŠoÁ;T :k
-Ì,¬EÑqÉ`røã Î>¨Ï»õö p'ÓŽi[éXÖ=ðPùÂKcF©UãrÎWµZD®c÷àžP°øЭ¬Ÿ
- wj+¾’|qöæo¤_´ –}[²Ø$,ºÍÔ¬ð¹÷Ÿ >B‚p ¦¹ÇMbpð7v|T35kXЮ H°Œd:Û [[‚bìVp£h-i$“!,Ke%'I–ˆ»¤•­`‰Ä*).ŸYsü?ËÈI
-iK5ÝO!5Z•Z·¥;&b¸þó1ãê±c•V!Ýš<ýÀ¶¥}ŠÔŸˆò5UùŽoþúè£Ð:V O°ÿ¼µe¾Gë­€F€³.ôššâòu¡ƒMWì"()Ž¶ÔjéP·ÿ§E†»×*QøŸ°^6–Iéc=âB¯2y»P0_÷íÒóÖ) ~ü°s k$³:YP„l¤(WZ¶…ÂT|È \ˆ\ Ê.g@¦kìßœ’sÅ?‹ÐÙHfF&KüJºÆ!g[rÜdf„xµÍç’ªDÅG·¶®vüÌ„‰R<Hû®dQ¨-ØŒð19%tÜÊëFI
- =ê#u^Ø#Öcò
-ó¹òqì"þÌó øçš
-Ý“ŸµƒÏ¼×ÞÿM:ZÝÂ+Üi,,ã©ÇM±òáJ=Ÿ­-ñ
-òúݤ:ÈÞVDzí`½—œÚÅ"Øz€ðM±¸Ô‘Ë+uô@á$ÌS0• «Àp(HðÁkÛêAáÙo¹R?µ-0Mt«ÓçÇܱl›yšbA(nÄÎùw…e¬™¸¤­(_6Æ=àšÞï®ú¨V˜TŒªk¾6º™½Y7ó..FÍN=Ks‹µ¥›??æ¶tÕŠ¦'R+¤ºLµ>w:;X¾Qlái¤€‚“¯4ãÊ
-MþÙ—¿å+Ý+/°œ+ùÉAc6Yû>! ªÖO`³U¹u¦•Ü…ª¥Îœûˆ_íx1Ïô²_óñB¸ h Î‚Ó ÙÛH¶™V
-ëSm=½EÕ"jïrèLÔâ%’\%UËcºÓ:¦¶[ñåUËMÊåa[fÝ6P\ƒÔiîÁÆZÂEûl±ÌzË=²{æì© ‰€ƒÅÝk I~ɯReö6"㧷1z¼Aòõîcˆ‚ßís‘¿lúŠ/˜Z‡¼À¿ÚpIyòj›¬œ\#%‘ãKø—pûüú­Œ½-8¹>Uª€Õ?§W
-\=°WÀúƬ-ûÁlsæ>±ó‘Á賈Ùæs¤më9 ¿fÅ׃»äó *Çl.a“@I»ãA|*( à½j2ýè:@Žô )eóDè°ƒTÉäô`ãuP 4+Hö´& ŽE[¿wú!~s÷/K‡ Tܸ¡ÇƒÊ +l¶n–èÁ¾§Æ:˜W!k»Ýlû$K÷“R©ÚŸ+Âé{‘[ÎبÍÒ»pû+p}ÒܩуûN~@TÇ ’Œx…ô}±­KÝFþÞíIÑ4‡0bÆCš\ZÄãA—<ÿÜ.y_û¨/ n“W ùïzã{å&…;ƒOݪfW:¥‡‰Æ"[·ÉŒÏ³7ê<Øу'Lºfð´qͪ9®ƒp 'ìõ‡íYùmìÊî°~‡¨&
- ë?‚Nœ––-^0æF(þ?n’ €ÓC ýa8×mn ¾Ñ‘.ºZ3«ù¬y$Ùëž”{Ã)mƒíÚh*—{˜3îî5clϤd=PÛx/³fÁ’鵘ýNµŽŒ<³Z¦çõb%¸Èò–ZÄ%¨Ò ¾÷;k¨„e½Jg» Ì6kCiNýg°l¬òq¥m}Ú2žçn²š•ðz›†e ®¯%æD“‰[Û¦…º@ÙÍëI(:Ïàü­Zô
-Â>ƒbýÿ¡-_¶I­¸.”ÛáÍ’^4QÉh‹€×i=ny/ZhãF’rŒ›ÃFXzø #öÚ{.¤ÃCX ;¡™Õ1³Záõ¦Þ®wR3Ø}"4ˆ*…®_`jèqP˜¤.ÆACìcŠÇ‚蔬«öÕ·Ãm ›ÛªÀkŠèÊ"n¼˜®:žÀØèµåÌd‚ó§¸M3
-#Àf˜ 5£ˆì¥áÎq†9¶^èAÍÓ8ËÇ>E‹ÂöJçê.²hžuƒ
-ÍEõ°À­f¾àº—±¥ñÓÀýDÑZ&/”«U-‡šD‘4þ+mr\ˆ7©{^¦Ði©ÒŠ€ïõ)‘²3µ-P¤Â{Ø{ž>¹ª–²ƒ¶&€I|ía?€Ôv&S/1,6ù%vö
- ³¸·Ë7v–™\Ó¾Q}ZDº¬ëYЄÁÖ•÷áû|-+<«¾»ÿù³Ö–UË1pÆÞ ró±¶k–á^ÓIE` ó¥ôà¼jlã½)¸Þßà ¯Æ;EF˜üI®‹'ÕI+|é©}Že탎“òÑÿÔ4XòýIiœG‰¡¹1Ÿß÷êw~ èžt&ÿù“òÕæÌ…'K#ûà.ÄÚ‡ˆÃÁé‘3ĵ‚ð<<5ïx.îôÇŸ+•!kz¤ÁwÇGi‹`q{™cðôŸáŒÊ9ÑxêÒXÓ¶hd,Y°‘×3Û9E2(t”éß-&#ý½ŸÈ¡0_ÇŠäa¾Á×ÈdËP猚A÷8e×âÖdm¯šþ;CAXpÉÖOUXWÅ¿/Ç g~5”k_vÖP’AŸž_pbÌÜèS::¦øÌÕC7éT\=Ãg‰Á,Dx&%¯[­©•-_o8ꦙY?¹·î'Û¦fY~Ö'H¶f·2๷߂ Çä»ñ£­Q %w†¸.›:³X—Û*—¯­gIJcq2”Wí%b»\ï÷ƒ–n㤀ãÉ°¦t+g” ÌÔýz¯ @É ÆœÍžÝê0Ìiî7{
-<¤gÅŸ5M—07Äõðxä…)öŒˆk¬Ÿøî뙞µ·pç/Cä-Œ=Cžßœss¦ËxöÜ]<ŸÐA¿JÕ˜¸eÛ}/‡gAÏ®=£8höU—‚ö¸ßŒ
-pYòŠfÖ‡.3Z¶FTq«Pû7Sµc§1¨Õʹæµ\¬Ï³ÄÊëwë¼¥5öŠXÔ%œyÄ­~[~v¾ï•,wÒ3µïÕ_å*_¨˜yðÉЊîÓ+¹#VAt
-׎uTPÙ<
-D˜iœKÄFK¹*åÇë÷×z•¶ß:€žI>\àÂGƒŸçâ6q>ŒbH ³”…Gò†lcDJÕ“¦jm gþ®lg§æ : ŠâÃÎ##&.†œ°Ò¾¿|°³n/ým­ƒï>ÃL¸Uï5† dí¿ºº­VÝP'ï•v#Ö¤´a€íÐRƒòâÉÁ½ÀÅcF6jKzB¶ÙÕôåÛí’ËÁ ®ó÷*Õwœÿúß9{"¨ðˆyÍÍA÷V
- \g‰<¬|À¯¿iû­Ô¯äÎnŽcÍÒÚQ ]N3+cîÑý8¬Šá]@õ–Nû’ÊC–=€\á¥(©Dr‚Ÿ3̸½ª$mìˈخêÚM%‡I[ímö@qÍ $™t2v‘\®7eqùi>§©ŒÿýÑç=ZÿžZc2ýƺE ÙgKϹm~QXÐ ÷®ƒ„émݤj”5Zûa%Íäæ;í
-_È;j s8Ävöõ1ÃLíÈ£bãPI°@m£æØ6ßQîÝÂÛ`’w50Ï‹r£Áy
-zÎç×$àÊà $SÕ8ù$S#ìÜ–žÉñdÇ· &V\Éi`f`\©®…qÖ-Ľ+­ŸÎý¼º½ öy[!cÈF}!£ÈFh‹»†se¿Ô÷ÙFæÛCêQFüÄ f­wyÕ%S;‹x–‹ã+ߊnÞ0®•DÐ^̯º!rÏ@/£Bmö¾vì´ÄéZ”»5}ž3k°t·íp¦hA
-'+Êw'itT+ vÁ¾®r´Z1wdîo¬Áh¥ÎÏ ×!:{Þ|žkr
-[|Eìÿùsk•°/P…ÛŒ¼hÂÞnÀ®±&7×ûy?+VÛ‚$ 6® Nz×$9„¥4æÞ­jë7ªè¤ Gè[Óe@û^Fàë`†¥ Y.~ËÅ‘ñÜך |ƒ/enbq}M«s¤Áͦa„»˜·™ùz=ÝçžÓ;¯}Ú õ
-m·t$¾68ºX±Á}½írâ~.%e‹=ÒὦÍæBd[¬Ïs᩺!¹ó65cÌëy¨.„QÄ4@ÇtV“ ÑNU¾°¯x@¼vI­dhª•Â;É–á©LùA.°ånr•Ÿzãu_îßHaäfâ÷>‡ip4.PgêS&òª¤÷iàmfæÕãÆ/á±ö]ù’*ƒRò~'Ü·ÔÅxž3ŸÀøJË 30F.êËdN'ÏbÊ%Ùý(¶§;2žC&Ìôý*˜JŽ?Rv·CµÞ
-‡êçÇ û±Ú_¶ŒÑj¤ 7òÒm1>KXL¬ªe¸Þ„HAºÕˆ'®$8«·æÞ]š$ØdÖtˆa‰`èí=}œÉ22Êìˆ(£hh;HŒá!–>†,’F«ÔÎL×·øÃÁÙ’÷]#ÎÀ*süÈà}KS;øø`êTÇ5^”{…eÞX0OĸGK²¦=RâÃÂ*Ï ½Kºp†$.1™h~Š
-RÌ`¼“ƒŠBHn¢¿ƒ“ÌJU"9H,ÜdâEL"Ôa£h`A’þ–%¯ìׂhn„#¿@®Ó 7>l)O|
- ™Ë‘=jÀ;s7Ž\·-P".+åPb3áb
-$.shåùÀ†¹gôÁSŒ5» àe *Ëøaš•±Q a ^?3~ºÆ`rÚœFhÚÚ´°BVÝ¿Ç@Þ±5‰lük;çáJšƒ®Î‡3JÉ0{ùÐŽ×5ƒZÄn9j)M£w^ß i‚…ËÞ3Ùb-²šäæ1ÿä“
-Iî;XAËÀfñI2'AǬ’` !¿{Ökâæé R‰)à=
-_;ç’®ï‹ Þ¦üÐ÷^”„’×0~?HŽ¹‹Ã9Vë «+ ˆ¯ ›9ŒTøë£Ã#Ù5ë“zø4Vû,»SBÖöä`“AÀ¿+®Ìbm©G3yË€˜ÁÌ•¨‰Ñz m3Ù¢ÚyoÈ=Yà–­Á°¦¿KáÈY˜0 ›­ŠÅu ¼+gŒžŒüžFÒÁÊ£±bM™9£€÷'pŸ™m`°ÜY63õHMcñKì•èý°èSQ4@¦Ìœbˆ²:7ásaÊ“¹p4÷e¤/pÞIyFT]€g÷«“yS•Ìu‘¦¥¡næ‰ÉMÈ«ÈÄOÍZ†•)n!à@5UϾ#3Ï‘[¬­“¥ß1›ŒníB³ðÁ†ÊšÞ”oU(-ô*i¯Ò ¨¬¬Gµ½ I¾¸Â‰_<?×ü¨Êhw‚•eÈÍŠ@le瓱žH7=™ð+y;qHxü³2™+)74èЇ€,
-²ïn©Tî±Õþj1O Kà0_eψÎ-¤ˬÈ+¤REÖÌ[Þ’7«Î>3Øä' Û‚É–/z1lJJÀ-ó‹nFLìÂ8QZE–ÏÐœ¡Ÿ@f¡ª^Óà|˜‚·yd˜\{…CX/D
-µZÌ瘒ÃûÈçÖ ¼Á•]®DMÅ ÙˆšÊò m·xóf“’Ì,µ ;wW³™>g¦Ýï UÛ¨J‹PDƒéWËÁí*v<“ˆÑQ{š|X09w#[ÙRMjöüÁ0Ãöâ dæÒ)ÖÕT°±5Èäzç1Ê•£ì“ŠJtÙ?€ÂýøS%WNt5Þžü›Jý¨„´Kþà¢Q\¸A#£²(©Ù· ?ó$ àœÀ
-žïù?
-ƒÊå/p…ÑIÞkÄeðkz×z_2nÎcbÝ¥æÜ2n¥/¾>:ÜòøxZ( £µ¤†õà¢«î½²Ì ¼&%9¹5ÅVîbäwµY¿î„ÕŸT
-Ò`msõÁÖk»»¶Š}.ÿÂ)Ùƒ
-¨Ì(Ë#n©¼H’ pY÷ØÍ‚×JŠÜ™®ÕR$ü`Wô›
-³²ý,uwXH F¦òKå¡UQ±Å•ÿ´zD7ŠýöY38Æ-„=(ãfiu|Ù°U*–%3Ñü^>–ÜõpfG÷qu©šjK¹Î
-½å+
-›²Ç6x}D7-:Õ.Q\Ç×å‹À`V=Eg¡̳Ìèh“ùú;PêKx³
-|"
- wÒ-Š>•Ðñ-˜àò8"|W>ÆÁ| {…ÚŸÁ»|ÝaÊå^ɼkÞmXóNO’€–ں̖¯h›7qš\W8]ÛnJð3äpÛ¹yaÚ
-ÝŽéÆ•o6P‹^¿Oò²<‘=Žè扌v¸VSç÷*
-V×ÖT•Lͮʀ¢Øe¿ó¼>“}$ËRö 3‚€2ç‘Ì­·^ ;Iq×b—%
-G[[ŒA™A•ðÔµ x=¼ä*—×àÕÍU.5 ¥ã›É<Š «ÄšŽº€óWhm <+ɯÀ#Yª¥âó¨Â…Uº¬#Ý(œ<BUwûÐp& l{ØŠZñiöâÑ[ð½ÜaFH|Áç“þ ¿2(H@‹–Ê-Yá,ÕpS鵶à÷­îödñ«Ÿô ãÍ*)ÁŠ‹oqŠ/ù^¦2FX[O–³ÙàQòýäJç6-Ù-FaÏm®"QyUá%ƒx \qïù%á}K´À&·{š€ ;ëLZ;£¥k=Èzâ¦7{µ%ß”Éÿ•é¦VõšnEÆe)ìz…m8ŸQ&Z;YزXòçGƒÇS®Õd6þ •q}O4xãWpZœø
-'ô£¥"E1½ÂŠ$ßé!oîÒ8­ÆUö°'7 ìxtré~¬©>Š-”Á Ò7êìb^”=©Qépuð›Ç`a ·tm’ΰU…gŒ›öç£(|>߃,´i-‘™ÁÙ?ýþȘmy¾]ñÇ=u`LÿÏé
-”Ìtéõè38;᤹¢{¦ÆÚ?âždúåuõ¼€¬³–‚jaÜ÷>º2k<njKšðK
-€©XÚfn’G ¬`Kø&8†ŸLÎúGÐóË8oÂm¼+¿ÌŒ<=¡\dÚó“9í ¾åF¤À´‘¼?½Tå¶Qž&_7ÀõÜö·1P˜ó¨9° å14%%¯$œsö
-î‹·™ì±Ĉ>éÓ Á¬…æà¶RÀEû~œ2;) žýò
-«Å‘°ð—õ1 ÞFfZ ÿ9#¾¸š×ªIÊX=Æšš$õ¸5c2mŸ EТíþÉ€k¤ÈðŽù¦J£dÆVûN»,GÏ'œ\Ü~q2þ¥Š³ 8>
-»,F:5Y–v­‹:¿­žW|-õ¿§"Kôæ €q]¶>Q‘eÀ¼µÜžê~¡~¨Í` yσòsð$™n’·C5?¡écwj193Ï H%héØ4ñÔŒcÛߘ²¸+š9˜dÕXñºWè³·Wð™~AÀ·Âx‰P%-ÅW™ÂršA¾‚MÁöÉíñ´OÖˆåòos!i*бąˆÛ ”ƒá€¼Ò³l •Õ Xù|=}‘^ȧ<L°×Bæ
-EeÔB:ÁÙÞ Ô‡ö#»‘Y2>%OÌ9F›BóÛÇp¬«œKE¬eŸ—YÅÜžxr+¨ŠÌÅ$!
--¸Ï ·IdjXpÊß{-B¬£Û^¯œ…ãf8j˜ÝÊxÒ\HÎ…n0rØljcöïzy ºxRjíÆþ¬“{$¸Pòàü–—ÖÌbȵ¸n°Ï kpCב¤2µ¬
-s¨Ÿ|€ìáäçØKFYÁ†¾áܧ8¾íp ÉÄ/ú‰y"T2÷ò¤4nÙ'™RnäûÃQ.ȾJœók‰Èñ:Pï¡L)µ6,7ðuœý ÆÂý6 ÀÏ`@oàAƒå
-Ië©;HCþ)¡wRbRÀuðmÏR¬#8â柲‚/ïc¸$]Оù¥™S'mjê€ÛŽÖ!0zÁ6Ïê@pF,õ}Ötéþ’Þžz‰#I؈;XZÉ‹Jø—›îœÐ(È¿s'e¢²&«M²aÑþKºP&•‡r&EÏWqÿóCzZ†Y 2™[Í‘qÈÁ àœƒIük0¦’imü=öBÃNb¸Úóùü9,æRÀÆž¢´â<4Së ©›ƒ4Ì—ýTýZë@\åžJA¬‚p-çÈ`=[bèÑÛe 뉸iÎì¤îuФ¥ö°oÁzÀ¤Šq
-óÖJó|2·,ðÐ<ÊãÑC) s:,ÌÑJ‚ í3îÑ@_r™ä%ô5E¯(Œ8hÉ€(FRÇ„¿¦ÒÑŠ‘Ek MÏæwçß@+Ë7jûýÃjCÜŽ… ý(è%åN’„0l-?nr—~sÔw^ÖŒ^1g÷CVë|­$4Ák1ò
-|×p­É¿&¼äDé|uk.\áÖS0ã Ô!pΡl«d°½÷ˆ ñ=XÎõXÌ íóc†iÚqGnlÉGÆO÷Áî‰Í]BOV)õöNÍêEIÍD® ©]ù‡±¼¹ëbÌé‹QÁ>Ëj ÚÙ^ŸÍFõ“×”þð;HxB7{¬¢Ñyƒ[¬‚`@³Wê0¼A‚ÊUO
-Æb‚Ÿ0žcÿ›¶¸¹õ–²¯e¼µe·7m ðóc†‘}÷àô
-^²¡¿ÂkMïËü^
-^¤‹ío†y—cz«Sjw¹zÁŸ/
-Î]úD îüþu8}T¯uèÎŽpF¸Ã¨¥õx‰µ±IÛäPï°<¬@äëöGÉ+œp˜·×=“_J¤¨^’ {Pm½c|DkVï1n‰=^bOæ¬=88\žA®3
-# ®Þ,Hn 9%~
-˜†f7T k WY_a`õÞ-wÆv{R­7Ó| ºÔ¯fî•ù@"@üY3WüÙÓI³§-{PmYZDzû-¸D¬Í×Ç _à1’‡50ª„&Ȍԫ'ù_ž…å›
-»óŠÇ+ÊxßH7oqÆ7pË”¼g#»Ò]QJÏFgÌ}G¸Qp‡•bJxE@•’g3"œ<ÚvMª™@TŒÂóMª€Õƒ-³
-üm[y¯i ¾ÞQÚ(R l=@ •¾nÎ ý¶9ßøm§¥h%ÎN®Dl<‚Õ.½D€9wtnôKÆ[uÀHÐY\‡‡W)Zó¬ÚƒËÁ®"ȪýdÄ‹ÚE"«×%™«è5BsâûÃÂÓþ,ƒÊ"/þsÛËV\˜ºd^¸Ö:9ǶŸsw0}„ _0ö5(,¾Ã~ìN¸#÷ó;•+T5|i³7z`"ßl·g€âl]qY³¸Ë‚©O#hÅj¶… Ü•lô6.ìJ€Î¶(Þɨ™Œ¼“QÑØ5ø\ &ü ŸCõ »_{è+ÛŠ+t°À;X—m¤T˜sæÏ‘m“!< ¯¥ÀGYÅða}-ý×d]¤åo3êÖm8@p3XÀC¸üÍÊùRõ…à^±O?ý ª
->ˆð5ìÙ†óϵ%F%@®÷/üüûÖVü³m±ùÔŠðõç0XæÁ¥gÜœªÏr]o#ˆ–”[0B, ãDiú(Ñ4: µ¦ƒP€ôÍDYÒ‡¥b¥Ýø×ÔÛÑ_϶“†¢´n•Š<—ùag$V÷ï×ýb#‚ >§)꣟áÃþ«OzŠ˜å­ª®ÿf<ˆÎ¯¸üüÑg"Ð{›Û[&³ÿõ¤ ’Ô.½ÖáþÌ“W4 áoÛÞáµîs
-oÁê¤KicÀü|@Ñf4ž@#“ŒÖFöyË¢•Ÿ¦%UÍ\9ài>›AÚ„Iîëc†Ïe›†k'SM®né“á*KŸ€"@ÁAr<Zél}Z€ÿþ»¶“Üo{ðõw½åÃÈ9§–ÑÖ–¦ÕÖ–c¨+Ju6à&²0¾¨Ø…Û'¸÷mú,e”–ŸÃ|ý5umÿ˜:…ÖLë³µ¶¤Ásï¦ñ&‚÷& Œó­#HBº€Ÿ_cžr­J
-l=ø¦­dJ­•€–üqŒ«3C–­¼W#øF¾>fÌýºÛw‚ŸoèJW4²§_Qø­+“ê“’íèb‘8}Ôd1nHM@×?Ju-P^9Ù›$‹úiÔY(ÓãŽb}ËÛ(RQ„²ëm ÷n}®KÐïN»¯W¢[îþŬXtö€žÑ©â0ý ¬Gº%TÇòaùÅ~¥ùq¬ŽÆØž©å4®¯À–ù
-Ë ö Ÿ]× ¯ó”=>=¯Á
-ovñäÍ :­ [„6¹Ò+[”Œ p ÜÞŸNÇ}Fødô`„ß¼¦'Á~3™Úr`XÖWG[ýî ~ÓÖÌÍÖpÒCz[Θt¥ÚpMÎÙÎÊí_ûéJ“‰a÷ÍB(#¯¹K·–Ø¢ÀÈW¡h†9©HyŸ\­V ç|ß‹ Ï" à×´„Z[‚{Ôù˜A¯˜ £OöÌ-ôÑé4 Ü¥V4ˆ|¿Ìó%s[†´È£4¨GV1A"
-ÈyÐ^¡æ—¼ní|Ò­Û *œ^Ó¾ìÁ]Ì•*À¬¹ãímŸ:9 güûü˜'( ûÔ8Ê’ÁÓ¨½
-‹
-Ä£>?ºÜÚRÿôúëM
-Ó¹©üà…¼"½,^Aáí­PÀ× ¤“ Ž"Bçêq¿ ÁL’^£ˆ|ÐÆ^ù{¢™¥dÇN«qäJÃ]öʃÛ;µ™ëIÖÖˆ;&mí¶Ñâi÷$½(å³
-rh"|Ä^pxå™/t rõlyᶦ7‰sAÔãÞ•u_Íø\§Œ<±gÉjONžáµ ¼ÈØÞ Uo.£`OLÀ•š
-Öß5ˆ÷ùòpï:|38v Ž%ç†w[Á'½?3éÌ><€ƒt” Øupßðýö´[-0s8<*6ê ;!æyÒ¿€ûò‚V°Ë©ZXÊÞ Qç¹`
-.±¡töN— æ_˹9(€ôÝùa<ˆLôGeY+üÓÀV.øœ–K°Ç•í޹ུ Àˆí
-W‹H¹“jlË0r/)§\‡Qñ¹~ÒÉ)·–
-Å'3(¯p3zä:’ëÔJ‚^ÿ[¬PóW¨z:6Õƒªfc‘E1?õéÆ
-s
-GTŒñCÙO¾ÂˆÿŽ‰t’ÈÁh/ŸŒ–Å®íD#Kz™ŒQs-«»ÆvhU‘¶‹ñŒwò/‘ƒÖÀâÊTË©m
-`=óp#FñH"»;ª›QÀ@‘˜;I’­F$˜±,;q
-™Ÿ6ñó…úú½FôY´=Pˆ¬h–D¨R:ÉóÁu7 øVjÑZ=¬…ë0ª<ÌÚöRrã`N0ò ¾°cU‹ÎBa"ÈA_¡@¥µ²ºP^Œ+jGtöNb[Ažm!Ý^:ÝAj¸:ÕÌ)61£(“ ]¹¶ÀLb®O¬Ã¸R:ßöˆáà@ýÇš„d•Š…Œì‚1µ£D‘:Ýûñz ¿/¾ÛUžæÜH˜ÚQÊÆꮬ[KF,FÐAöàõßË# 1ay]v«ª'J·Œúb¿Þz
-ÿ‚Ð71ÇÖõ¤Š7ËeÎB°·ƒ …(y@,Þ1q´ ìWÄ=y´N_4éªBÀÁÏhÑ”°Ydul¦Q_aüY’ƒÔv”eÛ+^:j³ÙgBÖ’¥èLGeVæ
-(î6‹ºßYE\@δq&r‚{Ìo™]µ@´¶,&™ö#‹ª-Öm˜E,h¿ÏZÎã>ßÚb7—*àjq¿æ=HABÑÓçÊ\€-‚$
-•yVHËœ®bYÀ9Ærf¸/Ú›×ËÁú3HR€Ÿ0“#gc"³õ
-¥¶žŠôJ0éž`4Žœå„iŠfø¯WRP³u#8ë½wP¼¬WòÐÕ´·èÈìTCT€U8öi`@ÎE»7Iâv2~X,C9ˆ*Bz¸4½œ/tƒÃÆ{¶Éyß’ÁŒS$-óh‘¯>,š ¥.…¢Mg,ZrÆìj3f$\âÕ©˜œHPËî¹G ƒ†NÅ#©8…QÏåä@|ü{¬ût¨í¬È£òócn‹z¡ž[âyÓžNvIPªÅE2M1u» {Té&ࢢñÓWkÁ°ˆîÇÁMn#Hàçt¬-J0[‰*vfRiíÜfçNƒÑÏ:Èae÷o$©¯IVx*˜©åÆQ ¬[
-¦’ÝÕ׎¿3Iàæç™Wm\-}ö:ËÚÀó𠦎¬àX.1W¤\éî Úƒ¼”w%[áT,ê¬Güü˜ÇVp`DG®AlçúÉBU¦XÔ€{ÂC€ÏΫn*Ô
-ž±ÑŲFˆ/Ê™ÇYÜÉëHí,rƒ…ÙQÛãòŽrÆ”"waËÈá“*')ÕãÎSq%`hrë@[Py:¸x‡×‰ç2ð+Ãà óéÆ:(1 {pf’Iù«ô@ÁûXgÐ.×ý¦]™;ð8ø°sÁÀ¤ÎûìA÷é 3£ê‡ÉX©únªÊ¸k ¤v¥,~ÿaFÇ YOõ ¹@µ¯§d³IÇpõn¤´+r
-âJúw¢=<æ@pQjƒåCð…1ô‹DÁ^¹ŒŠ¾žíó,G~„‚ÁÓÚæmçGyK
-¨‡¥€z­F„Ð$€A+: ¤míÍ”ä­pƒ1©¶ŽŒúi‘B9çC
-†/ă§ðÉï°Äá{ádvF™X" .[V™8¡,AadnöyÔkç¯Ãm¹: ®$–vá®/kè¼,œ†±õ¾~Mòؘ²Á¹¾ÖVGì ¼x.æóŸ"ÌÍÄå–YØãÖ%Ãë¾K»QÁϳÌÌQ¸ä£ÌU)Û;¶çangl;ƒÇ-FìôëF缬eû Ò¨Ek ¬rb_q¦v™‹cÍ&Ázƒ¤“ÄVg¹~Ãä,Z‚BÎ&/'̞ܛG&¨Õ<&È•4‚ßψ]G(hŸ¹2vô`Ü5%`EèiÚ`-èó>™¬/n¾g°|ŽLîBC€ój¬Ó³FÜo"±døúÿs«ª¯®€°¡‚Œú%ó])Àk©õ!PpÝ÷<"ª‚"Š+áX7øÌཛྷכ
-2i
-×KßN-!nYOgÚB‡›{{ÉÚ®Ñõ•ÍkEß³j²™qMjŒ¥ÃÝë1 ØQÛϳ€¯ÔáoÛ ŽnR[ª·ÔÄdÝ­i—‘E¦ãrmh›é–K&À4ß r*gÞ±»­°nŽJßë\¦µ
-–©
-ì°ÑŠäV£`φ)ú ‡0ÏÕ¼Uµ „ºÞkü‚tà4°â2j—gÕ7= Ê¡/GŽD4ôۦ߂ ç[}.90ëÃÊf¨,Ù e´k3¬x™œYÂÒõi HíãQ­(b‡ÓºÅˆf0 Æ?¬o ¯û¸F/è¸ô†•% Í‹®û†çŠ0‡ýȬiT²¥»±Ê§€Ê9yÐý6aúúè[©¹7;Y‚}!k¤b'Ù¿Ëe»×‘#È7¨è ù.£2eyYì"7K†*X!œ¹™6Oríp*“qQ™k\Ò’^GÃÙŠfsÛ¢À‘FÿÜJZÝUØC~üd›y âÅȹ›”h5ܸëQ
-JWPJ0{oÇ
-h;ŠŠïVk7¯¤+µ¬„‘;I•FZ)ÛŒ÷€wøòíూ79uä"4?àö Y‚ì¥ $?±P‡„¼+¯2:&9%}C=Ê]P?ÏŒ”Þ2³WÊ/)DeþöÒö, ÆhŠLª ¯Ñ•é/GZt—›¼ô–Á3gF>æ£Âñ•¤Òƒô[ISù­ZO‡‘kÓÁ¦Ç&õIGÆiJ¶O…n4Œ÷ÍGq 84Ò_JfR3‘ËÃ$±ˆNÍ@ØÞkÏ7Ĥ1‚ «ÐT™ÄVkrY0´Ç+|Ò%{vHÝÅßÌdûúhÑá÷²z[3r^LA©?Ùä…0Å.^Éø|Ø/¦d†^Œà¬`“.e¡“»Œœ" gÛ0#rOãÖ²ÙÌ,€¹]/ðØ‹'áu§‚Ü Ï†¹2^œDN´°<ò²Pð`Ñ<‘(!©} 2€µR"%ÔUG63cz´­@\­ö`®èj2ZW_áÒ†.à$ÿC0!8¼êÉt•{cV§¾äR ·•Á7Ã
-az[Öh{uöÜ!Àí =½Rù ¸|IéâŸ+“Ò ›æ€MdX‚9I‹kÃS±°;“—®‡±þ½Æ¹þ#Ësl ÉØ… Üóͦ|~ü¿ÿõ¿q/ËõóÿÄ9Ï´Î#9îÌAqðDcI–â‚Ò|kƒ9Ä8{~ÄFA#rx)X;YôMKv’Úà(
-¬}7ct×Ë0Š&€Ñ}×ËøÝ!3´ ¥þŸ.·µ O¯ã\ßÁLÝÿA@é‘ò
-ùÃ~ýüº"àgÇ)a­· ÅHðß3,½eÇXݪ3MÖ¾.¥þðÉÛôرáÕ©*SIz  ¼nr˜i[dêxUW?UKÅ–ø)ÏjÆOçz)Ã" sÌT³`&SÓï$ó«tÁŠ€“­áÐÖ¥þŸoû0÷6Áz/,ýùu¼Û®ôp§iÇ7[•mcÿW¥àkycœåNü ØíŸ ø®u?ö"‘,p‹ÃþÆ–ˆbK‚º
-·T‡Éi'k ;pîØŠûǽÔ5À»¸¥¦ n4RëäÆp¾§co4 vêNít,uyÙï7_àçÔƒäqRÛÓòßQÐW66MÝZ‚À°ìÁÀ&{²´dì¬a¤¹Ë IŸç\S³!¼òj!ûf#¼²QKUäª0C Û¨j+z|‹n•<ª„çó߯!]*Øž¾>fØUþ?&¤Ý€©Ù䥿ž±?¢ßÉ(”‚˜4Tª‹Z+h‰æ
-¸m9¶M@UÉúUîÐ>]jj,éxMôzÂñGŸo„Ûñóxf5§:“^ðŠZHÛÝÀôkœælo[à2‘&šLp]q9†
-æôî¯_F_7/ß‚Z®šjz£BÓO¿Ç|!È@ãѶ ÿÌjŸz#‰~ýþheÂ|qj÷·ª¾Ê'¨aÍWÕï²,gÍ ÌÍ뮜šÔŠfO¶GîÚ“g€{ü Ž;yǡ¤
-
-aáŸnèjã®­ªµ+y]™yWŠÊ2ým£LC_v9ÝnÙ­>ÜòV%à
-.ÿI£&ÜW£ wÍìH“ÃN¿—‚ùÁ ¼5•µæ¬È%ªS.×ç]`¬Ø#{Gúsu-®A°Rkñ †5„´±D’d/i¶prµLºOÁ¢Ž(H©ÉŽÐ«1Uð™(Oå„£žôKp-.¤¼R¢¾UPè¤B)œ¤¦Ym¢?U%ÍøyòO–ö^ô²¡æÿòž'ëgÔ…¢‚xäòÑ~îà¿n›¼»D¼ÁxXFÉõÇÒn"Cl E;ÈûSx
-õäaõˆxSîá œû–‚nFýëcîM®òÈO®fÔ熪 oÔ½ MrìÖk ¿˜ZÊÚîMw´l};+
-u0+K鱂ó. à.TKYRâ°äQU'Xž uÒ}s¨Ê³¿9~ëìÔSº°´§·|™“*>]Õ‰Œ§¡š¿Ïèª)¿ßÔÑsb/
-–Ô%…iÌ ,íIø»U@²gÿ i}Ûƒ,„ØöÔ ¸j·ÄóBØ@Q©N=.®fÐJmSƒGÈÖ—–+ª«ç-QÁ¼%*(·ÄT˜U;O÷´sªîd»4h‘ͼ¶Ôåñ~µKƒEäß×Û­C‚›
-ܪ:lÝ~7-/K¢·& ºei ¨â¡Zµ/iʤj_Ý/Xe3@TZe½ùÕö›g!¾«? C0_{ö¬z.à–eÿä]Iø~·6X°u’V±-ê4þj/€üŠì­¨Þn,¢¦scpoNÄûf8[~„Œ~è 'bmëcðûcnCCº ä²È%†kšÄà (•"s1ò3R
-³ŠY\ê]]’Xµ’·LÑ«šÄ°â÷,?œðÞ+Ü%¡YÎ1¬qÉEÞ?B:7ô#¤'¥WÒÆæõMym~E~ñrUÕÝjk´²æ\ùÓd&7©,®>²Ó&“¶|@açÔã¦zPú¤–xw•¿‡M²Xçó+c¥=èHu.÷ö$l1ýçfnLCùô4ˆ6¬÷r2²ê¡DÖÝQ@(ŸsÛ<ìsÛ¤€É:§zgµ 5·ãv«.«ŸÜÀE*Àÿ]ÛInõö(DåÉÃC{[gZÓÓK9im LíªÀöº%·nÛeŒTÝ»ºµƒÀd–ÛvÀkµô
-Ð1ÿ˜NvÑéK øôMœr©rXQ¥‡ê|6/5•Ì„šMýªÚR%/]ŒŠþ_ÝJJ¡cÂöyÚzO¦S(ï_Óï¯ÿ®¾BmŒ´/ì0îÿÉëÕšBdÓ¼Üà8ÇTIT{ŸƒÊןg‘Ü>j¼¶Ïc›¬òœTÃ
-Î[ËV®$µ¬AB5o2" 6C¹§Ô^¨¦¤ A7´òQm!TÇZÛóR¤ ¯Žy d)Ö+4}ݵ̬¶ÍG{+=˜^–ÇOyXh²ûÖé+Eá9©3EU«<'U)HU6Ò+ÚŽj ¥‰>¯šQjÞª5%VÕ4-µµ*bVʦfl®TìVß|‡ï‘»øû¢ŠA
-
-–W@Íþ
-+XgÚWÐ×ýF@Y
-h»^ h'JIË< $3EgL:›N8X¢8‘yFˆ½DÁ´a(øí¡Þ
-Žt
-–bwšmvëwåÓ>ç¿šµå4:ÕëÉ_ÃÞr^Y
-©ì"§9Ñ®Ù
-éò>‡’¯Â­ÚÇ =ü* CôÊ 1ðm÷¶î¨æÔÀÃ
-RÍžeémz×;ï:Aú¶éònméo=(pÝ%ž†j Äc^Ä=Wøü˜Ûzþø˜['tIo+Їk):–1P§4gP6¶& Öhpel"¨†è£XõŸsÇIˆK«(
-¦½ç6››1 «öhZ.;T¨í4¾×\·›”Õlr"–üÃ÷n#9¿IùkúÄŸ@¡¸¾P°¨¿®VQ E7 #Qv¥^Zü1÷=¢pKÞˆû9z‘™ŸÛzLFZéú(´dÐ×âý2paB²Ò¸ábŽ|þ€zXö º…ä›Ï¹·)À’3ö1½—¥|¬ÊQ¯pE±ÞÛÁ·à¾_Œ,œAÊ­þ8¢LÁÏYn~Fm‹´š&¹‘ÁÎ:&É:/ý%Þ…ÛÈ@¯‚x7z§#«ÈÀ¨CT4F†9/f£D3ô¹¶«?þ }âG¬&q¢úp³÷
-&·”Á;,w2|O¨}øIÖ|Û÷ôL«ûY„’XÀgo3;no
-'±sI‚ôz
- >™mß‘ç}Á”…tµzK
-ˆ"_’ïf`ø•ü!£ÀoK˜ëpš²Œhû†A1m|[\†ïɯ°“½,Qe‹‹‘ÙaOåÇü„} ÄËê^J£Û÷`‹2R8 i7¬ø‘—M#%lq<Q~4kœZBÒ"ª×ý´ÅuMÚØôj_ \×ËŒ!Áéζe"k MÍ6P†ŒÖ––Tc:˜>Í.ÀÛþžŒé©”¨¦ruª%CB†Õæ¾e5/¤Š(ÑGÔF'›Ã >Îu
-Jª
-‘ÐÞÂpŸ˜¼&rãþþçpDé ¡òt¸g:ßAº»áƒE5ƒA™\šÉ¢ì ­-í0bÇ(W·ÉaÏûß/uwìj"5O(ܲ~´¼®ô  9"µ¬Fí¾®mó¾ž1A¤ÝGoËbqZe–cŠôQ›En4«IYs^›Í¦$¤ 19â$þ‚݇A*GW—GÀ2æ’ýùÑÍ9¦+#,sñ;ˆ´}vëó£·mF"D}÷ A‘=x7=¥€z]ÙzY€´}}Û–Æ/|&tÒÐ&6žú8b5)›^›µõÉe~ý
-;@ý¼a¸©
-ÐÛî(D–Äâ½¥×™í
-àdŒè¯Ë¶R¾¯Æ@Š ª
-Ôê¸
-Ô˜*t,_‘mgÐ+Q@Áò°’ú ˆ¾RE”žu‘úxN®Çj"AÉ`¸Ç¬rKÅÈÁ.gqÒ×ئ¶YÈ[ ÒÖ†ðjÖuU5\AÔ"§€‚%–©@Ô"×µp~…&€Ýº˜Û¥Þu%Èëá¸}X=÷q½…cýÔö[°õ
-CƒÏuŒ·¶¨šÜ[ÞÇ]”…KÛ›À0u%Øí)·ƒ+™–ÍÀ=KCeü™Á,G’68Ç5†µnxu»ëN#Ûþ0Ì£ Î=hm \Q¥~=¥€’;˜1¡=8—óy{ÐM©Ãj‰"à‘pcµ»8Êú1Ôm¬¯“õ¾8ë—°Z]‡R®|¯Ï{Û5ŸÚ£Þ{ǤmÄàýÞ¼Êþ(€ êUÏà¾^U¡9lÄ6^÷–,ªÁŸaKFJÚ6§yHëjÂ}Êì®Ý ­º5 v÷_ßzÌþ”Žîrp+róåFiù,ðœ2w¸YyaHyXs÷æön´„û™ðx_Wþ>„‰Î˜ü¼ÀÓ’Ž¾Þžïz~¸_w§AÈ–ý
-?€n:¢qÑPڶ̘ø‡(±2b¶TìÒA—aSª‚eÓjri’K,lZ}´¤²xo+fÌol›j‡-»žÌoéAlÛpK´mZWkd¿
-¾~x4#±æ4ÞZ £:±Ž
-O üø°9ÝÚå«Ù&ðúhÔè;³³Ó~œÆÇ)(^ Œ¯† üødf,*š`,ê6Çx%?:]§ˆ†äÖ±_ƒew³¿Ý³—FýfÏãÖ¯=¾¿[_øÎ!çã¾|1þoQ¾›ùø8ñÉý<}ÝÇ=ã6¢Ÿq娼Í25?|Ÿ»ç9æîi>¦il[¬ýÇG³ÑŸ®+¶ÂØ(έ46¤x,_:ÂÉ9£º7óÑUz>GŸÎ;÷§ß=}m£pÿk: ç•aã6íÐóŸ3þ}ùeÓŠ¦žê:¤mÆ´ªý¢Ô§-!òÐŽ%.ZÅ•l KDì±—­†QGås|Æ»ñœ.íi,•
-` \ŽpjˆO$\FÍÚx4¶Ì™©e6@sDŸ/£Eñ<:Lù¶?.–-qÞÔ¼‚Ø£qRcß>²d£n€bÍt0ÅX¬^¡ð.ÌëIö|7 ÂÞ¬êÝm×
-ÉíÚÓè­fƒrŸW#“ûxh€×Þ–3Í’»ózÎŽµ³@iâ œ‹$Ô¯îׂYôæmä‹ Éš¬.uÐî 56¶Ç•þØ—Âørg|؆¹±[vlVN“+­’5ygÛ8Ùh§ðÚ¦¾ÅÛƒ—†ÇñÚVÒt'$¬ìæÙbt=nîr§Ç_ß| YögâpŒàYщJ}À\— $§H•Œn^Ø0®F°Ø@˜Ý£ñ¤G¸¿æÆ74°ôÐúàšsø®#éUHî×’_á­ºñ‡‡k÷ôZYÂCÄvn‡ƒÌ›…™”Л‘dweÝø†$ÝóÁëgúæúÓE¿…Â|eN£eγƒë؈yY¼Û±çõ¿!øø3tçÇ~!<•›…´åÛFö Æ·§›øA/Œ Yë]üu2¯sÚíZƒŽ};SóZ²ÌL.êÞÀ^Æ? ªËͨ'`ö ÌÏÇÚÓ7J+nÿêÊW->Üüíé¤K%ﮩŠÎô÷?7BÎc×ßܘEQà$äðö¼6(9÷í6m¥BaÉUa$R0j[O׆Ñ[½ü‡©XÑ{=¢ÏóÍ>=€"º+Qè3ÌwãÑêiœ#ϧ€ÁÜov3Žl+Œo¯M¦öuÂ=·:©FG²t[úáéZ¦¢] `ŸnØÒ Mwpꂯ׼Â-î:^v „]_¯¥rG'¯;â™ÍÑø
-$é¦+hVèŠDvèrçÆ;üyH þzÈ |KµâC‹\Ì ²ã.«õŽ‘H¯ë&=7pô€×ºjѽW8ºw \bÔÂ8§LTÀÒ®IEA› JSŸÿÐå
-ß_Œ=BgMíófÄËŒ·º£ðbÍÆññ7£è7a¯@{ÏÞ: x(]Ãð̾›¡8ãùnÆc qÇ0ŒYàÂQÇ<<JÚ“‹‚Ùç…Ç$ ¾x“ã?fü9‹Î8ÇŽÝÇŒ?”
-Þß—_{¾/ 4WïÖ.Ê=ž+…û Œ|„0ûÂ}}‰MÛÁÛÃŽ¢b×ß}“!„û°!ĽíhŽ«ž["!ÜCBÚÌ
-õ-gjÍ7a;id§\ïF|(›oäf16è`‰±W‹j4É–Ih@©4úN.³¥z]ç“ë›Ø÷ku"üZ3V™äÊéb-Ûñë2'ÑÊüh6«‹1òf¢òeëÙÈטö×eÖ“®š{·p³Æ€ÄXeLÿðtmÅP¿¯}âÙ˜:ažË¬Ý0ßà4S½ £õÖßÁýZ§ÉH<§3½ŽvÅÁ5Qð£Âü(ãá}ÁÈG yضvo »<Ìu«nÍì}{è?Ì÷>u£Å=^ÙRá2šÑMš¯±ñVt ¹fï/ìlÚ.×6 p`ú"äfnR}ÇŒM1š£: a|Ãx×]Ù˜-´‰Üc¡°´j‘û¶,ü¨Ä”Âú!ws†‡pµL²2&è«7£v hhWÍ%®µLí‡L*]Y,.¬u\‹ŽÝ¦÷i<¯Ü®éf©éƒ˜F<—Ôé7­òÅ°èØeVí1^›–òªåÍêÉé2öksQ^¸¿nkàÚ´vm÷k/cQºµ²–Ša¸×­®ù~ÛÇG¸N™HJÂ>FQôI‚U¨ vö¿šPôýY±Ì›±ã\].šsh›ø ºèI„öŽ.×.J|íË8+½×Ûµj6ãÔH‹Leܯìçôø\ÇŒ›ÝŒ|ØËõ#F¯…ù~³›‘ïàš<îLï`xðý˜IrúmF¬Dl ̾”Iñ#ÄaÙ»ß
-W²vìXöâ%ÊA»?U¼€/3ô\ ãÅ­Æ0D¦âùñip³ÇÜ/üxܳét‰›Ù·‰0»×i¬Nî¸õÁˆ¯p40 >èW~¥³ ˜ém÷:ÚÀ -®ý ¸ê8<6†ì¹/ŸFÝØÙvm[²é}€ Äð¸9 ñÊâ£_«j‹3ƯîëÌ;×NÐ|nWNWA9V¥Ûµ\·Í(¾îcתš4]çt|õ¼Ü(ìŒ6‹P‡òã_‡ÃÕŧÌ3®4ÛÒ|©û__®™&lWž6¨kßl®Ò³QDÕšŒHvÙòý9¯;ï=àkÆ_ í5õÛs_¶¡j ¼ÎþúÚ)Æã'ê×V±ù*ù1/#äon¾_nÊ,#ç2NŸ<ýO©S¨Šç÷±Û»mB×Ò³R GUc¼»73'ëÍÎîífœÏ3céåi¢æãq£mzJfÔD’»½!݇јÞ7V/Oüüdv-¤ÖØ[1N“Š£+žà›¹­‡Ç½–A-6ó®ñ:©-oà}ýéfa<ˆŸüìíqm¶q º¸òö.£ö§ñ›Í˜L=™ì]SØü FW+̺í7cÇ¡;–%Ù
-uôVêó©Ýq=6±ÄÇ‚>™¢"Ý– †ì*.LièŠ Ù±Ž&òæ
-õfU-l;¾ãø+bÜëÙ¸“µ›È{a/;*S¶œ¸AO¹ƒµ’›‡NȈ¢D÷N,í,SGÚç:lઠ/ë+<Ôb`/+7¼Sãá¡D4ñ¢zÄË:O5)ØÄŸ¨`q–º¸Å`/+h¼¬µñT—ƒM¼SÅãe½§Ú lâe%‘—5Gžê“X/«™¼S÷ä©FŠ5ñ²¢Ê;µWžê´°‰—U]^Öy¨M€¯"•eU#•ÑÔ3còJܺب1P9¼Í®E§àbsÄ8X‚yÙçUãkMØk¶ú8÷+-O½hÎSÑ6ñ¢ÄÏ‹b@/
-Yï”zYè©x›x§ÔÑË¢H”Ø„${µ¥Œêmr0« Oê÷B©F`V©¸l‚>Åð©q4GQ_k:«ô=ÊkN°÷°l²¬al168‚îoË~Ñ&òrÎÒf”âZ¤L@MÀe;V‰QÂœ•ñ¹æk÷®oˆïh¶ŒIÜÏö 1ŽÁh½®oÞÄ*QBP.ÅØ#ë/Š8E/øC2†çý†7#ocôâú óhûÑè½…¬¾Ž+ÙDüpÜð4Ρ!›»q¤Ò&†ž„”æ`üU1^»®×ö¸òúv#EùaÏ:Ž>?ý°ÞU
-*";5ü“^¾ŸFT%ÊêýÊ Å$T © c­¢KVÆZæOƒnRœqÚ®(áÇÑ*´ Š1}¸ÿ°Æ‹«÷ c ·öC{Õ„obœa\nlñ9$Ϫh SŠ±­
-£R ÍHµ2á2´ã]æÅji|—ˆHmØš ,+«A>*ZZÒøЕc3B*P}ñ«UöÆ~0Õ25æÍ«­D‹5¤¤FEøxÃaÒÌzC£+ˆmæŽz|*PjÆeB/¢Šhéela C€ž†S‡hU³:j,WêÁ7FqJ mãµ€l3¢^òek%·°}õ ¦p»6l&‘u·Ná1¿âZf'¤ í¬K„mVΊ¥®ºŽ̈9÷žq˜ÿÕ›ˆŸ}öéÝ÷+!+cªšNà„ëÊX’ÆÕÿÂjÒ³s˜²ü±¸ZENþ€&ìý¨q¸1«Ç+Æy¼7WQ 6µ5"Ÿ½ÛjŽ›™Ç;;‹æz/’Ý°[d•MèÒ(Æä¢RjÔÀ×ñ xBäÕ~ñC¦w“MÛZóõ O2L5úÄÿã=Õ
-ÚžvN“ü0‹O©­Ðc*uÏÃx´M³fœO}¹WṟªCG&v¦aÊ¡O#ÆË݃êÒ_nÛ.õqžöcá—ÌÝ»V°
-Ó·Lîóºªñ ]Š³ ïÖ®nØO9:U-3ãåÃàÊÜÒ8š0N¨v¯À«TÊI3cMžÉö6³¢ ²ùnh!Ý÷ŒÓÄØDü Ø1ü£Iý9¨ÚWBÛ(zQ!öâJHbDì>´êÄK[Е‘½¿o¯ç«ófôyÄH½¼#L/?\ß’wª2cÕ®K9‹J7¾b$zwS~ÈͯVÄX8Ž©Q'™(MYñoÂXGòÃÀètÿVŒœ§7c¤dé&H#?§þs¸ä9ãÐ7wóKµ¼²•DÙ9“)%É2ªÙv–c-üʨ“W»LØØjLTIÓ›EÙvwÉIh"ÉAlˆϗx¨§Ö[ ÅB ã‹Ñ„T°§›ä‚`ãÖËÅÊÈvÉ¿Ïþƒ.ÿ¡hF«0s( nAšS‚¾Ÿ¢]Œîœ?£"ÄhIdj4úÜìØû¤¸Œ2œµm ¨‰Lo1*ËŒ¨S.]ëÝýï´È¡9=K#k¢òWm
-ž.w¶Ò4f¬Š÷Y‹ØÊ ôŸE놅FÔrpoäPz³PšQf°_‡B[eÓ@æØV¾µ`y)þÃ' ÖmcuÝ£Û+‡‘Ïгóxuƒ
-e%éà~¥Ù‹f~©þ0pò|~è6{6Ñë"Æë¤t6º˜dpËöýÙÑ@¨øÃ' ^,8¹-ndÛÙT~ÓÏþÿBtðèÙ˜[qµÓ¼=:ß^Bª´~-TŒÛXŠ½y•p»ÐcDŽ-¤,ƒ«ÍʸEÖI&¡üZÕy¾Ïö#ðHn^FÍ­yߨ™KÏM„^d° ½H„«î#¼2˜ 5„f¤E(Kœ1òƒnA!È gXîÎ)ðŒC„pW’F)™‘ø4§ ˆ’®A<¹ï´BSÑðMì´Ÿ½íh†2´‚FMÝÁfȲi¼Á¢9”B6ºføg€€Ì&2¤1ü‡G#%voF(>7AMà I‚ÈYÊ-Îp¶4*Â&äEÎrs…ÀTŒ¦&
-„i’nÞpHýikqY–4#’³¼Nï¡
-‡H¼*°&BÑþ&¨O=üIÀ!½?½yEQùâ)Gm†8
-BÎ~q}CÏëüÐ2ªí¤ÇšlBˆÍ ƒh ųZ6x
->“Bc•ãûÈÌ’Ê „‡³¬óðC}¦-ív̯ÞB1ö3£ÃˆXŸœÑYû¡‰l暪±º±M7:f¡Uý¡ ´½Khß­…©žr®øÜ :Ãû—Ùi®¢, X¨Å8*ª¢ˆJÝÊ0¢ª
-›Pó¶ZFñø:l&Fƒ 4d0x3"·ó€dДòpü@ið¤Ïã§XŒÓ?™à¡!µÇÿûå⌦ÞUÆÅæ®Ì¬É@‰Îl6!ծ̛–/öÊ?ôV/£¦'„1ZXÆ/NíPãj‡½r¢ Í:=šÈ ±.Tö½¹<íÚŽ ˜9? y%¨òƒ
-B¢ßi+Ð=à§̈QzxðnD¦ÃÝØ‚‹rþ 飙W#ðòI5¯,aç¨[ M¸tÖYgA„[y¨Þ ’©€Á¶EåÐ •ú2¼ÃÚ*t þkסÜY40jÂÜ*ÄØiä./Fc§‰+NûAÝ
-Ñõ®,&F×R\®B ‘¥®?l\Í•[ŒVShFC1ŽnÇé¯Ê{ƒ±±]ž¸±®E…Ú²l”ãÅUâ¡EEÌ ð$õ%šˆ®áÿ|5KªFpmbdbWw‰nb
-rŒYªIŒ–Ž*FS¨(×¢6]ÃØ‚ˆœ¸J'´ðÄØSFá5? TKÿgœïÊèß^üà:ê/ןÔÙãÜ; 3i{Åq¿K¾'›Àc¢Œ¬º{Çé»P$ÚÏœÝ3¦Mt"ÍéD´A.v…Î^½hÄ2ûü.ÞâEIth뎦o×Úõ-bIŠ
-yxfu{º©†£ÚDÒœºÀЂMîþùns°~ñ˜,÷/ozèÔÙãS3Mòoïýð¬Þö¯ù÷¹‰š)^ú-~(Z®¡&gjËv¬®'Fã¡(Ó!ÂBÒDmø!á$)å·"ÚÕ«Ho œŠØ‡8 ÑH­ru÷*óÕ6Ðå—Ïq¼LÑohÔŠ˜ë·°+Œ£vT‡£+@¬€ˆ c£¼Û©!² ˜¥ÆRÅc¢{šŒ1såÁa¢{š±춤l]ì`´ÉòŠ ±É8{ó"y#E.ž62™¼azåv·É^0é±k÷n+‘Zo« ðÑo8zrBBN¬ð¡5Å]VßO(Aжý0quÛ™¹$¦saÆÆ&@Z¾Þ~XÝ;Á²àÈà}~Œãþ;
-k/×ùüçWxÒèüæ?˜b˜é˜‚ó9ÈÛßÁµú£Š§«CBÔ_¹¬}Óب@úB)” Ö“4ý·ø¡»=à ÉýÌæo»&Z¦wcPB®5 ?8¯–Pc§æý |éâ_¼Ss*}üË¿ýÕï>þÙ_ýmN¿þúÛo~ýû_ýÓÇÿøþñ7¿üøí×ÿôË?ÿø_]Wý7ׯÿÿÿåõ?zmþŸþñw¿ûåoõï~ÿ»ÿåW¿üïýÛ¿ûÍoÿñ¿üíq½ïÿÒö¿ÿï~õO÷‡oÿǯÄ¿ÿõ/ÿù_~ËŸ½ýã·ßüóoåÖþ!}ü«ë¿ÿðŸ>üþCþøW¿¹þùo®ÿþ»’¥»ÄƒV‰°1¤^ôå À!âmSÖ#©5SÄõVåY+8ø‡¼ZÉRnúúÏ?üáú—{ýÃÿu™þÓÇöñüø¿ýïéã?Éÿg”§7lD~U‘þö`NÌЃrÇaÀ5«ÊXºÑÊho2shÖzb,3ãhB8ø…›
-ó©jÃ4cQ+IDüf3í±f¹ÄúEÂOrp* õÉôϪ)<¢Š#ø‰z6°¢£*ixÚ:D[…ùW÷4â"©9¾Â”ŽAÊë.ºM4ÇJ‹pì;4œˆþ•E=4µµ
-qlÞ¯­ò×âô`>
-ÇžÖ‚ZÇ×;'å^hTÆRIU@rÓÒŸ´ÿǵÃÅØ¢QÉ‚b…e>Ê~ì€Ð¡Ü%Ü›=^
-]\gÛgâïfL‹U¡¼ÌÙ¤L˜œLZñ“¥µf±#«hл*]n¥%G6íÃho l9¯U9Á"Ît‡ÕÓ°hVe¨ìŽà4'T{ÜÈoxœÇk¾‹Ê8wbû% / â»,J"LYù*‰ïâäž@ºRn¨þ½ä
-¶“¬ûVG=# [ül&wJ΂fkíY”&{öñß1øÀ ÛÄ%'DSì
- F?؆Fß®U E2,„Ò -[‰Ðð~Eô׈bˆ¨<Þë‹uAhÜš:®—Ú[ɬëxÏ*}ñ
-¨¥xø¯£Êq
-ý@Ç«T”©<:%`B{â›Ëš´\VGš<É·ÃxÕÑ]QÆLÃ`Ú §\³sñÀ.9k¬é¨B_>p&ÐêPêK:æ’o°
-ºº®u"ö<cë~Qq4P‚—ïÀ&swWÓæ¿aS(’kÕeøÃå!LŒY­ê4¨4©Ó„á·”¬?ºìOw“±òÿ2ñ¼xûðr©ÿüÞ¶ðbMÿá½õÿÅí~€›ðä|{í=|~gëv~xסx¾ÙX]žfÈû³éy*üðáåÄùüî${¾úñ¼í}{½I~~w‡{Þ xwç|¾úñ¼‚¾¿Ú>/•?|x¹°~~w~¾ÝS?¸£¼¿û<oýàFóÐcSz¾Fé³ëüí•›ýù]'ùÉŸþá]×ûù^œ*Oç…?r¶x:Ø Ÿß?q<Ý Ýx^’lŒ>-`ŸßYë^,T?¼»¨=ßíß
-‘ª™Ö-ª“ÝÛ¶ ߬-wYÎÏ{ùîßV²¯ŽÔÏøQ#\¢§Ecæ5Ìüsp)'vÅÈã3fõ>£˜‘¥XÊjØ!•¼Ñ£CÈù+Xªx¦/Þu:„„õXŽ¯!
-àkP¥\þÒ`Óuä'ºñ‰,Ä>m“4©ÄaûãblˆÄ…?¶½œ ’Eõ~µÕfQb#صâ£RBòšºŽdÝT+šG -T­mñ¡ yEùR™H¾”€o±Z‚Ï“Þ£–n°íøŽ|Ûi¤B…‹Þˆ£±:ýu€ ò^»iÂNÃò¿
-IãþBÖ biÃ4å?)x5p¯¡Â‹?aà®Öê'B8Ûš?¹ à!þ\íX·Y£]¸±Ø€ºíT?á¤)éO0ÐP@p2äH
-ÌZ»3]!ógdö€Dš Ûøbù©Úi¹QtZyú
-y½O«©m'ù €A#Ú‰b¯LjÊ%=óÈk೫1«
-Ö . ª 2üQƒZª»;\àÀ(%Îö,ådíÔY‹²ÑbœA[€ÓI³/•]¯NÈÆh( šÅùÁ^ôcf+ŽþɲÝlBÐHÇtÑóZ™IIúj¾ .8²!EÅFë'0K¬¨°€Í Y«­¼r5> ßÕÃ×&rDw؆ŸÁj;­pÞQÀ¸Zõrꨥ•a&d& 2†y5Ï™g%Œ]Ee*]\„$P+kˆ=C²o»raX«ð2úÝšðÅÌ•Å*R¶I›ÔÒc“_¬Ò{ĺª™?dEùå%ðgÿßüË¿ûÁ?þÙß ð×?þòWÿtõÿÃÿò‡ß
-h7m§\^ΆÀ’8 Èò-†üß!ÙñEÌ ö*b!ŸWÙúv·ÌY¯X4<’kã¿«µB¢Õ‘áZÎîz®8i) iÍ4¶fÈ‚§5ËÅŸø8ì’˜ÌE¼3qû–²¡­jÒd2ÆxI7év^IGÇ´¨69>Ý š‰hÛøñ“Ì\–Î6‹Sgâ·gž)þoI °¤óBéW3²r‚IF0Ü0¬Ì¨† ÚàJ˜ºÓx ¤£`oøÚ
-Œ«%´ÕÈ3€)+.¨ÉµY2þÈÉFt'C¬à¢æêÌEVv ‹¥F½Æ‚èNiv2ìªÃ˜â!~—H(7cs£PI(ü«fœåQDKô2p3ŽRcâ)Ht3—ôBŸ‚´Ù _Þ©Ùƒ@GÕ<6ÍmÒÛDŠä¨vsõ$?¬ã]éQ×z
-­phu,K Jc|«g]h´ä5ʪCà3`ñÞ7‘S:‰j´
-!f¢Ú:žtJñ«…z!…‰ÿ<\~‹4Éûö1 €‰´)~ÃQ´¾@Ö"÷ÛnæR¦*æiض{Ÿþ Iö¬tÒU¶ÓÐmQþÈP´Â#ª1ŠKÊDo»Äʪ˜0úÐ*ôäÄH”DÍ{šFÌpxWl #$)£ù{â®Eï]•ÃXý;B“K«Ðȸ‘˜Ažœô´d““8‘w"xfÜÍW¡aKž˜Gg( ¦4
-QR¾ôŒ“ê,D"eÊ])–¥,P»«Åˆˆtr)nÎ^Ó2š…ÄÕ¸AS@Ñ‘N$—PÞ<¨ =9§RR‚8ÉOßû §d «—1É^€ÑY#™ÑÇ]É_ÔL_S”·º7s@[ä³ÒГ>̠Ή±v™Þ<ÊpdlÖáÉòÃó=ô8X˜Æ¬DG Qã"ç¦9V<HË˃Š,üdäkÏòÐX½ßc‡Ø~â)ØDmÛ@²s‘°LÅ ŽØ‹«Ûp!D)ŸcTé
-ð¸;h¶,QÅ_ é¬åuuÊ ÁFZ-þZ!T%ÇÜÕfmµàÚÙœ^dÕ‡Ã~Jì6£ÅÙˆ»bF’‡@û8ÝTœwkò¯]¾QaR@²Oåìž9Š87Œ
-¢íd„TŠ‡»²<õ:É›²u*Uä™DÊ&…±Ð«‰|Ì’ Ü®h%8®’àV 8qØùÙ Y`="œ¹œ2Ø3×éaz+€o’s0C™dYr–¶f ×ɦ9HYC­"1p#_v1ñ¥XzÈ–â gå)—›RröU§¦»33¢‡Šõ•Ô‚-åÞ
-Þª|Ɔ”py*¤ßH_QYWŒ ±„É7:Ü$¼åìR«¢.e#CtjZ'tæ0„œŠŽëÉe
-ÎiÃY.,ƒ‘‰®b”÷"§Bœvó¡¥Æ5hÜüˆ×ü¨\ŠU4õ“2…°ÇÊb:k/’X+âäÅz°çѬ3™/X
-c@úœröpž–AÉNÑ+ Ù@*±êF-À»<¶G$­‚©ÛŒ"k L}–*ñÅ¿Ÿp°Ù
-|›Æ"=Ö@"@Ê^ •¢‘øf9˜´ªÓˆm¹öÁÏ™~?Ī78ä¼­#¿!¹\@w]
-0`J¿ -#½t«Iæ&½´®¬rŸšc£ƒš¼9É¥ËVuµ."v€…„Ž;&ñÔÉ
-¿L§À,~šÅÚ2IƒÐv9,<[ƒ²¼X±.N³Çj¯FæËo±*_w¼ˆsß®13· :›q²>”p!gV=YPò®% q
-̤ärÿÅ28“ëØúNž ¤rj‰ìGGªQ?L·~]F§m¢œƒ§pW§ÿi+ç/6Tx)–Çg¢’Ñ–Éï®Ô{#K\)°h¹*jU±9×ѵ'ÔØn¥k"W£Õ¯ƒ dÈÀzºxw•¸bs†žV8â¬f$ƒ²p—4ªä@Ì!;«AÌ@PŠ§ kH}áË@Ñ\=Hä— £«¿ ùäb„sÁL‘ù1;óHõs6‘ ¥ÆI
-'˜|&‹£j»çAá„ 5óT¶¦ á4u– +s „ÖŽ}Ö6‘G›N‡š~ÉF1qMèRJ\)ûñ‚ÂÅɹi{Ð!YY&6C±%&ì$1ÆS«ðs7(š6ë"[¢’PL#9±$¹®6ürÇvMEw'¦ž(³ÕWÎiE¤Ô88¶¥ýŠ[ —R[ìô/,»²Â#ЬaFÄ “ì äÐ'†Ùr c¦ˆ¢–Æ`ˆ!k­P¦Lóuznd·f”m3£'K=äffüO*ö(d8ì%.(´û€w«³Ê¢&;™§](Û®àhœGMr6FÅD‚jŽÂ¨ï•Í4#âøܤX¡²œì¶ÃZ”ØùqPH
-³}‰%Nëw²«iâW~ÿÎT®Ï„chœAÓ¨ fDц4Öæì5™ßcoÎ}óš‡rgRÄjT8²V3®\<sˆœãÕˆVNù"So&bv”Ôj&cE|)^-4²…ZÍ' ‚“=­E±ÐÂWШÅzÞŸãëjÄ3«DU5ÁŸìÊ¡·r=ÀHOÒ®NÝ‘’$V©[•ïÍõØd TŽ¹Ôô2"—èåJšŽÐfÏÑnNOÖÌoFŽgü,[v”žQ—C‘NãÀK“•b4­›Û\zÔ„«ÆôÂ8zŠ(Áš»]›-t£$ß<©áÐõ³ø6ÙC6t" Z% î.š ʲl ÞŸÍNŸ‰Ûâsy!zõkB˜AFNÎã™ØÛ·Ýx¬€¡™mömèŸ{ÄUAsXm“R¯ãh9­…3AçòO¼6s‚•½<
-çÕȦÔ|±Ì‘XÕüÝf«}ý•÷Ï|ðHíñ5âÅ ôUº·Ô;r‘ÛUêÐìÒ‚Kp냻Vƒwdº³Ìß »“««²IpaÃT
-jÎ-WYY3*yÞfO«l øÜÉôêSñ•­¹~†
-œñÒÊIñ\ïfµÆÙ0AdN'Ç倵ss1c·Ì(ÝG[ö>U0#ª¨­zL ß K rßü (ÁŒ^M„2ŠÀŸ54åÅ\‘áC±Ð±­¢–}P§Cª¦ÜhÆÅØ6 >™™êÃ…aÙ288‹ïÝð5B 8‰ã©e™H‰‹;’dÕ86z°ãô#Ÿ;lj‘.Œ•P¢ôÁõ“™°6CÎ<ŸVO”~ÖÐ \}X¾è?9 W‚ö²`M§Ñ…æ%à>"áùΛäÁZýŒ
-£Î¾Ä¼Ã æµ
-²uB~«T\†Òwa½ ¥6ÓùƒŽ°Ö­ZÌúæf{Œãy(Ôé×f–—¡`¤t¢™
-VbDBä:ˆ„)Âjëä€R- ’B³l
-‘\ePü
-qQÄŒs¯Jô›8ºìT9ZYÍ„JM)q#5@*݃%£>·ÖÈ#Š1Ê“m­,1$•!W¯B£œ®‘‘rÌrP¨—ØÞˆb'ÿ7so»kÉr‰=Á}‡ûGÀxŒ¦«ò;ø‡t`Ãc´aCjsDe°ÉL¶À·Ÿ±"VÖé¾2Œg` ¢šk×É]»>2WÆŠAëÚ[ 1l© á”ù»å †³%¤iWî`4áÌ$_v„ÄO°ñ4;בe05ÅÉP}‡Àiñk§î˜V™Ë̪ŧ@d*Æ­"{1Z
-kjŠágNã^2ÍàÇÚw'¶¨ f“öX¡RÇ°Œ}ŒvMŒë9h
-Þ©SÍAéWªÛ„¬ÂÞ³ÏÔ$pþ1žgÚõ+µ‹ZÌŽoš‘Œã´ òÖ°$X¬ho‹Å Ój  »œ_k?~–ñwÊ¡ÝQ ðl»®n`X¿wÜi*>"AóB¤ô”ÄŠ¢E¤d}qû)ÅâÜ ƒk¦-µ’F¸ÃŨ=õ½jd]†6˜‘zWÇȪe‰Îg"Þp]t<“Þìz‰UßVò·Uñ©ÝG–a ßf6.˜?/ëMu+ø0KI¯afŸ½-Öå™%Ü„ /-Ì\A'EƬÇN+þYuØæ~®‘fÅq±4-hcpfãBTJì",Rã¨Û% Š
-\'8îÜ…þ!ü)2wÌjt^É$=Íà•ÛaòГ^"mövé蓤’ ú°].êë!~sHë©GsÅ{ÇÎyzS‰;m€µloïf’ØvªÇä‡íì%—hn²áý÷~%3¶âF^–½£ÏV<fé© W+úUá[¹Tö\ðÿÕj— óŒD°²Ì™è»ðíD :E°bÛ+®ª€Å`±îÂñ0`!ỊÉ?¤¸ºK¦uÐrqO_D¬wìØîÜ›µî®JüÄ–€Á)… ²ËÞ”©YaÍ„uËÕb¸:ƒŠÎÝkÙTÇDý:-´wz â‚ X™%3¸õU¤…¿ùæ¨y¹âŽE1x%ü²+¯]ÓXœÕµ2ëÅæ_2´‰ÌmiPË!(}SuE¼i¶é÷:¹P±°6vþUgp'wƾþ]™æÇhÐÒ W#5Üw%ñÛcm~ÓSà+ÐÍðæÏ
-ݪ­&Z§Õ†]”Î…:Ov×'§_O7¸¢n[gðÍ)q0'Ž—¼Î˜‚ÙW·A"÷òï~nS¯ésëæóYåAÁì€0ïŠÑnµÎÍÑxœˆ]a `w¿ˆïžn )ê¶èxNœÕèÆ &×­;šp#©¸Üp
-‚ô›‚vJ
-±¸*fùÌÐ>Š\Ñ+͈zŒÓ²šŒÖ¡–9K—"]¥
-°·ŸîNo±Ì±¬«ú@§…¢òE"ÿW´¡­P8ovZSQv»µSvâÛk¸¯”Ý¡]pè>±qYöÊÍQ­ca±Žýg›“Å5¬qÕ¢ƒôJSFØྠ=–¯~‘jóˆ‡hÒuðîÚmvBZæ5±Äo*J¶×~̳²¤½NkÒ²Y\
-‚Ñ&I rÊX¥ªë,¬‚‡}‰ $+˜ÎÈ5-$ÇoUÔà8ê^vFVi]uî§[(ãL£e=­Àà¨6Ïb¦óGXþÖM™RŽ–,®43ŸKÐ%1(-¬“­jgЖSÞóô%ˆµ?ÂY¥R½
-¢F GÓa»)]‹p÷c`¨½§‘Ö¯±]=ïº Ñ
-T*º‡ðÍ™‰ÞŽg~BÖÆ¿@ÂÉÀ™e°Ûzºõaá˜H‰T¼»l‰Ë`kpKÜ7U ¼¥FY©Ô7ŒG!˜0˜Í\”¼s÷>fîów.% .=òe8Ê3;çr¤›WÑHÄŽ5«ÕuµRÆáð f½¤+% .ªKMÀ¤W]-¢ážá˜ÌFQÏv”Gb{5t‰´wÂÌUŽ¾TžëíZœË”,ºåŽþö~{™&ç~: f( )=Ï@¯2ù‘ÝW
-« Å0rù"UëÅvÌ[ !§eMjwžƒð¶$GØgØSUçHæô#‹rÇÞå]Ó»”÷‰í¶¬‡{¨uÖS%‚&¸3\Œcæú´ o韀 Þ"–Õóï¹Ñ'#žÁ. Y^VûÖ¾BïØëQÄÀ§ᾓX×kê
-|S—F,m§-:~_¤Œe”G=*hº¦™ˆRÍ•D¢Ýï:{§='(ÙÇ£º{Ê8Ε'ÕU0*è:×N@èNK+ÈA8sÛ3‘]¤ïºƒjÚã‰;H/*ý²ÔÅÜ ê‘ºå½“×»S{„\Y)Ž¤)!(šÒb¤‘y—{g06âw™vªûü±Û4¿T€›;uÛwVE_‘œdP±Ÿ± dðÖ‘LÉŒëEVÌ \,RxÌZ¸Õ/œi ‚
-’H~‡<•¶òX;¦LËÝ {Êø6šÔY2OX‡ê˜¢Ë^Ú²¶Øwùøl›à©ís`³~¸¦¸qµ'º<  !,rP±ÄqÕ¯ÌçH€ÊxxOÙ,3\¢m$§Äa‹r-oXkú,!¬k˜æ<ƒQÄyvÉã€u :ÙC¸]†Da£«W¸j¤k] Zï®æ¤-"õáÔm;ê§ Öìç†î—ôºug¯‘8U`$SœÍV«ÉÂÐkÂ+.1˜¼lWÁ`ÔÑëxÓšrêPxx
-†•ºM˜œîàã÷× aNÓ6‚ Þné,0ØÖrPî ß®èx{´U&¼;-éÑ°nŸŠº°g1•AY?klÏ{ªÝ€s+B6=NÏksû^b/‚4‰Œøa›+æ­â¾d[Eâ3(9™šb>¼ï&{kÏ|v-m•KÆóLLp©ÎÈ_%Žb_Ifoqr
-fñ+=¸ ÒéißGÖÔšei ;÷ ÝÆ÷£jéûêJw?ôöný|Ç*Çʨ¨qᑆìki½"¥Ï:û9¨2ûö³D¬äÇ·). ÕUÚ6¤VÈ`¢ók‚ëYël]nä<-QÙwqéua_wœASþK[;´ÖeÄçJ¤ÔÖ•­ñná¾y
-ñ#Pr)Á‰î&œ1¯Še"Øìæø1\MÂ÷ZvgÙ¨É0— wcI?»]Bvéìu_ƒÃFAm–Ð:s/—g/ ´»»\í‚AÛjœã|¡¦ —ëí$¬¿éÉ’t>ÄŸÃeˆ÷u˜[)ïxüV+—® Vø¾šî·r¿ñ
-:Wœ,n ” ìxûð`„µ—x«©½S~A zìl<㪒ÚÛ;âØÀÛ»õ«#h•Ó¨a½x•‰Wª(¾¶7#7|€[ƒfE»/)ŒfÏ©qaîòR… `µ‹Ñ[^D3þŒ×lHi1-*¸Wn…®Ï‘¸f
-ÕmÕW2º›˜¹F^fwž–ã>²ºQ²…£·ì=ºÎÂՓøiRïÉï\qŠ6MgJj$w’Y)ü``ó<0Ús!#·PŠ½Ç¸f«ÃtÚ¹3{¹Ïéf#Ì Â4UOþŸ8m5±âg®Õ¬`?gO€Óz¨+óQ“1)ãw¥Z}*®Î9¯ëA7ÀybSRÀú”àÙLÆ>rã+¨–5è3çfX[tóTû
-±¨Öñqx½A¿V”žÙfÆ» ß!r}•KÜ€gÞ¹ÀCÇn )šƒúÄòo.?õÿýó¥D¶4W6z¤^| &惲`”àÈ)ÃÈ£€†îÖ–wS
-‚-Bý:³Í!˳ÿ^æöóþ$ÜGò¡0<u ·3xašùÎåL˜×¥`‰œÙp÷f˵y™UUËm¼ÅÆ©íÁ¼»ŒqÃQl
-u6\yîV"æ#4m 9 ,¤ÔZh³cë‹îÎý[ˆMBgÉFÙq¸Ç#oÊLÜtŠ^©¬Kás<ºšÜŠ={J؃ֻ+N»Ë¹}ëѽd—` Ì·Yž×ÝýPôâN+J+ûþE ±ÐâSuß¿\¬"x Þ¼C˜Â·/úÛ‹ãÔŽÞ¼jwÓ7‘.fd̼ǚœ¿ž»ç…nn£8¥¡y¨a%râ8«‘{r&èzP¸µ˜`|†*ßÌÔJ$-x
-
-§h¡ñä1Z†ÍNÙl^…SLûç18ݹ÷Ñy¯Ù¶J•üe€‹·P©sÅ°DZŽŠG¾L9¤ýÜ ,ÛߥÅ'†…gxµ
-t êi¯ô¶ô <ê4«øï],\¹C0§Ü•J?V?J>}@LÓ³™¹å3Jìèm6½påBn1Èï`}+ˆ$RA³F¹gè>Vœš!B zuK°ˆPŒ)¯ÃAXŒÅzv‰;‹J% ñŠ¬&Qa_‚+™q&¶ó,EÖd+HÐô¼‰ ?`/Ä"\êÈ|â¾+8@Q·UcÝÊÚEጰ2—׆°h.mùz2èªÖAPú`ÄWIÓf÷ç\ªmW¿“9;±ß*ÏGQ$Õ˜ñÅ[£¹ eù?¶»Þj”fCàI<rŠ
-Í~jkÕ>I­iK‹²ÞmdÑœ~üÔËí£Óþ( T.ÙÊšpçÙªRÜÇ
-­Q3û×J¦&É–Ç8›ûúÐÂO¨dÅ9Q6¢#ý`›W²9µ*x Š  É½Lló›„–vYj
-º¯šÿâlôÚr;3Û£' žYSÎ0{ΠLÏ\”Ë"¨ªãsµ!½Ú9K¢@Åðþþ@Ú¶°@5Ä =6»1B˜ÔgàæJȈ­8Kþîêù¢ BíÙ'=Fjç)á2*"-mÈŸ÷' Aæ§âÝ‚>gówWXÔ4“žvY] ;’º˜—-U܉«•lƘÑÈA³ŸW0›ôXoƒ ÄëýÛ)x§åù¼…ö¶:<¯‰lŽ`¾‚+3Ú)ë0OŠ¿3åÄNž*«é¾Ñ:B…È(yˆ·xwèJî¦ô}\1-ëTBÙºÒ†³@‰‹)ç{ÎâCÓZÀÛ´:ïå>oS`:“e¸µ¥÷)ÚÔê'7Ù¾†g?êä ¯@q·]"ŽE¶Oć“9ˆpƶ¦,s?lhsÂàºÏ:Ð,6ºÜ~% ©ž7ó5»½ëI—Õì [i ‰h¢j Q¿ÃUƶ
-IŒ+UJ€žÁQNGz(´²ÁVK!9(ñd_‡W²²Ùw®g}gIæ:Íß;§Í;V`«Ÿl6Þ5@r}J]`¶HÔ‹È6<é@tY€Y [w¿Ï¬(ÜÙR‚à²X"{<ÀåYW(`ïÚ'S—Q­¬½…,tÛuvïkgØ=ýE©Oà… cI~ÝÏzÂXÍ„Ä”ƒ»µ×àiY£í²Œ¾4€Á¶ýø]Åé® óp#%•bÙ³;,ÃhÛ~ßÑ’G>ð›ïPH!›¯xBeó5WÌWî6¯ùèÁÅÆ?Ù`û\µ+É‚Äiö’óL쬟üúâNO&‚ž—Ùg(ºåÍØB=¦Kã›LºÎÂ1¢zËfòzM`˜Û]¼mJ õOý0È餘“š‚y%DR)hœÿ!
-¢Î”D7CA=ÛÃÌZþ(‹2سȌ`wÙ^ôÅpg¾œ`Ú‘Q<êBÀ·–[¦R/°&‡´ÇÞû`a—~@9°—{}û™jb6=r ¯_ÀNê«éOßÇUQ¾=_†úB´Ãë²*b†Z×6%‚­ÝyýÏ_»9®ÛbÐŽ‹Î4mx×_µa—œÁN^ii¬ù¥¸©ýJ„§=SRîºÛ?ø¦›Ý¹ §_e€†A-#lzô;Êq¦¼m™þ¹Ð³†5ŠE~¼Õ̳ý:ÍØxëè‹\Å;Q¿+Ö2áE½\ÿ2„%Ö€çb«ß3»òUoIAfS·wœL!\+;{VKê
->ŽaI½<¤âº¶åNV«Qâ’PÍhI0¿‡>TUËråù¬}GU·+TY$“Ú“‰uE"õMǶyO‡[¶è彄0ž+c¸}=¹+9Êc=îʯKÇ•óeØnw36º~wÂÞ:F¹³?iôœ)ïÓ2ÕÒŽ­SWËÔS–côï/£.Œ
-\÷ƒÑ=š…àtÈq$/Ë)8’Z 1ºü Òå( ÚŽ‘’4ØO3H3~)ŒØ5Ë#T¨~ZMÎÌÌ·†ëÿ»ð¤VS#eÊø2ÕíÜˬÃ:é/¯ŒSj% ,«
-zrH{f|xnƒ©¹Ùóú¸O_Òý!ûƒðrÁý©’CòÓ0!vzdÙF.!#r-‡“vs]éƒ1…³²IÍqz€ÜáÞ a[£ÛwÁa9„«³û•Ð¯Ë¼#z¬n¯Cr3#û×CºŸÂ™f´ ä40Ý‹UÎœ³TÉ›QÏÔ©F;¶LÅÅS„•òÌälàËR÷)×ßþºg“ Ï`ä/óžcœRõ´O*ƒ)quv=|4»Nlyl‹ç¶<‚ÃÇLêqV6b?F]©ó1ŽªŽœg9p'ÏÊmËc‚¥£ƒ's©Ò‚ØïŠÂ8Üâ$ݯÖJ¾ö°Ð)ƒ6¶åj ­ˆõ,‘z=\Ù>-æ†<"Ö åMÿ°:³îK¢XÙÀ2ÃJ,µ>.Ëå—¸& c ¾æÍ~v,¼Ân@b~:¶C1üy Ï¿t3¸Ó…á>ökwú5¸¨óè¢Æ/Í3(«]gn»Z§š|J×OiB„¯<öàx·Ê%+ûÖŽŸÏ–4ƒ¾=Ö¶ÝÇ]Òu#¯AÉŠ¥î¶Ï@‚7<['—^eeͪ`ñ ¢à8õ²õ$
-I|{ìyaƒ-8`ªQEÖí1ãP'¨‹ÇÞ¼ô35 a®­²)?W;äuÉä`³e…«bx9(ÔobÚ…LP‡ðøØ-ÚœÉÓ#ÔŠ}·¡È}Iºç:,?‡°$á汤G‘Hݨrôù¦«+ªÄ:ezj‹r‚œ=ó³Û/èRfAódå=>ȼÚ[)÷\ǯÚÕ\üI²Âc`…mK‰n8>ÿÛNÏô+)Ýn,_®°™B¬ØQwKZ¯/ªzuÅ)À´1²[ùò¶QvhO©íí¤€ØAÛ±df¯ðöO’XQ{iM•FÈôݶy÷~
-ö….ÙãP9,å°Êw¸H‚ébÚ/[óÎSKJaIw¢‘­žÓÕ€–â;ÖJ<"QC‹›üäh+╆f¾5nŸš9f ÀPÁd+Þ†Ræ8”˜¬’Í{ÛôÆ"
-öè]ü¢4V)ûxø¶!b¡€tšZÒŒ[UlØÛtUBêº|3úçìÇ/Ëþª‚ñ±DgÙ(à#4îG©D•dÐfÖÑ ö)Û k`JHbrWz™À"±ñá6.?ããÎ R_Ƈ<(¿é.èõWŠ<ò˶‚ÄolÜŽæÕ¾[Ç4„õ™ÃîÀú1êF9 ôBp2ËÞ¥xIÂ/„–ZPÌcC„ü´´SfÐ&½iü1+/#2ü#ˆ¼Õ)ˆc—ÌËjÏöôÎnÙ~s*Ç6¬£˜W¦³6¨H#‡ôŒ'*±/pÌx5z€_Gï¨0}
-ÕØÀné|×Wj3[ŠçÁnFöçáëƒ'Ï+¾Tê"ìCŠA¬ÙÅF‚Œ¹²› QðÙ—Æm÷Þ!©Ì RÈ«nÏ‘ðÙ©XÍÒo_ióvÅvoÔ|N—›ÚqÜD²® ÐS§7lmßø1⥴q®Š•4 þÌ>?¢>è÷Èýb+lJÏ),!iL É~áäÇÞ·µh=%´skÜm…”}%L4R¹Ayb#ˆe;òâêÆ9‡#‡–ù{—úü:5^"¿.6ðâGDéAövðH&ïÚè "û:fŠxï®Qµ¹Â ‰a¼ Ÿµ=Q“/)'clO„~jÁ«‘‡Ù¤ön¬†
-]Ü»‰ÍsD?’»¹&¸b+µ¯ùy¬_—S(àÄ kN¡nk¦t²§X°BÐY˜Tš#%¹£ˆû\Z‘ÍzÞ‘³ѱBnÀ^âkŠ,.Z¡Ü‘¡‡b¶fE:DXpãÌ–ç%îÀâÛn`Z[Yë,qfÛ\jÌ{ÁWD&@C—.ú½ŒTÍ4:ãwÅB8ÕöóMdžÚš@kwÅäPÐþ‡`•Qr\•Èfq·-sçXØŽ*ÔaMÎL$#φ˜P ¡3)€ûJ|Áæö
- ÅZ†uB’o;]šfÉJ/ƒ—RÃc¸±Ó[c
-qÒ^!¦ñ™êÚ›Êô‘x÷zÓó¨ŽE„à “"D¬*‡M‰Œ²8‚§N
-–]ÚÔ¡Ñ{˜¬ÎŒÞIõB-y Çžá=ºeQKPs yx<œêí†,%¦·w=ˆmζe©…k-&­V¯åŠÍOpÓ˜S¨ÃqMD'cÅä*
-ªÌ¼®cùÈ(j9AŠäDl&¨R®;gŸèøf°ø$íöã±Úí±”k
-cƒèàÛOGA±§ï'`šÀ»×ÌVt¬íÍ'îÏß•´ˆò«Ú¶¼B»2××^Ì°Ž¼Mú5¬8•;ƒw{ãIàã±ÊÔ÷d¤uZ¯ï˜_#Ë܆ Áùu±h§&æ}ìBöƒ2|i«¡úN¸ Ë\f·ºQg°I–˜ó»e+¬_i*Iö…îœAý?Á·Ÿ¾ÇwǦ¥ ’jÓî®eàÖÔ,4ç2¸‘öDê6U«`áaP];e0ΠÇÛöñØjz.JcŽÿ¢|,Í¡Þl\½é©ß;uDç^%ú­ YŽòðòC8šžÇÞž ibtg›¶fƒ0Ú»QÞ oÑi¤WÔˆêïí‘Ai€(øö“Ã×pxØJû”Kwº W ŒI‘½`§Û•oÕÛ=w!xõú Jt´=EêSEDxôÊ3Õ;AWмªÏäS“>àB`#ƒñ$;ø&œ[/#rÁ–Ž>òPÅ#©]/J¬±og0…<«[T,!ÇNUÚLDH˜™‚o?9å³Ç±É ¤áPõNXìž©¦>?ìWæ÷ÛÞ˜™æV 1%’o[¶Í§üž³ÒÇ’Ó%µTOÜ÷ï˜ù¦rì$/sOšIxÃ6b±ÃÌ0›ØAS¬³>Žm <Mz{Mï ½Cœ˜bº|ù\7ê&Lºân^XÏKc ´¶öK¤6mC” ¥ñ}L^|WÌÍñ]ª°ŠÞMw{-¶:²:#ÁI
-ª‚öÓÝPhŠ®²Œ»úâh‹üE­@f[;î€Sf¢qtœ/‚"¦€"w`ÞfJ?[Út}_;ÁmÞS’B¶]ñxÅ|
-TÌém2¿Ñ óñ!bçg¡©J—ÇfS]d¾âÌÒÊwì»PÔ6f è
-TÙ(­^nøšÁ1I*"SCîaK´N{¨,6ïífwã¾Ï´ò}xÞº êÏá¬~7  R#Mjºîðt1»Å¸Ã¸•ÊU8è6—¢)ljûÿ¦çQm´óX¼m9¥Ì#_Äæ¼[NEÿùÛQ|UQÀ¶y¤(žAÝåϸ
-yŠêZ¢½¹<¬0,ñ}L„—õòÄ'Äaxéjù¦W-ü½4”A©RÛþ\có4Œ ’ë.åIéQþæ ïáÈëò8V@Ú`Lç&°I³,Kéæ¦ó-©[N¶Æ7­KE}Ê»9èÒôÚÆjæ
-%À÷‚=‡òC¿ ú)£qðM3»y!=e øå £ftÀ–+nâz¤á ¤ëÒµRtÑ{ˆ†F‘À!(~¨‚iC~ø…™œÀÔâ1„éû•Éøî>Û¹ùFÝUÖ+U³×•2wCÍAWÛZBPÌEÀò8«p™%5pÔ£u þA·wÙ°®i•,n¯l»¨x0ÎE…%&ƒ¤Æ¦>K¸€–äرR-G,ÌÆÚ¶ŽÐ?R¥ ù­š ƒÕÜ°ê Ó¹">µÃ.p4»þ¬âµŠÁ¢épåÖÍaƒø°ŽH9.]l³™Úl×–ïÐâcøX7]‰ïi2ˆ ›(N79‘û»<vî½íI¡ýõ|}š+`óSËWù Óûi Š4úL“ª>lº•‚‘Ã1jH"èg$ìQr[Bß…¼
-T»³ë k]è’c{ÛaP Á¸žÔiðÇóJ;N™ Œzº)wb¨5`à,±G :%ÊuS,b/ö@ûÆÿ{Wa’Ûè—•báŠ5Ÿ݇q´.YU¾†dñÅÓZÙcA¾)²a–4^ªbhº¹¤¯=€ðRR'ÔÝšÑ?’ùþp¯Ã`WÏ."’
-le–Ѥ]Œ°k€d¨VLU¿!ë´iÂ:Éæjf°Q.I$҆ŠáÜ^7¾3æmÛÕüÐóç/Õ"‰Y±&j, W‚¾EÞ-à´èt1‘ðeÓ$ÛÛ-#ñe}ûlµ«¿’{ÛcšÊîóË…¥2ºwõL=hDEá›öß"Ä‚#êýwÉUN*îTïÉÚ·½Én´t§à!T&¶»®¬¾‚è †
-Æ“€Ùñ³aqIGôI
-u»\J$çЄXÙx`©
-V¾³Š¼^›bËnR“¡Ö "ÅÚVM€„s)ê"Aþ³QF=7ÛÝzªã˜ ’ù¬@C
-*ðÔ;-dcŽâp7yWíEóˆðíd7LñÝýª“8®¦wÞƪÊ@@SçÝÁ¼Ãýóc¥ÑHt9ŠV ^ª>Ѓ¸ý®¹J"d$ÚDqû4ˆNµÀFPä{ ˜ªh5ÅDúôlV˜Ç·
-ÛQãtÚa’Ý+\tÚ˜“Æ•ØŸV©ˆùû¥8Ìh5PYjQEm“11Š°$Xœ&_óƒ%{Xš?—#5½*h˜Ð¢VŽUÏ·êßOÞXÆ|ý¯˜ÝΑx°«iK¤àÞ±-rÐ/KñûPt1µÝÖˆ2Ì9íŽÈàã0±æK€{™-༿
-J
-æÑÎC¸õþݱÃîˆó(•Ï”ئtÕ½ó=ÿ³g¹¸HÕ‹±xÝ;q£ÅýˆÜÜW-›­%V>´8T3#ÌVøz¿ÄÅ-‚H´®’1_Àó
-‘6Ê*YxØmã¡Y:¼ÜŒ'¹úðrÁ9
-±z¥‰˜Šøù—GG_SÖ뾃G_ ÞD}+ƒýö¯À+õxt^®âQ¤üuS¿*¬ª
-ÎVb?4Ž›ÚMN;ÄYdFdÙx&n»›Ž‘~˜W¢‘#jàq`‰zØ98ë—•~®fm¨Û_Ÿ„{VÄ=í$ŒY׳¦öâ"Œyö[·¿É$°™]†£'[†mx׈]“ã;wè·](XA«"ZqتB Éâ©^ÒÉ£=8 ܇,N¹,µ‡4@N‹å…hU«y $ >’‚™*TŽ èÖ<­DÁø û'ÐZ ÂÊN°ÚÄÞeHI^×`Ly=[pZÞÃJÍ1×ïªÇçr&B*ìÍó²x;·Þ”=جª¹»ö0‹g¶ëSó8óÁêiÈØ¡'Áö¨$› Us«‡†nRŠœUŸÖÈ©y{Ÿ„k ú)R­È„¨ 5"ú«ÚC¢¥†ŸŽîÕte3Ï~·aK¸¤§ìï,ùŠ¾žÑ“êÁ`уÌ& gÉêi¬äl²Zýw´¤í# jù(tM5¨ä r5—º
-'VëÈÎ
-h1ŸÑÌoÞÊ <Ž­êQ”KU¨Ô±Ó+ì7ºÇuGD"oJ®yR¢&“¬®¼º÷+Ö—Õ€ ¾ÆŠæz€þm3‰NûÌíó¨¥.Û±G~ ú–rï1!(«˜Y;"  .n|µN' Öá¦ûKg¶í¼·zà¹@¼gg˸Q]éîŽ^s=¿+`C+ôèŸb…Lƒj/úž*Òò©Kʪ¯/Ð˺3KcðRBÆTÑØØH¹H1† ®…å5X'xûÈ’»€k*Û-~Q› ÈÚ"¹«Í4¸®k%¯0F\W·Å&‚ªüá?>‰Òõ
-¶T ¿òT)~`a7‹GìeVÕ  p©psÛóûou¢·$qÂ{·óÇáê:è—_ªÇ±Ë>ƒ³¤t=–†‡lôJ´¹>Áa6ÙæY_ÁvpiñÖïRÅ¥dý”{Çêåq·s \V-¹­’÷àNzÌJQð)+<?‡¬6E2!ú&-%9 ÀÃÁÇæÓ]ëåP†·)îó¸?f_ ¯ØÿÏc‘.ºBït6P¢‹Æp“K&Ë”´©+•xoïà[ÞÅk}wì°ì.õ%ð–)
-îD¸ô(Ó³ð¤$J:¢È”ůîVÈ)$=ïO pÍX3´î§|w%ú9Î<ûì³ å`½ÝS„™fÀÔ*‘ÀØПf N¸=3ëÙÌ)maN¾1oe»²]D<Ü8Ž-.=÷ü÷$%Gl]žý•(’Íå=À†¾+kÛrr6¦Ó¢íEÕË\÷ˆ¸öS«ƒñmö›=72áà"®ìÉG¶ú1uúï/×–Mbê¡úœ´Có5•©ÅãSé6‚§ké5¹Jͱ'~²ÊC0×JCl·Úþ­‡ÍQ~e>šäÉ¿ºÉ,ì?ý¾8_Ó~…Ì77­ŸçÂÒ#¬¿2_ôe)”À÷¬ ,N×/÷ÉÎWMOíP#å㬾5MDÐö Ìå"Ä6ˆv(öçÕD0’¾šëd̃³èC«¼bpuôßÏ¡©˜Ø³SveF+Ëÿ÷AãF„…Î
-ÐïºÜŒÒ…å”Ç“LbiW¸ÔIMfÂ
-’0{¯Ž­åò˜_ÐR]²Äræ30|VÜ¿Àd.!žlÌ:*#åaÚŒðèß[ݳ8Kb„…#Ê^sPj…ê¥<uèʺ>63t· =ø 5{"R·ºÃ‘r‚Å;ôÔø~µÃâµ°ÎRu<Ö8]fLåQ®aЛ%´ůÝ@7ö9·g¾ƒð
-Þ§Ä5(ÆSœôxGðñ´§,æ Û âà?‚‘IŒ4`ГeImÓ4ƒ\j[nÜt4DŠw5{ùZ~Õò r»×§±wè­
-ØòꆴS‰í
-MÛo¶cÅ‹‹îsT~¼^»ø_Ñ®ûÿåsý»ÿþõÿúO¯ÿ€›÷ë?ÿs) ð°õþ«¿]³dÓù–ëW}°Ó]x¥ w­æiBÁ¼Ø/qt½E½¿ypÑsÊئçpŒ–~<«ø`ŠüWÑ#Ví;7͵›@ ÂÊMo ÑŒ$ ÉOZ²tqÝ3PmtÀ`¿°<Ç] Ùø ž«
-þ ö‚1DTâ*ÀÚ¡/c¡ý-‡À3ˆcMI¯èl:vé!8ä’Ç+IJ 0…ëð¥Ë­YûÄ«NØŒG7ÔR&ǾCÜÁ[†Lã’oѯ56}Íg|`Õª:´z#¸•^W´OžE5í+†êcÇV ¯†Ã´òweŸ‚ÁÝ:W¨+îº}m±AcÐÛ/Þ§LÓ÷¼Õ!c9(%µ›:TxhöEêýå<+¾pØ2nàÅ»:C{æ[þÀ:ÄfâViºplº£ñÚÇLÄÞó~Ħ™ß¥QžÿæÛD‰&ë’×^’ ¿è as×[Q—‚\}÷-„2`‹£ô·‡É§:7=Pãh˜Dðîãƒ)ið)Çv€gÓ ‡]‡èNîñA—lY§gd ýÞ\ñöï yˆ¦<j\+¸&ŸõÁjE\þpØ×Ö=òÎ銴¸ÑOÁSOÅÊÖ·m´òú<¦ücùÁOE©´”º±A:X!¨j©‡¨×(ñ¨XòŸ¾¼ñüMî>ÕRÄç…é|Œ€o=.ê^‚\3iç<15*Á(—R.|* J9°I8¸»Ù0üiÆ¥öM=0ô Œc Òpêí ^iYrˆÃn†JE~ ¶Ä¶­!Î÷÷ü-‡3~p©?§ÄÄS“e<G(3bR{<#”î¦&êA!cÐ)ESÅÞwy ñÊPtÖhÇ3«x“Ô4߃ªò~FX÷ö;ÞÛCˆvBYò±Gž“᮸ÍÛW"š˜c¢Y's‚ìs9÷£ïÇ:‹rûè–ªô øz?žglA¾Hôæ ·àmâœîÐ~×W|@‰¢V
-
-TÑü¾Óí‰ÁhFe°ÇRëÝf4)æï m˜8Ö¦ÈÊãF×O&2ùñú»"(2˖έ¯Ã²ó $Õ´Ý"éÙã‹Ž†“@ì㧛}²Ìg"dØo²ÈËÇK]t(aÑòX^šã”ëy@iÊ9u°µ°`»ÃIÊäÝCDöE„¡eÆÁ¿­`QŠGðµù,:3Ý}¤V=O÷1ëÜõùšÜwÌV[8A U5\ÁmÏ!òÕæ]û!ü5I¾ºÂ·½•9BÉñ]ŠGŽ[ä`øÅæø¼[\Ãlæ-‡ˆÎxb-1·¿†ÄÞ¥hã¡ËSÔ‘ÁÒ 0½ôW>ÓµM‘å.ó”qߪß¼­¬rÇž>‚^a$$§§¥^ªZñ¼c
-.;ž²xÞ‚6‚ÅÚÚ¡¾ç¬að‚v•Ú‡¦›8‰š†AÎC]ÛC¤Î¾0¶VBÁì¼›^[q´@z4eÊÁÐXE³'vìßÎÑ…0=º×‚*„3­Â~‘Õ¼æ<€Í
-¾^OßAb•—†¦
-4tºî˜«Ì•˜Ø¯`ɼå=‡&Á®L%ù#Ôݸë´ÒË×ßç°\¢Àuˆ(eT›Ùx—HõnW
-Üo7¼ívûº³¡® ÄÒ~%­.ÞøÚcsK9¡¾ä‰ÄÄEIþØ62¼gp&ÀlùvŽæ -BjÖÓ—¢ÏË£z"= –o‰83(àâþŸã•d¯ø@l…×ÕÀ壃 ƒÇS<H0~ËÊ¥®àý¿Sðkî*»[[ë
-ïð’|û%IŠ·ÞwRBÛųs¹Í¬E-7÷|0å`½S,óÞVƒ±c‚Ì­é•<Ž¾2¨ufÇtzZ¡cîħ¦RD,˲íô ˆçîæÁ;­»ì|òn
-XSTaÄï‹%‚2J\ž
-1„dø°7®UÄ´×üHѶòÄ ðñø`­£+Á>AËCð•DÊ–ÀüYîD‚^ÉšÁº»†•ßæöZì«^CçÇ'tmèḗ–Wàs~l%ý† <(ý6ÏI
-š3‡#¨ÉÁî.,[*/‚}t?üŽja "±ÞªtDP«‚š4ÚÇç
-³xѽ9“÷‘z½º—svH_Ôz~ ?<g8=G0ˆIàNíÛT–«ëÁ…xÏ!¹ÃʈgÑ«\O†oRŠˆAãÛ«sr>ÇmdJÚ3x/»äÞ]; ¥å›ùî¼>½ëömI* õ,²(x†à$K]rÇR†gá{*k4ÌY¡E–ù`ðA(o­‰ )T—P™:‹m~>º<‘!fŠvRùs>÷ÊŽçÉò£#·šbü:Ÿ.[c½&ŸË·Ð ?™^~9buÏ­:p9Ü…9ƒ·úíÜpõQOs3ð„õlp¦–Í'íAÜc;Ãâ$÷ sZU.ÀÓz©!•€zšVÕ“0¡@sÛµJÎŽØ5ÙÉbàÐëÖ‘ôÆ=Û´UÜ¿K¼àì¦%¾„¾Ü ŽPWxgðvhݾ…
-H{¢Ï9'ˆO»‰áÓLu±š[ØÊ€}!zàIÜÐÝÖ…-R ”Œ Ds0K«Çµ °|Z¤ò~­ŒÕ-Ùz^ä3Â7Š¤éuAJ’ÖÁU–‚Å ¸ƒ~›ýªœ‰z#‚ò«¢”P³ÆØy™©$+Öšú:¯‡ë>Û¢=îiEØ#¬t§–3m ûJ,å±ñ´Wâ gœyŠÞû´¢´ªÞŽ–íL2s0ÂM+U_ ëÄPW*n̆ÅO¡ÃÀð tß0W›´f×`Òø£^Ó)1°„¸Ä€\q£ëÝ«5UÆv?'¥º<ÄzôtŽ‘š&véÁ3Šàè›díÎC¤ &ÚxŽÒ‰<±(Õx¹–d{ài¢± -×ÕÝã6¶{çúrКZ+­ÝÙPw¨+çòQŸ=8Òï+6Ñ_ò²I
-¥KwósžÉèLµú²q'%ÕÔ| ꯋT+6˜¸Æã>ðÁ=4 Ô´Þx%Š¹årŠþ׃Ë{þ|t÷Â*3$!Ùp¡H
-z¡Ñ·ÿ-Ë Þ·HÉx–…_-¯–iʇÎÇúŽ_¨.’•­d½<¤*-ðÝ‹UŒíÐ÷žga•;õ´{uubŠ‘æ_x Q{¨hiˆ^u 8¿àŸ]Yu\Ùú5rÙÆó1̦e"ZÕ¢±©;KÌŠ¶PwSˆ›W¸=ô@û—Oâ¶3´Y‘îTO¤Šòôi.˦Ão91¶D«ÞÑrYgΚÃFh(ºÎŠÅ$üö]ïûH8iDÅ:‚´·ãSB߯ët—<-{/Ó™¼êjhÊæ¾MŠjjÎå ö;¸ b{cˆÙå_aû)¬—Õi£ð J$k<bU³Ÿª?{ÝLÅôr•T6¿ªýêÉ>5!0}ùšËj*m ;Æ’@ßrÙm©Pé†CX õfg&M^ôîé<Æcˆ"÷§yZz{4{oz8Ÿ!z)ðÁÎÅßmz#i¥?˜œÜv>2éEp[?2×þ4œJÇ=DIsF£LÜ¡7~¦ð8ƒ»<‚oçö…&ËÇ£å:N¸bÀ×ò¦q™í½åóbÑÆõ`)Bf!öéôš‡¼³õyø“¸°K®Dân024ìj|oi8/ÿ£„ÚŽ[A§Arö]—Õñü÷E¶êW$dz³wà÷wúSH«©R'c¿îmÛkÇ b ªEAMŠç8‰2Uôz?ø#¦ËVù}Ó€Ó)e,šQ¸ŠKêÄ[Ne4UZ,7JI³©jCnEp]û1Ä5‡JTö¥¦³®í‰,d‹EOžçE.2ž:ƒûGÅIâ¾] …“ïÜ:Û¾ÙZª\vWWd;Ï÷RLóî!­<ãð¶Ây©ÈåVÖAóPŸ…Éæ©„…/»Ïä[¬/Ž¡õ
-¨b=ZûDEE#¨(!Ò•~G1tÆ#Û³;PÓ:m#ãg ;ú¾«h*¼méG'Ç$Ïàƒ+r°Ä¤ªÝ/5r6Õ…À”ÕER{fY¯^§4ô7Eh}Î`‹‰ ÁP½CЫN¢-W8–¨° ^)g÷`ÞÖ“e}R½_¦?ó1™dqz¾ºäH_Ã>À-/í²”ó]_`]lóŽ¸x5lh é7<ZA™ </ûÑéœJ9xµØVÓac*; 9õ¶Lü–¿¶‚QþÝjÞývŽÖýê&¦á ¥“ª'Êá»,+í™P?¶ cìÿ3ÑFnåÈýåk¯þt¶$¹?ýa&Gí`ŽOñHkˆî8?”1‘p? ©îØèû§_gJßî!b«Åþiv‘Ó–Rkß&×?ª#Üìl}à¦\l·†ƒ®šMÊñ‰ŠßN“$ÄeEje–ûsÄêbòÊ6ù~èÅÓ©¢?þÞ|Ïä»s
-ÖCCuÙȲ˜VZ'\jÂq­a[c‹–¿Ë.!eõá/¼mÜAô™Áþì„Û.j®3«`ЋƒRR
-<*Õ£ú¾ŽTa æ ¾Ù‚Â?<2ÏÛ´ 7ŽPKùšÌvkC¥2ïn&B KPÕÆ*^lÆGèúø7‰ jèH¡´¢ìKGw«›ÁÓoFum ‡ÈÚ;6Þj3ø’_¸"Ÿ[õŒÓ{=óù|1„|iL? ÆGæ:šUîN[<Jb~¼lÏw”¶}š‘(Lö5ß!ÏÂ;…N@ WËö*îy]üSC›:@8ÛýúŒÝb?z,9Œª ó,wvS‡Öøea<òzÎòúÚóXBNY
-ÃÇ£í·Zò¦ÄO
-Þ€Éïi™ÂaŽ£ŽçÝe´†ObŽ3].¢¢WÓ5C–%µ&AÔŒµ }»Ûã^ ?Ð^ W" gŸ4ÂÚþ®¾C¼23}¥ç¡]ÅK´lüâýxÞ¬å1PÜ×Jô5ãÂ+褔–* Ôä +v‹eëÝI ^iŠý•´ÿÀ×-ûåJ¶˜©Â4ÛïQ Gº0í5JÊ<]ª Ô”B
-^¼GE?z»-ÙË~źò¢úGÏžJ궿$ŸÁ¾JôÑ!,:rgS=‚ÍÁfěӎà< ü@Ñ>ýmMz!wjÓà°»ßùñ<…€ ©Ó¤,‰:+/¥P„E-ü œÒî:½xTåÔ¥ÝV^JBp+dšž?µO6›÷‘e½ÞÔìè7š—féÈÙû‡_Á´™H¨ót§ÍwïçyyÉÆ×òÞS¯.;zwW‹ŸÛa ‚²†0,l#¸¶ƒÏæá‘}ÙN?Ý -pà£ü®(ùbÃÞ>ô÷Ä~ÜØÊà­­5]ú4Dˆs+z}ðA_ú@×ùÙ-yQoéµôø!ÍxŒä2H\ M P †Šë¾?²Ø¡at£¹ùMKCp5Þ<n5BƒÝ­‡`êÞýA´¢@0ióN²úŠ2vd¨í~!~7¶f!i`½Œ ëÍaPÛÓ+X×ï9„7¾×iÞæÚP\Wø?ƒ§åèZ‰*~`Æ£„ïG@ABWxjçrz‡[=‘ñ6)¯ÂÿcXƒÇë…âN5ÝWÉ£÷TP^W<‰r5ÙŸMþ¯9IoH·Öôd>͇‡1A¸ ôçïhÍ-úIYÆsxi\zÜüÂ[úxAh¤å?ô龋1(ã†>¸Ú‘ÔÛå>Q6œw4=
-éEÀ.Š÷›¥¢ƒ8¤“ø]È‚xò8ß9m’íßöMZѾ8ç:<‚(X¿f-ß][lŒ5%_!À‰¤¦7ìÇ›ûöÓ¿ÿUîýÏyÞ~“;b˦\QÞüš¼NÒùLõ¶Â‹>++}ëþ”_•”m@¼²‡Ô·Ëhß{éY¸åqÌÙj8sÞ–d—ªÂÜj|~|0óƒÔí] "³Ô–iÁžçs~ÐÛ°ìÈ>,%xé©–7£Ûlw›ï‘Æð¸wzäzZ} H¹ÎÙÕhqMvÄ0c†]Ñ®m˜ DžÌeežÇlK­¡ßƒ×è{·yþ
-CŠ |ÏIô¶ (\¿2¦Ô'T'ÿOì½iÔeWY.škß•^9ƒö ” Jfß WH¿„` &FHŠ/% ÔWÁ¤È@¤ï2è Â@Q¹Ò* ¹4Ñãà¢`/W¢¢"Øà ‡Üý6Ï;çÚ{å’q~Üœƒ9÷7ךkÍ5çÛ<ïó°H9Œ2)ä¿\7®*ÇÅ
-AŸþbä‹V6•âûÈ"_MKQ Ø Þb©M ½wí‹Tnšc×/¾´Ê ‹pR(MÏÎ.d¶h$s’•éª±e‚¤‰2—mÙwÕFù_Ö<9kïW»úêÕ}]qõÞš‘BöÈê·ÕB”íT1]ˆÌ ºzV 9”)¬DgH ¼B†ßÎ4á`BUÂ,NÁî©e Å]uJu‘ŠÂmA5¡>SA©@*Á´Ào#úø·šýˆøUŸ,³Ö² àC6 z“]ˆ‹å·¦ Uô‡QPóÀRù@ÊÚ+X¶q¹¬Æ(!B91 Šz)3!6Ê I³PŽ6ÄÕ:
-S¸1Bq” (þ^1¼…°ÑXì’ÉÎRʹ"èTÛ’ßíl¼ÄÝíïöø«U*X«ÿ»VŠˆÒn0
-ÛPºY0ñ!>9‹šÎEÅʸٕ†X¾ê3ÍYAȱÊ(èn×™9eÍð¸Td¿=vÎî¡_¦‰‡M¦B3 ·%{»œâlHh&jt¤¶‚º}ü}Éúh”K@ ¡ ÄÅàp±Á£™ÈßgsI8kðµ») ç:0dÐÄãV<B×ÌûŽ>-­%éZ⺣¿ŽŠBͲ<ðr¢¾³<rû5ê“Õ/÷ÈÚÛ-²œiÞ£é—[§F`±ì‚V'ó¶¢ÕAT‘+ù‰lÒ¶Ûf®] ½Ê7"65±¡Ká åï/CÙ¾($˜³cRÊ"‡ø oåìøZ³;BÒIèókd£áÌܸbnk—‡x|³¹Z(j4Ú°‹ÆìTŠ‹Šd«l5UlW«¶ìh§ÚØ'3é¤ëö9¾QÚ}lÿU&^6ƒ,:Ë4+Òˆ]"ƒÃQöjÀú²àUŽo6'lëÍV×Ö6S‚¬ ßäflÀ¢ÓwÇÊ@ùùñnƒaü²ÄJuWEpjÔê:‚ÚÙ¼~…Õ…M"3h¬ùlª|›'XkÖ“Yù<<GÚc!¨¤:DQ¬È>vA oêSUé*™Ê;&[ÍúSoüÄhAâwB1Ë3sS—Š4 _z°49îQô;Tõ[!ÄGܯŸÆÉè&”ÎœD]t
-`z€Ý**>¹Q {Ò<`Ÿû¸†è/~‚ð[ÿ+&0KèaNâ¬@†Ì©r ÑLd vº­® ÆS5i“mâª#ÍZÏU»½Ö ±²±bw·/dlJE0…rÆ:?ÂÅâö3/¿¢ãRLŸ¯ª¦àå&j!a|’z½:Yp-C‚šKµRÓk™^â<À8u¨+Ëf£Ëó¸:`ü‰³V^{WÖ‘»Ð0d¬oDTO4,“¥ù¦oÒUchÒšìÞ-ÝÃQf¸(–÷§Xœ*›I^ˆ9rcÇ
-|O&„¬¢Œ°ÌŽ0¸p¸þ¦a=Å„›ÕÙðQ;(2D®|Ä©å¦0…S\[³ ICÖA!2ÉuEºn<8ßäO<H-º×,…Ë'•¿J²áà¡HâÔ~¹£Í\"è% r/wnO¼˜ñ™õI°„ÉåОâ•q/Ö–‘eòª=n'4BÂËE˜{´´t¹hˆW!×ÉIuûkvÿE®¿‹eÜK‡ñ„ŸF]¯YDÿ¶­÷Ý­_dÄïÈ¿B5˜j•sºr…êÉ@°…§’R³œœ,½!z­dÞé‚ëθwÉ&žØø,ß®½t\hÆ€Œ ªæ9Ÿ"ÖÌ`ÒãÀ–­kº*^Ï.*ÞÅ¡0Ž)‹ Õœ=®»x.\!A¿Õ*GÀÄ0‰À7]ÉÌÖ9”«T…š¡r]`¯aÖ±W~2årŠc
-^uPgp}þšfž¤ŒÅ@ãå›â ³‘ˆ#VÂh‡u>7Wl¸¸R’å ƒ
-d€>TÄÑh9U¤ Ÿ*^s«0ôrÍQËšS—¦©eñCBœ¦A›¼e34ȧ«E ÐUÍ“Ö«r.„Ù%
-ÂhÍÍüõïØø5½_4+jŠÜäMâèAy=š§àQQÊt-ˆ—Išt±«0åˆ^xà²ØùQJ^?<Í&¬Â²jªÉfÓC
-æ¸TvË<|+´nð#ŠV_,YÆjÃjSÀg‚4{³ï‘P%¦À7¨ÚÊQ¯”lŒÖXogwCwv•¯`œ™}üüåb_k–Æ v‰žØÚ¼<FôÐÂoqjd{g\ƒWüÔx-Î’
-‹pÇ»i.ÞY.Eú»]ïvøj3"»:9DQ:gÕBì³ÁRõŒêb‚Àâ)®éÍe;§qît{»d©mÕ‡ƒÈGŸš%Ýïf¦³@úÆ—»»ýƒé&XžUö=µrÕø%°@eó%Þ3lXp0:æ,BÞ+”Ô`’
-ZÕC\B…fB†":¡¤s]9éÌÍ×}í'©@‚ R7Á5’"*R¹Ó¤PWp—è¥CïÉÛbÎhðJwÍ®»T;%$#8æ•Lª*to¶9•‘‚."ý¶ƒ/ACÌMŸøˆÕÓªwê´Ö‰^Æ…ð/Ù‘¾V£'¹9ýFõlàøš„J8Ê_‹b½4ÍL"7š¡;´±41w­þ4ëÍ6¹ê—hìBÕÚ«¡¸yÆû‚º$)ipFM+¶£u+·³µÑºi1ŒÅé ö5/›­À´ Ù6u9   nÔ,´Œô4ÕÚRª±1— @Ñ
-Œ™•~(\ ¸sVëÀl)hPôS<d2Z´€ ÂGAm’W  ¯
- ´oé1Í
-²tÔc:+‘Jvþ6wjÝ»íUi{Nê%+¸±˜m´ûdRt<•ÕîŠC†""HÄN W‹qägõ®á…ãÖlÕ؊ޣƈ¢n+ÑnFDd:ÐúÎsÐz‚j)ïp±IÀ›Ñ 3Á.¢«¢é§ËÞÒ•Õ–²11Ug ê{q Ü®~xºÑPT, 4P94(¨öÃ.ÊÌâ—Z¦€<}á5gwÕC%²$0u¢ aãÃßݺÐ6ñ¥*þïrÍêÿ\Ãå§÷c€/«Àó¨Õaeb‹Ú³ïJ'kCñ·ÊÂ2QyEñ&"mAä;PüÍTÛúk”uqI¦×Ö‡E¡Að̃fÕÚAÀšúB<d.dÄ« úU8¬†›™QG‘
-t;UPš«t
-æÁÄn\=Ä ‰eÕE-ä uíQÃÌbàªþÑž¢ ÖØ¡D¹Ñ0 •„4Ž›îoá{4¿²›0×xS™Ù]ÉZ¸kåãP„Óæ›ÎN7jÑÔ$§×ǪeS)Àu¢"®
-Šòó*ãElè{p¤‚ŒÆݱ¥Q,f4À]û+í­VUÞ®öÀx+~ìx­Æéñ‡Šm¯†Ž[\yÇ`¦PñæâGѷܫΊ}8Ÿ]³¡TRËþ¡s¤95FœklbŒ/Ãëæe{ÕFµçFû¸˜C‡˜­·NÈÒ=ÊŽ4 Ip#˜ÄRªHÜÑpA8쎎?}&Ìì„_rNqy:A.öïWå9¨ƒÎ£û W»
-®TFiª¾neê”<´@Ëxð&ûô×&‚Ú…›^¬ Šm}…x¿´ÏZ©ý%þསõÚµ0š-•½©ÃëGbËž>=2â¸úRߣ°–J‚r"ü <VÉÝY~€Ëô¾6înG§sü sòZÏTÞp÷F‡HRÑSW´éÊIú˜jÔP'O!#IÒ'Ü! I§Æ,r´úø"8i̵Ɉ=€œ|0 uþ!vmRó(tÅ$C*J)r™ôñ:Ž<:T…l•- oÎe Y9ÉƲZh…ØÃÞ™:P3Íf;:¼‘ùj¥r`²ºZõœÈ<–ÒãV5ú—¢D$Tc@Ðœ‹D‚&.Fh¯LipHK½Æ[2:I{p­EK³„V^+l”ô˜¢ŠÝ£RL% )ü¢–ªÇASËÕV(ŽÃYÌn èd´©Øv! ”[%q?P †"éP dr
-b×o‹‹ ‡Bkå¼Óé±ì |³Ã‘6<‘êŠõ2-Š4®þU)ag%búŒúc.ÚCƒÒÕ‰“ƒŽñª&"ˆÃè¨"âEn·¤Æìôàë*ÊiBn\0 *S: ^ŒO ~`ùC‚˨3b&ÆÁ§Ô#(8y1ø”rEé+;ÑRˆö‰øÅ_ˆ(}S(!Ì¢Ö ð [è_5c#ŽŒ5d…È ªjœ9¢EÅ»V„Þgg£CæFÒ
-Gõh»ö$4šMÕá«®Î?þ¢XöÒV‹2A|]yT¬>ÔÑh›âx+$íäu$#UãÄ3XÀOn
-ëô”isY=a%t.ª¤G@ÔÞ易•Þ2Å ’Ä!!Ç.­C—gǩ˲YÒ(4elÇYã‘_®mW5=¤à•ÂÅ´„¢nk”m×V
-I&AÑ"¶A
-½¨,`ˆs2B“—xˆLt]ªCJxÒ*ƒ€ë¨—ã°öBâÐ, 9˜¿‹ƒÏžÒ8sí{å>Ø9Ä´S2¢0ÒëÐÈB´8sQ=ÌjB¾­(Ó«ÐÁP €ÖPI5ìXT½ÒУ$­ÓpŠ™5–=ä¨ÉàH'}+W”Áœj™ØÜí-€ëdØk¦ƒ¹Ê0稛>ÓìMh.ɾ³oÊb ! q"ͧÈuêS¾„€þ…÷Ú§‹!šR¥hÇæ^A¶Óx£,^“A@ÒÃÔ®ºîÔ®íD¢{O(xA6ÈÄ)›#HSé,˜:êhÈ­s&dÇ:”=•Åã¬!Á6‘ᥣ„3ô VHש0.é6ÄÉøãÙµå3xÆQ_¼Iû%“Ôbº…l’ŒO&E°3§AðŸJÕ[K}´5këó
-G9§ B×2Â$=òǨ„Fm±l·,)'e¹!àÐ_½°8ĉû7)“ïÚ`û 5Ó
-¢H!FXí Ѩ®
-ß‹*QEØaŸŒÛ^}qj03ÄÔÑÍ^ue~+‹ ˜”x˜ Mjbë‘™TÙƒjÆÒ#˜ô™¨£zßàýÓê´ÙÄ :‚¤Q·:覭8Þ—æ1£²Õþàt²÷“›í¹#ë5X_\³‘%)°‚³.;—'·¤H¤ƒ§<Î:z( õÈŠg^4‰cæQ¤\\¾ª<œ:r{QŽ­RB…E¸´lÚT?ªUòLNß´oêB¨–àæJÖÙ¤®mÔ¥Ž‚¸?3qKcl0„'í‘žq(–YCeå «n_~_môð.rH¦="à²Ñ³ÓnÈ΀tqÅ°@X@O”اhP*d~Š¨Ê«%§(CëÁ÷†¥둦YÐ1rniæF[åzª`+¦ÓÊ!¾ÂlÄ#t³zAèn¬ÈŸ@s›Ùl‰jtK‡CV§U:ICÁÃêmBXò©Ãgûu´ jƈafqæÈB)¯’°uàÖ : ³ó¬‡!°Oäü1sz9®¼7u˜êb26¿âA]ÕØý]:í5^ÉÎK Xn)¡­6 ;Yã›w·ù›”ŠÐñA+,+™uH£"…ˆ¸@³ S£r%±!¢ÊKê0¸_%UÎä5à@¦NSö{Ua­â¨ŠW>òàXIJgÅ¥ŽzÆvN• zèY^lÔ˜C™¹ðY Q± [­%,¸Æ& !*ÚÆ=VåHIƒ ÎËIïƒqôW±H¤mÊ•P8©tí€Úå¯ÙA—_ÎIY:âÄ1PPRu  3©Éè}Ôi£Üä ÛJaóè˜Þk1Äil¬DƇsÑŒTŒíœI 2$PA9“{\¹*‰ŒàYU·vX>ƒLxåm©;Ì’X2®Àß„bÊ”¾÷ð|Ä "äLn2¾j®ÊÑd 'ÉdiTH 7eibV›#ÓF›¢"„2„ýºn—ð#G¶ßÜú¼qééî䙢š¸”oMS
-Œö`±:»FŠX ª5üÚ…Ž`G3¼Ì8KóäΫ©^· LNr##0)9K¬³Ü„KØ8 8™“¥)-—î©ñé¡AÆ{F¬:ÎÖ.Q”Ú¯!|¡8m4_uerƒ:†ÞÒä«ñ” oÄ»J÷JRÄost „D´HÙ $6Á&òFª’kñBÃ}ìhLy£SgÞÜbvàI\Ùnº~Š§µ ™ªMÙ9‰Ž¤ÝH%ôbªvÖg¤IÛ±EeUd.-`;¢T0p#§9¦hcpº·Gõ
-DƒoD}Íc©öP.¶Ûp~S:°*£¹tÏ%Ü:‘íÛó5óM&„CmB¡ÿÞèÈ '&„ÊŽµûfÂRM³íeN#T@Ý!ÒM8¸`§"…@Eáø2gjFÚ"ižRžI­QEDÊY’ØM²¢¿ÅDÃÖzÅAYY¶+3)xD‚¦`òš^
-3…Aߘ
-ªÊ‘ÕA6ðõgXÒnQ<šKÑ1¿ˆá+dWðøé*“I÷z
-¦)œ"€p¼ÉI?"+U8¯k…œSc²sÚ™–ñjf +gÄêš*ÑIÇä·dÍKq»Ð±ÚÝ×Raw ïœ:4+Ü$m9uô¨v cvvì=¥ô¬ã•+Ÿ‰ˆ²¢G‹{GeßUÂAùÒ8˜­$Yµ´X-¥Â}¨õÐÂCãh%v \Ò CÁ‘
-€ÂEeudíÉé&2ð-ópf¤7"n}ÛqeKËÇ øŽ¯ËfO˜\ƒ; R"ŠÏúüØš‘Æ>¸3s±4ÇÈéÆ·Ê Ù0Õõí’#v€/ÆU Þtà׆äÐŒ™Óɺ¢£¿
-"±ê›WÎ8XéÄÉe׃5‘‡+;t†d¤p‡p¡Wü&£§`·JÊ«í1TýEbãIõ°5zÇ m‡™.
-Ífxø¨a.®Æ×”YW'³UF!n&šWÍÊ3c²Ë´?•kU¥©u°!ªÀ5fPWDøZ”tL#¾h,H˜x³¶­,Fmë#}Ê’ ¥ÒWÙ!êнW{{žvQKìT¨0S†“ªT(q+^JÜèáà±7J•ªìÔ pJÓ§E/B à”’‹M0e³rª®ŽG}Í©;­ f:Iå’)(ue)Œ@ 6W±d+œ)Ř]]K°}'EÑÜf(êÐr>Æ¥Æ4-n…÷°xXœÚWÇp“vÝÑø ]™"˜†A?(/¢Ô^ð=ãTVîУ¤ƒÿ«zѵÆ7O0-O£”*f¯G r“æSQTˆíÀíéÐ{gÅž
-ó]ÄôÕÁWU5æM¸ FÒ—Ú{šFX­ñ‚}åh
-¦¶^S[Û°·›+CEÃ.qöp°|ãšÛéÆ¥Q½ˆtMªé ú)TØW;ˆ×W¯w<Ú¸6wD°Žkå§4ƶý×üáŽbcô\T'–ñK!D°!¤Ü¯jUý=mŒ \þ%¾HŽfÎßR× •;v,ðïôý5ðí(þ³šÅG[
-í§Ï‘ÂÃbgÀìGGµ¯ºö0µ¯Žn|1ÎÏ  Kê˜+«Q\ˆð s¼XLj R‡«ú-(Ç< ?œÈAvkõ>OÇ©¿]R6</R G–Pq©®.4¥ý¶@pæTÍüln7!xÁÅ^mœ6ƒ¨qÈÐiÙ*¯`C˜½˜©Ù€Ð—Ü?€<ƒ2œˆìÐH“`} deG¢õ “¡ðHÚ"R2Òä +ø|²ü$¢HÕ%yDüéÞSý5ꉈ%ÃLÏ5…%À8ÌéÑ#v¥€m›I'GA‘¤ÏØvmþ“tQŠšE)”Å_è&»Ùáè=† 1‰%W£<da8]\yT˜ÚEÎ µ áõ‡VºUÖîÑoºE«l()³·‘QdÍVšY3¥1JpåV#0‘Ê/HèË ]ð)mÇÁÍE e'
-u(Þ~`ø²"ÆE•Ø†:êþ÷fiŠÎ@aÂ
-’FígtyN§ÅÓ‹Wº86®Ç™¥ÉÜ!6ëg¨ÖšbÄ¡*©ÓÿJ•IYM ^¬ÞhéÆâ»êaX.Ž«XÔøe€ó_­U°ê'0HúÐÓ´]H£²eÑÁCþ=¢n ‡¥=°
-«Ï 뱑T„\A£0D"kwçFí낲­ƒ(S¦iìm1Ì! Ö¥ªQ¦²ˆ:
-$J8©:Â{½!µÖÁÅ{²_æsb¼
- Y„8©!.ɤ\à¯lÜM2%~k;i6—œ<ÔIÄ9BæI5ÍYLÉ_jmÕB‚nkgê-µî;E„//£#ÖÈ°žé-E¨"õɬaŠÛ®f™Wò ¢éô¦
-Ó òGg8
-þÈdóve¤3²4 ¡²S?Œe'¤tt£d½£`•ö_ÍÜNÐ$Yì,°@Ú*á0ubLU4ŠI£ÖXÓÆ3ݽ§{¶›|êÖ*.¡5â·X ·gÛIG=v]’aq§il4*€×UÔPîê«ÀÇí)Û ½Ê%éMÑ–këœþ*³¦ÄÌQæRç"ùdò",Y©– •”b‡ì¤5¾ÀÛÓ:Þ¬ì€8«¬Tê»
-IN?äój[׎§Çl…×$â0qQ‡PCRÇd> â„Ö’ec^g-_L¼ˆºþ²NØh*Ðòò(®½Û 7Èi\µ¥PŒ¬á©t\M§Ã0+|‚*F®ÞÔä*~™ý¨~Xv¨TUl^ÃhƒþÅüç%ª[¦újîèȨ‹ ·–ú¢ñc½¬™zÂk‚—Õõ(7¶µ­mIËÝ]I;Áئ#\
-#LJ¤k<F(:Š$<ßLŸìÞ¸Ù¨7Hu *\ÈaòX\sØ!HÈõa/˜‚Y TÿRŸ¯@»Xu CP ¹"[©á'\ÉÃ5èìú›²»J^ØãAÕp¨/N‚QÜ>×s“ §Lð^8(Æ×*%î˜
-#ów²Ž^*¬å­"SúœxdòåÀ†8É8lSq|kÄΊi„.wéT{3Bœª(­=ëÈÂUÈZ6nñ”ÕÙCÒ¤q*O³ iŽvGœÌmÎԣɓ`'Cðõ&ÒØ»(Vˆlu”è(‡"ÀJoO[—@Q(»Lň]œ#Þ@QWÀ&>ÕKQyX+ƒ4É/¹ÔY‡ >ñBiÇVp'mú:‘ÖÍÞ-\q,œ\@ÝÔ†„=5fhaÍ1Û/‹u„ƒM­-j4gÚP£œq­ÉD3@雦¦OPµ
-ëì!­rƒ¹ô¶?§ ¶1ƒü¥‹©-ÑóX­J„ãÒû B¬ªý jL:äŒGªFWrÅE•ºœ«ŒuÉP
-®´¨¤£ Â,k± 7b;¦‡œtˆ™]¨Y©")ý‰_ÁX$§S{ËÊÁ-™3֔ݗ`í
-U
-£5gƒ£ Õ¨œ¯êÚ)ŠwKpýi.Þ ÔáݺºÏNõ<É%tÝÎ<„ €ê
-í1LC(/+íó"-ÁªR7ÀÊÁTd›ÄZŒ¬ÃuGh‡ó
-k_ü²Zþuùkè`ÐÚ"ÖŽt*^92dM¸00eख़˺v¬Ù{9ÑÚì41ì^ *$Ù„D·6rò ‰Š§Ñ061FÈ{ŽDWwà50)±©#B L™
-nÞ´ÉËǹê¡!²ËÂЪJKeuY ¼UZŠäxµ29αk»¤²QRàW7rgòì´ñU2vÀ|…ò´¹¯^Ÿ¾9Û•sU›‡ƒ_ت›jòÄ‘&cùTaán
-SÇ
-SG€Ý£*Ÿ&¾©%¤··4%[°£\ˆN+‘A`®€#álAÉÃèUôT
-c<ººJ{)ð‘—yã]„Ì%å«:”—Ë
-¸¨·$%ÊÇ5=ð£Mé*§ŽŽ”ß>‘áàöëf;%#šÆ0ŠÄd5hõ¹ÑuklÖÚtëR«);åTWàQìHK½´¹pȤ"ØqH˜ì…¿WE
-&4µî rœÄQûW
-Gøäö}Š)»$Ðnr³@Ø)ÃÉ‹¨Ñ»R!ݹ€-$;:bl… pcêz'mÝêÎv:oVwìØ<Å¥ ã:˜Ò}±du ¸–!.!†µÇN-õœÞ8¹iòh¡!’ï-H£Hg~üu¸=âRføqG4f0ÊË#Êf±óK œ6\Ñ‹-Îö¹w)0˜ë+Eù¢)Òyë>°6ü¤k…B†òÞxç°EÉb·ôòîì7ÔL?”ý˜ß9
-i8s§¦Ÿf/õ‰¸‰H –á›ÕzÒ™Á±Íú·ÂèEó>FWEn„jsÑ®g!éáhr€öݪØ.׆ ëì½ûêCgÕû´«g”O¦X&c²ºQWYÀƒ –Ua:å•LʭƱÎVñjS”„y´C·[ƒ…¹1‘iÛr£-Mž¾Þ.[²¼ Y‹œ˜“½UcS
-¾ÎŸ…1Ë[[ãý~í«¥·¥¨áÙlÜÅMÀk0#¨µÏ鋽Ž6ÄešAŽãñ
-)e21ˆ-8äo&&*Óó^‡‰Z:C7ÝŠæ·Ti¾T¥eÜÄ(I^vn·(ä¥ \¹)ËHíÊÕÃè;Aª‘¦©çWuKc¡BõM:¥„
-Ý3Ү̎!è]¡¤Ñ;þ\"Æmâ
-oyy7Á"y(å=ºÞ³MÕ\ë¯XLJ¢†:7t’ù!eº‡<Mä·AîV³”~SˆYå E ªj<rÙÅØpª¹¤`ÑæRE¨‹=Æ-¦$§ƒ» lKÓX«Ú[¬ŠW%±êrô0Õ= ØöÀ‘ÌSJp9Õõ })©¡m] ¤[u!_¨NLŠ‚«VÑX
--" 9NÒ„põN+¨M„‹T݃54
-ÿ.—&·
-Ù•(1W#^Ý¿dù9$’u¯ÉÝô³ÔÄŒg¡õ‘L4/VMQŽÍ9áE¯I]ã®é‰é¥ª&}ˆïŽ-­…¦Âí ¬ºòº42ãÊÖE»¹“UT9±^é ¹¡Ž$2‰QIÇaµÚÙñ³fx2Ýæ(ìòþ™!NV·ò®ÐJ‰EC{m(%Òã¹'­â/`
-æ#Á‹“Á‹0ƒ¦a)u.Z ,RKÏN-u.O”¶¥¨Zý4å—¹i"¤Õv3}¸œ`»¡Æûèã׊¼R¥<JŽRudáÆY1º4ûv£)FS£àk©QEÑJÃßµVcl+WF±De7&Ykâ™ ¹
-m
-ɦ“è‰uçV«•Ûu1N4.äŸJn†÷´`5™â’.1ºŽÅÈ!ëáiŠqu°²²‡ÜšV§‘åª2Ï0ÚNû½ÑdO^bÁk¥òÍí„A§tnÄãOþàÖ—uÌr2 ÊÐÇÍ8j‰’Yì)•Ð’fþñ-³Cßõ@£g"-ÕÆ>ª
-X'h£Æ_ó³šÚ_Ç ¥›£Òx—Ú¾ä]‚”<ñ j^Õˆwͬð°3:
-pg
-¨¢g•¡ë‰7áP³Àyƒ¢RUði9Ò
-N¯VòE‹®â6’ØŽ’ 'µMÔw’éÖ¡±1.‹ Úˆšg® (ºò™RæÈøªlÇ™‘Œ:„[³G1»G‡²÷Q‹ç‰¹E[Ófqª‘džtª³R¤Æ ººŒº;ú¢¿Æša• _ÛìúqHShÈãH£&Èi&Wd°UEI…H#^V
-š*´ ÒQê’À¨¨­Í4íƒUO+ø&Åc²#Ø,èUm1;<Wkxˆô‰´ð›>#ô6*±66Í ·u¹* ¶¡„ªÈ}°R¶hbçÅ(¹ðL–¸~~GlkúFàR!ò’žTBŽÁ r1Mát¥;vÙDû¨:«Ç…
-]rÆŽ ¬+ØGÆùêj×툽3=G‘Ù+4­Í΂âo.ç†$÷N&¸}‘* 4 ;Õ w¹e¯^ûæcž²ª|#]?6¶Ú÷¦ŽfÁøl<âPÌ·©ºÛÅ%=¡”2¢VÅTzƒ1:4 >=º?2õy{»‡1ÂÒNŠ{æýi”nguG`-¼Ù d\†Í!FÉ8Ò‰nÃÁ™]݉˜(-laxtpS:<vÞ.Ç!·uc&ˆv¬mÇ´ÐÛ¼“ð«q£móÑÇáfv%5ϸ#̵ïJüÚUWu¬ÀRœÞöz¡ ÎvYÞog²N<FáLÂåËv˜‡raâ¡ÏÜhhçŽ43ôru‘t4“Ãâ;™2³4Bï=N&mUÿ8.®Ypdq ÆÔq Æ™±«/Ä|yÞhL„<žëà6ñNEÑÙ{w£ìM}xeƒJa6*V´“Mð þu‚=ÒÂÌM¼r$;lŠ­Hô[º:>Ûµ|»Õ{ú×Óϸêä½®Ø=yÅ•'Ž^uÝÁ»óŽ}úY'N<õŒ³¼;¸{åÞ#®¼æÄe¯¾üè#ŽÜ»ò²cßwðn«_}ÿê?«ÿá]Wÿ‡ëÏ;zò䱫NÜǯ8qì>W^uþ#®:zݱ«¦ßÛÅiìKî}â²ó¯Û{È•Çõß{è'´åÔs¯xèå'žòèUßwÀ<cõŸ yàšÕÝoõùžÿß…G„ƒneJIã…×­úÏ^ý‡­úy0<çàÅr/£~ø€XìN9³Qì8¤üIst)²8Í!.n¯¢`Âu^›§_gù_;‹±Éã¿“æ"ÕÉË_´7XéÌ4öøõ|'›÷½sàÇWS÷câºglŠüÙbv**²¸Ôø5à,±˜ôvNÅ?P©€Å x#ã>Ö‡n’ÜÙ~×4·­«óÔCT%ŸcoßwðôóO^uʼn‡<õðá3vw¯Ùûá+O¥ßN+Î<ã«WÿÃVÇb?xæê¿ÜÊv;øHº*ó–0?ÿ½esm3›5× «JLÙ q—çeßš+j=Õ/Fq4ÀÔÌ»C@Á„ŒÊ·ª&=ùìnçߎyM£n>ƒÝ‡bŸØáËWOðÔž8qtïØezÕÑË®8¶Ú¼û¾é”ÿæŸ?ô
-›ò”$­ÎÐýÍ„X©±Wõç!¹G˜'ª“厊JM–³–FT¿tÓ+¤FaÔ¥ÔRÙÞU‡ªHPÛø¦cMZY‰2|Ö­ÉÚÈÐÙ1r2ÞØ[Ô"“ãPE6Ú“ØÔ)›SŒµrÞZ„E‘Æn#´jYÈÖç'¡·Ì6󠻀s(Z¿ÃyÓ‰šÞ‹Îp›ê5„ªÑ(Ÿ™ˆQr"£ÌC(¿™Gàzñ€ØPî®ê–âäÃ{RKðÀÞ°‰RŒ”‘¥9E‡óŸÒ°M9¸!Œb‘ŒÅnUe‡V7‚lÕð­DXb›†(j4gÅ~ cÖÀ+IcOp¡{Ä…$™f)Ò¢›\´;+‚“Cd!sêJ!U¨™Ø+kPQgZ_q†ÂøÂÈ,»ê5H£×€Fº$iä²-ñ
-vŠÁN{'~[­÷âœáUŒ–Œ9B8œDá£ÈгWštˆTŒl,ñ¶M ÞÔ¦µOÔt7ýTÓÔ ZZ ¯ªÝNÖ×ýÙü5[1®Ÿî¢o½ Á^¬Ý³ÐšÉìLTD¼y} ”Öô!­ü ÖJQ1IM»C(° Mqš 9ý­ Ñéн6úgïà YÝìÏÚåT÷ ºšôÆ:æ¶ïÃÜç×ó¸F!<ßÅH±Ó=t γ!öÕ´[*hpãxLÑßtÖ(Äeš7Œ
-Û5c’91X5™žä°ˆ˜ìd¤R”T
-E×LZŠ’Š®Çd
-æÝ5ßµÏéxºôÚE&wò‰™
-1ùMšVŽ¹ìð·i ÿéä™3M^®›~|Ÿ3&q&ìà g¦â”lP¡&Âí%¡]Ë–~jD6xÖµoºûg”l’"›,Ì>F­X‹‰Ð‡ìáæWì~gé¬~Ñ6£2´m?ìÃ!®Hu0G´‡ $Ó–ØmGšE‘$jÔø°…œz‡ÄÈZ|Š:Á5E³hG1•)îż” ´eS”¬sŽ..cjÔ©CôQô8E꨹!R§Q=ÔºF,‰ÿq£iÄ-”á5¶( ¿–(äÚ/òikÊ`}ì"” s8 ì:_´H:wyß3¿Ð<É<ÊeÇãÈ"Õ6?º,©ÄéÑécÎãp/$‰Ù½|}I¼¦1^v2ÚiY$ƒÄED>HóJFú"Jéä´2)ŸãR_®còš&bû±ê œìràO_Q˜f?/dýöˆ+Ô ú‰>Íñ53â<ΫX?}–‰Å&Î7?“Äê6C0êf2Ì•¨ä*½,{Éf°íRwF® Kóà‘v–µ;.{â¶]êþL~{^ìÏ=ïÂ׶Ø÷™g?¬”ÛžPr¦h‡SIÖqújÀg;îä
-¦/A?Ôå‘˺ ÓÖV¥ªM@çËø2,Š IuT˜Ì›ÈMÏCx½ ¤èÁ¯:ïUÐj;xˆž2ùöd;ýká*#ðbˆhLÃûLÄ, þ5¬5IxØ°fÀ°ŽjŸPkG°£¸µ‹ª²ï-Œ(Ö> ~²ÃÔäb­)#§U㌅ÿUM9Ž^º2 ¡†KêÙh&" ‹G4ªAÉÂ]“-gæ'éÁÑm†jÍÆê>ÌZ–gí}B`Šð‚+ØÌeö*úp×T¦]ã|Ìi·þëÕ¸qc\•ãÙ¼ èp,îyËì²àÆ6Ÿ=9¿ùä¶>ch-ë9bC¬u QBdY‰A²Àö! Ó/š|ae”ɇ‘m’`íJ”Ï>LÑGŠ•¼ïc6‡§¦ñ™kDÃ6c½SGªjMÕBÝ.óF'§þYÀ–áÌQú¡„™gyåPhDØG̪˜¢Â\ìP‚j€m“^ ¬Æ‚GÒXSÔlÀ3f!*cžýsˆÆGU†e¿V"IñÏ“*¥1ÓˆUhý3%•ºÔö1®,€`XmÆC ~v*[1ê…
-B²üöŒ-sþJ à™ñxæoÚƒÕ•î!L Ä€½¢A :èq¢Q”dö=lCœlsP¶”5R~ëÛ›%çÍpJÛ椇´Üd-M9íÈ#9mÝ#÷¹¶ÑDét,Œ”êt€ŒìÚq3ÒµÓá4òºÓ16²Àk‡ ’¶l'$.kÓ#ºòlrõˆ“×ÏÚ•µ›†ÈRè°°Y8Ý3Ì“1Æ 4‰ý =…y„}ça¹ïåõ4K>ÙH#§¾f# üd#\ýd#Ìþš4p
-n ¨×À°µ É€‘M!–7³PÌÀ¦­…m&$ÛòL˜·šrËàÑ„§¡¦ y7‚R†Ò[°&DßvMØ¿›‚ Žî Vh7mTâu«CŸÝ°¥¶!‘­°C®«qAŽ9îm\x Ïèñë­ÈÇ©Ú’'Ú,9Õ¦1ˆû;^­r&sØG{¬ Fb–±ùÁ?]ªãÁ‚ç.Ivss‚»cökãOÂñÓ­+#—‚]@BíÌåXma T³ù=/Ì¢K(+­1Cµ…Y4|½Ýt]ýè©ÇÏ$t9‘#‹éké1J»<M_•M)òžìKí^ X&¤f‘O‡Âÿ“| ï
-­im#_!·Êj±ÍäIöd«¡W*Sÿj#SVMƱx+]ùSa§¾6ǚǟÀ¼‰tPXÓznÓ˜§HÁ× ¹¦ÝݳàÖétpC”‘A Þ ½Bµ@¹•ÞfOfå )@ª$³Š7ƒ0±"t `œàÀs¥ãIã«VJ¨­™gI
-uALŽk‹Š=ŽÉÀÇš?éì•ëðå0ƒ¨Ua¦7S“«ÙŽ®&éÀ­Ó˜çÈî¹m(‚4„Ћz35Ãùd2pnSø׸®÷—fSµNP™š ¨4„kªpÕ„Ð[
-]×g1ͼ‘ôAÚF¥5³ò(ª®Í
-
-xøëÓ˜§¸„®Éžu Œ¶-)ª%ÄÛ_“šÚÍ¥Ú4³XØ+-ë
-
-ÞŠÒ³dØP¬%׊!L×ymó$—ÀÎIך `Q]k¸¢Œ˨º6K•ù¥[Ìn´9óÎÝà:h¼ÂT7~X¿.¡ú3?0;´ÏÖ¼1ÄÚD–³\ÃŽŽY2y9å\ÇP)b|SÂ#ÌÝa¥%l¯)´•sÒXÔ`52FÇeh€
-3ê®H¶‹˜Ö°ÃwÈ;óáàÖi,çõ"Ž9BɦÍc£Æ ë€îÖMŽd+w“_ Ñ]CyèÖ 0 $níØ¿YÉ:¯„æœvm†cúŠ.Õðõ¡Vx©kîíƆ9†×n±,±¹U%LtæƦbV–kY!?…²Lw·
-¸/ßCEV”‡0 ³
-/:¥ð£Ùv«¢Àç2^’=š‚Ý¢÷6„× ø~c"[]`%†/qÆJ´G$%
-jž¤Ždˆœ0ü*¥Ï&ÀFèÿ!R¹9€A&\3u ÌÇæ<–žwl]á@9M~·ž 4R"2vö»Â’
-ÁíâC\.>ºA ÿóR'$P"vBÐÜYc¨šz*R*+mNæûÒºt}˺‚7ç±™¦¶$ °b#‰âJ2d™¦ƒVœ–‘wÈP¯k¬<Yrã2„î2 Ù˺õ8u2ÜlÞzŽØí­uìX»Ÿë¨µê}Ç؆o[›áfþÚ²qkÛoß Ø¶n_Àœ.èi«å4_±m=j[7em§U›vÃvÏ#ôµƒasËì®æU…‰OÅ—LÕ7ô¹Æ®%»Ç³3fªê¡!Z7ìG"· Ù/cì´ISÿuU¬J¥'Ð;µ‰x€nDävצ±œ£fÈ׬Χ#¹ #½¼Y°ŠÓôv‹q¹0N×>'õw°B4BÌIöƒ#ú)Æöµ-À+!¨mX!Á ˆkY‚ì
-mu‚QÌî"Öb®Dkó˜×íÀ–©g;&éõºiq3ŠYK„|F›¨»síïp¸Å®›žu 6 Ùjóµ£Yä¥*ú Ÿ{sÓ$'ðß=™‘‚‹˜1…µX;à4ç£Ò¸"Rq”Ž¸ _jÔW’M¼æL/iPк3™q óô0õÿµzÏ»êʽc'/?vÍÕ †^pôú›HÈKj¥Z†Wo‡
-¡Oä+ãZ–Þ«oâ „²ybÏ‹[*!‹Ñ%¯Å9«…(Œ›–7°úækôS•i‘’ràù)-[t¦CÈßÃUmÒ«‡z-nVï!š"eUƒU|”Èî!%cJ<d€]Twù­—$Ð!Áî$A8ÕÓ&ê;b.û4èïSh"d!E 0X°‘ÅI‡#lBÝ\‘Q#ÓðgÊ^+QÓ`S#ïor}k›«8(sG%!_XeŸU'E®¯Ä®MªªL£&Të±gHB¥ÌÙ®ryCQ S´h
-öþ}ièÕÎLRŒ«ÇÉš8«kÒá¡ @‡'­šÕÆ}«Á?ôÀ!’‡'P Å(à”½hËQ¬vTèWöÚb¥ËÃ{~|uO‡o7IOŸÿýàéç^yò‡í^yÕe«[¾{Ÿ[oæô>vôø9GO^uÅ£ØH=rÆYgêðãW^µ']jž®lØË®|ȱKÎ8«_²ºóO^wüØ%㲓KÆç…—­=Äðe<DÛóü‹šÈû租sôê‡óÿòO?|å•Çžºsʼn‡»Ln™í…ØžèìWvu¾ä>W?vwü ÛØ?|ôê•¥¾jZ]j5—3Åè¿×±k¯Ø=¶zB׼܋I÷‚pP<Iª'`[Ðwͬ¦ •:èW‡Ž_µ…ƒ^þŸûK~
-¶nÕÎûÑ‹ÎÜ÷ý†oùºÿú¥Â½Ï9猻}›5ÜéÌ‹/½èÈöûý×~Û·ÿWgv›xæyçÿPŸ†¾õ÷_pÙC/>|p¿¿ø–[ßê›ÿk—J÷=ÿ‚óŽúö©í.ç{Ä•—Þw¿óòëou‡;Üú[þ+—:ëž¿X
-·9ük{ÝÃιÓ>ôÍw¸ëÝîôŸvšV—zàE¼o\Û'ÜÅzÚ³ž|õ÷[ ·=ýîßÚ­þ+—:+Ýf­ý;ϽæÙ/ùùçÿÔŧoÿ»o;ýðÙ÷Îÿ)óçVñ¾Øv©SNùÁG<ïW^ÿÚ—=íŠ{niw¾Ïݯÿ'.v wŸ}.uJ¸üù¯{×»ßñÚ\{Á]·ýéϺäòËзüå>ÿ|ÏáûÓ¥n»¥ë».}Þ›ÞûñoyÙOÿȶòÝg;yÍ÷¿Éëmï~¿‹.8;o¿·û]ÿýÙ?|ì#þÎ_|Ìý·x}·¹÷Ãó„G»×MœØ-ÓÎEžS¶ÍjõÏÙÏ|Ûÿí³ŸþØ_¼ý†Gô-ý?xüI×?õšÜD‡ðÔûþèƒøûíçg=ëó™oüì?¾ï5O~Àwlö¹êY?÷¼Ç]rÓŒ ÛÞó¢ÝKwöÝaϾþ]ùü7Þø‰¼åyG7_Ëw>ð§^ð 7<õagÜâ¦\ë´\±wé½öy‚§œòCÏùÿð…Õµ>õ׿õ‚ÝÍ“Óí>õ¥¯ü…gî¾)׺ý}/ä5GÛ¾ýç<ÿwÿé‹|­·?÷âƒÝýÄséU/æû0ýüè'=öK8tçýÜ{>¾ºÔÿþ7=å¾›Ý÷¾î†WýÚËž¶{S ÉÛï\ýŒç?ýÄÝ÷ýÁE/{ÿ¿ÑµþùþÏë6õ½zê+^óêŸÂÅ7å;ôà'¾øå?÷¨Ãûõßåäk>ð©Õ¥>÷÷ï~Ñî÷ntßã'~öU¯{Õ ¹³e…nü“þÜ_}ý+Ÿzî~ý‡Ÿò¶¿ý=¿|ã6¤Sôä—¿öu¿øÌË÷}³Åz÷“/yÓ;~ó¥W†}~ûÀ~ÿc«¥ñù¾ç®Øø.ÞïºþÚ^ý¢Ÿ:ÿà>þU_=ýË=ýÊw½÷÷ßøÜK·G1]ýê?ÿ÷Õ´>ùÁ7?õ¬Þïß{ö/¿á ¯¼þaû®BõDäŸ3ûê÷|àïyÍ7G¢vžõNz„_üøüâñ}þ®—>å¯ãkVÓÚ7<öõ³¥uø ¯ÿ£|ôC¿÷KWo[µw;ñÊ÷ÿËjZŸýðÛŸ¾q3§^øø—¾þÍ¿ñÊ/ñq}íÙÐ:òÄßøóò_?øÛ7<lËÅÎzÆ[?üéÕµþíO~õÄúžq§ù©Ÿý[ßòºuî¾VÝ7Þb¶³?á7þâß¾ðùýÀ[vsºëÞ/ýáÇW+ã‹ÿô{?s¿µ¾ïºÿ£_ü†w¼ë-¿ü´/+8pëÿ}ú·ü©×ýÙê[ýü?ÿ雞ù õƒá짿õC4­Ïäíók}÷¸ê…¿þ;¿ÿ;o|ÑU?0×}²oûŽÛM±œüå÷ý3}«}ßkžpæú´~ñ>Fûîçþæ7öÖ§¼ûœ×ÿîûß÷?^ýÔá¯ZwÉnñ]ß5Mì{ŽÞðî 3ãÓùŸ¿ôËWvÖÓßò!Ú3nüÜß½ù±ËyÝáO|Õ»ÿìüŽ—¼ÇhÝpÿnyÇ;ÍÝ}žòæ¿â?ù¡w¾àèü•Ýåø+ÞûO4­¿ð¿óœå¾[®|É;þìo?üÇo~Þôa~õ†t«Sï6ŸÁ«eý>zÿ7~ñ_þüן4/ìûâ.n¼ñ_ßÿŠ-§üÄ׿ÿ#ûÈû_÷¸#£qñáò?·¾[¸ó·Nÿ~Þsßñ·Ÿá'õïùÅÃæ¼Óå/ýý~^®õé¿~Ëãgcã{òsïúпþû?¬¾ðiƒÿº é–w«aþ ¾ÿ'_û§|jÜø©¾íú‹m/ÿÁǾá/>!—Zíïÿ¥Ÿ˜ö×ÕŠúÃ~æ³}Ï‹/šFúÆ éÀ]àžq2±¾÷Ø‹ßý‘ÏòkùØû~õ:‹@Ýï¹ïú»ÏêµnüÌßýÎÏ+ç{ßÿÛ¿ø±÷Üð€iZß>?.}
-P‡ ˆ²¨$CQÂEP1‘d©¨€€¥ b
-'Oym›m±«æt£Tÿš6Ëçb%âå¼ô¿þæ‰CÏ)˜t›öÜ;+_}pBÝ…=k®™³”{Àž5s/(}Waðs›íŒ¿ç£‡êøñYïì´ƒ[_¿£ ßzêÀë§\Û·ôpâ/Cç-ß°éÓUK½ÿ¾‹ßý|7}ïúGkËßõü—ö]û7-›t:>vü³tfþ~ã‹“yö=þ¼&_USzÖ~Òóëv|÷íŽÍë?X»nã™pl~é†SKm¹~õƒ'¯j‹}öšZ±ß}òÔ8þ”V]9yò••t ³¹z÷+ ü{¿ývo6íZûHC~ÿû—vOznCnm9ðõÚgï{ûS«·Ù‡v¯}` ›Si¿ënž<ª{ÉN󜉋7”¯ñØô½=$÷ß?ŸzÖy=GNžksþŽ;?]ùúŠ ;²ò}³b6ïã;7ÜtÛ䊻>«Â߈åèG&Ô^Ð¥ë…C¯žtÛÝ —­úb÷¡¢;íÛõõ®½¹´¯ßš.ã»ÆL|“RüY¦µ*˜.tíýjí²GæΙ3÷‘g–¾±jݦoöU¾/»¶/¿Ç÷Ão¹kÖÄ~aég­ØVñ³P»6¯[³jÕê6lújçwe†[ùe¾‹Æ÷.º~μ»n¬)vœ3¡rkÉuà»Ý;wîþvßþCMß“»L{ÑôsÆÈ™ ½çÚî¿É¿êÏæ¾Óägýeö+—"×Ú›~öÉ{¯,>kwóŸ|{ä<š{íýüÙñfœœ{ÝCK_]<wÔéùWXw×ò­ŽœGs¯C_¯šWc†÷ƒ¯®Zµì¾‘EàˆSÆ.úp÷‘³hþõý—ïÌ?ãÉw?ùbÝks‡uÃS—m,3üŽéÚ·õƒ·V¬ÿj×ÎoÞÝ7ìûC¿{ÞÙÞ¼ÖìëÀž»ö8ôýÖ峊։øŠGÖî:òã?ä:ôõ;³ºäßuúø§Öÿˆ½°èÚ¹ò®nùwµ¹áùOË7?εçýyåßÕvÂâÏŽ8ÇýÀkïúÇëóÃmoüéÞµã‹7ä Õ×?»á§ªÃCÛÞšž;ËÁiÒÇ?UßhÜýÁ#õ¹ƒã°~ÁšŸ¨ÏÃÎY6µCö®ß÷½ûím?òX¶×¡ï=88×;:N]úùOÕ9÷~öÂÄsssï• ×îü©>ìàöó†eû¯kï|uãOöaßnX|ËE™A_}Õc«·ÿˆ XѵË[óFŸkÏSN¸dÚ’õ?UW<¸í½E/ÎN¥Ü!÷¾¾ñ0Æͱ\ßo]¹hJm’þ¶¹êáw¿üI^vp׆×æ¿ÐÍÞõ‡^“_ùS¼ìÀ®Ïß^tˀ꼙ݪ÷”ÇßÝ´çGîù‡ön_ÿæc· *µ¬™òèòÏvý¨½ñûo6®^:BŸSKŠ­z]sÿËoÿñÆÙ÷»6­}uáWôlU(»Nh?bÖó«7íþQ>íྛ?xýñÙW_vf剠ïͽññÖ=Çú¶Cû÷lÿüýמ˜uuß6Mz[_|ÍÝϾýɶoåmÌFxÝŠeÝyMŸv‡Ã9ŸÐ®ßõsŸ{gÝ–{ÈëØ·Çì¸W¾üÔýSÇÔV QÝâìç>óæÚ϶îܳ÷ûý6o:øýÞ=;·oùü㕯>5oÚøçÚ-ý{û˯ýØ’7Þûè“Ï7nÞòÕ×ßìùîûýªøÖC‡îß÷­yË>zï­W—<~ÿ­W è|z³#Z´ë3fÒŒy ŸYüâK¯¾ñŽÙQâÛ¶m/¿¶mÛºeÓg¯~ëÕŸ]4Ö­Æ^Þé´£ +9á䳺^>êš&N¹ù¶;ç-zîÅ—_}íõ7Þx³ôzã×_{yésß?ã–I×нC›“›SuåïKÎhsÖÙçœ×}ÐØ&O½åÖi·U¸¦ÝzËÔI×îß­ÃYÕ'ý!-Nªn×¾ý9çVºÎ9§ýÙmÏŒÿ
-$³âIÛîƒhR„Íž­ñ±&ÍFǶ«‚koÏhŸVµùþÏè*åÑâ z×’ÝX’œáõ|“£9´ÜP7¼^ƒwmrõÀþC‡öÜ·$¹Mÿ5— Ô»O¦\Zòj'Fhñá™qˆ;§6®H¬ÓR˜ìˆÄGÈv˜{ÂâY¼ì96*=lGÄ/‚¨yP©( ‚Ï!ôQÄ\L ´²æ©Pˆ0¢@U Àggl~ 0«É»lè­DÚ ¤=±#*ŽÄéËÏû­’ B±8`ÒŒLÊK¤ Âà$ªlù,«5þŠ¥UŠ˜Ÿ‚>ËÉH~ŠI
- ÆÇHIySžM¢ÄªõæeŽã ²äl†
-ïƒ>‘5HP,aZQÒ®’ Bˆ?DIñ'„¾ÌQÈÔçÙbÌ ²âç=KV}âòÉšö»¢€M ¾¤TµR‡¤ Ô:Ž[\€lêÍeŸ£r÷ÚÕ'ÿ."N¤½Lïô·h>L(V¤B%%òHdî6ŒÏJþ&LHa"$< °õ0Í1Üç&Ô»C‡)÷ùñXIÖ‚@Åa@ç° CÙòJ„8Ìï¬tdb—ønFÙXfý(:-¨{$Â]ã‚ÉóR
-æc]ÇE{ƒÎö̾ÇAéšÆ&Éu@Ôíci3·qÒçb‚ ŽÉ3ý˜ÙÉŽU§ÙåûožcäÙÑò¡¯:£y¤]\:U©›qëánüÈOð7ƒM'0³Ðß
-¿úh7Ög\Øî(Ÿ8wø€£ ïzý=|WþºðÖ9c+En5}õšþàÍ]|[îê:í¡éù¶ÜuÒ¸{§÷>ª'
-ßr[Ÿ£{âÔ±S¯8Êú½ôÆqB™wu»ª¡M¡ð?â‰Î#êüÂÏä˜GœŸ×¿S¡ð»#ðBüsƒÜ꒾Յ‰GèÁ¿ÎÊŸYw±S(ü¥©à!¹ŽÏªÏí ']tÖaGÖ¯r…öëúÁ7zJ&C¯ÌõÛ0Wèó‡üíÔÚKµœ”!yÛ^qùæ[÷һɸ³Vm3àÔÙãïœÀ³öÃFtlâ°Ûùö#ÛNZ¸h"ƒŽÜÞ£.¯±æöœ…|xvÕÒ+åï“Ž*ôñuÎè«í»`á†moë…Ãë+–낉“u&h7óÃï¼?ξ½vtßÒØ\5·ß~‰üÙç¹o?¼ÚþtòÀ!殪!wÍÑ!7äµ}_“ýØ}X—ò'
-ýî?Tþ¼üå½ëÆg¿u=¤Âhì;ÿÉ©kíøØ×ë¯Í~ë1áº
-¡sµó—̽Tþž¸¾±ñÓ³ßjnŸVa"ºhî‹ GÈßõïhüò¶ì·áóï%(^ñ>ã¦Å‹gžÃwz|gã·OYÌã9³—.ˆ?~Ya0àÑמ"ßôyã¡·†ë/#—~ð"ýãߪŠžhç+¯Í<õ«MõN‘:=òéö·®À_'dÞšF-Yñ¤¼¤û‹û¿yBêg슽ûWÆ_Ì·†`ù> ß_>[‚zæïnÜÿö0ú³óÂí«è-²÷O˜CκoíúçúÓ¿{¼¼ßëj~Å{÷¿A‘TÉy9h)¾ñ½/¥ÇNø¸±±qÓ-ø³ãÂmß<F®|?‰ýo®×¬Þµþ&üqÉóðÞî~|Är¼n’ÿÜ>ë+üºñÜõTgS9ó6’{çÁ&qÒ'û^£Êm×ët} Eá7lh<ônƒy×*Fµ½w%Óôü­ КAŸãuf‚HÞ±¹±ñóÙ…þ/ €ú£‰…ÂÐå­ ¯;ô0»¼ËúãáîÏrñÙ+q½ñžS W}Ðظ}!À4éÈëéÔuþÿöCº/B}1û”Â-Ÿ›ïž„».š4Eûv<üÀ©/z¾Ô½ýþøBÇE;÷/GŸ>yÜœ[zÉ]nœRcê}Þç%ì}eHáòWö6îX„¹®ÇmóíúÞçöi
-cÞ.uYnyè¼Â°7ö5~:wõ¿ûëBzÊø¹wô*œûÐÖ’ö¿mz_ßvî]=ÖÜuê Ý;@^ÑmÚ·u+ zu_ÉwozÐL í|ñÕ+hÈîw<<S?ã¢é÷_{raÔ{tÛ'O¿'ßÿÝÔV|ü0úÔ%3¸^#ê.ºm†é°ãÖⶭw­â'>›K£vÌ+ïЀï=cf?mð §ÞbêùjjŒO͸[HÎïÝÏrÛ¯¬^lMŸ·ôÐ'ºOœÜKŸødB¡ûKÔ©>¸Ž½rùæU˜¹†ß3Ñ‚ô;ŒŸpazƒéUS
-c©xû—]È¿Ž_»oç‹ ½<sƒíéqýufŠ³7n»§0›jù»‡å×[656î|÷á76¬{(ÃÇ\rmÃI…!o rÓ Üò‡ÞL¿õx½óÐwMÝ ³O\8Ù,yç?Í°?Å{î~ãÖQ¦=núĶC®Þ[ï0ýêŽ-%½ê‹ÕÏÍ™÷A†Ýö„].¾óþ‘¦À›KzI㡽ßìÌýóÀÊz}¢Çì%óúîÙQúDéõ™N’…3g¯X÷Ƣώô@ã®…vðÁ÷û›á?ðš ½îã#ߎkå(ûĺæ=±f¬>qã§Í{bíUúÄeÛÄWËÚÜÍÇÈÍh¼¯OLiæg4®–/ïòT3;‡Þ½BFÙ{Í|Åw/Ñ]8k~3kªñ˸—Ô<ýuóØ¿R,®‹–N†M\[‘PÍ3o¿Y@Øo_·½ê‚{×6ž³oõôÌXì~ÏÊoŽôÀ÷kﲺÉUOþ¶oí]Š®Kî_ùõa€ûÞ¿»W¡ä:ïªGß)ãëÐÎU³/,}À\®zäÍ6–y¾ßñéêÅÓÊ7èê8ôê›måšµk?àkíÚ5+_]xÓؾ‡Ûäu4jÜUWëuÕØQƒJã]þ×»¶‹\ÛÝJÕb*:¾Åà‡¢g‚câAâ@p“X„&“X} nêˆ0c¤îè—º¢§Búkê€H!‡ò‰¸â ªÊbà‰E;VW`d%¾Ô7“ª÷Y|·PÈpYSÍmå³?ÜÂKﲫZ29_x0Dó
-¡ü²8§.*[~”f$‹r|Ÿâ!„’…ÀѯÚÆPËðÄKšîÕš(—D,ÅÞ!'%›(`o"Ÿ¿§!ÕvI''´N«Ð¾Ìúœ<UWFÍŠïž°T•0EÉ“I`‹;¢‘Ar¡ÜŒQ¦$/ŒJÌEq˜X¯]Ìz=$I+š&ðòEWU½RhM¹*X A
-h¤…€k=ÀÏãkÔ•I
-LÄï ùŒÄªÚ«ãܤŠÃ<`qÞÄcQI®”PÀS™¾~¯0Ë@&BøÀEXÞE:…©HI0Ì@´¹ ììª.I8ÒІ”
-¿±Oh'Ss‰ëôIKV‹òKìù"W¥žr©!g`)0i¢÷bû~QŸO¡ýê (Ãcdôl´–³£
-¬V%‡*'/ÈœP@<䤗 HOîiÀ_U-`Ò]¥l“ÀUhPÌ™"QÕ{ ˜Ãè
- Sqú$v™²2ÈÃ4I ‹hLšÔ®¶sÉ@ò5æÓ›tEi>Z6-ES4Q³( ´ЬJ¥UUr-²Ë [Õ‹6ÝÖµ
-R"’%ìé‚Z)KF
-d¥Õ(eÁpªZô¤¼O€î™ RÁ\©îȵ€R¡o»¢••*¬Š,o•ÝCi~ƒ½Šô"h€±‰ lªŒ.@W#Ov* }‡û1æ
-™K ƒbNêbHxË@$ÂiÈi%’9Ï%>ëöš~"zcÆpÐ^-IWKŒT¬®/󹩟Č]i˜±¼%H¬ö$Fµ¨C‡\Õ¢×J –dòRƒ6vÌ“4”qÍ°ò­=e’uñ€1ƒO‘È †ÕËj€Qm²­n 33-²¦Gè³9­R
-…ʘãŠéHf*}@êV'Év`èщÊ/ëlZÑ9 ½RûPoç&dTW­¯Äª¢Šòb€‰þEqxÆvSXÐaäÚŽ%k—´ [©¨_Ø*˜&`3“•#ÃÀ ”ÐuE§{‚È-?Œ8Zü5ƒ€K`jˆ Mî^D"è!¶Ë<—!1 Ùß@6ì
-M^0¬˜sõX‚5€ª[4¿<ÁùMùžÈ%« „.0wÂÐ긅Y/FÇà]‘IL\Ý„‘ZZø1`Qá2mX¥lÓ1R‡´»MZ ¡ÍjiÂÈ¥ñ:vù#ôa&S‰÷ë y-€(:˜cí°!½+0¿F®ö‚„t2IÞÎËÊ/‹oà[ûÃT€džµTàÄísÙ|Ñ6”3‹ÀÑm™éD2?û™F" ¶)}SP×ÏéA²µçÇÜ0-):ÀÉ*ÒkŒ–n“˜ /Hkä µ"Ï<5ø‘ÝVÅ}@J|äu1aüuè<#‰ )_€-˜XÕ‘F h¢î‹¤µs÷bô{´×ð­‚«Çë½Èª ãDº IVã#Í*Àç)¯%$…4_˜;É0V@0Ý89V0«£0e? „ YùÀerŧ"áŠdÁ#QŒ_Ï%
-¸Hô³ILD×׉µ š¶¦S Î QH·é"ë
-qb1¿¨º¼ØXñ¹­9’åpzŒ k9ûj@>ˇrbDÐgRÖ1DÉ!5¬²#gÞ˜±.†HLS[ìÖÊÓnâÈØLùˆ²Ñ®Ëì¦ÀcJt\6SÈxâ ›X‹ÆñäÞP¦‘POIäZ2HØJà ô0ÎØ®<Q&=LN¼½!1ê”ZÖÌ=6’É.i.ãe‘ ¤[ØXÅÑ0ŠüM¼ÍpD\¦’ìÎüuÚò˜{ÅÊ€D¶œƒa5AmÛ:ä—aµpâD¾ÖXërH©xf{ ‹¶Ï5¢/·Æ(ŽˆnðÈÊw¢
-yAÖgõ÷ɪ ?/Å”+…˜ÒjØZkØZ,f¶– ±UKŽH邉&êAa™Ç³¶q-žó'„®8±éò8­¢ðÓÕ%
-bµ86Å,ÕfôUŒd©p7~ä'ø¿›Éš½äß@$˹ÊðÈõÃ$²Š¯ü1ÄgÑ|u¤&¯ŸW»–ð¯þxìù]TQêèò8³í±‹ŽºÚ»ÄgtÞ)Gß×JHÏ?¥ð÷|?Š˜­|`Êß›Oíq÷Ø<
-E²|‡A›ÚÎ…àê¿nRѤìú§¼`Ò¯M'ë8jÜÅmÀR÷ÛÖMk_ÿò›œ Ü¯Z›—wŸzÏT"ú¥W.þSéúõ 'ä?¼´Ò.½ûé®pTð—#Äàpmžp’—/ñ g4Þï‘×-þõw…°œþéòÂv?‡°B«óÚø´î€lXòþ # …?žÛù‚ÒX•ãŸ—7¡h ¿\Ø¿sþ–Ö5ƒ4ž°rËÊ …B‹š†a%*E¿KÃ"Ý?üδeÃuyEÂYc'*ú.Þ~ð«û
-§^unq&Qû(ÿÏ_y'
-'Ìšœ§£ìzë¢Go¾ HËí/Ý6iÞý7žS”ljºE¹ý16™ô˜öÐœaN¡ uÕ}ÎòO>ÝÄ$‰»?[óæ±E/.œtÉEEâ= ÌÇõšñèÜQ§~Ù‚ª:N_‘ƒ0ïxoî%öþŸAi´Mß^ù‰æWzÀ%3ÜÑ×)´H©;üÁ+ [’ƒ™nYrÍérûï[ýÓe·aE\œ¿wQË—Íœ3ÖŒ5ç ôñ–]/jwñ½ë-Hw÷›7+ô3ìÒÌd§Ž™T“Ïäô¢hì¬›Ç ÎÄDÖqäÈŽ…‹žøJòØ»òvAp·î6j ýÙîÃ7手[žlÆH§Éw7ëÄ6§V™GN›Ô½P'AëïVVÊ o}èÓà…žóß~ûþ<ÔmçD¼Þ|Ldz°rþ-ße
-ÛùqF¬î~þ’Â?ÑÈ<uÊ‹k^¿±ÐuÜÓë¾ùrñ€|&M>òÜõ…6ýj©ú.½oÙ"
-…Éèï÷Æäó8åÚg–N3ßôÚ‘Yƒ×Oκä{E%éyߪµÏô.æ®q$ùÜ°žþ^s]>“º§6îþâ‘Þ…¹GŒÈiÜd:Kaæ—ô÷º;òK¿ÅæéMo<±áˆy4îý`ÎÔ»×ðxøàæüº\ó,Šp YÜƾڸ…óØûê°üç´»ÿËæ<_rmkjÆOpc3£Š®Ïo6Ožüá_ÅrµâðL~fZ;ìÚ¾…ššý—fô6u}5»pîÈ‘™…wΛŽüPéupí} Ý™=…kVÿ€ï9¸cËÇOÎõ”%?ŒÄwÇk×eÕíæ–F>6ïúæåñ¹hñú—›3”^?´.×ßΞþÞh ­¯LΩé™Åï®æDý_›^¸¥C¡èê>÷££$!ßôôè2Ëîs×±í¶G—fa® þ´ù
-ò¨úÐ'
-x‚ #â”/ ½ 7çiŒEˆ 9 3œ0Àš‘õó†9lw¬A‘¡â»€‰u„ÓrFÀ\(þA‘«,G+ü™<è2˜šïŒ$0TZFc]¦
-Ö_”IÀaCñ½¹Àjq×-Ìž¢ÍáäiOŽŠËW­…ÊF^Õ—(LP+†aŽ¦Û‡„ÿpX@ÓK}Û ÈØBù<Ž4|*Ô¨*m‡–WÒ
-
-ÖM,¸Fû†P
-Ùo¾q²ŠÉú\ö º(Ø<‡C8Ë|
-˜€ ›,.0@\¢xëã|ŸÃÝ3q-k6ž±(I
-mÂ茸1„.áS¢Àb¨ð ˜yÖ‰lió(R8X6ê³7iq£@÷‚,^‘cúÚ ° À¸¿1û>‚_ÂWå{¼£…%€¼å{„Âgl' Ò≓08ŒñKlàÂý8T)ö8j[ƒø¢@!: èC ŸðÁ‘§Ñ7©âzc X-}Þ¢mQ
- P§ ÐÅb*xÛ £Û À…°:%V”FF í7Øé³Ø0ákVÛ¨%E0y<ki{q@X*×€Î/ˆõaDʈ>"g\ªR(–=ÎBád|e÷­&·ˆ£˜âj—D“#¸Lcù6©˜ÛiG‰Bš_# óX‚€&d´“%'¹è“8Ð@´0TRü¬i@,ÌÎ@I¸–¬ÔZÝx¨Œ?V‚Œƒ %±£@][j`gmøˆ²~S®¾„Œ)ôµ!@hY»83.ãÔ-¶¡5:sëbJ8ò5"Å>¯0ެà ^Ša´:ur²pÈ,eqš~Q̈ PåIðs±…Œ ‰ -Ù?°¿\߀Õ:GC,a¾¬Ôð
-rKŠO“=(þe6ˆ2n„ü†
-^®â.'"!ØbýYÂ3—$JÞŽ8ŽË Fá¡'+¨¬?Ye­•YÍ"”Ë·Ñt.ïÕ&|*æÏ@¢£y“« âÈ-¶¡Ýüh® Mç¸Q~½æÚbmƒürŸå`r³Þ%‘ÔËqŠEcIc^Z²z
-›l/ÊÏGb^R¢:‘èHtŒ†'Jàû¹x:ðpƒ+G¬qThÐë)0SyòÏgÛ Á/'-»JßËèëËNsš…<õ› dpgâ™bgxScÁ˜ë ~0ãÆô&T‡ùœÊˆ)kV:ö3T,ÓnÇ8­\œÿë0ÓæÖã)˜)
-3«ÌtX˜iîn‚™ÒüßÍ!LwÃø¿(Ì´äúû#ßr„ëgÿÚÌ›þÃ?ÿ±™¨Æ¿o¢´ÿûø‹ЕMã› ÛþW÷ÏÿŒ¼*cÓHÚ&Zý—§$…v]2‚èÂ?6]1ÿoé§_Ôs@Ÿhê×EóyÐÝÏ›Àƶ:v\¿ í÷þñ¹_«ò2è?;±XÃ^¯³G\ÓpA‰öëÔÉåÑvÿ9­¨úxö€=Šh´ã³´Z¤gU·ÌÿÔêœ6ÀÈþ%ÿE>éünÕÅàÅSz]È ûEÂ"¹ÄßwèÔï¢ 3ÙêìžÝN.e?eÀ•P½Þeõ5ná·¿ÈÿvúEçŸXøÕiçØluIÃÈrþ¾VýnºelûB¡ëu“z
-¿pþ’«Ã¸×EIáøvÝ,kÛ1·NèV–E¡ÛÍ?|S—Bý¼y@œtVî;ÿØýSÀ“zu×ú?oÂ=·U ¦>ùÚEo¾òøœçßy}vׂߣ{”Êç\h*£Å—µ‘Ÿ;aÞœ¾åYjX¹ñËO7n\÷ê¬Áƒ.ïÔ\îÖ8Š/•–ÇÌ7¾eùi_ߺwÏk?\ñìŒQ—žnЯŽzê…
-íÇß%ìÃ'¿ærSC-«™ºÍäÇŸ½§ôSÚÞ¶xÉͧã¯hääI¡ž||¡óM?@5»e
-Ú e;™ejï]üôM%žò¡O­\"ø!wÞ|i!ébòë0eÑ3wÀÜõ–‡fö6ÿû»s;ó>}“K½:õ,tàï2óê9Ó[pûÈq£Í×Ä ó—>uËù…Bÿ‡–>D_Ôæâóxú¸dÎ KîÍÊÙ3Öìþn%Ävœòø’'çÝ{ÿt $ÚÞ²äíe3.(\ÿÚÚçé‹ÚÖ]ÌŸ“®zdÙSr£áÕ]f
-êï[òÚãw\=cÑÂÛP©ý¬\ÿîÓ÷¾¹õ›U“é—_*У³o\ôÂ=*ò‚Ç
-, Œ]Jˆz.Q¾$²DN¥'²Ü+I 'ÅI¤À(×izä‹ ­Ç‰Ä
-Í!.
-mN^ø}_ɸËb>ç$’ãvaÿÐÊâ³j¡ƒ7 SsN,VÈm¥ZÊp.¦
-¨Q]v賿ÝXáyŽú—L±”þ¯b
-œ ÄJ ŸXš: $0Á] Þ™Ðr
-B Z8ùœ£-|sÌ= ÊLáž‘®O)lKaÔ&÷±µ)W(¯Y8G+6öÂÃéšalDTäÕ;rÔ2>cÆxH©Ø› "´A#¦åüc5¹sI‚⚎’_[»«¾Ëç "ÌX9€jàÁI¾M!_N-ïªÏœÞ
-ÜÆP.)Õ;ü‘pàgŒÎ©€Àõªp±Üó s1fÁe_o$4, 2Q.,8ÙCW°ÊeX¿0
-`*¾2š%±ŠÀ‹p©šÇ––=rBá
-HIä@ ÇgàfD×>Ï÷FJa
-V `âõTvÁ—¾‘q¡Âù¯DkðÕ
-Ÿ<Ô ôg¯® O@Ê&néP ÑÂá#A¬ôèß ‰nV-® @jj%šá&eøk®kEëÔE„%äÜ1‰2îþéPÞ/ôwù¶r”WZ9uj <‚À–óS¨×€¦¨AL¨ÞQî.`¼”>1¥ø”Eû;É‘[â ¹kB­à†Øòôfµc̼ϣidÖR¶¢³1‹æ|áX…›Vý×Â!Œ€¹gt²¨L“Âîè G]ˆßå«W:ƒÒñ®(WPzÊ1 /2i
-‡ •KSâ;€qñƒüðhÓ<˜À2*O¡_Ó%™›@้€ðŒò‰sˆ âŒF DQ ƒ¶Jãaxúâú–?^iÇÚ°ÐØã$ÌŽÙ`¿5Js%æfÔc1«>ßé1¸=ÈÈòŠB0x ° =–ç7?ƒñai"Ë(V3+)+‡€vT—ƒØ²vz61›Š}?‡ÎÖ9xûa€ðêmš#å\]?±# ¸ósœ“06+² 1/ÅòD^Áèo\ f/wà,xbš “ k j.Ð’º­yÄÃOUˆQ›TA
-'põDd™¢»åÿ/ÑÍ®ÆÿhHýÿqjÑQ•éfÑî&´
-¿o×££Õo>ál ýo©¾î¾û¯×ÞÓúÕb>œJ{Z'E |ò½7§·5µÔ©w7Í‚Ã
-­Û9…¶ãî^pçpáz8gôSùq•ùGÛž
-Shxm˦Åð;]Þ½³NÍå`Ž9ñ‚þ¦Ì]0ç*þˆ¶Cï|lîåø€3L×Lúô9]r¸ñÃýû×Ý G§aýØãÕiôªý®7ÜõÈÂ9c»“ëç¼i‹×|ø Ò¶©éuɈ+ˆ{ì‚g¾nlüúy8®;ŽFN ~ÚD:ÜïzócOÏÃD6g¾½mß·k'Ró›<õ¦k.áÞ~Ö¬u‡@ƒÏè4f$jwšrÿÄÃÒñ¦GL`2«3¦,‡í›gà5¾xÊ왓úKï¬$)‡Vƒ,äâñ Ôù.¼óñ{zãøÊ{g õÎ¥‹˜æâ“—Ú\që­×^.¥¶wo >¾Ö4Ï•S‡Q]:wñCLZP{û4ñÐ ÇèÏ]=†tQotís̲yz¡0èîÙ Eé=ÿ•'ع|É´[ÅOXÿ¶ø6ö¼àÆ¡3>¥Æù~í]ÓŸ{í±Ë)ñÂyË_ºš_0kf-ß8j¥º46̯5=ûýÉÂ)ë¯6oßüÃDªg­øàQ*ý¨…¹Ó•kÔòÀ?·ÃjÄ[9Ç˾U›rãšížÛ¹Ðû±Õ+ær[\ó‘ÍázóÏ?Ú14äµ¼ïoÃdNºáÐÁí+ÏyÓ·_¿Áª­Ó,ŧ·›žÒV§‡>Kò¾Ò ‰ž ó“¨ÞCßí€[òËÑ={gœß¾\W8£oosϺ?/k»ÿrÂ_•óâî{çS£æø=¶/½õŽ©#N×Ïÿ~ÞmôõbSõ}ž+¢yÚ³bÎK7çïÚùÁ²ûFX@ØÀeE”Û–Íœýr ãÌ÷_m-qÚm'§îÚ~n±dðw_m=²îËç®ÊÁC†¾xd~š’kÇëSòtm§¯>:'é¡íoL+bÉ+t›sT¾Ú=Ÿ.™RœA¡pþÝ«ç@/º¾ûâõû†žU(½ºÝ¾ôóæ|ÉÁÝ_¿ÿŠsËžG]Œœÿ滾?¬òó¡=›×¼tßÈ&]‹ç6Üûüë+?ܸ«2%Æ=[V/{`üÀòòçËÑgø˜\º|å{– |ŸlÙ¾mã‡ï.›?~`Åâ—¥nx1ÆUï|ÑÜëúƒ_±ÍÅŽÈãoàúo¯äQx%›ØÚÒÞõϼyíd·°|òš €ºŽ
- ýA¤F@//!™8ä÷YS¨ÎåH•cmSÖ`­Îr)È"Í"çËß×ÝÜýŸ²³v«Úð³åâPR¬ÊRRE§*Tq•Ô¬š½*“ÈâpôI0¹EøðË\QÙJ؇³\ËzN.0­GX@k òLjA÷=¡¯—‚E"˱U¦žs9ø~,’JApwFÁK-+‡rñgT üª"VN¦Y4|V¨ÖÓÞ]1¬­b
-Xƹt艪fs¢ï±R…Ïlš<©è2P€)'Æn"5a£/uÛQG§Šš8´&D¾i©/=ˆˆpºÛ›‰Þ…j^ý1iF–©Ÿag:Τ“pRˆ³…:™Q\™R¹RvÉVœg´Ä±z˜ÑýH£E|1 3‰>Â.ÈÐsáË&6ñ‹ X<bÖÄŽšPÌ6»»DŽ®1t0Í"Ñ~‹ü{Ì‚ 
-Ž…FªäðkÐ^T¥ÂÕO¥ñl°˜r"Ž$Ì#µ‰¼]òÐA¦×•T¸|‘Þ%Åí–ìÌŽË40_”õBÜ«ü±h<ql5KÇ,PÉ¥4YmöFE8ÀUU³DÂé#'¶Z–ž€+"×eDýŒHØE"7ÌË%3˜ÄŒ[ž(dÊý`l 6diåÐƯ"N™ÝŒ²Ö‡s9
-ŸÁ,I
-ÂuœE™1å¯s|½[ÖYI $?"
-³^+Y)Á)
-4t”5ö/+"ÖY5c Î?ÊUê(„ØÔñB­¸2éR­¸
-B§%QËÕSõ3`lU‚M'ZXmi*¨[êe|g*k è±ke:A",.©ïÄRõAê
-LYXIHW„»I¸6WôjRò%ÍÇŠð£žÙt‘ÂÃâg⦎˰&KAŲ”‘$zˆEÐaè"î‡j—U Gɦ{±€Žì ŒŽ„β|P˜ñÅر+ €š—È"»c6}-ËšŸ£”ƒzº+‰±—d˜=³×ø>ó,¶$hnìP“ø.w²–•ifx“„3O cºû&av)p*Ø;ì y®G"¶ºÍò¸!¨†h{&›lÆ%BHZ¹¤À(+WNV‹sCMO”&˓ψ¬U‰mÇo•qóTdñ©ÄøÇlö´py9ÉB´I@tc~jA›~ªBíi¶ÑòÓ§®…膱i& ŸÅÒ¨•ó­JðZŠ×,èÅóÇØSO”åeöƇs](Z´š‘ ŒÛX€–))UvNÚøq¢™ÖüIôžÙ‡!^% EÆ“==# ôH‡$¤su(‘b(ça-+q;õ´wÓ!(ÿ ‡È"ä…±Pà!7 Ëx«­/DÇvç®[;|= |#›Xš-9fÏCl+‚qKq»ÙárEo ¸§½›Öô½„MÏl¿†˜È5ÔyeÌ; ÿ‰" “åó(e³^:pÇ@9(Y.7Ò‘:­tÏB[OŽT‰PÌÕ…%·µGWeÌ8¸
-eˈ6Qd…ï9ñY!Ôî&¸^P}Êî^NȾRî!©GŠ#N”̺Fa° '
-ÿ@ &~ˆY™½øî$Ì t¶ú\Ž×É,1™pÍÖÆdžȓDbGlY™v\íÁØr@JȨӅIÛ±Fnäe:^¾®'&*N¹êØfëZÉî’ª¨•ÚjYAqvP¶ëIb!õ¤µOG¬q=ŽÃÖ3õ$:¥Ô-«ù!v„ð<Píc“¨ ¶/Ç
-ؼFB8ëçvÞ8±ăäÆ¡ŸÑ©%’½h#l6ö[jø™Ps —;…ª ±hH
-3Žv,ø¼i‡]•óTc'ÏE•ò„ ¾LÞ¨†Yô*Vk‡ %—ƪm5»±+ÐDò(uï§RÅI,H€²ÉÍ!…|P±Sãd뉌b'–`^$†žê1myHU­ÍÂ,Ç4là˜×È ¶s-8æõv‹Lfº;–.¢N•lÙ½AÜ~S¼»ú}>-ÜáZ*ÚÀq$”4*ÖD~èÚu9MxÛ4ÈþÀå8­ }6
-G‘Ë^
-8¼h Çl'ÑSHäó†4óÇ(µV’r\–…D,“”ÆÊxî±6|Š˜naw”Ÿô¹“}üÀñ8wW~óT¡P£Òõ²É:uJ¾žOvÊý ¾rW¥R˜ rˆ#‹"%F6‹T"Í<Çaž;5H}9þ¢ùŒÍ>Ý…Ý$9û%Q-ÐÁ§jgÐx¢C£T\åd¨· +Y¡ãËÝÊ'Df%§f³"²ÑJ¤+æ²ðBùÁõãÌr51m)ŠuT2çSÕ•2…–žö…Q t‡øáa1¥ö<Q ¬4ZqqÎבêi0j™ý‘˜¸|
-4íæ#Â:{%…uÄÇÑ*O…8ànßažö :|Ìî™ÑçDâã&,qcx ‹
-Ðäì´R¿&Ã7XNÂX»ö΄ï¬V:ÂôÀ®Úžè
-ØÐؤ…(õ³\ÍUGf­” ”‚¹Ù½®-­g‘Y埀.À£CrF'²ßÚ]ƒäBCAž:QRÏò…ÃAÐh|¡5€
-­ ûwøŒß"bšä­f:¿¦Œ:OUS
-“7×59ÌÏJÙJâdv•]!ã8›itR€Û-›íü»‡ÍÖ;ÐñGá-²–VZwÝu«ÎZ¾é“aiË`-°|²æ¢#ÀzM‚"ë}®Äää!³£µè^k³æsÍ%F¹ ²äÔ³}9Ë5+”@¹¶´¹{³ïÊåZ^µÄ]ƒ*û,x䟙³Ô'ͳ6Yæ>/ˆ–ºC]Ä*iЙ<W¤ŒgãS#öÚâ³µFÙ6ÚÏm ½¬ŠÒåï•`ÞD
-FÈ‹ø€šñ„QÛ](Y*OÉóäD¢4?–®c2RWõ ÌæV=Š¹=¿c…ØË)ê9ŒNç³vÆr¬ÕdÙ2‡®Ù„äåDŠ‘™O.g-zO‚ƒP[âZSO-²/D~>²Çܽ§ h‘W
-Ñ‘èU“ÑW-EŽÚш2½{±Ny‰“ÕK¬ÀIMÔÅŽ"‹ï…RU"Y$‘O yûÃdɉÅÌe¹¦ŽÒåJ ‰zr±Æxþ^Ä¿¸7Vv’|¤LQ^²è8l‘$¬¤Ê‡ƒxœ;¹-³^(‘CA&dŠ6ô¸i±¹[íî;¦ ´ ð°Z&
-ÙÂëÛ>0,¬„5š…gò™‰ëràéæ†+E¥ÈŽ$Ä)èî´ $|d@¿@=DnÑI?ÈÇj‚Äå;qLjóÆj]bÒÐp³Äl*«»ÚÎPä+K#öÓˆ‘—¥6Ïîÿôì­t¶¶K¬‰Ì¾u²DÇ®°Ù†$;SChëh'ïŠ-Ïh~.SºVN>¹€Äe6Ý;v•× ʧãc…=\tÅ3”Aö‡c8Eá,|Ù±àuøfˆ= %ªË GA-† h.®н¾µd±H¹JHù©fˆïE<6·:d?”…¨!ÑãÀ%O‘@÷SœÅ1í¨Øéu,{*…2ÿð]•"ra_ÅYËΪcýƒöV”í8‘°> {Ǩð&…aÄva÷yï,²&í¡#¶Óà` ½°©é†³éV™ò"µb‰˜­lΕ¨pEჵ‰jc†gšTž¡SÇB>!ô6(1ÈB=|—Ñìò90Älj /œpcƒ€Žt…¤£ÍÇä<Ë®
-q-â,…T¨øéÖ’Ï DFûoöÊøÖýIžó\×N5ª“
-íB`¥ò#‡ 05ñè†%Êq$6±ö¸â{=a…¦¹r©ä@>¥ù³¨\ÀH‡–M1@|F°J2ÒˆNX¹´åÃ`.#
-íÁqÝ.âöS…­™žãñôR•Î–Jt2Ÿ•m:Ñ0³Í
-sŠA%Ɔ½#ú‰d!˜p ÿU
-6Uµ%Ðt…žÜë;Œ%:|RÕP|¯o÷ã¹—ù±£gÆ Ç:
-Ù)ú°Xý q°3Š*i”Wm-ã¤î’ ¥“Ò ™,)䤸hÙ'» Gj ænøêgÀ`‹„ƒÞk1l<^c©gÐɽ"‡h»M£U†úBº5ˆy ÓÁ*vXÚI
-1då @j:tܦ¦ÖJêÇ–ÃT)Ûü”ûRlcÚÊ+FÖ@ê&!¤?uᙄ % ‡õ]a%DH
-J+~I±n©”žJµ©s/fE1l£•È
-¤Í3ýáña¦Êý%Ù™œÃ´$x°/Ûø˜·Ë¼FÒ¾EKô¡+XÉ$!ß«Û/"…P=ÌŸOÂÌZDdÛÇ_Eçó…X\q´½O%1ä~sS™à‰â½¹±Š1oäÌ1\&:¨eõâó¥4ÑHPQÕ5mfg;f [Rž
-š4R€;mÅä(ZqßrÄ`áµS›JçúiJžpØw•Hç’ PÌ! BW¹Öp\QP¹¢ XT0Ëæ¡'‘®H §5.¥VÏ|fï.Ó¤Êéï\AuÉ¡ð-™Þ‹÷ P”¿Ë;.×åc/v¬1ª–šı›tÊÄŠŽ*XYËü¦Ãt€„sÅ
-Q/ÂÉN‰è\¨¥@^«”ˆ©=pØa¨Z቞ :™™ë¡=aCbxÃ%JŒb¶âø˜IcËXA‚í|<E÷kÐ>NqÅåX{\;]ˆÖ'¡â 9^ÎcÞ\šœõÐ_ü¡gë‘Žy)09"¦-_¦[ŽXǦßrÛ#€Ý¥gˆNxÍ,³Xö*
-ivY½6ÓXÇY9O5ð9$DÜ!ûTÚþ`°³J(z4«€ˆ¡¯«%æ¢D¢|bëÌJ@ýêëÈ"
- ÕÀNYÚEzLßWÌÀrP ƒI»`
-u…Äv "¼¦u~¥Ž;r1Ô¼öèpÖRëêµI •JÑ•<_óAµ –Ø9wõ­éÈÓùÍ•ùÅᘞ‹<±1|5¦Ä¢R]O%©’í“|@d£¼Š«ö'9HÃÂ
-Ü™X_É9„¯Y?/¢!ÂA"£ È^YŒ!û ²c†ŸÚ&G¦ŽQ®#„ÏϾºaŠr"ÚLŒ0F¦`ÏÄÓ³ãèÙßêÅž (”H†Þ•öÚ~º/uÓC+Ó—SL\Ka‰¸ÍŽWЪ±‚5
-àgé?ä Ž‡+S£*œœú¢ á­ ŠÓŽÌä
-e”(ci‰ÃL³©è^«äˆ«ä´ãÝ“Ò
-œEÅp„J •‚t[U1$¢<x¢R —¢bXFÅ
-Á–o¹,4¤bI¥€> ¨žR1¥,æEr¨ SLÓ³ìî,ô¦bN¥€K¡\~L9ÈþĶð '’]Ɖ*¤>…#//ÅÈ:M<=Ù3vMÌõ¤®B¨sUÞ'›ÒDk•Æ'z¡'h¥‰OB,>
-Ú9dYH|¢·=«@iþ©8–çªxd›qM—B!2–øÀOuô‹¿ ›L;¸êöĆ5a¡_ßËë#Çe4Ç1…N4QDL´
-k̺Ög˱¡Nol]-Öb»þÍgâQÓú®â8õOô­å–¿Tz¨K}iºÃ>tf͈þµù'P—‡}Ä£¿v.÷šLò†¯ù¦!õÿQW;ÄX„}ð#ß&ŸVÕ\ݺ£Éºî?«N®:®ªE.Â'WÑ[«N>®ªuçšáõ¾¥zÈà>#û×7ñùPu—¼ urøWKæÆ3MÇ®jÑmD]Û†ºÁúôÁWRMgUG\UüÿŽ !
-©¤N’ILI„
-Øhüiì4ÆûÃöÛß=µ«©}t¾MÔñ»%Qô/€ÝÞûÇdF®…B£L*¯ôÔQ_þ®ýLÌI@~i@Ô°°!¤oÞò ï"Ös2%þ¶R±?P¾føf—Lèú(…ÿÝÌR‡”’7|ñwW~së<ð)]ßѾarõš’aàÚëPù=1å.fhŸÈƒö«íÁp2¶ IùUÓAò–0’ÿêÚÕ¹¥û“q×h »òƒdR0‰Rjî7\Z/
-P³%Yù*ÖaEé|U*Í Ÿ6w;òüx¡ý¬·úç.<©ËUÚ^¸ÔŸ(T|±µ
-Œ7/C½RÏh·Û,ïï¤
-hÛÝÄ"à¿èúþ·×·v í˨tQjÅáÃÈÿmµÆ;òXF*‹¡^ÂM]åd€ÅœÅ0ä%sÄÿ!ubOî)á’ 5ô_N‡øoºL’JŸE¢©ôúÄfž¥”åaP*ÐŽ²1áÝnÚ}¼YÔôg¨ô?ÅÐs.;S$¨|¼¯¡É{›™N#Òie62yv“ hhz
-X96lPª
-ÚÚ fàþø׌ø"9Ø?,6F
-
-Ó£¬}LG…¬Mæ—ô7#&|Nݹð™QÇŸ¢õ‡ügÅÁïzÀþ#=ÿ~3墧ªÀ»å˜syØïË/ÿÑèâ?¾ãý#zxgÝô£åÑAÙ¦‡YæÐMg0>õós·}/Q-÷•=—ÀCw!…÷äþóx8覵¦DÁgoÉ*ý¯N-÷6Etkj"·ÐØ虿£øû›õ{
-L”„€ ~àÁ9°R”pmØï¡Ñ–
-axÞ2ðœpOöåq7Ü‚Gz~=FŸ¨1r<)uÃÝÿÃÕNo,·zýÞø;ã|[&È}'l5å­¢Ó°åQW}5]Lȇ„ùÐì,6G§l# Jû;€B¯VMÏ”ï$Løú® ƒ¯ÈÙæ{2
-MÈÿ#â !éÿFiÈèø Gí¡OÕƒbPƒÎ„ øŽï,ÅŠÔ±ÒQÔôódÐö"kÔH Œó*VšïÔ˜'"Aúr”.‚¶…$
-6|lȸA?v°…e9#5 vª:Æm\” ½¼¿¥¦Ûí€M·ð“¡­…÷Ä À¶HùoÉŠ4Q;‹%„8iõ/Œ«o;•b†a4'Qöh4T{>cÃ.A zõä4¨ÀÑ1Œ‰ô”:ZŽ]¹ª—róZãrÞÔ†„‚m-ðÒb* ‹…jæ¤ê™= ú™ rw© 7] €Ã8+ÌQ›¿ËÊ›jGc†Æ&}0´Å°‰†çÁ8Ýé”ç¡©¹2têàónàöKqªÀ6º4Ôǵ.­t¶Ãö2_¤¶Â]¥”­lº MBÙp‡&ŸºÞ E_ÃÏÜñV¯ §‡Ú…×|ƒI{ÎYoó—Ëêw¶B‘ÃF_¾íþò'j{Ôo§£Ö¦=P½ ÚŒ{}ÓÛE¥gÕÉõhƒ(ÔOb(…‘¦¬ÑŒmKˆmÔIËX•H}›_ƒÔ¢…R·<eÌ û"ÃüA4Ðï<Úôù6ò̸,§H•Á˜ÄVv©Ÿ'‰2 -îÜ,ß5b†¹ÝªÖŒ8³šÇCÛCËEî ŠSRŒžÛv£@…Ùƒˆ-Àù=ƒÇ”Evw Ç‚xÅü>&:È(ß §•Ú#Ê
--#…ªH§Ã~Ï‹WŸéÌýA»?q~vâå óIìÖèBÛ,訌õî0ÏD>`ªRÆö; /=µÎo”á
-r#YÝh£
-^iªsÙÇLF%iR€ÃôÕqüO6q3Ò¬ð¦º÷•®Õâ­Ø+’®ck ävÌî7 ØÜ<èf7xs`8©–ºFdfxóg¥û1±H–ÈÎðd£8‰?¨{jûý»o·õÛ·û
-¨µ¨µhðì|žíƒ¬.ÅY´D×#þµß)'ÞžLYǽÞ•Ø‘W
-‚¼†¼$>fky¥`È+C^)(òJìÈ+Ù‘7Mv”Ûº€¿’Ó¼ÿÌí(Ì1~àDáœ(0 °
-{ P{8aÃ^ŽÑ9;¢û5¶á¢wË ˆÎ9–K÷Þ .®sAqÃqÝoò5ѹ@Œšs`9[kÅ•a¨áòwyà‹á\
-vôõFJC_’™ak}úò>è+C_!(ú
-ìè+A_!ú
-ÐW„¾}õ‹yü0R€½B ìÙ±W´c¯7NŠözëÒb0ìrÚÇ6ƒ!¯yEväƒ ¯yÅ@È+B^‘‚¼ÚeT~ø(À]ѻƑüþà- /ØÁÎâ}®•]nJãh,¹ÝÚ+™“½âzMŽ)›¥æóÑBcc·‰lˆ‹ÿì¬ìŒ¥ÉZéäŸÊZÿþ‹DO•Hde9‰Ä¢¡êèë?xImrG9ÛçÁ *üÙÜÍ?¼ôÁ‹çðFÛ|½´Ó­£yÄzð½´sõð‘
-ÄAÕÂ5Ot/[Œí¾‘݈.…bêòâpDZ«2yJ/Æ[‹ç÷¤A“Bƒ¶ÒÜÂÂÕ—cÉ`2¾o·_¸Z)wBp´ö­°8×OIƒrµçöuÐPlIÈÞVÉkÍÞv¸z]¹%ïjíãR(_´bà³ìе§Ëïkú §ËË`_ì»**W™W4(¿²ÛªÚwõNy¨\ÂAnTÊ>dÇéËUÒ ¡˜ò0Ú;°†u š;æÖhƒ¶•¯þ†<èqueá#79BƒifV]•j´A÷¶…ÿ…<h6q›\ï_“k™<m&Vv®WdÒZ¹Z±ºE4·°Ø¼RÖ)ƒÞ>pµ‡½s4(Ä1'*©ë±·ÌU“8h=59¦ºÜ}Ù9!
-Ö¢lD2Š::]„î¸
-uÐÇÇÝñ5eÐû,÷pr‘p
-Fц=>yùvSÙX!ú0NŸQ}?M.ÝЭqg`âZOvÊÝ®Z&Zý¶š£ ZØ‹\s mP9:®£Aá(š¬‰l+“ë»,4é"š“…õÄ×Éû#tSqú´r¾¨úV\± *½.qGÇÒ”ê}ay+¾gp‘´¢¾,ÀAWÝì¡‘ŽÜ/äj`ÐÕ%Sï‡EmÐíx5…E£è
-|K`k­A._[äá[ÒD÷^G¹ÁrNDTIz?Pò'{åíx\à·¾äÉo÷—";'×Õ3ë­M‹î×÷TòׇÜC#™”&”·¹Çã­É2é-ÐÇ¢‡‡Ï§kù«Uâ×…ã/|"¾}÷
-T[`ç<âú˜mØÛ¯ƒÖ#}Ph瘃Š¶A ÀÞ‡úÿ½1l½oð>h¶¹ˆƒ÷lç´³´´` Š´kP(+m
->€A‹`6w~¥ô­¦éÉ¢ÍûØÞÖV5†ý8£¥1Ÿéî2«ñéÒ‡ÑD_®5aî@ŠÅÀ(ð :ØŒ}f'æ
-*É­–¸‡ƒ|ýòü\‚æÃd…4%Ë£MJõžT¦·°–BÿhðÔ|.O òÆÄ9Òù‰@Gÿœãv5a}ÛüaÃo}àh%É7ï·¯.Žüö/u¤ã‹fÓØÖ‡FA+\_ñûþÕ›~~K*°<:»bFvÜâ#‹{^þ¸™³,ÈjT9äåÅå½Y oÂ=C‚»¾/A!ßRqݧDb>`Ê©“õTïË#|
-ÅŒu%–Ъȼý65B‚bʦz_IÛ0Ý$CžsÝÓô’]WÇ·i«~ÿA Àä@€y^‹¡Ié3i,)ôÀd¾ Þ™êZÂêcvº“£ ⪃Š|¹f65žìÞËT5¥ý£ï•vHáF‹–eØN]îë\9¢ ”,Gxjg™×arÓ=¯µšÜo BéKñ€Œ°©Rœ …ymÉ[a„6Ä´^Á¤À×—Š'¯ee=u–šµfD•–`ò×±ýíÔí\Õ-– (†b~ûûV˜Ì¬=é´&ߊx ®/ã;¥bÔCVZóaPéÀx¯ ´)íX4kí²’(;è£Ò=N–Y÷/óSéXéó­ ˜¢ÊÙU(6Ege¹h^&·twf(3-ÊJ6œg茪ÕM1‹×ÎbvŽp‘º_ËôÃ¥›ÛU»áºI¥:³vœÜoi|Ñ‹¯)A¦ƒ—=Võ:£é
-{NK|jª|Ù{˜”ÊÚy,:Û1*WÕe%tØÍ>7l4M n÷é;«±@Ûi•ÊB1†©a7ñÑ,qm*~\€e"vÝÒ˜ˆS·ô‰Ù;,Ö˜0u»ˆ*Ý<fƒÙäÚ±¤-ÈÈÀý5tÈ}nÓ”¶ã•q°(N}hàÖ©: ‰}P˜aDOš’~*ê1©y0
- +ÝÀ²“øæ‘8>Wþ
- ×Îæ@/‡NHãJx¾v± ?Ñ®[²¹lÅí˘|A¶Uwn|ìž `tèv¸| » £0
-v&ÌÌрЌÎNû— …ö/gæhÈ~Aý̬S ^æpöŠúy¤ípÝñeFÇ!›.€q~û–­sTwƒíèÐåqÃÃBõ‰,£“÷­GP×”„Õ_!3ÚSg8’ÛÉÀdC166 :óÔê½™¬'ƒÎfŽ~€q:N“?{e&çê}%ˆ)Pp ôã£È1Î&íðöLÛ‹&bè‡N9þ*9~š€:ãgèÌîÈJ¤²Pãc×sÓïï?H²0 Åm,F’…!w²±Þ“ùèM»Ê:|°S!ší.Î.Å®gviY»?»~M•…Á¤Ø5ƒ~OêÏ®5ú™FR6ìHðð'—†0$<å…Vä‹Éù§–†7^Ne=tJ‹èÆ1¨ë3û:¡m‰ ”AROß ±à£Q2kº «,çg¡îµ¸äçU``ÜÄ ê.Ñtbò #{žRp¸®ž+ÿp:ç”èDŠaDˆU0¥ FÚ-«X
-ù†Ñ“ÒÃHcˆ\³Ûû·ÎXz(Yˆ«tóS´-ììÃG´`òÅûôv6ž‰Ýcñ'c*†ídÀ¾“Žà[šVb”Óà[#2‡ñš”ãtªXU\OÖ‚Â ãáùrñóÅ<¼Œ¥ 3ã‘ÕÂê#Ê¡óΠ Åæ“CçAŠÍ'‡Î;ƒÎq{ÃÔ9tÞt¶lÁrè¼3èìÙ‚ÓçÐygÐ9³§Í¡óΠ Åæ“CçAçÈœ:‡Î;ƒNÏ}›9‡Î;ƒÎÊá-‡.é™AGõÌ¡óΠÃ|žÉô´·ƒÑk§gí£ÏX§dZ¯§KŠ_àöf+ÎHŠr±ÛȬžüÓ%ŸXrvO/€ÓiXrêÖ-Gýâ”Xáä̲±‡…tÏ– – '«+—ý;KÍi}fÞœIû®H:Öõ¥¦%2äì‡9§„e>ú¸Á<àä›2‡üÉ>¾c6„½M)T³öK ¢§'û…‚8,¾¯ÕYÜƶ¥­b1ŸQj>K 
-B‹´¿MHÁ AuñLžÞ*ë±a%‘Iæ§Ñu~Æ
-ôÄ~†,0GßÝØ[`Ïã³9[1ðòÀ|s‡Ž†x ¼Ç¤ÆÛ1ÉžZˆ<ð`RôxSdÚ¿â"iÿ¦‰"py0}÷Ï+Ï7'†ྸïA˜³()2Ø™EÎ<¢êƒCŒœ33%ÄèG!I¾
-bvÇo^q†ÖÃL¿L.6ûeÏ7Q'vªßÒ?_ŽÒ…Õ•áX™¼öu·‰Ôí}ÔA>u¹v=Œ=¢*&”n£Kv¯uð.nY¬ëXÃ3â™*ǺCÍCOqó£}0ˆYiB p0äÈâúLpxi.{þWž,xùÆíz¤ð ¶Òv=rß/+Ö¡EÒ1ùAq[ø¥Çyd Ù¹=#Š!=™M“bÉø¢nÚô±‡q|i.pZvLÉAÄ
-'o÷Ž<<W(7.ˆ§>%°û>w¹ñ’6%1˜óÊ° ä‘¡F§[iqÓÀÉî‘ÙæT×ÝâbqäcÓ±xd¶ùCç (SD©÷ÈPcàßæä‘K[ž=‚è€Á#bIC›Ù#³‹3x{d°ŒT¿ü¼<2†&Pz=9À&Ç„ÉlQ;WêÚYÄ?nœEYÎ#'qû’÷Ž`54-—ÉÈ©3:dˆœ ù§¡m&fNƒ±£^7‡±¦yßb!]˜96Sþ¨fñN¯çÊ«£¤Ø3…ýDPrý’*
-õ⺥#TŒ¼°ì8IÏâÞYDAG°_ê§ïó·#ûùçÇtÿØÌùpz´##nÞùpÁ"T§Í‡sÆõ5ç’=â̇›%[=N…8§|8#Ùž7ï|8Ý£8¯37J>é–€¥¹çÃ7·x…ZN•ç²Å(Ç:З2‡”Ž•Ýšê“/Æé¸d˜®[²ÄDº¢$¦£ýËÙÓë!bŒ„dèÇ}­Eà^ØÃxžr6P‰Ÿ9“ öã{©ïñ|ééóI'Ð æ CÂQLb @†"´Y`#f¾¶ì¸!»óÆiv2¬Þ_1PŽQÉ°zUt^Aûev2¼Íå6`ÔO
-:›_FêýÇ2Rù¨3éfªŒT9z”
-Äï(© Ÿ9ðMÐ v22S?,æ“oF*û5Ð.-ç ÄãÒÔ AF=¤,"4GY‹ûl#Sá,>4['H*œ¡ÁÒüƒóI…à ÆäÏ™..˜ßrÚT8»rN©p^è’v^©pšW!Ót¦T8Ó?Ævåç7ÂS%rKµHL‘Wg-RåôQ´ŽÎ¨1Ž»È°3ÊE†Áu˜–j¿dxÚÔ†ݨãÛE8À¸ºAŠ1ˆ,¯Ž #œÂÁðŽjâA÷iUãˆèl+ž¾{εÁKªòuóqó¢òÆ—K™ƒëÊB÷ YÙN6/B±ÍáS2þ®Ÿ‚–ËåÚÍ}­#,oE+š8Bî^ÌŸ|åÎ;+oã¹XŽrq W·§¶U{
-ØÖZùî––ìvCMvS&Ok¼cP<ÃŽ«q+G”As ‹ùóÄ-ÙÍ3Ãn$zeØÕ¾\R]Þo¥_h¹X G.–£Ÿ$`ƒÚSÀÔåü’UêÕ™ìK\ö)Yg Ï »hMNSåj‡§”As ±ìq剞a÷è•ì¶˜£Z?[øBÖã‹ôŽdZ†Ý¹G.áñá}Ðjõ²fóÀƒaµ Œ¿ô\¼ÉÊfƾû”vb™óngTa~ZYÛeè1¹6W-Ñ Ö|›u*¢æŽ%N±|ä²W̽oÈ­#L~eWJX'DšÜ¯ p¢§ölËœglE¿ìš°ÿ”È1W`ReŸxRÆ,?Õ?æjªJr„)ÅB¬N^ßJr¬^8tíÙ\à4´‹yÿ¸¾ Eä|½pÓ‘cYŸQ÷5V×oJ¾µ˜Îš+`M‰èU`¨Ç>%è¾ñ¬,I
-wª
-[§ïî|¢ÓwVAçs.ÓÕÒ³L›g4TsžÑPÍàÒŽœù8%ñÙó ÖAˆF/ÓöãSkõ¢Ù•ýÌ#Ÿ3ŠÍL¨oÞkã>‘]¨³À‰µxž¸3±–pE1x¶é-¥Ùo„•é+4<[Wc!LvQAù­»â JR½W¯j ­%œ‰ à™O‘&§%N¡¾d­Qí™r5œ&¡u5¿
-†WCÖDOÚWߦ¨Së Õ_Ù]_ Í¡Æë–â©N«Q?3åsu¬\WO»*{rºý†CÖT‹@%2øðBÝkÅ•O´üᳬx½ÆÝlGäF…;ψf2ô«p nõ 3—E'V¸›¶R^0ò¡WÊ›K>ge.yIŒîX|ã³W¸sÖ{uÖ¸Ûb©pÇz«9 Ra*í—EטâÞQØÙ#C.,¦æ
-(ï”3†)éfJ³¸/7s»ÚvÌöéý–vˆyÛîìJ˜è9eæƒi†WtÆL1„SrÆ*¼•ß©–Ó«.Å°œÆ&L»µ‰É>»e(÷ˆÝwá_‘î•zSƒO¹G‚>VNû˜EÌWS®$?ˆ±ç¸–Óλù¦Öa\ñAìµgÏq…EòÜ"œõ̘éyÇ›S8xÜAdÑ/—©=®’Æ3Ò̺eEÙæcZŠÞÅvþ¶ò¥v{QùRUvv÷r¡X¹”n—Ë¥Ì! ãlŽ ÑëÛ§§{—uØ.Gý;r>ÜFäÎÊœÒ|¶Ü¿³µS•lùpÉõö - Oz]‰mD†¤AC1˜°EÏýS£µN†:(W»(QÍ-X9búî۳Ğ<­¯±AuØÖ’ª9(–šŠ!
-Ž`×Àxæ
-xŸZ”^-kžEù¨õ+g(Êç˜R#{o?Å#B.™Rƒº~ÖHUý¦ºŠP×oŠX¸)êúQ ¦Wõ›ÇÝP°®ßìѶ,uý|ã”æR×Ï»ªóÝP>uýX­®Ÿ•Žèy7ÔŒuý¼Ca6Ç<êúy+줢iêú9—k¯êGô)MQ×Ï;ž)äïÐeªëç½´Pl>uýæQÄ¿®Ÿ÷‚t)6s]?#áÎëVóÙëúyGœ‘s§L?ÂCOÌä#xͳ¶–Ùëú‘rÛ,ª›)+Í· ë T¬uý¼M]CSšµ®ŸmrU¿àõøæó>u]?ïª~³Ôãc?P¡çŒ«ëç†2RçQ×O?P¡TõÃrxgMOñ¨êg‹»˜¡®ŸçQd’¾/Áêú\ #;UΣ®ŸwU¿ùd¥Õ¼×¼€ñÍT×Ïû Ë•+:e]?ïª~3Ôã P$Ø«ßÌ·x˜UýæRÏW‰gÈæp×õcÌ{ FÛÎT×÷€])Š2S]?<fÙ]Õoʬ´€ñ“çP×Ïó¼¹ h.uý¼Íè õø¦¯Õm«Ç72$Wõ›®_P[št{ƒ»®_ R|ήœ7êÌP×Ï»ªŸGæc º~3ó1¦º~ÞjŽ…c³ÕõsÌËaUOsk©®ß¾¾)êúÑza¼½±®Ÿ_ÎÈ|êúy÷‚|JGt{Àœ'JU¿
-Õ ÝßZ²–fIÛùåµ¥¡­^—>®v2ã•
-à0Ål+Sª
-{;àéÑÁÎóåÅñî^îé8Y”6·kÅÅóNùá`a­T(Ý&«a£Kݶê×qxÂOVR±I-¾·¿ÏW¿®m”{r†‡›3¨¶ß>Š^nÞV…ǽNŠËÈ«PÆ/ˆˆUø5˜›Ã7qû2šFÇ5o_XFÆ—‘² ô@lg~®%ÑO@ÌçàçΪ~Êzì¦ÐßââÆÆSí1qwÈ=ÝyÙYoD0ïC|¢)nðd¾XÁ_”c-óE
-qÉwB1óUõ²ùl¾à°«‹û¯Æ‹ãZ)_oDeóYk\ÿšn£ÈF>^Å_Ö8ø,£‹阃 Kïü^®!ÀŸ‚ÖwëkÌìû,©5iøUøsÕd8‹
-—X,pB¿ ¤X5UL|ÝYç®q”,Sc©ÈÂt[¯:ç=f=’úC–8sÖ#ŸYP7’—ëJnë2{¼›èÄ5jJ|iFþ‚5ß »ïÆŠí^_?Yè%$&7céײ•½M¨ ^kØ-T¾ìóÚWÚ'’þWÿRÐÿšÜ}E¤.Tò£+vT“gX®ìæ(†‘½I•¬dh;»‚I÷;u´h¿2‘OOˆd祥«càÁ»fJ
-ßg’Õ«›=Ê{=’Yâ㨼&ªƒ ~æW4Š—£Í,êÚ4ún
-Gð×ãØ‚{H“Iú ÂË™Unê+Qëf(ù¢ðÅ­=K~Ù\ÐëÊ"¶Œ«và Gôhñí»0ÑlÝyK‚žÁ÷%{ûÅR’ìE‹Â
-RØéÐ]ë¹ò¦)þ次v¡Ïû+¾ýËcÚFd6± ÎÛçV°.b‘'£‹MÁê"ÞZ<¿§ìd‚T€Éž³°w‘šr¦-ö”Xui*(Ž±,ƒ£t±)ØÚ¥ès b*ÅØ£9y­rú±qMÈ goLJbô™™¬¡4<×ï^9,;Î÷3+ؤâú©ãî¤
-­‡2»û<9è kJ·{Ñý߸2lOÞ»ƒqx-œÙm–÷÷ R¥Ûvº 9õ“µ+ºËO÷É4Ý:¬áRª<ëo{ ç›rå™»ÝrºïâÞ&t߇b‘äÖÛF$Öå#©×oMø³¦)mšýæð kÊûP;s+ •®RšT“GëÊá~¤i©öHõ•ú­êGåKM&üîž´«l'_ïJOÇB3¸³?Û«š…†Œ»›rþ¼é=¶åI!ý~¼Ilgá2®à¬‚Y¬2‘Tbg>=ˆ$ϢǑd;} _lGVwÅN$ut³YùXP ¦ Ku“Ôv˜YëúÆ× "=Z$ÐÆý²…lG»½EB/½ï}ÌqñtF³»òc\ÿë[wE§8F/èçZcO3×à±]#«w¬Ä±aTîsVs{ò¸h ±¬8è`±¼i¼(¯b¬éÑ„EÖ @—/»Æ‹Þ|ñU7Ýê›+Ö3|äz9…¹#¾âc×÷ÓPXVÍ=’É ‚¿MÀ‹sýB=~žîX}?¢8ð¬†Dõ
-`aÝÂ6hf[µQ@¾IÐè$-õàcü¼DÝ®h›“9½MIÀ¿°±€ü`€4·U‹c£ Œÿ VÉÈKk/ƒåËÚF5ûÍ$¾¸n
-ÅQÛ0Ÿ7
-Y‘φ㧻Ç'ÇÕpV— ´Š›·§/ óü8
-‹à¥œ” ¿‡DžKù¼õ¨¹|:+ÃbGÿ+ä‹ÚWù|šËòaW/åÐ3ø¨˜–²9ðU^­À oŽ×á9Ð^ á,'¦‹°ã,è°
-¼‚}»çƒf V[³è!ü_8Çš“X„€9Áb y)œåy0˜½
-ðkØH*Š ÐFëFJgÅ<€"z»FÌçÒ"j‡æ´ox!-D®è‘”CS¶€ŸO‹"k^ÐÖƒ‹Á¼x´|þx@…´PäÑ3>ˆP’¶EÐ-ìD( õfQû-ré<ø"Ëñ›Ê!øö—å8кˆ&ãø[<ì ~“
- 9mDc=+ä
-œ;ø# ñ<Ý°'€å‰íö Ð"W€­
-Ö^IYïc­
-0000000016 00000 n
-0000019955 00000 n
-0000000004 00000 f
-0000000006 00000 f
-0000020779 00000 n
-0000000007 00000 f
-0000000008 00000 f
-0000000009 00000 f
-0000000010 00000 f
-0000000011 00000 f
-0000000012 00000 f
-0000000013 00000 f
-0000000014 00000 f
-0000000015 00000 f
-0000000019 00000 f
-0000020006 00000 n
-0000020638 00000 n
-0000020669 00000 n
-0000000020 00000 f
-0000000021 00000 f
-0000000022 00000 f
-0000000023 00000 f
-0000000024 00000 f
-0000000025 00000 f
-0000000026 00000 f
-0000000027 00000 f
-0000000028 00000 f
-0000000029 00000 f
-0000000030 00000 f
-0000000031 00000 f
-0000000032 00000 f
-0000000033 00000 f
-0000000034 00000 f
-0000000035 00000 f
-0000000036 00000 f
-0000000037 00000 f
-0000000041 00000 f
-0000020077 00000 n
-0000020522 00000 n
-0000020553 00000 n
-0000000042 00000 f
-0000000043 00000 f
-0000000044 00000 f
-0000000045 00000 f
-0000000046 00000 f
-0000000047 00000 f
-0000000048 00000 f
-0000000049 00000 f
-0000000050 00000 f
-0000000051 00000 f
-0000000052 00000 f
-0000000053 00000 f
-0000000054 00000 f
-0000000055 00000 f
-0000000056 00000 f
-0000000057 00000 f
-0000000058 00000 f
-0000000059 00000 f
-0000000063 00001 f
-0000020148 00000 n
-0000020406 00000 n
-0000020437 00000 n
-0000000064 00000 f
-0000000065 00000 f
-0000000066 00000 f
-0000000067 00000 f
-0000000068 00001 f
-0000000069 00000 f
-0000000070 00000 f
-0000000071 00000 f
-0000000080 00000 f
-0000023371 00000 n
-0000023445 00000 n
-0000023685 00000 n
-0000024716 00000 n
-0000035850 00000 n
-0000101438 00000 n
-0000167026 00000 n
-0000232614 00000 n
-0000000000 00001 f
-0000020754 00000 n
-0000020219 00000 n
-0000020290 00000 n
-0000020321 00000 n
-0000022308 00000 n
-0000022421 00000 n
-0000022456 00000 n
-0000021142 00000 n
-0000285780 00000 n
-0000022810 00000 n
-0000022858 00000 n
-0000022054 00000 n
-0000000190 00000 n
-trailer <</Size 94/Root 1 0 R/Info 89 0 R/ID[<E860A29C0F544C9DAF309FDA979179E1><879DB089327A454292F4CFF94C60DAE4>]>> startxref 285961 %%EOF \ No newline at end of file
diff --git a/doc/arm/libdns.xml b/doc/arm/libdns.xml
deleted file mode 100644
index eded111a..00000000
--- a/doc/arm/libdns.xml
+++ /dev/null
@@ -1,523 +0,0 @@
-<!--
- - Copyright (C) 2010, 2014-2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
-<!-- Converted by db4-upgrade version 1.0 -->
-<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="bind9.library"><info><title>BIND 9 DNS Library Support</title></info>
-
- <para>This version of BIND 9 "exports" its internal libraries so
- that they can be used by third-party applications more easily (we
- call them "export" libraries in this document). In addition to
- all major DNS-related APIs BIND 9 is currently using, the export
- libraries provide the following features:</para>
- <itemizedlist>
- <listitem>
- <para>The newly created "DNS client" module. This is a higher
- level API that provides an interface to name resolution,
- single DNS transaction with a particular server, and dynamic
- update. Regarding name resolution, it supports advanced
- features such as DNSSEC validation and caching. This module
- supports both synchronous and asynchronous mode.</para>
- </listitem>
- <listitem>
- <para>The new "IRS" (Information Retrieval System) library.
- It provides an interface to parse the traditional resolv.conf
- file and more advanced, DNS-specific configuration file for
- the rest of this package (see the description for the
- dns.conf file below).</para>
- </listitem>
- <listitem>
- <para>As part of the IRS library, newly implemented standard
- address-name mapping functions, getaddrinfo() and
- getnameinfo(), are provided. They use the DNSSEC-aware
- validating resolver backend, and could use other advanced
- features of the BIND 9 libraries such as caching. The
- getaddrinfo() function resolves both A and AAAA RRs
- concurrently (when the address family is unspecified).</para>
- </listitem>
- <listitem>
- <para>An experimental framework to support other event
- libraries than BIND 9's internal event task system.</para>
- </listitem>
- </itemizedlist>
- <section><info><title>Prerequisite</title></info>
-
- <para>GNU make is required to build the export libraries (other
- part of BIND 9 can still be built with other types of make). In
- the reminder of this document, "make" means GNU make. Note that
- in some platforms you may need to invoke a different command name
- than "make" (e.g. "gmake") to indicate it's GNU make.</para>
- </section>
- <section><info><title>Compilation</title></info>
-
- <screen>
-$ <userinput>./configure --enable-exportlib <replaceable>[other flags]</replaceable></userinput>
-$ <userinput>make</userinput>
-</screen>
- <para>
- This will create (in addition to usual BIND 9 programs) and a
- separate set of libraries under the lib/export directory. For
- example, <filename>lib/export/dns/libdns.a</filename> is the archive file of the
- export version of the BIND 9 DNS library. Sample application
- programs using the libraries will also be built under the
- lib/export/samples directory (see below).</para>
- </section>
- <section><info><title>Installation</title></info>
-
- <screen>
-$ <userinput>cd lib/export</userinput>
-$ <userinput>make install</userinput>
-</screen>
- <para>
- This will install library object files under the directory
- specified by the --with-export-libdir configure option (default:
- EPREFIX/lib/bind9), and header files under the directory
- specified by the --with-export-includedir configure option
- (default: PREFIX/include/bind9).
- Root privilege is normally required.
- "<command>make install</command>" at the top directory will do the
- same.
- </para>
- <para>
- To see how to build your own
- application after the installation, see
- <filename>lib/export/samples/Makefile-postinstall.in</filename>.</para>
- </section>
- <section><info><title>Known Defects/Restrictions</title></info>
-
- <itemizedlist>
- <listitem>
-<!-- TODO: what about AIX? -->
- <para>Currently, win32 is not supported for the export
- library. (Normal BIND 9 application can be built as
- before).</para>
- </listitem>
- <listitem>
- <para>The "fixed" RRset order is not (currently) supported in
- the export library. If you want to use "fixed" RRset order
- for, e.g. <command>named</command> while still building the
- export library even without the fixed order support, build
- them separately:
- <screen>
-$ <userinput>./configure --enable-fixed-rrset <replaceable>[other flags, but not --enable-exportlib]</replaceable></userinput>
-$ <userinput>make</userinput>
-$ <userinput>./configure --enable-exportlib <replaceable>[other flags, but not --enable-fixed-rrset]</replaceable></userinput>
-$ <userinput>cd lib/export</userinput>
-$ <userinput>make</userinput>
-</screen>
- </para>
- </listitem>
- <listitem>
- <para>The client module and the IRS library currently do not
- support DNSSEC validation using DLV (the underlying modules
- can handle it, but there is no tunable interface to enable
- the feature).</para>
- </listitem>
- <listitem>
- <para>RFC 5011 is not supported in the validating stub
- resolver of the export library. In fact, it is not clear
- whether it should: trust anchors would be a system-wide
- configuration which would be managed by an administrator,
- while the stub resolver will be used by ordinary applications
- run by a normal user.</para>
- </listitem>
- <listitem>
- <para>Not all common <filename>/etc/resolv.conf</filename>
- options are supported
- in the IRS library. The only available options in this
- version are "debug" and "ndots".</para>
- </listitem>
- </itemizedlist>
- </section>
- <section><info><title>The dns.conf File</title></info>
-
- <para>The IRS library supports an "advanced" configuration file
- related to the DNS library for configuration parameters that
- would be beyond the capability of the
- <filename>resolv.conf</filename> file.
- Specifically, it is intended to provide DNSSEC related
- configuration parameters. By default the path to this
- configuration file is <filename>/etc/dns.conf</filename>.
- This module is very
- experimental and the configuration syntax or library interfaces
- may change in future versions. Currently, only the
- <command>trusted-keys</command>
- statement is supported, whose syntax is the same as the same name
- of statement for <filename>named.conf</filename>. (See
- <xref linkend="trusted-keys"/> for details.)</para>
- </section>
- <section><info><title>Sample Applications</title></info>
-
- <para>Some sample application programs using this API are
- provided for reference. The following is a brief description of
- these applications.
- </para>
- <section><info><title>sample: a simple stub resolver utility</title></info>
-
- <para>
- It sends a query of a given name (of a given optional RR type) to a
- specified recursive server, and prints the result as a list of
- RRs. It can also act as a validating stub resolver if a trust
- anchor is given via a set of command line options.</para>
- <para>
- Usage: sample [options] server_address hostname
- </para>
- <para>
- Options and Arguments:
- </para>
- <variablelist>
- <varlistentry>
- <term>
- -t RRtype
- </term>
- <listitem><para>
- specify the RR type of the query. The default is the A RR.
- </para></listitem>
- </varlistentry>
- <varlistentry>
- <term>
- [-a algorithm] [-e] -k keyname -K keystring
- </term>
- <listitem><para>
- specify a command-line DNS key to validate the answer. For
- example, to specify the following DNSKEY of example.com:
-<literallayout>
- example.com. 3600 IN DNSKEY 257 3 5 xxx
-</literallayout>
- specify the options as follows:
-<screen>
-<userinput>
- -e -k example.com -K "xxx"
-</userinput>
-</screen>
- -e means that this key is a zone's "key signing key" (as known
- as "secure Entry point").
- When -a is omitted rsasha1 will be used by default.
- </para></listitem>
- </varlistentry>
- <varlistentry>
- <term>
- -s domain:alt_server_address
- </term>
- <listitem><para>
- specify a separate recursive server address for the specific
- "domain". Example: -s example.com:2001:db8::1234
- </para></listitem>
- </varlistentry>
- <varlistentry>
- <term>server_address</term>
- <listitem><para>
- an IP(v4/v6) address of the recursive server to which queries
- are sent.
- </para></listitem>
- </varlistentry>
- <varlistentry>
- <term>hostname</term>
- <listitem><para>
- the domain name for the query
- </para></listitem>
- </varlistentry>
- </variablelist>
- </section>
- <section><info><title>sample-async: a simple stub resolver, working asynchronously</title></info>
-
- <para>
- Similar to "sample", but accepts a list
- of (query) domain names as a separate file and resolves the names
- asynchronously.</para>
- <para>
- Usage: sample-async [-s server_address] [-t RR_type] input_file</para>
- <para>
- Options and Arguments:
- </para>
- <variablelist>
- <varlistentry>
- <term>
- -s server_address
- </term>
- <listitem>
- an IPv4 address of the recursive server to which queries are sent.
- (IPv6 addresses are not supported in this implementation)
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- -t RR_type
- </term>
- <listitem>
- specify the RR type of the queries. The default is the A
- RR.
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- input_file
- </term>
- <listitem>
- a list of domain names to be resolved. each line
- consists of a single domain name. Example:
- <literallayout>
- www.example.com
- mx.example.net
- ns.xxx.example
-</literallayout>
- </listitem>
- </varlistentry>
- </variablelist>
- </section>
- <section><info><title>sample-request: a simple DNS transaction client</title></info>
-
- <para>
- It sends a query to a specified server, and
- prints the response with minimal processing. It doesn't act as a
- "stub resolver": it stops the processing once it gets any
- response from the server, whether it's a referral or an alias
- (CNAME or DNAME) that would require further queries to get the
- ultimate answer. In other words, this utility acts as a very
- simplified <command>dig</command>.
- </para>
- <para>
- Usage: sample-request [-t RRtype] server_address hostname
- </para>
- <para>
- Options and Arguments:
- </para>
- <variablelist>
- <varlistentry>
- <term>
- -t RRtype
- </term>
- <listitem>
- <para>
- specify the RR type of
- the queries. The default is the A RR.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- server_address
- </term>
- <listitem>
- <para>
- an IP(v4/v6)
- address of the recursive server to which the query is sent.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- hostname
- </term>
- <listitem>
- <para>
- the domain name for the query
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </section>
- <section><info><title>sample-gai: getaddrinfo() and getnameinfo() test code</title></info>
-
- <para>
- This is a test program
- to check getaddrinfo() and getnameinfo() behavior. It takes a
- host name as an argument, calls getaddrinfo() with the given host
- name, and calls getnameinfo() with the resulting IP addresses
- returned by getaddrinfo(). If the dns.conf file exists and
- defines a trust anchor, the underlying resolver will act as a
- validating resolver, and getaddrinfo()/getnameinfo() will fail
- with an EAI_INSECUREDATA error when DNSSEC validation fails.
- </para>
- <para>
- Usage: sample-gai hostname
- </para>
- </section>
- <section><info><title>sample-update: a simple dynamic update client program</title></info>
-
- <para>
- It accepts a single update command as a
- command-line argument, sends an update request message to the
- authoritative server, and shows the response from the server. In
- other words, this is a simplified <command>nsupdate</command>.
- </para>
- <para>
- Usage: sample-update [options] (add|delete) "update data"
- </para>
- <para>
- Options and Arguments:
- </para>
- <variablelist>
- <varlistentry>
- <term>
- -a auth_server
- </term>
- <listitem><para>
- An IP address of the authoritative server that has authority
- for the zone containing the update name. This should normally
- be the primary authoritative server that accepts dynamic
- updates. It can also be a secondary server that is configured
- to forward update requests to the primary server.
- </para></listitem>
- </varlistentry>
- <varlistentry>
- <term>
- -k keyfile
- </term>
- <listitem><para>
- A TSIG key file to secure the update transaction. The keyfile
- format is the same as that for the nsupdate utility.
- </para></listitem>
- </varlistentry>
- <varlistentry>
- <term>
- -p prerequisite
- </term>
- <listitem><para>
- A prerequisite for the update (only one prerequisite can be
- specified). The prerequisite format is the same as that is
- accepted by the nsupdate utility.
- </para></listitem>
- </varlistentry>
- <varlistentry>
- <term>
- -r recursive_server
- </term>
- <listitem><para>
- An IP address of a recursive server that this utility will
- use. A recursive server may be necessary to identify the
- authoritative server address to which the update request is
- sent.
- </para></listitem>
- </varlistentry>
- <varlistentry>
- <term>
- -z zonename
- </term>
- <listitem><para>
- The domain name of the zone that contains
- </para></listitem>
- </varlistentry>
- <varlistentry>
- <term>
- (add|delete)
- </term>
- <listitem><para>
- Specify the type of update operation. Either "add" or "delete"
- must be specified.
- </para></listitem>
- </varlistentry>
- <varlistentry>
- <term>
- "update data"
- </term>
- <listitem><para>
- Specify the data to be updated. A typical example of the data
- would look like "name TTL RRtype RDATA".
- </para></listitem>
- </varlistentry>
- </variablelist>
-
- <note><simpara>
- In practice, either -a or -r must be specified. Others can
- be optional; the underlying library routine tries to identify the
- appropriate server and the zone name for the update.
- </simpara></note>
-
- <para>
- Examples: assuming the primary authoritative server of the
- dynamic.example.com zone has an IPv6 address 2001:db8::1234,
- </para>
- <screen>
-$ <userinput>sample-update -a sample-update -k Kxxx.+nnn+mmmm.key add "foo.dynamic.example.com 30 IN A 192.168.2.1"</userinput></screen>
- <para>
- adds an A RR for foo.dynamic.example.com using the given key.
- </para>
- <screen>
-$ <userinput>sample-update -a sample-update -k Kxxx.+nnn+mmmm.key delete "foo.dynamic.example.com 30 IN A"</userinput></screen>
- <para>
- removes all A RRs for foo.dynamic.example.com using the given key.
- </para>
- <screen>
-$ <userinput>sample-update -a sample-update -k Kxxx.+nnn+mmmm.key delete "foo.dynamic.example.com"</userinput></screen>
- <para>
- removes all RRs for foo.dynamic.example.com using the given key.
- </para>
- </section>
- <section><info><title>nsprobe: domain/name server checker in terms of RFC 4074</title></info>
-
- <para>
- It checks a set
- of domains to see the name servers of the domains behave
- correctly in terms of RFC 4074. This is included in the set of
- sample programs to show how the export library can be used in a
- DNS-related application.
- </para>
- <para>
- Usage: nsprobe [-d] [-v [-v...]] [-c cache_address] [input_file]
- </para>
- <para>
- Options
- </para>
-
- <variablelist>
- <varlistentry>
- <term>
- -d
- </term>
- <listitem><para>
- run in the "debug" mode. with this option nsprobe will dump
- every RRs it receives.
- </para></listitem>
- </varlistentry>
- <varlistentry>
- <term>
- -v
- </term>
- <listitem><para>
- increase verbosity of other normal log messages. This can be
- specified multiple times
- </para></listitem>
- </varlistentry>
- <varlistentry>
- <term>
- -c cache_address
- </term>
- <listitem><para>
- specify an IP address of a recursive (caching) name server.
- nsprobe uses this server to get the NS RRset of each domain and
- the A and/or AAAA RRsets for the name servers. The default
- value is 127.0.0.1.
- </para></listitem>
- </varlistentry>
- <varlistentry>
- <term>
- input_file
- </term>
- <listitem><para>
- a file name containing a list of domain (zone) names to be
- probed. when omitted the standard input will be used. Each
- line of the input file specifies a single domain name such as
- "example.com". In general this domain name must be the apex
- name of some DNS zone (unlike normal "host names" such as
- "www.example.com"). nsprobe first identifies the NS RRsets for
- the given domain name, and sends A and AAAA queries to these
- servers for some "widely used" names under the zone;
- specifically, adding "www" and "ftp" to the zone name.
- </para></listitem>
- </varlistentry>
- </variablelist>
- </section>
- </section>
- <section><info><title>Library References</title></info>
-
- <para>As of this writing, there is no formal "manual" of the
- libraries, except this document, header files (some of them
- provide pretty detailed explanations), and sample application
- programs.</para>
- </section>
-</section>
diff --git a/doc/arm/logging-categories.xml b/doc/arm/logging-categories.xml
deleted file mode 100644
index 0e2c0844..00000000
--- a/doc/arm/logging-categories.xml
+++ /dev/null
@@ -1,378 +0,0 @@
-<!--
- - Copyright (C) 2015, 2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
-<!-- Converted by db4-upgrade version 1.0 -->
-<informaltable xmlns="http://docbook.org/ns/docbook" version="5.0" colsep="0" rowsep="0">
- <tgroup cols="2" colsep="0" rowsep="0" tgroupstyle="4Level-table">
- <colspec colname="1" colnum="1" colsep="0" colwidth="1.150in"/>
- <colspec colname="2" colnum="2" colsep="0" colwidth="3.350in"/>
- <tbody>
- <row rowsep="0">
- <entry colname="1">
- <para><command>client</command></para>
- </entry>
- <entry colname="2">
- <para>
- Processing of client requests.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>cname</command></para>
- </entry>
- <entry colname="2">
- <para>
- Logs nameservers that are skipped due to them being
- a CNAME rather than A / AAAA records.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>config</command></para>
- </entry>
- <entry colname="2">
- <para>
- Configuration file parsing and processing.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>database</command></para>
- </entry>
- <entry colname="2">
- <para>
- Messages relating to the databases used
- internally by the name server to store zone and cache
- data.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>default</command></para>
- </entry>
- <entry colname="2">
- <para>
- The default category defines the logging
- options for those categories where no specific
- configuration has been
- defined.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>delegation-only</command></para>
- </entry>
- <entry colname="2">
- <para>
- Delegation only. Logs queries that have been
- forced to NXDOMAIN as the result of a
- delegation-only zone or a
- <command>delegation-only</command> in a
- forward, hint or stub zone declaration.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>dispatch</command></para>
- </entry>
- <entry colname="2">
- <para>
- Dispatching of incoming packets to the
- server modules where they are to be processed.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>dnssec</command></para>
- </entry>
- <entry colname="2">
- <para>
- DNSSEC and TSIG protocol processing.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>dnstap</command></para>
- </entry>
- <entry colname="2">
- <para>
- The "dnstap" DNS traffic capture system.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>edns-disabled</command></para>
- </entry>
- <entry colname="2">
- <para>
- Log queries that have been forced to use plain
- DNS due to timeouts. This is often due to
- the remote servers not being RFC 1034 compliant
- (not always returning FORMERR or similar to
- EDNS queries and other extensions to the DNS
- when they are not understood). In other words, this is
- targeted at servers that fail to respond to
- DNS queries that they don't understand.
- </para>
- <para>
- Note: the log message can also be due to
- packet loss. Before reporting servers for
- non-RFC 1034 compliance they should be re-tested
- to determine the nature of the non-compliance.
- This testing should prevent or reduce the
- number of false-positive reports.
- </para>
- <para>
- Note: eventually <command>named</command> will have to stop
- treating such timeouts as due to RFC 1034 non
- compliance and start treating it as plain
- packet loss. Falsely classifying packet
- loss as due to RFC 1034 non compliance impacts
- on DNSSEC validation which requires EDNS for
- the DNSSEC records to be returned.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>general</command></para>
- </entry>
- <entry colname="2">
- <para>
- The catch-all. Many things still aren't
- classified into categories, and they all end up here.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>lame-servers</command></para>
- </entry>
- <entry colname="2">
- <para>
- Lame servers. These are misconfigurations
- in remote servers, discovered by BIND 9 when trying to
- query those servers during resolution.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>network</command></para>
- </entry>
- <entry colname="2">
- <para>
- Network operations.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>notify</command></para>
- </entry>
- <entry colname="2">
- <para>
- The NOTIFY protocol.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>queries</command></para>
- </entry>
- <entry colname="2">
- <para>
- Specify where queries should be logged to.
- </para>
- <para>
- At startup, specifying the category <command>queries</command> will also
- enable query logging unless <command>querylog</command> option has been
- specified.
- </para>
-
- <para>
- The query log entry reports the client's IP
- address and port number, and the query name,
- class and type. Next it reports whether the
- Recursion Desired flag was set (+ if set, -
- if not set), if the query was signed (S),
- EDNS was in used along with the EDNS version
- number (E(#)), if TCP was used (T), if DO
- (DNSSEC Ok) was set (D), if CD (Checking
- Disabled) was set (C), if a valid DNS Server
- COOKIE was received (V), or if a DNS COOKIE
- option without a valid Server COOKIE was
- present (K). After this the destination
- address the query was sent to is reported.
- </para>
-
- <para>
- <computeroutput>client 127.0.0.1#62536 (www.example.com): query: www.example.com IN AAAA +SE</computeroutput>
- </para>
- <para>
- <computeroutput>client ::1#62537 (www.example.net): query: www.example.net IN AAAA -SE</computeroutput>
- </para>
- <para>
- (The first part of this log message, showing the
- client address/port number and query name, is
- repeated in all subsequent log messages related
- to the same query.)
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>query-errors</command></para>
- </entry>
- <entry colname="2">
- <para>
- Information about queries that resulted in some
- failure.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>rate-limit</command></para>
- </entry>
- <entry colname="2">
- <para>
- The start, periodic, and final notices of the
- rate limiting of a stream of responses are logged at
- <command>info</command> severity in this category.
- These messages include a hash value of the domain name
- of the response and the name itself,
- except when there is insufficient memory to record
- the name for the final notice
- The final notice is normally delayed until about one
- minute after rate limit stops.
- A lack of memory can hurry the final notice,
- in which case it starts with an asterisk (*).
- Various internal events are logged at debug 1 level
- and higher.
- </para>
- <para>
- Rate limiting of individual requests
- is logged in the <command>query-errors</command> category.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>resolver</command></para>
- </entry>
- <entry colname="2">
- <para>
- DNS resolution, such as the recursive
- lookups performed on behalf of clients by a caching name
- server.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>rpz</command></para>
- </entry>
- <entry colname="2">
- <para>
- Information about errors in response policy zone files,
- rewritten responses, and at the highest
- <command>debug</command> levels, mere rewriting
- attempts.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>security</command></para>
- </entry>
- <entry colname="2">
- <para>
- Approval and denial of requests.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>spill</command></para>
- </entry>
- <entry colname="2">
- <para>
- Logs queries that have been terminated, either by dropping
- or responding with SERVFAIL, as a result of a fetchlimit
- quota being exceeded.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>unmatched</command></para>
- </entry>
- <entry colname="2">
- <para>
- Messages that <command>named</command> was unable to determine the
- class of or for which there was no matching <command>view</command>.
- A one line summary is also logged to the <command>client</command> category.
- This category is best sent to a file or stderr, by
- default it is sent to
- the <command>null</command> channel.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>update</command></para>
- </entry>
- <entry colname="2">
- <para>
- Dynamic updates.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>update-security</command></para>
- </entry>
- <entry colname="2">
- <para>
- Approval and denial of update requests.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>xfer-in</command></para>
- </entry>
- <entry colname="2">
- <para>
- Zone transfers the server is receiving.
- </para>
- </entry>
- </row>
- <row rowsep="0">
- <entry colname="1">
- <para><command>xfer-out</command></para>
- </entry>
- <entry colname="2">
- <para>
- Zone transfers the server is sending.
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
-</informaltable>
diff --git a/doc/arm/man.arpaname.html b/doc/arm/man.arpaname.html
deleted file mode 100644
index 831ab0e6..00000000
--- a/doc/arm/man.arpaname.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>arpaname</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.ddns-confgen.html" title="ddns-confgen">
-<link rel="next" href="man.dnstap-read.html" title="dnstap-read">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">arpaname</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.ddns-confgen.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.dnstap-read.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.arpaname"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">arpaname</span> &#8212; translate IP addresses to the corresponding ARPA names</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">arpaname</code> {<em class="replaceable"><code>ipaddress </code></em>...}</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.31.7"></a><h2>DESCRIPTION</h2>
-<p>
- <span class="command"><strong>arpaname</strong></span> translates IP addresses (IPv4 and
- IPv6) to the corresponding IN-ADDR.ARPA or IP6.ARPA names.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.31.8"></a><h2>SEE ALSO</h2>
-<p>
- <em class="citetitle">BIND 9 Administrator Reference Manual</em>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.ddns-confgen.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.dnstap-read.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">ddns-confgen</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">dnstap-read</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.ddns-confgen.html b/doc/arm/man.ddns-confgen.html
deleted file mode 100644
index 487fc92b..00000000
--- a/doc/arm/man.ddns-confgen.html
+++ /dev/null
@@ -1,182 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>ddns-confgen</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.rndc-confgen.html" title="rndc-confgen">
-<link rel="next" href="man.arpaname.html" title="arpaname">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">ddns-confgen</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.rndc-confgen.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.arpaname.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.ddns-confgen"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">ddns-confgen</span> &#8212; ddns key generation tool</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">tsig-keygen</code> [<code class="option">-a <em class="replaceable"><code>algorithm</code></em></code>] [<code class="option">-h</code>] [<code class="option">-r <em class="replaceable"><code>randomfile</code></em></code>] [name]</p></div>
-<div class="cmdsynopsis"><p><code class="command">ddns-confgen</code> [<code class="option">-a <em class="replaceable"><code>algorithm</code></em></code>] [<code class="option">-h</code>] [<code class="option">-k <em class="replaceable"><code>keyname</code></em></code>] [<code class="option">-q</code>] [<code class="option">-r <em class="replaceable"><code>randomfile</code></em></code>] [ -s <em class="replaceable"><code>name</code></em> | -z <em class="replaceable"><code>zone</code></em> ]</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.30.7"></a><h2>DESCRIPTION</h2>
-<p>
- <span class="command"><strong>tsig-keygen</strong></span> and <span class="command"><strong>ddns-confgen</strong></span>
- are invocation methods for a utility that generates keys for use
- in TSIG signing. The resulting keys can be used, for example,
- to secure dynamic DNS updates to a zone or for the
- <span class="command"><strong>rndc</strong></span> command channel.
- </p>
-<p>
- When run as <span class="command"><strong>tsig-keygen</strong></span>, a domain name
- can be specified on the command line which will be used as
- the name of the generated key. If no name is specified,
- the default is <code class="constant">tsig-key</code>.
- </p>
-<p>
- When run as <span class="command"><strong>ddns-confgen</strong></span>, the generated
- key is accompanied by configuration text and instructions
- that can be used with <span class="command"><strong>nsupdate</strong></span> and
- <span class="command"><strong>named</strong></span> when setting up dynamic DNS,
- including an example <span class="command"><strong>update-policy</strong></span>
- statement. (This usage similar to the
- <span class="command"><strong>rndc-confgen</strong></span> command for setting
- up command channel security.)
- </p>
-<p>
- Note that <span class="command"><strong>named</strong></span> itself can configure a
- local DDNS key for use with <span class="command"><strong>nsupdate -l</strong></span>:
- it does this when a zone is configured with
- <span class="command"><strong>update-policy local;</strong></span>.
- <span class="command"><strong>ddns-confgen</strong></span> is only needed when a
- more elaborate configuration is required: for instance,
- if <span class="command"><strong>nsupdate</strong></span> is to be used from a remote
- system.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.30.8"></a><h2>OPTIONS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-a <em class="replaceable"><code>algorithm</code></em></span></dt>
-<dd><p>
- Specifies the algorithm to use for the TSIG key. Available
- choices are: hmac-md5, hmac-sha1, hmac-sha224, hmac-sha256,
- hmac-sha384 and hmac-sha512. The default is hmac-sha256.
- Options are case-insensitive, and the "hmac-" prefix
- may be omitted.
- </p></dd>
-<dt><span class="term">-h</span></dt>
-<dd><p>
- Prints a short summary of options and arguments.
- </p></dd>
-<dt><span class="term">-k <em class="replaceable"><code>keyname</code></em></span></dt>
-<dd><p>
- Specifies the key name of the DDNS authentication key.
- The default is <code class="constant">ddns-key</code> when neither
- the <code class="option">-s</code> nor <code class="option">-z</code> option is
- specified; otherwise, the default
- is <code class="constant">ddns-key</code> as a separate label
- followed by the argument of the option, e.g.,
- <code class="constant">ddns-key.example.com.</code>
- The key name must have the format of a valid domain name,
- consisting of letters, digits, hyphens and periods.
- </p></dd>
-<dt><span class="term">-q</span></dt>
-<dd><p>
- (<span class="command"><strong>ddns-confgen</strong></span> only.) Quiet mode: Print
- only the key, with no explanatory text or usage examples;
- This is essentially identical to <span class="command"><strong>tsig-keygen</strong></span>.
- </p></dd>
-<dt><span class="term">-r <em class="replaceable"><code>randomfile</code></em></span></dt>
-<dd><p>
- Specifies a source of random data for generating the
- authorization. If the operating system does not provide a
- <code class="filename">/dev/random</code> or equivalent device, the
- default source of randomness is keyboard input.
- <code class="filename">randomdev</code> specifies the name of a
- character device or file containing random data to be used
- instead of the default. The special value
- <code class="filename">keyboard</code> indicates that keyboard input
- should be used.
- </p></dd>
-<dt><span class="term">-s <em class="replaceable"><code>name</code></em></span></dt>
-<dd><p>
- (<span class="command"><strong>ddns-confgen</strong></span> only.)
- Generate configuration example to allow dynamic updates
- of a single hostname. The example <span class="command"><strong>named.conf</strong></span>
- text shows how to set an update policy for the specified
- <em class="replaceable"><code>name</code></em>
- using the "name" nametype. The default key name is
- ddns-key.<em class="replaceable"><code>name</code></em>.
- Note that the "self" nametype cannot be used, since
- the name to be updated may differ from the key name.
- This option cannot be used with the <code class="option">-z</code> option.
- </p></dd>
-<dt><span class="term">-z <em class="replaceable"><code>zone</code></em></span></dt>
-<dd><p>
- (<span class="command"><strong>ddns-confgen</strong></span> only.)
- Generate configuration example to allow dynamic updates
- of a zone: The example <span class="command"><strong>named.conf</strong></span> text
- shows how to set an update policy for the specified
- <em class="replaceable"><code>zone</code></em>
- using the "zonesub" nametype, allowing updates to
- all subdomain names within that
- <em class="replaceable"><code>zone</code></em>.
- This option cannot be used with the <code class="option">-s</code> option.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.30.9"></a><h2>SEE ALSO</h2>
-<p><span class="citerefentry"><span class="refentrytitle">nsupdate</span>(1)</span>,
- <span class="citerefentry"><span class="refentrytitle">named.conf</span>(5)</span>,
- <span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
- <em class="citetitle">BIND 9 Administrator Reference Manual</em>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.rndc-confgen.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.arpaname.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">rndc-confgen</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">arpaname</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.delv.html b/doc/arm/man.delv.html
deleted file mode 100644
index 9bc2b7ff..00000000
--- a/doc/arm/man.delv.html
+++ /dev/null
@@ -1,506 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>delv</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.host.html" title="host">
-<link rel="next" href="man.nslookup.html" title="nslookup">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center">delv</th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.host.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.nslookup.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.delv"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p>delv &#8212; DNS lookup and validation utility</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">delv</code> [@server] [<code class="option">-4</code>] [<code class="option">-6</code>] [<code class="option">-a <em class="replaceable"><code>anchor-file</code></em></code>] [<code class="option">-b <em class="replaceable"><code>address</code></em></code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-d <em class="replaceable"><code>level</code></em></code>] [<code class="option">-i</code>] [<code class="option">-m</code>] [<code class="option">-p <em class="replaceable"><code>port#</code></em></code>] [<code class="option">-q <em class="replaceable"><code>name</code></em></code>] [<code class="option">-t <em class="replaceable"><code>type</code></em></code>] [<code class="option">-x <em class="replaceable"><code>addr</code></em></code>] [name] [type] [class] [queryopt...]</p></div>
-<div class="cmdsynopsis"><p><code class="command">delv</code> [<code class="option">-h</code>]</p></div>
-<div class="cmdsynopsis"><p><code class="command">delv</code> [<code class="option">-v</code>]</p></div>
-<div class="cmdsynopsis"><p><code class="command">delv</code> [queryopt...] [query...]</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.5.7"></a><h2>DESCRIPTION</h2>
-<p><span class="command"><strong>delv</strong></span>
- (Domain Entity Lookup &amp; Validation) is a tool for sending
- DNS queries and validating the results, using the same internal
- resolver and validator logic as <span class="command"><strong>named</strong></span>.
- </p>
-<p>
- <span class="command"><strong>delv</strong></span> will send to a specified name server all
- queries needed to fetch and validate the requested data; this
- includes the original requested query, subsequent queries to follow
- CNAME or DNAME chains, and queries for DNSKEY, DS and DLV records
- to establish a chain of trust for DNSSEC validation.
- It does not perform iterative resolution, but simulates the
- behavior of a name server configured for DNSSEC validating and
- forwarding.
- </p>
-<p>
- By default, responses are validated using built-in DNSSEC trust
- anchors for the root zone (".") and for the ISC DNSSEC lookaside
- validation zone ("dlv.isc.org"). Records returned by
- <span class="command"><strong>delv</strong></span> are either fully validated or
- were not signed. If validation fails, an explanation of
- the failure is included in the output; the validation process
- can be traced in detail. Because <span class="command"><strong>delv</strong></span> does
- not rely on an external server to carry out validation, it can
- be used to check the validity of DNS responses in environments
- where local name servers may not be trustworthy.
- </p>
-<p>
- Unless it is told to query a specific name server,
- <span class="command"><strong>delv</strong></span> will try each of the servers listed in
- <code class="filename">/etc/resolv.conf</code>. If no usable server
- addresses are found, <span class="command"><strong>delv</strong></span> will send
- queries to the localhost addresses (127.0.0.1 for IPv4, ::1
- for IPv6).
- </p>
-<p>
- When no command line arguments or options are given,
- <span class="command"><strong>delv</strong></span> will perform an NS query for "."
- (the root zone).
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.5.8"></a><h2>SIMPLE USAGE</h2>
-<p>
- A typical invocation of <span class="command"><strong>delv</strong></span> looks like:
- </p>
-<pre class="programlisting"> delv @server name type </pre>
-<p>
- where:
-
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><code class="constant">server</code></span></dt>
-<dd>
-<p>
- is the name or IP address of the name server to query. This
- can be an IPv4 address in dotted-decimal notation or an IPv6
- address in colon-delimited notation. When the supplied
- <em class="parameter"><code>server</code></em> argument is a hostname,
- <span class="command"><strong>delv</strong></span> resolves that name before
- querying that name server (note, however, that this
- initial lookup is <span class="emphasis"><em>not</em></span> validated
- by DNSSEC).
- </p>
-<p>
- If no <em class="parameter"><code>server</code></em> argument is
- provided, <span class="command"><strong>delv</strong></span> consults
- <code class="filename">/etc/resolv.conf</code>; if an
- address is found there, it queries the name server at
- that address. If either of the <code class="option">-4</code> or
- <code class="option">-6</code> options are in use, then
- only addresses for the corresponding transport
- will be tried. If no usable addresses are found,
- <span class="command"><strong>delv</strong></span> will send queries to
- the localhost addresses (127.0.0.1 for IPv4,
- ::1 for IPv6).
- </p>
-</dd>
-<dt><span class="term"><code class="constant">name</code></span></dt>
-<dd><p>
- is the domain name to be looked up.
- </p></dd>
-<dt><span class="term"><code class="constant">type</code></span></dt>
-<dd><p>
- indicates what type of query is required &#8212;
- ANY, A, MX, etc.
- <em class="parameter"><code>type</code></em> can be any valid query
- type. If no
- <em class="parameter"><code>type</code></em> argument is supplied,
- <span class="command"><strong>delv</strong></span> will perform a lookup for an
- A record.
- </p></dd>
-</dl></div>
-<p>
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.5.9"></a><h2>OPTIONS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-a <em class="replaceable"><code>anchor-file</code></em></span></dt>
-<dd>
-<p>
- Specifies a file from which to read DNSSEC trust anchors.
- The default is <code class="filename">/etc/bind.keys</code>, which
- is included with <acronym class="acronym">BIND</acronym> 9 and contains
- trust anchors for the root zone (".") and for the ISC
- DNSSEC lookaside validation zone ("dlv.isc.org").
- </p>
-<p>
- Keys that do not match the root or DLV trust-anchor
- names are ignored; these key names can be overridden
- using the <code class="option">+dlv=NAME</code> or
- <code class="option">+root=NAME</code> options.
- </p>
-<p>
- Note: When reading the trust anchor file,
- <span class="command"><strong>delv</strong></span> treats <code class="option">managed-keys</code>
- statements and <code class="option">trusted-keys</code> statements
- identically. That is, for a managed key, it is the
- <span class="emphasis"><em>initial</em></span> key that is trusted; RFC 5011
- key management is not supported. <span class="command"><strong>delv</strong></span>
- will not consult the managed-keys database maintained by
- <span class="command"><strong>named</strong></span>. This means that if either of the
- keys in <code class="filename">/etc/bind.keys</code> is revoked
- and rolled over, it will be necessary to update
- <code class="filename">/etc/bind.keys</code> to use DNSSEC
- validation in <span class="command"><strong>delv</strong></span>.
- </p>
-</dd>
-<dt><span class="term">-b <em class="replaceable"><code>address</code></em></span></dt>
-<dd><p>
- Sets the source IP address of the query to
- <em class="parameter"><code>address</code></em>. This must be a valid address
- on one of the host's network interfaces or "0.0.0.0" or "::".
- An optional source port may be specified by appending
- "#&lt;port&gt;"
- </p></dd>
-<dt><span class="term">-c <em class="replaceable"><code>class</code></em></span></dt>
-<dd><p>
- Sets the query class for the requested data. Currently,
- only class "IN" is supported in <span class="command"><strong>delv</strong></span>
- and any other value is ignored.
- </p></dd>
-<dt><span class="term">-d <em class="replaceable"><code>level</code></em></span></dt>
-<dd><p>
- Set the systemwide debug level to <code class="option">level</code>.
- The allowed range is from 0 to 99.
- The default is 0 (no debugging).
- Debugging traces from <span class="command"><strong>delv</strong></span> become
- more verbose as the debug level increases.
- See the <code class="option">+mtrace</code>, <code class="option">+rtrace</code>,
- and <code class="option">+vtrace</code> options below for additional
- debugging details.
- </p></dd>
-<dt><span class="term">-h</span></dt>
-<dd><p>
- Display the <span class="command"><strong>delv</strong></span> help usage output and exit.
- </p></dd>
-<dt><span class="term">-i</span></dt>
-<dd><p>
- Insecure mode. This disables internal DNSSEC validation.
- (Note, however, this does not set the CD bit on upstream
- queries. If the server being queried is performing DNSSEC
- validation, then it will not return invalid data; this
- can cause <span class="command"><strong>delv</strong></span> to time out. When it
- is necessary to examine invalid data to debug a DNSSEC
- problem, use <span class="command"><strong>dig +cd</strong></span>.)
- </p></dd>
-<dt><span class="term">-m</span></dt>
-<dd><p>
- Enables memory usage debugging.
- </p></dd>
-<dt><span class="term">-p <em class="replaceable"><code>port#</code></em></span></dt>
-<dd><p>
- Specifies a destination port to use for queries instead of
- the standard DNS port number 53. This option would be used
- with a name server that has been configured to listen
- for queries on a non-standard port number.
- </p></dd>
-<dt><span class="term">-q <em class="replaceable"><code>name</code></em></span></dt>
-<dd><p>
- Sets the query name to <em class="parameter"><code>name</code></em>.
- While the query name can be specified without using the
- <code class="option">-q</code>, it is sometimes necessary to disambiguate
- names from types or classes (for example, when looking up the
- name "ns", which could be misinterpreted as the type NS,
- or "ch", which could be misinterpreted as class CH).
- </p></dd>
-<dt><span class="term">-t <em class="replaceable"><code>type</code></em></span></dt>
-<dd>
-<p>
- Sets the query type to <em class="parameter"><code>type</code></em>, which
- can be any valid query type supported in BIND 9 except
- for zone transfer types AXFR and IXFR. As with
- <code class="option">-q</code>, this is useful to distinguish
- query name type or class when they are ambiguous.
- it is sometimes necessary to disambiguate names from types.
- </p>
-<p>
- The default query type is "A", unless the <code class="option">-x</code>
- option is supplied to indicate a reverse lookup, in which case
- it is "PTR".
- </p>
-</dd>
-<dt><span class="term">-v</span></dt>
-<dd><p>
- Print the <span class="command"><strong>delv</strong></span> version and exit.
- </p></dd>
-<dt><span class="term">-x <em class="replaceable"><code>addr</code></em></span></dt>
-<dd><p>
- Performs a reverse lookup, mapping an addresses to
- a name. <em class="parameter"><code>addr</code></em> is an IPv4 address in
- dotted-decimal notation, or a colon-delimited IPv6 address.
- When <code class="option">-x</code> is used, there is no need to provide
- the <em class="parameter"><code>name</code></em> or <em class="parameter"><code>type</code></em>
- arguments. <span class="command"><strong>delv</strong></span> automatically performs a
- lookup for a name like <code class="literal">11.12.13.10.in-addr.arpa</code>
- and sets the query type to PTR. IPv6 addresses are looked up
- using nibble format under the IP6.ARPA domain.
- </p></dd>
-<dt><span class="term">-4</span></dt>
-<dd><p>
- Forces <span class="command"><strong>delv</strong></span> to only use IPv4.
- </p></dd>
-<dt><span class="term">-6</span></dt>
-<dd><p>
- Forces <span class="command"><strong>delv</strong></span> to only use IPv6.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.5.10"></a><h2>QUERY OPTIONS</h2>
-<p><span class="command"><strong>delv</strong></span>
- provides a number of query options which affect the way results are
- displayed, and in some cases the way lookups are performed.
- </p>
-<p>
- Each query option is identified by a keyword preceded by a plus sign
- (<code class="literal">+</code>). Some keywords set or reset an
- option. These may be preceded by the string
- <code class="literal">no</code> to negate the meaning of that keyword.
- Other keywords assign values to options like the timeout interval.
- They have the form <code class="option">+keyword=value</code>.
- The query options are:
-
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><code class="option">+[no]cdflag</code></span></dt>
-<dd><p>
- Controls whether to set the CD (checking disabled) bit in
- queries sent by <span class="command"><strong>delv</strong></span>. This may be useful
- when troubleshooting DNSSEC problems from behind a validating
- resolver. A validating resolver will block invalid responses,
- making it difficult to retrieve them for analysis. Setting
- the CD flag on queries will cause the resolver to return
- invalid responses, which <span class="command"><strong>delv</strong></span> can then
- validate internally and report the errors in detail.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]class</code></span></dt>
-<dd><p>
- Controls whether to display the CLASS when printing
- a record. The default is to display the CLASS.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]ttl</code></span></dt>
-<dd><p>
- Controls whether to display the TTL when printing
- a record. The default is to display the TTL.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]rtrace</code></span></dt>
-<dd>
-<p>
- Toggle resolver fetch logging. This reports the
- name and type of each query sent by <span class="command"><strong>delv</strong></span>
- in the process of carrying out the resolution and validation
- process: this includes including the original query and
- all subsequent queries to follow CNAMEs and to establish a
- chain of trust for DNSSEC validation.
- </p>
-<p>
- This is equivalent to setting the debug level to 1 in
- the "resolver" logging category. Setting the systemwide
- debug level to 1 using the <code class="option">-d</code> option will
- product the same output (but will affect other logging
- categories as well).
- </p>
-</dd>
-<dt><span class="term"><code class="option">+[no]mtrace</code></span></dt>
-<dd>
-<p>
- Toggle message logging. This produces a detailed dump of
- the responses received by <span class="command"><strong>delv</strong></span> in the
- process of carrying out the resolution and validation process.
- </p>
-<p>
- This is equivalent to setting the debug level to 10
- for the "packets" module of the "resolver" logging
- category. Setting the systemwide debug level to 10 using
- the <code class="option">-d</code> option will produce the same output
- (but will affect other logging categories as well).
- </p>
-</dd>
-<dt><span class="term"><code class="option">+[no]vtrace</code></span></dt>
-<dd>
-<p>
- Toggle validation logging. This shows the internal
- process of the validator as it determines whether an
- answer is validly signed, unsigned, or invalid.
- </p>
-<p>
- This is equivalent to setting the debug level to 3
- for the "validator" module of the "dnssec" logging
- category. Setting the systemwide debug level to 3 using
- the <code class="option">-d</code> option will produce the same output
- (but will affect other logging categories as well).
- </p>
-</dd>
-<dt><span class="term"><code class="option">+[no]short</code></span></dt>
-<dd><p>
- Provide a terse answer. The default is to print the answer in a
- verbose form.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]comments</code></span></dt>
-<dd><p>
- Toggle the display of comment lines in the output. The default
- is to print comments.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]rrcomments</code></span></dt>
-<dd><p>
- Toggle the display of per-record comments in the output (for
- example, human-readable key information about DNSKEY records).
- The default is to print per-record comments.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]crypto</code></span></dt>
-<dd><p>
- Toggle the display of cryptographic fields in DNSSEC records.
- The contents of these field are unnecessary to debug most DNSSEC
- validation failures and removing them makes it easier to see
- the common failures. The default is to display the fields.
- When omitted they are replaced by the string "[omitted]" or
- in the DNSKEY case the key id is displayed as the replacement,
- e.g. "[ key id = value ]".
- </p></dd>
-<dt><span class="term"><code class="option">+[no]trust</code></span></dt>
-<dd><p>
- Controls whether to display the trust level when printing
- a record. The default is to display the trust level.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]split[=W]</code></span></dt>
-<dd><p>
- Split long hex- or base64-formatted fields in resource
- records into chunks of <em class="parameter"><code>W</code></em> characters
- (where <em class="parameter"><code>W</code></em> is rounded up to the nearest
- multiple of 4).
- <em class="parameter"><code>+nosplit</code></em> or
- <em class="parameter"><code>+split=0</code></em> causes fields not to be
- split at all. The default is 56 characters, or 44 characters
- when multiline mode is active.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]all</code></span></dt>
-<dd><p>
- Set or clear the display options
- <code class="option">+[no]comments</code>,
- <code class="option">+[no]rrcomments</code>, and
- <code class="option">+[no]trust</code> as a group.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]multiline</code></span></dt>
-<dd><p>
- Print long records (such as RRSIG, DNSKEY, and SOA records)
- in a verbose multi-line format with human-readable comments.
- The default is to print each record on a single line, to
- facilitate machine parsing of the <span class="command"><strong>delv</strong></span>
- output.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]dnssec</code></span></dt>
-<dd><p>
- Indicates whether to display RRSIG records in the
- <span class="command"><strong>delv</strong></span> output. The default is to
- do so. Note that (unlike in <span class="command"><strong>dig</strong></span>)
- this does <span class="emphasis"><em>not</em></span> control whether to
- request DNSSEC records or whether to validate them.
- DNSSEC records are always requested, and validation
- will always occur unless suppressed by the use of
- <code class="option">-i</code> or <code class="option">+noroot</code> and
- <code class="option">+nodlv</code>.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]root[=ROOT]</code></span></dt>
-<dd><p>
- Indicates whether to perform conventional (non-lookaside)
- DNSSEC validation, and if so, specifies the
- name of a trust anchor. The default is to validate using
- a trust anchor of "." (the root zone), for which there is
- a built-in key. If specifying a different trust anchor,
- then <code class="option">-a</code> must be used to specify a file
- containing the key.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]dlv[=DLV]</code></span></dt>
-<dd><p>
- Indicates whether to perform DNSSEC lookaside validation,
- and if so, specifies the name of the DLV trust anchor.
- The default is to perform lookaside validation using
- a trust anchor of "dlv.isc.org", for which there is a
- built-in key. If specifying a different name, then
- <code class="option">-a</code> must be used to specify a file
- containing the DLV key.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]tcp</code></span></dt>
-<dd><p>
- Controls whether to use TCP when sending queries.
- The default is to use UDP unless a truncated
- response has been received.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]unknownformat</code></span></dt>
-<dd><p>
- Print all RDATA in unknown RR type presentation format
- (RFC 3597). The default is to print RDATA for known types
- in the type's presentation format.
- </p></dd>
-</dl></div>
-<p>
-
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.5.11"></a><h2>FILES</h2>
-<p><code class="filename">/etc/bind.keys</code></p>
-<p><code class="filename">/etc/resolv.conf</code></p>
-</div>
-<div class="refsection">
-<a name="id-1.14.5.12"></a><h2>SEE ALSO</h2>
-<p><span class="citerefentry"><span class="refentrytitle">dig</span>(1)</span>,
- <span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
- <em class="citetitle">RFC4034</em>,
- <em class="citetitle">RFC4035</em>,
- <em class="citetitle">RFC4431</em>,
- <em class="citetitle">RFC5074</em>,
- <em class="citetitle">RFC5155</em>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.host.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.nslookup.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">host </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> nslookup</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.dig.html b/doc/arm/man.dig.html
deleted file mode 100644
index 627d80c7..00000000
--- a/doc/arm/man.dig.html
+++ /dev/null
@@ -1,853 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>dig</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="next" href="man.mdig.html" title="mdig">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center">dig</th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="Bv9ARM.ch13.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.mdig.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.dig"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p>dig &#8212; DNS lookup utility</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">dig</code> [@server] [<code class="option">-b <em class="replaceable"><code>address</code></em></code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-f <em class="replaceable"><code>filename</code></em></code>] [<code class="option">-k <em class="replaceable"><code>filename</code></em></code>] [<code class="option">-m</code>] [<code class="option">-p <em class="replaceable"><code>port#</code></em></code>] [<code class="option">-q <em class="replaceable"><code>name</code></em></code>] [<code class="option">-t <em class="replaceable"><code>type</code></em></code>] [<code class="option">-v</code>] [<code class="option">-x <em class="replaceable"><code>addr</code></em></code>] [<code class="option">-y <em class="replaceable"><code>[<span class="optional">hmac:</span>]name:key</code></em></code>] [<code class="option">-4</code>] [<code class="option">-6</code>] [name] [type] [class] [queryopt...]</p></div>
-<div class="cmdsynopsis"><p><code class="command">dig</code> [<code class="option">-h</code>]</p></div>
-<div class="cmdsynopsis"><p><code class="command">dig</code> [global-queryopt...] [query...]</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.2.7"></a><h2>DESCRIPTION</h2>
-<p><span class="command"><strong>dig</strong></span>
- (domain information groper) is a flexible tool
- for interrogating DNS name servers. It performs DNS lookups and
- displays the answers that are returned from the name server(s) that
- were queried. Most DNS administrators use <span class="command"><strong>dig</strong></span> to
- troubleshoot DNS problems because of its flexibility, ease of use and
- clarity of output. Other lookup tools tend to have less functionality
- than <span class="command"><strong>dig</strong></span>.
- </p>
-<p>
- Although <span class="command"><strong>dig</strong></span> is normally used with
- command-line
- arguments, it also has a batch mode of operation for reading lookup
- requests from a file. A brief summary of its command-line arguments
- and options is printed when the <code class="option">-h</code> option is given.
- Unlike earlier versions, the BIND 9 implementation of
- <span class="command"><strong>dig</strong></span> allows multiple lookups to be issued
- from the
- command line.
- </p>
-<p>
- Unless it is told to query a specific name server,
- <span class="command"><strong>dig</strong></span> will try each of the servers listed in
- <code class="filename">/etc/resolv.conf</code>. If no usable server addresses
- are found, <span class="command"><strong>dig</strong></span> will send the query to the local
- host.
- </p>
-<p>
- When no command line arguments or options are given,
- <span class="command"><strong>dig</strong></span> will perform an NS query for "." (the root).
- </p>
-<p>
- It is possible to set per-user defaults for <span class="command"><strong>dig</strong></span> via
- <code class="filename">${HOME}/.digrc</code>. This file is read and
- any options in it
- are applied before the command line arguments.
- </p>
-<p>
- The IN and CH class names overlap with the IN and CH top level
- domain names. Either use the <code class="option">-t</code> and
- <code class="option">-c</code> options to specify the type and class,
- use the <code class="option">-q</code> the specify the domain name, or
- use "IN." and "CH." when looking up these top level domains.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.2.8"></a><h2>SIMPLE USAGE</h2>
-<p>
- A typical invocation of <span class="command"><strong>dig</strong></span> looks like:
- </p>
-<pre class="programlisting"> dig @server name type </pre>
-<p>
- where:
-
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><code class="constant">server</code></span></dt>
-<dd>
-<p>
- is the name or IP address of the name server to query. This
- can be an IPv4 address in dotted-decimal notation or an IPv6
- address in colon-delimited notation. When the supplied
- <em class="parameter"><code>server</code></em> argument is a hostname,
- <span class="command"><strong>dig</strong></span> resolves that name before querying
- that name server.
- </p>
-<p>
- If no <em class="parameter"><code>server</code></em> argument is
- provided, <span class="command"><strong>dig</strong></span> consults
- <code class="filename">/etc/resolv.conf</code>; if an
- address is found there, it queries the name server at
- that address. If either of the <code class="option">-4</code> or
- <code class="option">-6</code> options are in use, then
- only addresses for the corresponding transport
- will be tried. If no usable addresses are found,
- <span class="command"><strong>dig</strong></span> will send the query to the
- local host. The reply from the name server that
- responds is displayed.
- </p>
-</dd>
-<dt><span class="term"><code class="constant">name</code></span></dt>
-<dd><p>
- is the name of the resource record that is to be looked up.
- </p></dd>
-<dt><span class="term"><code class="constant">type</code></span></dt>
-<dd><p>
- indicates what type of query is required &#8212;
- ANY, A, MX, SIG, etc.
- <em class="parameter"><code>type</code></em> can be any valid query
- type. If no
- <em class="parameter"><code>type</code></em> argument is supplied,
- <span class="command"><strong>dig</strong></span> will perform a lookup for an
- A record.
- </p></dd>
-</dl></div>
-<p>
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.2.9"></a><h2>OPTIONS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-4</span></dt>
-<dd><p>
- Use IPv4 only.
- </p></dd>
-<dt><span class="term">-6</span></dt>
-<dd><p>
- Use IPv6 only.
- </p></dd>
-<dt><span class="term">-b <em class="replaceable"><code>address[<span class="optional">#port</span>]</code></em></span></dt>
-<dd><p>
- Set the source IP address of the query.
- The <em class="parameter"><code>address</code></em> must be a valid address on
- one of the host's network interfaces, or "0.0.0.0" or "::". An
- optional port may be specified by appending "#&lt;port&gt;"
- </p></dd>
-<dt><span class="term">-c <em class="replaceable"><code>class</code></em></span></dt>
-<dd><p>
- Set the query class. The
- default <em class="parameter"><code>class</code></em> is IN; other classes
- are HS for Hesiod records or CH for Chaosnet records.
- </p></dd>
-<dt><span class="term">-f <em class="replaceable"><code>file</code></em></span></dt>
-<dd><p>
- Batch mode: <span class="command"><strong>dig</strong></span> reads a list of lookup
- requests to process from the
- given <em class="parameter"><code>file</code></em>. Each line in the file
- should be organized in the same way they would be
- presented as queries to
- <span class="command"><strong>dig</strong></span> using the command-line interface.
- </p></dd>
-<dt><span class="term">-i</span></dt>
-<dd><p>
- Do reverse IPv6 lookups using the obsolete RFC1886 IP6.INT
- domain, which is no longer in use. Obsolete bit string
- label queries (RFC2874) are not attempted.
- </p></dd>
-<dt><span class="term">-k <em class="replaceable"><code>keyfile</code></em></span></dt>
-<dd><p>
- Sign queries using TSIG using a key read from the given file.
- Key files can be generated using
- <span class="citerefentry"><span class="refentrytitle">tsig-keygen</span>(8)</span>.
- When using TSIG authentication with <span class="command"><strong>dig</strong></span>,
- the name server that is queried needs to know the key and
- algorithm that is being used. In BIND, this is done by
- providing appropriate <span class="command"><strong>key</strong></span>
- and <span class="command"><strong>server</strong></span> statements in
- <code class="filename">named.conf</code>.
- </p></dd>
-<dt><span class="term">-m</span></dt>
-<dd><p>
- Enable memory usage debugging.
-
- </p></dd>
-<dt><span class="term">-p <em class="replaceable"><code>port</code></em></span></dt>
-<dd><p>
- Send the query to a non-standard port on the server,
- instead of the default port 53. This option would be used
- to test a name server that has been configured to listen
- for queries on a non-standard port number.
- </p></dd>
-<dt><span class="term">-q <em class="replaceable"><code>name</code></em></span></dt>
-<dd><p>
- The domain name to query. This is useful to distinguish
- the <em class="parameter"><code>name</code></em> from other arguments.
- </p></dd>
-<dt><span class="term">-t <em class="replaceable"><code>type</code></em></span></dt>
-<dd><p>
- The resource record type to query. It can be any valid query type
- which is
- supported in BIND 9. The default query type is "A", unless the
- <code class="option">-x</code> option is supplied to indicate a reverse lookup.
- A zone transfer can be requested by specifying a type of AXFR. When
- an incremental zone transfer (IXFR) is required, set the
- <em class="parameter"><code>type</code></em> to <code class="literal">ixfr=N</code>.
- The incremental zone transfer will contain the changes
- made to the zone since the serial number in the zone's SOA
- record was
- <em class="parameter"><code>N</code></em>.
- </p></dd>
-<dt><span class="term">-v</span></dt>
-<dd><p>
- Print the version number and exit.
- </p></dd>
-<dt><span class="term">-x <em class="replaceable"><code>addr</code></em></span></dt>
-<dd><p>
- Simplified reverse lookups, for mapping addresses to
- names. The <em class="parameter"><code>addr</code></em> is an IPv4 address
- in dotted-decimal notation, or a colon-delimited IPv6
- address. When the <code class="option">-x</code> is used, there is no
- need to provide
- the <em class="parameter"><code>name</code></em>, <em class="parameter"><code>class</code></em>
- and <em class="parameter"><code>type</code></em>
- arguments. <span class="command"><strong>dig</strong></span> automatically performs a
- lookup for a name like
- <code class="literal">94.2.0.192.in-addr.arpa</code> and sets the
- query type and class to PTR and IN respectively. IPv6
- addresses are looked up using nibble format under the
- IP6.ARPA domain (but see also the <code class="option">-i</code>
- option).
- </p></dd>
-<dt><span class="term">-y <em class="replaceable"><code>[<span class="optional">hmac:</span>]keyname:secret</code></em></span></dt>
-<dd>
-<p>
- Sign queries using TSIG with the given authentication key.
- <em class="parameter"><code>keyname</code></em> is the name of the key, and
- <em class="parameter"><code>secret</code></em> is the base64 encoded shared secret.
- <em class="parameter"><code>hmac</code></em> is the name of the key algorithm;
- valid choices are <code class="literal">hmac-md5</code>,
- <code class="literal">hmac-sha1</code>, <code class="literal">hmac-sha224</code>,
- <code class="literal">hmac-sha256</code>, <code class="literal">hmac-sha384</code>, or
- <code class="literal">hmac-sha512</code>. If <em class="parameter"><code>hmac</code></em>
- is not specified, the default is <code class="literal">hmac-md5</code>
- or if MD5 was disabled <code class="literal">hmac-sha256</code>.
- </p>
-<p>
- NOTE: You should use the <code class="option">-k</code> option and
- avoid the <code class="option">-y</code> option, because
- with <code class="option">-y</code> the shared secret is supplied as
- a command line argument in clear text. This may be visible
- in the output from
- <span class="citerefentry"><span class="refentrytitle">ps</span>(1)</span>
- or in a history file maintained by the user's shell.
- </p>
-</dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.2.10"></a><h2>QUERY OPTIONS</h2>
-<p><span class="command"><strong>dig</strong></span>
- provides a number of query options which affect
- the way in which lookups are made and the results displayed. Some of
- these set or reset flag bits in the query header, some determine which
- sections of the answer get printed, and others determine the timeout
- and retry strategies.
- </p>
-<p>
- Each query option is identified by a keyword preceded by a plus sign
- (<code class="literal">+</code>). Some keywords set or reset an
- option. These may be preceded
- by the string <code class="literal">no</code> to negate the meaning of
- that keyword. Other
- keywords assign values to options like the timeout interval. They
- have the form <code class="option">+keyword=value</code>.
- Keywords may be abbreviated, provided the abbreviation is
- unambiguous; for example, <code class="literal">+cd</code> is equivalent
- to <code class="literal">+cdflag</code>.
- The query options are:
-
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><code class="option">+[no]aaflag</code></span></dt>
-<dd><p>
- A synonym for <em class="parameter"><code>+[no]aaonly</code></em>.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]aaonly</code></span></dt>
-<dd><p>
- Sets the "aa" flag in the query.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]additional</code></span></dt>
-<dd><p>
- Display [do not display] the additional section of a
- reply. The default is to display it.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]adflag</code></span></dt>
-<dd><p>
- Set [do not set] the AD (authentic data) bit in the
- query. This requests the server to return whether
- all of the answer and authority sections have all
- been validated as secure according to the security
- policy of the server. AD=1 indicates that all records
- have been validated as secure and the answer is not
- from a OPT-OUT range. AD=0 indicate that some part
- of the answer was insecure or not validated. This
- bit is set by default.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]all</code></span></dt>
-<dd><p>
- Set or clear all display flags.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]answer</code></span></dt>
-<dd><p>
- Display [do not display] the answer section of a
- reply. The default is to display it.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]authority</code></span></dt>
-<dd><p>
- Display [do not display] the authority section of a
- reply. The default is to display it.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]badcookie</code></span></dt>
-<dd><p>
- Retry lookup with the new server cookie if a
- BADCOOKIE response is received.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]besteffort</code></span></dt>
-<dd><p>
- Attempt to display the contents of messages which are
- malformed. The default is to not display malformed
- answers.
- </p></dd>
-<dt><span class="term"><code class="option">+bufsize=B</code></span></dt>
-<dd><p>
- Set the UDP message buffer size advertised using EDNS0
- to <em class="parameter"><code>B</code></em> bytes. The maximum and
- minimum sizes of this buffer are 65535 and 0 respectively.
- Values outside this range are rounded up or down
- appropriately. Values other than zero will cause a
- EDNS query to be sent.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]cdflag</code></span></dt>
-<dd><p>
- Set [do not set] the CD (checking disabled) bit in
- the query. This requests the server to not perform
- DNSSEC validation of responses.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]class</code></span></dt>
-<dd><p>
- Display [do not display] the CLASS when printing the
- record.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]cmd</code></span></dt>
-<dd><p>
- Toggles the printing of the initial comment in the
- output identifying the version of <span class="command"><strong>dig</strong></span>
- and the query options that have been applied. This
- comment is printed by default.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]comments</code></span></dt>
-<dd><p>
- Toggle the display of comment lines in the output.
- The default is to print comments.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]cookie[<span class="optional">=####</span>]</code></span></dt>
-<dd>
-<p>
- Send a COOKIE EDNS option, with optional
- value. Replaying a COOKIE from a previous response will
- allow the server to identify a previous client. The
- default is <code class="option">+cookie</code>.
- </p>
-<p>
- <span class="command"><strong>+cookie</strong></span> is also set when +trace
- is set to better emulate the default queries from a
- nameserver.
- </p>
-</dd>
-<dt><span class="term"><code class="option">+[no]crypto</code></span></dt>
-<dd><p>
- Toggle the display of cryptographic fields in DNSSEC
- records. The contents of these field are unnecessary
- to debug most DNSSEC validation failures and removing
- them makes it easier to see the common failures. The
- default is to display the fields. When omitted they
- are replaced by the string "[omitted]" or in the
- DNSKEY case the key id is displayed as the replacement,
- e.g. "[ key id = value ]".
- </p></dd>
-<dt><span class="term"><code class="option">+[no]defname</code></span></dt>
-<dd><p>
- Deprecated, treated as a synonym for
- <em class="parameter"><code>+[no]search</code></em>
- </p></dd>
-<dt><span class="term"><code class="option">+[no]dnssec</code></span></dt>
-<dd><p>
- Requests DNSSEC records be sent by setting the DNSSEC
- OK bit (DO) in the OPT record in the additional section
- of the query.
- </p></dd>
-<dt><span class="term"><code class="option">+domain=somename</code></span></dt>
-<dd><p>
- Set the search list to contain the single domain
- <em class="parameter"><code>somename</code></em>, as if specified in
- a <span class="command"><strong>domain</strong></span> directive in
- <code class="filename">/etc/resolv.conf</code>, and enable
- search list processing as if the
- <em class="parameter"><code>+search</code></em> option were given.
- </p></dd>
-<dt><span class="term"><code class="option">+dscp=value</code></span></dt>
-<dd><p>
- Set the DSCP code point to be used when sending the
- query. Valid DSCP code points are in the range
- [0..63]. By default no code point is explicitly set.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]edns[=#]</code></span></dt>
-<dd><p>
- Specify the EDNS version to query with. Valid values
- are 0 to 255. Setting the EDNS version will cause
- a EDNS query to be sent. <code class="option">+noedns</code>
- clears the remembered EDNS version. EDNS is set to
- 0 by default.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]ednsflags[=#]</code></span></dt>
-<dd><p>
- Set the must-be-zero EDNS flags bits (Z bits) to the
- specified value. Decimal, hex and octal encodings are
- accepted. Setting a named flag (e.g. DO) will silently be
- ignored. By default, no Z bits are set.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]ednsnegotiation</code></span></dt>
-<dd><p>
- Enable / disable EDNS version negotiation. By default
- EDNS version negotiation is enabled.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]ednsopt[=code[:value]]</code></span></dt>
-<dd><p>
- Specify EDNS option with code point <code class="option">code</code>
- and optionally payload of <code class="option">value</code> as a
- hexadecimal string. <code class="option">+noednsopt</code>
- clears the EDNS options to be sent.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]expire</code></span></dt>
-<dd><p>
- Send an EDNS Expire option.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]fail</code></span></dt>
-<dd><p>
- Do not try the next server if you receive a SERVFAIL.
- The default is to not try the next server which is
- the reverse of normal stub resolver behavior.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]header-only</code></span></dt>
-<dd><p>
- Send a query with a DNS header without a question section.
- The default is to add a question section. The query type
- and query name are ignored when this is set.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]identify</code></span></dt>
-<dd><p>
- Show [or do not show] the IP address and port number
- that supplied the answer when the
- <em class="parameter"><code>+short</code></em> option is enabled. If
- short form answers are requested, the default is not
- to show the source address and port number of the
- server that provided the answer.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]ignore</code></span></dt>
-<dd><p>
- Ignore truncation in UDP responses instead of retrying
- with TCP. By default, TCP retries are performed.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]keepopen</code></span></dt>
-<dd><p>
- Keep the TCP socket open between queries and reuse
- it rather than creating a new TCP socket for each
- lookup. The default is <code class="option">+nokeepopen</code>.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]mapped</code></span></dt>
-<dd><p>
- Allow mapped IPv4 over IPv6 addresses to be used. The
- default is <code class="option">+mapped</code>.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]multiline</code></span></dt>
-<dd><p>
- Print records like the SOA records in a verbose
- multi-line format with human-readable comments. The
- default is to print each record on a single line, to
- facilitate machine parsing of the <span class="command"><strong>dig</strong></span>
- output.
- </p></dd>
-<dt><span class="term"><code class="option">+ndots=D</code></span></dt>
-<dd><p>
- Set the number of dots that have to appear in
- <em class="parameter"><code>name</code></em> to <em class="parameter"><code>D</code></em>
- for it to be considered absolute. The default value
- is that defined using the ndots statement in
- <code class="filename">/etc/resolv.conf</code>, or 1 if no
- ndots statement is present. Names with fewer dots
- are interpreted as relative names and will be searched
- for in the domains listed in the <code class="option">search</code>
- or <code class="option">domain</code> directive in
- <code class="filename">/etc/resolv.conf</code> if
- <code class="option">+search</code> is set.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]nsid</code></span></dt>
-<dd><p>
- Include an EDNS name server ID request when sending
- a query.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]nssearch</code></span></dt>
-<dd><p>
- When this option is set, <span class="command"><strong>dig</strong></span>
- attempts to find the authoritative name servers for
- the zone containing the name being looked up and
- display the SOA record that each name server has for
- the zone.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]onesoa</code></span></dt>
-<dd><p>
- Print only one (starting) SOA record when performing
- an AXFR. The default is to print both the starting
- and ending SOA records.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]opcode=value</code></span></dt>
-<dd><p>
- Set [restore] the DNS message opcode to the specified
- value. The default value is QUERY (0).
- </p></dd>
-<dt><span class="term"><code class="option">+[no]qr</code></span></dt>
-<dd><p>
- Print [do not print] the query as it is sent. By
- default, the query is not printed.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]question</code></span></dt>
-<dd><p>
- Print [do not print] the question section of a query
- when an answer is returned. The default is to print
- the question section as a comment.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]rdflag</code></span></dt>
-<dd><p>
- A synonym for <em class="parameter"><code>+[no]recurse</code></em>.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]recurse</code></span></dt>
-<dd><p>
- Toggle the setting of the RD (recursion desired) bit
- in the query. This bit is set by default, which means
- <span class="command"><strong>dig</strong></span> normally sends recursive
- queries. Recursion is automatically disabled when
- the <em class="parameter"><code>+nssearch</code></em> or
- <em class="parameter"><code>+trace</code></em> query options are used.
- </p></dd>
-<dt><span class="term"><code class="option">+retry=T</code></span></dt>
-<dd><p>
- Sets the number of times to retry UDP queries to
- server to <em class="parameter"><code>T</code></em> instead of the
- default, 2. Unlike <em class="parameter"><code>+tries</code></em>,
- this does not include the initial query.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]rrcomments</code></span></dt>
-<dd><p>
- Toggle the display of per-record comments in the
- output (for example, human-readable key information
- about DNSKEY records). The default is not to print
- record comments unless multiline mode is active.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]search</code></span></dt>
-<dd>
-<p>
- Use [do not use] the search list defined by the
- searchlist or domain directive in
- <code class="filename">resolv.conf</code> (if any). The search
- list is not used by default.
- </p>
-<p>
- 'ndots' from <code class="filename">resolv.conf</code> (default 1)
- which may be overridden by <em class="parameter"><code>+ndots</code></em>
- determines if the name will be treated as relative
- or not and hence whether a search is eventually
- performed or not.
- </p>
-</dd>
-<dt><span class="term"><code class="option">+[no]short</code></span></dt>
-<dd><p>
- Provide a terse answer. The default is to print the
- answer in a verbose form.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]showsearch</code></span></dt>
-<dd><p>
- Perform [do not perform] a search showing intermediate
- results.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]sigchase</code></span></dt>
-<dd><p>
- Chase DNSSEC signature chains. Requires dig be
- compiled with -DDIG_SIGCHASE.
- </p></dd>
-<dt><span class="term"><code class="option">+split=W</code></span></dt>
-<dd><p>
- Split long hex- or base64-formatted fields in resource
- records into chunks of <em class="parameter"><code>W</code></em>
- characters (where <em class="parameter"><code>W</code></em> is rounded
- up to the nearest multiple of 4).
- <em class="parameter"><code>+nosplit</code></em> or
- <em class="parameter"><code>+split=0</code></em> causes fields not to
- be split at all. The default is 56 characters, or
- 44 characters when multiline mode is active.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]stats</code></span></dt>
-<dd><p>
- This query option toggles the printing of statistics:
- when the query was made, the size of the reply and
- so on. The default behavior is to print the query
- statistics.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]subnet=addr[/prefix-length]</code></span></dt>
-<dd>
-<p>
- Send (don't send) an EDNS Client Subnet option with the
- specified IP address or network prefix.
- </p>
-<p>
- <span class="command"><strong>dig +subnet=0.0.0.0/0</strong></span>, or simply
- <span class="command"><strong>dig +subnet=0</strong></span> for short, sends an EDNS
- CLIENT-SUBNET option with an empty address and a source
- prefix-length of zero, which signals a resolver that
- the client's address information must
- <span class="emphasis"><em>not</em></span> be used when resolving
- this query.
- </p>
-</dd>
-<dt><span class="term"><code class="option">+[no]tcp</code></span></dt>
-<dd><p>
- Use [do not use] TCP when querying name servers. The
- default behavior is to use UDP unless an
- <code class="literal">ixfr=N</code> query is requested, in which
- case the default is TCP. AXFR queries always use
- TCP.
- </p></dd>
-<dt><span class="term"><code class="option">+timeout=T</code></span></dt>
-<dd><p>
-
- Sets the timeout for a query to
- <em class="parameter"><code>T</code></em> seconds. The default
- timeout is 5 seconds.
- An attempt to set <em class="parameter"><code>T</code></em> to less
- than 1 will result
- in a query timeout of 1 second being applied.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]topdown</code></span></dt>
-<dd><p>
- When chasing DNSSEC signature chains perform a top-down
- validation. Requires dig be compiled with -DDIG_SIGCHASE.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]trace</code></span></dt>
-<dd>
-<p>
- Toggle tracing of the delegation path from the root
- name servers for the name being looked up. Tracing
- is disabled by default. When tracing is enabled,
- <span class="command"><strong>dig</strong></span> makes iterative queries to
- resolve the name being looked up. It will follow
- referrals from the root servers, showing the answer
- from each server that was used to resolve the lookup.
- </p>
-<p>
- If @server is also specified, it affects only the
- initial query for the root zone name servers.
- </p>
-<p>
- <span class="command"><strong>+dnssec</strong></span> is also set when +trace
- is set to better emulate the default queries from a
- nameserver.
- </p>
-</dd>
-<dt><span class="term"><code class="option">+tries=T</code></span></dt>
-<dd><p>
- Sets the number of times to try UDP queries to server
- to <em class="parameter"><code>T</code></em> instead of the default,
- 3. If <em class="parameter"><code>T</code></em> is less than or equal
- to zero, the number of tries is silently rounded up
- to 1.
- </p></dd>
-<dt><span class="term"><code class="option">+trusted-key=####</code></span></dt>
-<dd>
-<p>
- Specifies a file containing trusted keys to be used
- with <code class="option">+sigchase</code>. Each DNSKEY record
- must be on its own line.
- </p>
-<p>
- If not specified, <span class="command"><strong>dig</strong></span> will look
- for <code class="filename">/etc/trusted-key.key</code> then
- <code class="filename">trusted-key.key</code> in the current
- directory.
- </p>
-<p>
- Requires dig be compiled with -DDIG_SIGCHASE.
- </p>
-</dd>
-<dt><span class="term"><code class="option">+[no]ttlid</code></span></dt>
-<dd><p>
- Display [do not display] the TTL when printing the
- record.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]ttlunits</code></span></dt>
-<dd><p>
- Display [do not display] the TTL in friendly human-readable
- time units of "s", "m", "h", "d", and "w", representing
- seconds, minutes, hours, days and weeks. Implies +ttlid.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]unknownformat</code></span></dt>
-<dd><p>
- Print all RDATA in unknown RR type presentation format
- (RFC 3597). The default is to print RDATA for known types
- in the type's presentation format.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]vc</code></span></dt>
-<dd><p>
- Use [do not use] TCP when querying name servers. This
- alternate syntax to <em class="parameter"><code>+[no]tcp</code></em>
- is provided for backwards compatibility. The "vc"
- stands for "virtual circuit".
- </p></dd>
-<dt><span class="term"><code class="option">+[no]zflag</code></span></dt>
-<dd><p>
- Set [do not set] the last unassigned DNS header flag in a
- DNS query. This flag is off by default.
- </p></dd>
-</dl></div>
-<p>
-
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.2.11"></a><h2>MULTIPLE QUERIES</h2>
-<p>
- The BIND 9 implementation of <span class="command"><strong>dig </strong></span>
- supports
- specifying multiple queries on the command line (in addition to
- supporting the <code class="option">-f</code> batch file option). Each of those
- queries can be supplied with its own set of flags, options and query
- options.
- </p>
-<p>
- In this case, each <em class="parameter"><code>query</code></em> argument
- represent an
- individual query in the command-line syntax described above. Each
- consists of any of the standard options and flags, the name to be
- looked up, an optional query type and class and any query options that
- should be applied to that query.
- </p>
-<p>
- A global set of query options, which should be applied to all queries,
- can also be supplied. These global query options must precede the
- first tuple of name, class, type, options, flags, and query options
- supplied on the command line. Any global query options (except
- the <code class="option">+[no]cmd</code> option) can be
- overridden by a query-specific set of query options. For example:
- </p>
-<pre class="programlisting">
-dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr
-</pre>
-<p>
- shows how <span class="command"><strong>dig</strong></span> could be used from the
- command line
- to make three lookups: an ANY query for <code class="literal">www.isc.org</code>, a
- reverse lookup of 127.0.0.1 and a query for the NS records of
- <code class="literal">isc.org</code>.
-
- A global query option of <em class="parameter"><code>+qr</code></em> is
- applied, so
- that <span class="command"><strong>dig</strong></span> shows the initial query it made
- for each
- lookup. The final query has a local query option of
- <em class="parameter"><code>+noqr</code></em> which means that <span class="command"><strong>dig</strong></span>
- will not print the initial query when it looks up the NS records for
- <code class="literal">isc.org</code>.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.2.12"></a><h2>IDN SUPPORT</h2>
-<p>
- If <span class="command"><strong>dig</strong></span> has been built with IDN (internationalized
- domain name) support, it can accept and display non-ASCII domain names.
- <span class="command"><strong>dig</strong></span> appropriately converts character encoding of
- domain name before sending a request to DNS server or displaying a
- reply from the server.
- If you'd like to turn off the IDN support for some reason, defines
- the <code class="envar">IDN_DISABLE</code> environment variable.
- The IDN support is disabled if the variable is set when
- <span class="command"><strong>dig</strong></span> runs.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.2.13"></a><h2>FILES</h2>
-<p><code class="filename">/etc/resolv.conf</code>
- </p>
-<p><code class="filename">${HOME}/.digrc</code>
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.2.14"></a><h2>SEE ALSO</h2>
-<p><span class="citerefentry"><span class="refentrytitle">host</span>(1)</span>,
- <span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
- <em class="citetitle">RFC1035</em>.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.2.15"></a><h2>BUGS</h2>
-<p>
- There are probably too many query options.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="Bv9ARM.ch13.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.mdig.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">Manual pages </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">mdig</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.dnssec-checkds.html b/doc/arm/man.dnssec-checkds.html
deleted file mode 100644
index 2c55e43f..00000000
--- a/doc/arm/man.dnssec-checkds.html
+++ /dev/null
@@ -1,109 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>dnssec-checkds</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.nslookup.html" title="nslookup">
-<link rel="next" href="man.dnssec-coverage.html" title="dnssec-coverage">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">dnssec-checkds</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.nslookup.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.dnssec-coverage.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.dnssec-checkds"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">dnssec-checkds</span> &#8212; DNSSEC delegation consistency checking tool</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">dnssec-checkds</code> [<code class="option">-l <em class="replaceable"><code>domain</code></em></code>] [<code class="option">-f <em class="replaceable"><code>file</code></em></code>] [<code class="option">-d <em class="replaceable"><code>dig path</code></em></code>] [<code class="option">-D <em class="replaceable"><code>dsfromkey path</code></em></code>] {zone}</p></div>
-<div class="cmdsynopsis"><p><code class="command">dnssec-dsfromkey</code> [<code class="option">-l <em class="replaceable"><code>domain</code></em></code>] [<code class="option">-f <em class="replaceable"><code>file</code></em></code>] [<code class="option">-d <em class="replaceable"><code>dig path</code></em></code>] [<code class="option">-D <em class="replaceable"><code>dsfromkey path</code></em></code>] {zone}</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.7.7"></a><h2>DESCRIPTION</h2>
-<p><span class="command"><strong>dnssec-checkds</strong></span>
- verifies the correctness of Delegation Signer (DS) or DNSSEC
- Lookaside Validation (DLV) resource records for keys in a specified
- zone.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.7.8"></a><h2>OPTIONS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-f <em class="replaceable"><code>file</code></em></span></dt>
-<dd><p>
- If a <code class="option">file</code> is specified, then the zone is
- read from that file to find the DNSKEY records. If not,
- then the DNSKEY records for the zone are looked up in the DNS.
- </p></dd>
-<dt><span class="term">-l <em class="replaceable"><code>domain</code></em></span></dt>
-<dd><p>
- Check for a DLV record in the specified lookaside domain,
- instead of checking for a DS record in the zone's parent.
- For example, to check for DLV records for "example.com"
- in ISC's DLV zone, use:
- <span class="command"><strong>dnssec-checkds -l dlv.isc.org example.com</strong></span>
- </p></dd>
-<dt><span class="term">-d <em class="replaceable"><code>dig path</code></em></span></dt>
-<dd><p>
- Specifies a path to a <span class="command"><strong>dig</strong></span> binary. Used
- for testing.
- </p></dd>
-<dt><span class="term">-D <em class="replaceable"><code>dsfromkey path</code></em></span></dt>
-<dd><p>
- Specifies a path to a <span class="command"><strong>dnssec-dsfromkey</strong></span> binary.
- Used for testing.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.7.9"></a><h2>SEE ALSO</h2>
-<p><span class="citerefentry"><span class="refentrytitle">dnssec-dsfromkey</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">dnssec-signzone</span>(8)</span>,
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.nslookup.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.dnssec-coverage.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">nslookup </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">dnssec-coverage</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.dnssec-coverage.html b/doc/arm/man.dnssec-coverage.html
deleted file mode 100644
index 1115d5f7..00000000
--- a/doc/arm/man.dnssec-coverage.html
+++ /dev/null
@@ -1,226 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>dnssec-coverage</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.dnssec-checkds.html" title="dnssec-checkds">
-<link rel="next" href="man.dnssec-dsfromkey.html" title="dnssec-dsfromkey">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">dnssec-coverage</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.dnssec-checkds.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.dnssec-dsfromkey.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.dnssec-coverage"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">dnssec-coverage</span> &#8212; checks future DNSKEY coverage for a zone</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">dnssec-coverage</code> [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-l <em class="replaceable"><code>length</code></em></code>] [<code class="option">-f <em class="replaceable"><code>file</code></em></code>] [<code class="option">-d <em class="replaceable"><code>DNSKEY TTL</code></em></code>] [<code class="option">-m <em class="replaceable"><code>max TTL</code></em></code>] [<code class="option">-r <em class="replaceable"><code>interval</code></em></code>] [<code class="option">-c <em class="replaceable"><code>compilezone path</code></em></code>] [<code class="option">-k</code>] [<code class="option">-z</code>] [zone...]</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.8.7"></a><h2>DESCRIPTION</h2>
-<p><span class="command"><strong>dnssec-coverage</strong></span>
- verifies that the DNSSEC keys for a given zone or a set of zones
- have timing metadata set properly to ensure no future lapses in DNSSEC
- coverage.
- </p>
-<p>
- If <code class="option">zone</code> is specified, then keys found in
- the key repository matching that zone are scanned, and an ordered
- list is generated of the events scheduled for that key (i.e.,
- publication, activation, inactivation, deletion). The list of
- events is walked in order of occurrence. Warnings are generated
- if any event is scheduled which could cause the zone to enter a
- state in which validation failures might occur: for example, if
- the number of published or active keys for a given algorithm drops
- to zero, or if a key is deleted from the zone too soon after a new
- key is rolled, and cached data signed by the prior key has not had
- time to expire from resolver caches.
- </p>
-<p>
- If <code class="option">zone</code> is not specified, then all keys in the
- key repository will be scanned, and all zones for which there are
- keys will be analyzed. (Note: This method of reporting is only
- accurate if all the zones that have keys in a given repository
- share the same TTL parameters.)
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.8.8"></a><h2>OPTIONS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-K <em class="replaceable"><code>directory</code></em></span></dt>
-<dd><p>
- Sets the directory in which keys can be found. Defaults to the
- current working directory.
- </p></dd>
-<dt><span class="term">-f <em class="replaceable"><code>file</code></em></span></dt>
-<dd><p>
- If a <code class="option">file</code> is specified, then the zone is
- read from that file; the largest TTL and the DNSKEY TTL are
- determined directly from the zone data, and the
- <code class="option">-m</code> and <code class="option">-d</code> options do
- not need to be specified on the command line.
- </p></dd>
-<dt><span class="term">-l <em class="replaceable"><code>duration</code></em></span></dt>
-<dd>
-<p>
- The length of time to check for DNSSEC coverage. Key events
- scheduled further into the future than <code class="option">duration</code>
- will be ignored, and assumed to be correct.
- </p>
-<p>
- The value of <code class="option">duration</code> can be set in seconds,
- or in larger units of time by adding a suffix: 'mi' for minutes,
- 'h' for hours, 'd' for days, 'w' for weeks, 'mo' for months,
- 'y' for years.
- </p>
-</dd>
-<dt><span class="term">-m <em class="replaceable"><code>maximum TTL</code></em></span></dt>
-<dd>
-<p>
- Sets the value to be used as the maximum TTL for the zone or
- zones being analyzed when determining whether there is a
- possibility of validation failure. When a zone-signing key is
- deactivated, there must be enough time for the record in the
- zone with the longest TTL to have expired from resolver caches
- before that key can be purged from the DNSKEY RRset. If that
- condition does not apply, a warning will be generated.
- </p>
-<p>
- The length of the TTL can be set in seconds, or in larger units
- of time by adding a suffix: 'mi' for minutes, 'h' for hours,
- 'd' for days, 'w' for weeks, 'mo' for months, 'y' for years.
- </p>
-<p>
- This option is not necessary if the <code class="option">-f</code> has
- been used to specify a zone file. If <code class="option">-f</code> has
- been specified, this option may still be used; it will override
- the value found in the file.
- </p>
-<p>
- If this option is not used and the maximum TTL cannot be retrieved
- from a zone file, a warning is generated and a default value of
- 1 week is used.
- </p>
-</dd>
-<dt><span class="term">-d <em class="replaceable"><code>DNSKEY TTL</code></em></span></dt>
-<dd>
-<p>
- Sets the value to be used as the DNSKEY TTL for the zone or
- zones being analyzed when determining whether there is a
- possibility of validation failure. When a key is rolled (that
- is, replaced with a new key), there must be enough time for the
- old DNSKEY RRset to have expired from resolver caches before
- the new key is activated and begins generating signatures. If
- that condition does not apply, a warning will be generated.
- </p>
-<p>
- The length of the TTL can be set in seconds, or in larger units
- of time by adding a suffix: 'mi' for minutes, 'h' for hours,
- 'd' for days, 'w' for weeks, 'mo' for months, 'y' for years.
- </p>
-<p>
- This option is not necessary if <code class="option">-f</code> has
- been used to specify a zone file from which the TTL
- of the DNSKEY RRset can be read, or if a default key TTL was
- set using ith the <code class="option">-L</code> to
- <span class="command"><strong>dnssec-keygen</strong></span>. If either of those is true,
- this option may still be used; it will override the values
- found in the zone file or the key file.
- </p>
-<p>
- If this option is not used and the key TTL cannot be retrieved
- from the zone file or the key file, then a warning is generated
- and a default value of 1 day is used.
- </p>
-</dd>
-<dt><span class="term">-r <em class="replaceable"><code>resign interval</code></em></span></dt>
-<dd>
-<p>
- Sets the value to be used as the resign interval for the zone
- or zones being analyzed when determining whether there is a
- possibility of validation failure. This value defaults to
- 22.5 days, which is also the default in
- <span class="command"><strong>named</strong></span>. However, if it has been changed
- by the <code class="option">sig-validity-interval</code> option in
- <code class="filename">named.conf</code>, then it should also be
- changed here.
- </p>
-<p>
- The length of the interval can be set in seconds, or in larger
- units of time by adding a suffix: 'mi' for minutes, 'h' for hours,
- 'd' for days, 'w' for weeks, 'mo' for months, 'y' for years.
- </p>
-</dd>
-<dt><span class="term">-k</span></dt>
-<dd><p>
- Only check KSK coverage; ignore ZSK events. Cannot be
- used with <code class="option">-z</code>.
- </p></dd>
-<dt><span class="term">-z</span></dt>
-<dd><p>
- Only check ZSK coverage; ignore KSK events. Cannot be
- used with <code class="option">-k</code>.
- </p></dd>
-<dt><span class="term">-c <em class="replaceable"><code>compilezone path</code></em></span></dt>
-<dd><p>
- Specifies a path to a <span class="command"><strong>named-compilezone</strong></span> binary.
- Used for testing.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.8.9"></a><h2>SEE ALSO</h2>
-<p>
- <span class="citerefentry"><span class="refentrytitle">dnssec-checkds</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">dnssec-dsfromkey</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">dnssec-signzone</span>(8)</span>
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.dnssec-checkds.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.dnssec-dsfromkey.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">dnssec-checkds</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">dnssec-dsfromkey</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.dnssec-dsfromkey.html b/doc/arm/man.dnssec-dsfromkey.html
deleted file mode 100644
index 28d76b84..00000000
--- a/doc/arm/man.dnssec-dsfromkey.html
+++ /dev/null
@@ -1,210 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>dnssec-dsfromkey</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.dnssec-coverage.html" title="dnssec-coverage">
-<link rel="next" href="man.dnssec-importkey.html" title="dnssec-importkey">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">dnssec-dsfromkey</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.dnssec-coverage.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.dnssec-importkey.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.dnssec-dsfromkey"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">dnssec-dsfromkey</span> &#8212; DNSSEC DS RR generation tool</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">dnssec-dsfromkey</code> [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-1</code>] [<code class="option">-2</code>] [<code class="option">-a <em class="replaceable"><code>alg</code></em></code>] [<code class="option">-C</code>] [<code class="option">-l <em class="replaceable"><code>domain</code></em></code>] [<code class="option">-T <em class="replaceable"><code>TTL</code></em></code>] {keyfile}</p></div>
-<div class="cmdsynopsis"><p><code class="command">dnssec-dsfromkey</code> {-s} [<code class="option">-1</code>] [<code class="option">-2</code>] [<code class="option">-a <em class="replaceable"><code>alg</code></em></code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-l <em class="replaceable"><code>domain</code></em></code>] [<code class="option">-s</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-T <em class="replaceable"><code>TTL</code></em></code>] [<code class="option">-f <em class="replaceable"><code>file</code></em></code>] [<code class="option">-A</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] {dnsname}</p></div>
-<div class="cmdsynopsis"><p><code class="command">dnssec-dsfromkey</code> [<code class="option">-h</code>] [<code class="option">-V</code>]</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.9.7"></a><h2>DESCRIPTION</h2>
-<p><span class="command"><strong>dnssec-dsfromkey</strong></span>
- outputs the Delegation Signer (DS) resource record (RR), as defined in
- RFC 3658 and RFC 4509, for the given key(s).
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.9.8"></a><h2>OPTIONS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-1</span></dt>
-<dd><p>
- Use SHA-1 as the digest algorithm (the default is to use
- both SHA-1 and SHA-256).
- </p></dd>
-<dt><span class="term">-2</span></dt>
-<dd><p>
- Use SHA-256 as the digest algorithm.
- </p></dd>
-<dt><span class="term">-a <em class="replaceable"><code>algorithm</code></em></span></dt>
-<dd><p>
- Select the digest algorithm. The value of
- <code class="option">algorithm</code> must be one of SHA-1 (SHA1),
- SHA-256 (SHA256), GOST or SHA-384 (SHA384).
- These values are case insensitive.
- </p></dd>
-<dt><span class="term">-C</span></dt>
-<dd><p>
- Generate CDS records rather than DS records. This is mutually
- exclusive with generating lookaside records.
- </p></dd>
-<dt><span class="term">-T <em class="replaceable"><code>TTL</code></em></span></dt>
-<dd><p>
- Specifies the TTL of the DS records.
- </p></dd>
-<dt><span class="term">-K <em class="replaceable"><code>directory</code></em></span></dt>
-<dd><p>
- Look for key files (or, in keyset mode,
- <code class="filename">keyset-</code> files) in
- <code class="option">directory</code>.
- </p></dd>
-<dt><span class="term">-f <em class="replaceable"><code>file</code></em></span></dt>
-<dd>
-<p>
- Zone file mode: in place of the keyfile name, the argument is
- the DNS domain name of a zone master file, which can be read
- from <code class="option">file</code>. If the zone name is the same as
- <code class="option">file</code>, then it may be omitted.
- </p>
-<p>
- If <code class="option">file</code> is set to <code class="literal">"-"</code>, then
- the zone data is read from the standard input. This makes it
- possible to use the output of the <span class="command"><strong>dig</strong></span>
- command as input, as in:
- </p>
-<p>
- <strong class="userinput"><code>dig dnskey example.com | dnssec-dsfromkey -f - example.com</code></strong>
- </p>
-</dd>
-<dt><span class="term">-A</span></dt>
-<dd><p>
- Include ZSKs when generating DS records. Without this option,
- only keys which have the KSK flag set will be converted to DS
- records and printed. Useful only in zone file mode.
- </p></dd>
-<dt><span class="term">-l <em class="replaceable"><code>domain</code></em></span></dt>
-<dd><p>
- Generate a DLV set instead of a DS set. The specified
- <code class="option">domain</code> is appended to the name for each
- record in the set.
- The DNSSEC Lookaside Validation (DLV) RR is described
- in RFC 4431. This is mutually exclusive with generating
- CDS records.
- </p></dd>
-<dt><span class="term">-s</span></dt>
-<dd><p>
- Keyset mode: in place of the keyfile name, the argument is
- the DNS domain name of a keyset file.
- </p></dd>
-<dt><span class="term">-c <em class="replaceable"><code>class</code></em></span></dt>
-<dd><p>
- Specifies the DNS class (default is IN). Useful only
- in keyset or zone file mode.
- </p></dd>
-<dt><span class="term">-v <em class="replaceable"><code>level</code></em></span></dt>
-<dd><p>
- Sets the debugging level.
- </p></dd>
-<dt><span class="term">-h</span></dt>
-<dd><p>
- Prints usage information.
- </p></dd>
-<dt><span class="term">-V</span></dt>
-<dd><p>
- Prints version information.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.9.9"></a><h2>EXAMPLE</h2>
-<p>
- To build the SHA-256 DS RR from the
- <strong class="userinput"><code>Kexample.com.+003+26160</code></strong>
- keyfile name, the following command would be issued:
- </p>
-<p><strong class="userinput"><code>dnssec-dsfromkey -2 Kexample.com.+003+26160</code></strong>
- </p>
-<p>
- The command would print something like:
- </p>
-<p><strong class="userinput"><code>example.com. IN DS 26160 5 2 3A1EADA7A74B8D0BA86726B0C227AA85AB8BBD2B2004F41A868A54F0 C5EA0B94</code></strong>
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.9.10"></a><h2>FILES</h2>
-<p>
- The keyfile can be designed by the key identification
- <code class="filename">Knnnn.+aaa+iiiii</code> or the full file name
- <code class="filename">Knnnn.+aaa+iiiii.key</code> as generated by
- <span class="refentrytitle">dnssec-keygen</span>(8).
- </p>
-<p>
- The keyset file name is built from the <code class="option">directory</code>,
- the string <code class="filename">keyset-</code> and the
- <code class="option">dnsname</code>.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.9.11"></a><h2>CAVEAT</h2>
-<p>
- A keyfile error can give a "file not found" even if the file exists.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.9.12"></a><h2>SEE ALSO</h2>
-<p><span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">dnssec-signzone</span>(8)</span>,
- <em class="citetitle">BIND 9 Administrator Reference Manual</em>,
- <em class="citetitle">RFC 3658</em>,
- <em class="citetitle">RFC 4431</em>.
- <em class="citetitle">RFC 4509</em>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.dnssec-coverage.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.dnssec-importkey.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">dnssec-coverage</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">dnssec-importkey</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.dnssec-importkey.html b/doc/arm/man.dnssec-importkey.html
deleted file mode 100644
index 5e644ab1..00000000
--- a/doc/arm/man.dnssec-importkey.html
+++ /dev/null
@@ -1,184 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>dnssec-importkey</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.dnssec-dsfromkey.html" title="dnssec-dsfromkey">
-<link rel="next" href="man.dnssec-keyfromlabel.html" title="dnssec-keyfromlabel">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">dnssec-importkey</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.dnssec-dsfromkey.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.dnssec-keyfromlabel.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.dnssec-importkey"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">dnssec-importkey</span> &#8212; import DNSKEY records from external systems so they can be managed</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">dnssec-importkey</code> [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-L <em class="replaceable"><code>ttl</code></em></code>] [<code class="option">-P <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-P sync <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-D <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-D sync <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-h</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-V</code>] {<code class="option">keyfile</code>}</p></div>
-<div class="cmdsynopsis"><p><code class="command">dnssec-importkey</code> {<code class="option">-f <em class="replaceable"><code>filename</code></em></code>} [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-L <em class="replaceable"><code>ttl</code></em></code>] [<code class="option">-P <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-P sync <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-D <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-D sync <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-h</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-V</code>] [<code class="option">dnsname</code>]</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.10.7"></a><h2>DESCRIPTION</h2>
-<p><span class="command"><strong>dnssec-importkey</strong></span>
- reads a public DNSKEY record and generates a pair of
- .key/.private files. The DNSKEY record may be read from an
- existing .key file, in which case a corresponding .private file
- will be generated, or it may be read from any other file or
- from the standard input, in which case both .key and .private
- files will be generated.
- </p>
-<p>
- The newly-created .private file does <span class="emphasis"><em>not</em></span>
- contain private key data, and cannot be used for signing.
- However, having a .private file makes it possible to set
- publication (<code class="option">-P</code>) and deletion
- (<code class="option">-D</code>) times for the key, which means the
- public key can be added to and removed from the DNSKEY RRset
- on schedule even if the true private key is stored offline.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.10.8"></a><h2>OPTIONS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-f <em class="replaceable"><code>filename</code></em></span></dt>
-<dd>
-<p>
- Zone file mode: instead of a public keyfile name, the argument
- is the DNS domain name of a zone master file, which can be read
- from <code class="option">file</code>. If the domain name is the same as
- <code class="option">file</code>, then it may be omitted.
- </p>
-<p>
- If <code class="option">file</code> is set to <code class="literal">"-"</code>, then
- the zone data is read from the standard input.
- </p>
-</dd>
-<dt><span class="term">-K <em class="replaceable"><code>directory</code></em></span></dt>
-<dd><p>
- Sets the directory in which the key files are to reside.
- </p></dd>
-<dt><span class="term">-L <em class="replaceable"><code>ttl</code></em></span></dt>
-<dd><p>
- Sets the default TTL to use for this key when it is converted
- into a DNSKEY RR. If the key is imported into a zone,
- this is the TTL that will be used for it, unless there was
- already a DNSKEY RRset in place, in which case the existing TTL
- would take precedence. Setting the default TTL to
- <code class="literal">0</code> or <code class="literal">none</code> removes it.
- </p></dd>
-<dt><span class="term">-h</span></dt>
-<dd><p>
- Emit usage message and exit.
- </p></dd>
-<dt><span class="term">-v <em class="replaceable"><code>level</code></em></span></dt>
-<dd><p>
- Sets the debugging level.
- </p></dd>
-<dt><span class="term">-V</span></dt>
-<dd><p>
- Prints version information.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.10.9"></a><h2>TIMING OPTIONS</h2>
-<p>
- Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS.
- If the argument begins with a '+' or '-', it is interpreted as
- an offset from the present time. For convenience, if such an offset
- is followed by one of the suffixes 'y', 'mo', 'w', 'd', 'h', or 'mi',
- then the offset is computed in years (defined as 365 24-hour days,
- ignoring leap years), months (defined as 30 24-hour days), weeks,
- days, hours, or minutes, respectively. Without a suffix, the offset
- is computed in seconds. To explicitly prevent a date from being
- set, use 'none' or 'never'.
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-P <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which a key is to be published to the zone.
- After that date, the key will be included in the zone but will
- not be used to sign it.
- </p></dd>
-<dt><span class="term">-P sync <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which CDS and CDNSKEY records that match this
- key are to be published to the zone.
- </p></dd>
-<dt><span class="term">-D <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which the key is to be deleted. After that
- date, the key will no longer be included in the zone. (It
- may remain in the key repository, however.)
- </p></dd>
-<dt><span class="term">-D sync <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which the CDS and CDNSKEY records that match
- this key are to be deleted.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.10.10"></a><h2>FILES</h2>
-<p>
- A keyfile can be designed by the key identification
- <code class="filename">Knnnn.+aaa+iiiii</code> or the full file name
- <code class="filename">Knnnn.+aaa+iiiii.key</code> as generated by
- <span class="refentrytitle">dnssec-keygen</span>(8).
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.10.11"></a><h2>SEE ALSO</h2>
-<p><span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">dnssec-signzone</span>(8)</span>,
- <em class="citetitle">BIND 9 Administrator Reference Manual</em>,
- <em class="citetitle">RFC 5011</em>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.dnssec-dsfromkey.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.dnssec-keyfromlabel.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">dnssec-dsfromkey</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">dnssec-keyfromlabel</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.dnssec-keyfromlabel.html b/doc/arm/man.dnssec-keyfromlabel.html
deleted file mode 100644
index 1029f115..00000000
--- a/doc/arm/man.dnssec-keyfromlabel.html
+++ /dev/null
@@ -1,388 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>dnssec-keyfromlabel</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.dnssec-importkey.html" title="dnssec-importkey">
-<link rel="next" href="man.dnssec-keygen.html" title="dnssec-keygen">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">dnssec-keyfromlabel</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.dnssec-importkey.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.dnssec-keygen.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.dnssec-keyfromlabel"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">dnssec-keyfromlabel</span> &#8212; DNSSEC key generation tool</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">dnssec-keyfromlabel</code> {-l <em class="replaceable"><code>label</code></em>} [<code class="option">-3</code>] [<code class="option">-a <em class="replaceable"><code>algorithm</code></em></code>] [<code class="option">-A <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-D <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-D sync <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] [<code class="option">-f <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-G</code>] [<code class="option">-I <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-i <em class="replaceable"><code>interval</code></em></code>] [<code class="option">-k</code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-L <em class="replaceable"><code>ttl</code></em></code>] [<code class="option">-n <em class="replaceable"><code>nametype</code></em></code>] [<code class="option">-P <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-P sync <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-p <em class="replaceable"><code>protocol</code></em></code>] [<code class="option">-R <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-S <em class="replaceable"><code>key</code></em></code>] [<code class="option">-t <em class="replaceable"><code>type</code></em></code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-V</code>] [<code class="option">-y</code>] {name}</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.11.7"></a><h2>DESCRIPTION</h2>
-<p><span class="command"><strong>dnssec-keyfromlabel</strong></span>
- generates a key pair of files that referencing a key object stored
- in a cryptographic hardware service module (HSM). The private key
- file can be used for DNSSEC signing of zone data as if it were a
- conventional signing key created by <span class="command"><strong>dnssec-keygen</strong></span>,
- but the key material is stored within the HSM, and the actual signing
- takes place there.
- </p>
-<p>
- The <code class="option">name</code> of the key is specified on the command
- line. This must match the name of the zone for which the key is
- being generated.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.11.8"></a><h2>OPTIONS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-a <em class="replaceable"><code>algorithm</code></em></span></dt>
-<dd>
-<p>
- Selects the cryptographic algorithm. The value of
- <code class="option">algorithm</code> must be one of RSAMD5, RSASHA1,
- DSA, NSEC3RSASHA1, NSEC3DSA, RSASHA256, RSASHA512, ECCGOST,
- ECDSAP256SHA256 or ECDSAP384SHA384.
- These values are case insensitive.
- </p>
-<p>
- If no algorithm is specified, then RSASHA1 will be used by
- default, unless the <code class="option">-3</code> option is specified,
- in which case NSEC3RSASHA1 will be used instead. (If
- <code class="option">-3</code> is used and an algorithm is specified,
- that algorithm will be checked for compatibility with NSEC3.)
- </p>
-<p>
- Note 1: that for DNSSEC, RSASHA1 is a mandatory to implement
- algorithm, and DSA is recommended.
- </p>
-<p>
- Note 2: DH automatically sets the -k flag.
- </p>
-</dd>
-<dt><span class="term">-3</span></dt>
-<dd><p>
- Use an NSEC3-capable algorithm to generate a DNSSEC key.
- If this option is used and no algorithm is explicitly
- set on the command line, NSEC3RSASHA1 will be used by
- default.
- </p></dd>
-<dt><span class="term">-E <em class="replaceable"><code>engine</code></em></span></dt>
-<dd>
-<p>
- Specifies the cryptographic hardware to use.
- </p>
-<p>
- When BIND is built with OpenSSL PKCS#11 support, this defaults
- to the string "pkcs11", which identifies an OpenSSL engine
- that can drive a cryptographic accelerator or hardware service
- module. When BIND is built with native PKCS#11 cryptography
- (--enable-native-pkcs11), it defaults to the path of the PKCS#11
- provider library specified via "--with-pkcs11".
- </p>
-</dd>
-<dt><span class="term">-l <em class="replaceable"><code>label</code></em></span></dt>
-<dd>
-<p>
- Specifies the label for a key pair in the crypto hardware.
- </p>
-<p>
- When <acronym class="acronym">BIND</acronym> 9 is built with OpenSSL-based
- PKCS#11 support, the label is an arbitrary string that
- identifies a particular key. It may be preceded by an
- optional OpenSSL engine name, followed by a colon, as in
- "pkcs11:<em class="replaceable"><code>keylabel</code></em>".
- </p>
-<p>
- When <acronym class="acronym">BIND</acronym> 9 is built with native PKCS#11
- support, the label is a PKCS#11 URI string in the format
- "pkcs11:<code class="option">keyword</code>=<em class="replaceable"><code>value</code></em>[<span class="optional">;<code class="option">keyword</code>=<em class="replaceable"><code>value</code></em>;...</span>]"
- Keywords include "token", which identifies the HSM; "object", which
- identifies the key; and "pin-source", which identifies a file from
- which the HSM's PIN code can be obtained. The label will be
- stored in the on-disk "private" file.
- </p>
-<p>
- If the label contains a
- <code class="option">pin-source</code> field, tools using the generated
- key files will be able to use the HSM for signing and other
- operations without any need for an operator to manually enter
- a PIN. Note: Making the HSM's PIN accessible in this manner
- may reduce the security advantage of using an HSM; be sure
- this is what you want to do before making use of this feature.
- </p>
-</dd>
-<dt><span class="term">-n <em class="replaceable"><code>nametype</code></em></span></dt>
-<dd><p>
- Specifies the owner type of the key. The value of
- <code class="option">nametype</code> must either be ZONE (for a DNSSEC
- zone key (KEY/DNSKEY)), HOST or ENTITY (for a key associated with
- a host (KEY)),
- USER (for a key associated with a user(KEY)) or OTHER (DNSKEY).
- These values are case insensitive.
- </p></dd>
-<dt><span class="term">-C</span></dt>
-<dd><p>
- Compatibility mode: generates an old-style key, without
- any metadata. By default, <span class="command"><strong>dnssec-keyfromlabel</strong></span>
- will include the key's creation date in the metadata stored
- with the private key, and other dates may be set there as well
- (publication date, activation date, etc). Keys that include
- this data may be incompatible with older versions of BIND; the
- <code class="option">-C</code> option suppresses them.
- </p></dd>
-<dt><span class="term">-c <em class="replaceable"><code>class</code></em></span></dt>
-<dd><p>
- Indicates that the DNS record containing the key should have
- the specified class. If not specified, class IN is used.
- </p></dd>
-<dt><span class="term">-f <em class="replaceable"><code>flag</code></em></span></dt>
-<dd><p>
- Set the specified flag in the flag field of the KEY/DNSKEY record.
- The only recognized flags are KSK (Key Signing Key) and REVOKE.
- </p></dd>
-<dt><span class="term">-G</span></dt>
-<dd><p>
- Generate a key, but do not publish it or sign with it. This
- option is incompatible with -P and -A.
- </p></dd>
-<dt><span class="term">-h</span></dt>
-<dd><p>
- Prints a short summary of the options and arguments to
- <span class="command"><strong>dnssec-keyfromlabel</strong></span>.
- </p></dd>
-<dt><span class="term">-K <em class="replaceable"><code>directory</code></em></span></dt>
-<dd><p>
- Sets the directory in which the key files are to be written.
- </p></dd>
-<dt><span class="term">-k</span></dt>
-<dd><p>
- Generate KEY records rather than DNSKEY records.
- </p></dd>
-<dt><span class="term">-L <em class="replaceable"><code>ttl</code></em></span></dt>
-<dd><p>
- Sets the default TTL to use for this key when it is converted
- into a DNSKEY RR. If the key is imported into a zone,
- this is the TTL that will be used for it, unless there was
- already a DNSKEY RRset in place, in which case the existing TTL
- would take precedence. Setting the default TTL to
- <code class="literal">0</code> or <code class="literal">none</code> removes it.
- </p></dd>
-<dt><span class="term">-p <em class="replaceable"><code>protocol</code></em></span></dt>
-<dd><p>
- Sets the protocol value for the key. The protocol
- is a number between 0 and 255. The default is 3 (DNSSEC).
- Other possible values for this argument are listed in
- RFC 2535 and its successors.
- </p></dd>
-<dt><span class="term">-S <em class="replaceable"><code>key</code></em></span></dt>
-<dd><p>
- Generate a key as an explicit successor to an existing key.
- The name, algorithm, size, and type of the key will be set
- to match the predecessor. The activation date of the new
- key will be set to the inactivation date of the existing
- one. The publication date will be set to the activation
- date minus the prepublication interval, which defaults to
- 30 days.
- </p></dd>
-<dt><span class="term">-t <em class="replaceable"><code>type</code></em></span></dt>
-<dd><p>
- Indicates the use of the key. <code class="option">type</code> must be
- one of AUTHCONF, NOAUTHCONF, NOAUTH, or NOCONF. The default
- is AUTHCONF. AUTH refers to the ability to authenticate
- data, and CONF the ability to encrypt data.
- </p></dd>
-<dt><span class="term">-v <em class="replaceable"><code>level</code></em></span></dt>
-<dd><p>
- Sets the debugging level.
- </p></dd>
-<dt><span class="term">-V</span></dt>
-<dd><p>
- Prints version information.
- </p></dd>
-<dt><span class="term">-y</span></dt>
-<dd><p>
- Allows DNSSEC key files to be generated even if the key ID
- would collide with that of an existing key, in the event of
- either key being revoked. (This is only safe to use if you
- are sure you won't be using RFC 5011 trust anchor maintenance
- with either of the keys involved.)
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.11.9"></a><h2>TIMING OPTIONS</h2>
-<p>
- Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS.
- If the argument begins with a '+' or '-', it is interpreted as
- an offset from the present time. For convenience, if such an offset
- is followed by one of the suffixes 'y', 'mo', 'w', 'd', 'h', or 'mi',
- then the offset is computed in years (defined as 365 24-hour days,
- ignoring leap years), months (defined as 30 24-hour days), weeks,
- days, hours, or minutes, respectively. Without a suffix, the offset
- is computed in seconds. To explicitly prevent a date from being
- set, use 'none' or 'never'.
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-P <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which a key is to be published to the zone.
- After that date, the key will be included in the zone but will
- not be used to sign it. If not set, and if the -G option has
- not been used, the default is "now".
- </p></dd>
-<dt><span class="term">-P sync <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which the CDS and CDNSKEY records which match
- this key are to be published to the zone.
- </p></dd>
-<dt><span class="term">-A <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which the key is to be activated. After that
- date, the key will be included in the zone and used to sign
- it. If not set, and if the -G option has not been used, the
- default is "now".
- </p></dd>
-<dt><span class="term">-R <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which the key is to be revoked. After that
- date, the key will be flagged as revoked. It will be included
- in the zone and will be used to sign it.
- </p></dd>
-<dt><span class="term">-I <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which the key is to be retired. After that
- date, the key will still be included in the zone, but it
- will not be used to sign it.
- </p></dd>
-<dt><span class="term">-D <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which the key is to be deleted. After that
- date, the key will no longer be included in the zone. (It
- may remain in the key repository, however.)
- </p></dd>
-<dt><span class="term">-D sync <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which the CDS and CDNSKEY records which match
- this key are to be deleted.
- </p></dd>
-<dt><span class="term">-i <em class="replaceable"><code>interval</code></em></span></dt>
-<dd>
-<p>
- Sets the prepublication interval for a key. If set, then
- the publication and activation dates must be separated by at least
- this much time. If the activation date is specified but the
- publication date isn't, then the publication date will default
- to this much time before the activation date; conversely, if
- the publication date is specified but activation date isn't,
- then activation will be set to this much time after publication.
- </p>
-<p>
- If the key is being created as an explicit successor to another
- key, then the default prepublication interval is 30 days;
- otherwise it is zero.
- </p>
-<p>
- As with date offsets, if the argument is followed by one of
- the suffixes 'y', 'mo', 'w', 'd', 'h', or 'mi', then the
- interval is measured in years, months, weeks, days, hours,
- or minutes, respectively. Without a suffix, the interval is
- measured in seconds.
- </p>
-</dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.11.10"></a><h2>GENERATED KEY FILES</h2>
-<p>
- When <span class="command"><strong>dnssec-keyfromlabel</strong></span> completes
- successfully,
- it prints a string of the form <code class="filename">Knnnn.+aaa+iiiii</code>
- to the standard output. This is an identification string for
- the key files it has generated.
- </p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem"><p><code class="filename">nnnn</code> is the key name.
- </p></li>
-<li class="listitem"><p><code class="filename">aaa</code> is the numeric representation
- of the algorithm.
- </p></li>
-<li class="listitem"><p><code class="filename">iiiii</code> is the key identifier (or
- footprint).
- </p></li>
-</ul></div>
-<p><span class="command"><strong>dnssec-keyfromlabel</strong></span>
- creates two files, with names based
- on the printed string. <code class="filename">Knnnn.+aaa+iiiii.key</code>
- contains the public key, and
- <code class="filename">Knnnn.+aaa+iiiii.private</code> contains the
- private key.
- </p>
-<p>
- The <code class="filename">.key</code> file contains a DNS KEY record
- that
- can be inserted into a zone file (directly or with a $INCLUDE
- statement).
- </p>
-<p>
- The <code class="filename">.private</code> file contains
- algorithm-specific
- fields. For obvious security reasons, this file does not have
- general read permission.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.11.11"></a><h2>SEE ALSO</h2>
-<p><span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">dnssec-signzone</span>(8)</span>,
- <em class="citetitle">BIND 9 Administrator Reference Manual</em>,
- <em class="citetitle">RFC 4034</em>,
- <em class="citetitle">The PKCS#11 URI Scheme (draft-pechanec-pkcs11uri-13)</em>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.dnssec-importkey.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.dnssec-keygen.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">dnssec-importkey</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">dnssec-keygen</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.dnssec-keygen.html b/doc/arm/man.dnssec-keygen.html
deleted file mode 100644
index 23434138..00000000
--- a/doc/arm/man.dnssec-keygen.html
+++ /dev/null
@@ -1,462 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>dnssec-keygen</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.dnssec-keyfromlabel.html" title="dnssec-keyfromlabel">
-<link rel="next" href="man.dnssec-keymgr.html" title="dnssec-keymgr">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">dnssec-keygen</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.dnssec-keyfromlabel.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.dnssec-keymgr.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.dnssec-keygen"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">dnssec-keygen</span> &#8212; DNSSEC key generation tool</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">dnssec-keygen</code> [<code class="option">-a <em class="replaceable"><code>algorithm</code></em></code>] [<code class="option">-b <em class="replaceable"><code>keysize</code></em></code>] [<code class="option">-n <em class="replaceable"><code>nametype</code></em></code>] [<code class="option">-3</code>] [<code class="option">-A <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-C</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-D <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-D sync <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] [<code class="option">-f <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-G</code>] [<code class="option">-g <em class="replaceable"><code>generator</code></em></code>] [<code class="option">-h</code>] [<code class="option">-I <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-i <em class="replaceable"><code>interval</code></em></code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-k</code>] [<code class="option">-L <em class="replaceable"><code>ttl</code></em></code>] [<code class="option">-P <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-P sync <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-p <em class="replaceable"><code>protocol</code></em></code>] [<code class="option">-q</code>] [<code class="option">-R <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-r <em class="replaceable"><code>randomdev</code></em></code>] [<code class="option">-S <em class="replaceable"><code>key</code></em></code>] [<code class="option">-s <em class="replaceable"><code>strength</code></em></code>] [<code class="option">-t <em class="replaceable"><code>type</code></em></code>] [<code class="option">-V</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-z</code>] {name}</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.12.7"></a><h2>DESCRIPTION</h2>
-<p><span class="command"><strong>dnssec-keygen</strong></span>
- generates keys for DNSSEC (Secure DNS), as defined in RFC 2535
- and RFC 4034. It can also generate keys for use with
- TSIG (Transaction Signatures) as defined in RFC 2845, or TKEY
- (Transaction Key) as defined in RFC 2930.
- </p>
-<p>
- The <code class="option">name</code> of the key is specified on the command
- line. For DNSSEC keys, this must match the name of the zone for
- which the key is being generated.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.12.8"></a><h2>OPTIONS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-a <em class="replaceable"><code>algorithm</code></em></span></dt>
-<dd>
-<p>
- Selects the cryptographic algorithm. For DNSSEC keys, the value
- of <code class="option">algorithm</code> must be one of RSAMD5, RSASHA1,
- DSA, NSEC3RSASHA1, NSEC3DSA, RSASHA256, RSASHA512, ECCGOST,
- ECDSAP256SHA256 or ECDSAP384SHA384.
- For TSIG/TKEY, the value must
- be DH (Diffie Hellman), HMAC-MD5, HMAC-SHA1, HMAC-SHA224,
- HMAC-SHA256, HMAC-SHA384, or HMAC-SHA512. These values are
- case insensitive.
- </p>
-<p>
- If no algorithm is specified, then RSASHA1 will be used by
- default, unless the <code class="option">-3</code> option is specified,
- in which case NSEC3RSASHA1 will be used instead. (If
- <code class="option">-3</code> is used and an algorithm is specified,
- that algorithm will be checked for compatibility with NSEC3.)
- </p>
-<p>
- Note 1: that for DNSSEC, RSASHA1 is a mandatory to implement
- algorithm, and DSA is recommended. For TSIG, HMAC-MD5 is
- mandatory.
- </p>
-<p>
- Note 2: DH, HMAC-MD5, and HMAC-SHA1 through HMAC-SHA512
- automatically set the -T KEY option.
- </p>
-</dd>
-<dt><span class="term">-b <em class="replaceable"><code>keysize</code></em></span></dt>
-<dd>
-<p>
- Specifies the number of bits in the key. The choice of key
- size depends on the algorithm used. RSA keys must be
- between 512 and 2048 bits. Diffie Hellman keys must be between
- 128 and 4096 bits. DSA keys must be between 512 and 1024
- bits and an exact multiple of 64. HMAC keys must be
- between 1 and 512 bits. Elliptic curve algorithms don't need
- this parameter.
- </p>
-<p>
- The key size does not need to be specified if using a default
- algorithm. The default key size is 1024 bits for zone signing
- keys (ZSKs) and 2048 bits for key signing keys (KSKs,
- generated with <code class="option">-f KSK</code>). However, if an
- algorithm is explicitly specified with the <code class="option">-a</code>,
- then there is no default key size, and the <code class="option">-b</code>
- must be used.
- </p>
-</dd>
-<dt><span class="term">-n <em class="replaceable"><code>nametype</code></em></span></dt>
-<dd><p>
- Specifies the owner type of the key. The value of
- <code class="option">nametype</code> must either be ZONE (for a DNSSEC
- zone key (KEY/DNSKEY)), HOST or ENTITY (for a key associated with
- a host (KEY)),
- USER (for a key associated with a user(KEY)) or OTHER (DNSKEY).
- These values are case insensitive. Defaults to ZONE for DNSKEY
- generation.
- </p></dd>
-<dt><span class="term">-3</span></dt>
-<dd><p>
- Use an NSEC3-capable algorithm to generate a DNSSEC key.
- If this option is used and no algorithm is explicitly
- set on the command line, NSEC3RSASHA1 will be used by
- default. Note that RSASHA256, RSASHA512, ECCGOST,
- ECDSAP256SHA256 and ECDSAP384SHA384 algorithms
- are NSEC3-capable.
- </p></dd>
-<dt><span class="term">-C</span></dt>
-<dd><p>
- Compatibility mode: generates an old-style key, without
- any metadata. By default, <span class="command"><strong>dnssec-keygen</strong></span>
- will include the key's creation date in the metadata stored
- with the private key, and other dates may be set there as well
- (publication date, activation date, etc). Keys that include
- this data may be incompatible with older versions of BIND; the
- <code class="option">-C</code> option suppresses them.
- </p></dd>
-<dt><span class="term">-c <em class="replaceable"><code>class</code></em></span></dt>
-<dd><p>
- Indicates that the DNS record containing the key should have
- the specified class. If not specified, class IN is used.
- </p></dd>
-<dt><span class="term">-E <em class="replaceable"><code>engine</code></em></span></dt>
-<dd>
-<p>
- Specifies the cryptographic hardware to use, when applicable.
- </p>
-<p>
- When BIND is built with OpenSSL PKCS#11 support, this defaults
- to the string "pkcs11", which identifies an OpenSSL engine
- that can drive a cryptographic accelerator or hardware service
- module. When BIND is built with native PKCS#11 cryptography
- (--enable-native-pkcs11), it defaults to the path of the PKCS#11
- provider library specified via "--with-pkcs11".
- </p>
-</dd>
-<dt><span class="term">-f <em class="replaceable"><code>flag</code></em></span></dt>
-<dd><p>
- Set the specified flag in the flag field of the KEY/DNSKEY record.
- The only recognized flags are KSK (Key Signing Key) and REVOKE.
- </p></dd>
-<dt><span class="term">-G</span></dt>
-<dd><p>
- Generate a key, but do not publish it or sign with it. This
- option is incompatible with -P and -A.
- </p></dd>
-<dt><span class="term">-g <em class="replaceable"><code>generator</code></em></span></dt>
-<dd><p>
- If generating a Diffie Hellman key, use this generator.
- Allowed values are 2 and 5. If no generator
- is specified, a known prime from RFC 2539 will be used
- if possible; otherwise the default is 2.
- </p></dd>
-<dt><span class="term">-h</span></dt>
-<dd><p>
- Prints a short summary of the options and arguments to
- <span class="command"><strong>dnssec-keygen</strong></span>.
- </p></dd>
-<dt><span class="term">-K <em class="replaceable"><code>directory</code></em></span></dt>
-<dd><p>
- Sets the directory in which the key files are to be written.
- </p></dd>
-<dt><span class="term">-k</span></dt>
-<dd><p>
- Deprecated in favor of -T KEY.
- </p></dd>
-<dt><span class="term">-L <em class="replaceable"><code>ttl</code></em></span></dt>
-<dd><p>
- Sets the default TTL to use for this key when it is converted
- into a DNSKEY RR. If the key is imported into a zone,
- this is the TTL that will be used for it, unless there was
- already a DNSKEY RRset in place, in which case the existing TTL
- would take precedence. If this value is not set and there
- is no existing DNSKEY RRset, the TTL will default to the
- SOA TTL. Setting the default TTL to <code class="literal">0</code>
- or <code class="literal">none</code> is the same as leaving it unset.
- </p></dd>
-<dt><span class="term">-p <em class="replaceable"><code>protocol</code></em></span></dt>
-<dd><p>
- Sets the protocol value for the generated key. The protocol
- is a number between 0 and 255. The default is 3 (DNSSEC).
- Other possible values for this argument are listed in
- RFC 2535 and its successors.
- </p></dd>
-<dt><span class="term">-q</span></dt>
-<dd><p>
- Quiet mode: Suppresses unnecessary output, including
- progress indication. Without this option, when
- <span class="command"><strong>dnssec-keygen</strong></span> is run interactively
- to generate an RSA or DSA key pair, it will print a string
- of symbols to <code class="filename">stderr</code> indicating the
- progress of the key generation. A '.' indicates that a
- random number has been found which passed an initial
- sieve test; '+' means a number has passed a single
- round of the Miller-Rabin primality test; a space
- means that the number has passed all the tests and is
- a satisfactory key.
- </p></dd>
-<dt><span class="term">-r <em class="replaceable"><code>randomdev</code></em></span></dt>
-<dd><p>
- Specifies the source of randomness. If the operating
- system does not provide a <code class="filename">/dev/random</code>
- or equivalent device, the default source of randomness
- is keyboard input. <code class="filename">randomdev</code>
- specifies
- the name of a character device or file containing random
- data to be used instead of the default. The special value
- <code class="filename">keyboard</code> indicates that keyboard
- input should be used.
- </p></dd>
-<dt><span class="term">-S <em class="replaceable"><code>key</code></em></span></dt>
-<dd><p>
- Create a new key which is an explicit successor to an
- existing key. The name, algorithm, size, and type of the
- key will be set to match the existing key. The activation
- date of the new key will be set to the inactivation date of
- the existing one. The publication date will be set to the
- activation date minus the prepublication interval, which
- defaults to 30 days.
- </p></dd>
-<dt><span class="term">-s <em class="replaceable"><code>strength</code></em></span></dt>
-<dd><p>
- Specifies the strength value of the key. The strength is
- a number between 0 and 15, and currently has no defined
- purpose in DNSSEC.
- </p></dd>
-<dt><span class="term">-T <em class="replaceable"><code>rrtype</code></em></span></dt>
-<dd>
-<p>
- Specifies the resource record type to use for the key.
- <code class="option">rrtype</code> must be either DNSKEY or KEY. The
- default is DNSKEY when using a DNSSEC algorithm, but it can be
- overridden to KEY for use with SIG(0).
- </p>
-<p>
- </p>
-<p>
- Using any TSIG algorithm (HMAC-* or DH) forces this option
- to KEY.
- </p>
-</dd>
-<dt><span class="term">-t <em class="replaceable"><code>type</code></em></span></dt>
-<dd><p>
- Indicates the use of the key. <code class="option">type</code> must be
- one of AUTHCONF, NOAUTHCONF, NOAUTH, or NOCONF. The default
- is AUTHCONF. AUTH refers to the ability to authenticate
- data, and CONF the ability to encrypt data.
- </p></dd>
-<dt><span class="term">-v <em class="replaceable"><code>level</code></em></span></dt>
-<dd><p>
- Sets the debugging level.
- </p></dd>
-<dt><span class="term">-V</span></dt>
-<dd><p>
- Prints version information.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.12.9"></a><h2>TIMING OPTIONS</h2>
-<p>
- Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS.
- If the argument begins with a '+' or '-', it is interpreted as
- an offset from the present time. For convenience, if such an offset
- is followed by one of the suffixes 'y', 'mo', 'w', 'd', 'h', or 'mi',
- then the offset is computed in years (defined as 365 24-hour days,
- ignoring leap years), months (defined as 30 24-hour days), weeks,
- days, hours, or minutes, respectively. Without a suffix, the offset
- is computed in seconds. To explicitly prevent a date from being
- set, use 'none' or 'never'.
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-P <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which a key is to be published to the zone.
- After that date, the key will be included in the zone but will
- not be used to sign it. If not set, and if the -G option has
- not been used, the default is "now".
- </p></dd>
-<dt><span class="term">-P sync <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which CDS and CDNSKEY records that match this
- key are to be published to the zone.
- </p></dd>
-<dt><span class="term">-A <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which the key is to be activated. After that
- date, the key will be included in the zone and used to sign
- it. If not set, and if the -G option has not been used, the
- default is "now". If set, if and -P is not set, then
- the publication date will be set to the activation date
- minus the prepublication interval.
- </p></dd>
-<dt><span class="term">-R <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which the key is to be revoked. After that
- date, the key will be flagged as revoked. It will be included
- in the zone and will be used to sign it.
- </p></dd>
-<dt><span class="term">-I <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which the key is to be retired. After that
- date, the key will still be included in the zone, but it
- will not be used to sign it.
- </p></dd>
-<dt><span class="term">-D <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which the key is to be deleted. After that
- date, the key will no longer be included in the zone. (It
- may remain in the key repository, however.)
- </p></dd>
-<dt><span class="term">-D sync <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which the CDS and CDNSKEY records that match this
- key are to be deleted.
- </p></dd>
-<dt><span class="term">-i <em class="replaceable"><code>interval</code></em></span></dt>
-<dd>
-<p>
- Sets the prepublication interval for a key. If set, then
- the publication and activation dates must be separated by at least
- this much time. If the activation date is specified but the
- publication date isn't, then the publication date will default
- to this much time before the activation date; conversely, if
- the publication date is specified but activation date isn't,
- then activation will be set to this much time after publication.
- </p>
-<p>
- If the key is being created as an explicit successor to another
- key, then the default prepublication interval is 30 days;
- otherwise it is zero.
- </p>
-<p>
- As with date offsets, if the argument is followed by one of
- the suffixes 'y', 'mo', 'w', 'd', 'h', or 'mi', then the
- interval is measured in years, months, weeks, days, hours,
- or minutes, respectively. Without a suffix, the interval is
- measured in seconds.
- </p>
-</dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.12.10"></a><h2>GENERATED KEYS</h2>
-<p>
- When <span class="command"><strong>dnssec-keygen</strong></span> completes
- successfully,
- it prints a string of the form <code class="filename">Knnnn.+aaa+iiiii</code>
- to the standard output. This is an identification string for
- the key it has generated.
- </p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem"><p><code class="filename">nnnn</code> is the key name.
- </p></li>
-<li class="listitem"><p><code class="filename">aaa</code> is the numeric representation
- of the
- algorithm.
- </p></li>
-<li class="listitem"><p><code class="filename">iiiii</code> is the key identifier (or
- footprint).
- </p></li>
-</ul></div>
-<p><span class="command"><strong>dnssec-keygen</strong></span>
- creates two files, with names based
- on the printed string. <code class="filename">Knnnn.+aaa+iiiii.key</code>
- contains the public key, and
- <code class="filename">Knnnn.+aaa+iiiii.private</code> contains the
- private
- key.
- </p>
-<p>
- The <code class="filename">.key</code> file contains a DNS KEY record
- that
- can be inserted into a zone file (directly or with a $INCLUDE
- statement).
- </p>
-<p>
- The <code class="filename">.private</code> file contains
- algorithm-specific
- fields. For obvious security reasons, this file does not have
- general read permission.
- </p>
-<p>
- Both <code class="filename">.key</code> and <code class="filename">.private</code>
- files are generated for symmetric cryptography algorithms such as
- HMAC-MD5, even though the public and private key are equivalent.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.12.11"></a><h2>EXAMPLE</h2>
-<p>
- To generate a 768-bit DSA key for the domain
- <strong class="userinput"><code>example.com</code></strong>, the following command would be
- issued:
- </p>
-<p><strong class="userinput"><code>dnssec-keygen -a DSA -b 768 -n ZONE example.com</code></strong>
- </p>
-<p>
- The command would print a string of the form:
- </p>
-<p><strong class="userinput"><code>Kexample.com.+003+26160</code></strong>
- </p>
-<p>
- In this example, <span class="command"><strong>dnssec-keygen</strong></span> creates
- the files <code class="filename">Kexample.com.+003+26160.key</code>
- and
- <code class="filename">Kexample.com.+003+26160.private</code>.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.12.12"></a><h2>SEE ALSO</h2>
-<p><span class="citerefentry"><span class="refentrytitle">dnssec-signzone</span>(8)</span>,
- <em class="citetitle">BIND 9 Administrator Reference Manual</em>,
- <em class="citetitle">RFC 2539</em>,
- <em class="citetitle">RFC 2845</em>,
- <em class="citetitle">RFC 4034</em>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.dnssec-keyfromlabel.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.dnssec-keymgr.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">dnssec-keyfromlabel</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">dnssec-keymgr</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.dnssec-keymgr.html b/doc/arm/man.dnssec-keymgr.html
deleted file mode 100644
index 201d6a07..00000000
--- a/doc/arm/man.dnssec-keymgr.html
+++ /dev/null
@@ -1,314 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>dnssec-keymgr</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.dnssec-keygen.html" title="dnssec-keygen">
-<link rel="next" href="man.dnssec-revoke.html" title="dnssec-revoke">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">dnssec-keymgr</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.dnssec-keygen.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.dnssec-revoke.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.dnssec-keymgr"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">dnssec-keymgr</span> &#8212; Ensures correct DNSKEY coverage for a zone based on a defined policy</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">dnssec-keymgr</code> [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-c <em class="replaceable"><code>file</code></em></code>] [<code class="option">-f</code>] [<code class="option">-k</code>] [<code class="option">-q</code>] [<code class="option">-v</code>] [<code class="option">-z</code>] [<code class="option">-g <em class="replaceable"><code>path</code></em></code>] [<code class="option">-r <em class="replaceable"><code>path</code></em></code>] [<code class="option">-s <em class="replaceable"><code>path</code></em></code>] [zone...]</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.13.7"></a><h2>DESCRIPTION</h2>
-<p>
- <span class="command"><strong>dnssec-keymgr</strong></span> is a high level Python wrapper
- to facilitate the key rollover process for zones handled by
- BIND. It uses the BIND commands for manipulating DNSSEC key
- metadata: <span class="command"><strong>dnssec-keygen</strong></span> and
- <span class="command"><strong>dnssec-settime</strong></span>.
- </p>
-<p>
- DNSSEC policy can be read from a configuration file (default
- <code class="filename">/etc/dnssec-policy.conf</code>), from which the key
- parameters, publication and rollover schedule, and desired
- coverage duration for any given zone can be determined. This
- file may be used to define individual DNSSEC policies on a
- per-zone basis, or to set a default policy used for all zones.
- </p>
-<p>
- When <span class="command"><strong>dnssec-keymgr</strong></span> runs, it examines the DNSSEC
- keys for one or more zones, comparing their timing metadata against
- the policies for those zones. If key settings do not conform to the
- DNSSEC policy (for example, because the policy has been changed),
- they are automatically corrected.
- </p>
-<p>
- A zone policy can specify a duration for which we want to
- ensure the key correctness (<code class="option">coverage</code>). It can
- also specify a rollover period (<code class="option">roll-period</code>).
- If policy indicates that a key should roll over before the
- coverage period ends, then a successor key will automatically be
- created and added to the end of the key series.
- </p>
-<p>
- If zones are specified on the command line,
- <span class="command"><strong>dnssec-keymgr</strong></span> will examine only those zones.
- If a specified zone does not already have keys in place, then
- keys will be generated for it according to policy.
- </p>
-<p>
- If zones are <span class="emphasis"><em>not</em></span> specified on the command
- line, then <span class="command"><strong>dnssec-keymgr</strong></span> will search the
- key directory (either the current working directory or the directory
- set by the <code class="option">-K</code> option), and check the keys for
- all the zones represented in the directory.
- </p>
-<p>
- It is expected that this tool will be run automatically and
- unattended (for example, by <span class="command"><strong>cron</strong></span>).
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.13.8"></a><h2>OPTIONS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-c <em class="replaceable"><code>file</code></em></span></dt>
-<dd><p>
- If <code class="option">-c</code> is specified, then the DNSSEC
- policy is read from <code class="option">file</code>. (If not
- specified, then the policy is read from
- <code class="filename">/etc/dnssec-policy.conf</code>; if that file
- doesn't exist, a built-in global default policy is used.)
- </p></dd>
-<dt><span class="term">-f</span></dt>
-<dd><p>
- Force: allow updating of key events even if they are
- already in the past. This is not recommended for use with
- zones in which keys have already been published. However,
- if a set of keys has been generated all of which have
- publication and activation dates in the past, but the
- keys have not been published in a zone as yet, then this
- option can be used to clean them up and turn them into a
- proper series of keys with appropriate rollover intervals.
- </p></dd>
-<dt><span class="term">-g <em class="replaceable"><code>keygen-path</code></em></span></dt>
-<dd><p>
- Specifies a path to a <span class="command"><strong>dnssec-keygen</strong></span> binary.
- Used for testing.
- See also the <code class="option">-s</code> option.
- </p></dd>
-<dt><span class="term">-h</span></dt>
-<dd><p>
- Print the <span class="command"><strong>dnssec-keymgr</strong></span> help summary
- and exit.
- </p></dd>
-<dt><span class="term">-K <em class="replaceable"><code>directory</code></em></span></dt>
-<dd><p>
- Sets the directory in which keys can be found. Defaults to the
- current working directory.
- </p></dd>
-<dt><span class="term">-k</span></dt>
-<dd><p>
- Only apply policies to KSK keys.
- See also the <code class="option">-z</code> option.
- </p></dd>
-<dt><span class="term">-q</span></dt>
-<dd><p>
- Quiet: suppress printing of <span class="command"><strong>dnssec-keygen</strong></span>
- and <span class="command"><strong>dnssec-settime</strong></span>.
- </p></dd>
-<dt><span class="term">-r <em class="replaceable"><code>randomdev</code></em></span></dt>
-<dd><p>
- Specifies a path to a file containing random data.
- This is passed to the <span class="command"><strong>dnssec-keygen</strong></span> binary
- using its <code class="option">-r</code> option.
-
- </p></dd>
-<dt><span class="term">-s <em class="replaceable"><code>settime-path</code></em></span></dt>
-<dd><p>
- Specifies a path to a <span class="command"><strong>dnssec-settime</strong></span> binary.
- Used for testing.
- See also the <code class="option">-g</code> option.
- </p></dd>
-<dt><span class="term">-v</span></dt>
-<dd><p>
- Print the <span class="command"><strong>dnssec-keymgr</strong></span> version and exit.
- </p></dd>
-<dt><span class="term">-z</span></dt>
-<dd><p>
- Only apply policies to ZSK keys.
- See also the <code class="option">-k</code> option.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.13.9"></a><h2>POLICY CONFIGURATION</h2>
-<p>
- The <code class="filename">dnssec-policy.conf</code> file can specify three kinds
- of policies:
- </p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem"><p>
- <span class="emphasis"><em>Policy classes</em></span>
- (<code class="option">policy <em class="replaceable"><code>name</code></em> { ... };</code>)
- can be inherited by zone policies or other policy classes; these
- can be used to create sets of different security profiles. For
- example, a policy class <strong class="userinput"><code>normal</code></strong> might specify
- 1024-bit key sizes, but a class <strong class="userinput"><code>extra</code></strong> might
- specify 2048 bits instead; <strong class="userinput"><code>extra</code></strong> would be
- used for zones that had unusually high security needs.
- </p></li>
-<li class="listitem"><p>
- Algorithm policies:
- (<code class="option">algorithm-policy <em class="replaceable"><code>algorithm</code></em> { ... };</code> )
- override default per-algorithm settings. For example, by default,
- RSASHA256 keys use 2048-bit key sizes for both KSK and ZSK. This
- can be modified using <span class="command"><strong>algorithm-policy</strong></span>, and the
- new key sizes would then be used for any key of type RSASHA256.
- </p></li>
-<li class="listitem"><p>
- Zone policies:
- (<code class="option">zone <em class="replaceable"><code>name</code></em> { ... };</code> )
- set policy for a single zone by name. A zone policy can inherit
- a policy class by including a <code class="option">policy</code> option.
- </p></li>
-</ul></div>
-<p>
- Options that can be specified in policies:
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><span class="command"><strong>algorithm</strong></span></span></dt>
-<dd><p>
- The key algorithm. If no policy is defined, the default is
- RSASHA256.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>coverage</strong></span></span></dt>
-<dd><p>
- The length of time to ensure that keys will be correct; no action
- will be taken to create new keys to be activated after this time.
- This can be represented as a number of seconds, or as a duration using
- human-readable units (examples: "1y" or "6 months").
- A default value for this option can be set in algorithm policies
- as well as in policy classes or zone policies.
- If no policy is configured, the default is six months.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>directory</strong></span></span></dt>
-<dd><p>
- Specifies the directory in which keys should be stored.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>key-size</strong></span></span></dt>
-<dd><p>
- Specifies the number of bits to use in creating keys.
- Takes two arguments: keytype (eihter "zsk" or "ksk") and size.
- A default value for this option can be set in algorithm policies
- as well as in policy classes or zone policies. If no policy is
- configured, the default is 1024 bits for DSA keys and 2048 for
- RSA.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>keyttl</strong></span></span></dt>
-<dd><p>
- The key TTL. If no policy is defined, the default is one hour.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>post-publish</strong></span></span></dt>
-<dd><p>
- How long after inactivation a key should be deleted from the zone.
- Note: If <code class="option">roll-period</code> is not set, this value is
- ignored. Takes two arguments: keytype (eihter "zsk" or "ksk") and a
- duration. A default value for this option can be set in algorithm
- policies as well as in policy classes or zone policies. The default
- is one month.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>pre-publish</strong></span></span></dt>
-<dd><p>
- How long before activation a key should be published. Note: If
- <code class="option">roll-period</code> is not set, this value is ignored.
- Takes two arguments: keytype (either "zsk" or "ksk") and a duration.
- A default value for this option can be set in algorithm policies
- as well as in policy classes or zone policies. The default is
- one month.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>roll-period</strong></span></span></dt>
-<dd><p>
- How frequently keys should be rolled over.
- Takes two arguments: keytype (eihter "zsk" or "ksk") and a duration.
- A default value for this option can be set in algorithm policies
- as well as in policy classes or zone policies. If no policy is
- configured, the default is one year for ZSK's. KSK's do not
- roll over by default.
- </p></dd>
-<dt><span class="term"><span class="command"><strong>standby</strong></span></span></dt>
-<dd><p>
- Not yet implemented.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.13.10"></a><h2>REMAINING WORK</h2>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem"><p>
- Enable scheduling of KSK rollovers using the <code class="option">-P sync</code>
- and <code class="option">-D sync</code> options to
- <span class="command"><strong>dnssec-keygen</strong></span> and
- <span class="command"><strong>dnssec-settime</strong></span>. Check the parent zone
- (as in <span class="command"><strong>dnssec-checkds</strong></span>) to determine when it's
- safe for the key to roll.
- </p></li>
-<li class="listitem"><p>
- Allow configuration of standby keys and use of the REVOKE bit,
- for keys that use RFC 5011 semantics.
- </p></li>
-</ul></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.13.11"></a><h2>SEE ALSO</h2>
-<p>
- <span class="citerefentry"><span class="refentrytitle">dnssec-coverage</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">dnssec-settime</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">dnssec-checkds</span>(8)</span>
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.dnssec-keygen.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.dnssec-revoke.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">dnssec-keygen</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">dnssec-revoke</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.dnssec-revoke.html b/doc/arm/man.dnssec-revoke.html
deleted file mode 100644
index d40fd4fa..00000000
--- a/doc/arm/man.dnssec-revoke.html
+++ /dev/null
@@ -1,131 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>dnssec-revoke</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.dnssec-keymgr.html" title="dnssec-keymgr">
-<link rel="next" href="man.dnssec-settime.html" title="dnssec-settime">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">dnssec-revoke</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.dnssec-keymgr.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.dnssec-settime.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.dnssec-revoke"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">dnssec-revoke</span> &#8212; set the REVOKED bit on a DNSSEC key</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">dnssec-revoke</code> [<code class="option">-hr</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-V</code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] [<code class="option">-f</code>] [<code class="option">-R</code>] {keyfile}</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.14.7"></a><h2>DESCRIPTION</h2>
-<p><span class="command"><strong>dnssec-revoke</strong></span>
- reads a DNSSEC key file, sets the REVOKED bit on the key as defined
- in RFC 5011, and creates a new pair of key files containing the
- now-revoked key.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.14.8"></a><h2>OPTIONS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-h</span></dt>
-<dd><p>
- Emit usage message and exit.
- </p></dd>
-<dt><span class="term">-K <em class="replaceable"><code>directory</code></em></span></dt>
-<dd><p>
- Sets the directory in which the key files are to reside.
- </p></dd>
-<dt><span class="term">-r</span></dt>
-<dd><p>
- After writing the new keyset files remove the original keyset
- files.
- </p></dd>
-<dt><span class="term">-v <em class="replaceable"><code>level</code></em></span></dt>
-<dd><p>
- Sets the debugging level.
- </p></dd>
-<dt><span class="term">-V</span></dt>
-<dd><p>
- Prints version information.
- </p></dd>
-<dt><span class="term">-E <em class="replaceable"><code>engine</code></em></span></dt>
-<dd>
-<p>
- Specifies the cryptographic hardware to use, when applicable.
- </p>
-<p>
- When BIND is built with OpenSSL PKCS#11 support, this defaults
- to the string "pkcs11", which identifies an OpenSSL engine
- that can drive a cryptographic accelerator or hardware service
- module. When BIND is built with native PKCS#11 cryptography
- (--enable-native-pkcs11), it defaults to the path of the PKCS#11
- provider library specified via "--with-pkcs11".
- </p>
-</dd>
-<dt><span class="term">-f</span></dt>
-<dd><p>
- Force overwrite: Causes <span class="command"><strong>dnssec-revoke</strong></span> to
- write the new key pair even if a file already exists matching
- the algorithm and key ID of the revoked key.
- </p></dd>
-<dt><span class="term">-R</span></dt>
-<dd><p>
- Print the key tag of the key with the REVOKE bit set but do
- not revoke the key.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.14.9"></a><h2>SEE ALSO</h2>
-<p><span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
- <em class="citetitle">BIND 9 Administrator Reference Manual</em>,
- <em class="citetitle">RFC 5011</em>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.dnssec-keymgr.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.dnssec-settime.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">dnssec-keymgr</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">dnssec-settime</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.dnssec-settime.html b/doc/arm/man.dnssec-settime.html
deleted file mode 100644
index e3a662c3..00000000
--- a/doc/arm/man.dnssec-settime.html
+++ /dev/null
@@ -1,274 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>dnssec-settime</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.dnssec-revoke.html" title="dnssec-revoke">
-<link rel="next" href="man.dnssec-signzone.html" title="dnssec-signzone">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">dnssec-settime</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.dnssec-revoke.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.dnssec-signzone.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.dnssec-settime"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">dnssec-settime</span> &#8212; set the key timing metadata for a DNSSEC key</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">dnssec-settime</code> [<code class="option">-f</code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-L <em class="replaceable"><code>ttl</code></em></code>] [<code class="option">-P <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-P sync <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-A <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-R <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-I <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-D <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-D sync <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-h</code>] [<code class="option">-V</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] {keyfile}</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.15.7"></a><h2>DESCRIPTION</h2>
-<p><span class="command"><strong>dnssec-settime</strong></span>
- reads a DNSSEC private key file and sets the key timing metadata
- as specified by the <code class="option">-P</code>, <code class="option">-A</code>,
- <code class="option">-R</code>, <code class="option">-I</code>, and <code class="option">-D</code>
- options. The metadata can then be used by
- <span class="command"><strong>dnssec-signzone</strong></span> or other signing software to
- determine when a key is to be published, whether it should be
- used for signing a zone, etc.
- </p>
-<p>
- If none of these options is set on the command line,
- then <span class="command"><strong>dnssec-settime</strong></span> simply prints the key timing
- metadata already stored in the key.
- </p>
-<p>
- When key metadata fields are changed, both files of a key
- pair (<code class="filename">Knnnn.+aaa+iiiii.key</code> and
- <code class="filename">Knnnn.+aaa+iiiii.private</code>) are regenerated.
- Metadata fields are stored in the private file. A human-readable
- description of the metadata is also placed in comments in the key
- file. The private file's permissions are always set to be
- inaccessible to anyone other than the owner (mode 0600).
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.15.8"></a><h2>OPTIONS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-f</span></dt>
-<dd><p>
- Force an update of an old-format key with no metadata fields.
- Without this option, <span class="command"><strong>dnssec-settime</strong></span> will
- fail when attempting to update a legacy key. With this option,
- the key will be recreated in the new format, but with the
- original key data retained. The key's creation date will be
- set to the present time. If no other values are specified,
- then the key's publication and activation dates will also
- be set to the present time.
- </p></dd>
-<dt><span class="term">-K <em class="replaceable"><code>directory</code></em></span></dt>
-<dd><p>
- Sets the directory in which the key files are to reside.
- </p></dd>
-<dt><span class="term">-L <em class="replaceable"><code>ttl</code></em></span></dt>
-<dd><p>
- Sets the default TTL to use for this key when it is converted
- into a DNSKEY RR. If the key is imported into a zone,
- this is the TTL that will be used for it, unless there was
- already a DNSKEY RRset in place, in which case the existing TTL
- would take precedence. If this value is not set and there
- is no existing DNSKEY RRset, the TTL will default to the
- SOA TTL. Setting the default TTL to <code class="literal">0</code>
- or <code class="literal">none</code> removes it from the key.
- </p></dd>
-<dt><span class="term">-h</span></dt>
-<dd><p>
- Emit usage message and exit.
- </p></dd>
-<dt><span class="term">-V</span></dt>
-<dd><p>
- Prints version information.
- </p></dd>
-<dt><span class="term">-v <em class="replaceable"><code>level</code></em></span></dt>
-<dd><p>
- Sets the debugging level.
- </p></dd>
-<dt><span class="term">-E <em class="replaceable"><code>engine</code></em></span></dt>
-<dd>
-<p>
- Specifies the cryptographic hardware to use, when applicable.
- </p>
-<p>
- When BIND is built with OpenSSL PKCS#11 support, this defaults
- to the string "pkcs11", which identifies an OpenSSL engine
- that can drive a cryptographic accelerator or hardware service
- module. When BIND is built with native PKCS#11 cryptography
- (--enable-native-pkcs11), it defaults to the path of the PKCS#11
- provider library specified via "--with-pkcs11".
- </p>
-</dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.15.9"></a><h2>TIMING OPTIONS</h2>
-<p>
- Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS.
- If the argument begins with a '+' or '-', it is interpreted as
- an offset from the present time. For convenience, if such an offset
- is followed by one of the suffixes 'y', 'mo', 'w', 'd', 'h', or 'mi',
- then the offset is computed in years (defined as 365 24-hour days,
- ignoring leap years), months (defined as 30 24-hour days), weeks,
- days, hours, or minutes, respectively. Without a suffix, the offset
- is computed in seconds. To unset a date, use 'none' or 'never'.
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-P <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which a key is to be published to the zone.
- After that date, the key will be included in the zone but will
- not be used to sign it.
- </p></dd>
-<dt><span class="term">-P sync <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which CDS and CDNSKEY records that match this
- key are to be published to the zone.
- </p></dd>
-<dt><span class="term">-A <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which the key is to be activated. After that
- date, the key will be included in the zone and used to sign
- it.
- </p></dd>
-<dt><span class="term">-R <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which the key is to be revoked. After that
- date, the key will be flagged as revoked. It will be included
- in the zone and will be used to sign it.
- </p></dd>
-<dt><span class="term">-I <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which the key is to be retired. After that
- date, the key will still be included in the zone, but it
- will not be used to sign it.
- </p></dd>
-<dt><span class="term">-D <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which the key is to be deleted. After that
- date, the key will no longer be included in the zone. (It
- may remain in the key repository, however.)
- </p></dd>
-<dt><span class="term">-D sync <em class="replaceable"><code>date/offset</code></em></span></dt>
-<dd><p>
- Sets the date on which the CDS and CDNSKEY records that match this
- key are to be deleted.
- </p></dd>
-<dt><span class="term">-S <em class="replaceable"><code>predecessor key</code></em></span></dt>
-<dd><p>
- Select a key for which the key being modified will be an
- explicit successor. The name, algorithm, size, and type of the
- predecessor key must exactly match those of the key being
- modified. The activation date of the successor key will be set
- to the inactivation date of the predecessor. The publication
- date will be set to the activation date minus the prepublication
- interval, which defaults to 30 days.
- </p></dd>
-<dt><span class="term">-i <em class="replaceable"><code>interval</code></em></span></dt>
-<dd>
-<p>
- Sets the prepublication interval for a key. If set, then
- the publication and activation dates must be separated by at least
- this much time. If the activation date is specified but the
- publication date isn't, then the publication date will default
- to this much time before the activation date; conversely, if
- the publication date is specified but activation date isn't,
- then activation will be set to this much time after publication.
- </p>
-<p>
- If the key is being set to be an explicit successor to another
- key, then the default prepublication interval is 30 days;
- otherwise it is zero.
- </p>
-<p>
- As with date offsets, if the argument is followed by one of
- the suffixes 'y', 'mo', 'w', 'd', 'h', or 'mi', then the
- interval is measured in years, months, weeks, days, hours,
- or minutes, respectively. Without a suffix, the interval is
- measured in seconds.
- </p>
-</dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.15.10"></a><h2>PRINTING OPTIONS</h2>
-<p>
- <span class="command"><strong>dnssec-settime</strong></span> can also be used to print the
- timing metadata associated with a key.
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-u</span></dt>
-<dd><p>
- Print times in UNIX epoch format.
- </p></dd>
-<dt><span class="term">-p <em class="replaceable"><code>C/P/Psync/A/R/I/D/Dsync/all</code></em></span></dt>
-<dd><p>
- Print a specific metadata value or set of metadata values.
- The <code class="option">-p</code> option may be followed by one or more
- of the following letters or strings to indicate which value
- or values to print:
- <code class="option">C</code> for the creation date,
- <code class="option">P</code> for the publication date,
- <code class="option">Psync</code> for the CDS and CDNSKEY publication date,
- <code class="option">A</code> for the activation date,
- <code class="option">R</code> for the revocation date,
- <code class="option">I</code> for the inactivation date,
- <code class="option">D</code> for the deletion date, and
- <code class="option">Dsync</code> for the CDS and CDNSKEY deletion date
- To print all of the metadata, use <code class="option">-p all</code>.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.15.11"></a><h2>SEE ALSO</h2>
-<p><span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">dnssec-signzone</span>(8)</span>,
- <em class="citetitle">BIND 9 Administrator Reference Manual</em>,
- <em class="citetitle">RFC 5011</em>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.dnssec-revoke.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.dnssec-signzone.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">dnssec-revoke</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">dnssec-signzone</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.dnssec-signzone.html b/doc/arm/man.dnssec-signzone.html
deleted file mode 100644
index 9e5b3db0..00000000
--- a/doc/arm/man.dnssec-signzone.html
+++ /dev/null
@@ -1,564 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>dnssec-signzone</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.dnssec-settime.html" title="dnssec-settime">
-<link rel="next" href="man.dnssec-verify.html" title="dnssec-verify">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">dnssec-signzone</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.dnssec-settime.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.dnssec-verify.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.dnssec-signzone"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">dnssec-signzone</span> &#8212; DNSSEC zone signing tool</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">dnssec-signzone</code> [<code class="option">-a</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-d <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-D</code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] [<code class="option">-e <em class="replaceable"><code>end-time</code></em></code>] [<code class="option">-f <em class="replaceable"><code>output-file</code></em></code>] [<code class="option">-g</code>] [<code class="option">-h</code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-k <em class="replaceable"><code>key</code></em></code>] [<code class="option">-L <em class="replaceable"><code>serial</code></em></code>] [<code class="option">-l <em class="replaceable"><code>domain</code></em></code>] [<code class="option">-M <em class="replaceable"><code>domain</code></em></code>] [<code class="option">-i <em class="replaceable"><code>interval</code></em></code>] [<code class="option">-I <em class="replaceable"><code>input-format</code></em></code>] [<code class="option">-j <em class="replaceable"><code>jitter</code></em></code>] [<code class="option">-N <em class="replaceable"><code>soa-serial-format</code></em></code>] [<code class="option">-o <em class="replaceable"><code>origin</code></em></code>] [<code class="option">-O <em class="replaceable"><code>output-format</code></em></code>] [<code class="option">-P</code>] [<code class="option">-p</code>] [<code class="option">-Q</code>] [<code class="option">-R</code>] [<code class="option">-r <em class="replaceable"><code>randomdev</code></em></code>] [<code class="option">-S</code>] [<code class="option">-s <em class="replaceable"><code>start-time</code></em></code>] [<code class="option">-T <em class="replaceable"><code>ttl</code></em></code>] [<code class="option">-t</code>] [<code class="option">-u</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-V</code>] [<code class="option">-X <em class="replaceable"><code>extended end-time</code></em></code>] [<code class="option">-x</code>] [<code class="option">-z</code>] [<code class="option">-3 <em class="replaceable"><code>salt</code></em></code>] [<code class="option">-H <em class="replaceable"><code>iterations</code></em></code>] [<code class="option">-A</code>] {zonefile} [key...]</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.16.7"></a><h2>DESCRIPTION</h2>
-<p><span class="command"><strong>dnssec-signzone</strong></span>
- signs a zone. It generates
- NSEC and RRSIG records and produces a signed version of the
- zone. The security status of delegations from the signed zone
- (that is, whether the child zones are secure or not) is
- determined by the presence or absence of a
- <code class="filename">keyset</code> file for each child zone.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.16.8"></a><h2>OPTIONS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-a</span></dt>
-<dd><p>
- Verify all generated signatures.
- </p></dd>
-<dt><span class="term">-c <em class="replaceable"><code>class</code></em></span></dt>
-<dd><p>
- Specifies the DNS class of the zone.
- </p></dd>
-<dt><span class="term">-C</span></dt>
-<dd><p>
- Compatibility mode: Generate a
- <code class="filename">keyset-<em class="replaceable"><code>zonename</code></em></code>
- file in addition to
- <code class="filename">dsset-<em class="replaceable"><code>zonename</code></em></code>
- when signing a zone, for use by older versions of
- <span class="command"><strong>dnssec-signzone</strong></span>.
- </p></dd>
-<dt><span class="term">-d <em class="replaceable"><code>directory</code></em></span></dt>
-<dd><p>
- Look for <code class="filename">dsset-</code> or
- <code class="filename">keyset-</code> files in <code class="option">directory</code>.
- </p></dd>
-<dt><span class="term">-D</span></dt>
-<dd><p>
- Output only those record types automatically managed by
- <span class="command"><strong>dnssec-signzone</strong></span>, i.e. RRSIG, NSEC,
- NSEC3 and NSEC3PARAM records. If smart signing
- (<code class="option">-S</code>) is used, DNSKEY records are also
- included. The resulting file can be included in the original
- zone file with <span class="command"><strong>$INCLUDE</strong></span>. This option
- cannot be combined with <code class="option">-O raw</code>,
- <code class="option">-O map</code>, or serial number updating.
- </p></dd>
-<dt><span class="term">-E <em class="replaceable"><code>engine</code></em></span></dt>
-<dd>
-<p>
- When applicable, specifies the hardware to use for
- cryptographic operations, such as a secure key store used
- for signing.
- </p>
-<p>
- When BIND is built with OpenSSL PKCS#11 support, this defaults
- to the string "pkcs11", which identifies an OpenSSL engine
- that can drive a cryptographic accelerator or hardware service
- module. When BIND is built with native PKCS#11 cryptography
- (--enable-native-pkcs11), it defaults to the path of the PKCS#11
- provider library specified via "--with-pkcs11".
- </p>
-</dd>
-<dt><span class="term">-g</span></dt>
-<dd><p>
- Generate DS records for child zones from
- <code class="filename">dsset-</code> or <code class="filename">keyset-</code>
- file. Existing DS records will be removed.
- </p></dd>
-<dt><span class="term">-K <em class="replaceable"><code>directory</code></em></span></dt>
-<dd><p>
- Key repository: Specify a directory to search for DNSSEC keys.
- If not specified, defaults to the current directory.
- </p></dd>
-<dt><span class="term">-k <em class="replaceable"><code>key</code></em></span></dt>
-<dd><p>
- Treat specified key as a key signing key ignoring any
- key flags. This option may be specified multiple times.
- </p></dd>
-<dt><span class="term">-l <em class="replaceable"><code>domain</code></em></span></dt>
-<dd><p>
- Generate a DLV set in addition to the key (DNSKEY) and DS sets.
- The domain is appended to the name of the records.
- </p></dd>
-<dt><span class="term">-M <em class="replaceable"><code>maxttl</code></em></span></dt>
-<dd><p>
- Sets the maximum TTL for the signed zone.
- Any TTL higher than <em class="replaceable"><code>maxttl</code></em> in the
- input zone will be reduced to <em class="replaceable"><code>maxttl</code></em>
- in the output. This provides certainty as to the largest
- possible TTL in the signed zone, which is useful to know when
- rolling keys because it is the longest possible time before
- signatures that have been retrieved by resolvers will expire
- from resolver caches. Zones that are signed with this
- option should be configured to use a matching
- <code class="option">max-zone-ttl</code> in <code class="filename">named.conf</code>.
- (Note: This option is incompatible with <code class="option">-D</code>,
- because it modifies non-DNSSEC data in the output zone.)
- </p></dd>
-<dt><span class="term">-s <em class="replaceable"><code>start-time</code></em></span></dt>
-<dd><p>
- Specify the date and time when the generated RRSIG records
- become valid. This can be either an absolute or relative
- time. An absolute start time is indicated by a number
- in YYYYMMDDHHMMSS notation; 20000530144500 denotes
- 14:45:00 UTC on May 30th, 2000. A relative start time is
- indicated by +N, which is N seconds from the current time.
- If no <code class="option">start-time</code> is specified, the current
- time minus 1 hour (to allow for clock skew) is used.
- </p></dd>
-<dt><span class="term">-e <em class="replaceable"><code>end-time</code></em></span></dt>
-<dd><p>
- Specify the date and time when the generated RRSIG records
- expire. As with <code class="option">start-time</code>, an absolute
- time is indicated in YYYYMMDDHHMMSS notation. A time relative
- to the start time is indicated with +N, which is N seconds from
- the start time. A time relative to the current time is
- indicated with now+N. If no <code class="option">end-time</code> is
- specified, 30 days from the start time is used as a default.
- <code class="option">end-time</code> must be later than
- <code class="option">start-time</code>.
- </p></dd>
-<dt><span class="term">-X <em class="replaceable"><code>extended end-time</code></em></span></dt>
-<dd>
-<p>
- Specify the date and time when the generated RRSIG records
- for the DNSKEY RRset will expire. This is to be used in cases
- when the DNSKEY signatures need to persist longer than
- signatures on other records; e.g., when the private component
- of the KSK is kept offline and the KSK signature is to be
- refreshed manually.
- </p>
-<p>
- As with <code class="option">start-time</code>, an absolute
- time is indicated in YYYYMMDDHHMMSS notation. A time relative
- to the start time is indicated with +N, which is N seconds from
- the start time. A time relative to the current time is
- indicated with now+N. If no <code class="option">extended end-time</code> is
- specified, the value of <code class="option">end-time</code> is used as
- the default. (<code class="option">end-time</code>, in turn, defaults to
- 30 days from the start time.) <code class="option">extended end-time</code>
- must be later than <code class="option">start-time</code>.
- </p>
-</dd>
-<dt><span class="term">-f <em class="replaceable"><code>output-file</code></em></span></dt>
-<dd><p>
- The name of the output file containing the signed zone. The
- default is to append <code class="filename">.signed</code> to
- the input filename. If <code class="option">output-file</code> is
- set to <code class="literal">"-"</code>, then the signed zone is
- written to the standard output, with a default output
- format of "full".
- </p></dd>
-<dt><span class="term">-h</span></dt>
-<dd><p>
- Prints a short summary of the options and arguments to
- <span class="command"><strong>dnssec-signzone</strong></span>.
- </p></dd>
-<dt><span class="term">-V</span></dt>
-<dd><p>
- Prints version information.
- </p></dd>
-<dt><span class="term">-i <em class="replaceable"><code>interval</code></em></span></dt>
-<dd>
-<p>
- When a previously-signed zone is passed as input, records
- may be resigned. The <code class="option">interval</code> option
- specifies the cycle interval as an offset from the current
- time (in seconds). If a RRSIG record expires after the
- cycle interval, it is retained. Otherwise, it is considered
- to be expiring soon, and it will be replaced.
- </p>
-<p>
- The default cycle interval is one quarter of the difference
- between the signature end and start times. So if neither
- <code class="option">end-time</code> or <code class="option">start-time</code>
- are specified, <span class="command"><strong>dnssec-signzone</strong></span>
- generates
- signatures that are valid for 30 days, with a cycle
- interval of 7.5 days. Therefore, if any existing RRSIG records
- are due to expire in less than 7.5 days, they would be
- replaced.
- </p>
-</dd>
-<dt><span class="term">-I <em class="replaceable"><code>input-format</code></em></span></dt>
-<dd><p>
- The format of the input zone file.
- Possible formats are <span class="command"><strong>"text"</strong></span> (default),
- <span class="command"><strong>"raw"</strong></span>, and <span class="command"><strong>"map"</strong></span>.
- This option is primarily intended to be used for dynamic
- signed zones so that the dumped zone file in a non-text
- format containing updates can be signed directly.
- The use of this option does not make much sense for
- non-dynamic zones.
- </p></dd>
-<dt><span class="term">-j <em class="replaceable"><code>jitter</code></em></span></dt>
-<dd>
-<p>
- When signing a zone with a fixed signature lifetime, all
- RRSIG records issued at the time of signing expires
- simultaneously. If the zone is incrementally signed, i.e.
- a previously-signed zone is passed as input to the signer,
- all expired signatures have to be regenerated at about the
- same time. The <code class="option">jitter</code> option specifies a
- jitter window that will be used to randomize the signature
- expire time, thus spreading incremental signature
- regeneration over time.
- </p>
-<p>
- Signature lifetime jitter also to some extent benefits
- validators and servers by spreading out cache expiration,
- i.e. if large numbers of RRSIGs don't expire at the same time
- from all caches there will be less congestion than if all
- validators need to refetch at mostly the same time.
- </p>
-</dd>
-<dt><span class="term">-L <em class="replaceable"><code>serial</code></em></span></dt>
-<dd><p>
- When writing a signed zone to "raw" or "map" format, set the
- "source serial" value in the header to the specified serial
- number. (This is expected to be used primarily for testing
- purposes.)
- </p></dd>
-<dt><span class="term">-n <em class="replaceable"><code>ncpus</code></em></span></dt>
-<dd><p>
- Specifies the number of threads to use. By default, one
- thread is started for each detected CPU.
- </p></dd>
-<dt><span class="term">-N <em class="replaceable"><code>soa-serial-format</code></em></span></dt>
-<dd>
-<p>
- The SOA serial number format of the signed zone.
- Possible formats are <span class="command"><strong>"keep"</strong></span> (default),
- <span class="command"><strong>"increment"</strong></span>, <span class="command"><strong>"unixtime"</strong></span>,
- and <span class="command"><strong>"date"</strong></span>.
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><span class="command"><strong>"keep"</strong></span></span></dt>
-<dd><p>Do not modify the SOA serial number.</p></dd>
-<dt><span class="term"><span class="command"><strong>"increment"</strong></span></span></dt>
-<dd><p>Increment the SOA serial number using RFC 1982
- arithmetics.</p></dd>
-<dt><span class="term"><span class="command"><strong>"unixtime"</strong></span></span></dt>
-<dd><p>Set the SOA serial number to the number of seconds
- since epoch.</p></dd>
-<dt><span class="term"><span class="command"><strong>"date"</strong></span></span></dt>
-<dd><p>Set the SOA serial number to today's date in
- YYYYMMDDNN format.</p></dd>
-</dl></div>
-</dd>
-<dt><span class="term">-o <em class="replaceable"><code>origin</code></em></span></dt>
-<dd><p>
- The zone origin. If not specified, the name of the zone file
- is assumed to be the origin.
- </p></dd>
-<dt><span class="term">-O <em class="replaceable"><code>output-format</code></em></span></dt>
-<dd><p>
- The format of the output file containing the signed zone.
- Possible formats are <span class="command"><strong>"text"</strong></span> (default),
- which is the standard textual representation of the zone;
- <span class="command"><strong>"full"</strong></span>, which is text output in a
- format suitable for processing by external scripts;
- and <span class="command"><strong>"map"</strong></span>, <span class="command"><strong>"raw"</strong></span>,
- and <span class="command"><strong>"raw=N"</strong></span>, which store the zone in
- binary formats for rapid loading by <span class="command"><strong>named</strong></span>.
- <span class="command"><strong>"raw=N"</strong></span> specifies the format version of
- the raw zone file: if N is 0, the raw file can be read by
- any version of <span class="command"><strong>named</strong></span>; if N is 1, the file
- can be read by release 9.9.0 or higher; the default is 1.
- </p></dd>
-<dt><span class="term">-p</span></dt>
-<dd><p>
- Use pseudo-random data when signing the zone. This is faster,
- but less secure, than using real random data. This option
- may be useful when signing large zones or when the entropy
- source is limited.
- </p></dd>
-<dt><span class="term">-P</span></dt>
-<dd>
-<p>
- Disable post sign verification tests.
- </p>
-<p>
- The post sign verification test ensures that for each algorithm
- in use there is at least one non revoked self signed KSK key,
- that all revoked KSK keys are self signed, and that all records
- in the zone are signed by the algorithm.
- This option skips these tests.
- </p>
-</dd>
-<dt><span class="term">-Q</span></dt>
-<dd>
-<p>
- Remove signatures from keys that are no longer active.
- </p>
-<p>
- Normally, when a previously-signed zone is passed as input
- to the signer, and a DNSKEY record has been removed and
- replaced with a new one, signatures from the old key
- that are still within their validity period are retained.
- This allows the zone to continue to validate with cached
- copies of the old DNSKEY RRset. The <code class="option">-Q</code>
- forces <span class="command"><strong>dnssec-signzone</strong></span> to remove
- signatures from keys that are no longer active. This
- enables ZSK rollover using the procedure described in
- RFC 4641, section 4.2.1.1 ("Pre-Publish Key Rollover").
- </p>
-</dd>
-<dt><span class="term">-R</span></dt>
-<dd>
-<p>
- Remove signatures from keys that are no longer published.
- </p>
-<p>
- This option is similar to <code class="option">-Q</code>, except it
- forces <span class="command"><strong>dnssec-signzone</strong></span> to signatures from
- keys that are no longer published. This enables ZSK rollover
- using the procedure described in RFC 4641, section 4.2.1.2
- ("Double Signature Zone Signing Key Rollover").
- </p>
-</dd>
-<dt><span class="term">-r <em class="replaceable"><code>randomdev</code></em></span></dt>
-<dd><p>
- Specifies the source of randomness. If the operating
- system does not provide a <code class="filename">/dev/random</code>
- or equivalent device, the default source of randomness
- is keyboard input. <code class="filename">randomdev</code>
- specifies
- the name of a character device or file containing random
- data to be used instead of the default. The special value
- <code class="filename">keyboard</code> indicates that keyboard
- input should be used.
- </p></dd>
-<dt><span class="term">-S</span></dt>
-<dd>
-<p>
- Smart signing: Instructs <span class="command"><strong>dnssec-signzone</strong></span> to
- search the key repository for keys that match the zone being
- signed, and to include them in the zone if appropriate.
- </p>
-<p>
- When a key is found, its timing metadata is examined to
- determine how it should be used, according to the following
- rules. Each successive rule takes priority over the prior
- ones:
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt></dt>
-<dd><p>
- If no timing metadata has been set for the key, the key is
- published in the zone and used to sign the zone.
- </p></dd>
-<dt></dt>
-<dd><p>
- If the key's publication date is set and is in the past, the
- key is published in the zone.
- </p></dd>
-<dt></dt>
-<dd><p>
- If the key's activation date is set and in the past, the
- key is published (regardless of publication date) and
- used to sign the zone.
- </p></dd>
-<dt></dt>
-<dd><p>
- If the key's revocation date is set and in the past, and the
- key is published, then the key is revoked, and the revoked key
- is used to sign the zone.
- </p></dd>
-<dt></dt>
-<dd><p>
- If either of the key's unpublication or deletion dates are set
- and in the past, the key is NOT published or used to sign the
- zone, regardless of any other metadata.
- </p></dd>
-</dl></div>
-</dd>
-<dt><span class="term">-T <em class="replaceable"><code>ttl</code></em></span></dt>
-<dd><p>
- Specifies a TTL to be used for new DNSKEY records imported
- into the zone from the key repository. If not
- specified, the default is the TTL value from the zone's SOA
- record. This option is ignored when signing without
- <code class="option">-S</code>, since DNSKEY records are not imported
- from the key repository in that case. It is also ignored if
- there are any pre-existing DNSKEY records at the zone apex,
- in which case new records' TTL values will be set to match
- them, or if any of the imported DNSKEY records had a default
- TTL value. In the event of a a conflict between TTL values in
- imported keys, the shortest one is used.
- </p></dd>
-<dt><span class="term">-t</span></dt>
-<dd><p>
- Print statistics at completion.
- </p></dd>
-<dt><span class="term">-u</span></dt>
-<dd><p>
- Update NSEC/NSEC3 chain when re-signing a previously signed
- zone. With this option, a zone signed with NSEC can be
- switched to NSEC3, or a zone signed with NSEC3 can
- be switch to NSEC or to NSEC3 with different parameters.
- Without this option, <span class="command"><strong>dnssec-signzone</strong></span> will
- retain the existing chain when re-signing.
- </p></dd>
-<dt><span class="term">-v <em class="replaceable"><code>level</code></em></span></dt>
-<dd><p>
- Sets the debugging level.
- </p></dd>
-<dt><span class="term">-x</span></dt>
-<dd><p>
- Only sign the DNSKEY RRset with key-signing keys, and omit
- signatures from zone-signing keys. (This is similar to the
- <span class="command"><strong>dnssec-dnskey-kskonly yes;</strong></span> zone option in
- <span class="command"><strong>named</strong></span>.)
- </p></dd>
-<dt><span class="term">-z</span></dt>
-<dd><p>
- Ignore KSK flag on key when determining what to sign. This
- causes KSK-flagged keys to sign all records, not just the
- DNSKEY RRset. (This is similar to the
- <span class="command"><strong>update-check-ksk no;</strong></span> zone option in
- <span class="command"><strong>named</strong></span>.)
- </p></dd>
-<dt><span class="term">-3 <em class="replaceable"><code>salt</code></em></span></dt>
-<dd><p>
- Generate an NSEC3 chain with the given hex encoded salt.
- A dash (<em class="replaceable"><code>salt</code></em>) can
- be used to indicate that no salt is to be used when generating the NSEC3 chain.
- </p></dd>
-<dt><span class="term">-H <em class="replaceable"><code>iterations</code></em></span></dt>
-<dd><p>
- When generating an NSEC3 chain, use this many iterations. The
- default is 10.
- </p></dd>
-<dt><span class="term">-A</span></dt>
-<dd>
-<p>
- When generating an NSEC3 chain set the OPTOUT flag on all
- NSEC3 records and do not generate NSEC3 records for insecure
- delegations.
- </p>
-<p>
- Using this option twice (i.e., <code class="option">-AA</code>)
- turns the OPTOUT flag off for all records. This is useful
- when using the <code class="option">-u</code> option to modify an NSEC3
- chain which previously had OPTOUT set.
- </p>
-</dd>
-<dt><span class="term">zonefile</span></dt>
-<dd><p>
- The file containing the zone to be signed.
- </p></dd>
-<dt><span class="term">key</span></dt>
-<dd><p>
- Specify which keys should be used to sign the zone. If
- no keys are specified, then the zone will be examined
- for DNSKEY records at the zone apex. If these are found and
- there are matching private keys, in the current directory,
- then these will be used for signing.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.16.9"></a><h2>EXAMPLE</h2>
-<p>
- The following command signs the <strong class="userinput"><code>example.com</code></strong>
- zone with the DSA key generated by <span class="command"><strong>dnssec-keygen</strong></span>
- (Kexample.com.+003+17247). Because the <span class="command"><strong>-S</strong></span> option
- is not being used, the zone's keys must be in the master file
- (<code class="filename">db.example.com</code>). This invocation looks
- for <code class="filename">dsset</code> files, in the current directory,
- so that DS records can be imported from them (<span class="command"><strong>-g</strong></span>).
- </p>
-<pre class="programlisting">% dnssec-signzone -g -o example.com db.example.com \
-Kexample.com.+003+17247
-db.example.com.signed
-%</pre>
-<p>
- In the above example, <span class="command"><strong>dnssec-signzone</strong></span> creates
- the file <code class="filename">db.example.com.signed</code>. This
- file should be referenced in a zone statement in a
- <code class="filename">named.conf</code> file.
- </p>
-<p>
- This example re-signs a previously signed zone with default parameters.
- The private keys are assumed to be in the current directory.
- </p>
-<pre class="programlisting">% cp db.example.com.signed db.example.com
-% dnssec-signzone -o example.com db.example.com
-db.example.com.signed
-%</pre>
-</div>
-<div class="refsection">
-<a name="id-1.14.16.10"></a><h2>SEE ALSO</h2>
-<p><span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
- <em class="citetitle">BIND 9 Administrator Reference Manual</em>,
- <em class="citetitle">RFC 4033</em>, <em class="citetitle">RFC 4641</em>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.dnssec-settime.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.dnssec-verify.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">dnssec-settime</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">dnssec-verify</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.dnssec-verify.html b/doc/arm/man.dnssec-verify.html
deleted file mode 100644
index a4393edc..00000000
--- a/doc/arm/man.dnssec-verify.html
+++ /dev/null
@@ -1,161 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>dnssec-verify</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.dnssec-signzone.html" title="dnssec-signzone">
-<link rel="next" href="man.lwresd.html" title="lwresd">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">dnssec-verify</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.dnssec-signzone.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.lwresd.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.dnssec-verify"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">dnssec-verify</span> &#8212; DNSSEC zone verification tool</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">dnssec-verify</code> [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] [<code class="option">-I <em class="replaceable"><code>input-format</code></em></code>] [<code class="option">-o <em class="replaceable"><code>origin</code></em></code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-V</code>] [<code class="option">-x</code>] [<code class="option">-z</code>] {zonefile}</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.17.7"></a><h2>DESCRIPTION</h2>
-<p><span class="command"><strong>dnssec-verify</strong></span>
- verifies that a zone is fully signed for each algorithm found
- in the DNSKEY RRset for the zone, and that the NSEC / NSEC3
- chains are complete.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.17.8"></a><h2>OPTIONS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-c <em class="replaceable"><code>class</code></em></span></dt>
-<dd><p>
- Specifies the DNS class of the zone.
- </p></dd>
-<dt><span class="term">-E <em class="replaceable"><code>engine</code></em></span></dt>
-<dd>
-<p>
- Specifies the cryptographic hardware to use, when applicable.
- </p>
-<p>
- When BIND is built with OpenSSL PKCS#11 support, this defaults
- to the string "pkcs11", which identifies an OpenSSL engine
- that can drive a cryptographic accelerator or hardware service
- module. When BIND is built with native PKCS#11 cryptography
- (--enable-native-pkcs11), it defaults to the path of the PKCS#11
- provider library specified via "--with-pkcs11".
- </p>
-</dd>
-<dt><span class="term">-I <em class="replaceable"><code>input-format</code></em></span></dt>
-<dd><p>
- The format of the input zone file.
- Possible formats are <span class="command"><strong>"text"</strong></span> (default)
- and <span class="command"><strong>"raw"</strong></span>.
- This option is primarily intended to be used for dynamic
- signed zones so that the dumped zone file in a non-text
- format containing updates can be verified independently.
- The use of this option does not make much sense for
- non-dynamic zones.
- </p></dd>
-<dt><span class="term">-o <em class="replaceable"><code>origin</code></em></span></dt>
-<dd><p>
- The zone origin. If not specified, the name of the zone file
- is assumed to be the origin.
- </p></dd>
-<dt><span class="term">-v <em class="replaceable"><code>level</code></em></span></dt>
-<dd><p>
- Sets the debugging level.
- </p></dd>
-<dt><span class="term">-V</span></dt>
-<dd><p>
- Prints version information.
- </p></dd>
-<dt><span class="term">-x</span></dt>
-<dd><p>
- Only verify that the DNSKEY RRset is signed with key-signing
- keys. Without this flag, it is assumed that the DNSKEY RRset
- will be signed by all active keys. When this flag is set,
- it will not be an error if the DNSKEY RRset is not signed
- by zone-signing keys. This corresponds to the <code class="option">-x</code>
- option in <span class="command"><strong>dnssec-signzone</strong></span>.
- </p></dd>
-<dt><span class="term">-z</span></dt>
-<dd>
-<p>
- Ignore the KSK flag on the keys when determining whether
- the zone if correctly signed. Without this flag it is
- assumed that there will be a non-revoked, self-signed
- DNSKEY with the KSK flag set for each algorithm and
- that RRsets other than DNSKEY RRset will be signed with
- a different DNSKEY without the KSK flag set.
- </p>
-<p>
- With this flag set, we only require that for each algorithm,
- there will be at least one non-revoked, self-signed DNSKEY,
- regardless of the KSK flag state, and that other RRsets
- will be signed by a non-revoked key for the same algorithm
- that includes the self-signed key; the same key may be used
- for both purposes. This corresponds to the <code class="option">-z</code>
- option in <span class="command"><strong>dnssec-signzone</strong></span>.
- </p>
-</dd>
-<dt><span class="term">zonefile</span></dt>
-<dd><p>
- The file containing the zone to be signed.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.17.9"></a><h2>SEE ALSO</h2>
-<p>
- <span class="citerefentry"><span class="refentrytitle">dnssec-signzone</span>(8)</span>,
- <em class="citetitle">BIND 9 Administrator Reference Manual</em>,
- <em class="citetitle">RFC 4033</em>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.dnssec-signzone.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.lwresd.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">dnssec-signzone</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">lwresd</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.dnstap-read.html b/doc/arm/man.dnstap-read.html
deleted file mode 100644
index 3c20dc78..00000000
--- a/doc/arm/man.dnstap-read.html
+++ /dev/null
@@ -1,104 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>dnstap-read</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.arpaname.html" title="arpaname">
-<link rel="next" href="man.genrandom.html" title="genrandom">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">dnstap-read</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.arpaname.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.genrandom.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.dnstap-read"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">dnstap-read</span> &#8212; print dnstap data in human-readable form</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">dnstap-read</code> [<code class="option">-m</code>] [<code class="option">-p</code>] [<code class="option">-y</code>] {<em class="replaceable"><code>file</code></em>}</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.32.7"></a><h2>DESCRIPTION</h2>
-<p>
- <span class="command"><strong>dnstap-read</strong></span>
- reads <span class="command"><strong>dnstap</strong></span> data from a specified file
- and prints it in a human-readable format. By default,
- <span class="command"><strong>dnstap</strong></span> data is printed in a short summary
- format, but if the <code class="option">-y</code> option is specified,
- then a longer and more detailed YAML format is used instead.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.32.8"></a><h2>OPTIONS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-m</span></dt>
-<dd><p>
- Trace memory allocations; used for debugging memory leaks.
- </p></dd>
-<dt><span class="term">-p</span></dt>
-<dd><p>
- After printing the <span class="command"><strong>dnstap</strong></span> data, print
- the text form of the DNS message that was encapsulated in the
- <span class="command"><strong>dnstap</strong></span> frame.
- </p></dd>
-<dt><span class="term">-y</span></dt>
-<dd><p>
- Print <span class="command"><strong>dnstap</strong></span> data in a detailed YAML
- format. Implies <code class="option">-p</code>.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.32.9"></a><h2>SEE ALSO</h2>
-<p>
- <span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">rndc</span>(8)</span>,
- <em class="citetitle">BIND 9 Administrator Reference Manual</em>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.arpaname.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.genrandom.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">arpaname</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">genrandom</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.genrandom.html b/doc/arm/man.genrandom.html
deleted file mode 100644
index ebd374ed..00000000
--- a/doc/arm/man.genrandom.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>genrandom</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.dnstap-read.html" title="dnstap-read">
-<link rel="next" href="man.isc-hmac-fixup.html" title="isc-hmac-fixup">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">genrandom</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.dnstap-read.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.isc-hmac-fixup.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.genrandom"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">genrandom</span> &#8212; generate a file containing random data</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">genrandom</code> [<code class="option">-n <em class="replaceable"><code>number</code></em></code>] {<em class="replaceable"><code>size</code></em>} {<em class="replaceable"><code>filename</code></em>}</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.33.7"></a><h2>DESCRIPTION</h2>
-<p>
- <span class="command"><strong>genrandom</strong></span>
- generates a file or a set of files containing a specified quantity
- of pseudo-random data, which can be used as a source of entropy for
- other commands on systems with no random device.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.33.8"></a><h2>ARGUMENTS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-n <em class="replaceable"><code>number</code></em></span></dt>
-<dd><p>
- In place of generating one file, generates <code class="option">number</code>
- (from 2 to 9) files, appending <code class="option">number</code> to the name.
- </p></dd>
-<dt><span class="term">size</span></dt>
-<dd><p>
- The size of the file, in kilobytes, to generate.
- </p></dd>
-<dt><span class="term">filename</span></dt>
-<dd><p>
- The file name into which random data should be written.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.33.9"></a><h2>SEE ALSO</h2>
-<p>
- <span class="citerefentry"><span class="refentrytitle">rand</span>(3)</span>,
- <span class="citerefentry"><span class="refentrytitle">arc4random</span>(3)</span>
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.dnstap-read.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.isc-hmac-fixup.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">dnstap-read</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">isc-hmac-fixup</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.host.html b/doc/arm/man.host.html
deleted file mode 100644
index 0f659c3c..00000000
--- a/doc/arm/man.host.html
+++ /dev/null
@@ -1,289 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>host</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.mdig.html" title="mdig">
-<link rel="next" href="man.delv.html" title="delv">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center">host</th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.mdig.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.delv.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.host"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p>host &#8212; DNS lookup utility</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">host</code> [<code class="option">-aCdlnrsTwv</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-N <em class="replaceable"><code>ndots</code></em></code>] [<code class="option">-R <em class="replaceable"><code>number</code></em></code>] [<code class="option">-t <em class="replaceable"><code>type</code></em></code>] [<code class="option">-W <em class="replaceable"><code>wait</code></em></code>] [<code class="option">-m <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-4</code>] [<code class="option">-6</code>] [<code class="option">-v</code>] [<code class="option">-V</code>] {name} [server]</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.4.7"></a><h2>DESCRIPTION</h2>
-<p><span class="command"><strong>host</strong></span>
- is a simple utility for performing DNS lookups.
- It is normally used to convert names to IP addresses and vice versa.
- When no arguments or options are given,
- <span class="command"><strong>host</strong></span>
- prints a short summary of its command line arguments and options.
- </p>
-<p><em class="parameter"><code>name</code></em> is the domain name that is to be
- looked
- up. It can also be a dotted-decimal IPv4 address or a colon-delimited
- IPv6 address, in which case <span class="command"><strong>host</strong></span> will by
- default
- perform a reverse lookup for that address.
- <em class="parameter"><code>server</code></em> is an optional argument which
- is either
- the name or IP address of the name server that <span class="command"><strong>host</strong></span>
- should query instead of the server or servers listed in
- <code class="filename">/etc/resolv.conf</code>.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.4.8"></a><h2>OPTIONS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-4</span></dt>
-<dd><p>
- Use IPv4 only for query transport.
- See also the <code class="option">-6</code> option.
- </p></dd>
-<dt><span class="term">-6</span></dt>
-<dd><p>
- Use IPv6 only for query transport.
- See also the <code class="option">-4</code> option.
- </p></dd>
-<dt><span class="term">-a</span></dt>
-<dd><p>
- "All". The <code class="option">-a</code> option is normally equivalent
- to <code class="option">-v -t <code class="literal">ANY</code></code>.
- It also affects the behaviour of the <code class="option">-l</code>
- list zone option.
- </p></dd>
-<dt><span class="term">-c <em class="replaceable"><code>class</code></em></span></dt>
-<dd><p>
- Query class: This can be used to lookup HS (Hesiod) or CH
- (Chaosnet) class resource records. The default class is IN
- (Internet).
- </p></dd>
-<dt><span class="term">-C</span></dt>
-<dd><p>
- Check consistency: <span class="command"><strong>host</strong></span> will query the
- SOA records for zone <em class="parameter"><code>name</code></em> from all
- the listed authoritative name servers for that zone. The
- list of name servers is defined by the NS records that are
- found for the zone.
- </p></dd>
-<dt><span class="term">-d</span></dt>
-<dd><p>
- Print debugging traces.
- Equivalent to the <code class="option">-v</code> verbose option.
- </p></dd>
-<dt><span class="term">-i</span></dt>
-<dd><p>
- Obsolete.
- Use the IP6.INT domain for reverse lookups of IPv6
- addresses as defined in RFC1886 and deprecated in RFC4159.
- The default is to use IP6.ARPA as specified in RFC3596.
- </p></dd>
-<dt><span class="term">-l</span></dt>
-<dd>
-<p>
- List zone:
- The <span class="command"><strong>host</strong></span> command performs a zone transfer of
- zone <em class="parameter"><code>name</code></em> and prints out the NS,
- PTR and address records (A/AAAA).
- </p>
-<p>
- Together, the <code class="option">-l -a</code>
- options print all records in the zone.
- </p>
-</dd>
-<dt><span class="term">-N <em class="replaceable"><code>ndots</code></em></span></dt>
-<dd><p>
- The number of dots that have to be
- in <em class="parameter"><code>name</code></em> for it to be considered
- absolute. The default value is that defined using the
- ndots statement in <code class="filename">/etc/resolv.conf</code>,
- or 1 if no ndots statement is present. Names with fewer
- dots are interpreted as relative names and will be
- searched for in the domains listed in
- the <span class="type">search</span> or <span class="type">domain</span> directive
- in <code class="filename">/etc/resolv.conf</code>.
- </p></dd>
-<dt><span class="term">-r</span></dt>
-<dd><p>
- Non-recursive query:
- Setting this option clears the RD (recursion desired) bit
- in the query. This should mean that the name server
- receiving the query will not attempt to
- resolve <em class="parameter"><code>name</code></em>.
- The <code class="option">-r</code> option
- enables <span class="command"><strong>host</strong></span> to mimic the behavior of a
- name server by making non-recursive queries and expecting
- to receive answers to those queries that can be
- referrals to other name servers.
- </p></dd>
-<dt><span class="term">-R <em class="replaceable"><code>number</code></em></span></dt>
-<dd><p>
- Number of retries for UDP queries:
- If <em class="parameter"><code>number</code></em> is negative or zero, the
- number of retries will default to 1. The default value is
- 1, or the value of the <em class="parameter"><code>attempts</code></em>
- option in <code class="filename">/etc/resolv.conf</code>, if set.
- </p></dd>
-<dt><span class="term">-s</span></dt>
-<dd><p>
- Do <span class="emphasis"><em>not</em></span> send the query to the next
- nameserver if any server responds with a SERVFAIL
- response, which is the reverse of normal stub resolver
- behavior.
- </p></dd>
-<dt><span class="term">-t <em class="replaceable"><code>type</code></em></span></dt>
-<dd>
-<p>
- Query type:
- The <em class="parameter"><code>type</code></em> argument can be any
- recognized query type: CNAME, NS, SOA, TXT, DNSKEY, AXFR, etc.
- </p>
-<p>
- When no query type is specified, <span class="command"><strong>host</strong></span>
- automatically selects an appropriate query type. By default, it
- looks for A, AAAA, and MX records.
- If the <code class="option">-C</code> option is given, queries will
- be made for SOA records.
- If <em class="parameter"><code>name</code></em> is a dotted-decimal IPv4
- address or colon-delimited IPv6
- address, <span class="command"><strong>host</strong></span> will query for PTR
- records.
- </p>
-<p>
- If a query type of IXFR is chosen the starting serial
- number can be specified by appending an equal followed by
- the starting serial number
- (like <code class="option">-t <code class="literal">IXFR=12345678</code></code>).
- </p>
-</dd>
-<dt><span class="term">-T</span></dt>
-<dd><p>
- TCP:
- By default, <span class="command"><strong>host</strong></span> uses UDP when making
- queries. The <code class="option">-T</code> option makes it use a TCP
- connection when querying the name server. TCP will be
- automatically selected for queries that require it, such
- as zone transfer (AXFR) requests.
- </p></dd>
-<dt><span class="term">-m <em class="replaceable"><code>flag</code></em></span></dt>
-<dd><p>
- Memory usage debugging: the flag can
- be <em class="parameter"><code>record</code></em>, <em class="parameter"><code>usage</code></em>,
- or <em class="parameter"><code>trace</code></em>. You can specify
- the <code class="option">-m</code> option more than once to set
- multiple flags.
- </p></dd>
-<dt><span class="term">-v</span></dt>
-<dd><p>
- Verbose output.
- Equivalent to the <code class="option">-d</code> debug option.
- Verbose output can also be enabled by setting
- the <em class="parameter"><code>debug</code></em> option
- in <code class="filename">/etc/resolv.conf</code>.
- </p></dd>
-<dt><span class="term">-V</span></dt>
-<dd><p>
- Print the version number and exit.
- </p></dd>
-<dt><span class="term">-w</span></dt>
-<dd><p>
- Wait forever: The query timeout is set to the maximum possible.
- See also the <code class="option">-W</code> option.
- </p></dd>
-<dt><span class="term">-W <em class="replaceable"><code>wait</code></em></span></dt>
-<dd>
-<p>
- Timeout: Wait for up to <em class="parameter"><code>wait</code></em>
- seconds for a reply. If <em class="parameter"><code>wait</code></em> is
- less than one, the wait interval is set to one second.
- </p>
-<p>
- By default, <span class="command"><strong>host</strong></span> will wait for 5
- seconds for UDP responses and 10 seconds for TCP
- connections. These defaults can be overridden by
- the <em class="parameter"><code>timeout</code></em> option
- in <code class="filename">/etc/resolv.conf</code>.
- </p>
-<p>
- See also the <code class="option">-w</code> option.
- </p>
-</dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.4.9"></a><h2>IDN SUPPORT</h2>
-<p>
- If <span class="command"><strong>host</strong></span> has been built with IDN (internationalized
- domain name) support, it can accept and display non-ASCII domain names.
- <span class="command"><strong>host</strong></span> appropriately converts character encoding of
- domain name before sending a request to DNS server or displaying a
- reply from the server.
- If you'd like to turn off the IDN support for some reason, defines
- the <code class="envar">IDN_DISABLE</code> environment variable.
- The IDN support is disabled if the variable is set when
- <span class="command"><strong>host</strong></span> runs.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.4.10"></a><h2>FILES</h2>
-<p><code class="filename">/etc/resolv.conf</code>
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.4.11"></a><h2>SEE ALSO</h2>
-<p><span class="citerefentry"><span class="refentrytitle">dig</span>(1)</span>,
- <span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.mdig.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.delv.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">mdig</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> delv</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.isc-hmac-fixup.html b/doc/arm/man.isc-hmac-fixup.html
deleted file mode 100644
index 9a2b9ba5..00000000
--- a/doc/arm/man.isc-hmac-fixup.html
+++ /dev/null
@@ -1,109 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>isc-hmac-fixup</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.genrandom.html" title="genrandom">
-<link rel="next" href="man.nsec3hash.html" title="nsec3hash">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">isc-hmac-fixup</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.genrandom.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.nsec3hash.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.isc-hmac-fixup"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">isc-hmac-fixup</span> &#8212; fixes HMAC keys generated by older versions of BIND</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">isc-hmac-fixup</code> {<em class="replaceable"><code>algorithm</code></em>} {<em class="replaceable"><code>secret</code></em>}</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.34.7"></a><h2>DESCRIPTION</h2>
-<p>
- Versions of BIND 9 up to and including BIND 9.6 had a bug causing
- HMAC-SHA* TSIG keys which were longer than the digest length of the
- hash algorithm (i.e., SHA1 keys longer than 160 bits, SHA256 keys
- longer than 256 bits, etc) to be used incorrectly, generating a
- message authentication code that was incompatible with other DNS
- implementations.
- </p>
-<p>
- This bug has been fixed in BIND 9.7. However, the fix may
- cause incompatibility between older and newer versions of
- BIND, when using long keys. <span class="command"><strong>isc-hmac-fixup</strong></span>
- modifies those keys to restore compatibility.
- </p>
-<p>
- To modify a key, run <span class="command"><strong>isc-hmac-fixup</strong></span> and
- specify the key's algorithm and secret on the command line. If the
- secret is longer than the digest length of the algorithm (64 bytes
- for SHA1 through SHA256, or 128 bytes for SHA384 and SHA512), then a
- new secret will be generated consisting of a hash digest of the old
- secret. (If the secret did not require conversion, then it will be
- printed without modification.)
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.34.8"></a><h2>SECURITY CONSIDERATIONS</h2>
-<p>
- Secrets that have been converted by <span class="command"><strong>isc-hmac-fixup</strong></span>
- are shortened, but as this is how the HMAC protocol works in
- operation anyway, it does not affect security. RFC 2104 notes,
- "Keys longer than [the digest length] are acceptable but the
- extra length would not significantly increase the function
- strength."
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.34.9"></a><h2>SEE ALSO</h2>
-<p>
- <em class="citetitle">BIND 9 Administrator Reference Manual</em>,
- <em class="citetitle">RFC 2104</em>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.genrandom.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.nsec3hash.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">genrandom</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">nsec3hash</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.lwresd.html b/doc/arm/man.lwresd.html
deleted file mode 100644
index a0780386..00000000
--- a/doc/arm/man.lwresd.html
+++ /dev/null
@@ -1,250 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>lwresd</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.dnssec-verify.html" title="dnssec-verify">
-<link rel="next" href="man.named.html" title="named">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">lwresd</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.dnssec-verify.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.named.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.lwresd"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">lwresd</span> &#8212; lightweight resolver daemon</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">lwresd</code> [<code class="option">-c <em class="replaceable"><code>config-file</code></em></code>] [<code class="option">-C <em class="replaceable"><code>config-file</code></em></code>] [<code class="option">-d <em class="replaceable"><code>debug-level</code></em></code>] [<code class="option">-f</code>] [<code class="option">-g</code>] [<code class="option">-i <em class="replaceable"><code>pid-file</code></em></code>] [<code class="option">-m <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-n <em class="replaceable"><code>#cpus</code></em></code>] [<code class="option">-P <em class="replaceable"><code>port</code></em></code>] [<code class="option">-p <em class="replaceable"><code>port</code></em></code>] [<code class="option">-s</code>] [<code class="option">-t <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-u <em class="replaceable"><code>user</code></em></code>] [<code class="option">-v</code>] [<code class="option">-4</code>] [<code class="option">-6</code>]</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.18.7"></a><h2>DESCRIPTION</h2>
-<p><span class="command"><strong>lwresd</strong></span>
- is the daemon providing name lookup
- services to clients that use the BIND 9 lightweight resolver
- library. It is essentially a stripped-down, caching-only name
- server that answers queries using the BIND 9 lightweight
- resolver protocol rather than the DNS protocol.
- </p>
-<p><span class="command"><strong>lwresd</strong></span>
- listens for resolver queries on a
- UDP port on the IPv4 loopback interface, 127.0.0.1. This
- means that <span class="command"><strong>lwresd</strong></span> can only be used by
- processes running on the local machine. By default, UDP port
- number 921 is used for lightweight resolver requests and
- responses.
- </p>
-<p>
- Incoming lightweight resolver requests are decoded by the
- server which then resolves them using the DNS protocol. When
- the DNS lookup completes, <span class="command"><strong>lwresd</strong></span> encodes
- the answers in the lightweight resolver format and returns
- them to the client that made the request.
- </p>
-<p>
- If <code class="filename">/etc/resolv.conf</code> contains any
- <code class="option">nameserver</code> entries, <span class="command"><strong>lwresd</strong></span>
- sends recursive DNS queries to those servers. This is similar
- to the use of forwarders in a caching name server. If no
- <code class="option">nameserver</code> entries are present, or if
- forwarding fails, <span class="command"><strong>lwresd</strong></span> resolves the
- queries autonomously starting at the root name servers, using
- a built-in list of root server hints.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.18.8"></a><h2>OPTIONS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-4</span></dt>
-<dd><p>
- Use IPv4 only even if the host machine is capable of IPv6.
- <code class="option">-4</code> and <code class="option">-6</code> are mutually
- exclusive.
- </p></dd>
-<dt><span class="term">-6</span></dt>
-<dd><p>
- Use IPv6 only even if the host machine is capable of IPv4.
- <code class="option">-4</code> and <code class="option">-6</code> are mutually
- exclusive.
- </p></dd>
-<dt><span class="term">-c <em class="replaceable"><code>config-file</code></em></span></dt>
-<dd><p>
- Use <em class="replaceable"><code>config-file</code></em> as the
- configuration file instead of the default,
- <code class="filename">/etc/lwresd.conf</code>.
-
- <code class="option">-c</code> can not be used with <code class="option">-C</code>.
- </p></dd>
-<dt><span class="term">-C <em class="replaceable"><code>config-file</code></em></span></dt>
-<dd><p>
- Use <em class="replaceable"><code>config-file</code></em> as the
- configuration file instead of the default,
- <code class="filename">/etc/resolv.conf</code>.
- <code class="option">-C</code> can not be used with <code class="option">-c</code>.
- </p></dd>
-<dt><span class="term">-d <em class="replaceable"><code>debug-level</code></em></span></dt>
-<dd><p>
- Set the daemon's debug level to <em class="replaceable"><code>debug-level</code></em>.
- Debugging traces from <span class="command"><strong>lwresd</strong></span> become
- more verbose as the debug level increases.
- </p></dd>
-<dt><span class="term">-f</span></dt>
-<dd><p>
- Run the server in the foreground (i.e. do not daemonize).
- </p></dd>
-<dt><span class="term">-g</span></dt>
-<dd><p>
- Run the server in the foreground and force all logging
- to <code class="filename">stderr</code>.
- </p></dd>
-<dt><span class="term">-i <em class="replaceable"><code>pid-file</code></em></span></dt>
-<dd><p>
- Use <em class="replaceable"><code>pid-file</code></em> as the
- PID file instead of the default,
- <code class="filename">/var/run/lwresd/lwresd.pid</code>.
- </p></dd>
-<dt><span class="term">-m <em class="replaceable"><code>flag</code></em></span></dt>
-<dd><p>
- Turn on memory usage debugging flags. Possible flags are
- <em class="replaceable"><code>usage</code></em>,
- <em class="replaceable"><code>trace</code></em>,
- <em class="replaceable"><code>record</code></em>,
- <em class="replaceable"><code>size</code></em>, and
- <em class="replaceable"><code>mctx</code></em>.
- These correspond to the ISC_MEM_DEBUGXXXX flags described in
- <code class="filename">&lt;isc/mem.h&gt;</code>.
- </p></dd>
-<dt><span class="term">-n <em class="replaceable"><code>#cpus</code></em></span></dt>
-<dd><p>
- Create <em class="replaceable"><code>#cpus</code></em> worker threads
- to take advantage of multiple CPUs. If not specified,
- <span class="command"><strong>lwresd</strong></span> will try to determine the
- number of CPUs present and create one thread per CPU.
- If it is unable to determine the number of CPUs, a
- single worker thread will be created.
- </p></dd>
-<dt><span class="term">-P <em class="replaceable"><code>port</code></em></span></dt>
-<dd><p>
- Listen for lightweight resolver queries on port
- <em class="replaceable"><code>port</code></em>. If
- not specified, the default is port 921.
- </p></dd>
-<dt><span class="term">-p <em class="replaceable"><code>port</code></em></span></dt>
-<dd><p>
- Send DNS lookups to port <em class="replaceable"><code>port</code></em>. If not
- specified, the default is port 53. This provides a
- way of testing the lightweight resolver daemon with a
- name server that listens for queries on a non-standard
- port number.
- </p></dd>
-<dt><span class="term">-s</span></dt>
-<dd>
-<p>
- Write memory usage statistics to <code class="filename">stdout</code>
- on exit.
- </p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- This option is mainly of interest to BIND 9 developers
- and may be removed or changed in a future release.
- </p>
-</div>
-</dd>
-<dt><span class="term">-t <em class="replaceable"><code>directory</code></em></span></dt>
-<dd>
-<p>Chroot
- to <em class="replaceable"><code>directory</code></em> after
- processing the command line arguments, but before
- reading the configuration file.
- </p>
-<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Warning</h3>
-<p>
- This option should be used in conjunction with the
- <code class="option">-u</code> option, as chrooting a process
- running as root doesn't enhance security on most
- systems; the way <code class="function">chroot(2)</code> is
- defined allows a process with root privileges to
- escape a chroot jail.
- </p>
-</div>
-</dd>
-<dt><span class="term">-u <em class="replaceable"><code>user</code></em></span></dt>
-<dd><p>Setuid
- to <em class="replaceable"><code>user</code></em> after completing
- privileged operations, such as creating sockets that
- listen on privileged ports.
- </p></dd>
-<dt><span class="term">-v</span></dt>
-<dd><p>
- Report the version number and exit.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.18.9"></a><h2>FILES</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><code class="filename">/etc/resolv.conf</code></span></dt>
-<dd><p>
- The default configuration file.
- </p></dd>
-<dt><span class="term"><code class="filename">/var/run/lwresd.pid</code></span></dt>
-<dd><p>
- The default process-id file.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.18.10"></a><h2>SEE ALSO</h2>
-<p><span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">lwres</span>(3)</span>,
- <span class="citerefentry"><span class="refentrytitle">resolver</span>(5)</span>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.dnssec-verify.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.named.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">dnssec-verify</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">named</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.mdig.html b/doc/arm/man.mdig.html
deleted file mode 100644
index 1bab35b1..00000000
--- a/doc/arm/man.mdig.html
+++ /dev/null
@@ -1,464 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>mdig</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.dig.html" title="dig">
-<link rel="next" href="man.host.html" title="host">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">mdig</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.dig.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.host.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.mdig"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">mdig</span> &#8212; DNS pipelined lookup utility</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">mdig</code> {@server} [<code class="option">-f <em class="replaceable"><code>filename</code></em></code>] [<code class="option">-h</code>] [<code class="option">-v</code>] [<code class="option">-4</code>] [<code class="option">-6</code>] [<code class="option">-b <em class="replaceable"><code>address</code></em></code>] [<code class="option">-p <em class="replaceable"><code>port#</code></em></code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-t <em class="replaceable"><code>type</code></em></code>] [<code class="option">-i</code>] [<code class="option">-x <em class="replaceable"><code>addr</code></em></code>] [plusopt...]</p></div>
-<div class="cmdsynopsis"><p><code class="command">mdig</code> {-h}</p></div>
-<div class="cmdsynopsis"><p><code class="command">mdig</code> [@server] {global-opt...} {
- {local-opt...}
- {query}
- ...}</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.3.7"></a><h2>DESCRIPTION</h2>
-<p><span class="command"><strong>mdig</strong></span>
- is a multiple/pipelined query version of <span class="command"><strong>dig</strong></span>:
- instead of waiting for a response after sending each query,
- it begins by sending all queries. Responses are displayed in
- the order in which they are received, not in the order the
- corresponding queries were sent.
- </p>
-<p>
- <span class="command"><strong>mdig</strong></span> options are a subset of the
- <span class="command"><strong>dig</strong></span> options, and are divided into "anywhere
- options" which can occur anywhere, "global options" which must
- occur before the query name (or they are ignored with a warning),
- and "local options" which apply to the next query on the command
- line.
- </p>
-<p>
- The {@server} option is a mandatory global
- option. It is the name or IP address of the name server to query.
- (Unlike <span class="command"><strong>dig</strong></span>, this value is not retrieved from
- <code class="filename">/etc/resolv.conf</code>.) It can be an IPv4 address
- in dotted-decimal notation, an IPv6 address in colon-delimited
- notation, or a hostname. When the supplied
- <em class="parameter"><code>server</code></em> argument is a hostname,
- <span class="command"><strong>mdig</strong></span> resolves that name before querying
- the name server.
- </p>
-<p><span class="command"><strong>mdig</strong></span>
- provides a number of query options which affect
- the way in which lookups are made and the results displayed. Some of
- these set or reset flag bits in the query header, some determine which
- sections of the answer get printed, and others determine the timeout
- and retry strategies.
- </p>
-<p>
- Each query option is identified by a keyword preceded by a plus
- sign (<code class="literal">+</code>). Some keywords set or reset an
- option. These may be preceded by the string <code class="literal">no</code>
- to negate the meaning of that keyword. Other keywords assign
- values to options like the timeout interval. They have the
- form <code class="option">+keyword=value</code>.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.3.8"></a><h2>ANYWHERE OPTIONS</h2>
-<p>
- The <code class="option">-f</code> option makes <span class="command"><strong>mdig</strong></span>
- operate in batch mode by reading a list of lookup requests to
- process from the file <em class="parameter"><code>filename</code></em>. The file
- contains a number of queries, one per line. Each entry in the
- file should be organized in the same way they would be presented
- as queries to <span class="command"><strong>mdig</strong></span> using the command-line interface.
- </p>
-<p>
- The <code class="option">-h</code> causes <span class="command"><strong>mdig</strong></span> to
- print the detailed help with the full list of options and exit.
- </p>
-<p>
- The <code class="option">-v</code> causes <span class="command"><strong>mdig</strong></span> to
- print the version number and exit.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.3.9"></a><h2>GLOBAL OPTIONS</h2>
-<p>
- The <code class="option">-4</code> option forces <span class="command"><strong>mdig</strong></span> to
- only use IPv4 query transport.
- </p>
-<p>
- The <code class="option">-6</code> option forces <span class="command"><strong>mdig</strong></span> to
- only use IPv6 query transport.
- </p>
-<p>
- The <code class="option">-b</code> option sets the source IP address of the
- query to <em class="parameter"><code>address</code></em>. This must be a valid
- address on one of the host's network interfaces or "0.0.0.0" or
- "::". An optional port may be specified by appending
- "#&lt;port&gt;"
- </p>
-<p>
- The <code class="option">-p</code> option is used when a non-standard port
- number is to be queried.
- <em class="parameter"><code>port#</code></em> is the port number
- that <span class="command"><strong>mdig</strong></span> will send its queries instead of
- the standard DNS port number 53. This option would be used to
- test a name server that has been configured to listen for
- queries on a non-standard port number.
- </p>
-<p>
- The global query options are:
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><code class="option">+[no]additional</code></span></dt>
-<dd><p>
- Display [do not display] the additional section of a
- reply. The default is to display it.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]all</code></span></dt>
-<dd><p>
- Set or clear all display flags.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]answer</code></span></dt>
-<dd><p>
- Display [do not display] the answer section of a
- reply. The default is to display it.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]authority</code></span></dt>
-<dd><p>
- Display [do not display] the authority section of a
- reply. The default is to display it.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]besteffort</code></span></dt>
-<dd><p>
- Attempt to display the contents of messages which are
- malformed. The default is to not display malformed
- answers.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]cl</code></span></dt>
-<dd><p>
- Display [do not display] the CLASS when printing the
- record.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]comments</code></span></dt>
-<dd><p>
- Toggle the display of comment lines in the output.
- The default is to print comments.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]crypto</code></span></dt>
-<dd><p>
- Toggle the display of cryptographic fields in DNSSEC
- records. The contents of these field are unnecessary
- to debug most DNSSEC validation failures and removing
- them makes it easier to see the common failures. The
- default is to display the fields. When omitted they
- are replaced by the string "[omitted]" or in the
- DNSKEY case the key id is displayed as the replacement,
- e.g. "[ key id = value ]".
- </p></dd>
-<dt><span class="term"><code class="option">+dscp[=value]</code></span></dt>
-<dd><p>
- Set the DSCP code point to be used when sending the
- query. Valid DSCP code points are in the range
- [0..63]. By default no code point is explicitly set.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]multiline</code></span></dt>
-<dd><p>
- Print records like the SOA records in a verbose
- multi-line format with human-readable comments. The
- default is to print each record on a single line, to
- facilitate machine parsing of the <span class="command"><strong>mdig</strong></span>
- output.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]question</code></span></dt>
-<dd><p>
- Print [do not print] the question section of a query
- when an answer is returned. The default is to print
- the question section as a comment.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]rrcomments</code></span></dt>
-<dd><p>
- Toggle the display of per-record comments in the
- output (for example, human-readable key information
- about DNSKEY records). The default is not to print
- record comments unless multiline mode is active.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]short</code></span></dt>
-<dd><p>
- Provide a terse answer. The default is to print the
- answer in a verbose form.
- </p></dd>
-<dt><span class="term"><code class="option">+split=W</code></span></dt>
-<dd><p>
- Split long hex- or base64-formatted fields in resource
- records into chunks of <em class="parameter"><code>W</code></em>
- characters (where <em class="parameter"><code>W</code></em> is rounded
- up to the nearest multiple of 4).
- <em class="parameter"><code>+nosplit</code></em> or
- <em class="parameter"><code>+split=0</code></em> causes fields not to
- be split at all. The default is 56 characters, or
- 44 characters when multiline mode is active.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]tcp</code></span></dt>
-<dd><p>
- Use [do not use] TCP when querying name servers. The
- default behavior is to use UDP.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]ttlid</code></span></dt>
-<dd><p>
- Display [do not display] the TTL when printing the
- record.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]ttlunits</code></span></dt>
-<dd><p>
- Display [do not display] the TTL in friendly human-readable
- time units of "s", "m", "h", "d", and "w", representing
- seconds, minutes, hours, days and weeks. Implies +ttlid.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]vc</code></span></dt>
-<dd><p>
- Use [do not use] TCP when querying name servers. This
- alternate syntax to <em class="parameter"><code>+[no]tcp</code></em>
- is provided for backwards compatibility. The "vc"
- stands for "virtual circuit".
- </p></dd>
-</dl></div>
-<p>
-
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.3.10"></a><h2>LOCAL OPTIONS</h2>
-<p>
- The <code class="option">-c</code> option sets the query class to
- <em class="parameter"><code>class</code></em>. It can be any valid query class
- which is supported in BIND 9. The default query class is "IN".
- </p>
-<p>
- The <code class="option">-t</code> option sets the query type to
- <em class="parameter"><code>type</code></em>. It can be any valid query type
- which is supported in BIND 9. The default query type is "A",
- unless the <code class="option">-x</code> option is supplied to indicate
- a reverse lookup with the "PTR" query type.
- </p>
-<p>
- The <code class="option">-i</code> option sets the reverse domain for
- IPv6 addresses to IP6.INT.
- </p>
-<p>
- Reverse lookups &#8212; mapping addresses to names &#8212; are
- simplified by the <code class="option">-x</code> option.
- <em class="parameter"><code>addr</code></em> is an IPv4
- address in dotted-decimal notation, or a colon-delimited IPv6 address.
- <span class="command"><strong>mdig</strong></span> automatically performs a lookup for a
- query name like <code class="literal">11.12.13.10.in-addr.arpa</code> and
- sets the query type and class to PTR and IN respectively.
- By default, IPv6 addresses are looked up using nibble format
- under the IP6.ARPA domain. To use the older RFC1886 method
- using the IP6.INT domain specify the <code class="option">-i</code> option.
- </p>
-<p>
- The local query options are:
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><code class="option">+[no]aaflag</code></span></dt>
-<dd><p>
- A synonym for <em class="parameter"><code>+[no]aaonly</code></em>.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]aaonly</code></span></dt>
-<dd><p>
- Sets the "aa" flag in the query.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]adflag</code></span></dt>
-<dd><p>
- Set [do not set] the AD (authentic data) bit in the
- query. This requests the server to return whether
- all of the answer and authority sections have all
- been validated as secure according to the security
- policy of the server. AD=1 indicates that all records
- have been validated as secure and the answer is not
- from a OPT-OUT range. AD=0 indicate that some part
- of the answer was insecure or not validated. This
- bit is set by default.
- </p></dd>
-<dt><span class="term"><code class="option">+bufsize=B</code></span></dt>
-<dd><p>
- Set the UDP message buffer size advertised using EDNS0
- to <em class="parameter"><code>B</code></em> bytes. The maximum and
- minimum sizes of this buffer are 65535 and 0 respectively.
- Values outside this range are rounded up or down
- appropriately. Values other than zero will cause a
- EDNS query to be sent.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]cdflag</code></span></dt>
-<dd><p>
- Set [do not set] the CD (checking disabled) bit in
- the query. This requests the server to not perform
- DNSSEC validation of responses.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]cookie[<span class="optional">=####</span>]</code></span></dt>
-<dd><p>
- Send a COOKIE EDNS option, with optional value.
- Replaying a COOKIE from a previous response will allow
- the server to identify a previous client. The default
- is <code class="option">+nocookie</code>.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]dnssec</code></span></dt>
-<dd><p>
- Requests DNSSEC records be sent by setting the DNSSEC
- OK bit (DO) in the OPT record in the additional section
- of the query.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]edns[=#]</code></span></dt>
-<dd><p>
- Specify the EDNS version to query with. Valid values
- are 0 to 255. Setting the EDNS version will cause
- a EDNS query to be sent. <code class="option">+noedns</code>
- clears the remembered EDNS version. EDNS is set to
- 0 by default.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]ednsflags[=#]</code></span></dt>
-<dd><p>
- Set the must-be-zero EDNS flags bits (Z bits) to the
- specified value. Decimal, hex and octal encodings are
- accepted. Setting a named flag (e.g. DO) will silently be
- ignored. By default, no Z bits are set.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]ednsopt[=code[:value]]</code></span></dt>
-<dd><p>
- Specify EDNS option with code point <code class="option">code</code>
- and optionally payload of <code class="option">value</code> as a
- hexadecimal string. <code class="option">+noednsopt</code>
- clears the EDNS options to be sent.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]expire</code></span></dt>
-<dd><p>
- Send an EDNS Expire option.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]nsid</code></span></dt>
-<dd><p>
- Include an EDNS name server ID request when sending
- a query.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]recurse</code></span></dt>
-<dd><p>
- Toggle the setting of the RD (recursion desired) bit
- in the query. This bit is set by default, which means
- <span class="command"><strong>mdig</strong></span> normally sends recursive
- queries.
- </p></dd>
-<dt><span class="term"><code class="option">+retry=T</code></span></dt>
-<dd><p>
- Sets the number of times to retry UDP queries to
- server to <em class="parameter"><code>T</code></em> instead of the
- default, 2. Unlike <em class="parameter"><code>+tries</code></em>,
- this does not include the initial query.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]subnet=addr[/prefix-length]</code></span></dt>
-<dd>
-<p>
- Send (don't send) an EDNS Client Subnet option with the
- specified IP address or network prefix.
- </p>
-<p>
- <span class="command"><strong>mdig +subnet=0.0.0.0/0</strong></span>, or simply
- <span class="command"><strong>mdig +subnet=0</strong></span> for short, sends an EDNS
- client-subnet option with an empty address and a source
- prefix-length of zero, which signals a resolver that
- the client's address information must
- <span class="emphasis"><em>not</em></span> be used when resolving
- this query.
- </p>
-</dd>
-<dt><span class="term"><code class="option">+timeout=T</code></span></dt>
-<dd><p>
- Sets the timeout for a query to
- <em class="parameter"><code>T</code></em> seconds. The default
- timeout is 5 seconds for UDP transport and 10 for TCP.
- An attempt to set <em class="parameter"><code>T</code></em> to less
- than 1 will result
- in a query timeout of 1 second being applied.
- </p></dd>
-<dt><span class="term"><code class="option">+tries=T</code></span></dt>
-<dd><p>
- Sets the number of times to try UDP queries to server
- to <em class="parameter"><code>T</code></em> instead of the default,
- 3. If <em class="parameter"><code>T</code></em> is less than or equal
- to zero, the number of tries is silently rounded up
- to 1.
- </p></dd>
-<dt><span class="term"><code class="option">+udptimeout=T</code></span></dt>
-<dd><p>
- Sets the timeout between UDP query retries.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]unknownformat</code></span></dt>
-<dd><p>
- Print all RDATA in unknown RR type presentation format
- (RFC 3597). The default is to print RDATA for known types
- in the type's presentation format.
- </p></dd>
-<dt><span class="term"><code class="option">+[no]zflag</code></span></dt>
-<dd><p>
- Set [do not set] the last unassigned DNS header flag in a
- DNS query. This flag is off by default.
- </p></dd>
-</dl></div>
-<p>
-
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.3.11"></a><h2>SEE ALSO</h2>
-<p><span class="citerefentry"><span class="refentrytitle">dig</span>(1)</span>,
- <em class="citetitle">RFC1035</em>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.dig.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.host.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">dig </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> host</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.named-checkconf.html b/doc/arm/man.named-checkconf.html
deleted file mode 100644
index 21864ba0..00000000
--- a/doc/arm/man.named-checkconf.html
+++ /dev/null
@@ -1,148 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>named-checkconf</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.named.conf.html" title="named.conf">
-<link rel="next" href="man.named-checkzone.html" title="named-checkzone">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">named-checkconf</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.named.conf.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.named-checkzone.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.named-checkconf"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">named-checkconf</span> &#8212; named configuration file syntax checking tool</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">named-checkconf</code> [<code class="option">-h</code>] [<code class="option">-v</code>] [<code class="option">-j</code>] [<code class="option">-t <em class="replaceable"><code>directory</code></em></code>] {filename} [<code class="option">-p</code>] [<code class="option">-x</code>] [<code class="option">-z</code>]</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.21.7"></a><h2>DESCRIPTION</h2>
-<p><span class="command"><strong>named-checkconf</strong></span>
- checks the syntax, but not the semantics, of a
- <span class="command"><strong>named</strong></span> configuration file. The file is parsed
- and checked for syntax errors, along with all files included by it.
- If no file is specified, <code class="filename">/etc/named.conf</code> is read
- by default.
- </p>
-<p>
- Note: files that <span class="command"><strong>named</strong></span> reads in separate
- parser contexts, such as <code class="filename">rndc.key</code> and
- <code class="filename">bind.keys</code>, are not automatically read
- by <span class="command"><strong>named-checkconf</strong></span>. Configuration
- errors in these files may cause <span class="command"><strong>named</strong></span> to
- fail to run, even if <span class="command"><strong>named-checkconf</strong></span> was
- successful. <span class="command"><strong>named-checkconf</strong></span> can be run
- on these files explicitly, however.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.21.8"></a><h2>OPTIONS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-h</span></dt>
-<dd><p>
- Print the usage summary and exit.
- </p></dd>
-<dt><span class="term">-t <em class="replaceable"><code>directory</code></em></span></dt>
-<dd><p>
- Chroot to <code class="filename">directory</code> so that include
- directives in the configuration file are processed as if
- run by a similarly chrooted <span class="command"><strong>named</strong></span>.
- </p></dd>
-<dt><span class="term">-v</span></dt>
-<dd><p>
- Print the version of the <span class="command"><strong>named-checkconf</strong></span>
- program and exit.
- </p></dd>
-<dt><span class="term">-p</span></dt>
-<dd><p>
- Print out the <code class="filename">named.conf</code> and included files
- in canonical form if no errors were detected.
- </p></dd>
-<dt><span class="term">-x</span></dt>
-<dd><p>
- When printing the configuration files in canonical
- form, obscure shared secrets by replacing them with
- strings of question marks ('?'). This allows the
- contents of <code class="filename">named.conf</code> and related
- files to be shared &#8212; for example, when submitting
- bug reports &#8212; without compromising private data.
- This option cannot be used without <code class="option">-p</code>.
- </p></dd>
-<dt><span class="term">-z</span></dt>
-<dd><p>
- Perform a test load of all master zones found in
- <code class="filename">named.conf</code>.
- </p></dd>
-<dt><span class="term">-j</span></dt>
-<dd><p>
- When loading a zonefile read the journal if it exists.
- </p></dd>
-<dt><span class="term">filename</span></dt>
-<dd><p>
- The name of the configuration file to be checked. If not
- specified, it defaults to <code class="filename">/etc/named.conf</code>.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.21.9"></a><h2>RETURN VALUES</h2>
-<p><span class="command"><strong>named-checkconf</strong></span>
- returns an exit status of 1 if
- errors were detected and 0 otherwise.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.21.10"></a><h2>SEE ALSO</h2>
-<p><span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">named-checkzone</span>(8)</span>,
- <em class="citetitle">BIND 9 Administrator Reference Manual</em>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.named.conf.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.named-checkzone.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<code class="filename">named.conf</code> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">named-checkzone</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.named-checkzone.html b/doc/arm/man.named-checkzone.html
deleted file mode 100644
index 5110954e..00000000
--- a/doc/arm/man.named-checkzone.html
+++ /dev/null
@@ -1,335 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>named-checkzone</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.named-checkconf.html" title="named-checkconf">
-<link rel="next" href="man.named-journalprint.html" title="named-journalprint">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">named-checkzone</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.named-checkconf.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.named-journalprint.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.named-checkzone"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">named-checkzone</span>, <span class="application">named-compilezone</span> &#8212; zone file validity checking or converting tool</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">named-checkzone</code> [<code class="option">-d</code>] [<code class="option">-h</code>] [<code class="option">-j</code>] [<code class="option">-q</code>] [<code class="option">-v</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-f <em class="replaceable"><code>format</code></em></code>] [<code class="option">-F <em class="replaceable"><code>format</code></em></code>] [<code class="option">-J <em class="replaceable"><code>filename</code></em></code>] [<code class="option">-i <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-k <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-m <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-M <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-n <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-l <em class="replaceable"><code>ttl</code></em></code>] [<code class="option">-L <em class="replaceable"><code>serial</code></em></code>] [<code class="option">-o <em class="replaceable"><code>filename</code></em></code>] [<code class="option">-r <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-s <em class="replaceable"><code>style</code></em></code>] [<code class="option">-S <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-t <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-T <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-w <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-D</code>] [<code class="option">-W <em class="replaceable"><code>mode</code></em></code>] {zonename} {filename}</p></div>
-<div class="cmdsynopsis"><p><code class="command">named-compilezone</code> [<code class="option">-d</code>] [<code class="option">-j</code>] [<code class="option">-q</code>] [<code class="option">-v</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-C <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-f <em class="replaceable"><code>format</code></em></code>] [<code class="option">-F <em class="replaceable"><code>format</code></em></code>] [<code class="option">-J <em class="replaceable"><code>filename</code></em></code>] [<code class="option">-i <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-k <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-m <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-n <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-l <em class="replaceable"><code>ttl</code></em></code>] [<code class="option">-L <em class="replaceable"><code>serial</code></em></code>] [<code class="option">-r <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-s <em class="replaceable"><code>style</code></em></code>] [<code class="option">-t <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-T <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-w <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-D</code>] [<code class="option">-W <em class="replaceable"><code>mode</code></em></code>] {<code class="option">-o <em class="replaceable"><code>filename</code></em></code>} {zonename} {filename}</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.22.7"></a><h2>DESCRIPTION</h2>
-<p><span class="command"><strong>named-checkzone</strong></span>
- checks the syntax and integrity of a zone file. It performs the
- same checks as <span class="command"><strong>named</strong></span> does when loading a
- zone. This makes <span class="command"><strong>named-checkzone</strong></span> useful for
- checking zone files before configuring them into a name server.
- </p>
-<p>
- <span class="command"><strong>named-compilezone</strong></span> is similar to
- <span class="command"><strong>named-checkzone</strong></span>, but it always dumps the
- zone contents to a specified file in a specified format.
- Additionally, it applies stricter check levels by default,
- since the dump output will be used as an actual zone file
- loaded by <span class="command"><strong>named</strong></span>.
- When manually specified otherwise, the check levels must at
- least be as strict as those specified in the
- <span class="command"><strong>named</strong></span> configuration file.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.22.8"></a><h2>OPTIONS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-d</span></dt>
-<dd><p>
- Enable debugging.
- </p></dd>
-<dt><span class="term">-h</span></dt>
-<dd><p>
- Print the usage summary and exit.
- </p></dd>
-<dt><span class="term">-q</span></dt>
-<dd><p>
- Quiet mode - exit code only.
- </p></dd>
-<dt><span class="term">-v</span></dt>
-<dd><p>
- Print the version of the <span class="command"><strong>named-checkzone</strong></span>
- program and exit.
- </p></dd>
-<dt><span class="term">-j</span></dt>
-<dd><p>
- When loading a zone file, read the journal if it exists.
- The journal file name is assumed to be the zone file name
- appended with the string <code class="filename">.jnl</code>.
- </p></dd>
-<dt><span class="term">-J <em class="replaceable"><code>filename</code></em></span></dt>
-<dd><p>
- When loading the zone file read the journal from the given
- file, if it exists. (Implies -j.)
- </p></dd>
-<dt><span class="term">-c <em class="replaceable"><code>class</code></em></span></dt>
-<dd><p>
- Specify the class of the zone. If not specified, "IN" is assumed.
- </p></dd>
-<dt><span class="term">-i <em class="replaceable"><code>mode</code></em></span></dt>
-<dd>
-<p>
- Perform post-load zone integrity checks. Possible modes are
- <span class="command"><strong>"full"</strong></span> (default),
- <span class="command"><strong>"full-sibling"</strong></span>,
- <span class="command"><strong>"local"</strong></span>,
- <span class="command"><strong>"local-sibling"</strong></span> and
- <span class="command"><strong>"none"</strong></span>.
- </p>
-<p>
- Mode <span class="command"><strong>"full"</strong></span> checks that MX records
- refer to A or AAAA record (both in-zone and out-of-zone
- hostnames). Mode <span class="command"><strong>"local"</strong></span> only
- checks MX records which refer to in-zone hostnames.
- </p>
-<p>
- Mode <span class="command"><strong>"full"</strong></span> checks that SRV records
- refer to A or AAAA record (both in-zone and out-of-zone
- hostnames). Mode <span class="command"><strong>"local"</strong></span> only
- checks SRV records which refer to in-zone hostnames.
- </p>
-<p>
- Mode <span class="command"><strong>"full"</strong></span> checks that delegation NS
- records refer to A or AAAA record (both in-zone and out-of-zone
- hostnames). It also checks that glue address records
- in the zone match those advertised by the child.
- Mode <span class="command"><strong>"local"</strong></span> only checks NS records which
- refer to in-zone hostnames or that some required glue exists,
- that is when the nameserver is in a child zone.
- </p>
-<p>
- Mode <span class="command"><strong>"full-sibling"</strong></span> and
- <span class="command"><strong>"local-sibling"</strong></span> disable sibling glue
- checks but are otherwise the same as <span class="command"><strong>"full"</strong></span>
- and <span class="command"><strong>"local"</strong></span> respectively.
- </p>
-<p>
- Mode <span class="command"><strong>"none"</strong></span> disables the checks.
- </p>
-</dd>
-<dt><span class="term">-f <em class="replaceable"><code>format</code></em></span></dt>
-<dd><p>
- Specify the format of the zone file.
- Possible formats are <span class="command"><strong>"text"</strong></span> (default),
- <span class="command"><strong>"raw"</strong></span>, and <span class="command"><strong>"map"</strong></span>.
- </p></dd>
-<dt><span class="term">-F <em class="replaceable"><code>format</code></em></span></dt>
-<dd>
-<p>
- Specify the format of the output file specified.
- For <span class="command"><strong>named-checkzone</strong></span>,
- this does not cause any effects unless it dumps the zone
- contents.
- </p>
-<p>
- Possible formats are <span class="command"><strong>"text"</strong></span> (default),
- which is the standard textual representation of the zone,
- and <span class="command"><strong>"map"</strong></span>, <span class="command"><strong>"raw"</strong></span>,
- and <span class="command"><strong>"raw=N"</strong></span>, which store the zone in a
- binary format for rapid loading by <span class="command"><strong>named</strong></span>.
- <span class="command"><strong>"raw=N"</strong></span> specifies the format version of
- the raw zone file: if N is 0, the raw file can be read by
- any version of <span class="command"><strong>named</strong></span>; if N is 1, the file
- can be read by release 9.9.0 or higher; the default is 1.
- </p>
-</dd>
-<dt><span class="term">-k <em class="replaceable"><code>mode</code></em></span></dt>
-<dd><p>
- Perform <span class="command"><strong>"check-names"</strong></span> checks with the
- specified failure mode.
- Possible modes are <span class="command"><strong>"fail"</strong></span>
- (default for <span class="command"><strong>named-compilezone</strong></span>),
- <span class="command"><strong>"warn"</strong></span>
- (default for <span class="command"><strong>named-checkzone</strong></span>) and
- <span class="command"><strong>"ignore"</strong></span>.
- </p></dd>
-<dt><span class="term">-l <em class="replaceable"><code>ttl</code></em></span></dt>
-<dd><p>
- Sets a maximum permissible TTL for the input file.
- Any record with a TTL higher than this value will cause
- the zone to be rejected. This is similar to using the
- <span class="command"><strong>max-zone-ttl</strong></span> option in
- <code class="filename">named.conf</code>.
- </p></dd>
-<dt><span class="term">-L <em class="replaceable"><code>serial</code></em></span></dt>
-<dd><p>
- When compiling a zone to "raw" or "map" format, set the
- "source serial" value in the header to the specified serial
- number. (This is expected to be used primarily for testing
- purposes.)
- </p></dd>
-<dt><span class="term">-m <em class="replaceable"><code>mode</code></em></span></dt>
-<dd><p>
- Specify whether MX records should be checked to see if they
- are addresses. Possible modes are <span class="command"><strong>"fail"</strong></span>,
- <span class="command"><strong>"warn"</strong></span> (default) and
- <span class="command"><strong>"ignore"</strong></span>.
- </p></dd>
-<dt><span class="term">-M <em class="replaceable"><code>mode</code></em></span></dt>
-<dd><p>
- Check if a MX record refers to a CNAME.
- Possible modes are <span class="command"><strong>"fail"</strong></span>,
- <span class="command"><strong>"warn"</strong></span> (default) and
- <span class="command"><strong>"ignore"</strong></span>.
- </p></dd>
-<dt><span class="term">-n <em class="replaceable"><code>mode</code></em></span></dt>
-<dd><p>
- Specify whether NS records should be checked to see if they
- are addresses.
- Possible modes are <span class="command"><strong>"fail"</strong></span>
- (default for <span class="command"><strong>named-compilezone</strong></span>),
- <span class="command"><strong>"warn"</strong></span>
- (default for <span class="command"><strong>named-checkzone</strong></span>) and
- <span class="command"><strong>"ignore"</strong></span>.
- </p></dd>
-<dt><span class="term">-o <em class="replaceable"><code>filename</code></em></span></dt>
-<dd><p>
- Write zone output to <code class="filename">filename</code>.
- If <code class="filename">filename</code> is <code class="filename">-</code> then
- write to standard out.
- This is mandatory for <span class="command"><strong>named-compilezone</strong></span>.
- </p></dd>
-<dt><span class="term">-r <em class="replaceable"><code>mode</code></em></span></dt>
-<dd><p>
- Check for records that are treated as different by DNSSEC but
- are semantically equal in plain DNS.
- Possible modes are <span class="command"><strong>"fail"</strong></span>,
- <span class="command"><strong>"warn"</strong></span> (default) and
- <span class="command"><strong>"ignore"</strong></span>.
- </p></dd>
-<dt><span class="term">-s <em class="replaceable"><code>style</code></em></span></dt>
-<dd><p>
- Specify the style of the dumped zone file.
- Possible styles are <span class="command"><strong>"full"</strong></span> (default)
- and <span class="command"><strong>"relative"</strong></span>.
- The full format is most suitable for processing
- automatically by a separate script.
- On the other hand, the relative format is more
- human-readable and is thus suitable for editing by hand.
- For <span class="command"><strong>named-checkzone</strong></span>
- this does not cause any effects unless it dumps the zone
- contents.
- It also does not have any meaning if the output format
- is not text.
- </p></dd>
-<dt><span class="term">-S <em class="replaceable"><code>mode</code></em></span></dt>
-<dd><p>
- Check if a SRV record refers to a CNAME.
- Possible modes are <span class="command"><strong>"fail"</strong></span>,
- <span class="command"><strong>"warn"</strong></span> (default) and
- <span class="command"><strong>"ignore"</strong></span>.
- </p></dd>
-<dt><span class="term">-t <em class="replaceable"><code>directory</code></em></span></dt>
-<dd><p>
- Chroot to <code class="filename">directory</code> so that
- include
- directives in the configuration file are processed as if
- run by a similarly chrooted <span class="command"><strong>named</strong></span>.
- </p></dd>
-<dt><span class="term">-T <em class="replaceable"><code>mode</code></em></span></dt>
-<dd><p>
- Check if Sender Policy Framework (SPF) records exist
- and issues a warning if an SPF-formatted TXT record is
- not also present. Possible modes are <span class="command"><strong>"warn"</strong></span>
- (default), <span class="command"><strong>"ignore"</strong></span>.
- </p></dd>
-<dt><span class="term">-w <em class="replaceable"><code>directory</code></em></span></dt>
-<dd><p>
- chdir to <code class="filename">directory</code> so that
- relative
- filenames in master file $INCLUDE directives work. This
- is similar to the directory clause in
- <code class="filename">named.conf</code>.
- </p></dd>
-<dt><span class="term">-D</span></dt>
-<dd><p>
- Dump zone file in canonical format.
- This is always enabled for <span class="command"><strong>named-compilezone</strong></span>.
- </p></dd>
-<dt><span class="term">-W <em class="replaceable"><code>mode</code></em></span></dt>
-<dd><p>
- Specify whether to check for non-terminal wildcards.
- Non-terminal wildcards are almost always the result of a
- failure to understand the wildcard matching algorithm (RFC 1034).
- Possible modes are <span class="command"><strong>"warn"</strong></span> (default)
- and
- <span class="command"><strong>"ignore"</strong></span>.
- </p></dd>
-<dt><span class="term">zonename</span></dt>
-<dd><p>
- The domain name of the zone being checked.
- </p></dd>
-<dt><span class="term">filename</span></dt>
-<dd><p>
- The name of the zone file.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.22.9"></a><h2>RETURN VALUES</h2>
-<p><span class="command"><strong>named-checkzone</strong></span>
- returns an exit status of 1 if
- errors were detected and 0 otherwise.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.22.10"></a><h2>SEE ALSO</h2>
-<p><span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">named-checkconf</span>(8)</span>,
- <em class="citetitle">RFC 1035</em>,
- <em class="citetitle">BIND 9 Administrator Reference Manual</em>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.named-checkconf.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.named-journalprint.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">named-checkconf</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">named-journalprint</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.named-journalprint.html b/doc/arm/man.named-journalprint.html
deleted file mode 100644
index a56f051c..00000000
--- a/doc/arm/man.named-journalprint.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>named-journalprint</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.named-checkzone.html" title="named-checkzone">
-<link rel="next" href="man.named-nzd2nzf.html" title="named-nzd2nzf">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">named-journalprint</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.named-checkzone.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.named-nzd2nzf.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.named-journalprint"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">named-journalprint</span> &#8212; print zone journal in human-readable form</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">named-journalprint</code> {<em class="replaceable"><code>journal</code></em>}</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.23.7"></a><h2>DESCRIPTION</h2>
-<p>
- <span class="command"><strong>named-journalprint</strong></span>
- prints the contents of a zone journal file in a human-readable
- form.
- </p>
-<p>
- Journal files are automatically created by <span class="command"><strong>named</strong></span>
- when changes are made to dynamic zones (e.g., by
- <span class="command"><strong>nsupdate</strong></span>). They record each addition
- or deletion of a resource record, in binary format, allowing the
- changes to be re-applied to the zone when the server is
- restarted after a shutdown or crash. By default, the name of
- the journal file is formed by appending the extension
- <code class="filename">.jnl</code> to the name of the corresponding
- zone file.
- </p>
-<p>
- <span class="command"><strong>named-journalprint</strong></span> converts the contents of a given
- journal file into a human-readable text format. Each line begins
- with "add" or "del", to indicate whether the record was added or
- deleted, and continues with the resource record in master-file
- format.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.23.8"></a><h2>SEE ALSO</h2>
-<p>
- <span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">nsupdate</span>(8)</span>,
- <em class="citetitle">BIND 9 Administrator Reference Manual</em>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.named-checkzone.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.named-nzd2nzf.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">named-checkzone</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">named-nzd2nzf</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.named-nzd2nzf.html b/doc/arm/man.named-nzd2nzf.html
deleted file mode 100644
index 79404ba3..00000000
--- a/doc/arm/man.named-nzd2nzf.html
+++ /dev/null
@@ -1,100 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>named-nzd2nzf</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.named-journalprint.html" title="named-journalprint">
-<link rel="next" href="man.named-rrchecker.html" title="named-rrchecker">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">named-nzd2nzf</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.named-journalprint.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.named-rrchecker.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.named-nzd2nzf"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">named-nzd2nzf</span> &#8212;
- Convert an NZD database to NZF text format
- </p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">named-nzd2nzf</code> {filename}</p></div>
-</div>
-<div class="refsect1">
-<a name="id-1.14.24.6"></a><h2>DESCRIPTION</h2>
-<p>
- <span class="command"><strong>named-nzd2nzf</strong></span> converts an NZD database to NZF
- format and prints it to standard output. This can be used to
- review the configuration of zones that were added to
- <span class="command"><strong>named</strong></span> via <span class="command"><strong>rndc addzone</strong></span>.
- It can also be used to restore the old file format
- when rolling back from a newer version
- of BIND to an older version.
- </p>
-</div>
-<div class="refsect1">
-<a name="id-1.14.24.7"></a><h2>ARGUMENTS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">filename</span></dt>
-<dd><p>
- The name of the <code class="filename">.nzd</code> file whose contents
- should be printed.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsect1">
-<a name="id-1.14.24.8"></a><h2>SEE ALSO</h2>
-<p>
- <em class="citetitle">BIND 9 Administrator Reference Manual</em>
- </p>
-</div>
-<div class="refsect1">
-<a name="id-1.14.24.9"></a><h2>AUTHOR</h2>
-<p><span class="corpauthor">Internet Systems Consortium</span>
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.named-journalprint.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.named-rrchecker.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">named-journalprint</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">named-rrchecker</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.named-rrchecker.html b/doc/arm/man.named-rrchecker.html
deleted file mode 100644
index f835eda1..00000000
--- a/doc/arm/man.named-rrchecker.html
+++ /dev/null
@@ -1,101 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>named-rrchecker</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.named-nzd2nzf.html" title="named-nzd2nzf">
-<link rel="next" href="man.nsupdate.html" title="nsupdate">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">named-rrchecker</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.named-nzd2nzf.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.nsupdate.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.named-rrchecker"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">named-rrchecker</span> &#8212; syntax checker for individual DNS resource records</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">named-rrchecker</code> [<code class="option">-h</code>] [<code class="option">-o <em class="replaceable"><code>origin</code></em></code>] [<code class="option">-p</code>] [<code class="option">-u</code>] [<code class="option">-C</code>] [<code class="option">-T</code>] [<code class="option">-P</code>]</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.25.7"></a><h2>DESCRIPTION</h2>
-<p><span class="command"><strong>named-rrchecker</strong></span>
- read a individual DNS resource record from standard input and checks if it
- is syntactically correct.
- </p>
-<p>
- The <code class="option">-h</code> prints out the help menu.
- </p>
-<p>
- The <code class="option">-o <em class="replaceable"><code>origin</code></em></code>
- option specifies a origin to be used when interpreting the record.
- </p>
-<p>
- The <code class="option">-p</code> prints out the resulting record in canonical
- form. If there is no canonical form defined then the record will be
- printed in unknown record format.
- </p>
-<p>
- The <code class="option">-u</code> prints out the resulting record in unknown record
- form.
- </p>
-<p>
- The <code class="option">-C</code>, <code class="option">-T</code> and <code class="option">-P</code>
- print out the known class, standard type and private type mnemonics
- respectively.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.25.8"></a><h2>SEE ALSO</h2>
-<p>
- <em class="citetitle">RFC 1034</em>,
- <em class="citetitle">RFC 1035</em>,
- <span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.named-nzd2nzf.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.nsupdate.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">named-nzd2nzf</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">nsupdate</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.named.conf.html b/doc/arm/man.named.conf.html
deleted file mode 100644
index 9aa360dc..00000000
--- a/doc/arm/man.named.conf.html
+++ /dev/null
@@ -1,711 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>named.conf</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.named.html" title="named">
-<link rel="next" href="man.named-checkconf.html" title="named-checkconf">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><code class="filename">named.conf</code></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.named.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.named-checkconf.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.named.conf"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><code class="filename">named.conf</code> &#8212; configuration file for <span class="command"><strong>named</strong></span></p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">named.conf</code> </p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.20.7"></a><h2>DESCRIPTION</h2>
-<p><code class="filename">named.conf</code> is the configuration file
- for
- <span class="command"><strong>named</strong></span>. Statements are enclosed
- in braces and terminated with a semi-colon. Clauses in
- the statements are also semi-colon terminated. The usual
- comment styles are supported:
- </p>
-<p>
- C style: /* */
- </p>
-<p>
- C++ style: // to end of line
- </p>
-<p>
- Unix style: # to end of line
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.20.8"></a><h2>ACL</h2>
-<div class="literallayout"><p><br>
-acl <em class="replaceable"><code>string</code></em> { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
-<br>
-</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.20.9"></a><h2>KEY</h2>
-<div class="literallayout"><p><br>
-key <em class="replaceable"><code>domain_name</code></em> {<br>
- algorithm <em class="replaceable"><code>string</code></em>;<br>
- secret <em class="replaceable"><code>string</code></em>;<br>
-};<br>
-</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.20.10"></a><h2>MASTERS</h2>
-<div class="literallayout"><p><br>
-masters <em class="replaceable"><code>string</code></em> [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>] {<br>
- ( <em class="replaceable"><code>masters</code></em> | <em class="replaceable"><code>ipv4_address</code></em> [<span class="optional">port <em class="replaceable"><code>integer</code></em></span>] |<br>
- <em class="replaceable"><code>ipv6_address</code></em> [<span class="optional">port <em class="replaceable"><code>integer</code></em></span>] ) [<span class="optional"> key <em class="replaceable"><code>string</code></em> </span>]; ...<br>
-};<br>
-</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.20.11"></a><h2>SERVER</h2>
-<div class="literallayout"><p><br>
-server ( <em class="replaceable"><code>ipv4_address[<span class="optional">/prefixlen</span>]</code></em> | <em class="replaceable"><code>ipv6_address[<span class="optional">/prefixlen</span>]</code></em> ) {<br>
- bogus <em class="replaceable"><code>boolean</code></em>;<br>
- edns <em class="replaceable"><code>boolean</code></em>;<br>
- edns-udp-size <em class="replaceable"><code>integer</code></em>;<br>
- max-udp-size <em class="replaceable"><code>integer</code></em>;<br>
- tcp-only <em class="replaceable"><code>boolean</code></em>;<br>
- provide-ixfr <em class="replaceable"><code>boolean</code></em>;<br>
- request-ixfr <em class="replaceable"><code>boolean</code></em>;<br>
- keys <em class="replaceable"><code>server_key</code></em>;<br>
- transfers <em class="replaceable"><code>integer</code></em>;<br>
- transfer-format ( many-answers | one-answer );<br>
- transfer-source ( <em class="replaceable"><code>ipv4_address</code></em> | * )<br>
- [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>];<br>
- transfer-source-v6 ( <em class="replaceable"><code>ipv6_address</code></em> | * )<br>
- [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>];<br>
-<br>
- support-ixfr <em class="replaceable"><code>boolean</code></em>; // obsolete<br>
-};<br>
-</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.20.12"></a><h2>TRUSTED-KEYS</h2>
-<div class="literallayout"><p><br>
-trusted-keys {<br>
- <em class="replaceable"><code>domain_name</code></em> <em class="replaceable"><code>flags</code></em> <em class="replaceable"><code>protocol</code></em> <em class="replaceable"><code>algorithm</code></em> <em class="replaceable"><code>key</code></em>; ...<br>
-};<br>
-</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.20.13"></a><h2>MANAGED-KEYS</h2>
-<div class="literallayout"><p><br>
-managed-keys {<br>
- <em class="replaceable"><code>domain_name</code></em> <code class="constant">initial-key</code> <em class="replaceable"><code>flags</code></em> <em class="replaceable"><code>protocol</code></em> <em class="replaceable"><code>algorithm</code></em> <em class="replaceable"><code>key</code></em>; ...<br>
-};<br>
-</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.20.14"></a><h2>CONTROLS</h2>
-<div class="literallayout"><p><br>
-controls {<br>
- inet ( <em class="replaceable"><code>ipv4_address</code></em> | <em class="replaceable"><code>ipv6_address</code></em> | * )<br>
- [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>]<br>
- allow { <em class="replaceable"><code>address_match_element</code></em>; ... }<br>
- [<span class="optional"> keys { <em class="replaceable"><code>string</code></em>; ... } </span>];<br>
- unix <em class="replaceable"><code>unsupported</code></em>; // not implemented<br>
-};<br>
-</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.20.15"></a><h2>LOGGING</h2>
-<div class="literallayout"><p><br>
-logging {<br>
- channel <em class="replaceable"><code>string</code></em> {<br>
- file <em class="replaceable"><code>log_file</code></em>;<br>
- syslog <em class="replaceable"><code>optional_facility</code></em>;<br>
- null;<br>
- stderr;<br>
- severity <em class="replaceable"><code>log_severity</code></em>;<br>
- print-time <em class="replaceable"><code>boolean</code></em>;<br>
- print-severity <em class="replaceable"><code>boolean</code></em>;<br>
- print-category <em class="replaceable"><code>boolean</code></em>;<br>
- };<br>
- category <em class="replaceable"><code>string</code></em> { <em class="replaceable"><code>string</code></em>; ... };<br>
-};<br>
-</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.20.16"></a><h2>LWRES</h2>
-<div class="literallayout"><p><br>
-lwres {<br>
- listen-on [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>] {<br>
- ( <em class="replaceable"><code>ipv4_address</code></em> | <em class="replaceable"><code>ipv6_address</code></em> ) [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>]; ...<br>
- };<br>
- view <em class="replaceable"><code>string</code></em> <em class="replaceable"><code>optional_class</code></em>;<br>
- search { <em class="replaceable"><code>string</code></em>; ... };<br>
- ndots <em class="replaceable"><code>integer</code></em>;<br>
- lwres-tasks <em class="replaceable"><code>integer</code></em>;<br>
- lwres-clients <em class="replaceable"><code>integer</code></em>;<br>
-};<br>
-</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.20.17"></a><h2>OPTIONS</h2>
-<div class="literallayout"><p><br>
-options {<br>
- avoid-v4-udp-ports { <em class="replaceable"><code>port</code></em>; ... };<br>
- avoid-v6-udp-ports { <em class="replaceable"><code>port</code></em>; ... };<br>
- blackhole { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- coresize <em class="replaceable"><code>size</code></em>;<br>
- datasize <em class="replaceable"><code>size</code></em>;<br>
- directory <em class="replaceable"><code>quoted_string</code></em>;<br>
- dnstap { <em class="replaceable"><code>message_type</code></em>; ... };<br>
- dnstap-output ( <code class="literal">file</code> | <code class="literal">unix</code> ) <em class="replaceable"><code>path_name</code></em>;<br>
- dnstap-identity ( <em class="replaceable"><code>string</code></em> | <code class="literal">hostname</code> | <code class="literal">none</code> );<br>
- dnstap-version ( <em class="replaceable"><code>string</code></em> | <code class="literal">none</code> );<br>
- dump-file <em class="replaceable"><code>quoted_string</code></em>;<br>
- files <em class="replaceable"><code>size</code></em>;<br>
- fstrm-set-buffer-hint <em class="replaceable"><code>number</code></em>;<br>
- fstrm-set-flush-timeout <em class="replaceable"><code>number</code></em>;<br>
- fstrm-set-input-queue-size <em class="replaceable"><code>number</code></em>;<br>
- fstrm-set-output-notify-threshold <em class="replaceable"><code>number</code></em>;<br>
- fstrm-set-output-queue-model ( <em class="replaceable"><code>mpsc</code></em> | <em class="replaceable"><code>spsc</code></em> ) ;<br>
- fstrm-set-output-queue-size <em class="replaceable"><code>number</code></em>;<br>
- fstrm-set-reopen-interval <em class="replaceable"><code>number</code></em>;<br>
- heartbeat-interval <em class="replaceable"><code>integer</code></em>;<br>
- host-statistics <em class="replaceable"><code>boolean</code></em>; // not implemented<br>
- host-statistics-max <em class="replaceable"><code>number</code></em>; // not implemented<br>
- hostname ( <em class="replaceable"><code>quoted_string</code></em> | none );<br>
- interface-interval <em class="replaceable"><code>integer</code></em>;<br>
- keep-response-order { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- listen-on [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>] { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- listen-on-v6 [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>] { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- match-mapped-addresses <em class="replaceable"><code>boolean</code></em>;<br>
- memstatistics-file <em class="replaceable"><code>quoted_string</code></em>;<br>
- pid-file ( <em class="replaceable"><code>quoted_string</code></em> | none );<br>
- port <em class="replaceable"><code>integer</code></em>;<br>
- querylog <em class="replaceable"><code>boolean</code></em>;<br>
- recursing-file <em class="replaceable"><code>quoted_string</code></em>;<br>
- reserved-sockets <em class="replaceable"><code>integer</code></em>;<br>
- random-device <em class="replaceable"><code>quoted_string</code></em>;<br>
- recursive-clients <em class="replaceable"><code>integer</code></em>;<br>
- serial-query-rate <em class="replaceable"><code>integer</code></em>;<br>
- server-id ( <em class="replaceable"><code>quoted_string</code></em> | hostname | none );<br>
- stacksize <em class="replaceable"><code>size</code></em>;<br>
- statistics-file <em class="replaceable"><code>quoted_string</code></em>;<br>
- statistics-interval <em class="replaceable"><code>integer</code></em>; // not yet implemented<br>
- tcp-clients <em class="replaceable"><code>integer</code></em>;<br>
- tcp-listen-queue <em class="replaceable"><code>integer</code></em>;<br>
- tkey-dhkey <em class="replaceable"><code>quoted_string</code></em> <em class="replaceable"><code>integer</code></em>;<br>
- tkey-gssapi-credential <em class="replaceable"><code>quoted_string</code></em>;<br>
- tkey-gssapi-keytab <em class="replaceable"><code>quoted_string</code></em>;<br>
- tkey-domain <em class="replaceable"><code>quoted_string</code></em>;<br>
- transfer-message-size <em class="replaceable"><code>integer</code></em>;<br>
- transfers-per-ns <em class="replaceable"><code>integer</code></em>;<br>
- transfers-in <em class="replaceable"><code>integer</code></em>;<br>
- transfers-out <em class="replaceable"><code>integer</code></em>;<br>
- version ( <em class="replaceable"><code>quoted_string</code></em> | none );<br>
- allow-recursion { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- allow-recursion-on { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- sortlist { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- topology { <em class="replaceable"><code>address_match_element</code></em>; ... }; // not implemented<br>
- auth-nxdomain <em class="replaceable"><code>boolean</code></em>; // default changed<br>
- minimal-any <em class="replaceable"><code>boolean</code></em>;<br>
- minimal-responses ( <em class="replaceable"><code>boolean</code></em> | no-auth | no-auth-recursive );<br>
- recursion <em class="replaceable"><code>boolean</code></em>;<br>
- rrset-order {<br>
- [<span class="optional"> class <em class="replaceable"><code>string</code></em> </span>] [<span class="optional"> type <em class="replaceable"><code>string</code></em> </span>]<br>
- [<span class="optional"> name <em class="replaceable"><code>quoted_string</code></em> </span>] <em class="replaceable"><code>string</code></em> <em class="replaceable"><code>string</code></em>; ...<br>
- };<br>
- provide-ixfr <em class="replaceable"><code>boolean</code></em>;<br>
- request-ixfr <em class="replaceable"><code>boolean</code></em>;<br>
- rfc2308-type1 <em class="replaceable"><code>boolean</code></em>; // not yet implemented<br>
- additional-from-auth <em class="replaceable"><code>boolean</code></em>;<br>
- additional-from-cache <em class="replaceable"><code>boolean</code></em>;<br>
- query-source ( ( <em class="replaceable"><code>ipv4_address</code></em> | * ) | [<span class="optional"> address ( <em class="replaceable"><code>ipv4_address</code></em> | * ) </span>] ) [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>];<br>
- query-source-v6 ( ( <em class="replaceable"><code>ipv6_address</code></em> | * ) | [<span class="optional"> address ( <em class="replaceable"><code>ipv6_address</code></em> | * ) </span>] ) [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>];<br>
- use-queryport-pool <em class="replaceable"><code>boolean</code></em>;<br>
- queryport-pool-ports <em class="replaceable"><code>integer</code></em>;<br>
- queryport-pool-updateinterval <em class="replaceable"><code>integer</code></em>;<br>
- cleaning-interval <em class="replaceable"><code>integer</code></em>;<br>
- resolver-query-timeout <em class="replaceable"><code>integer</code></em>;<br>
- min-roots <em class="replaceable"><code>integer</code></em>; // not implemented<br>
- lame-ttl <em class="replaceable"><code>integer</code></em>;<br>
- max-ncache-ttl <em class="replaceable"><code>integer</code></em>;<br>
- max-cache-ttl <em class="replaceable"><code>integer</code></em>;<br>
- transfer-format ( many-answers | one-answer );<br>
- max-cache-size <em class="replaceable"><code>size</code></em>;<br>
- max-acache-size <em class="replaceable"><code>size</code></em>;<br>
- clients-per-query <em class="replaceable"><code>number</code></em>;<br>
- max-clients-per-query <em class="replaceable"><code>number</code></em>;<br>
- check-names ( master | slave | response )<br>
- ( fail | warn | ignore );<br>
- check-mx ( fail | warn | ignore );<br>
- check-integrity <em class="replaceable"><code>boolean</code></em>;<br>
- check-mx-cname ( fail | warn | ignore );<br>
- check-srv-cname ( fail | warn | ignore );<br>
- cache-file <em class="replaceable"><code>quoted_string</code></em>; // test option<br>
- catalog-zones {<br>
-     zone <em class="replaceable"><code>quoted_string</code></em><br>
- [<span class="optional"> default-masters<br>
- [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>]<br>
- [<span class="optional">dscp <em class="replaceable"><code>ip_dscp</code></em></span>]<br>
- { ( <em class="replaceable"><code>masters_list</code></em> | <em class="replaceable"><code>ip_addr</code></em> [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">key <em class="replaceable"><code>key</code></em></span>] ) ; [<span class="optional">...</span>] }</span>]<br>
-     [<span class="optional">in-memory <em class="replaceable"><code>yes_or_no</code></em></span>]<br>
-     [<span class="optional">min-update-interval <em class="replaceable"><code>interval</code></em></span>]<br>
-     ; ... };<br>
- ;<br>
- suppress-initial-notify <em class="replaceable"><code>boolean</code></em>; // not yet implemented<br>
- preferred-glue <em class="replaceable"><code>string</code></em>;<br>
- dual-stack-servers [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>] {<br>
- ( <em class="replaceable"><code>quoted_string</code></em> [<span class="optional">port <em class="replaceable"><code>integer</code></em></span>] |<br>
- <em class="replaceable"><code>ipv4_address</code></em> [<span class="optional">port <em class="replaceable"><code>integer</code></em></span>] |<br>
- <em class="replaceable"><code>ipv6_address</code></em> [<span class="optional">port <em class="replaceable"><code>integer</code></em></span>] ); ...<br>
- };<br>
- edns-udp-size <em class="replaceable"><code>integer</code></em>;<br>
- max-udp-size <em class="replaceable"><code>integer</code></em>;<br>
- root-delegation-only [<span class="optional"> exclude { <em class="replaceable"><code>quoted_string</code></em>; ... } </span>];<br>
- disable-algorithms <em class="replaceable"><code>string</code></em> { <em class="replaceable"><code>string</code></em>; ... };<br>
- disable-ds-digests <em class="replaceable"><code>string</code></em> { <em class="replaceable"><code>string</code></em>; ... };<br>
- dnssec-enable <em class="replaceable"><code>boolean</code></em>;<br>
- dnssec-validation <em class="replaceable"><code>boolean</code></em>;<br>
- dnssec-lookaside ( <em class="replaceable"><code>auto</code></em> | <em class="replaceable"><code>no</code></em> | <em class="replaceable"><code>domain</code></em> trust-anchor <em class="replaceable"><code>domain</code></em> );<br>
- dnssec-must-be-secure <em class="replaceable"><code>string</code></em> <em class="replaceable"><code>boolean</code></em>;<br>
- dnssec-accept-expired <em class="replaceable"><code>boolean</code></em>;<br>
-<br>
- dns64-server <em class="replaceable"><code>string</code></em>;<br>
- dns64-contact <em class="replaceable"><code>string</code></em>;<br>
- dns64 <em class="replaceable"><code>prefix</code></em> {<br>
- clients { <em class="replaceable"><code>acl</code></em>; };<br>
- exclude { <em class="replaceable"><code>acl</code></em>; };<br>
- mapped { <em class="replaceable"><code>acl</code></em>; };<br>
- break-dnssec <em class="replaceable"><code>boolean</code></em>;<br>
- recursive-only <em class="replaceable"><code>boolean</code></em>;<br>
- suffix <em class="replaceable"><code>ipv6_address</code></em>;<br>
- };<br>
-<br>
- empty-server <em class="replaceable"><code>string</code></em>;<br>
- empty-contact <em class="replaceable"><code>string</code></em>;<br>
- empty-zones-enable <em class="replaceable"><code>boolean</code></em>;<br>
- disable-empty-zone <em class="replaceable"><code>string</code></em>;<br>
-<br>
- dialup <em class="replaceable"><code>dialuptype</code></em>;<br>
- ixfr-from-differences <em class="replaceable"><code>ixfrdiff</code></em>;<br>
-<br>
- allow-query { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- allow-query-on { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- allow-query-cache { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- allow-query-cache-on { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- allow-transfer { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- allow-update { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- allow-update-forwarding { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- update-check-ksk <em class="replaceable"><code>boolean</code></em>;<br>
- dnssec-dnskey-kskonly <em class="replaceable"><code>boolean</code></em>;<br>
-<br>
- masterfile-format ( text | raw | map );<br>
- notify <em class="replaceable"><code>notifytype</code></em>;<br>
- notify-source ( <em class="replaceable"><code>ipv4_address</code></em> | * ) [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>];<br>
- notify-source-v6 ( <em class="replaceable"><code>ipv6_address</code></em> | * ) [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>];<br>
- notify-delay <em class="replaceable"><code>seconds</code></em>;<br>
- notify-to-soa <em class="replaceable"><code>boolean</code></em>;<br>
- also-notify [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>] { ( <em class="replaceable"><code>ipv4_address</code></em> | <em class="replaceable"><code>ipv6_address</code></em> )<br>
- [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>]; ...<br>
- [<span class="optional"> key <em class="replaceable"><code>keyname</code></em> </span>] ... };<br>
- allow-notify { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
-<br>
- forward ( first | only );<br>
- forwarders [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>] {<br>
- ( <em class="replaceable"><code>ipv4_address</code></em> | <em class="replaceable"><code>ipv6_address</code></em> ) [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>]; ...<br>
- };<br>
-<br>
- max-journal-size <em class="replaceable"><code>size_no_default</code></em>;<br>
- max-transfer-time-in <em class="replaceable"><code>integer</code></em>;<br>
- max-transfer-time-out <em class="replaceable"><code>integer</code></em>;<br>
- max-transfer-idle-in <em class="replaceable"><code>integer</code></em>;<br>
- max-transfer-idle-out <em class="replaceable"><code>integer</code></em>;<br>
- max-retry-time <em class="replaceable"><code>integer</code></em>;<br>
- min-retry-time <em class="replaceable"><code>integer</code></em>;<br>
- max-refresh-time <em class="replaceable"><code>integer</code></em>;<br>
- min-refresh-time <em class="replaceable"><code>integer</code></em>;<br>
- multi-master <em class="replaceable"><code>boolean</code></em>;<br>
-<br>
- sig-validity-interval <em class="replaceable"><code>integer</code></em>;<br>
- sig-re-signing-interval <em class="replaceable"><code>integer</code></em>;<br>
- sig-signing-nodes <em class="replaceable"><code>integer</code></em>;<br>
- sig-signing-signatures <em class="replaceable"><code>integer</code></em>;<br>
- sig-signing-type <em class="replaceable"><code>integer</code></em>;<br>
-<br>
- transfer-source ( <em class="replaceable"><code>ipv4_address</code></em> | * )<br>
- [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>];<br>
- transfer-source-v6 ( <em class="replaceable"><code>ipv6_address</code></em> | * )<br>
- [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>];<br>
-<br>
- alt-transfer-source ( <em class="replaceable"><code>ipv4_address</code></em> | * )<br>
- [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>];<br>
- alt-transfer-source-v6 ( <em class="replaceable"><code>ipv6_address</code></em> | * )<br>
- [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>];<br>
- use-alt-transfer-source <em class="replaceable"><code>boolean</code></em>;<br>
-<br>
- zone-statistics <em class="replaceable"><code>boolean</code></em>;<br>
- key-directory <em class="replaceable"><code>quoted_string</code></em>;<br>
- managed-keys-directory <em class="replaceable"><code>quoted_string</code></em>;<br>
- auto-dnssec <code class="constant">allow</code>|<code class="constant">maintain</code>|<code class="constant">off</code>;<br>
- try-tcp-refresh <em class="replaceable"><code>boolean</code></em>;<br>
- zero-no-soa-ttl <em class="replaceable"><code>boolean</code></em>;<br>
- zero-no-soa-ttl-cache <em class="replaceable"><code>boolean</code></em>;<br>
- dnssec-secure-to-insecure <em class="replaceable"><code>boolean</code></em>;<br>
- automatic-interface-scan <em class="replaceable"><code>boolean</code></em>;<br>
-<br>
- cookie-algorithm ( <em class="replaceable"><code>aes</code></em> | <em class="replaceable"><code>sha1</code></em> | <em class="replaceable"><code>sha256</code></em> );<br>
- cookie-secret <em class="replaceable"><code>string</code></em>;<br>
- require-server-cookie <em class="replaceable"><code>boolean</code></em>;<br>
- send-cookie <em class="replaceable"><code>boolean</code></em>;<br>
- nocookie-udp-size <em class="replaceable"><code>integer</code></em>;<br>
-<br>
- deny-answer-addresses {<br>
- <em class="replaceable"><code>address_match_list</code></em><br>
- } [<span class="optional"> except-from { <em class="replaceable"><code>namelist</code></em> } </span>];<br>
- deny-answer-aliases {<br>
- <em class="replaceable"><code>namelist</code></em><br>
- } [<span class="optional"> except-from { <em class="replaceable"><code>namelist</code></em> } </span>];<br>
-<br>
- nsec3-test-zone <em class="replaceable"><code>boolean</code></em>;  // testing only<br>
-<br>
- allow-v6-synthesis { <em class="replaceable"><code>address_match_element</code></em>; ... }; // obsolete<br>
- deallocate-on-exit <em class="replaceable"><code>boolean</code></em>; // obsolete<br>
- fake-iquery <em class="replaceable"><code>boolean</code></em>; // obsolete<br>
- fetch-glue <em class="replaceable"><code>boolean</code></em>; // obsolete<br>
- has-old-clients <em class="replaceable"><code>boolean</code></em>; // obsolete<br>
- maintain-ixfr-base <em class="replaceable"><code>boolean</code></em>; // obsolete<br>
- max-ixfr-log-size <em class="replaceable"><code>size</code></em>; // obsolete<br>
- multiple-cnames <em class="replaceable"><code>boolean</code></em>; // obsolete<br>
- named-xfer <em class="replaceable"><code>quoted_string</code></em>; // obsolete<br>
- serial-queries <em class="replaceable"><code>integer</code></em>; // obsolete<br>
- treat-cr-as-space <em class="replaceable"><code>boolean</code></em>; // obsolete<br>
- use-id-pool <em class="replaceable"><code>boolean</code></em>; // obsolete<br>
- use-ixfr <em class="replaceable"><code>boolean</code></em>; // obsolete<br>
-};<br>
-</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.20.18"></a><h2>VIEW</h2>
-<div class="literallayout"><p><br>
-view <em class="replaceable"><code>string</code></em> <em class="replaceable"><code>optional_class</code></em> {<br>
- match-clients { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- match-destinations { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- match-recursive-only <em class="replaceable"><code>boolean</code></em>;<br>
-<br>
- key <em class="replaceable"><code>string</code></em> {<br>
- algorithm <em class="replaceable"><code>string</code></em>;<br>
- secret <em class="replaceable"><code>string</code></em>;<br>
- };<br>
-<br>
- zone <em class="replaceable"><code>string</code></em> <em class="replaceable"><code>optional_class</code></em> {<br>
- ...<br>
- };<br>
-<br>
- server ( <em class="replaceable"><code>ipv4_address[<span class="optional">/prefixlen</span>]</code></em> | <em class="replaceable"><code>ipv6_address[<span class="optional">/prefixlen</span>]</code></em> ) {<br>
- ...<br>
- };<br>
-<br>
- trusted-keys {<br>
- <em class="replaceable"><code>string</code></em> <em class="replaceable"><code>integer</code></em> <em class="replaceable"><code>integer</code></em> <em class="replaceable"><code>integer</code></em> <em class="replaceable"><code>quoted_string</code></em>;<br>
- [<span class="optional">...</span>]<br>
- };<br>
-<br>
- allow-recursion { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- allow-recursion-on { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- sortlist { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- topology { <em class="replaceable"><code>address_match_element</code></em>; ... }; // not implemented<br>
- auth-nxdomain <em class="replaceable"><code>boolean</code></em>; // default changed<br>
- minimal-any <em class="replaceable"><code>boolean</code></em>;<br>
- minimal-responses <em class="replaceable"><code>boolean</code></em>;<br>
- recursion <em class="replaceable"><code>boolean</code></em>;<br>
- rrset-order {<br>
- [<span class="optional"> class <em class="replaceable"><code>string</code></em> </span>] [<span class="optional"> type <em class="replaceable"><code>string</code></em> </span>]<br>
- [<span class="optional"> name <em class="replaceable"><code>quoted_string</code></em> </span>] <em class="replaceable"><code>string</code></em> <em class="replaceable"><code>string</code></em>; ...<br>
- };<br>
- provide-ixfr <em class="replaceable"><code>boolean</code></em>;<br>
- request-ixfr <em class="replaceable"><code>boolean</code></em>;<br>
- rfc2308-type1 <em class="replaceable"><code>boolean</code></em>; // not yet implemented<br>
- additional-from-auth <em class="replaceable"><code>boolean</code></em>;<br>
- additional-from-cache <em class="replaceable"><code>boolean</code></em>;<br>
- query-source ( ( <em class="replaceable"><code>ipv4_address</code></em> | * ) | [<span class="optional"> address ( <em class="replaceable"><code>ipv4_address</code></em> | * ) </span>] ) [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>];<br>
- query-source-v6 ( ( <em class="replaceable"><code>ipv6_address</code></em> | * ) | [<span class="optional"> address ( <em class="replaceable"><code>ipv6_address</code></em> | * ) </span>] ) [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>];<br>
- use-queryport-pool <em class="replaceable"><code>boolean</code></em>;<br>
- queryport-pool-ports <em class="replaceable"><code>integer</code></em>;<br>
- queryport-pool-updateinterval <em class="replaceable"><code>integer</code></em>;<br>
- cleaning-interval <em class="replaceable"><code>integer</code></em>;<br>
- resolver-query-timeout <em class="replaceable"><code>integer</code></em>;<br>
- min-roots <em class="replaceable"><code>integer</code></em>; // not implemented<br>
- lame-ttl <em class="replaceable"><code>integer</code></em>;<br>
- max-ncache-ttl <em class="replaceable"><code>integer</code></em>;<br>
- max-cache-ttl <em class="replaceable"><code>integer</code></em>;<br>
- transfer-format ( many-answers | one-answer );<br>
- max-cache-size <em class="replaceable"><code>size</code></em>;<br>
- max-acache-size <em class="replaceable"><code>size</code></em>;<br>
- clients-per-query <em class="replaceable"><code>number</code></em>;<br>
- max-clients-per-query <em class="replaceable"><code>number</code></em>;<br>
- check-names ( master | slave | response )<br>
- ( fail | warn | ignore );<br>
- check-mx ( fail | warn | ignore );<br>
- check-integrity <em class="replaceable"><code>boolean</code></em>;<br>
- check-mx-cname ( fail | warn | ignore );<br>
- check-srv-cname ( fail | warn | ignore );<br>
- cache-file <em class="replaceable"><code>quoted_string</code></em>; // test option<br>
- suppress-initial-notify <em class="replaceable"><code>boolean</code></em>; // not yet implemented<br>
- preferred-glue <em class="replaceable"><code>string</code></em>;<br>
- dual-stack-servers [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>] {<br>
- ( <em class="replaceable"><code>quoted_string</code></em> [<span class="optional">port <em class="replaceable"><code>integer</code></em></span>] |<br>
- <em class="replaceable"><code>ipv4_address</code></em> [<span class="optional">port <em class="replaceable"><code>integer</code></em></span>] |<br>
- <em class="replaceable"><code>ipv6_address</code></em> [<span class="optional">port <em class="replaceable"><code>integer</code></em></span>] ); ...<br>
- };<br>
- edns-udp-size <em class="replaceable"><code>integer</code></em>;<br>
- max-udp-size <em class="replaceable"><code>integer</code></em>;<br>
- root-delegation-only [<span class="optional"> exclude { <em class="replaceable"><code>quoted_string</code></em>; ... } </span>];<br>
- disable-algorithms <em class="replaceable"><code>string</code></em> { <em class="replaceable"><code>string</code></em>; ... };<br>
- disable-ds-digests <em class="replaceable"><code>string</code></em> { <em class="replaceable"><code>string</code></em>; ... };<br>
- dnssec-enable <em class="replaceable"><code>boolean</code></em>;<br>
- dnssec-validation <em class="replaceable"><code>boolean</code></em>;<br>
- dnssec-lookaside ( <em class="replaceable"><code>auto</code></em> | <em class="replaceable"><code>no</code></em> | <em class="replaceable"><code>domain</code></em> trust-anchor <em class="replaceable"><code>domain</code></em> );<br>
- dnssec-must-be-secure <em class="replaceable"><code>string</code></em> <em class="replaceable"><code>boolean</code></em>;<br>
- dnssec-accept-expired <em class="replaceable"><code>boolean</code></em>;<br>
-<br>
- dns64-server <em class="replaceable"><code>string</code></em>;<br>
- dns64-contact <em class="replaceable"><code>string</code></em>;<br>
- dns64 <em class="replaceable"><code>prefix</code></em> {<br>
- clients { <em class="replaceable"><code>acl</code></em>; };<br>
- exclude { <em class="replaceable"><code>acl</code></em>; };<br>
- mapped { <em class="replaceable"><code>acl</code></em>; };<br>
- break-dnssec <em class="replaceable"><code>boolean</code></em>;<br>
- recursive-only <em class="replaceable"><code>boolean</code></em>;<br>
- suffix <em class="replaceable"><code>ipv6_address</code></em>;<br>
- };<br>
-<br>
- empty-server <em class="replaceable"><code>string</code></em>;<br>
- empty-contact <em class="replaceable"><code>string</code></em>;<br>
- empty-zones-enable <em class="replaceable"><code>boolean</code></em>;<br>
- disable-empty-zone <em class="replaceable"><code>string</code></em>;<br>
-<br>
- dialup <em class="replaceable"><code>dialuptype</code></em>;<br>
- ixfr-from-differences <em class="replaceable"><code>ixfrdiff</code></em>;<br>
-<br>
- allow-query { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- allow-query-on { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- allow-query-cache { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- allow-query-cache-on { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- allow-transfer { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- allow-update { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- allow-update-forwarding { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- update-check-ksk <em class="replaceable"><code>boolean</code></em>;<br>
- dnssec-dnskey-kskonly <em class="replaceable"><code>boolean</code></em>;<br>
-<br>
- masterfile-format ( text | raw | map );<br>
- notify <em class="replaceable"><code>notifytype</code></em>;<br>
- notify-source ( <em class="replaceable"><code>ipv4_address</code></em> | * ) [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>];<br>
- notify-source-v6 ( <em class="replaceable"><code>ipv6_address</code></em> | * ) [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>];<br>
- notify-delay <em class="replaceable"><code>seconds</code></em>;<br>
- notify-to-soa <em class="replaceable"><code>boolean</code></em>;<br>
- also-notify [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>] { ( <em class="replaceable"><code>ipv4_address</code></em> | <em class="replaceable"><code>ipv6_address</code></em> )<br>
- [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>]; ...<br>
- [<span class="optional"> key <em class="replaceable"><code>keyname</code></em> </span>] ... };<br>
- allow-notify { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
-<br>
- forward ( first | only );<br>
- forwarders [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>] {<br>
- ( <em class="replaceable"><code>ipv4_address</code></em> | <em class="replaceable"><code>ipv6_address</code></em> ) [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>]; ...<br>
- };<br>
-<br>
- max-journal-size <em class="replaceable"><code>size_no_default</code></em>;<br>
- max-transfer-time-in <em class="replaceable"><code>integer</code></em>;<br>
- max-transfer-time-out <em class="replaceable"><code>integer</code></em>;<br>
- max-transfer-idle-in <em class="replaceable"><code>integer</code></em>;<br>
- max-transfer-idle-out <em class="replaceable"><code>integer</code></em>;<br>
- max-retry-time <em class="replaceable"><code>integer</code></em>;<br>
- min-retry-time <em class="replaceable"><code>integer</code></em>;<br>
- max-refresh-time <em class="replaceable"><code>integer</code></em>;<br>
- min-refresh-time <em class="replaceable"><code>integer</code></em>;<br>
- multi-master <em class="replaceable"><code>boolean</code></em>;<br>
- sig-validity-interval <em class="replaceable"><code>integer</code></em>;<br>
-<br>
- transfer-source ( <em class="replaceable"><code>ipv4_address</code></em> | * )<br>
- [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>];<br>
- transfer-source-v6 ( <em class="replaceable"><code>ipv6_address</code></em> | * )<br>
- [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>];<br>
-<br>
- alt-transfer-source ( <em class="replaceable"><code>ipv4_address</code></em> | * )<br>
- [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>];<br>
- alt-transfer-source-v6 ( <em class="replaceable"><code>ipv6_address</code></em> | * )<br>
- [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>];<br>
- use-alt-transfer-source <em class="replaceable"><code>boolean</code></em>;<br>
-<br>
- zone-statistics <em class="replaceable"><code>boolean</code></em>;<br>
- try-tcp-refresh <em class="replaceable"><code>boolean</code></em>;<br>
- key-directory <em class="replaceable"><code>quoted_string</code></em>;<br>
- zero-no-soa-ttl <em class="replaceable"><code>boolean</code></em>;<br>
- zero-no-soa-ttl-cache <em class="replaceable"><code>boolean</code></em>;<br>
- dnssec-secure-to-insecure <em class="replaceable"><code>boolean</code></em>;<br>
-<br>
- require-server-cookie <em class="replaceable"><code>boolean</code></em>;<br>
- send-cookie <em class="replaceable"><code>boolean</code></em>;<br>
- nocookie-udp-size <em class="replaceable"><code>integer</code></em>;<br>
-<br>
- allow-v6-synthesis { <em class="replaceable"><code>address_match_element</code></em>; ... }; // obsolete<br>
- fetch-glue <em class="replaceable"><code>boolean</code></em>; // obsolete<br>
- maintain-ixfr-base <em class="replaceable"><code>boolean</code></em>; // obsolete<br>
- max-ixfr-log-size <em class="replaceable"><code>size</code></em>; // obsolete<br>
-};<br>
-</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.20.19"></a><h2>ZONE</h2>
-<div class="literallayout"><p><br>
-zone <em class="replaceable"><code>string</code></em> <em class="replaceable"><code>optional_class</code></em> {<br>
- type ( master | slave | stub | hint | redirect |<br>
- forward | delegation-only );<br>
- file <em class="replaceable"><code>quoted_string</code></em>;<br>
-<br>
- masters [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>] {<br>
- ( <em class="replaceable"><code>masters</code></em> |<br>
- <em class="replaceable"><code>ipv4_address</code></em> [<span class="optional">port <em class="replaceable"><code>integer</code></em></span>] |<br>
- <em class="replaceable"><code>ipv6_address</code></em> [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>] ) [<span class="optional"> key <em class="replaceable"><code>string</code></em> </span>]; ...<br>
- };<br>
-<br>
- database <em class="replaceable"><code>string</code></em>;<br>
- delegation-only <em class="replaceable"><code>boolean</code></em>;<br>
- check-names ( fail | warn | ignore );<br>
- check-mx ( fail | warn | ignore );<br>
- check-integrity <em class="replaceable"><code>boolean</code></em>;<br>
- check-mx-cname ( fail | warn | ignore );<br>
- check-srv-cname ( fail | warn | ignore );<br>
- dialup <em class="replaceable"><code>dialuptype</code></em>;<br>
- ixfr-from-differences <em class="replaceable"><code>boolean</code></em>;<br>
- journal <em class="replaceable"><code>quoted_string</code></em>;<br>
- zero-no-soa-ttl <em class="replaceable"><code>boolean</code></em>;<br>
- dnssec-secure-to-insecure <em class="replaceable"><code>boolean</code></em>;<br>
-<br>
- allow-query { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- allow-query-on { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- allow-transfer { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- allow-update { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- allow-update-forwarding { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
- update-policy <em class="replaceable"><code>local</code></em> | <em class="replaceable"><code> {<br>
- ( grant | deny ) <em class="replaceable"><code>string</code></em><br>
- ( name | subdomain | wildcard | self | selfsub | selfwild |<br>
-   krb5-self | ms-self | krb5-subdomain | ms-subdomain |<br>
-   tcp-self | zonesub | 6to4-self ) <em class="replaceable"><code>string</code></em><br>
- <em class="replaceable"><code>rrtypelist</code></em>;<br>
- [<span class="optional">...</span>]<br>
- }</code></em>;<br>
- update-check-ksk <em class="replaceable"><code>boolean</code></em>;<br>
- dnssec-dnskey-kskonly <em class="replaceable"><code>boolean</code></em>;<br>
-<br>
- masterfile-format ( text | raw | map );<br>
- notify <em class="replaceable"><code>notifytype</code></em>;<br>
- notify-source ( <em class="replaceable"><code>ipv4_address</code></em> | * ) [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>];<br>
- notify-source-v6 ( <em class="replaceable"><code>ipv6_address</code></em> | * ) [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>];<br>
- notify-delay <em class="replaceable"><code>seconds</code></em>;<br>
- notify-to-soa <em class="replaceable"><code>boolean</code></em>;<br>
- also-notify [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>] { ( <em class="replaceable"><code>ipv4_address</code></em> | <em class="replaceable"><code>ipv6_address</code></em> )<br>
- [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>]; ...<br>
- [<span class="optional"> key <em class="replaceable"><code>keyname</code></em> </span>] ... };<br>
- allow-notify { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
-<br>
- forward ( first | only );<br>
- forwarders [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>] {<br>
- ( <em class="replaceable"><code>ipv4_address</code></em> | <em class="replaceable"><code>ipv6_address</code></em> ) [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>]; ...<br>
- };<br>
-<br>
- max-journal-size <em class="replaceable"><code>size_no_default</code></em>;<br>
- max-transfer-time-in <em class="replaceable"><code>integer</code></em>;<br>
- max-transfer-time-out <em class="replaceable"><code>integer</code></em>;<br>
- max-transfer-idle-in <em class="replaceable"><code>integer</code></em>;<br>
- max-transfer-idle-out <em class="replaceable"><code>integer</code></em>;<br>
- max-retry-time <em class="replaceable"><code>integer</code></em>;<br>
- min-retry-time <em class="replaceable"><code>integer</code></em>;<br>
- max-refresh-time <em class="replaceable"><code>integer</code></em>;<br>
- min-refresh-time <em class="replaceable"><code>integer</code></em>;<br>
- multi-master <em class="replaceable"><code>boolean</code></em>;<br>
- request-ixfr <em class="replaceable"><code>boolean</code></em>;<br>
- sig-validity-interval <em class="replaceable"><code>integer</code></em>;<br>
-<br>
- transfer-source ( <em class="replaceable"><code>ipv4_address</code></em> | * )<br>
- [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>];<br>
- transfer-source-v6 ( <em class="replaceable"><code>ipv6_address</code></em> | * )<br>
- [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>];<br>
-<br>
- alt-transfer-source ( <em class="replaceable"><code>ipv4_address</code></em> | * )<br>
- [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>];<br>
- alt-transfer-source-v6 ( <em class="replaceable"><code>ipv6_address</code></em> | * )<br>
- [<span class="optional"> port ( <em class="replaceable"><code>integer</code></em> | * ) </span>];<br>
- use-alt-transfer-source <em class="replaceable"><code>boolean</code></em>;<br>
-<br>
- zone-statistics <em class="replaceable"><code>boolean</code></em>;<br>
- try-tcp-refresh <em class="replaceable"><code>boolean</code></em>;<br>
- key-directory <em class="replaceable"><code>quoted_string</code></em>;<br>
-<br>
- nsec3-test-zone <em class="replaceable"><code>boolean</code></em>;  // testing only<br>
-<br>
- ixfr-base <em class="replaceable"><code>quoted_string</code></em>; // obsolete<br>
- ixfr-tmp-file <em class="replaceable"><code>quoted_string</code></em>; // obsolete<br>
- maintain-ixfr-base <em class="replaceable"><code>boolean</code></em>; // obsolete<br>
- max-ixfr-log-size <em class="replaceable"><code>size</code></em>; // obsolete<br>
- pubkey <em class="replaceable"><code>integer</code></em> <em class="replaceable"><code>integer</code></em> <em class="replaceable"><code>integer</code></em> <em class="replaceable"><code>quoted_string</code></em>; // obsolete<br>
-};<br>
-</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.20.20"></a><h2>FILES</h2>
-<p><code class="filename">/etc/named.conf</code>
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.20.21"></a><h2>SEE ALSO</h2>
-<p><span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">named-checkconf</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">rndc</span>(8)</span>,
- <em class="citetitle">BIND 9 Administrator Reference Manual</em>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.named.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.named-checkconf.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">named</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">named-checkconf</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.named.html b/doc/arm/man.named.html
deleted file mode 100644
index e95b37ce..00000000
--- a/doc/arm/man.named.html
+++ /dev/null
@@ -1,381 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>named</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.lwresd.html" title="lwresd">
-<link rel="next" href="man.named.conf.html" title="named.conf">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">named</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.lwresd.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.named.conf.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.named"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">named</span> &#8212; Internet domain name server</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">named</code> [<code class="option">-4</code>] [<code class="option">-6</code>] [<code class="option">-c <em class="replaceable"><code>config-file</code></em></code>] [<code class="option">-d <em class="replaceable"><code>debug-level</code></em></code>] [<code class="option">-D <em class="replaceable"><code>string</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine-name</code></em></code>] [<code class="option">-f</code>] [<code class="option">-g</code>] [<code class="option">-L <em class="replaceable"><code>logfile</code></em></code>] [<code class="option">-M <em class="replaceable"><code>option</code></em></code>] [<code class="option">-m <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-n <em class="replaceable"><code>#cpus</code></em></code>] [<code class="option">-p <em class="replaceable"><code>port</code></em></code>] [<code class="option">-s</code>] [<code class="option">-S <em class="replaceable"><code>#max-socks</code></em></code>] [<code class="option">-t <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-U <em class="replaceable"><code>#listeners</code></em></code>] [<code class="option">-u <em class="replaceable"><code>user</code></em></code>] [<code class="option">-v</code>] [<code class="option">-V</code>] [<code class="option">-X <em class="replaceable"><code>lock-file</code></em></code>] [<code class="option">-x <em class="replaceable"><code>cache-file</code></em></code>]</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.19.7"></a><h2>DESCRIPTION</h2>
-<p><span class="command"><strong>named</strong></span>
- is a Domain Name System (DNS) server,
- part of the BIND 9 distribution from ISC. For more
- information on the DNS, see RFCs 1033, 1034, and 1035.
- </p>
-<p>
- When invoked without arguments, <span class="command"><strong>named</strong></span>
- will
- read the default configuration file
- <code class="filename">/etc/named.conf</code>, read any initial
- data, and listen for queries.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.19.8"></a><h2>OPTIONS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-4</span></dt>
-<dd><p>
- Use IPv4 only even if the host machine is capable of IPv6.
- <code class="option">-4</code> and <code class="option">-6</code> are mutually
- exclusive.
- </p></dd>
-<dt><span class="term">-6</span></dt>
-<dd><p>
- Use IPv6 only even if the host machine is capable of IPv4.
- <code class="option">-4</code> and <code class="option">-6</code> are mutually
- exclusive.
- </p></dd>
-<dt><span class="term">-c <em class="replaceable"><code>config-file</code></em></span></dt>
-<dd><p>
- Use <em class="replaceable"><code>config-file</code></em> as the
- configuration file instead of the default,
- <code class="filename">/etc/named.conf</code>. To
- ensure that reloading the configuration file continues
- to work after the server has changed its working
- directory due to to a possible
- <code class="option">directory</code> option in the configuration
- file, <em class="replaceable"><code>config-file</code></em> should be
- an absolute pathname.
- </p></dd>
-<dt><span class="term">-d <em class="replaceable"><code>debug-level</code></em></span></dt>
-<dd><p>
- Set the daemon's debug level to <em class="replaceable"><code>debug-level</code></em>.
- Debugging traces from <span class="command"><strong>named</strong></span> become
- more verbose as the debug level increases.
- </p></dd>
-<dt><span class="term">-D <em class="replaceable"><code>string</code></em></span></dt>
-<dd><p>
- Specifies a string that is used to identify a instance of
- <span class="command"><strong>named</strong></span> in a process listing. The contents
- of <em class="replaceable"><code>string</code></em> are
- not examined.
- </p></dd>
-<dt><span class="term">-E <em class="replaceable"><code>engine-name</code></em></span></dt>
-<dd>
-<p>
- When applicable, specifies the hardware to use for
- cryptographic operations, such as a secure key store used
- for signing.
- </p>
-<p>
- When BIND is built with OpenSSL PKCS#11 support, this defaults
- to the string "pkcs11", which identifies an OpenSSL engine
- that can drive a cryptographic accelerator or hardware service
- module. When BIND is built with native PKCS#11 cryptography
- (--enable-native-pkcs11), it defaults to the path of the PKCS#11
- provider library specified via "--with-pkcs11".
- </p>
-</dd>
-<dt><span class="term">-f</span></dt>
-<dd><p>
- Run the server in the foreground (i.e. do not daemonize).
- </p></dd>
-<dt><span class="term">-g</span></dt>
-<dd><p>
- Run the server in the foreground and force all logging
- to <code class="filename">stderr</code>.
- </p></dd>
-<dt><span class="term">-L <em class="replaceable"><code>logfile</code></em></span></dt>
-<dd><p>
- Log to the file <code class="option">logfile</code> by default
- instead of the system log.
- </p></dd>
-<dt><span class="term">-M <em class="replaceable"><code>option</code></em></span></dt>
-<dd><p>
- Sets the default memory context options. Currently
- the only supported option is
- <em class="replaceable"><code>external</code></em>,
- which causes the internal memory manager to be bypassed
- in favor of system-provided memory allocation functions.
- </p></dd>
-<dt><span class="term">-m <em class="replaceable"><code>flag</code></em></span></dt>
-<dd><p>
- Turn on memory usage debugging flags. Possible flags are
- <em class="replaceable"><code>usage</code></em>,
- <em class="replaceable"><code>trace</code></em>,
- <em class="replaceable"><code>record</code></em>,
- <em class="replaceable"><code>size</code></em>, and
- <em class="replaceable"><code>mctx</code></em>.
- These correspond to the ISC_MEM_DEBUGXXXX flags described in
- <code class="filename">&lt;isc/mem.h&gt;</code>.
- </p></dd>
-<dt><span class="term">-n <em class="replaceable"><code>#cpus</code></em></span></dt>
-<dd><p>
- Create <em class="replaceable"><code>#cpus</code></em> worker threads
- to take advantage of multiple CPUs. If not specified,
- <span class="command"><strong>named</strong></span> will try to determine the
- number of CPUs present and create one thread per CPU.
- If it is unable to determine the number of CPUs, a
- single worker thread will be created.
- </p></dd>
-<dt><span class="term">-p <em class="replaceable"><code>port</code></em></span></dt>
-<dd><p>
- Listen for queries on port <em class="replaceable"><code>port</code></em>. If not
- specified, the default is port 53.
- </p></dd>
-<dt><span class="term">-s</span></dt>
-<dd>
-<p>
- Write memory usage statistics to <code class="filename">stdout</code> on exit.
- </p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- This option is mainly of interest to BIND 9 developers
- and may be removed or changed in a future release.
- </p>
-</div>
-</dd>
-<dt><span class="term">-S <em class="replaceable"><code>#max-socks</code></em></span></dt>
-<dd>
-<p>
- Allow <span class="command"><strong>named</strong></span> to use up to
- <em class="replaceable"><code>#max-socks</code></em> sockets.
- The default value is 4096 on systems built with default
- configuration options, and 21000 on systems built with
- "configure --with-tuning=large".
- </p>
-<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Warning</h3>
-<p>
- This option should be unnecessary for the vast majority
- of users.
- The use of this option could even be harmful because the
- specified value may exceed the limitation of the
- underlying system API.
- It is therefore set only when the default configuration
- causes exhaustion of file descriptors and the
- operational environment is known to support the
- specified number of sockets.
- Note also that the actual maximum number is normally a little
- fewer than the specified value because
- <span class="command"><strong>named</strong></span> reserves some file descriptors
- for its internal use.
- </p>
-</div>
-</dd>
-<dt><span class="term">-t <em class="replaceable"><code>directory</code></em></span></dt>
-<dd>
-<p>Chroot
- to <em class="replaceable"><code>directory</code></em> after
- processing the command line arguments, but before
- reading the configuration file.
- </p>
-<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Warning</h3>
-<p>
- This option should be used in conjunction with the
- <code class="option">-u</code> option, as chrooting a process
- running as root doesn't enhance security on most
- systems; the way <code class="function">chroot(2)</code> is
- defined allows a process with root privileges to
- escape a chroot jail.
- </p>
-</div>
-</dd>
-<dt><span class="term">-U <em class="replaceable"><code>#listeners</code></em></span></dt>
-<dd><p>
- Use <em class="replaceable"><code>#listeners</code></em>
- worker threads to listen for incoming UDP packets on each
- address. If not specified, <span class="command"><strong>named</strong></span> will
- calculate a default value based on the number of detected
- CPUs: 1 for 1 CPU, and the number of detected CPUs
- minus one for machines with more than 1 CPU. This cannot
- be increased to a value higher than the number of CPUs.
- If <code class="option">-n</code> has been set to a higher value than
- the number of detected CPUs, then <code class="option">-U</code> may
- be increased as high as that value, but no higher.
- On Windows, the number of UDP listeners is hardwired to 1
- and this option has no effect.
- </p></dd>
-<dt><span class="term">-u <em class="replaceable"><code>user</code></em></span></dt>
-<dd>
-<p>Setuid
- to <em class="replaceable"><code>user</code></em> after completing
- privileged operations, such as creating sockets that
- listen on privileged ports.
- </p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>
- On Linux, <span class="command"><strong>named</strong></span> uses the kernel's
- capability mechanism to drop all root privileges
- except the ability to <code class="function">bind(2)</code> to
- a
- privileged port and set process resource limits.
- Unfortunately, this means that the <code class="option">-u</code>
- option only works when <span class="command"><strong>named</strong></span> is
- run
- on kernel 2.2.18 or later, or kernel 2.3.99-pre3 or
- later, since previous kernels did not allow privileges
- to be retained after <code class="function">setuid(2)</code>.
- </p>
-</div>
-</dd>
-<dt><span class="term">-v</span></dt>
-<dd><p>
- Report the version number and exit.
- </p></dd>
-<dt><span class="term">-V</span></dt>
-<dd><p>
- Report the version number and build options, and exit.
- </p></dd>
-<dt><span class="term">-X <em class="replaceable"><code>lock-file</code></em></span></dt>
-<dd><p>
- Acquire a lock on the specified file at runtime; this
- helps to prevent duplicate <span class="command"><strong>named</strong></span> instances
- from running simultaneously.
- Use of this option overrides the <span class="command"><strong>lock-file</strong></span>
- option in <code class="filename">named.conf</code>.
- If set to <code class="literal">none</code>, the lock file check
- is disabled.
- </p></dd>
-<dt><span class="term">-x <em class="replaceable"><code>cache-file</code></em></span></dt>
-<dd>
-<p>
- Load data from <em class="replaceable"><code>cache-file</code></em> into the
- cache of the default view.
- </p>
-<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Warning</h3>
-<p>
- This option must not be used. It is only of interest
- to BIND 9 developers and may be removed or changed in a
- future release.
- </p>
-</div>
-</dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.19.9"></a><h2>SIGNALS</h2>
-<p>
- In routine operation, signals should not be used to control
- the nameserver; <span class="command"><strong>rndc</strong></span> should be used
- instead.
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">SIGHUP</span></dt>
-<dd><p>
- Force a reload of the server.
- </p></dd>
-<dt><span class="term">SIGINT, SIGTERM</span></dt>
-<dd><p>
- Shut down the server.
- </p></dd>
-</dl></div>
-<p>
- The result of sending any other signals to the server is undefined.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.19.10"></a><h2>CONFIGURATION</h2>
-<p>
- The <span class="command"><strong>named</strong></span> configuration file is too complex
- to describe in detail here. A complete description is provided
- in the
- <em class="citetitle">BIND 9 Administrator Reference Manual</em>.
- </p>
-<p>
- <span class="command"><strong>named</strong></span> inherits the <code class="function">umask</code>
- (file creation mode mask) from the parent process. If files
- created by <span class="command"><strong>named</strong></span>, such as journal files,
- need to have custom permissions, the <code class="function">umask</code>
- should be set explicitly in the script used to start the
- <span class="command"><strong>named</strong></span> process.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.19.11"></a><h2>FILES</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><code class="filename">/etc/named.conf</code></span></dt>
-<dd><p>
- The default configuration file.
- </p></dd>
-<dt><span class="term"><code class="filename">/var/run/named/named.pid</code></span></dt>
-<dd><p>
- The default process-id file.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.19.12"></a><h2>SEE ALSO</h2>
-<p><em class="citetitle">RFC 1033</em>,
- <em class="citetitle">RFC 1034</em>,
- <em class="citetitle">RFC 1035</em>,
- <span class="citerefentry"><span class="refentrytitle">named-checkconf</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">named-checkzone</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">rndc</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">lwresd</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">named.conf</span>(5)</span>,
- <em class="citetitle">BIND 9 Administrator Reference Manual</em>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.lwresd.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.named.conf.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">lwresd</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <code class="filename">named.conf</code>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.nsec3hash.html b/doc/arm/man.nsec3hash.html
deleted file mode 100644
index 2e80e3c9..00000000
--- a/doc/arm/man.nsec3hash.html
+++ /dev/null
@@ -1,104 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>nsec3hash</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.isc-hmac-fixup.html" title="isc-hmac-fixup">
-<link rel="next" href="man.pkcs11-destroy.html" title="pkcs11-destroy">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">nsec3hash</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.isc-hmac-fixup.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.pkcs11-destroy.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.nsec3hash"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">nsec3hash</span> &#8212; generate NSEC3 hash</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">nsec3hash</code> {<em class="replaceable"><code>salt</code></em>} {<em class="replaceable"><code>algorithm</code></em>} {<em class="replaceable"><code>iterations</code></em>} {<em class="replaceable"><code>domain</code></em>}</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.35.7"></a><h2>DESCRIPTION</h2>
-<p>
- <span class="command"><strong>nsec3hash</strong></span> generates an NSEC3 hash based on
- a set of NSEC3 parameters. This can be used to check the validity
- of NSEC3 records in a signed zone.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.35.8"></a><h2>ARGUMENTS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">salt</span></dt>
-<dd><p>
- The salt provided to the hash algorithm.
- </p></dd>
-<dt><span class="term">algorithm</span></dt>
-<dd><p>
- A number indicating the hash algorithm. Currently the
- only supported hash algorithm for NSEC3 is SHA-1, which is
- indicated by the number 1; consequently "1" is the only
- useful value for this argument.
- </p></dd>
-<dt><span class="term">iterations</span></dt>
-<dd><p>
- The number of additional times the hash should be performed.
- </p></dd>
-<dt><span class="term">domain</span></dt>
-<dd><p>
- The domain name to be hashed.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.35.9"></a><h2>SEE ALSO</h2>
-<p>
- <em class="citetitle">BIND 9 Administrator Reference Manual</em>,
- <em class="citetitle">RFC 5155</em>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.isc-hmac-fixup.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.pkcs11-destroy.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">isc-hmac-fixup</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">pkcs11-destroy</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.nslookup.html b/doc/arm/man.nslookup.html
deleted file mode 100644
index 97155db4..00000000
--- a/doc/arm/man.nslookup.html
+++ /dev/null
@@ -1,351 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>nslookup</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.delv.html" title="delv">
-<link rel="next" href="man.dnssec-checkds.html" title="dnssec-checkds">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center">nslookup</th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.delv.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.dnssec-checkds.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.nslookup"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p>nslookup &#8212; query Internet name servers interactively</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">nslookup</code> [<code class="option">-option</code>] [name | -] [server]</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.6.7"></a><h2>DESCRIPTION</h2>
-<p><span class="command"><strong>Nslookup</strong></span>
- is a program to query Internet domain name servers. <span class="command"><strong>Nslookup</strong></span>
- has two modes: interactive and non-interactive. Interactive mode allows
- the user to query name servers for information about various hosts and
- domains or to print a list of hosts in a domain. Non-interactive mode
- is
- used to print just the name and requested information for a host or
- domain.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.6.8"></a><h2>ARGUMENTS</h2>
-<p>
- Interactive mode is entered in the following cases:
- </p>
-<div class="orderedlist"><ol class="orderedlist" type="a">
-<li class="listitem"><p>
- when no arguments are given (the default name server will be used)
- </p></li>
-<li class="listitem"><p>
- when the first argument is a hyphen (-) and the second argument is
- the host name or Internet address of a name server.
- </p></li>
-</ol></div>
-<p>
- </p>
-<p>
- Non-interactive mode is used when the name or Internet address of the
- host to be looked up is given as the first argument. The optional second
- argument specifies the host name or address of a name server.
- </p>
-<p>
- Options can also be specified on the command line if they precede the
- arguments and are prefixed with a hyphen. For example, to
- change the default query type to host information, and the initial
- timeout to 10 seconds, type:
-
- </p>
-<pre class="programlisting">
-nslookup -query=hinfo -timeout=10
-</pre>
-<p>
-
- </p>
-<p>
- The <code class="option">-version</code> option causes
- <span class="command"><strong>nslookup</strong></span> to print the version
- number and immediately exits.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.6.9"></a><h2>INTERACTIVE COMMANDS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><code class="constant">host</code> [<span class="optional">server</span>]</span></dt>
-<dd>
-<p>
- Look up information for host using the current default server or
- using server, if specified. If host is an Internet address and
- the query type is A or PTR, the name of the host is returned.
- If host is a name and does not have a trailing period, the
- search list is used to qualify the name.
- </p>
-<p>
- To look up a host not in the current domain, append a period to
- the name.
- </p>
-</dd>
-<dt><span class="term"><code class="constant">server</code> <em class="replaceable"><code>domain</code></em></span></dt>
-<dd><p></p></dd>
-<dt><span class="term"><code class="constant">lserver</code> <em class="replaceable"><code>domain</code></em></span></dt>
-<dd><p>
- Change the default server to <em class="replaceable"><code>domain</code></em>; <code class="constant">lserver</code> uses the initial
- server to look up information about <em class="replaceable"><code>domain</code></em>, while <code class="constant">server</code> uses
- the current default server. If an authoritative answer can't be
- found, the names of servers that might have the answer are
- returned.
- </p></dd>
-<dt><span class="term"><code class="constant">root</code></span></dt>
-<dd><p>
- not implemented
- </p></dd>
-<dt><span class="term"><code class="constant">finger</code></span></dt>
-<dd><p>
- not implemented
- </p></dd>
-<dt><span class="term"><code class="constant">ls</code></span></dt>
-<dd><p>
- not implemented
- </p></dd>
-<dt><span class="term"><code class="constant">view</code></span></dt>
-<dd><p>
- not implemented
- </p></dd>
-<dt><span class="term"><code class="constant">help</code></span></dt>
-<dd><p>
- not implemented
- </p></dd>
-<dt><span class="term"><code class="constant">?</code></span></dt>
-<dd><p>
- not implemented
- </p></dd>
-<dt><span class="term"><code class="constant">exit</code></span></dt>
-<dd><p>
- Exits the program.
- </p></dd>
-<dt><span class="term"><code class="constant">set</code>
- <em class="replaceable"><code>keyword[<span class="optional">=value</span>]</code></em></span></dt>
-<dd>
-<p>
- This command is used to change state information that affects
- the lookups. Valid keywords are:
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><code class="constant">all</code></span></dt>
-<dd><p>
- Prints the current values of the frequently used
- options to <span class="command"><strong>set</strong></span>.
- Information about the current default
- server and host is also printed.
- </p></dd>
-<dt><span class="term"><code class="constant">class=</code><em class="replaceable"><code>value</code></em></span></dt>
-<dd>
-<p>
- Change the query class to one of:
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><code class="constant">IN</code></span></dt>
-<dd><p>
- the Internet class
- </p></dd>
-<dt><span class="term"><code class="constant">CH</code></span></dt>
-<dd><p>
- the Chaos class
- </p></dd>
-<dt><span class="term"><code class="constant">HS</code></span></dt>
-<dd><p>
- the Hesiod class
- </p></dd>
-<dt><span class="term"><code class="constant">ANY</code></span></dt>
-<dd><p>
- wildcard
- </p></dd>
-</dl></div>
-<p>
- The class specifies the protocol group of the information.
-
- </p>
-<p>
- (Default = IN; abbreviation = cl)
- </p>
-</dd>
-<dt><span class="term"><code class="constant">
- <em class="replaceable"><code>[<span class="optional">no</span>]</code></em>debug</code></span></dt>
-<dd>
-<p>
- Turn on or off the display of the full response packet and
- any intermediate response packets when searching.
- </p>
-<p>
- (Default = nodebug; abbreviation = [<span class="optional">no</span>]deb)
- </p>
-</dd>
-<dt><span class="term"><code class="constant">
- <em class="replaceable"><code>[<span class="optional">no</span>]</code></em>d2</code></span></dt>
-<dd>
-<p>
- Turn debugging mode on or off. This displays more about
- what nslookup is doing.
- </p>
-<p>
- (Default = nod2)
- </p>
-</dd>
-<dt><span class="term"><code class="constant">domain=</code><em class="replaceable"><code>name</code></em></span></dt>
-<dd><p>
- Sets the search list to <em class="replaceable"><code>name</code></em>.
- </p></dd>
-<dt><span class="term"><code class="constant">
- <em class="replaceable"><code>[<span class="optional">no</span>]</code></em>search</code></span></dt>
-<dd>
-<p>
- If the lookup request contains at least one period but
- doesn't end with a trailing period, append the domain
- names in the domain search list to the request until an
- answer is received.
- </p>
-<p>
- (Default = search)
- </p>
-</dd>
-<dt><span class="term"><code class="constant">port=</code><em class="replaceable"><code>value</code></em></span></dt>
-<dd>
-<p>
- Change the default TCP/UDP name server port to <em class="replaceable"><code>value</code></em>.
- </p>
-<p>
- (Default = 53; abbreviation = po)
- </p>
-</dd>
-<dt><span class="term"><code class="constant">querytype=</code><em class="replaceable"><code>value</code></em></span></dt>
-<dd><p></p></dd>
-<dt><span class="term"><code class="constant">type=</code><em class="replaceable"><code>value</code></em></span></dt>
-<dd>
-<p>
- Change the type of the information query.
- </p>
-<p>
- (Default = A; abbreviations = q, ty)
- </p>
-</dd>
-<dt><span class="term"><code class="constant">
- <em class="replaceable"><code>[<span class="optional">no</span>]</code></em>recurse</code></span></dt>
-<dd>
-<p>
- Tell the name server to query other servers if it does not
- have the
- information.
- </p>
-<p>
- (Default = recurse; abbreviation = [no]rec)
- </p>
-</dd>
-<dt><span class="term"><code class="constant">ndots=</code><em class="replaceable"><code>number</code></em></span></dt>
-<dd><p>
- Set the number of dots (label separators) in a domain
- that will disable searching. Absolute names always
- stop searching.
- </p></dd>
-<dt><span class="term"><code class="constant">retry=</code><em class="replaceable"><code>number</code></em></span></dt>
-<dd><p>
- Set the number of retries to number.
- </p></dd>
-<dt><span class="term"><code class="constant">timeout=</code><em class="replaceable"><code>number</code></em></span></dt>
-<dd><p>
- Change the initial timeout interval for waiting for a
- reply to number seconds.
- </p></dd>
-<dt><span class="term"><code class="constant">
- <em class="replaceable"><code>[<span class="optional">no</span>]</code></em>vc</code></span></dt>
-<dd>
-<p>
- Always use a virtual circuit when sending requests to the
- server.
- </p>
-<p>
- (Default = novc)
- </p>
-</dd>
-<dt><span class="term"><code class="constant">
- <em class="replaceable"><code>[<span class="optional">no</span>]</code></em>fail</code></span></dt>
-<dd>
-<p>
- Try the next nameserver if a nameserver responds with
- SERVFAIL or a referral (nofail) or terminate query
- (fail) on such a response.
- </p>
-<p>
- (Default = nofail)
- </p>
-</dd>
-</dl></div>
-<p>
- </p>
-</dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.6.10"></a><h2>RETURN VALUES</h2>
-<p>
- <span class="command"><strong>nslookup</strong></span> returns with an exit status of 1
- if any query failed, and 0 otherwise.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.6.11"></a><h2>FILES</h2>
-<p><code class="filename">/etc/resolv.conf</code>
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.6.12"></a><h2>SEE ALSO</h2>
-<p><span class="citerefentry"><span class="refentrytitle">dig</span>(1)</span>,
- <span class="citerefentry"><span class="refentrytitle">host</span>(1)</span>,
- <span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.delv.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.dnssec-checkds.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">delv </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">dnssec-checkds</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.nsupdate.html b/doc/arm/man.nsupdate.html
deleted file mode 100644
index 9d937789..00000000
--- a/doc/arm/man.nsupdate.html
+++ /dev/null
@@ -1,673 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>nsupdate</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.named-rrchecker.html" title="named-rrchecker">
-<link rel="next" href="man.rndc.html" title="rndc">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">nsupdate</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.named-rrchecker.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.rndc.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.nsupdate"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">nsupdate</span> &#8212; Dynamic DNS update utility</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">nsupdate</code> [<code class="option">-d</code>] [<code class="option">-D</code>] [<code class="option">-L <em class="replaceable"><code>level</code></em></code>] [[<code class="option">-g</code>] | [<code class="option">-o</code>] | [<code class="option">-l</code>] | [<code class="option">-y <em class="replaceable"><code>[<span class="optional">hmac:</span>]keyname:secret</code></em></code>] | [<code class="option">-k <em class="replaceable"><code>keyfile</code></em></code>]] [<code class="option">-t <em class="replaceable"><code>timeout</code></em></code>] [<code class="option">-u <em class="replaceable"><code>udptimeout</code></em></code>] [<code class="option">-r <em class="replaceable"><code>udpretries</code></em></code>] [<code class="option">-R <em class="replaceable"><code>randomdev</code></em></code>] [<code class="option">-v</code>] [<code class="option">-T</code>] [<code class="option">-P</code>] [<code class="option">-V</code>] [filename]</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.26.7"></a><h2>DESCRIPTION</h2>
-<p><span class="command"><strong>nsupdate</strong></span>
- is used to submit Dynamic DNS Update requests as defined in RFC 2136
- to a name server.
- This allows resource records to be added or removed from a zone
- without manually editing the zone file.
- A single update request can contain requests to add or remove more than
- one
- resource record.
- </p>
-<p>
- Zones that are under dynamic control via
- <span class="command"><strong>nsupdate</strong></span>
- or a DHCP server should not be edited by hand.
- Manual edits could
- conflict with dynamic updates and cause data to be lost.
- </p>
-<p>
- The resource records that are dynamically added or removed with
- <span class="command"><strong>nsupdate</strong></span>
- have to be in the same zone.
- Requests are sent to the zone's master server.
- This is identified by the MNAME field of the zone's SOA record.
- </p>
-<p>
- Transaction signatures can be used to authenticate the Dynamic
- DNS updates. These use the TSIG resource record type described
- in RFC 2845 or the SIG(0) record described in RFC 2535 and
- RFC 2931 or GSS-TSIG as described in RFC 3645.
- </p>
-<p>
- TSIG relies on
- a shared secret that should only be known to
- <span class="command"><strong>nsupdate</strong></span> and the name server.
- For instance, suitable <span class="type">key</span> and
- <span class="type">server</span> statements would be added to
- <code class="filename">/etc/named.conf</code> so that the name server
- can associate the appropriate secret key and algorithm with
- the IP address of the client application that will be using
- TSIG authentication. You can use <span class="command"><strong>ddns-confgen</strong></span>
- to generate suitable configuration fragments.
- <span class="command"><strong>nsupdate</strong></span>
- uses the <code class="option">-y</code> or <code class="option">-k</code> options
- to provide the TSIG shared secret. These options are mutually exclusive.
- </p>
-<p>
- SIG(0) uses public key cryptography.
- To use a SIG(0) key, the public key must be stored in a KEY
- record in a zone served by the name server.
- </p>
-<p>
- GSS-TSIG uses Kerberos credentials. Standard GSS-TSIG mode
- is switched on with the <code class="option">-g</code> flag. A
- non-standards-compliant variant of GSS-TSIG used by Windows
- 2000 can be switched on with the <code class="option">-o</code> flag.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.26.8"></a><h2>OPTIONS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-d</span></dt>
-<dd><p>
- Debug mode. This provides tracing information about the
- update requests that are made and the replies received
- from the name server.
- </p></dd>
-<dt><span class="term">-D</span></dt>
-<dd><p>
- Extra debug mode.
- </p></dd>
-<dt><span class="term">-k <em class="replaceable"><code>keyfile</code></em></span></dt>
-<dd><p>
- The file containing the TSIG authentication key.
- Keyfiles may be in two formats: a single file containing
- a <code class="filename">named.conf</code>-format <span class="command"><strong>key</strong></span>
- statement, which may be generated automatically by
- <span class="command"><strong>ddns-confgen</strong></span>, or a pair of files whose names are
- of the format <code class="filename">K{name}.+157.+{random}.key</code> and
- <code class="filename">K{name}.+157.+{random}.private</code>, which can be
- generated by <span class="command"><strong>dnssec-keygen</strong></span>.
- The <code class="option">-k</code> may also be used to specify a SIG(0) key used
- to authenticate Dynamic DNS update requests. In this case, the key
- specified is not an HMAC-MD5 key.
- </p></dd>
-<dt><span class="term">-l</span></dt>
-<dd><p>
- Local-host only mode. This sets the server address to
- localhost (disabling the <span class="command"><strong>server</strong></span> so that the server
- address cannot be overridden). Connections to the local server will
- use a TSIG key found in <code class="filename">/var/run/named/session.key</code>,
- which is automatically generated by <span class="command"><strong>named</strong></span> if any
- local master zone has set <span class="command"><strong>update-policy</strong></span> to
- <span class="command"><strong>local</strong></span>. The location of this key file can be
- overridden with the <code class="option">-k</code> option.
- </p></dd>
-<dt><span class="term">-L <em class="replaceable"><code>level</code></em></span></dt>
-<dd><p>
- Set the logging debug level. If zero, logging is disabled.
- </p></dd>
-<dt><span class="term">-p <em class="replaceable"><code>port</code></em></span></dt>
-<dd><p>
- Set the port to use for connections to a name server. The
- default is 53.
- </p></dd>
-<dt><span class="term">-P</span></dt>
-<dd><p>
- Print the list of private BIND-specific resource record
- types whose format is understood
- by <span class="command"><strong>nsupdate</strong></span>. See also
- the <code class="option">-T</code> option.
- </p></dd>
-<dt><span class="term">-r <em class="replaceable"><code>udpretries</code></em></span></dt>
-<dd><p>
- The number of UDP retries. The default is 3. If zero, only
- one update request will be made.
- </p></dd>
-<dt><span class="term">-R <em class="replaceable"><code>randomdev</code></em></span></dt>
-<dd><p>
- Where to obtain randomness. If the operating system
- does not provide a <code class="filename">/dev/random</code> or
- equivalent device, the default source of randomness is keyboard
- input. <code class="filename">randomdev</code> specifies the name of
- a character device or file containing random data to be used
- instead of the default. The special value
- <code class="filename">keyboard</code> indicates that keyboard input
- should be used. This option may be specified multiple times.
- </p></dd>
-<dt><span class="term">-t <em class="replaceable"><code>timeout</code></em></span></dt>
-<dd><p>
- The maximum time an update request can take before it is
- aborted. The default is 300 seconds. Zero can be used to
- disable the timeout.
- </p></dd>
-<dt><span class="term">-T</span></dt>
-<dd>
-<p>
- Print the list of IANA standard resource record types
- whose format is understood by <span class="command"><strong>nsupdate</strong></span>.
- <span class="command"><strong>nsupdate</strong></span> will exit after the lists are
- printed. The <code class="option">-T</code> option can be combined
- with the <code class="option">-P</code> option.
- </p>
-<p>
- Other types can be entered using "TYPEXXXXX" where "XXXXX" is the
- decimal value of the type with no leading zeros. The rdata,
- if present, will be parsed using the UNKNOWN rdata format,
- (&lt;backslash&gt; &lt;hash&gt; &lt;space&gt; &lt;length&gt;
- &lt;space&gt; &lt;hexstring&gt;).
- </p>
-</dd>
-<dt><span class="term">-u <em class="replaceable"><code>udptimeout</code></em></span></dt>
-<dd><p>
- The UDP retry interval. The default is 3 seconds. If zero,
- the interval will be computed from the timeout interval and
- number of UDP retries.
- </p></dd>
-<dt><span class="term">-v</span></dt>
-<dd><p>
- Use TCP even for small update requests.
- By default, <span class="command"><strong>nsupdate</strong></span>
- uses UDP to send update requests to the name server unless they are too
- large to fit in a UDP request in which case TCP will be used.
- TCP may be preferable when a batch of update requests is made.
- </p></dd>
-<dt><span class="term">-V</span></dt>
-<dd><p>
- Print the version number and exit.
- </p></dd>
-<dt><span class="term">-y <em class="replaceable"><code>[<span class="optional">hmac:</span>]keyname:secret</code></em></span></dt>
-<dd>
-<p>
- Literal TSIG authentication key.
- <em class="parameter"><code>keyname</code></em> is the name of the key, and
- <em class="parameter"><code>secret</code></em> is the base64 encoded shared secret.
- <em class="parameter"><code>hmac</code></em> is the name of the key algorithm;
- valid choices are <code class="literal">hmac-md5</code>,
- <code class="literal">hmac-sha1</code>, <code class="literal">hmac-sha224</code>,
- <code class="literal">hmac-sha256</code>, <code class="literal">hmac-sha384</code>, or
- <code class="literal">hmac-sha512</code>. If <em class="parameter"><code>hmac</code></em>
- is not specified, the default is <code class="literal">hmac-md5</code>
- or if MD5 was disabled <code class="literal">hmac-sha256</code>.
- </p>
-<p>
- NOTE: Use of the <code class="option">-y</code> option is discouraged because the
- shared secret is supplied as a command line argument in clear text.
- This may be visible in the output from
- <span class="citerefentry"><span class="refentrytitle">ps</span>(1)</span>
- or in a history file maintained by the user's shell.
- </p>
-</dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.26.9"></a><h2>INPUT FORMAT</h2>
-<p><span class="command"><strong>nsupdate</strong></span>
- reads input from
- <em class="parameter"><code>filename</code></em>
- or standard input.
- Each command is supplied on exactly one line of input.
- Some commands are for administrative purposes.
- The others are either update instructions or prerequisite checks on the
- contents of the zone.
- These checks set conditions that some name or set of
- resource records (RRset) either exists or is absent from the zone.
- These conditions must be met if the entire update request is to succeed.
- Updates will be rejected if the tests for the prerequisite conditions
- fail.
- </p>
-<p>
- Every update request consists of zero or more prerequisites
- and zero or more updates.
- This allows a suitably authenticated update request to proceed if some
- specified resource records are present or missing from the zone.
- A blank input line (or the <span class="command"><strong>send</strong></span> command)
- causes the
- accumulated commands to be sent as one Dynamic DNS update request to the
- name server.
- </p>
-<p>
- The command formats and their meaning are as follows:
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">
- <span class="command"><strong>server</strong></span>
- {servername}
- [port]
- </span></dt>
-<dd><p>
- Sends all dynamic update requests to the name server
- <em class="parameter"><code>servername</code></em>.
- When no server statement is provided,
- <span class="command"><strong>nsupdate</strong></span>
- will send updates to the master server of the correct zone.
- The MNAME field of that zone's SOA record will identify the
- master
- server for that zone.
- <em class="parameter"><code>port</code></em>
- is the port number on
- <em class="parameter"><code>servername</code></em>
- where the dynamic update requests get sent.
- If no port number is specified, the default DNS port number of
- 53 is
- used.
- </p></dd>
-<dt><span class="term">
- <span class="command"><strong>local</strong></span>
- {address}
- [port]
- </span></dt>
-<dd><p>
- Sends all dynamic update requests using the local
- <em class="parameter"><code>address</code></em>.
-
- When no local statement is provided,
- <span class="command"><strong>nsupdate</strong></span>
- will send updates using an address and port chosen by the
- system.
- <em class="parameter"><code>port</code></em>
- can additionally be used to make requests come from a specific
- port.
- If no port number is specified, the system will assign one.
- </p></dd>
-<dt><span class="term">
- <span class="command"><strong>zone</strong></span>
- {zonename}
- </span></dt>
-<dd><p>
- Specifies that all updates are to be made to the zone
- <em class="parameter"><code>zonename</code></em>.
- If no
- <em class="parameter"><code>zone</code></em>
- statement is provided,
- <span class="command"><strong>nsupdate</strong></span>
- will attempt determine the correct zone to update based on the
- rest of the input.
- </p></dd>
-<dt><span class="term">
- <span class="command"><strong>class</strong></span>
- {classname}
- </span></dt>
-<dd><p>
- Specify the default class.
- If no <em class="parameter"><code>class</code></em> is specified, the
- default class is
- <em class="parameter"><code>IN</code></em>.
- </p></dd>
-<dt><span class="term">
- <span class="command"><strong>ttl</strong></span>
- {seconds}
- </span></dt>
-<dd><p>
- Specify the default time to live for records to be added.
- The value <em class="parameter"><code>none</code></em> will clear the default
- ttl.
- </p></dd>
-<dt><span class="term">
- <span class="command"><strong>key</strong></span>
- [hmac:] {keyname}
- {secret}
- </span></dt>
-<dd><p>
- Specifies that all updates are to be TSIG-signed using the
- <em class="parameter"><code>keyname</code></em> <em class="parameter"><code>secret</code></em> pair.
- If <em class="parameter"><code>hmac</code></em> is specified, then it sets the
- signing algorithm in use; the default is
- <code class="literal">hmac-md5</code> or if MD5 was disabled
- <code class="literal">hmac-sha256</code>. The <span class="command"><strong>key</strong></span>
- command overrides any key specified on the command line via
- <code class="option">-y</code> or <code class="option">-k</code>.
- </p></dd>
-<dt><span class="term">
- <span class="command"><strong>gsstsig</strong></span>
- </span></dt>
-<dd><p>
- Use GSS-TSIG to sign the updated. This is equivalent to
- specifying <code class="option">-g</code> on the command line.
- </p></dd>
-<dt><span class="term">
- <span class="command"><strong>oldgsstsig</strong></span>
- </span></dt>
-<dd><p>
- Use the Windows 2000 version of GSS-TSIG to sign the updated.
- This is equivalent to specifying <code class="option">-o</code> on the
- command line.
- </p></dd>
-<dt><span class="term">
- <span class="command"><strong>realm</strong></span>
- {[<span class="optional">realm_name</span>]}
- </span></dt>
-<dd><p>
- When using GSS-TSIG use <em class="parameter"><code>realm_name</code></em> rather
- than the default realm in <code class="filename">krb5.conf</code>. If no
- realm is specified the saved realm is cleared.
- </p></dd>
-<dt><span class="term">
- <span class="command"><strong>check-names</strong></span>
- {[<span class="optional">yes_or_no</span>]}
- </span></dt>
-<dd><p>
- Turn on or off check-names processing on records to
- be added. Check-names has no effect on prerequisites
- or records to be deleted. By default check-names
- processing is on. If check-names processing fails
- the record will not be added to the UPDATE message.
- </p></dd>
-<dt><span class="term">
- <span class="command"><strong>[<span class="optional">prereq</span>] nxdomain</strong></span>
- {domain-name}
- </span></dt>
-<dd><p>
- Requires that no resource record of any type exists with name
- <em class="parameter"><code>domain-name</code></em>.
- </p></dd>
-<dt><span class="term">
- <span class="command"><strong>[<span class="optional">prereq</span>] yxdomain</strong></span>
- {domain-name}
- </span></dt>
-<dd><p>
- Requires that
- <em class="parameter"><code>domain-name</code></em>
- exists (has as at least one resource record, of any type).
- </p></dd>
-<dt><span class="term">
- <span class="command"><strong>[<span class="optional">prereq</span>] nxrrset</strong></span>
- {domain-name}
- [class]
- {type}
- </span></dt>
-<dd><p>
- Requires that no resource record exists of the specified
- <em class="parameter"><code>type</code></em>,
- <em class="parameter"><code>class</code></em>
- and
- <em class="parameter"><code>domain-name</code></em>.
- If
- <em class="parameter"><code>class</code></em>
- is omitted, IN (internet) is assumed.
- </p></dd>
-<dt><span class="term">
- <span class="command"><strong>[<span class="optional">prereq</span>] yxrrset</strong></span>
- {domain-name}
- [class]
- {type}
- </span></dt>
-<dd><p>
- This requires that a resource record of the specified
- <em class="parameter"><code>type</code></em>,
- <em class="parameter"><code>class</code></em>
- and
- <em class="parameter"><code>domain-name</code></em>
- must exist.
- If
- <em class="parameter"><code>class</code></em>
- is omitted, IN (internet) is assumed.
- </p></dd>
-<dt><span class="term">
- <span class="command"><strong>[<span class="optional">prereq</span>] yxrrset</strong></span>
- {domain-name}
- [class]
- {type}
- {data...}
- </span></dt>
-<dd><p>
- The
- <em class="parameter"><code>data</code></em>
- from each set of prerequisites of this form
- sharing a common
- <em class="parameter"><code>type</code></em>,
- <em class="parameter"><code>class</code></em>,
- and
- <em class="parameter"><code>domain-name</code></em>
- are combined to form a set of RRs. This set of RRs must
- exactly match the set of RRs existing in the zone at the
- given
- <em class="parameter"><code>type</code></em>,
- <em class="parameter"><code>class</code></em>,
- and
- <em class="parameter"><code>domain-name</code></em>.
- The
- <em class="parameter"><code>data</code></em>
- are written in the standard text representation of the resource
- record's
- RDATA.
- </p></dd>
-<dt><span class="term">
- <span class="command"><strong>[<span class="optional">update</span>] del[<span class="optional">ete</span>]</strong></span>
- {domain-name}
- [ttl]
- [class]
- [type [data...]]
- </span></dt>
-<dd><p>
- Deletes any resource records named
- <em class="parameter"><code>domain-name</code></em>.
- If
- <em class="parameter"><code>type</code></em>
- and
- <em class="parameter"><code>data</code></em>
- is provided, only matching resource records will be removed.
- The internet class is assumed if
- <em class="parameter"><code>class</code></em>
- is not supplied. The
- <em class="parameter"><code>ttl</code></em>
- is ignored, and is only allowed for compatibility.
- </p></dd>
-<dt><span class="term">
- <span class="command"><strong>[<span class="optional">update</span>] add</strong></span>
- {domain-name}
- {ttl}
- [class]
- {type}
- {data...}
- </span></dt>
-<dd><p>
- Adds a new resource record with the specified
- <em class="parameter"><code>ttl</code></em>,
- <em class="parameter"><code>class</code></em>
- and
- <em class="parameter"><code>data</code></em>.
- </p></dd>
-<dt><span class="term">
- <span class="command"><strong>show</strong></span>
- </span></dt>
-<dd><p>
- Displays the current message, containing all of the
- prerequisites and
- updates specified since the last send.
- </p></dd>
-<dt><span class="term">
- <span class="command"><strong>send</strong></span>
- </span></dt>
-<dd><p>
- Sends the current message. This is equivalent to entering a
- blank line.
- </p></dd>
-<dt><span class="term">
- <span class="command"><strong>answer</strong></span>
- </span></dt>
-<dd><p>
- Displays the answer.
- </p></dd>
-<dt><span class="term">
- <span class="command"><strong>debug</strong></span>
- </span></dt>
-<dd><p>
- Turn on debugging.
- </p></dd>
-<dt><span class="term">
- <span class="command"><strong>version</strong></span>
- </span></dt>
-<dd><p>
- Print version number.
- </p></dd>
-<dt><span class="term">
- <span class="command"><strong>help</strong></span>
- </span></dt>
-<dd><p>
- Print a list of commands.
- </p></dd>
-</dl></div>
-<p>
- </p>
-<p>
- Lines beginning with a semicolon are comments and are ignored.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.26.10"></a><h2>EXAMPLES</h2>
-<p>
- The examples below show how
- <span class="command"><strong>nsupdate</strong></span>
- could be used to insert and delete resource records from the
- <span class="type">example.com</span>
- zone.
- Notice that the input in each example contains a trailing blank line so
- that
- a group of commands are sent as one dynamic update request to the
- master name server for
- <span class="type">example.com</span>.
-
- </p>
-<pre class="programlisting">
-# nsupdate
-&gt; update delete oldhost.example.com A
-&gt; update add newhost.example.com 86400 A 172.16.1.1
-&gt; send
-</pre>
-<p>
- </p>
-<p>
- Any A records for
- <span class="type">oldhost.example.com</span>
- are deleted.
- And an A record for
- <span class="type">newhost.example.com</span>
- with IP address 172.16.1.1 is added.
- The newly-added record has a 1 day TTL (86400 seconds).
- </p>
-<pre class="programlisting">
-# nsupdate
-&gt; prereq nxdomain nickname.example.com
-&gt; update add nickname.example.com 86400 CNAME somehost.example.com
-&gt; send
-</pre>
-<p>
- </p>
-<p>
- The prerequisite condition gets the name server to check that there
- are no resource records of any type for
- <span class="type">nickname.example.com</span>.
-
- If there are, the update request fails.
- If this name does not exist, a CNAME for it is added.
- This ensures that when the CNAME is added, it cannot conflict with the
- long-standing rule in RFC 1034 that a name must not exist as any other
- record type if it exists as a CNAME.
- (The rule has been updated for DNSSEC in RFC 2535 to allow CNAMEs to have
- RRSIG, DNSKEY and NSEC records.)
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.26.11"></a><h2>FILES</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><code class="constant">/etc/resolv.conf</code></span></dt>
-<dd><p>
- used to identify default name server
- </p></dd>
-<dt><span class="term"><code class="constant">/var/run/named/session.key</code></span></dt>
-<dd><p>
- sets the default TSIG key for use in local-only mode
- </p></dd>
-<dt><span class="term"><code class="constant">K{name}.+157.+{random}.key</code></span></dt>
-<dd><p>
- base-64 encoding of HMAC-MD5 key created by
- <span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>.
- </p></dd>
-<dt><span class="term"><code class="constant">K{name}.+157.+{random}.private</code></span></dt>
-<dd><p>
- base-64 encoding of HMAC-MD5 key created by
- <span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.26.12"></a><h2>SEE ALSO</h2>
-<p>
- <em class="citetitle">RFC 2136</em>,
- <em class="citetitle">RFC 3007</em>,
- <em class="citetitle">RFC 2104</em>,
- <em class="citetitle">RFC 2845</em>,
- <em class="citetitle">RFC 1034</em>,
- <em class="citetitle">RFC 2535</em>,
- <em class="citetitle">RFC 2931</em>,
- <span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">ddns-confgen</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.26.13"></a><h2>BUGS</h2>
-<p>
- The TSIG key is redundantly stored in two separate files.
- This is a consequence of nsupdate using the DST library
- for its cryptographic operations, and may change in future
- releases.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.named-rrchecker.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.rndc.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">named-rrchecker</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">rndc</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.pkcs11-destroy.html b/doc/arm/man.pkcs11-destroy.html
deleted file mode 100644
index 9dbb35e3..00000000
--- a/doc/arm/man.pkcs11-destroy.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>pkcs11-destroy</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.nsec3hash.html" title="nsec3hash">
-<link rel="next" href="man.pkcs11-list.html" title="pkcs11-list">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">pkcs11-destroy</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.nsec3hash.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.pkcs11-list.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.pkcs11-destroy"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">pkcs11-destroy</span> &#8212; destroy PKCS#11 objects</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">pkcs11-destroy</code> [<code class="option">-m <em class="replaceable"><code>module</code></em></code>] [<code class="option">-s <em class="replaceable"><code>slot</code></em></code>] { -i <em class="replaceable"><code>ID</code></em> | -l <em class="replaceable"><code>label</code></em> } [<code class="option">-p <em class="replaceable"><code>PIN</code></em></code>] [<code class="option">-w <em class="replaceable"><code>seconds</code></em></code>]</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.36.7"></a><h2>DESCRIPTION</h2>
-<p>
- <span class="command"><strong>pkcs11-destroy</strong></span> destroys keys stored in a
- PKCS#11 device, identified by their <code class="option">ID</code> or
- <code class="option">label</code>.
- </p>
-<p>
- Matching keys are displayed before being destroyed. By default,
- there is a five second delay to allow the user to interrupt the
- process before the destruction takes place.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.36.8"></a><h2>ARGUMENTS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-m <em class="replaceable"><code>module</code></em></span></dt>
-<dd><p>
- Specify the PKCS#11 provider module. This must be the full
- path to a shared library object implementing the PKCS#11 API
- for the device.
- </p></dd>
-<dt><span class="term">-s <em class="replaceable"><code>slot</code></em></span></dt>
-<dd><p>
- Open the session with the given PKCS#11 slot. The default is
- slot 0.
- </p></dd>
-<dt><span class="term">-i <em class="replaceable"><code>ID</code></em></span></dt>
-<dd><p>
- Destroy keys with the given object ID.
- </p></dd>
-<dt><span class="term">-l <em class="replaceable"><code>label</code></em></span></dt>
-<dd><p>
- Destroy keys with the given label.
- </p></dd>
-<dt><span class="term">-p <em class="replaceable"><code>PIN</code></em></span></dt>
-<dd><p>
- Specify the PIN for the device. If no PIN is provided on the
- command line, <span class="command"><strong>pkcs11-destroy</strong></span> will prompt for it.
- </p></dd>
-<dt><span class="term">-w <em class="replaceable"><code>seconds</code></em></span></dt>
-<dd><p>
- Specify how long to pause before carrying out key destruction.
- The default is five seconds. If set to <code class="literal">0</code>,
- destruction will be immediate.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.36.9"></a><h2>SEE ALSO</h2>
-<p>
- <span class="citerefentry"><span class="refentrytitle">pkcs11-keygen</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">pkcs11-list</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">pkcs11-tokens</span>(8)</span>
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.nsec3hash.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.pkcs11-list.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">nsec3hash</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">pkcs11-list</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.pkcs11-keygen.html b/doc/arm/man.pkcs11-keygen.html
deleted file mode 100644
index 8fd6c653..00000000
--- a/doc/arm/man.pkcs11-keygen.html
+++ /dev/null
@@ -1,145 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>pkcs11-keygen</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.pkcs11-list.html" title="pkcs11-list">
-<link rel="next" href="man.pkcs11-tokens.html" title="pkcs11-tokens">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">pkcs11-keygen</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.pkcs11-list.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.pkcs11-tokens.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.pkcs11-keygen"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">pkcs11-keygen</span> &#8212; generate keys on a PKCS#11 device</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">pkcs11-keygen</code> {-a <em class="replaceable"><code>algorithm</code></em>} [<code class="option">-b <em class="replaceable"><code>keysize</code></em></code>] [<code class="option">-e</code>] [<code class="option">-i <em class="replaceable"><code>id</code></em></code>] [<code class="option">-m <em class="replaceable"><code>module</code></em></code>] [<code class="option">-P</code>] [<code class="option">-p <em class="replaceable"><code>PIN</code></em></code>] [<code class="option">-q</code>] [<code class="option">-S</code>] [<code class="option">-s <em class="replaceable"><code>slot</code></em></code>] {label}</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.38.7"></a><h2>DESCRIPTION</h2>
-<p>
- <span class="command"><strong>pkcs11-keygen</strong></span> causes a PKCS#11 device to generate
- a new key pair with the given <code class="option">label</code> (which must be
- unique) and with <code class="option">keysize</code> bits of prime.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.38.8"></a><h2>ARGUMENTS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-a <em class="replaceable"><code>algorithm</code></em></span></dt>
-<dd><p>
- Specify the key algorithm class: Supported classes are RSA,
- DSA, DH, and ECC. In addition to these strings, the
- <code class="option">algorithm</code> can be specified as a DNSSEC
- signing algorithm that will be used with this key; for
- example, NSEC3RSASHA1 maps to RSA, and ECDSAP256SHA256 maps
- to ECC. The default class is "RSA".
- </p></dd>
-<dt><span class="term">-b <em class="replaceable"><code>keysize</code></em></span></dt>
-<dd><p>
- Create the key pair with <code class="option">keysize</code> bits of
- prime. For ECC keys, the only valid values are 256 and 384,
- and the default is 256.
- </p></dd>
-<dt><span class="term">-e</span></dt>
-<dd><p>
- For RSA keys only, use a large exponent.
- </p></dd>
-<dt><span class="term">-i <em class="replaceable"><code>id</code></em></span></dt>
-<dd><p>
- Create key objects with id. The id is either
- an unsigned short 2 byte or an unsigned long 4 byte number.
- </p></dd>
-<dt><span class="term">-m <em class="replaceable"><code>module</code></em></span></dt>
-<dd><p>
- Specify the PKCS#11 provider module. This must be the full
- path to a shared library object implementing the PKCS#11 API
- for the device.
- </p></dd>
-<dt><span class="term">-P</span></dt>
-<dd><p>
- Set the new private key to be non-sensitive and extractable.
- The allows the private key data to be read from the PKCS#11
- device. The default is for private keys to be sensitive and
- non-extractable.
- </p></dd>
-<dt><span class="term">-p <em class="replaceable"><code>PIN</code></em></span></dt>
-<dd><p>
- Specify the PIN for the device. If no PIN is provided on
- the command line, <span class="command"><strong>pkcs11-keygen</strong></span> will
- prompt for it.
- </p></dd>
-<dt><span class="term">-q</span></dt>
-<dd><p>
- Quiet mode: suppress unnecessary output.
- </p></dd>
-<dt><span class="term">-S</span></dt>
-<dd><p>
- For Diffie-Hellman (DH) keys only, use a special prime of
- 768, 1024 or 1536 bit size and base (aka generator) 2.
- If not specified, bit size will default to 1024.
- </p></dd>
-<dt><span class="term">-s <em class="replaceable"><code>slot</code></em></span></dt>
-<dd><p>
- Open the session with the given PKCS#11 slot. The default is
- slot 0.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.38.9"></a><h2>SEE ALSO</h2>
-<p>
- <span class="citerefentry"><span class="refentrytitle">pkcs11-destroy</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">pkcs11-list</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">pkcs11-tokens</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">dnssec-keyfromlabel</span>(8)</span>
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.pkcs11-list.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.pkcs11-tokens.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">pkcs11-list</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">pkcs11-tokens</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.pkcs11-list.html b/doc/arm/man.pkcs11-list.html
deleted file mode 100644
index 37a4f4a5..00000000
--- a/doc/arm/man.pkcs11-list.html
+++ /dev/null
@@ -1,119 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>pkcs11-list</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.pkcs11-destroy.html" title="pkcs11-destroy">
-<link rel="next" href="man.pkcs11-keygen.html" title="pkcs11-keygen">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">pkcs11-list</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.pkcs11-destroy.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.pkcs11-keygen.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.pkcs11-list"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">pkcs11-list</span> &#8212; list PKCS#11 objects</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">pkcs11-list</code> [<code class="option">-P</code>] [<code class="option">-m <em class="replaceable"><code>module</code></em></code>] [<code class="option">-s <em class="replaceable"><code>slot</code></em></code>] [-i <em class="replaceable"><code>ID</code></em>] [-l <em class="replaceable"><code>label</code></em>] [<code class="option">-p <em class="replaceable"><code>PIN</code></em></code>]</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.37.7"></a><h2>DESCRIPTION</h2>
-<p>
- <span class="command"><strong>pkcs11-list</strong></span>
- lists the PKCS#11 objects with <code class="option">ID</code> or
- <code class="option">label</code> or by default all objects.
- The object class, label, and ID are displayed for all
- keys. For private or secret keys, the extractability
- attribute is also displayed, as either <code class="literal">true</code>,
- <code class="literal">false</code>, or <code class="literal">never</code>.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.37.8"></a><h2>ARGUMENTS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-P</span></dt>
-<dd><p>
- List only the public objects. (Note that on some PKCS#11
- devices, all objects are private.)
- </p></dd>
-<dt><span class="term">-m <em class="replaceable"><code>module</code></em></span></dt>
-<dd><p>
- Specify the PKCS#11 provider module. This must be the full
- path to a shared library object implementing the PKCS#11 API
- for the device.
- </p></dd>
-<dt><span class="term">-s <em class="replaceable"><code>slot</code></em></span></dt>
-<dd><p>
- Open the session with the given PKCS#11 slot. The default is
- slot 0.
- </p></dd>
-<dt><span class="term">-i <em class="replaceable"><code>ID</code></em></span></dt>
-<dd><p>
- List only key objects with the given object ID.
- </p></dd>
-<dt><span class="term">-l <em class="replaceable"><code>label</code></em></span></dt>
-<dd><p>
- List only key objects with the given label.
- </p></dd>
-<dt><span class="term">-p <em class="replaceable"><code>PIN</code></em></span></dt>
-<dd><p>
- Specify the PIN for the device. If no PIN is provided on the
- command line, <span class="command"><strong>pkcs11-list</strong></span> will prompt for it.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.37.9"></a><h2>SEE ALSO</h2>
-<p>
- <span class="citerefentry"><span class="refentrytitle">pkcs11-destroy</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">pkcs11-keygen</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">pkcs11-tokens</span>(8)</span>
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.pkcs11-destroy.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.pkcs11-keygen.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">pkcs11-destroy</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">pkcs11-keygen</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.pkcs11-tokens.html b/doc/arm/man.pkcs11-tokens.html
deleted file mode 100644
index 29ff75b6..00000000
--- a/doc/arm/man.pkcs11-tokens.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>pkcs11-tokens</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.pkcs11-keygen.html" title="pkcs11-keygen">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">pkcs11-tokens</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.pkcs11-keygen.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> </td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.pkcs11-tokens"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">pkcs11-tokens</span> &#8212; list PKCS#11 available tokens</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">pkcs11-tokens</code> [<code class="option">-m <em class="replaceable"><code>module</code></em></code>] [<code class="option">-v</code>]</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.39.7"></a><h2>DESCRIPTION</h2>
-<p>
- <span class="command"><strong>pkcs11-tokens</strong></span>
- lists the PKCS#11 available tokens with defaults from the slot/token
- scan performed at application initialization.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.39.8"></a><h2>ARGUMENTS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-m <em class="replaceable"><code>module</code></em></span></dt>
-<dd><p>
- Specify the PKCS#11 provider module. This must be the full
- path to a shared library object implementing the PKCS#11 API
- for the device.
- </p></dd>
-<dt><span class="term">-v</span></dt>
-<dd><p>
- Make the PKCS#11 libisc initialization verbose.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.39.9"></a><h2>SEE ALSO</h2>
-<p>
- <span class="citerefentry"><span class="refentrytitle">pkcs11-destroy</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">pkcs11-keygen</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">pkcs11-list</span>(8)</span>
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.pkcs11-keygen.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> </td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">pkcs11-keygen</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> </td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.rndc-confgen.html b/doc/arm/man.rndc-confgen.html
deleted file mode 100644
index f9164e7e..00000000
--- a/doc/arm/man.rndc-confgen.html
+++ /dev/null
@@ -1,221 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>rndc-confgen</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.rndc.conf.html" title="rndc.conf">
-<link rel="next" href="man.ddns-confgen.html" title="ddns-confgen">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">rndc-confgen</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.rndc.conf.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.ddns-confgen.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.rndc-confgen"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">rndc-confgen</span> &#8212; rndc key generation tool</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">rndc-confgen</code> [<code class="option">-a</code>] [<code class="option">-A <em class="replaceable"><code>algorithm</code></em></code>] [<code class="option">-b <em class="replaceable"><code>keysize</code></em></code>] [<code class="option">-c <em class="replaceable"><code>keyfile</code></em></code>] [<code class="option">-h</code>] [<code class="option">-k <em class="replaceable"><code>keyname</code></em></code>] [<code class="option">-p <em class="replaceable"><code>port</code></em></code>] [<code class="option">-r <em class="replaceable"><code>randomfile</code></em></code>] [<code class="option">-s <em class="replaceable"><code>address</code></em></code>] [<code class="option">-t <em class="replaceable"><code>chrootdir</code></em></code>] [<code class="option">-u <em class="replaceable"><code>user</code></em></code>]</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.29.7"></a><h2>DESCRIPTION</h2>
-<p><span class="command"><strong>rndc-confgen</strong></span>
- generates configuration files
- for <span class="command"><strong>rndc</strong></span>. It can be used as a
- convenient alternative to writing the
- <code class="filename">rndc.conf</code> file
- and the corresponding <span class="command"><strong>controls</strong></span>
- and <span class="command"><strong>key</strong></span>
- statements in <code class="filename">named.conf</code> by hand.
- Alternatively, it can be run with the <span class="command"><strong>-a</strong></span>
- option to set up a <code class="filename">rndc.key</code> file and
- avoid the need for a <code class="filename">rndc.conf</code> file
- and a <span class="command"><strong>controls</strong></span> statement altogether.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.29.8"></a><h2>OPTIONS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-a</span></dt>
-<dd>
-<p>
- Do automatic <span class="command"><strong>rndc</strong></span> configuration.
- This creates a file <code class="filename">rndc.key</code>
- in <code class="filename">/etc</code> (or whatever
- <code class="varname">sysconfdir</code>
- was specified as when <acronym class="acronym">BIND</acronym> was
- built)
- that is read by both <span class="command"><strong>rndc</strong></span>
- and <span class="command"><strong>named</strong></span> on startup. The
- <code class="filename">rndc.key</code> file defines a default
- command channel and authentication key allowing
- <span class="command"><strong>rndc</strong></span> to communicate with
- <span class="command"><strong>named</strong></span> on the local host
- with no further configuration.
- </p>
-<p>
- Running <span class="command"><strong>rndc-confgen -a</strong></span> allows
- BIND 9 and <span class="command"><strong>rndc</strong></span> to be used as
- drop-in
- replacements for BIND 8 and <span class="command"><strong>ndc</strong></span>,
- with no changes to the existing BIND 8
- <code class="filename">named.conf</code> file.
- </p>
-<p>
- If a more elaborate configuration than that
- generated by <span class="command"><strong>rndc-confgen -a</strong></span>
- is required, for example if rndc is to be used remotely,
- you should run <span class="command"><strong>rndc-confgen</strong></span> without
- the
- <span class="command"><strong>-a</strong></span> option and set up a
- <code class="filename">rndc.conf</code> and
- <code class="filename">named.conf</code>
- as directed.
- </p>
-</dd>
-<dt><span class="term">-A <em class="replaceable"><code>algorithm</code></em></span></dt>
-<dd><p>
- Specifies the algorithm to use for the TSIG key. Available
- choices are: hmac-md5, hmac-sha1, hmac-sha224, hmac-sha256,
- hmac-sha384 and hmac-sha512. The default is hmac-md5 or
- if MD5 was disabled hmac-sha256.
- </p></dd>
-<dt><span class="term">-b <em class="replaceable"><code>keysize</code></em></span></dt>
-<dd><p>
- Specifies the size of the authentication key in bits.
- Must be between 1 and 512 bits; the default is the
- hash size.
- </p></dd>
-<dt><span class="term">-c <em class="replaceable"><code>keyfile</code></em></span></dt>
-<dd><p>
- Used with the <span class="command"><strong>-a</strong></span> option to specify
- an alternate location for <code class="filename">rndc.key</code>.
- </p></dd>
-<dt><span class="term">-h</span></dt>
-<dd><p>
- Prints a short summary of the options and arguments to
- <span class="command"><strong>rndc-confgen</strong></span>.
- </p></dd>
-<dt><span class="term">-k <em class="replaceable"><code>keyname</code></em></span></dt>
-<dd><p>
- Specifies the key name of the rndc authentication key.
- This must be a valid domain name.
- The default is <code class="constant">rndc-key</code>.
- </p></dd>
-<dt><span class="term">-p <em class="replaceable"><code>port</code></em></span></dt>
-<dd><p>
- Specifies the command channel port where <span class="command"><strong>named</strong></span>
- listens for connections from <span class="command"><strong>rndc</strong></span>.
- The default is 953.
- </p></dd>
-<dt><span class="term">-r <em class="replaceable"><code>randomfile</code></em></span></dt>
-<dd><p>
- Specifies a source of random data for generating the
- authorization. If the operating
- system does not provide a <code class="filename">/dev/random</code>
- or equivalent device, the default source of randomness
- is keyboard input. <code class="filename">randomdev</code>
- specifies
- the name of a character device or file containing random
- data to be used instead of the default. The special value
- <code class="filename">keyboard</code> indicates that keyboard
- input should be used.
- </p></dd>
-<dt><span class="term">-s <em class="replaceable"><code>address</code></em></span></dt>
-<dd><p>
- Specifies the IP address where <span class="command"><strong>named</strong></span>
- listens for command channel connections from
- <span class="command"><strong>rndc</strong></span>. The default is the loopback
- address 127.0.0.1.
- </p></dd>
-<dt><span class="term">-t <em class="replaceable"><code>chrootdir</code></em></span></dt>
-<dd><p>
- Used with the <span class="command"><strong>-a</strong></span> option to specify
- a directory where <span class="command"><strong>named</strong></span> will run
- chrooted. An additional copy of the <code class="filename">rndc.key</code>
- will be written relative to this directory so that
- it will be found by the chrooted <span class="command"><strong>named</strong></span>.
- </p></dd>
-<dt><span class="term">-u <em class="replaceable"><code>user</code></em></span></dt>
-<dd><p>
- Used with the <span class="command"><strong>-a</strong></span> option to set the
- owner
- of the <code class="filename">rndc.key</code> file generated.
- If
- <span class="command"><strong>-t</strong></span> is also specified only the file
- in
- the chroot area has its owner changed.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.29.9"></a><h2>EXAMPLES</h2>
-<p>
- To allow <span class="command"><strong>rndc</strong></span> to be used with
- no manual configuration, run
- </p>
-<p><strong class="userinput"><code>rndc-confgen -a</code></strong>
- </p>
-<p>
- To print a sample <code class="filename">rndc.conf</code> file and
- corresponding <span class="command"><strong>controls</strong></span> and <span class="command"><strong>key</strong></span>
- statements to be manually inserted into <code class="filename">named.conf</code>,
- run
- </p>
-<p><strong class="userinput"><code>rndc-confgen</code></strong>
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.29.10"></a><h2>SEE ALSO</h2>
-<p><span class="citerefentry"><span class="refentrytitle">rndc</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">rndc.conf</span>(5)</span>,
- <span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
- <em class="citetitle">BIND 9 Administrator Reference Manual</em>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.rndc.conf.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.ddns-confgen.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<code class="filename">rndc.conf</code> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">ddns-confgen</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.rndc.conf.html b/doc/arm/man.rndc.conf.html
deleted file mode 100644
index 7c6942c7..00000000
--- a/doc/arm/man.rndc.conf.html
+++ /dev/null
@@ -1,243 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>rndc.conf</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.rndc.html" title="rndc">
-<link rel="next" href="man.rndc-confgen.html" title="rndc-confgen">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><code class="filename">rndc.conf</code></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.rndc.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.rndc-confgen.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.rndc.conf"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><code class="filename">rndc.conf</code> &#8212; rndc configuration file</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">rndc.conf</code> </p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.28.7"></a><h2>DESCRIPTION</h2>
-<p><code class="filename">rndc.conf</code> is the configuration file
- for <span class="command"><strong>rndc</strong></span>, the BIND 9 name server control
- utility. This file has a similar structure and syntax to
- <code class="filename">named.conf</code>. Statements are enclosed
- in braces and terminated with a semi-colon. Clauses in
- the statements are also semi-colon terminated. The usual
- comment styles are supported:
- </p>
-<p>
- C style: /* */
- </p>
-<p>
- C++ style: // to end of line
- </p>
-<p>
- Unix style: # to end of line
- </p>
-<p><code class="filename">rndc.conf</code> is much simpler than
- <code class="filename">named.conf</code>. The file uses three
- statements: an options statement, a server statement
- and a key statement.
- </p>
-<p>
- The <code class="option">options</code> statement contains five clauses.
- The <code class="option">default-server</code> clause is followed by the
- name or address of a name server. This host will be used when
- no name server is given as an argument to
- <span class="command"><strong>rndc</strong></span>. The <code class="option">default-key</code>
- clause is followed by the name of a key which is identified by
- a <code class="option">key</code> statement. If no
- <code class="option">keyid</code> is provided on the rndc command line,
- and no <code class="option">key</code> clause is found in a matching
- <code class="option">server</code> statement, this default key will be
- used to authenticate the server's commands and responses. The
- <code class="option">default-port</code> clause is followed by the port
- to connect to on the remote name server. If no
- <code class="option">port</code> option is provided on the rndc command
- line, and no <code class="option">port</code> clause is found in a
- matching <code class="option">server</code> statement, this default port
- will be used to connect.
- The <code class="option">default-source-address</code> and
- <code class="option">default-source-address-v6</code> clauses which
- can be used to set the IPv4 and IPv6 source addresses
- respectively.
- </p>
-<p>
- After the <code class="option">server</code> keyword, the server
- statement includes a string which is the hostname or address
- for a name server. The statement has three possible clauses:
- <code class="option">key</code>, <code class="option">port</code> and
- <code class="option">addresses</code>. The key name must match the
- name of a key statement in the file. The port number
- specifies the port to connect to. If an <code class="option">addresses</code>
- clause is supplied these addresses will be used instead of
- the server name. Each address can take an optional port.
- If an <code class="option">source-address</code> or <code class="option">source-address-v6</code>
- of supplied then these will be used to specify the IPv4 and IPv6
- source addresses respectively.
- </p>
-<p>
- The <code class="option">key</code> statement begins with an identifying
- string, the name of the key. The statement has two clauses.
- <code class="option">algorithm</code> identifies the authentication algorithm
- for <span class="command"><strong>rndc</strong></span> to use; currently only HMAC-MD5
- (for compatibility), HMAC-SHA1, HMAC-SHA224, HMAC-SHA256
- (default), HMAC-SHA384 and HMAC-SHA512 are
- supported. This is followed by a secret clause which contains
- the base-64 encoding of the algorithm's authentication key. The
- base-64 string is enclosed in double quotes.
- </p>
-<p>
- There are two common ways to generate the base-64 string for the
- secret. The BIND 9 program <span class="command"><strong>rndc-confgen</strong></span>
- can
- be used to generate a random key, or the
- <span class="command"><strong>mmencode</strong></span> program, also known as
- <span class="command"><strong>mimencode</strong></span>, can be used to generate a
- base-64
- string from known input. <span class="command"><strong>mmencode</strong></span> does
- not
- ship with BIND 9 but is available on many systems. See the
- EXAMPLE section for sample command lines for each.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.28.8"></a><h2>EXAMPLE</h2>
-<pre class="programlisting">
- options {
- default-server localhost;
- default-key samplekey;
- };
-</pre>
-<p>
- </p>
-<pre class="programlisting">
- server localhost {
- key samplekey;
- };
-</pre>
-<p>
- </p>
-<pre class="programlisting">
- server testserver {
- key testkey;
- addresses { localhost port 5353; };
- };
-</pre>
-<p>
- </p>
-<pre class="programlisting">
- key samplekey {
- algorithm hmac-sha256;
- secret "6FMfj43Osz4lyb24OIe2iGEz9lf1llJO+lz";
- };
-</pre>
-<p>
- </p>
-<pre class="programlisting">
- key testkey {
- algorithm hmac-sha256;
- secret "R3HI8P6BKw9ZwXwN3VZKuQ==";
- };
- </pre>
-<p>
- </p>
-<p>
- In the above example, <span class="command"><strong>rndc</strong></span> will by
- default use
- the server at localhost (127.0.0.1) and the key called samplekey.
- Commands to the localhost server will use the samplekey key, which
- must also be defined in the server's configuration file with the
- same name and secret. The key statement indicates that samplekey
- uses the HMAC-SHA256 algorithm and its secret clause contains the
- base-64 encoding of the HMAC-SHA256 secret enclosed in double quotes.
- </p>
-<p>
- If <span class="command"><strong>rndc -s testserver</strong></span> is used then <span class="command"><strong>rndc</strong></span> will
- connect to server on localhost port 5353 using the key testkey.
- </p>
-<p>
- To generate a random secret with <span class="command"><strong>rndc-confgen</strong></span>:
- </p>
-<p><strong class="userinput"><code>rndc-confgen</code></strong>
- </p>
-<p>
- A complete <code class="filename">rndc.conf</code> file, including
- the
- randomly generated key, will be written to the standard
- output. Commented-out <code class="option">key</code> and
- <code class="option">controls</code> statements for
- <code class="filename">named.conf</code> are also printed.
- </p>
-<p>
- To generate a base-64 secret with <span class="command"><strong>mmencode</strong></span>:
- </p>
-<p><strong class="userinput"><code>echo "known plaintext for a secret" | mmencode</code></strong>
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.28.9"></a><h2>NAME SERVER CONFIGURATION</h2>
-<p>
- The name server must be configured to accept rndc connections and
- to recognize the key specified in the <code class="filename">rndc.conf</code>
- file, using the controls statement in <code class="filename">named.conf</code>.
- See the sections on the <code class="option">controls</code> statement in the
- BIND 9 Administrator Reference Manual for details.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.28.10"></a><h2>SEE ALSO</h2>
-<p><span class="citerefentry"><span class="refentrytitle">rndc</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">rndc-confgen</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">mmencode</span>(1)</span>,
- <em class="citetitle">BIND 9 Administrator Reference Manual</em>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.rndc.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.rndc-confgen.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">rndc</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">rndc-confgen</span>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/man.rndc.html b/doc/arm/man.rndc.html
deleted file mode 100644
index 6598aafb..00000000
--- a/doc/arm/man.rndc.html
+++ /dev/null
@@ -1,792 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
- - Copyright (C) 2000-2015 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>rndc</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
-<link rel="up" href="Bv9ARM.ch13.html" title="Manual pages">
-<link rel="prev" href="man.nsupdate.html" title="nsupdate">
-<link rel="next" href="man.rndc.conf.html" title="rndc.conf">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<div class="navheader">
-<table width="100%" summary="Navigation header">
-<tr><th colspan="3" align="center"><span class="application">rndc</span></th></tr>
-<tr>
-<td width="20%" align="left">
-<a accesskey="p" href="man.nsupdate.html">Prev</a> </td>
-<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.rndc.conf.html">Next</a>
-</td>
-</tr>
-</table>
-<hr>
-</div>
-<div class="refentry">
-<a name="man.rndc"></a><div class="titlepage"></div>
-<div class="refnamediv">
-<h2>Name</h2>
-<p><span class="application">rndc</span> &#8212; name server control utility</p>
-</div>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">rndc</code> [<code class="option">-b <em class="replaceable"><code>source-address</code></em></code>] [<code class="option">-c <em class="replaceable"><code>config-file</code></em></code>] [<code class="option">-k <em class="replaceable"><code>key-file</code></em></code>] [<code class="option">-s <em class="replaceable"><code>server</code></em></code>] [<code class="option">-p <em class="replaceable"><code>port</code></em></code>] [<code class="option">-q</code>] [<code class="option">-r</code>] [<code class="option">-V</code>] [<code class="option">-y <em class="replaceable"><code>key_id</code></em></code>] {command}</p></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.27.7"></a><h2>DESCRIPTION</h2>
-<p><span class="command"><strong>rndc</strong></span>
- controls the operation of a name
- server. It supersedes the <span class="command"><strong>ndc</strong></span> utility
- that was provided in old BIND releases. If
- <span class="command"><strong>rndc</strong></span> is invoked with no command line
- options or arguments, it prints a short summary of the
- supported commands and the available options and their
- arguments.
- </p>
-<p><span class="command"><strong>rndc</strong></span>
- communicates with the name server over a TCP connection, sending
- commands authenticated with digital signatures. In the current
- versions of
- <span class="command"><strong>rndc</strong></span> and <span class="command"><strong>named</strong></span>,
- the only supported authentication algorithms are HMAC-MD5
- (for compatibility), HMAC-SHA1, HMAC-SHA224, HMAC-SHA256
- (default), HMAC-SHA384 and HMAC-SHA512.
- They use a shared secret on each end of the connection.
- This provides TSIG-style authentication for the command
- request and the name server's response. All commands sent
- over the channel must be signed by a key_id known to the
- server.
- </p>
-<p><span class="command"><strong>rndc</strong></span>
- reads a configuration file to
- determine how to contact the name server and decide what
- algorithm and key it should use.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.27.8"></a><h2>OPTIONS</h2>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term">-b <em class="replaceable"><code>source-address</code></em></span></dt>
-<dd><p>
- Use <em class="replaceable"><code>source-address</code></em>
- as the source address for the connection to the server.
- Multiple instances are permitted to allow setting of both
- the IPv4 and IPv6 source addresses.
- </p></dd>
-<dt><span class="term">-c <em class="replaceable"><code>config-file</code></em></span></dt>
-<dd><p>
- Use <em class="replaceable"><code>config-file</code></em>
- as the configuration file instead of the default,
- <code class="filename">/etc/rndc.conf</code>.
- </p></dd>
-<dt><span class="term">-k <em class="replaceable"><code>key-file</code></em></span></dt>
-<dd><p>
- Use <em class="replaceable"><code>key-file</code></em>
- as the key file instead of the default,
- <code class="filename">/etc/rndc.key</code>. The key in
- <code class="filename">/etc/rndc.key</code> will be used to
- authenticate
- commands sent to the server if the <em class="replaceable"><code>config-file</code></em>
- does not exist.
- </p></dd>
-<dt><span class="term">-s <em class="replaceable"><code>server</code></em></span></dt>
-<dd><p><em class="replaceable"><code>server</code></em> is
- the name or address of the server which matches a
- server statement in the configuration file for
- <span class="command"><strong>rndc</strong></span>. If no server is supplied on the
- command line, the host named by the default-server clause
- in the options statement of the <span class="command"><strong>rndc</strong></span>
- configuration file will be used.
- </p></dd>
-<dt><span class="term">-p <em class="replaceable"><code>port</code></em></span></dt>
-<dd><p>
- Send commands to TCP port
- <em class="replaceable"><code>port</code></em>
- instead
- of BIND 9's default control channel port, 953.
- </p></dd>
-<dt><span class="term">-q</span></dt>
-<dd><p>
- Quiet mode: Message text returned by the server
- will not be printed except when there is an error.
- </p></dd>
-<dt><span class="term">-r</span></dt>
-<dd><p>
- Instructs <span class="command"><strong>rndc</strong></span> to print the result code
- returned by <span class="command"><strong>named</strong></span> after executing the
- requested command (e.g., ISC_R_SUCCESS, ISC_R_FAILURE, etc).
- </p></dd>
-<dt><span class="term">-V</span></dt>
-<dd><p>
- Enable verbose logging.
- </p></dd>
-<dt><span class="term">-y <em class="replaceable"><code>key_id</code></em></span></dt>
-<dd><p>
- Use the key <em class="replaceable"><code>key_id</code></em>
- from the configuration file.
- <em class="replaceable"><code>key_id</code></em>
- must be
- known by <span class="command"><strong>named</strong></span> with the same algorithm and secret string
- in order for control message validation to succeed.
- If no <em class="replaceable"><code>key_id</code></em>
- is specified, <span class="command"><strong>rndc</strong></span> will first look
- for a key clause in the server statement of the server
- being used, or if no server statement is present for that
- host, then the default-key clause of the options statement.
- Note that the configuration file contains shared secrets
- which are used to send authenticated control commands
- to name servers. It should therefore not have general read
- or write access.
- </p></dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.27.9"></a><h2>COMMANDS</h2>
-<p>
- A list of commands supported by <span class="command"><strong>rndc</strong></span> can
- be seen by running <span class="command"><strong>rndc</strong></span> without arguments.
- </p>
-<p>
- Currently supported commands are:
- </p>
-<div class="variablelist"><dl class="variablelist">
-<dt><span class="term"><strong class="userinput"><code>addzone <em class="replaceable"><code>zone</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em> [<span class="optional"><em class="replaceable"><code>view</code></em></span>]</span>] <em class="replaceable"><code>configuration</code></em> </code></strong></span></dt>
-<dd>
-<p>
- Add a zone while the server is running. This
- command requires the
- <span class="command"><strong>allow-new-zones</strong></span> option to be set
- to <strong class="userinput"><code>yes</code></strong>. The
- <em class="replaceable"><code>configuration</code></em> string
- specified on the command line is the zone
- configuration text that would ordinarily be
- placed in <code class="filename">named.conf</code>.
- </p>
-<p>
- The configuration is saved in a file called
- <code class="filename"><em class="replaceable"><code>name</code></em>.nzf</code>,
- where <em class="replaceable"><code>name</code></em> is the
- name of the view, or if it contains characters
- that are incompatible with use as a file name, a
- cryptographic hash generated from the name
- of the view.
- When <span class="command"><strong>named</strong></span> is
- restarted, the file will be loaded into the view
- configuration, so that zones that were added
- can persist after a restart.
- </p>
-<p>
- This sample <span class="command"><strong>addzone</strong></span> command
- would add the zone <code class="literal">example.com</code>
- to the default view:
- </p>
-<p>
-<code class="prompt">$ </code><strong class="userinput"><code>rndc addzone example.com '{ type master; file "example.com.db"; };'</code></strong>
- </p>
-<p>
- (Note the brackets and semi-colon around the zone
- configuration text.)
- </p>
-<p>
- See also <span class="command"><strong>rndc delzone</strong></span> and <span class="command"><strong>rndc modzone</strong></span>.
- </p>
-</dd>
-<dt><span class="term"><strong class="userinput"><code>delzone [<span class="optional">-clean</span>] <em class="replaceable"><code>zone</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em> [<span class="optional"><em class="replaceable"><code>view</code></em></span>]</span>] </code></strong></span></dt>
-<dd>
-<p>
- Delete a zone while the server is running.
- </p>
-<p>
- If the <code class="option">-clean</code> argument is specified,
- the zone's master file (and journal file, if any)
- will be deleted along with the zone. Without the
- <code class="option">-clean</code> option, zone files must
- be cleaned up by hand. (If the zone is of
- type "slave" or "stub", the files needing to
- be cleaned up will be reported in the output
- of the <span class="command"><strong>rndc delzone</strong></span> command.)
- </p>
-<p>
- If the zone was originally added via
- <span class="command"><strong>rndc addzone</strong></span>, then it will be
- removed permanently. However, if it was originally
- configured in <code class="filename">named.conf</code>, then
- that original configuration is still in place; when
- the server is restarted or reconfigured, the zone will
- come back. To remove it permanently, it must also be
- removed from <code class="filename">named.conf</code>
- </p>
-<p>
- See also <span class="command"><strong>rndc addzone</strong></span> and <span class="command"><strong>rndc modzone</strong></span>.
- </p>
-</dd>
-<dt><span class="term"><strong class="userinput"><code>dnstap ( -reopen | -roll [<span class="optional"><em class="replaceable"><code>number</code></em></span>] )</code></strong></span></dt>
-<dd><p>
- Close and re-open DNSTAP output files.
- <span class="command"><strong>rndc dnstap -reopen</strong></span> allows the output
- file to be renamed externally, so
- that <span class="command"><strong>named</strong></span> can truncate and re-open it.
- <span class="command"><strong>rndc dnstap -roll</strong></span> causes the output file
- to be rolled automatically, similar to log files; the most
- recent output file has ".0" appended to its name; the
- previous most recent output file is moved to ".1", and so on.
- If <em class="replaceable"><code>number</code></em> is specified, then the
- number of backup log files is limited to that number.
- </p></dd>
-<dt><span class="term"><strong class="userinput"><code>dumpdb [<span class="optional">-all|-cache|-zone|-adb|-bad|-fail</span>] [<span class="optional"><em class="replaceable"><code>view ...</code></em></span>]</code></strong></span></dt>
-<dd><p>
- Dump the server's caches (default) and/or zones to
- the
- dump file for the specified views. If no view is
- specified, all
- views are dumped.
- (See the <span class="command"><strong>dump-file</strong></span> option in
- the BIND 9 Administrator Reference Manual.)
- </p></dd>
-<dt><span class="term"><strong class="userinput"><code>flush</code></strong></span></dt>
-<dd><p>
- Flushes the server's cache.
- </p></dd>
-<dt><span class="term"><strong class="userinput"><code>flushname</code></strong> <em class="replaceable"><code>name</code></em> [<span class="optional"><em class="replaceable"><code>view</code></em></span>] </span></dt>
-<dd><p>
- Flushes the given name from the view's DNS cache
- and, if applicable, from the view's nameserver address
- database, bad server cache and SERVFAIL cache.
- </p></dd>
-<dt><span class="term"><strong class="userinput"><code>flushtree</code></strong> <em class="replaceable"><code>name</code></em> [<span class="optional"><em class="replaceable"><code>view</code></em></span>] </span></dt>
-<dd><p>
- Flushes the given name, and all of its subdomains,
- from the view's DNS cache, address database,
- bad server cache, and SERVFAIL cache.
- </p></dd>
-<dt><span class="term"><strong class="userinput"><code>freeze [<span class="optional"><em class="replaceable"><code>zone</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em> [<span class="optional"><em class="replaceable"><code>view</code></em></span>]</span>]</span>]</code></strong></span></dt>
-<dd>
-<p>
- Suspend updates to a dynamic zone. If no zone is
- specified, then all zones are suspended. This allows
- manual edits to be made to a zone normally updated by
- dynamic update. It also causes changes in the
- journal file to be synced into the master file.
- All dynamic update attempts will be refused while
- the zone is frozen.
- </p>
-<p>
- See also <span class="command"><strong>rndc thaw</strong></span>.
- </p>
-</dd>
-<dt><span class="term"><strong class="userinput"><code>halt [<span class="optional">-p</span>]</code></strong></span></dt>
-<dd>
-<p>
- Stop the server immediately. Recent changes
- made through dynamic update or IXFR are not saved to
- the master files, but will be rolled forward from the
- journal files when the server is restarted.
- If <code class="option">-p</code> is specified <span class="command"><strong>named</strong></span>'s process id is returned.
- This allows an external process to determine when <span class="command"><strong>named</strong></span>
- had completed halting.
- </p>
-<p>
- See also <span class="command"><strong>rndc stop</strong></span>.
- </p>
-</dd>
-<dt><span class="term"><strong class="userinput"><code>loadkeys <em class="replaceable"><code>zone</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em> [<span class="optional"><em class="replaceable"><code>view</code></em></span>]</span>]</code></strong></span></dt>
-<dd>
-<p>
- Fetch all DNSSEC keys for the given zone
- from the key directory. If they are within
- their publication period, merge them into the
- zone's DNSKEY RRset. Unlike <span class="command"><strong>rndc
- sign</strong></span>, however, the zone is not
- immediately re-signed by the new keys, but is
- allowed to incrementally re-sign over time.
- </p>
-<p>
- This command requires that the
- <span class="command"><strong>auto-dnssec</strong></span> zone option
- be set to <code class="literal">maintain</code>,
- and also requires the zone to be configured to
- allow dynamic DNS.
- (See "Dynamic Update Policies" in the Administrator
- Reference Manual for more details.)
- </p>
-</dd>
-<dt><span class="term"><strong class="userinput"><code>managed-keys <em class="replaceable"><code>(status | refresh | sync)</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em> [<span class="optional"><em class="replaceable"><code>view</code></em></span>]</span>]</code></strong></span></dt>
-<dd><p>
- When run with the "status" keyword, print the current
- status of the managed-keys database for the specified
- view, or for all views if none is specified. When run
- with the "refresh" keyword, force an immediate refresh
- of all the managed-keys in the specified view, or all
- views. When run with the "sync" keyword, force an
- immediate dump of the managed-keys database to disk (in
- the file <code class="filename">managed-keys.bind</code> or
- (<code class="filename"><em class="replaceable"><code>viewname</code></em>.mkeys</code>).
- </p></dd>
-<dt><span class="term"><strong class="userinput"><code>modzone <em class="replaceable"><code>zone</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em> [<span class="optional"><em class="replaceable"><code>view</code></em></span>]</span>] <em class="replaceable"><code>configuration</code></em> </code></strong></span></dt>
-<dd>
-<p>
- Modify the configuration of a zone while the server
- is running. This command requires the
- <span class="command"><strong>allow-new-zones</strong></span> option to be
- set to <strong class="userinput"><code>yes</code></strong>. As with
- <span class="command"><strong>addzone</strong></span>, the
- <em class="replaceable"><code>configuration</code></em> string
- specified on the command line is the zone
- configuration text that would ordinarily be
- placed in <code class="filename">named.conf</code>.
- </p>
-<p>
- If the zone was originally added via
- <span class="command"><strong>rndc addzone</strong></span>, the configuration
- changes will be recorded permanently and will still be
- in effect after the server is restarted or reconfigured.
- However, if it was originally configured in
- <code class="filename">named.conf</code>, then that original
- configuration is still in place; when the server is
- restarted or reconfigured, the zone will revert to
- its original configuration. To make the changes
- permanent, it must also be modified in
- <code class="filename">named.conf</code>
- </p>
-<p>
- See also <span class="command"><strong>rndc addzone</strong></span> and <span class="command"><strong>rndc delzone</strong></span>.
- </p>
-</dd>
-<dt><span class="term"><strong class="userinput"><code>notify <em class="replaceable"><code>zone</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em> [<span class="optional"><em class="replaceable"><code>view</code></em></span>]</span>]</code></strong></span></dt>
-<dd><p>
- Resend NOTIFY messages for the zone.
- </p></dd>
-<dt><span class="term"><strong class="userinput"><code>notrace</code></strong></span></dt>
-<dd>
-<p>
- Sets the server's debugging level to 0.
- </p>
-<p>
- See also <span class="command"><strong>rndc trace</strong></span>.
- </p>
-</dd>
-<dt><span class="term"><strong class="userinput"><code>nta
- [<span class="optional">( -d | -f | -r | -l <em class="replaceable"><code>duration</code></em>)</span>]
- <em class="replaceable"><code>domain</code></em>
- [<span class="optional"><em class="replaceable"><code>view</code></em></span>]
- </code></strong></span></dt>
-<dd>
-<p>
- Sets a DNSSEC negative trust anchor (NTA)
- for <code class="option">domain</code>, with a lifetime of
- <code class="option">duration</code>. The default lifetime is
- configured in <code class="filename">named.conf</code> via the
- <code class="option">nta-lifetime</code> option, and defaults to
- one hour. The lifetime cannot exceed one week.
- </p>
-<p>
- A negative trust anchor selectively disables
- DNSSEC validation for zones that are known to be
- failing because of misconfiguration rather than
- an attack. When data to be validated is
- at or below an active NTA (and above any other
- configured trust anchors), <span class="command"><strong>named</strong></span> will
- abort the DNSSEC validation process and treat the data as
- insecure rather than bogus. This continues until the
- NTA's lifetime is elapsed.
- </p>
-<p>
- NTAs persist across restarts of the <span class="command"><strong>named</strong></span> server.
- The NTAs for a view are saved in a file called
- <code class="filename"><em class="replaceable"><code>name</code></em>.nta</code>,
- where <em class="replaceable"><code>name</code></em> is the
- name of the view, or if it contains characters
- that are incompatible with use as a file name, a
- cryptographic hash generated from the name
- of the view.
- </p>
-<p>
- An existing NTA can be removed by using the
- <code class="option">-remove</code> option.
- </p>
-<p>
- An NTA's lifetime can be specified with the
- <code class="option">-lifetime</code> option. TTL-style
- suffixes can be used to specify the lifetime in
- seconds, minutes, or hours. If the specified NTA
- already exists, its lifetime will be updated to the
- new value. Setting <code class="option">lifetime</code> to zero
- is equivalent to <code class="option">-remove</code>.
- </p>
-<p>
- If <code class="option">-dump</code> is used, any other arguments
- are ignored, and a list of existing NTAs is printed
- (note that this may include NTAs that are expired but
- have not yet been cleaned up).
- </p>
-<p>
- Normally, <span class="command"><strong>named</strong></span> will periodically
- test to see whether data below an NTA can now be
- validated (see the <code class="option">nta-recheck</code> option
- in the Administrator Reference Manual for details).
- If data can be validated, then the NTA is regarded as
- no longer necessary, and will be allowed to expire
- early. The <code class="option">-force</code> overrides this
- behavior and forces an NTA to persist for its entire
- lifetime, regardless of whether data could be
- validated if the NTA were not present.
- </p>
-<p>
- All of these options can be shortened, i.e., to
- <code class="option">-l</code>, <code class="option">-r</code>, <code class="option">-d</code>,
- and <code class="option">-f</code>.
- </p>
-</dd>
-<dt><span class="term"><strong class="userinput"><code>querylog</code></strong> [<span class="optional">on|off</span>] </span></dt>
-<dd>
-<p>
- Enable or disable query logging. (For backward
- compatibility, this command can also be used without
- an argument to toggle query logging on and off.)
- </p>
-<p>
- Query logging can also be enabled
- by explicitly directing the <span class="command"><strong>queries</strong></span>
- <span class="command"><strong>category</strong></span> to a
- <span class="command"><strong>channel</strong></span> in the
- <span class="command"><strong>logging</strong></span> section of
- <code class="filename">named.conf</code> or by specifying
- <span class="command"><strong>querylog yes;</strong></span> in the
- <span class="command"><strong>options</strong></span> section of
- <code class="filename">named.conf</code>.
- </p>
-</dd>
-<dt><span class="term"><strong class="userinput"><code>reconfig</code></strong></span></dt>
-<dd><p>
- Reload the configuration file and load new zones,
- but do not reload existing zone files even if they
- have changed.
- This is faster than a full <span class="command"><strong>reload</strong></span> when there
- is a large number of zones because it avoids the need
- to examine the
- modification times of the zones files.
- </p></dd>
-<dt><span class="term"><strong class="userinput"><code>recursing</code></strong></span></dt>
-<dd><p>
- Dump the list of queries <span class="command"><strong>named</strong></span> is currently
- recursing on, and the list of domains to which iterative
- queries are currently being sent. (The second list includes
- the number of fetches currently active for the given domain,
- and how many have been passed or dropped because of the
- <code class="option">fetches-per-zone</code> option.)
- </p></dd>
-<dt><span class="term"><strong class="userinput"><code>refresh <em class="replaceable"><code>zone</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em> [<span class="optional"><em class="replaceable"><code>view</code></em></span>]</span>]</code></strong></span></dt>
-<dd><p>
- Schedule zone maintenance for the given zone.
- </p></dd>
-<dt><span class="term"><strong class="userinput"><code>reload</code></strong></span></dt>
-<dd><p>
- Reload configuration file and zones.
- </p></dd>
-<dt><span class="term"><strong class="userinput"><code>reload <em class="replaceable"><code>zone</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em> [<span class="optional"><em class="replaceable"><code>view</code></em></span>]</span>]</code></strong></span></dt>
-<dd><p>
- Reload the given zone.
- </p></dd>
-<dt><span class="term"><strong class="userinput"><code>retransfer <em class="replaceable"><code>zone</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em> [<span class="optional"><em class="replaceable"><code>view</code></em></span>]</span>]</code></strong></span></dt>
-<dd>
-<p>
- Retransfer the given slave zone from the master server.
- </p>
-<p>
- If the zone is configured to use
- <span class="command"><strong>inline-signing</strong></span>, the signed
- version of the zone is discarded; after the
- retransfer of the unsigned version is complete, the
- signed version will be regenerated with all new
- signatures.
- </p>
-</dd>
-<dt><span class="term"><strong class="userinput"><code>scan</code></strong></span></dt>
-<dd><p>
- Scan the list of available network interfaces
- for changes, without performing a full
- <span class="command"><strong>reconfig</strong></span> or waiting for the
- <span class="command"><strong>interface-interval</strong></span> timer.
- </p></dd>
-<dt><span class="term"><strong class="userinput"><code>secroots [<span class="optional">-</span>] [<span class="optional"><em class="replaceable"><code>view ...</code></em></span>]</code></strong></span></dt>
-<dd>
-<p>
- Dump the server's security roots and negative trust anchors
- for the specified views. If no view is specified, all views
- are dumped.
- </p>
-<p>
- If the first argument is "-", then the output is
- returned via the <span class="command"><strong>rndc</strong></span> response channel
- and printed to the standard output.
- Otherwise, it is written to the secroots dump file, which
- defaults to <code class="filename">named.secroots</code>, but can be
- overridden via the <code class="option">secroots-file</code> option in
- <code class="filename">named.conf</code>.
- </p>
-<p>
- See also <span class="command"><strong>rndc managed-keys</strong></span>.
- </p>
-</dd>
-<dt><span class="term"><strong class="userinput"><code>showzone <em class="replaceable"><code>zone</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em> [<span class="optional"><em class="replaceable"><code>view</code></em></span>]</span>] </code></strong></span></dt>
-<dd>
-<p>
- Print the configuration of a running zone.
- </p>
-<p>
- See also <span class="command"><strong>rndc zonestatus</strong></span>.
- </p>
-</dd>
-<dt><span class="term"><strong class="userinput"><code>sign <em class="replaceable"><code>zone</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em> [<span class="optional"><em class="replaceable"><code>view</code></em></span>]</span>]</code></strong></span></dt>
-<dd>
-<p>
- Fetch all DNSSEC keys for the given zone
- from the key directory (see the
- <span class="command"><strong>key-directory</strong></span> option in
- the BIND 9 Administrator Reference Manual). If they are within
- their publication period, merge them into the
- zone's DNSKEY RRset. If the DNSKEY RRset
- is changed, then the zone is automatically
- re-signed with the new key set.
- </p>
-<p>
- This command requires that the
- <span class="command"><strong>auto-dnssec</strong></span> zone option be set
- to <code class="literal">allow</code> or
- <code class="literal">maintain</code>,
- and also requires the zone to be configured to
- allow dynamic DNS.
- (See "Dynamic Update Policies" in the Administrator
- Reference Manual for more details.)
- </p>
-<p>
- See also <span class="command"><strong>rndc loadkeys</strong></span>.
- </p>
-</dd>
-<dt><span class="term"><strong class="userinput"><code>signing [<span class="optional">( -list | -clear <em class="replaceable"><code>keyid/algorithm</code></em> | -clear <code class="literal">all</code> | -nsec3param ( <em class="replaceable"><code>parameters</code></em> | <code class="literal">none</code> ) | -serial <em class="replaceable"><code>value</code></em> ) </span>] <em class="replaceable"><code>zone</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em> [<span class="optional"><em class="replaceable"><code>view</code></em></span>]</span>] </code></strong></span></dt>
-<dd>
-<p>
- List, edit, or remove the DNSSEC signing state records
- for the specified zone. The status of ongoing DNSSEC
- operations (such as signing or generating
- NSEC3 chains) is stored in the zone in the form
- of DNS resource records of type
- <span class="command"><strong>sig-signing-type</strong></span>.
- <span class="command"><strong>rndc signing -list</strong></span> converts
- these records into a human-readable form,
- indicating which keys are currently signing
- or have finished signing the zone, and which NSEC3
- chains are being created or removed.
- </p>
-<p>
- <span class="command"><strong>rndc signing -clear</strong></span> can remove
- a single key (specified in the same format that
- <span class="command"><strong>rndc signing -list</strong></span> uses to
- display it), or all keys. In either case, only
- completed keys are removed; any record indicating
- that a key has not yet finished signing the zone
- will be retained.
- </p>
-<p>
- <span class="command"><strong>rndc signing -nsec3param</strong></span> sets
- the NSEC3 parameters for a zone. This is the
- only supported mechanism for using NSEC3 with
- <span class="command"><strong>inline-signing</strong></span> zones.
- Parameters are specified in the same format as
- an NSEC3PARAM resource record: hash algorithm,
- flags, iterations, and salt, in that order.
- </p>
-<p>
- Currently, the only defined value for hash algorithm
- is <code class="literal">1</code>, representing SHA-1.
- The <code class="option">flags</code> may be set to
- <code class="literal">0</code> or <code class="literal">1</code>,
- depending on whether you wish to set the opt-out
- bit in the NSEC3 chain. <code class="option">iterations</code>
- defines the number of additional times to apply
- the algorithm when generating an NSEC3 hash. The
- <code class="option">salt</code> is a string of data expressed
- in hexadecimal, a hyphen (`-') if no salt is
- to be used, or the keyword <code class="literal">auto</code>,
- which causes <span class="command"><strong>named</strong></span> to generate a
- random 64-bit salt.
- </p>
-<p>
- So, for example, to create an NSEC3 chain using
- the SHA-1 hash algorithm, no opt-out flag,
- 10 iterations, and a salt value of "FFFF", use:
- <span class="command"><strong>rndc signing -nsec3param 1 0 10 FFFF <em class="replaceable"><code>zone</code></em></strong></span>.
- To set the opt-out flag, 15 iterations, and no
- salt, use:
- <span class="command"><strong>rndc signing -nsec3param 1 1 15 - <em class="replaceable"><code>zone</code></em></strong></span>.
- </p>
-<p>
- <span class="command"><strong>rndc signing -nsec3param none</strong></span>
- removes an existing NSEC3 chain and replaces it
- with NSEC.
- </p>
-<p>
- <span class="command"><strong>rndc signing -serial value</strong></span> sets
- the serial number of the zone to value. If the value
- would cause the serial number to go backwards it will
- be rejected. The primary use is to set the serial on
- inline signed zones.
- </p>
-</dd>
-<dt><span class="term"><strong class="userinput"><code>stats</code></strong></span></dt>
-<dd><p>
- Write server statistics to the statistics file.
- (See the <span class="command"><strong>statistics-file</strong></span> option in
- the BIND 9 Administrator Reference Manual.)
- </p></dd>
-<dt><span class="term"><strong class="userinput"><code>status</code></strong></span></dt>
-<dd><p>
- Display status of the server.
- Note that the number of zones includes the internal <span class="command"><strong>bind/CH</strong></span> zone
- and the default <span class="command"><strong>./IN</strong></span>
- hint zone if there is not an
- explicit root zone configured.
- </p></dd>
-<dt><span class="term"><strong class="userinput"><code>stop [<span class="optional">-p</span>]</code></strong></span></dt>
-<dd>
-<p>
- Stop the server, making sure any recent changes
- made through dynamic update or IXFR are first saved to
- the master files of the updated zones.
- If <code class="option">-p</code> is specified <span class="command"><strong>named</strong></span>'s process id is returned.
- This allows an external process to determine when <span class="command"><strong>named</strong></span>
- had completed stopping.
- </p>
-<p>See also <span class="command"><strong>rndc halt</strong></span>.</p>
-</dd>
-<dt><span class="term"><strong class="userinput"><code>sync [<span class="optional">-clean</span>] [<span class="optional"><em class="replaceable"><code>zone</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em> [<span class="optional"><em class="replaceable"><code>view</code></em></span>]</span>]</span>]</code></strong></span></dt>
-<dd><p>
- Sync changes in the journal file for a dynamic zone
- to the master file. If the "-clean" option is
- specified, the journal file is also removed. If
- no zone is specified, then all zones are synced.
- </p></dd>
-<dt><span class="term"><strong class="userinput"><code>thaw [<span class="optional"><em class="replaceable"><code>zone</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em> [<span class="optional"><em class="replaceable"><code>view</code></em></span>]</span>]</span>]</code></strong></span></dt>
-<dd>
-<p>
- Enable updates to a frozen dynamic zone. If no
- zone is specified, then all frozen zones are
- enabled. This causes the server to reload the zone
- from disk, and re-enables dynamic updates after the
- load has completed. After a zone is thawed,
- dynamic updates will no longer be refused. If
- the zone has changed and the
- <span class="command"><strong>ixfr-from-differences</strong></span> option is
- in use, then the journal file will be updated to
- reflect changes in the zone. Otherwise, if the
- zone has changed, any existing journal file will be
- removed.
- </p>
-<p>See also <span class="command"><strong>rndc freeze</strong></span>.</p>
-</dd>
-<dt><span class="term"><strong class="userinput"><code>trace</code></strong></span></dt>
-<dd><p>
- Increment the servers debugging level by one.
- </p></dd>
-<dt><span class="term"><strong class="userinput"><code>trace <em class="replaceable"><code>level</code></em></code></strong></span></dt>
-<dd>
-<p>
- Sets the server's debugging level to an explicit
- value.
- </p>
-<p>
- See also <span class="command"><strong>rndc notrace</strong></span>.
- </p>
-</dd>
-<dt><span class="term"><strong class="userinput"><code>tsig-delete</code></strong> <em class="replaceable"><code>keyname</code></em> [<span class="optional"><em class="replaceable"><code>view</code></em></span>]</span></dt>
-<dd><p>
- Delete a given TKEY-negotiated key from the server.
- (This does not apply to statically configured TSIG
- keys.)
- </p></dd>
-<dt><span class="term"><strong class="userinput"><code>tsig-list</code></strong></span></dt>
-<dd><p>
- List the names of all TSIG keys currently configured
- for use by <span class="command"><strong>named</strong></span> in each view. The
- list both statically configured keys and dynamic
- TKEY-negotiated keys.
- </p></dd>
-<dt><span class="term"><strong class="userinput"><code>validation ( on | off | check ) [<span class="optional"><em class="replaceable"><code>view ...</code></em></span>] </code></strong></span></dt>
-<dd><p>
- Enable, disable, or check the current status of
- DNSSEC validation.
- Note <span class="command"><strong>dnssec-enable</strong></span> also needs to be
- set to <strong class="userinput"><code>yes</code></strong> or
- <strong class="userinput"><code>auto</code></strong> to be effective.
- It defaults to enabled.
- </p></dd>
-<dt><span class="term"><strong class="userinput"><code>zonestatus <em class="replaceable"><code>zone</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em> [<span class="optional"><em class="replaceable"><code>view</code></em></span>]</span>]</code></strong></span></dt>
-<dd>
-<p>
- Displays the current status of the given zone,
- including the master file name and any include
- files from which it was loaded, when it was most
- recently loaded, the current serial number, the
- number of nodes, whether the zone supports
- dynamic updates, whether the zone is DNSSEC
- signed, whether it uses automatic DNSSEC key
- management or inline signing, and the scheduled
- refresh or expiry times for the zone.
- </p>
-<p>
- See also <span class="command"><strong>rndc showzone</strong></span>.
- </p>
-</dd>
-</dl></div>
-</div>
-<div class="refsection">
-<a name="id-1.14.27.10"></a><h2>LIMITATIONS</h2>
-<p>
- There is currently no way to provide the shared secret for a
- <code class="option">key_id</code> without using the configuration file.
- </p>
-<p>
- Several error messages could be clearer.
- </p>
-</div>
-<div class="refsection">
-<a name="id-1.14.27.11"></a><h2>SEE ALSO</h2>
-<p><span class="citerefentry"><span class="refentrytitle">rndc.conf</span>(5)</span>,
- <span class="citerefentry"><span class="refentrytitle">rndc-confgen</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
- <span class="citerefentry"><span class="refentrytitle">named.conf</span>(5)</span>,
- <span class="citerefentry"><span class="refentrytitle">ndc</span>(8)</span>,
- <em class="citetitle">BIND 9 Administrator Reference Manual</em>.
- </p>
-</div>
-</div>
-<div class="navfooter">
-<hr>
-<table width="100%" summary="Navigation footer">
-<tr>
-<td width="40%" align="left">
-<a accesskey="p" href="man.nsupdate.html">Prev</a> </td>
-<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch13.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.rndc.conf.html">Next</a>
-</td>
-</tr>
-<tr>
-<td width="40%" align="left" valign="top">
-<span class="application">nsupdate</span> </td>
-<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <code class="filename">rndc.conf</code>
-</td>
-</tr>
-</table>
-</div>
-<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0-P3</p>
-</body>
-</html>
diff --git a/doc/arm/managed-keys.xml b/doc/arm/managed-keys.xml
deleted file mode 100644
index 0be33387..00000000
--- a/doc/arm/managed-keys.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-<!--
- - Copyright (C) 2010, 2014-2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
-<!-- Converted by db4-upgrade version 1.0 -->
-<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="rfc5011.support"><info><title>Dynamic Trust Anchor Management</title></info>
-
- <para>BIND 9.7.0 introduces support for RFC 5011, dynamic trust
- anchor management. Using this feature allows
- <command>named</command> to keep track of changes to critical
- DNSSEC keys without any need for the operator to make changes to
- configuration files.</para>
- <section><info><title>Validating Resolver</title></info>
-
- <!-- TODO: command tag is overloaded for configuration and executables -->
- <para>To configure a validating resolver to use RFC 5011 to
- maintain a trust anchor, configure the trust anchor using a
- <command>managed-keys</command> statement. Information about
- this can be found in
- <xref linkend="managed-keys"/>.</para>
- <!-- TODO: managed-keys examples
-also in DNSSEC section above here in ARM -->
- </section>
- <section><info><title>Authoritative Server</title></info>
-
- <para>To set up an authoritative zone for RFC 5011 trust anchor
- maintenance, generate two (or more) key signing keys (KSKs) for
- the zone. Sign the zone with one of them; this is the "active"
- KSK. All KSKs which do not sign the zone are "stand-by"
- keys.</para>
- <para>Any validating resolver which is configured to use the
- active KSK as an RFC 5011-managed trust anchor will take note
- of the stand-by KSKs in the zone's DNSKEY RRset, and store them
- for future reference. The resolver will recheck the zone
- periodically, and after 30 days, if the new key is still there,
- then the key will be accepted by the resolver as a valid trust
- anchor for the zone. Any time after this 30-day acceptance
- timer has completed, the active KSK can be revoked, and the
- zone can be "rolled over" to the newly accepted key.</para>
- <para>The easiest way to place a stand-by key in a zone is to
- use the "smart signing" features of
- <command>dnssec-keygen</command> and
- <command>dnssec-signzone</command>. If a key with a publication
- date in the past, but an activation date which is unset or in
- the future, "
- <command>dnssec-signzone -S</command>" will include the DNSKEY
- record in the zone, but will not sign with it:</para>
- <screen>
-$ <userinput>dnssec-keygen -K keys -f KSK -P now -A now+2y example.net</userinput>
-$ <userinput>dnssec-signzone -S -K keys example.net</userinput>
-</screen>
- <para>To revoke a key, the new command
- <command>dnssec-revoke</command> has been added. This adds the
- REVOKED bit to the key flags and re-generates the
- <filename>K*.key</filename> and
- <filename>K*.private</filename> files.</para>
- <para>After revoking the active key, the zone must be signed
- with both the revoked KSK and the new active KSK. (Smart
- signing takes care of this automatically.)</para>
- <para>Once a key has been revoked and used to sign the DNSKEY
- RRset in which it appears, that key will never again be
- accepted as a valid trust anchor by the resolver. However,
- validation can proceed using the new active key (which had been
- accepted by the resolver when it was a stand-by key).</para>
- <para>See RFC 5011 for more details on key rollover
- scenarios.</para>
- <para>When a key has been revoked, its key ID changes,
- increasing by 128, and wrapping around at 65535. So, for
- example, the key "<filename>Kexample.com.+005+10000</filename>" becomes
- "<filename>Kexample.com.+005+10128</filename>".</para>
- <para>If two keys have IDs exactly 128 apart, and one is
- revoked, then the two key IDs will collide, causing several
- problems. To prevent this,
- <command>dnssec-keygen</command> will not generate a new key if
- another key is present which may collide. This checking will
- only occur if the new keys are written to the same directory
- which holds all other keys in use for that zone.</para>
- <para>Older versions of BIND 9 did not have this precaution.
- Exercise caution if using key revocation on keys that were
- generated by previous releases, or if using keys stored in
- multiple directories or on multiple machines.</para>
- <para>It is expected that a future release of BIND 9 will
- address this problem in a different way, by storing revoked
- keys with their original unrevoked key IDs.</para>
- </section>
-</section>
diff --git a/doc/arm/notes-wrapper.xml b/doc/arm/notes-wrapper.xml
deleted file mode 100644
index 2e1e5058..00000000
--- a/doc/arm/notes-wrapper.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE book [
-<!ENTITY mdash "&#8212;">]>
-<!--
- - Copyright (C) 2014-2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
-<!-- Converted by db4-upgrade version 1.0 -->
-<article xmlns="http://docbook.org/ns/docbook" version="5.0"><info><title/></info>
-
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="notes.xml"/>
-</article>
diff --git a/doc/arm/notes.conf b/doc/arm/notes.conf
deleted file mode 100644
index f8dd8326..00000000
--- a/doc/arm/notes.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-TexInputs: ../tex//
-TexStyle: notestyle
-XslParam: ../xsl/notes-param.xsl
diff --git a/doc/arm/notes.html b/doc/arm/notes.html
deleted file mode 100644
index f37cddf6..00000000
--- a/doc/arm/notes.html
+++ /dev/null
@@ -1,141 +0,0 @@
-<!--
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-<!-- $Id$ -->
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title></title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article"><div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id-1.2"></a>Release Notes for BIND Version 9.11.0-P3</h2></div></div></div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="relnotes_intro"></a>Introduction</h3></div></div></div>
-<p>
- This document summarizes changes since BIND 9.11.0:
- </p>
-<p>
- BIND 9.11.0-P3 addresses the security issue described in
- CVE-2017-3135, and fixes a regression introduced in a prior
- security release.
- </p>
-<p>
- BIND 9.11.0-P2 addresses the security issues described in
- CVE-2016-9131, CVE-2016-9147, CVE-2016-9444 and CVE-2016-9778.
- </p>
-<p>
- BIND 9.11.0-P1 addresses the security issue described in
- CVE-2016-8864.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="relnotes_download"></a>Download</h3></div></div></div>
-<p>
- The latest versions of BIND 9 software can always be found at
- <a class="link" href="http://www.isc.org/downloads/" target="_top">http://www.isc.org/downloads/</a>.
- There you will find additional information about each release,
- source code, and pre-compiled versions for Microsoft Windows
- operating systems.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="relnotes_security"></a>Security Fixes</h3></div></div></div>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem"><p>
- If a server is configured with a response policy zone (RPZ)
- that rewrites an answer with local data, and is also configured
- for DNS64 address mapping, a NULL pointer can be read
- triggering a server crash. This flaw is disclosed in
- CVE-2017-3135. [RT #44434]
- </p></li>
-<li class="listitem"><p>
- A coding error in the <code class="option">nxdomain-redirect</code>
- feature could lead to an assertion failure if the redirection
- namespace was served from a local authoritative data source
- such as a local zone or a DLZ instead of via recursive
- lookup. This flaw is disclosed in CVE-2016-9778. [RT #43837]
- </p></li>
-<li class="listitem"><p>
- <span class="command"><strong>named</strong></span> could mishandle authority sections
- with missing RRSIGs, triggering an assertion failure. This
- flaw is disclosed in CVE-2016-9444. [RT #43632]
- </p></li>
-<li class="listitem"><p>
- <span class="command"><strong>named</strong></span> mishandled some responses where
- covering RRSIG records were returned without the requested
- data, resulting in an assertion failure. This flaw is
- disclosed in CVE-2016-9147. [RT #43548]
- </p></li>
-<li class="listitem"><p>
- <span class="command"><strong>named</strong></span> incorrectly tried to cache TKEY
- records which could trigger an assertion failure when there was
- a class mismatch. This flaw is disclosed in CVE-2016-9131.
- [RT #43522]
- </p></li>
-<li class="listitem"><p>
- It was possible to trigger assertions when processing
- responses containing answers of type DNAME. This flaw is
- disclosed in CVE-2016-8864. [RT #43465]
- </p></li>
-</ul></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="relnotes_features"></a>New Features</h3></div></div></div>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
- None.
- </p></li></ul></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="relnotes_changes"></a>Feature Changes</h3></div></div></div>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
- None.
- </p></li></ul></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="relnotes_port"></a>Porting Changes</h3></div></div></div>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
- None.
- </p></li></ul></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="relnotes_bugs"></a>Bug Fixes</h3></div></div></div>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
- A synthesized CNAME record appearing in a response before the
- associated DNAME could be cached, when it should not have been.
- This was a regression introduced while addressing CVE-2016-8864.
- [RT #44318]
- </p></li></ul></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="end_of_life"></a>End of Life</h3></div></div></div>
-<p>
- The end of life for BIND 9.11 is yet to be determined but
- will not be before BIND 9.13.0 has been released for 6 months.
- <a class="link" href="https://www.isc.org/downloads/software-support-policy/" target="_top">https://www.isc.org/downloads/software-support-policy/</a>
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="relnotes_thanks"></a>Thank You</h3></div></div></div>
-<p>
- Thank you to everyone who assisted us in making this release possible.
- If you would like to contribute to ISC to assist us in continuing to
- make quality open source software, please visit our donations page at
- <a class="link" href="http://www.isc.org/donate/" target="_top">http://www.isc.org/donate/</a>.
- </p>
-</div>
-</div></div></body>
-</html>
diff --git a/doc/arm/notes.pdf b/doc/arm/notes.pdf
deleted file mode 100644
index da77594c..00000000
--- a/doc/arm/notes.pdf
+++ /dev/null
Binary files differ
diff --git a/doc/arm/notes.xml b/doc/arm/notes.xml
deleted file mode 100644
index 9d986bf7..00000000
--- a/doc/arm/notes.xml
+++ /dev/null
@@ -1,156 +0,0 @@
-<!DOCTYPE book [
-<!ENTITY mdash "&#8212;">
-<!ENTITY ouml "&#xf6;">]>
-<!--
- - Copyright (C) 2014-2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
-<section xmlns="http://docbook.org/ns/docbook" version="5.0"><info/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="noteversion.xml"/>
- <section xml:id="relnotes_intro"><info><title>Introduction</title></info>
- <para>
- This document summarizes changes since BIND 9.11.0:
- </para>
- <para>
- BIND 9.11.0-P3 addresses the security issue described in
- CVE-2017-3135, and fixes a regression introduced in a prior
- security release.
- </para>
- <para>
- BIND 9.11.0-P2 addresses the security issues described in
- CVE-2016-9131, CVE-2016-9147, CVE-2016-9444 and CVE-2016-9778.
- </para>
- <para>
- BIND 9.11.0-P1 addresses the security issue described in
- CVE-2016-8864.
- </para>
- </section>
-
- <section xml:id="relnotes_download"><info><title>Download</title></info>
- <para>
- The latest versions of BIND 9 software can always be found at
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.isc.org/downloads/">http://www.isc.org/downloads/</link>.
- There you will find additional information about each release,
- source code, and pre-compiled versions for Microsoft Windows
- operating systems.
- </para>
-
- </section>
-
- <section xml:id="relnotes_security"><info><title>Security Fixes</title></info>
- <itemizedlist>
- <listitem>
- <para>
- If a server is configured with a response policy zone (RPZ)
- that rewrites an answer with local data, and is also configured
- for DNS64 address mapping, a NULL pointer can be read
- triggering a server crash. This flaw is disclosed in
- CVE-2017-3135. [RT #44434]
- </para>
- </listitem>
- <listitem>
- <para>
- A coding error in the <option>nxdomain-redirect</option>
- feature could lead to an assertion failure if the redirection
- namespace was served from a local authoritative data source
- such as a local zone or a DLZ instead of via recursive
- lookup. This flaw is disclosed in CVE-2016-9778. [RT #43837]
- </para>
- </listitem>
- <listitem>
- <para>
- <command>named</command> could mishandle authority sections
- with missing RRSIGs, triggering an assertion failure. This
- flaw is disclosed in CVE-2016-9444. [RT #43632]
- </para>
- </listitem>
- <listitem>
- <para>
- <command>named</command> mishandled some responses where
- covering RRSIG records were returned without the requested
- data, resulting in an assertion failure. This flaw is
- disclosed in CVE-2016-9147. [RT #43548]
- </para>
- </listitem>
- <listitem>
- <para>
- <command>named</command> incorrectly tried to cache TKEY
- records which could trigger an assertion failure when there was
- a class mismatch. This flaw is disclosed in CVE-2016-9131.
- [RT #43522]
- </para>
- </listitem>
- <listitem>
- <para>
- It was possible to trigger assertions when processing
- responses containing answers of type DNAME. This flaw is
- disclosed in CVE-2016-8864. [RT #43465]
- </para>
- </listitem>
- </itemizedlist>
- </section>
-
- <section xml:id="relnotes_features"><info><title>New Features</title></info>
- <itemizedlist>
- <listitem>
- <para>
- None.
- </para>
- </listitem>
- </itemizedlist>
- </section>
-
- <section xml:id="relnotes_changes"><info><title>Feature Changes</title></info>
- <itemizedlist>
- <listitem>
- <para>
- None.
- </para>
- </listitem>
- </itemizedlist>
- </section>
-
- <section xml:id="relnotes_port"><info><title>Porting Changes</title></info>
- <itemizedlist>
- <listitem>
- <para>
- None.
- </para>
- </listitem>
- </itemizedlist>
- </section>
-
- <section xml:id="relnotes_bugs"><info><title>Bug Fixes</title></info>
- <itemizedlist>
- <listitem>
- <para>
- A synthesized CNAME record appearing in a response before the
- associated DNAME could be cached, when it should not have been.
- This was a regression introduced while addressing CVE-2016-8864.
- [RT #44318]
- </para>
- </listitem>
- </itemizedlist>
- </section>
-
- <section xml:id="end_of_life"><info><title>End of Life</title></info>
- <para>
- The end of life for BIND 9.11 is yet to be determined but
- will not be before BIND 9.13.0 has been released for 6 months.
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.isc.org/downloads/software-support-policy/">https://www.isc.org/downloads/software-support-policy/</link>
- </para>
- </section>
-
- <section xml:id="relnotes_thanks"><info><title>Thank You</title></info>
- <para>
- Thank you to everyone who assisted us in making this release possible.
- If you would like to contribute to ISC to assist us in continuing to
- make quality open source software, please visit our donations page at
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.isc.org/donate/">http://www.isc.org/donate/</link>.
- </para>
- </section>
-</section>
diff --git a/doc/arm/noteversion.xml.in b/doc/arm/noteversion.xml.in
deleted file mode 100644
index 581d9414..00000000
--- a/doc/arm/noteversion.xml.in
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
- - Copyright (C) 2015, 2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
-<title>Release Notes for BIND Version @BIND9_VERSION@</title>
diff --git a/doc/arm/pkcs11.xml b/doc/arm/pkcs11.xml
deleted file mode 100644
index 9e6a6b9b..00000000
--- a/doc/arm/pkcs11.xml
+++ /dev/null
@@ -1,628 +0,0 @@
-<!DOCTYPE book [
-<!ENTITY mdash "&#8212;">]>
-<!--
- - Copyright (C) 2010, 2012-2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
-<!-- Converted by db4-upgrade version 1.0 -->
-<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pkcs11"><info><title>PKCS#11 (Cryptoki) support</title></info>
-
- <para>
- PKCS#11 (Public Key Cryptography Standard #11) defines a
- platform-independent API for the control of hardware security
- modules (HSMs) and other cryptographic support devices.
- </para>
- <para>
- BIND 9 is known to work with three HSMs: The AEP Keyper, which has
- been tested with Debian Linux, Solaris x86 and Windows Server 2003;
- the Thales nShield, tested with Debian Linux; and the Sun SCA 6000
- cryptographic acceleration board, tested with Solaris x86. In
- addition, BIND can be used with all current versions of SoftHSM,
- a software-based HSM simulator library produced by the OpenDNSSEC
- project.
- </para>
- <para>
- PKCS#11 makes use of a "provider library": a dynamically loadable
- library which provides a low-level PKCS#11 interface to drive the HSM
- hardware. The PKCS#11 provider library comes from the HSM vendor, and
- it is specific to the HSM to be controlled.
- </para>
- <para>
- There are two available mechanisms for PKCS#11 support in BIND 9:
- OpenSSL-based PKCS#11 and native PKCS#11. When using the first
- mechanism, BIND uses a modified version of OpenSSL, which loads
- the provider library and operates the HSM indirectly; any
- cryptographic operations not supported by the HSM can be carried
- out by OpenSSL instead. The second mechanism enables BIND to bypass
- OpenSSL completely; BIND loads the provider library itself, and uses
- the PKCS#11 API to drive the HSM directly.
- </para>
- <section><info><title>Prerequisites</title></info>
-
- <para>
- See the documentation provided by your HSM vendor for
- information about installing, initializing, testing and
- troubleshooting the HSM.
- </para>
- </section>
- <section><info><title>Native PKCS#11</title></info>
-
- <para>
- Native PKCS#11 mode will only work with an HSM capable of carrying
- out <emphasis>every</emphasis> cryptographic operation BIND 9 may
- need. The HSM's provider library must have a complete implementation
- of the PKCS#11 API, so that all these functions are accessible. As of
- this writing, only the Thales nShield HSM and SoftHSMv2 can be used
- in this fashion. For other HSMs, including the AEP Keyper, Sun SCA
- 6000 and older versions of SoftHSM, use OpenSSL-based PKCS#11.
- (Note: Eventually, when more HSMs become capable of supporting
- native PKCS#11, it is expected that OpenSSL-based PKCS#11 will
- be deprecated.)
- </para>
- <para>
- To build BIND with native PKCS#11, configure as follows:
- </para>
- <screen>
-$ <userinput>cd bind9</userinput>
-$ <userinput>./configure --enable-native-pkcs11 \
- --with-pkcs11=<replaceable>provider-library-path</replaceable></userinput>
- </screen>
- <para>
- This will cause all BIND tools, including <command>named</command>
- and the <command>dnssec-*</command> and <command>pkcs11-*</command>
- tools, to use the PKCS#11 provider library specified in
- <replaceable>provider-library-path</replaceable> for cryptography.
- (The provider library path can be overridden using the
- <option>-E</option> in <command>named</command> and the
- <command>dnssec-*</command> tools, or the <option>-m</option> in
- the <command>pkcs11-*</command> tools.)
- </para>
- <section><info><title>Building SoftHSMv2</title></info>
-
- <para>
- SoftHSMv2, the latest development version of SoftHSM, is available
- from
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://github.com/opendnssec/SoftHSMv2">
- https://github.com/opendnssec/SoftHSMv2
- </link>.
- It is a software library developed by the OpenDNSSEC project
- (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.opendnssec.org">
- http://www.opendnssec.org
- </link>)
- which provides a PKCS#11 interface to a virtual HSM, implemented in
- the form of a SQLite3 database on the local filesystem. It provides
- less security than a true HSM, but it allows you to experiment with
- native PKCS#11 when an HSM is not available. SoftHSMv2 can be
- configured to use either OpenSSL or the Botan library to perform
- cryptographic functions, but when using it for native PKCS#11 in
- BIND, OpenSSL is required.
- </para>
- <para>
- By default, the SoftHSMv2 configuration file is
- <replaceable>prefix</replaceable>/etc/softhsm2.conf (where
- <replaceable>prefix</replaceable> is configured at compile time).
- This location can be overridden by the SOFTHSM2_CONF environment
- variable. The SoftHSMv2 cryptographic store must be installed and
- initialized before using it with BIND.
- </para>
- <screen>
-$ <userinput> cd SoftHSMv2 </userinput>
-$ <userinput> configure --with-crypto-backend=openssl --prefix=/opt/pkcs11/usr --enable-gost </userinput>
-$ <userinput> make </userinput>
-$ <userinput> make install </userinput>
-$ <userinput> /opt/pkcs11/usr/bin/softhsm-util --init-token 0 --slot 0 --label softhsmv2 </userinput>
- </screen>
- </section>
- </section>
- <section><info><title>OpenSSL-based PKCS#11</title></info>
-
- <para>
- OpenSSL-based PKCS#11 mode uses a modified version of the
- OpenSSL library; stock OpenSSL does not fully support PKCS#11.
- ISC provides a patch to OpenSSL to correct this. This patch is
- based on work originally done by the OpenSolaris project; it has been
- modified by ISC to provide new features such as PIN management and
- key-by-reference.
- </para>
- <para>
- There are two "flavors" of PKCS#11 support provided by
- the patched OpenSSL, one of which must be chosen at
- configuration time. The correct choice depends on the HSM
- hardware:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Use 'crypto-accelerator' with HSMs that have hardware
- cryptographic acceleration features, such as the SCA 6000
- board. This causes OpenSSL to run all supported
- cryptographic operations in the HSM.
- </para>
- </listitem>
- <listitem>
- <para>
- Use 'sign-only' with HSMs that are designed to
- function primarily as secure key storage devices, but lack
- hardware acceleration. These devices are highly secure, but
- are not necessarily any faster at cryptography than the
- system CPU &mdash; often, they are slower. It is therefore
- most efficient to use them only for those cryptographic
- functions that require access to the secured private key,
- such as zone signing, and to use the system CPU for all
- other computationally-intensive operations. The AEP Keyper
- is an example of such a device.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- The modified OpenSSL code is included in the BIND 9 release,
- in the form of a context diff against the latest versions of
- OpenSSL. OpenSSL 0.9.8, 1.0.0, 1.0.1 and 1.0.2 are supported;
- there are separate diffs for each version. In the examples to
- follow, we use OpenSSL 0.9.8, but the same methods work with
- OpenSSL 1.0.0 through 1.0.2.
- </para>
- <note><simpara>
- The OpenSSL patches as of this writing (January 2016)
- support versions 0.9.8zh, 1.0.0t, 1.0.1q and 1.0.2f.
- ISC will provide updated patches as new versions of OpenSSL
- are released. The version number in the following examples
- is expected to change.
- </simpara></note>
- <para>
- Before building BIND 9 with PKCS#11 support, it will be
- necessary to build OpenSSL with the patch in place, and configure
- it with the path to your HSM's PKCS#11 provider library.
- </para>
- <section><info><title>Patching OpenSSL</title></info>
-
- <screen>
-$ <userinput>wget <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="">http://www.openssl.org/source/openssl-0.9.8zc.tar.gz</link></userinput>
- </screen>
- <para>Extract the tarball:</para>
- <screen>
-$ <userinput>tar zxf openssl-0.9.8zc.tar.gz</userinput>
-</screen>
- <para>Apply the patch from the BIND 9 release:</para>
- <screen>
-$ <userinput>patch -p1 -d openssl-0.9.8zc \
- &lt; bind9/bin/pkcs11/openssl-0.9.8zc-patch</userinput>
-</screen>
- <note><simpara>
- The patch file may not be compatible with the
- "patch" utility on all operating systems. You may need to
- install GNU patch.
- </simpara></note>
- <para>
- When building OpenSSL, place it in a non-standard
- location so that it does not interfere with OpenSSL libraries
- elsewhere on the system. In the following examples, we choose
- to install into "/opt/pkcs11/usr". We will use this location
- when we configure BIND 9.
- </para>
- <para>
- Later, when building BIND 9, the location of the custom-built
- OpenSSL library will need to be specified via configure.
- </para>
- </section>
- <section><info><title>Building OpenSSL for the AEP Keyper on Linux</title></info>
- <!-- Example 1 -->
-
- <para>
- The AEP Keyper is a highly secure key storage device,
- but does not provide hardware cryptographic acceleration. It
- can carry out cryptographic operations, but it is probably
- slower than your system's CPU. Therefore, we choose the
- 'sign-only' flavor when building OpenSSL.
- </para>
- <para>
- The Keyper-specific PKCS#11 provider library is
- delivered with the Keyper software. In this example, we place
- it /opt/pkcs11/usr/lib:
- </para>
- <screen>
-$ <userinput>cp pkcs11.GCC4.0.2.so.4.05 /opt/pkcs11/usr/lib/libpkcs11.so</userinput>
-</screen>
- <para>
- The Keyper library requires threads, so we
- must specify -pthread.
- </para>
- <screen>
-$ <userinput>cd openssl-0.9.8zc</userinput>
-$ <userinput>./Configure linux-x86_64 -pthread \
- --pk11-libname=/opt/pkcs11/usr/lib/libpkcs11.so \
- --pk11-flavor=sign-only \
- --prefix=/opt/pkcs11/usr</userinput>
-</screen>
- <para>
- After configuring, run "<command>make</command>"
- and "<command>make test</command>". If "<command>make
- test</command>" fails with "pthread_atfork() not found", you forgot to
- add the -pthread above.
- </para>
- </section>
- <section><info><title>Building OpenSSL for the SCA 6000 on Solaris</title></info>
- <!-- Example 2 -->
-
- <para>
- The SCA-6000 PKCS#11 provider is installed as a system
- library, libpkcs11. It is a true crypto accelerator, up to 4
- times faster than any CPU, so the flavor shall be
- 'crypto-accelerator'.
- </para>
- <para>
- In this example, we are building on Solaris x86 on an
- AMD64 system.
- </para>
- <screen>
-$ <userinput>cd openssl-0.9.8zc</userinput>
-$ <userinput>./Configure solaris64-x86_64-cc \
- --pk11-libname=/usr/lib/64/libpkcs11.so \
- --pk11-flavor=crypto-accelerator \
- --prefix=/opt/pkcs11/usr</userinput>
-</screen>
- <para>
- (For a 32-bit build, use "solaris-x86-cc" and /usr/lib/libpkcs11.so.)
- </para>
- <para>
- After configuring, run
- <command>make</command> and
- <command>make test</command>.
- </para>
- </section>
- <section><info><title>Building OpenSSL for SoftHSM</title></info>
- <!-- Example 3 -->
-
- <para>
- SoftHSM (version 1) is a software library developed by the
- OpenDNSSEC project
- (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.opendnssec.org">
- http://www.opendnssec.org
- </link>)
- which provides a
- PKCS#11 interface to a virtual HSM, implemented in the form of
- a SQLite3 database on the local filesystem. SoftHSM uses
- the Botan library to perform cryptographic functions. Though
- less secure than a true HSM, it can allow you to experiment
- with PKCS#11 when an HSM is not available.
- </para>
- <para>
- The SoftHSM cryptographic store must be installed and
- initialized before using it with OpenSSL, and the SOFTHSM_CONF
- environment variable must always point to the SoftHSM configuration
- file:
- </para>
- <screen>
-$ <userinput> cd softhsm-1.3.7 </userinput>
-$ <userinput> configure --prefix=/opt/pkcs11/usr </userinput>
-$ <userinput> make </userinput>
-$ <userinput> make install </userinput>
-$ <userinput> export SOFTHSM_CONF=/opt/pkcs11/softhsm.conf </userinput>
-$ <userinput> echo "0:/opt/pkcs11/softhsm.db" &gt; $SOFTHSM_CONF </userinput>
-$ <userinput> /opt/pkcs11/usr/bin/softhsm --init-token 0 --slot 0 --label softhsm </userinput>
-</screen>
- <para>
- SoftHSM can perform all cryptographic operations, but
- since it only uses your system CPU, there is no advantage to using
- it for anything but signing. Therefore, we choose the 'sign-only'
- flavor when building OpenSSL.
- </para>
- <screen>
-$ <userinput>cd openssl-0.9.8zc</userinput>
-$ <userinput>./Configure linux-x86_64 -pthread \
- --pk11-libname=/opt/pkcs11/usr/lib/libsofthsm.so \
- --pk11-flavor=sign-only \
- --prefix=/opt/pkcs11/usr</userinput>
-</screen>
- <para>
- After configuring, run "<command>make</command>"
- and "<command>make test</command>".
- </para>
- </section>
- <para>
- Once you have built OpenSSL, run
- "<command>apps/openssl engine pkcs11</command>" to confirm
- that PKCS#11 support was compiled in correctly. The output
- should be one of the following lines, depending on the flavor
- selected:
- </para>
- <screen>
- (pkcs11) PKCS #11 engine support (sign only)
-</screen>
- <para>Or:</para>
- <screen>
- (pkcs11) PKCS #11 engine support (crypto accelerator)
-</screen>
- <para>
- Next, run
- "<command>apps/openssl engine pkcs11 -t</command>". This will
- attempt to initialize the PKCS#11 engine. If it is able to
- do so successfully, it will report
- <quote><literal>[ available ]</literal></quote>.
- </para>
- <para>
- If the output is correct, run
- "<command>make install</command>" which will install the
- modified OpenSSL suite to <filename>/opt/pkcs11/usr</filename>.
- </para>
- <section><info><title>Configuring BIND 9 for Linux with the AEP Keyper</title></info>
- <!-- Example 4 -->
-
- <para>
- To link with the PKCS#11 provider, threads must be
- enabled in the BIND 9 build.
- </para>
- <screen>
-$ <userinput>cd ../bind9</userinput>
-$ <userinput>./configure --enable-threads \
- --with-openssl=/opt/pkcs11/usr \
- --with-pkcs11=/opt/pkcs11/usr/lib/libpkcs11.so</userinput>
-</screen>
- </section>
- <section><info><title>Configuring BIND 9 for Solaris with the SCA 6000</title></info>
- <!-- Example 5 -->
-
- <para>
- To link with the PKCS#11 provider, threads must be
- enabled in the BIND 9 build.
- </para>
- <screen>
-$ <userinput>cd ../bind9</userinput>
-$ <userinput>./configure CC="cc -xarch=amd64" --enable-threads \
- --with-openssl=/opt/pkcs11/usr \
- --with-pkcs11=/usr/lib/64/libpkcs11.so</userinput>
-</screen>
- <para>(For a 32-bit build, omit CC="cc -xarch=amd64".)</para>
- <para>
- If configure complains about OpenSSL not working, you
- may have a 32/64-bit architecture mismatch. Or, you may have
- incorrectly specified the path to OpenSSL (it should be the
- same as the --prefix argument to the OpenSSL
- Configure).
- </para>
- </section>
- <section><info><title>Configuring BIND 9 for SoftHSM</title></info>
- <!-- Example 6 -->
-
- <screen>
-$ <userinput>cd ../bind9</userinput>
-$ <userinput>./configure --enable-threads \
- --with-openssl=/opt/pkcs11/usr \
- --with-pkcs11=/opt/pkcs11/usr/lib/libsofthsm.so</userinput>
-</screen>
- </section>
- <para>
- After configuring, run
- "<command>make</command>",
- "<command>make test</command>" and
- "<command>make install</command>".
- </para>
- <para>
- (Note: If "make test" fails in the "pkcs11" system test, you may
- have forgotten to set the SOFTHSM_CONF environment variable.)
- </para>
- </section>
- <section><info><title>PKCS#11 Tools</title></info>
-
- <para>
- BIND 9 includes a minimal set of tools to operate the
- HSM, including
- <command>pkcs11-keygen</command> to generate a new key pair
- within the HSM,
- <command>pkcs11-list</command> to list objects currently
- available,
- <command>pkcs11-destroy</command> to remove objects, and
- <command>pkcs11-tokens</command> to list available tokens.
- </para>
- <para>
- In UNIX/Linux builds, these tools are built only if BIND
- 9 is configured with the --with-pkcs11 option. (Note: If
- --with-pkcs11 is set to "yes", rather than to the path of the
- PKCS#11 provider, then the tools will be built but the
- provider will be left undefined. Use the -m option or the
- PKCS11_PROVIDER environment variable to specify the path to the
- provider.)
- </para>
- </section>
- <section><info><title>Using the HSM</title></info>
-
- <para>
- For OpenSSL-based PKCS#11, we must first set up the runtime
- environment so the OpenSSL and PKCS#11 libraries can be loaded:
- </para>
- <screen>
-$ <userinput>export LD_LIBRARY_PATH=/opt/pkcs11/usr/lib:${LD_LIBRARY_PATH}</userinput>
-</screen>
- <para>
- This causes <command>named</command> and other binaries to load
- the OpenSSL library from <filename>/opt/pkcs11/usr/lib</filename>
- rather than from the default location. This step is not necessary
- when using native PKCS#11.
- </para>
- <para>
- Some HSMs require other environment variables to be set.
- For example, when operating an AEP Keyper, it is necessary to
- specify the location of the "machine" file, which stores
- information about the Keyper for use by the provider
- library. If the machine file is in
- <filename>/opt/Keyper/PKCS11Provider/machine</filename>,
- use:
- </para>
- <screen>
-$ <userinput>export KEYPER_LIBRARY_PATH=/opt/Keyper/PKCS11Provider</userinput>
-</screen>
- <para>
- Such environment variables must be set whenever running
- any tool that uses the HSM, including
- <command>pkcs11-keygen</command>,
- <command>pkcs11-list</command>,
- <command>pkcs11-destroy</command>,
- <command>dnssec-keyfromlabel</command>,
- <command>dnssec-signzone</command>,
- <command>dnssec-keygen</command>, and
- <command>named</command>.
- </para>
- <para>
- We can now create and use keys in the HSM. In this case,
- we will create a 2048 bit key and give it the label
- "sample-ksk":
- </para>
- <screen>
-$ <userinput>pkcs11-keygen -b 2048 -l sample-ksk</userinput>
-</screen>
- <para>To confirm that the key exists:</para>
- <screen>
-$ <userinput>pkcs11-list</userinput>
-Enter PIN:
-object[0]: handle 2147483658 class 3 label[8] 'sample-ksk' id[0]
-object[1]: handle 2147483657 class 2 label[8] 'sample-ksk' id[0]
-</screen>
- <para>
- Before using this key to sign a zone, we must create a
- pair of BIND 9 key files. The "dnssec-keyfromlabel" utility
- does this. In this case, we will be using the HSM key
- "sample-ksk" as the key-signing key for "example.net":
- </para>
- <screen>
-$ <userinput>dnssec-keyfromlabel -l sample-ksk -f KSK example.net</userinput>
-</screen>
- <para>
- The resulting K*.key and K*.private files can now be used
- to sign the zone. Unlike normal K* files, which contain both
- public and private key data, these files will contain only the
- public key data, plus an identifier for the private key which
- remains stored within the HSM. Signing with the private key takes
- place inside the HSM.
- </para>
- <para>
- If you wish to generate a second key in the HSM for use
- as a zone-signing key, follow the same procedure above, using a
- different keylabel, a smaller key size, and omitting "-f KSK"
- from the dnssec-keyfromlabel arguments:
- </para>
- <para>
- (Note: When using OpenSSL-based PKCS#11 the label is an arbitrary
- string which identifies the key. With native PKCS#11, the label is
- a PKCS#11 URI string which may include other details about the key
- and the HSM, including its PIN. See
- <xref linkend="man.dnssec-keyfromlabel"/> for details.)
- </para>
- <screen>
-$ <userinput>pkcs11-keygen -b 1024 -l sample-zsk</userinput>
-$ <userinput>dnssec-keyfromlabel -l sample-zsk example.net</userinput>
-</screen>
- <para>
- Alternatively, you may prefer to generate a conventional
- on-disk key, using dnssec-keygen:
- </para>
- <screen>
-$ <userinput>dnssec-keygen example.net</userinput>
-</screen>
- <para>
- This provides less security than an HSM key, but since
- HSMs can be slow or cumbersome to use for security reasons, it
- may be more efficient to reserve HSM keys for use in the less
- frequent key-signing operation. The zone-signing key can be
- rolled more frequently, if you wish, to compensate for a
- reduction in key security. (Note: When using native PKCS#11,
- there is no speed advantage to using on-disk keys, as cryptographic
- operations will be done by the HSM regardless.)
- </para>
- <para>
- Now you can sign the zone. (Note: If not using the -S
- option to <command>dnssec-signzone</command>, it will be
- necessary to add the contents of both <filename>K*.key</filename>
- files to the zone master file before signing it.)
- </para>
- <screen>
-$ <userinput>dnssec-signzone -S example.net</userinput>
-Enter PIN:
-Verifying the zone using the following algorithms:
-NSEC3RSASHA1.
-Zone signing complete:
-Algorithm: NSEC3RSASHA1: ZSKs: 1, KSKs: 1 active, 0 revoked, 0 stand-by
-example.net.signed
-</screen>
- </section>
- <section><info><title>Specifying the engine on the command line</title></info>
-
- <para>
- When using OpenSSL-based PKCS#11, the "engine" to be used by
- OpenSSL can be specified in <command>named</command> and all of
- the BIND <command>dnssec-*</command> tools by using the "-E
- &lt;engine&gt;" command line option. If BIND 9 is built with
- the --with-pkcs11 option, this option defaults to "pkcs11".
- Specifying the engine will generally not be necessary unless
- for some reason you wish to use a different OpenSSL
- engine.
- </para>
- <para>
- If you wish to disable use of the "pkcs11" engine &mdash;
- for troubleshooting purposes, or because the HSM is unavailable
- &mdash; set the engine to the empty string. For example:
- </para>
- <screen>
-$ <userinput>dnssec-signzone -E '' -S example.net</userinput>
-</screen>
- <para>
- This causes
- <command>dnssec-signzone</command> to run as if it were compiled
- without the --with-pkcs11 option.
- </para>
- <para>
- When built with native PKCS#11 mode, the "engine" option has a
- different meaning: it specifies the path to the PKCS#11 provider
- library. This may be useful when testing a new provider library.
- </para>
- </section>
- <section><info><title>Running named with automatic zone re-signing</title></info>
-
- <para>
- If you want <command>named</command> to dynamically re-sign zones
- using HSM keys, and/or to to sign new records inserted via nsupdate,
- then <command>named</command> must have access to the HSM PIN. In OpenSSL-based PKCS#11,
- this is accomplished by placing the PIN into the openssl.cnf file
- (in the above examples,
- <filename>/opt/pkcs11/usr/ssl/openssl.cnf</filename>).
- </para>
- <para>
- The location of the openssl.cnf file can be overridden by
- setting the OPENSSL_CONF environment variable before running
- <command>named</command>.
- </para>
- <para>Sample openssl.cnf:</para>
- <programlisting>
- openssl_conf = openssl_def
- [ openssl_def ]
- engines = engine_section
- [ engine_section ]
- pkcs11 = pkcs11_section
- [ pkcs11_section ]
- PIN = <replaceable>&lt;PLACE PIN HERE&gt;</replaceable>
-</programlisting>
- <para>
- This will also allow the dnssec-* tools to access the HSM
- without PIN entry. (The pkcs11-* tools access the HSM directly,
- not via OpenSSL, so a PIN will still be required to use
- them.)
- </para>
- <para>
- In native PKCS#11 mode, the PIN can be provided in a file specified
- as an attribute of the key's label. For example, if a key had the label
- <userinput>pkcs11:object=local-zsk;pin-source=/etc/hsmpin</userinput>,
- then the PIN would be read from the file
- <filename>/etc/hsmpin</filename>.
- </para>
- <warning>
- <para>
- Placing the HSM's PIN in a text file in this manner may reduce the
- security advantage of using an HSM. Be sure this is what you want to
- do before configuring the system in this way.
- </para>
- </warning>
- </section>
-</section>
diff --git a/doc/arm/pkgversion.xml.in b/doc/arm/pkgversion.xml.in
deleted file mode 100644
index 508fb7f7..00000000
--- a/doc/arm/pkgversion.xml.in
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
- - Copyright (C) 2015, 2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
- <para>This version of the manual corresponds to BIND version @PACKAGE_VERSION@.</para>
diff --git a/doc/arm/releaseinfo.xml.in b/doc/arm/releaseinfo.xml.in
deleted file mode 100644
index 4200cb67..00000000
--- a/doc/arm/releaseinfo.xml.in
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
- - Copyright (C) 2015, 2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
-<releaseinfo>BIND Version @BIND9_VERSION@</releaseinfo>
diff --git a/doc/doxygen/Doxyfile.in b/doc/doxygen/Doxyfile.in
deleted file mode 100644
index 620e3b0e..00000000
--- a/doc/doxygen/Doxyfile.in
+++ /dev/null
@@ -1,1269 +0,0 @@
-# $Id: Doxyfile.in,v 1.2 2006/12/22 01:44:59 marka Exp $
-
-# Doxyfile 1.4.7
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
-#
-# All text after a hash (#) is considered a comment and will be ignored
-# The format is:
-# TAG = value [value, ...]
-# For lists items can also be appended using:
-# TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
-# by quotes) that should identify the project.
-
-PROJECT_NAME = "BIND9 Internals"
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number.
-# This could be handy for archiving the generated documentation or
-# if some version control system is used.
-
-PROJECT_NUMBER = $(BIND9_VERSION)
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
-# base path where the generated documentation will be put.
-# If a relative path is entered, it will be relative to the location
-# where doxygen was started. If left blank the current directory will be used.
-
-OUTPUT_DIRECTORY =
-
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
-# 4096 sub-directories (in 2 levels) under the output directory of each output
-# format and will distribute the generated files over these directories.
-# Enabling this option can be useful when feeding doxygen a huge amount of
-# source files, where putting all generated files in the same directory would
-# otherwise cause performance problems for the file system.
-
-CREATE_SUBDIRS = NO
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# The default language is English, other supported languages are:
-# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish,
-# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese,
-# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian,
-# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish,
-# Swedish, and Ukrainian.
-
-OUTPUT_LANGUAGE = English
-
-# This tag can be used to specify the encoding used in the generated output.
-# The encoding is not always determined by the language that is chosen,
-# but also whether or not the output is meant for Windows or non-Windows users.
-# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES
-# forces the Windows encoding (this is the default for the Windows binary),
-# whereas setting the tag to NO uses a Unix-style encoding (the default for
-# all platforms other than Windows).
-
-USE_WINDOWS_ENCODING = NO
-
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
-# include brief member descriptions after the members that are listed in
-# the file and class documentation (similar to JavaDoc).
-# Set to NO to disable this.
-
-BRIEF_MEMBER_DESC = YES
-
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
-# the brief description of a member or function before the detailed description.
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-# brief descriptions will be completely suppressed.
-
-REPEAT_BRIEF = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator
-# that is used to form the text in various listings. Each string
-# in this list, if found as the leading text of the brief description, will be
-# stripped from the text and the result after processing the whole list, is
-# used as the annotated text. Otherwise, the brief description is used as-is.
-# If left blank, the following values are used ("$name" is automatically
-# replaced with the name of the entity): "The $name class" "The $name widget"
-# "The $name file" "is" "provides" "specifies" "contains"
-# "represents" "a" "an" "the"
-
-ABBREVIATE_BRIEF =
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# Doxygen will generate a detailed section even if there is only a brief
-# description.
-
-ALWAYS_DETAILED_SEC = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-# inherited members of a class in the documentation of that class as if those
-# members were ordinary class members. Constructors, destructors and assignment
-# operators of the base classes will not be shown.
-
-INLINE_INHERITED_MEMB = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
-# path before files name in the file list and in the header files. If set
-# to NO the shortest path that makes the file name unique will be used.
-
-FULL_PATH_NAMES = YES
-
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-# can be used to strip a user-defined part of the path. Stripping is
-# only done if one of the specified strings matches the left-hand part of
-# the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the
-# path to strip.
-
-STRIP_FROM_PATH = @BIND9_TOP_BUILDDIR@/
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
-# the path mentioned in the documentation of a class, which tells
-# the reader which header file to include in order to use a class.
-# If left blank only the name of the header file containing the class
-# definition is used. Otherwise one should specify the include paths that
-# are normally passed to the compiler using the -I flag.
-
-STRIP_FROM_INC_PATH =
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-# (but less readable) file names. This can be useful is your file systems
-# doesn't support long names like on DOS, Mac, or CD-ROM.
-
-SHORT_NAMES = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-# will interpret the first line (until the first dot) of a JavaDoc-style
-# comment as the brief description. If set to NO, the JavaDoc
-# comments will behave just like the Qt-style comments (thus requiring an
-# explicit @brief command for a brief description.
-
-JAVADOC_AUTOBRIEF = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
-# treat a multi-line C++ special comment block (i.e. a block of //! or ///
-# comments) as a brief description. This used to be the default behaviour.
-# The new default is to treat a multi-line C++ comment block as a detailed
-# description. Set this tag to YES if you prefer the old behaviour instead.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the DETAILS_AT_TOP tag is set to YES then Doxygen
-# will output the detailed description near the top, like JavaDoc.
-# If set to NO, the detailed description appears after the member
-# documentation.
-
-DETAILS_AT_TOP = NO
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
-# member inherits the documentation from any documented member that it
-# re-implements.
-
-INHERIT_DOCS = YES
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
-# a new page for each member. If set to NO, the documentation of a member will
-# be part of the file/class/namespace that contains it.
-
-SEPARATE_MEMBER_PAGES = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab.
-# Doxygen uses this value to replace tabs by spaces in code fragments.
-
-TAB_SIZE = 8
-
-# This tag can be used to specify a number of aliases that acts
-# as commands in the documentation. An alias has the form "name=value".
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to
-# put the command \sideeffect (or @sideeffect) in the documentation, which
-# will result in a user-defined paragraph with heading "Side Effects:".
-# You can put \n's in the value part of an alias to insert newlines.
-
-ALIASES =
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
-# sources only. Doxygen will then generate output that is more tailored for C.
-# For instance, some of the names that are used will be different. The list
-# of all members will be omitted, etc.
-
-OPTIMIZE_OUTPUT_FOR_C = YES
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
-# sources only. Doxygen will then generate output that is more tailored for Java.
-# For instance, namespaces will be presented as packages, qualified scopes
-# will look different, etc.
-
-OPTIMIZE_OUTPUT_JAVA = NO
-
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to
-# include (a tag file for) the STL sources as input, then you should
-# set this tag to YES in order to let doxygen match functions declarations and
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
-# func(std::string) {}). This also make the inheritance and collaboration
-# diagrams that involve STL classes more complete and accurate.
-
-BUILTIN_STL_SUPPORT = NO
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-
-DISTRIBUTE_GROUP_DOC = YES
-
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
-# the same type (for instance a group of public functions) to be put as a
-# subgroup of that type (e.g. under the Public Functions section). Set it to
-# NO to prevent subgrouping. Alternatively, this can be done per class using
-# the \nosubgrouping command.
-
-SUBGROUPING = YES
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-# documentation are documented, even if no documentation was available.
-# Private class members and static file members will be hidden unless
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-
-EXTRACT_ALL = YES
-
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
-# will be included in the documentation.
-
-EXTRACT_PRIVATE = YES
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file
-# will be included in the documentation.
-
-EXTRACT_STATIC = YES
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
-# defined locally in source files will be included in the documentation.
-# If set to NO only classes defined in header files are included.
-
-EXTRACT_LOCAL_CLASSES = YES
-
-# This flag is only useful for Objective-C code. When set to YES local
-# methods, which are defined in the implementation section but not in
-# the interface are included in the documentation.
-# If set to NO (the default) only methods in the interface are included.
-
-EXTRACT_LOCAL_METHODS = YES
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
-# undocumented members of documented classes, files or namespaces.
-# If set to NO (the default) these members will be included in the
-# various overviews, but no documentation section is generated.
-# This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_MEMBERS = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy.
-# If set to NO (the default) these classes will be included in the various
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_CLASSES = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
-# friend (class|struct|union) declarations.
-# If set to NO (the default) these declarations will be included in the
-# documentation.
-
-HIDE_FRIEND_COMPOUNDS = NO
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
-# documentation blocks found inside the body of a function.
-# If set to NO (the default) these blocks will be appended to the
-# function's detailed documentation block.
-
-HIDE_IN_BODY_DOCS = NO
-
-# The INTERNAL_DOCS tag determines if documentation
-# that is typed after a \internal command is included. If the tag is set
-# to NO (the default) then the documentation will be excluded.
-# Set it to YES to include the internal documentation.
-
-INTERNAL_DOCS = NO
-
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
-# file names in lower-case letters. If set to YES upper-case letters are also
-# allowed. This is useful if you have classes or files whose names only differ
-# in case and if your file system supports case sensitive file names. Windows
-# and Mac users are advised to set this option to NO.
-
-CASE_SENSE_NAMES = YES
-
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
-# will show members with their full class and namespace scopes in the
-# documentation. If set to YES the scope will be hidden.
-
-HIDE_SCOPE_NAMES = NO
-
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
-# will put a list of the files that are included by a file in the documentation
-# of that file.
-
-SHOW_INCLUDE_FILES = YES
-
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
-# is inserted in the documentation for inline members.
-
-INLINE_INFO = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
-# will sort the (detailed) documentation of file and class members
-# alphabetically by member name. If set to NO the members will appear in
-# declaration order.
-
-SORT_MEMBER_DOCS = NO
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
-# brief documentation of file, namespace and class members alphabetically
-# by member name. If set to NO (the default) the members will appear in
-# declaration order.
-
-SORT_BRIEF_DOCS = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
-# sorted by fully-qualified names, including namespaces. If set to
-# NO (the default), the class list will be sorted only by class name,
-# not including the namespace part.
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the
-# alphabetical list.
-
-SORT_BY_SCOPE_NAME = NO
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or
-# disable (NO) the todo list. This list is created by putting \todo
-# commands in the documentation.
-
-GENERATE_TODOLIST = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or
-# disable (NO) the test list. This list is created by putting \test
-# commands in the documentation.
-
-GENERATE_TESTLIST = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or
-# disable (NO) the bug list. This list is created by putting \bug
-# commands in the documentation.
-
-GENERATE_BUGLIST = YES
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
-# disable (NO) the deprecated list. This list is created by putting
-# \deprecated commands in the documentation.
-
-GENERATE_DEPRECATEDLIST= YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional
-# documentation sections, marked by \if sectionname ... \endif.
-
-ENABLED_SECTIONS =
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or define consists of for it to appear in
-# the documentation. If the initializer consists of more lines than specified
-# here it will be hidden. Use a value of 0 to hide initializers completely.
-# The appearance of the initializer of individual variables and defines in the
-# documentation can be controlled using \showinitializer or \hideinitializer
-# command in the documentation regardless of this setting.
-
-MAX_INITIALIZER_LINES = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
-# at the bottom of the documentation of classes and structs. If set to YES the
-# list will mention the files that were used to generate the documentation.
-
-SHOW_USED_FILES = YES
-
-# If the sources in your project are distributed over multiple directories
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
-# in the documentation. The default is NO.
-
-SHOW_DIRECTORIES = YES
-
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that
-# doxygen should invoke to get the current version for each file (typically from the
-# version control system). Doxygen will invoke the program by executing (via
-# popen()) the command <command> <input-file>, where <command> is the value of
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
-# provided by doxygen. Whatever the program writes to standard output
-# is used as the file version. See the manual for examples.
-
-FILE_VERSION_FILTER =
-
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
-
-QUIET = NO
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated by doxygen. Possible values are YES and NO. If left blank
-# NO is used.
-
-WARNINGS = YES
-
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
-# automatically be disabled.
-
-WARN_IF_UNDOCUMENTED = YES
-
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some
-# parameters in a documented function, or documenting parameters that
-# don't exist or using markup commands wrongly.
-
-WARN_IF_DOC_ERROR = YES
-
-# This WARN_NO_PARAMDOC option can be abled to get warnings for
-# functions that are documented, but have no documentation for their parameters
-# or return value. If set to NO (the default) doxygen will only warn about
-# wrong or incomplete parameter documentation, but not about the absence of
-# documentation.
-
-WARN_NO_PARAMDOC = YES
-
-# The WARN_FORMAT tag determines the format of the warning messages that
-# doxygen can produce. The string should contain the $file, $line, and $text
-# tags, which will be replaced by the file and line number from which the
-# warning originated and the warning text. Optionally the format may contain
-# $version, which will be replaced by the version of the file (if it could
-# be obtained via FILE_VERSION_FILTER)
-
-WARN_FORMAT = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning
-# and error messages should be written. If left blank the output is written
-# to stderr.
-
-WARN_LOGFILE =
-
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag can be used to specify the files and/or directories that contain
-# documented source files. You may enter file names like "myfile.cpp" or
-# directories like "/usr/src/myproject". Separate the files or directories
-# with spaces.
-
-INPUT = @BIND9_TOP_BUILDDIR@/lib/isc \
- @BIND9_TOP_BUILDDIR@/lib/dns \
- @BIND9_TOP_BUILDDIR@/lib/isccfg \
- @BIND9_TOP_BUILDDIR@/lib/isccc \
- @BIND9_TOP_BUILDDIR@/lib/bind9 \
- @BIND9_TOP_BUILDDIR@/bin/check \
- @BIND9_TOP_BUILDDIR@/bin/dig \
- @BIND9_TOP_BUILDDIR@/bin/dnssec \
- @BIND9_TOP_BUILDDIR@/bin/named \
- @BIND9_TOP_BUILDDIR@/bin/nsupdate \
- @BIND9_TOP_BUILDDIR@/bin/rndc \
- @BIND9_TOP_BUILDDIR@/doc/doxygen/mainpage
-
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank the following patterns are tested:
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
-
-FILE_PATTERNS = *.c *.h *.dox
-
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories
-# should be searched for input files as well. Possible values are YES and NO.
-# If left blank NO is used.
-
-RECURSIVE = YES
-
-# The EXCLUDE tag can be used to specify files and/or directories that should
-# excluded from the INPUT source files. This way you can easily exclude a
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-
-EXCLUDE =
-
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
-# directories that are symbolic links (a Unix filesystem feature) are excluded
-# from the input.
-
-EXCLUDE_SYMLINKS = NO
-
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories. Note that the wildcards are matched
-# against the file with absolute path, so to exclude all test directories
-# for example use the pattern */test/*
-
-EXCLUDE_PATTERNS = */win32/* */lib/dns/gen* */lib/dns/rdata/*.h
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or
-# directories that contain example code fragments that are included (see
-# the \include command).
-
-EXAMPLE_PATH =
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank all files are included.
-
-EXAMPLE_PATTERNS = *
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude
-# commands irrespective of the value of the RECURSIVE tag.
-# Possible values are YES and NO. If left blank NO is used.
-
-EXAMPLE_RECURSIVE = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or
-# directories that contain image that are included in the documentation (see
-# the \image command).
-
-IMAGE_PATH =
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command <filter> <input-file>, where <filter>
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
-# input file. Doxygen will then use the output that the filter program writes
-# to standard output. If FILTER_PATTERNS is specified, this tag will be
-# ignored.
-
-INPUT_FILTER = ./doxygen-input-filter
-
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis. Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match. The filters are a list of the form:
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
-# is applied to all files.
-
-FILTER_PATTERNS =
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will be used to filter the input files when producing source
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
-
-FILTER_SOURCE_FILES = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will
-# be generated. Documented entities will be cross-referenced with these sources.
-# Note: To get rid of all source code in the generated output, make sure also
-# VERBATIM_HEADERS is set to NO.
-
-SOURCE_BROWSER = YES
-
-# Setting the INLINE_SOURCES tag to YES will include the body
-# of functions and classes directly in the documentation.
-
-INLINE_SOURCES = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
-# doxygen to hide any special comment blocks from generated source code
-# fragments. Normal C and C++ comments will always remain visible.
-
-STRIP_CODE_COMMENTS = NO
-
-# If the REFERENCED_BY_RELATION tag is set to YES (the default)
-# then for each documented function all documented
-# functions referencing it will be listed.
-
-REFERENCED_BY_RELATION = YES
-
-# If the REFERENCES_RELATION tag is set to YES (the default)
-# then for each documented function all documented entities
-# called/used by that function will be listed.
-
-REFERENCES_RELATION = YES
-
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
-# link to the source code. Otherwise they will link to the documentstion.
-
-REFERENCES_LINK_SOURCE = YES
-
-# If the USE_HTAGS tag is set to YES then the references to source code
-# will point to the HTML generated by the htags(1) tool instead of doxygen
-# built-in source browser. The htags tool is part of GNU's global source
-# tagging system (see http://www.gnu.org/software/global/global.html). You
-# will need version 4.8.6 or higher.
-
-USE_HTAGS = NO
-
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
-# will generate a verbatim copy of the header file for each class for
-# which an include is specified. Set to NO to disable this.
-
-VERBATIM_HEADERS = YES
-
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
-# of all compounds will be generated. Enable this if the project
-# contains a lot of classes, structs, unions or interfaces.
-
-ALPHABETICAL_INDEX = YES
-
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
-# in which this list will be split (can be a number in the range [1..20])
-
-COLS_IN_ALPHA_INDEX = 5
-
-# In case all classes in a project start with a common prefix, all
-# classes will be put under the same header in the alphabetical index.
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
-# should be ignored while generating the index headers.
-
-IGNORE_PREFIX =
-
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
-# generate HTML output.
-
-GENERATE_HTML = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `html' will be used as the default path.
-
-HTML_OUTPUT = html
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
-# doxygen will generate files with .html extension.
-
-HTML_FILE_EXTENSION = .html
-
-# The HTML_HEADER tag can be used to specify a personal HTML header for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard header.
-
-HTML_HEADER = isc-header.html
-
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard footer.
-
-HTML_FOOTER = isc-footer.html
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
-# style sheet that is used by each HTML page. It can be used to
-# fine-tune the look of the HTML output. If the tag is left blank doxygen
-# will generate a default style sheet. Note that doxygen will try to copy
-# the style sheet file to the HTML output directory, so don't put your own
-# stylesheet in the HTML output directory as well, or it will be erased!
-
-HTML_STYLESHEET =
-
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
-# files or namespaces will be aligned in HTML using tables. If set to
-# NO a bullet list will be used.
-
-HTML_ALIGN_MEMBERS = YES
-
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files
-# will be generated that can be used as input for tools like the
-# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
-# of the generated HTML documentation.
-
-GENERATE_HTMLHELP = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
-# be used to specify the file name of the resulting .chm file. You
-# can add a path in front of the file if the result should not be
-# written to the html output directory.
-
-CHM_FILE =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
-# be used to specify the location (absolute path including file name) of
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
-# the HTML help compiler on the generated index.hhp.
-
-HHC_LOCATION =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
-# controls if a separate .chi index file is generated (YES) or that
-# it should be included in the master .chm file (NO).
-
-GENERATE_CHI = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
-# controls whether a binary table of contents is generated (YES) or a
-# normal table of contents (NO) in the .chm file.
-
-BINARY_TOC = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members
-# to the contents of the HTML help documentation and to the tree view.
-
-TOC_EXPAND = NO
-
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
-# top of each HTML page. The value NO (the default) enables the index and
-# the value YES disables it.
-
-DISABLE_INDEX = NO
-
-# This tag can be used to set the number of enum values (range [1..20])
-# that doxygen will group on one line in the generated HTML documentation.
-
-ENUM_VALUES_PER_LINE = 4
-
-# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
-# generated containing a tree-like index structure (just like the one that
-# is generated for HTML Help). For this to work a browser that supports
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
-# probably better off using the HTML help feature.
-
-GENERATE_TREEVIEW = NO
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
-# used to set the initial width (in pixels) of the frame in which the tree
-# is shown.
-
-TREEVIEW_WIDTH = 250
-
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
-# generate Latex output.
-
-GENERATE_LATEX = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `latex' will be used as the default path.
-
-LATEX_OUTPUT = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked. If left blank `latex' will be used as the default command name.
-
-LATEX_CMD_NAME = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
-# generate index for LaTeX. If left blank `makeindex' will be used as the
-# default command name.
-
-MAKEINDEX_CMD_NAME = makeindex
-
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
-# LaTeX documents. This may be useful for small projects and may help to
-# save some trees in general.
-
-COMPACT_LATEX = YES
-
-# The PAPER_TYPE tag can be used to set the paper type that is used
-# by the printer. Possible values are: a4, a4wide, letter, legal and
-# executive. If left blank a4wide will be used.
-
-PAPER_TYPE = letter
-
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
-# packages that should be included in the LaTeX output.
-
-EXTRA_PACKAGES =
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
-# the generated latex document. The header should contain everything until
-# the first chapter. If it is left blank doxygen will generate a
-# standard header. Notice: only use this tag if you know what you are doing!
-
-LATEX_HEADER =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will
-# contain links (just like the HTML output) instead of page references
-# This makes the output suitable for online browsing using a pdf viewer.
-
-PDF_HYPERLINKS = NO
-
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
-# plain latex in the generated Makefile. Set this option to YES to get a
-# higher quality PDF documentation.
-
-USE_PDFLATEX = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
-# command to the generated LaTeX files. This will instruct LaTeX to keep
-# running if errors occur, instead of asking the user for help.
-# This option is also used when generating formulas in HTML.
-
-LATEX_BATCHMODE = YES
-
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not
-# include the index chapters (such as File Index, Compound Index, etc.)
-# in the output.
-
-LATEX_HIDE_INDICES = YES
-
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
-# The RTF output is optimized for Word 97 and may not look very pretty with
-# other RTF readers or editors.
-
-GENERATE_RTF = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `rtf' will be used as the default path.
-
-RTF_OUTPUT = rtf
-
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
-# RTF documents. This may be useful for small projects and may help to
-# save some trees in general.
-
-COMPACT_RTF = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
-# will contain hyperlink fields. The RTF file will
-# contain links (just like the HTML output) instead of page references.
-# This makes the output suitable for online browsing using WORD or other
-# programs which support those fields.
-# Note: wordpad (write) and others do not support links.
-
-RTF_HYPERLINKS = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's
-# config file, i.e. a series of assignments. You only have to provide
-# replacements, missing definitions are set to their default value.
-
-RTF_STYLESHEET_FILE =
-
-# Set optional variables used in the generation of an rtf document.
-# Syntax is similar to doxygen's config file.
-
-RTF_EXTENSIONS_FILE =
-
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
-# generate man pages
-
-GENERATE_MAN = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `man' will be used as the default path.
-
-MAN_OUTPUT = man
-
-# The MAN_EXTENSION tag determines the extension that is added to
-# the generated man pages (default is the subroutine's section .3)
-
-MAN_EXTENSION = .3
-
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
-# then it will generate one additional man file for each entity
-# documented in the real man page(s). These additional files
-# only source the real man page, but without them the man command
-# would be unable to find the correct page. The default is NO.
-
-MAN_LINKS = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES Doxygen will
-# generate an XML file that captures the structure of
-# the code including all documentation.
-
-GENERATE_XML = YES
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `xml' will be used as the default path.
-
-XML_OUTPUT = xml
-
-# The XML_SCHEMA tag can be used to specify an XML schema,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_SCHEMA =
-
-# The XML_DTD tag can be used to specify an XML DTD,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_DTD =
-
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
-# dump the program listings (including syntax highlighting
-# and cross-referencing information) to the XML output. Note that
-# enabling this will significantly increase the size of the XML output.
-
-XML_PROGRAMLISTING = YES
-
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
-# generate an AutoGen Definitions (see autogen.sf.net) file
-# that captures the structure of the code including all
-# documentation. Note that this feature is still experimental
-# and incomplete at the moment.
-
-GENERATE_AUTOGEN_DEF = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will
-# generate a Perl module file that captures the structure of
-# the code including all documentation. Note that this
-# feature is still experimental and incomplete at the
-# moment.
-
-GENERATE_PERLMOD = NO
-
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able
-# to generate PDF and DVI output from the Perl module output.
-
-PERLMOD_LATEX = NO
-
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
-# nicely formatted so it can be parsed by a human reader. This is useful
-# if you want to understand what is going on. On the other hand, if this
-# tag is set to NO the size of the Perl module output will be much smaller
-# and Perl will parse it just the same.
-
-PERLMOD_PRETTY = YES
-
-# The names of the make variables in the generated doxyrules.make file
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
-# This is useful so different doxyrules.make files included by the same
-# Makefile don't overwrite each other's variables.
-
-PERLMOD_MAKEVAR_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
-# evaluate all C-preprocessor directives found in the sources and include
-# files.
-
-ENABLE_PREPROCESSING = YES
-
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
-# names in the source code. If set to NO (the default) only conditional
-# compilation will be performed. Macro expansion can be done in a controlled
-# way by setting EXPAND_ONLY_PREDEF to YES.
-
-MACRO_EXPANSION = NO
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
-# then the macro expansion is limited to the macros specified with the
-# PREDEFINED and EXPAND_AS_DEFINED tags.
-
-EXPAND_ONLY_PREDEF = NO
-
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
-
-SEARCH_INCLUDES = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by
-# the preprocessor.
-
-INCLUDE_PATH =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will
-# be used.
-
-INCLUDE_FILE_PATTERNS =
-
-# The PREDEFINED tag can be used to specify one or more macro names that
-# are defined before the preprocessor is started (similar to the -D option of
-# gcc). The argument of the tag is a list of macros of the form: name
-# or name=definition (no spaces). If the definition and the = are
-# omitted =1 is assumed. To prevent a macro definition from being
-# undefined via #undef or recursively expanded use the := operator
-# instead of the = operator.
-
-PREDEFINED =
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
-# this tag can be used to specify a list of macro names that should be expanded.
-# The macro definition that is found in the sources will be used.
-# Use the PREDEFINED tag if you want to use a different macro definition.
-
-EXPAND_AS_DEFINED =
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
-# doxygen's preprocessor will remove all function-like macros that are alone
-# on a line, have an all uppercase name, and do not end with a semicolon. Such
-# function macros are typically used for boiler-plate code, and will confuse
-# the parser if not removed.
-
-SKIP_FUNCTION_MACROS = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES option can be used to specify one or more tagfiles.
-# Optionally an initial location of the external documentation
-# can be added for each tagfile. The format of a tag file without
-# this location is as follows:
-# TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-# TAGFILES = file1=loc1 "file2 = loc2" ...
-# where "loc1" and "loc2" can be relative or absolute paths or
-# URLs. If a location is present for each tag, the installdox tool
-# does not have to be run to correct the links.
-# Note that each tag file must have a unique name
-# (where the name does NOT include the path)
-# If a tag file is not located in the directory in which doxygen
-# is run, you must also specify the path to the tagfile here.
-
-TAGFILES =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create
-# a tag file that is based on the input files it reads.
-
-GENERATE_TAGFILE =
-
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed
-# in the class index. If set to NO only the inherited external classes
-# will be listed.
-
-ALLEXTERNALS = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will
-# be listed.
-
-EXTERNAL_GROUPS = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of `which perl').
-
-PERL_PATH = @PERL@
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
-# or super classes. Setting the tag to NO turns the diagrams off. Note that
-# this option is superseded by the HAVE_DOT option below. This is only a
-# fallback. It is recommended to install and use dot, since it yields more
-# powerful graphs.
-
-CLASS_DIAGRAMS = YES
-
-# If set to YES, the inheritance and collaboration graphs will hide
-# inheritance and usage relations if the target is undocumented
-# or is not a class.
-
-HIDE_UNDOC_RELATIONS = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz, a graph visualization
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section
-# have no effect if this option is set to NO (the default)
-
-HAVE_DOT = NO
-
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect inheritance relations. Setting this tag to YES will force the
-# the CLASS_DIAGRAMS tag to NO.
-
-CLASS_GRAPH = YES
-
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect implementation dependencies (inheritance, containment, and
-# class references variables) of the class with other documented classes.
-
-COLLABORATION_GRAPH = YES
-
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for groups, showing the direct groups dependencies
-
-GROUP_GRAPHS = YES
-
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-
-UML_LOOK = NO
-
-# If set to YES, the inheritance and collaboration graphs will show the
-# relations between templates and their instances.
-
-TEMPLATE_RELATIONS = NO
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
-# tags are set to YES then doxygen will generate a graph for each documented
-# file showing the direct and indirect include dependencies of the file with
-# other documented files.
-
-INCLUDE_GRAPH = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
-# documented header file showing the documented files that directly or
-# indirectly include this file.
-
-INCLUDED_BY_GRAPH = YES
-
-# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
-# generate a call dependency graph for every global function or class method.
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command.
-
-CALL_GRAPH = NO
-
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will
-# generate a caller dependency graph for every global function or class method.
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable caller graphs for selected
-# functions only using the \callergraph command.
-
-CALLER_GRAPH = YES
-
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
-# will graphical hierarchy of all classes instead of a textual one.
-
-GRAPHICAL_HIERARCHY = YES
-
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
-# then doxygen will show the dependencies a directory has on other directories
-# in a graphical way. The dependency relations are determined by the #include
-# relations between the files in the directories.
-
-DIRECTORY_GRAPH = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. Possible values are png, jpg, or gif
-# If left blank png will be used.
-
-DOT_IMAGE_FORMAT = png
-
-# The tag DOT_PATH can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found in the path.
-
-DOT_PATH =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the
-# \dotfile command).
-
-DOTFILE_DIRS =
-
-# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than
-# this value, doxygen will try to truncate the graph, so that it fits within
-# the specified constraint. Beware that most browsers cannot cope with very
-# large images.
-
-MAX_DOT_GRAPH_WIDTH = 1024
-
-# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than
-# this value, doxygen will try to truncate the graph, so that it fits within
-# the specified constraint. Beware that most browsers cannot cope with very
-# large images.
-
-MAX_DOT_GRAPH_HEIGHT = 1024
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
-# graphs generated by dot. A depth value of 3 means that only nodes reachable
-# from the root by following a path via at most 3 edges will be shown. Nodes
-# that lay further from the root node will be omitted. Note that setting this
-# option to 1 or 2 may greatly reduce the computation time needed for large
-# code bases. Also note that a graph may be further truncated if the graph's
-# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH
-# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default),
-# the graph is not depth-constrained.
-
-MAX_DOT_GRAPH_DEPTH = 1000
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, which results in a white background.
-# Warning: Depending on the platform used, enabling this option may lead to
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
-# read).
-
-DOT_TRANSPARENT = NO
-
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10)
-# support this, this feature is disabled by default.
-
-DOT_MULTI_TARGETS = YES
-
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
-# generate a legend page explaining the meaning of the various boxes and
-# arrows in the dot generated graphs.
-
-GENERATE_LEGEND = YES
-
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
-# remove the intermediate dot files that are used to generate
-# the various graphs.
-
-DOT_CLEANUP = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine
-#---------------------------------------------------------------------------
-
-# The SEARCHENGINE tag specifies whether or not a search engine should be
-# used. If set to NO the values of all tags below this one will be ignored.
-
-SEARCHENGINE = NO
-
-# Local Variables:
-# compile-command: "doxygen"
-# End:
diff --git a/doc/doxygen/Makefile.in b/doc/doxygen/Makefile.in
deleted file mode 100644
index 43e79037..00000000
--- a/doc/doxygen/Makefile.in
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright (C) 2006, 2007, 2012, 2015, 2016 Internet Systems Consortium, Inc. ("ISC")
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# $Id: Makefile.in,v 1.4 2007/06/19 23:47:13 tbox Exp $
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-top_srcdir = @top_srcdir@
-
-SUBDIRS =
-TARGETS =
-
-@BIND9_MAKE_RULES@
-
-VERSION=@BIND9_VERSION@
-
-# Until and unless we decide to ship all umptyzillion Doxygen output
-# files, distclean for this directory implies docclean.
-
-doc docclean distclean::
- rm -rf html xml
-
-doc::
- BIND9_VERSION='${VERSION}' @DOXYGEN@
-
-distclean::
- rm -f Doxyfile doxygen-input-filter
diff --git a/doc/doxygen/doxygen-input-filter.in b/doc/doxygen/doxygen-input-filter.in
deleted file mode 100644
index 2a356866..00000000
--- a/doc/doxygen/doxygen-input-filter.in
+++ /dev/null
@@ -1,52 +0,0 @@
-#!@PERL@ -w
-#
-# Copyright (C) 2006, 2007, 2012, 2016 Internet Systems Consortium, Inc. ("ISC")
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# $Id: doxygen-input-filter.in,v 1.4 2007/06/19 23:47:13 tbox Exp $
-
-# Input filter for feeding our source code into Doxygen.
-
-# Slurp whole file at once
-undef $/;
-$_ = <>;
-
-# It turns out that there are a lot of cases where we'd really like to
-# use what Doxygen calls "brief" documentation in a comment. Doxygen
-# has a shorthand way of doing this -- if one is writing C++. ISC
-# coding conventions require C, not C++, so we have to do it the
-# verbose way, which makes a lot of comments too long to fit on a
-# single line without violating another ISC coding standard (80
-# character line limit).
-#
-# So we use Doxygen's input filter mechanism to define our own
-# brief comment convention:
-#
-# /*% foo */
-#
-# expands to
-#
-# /*! \brief foo */
-#
-# and
-#
-# /*%< foo */
-#
-# expands to
-#
-# /*!< \brief foo */
-#
-s{/\*%(<?)}{/*!$1 \\brief }g;
-
-# Doxygen appears to strip trailing newlines when reading files
-# directly but not when reading from an input filter. Go figure.
-# Future versions of Doxygen might change this, be warned.
-#
-s{\n+\z}{};
-
-# Done, send the result to Doxygen.
-#
-print;
diff --git a/doc/doxygen/isc-footer.html b/doc/doxygen/isc-footer.html
deleted file mode 100644
index 90a0b7e5..00000000
--- a/doc/doxygen/isc-footer.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!--
- - Copyright (C) 2006, 2007, 2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
-<!-- $Id: isc-footer.html,v 1.5 2007/06/19 23:47:13 tbox Exp $ -->
-
-<!-- $Id -->
-
- <hr size="1">
- <address style="align: right;">
- <small>
- Generated on $datetime by Doxygen $doxygenversion for $projectname $projectnumber
- </small>
- </address>
- </body>
-</html>
diff --git a/doc/doxygen/isc-header.html b/doc/doxygen/isc-header.html
deleted file mode 100644
index b3ea268e..00000000
--- a/doc/doxygen/isc-header.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
- - Copyright (C) 2006, 2007, 2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
-<!-- $Id: isc-header.html,v 1.5 2007/06/19 23:47:13 tbox Exp $ -->
-
-<html>
- <head>
- <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
- <title>$title</title>
- <link href="$relpath$doxygen.css" rel="stylesheet" type="text/css">
- <link href="$relpath$tabs.css" rel="stylesheet" type="text/css">
- </head>
- <body>
diff --git a/doc/doxygen/mainpage b/doc/doxygen/mainpage
deleted file mode 100644
index 990c4a7b..00000000
--- a/doc/doxygen/mainpage
+++ /dev/null
@@ -1,85 +0,0 @@
-// -*- C++ -*-
-// $Id: mainpage,v 1.2 2006/12/22 01:44:59 marka Exp $
-//
-// Doxygen text. Lines beginning with two slashes are comments; lines
-// beginning with three slashes are Doxygen input.
-
-/// \mainpage
-/// \section mainpage_overview Overview
-/// \par
-///
-/// This is the beginning of an internals manual for BIND9. It's
-/// still very rough in many places.
-///
-/// \li See the files in doc/doxygen for the source to this page and
-/// the Doxygen configuration that generates the rest of the manual.
-///
-/// \li See the tabs at the top of the screen to navigate through the
-/// generated documentation.
-///
-/// \li See <a href="http://www.doxygen.org/">the Doxygen web site</a>
-/// for more information about Doxygen, including its manual.
-///
-/// \section mainpage_knownissues Known Issues
-/// \par
-///
-/// Known issues with our current use of Doxygen:
-///
-/// \li In a major departure from previous attempts to use Doxygen
-/// with BIND9, this manual attempts to take the simplest approach
-/// to every choice Doxygen gives us. We don't generate fancy
-/// extra Doxygen tags files from the RFC database. We don't
-/// attempt to use Doxygen as a wrapper framework for other
-/// documentation (eg, ISC Tech Notes, the ARM, ...). We don't
-/// try to generate the list of files to document on the fly.
-/// Instead, we attempt to use Doxygen's native facilities
-/// wherever possible, on the assumption that we'll add new
-/// features later as we need them but should start as simply as
-/// we can.
-///
-/// \li Our use of \\file is wrong in many places. We probably should
-/// be marking header files with the names by which we include
-/// them (eg, "dns/resolver.h"). Doxygen reports filename
-/// conflicts in a few cases where it can't work out which of
-/// several files to use.
-///
-/// \li At the moment we're instructing Doxygen to document all
-/// functions, whether they have proper comment markup or not.
-/// This is a good way to see what's been marked up, but might not
-/// be the right approach in the long run.
-///
-/// \li See doc/doxygen/doxygen-input-filter.in for local abbreviations.
-///
-/// \li We're probably over-using the \\brief markup tag.
-///
-/// \li We may in fact be confusing Doxygen to the point where it's
-/// not finding markup comments that it should. Needs
-/// investigation.
-///
-/// \li At the moment I have all the cool "dot" stuff turned off,
-/// both because it's a distraction and because it slows down
-/// doxygen runs. Maybe after I get a faster desk machine. :)
-///
-/// \li At the moment we're producing a single "BIND9 Internals"
-/// manual. One of our previous complications was an attempt to
-/// produce separate manuals for each library, then cross-link
-/// them. We might still need separate library manuals, but, if
-/// so, it might be easier to have the BIND9 Internals manual be a
-/// superset of the library manuals (ie, reuse the same source to
-/// produce differently scoped manuals). Would certainly be
-/// simpler than the cross-linking mess, but partly it's a
-/// question of how we want to present the material.
-///
-/// \li Doxygen is slanted towards C++. It can be tuned towards plain
-/// old C, but the C++ bias still shows up in places, eg, the lack
-/// of top-level menu support for functions (in C++, the basic
-/// unit of programming is the class, which Doxygen does support
-/// directly). This is a bit annoying, but not all that
-/// critical.
-///
-/// \li If we ever get really ambitious, we might try processing
-/// Doxygen's XML output, which is basicly a dump of what Doxygen
-/// was able to scrape from the sources. This would be a major
-/// project, just something to think about if there's something we
-/// really don't like about the output Doxygen generates. Punt
-/// for now.
diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in
deleted file mode 100644
index 0345a7d5..00000000
--- a/doc/misc/Makefile.in
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright (C) 2001, 2004, 2007, 2009, 2012, 2016 Internet Systems Consortium, Inc. ("ISC")
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# $Id: Makefile.in,v 1.9 2009/07/10 23:47:58 tbox Exp $
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-top_srcdir = @top_srcdir@
-
-@BIND9_MAKE_RULES@
-
-PERL = @PERL@
-
-MANOBJS = options
-
-doc man:: ${MANOBJS}
-
-docclean manclean maintainer-clean::
- rm -f options
-
-# Do not make options depend on ../../bin/tests/cfg_test, doing so
-# will cause excessively clever versions of make to attempt to build
-# that program right here, right now, if it is missing, which will
-# cause make doc to bomb.
-
-CFG_TEST = ../../bin/tests/cfg_test
-
-options: FORCE
- if test -x ${CFG_TEST} ; \
- then \
- ${CFG_TEST} --named --grammar > $@.raw ; \
- ${PERL} ${srcdir}/sort-options.pl < $@.raw > $@.sorted ; \
- ${PERL} ${srcdir}/format-options.pl < $@.sorted > $@.new ; \
- mv -f $@.new $@ ; \
- rm -f $@.raw $@.sorted ; \
- else \
- rm -f $@.new $@.raw $@.sorted ; \
- fi
diff --git a/doc/misc/dnssec b/doc/misc/dnssec
deleted file mode 100644
index b577d127..00000000
--- a/doc/misc/dnssec
+++ /dev/null
@@ -1,86 +0,0 @@
-Copyright (C) 2000-2002, 2004, 2016 Internet Systems Consortium, Inc. ("ISC")
-
-This Source Code Form is subject to the terms of the Mozilla Public
-License, v. 2.0. If a copy of the MPL was not distributed with this
-file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-DNSSEC Release Notes
-
-This document summarizes the state of the DNSSEC implementation in
-this release of BIND9.
-
-
-OpenSSL Library Required
-
-To support DNSSEC, BIND 9 must be linked with version 0.9.6e or newer of
-the OpenSSL library. As of BIND 9.2, the library is no longer
-included in the distribution - it must be provided by the operating
-system or installed separately.
-
-To build BIND 9 with OpenSSL, use "configure --with-openssl". If
-the OpenSSL library is installed in a nonstandard location, you can
-specify a path as in "configure --with-openssl=/var".
-
-
-Key Generation and Signing
-
-The tools for generating DNSSEC keys and signatures are now in the
-bin/dnssec directory. Documentation for these programs can be found
-in doc/arm/Bv9ARM.4.html and the man pages.
-
-The random data used in generating DNSSEC keys and signatures comes
-from either /dev/random (if the OS supports it) or keyboard input.
-Alternatively, a device or file containing entropy/random data can be
-specified.
-
-
-Serving Secure Zones
-
-When acting as an authoritative name server, BIND9 includes KEY, SIG
-and NXT records in responses as specified in RFC2535 when the request
-has the DO flag set in the query.
-
-
-Secure Resolution
-
-Basic support for validation of DNSSEC signatures in responses has
-been implemented but should still be considered experimental.
-
-When acting as a caching name server, BIND9 is capable of performing
-basic DNSSEC validation of positive as well as nonexistence responses.
-This functionality is enabled by including a "trusted-keys" clause
-in the configuration file, containing the top-level zone key of the
-the DNSSEC tree.
-
-Validation of wildcard responses is not currently supported. In
-particular, a "name does not exist" response will validate
-successfully even if it does not contain the NXT records to prove the
-nonexistence of a matching wildcard.
-
-Proof of insecure status for insecure zones delegated from secure
-zones works when the zones are completely insecure. Privately
-secured zones delegated from secure zones will not work in all cases,
-such as when the privately secured zone is served by the same server
-as an ancestor (but not parent) zone.
-
-Handling of the CD bit in queries is now fully implemented. Validation
-is not attempted for recursive queries if CD is set.
-
-
-Secure Dynamic Update
-
-Dynamic update of secure zones has been implemented, but may not be
-complete. Affected NXT and SIG records are updated by the server when
-an update occurs. Advanced access control is possible using the
-"update-policy" statement in the zone definition.
-
-
-Secure Zone Transfers
-
-BIND 9 does not implement the zone transfer security mechanisms of
-RFC2535 section 5.6, and we have no plans to implement them in the
-future as we consider them inferior to the use of TSIG or SIG(0) to
-ensure the integrity of zone transfers.
-
-
-$Id: dnssec,v 1.19 2004/03/05 05:04:53 marka Exp $
diff --git a/doc/misc/format-options.pl b/doc/misc/format-options.pl
deleted file mode 100644
index fcbc8e63..00000000
--- a/doc/misc/format-options.pl
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/perl
-#
-# Copyright (C) 2001, 2004, 2007, 2012, 2016 Internet Systems Consortium, Inc. ("ISC")
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# $Id: format-options.pl,v 1.5 2007/09/24 04:21:59 marka Exp $
-
-print <<END;
-
-This is a summary of the named.conf options supported by
-this version of BIND 9.
-
-END
-
-# Break long lines
-while (<>) {
- chomp;
- s/\t/ /g;
- my $line = $_;
- m!^( *)!;
- my $indent = $1;
- my $comment = "";
- if ( $line =~ m!//.*! ) {
- $comment = $&;
- $line =~ s!//.*!!;
- }
- my $start = "";
- while (length($line) >= 79 - length($comment)) {
- $_ = $line;
- # this makes sure that the comment has something in front of it
- $len = 75 - length($comment);
- m!^(.{0,$len}) (.*)$!;
- $start = $start.$1."\n";
- $line = $indent." ".$2;
- }
- print $start.$line.$comment."\n";
-}
diff --git a/doc/misc/ipv6 b/doc/misc/ipv6
deleted file mode 100644
index 5f05db9e..00000000
--- a/doc/misc/ipv6
+++ /dev/null
@@ -1,115 +0,0 @@
-Copyright (C) 2000, 2001, 2004, 2016 Internet Systems Consortium, Inc. ("ISC")
-
-This Source Code Form is subject to the terms of the Mozilla Public
-License, v. 2.0. If a copy of the MPL was not distributed with this
-file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-Currently, there are multiple interesting problems with ipv6
-implementations on various platforms. These problems range from not
-being able to use ipv6 with bind9 (or in particular the ISC socket
-library, contained in libisc) to listen-on lists not being respected,
-to strange warnings but seemingly correct behavior of named.
-
-COMPILE-TIME ISSUES
--------------------
-
-The socket library requires a certain level of support from the
-operating system. In particular, it must follow the advanced ipv6
-socket API to be usable. The systems which do not follow this will
-currently not get any warnings or errors, but ipv6 will simply not
-function on them.
-
-These systems currently include, but are not limited to:
-
- AIX 3.4 (with ipv6 patches)
-
-
-RUN-TIME ISSUES
----------------
-
-In the original drafts of the ipv6 RFC documents, binding an ipv6
-socket to the ipv6 wildcard address would also cause the socket to
-accept ipv4 connections and datagrams. When an ipv4 packet is
-received on these systems, it is mapped into an ipv6 address. For
-example, 1.2.3.4 would be mapped into ::ffff:1.2.3.4. The intent of
-this mapping was to make transition from an ipv4-only application into
-ipv6 easier, by only requiring one socket to be open on a given port.
-
-Later, it was discovered that this was generally a bad idea. For one,
-many firewalls will block connection to 1.2.3.4, but will let through
-::ffff:1.2.3.4. This, of course, is bad. Also, access control lists
-written to accept only ipv4 addresses were suddenly ignored unless
-they were rewritten to handle the ipv6 mapped addresses as well.
-
-Partly because of these problems, the latest IPv6 API introduces an
-explicit knob (the "IPV6_V6ONLY" socket option ) to turn off the ipv6
-mapped address usage.
-
-In bind9, we first check if both the advanced API and the IPV6_V6ONLY
-socket option are available. If both of them are available, bind9
-named will bind to the ipv6 wildcard port for both TCP and UDP.
-Otherwise named will make a warning and try to bind to all available
-ipv6 addresses separately.
-
-In any case, bind9 named binds to specific addresses for ipv4 sockets.
-
-The followings are historical notes when we always bound to the ipv6
-wildcard port regardless of the availability of the API support.
-These problems should not happen with the closer checks above.
-
-
-IPV6 Sockets Accept IPV4, Specific IPV4 Addresses Bindings Fail
----------------------------------------------------------------
-
-The only OS which seems to do this is (some kernel versions of) linux.
-If an ipv6 socket is bound to the ipv6 wildcard socket, and a specific
-ipv4 socket is later bound (say, to 1.2.3.4 port 53) the ipv4 binding
-will fail.
-
-What this means to bind9 is that the application will log warnings
-about being unable to bind to a socket because the address is already
-in use. Since the ipv6 socket will accept ipv4 packets and map them,
-however, the ipv4 addresses continue to function.
-
-The effect is that the config file listen-on directive will not be
-respected on these systems.
-
-
-IPV6 Sockets Accept IPV4, Specific IPV4 Address Bindings Succeed
-----------------------------------------------------------------
-
-In this case, the system allows opening an ipv6 wildcard address
-socket and then binding to a more specific ipv4 address later. An
-example of this type of system is Digital Unix with ipv6 patches
-applied.
-
-What this means to bind9 is that the application will respect
-listen-on in regards to ipv4 sockets, but it will use mapped ipv6
-addresses for any that do not match the listen-on list. This, in
-effect, makes listen-on useless for these machines as well.
-
-
-IPV6 Sockets Do Not Accept IPV4
--------------------------------
-
-On these systems, opening an IPV6 socket does not implicitly open any
-ipv4 sockets. An example of these systems are NetBSD-current with the
-latest KAME patch, and other systems which use the latest KAME patches
-as their ipv6 implementation.
-
-On these systems, listen-on is fully functional, as the ipv6 socket
-only accepts ipv6 packets, and the ipv4 sockets will handle the ipv4
-packets.
-
-
-RELEVANT RFCs
--------------
-
-3513: Internet Protocol Version 6 (IPv6) Addressing Architecture
-
-3493: Basic Socket Interface Extensions for IPv6
-
-3542: Advanced Sockets Application Program Interface (API) for IPv6
-
-
-$Id: ipv6,v 1.9 2004/08/10 04:27:51 jinmei Exp $
diff --git a/doc/misc/migration b/doc/misc/migration
deleted file mode 100644
index d20d2a9c..00000000
--- a/doc/misc/migration
+++ /dev/null
@@ -1,269 +0,0 @@
-Copyright (C) 2000, 2001, 2003, 2004, 2007, 2008, 2016 Internet Systems Consortium, Inc. ("ISC")
-
-This Source Code Form is subject to the terms of the Mozilla Public
-License, v. 2.0. If a copy of the MPL was not distributed with this
-file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
- BIND 8 to BIND 9 Migration Notes
-
-BIND 9 is designed to be mostly upwards compatible with BIND 8, but
-there is still a number of caveats you should be aware of when
-upgrading an existing BIND 8 installation to use BIND 9.
-
-
-1. Configuration File Compatibility
-
-1.1. Unimplemented Options and Changed Defaults
-
-BIND 9 supports most, but not all of the named.conf options of BIND 8.
-For a complete list of implemented options, see doc/misc/options.
-
-If your named.conf file uses an unimplemented option, named will log a
-warning message. A message is also logged about each option whose
-default has changed unless the option is set explicitly in named.conf.
-
-The default of the "transfer-format" option has changed from
-"one-answer" to "many-answers". If you have slave servers that do not
-understand the many-answers zone transfer format (e.g., BIND 4.9.5 or
-older) you need to explicitly specify "transfer-format one-answer;" in
-either the options block or a server statement.
-
-BIND 9.4 onwards implements "allow-query-cache". The "allow-query"
-option is no longer used to specify access to the cache. The
-"allow-query" option continues to specify which hosts are allowed
-to ask ordinary DNS questions. The new "allow-query-cache" option
-is used to specify which hosts are allowed to get answers from the
-cache. Since BIND 9.4.1, if "allow-query-cache" is not set then
-"allow-recursion" is used if it is set, otherwise "allow-query" is
-used if it is set, otherwise the default localnets and localhost
-is used.
-
-1.2. Handling of Configuration File Errors
-
-In BIND 9, named refuses to start if it detects an error in
-named.conf. Earlier versions would start despite errors, causing the
-server to run with a partial configuration. Errors detected during
-subsequent reloads do not cause the server to exit.
-
-Errors in master files do not cause the server to exit, but they
-do cause the zone not to load.
-
-1.3. Logging
-
-The set of logging categories in BIND 9 is different from that
-in BIND 8. If you have customised your logging on a per-category
-basis, you need to modify your logging statement to use the
-new categories.
-
-Another difference is that the "logging" statement only takes effect
-after the entire named.conf file has been read. This means that when
-the server starts up, any messages about errors in the configuration
-file are always logged to the default destination (syslog) when the
-server first starts up, regardless of the contents of the "logging"
-statement. In BIND 8, the new logging configuration took effect
-immediately after the "logging" statement was read.
-
-1.4. Notify messages and Refresh queries
-
-The source address and port for these is now controlled by
-"notify-source" and "transfer-source", respectively, rather that
-query-source as in BIND 8.
-
-1.5. Multiple Classes.
-
-Multiple classes have to be put into explicit views for each class.
-
-
-2. Zone File Compatibility
-
-2.1. Strict RFC1035 Interpretation of TTLs in Zone Files
-
-BIND 9 strictly complies with the RFC1035 and RFC2308 rules regarding
-omitted TTLs in zone files. Omitted TTLs are replaced by the value
-specified with the $TTL directive, or by the previous explicit TTL if
-there is no $TTL directive.
-
-If there is no $TTL directive and the first RR in the file does not
-have an explicit TTL field, the zone file is illegal according to
-RFC1035 since the TTL of the first RR is undefined. Unfortunately,
-BIND 4 and many versions of BIND 8 accept such files without warning
-and use the value of the SOA MINTTL field as a default for missing TTL
-values.
-
-BIND 9.0 and 9.1 completely refused to load such files. BIND 9.2
-emulates the nonstandard BIND 4/8 SOA MINTTL behaviour and loads the
-files anyway (provided the SOA is the first record in the file), but
-will issue the warning message "no TTL specified; using SOA MINTTL
-instead".
-
-To avoid problems, we recommend that you use a $TTL directive in each
-zone file.
-
-2.2. Periods in SOA Serial Numbers Deprecated
-
-Some versions of BIND allow SOA serial numbers with an embedded
-period, like "3.002", and convert them into integers in a rather
-unintuitive way. This feature is not supported by BIND 9; serial
-numbers must be integers.
-
-2.3. Handling of Unbalanced Quotes
-
-TXT records with unbalanced quotes, like 'host TXT "foo', were not
-treated as errors in some versions of BIND. If your zone files
-contain such records, you will get potentially confusing error
-messages like "unexpected end of file" because BIND 9 will interpret
-everything up to the next quote character as a literal string.
-
-2.4. Handling of Line Breaks
-
-Some versions of BIND accept RRs containing line breaks that are not
-properly quoted with parentheses, like the following SOA:
-
- @ IN SOA ns.example. hostmaster.example.
- ( 1 3600 1800 1814400 3600 )
-
-This is not legal master file syntax and will be treated as an error
-by BIND 9. The fix is to move the opening parenthesis to the first
-line.
-
-2.5. Unimplemented BIND 8 Extensions
-
-$GENERATE: The "$$" construct for getting a literal $ into a domain
-name is deprecated. Use \$ instead.
-
-2.6. TXT records are no longer automatically split.
-
-Some versions of BIND accepted strings in TXT RDATA consisting of more
-than 255 characters and silently split them to be able to encode the
-strings in a protocol conformant way. You may now see errors like this
- dns_rdata_fromtext: local.db:119: ran out of space
-if you have TXT RRs with too longs strings. Make sure to split the
-string in the zone data file at or before a single one reaches 255
-characters.
-
-3. Interoperability Impact of New Protocol Features
-
-3.1. EDNS0
-
-BIND 9 uses EDNS0 (RFC2671) to advertise its receive buffer size. It
-also sets DO EDNS flag bit in queries to indicate that it wishes to
-receive DNSSEC responses.
-
-Most older servers that do not support EDNS0, including prior versions
-of BIND, will send a FORMERR or NOTIMP response to these queries.
-When this happens, BIND 9 will automatically retry the query without
-EDNS0.
-
-Unfortunately, there exists at least one non-BIND name server
-implementation that silently ignores these queries instead of sending
-an error response. Resolving names in zones where all or most
-authoritative servers use this server will be very slow or fail
-completely. We have contacted the manufacturer of the name server in
-case, and they are working on a solution.
-
-When BIND 9 communicates with a server that does support EDNS0, such as
-another BIND 9 server, responses of up to 4096 bytes may be
-transmitted as a single UDP datagram which is subject to fragmentation
-at the IP level. If a firewall incorrectly drops IP fragments, it can
-cause resolution to slow down dramatically or fail.
-
-3.2. Zone Transfers
-
-Outgoing zone transfers now use the "many-answers" format by default.
-This format is not understood by certain old versions of BIND 4.
-You can work around this problem using the option "transfer-format
-one-answer;", but since these old versions all have known security
-problems, the correct fix is to upgrade the slave servers.
-
-Zone transfers to Windows 2000 DNS servers sometimes fail due to a
-bug in the Windows 2000 DNS server where DNS messages larger than
-16K are not handled properly. Obtain the latest service pack for
-Windows 2000 from Microsoft to address this issue. In the meantime,
-the problem can be worked around by setting "transfer-format one-answer;".
-http://support.microsoft.com/default.aspx?scid=kb;en-us;297936
-
-4. Unrestricted Character Set
-
- BIND 9.2 only
-
-BIND 9 does not restrict the character set of domain names - it is
-fully 8-bit clean in accordance with RFC2181 section 11.
-
-It is strongly recommended that hostnames published in the DNS follow
-the RFC952 rules, but BIND 9 will not enforce this restriction.
-
-Historically, some applications have suffered from security flaws
-where data originating from the network, such as names returned by
-gethostbyaddr(), are used with insufficient checking and may cause a
-breach of security when containing unexpected characters; see
-<http://www.cert.org/advisories/CA-96.04.corrupt_info_from_servers.html>
-for details. Some earlier versions of BIND attempt to protect these
-flawed applications from attack by discarding data containing
-characters deemed inappropriate in host names or mail addresses, under
-the control of the "check-names" option in named.conf and/or "options
-no-check-names" in resolv.conf. BIND 9 provides no such protection;
-if applications with these flaws are still being used, they should
-be upgraded.
-
- BIND 9.3 onwards implements check-names.
-
-5. Server Administration Tools
-
-5.1 Ndc Replaced by Rndc
-
-The "ndc" program has been replaced by "rndc", which is capable of
-remote operation. Unlike ndc, rndc requires a configuration file.
-The easiest way to generate a configuration file is to run
-"rndc-confgen -a"; see the man pages for rndc(8), rndc-confgen(8),
-and rndc.conf(5) for details.
-
-5.2. Nsupdate Differences
-
-The BIND 8 implementation of nsupdate had an undocumented feature
-where an update request would be broken down into multiple requests
-based upon the discovered zones that contained the records. This
-behaviour has not been implemented in BIND 9. Each update request
-must pertain to a single zone, but it is still possible to do multiple
-updates in a single invocation of nsupdate by terminating each update
-with an empty line or a "send" command.
-
-
-6. No Information Leakage between Zones
-
-BIND 9 stores the authoritative data for each zone in a separate data
-structure, as recommended in RFC1035 and as required by DNSSEC and
-IXFR. When a BIND 9 server is authoritative for both a child zone and
-its parent, it will have two distinct sets of NS records at the
-delegation point: the authoritative NS records at the child's apex,
-and a set of glue NS records in the parent.
-
-BIND 8 was unable to properly distinguish between these two sets of NS
-records and would "leak" the child's NS records into the parent,
-effectively causing the parent zone to be silently modified: responses
-and zone transfers from the parent contained the child's NS records
-rather than the glue configured into the parent (if any). In the case
-of children of type "stub", this behaviour was documented as a feature,
-allowing the glue NS records to be omitted from the parent
-configuration.
-
-Sites that were relying on this BIND 8 behaviour need to add any
-omitted glue NS records, and any necessary glue A records, to the
-parent zone.
-
-Although stub zones can no longer be used as a mechanism for injecting
-NS records into their parent zones, they are still useful as a way of
-directing queries for a given domain to a particular set of name
-servers.
-
-
-7. Umask not Modified
-
-The BIND 8 named unconditionally sets the umask to 022. BIND 9 does
-not; the umask inherited from the parent process remains in effect.
-This may cause files created by named, such as journal files, to be
-created with different file permissions than they did in BIND 8. If
-necessary, the umask should be set explicitly in the script used to
-start the named process.
-
-
-$Id: migration,v 1.49 2008/03/18 15:42:53 jreed Exp $
diff --git a/doc/misc/migration-4to9 b/doc/misc/migration-4to9
deleted file mode 100644
index 7c8c6180..00000000
--- a/doc/misc/migration-4to9
+++ /dev/null
@@ -1,59 +0,0 @@
-Copyright (C) 2001, 2004, 2016 Internet Systems Consortium, Inc. ("ISC")
-
-This Source Code Form is subject to the terms of the Mozilla Public
-License, v. 2.0. If a copy of the MPL was not distributed with this
-file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-$Id: migration-4to9,v 1.4 2004/03/05 05:04:53 marka Exp $
-
- BIND 4 to BIND 9 Migration Notes
-
-To transition from BIND 4 to BIND 9 you first need to convert your
-configuration file to the new format. There is a conversion tool in
-contrib/named-bootconf that allows you to do this.
-
- named-bootconf.sh < /etc/named.boot > /etc/named.conf
-
-BIND 9 uses a system assigned port for the UDP queries it makes rather
-than port 53 that BIND 4 uses. This may conflict with some firewalls.
-The following directives in /etc/named.conf allows you to specify
-a port to use.
-
- query-source address * port 53;
- transfer-source * port 53;
- notify-source * port 53;
-
-BIND 9 no longer uses the minimum field to specify the TTL of records
-without a explicit TTL. Use the $TTL directive to specify a default TTL
-before the first record without a explicit TTL.
-
- $TTL 3600
- @ IN SOA ns1.example.com. hostmaster.example.com. (
- 2001021100
- 7200
- 1200
- 3600000
- 7200 )
-
-BIND 9 does not support multiple CNAMEs with the same owner name.
-
- Illegal:
- www.example.com. CNAME host1.example.com.
- www.example.com. CNAME host2.example.com.
-
-BIND 9 does not support "CNAMEs with other data" with the same owner name,
-ignoring the DNSSEC records (SIG, NXT, KEY) that BIND 4 did not support.
-
- Illegal:
- www.example.com. CNAME host1.example.com.
- www.example.com. MX 10 host2.example.com.
-
-BIND 9 is less tolerant of errors in master files, so check your logs and
-fix any errors reported. The named-checkzone program can also be to check
-master files.
-
-Outgoing zone transfers now use the "many-answers" format by default.
-This format is not understood by certain old versions of BIND 4.
-You can work around this problem using the option "transfer-format
-one-answer;", but since these old versions all have known security
-problems, the correct fix is to upgrade the slave servers.
diff --git a/doc/misc/options b/doc/misc/options
deleted file mode 100644
index 99fb0093..00000000
--- a/doc/misc/options
+++ /dev/null
@@ -1,830 +0,0 @@
-
-This is a summary of the named.conf options supported by
-this version of BIND 9.
-
-acl <string> { <address_match_element>; ... };
-
-controls {
- inet ( <ipv4_address> | <ipv6_address> | * ) [ port ( <integer> | *
- ) ] allow { <address_match_element>; ... } [ keys { <string>;
- ... } ] [ read-only <boolean> ];
- unix <quoted_string> perm <integer> owner <integer> group <integer>
- [ keys { <string>; ... } ] [ read-only <boolean> ];
-};
-
-dlz <string> {
- database <string>;
- search <boolean>;
-};
-
-dyndb <string> <quoted_string> { <unspecified text> };
-
-key <string> {
- algorithm <string>;
- secret <string>;
-};
-
-logging {
- category <string> { <string>; ... };
- channel <string> {
- buffered <boolean>;
- file <quoted_string> [ versions ( "unlimited" | <integer> )
- ] [ size <size> ];
- null;
- print-category <boolean>;
- print-severity <boolean>;
- print-time <boolean>;
- severity <log_severity>;
- stderr;
- syslog [ <syslog_facility> ];
- };
-};
-
-lwres {
- listen-on [ port <integer> ] [ dscp <integer> ] { ( <ipv4_address>
- | <ipv6_address> ) [ port <integer> ] [ dscp <integer> ]; ... };
- lwres-clients <integer>;
- lwres-tasks <integer>;
- ndots <integer>;
- search { <string>; ... };
- view <string> [ <class> ];
-};
-
-managed-keys { <string> <string> <integer> <integer> <integer>
- <quoted_string>; ... };
-
-masters <string> [ port <integer> ] [ dscp <integer> ] { ( <masters> |
- <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] )
- [ key <string> ]; ... };
-
-options {
- acache-cleaning-interval <integer>;
- acache-enable <boolean>;
- additional-from-auth <boolean>;
- additional-from-cache <boolean>;
- allow-new-zones <boolean>;
- allow-notify { <address_match_element>; ... };
- allow-query { <address_match_element>; ... };
- allow-query-cache { <address_match_element>; ... };
- allow-query-cache-on { <address_match_element>; ... };
- allow-query-on { <address_match_element>; ... };
- allow-recursion { <address_match_element>; ... };
- allow-recursion-on { <address_match_element>; ... };
- allow-transfer { <address_match_element>; ... };
- allow-update { <address_match_element>; ... };
- allow-update-forwarding { <address_match_element>; ... };
- allow-v6-synthesis { <address_match_element>; ... }; // obsolete
- also-notify [ port <integer> ] [ dscp <integer> ] { ( <masters> |
- <ipv4_address> [ port <integer> ] | <ipv6_address> [ port
- <integer> ] ) [ key <string> ]; ... };
- alt-transfer-source ( <ipv4_address> | * ) [ port ( <integer> | * )
- ] [ dscp <integer> ];
- alt-transfer-source-v6 ( <ipv6_address> | * ) [ port ( <integer> |
- * ) ] [ dscp <integer> ];
- attach-cache <string>;
- auth-nxdomain <boolean>; // default changed
- auto-dnssec ( allow | maintain | off );
- automatic-interface-scan <boolean>;
- avoid-v4-udp-ports { <portrange>; ... };
- avoid-v6-udp-ports { <portrange>; ... };
- bindkeys-file <quoted_string>;
- blackhole { <address_match_element>; ... };
- cache-file <quoted_string>;
- catalog-zones { zone <quoted_string> [ default-masters [ port
- <integer> ] [ dscp <integer> ] { ( <masters> | <ipv4_address> [
- port <integer> ] | <ipv6_address> [ port <integer> ] ) [ key
- <string> ]; ... } ] [ zone-directory <quoted_string> ] [
- in-memory <boolean> ] [ min-update-interval <integer> ]; ... };
- check-dup-records ( fail | warn | ignore );
- check-integrity <boolean>;
- check-mx ( fail | warn | ignore );
- check-mx-cname ( fail | warn | ignore );
- check-names ( master | slave | response ) ( fail | warn | ignore );
- check-sibling <boolean>;
- check-spf ( warn | ignore );
- check-srv-cname ( fail | warn | ignore );
- check-wildcard <boolean>;
- cleaning-interval <integer>;
- clients-per-query <integer>;
- cookie-algorithm ( aes | sha1 | sha256 );
- cookie-secret <string>;
- coresize ( unlimited | default | <sizeval> );
- datasize ( unlimited | default | <sizeval> );
- deallocate-on-exit <boolean>; // obsolete
- deny-answer-addresses { <address_match_element>; ... } [
- except-from { <quoted_string>; ... } ];
- deny-answer-aliases { <quoted_string>; ... } [ except-from {
- <quoted_string>; ... } ];
- dialup ( notify | notify-passive | refresh | passive | <boolean> );
- directory <quoted_string>;
- disable-algorithms <string> { <string>; ... };
- disable-ds-digests <string> { <string>; ... };
- disable-empty-zone <string>;
- dns64 <netprefix> {
- break-dnssec <boolean>;
- clients { <address_match_element>; ... };
- exclude { <address_match_element>; ... };
- mapped { <address_match_element>; ... };
- recursive-only <boolean>;
- suffix <ipv6_address>;
- };
- dns64-contact <string>;
- dns64-server <string>;
- dnssec-accept-expired <boolean>;
- dnssec-dnskey-kskonly <boolean>;
- dnssec-enable <boolean>;
- dnssec-loadkeys-interval <integer>;
- dnssec-lookaside ( <string> trust-anchor <string> | auto | no );
- dnssec-must-be-secure <string> <boolean>;
- dnssec-secure-to-insecure <boolean>;
- dnssec-update-mode ( maintain | no-resign );
- dnssec-validation ( yes | no | auto );
- dnstap { ( client | resolver | auth | forwarder |
- all ) [ ( query | response ) ]; ... }; // not configured
- dnstap-identity ( <quoted_string> | none |
- hostname ); // not configured
- dnstap-output ( file | unix ) <quoted_string>; // not configured
- dnstap-version ( <quoted_string> | none ); // not configured
- dscp <integer>;
- dual-stack-servers [ port <integer> ] { ( <quoted_string> [ port
- <integer> ] [ dscp <integer> ] | <ipv4_address> [ port
- <integer> ] [ dscp <integer> ] | <ipv6_address> [ port
- <integer> ] [ dscp <integer> ] ); ... };
- dump-file <quoted_string>;
- edns-udp-size <integer>;
- empty-contact <string>;
- empty-server <string>;
- empty-zones-enable <boolean>;
- fake-iquery <boolean>; // obsolete
- fetch-glue <boolean>; // obsolete
- fetch-quota-params <integer> <fixedpoint> <fixedpoint> <fixedpoint>;
- fetches-per-server <integer> [ ( drop | fail ) ];
- fetches-per-zone <integer> [ ( drop | fail ) ];
- files ( unlimited | default | <sizeval> );
- filter-aaaa { <address_match_element>; ... }; // not configured
- filter-aaaa-on-v4 ( break-dnssec | <boolean> ); // not configured
- filter-aaaa-on-v6 ( break-dnssec | <boolean> ); // not configured
- flush-zones-on-shutdown <boolean>;
- forward ( first | only );
- forwarders [ port <integer> ] [ dscp <integer> ] { ( <ipv4_address>
- | <ipv6_address> ) [ port <integer> ] [ dscp <integer> ]; ... };
- fstrm-set-buffer-hint <integer>; // not configured
- fstrm-set-flush-timeout <integer>; // not configured
- fstrm-set-input-queue-size <integer>; // not configured
- fstrm-set-output-notify-threshold <integer>; // not configured
- fstrm-set-output-queue-model ( spsc | mpsc ); // not configured
- fstrm-set-output-queue-size <integer>; // not configured
- fstrm-set-reopen-interval <integer>; // not configured
- geoip-directory ( <quoted_string> | none ); // not configured
- geoip-use-ecs ( <quoted_string> | none ); // not configured
- has-old-clients <boolean>; // obsolete
- heartbeat-interval <integer>;
- host-statistics <boolean>; // not implemented
- host-statistics-max <integer>; // not implemented
- hostname ( <quoted_string> | none );
- inline-signing <boolean>;
- interface-interval <integer>;
- ixfr-from-differences ( master | slave | <boolean> );
- keep-response-order { <address_match_element>; ... };
- key-directory <quoted_string>;
- lame-ttl <ttlval>;
- listen-on [ port <integer> ] [ dscp <integer> ] {
- <address_match_element>; ... };
- listen-on-v6 [ port <integer> ] [ dscp <integer> ] {
- <address_match_element>; ... };
- lock-file ( <quoted_string> | none );
- maintain-ixfr-base <boolean>; // obsolete
- managed-keys-directory <quoted_string>;
- masterfile-format ( text | raw | map );
- masterfile-style ( full | relative );
- match-mapped-addresses <boolean>;
- max-acache-size ( unlimited | <sizeval> );
- max-cache-size ( unlimited | default | <sizeval> | <percentage> );
- max-cache-ttl <integer>;
- max-clients-per-query <integer>;
- max-ixfr-log-size ( unlimited | default | <sizeval> ); // obsolete
- max-journal-size ( unlimited | <sizeval> );
- max-ncache-ttl <integer>;
- max-recursion-depth <integer>;
- max-recursion-queries <integer>;
- max-refresh-time <integer>;
- max-retry-time <integer>;
- max-rsa-exponent-size <integer>;
- max-transfer-idle-in <integer>;
- max-transfer-idle-out <integer>;
- max-transfer-time-in <integer>;
- max-transfer-time-out <integer>;
- max-udp-size <integer>;
- max-zone-ttl ( unlimited | <ttlval> );
- memstatistics <boolean>;
- memstatistics-file <quoted_string>;
- message-compression <boolean>;
- min-refresh-time <integer>;
- min-retry-time <integer>;
- min-roots <integer>; // not implemented
- minimal-any <boolean>;
- minimal-responses ( no-auth | no-auth-recursive | <boolean> );
- multi-master <boolean>;
- multiple-cnames <boolean>; // obsolete
- named-xfer <quoted_string>; // obsolete
- no-case-compress { <address_match_element>; ... };
- nocookie-udp-size <integer>;
- nosit-udp-size <integer>; // obsolete
- notify ( explicit | master-only | <boolean> );
- notify-delay <integer>;
- notify-rate <integer>;
- notify-source ( <ipv4_address> | * ) [ port ( <integer> | * ) ] [
- dscp <integer> ];
- notify-source-v6 ( <ipv6_address> | * ) [ port ( <integer> | * ) ]
- [ dscp <integer> ];
- notify-to-soa <boolean>;
- nsec3-test-zone <boolean>; // test only
- nta-lifetime <ttlval>;
- nta-recheck <ttlval>;
- nxdomain-redirect <string>;
- pid-file ( <quoted_string> | none );
- port <integer>;
- preferred-glue <string>;
- prefetch <integer> [ <integer> ];
- provide-ixfr <boolean>;
- query-source <querysource4>;
- query-source-v6 <querysource6>;
- querylog <boolean>;
- queryport-pool-ports <integer>; // obsolete
- queryport-pool-updateinterval <integer>; // obsolete
- random-device <quoted_string>;
- rate-limit {
- all-per-second <integer>;
- errors-per-second <integer>;
- exempt-clients { <address_match_element>; ... };
- ipv4-prefix-length <integer>;
- ipv6-prefix-length <integer>;
- log-only <boolean>;
- max-table-size <integer>;
- min-table-size <integer>;
- nodata-per-second <integer>;
- nxdomains-per-second <integer>;
- qps-scale <integer>;
- referrals-per-second <integer>;
- responses-per-second <integer>;
- slip <integer>;
- window <integer>;
- };
- recursing-file <quoted_string>;
- recursion <boolean>;
- recursive-clients <integer>;
- request-expire <boolean>;
- request-ixfr <boolean>;
- request-nsid <boolean>;
- request-sit <boolean>; // obsolete
- require-server-cookie <boolean>;
- reserved-sockets <integer>;
- resolver-query-timeout <integer>;
- response-policy { zone <quoted_string> [ log <boolean> ] [
- max-policy-ttl <integer> ] [ policy ( given | disabled |
- passthru | no-op | drop | tcp-only | nxdomain | nodata | cname
- <quoted_string> ) ] [ recursive-only <boolean> ]; ... } [
- break-dnssec <boolean> ] [ max-policy-ttl <integer> ] [
- min-ns-dots <integer> ] [ nsip-wait-recurse <boolean> ] [
- qname-wait-recurse <boolean> ] [ recursive-only <boolean> ];
- rfc2308-type1 <boolean>; // not yet implemented
- root-delegation-only [ exclude { <quoted_string>; ... } ];
- rrset-order { [ class <string> ] [ type <string> ] [ name
- <quoted_string> ] <string> <string>; ... };
- secroots-file <quoted_string>;
- send-cookie <boolean>;
- serial-queries <integer>; // obsolete
- serial-query-rate <integer>;
- serial-update-method ( increment | unixtime | date );
- server-id ( <quoted_string> | none | hostname );
- servfail-ttl <ttlval>;
- session-keyalg <string>;
- session-keyfile ( <quoted_string> | none );
- session-keyname <string>;
- sig-signing-nodes <integer>;
- sig-signing-signatures <integer>;
- sig-signing-type <integer>;
- sig-validity-interval <integer> [ <integer> ];
- sit-secret <string>; // obsolete
- sortlist { <address_match_element>; ... };
- stacksize ( unlimited | default | <sizeval> );
- startup-notify-rate <integer>;
- statistics-file <quoted_string>;
- statistics-interval <integer>; // not yet implemented
- suppress-initial-notify <boolean>; // not yet implemented
- tcp-clients <integer>;
- tcp-listen-queue <integer>;
- tkey-dhkey <quoted_string> <integer>;
- tkey-domain <quoted_string>;
- tkey-gssapi-credential <quoted_string>;
- tkey-gssapi-keytab <quoted_string>;
- topology { <address_match_element>; ... }; // not implemented
- transfer-format ( many-answers | one-answer );
- transfer-message-size <integer>;
- transfer-source ( <ipv4_address> | * ) [ port ( <integer> | * ) ] [
- dscp <integer> ];
- transfer-source-v6 ( <ipv6_address> | * ) [ port ( <integer> | * )
- ] [ dscp <integer> ];
- transfers-in <integer>;
- transfers-out <integer>;
- transfers-per-ns <integer>;
- treat-cr-as-space <boolean>; // obsolete
- trust-anchor-telemetry <boolean>;
- try-tcp-refresh <boolean>;
- update-check-ksk <boolean>;
- use-alt-transfer-source <boolean>;
- use-id-pool <boolean>; // obsolete
- use-ixfr <boolean>; // obsolete
- use-queryport-pool <boolean>; // obsolete
- use-v4-udp-ports { <portrange>; ... };
- use-v6-udp-ports { <portrange>; ... };
- v6-bias <integer>;
- version ( <quoted_string> | none );
- zero-no-soa-ttl <boolean>;
- zero-no-soa-ttl-cache <boolean>;
- zone-statistics ( full | terse | none | <boolean> );
-};
-
-server <netprefix> {
- bogus <boolean>;
- edns <boolean>;
- edns-udp-size <integer>;
- edns-version <integer>;
- keys <server_key>;
- max-udp-size <integer>;
- notify-source ( <ipv4_address> | * ) [ port ( <integer> | * ) ] [
- dscp <integer> ];
- notify-source-v6 ( <ipv6_address> | * ) [ port ( <integer> | * ) ]
- [ dscp <integer> ];
- provide-ixfr <boolean>;
- query-source <querysource4>;
- query-source-v6 <querysource6>;
- request-expire <boolean>;
- request-ixfr <boolean>;
- request-nsid <boolean>;
- request-sit <boolean>; // obsolete
- send-cookie <boolean>;
- support-ixfr <boolean>; // obsolete
- tcp-only <boolean>;
- transfer-format ( many-answers | one-answer );
- transfer-source ( <ipv4_address> | * ) [ port ( <integer> | * ) ] [
- dscp <integer> ];
- transfer-source-v6 ( <ipv6_address> | * ) [ port ( <integer> | * )
- ] [ dscp <integer> ];
- transfers <integer>;
-};
-
-statistics-channels {
- inet ( <ipv4_address> | <ipv6_address> | * ) [ port ( <integer> | *
- ) ] [ allow { <address_match_element>; ... } ];
-};
-
-trusted-keys { <string> <integer> <integer> <integer> <quoted_string>; ... };
-
-view <string> [ <class> ] {
- acache-cleaning-interval <integer>;
- acache-enable <boolean>;
- additional-from-auth <boolean>;
- additional-from-cache <boolean>;
- allow-new-zones <boolean>;
- allow-notify { <address_match_element>; ... };
- allow-query { <address_match_element>; ... };
- allow-query-cache { <address_match_element>; ... };
- allow-query-cache-on { <address_match_element>; ... };
- allow-query-on { <address_match_element>; ... };
- allow-recursion { <address_match_element>; ... };
- allow-recursion-on { <address_match_element>; ... };
- allow-transfer { <address_match_element>; ... };
- allow-update { <address_match_element>; ... };
- allow-update-forwarding { <address_match_element>; ... };
- allow-v6-synthesis { <address_match_element>; ... }; // obsolete
- also-notify [ port <integer> ] [ dscp <integer> ] { ( <masters> |
- <ipv4_address> [ port <integer> ] | <ipv6_address> [ port
- <integer> ] ) [ key <string> ]; ... };
- alt-transfer-source ( <ipv4_address> | * ) [ port ( <integer> | * )
- ] [ dscp <integer> ];
- alt-transfer-source-v6 ( <ipv6_address> | * ) [ port ( <integer> |
- * ) ] [ dscp <integer> ];
- attach-cache <string>;
- auth-nxdomain <boolean>; // default changed
- auto-dnssec ( allow | maintain | off );
- cache-file <quoted_string>;
- catalog-zones { zone <quoted_string> [ default-masters [ port
- <integer> ] [ dscp <integer> ] { ( <masters> | <ipv4_address> [
- port <integer> ] | <ipv6_address> [ port <integer> ] ) [ key
- <string> ]; ... } ] [ zone-directory <quoted_string> ] [
- in-memory <boolean> ] [ min-update-interval <integer> ]; ... };
- check-dup-records ( fail | warn | ignore );
- check-integrity <boolean>;
- check-mx ( fail | warn | ignore );
- check-mx-cname ( fail | warn | ignore );
- check-names ( master | slave | response ) ( fail | warn | ignore );
- check-sibling <boolean>;
- check-spf ( warn | ignore );
- check-srv-cname ( fail | warn | ignore );
- check-wildcard <boolean>;
- cleaning-interval <integer>;
- clients-per-query <integer>;
- deny-answer-addresses { <address_match_element>; ... } [
- except-from { <quoted_string>; ... } ];
- deny-answer-aliases { <quoted_string>; ... } [ except-from {
- <quoted_string>; ... } ];
- dialup ( notify | notify-passive | refresh | passive | <boolean> );
- disable-algorithms <string> { <string>; ... };
- disable-ds-digests <string> { <string>; ... };
- disable-empty-zone <string>;
- dlz <string> {
- database <string>;
- search <boolean>;
- };
- dns64 <netprefix> {
- break-dnssec <boolean>;
- clients { <address_match_element>; ... };
- exclude { <address_match_element>; ... };
- mapped { <address_match_element>; ... };
- recursive-only <boolean>;
- suffix <ipv6_address>;
- };
- dns64-contact <string>;
- dns64-server <string>;
- dnssec-accept-expired <boolean>;
- dnssec-dnskey-kskonly <boolean>;
- dnssec-enable <boolean>;
- dnssec-loadkeys-interval <integer>;
- dnssec-lookaside ( <string> trust-anchor <string> | auto | no );
- dnssec-must-be-secure <string> <boolean>;
- dnssec-secure-to-insecure <boolean>;
- dnssec-update-mode ( maintain | no-resign );
- dnssec-validation ( yes | no | auto );
- dnstap { ( client | resolver | auth | forwarder |
- all ) [ ( query | response ) ]; ... }; // not configured
- dual-stack-servers [ port <integer> ] { ( <quoted_string> [ port
- <integer> ] [ dscp <integer> ] | <ipv4_address> [ port
- <integer> ] [ dscp <integer> ] | <ipv6_address> [ port
- <integer> ] [ dscp <integer> ] ); ... };
- dyndb <string> <quoted_string> { <unspecified text> };
- edns-udp-size <integer>;
- empty-contact <string>;
- empty-server <string>;
- empty-zones-enable <boolean>;
- fetch-glue <boolean>; // obsolete
- fetch-quota-params <integer> <fixedpoint> <fixedpoint> <fixedpoint>;
- fetches-per-server <integer> [ ( drop | fail ) ];
- fetches-per-zone <integer> [ ( drop | fail ) ];
- filter-aaaa { <address_match_element>; ... }; // not configured
- filter-aaaa-on-v4 ( break-dnssec | <boolean> ); // not configured
- filter-aaaa-on-v6 ( break-dnssec | <boolean> ); // not configured
- forward ( first | only );
- forwarders [ port <integer> ] [ dscp <integer> ] { ( <ipv4_address>
- | <ipv6_address> ) [ port <integer> ] [ dscp <integer> ]; ... };
- inline-signing <boolean>;
- ixfr-from-differences ( master | slave | <boolean> );
- key <string> {
- algorithm <string>;
- secret <string>;
- };
- key-directory <quoted_string>;
- lame-ttl <ttlval>;
- maintain-ixfr-base <boolean>; // obsolete
- managed-keys { <string> <string> <integer> <integer> <integer>
- <quoted_string>; ... };
- masterfile-format ( text | raw | map );
- masterfile-style ( full | relative );
- match-clients { <address_match_element>; ... };
- match-destinations { <address_match_element>; ... };
- match-recursive-only <boolean>;
- max-acache-size ( unlimited | <sizeval> );
- max-cache-size ( unlimited | default | <sizeval> | <percentage> );
- max-cache-ttl <integer>;
- max-clients-per-query <integer>;
- max-ixfr-log-size ( unlimited | default | <sizeval> ); // obsolete
- max-journal-size ( unlimited | <sizeval> );
- max-ncache-ttl <integer>;
- max-recursion-depth <integer>;
- max-recursion-queries <integer>;
- max-refresh-time <integer>;
- max-retry-time <integer>;
- max-transfer-idle-in <integer>;
- max-transfer-idle-out <integer>;
- max-transfer-time-in <integer>;
- max-transfer-time-out <integer>;
- max-udp-size <integer>;
- max-zone-ttl ( unlimited | <ttlval> );
- message-compression <boolean>;
- min-refresh-time <integer>;
- min-retry-time <integer>;
- min-roots <integer>; // not implemented
- minimal-any <boolean>;
- minimal-responses ( no-auth | no-auth-recursive | <boolean> );
- multi-master <boolean>;
- no-case-compress { <address_match_element>; ... };
- nocookie-udp-size <integer>;
- nosit-udp-size <integer>; // obsolete
- notify ( explicit | master-only | <boolean> );
- notify-delay <integer>;
- notify-source ( <ipv4_address> | * ) [ port ( <integer> | * ) ] [
- dscp <integer> ];
- notify-source-v6 ( <ipv6_address> | * ) [ port ( <integer> | * ) ]
- [ dscp <integer> ];
- notify-to-soa <boolean>;
- nsec3-test-zone <boolean>; // test only
- nta-lifetime <ttlval>;
- nta-recheck <ttlval>;
- nxdomain-redirect <string>;
- preferred-glue <string>;
- prefetch <integer> [ <integer> ];
- provide-ixfr <boolean>;
- query-source <querysource4>;
- query-source-v6 <querysource6>;
- queryport-pool-ports <integer>; // obsolete
- queryport-pool-updateinterval <integer>; // obsolete
- rate-limit {
- all-per-second <integer>;
- errors-per-second <integer>;
- exempt-clients { <address_match_element>; ... };
- ipv4-prefix-length <integer>;
- ipv6-prefix-length <integer>;
- log-only <boolean>;
- max-table-size <integer>;
- min-table-size <integer>;
- nodata-per-second <integer>;
- nxdomains-per-second <integer>;
- qps-scale <integer>;
- referrals-per-second <integer>;
- responses-per-second <integer>;
- slip <integer>;
- window <integer>;
- };
- recursion <boolean>;
- request-expire <boolean>;
- request-ixfr <boolean>;
- request-nsid <boolean>;
- request-sit <boolean>; // obsolete
- require-server-cookie <boolean>;
- resolver-query-timeout <integer>;
- response-policy { zone <quoted_string> [ log <boolean> ] [
- max-policy-ttl <integer> ] [ policy ( given | disabled |
- passthru | no-op | drop | tcp-only | nxdomain | nodata | cname
- <quoted_string> ) ] [ recursive-only <boolean> ]; ... } [
- break-dnssec <boolean> ] [ max-policy-ttl <integer> ] [
- min-ns-dots <integer> ] [ nsip-wait-recurse <boolean> ] [
- qname-wait-recurse <boolean> ] [ recursive-only <boolean> ];
- rfc2308-type1 <boolean>; // not yet implemented
- root-delegation-only [ exclude { <quoted_string>; ... } ];
- rrset-order { [ class <string> ] [ type <string> ] [ name
- <quoted_string> ] <string> <string>; ... };
- send-cookie <boolean>;
- serial-update-method ( increment | unixtime | date );
- server <netprefix> {
- bogus <boolean>;
- edns <boolean>;
- edns-udp-size <integer>;
- edns-version <integer>;
- keys <server_key>;
- max-udp-size <integer>;
- notify-source ( <ipv4_address> | * ) [ port ( <integer> | *
- ) ] [ dscp <integer> ];
- notify-source-v6 ( <ipv6_address> | * ) [ port ( <integer>
- | * ) ] [ dscp <integer> ];
- provide-ixfr <boolean>;
- query-source <querysource4>;
- query-source-v6 <querysource6>;
- request-expire <boolean>;
- request-ixfr <boolean>;
- request-nsid <boolean>;
- request-sit <boolean>; // obsolete
- send-cookie <boolean>;
- support-ixfr <boolean>; // obsolete
- tcp-only <boolean>;
- transfer-format ( many-answers | one-answer );
- transfer-source ( <ipv4_address> | * ) [ port ( <integer> |
- * ) ] [ dscp <integer> ];
- transfer-source-v6 ( <ipv6_address> | * ) [ port (
- <integer> | * ) ] [ dscp <integer> ];
- transfers <integer>;
- };
- servfail-ttl <ttlval>;
- sig-signing-nodes <integer>;
- sig-signing-signatures <integer>;
- sig-signing-type <integer>;
- sig-validity-interval <integer> [ <integer> ];
- sortlist { <address_match_element>; ... };
- suppress-initial-notify <boolean>; // not yet implemented
- topology { <address_match_element>; ... }; // not implemented
- transfer-format ( many-answers | one-answer );
- transfer-source ( <ipv4_address> | * ) [ port ( <integer> | * ) ] [
- dscp <integer> ];
- transfer-source-v6 ( <ipv6_address> | * ) [ port ( <integer> | * )
- ] [ dscp <integer> ];
- trust-anchor-telemetry <boolean>;
- trusted-keys { <string> <integer> <integer> <integer>
- <quoted_string>; ... };
- try-tcp-refresh <boolean>;
- update-check-ksk <boolean>;
- use-alt-transfer-source <boolean>;
- use-queryport-pool <boolean>; // obsolete
- v6-bias <integer>;
- zero-no-soa-ttl <boolean>;
- zero-no-soa-ttl-cache <boolean>;
- zone <string> [ <class> ] {
- allow-notify { <address_match_element>; ... };
- allow-query { <address_match_element>; ... };
- allow-query-on { <address_match_element>; ... };
- allow-transfer { <address_match_element>; ... };
- allow-update { <address_match_element>; ... };
- allow-update-forwarding { <address_match_element>; ... };
- also-notify [ port <integer> ] [ dscp <integer> ] { (
- <masters> | <ipv4_address> [ port <integer> ] |
- <ipv6_address> [ port <integer> ] ) [ key <string> ];
- ... };
- alt-transfer-source ( <ipv4_address> | * ) [ port (
- <integer> | * ) ] [ dscp <integer> ];
- alt-transfer-source-v6 ( <ipv6_address> | * ) [ port (
- <integer> | * ) ] [ dscp <integer> ];
- auto-dnssec ( allow | maintain | off );
- check-dup-records ( fail | warn | ignore );
- check-integrity <boolean>;
- check-mx ( fail | warn | ignore );
- check-mx-cname ( fail | warn | ignore );
- check-names ( fail | warn | ignore );
- check-sibling <boolean>;
- check-spf ( warn | ignore );
- check-srv-cname ( fail | warn | ignore );
- check-wildcard <boolean>;
- database <string>;
- delegation-only <boolean>;
- dialup ( notify | notify-passive | refresh | passive |
- <boolean> );
- dlz <string>;
- dnssec-dnskey-kskonly <boolean>;
- dnssec-loadkeys-interval <integer>;
- dnssec-secure-to-insecure <boolean>;
- dnssec-update-mode ( maintain | no-resign );
- file <quoted_string>;
- forward ( first | only );
- forwarders [ port <integer> ] [ dscp <integer> ] { (
- <ipv4_address> | <ipv6_address> ) [ port <integer> ] [
- dscp <integer> ]; ... };
- in-view <string>;
- inline-signing <boolean>;
- ixfr-base <quoted_string>; // obsolete
- ixfr-from-differences <boolean>;
- ixfr-tmp-file <quoted_string>; // obsolete
- journal <quoted_string>;
- key-directory <quoted_string>;
- maintain-ixfr-base <boolean>; // obsolete
- masterfile-format ( text | raw | map );
- masterfile-style ( full | relative );
- masters [ port <integer> ] [ dscp <integer> ] { ( <masters>
- | <ipv4_address> [ port <integer> ] | <ipv6_address> [
- port <integer> ] ) [ key <string> ]; ... };
- max-ixfr-log-size ( unlimited | default |
- <sizeval> ); // obsolete
- max-journal-size ( unlimited | <sizeval> );
- max-refresh-time <integer>;
- max-retry-time <integer>;
- max-transfer-idle-in <integer>;
- max-transfer-idle-out <integer>;
- max-transfer-time-in <integer>;
- max-transfer-time-out <integer>;
- max-zone-ttl ( unlimited | <ttlval> );
- min-refresh-time <integer>;
- min-retry-time <integer>;
- multi-master <boolean>;
- notify ( explicit | master-only | <boolean> );
- notify-delay <integer>;
- notify-source ( <ipv4_address> | * ) [ port ( <integer> | *
- ) ] [ dscp <integer> ];
- notify-source-v6 ( <ipv6_address> | * ) [ port ( <integer>
- | * ) ] [ dscp <integer> ];
- notify-to-soa <boolean>;
- nsec3-test-zone <boolean>; // test only
- pubkey <integer> <integer> <integer>
- <quoted_string>; // obsolete
- request-expire <boolean>;
- request-ixfr <boolean>;
- serial-update-method ( increment | unixtime | date );
- server-addresses { ( <ipv4_address> | <ipv6_address> ) [
- port <integer> ]; ... };
- server-names { <quoted_string>; ... };
- sig-signing-nodes <integer>;
- sig-signing-signatures <integer>;
- sig-signing-type <integer>;
- sig-validity-interval <integer> [ <integer> ];
- transfer-source ( <ipv4_address> | * ) [ port ( <integer> |
- * ) ] [ dscp <integer> ];
- transfer-source-v6 ( <ipv6_address> | * ) [ port (
- <integer> | * ) ] [ dscp <integer> ];
- try-tcp-refresh <boolean>;
- type ( master | slave | stub | static-stub | hint | forward
- | delegation-only | redirect );
- update-check-ksk <boolean>;
- update-policy ( local | { ( grant | deny ) <string> ( name
- | subdomain | wildcard | self | selfsub | selfwild |
- krb5-self | ms-self | krb5-subdomain | ms-subdomain |
- tcp-self | 6to4-self | zonesub | external ) [ <string>
- ] <rrtypelist>; ... };
- use-alt-transfer-source <boolean>;
- zero-no-soa-ttl <boolean>;
- zone-statistics ( full | terse | none | <boolean> );
- };
- zone-statistics ( full | terse | none | <boolean> );
-};
-
-zone <string> [ <class> ] {
- allow-notify { <address_match_element>; ... };
- allow-query { <address_match_element>; ... };
- allow-query-on { <address_match_element>; ... };
- allow-transfer { <address_match_element>; ... };
- allow-update { <address_match_element>; ... };
- allow-update-forwarding { <address_match_element>; ... };
- also-notify [ port <integer> ] [ dscp <integer> ] { ( <masters> |
- <ipv4_address> [ port <integer> ] | <ipv6_address> [ port
- <integer> ] ) [ key <string> ]; ... };
- alt-transfer-source ( <ipv4_address> | * ) [ port ( <integer> | * )
- ] [ dscp <integer> ];
- alt-transfer-source-v6 ( <ipv6_address> | * ) [ port ( <integer> |
- * ) ] [ dscp <integer> ];
- auto-dnssec ( allow | maintain | off );
- check-dup-records ( fail | warn | ignore );
- check-integrity <boolean>;
- check-mx ( fail | warn | ignore );
- check-mx-cname ( fail | warn | ignore );
- check-names ( fail | warn | ignore );
- check-sibling <boolean>;
- check-spf ( warn | ignore );
- check-srv-cname ( fail | warn | ignore );
- check-wildcard <boolean>;
- database <string>;
- delegation-only <boolean>;
- dialup ( notify | notify-passive | refresh | passive | <boolean> );
- dlz <string>;
- dnssec-dnskey-kskonly <boolean>;
- dnssec-loadkeys-interval <integer>;
- dnssec-secure-to-insecure <boolean>;
- dnssec-update-mode ( maintain | no-resign );
- file <quoted_string>;
- forward ( first | only );
- forwarders [ port <integer> ] [ dscp <integer> ] { ( <ipv4_address>
- | <ipv6_address> ) [ port <integer> ] [ dscp <integer> ]; ... };
- in-view <string>;
- inline-signing <boolean>;
- ixfr-base <quoted_string>; // obsolete
- ixfr-from-differences <boolean>;
- ixfr-tmp-file <quoted_string>; // obsolete
- journal <quoted_string>;
- key-directory <quoted_string>;
- maintain-ixfr-base <boolean>; // obsolete
- masterfile-format ( text | raw | map );
- masterfile-style ( full | relative );
- masters [ port <integer> ] [ dscp <integer> ] { ( <masters> |
- <ipv4_address> [ port <integer> ] | <ipv6_address> [ port
- <integer> ] ) [ key <string> ]; ... };
- max-ixfr-log-size ( unlimited | default | <sizeval> ); // obsolete
- max-journal-size ( unlimited | <sizeval> );
- max-refresh-time <integer>;
- max-retry-time <integer>;
- max-transfer-idle-in <integer>;
- max-transfer-idle-out <integer>;
- max-transfer-time-in <integer>;
- max-transfer-time-out <integer>;
- max-zone-ttl ( unlimited | <ttlval> );
- min-refresh-time <integer>;
- min-retry-time <integer>;
- multi-master <boolean>;
- notify ( explicit | master-only | <boolean> );
- notify-delay <integer>;
- notify-source ( <ipv4_address> | * ) [ port ( <integer> | * ) ] [
- dscp <integer> ];
- notify-source-v6 ( <ipv6_address> | * ) [ port ( <integer> | * ) ]
- [ dscp <integer> ];
- notify-to-soa <boolean>;
- nsec3-test-zone <boolean>; // test only
- pubkey <integer> <integer> <integer> <quoted_string>; // obsolete
- request-expire <boolean>;
- request-ixfr <boolean>;
- serial-update-method ( increment | unixtime | date );
- server-addresses { ( <ipv4_address> | <ipv6_address> ) [ port
- <integer> ]; ... };
- server-names { <quoted_string>; ... };
- sig-signing-nodes <integer>;
- sig-signing-signatures <integer>;
- sig-signing-type <integer>;
- sig-validity-interval <integer> [ <integer> ];
- transfer-source ( <ipv4_address> | * ) [ port ( <integer> | * ) ] [
- dscp <integer> ];
- transfer-source-v6 ( <ipv6_address> | * ) [ port ( <integer> | * )
- ] [ dscp <integer> ];
- try-tcp-refresh <boolean>;
- type ( master | slave | stub | static-stub | hint | forward |
- delegation-only | redirect );
- update-check-ksk <boolean>;
- update-policy ( local | { ( grant | deny ) <string> ( name |
- subdomain | wildcard | self | selfsub | selfwild | krb5-self |
- ms-self | krb5-subdomain | ms-subdomain | tcp-self | 6to4-self
- | zonesub | external ) [ <string> ] <rrtypelist>; ... };
- use-alt-transfer-source <boolean>;
- zero-no-soa-ttl <boolean>;
- zone-statistics ( full | terse | none | <boolean> );
-};
-
diff --git a/doc/misc/rfc-compliance b/doc/misc/rfc-compliance
deleted file mode 100644
index 9d991c0c..00000000
--- a/doc/misc/rfc-compliance
+++ /dev/null
@@ -1,162 +0,0 @@
-Copyright (C) 2001, 2004, 2015, 2016 Internet Systems Consortium, Inc. ("ISC")
-
-This Source Code Form is subject to the terms of the Mozilla Public
-License, v. 2.0. If a copy of the MPL was not distributed with this
-file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-BIND 9 is striving for strict compliance with IETF standards. We
-believe this release of BIND 9 complies with the following RFCs, with
-the caveats and exceptions listed in the numbered notes below. Note
-that a number of these RFCs do not have the status of Internet
-standards but are proposed or draft standards, experimental RFCs,
-or Best Current Practice (BCP) documents. The list is non exhaustive.
-
- RFC1034
- RFC1035 [1] [2]
- RFC1123
- RFC1183
- RFC1535
- RFC1536
- RFC1706
- RFC1712
- RFC1750
- RFC1876
- RFC1982
- RFC1995
- RFC1996
- RFC2136
- RFC2163
- RFC2181
- RFC2230
- RFC2308
- RFC2536
- RFC2539
- RFC2782
- RFC2915
- RFC2930
- RFC2931 [5]
- RFC3007
- RFC3110
- RFC3123
- RFC3225
- RFC3226
- RFC3363 [6]
- RFC3490 [7]
- RFC3491 (Obsoleted by 5890, 5891) [7]
- RFC3493
- RFC3496
- RFC3597
- RFC3645
- RFC4025
- RFC4034
- RFC4035
- RFC4074
- RFC4255
- RFC4294 - Section 5.1 [8]
- RFC4343
- RFC4398
- RFC4408
- RFC4431
- RFC4470 [9]
- RFC4509
- RFC4635
- RFC4701
- RFC4892
- RFC4955 [10]
- RFC5001
- RFC5011
- RFC5155
- RFC5205
- RFC5452 [11]
- RFC5702
- RFC5933 [12]
- RFC5936
- RFC5952
- RFC5966
- RFC6052
- RFC6147 [13]
- RFC6303
- RFC6605 [14]
- RFC6672
- RFC6698
- RFC6742
- RFC6840 [15]
- RFC6844
- RFC6891
- RFC7043
- RFC7314
- RFC7477
- RFC7793
- RFC7830 [16]
-
-The following DNS related RFC have been obsoleted
-
- RFC2535 (Obsoleted by 4034, 4035) [3] [4]
- RFC2537 (Obsoleted by 3110)
- RFC2538 (Obsoleted by 4398)
- RFC2671 (Obsoleted by 6891)
- RFC2672 (Obsoleted by 6672)
- RFC2673 (Obsoleted by 6891)
- RFC3008 (Obsoleted by 4034, 4035)
- RFC3152 (Obsoleted by 3596)
- RFC3445 (Obsoleted by 4034, 4035)
- RFC3655 (Obsoleted by 4034, 4035)
- RFC3658 (Obsoleted by 4034, 4035)
- RFC3755 (Obsoleted by 4034, 4035)
- RFC3757 (Obsoleted by 4034, 4035)
- RFC3845 (Obsoleted by 4034, 4035)
-
-[1] Queries to zones that have failed to load return SERVFAIL rather
-than a non-authoritative response. This is considered a feature.
-
-[2] CLASS ANY queries are not supported. This is considered a
-feature.
-
-[3] Wildcard records are not supported in DNSSEC secure zones.
-
-[4] Servers authoritative for secure zones being resolved by BIND
-9 must support EDNS0 (RFC2671), and must return all relevant SIGs
-and NXTs in responses rather than relying on the resolving server
-to perform separate queries for missing SIGs and NXTs.
-
-[5] When receiving a query signed with a SIG(0), the server will
-only be able to verify the signature if it has the key in its local
-authoritative data; it will not do recursion or validation to
-retrieve unknown keys.
-
-[6] Section 4 is ignored.
-
-[7] Requires --with-idn to enable entry of IDN labels within dig,
-host and nslookup at compile time. ACE labels are supported
-everywhere with or without --with-idn.
-
-[8] Section 5.1 - DNAME records are fully supported.
-
-[9] Minimally Covering NSEC Record are accepted but not generated.
-
-[10] Will interoperate with correctly designed experiments.
-
-[11] Named only uses ports to extend the id space, address are not
-used.
-
-[12] Conditional on the OpenSSL library being linked against
-supporting GOST.
-
-[13] Section 5.5 does not match reality. Named uses the presence
-of DO=1 to detect if validation may be occuring. CD has no bearing
-on whether validation is occuring or not.
-
-[14] Conditional on the OpenSSL library being linked against
-supporting ECDSA.
-
-[15] Section 5.9 - Always set CD=1 on queries. This is *not* done as
-it prevents DNSSEC working correctly through another recursive server.
-
-When talking to a recurive server the best algorithm to do is send
-CD=0 and then send CD=1 iff SERVFAIL is returned in case the recurive
-server has a bad clock and/or bad trust anchor. Alternatively one
-can send CD=1 then CD=0 on validation failure in case the recursive
-server is under attack or there is stale / bogus authoritative data.
-
-[16] Named doesn't currently encrypt DNS requests so the PAD option
-is accepted but not returned in responses.
diff --git a/doc/misc/roadmap b/doc/misc/roadmap
deleted file mode 100644
index 4b529664..00000000
--- a/doc/misc/roadmap
+++ /dev/null
@@ -1,49 +0,0 @@
-Copyright (C) 2000, 2001, 2004, 2016 Internet Systems Consortium, Inc. ("ISC")
-
-This Source Code Form is subject to the terms of the Mozilla Public
-License, v. 2.0. If a copy of the MPL was not distributed with this
-file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-$Id: roadmap,v 1.2 2004/03/05 05:04:54 marka Exp $
-
-Road Map to the BIND 9 Source Tree
-
-bin/named The name server. This relies heavily on the
- libraries in lib/isc and lib/dns.
- client.c Handling of incoming client requests
- query.c Query processing
-bin/rndc The remote name daemon control program
-bin/dig The "dig" program
-bin/dnssec The DNSSEC signer and other DNSSEC tools
-bin/nsupdate The "nsupdate" program
-bin/tests Test suites and miscellaneous test programs
-bin/tests/system System tests; see bin/tests/system/README
-lib/dns The DNS library
- resolver.c The "full resolver" (performs recursive lookups)
- validator.c The DNSSEC validator
- db.c The database interface
- sdb.c The simple database interface
- rbtdb.c The red-black tree database
-lib/dns/rdata Routines for handling the various RR types
-lib/dns/sec Cryptographic libraries for DNSSEC
-lib/isc The ISC library
- task.c Task library
- unix/socket.c Unix implementation of socket library
-lib/isccfg Routines for reading and writing ISC-style
- configuration files like named.conf and rndc.conf
-lib/isccc The command channel library, used by rndc.
-lib/tests Support code for the test suites.
-lib/lwres The lightweight resolver library.
-doc/draft Current internet-drafts pertaining to the DNS
-doc/rfc RFCs pertaining to the DNS
-doc/misc Miscellaneous documentation
-doc/arm The BIND 9 Administrator Reference Manual
-doc/man Man pages
-contrib Contributed and other auxiliary code
-contrib/idn/mdnkit The multilingual domain name evaluation kit
-contrib/sdb Sample drivers for the simple database interface
-make Makefile fragments, used by configure
-
-The library interfaces are mainly documented in the form of comments
-in the header files. For example, the task subsystem is documented in
-lib/isc/include/isc/task.h
diff --git a/doc/misc/sdb b/doc/misc/sdb
deleted file mode 100644
index c4a4aa2f..00000000
--- a/doc/misc/sdb
+++ /dev/null
@@ -1,171 +0,0 @@
-Copyright (C) 2000, 2001, 2004, 2016 Internet Systems Consortium, Inc. ("ISC")
-
-This Source Code Form is subject to the terms of the Mozilla Public
-License, v. 2.0. If a copy of the MPL was not distributed with this
-file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-Using the BIND 9 Simplified Database Interface
-
-This document describes the care and feeding of the BIND 9 Simplified
-Database Interface, which allows you to extend BIND 9 with new ways
-of obtaining the data that is published as DNS zones.
-
-
-The Original BIND 9 Database Interface
-
-BIND 9 has a well-defined "back-end database interface" that makes it
-possible to replace the component of the name server responsible for
-the storage and retrieval of zone data, called the "database", on a
-per-zone basis. The default database is an in-memory, red-black-tree
-data structure commonly referred to as "rbtdb", but it is possible to
-write drivers to support any number of alternative database
-technologies such as in-memory hash tables, application specific
-persistent on-disk databases, object databases, or relational
-databases.
-
-The original BIND 9 database interface defined in <dns/db.h> is
-designed to efficiently support the full set of database functionality
-needed by a name server that implements the complete DNS protocols,
-including features such as zone transfers, dynamic update, and DNSSEC.
-Each of these aspects of name server operations places its own set of
-demands on the data store, with the result that the database API is
-quite complex and contains operations that are highly specific to the
-DNS. For example, data are stored in a binary format, the name space
-is tree structured, and sets of data records are conceptually
-associated with DNSSEC signature sets. For these reasons, writing a
-driver using this interface is a highly nontrivial undertaking.
-
-
-The Simplified Database Interface
-
-Many BIND users wish to provide access to various data sources through
-the DNS, but are not necessarily interested in completely replacing
-the in-memory "rbt" database or in supporting features like dynamic
-update, DNSSEC, or even zone transfers.
-
-Often, all you want is limited, read-only DNS access to an existing
-system. For example, you may have an existing relational database
-containing hostname/address mappings and wish to provide forvard and
-reverse DNS lookups based on this information. Or perhaps you want to
-set up a simple DNS-based load balancing system where the name server
-answers queries about a single DNS name with a dynamically changing
-set of A records.
-
-BIND 9.1 introduced a new, simplified database interface, or "sdb",
-which greatly simplifies the writing of drivers for these kinds of
-applications.
-
-
-The sdb Driver
-
-An sdb driver is an object module, typically written in C, which is
-linked into the name server and registers itself with the sdb
-subsystem. It provides a set of callback functions, which also serve
-to advertise its capabilities. When the name server receives DNS
-queries, invokes the callback functions to obtain the data to respond
-with.
-
-Unlike the full database interface, the sdb interface represents all
-domain names and resource records as ASCII text.
-
-
-Writing an sdb Driver
-
-When a driver is registered, it specifies its name, a list of callback
-functions, and flags.
-
-The flags specify whether the driver wants to use relative domain
-names where possible.
-
-The callback functions are as follows. The only one that must be
-defined is lookup().
-
- - create(zone, argc, argv, driverdata, dbdata)
- Create a database object for "zone".
-
- - destroy(zone, driverdata, dbdata)
- Destroy the database object for "zone".
-
- - lookup(zone, name, dbdata, lookup)
- Return all the records at the domain name "name".
-
- - authority(zone, dbdata, lookup)
- Return the SOA and NS records at the zone apex.
-
- - allnodes(zone, dbdata, allnodes)
- Return all data in the zone, for zone transfers.
-
-For more detail about these functions and their parameters, see
-bind9/lib/dns/include/dns/sdb.h. For example drivers, see
-bind9/contrib/sdb.
-
-
-Rebuilding the Server
-
-The driver module and header file must be copied to (or linked into)
-the bind9/bin/named and bind9/bin/named/include directories
-respectively, and must be added to the DBDRIVER_OBJS and DBDRIVER_SRCS
-lines in bin/named/Makefile.in (e.g. for the timedb sample sdb driver,
-add timedb.c to DBDRIVER_SRCS and timedb.@O@ to DBDRIVER_OBJS). If
-the driver needs additional header files or libraries in nonstandard
-places, the DBDRIVER_INCLUDES and DBDRIVER_LIBS lines should also be
-updated.
-
-Calls to dns_sdb_register() and dns_sdb_unregister() (or wrappers,
-e.g. timedb_init() and timedb_clear() for the timedb sample sdb
-driver) must be inserted into the server, in bind9/bin/named/main.c.
-Registration should be in setup(), before the call to
-ns_server_create(). Unregistration should be in cleanup(),
-after the call to ns_server_destroy(). A #include should be added
-corresponding to the driver header file.
-
-You should try doing this with one or more of the sample drivers
-before attempting to write a driver of your own.
-
-
-Configuring the Server
-
-To make a zone use a new database driver, specify a "database" option
-in its "zone" statement in named.conf. For example, if the driver
-registers itself under the name "acmedb", you might say
-
- zone "foo.com" {
- database "acmedb";
- };
-
-You can pass arbitrary arguments to the create() function of the
-driver by adding any number of whitespace-separated words after the
-driver name:
-
- zone "foo.com" {
- database "acmedb -mode sql -connect 10.0.0.1";
- };
-
-
-Hints for Driver Writers
-
- - If a driver is generating data on the fly, it probably should
- not implement the allnodes() function, since a zone transfer
- will not be meaningful. The allnodes() function is more relevant
- with data from a database.
-
- - The authority() function is necessary if and only if the lookup()
- function will not add SOA and NS records at the zone apex. If
- SOA and NS records are provided by the lookup() function,
- the authority() function should be NULL.
-
- - When a driver is registered, an opaque object can be provided. This
- object is passed into the database create() and destroy() functions.
-
- - When a database is created, an opaque object can be created that
- is associated with that database. This object is passed into the
- lookup(), authority(), and allnodes() functions, and is
- destroyed by the destroy() function.
-
-
-Future Directions
-
-A future release may support dynamic loading of sdb drivers.
-
-
-$Id: sdb,v 1.6 2004/03/05 05:04:54 marka Exp $
diff --git a/doc/misc/sort-options.pl b/doc/misc/sort-options.pl
deleted file mode 100644
index 93933a01..00000000
--- a/doc/misc/sort-options.pl
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/perl
-#
-# Copyright (C) 2007, 2012, 2016 Internet Systems Consortium, Inc. ("ISC")
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# $Id: sort-options.pl,v 1.3 2007/09/24 23:46:48 tbox Exp $
-
-sub sortlevel() {
- my @options = ();
- my $fin = "";
- my $i = 0;
- while (<>) {
- if (/^\s*};$/) {
- $fin = $_;
- # print 2, $_;
- last;
- }
- next if (/^$/);
- if (/{$/) {
- # print 3, $_;
- my $sec = $_;
- push(@options, $sec . sortlevel());
- } else {
- push(@options, $_);
- # print 1, $_;
- }
- $i++;
- }
- my $result = "";
- foreach my $i (sort @options) {
- $result = ${result}.${i};
- $result = $result."\n" if ($i =~ /^[a-z]/i);
- # print 5, ${i};
- }
- $result = ${result}.${fin};
- return ($result);
-}
-
-print sortlevel();
diff --git a/doc/misc/tcp-fast-open b/doc/misc/tcp-fast-open
deleted file mode 100644
index edde691f..00000000
--- a/doc/misc/tcp-fast-open
+++ /dev/null
@@ -1,30 +0,0 @@
-Copyright (C) 2016 Internet Systems Consortium, Inc. ("ISC")
-
-This Source Code Form is subject to the terms of the Mozilla Public
-License, v. 2.0. If a copy of the MPL was not distributed with this
-file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-Some systems (Linux, FreeBSD, OS X/macOS and Windows 10) support
-the TCP Fast Open (RFC 7413) mechanism in their recent versions.
-
-BIND 9 supports this on the server side.
-
-When the TCP_FASTOPEN socket option is defined after the listen()
-system call the socket code in the libisc set the option with
-the half of the listen backlog (so the fast open maximum queue length
-is the half of the pending connection queue length).
-Any failure is logged and ignored.
-
-System specific notes:
- - FreeBSD doesn't interpret the argument as a queue length but
- only as an on/off switch.
-
- - Apple OS X/macOS allows only 0 or 1 so the code puts 1 for this system.
-
- - Windows 10 uses a 0/1 char flag? Note that TCP_FASTOPEN is defined
- only in SDK 10.0.14393.0 or higher (Visual Studio 2015 requires
- extra setting of the "Target Platform Version" in all project
- properties).
-
- - the only other system known to support this is Linux.
-
diff --git a/doc/tex/Makefile.in b/doc/tex/Makefile.in
deleted file mode 100644
index 9480384b..00000000
--- a/doc/tex/Makefile.in
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright (C) 2015, 2016 Internet Systems Consortium, Inc. ("ISC")
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-top_srcdir = @top_srcdir@
-
-SUBDIRS =
-TARGETS =
-
-@BIND9_MAKE_RULES@
-
-distclean::
- rm -f armstyle.sty
diff --git a/doc/tex/armstyle.sty.in b/doc/tex/armstyle.sty.in
deleted file mode 100644
index 0aa766cd..00000000
--- a/doc/tex/armstyle.sty.in
+++ /dev/null
@@ -1,107 +0,0 @@
-%%
-%% This style is derivated from the docbook one
-%%
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{armstyle}[]
-
-%% Just use the original package and pass the options
-\RequirePackageWithOptions{db2latex}
-
-% 2015-09-03 reed -- used with figure
-\usepackage{float}
-
-% For page layout
-\usepackage{geometry}
-
-% don't want date on the cover page
-\let\@date\@empty
-
-% get rid of "Chapter" on start of each chapter
-\def\@makechapterhead#1{%
- \vspace*{50\p@}%
- {\parindent \z@ \raggedright \normalfont
- \ifnum \c@secnumdepth >\m@ne
- \if@mainmatter
- \Huge\bfseries\sffamily \thechapter\space\space\space\space%
- \fi
- \fi
- \interlinepenalty\@M
- \Huge \bfseries \sffamily #1\par\nobreak
- \vskip 40\p@
- }}
-
-% for use of \titleformat
-\usepackage{titlesec}
-
-\titleformat*{\section}{\Large\bfseries\scshape\sffamily}
-\titleformat*{\subsection}{\large\bfseries\sffamily}
-
-% Contents font too ; note I don't know what last parts of this are for
-\titleformat{\chapter}{\Huge\bfseries\sffamily}{\thechapter}{1em}{} \vspace{6pt}
-
-% font for the Index headline also
-\titleformat{\index}{\Huge\bfseries\sffamily}{Index}{1em}{} \vspace{6pt}
-
-% following two lines for no indenting paragraphs and spacing between
-\setlength\parskip{\medskipamount}
-\setlength\parindent{0pt}
-
-% fancy footers
-\pagestyle{fancy}
-\fancyfoot[ce,co]{\thepage}
-\fancyfoot[le,ro]{@BIND9_VERSIONSHORT@}
-\renewcommand{\headrulewidth}{0.4 pt}
-\fancypagestyle{plain}{%
- \fancyhf{}%
- \fancyfoot[ce,co]{\thepage}%
- \fancyfoot[le,ro]{@BIND9_VERSIONSHORT@}
- \renewcommand{\headrulewidth}{0 pt}
-}
-\fancypagestyle{empty}{%
- \fancyhf{}%
- \renewcommand{\headrulewidth}{0 pt}
- \renewcommand{\footrulewidth}{0 pt}
-}
-
-% custom title and copyright pages
-\def\maketitle{
- \thispagestyle{empty}
- \null\vfil
- \vskip 60pt
- \begin{center}%
- { %\LARGE
- \Huge
- \bfseries
- \DBKtitle \\
- \par
- }
- \vskip 3em%
- { %\large
- \Large
- \lineskip .75em%
- @BIND9_VERSIONSTRING@
- \par
- }
- \vfil\null
- % Not sure exactly how much to trim logo, but given that
- % this is a centered environment, we need not be too precise
- % so long as the image is centered in the input PDF, we
- % trim enough for it to fit on page, and we do not trim
- % so much that we clip out part of the graphic itself.
- % This seems to work, anyway.
- \includegraphics[trim=400 400 400 400,scale=2.5]{isc-logo}
- \end{center}\par
- \newpage
- \thispagestyle{empty}
- \vfill
- \DBKcopyright \\
- \vfill\null
- \begin{center}
- Internet Systems Consortium \\
- 950 Charter Street \\
- Redwood City, California \\
- USA \\
- https://www.isc.org/
- \end{center}
- \vfil\null
-}
diff --git a/doc/tex/notestyle.sty b/doc/tex/notestyle.sty
deleted file mode 100644
index 6ae2d0ca..00000000
--- a/doc/tex/notestyle.sty
+++ /dev/null
@@ -1,17 +0,0 @@
-%%
-%% This style is derivated from the docbook one
-%%
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{notestyle}[]
-
-%% Just use the original package and pass the options
-\RequirePackageWithOptions{db2latex}
-
-%% My Cover Page
-\def\maketitle{%
-}
-
-%% Suppress header
-\fancyhead{}
-\renewcommand{\headrulewidth}{0pt}
-\renewcommand{\footrulewidth}{0pt}
diff --git a/doc/xsl/Makefile.in b/doc/xsl/Makefile.in
deleted file mode 100644
index 5e0d5696..00000000
--- a/doc/xsl/Makefile.in
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (C) 2005, 2007, 2012, 2014-2016 Internet Systems Consortium, Inc. ("ISC")
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-top_srcdir = @top_srcdir@
-
-SUBDIRS =
-TARGETS =
-
-@BIND9_MAKE_RULES@
-
-distclean::
- rm -f isc-docbook-chunk.xsl isc-docbook-html.xsl \
- isc-manpage.xsl isc-notes-html.xsl
diff --git a/doc/xsl/arm-param.xsl b/doc/xsl/arm-param.xsl
deleted file mode 100644
index 18af35c0..00000000
--- a/doc/xsl/arm-param.xsl
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
-<!--
- - Copyright (C) 2015, 2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:xi="http://www.w3.org/2001/XInclude"
- xmlns:db="http://docbook.org/ns/docbook">
-
- <!-- <optional> and <command> rendered in <programlisting>s.
- For each overriden element, the parameters must be defined.
- They are mandatory, and $probe must be set to 0 by default.
-
- Only dblatex 0.2.12, with the verbatim.boldseq template works
- here.
- -->
- <xsl:template match="optional|command" mode="latex.programlisting">
- <xsl:param name="co-tagin" select="'&lt;:'"/>
- <xsl:param name="rnode" select="/"/>
- <xsl:param name="probe" select="0"/>
-
- <xsl:call-template name="verbatim.boldseq">
- <xsl:with-param name="co-tagin" select="$co-tagin"/>
- <xsl:with-param name="rnode" select="$rnode"/>
- <xsl:with-param name="probe" select="$probe"/>
- </xsl:call-template>
- </xsl:template>
-
- <!-- skip over docinfo section when including man pages in ARM -->
- <xsl:template match="docinfo"/>
-
- <!-- Skip abstracts and sidebars -->
- <xsl:template match="abstract"/>
- <xsl:template match="sidebar"/>
-
- <!-- Two section level in the Table of contents -->
- <xsl:param name="toc.section.depth">2</xsl:param>
-
- <!-- Do not show the collaborators listed in bookinfo -->
- <xsl:param name="doc.collab.show" select="0"/>
-
- <!-- No revision history in the front matter -->
- <xsl:param name="latex.output.revhistory" select="0"/>
-
- <!-- Do not put sections for appendixes in TOC (set tocdepth=0) -->
- <!-- Do not put appendixes in TOC (set tocdepth=-1) -->
- <xsl:template match="appendix">
- <xsl:if test="not (preceding-sibling::appendix)">
- <xsl:call-template name="set-tocdepth">
- <!-- -1 for not appendix -->
- <!-- 0 for no sections from appendix -->
- <xsl:with-param name="depth" select="0"/>
- </xsl:call-template>
- </xsl:if>
- <xsl:apply-imports/>
- </xsl:template>
-
- <!-- Use the book class layout (instead of report) -->
- <xsl:param name="latex.class.book">book</xsl:param>
-
- <!-- Printable version -->
- <!-- the blue boxes won't show up in print, but change to black and the boxes
- disappeared -->
- <!-- urlcolor=black is for email addresses etc -->
- <!-- this is for a black-and-white PDF, no hyperlinks or URL colors -->
- <!-- xsl:param name="latex.class.options">nohyperlink,colorlinks,linkcolor=black,urlcolor=black</xsl:param> -->
-
- <!-- Variable list terms on line by themselves -->
- <xsl:param name="term.breakline">1</xsl:param>
-
- <!-- preface heading in TOC, 2 to get sections also -->
- <xsl:param name="preface.tocdepth">2</xsl:param>
-
- <!-- set latex secnumdepth, choose level of subsections to number -->
- <xsl:param name="doc.section.depth">1</xsl:param>
-
- <xsl:template name="inline.sansserifseq">
- <xsl:param name="content">
- <xsl:apply-templates/>
- </xsl:param>
- <xsl:text>\textsf{</xsl:text>
- <xsl:copy-of select="$content"/>
- <xsl:text>}</xsl:text>
- </xsl:template>
-
- <xsl:template match="othercredit|othername"/>
-
- <!-- 21/Oct/2009 reed - don't widen tables -->
- <xsl:param name="newtbl.autowidth">default</xsl:param>
-
- <!-- 2014-09-25 reed - use Q and A instead of number -->
- <xsl:param name="qanda.defaultlabel">qanda</xsl:param>
-
- <!-- 2014-10-07 reed - add index to table of contents -->
- <xsl:param name="index.tocdepth">5</xsl:param>
- <xsl:param name="index.numbered">0</xsl:param>
-
- <!-- Include our copyright generator -->
- <xsl:include href="copyright.xsl"/>
- <xsl:param name="isc.copyright.leader"/>
- <xsl:param name="isc.copyright.breakline"> \\</xsl:param>
-
- <xsl:template match="book" mode="docinfo">
- <xsl:apply-imports/>
- <xsl:text>\def\DBKtitle{</xsl:text>
- <xsl:value-of select="info/title"/>
- <xsl:text>}&#10;</xsl:text>
-
- <xsl:text>\def\DBKcopyright{</xsl:text>
- <xsl:value-of select="$isc.copyright"/>
- <xsl:text>}&#10;</xsl:text>
- </xsl:template>
-
-</xsl:stylesheet>
diff --git a/doc/xsl/copyright.xsl b/doc/xsl/copyright.xsl
deleted file mode 100644
index c46d55f1..00000000
--- a/doc/xsl/copyright.xsl
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
- - Copyright (C) 2005, 2007, 2009, 2015, 2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
-<!-- $Id$ -->
-
-<!-- Generate ISC copyright comments from Docbook copyright metadata. -->
-
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:xi="http://www.w3.org/2001/XInclude"
- xmlns:db="http://docbook.org/ns/docbook">
-
- <xsl:template name="isc.copyright.format">
- <xsl:param name="text"/>
- <xsl:value-of select="$isc.copyright.leader"/>
- <xsl:value-of select="normalize-space(substring-before($text, '&#10;'))"/>
- <xsl:text>&#10;</xsl:text>
- <xsl:variable name="rest" select="substring-after($text, '&#10;')"/>
- <xsl:if test="translate($rest, '&#9;&#32;', '')">
- <xsl:call-template name="isc.copyright.format">
- <xsl:with-param name="text" select="$rest"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:template>
-
- <xsl:variable name="isc.copyright.text">
- <xsl:text>
- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/.
- </xsl:text>
- </xsl:variable>
-
- <xsl:variable name="isc.copyright">
- <xsl:call-template name="isc.copyright.format">
- <xsl:with-param name="text">
- <xsl:for-each select="db:book/db:info/db:copyright | db:refentry/db:docinfo/db:copyright">
- <xsl:text>Copyright (C) </xsl:text>
- <xsl:call-template name="copyright.years">
- <xsl:with-param name="years" select="db:year"/>
- </xsl:call-template>
- <xsl:text> </xsl:text>
- <xsl:value-of select="db:holder"/>
- <xsl:value-of select="$isc.copyright.breakline"/>
- <xsl:text>&#10;</xsl:text>
- </xsl:for-each>
- <xsl:value-of select="$isc.copyright.text"/>
- </xsl:with-param>
- </xsl:call-template>
- </xsl:variable>
-</xsl:stylesheet>
-
-<!--
- - Local variables:
- - mode: sgml
- - End:
- -->
diff --git a/doc/xsl/graphics/caution.eps b/doc/xsl/graphics/caution.eps
deleted file mode 100644
index c9473b72..00000000
--- a/doc/xsl/graphics/caution.eps
+++ /dev/null
@@ -1,1348 +0,0 @@
-%!PS-Adobe-2.0 EPSF-1.2
-%%Title: Untitled-3
-%%Creator: FreeHand 9.0
-%%CreationDate: 2002/12/05 8:20 PM
-%%BoundingBox: 0 0 29 29
-%%FHPathName:Untitled:FreeHand 9:English:Untitled-3
-%ALDOriginalFile:Untitled:FreeHand 9:English:Untitled-3
-%ALDBoundingBox: -2 -2 29 29
-%%FHPageNum:1
-%%DocumentSuppliedResources: procset Altsys_header 4 0
-%%ColorUsage: Color
-%%DocumentProcessColors: Black
-%%EndComments
-%%BeginResource: procset Altsys_header 4 0
-userdict begin /AltsysDict 300 dict def end
-AltsysDict begin
-/bdf{bind def}bind def
-/xdf{exch def}bdf
-/defed{where{pop true}{false}ifelse}bdf
-/ndf{1 index where{pop pop pop}{dup xcheck{bind}if def}ifelse}bdf
-/d{setdash}bdf
-/h{closepath}bdf
-/H{}bdf
-/J{setlinecap}bdf
-/j{setlinejoin}bdf
-/M{setmiterlimit}bdf
-/n{newpath}bdf
-/N{newpath}bdf
-/q{gsave}bdf
-/Q{grestore}bdf
-/w{setlinewidth}bdf
-/Xic{matrix invertmatrix concat}bdf
-/Xq{matrix currentmatrix mark}bdf
-/XQ{cleartomark setmatrix}bdf
-/sepdef{
-dup where not
-{
-AltsysSepDict
-}
-if
-3 1 roll exch put
-}bdf
-/st{settransfer}bdf
-/colorimage defed /_rci xdf
-/cntr 0 def
-/readbinarystring{
-/cntr 0 def
-2 copy readstring
-{
-{
-dup
-(\034) search
-{
-length exch pop exch
-dup length 0 ne
-{
-dup dup 0 get 32 sub 0 exch put
-/cntr cntr 1 add def
-}
-{
-pop 1 string dup
-0 6 index read pop 32 sub put
-}ifelse
-3 copy
-putinterval pop
-1 add
-1 index length 1 sub
-1 index sub
-dup 0 le {pop pop exit}if
-getinterval
-}
-{
-pop exit
-} ifelse
-} loop
-}if
-cntr 0 gt
-{
-pop 2 copy
-dup length cntr sub cntr getinterval
-readbinarystring
-} if
-pop exch pop
-} bdf
-/_NXLevel2 defed {
-_NXLevel2 not {
-/colorimage where {
-userdict eq {
-/_rci false def
-} if
-} if
-} if
-} if
-/md defed{
-md type /dicttype eq {
-/colorimage where {
-md eq {
-/_rci false def
-}if
-}if
-/settransfer where {
-md eq {
-/st systemdict /settransfer get def
-}if
-}if
-}if
-}if
-/setstrokeadjust defed
-{
-true setstrokeadjust
-/C{curveto}bdf
-/L{lineto}bdf
-/m{moveto}bdf
-}
-{
-/dr{transform .25 sub round .25 add
-exch .25 sub round .25 add exch itransform}bdf
-/C{dr curveto}bdf
-/L{dr lineto}bdf
-/m{dr moveto}bdf
-/setstrokeadjust{pop}bdf
-}ifelse
-/privrectpath {
-4 -2 roll m
-dtransform round exch round exch idtransform
-2 copy 0 lt exch 0 lt xor
-{dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto}
-{exch dup 0 rlineto exch 0 exch rlineto neg 0 rlineto}
-ifelse
-closepath
-}bdf
-/rectclip{newpath privrectpath clip newpath}def
-/rectfill{gsave newpath privrectpath fill grestore}def
-/rectstroke{gsave newpath privrectpath stroke grestore}def
-/_fonthacksave false def
-/currentpacking defed
-{
-/_bfh {/_fonthacksave currentpacking def false setpacking} bdf
-/_efh {_fonthacksave setpacking} bdf
-}
-{
-/_bfh {} bdf
-/_efh {} bdf
-}ifelse
-/packedarray{array astore readonly}ndf
-/`
-{
-false setoverprint
-/-save0- save def
-5 index concat
-pop
-storerect left bottom width height rectclip
-pop
-/MMdict_count countdictstack def
-/MMop_count count 1 sub def
-userdict begin
-/showpage {} def
-0 setgray 0 setlinecap 1 setlinewidth
-0 setlinejoin 10 setmiterlimit [] 0 setdash newpath
-} bdf
-/currentpacking defed{true setpacking}if
-/min{2 copy gt{exch}if pop}bdf
-/max{2 copy lt{exch}if pop}bdf
-/xformfont { currentfont exch makefont setfont } bdf
-/fhnumcolors 1
-statusdict begin
-/processcolors defed
-{
-pop processcolors
-}
-{
-/deviceinfo defed {
-deviceinfo /Colors known {
-pop deviceinfo /Colors get
-} if
-} if
-} ifelse
-end
-def
-/printerRes
-gsave
-matrix defaultmatrix setmatrix
-72 72 dtransform
-abs exch abs
-max
-grestore
-def
-/graycalcs
-[
-{Angle Frequency}
-{GrayAngle GrayFrequency}
-{0 Width Height matrix defaultmatrix idtransform
-dup mul exch dup mul add sqrt 72 exch div}
-{0 GrayWidth GrayHeight matrix defaultmatrix idtransform
-dup mul exch dup mul add sqrt 72 exch div}
-] def
-/calcgraysteps {
-forcemaxsteps
-{
-maxsteps
-}
-{
-/currenthalftone defed
-{currenthalftone /dicttype eq}{false}ifelse
-{
-currenthalftone begin
-HalftoneType 4 le
-{graycalcs HalftoneType 1 sub get exec}
-{
-HalftoneType 5 eq
-{
-Default begin
-{graycalcs HalftoneType 1 sub get exec}
-end
-}
-{0 60}
-ifelse
-}
-ifelse
-end
-}
-{
-currentscreen pop exch
-}
-ifelse
-printerRes 300 max exch div exch
-2 copy
-sin mul round dup mul
-3 1 roll
-cos mul round dup mul
-add 1 add
-dup maxsteps gt {pop maxsteps} if
-dup minsteps lt {pop minsteps} if
-}
-ifelse
-} bdf
-/nextrelease defed {
-/languagelevel defed not {
-/framebuffer defed {
-0 40 string framebuffer 9 1 roll 8 {pop} repeat
-dup 516 eq exch 520 eq or
-{
-/fhnumcolors 3 def
-/currentscreen {60 0 {pop pop 1}}bdf
-/calcgraysteps {maxsteps} bdf
-}if
-}if
-}if
-}if
-fhnumcolors 1 ne {
-/calcgraysteps {maxsteps} bdf
-} if
-/currentpagedevice defed {
-currentpagedevice /PreRenderingEnhance known
-{
-currentpagedevice /PreRenderingEnhance get
-{
-/calcgraysteps
-{
-forcemaxsteps
-{maxsteps}
-{256 maxsteps min}
-ifelse
-} def
-} if
-} if
-} if
-/gradfrequency 144 def
-printerRes 1000 lt {
-/gradfrequency 72 def
-} if
-/adjnumsteps {
-dup dtransform abs exch abs max
-printerRes div
-gradfrequency mul
-round
-5 max
-min
-}bdf
-/goodsep {
-spots exch get 4 get dup sepname eq exch (_vc_Registration) eq or
-}bdf
-/BeginGradation defed
-{/bb{BeginGradation}bdf}
-{/bb{}bdf}
-ifelse
-/EndGradation defed
-{/eb{EndGradation}bdf}
-{/eb{}bdf}
-ifelse
-/bottom -0 def
-/delta -0 def
-/frac -0 def
-/height -0 def
-/left -0 def
-/numsteps1 -0 def
-/radius -0 def
-/right -0 def
-/top -0 def
-/width -0 def
-/xt -0 def
-/yt -0 def
-/df currentflat def
-/tempstr 1 string def
-/clipflatness currentflat def
-/inverted?
-0 currenttransfer exec .5 ge def
-/tc1 [0 0 0 1] def
-/tc2 [0 0 0 1] def
-/storerect{/top xdf /right xdf /bottom xdf /left xdf
-/width right left sub def /height top bottom sub def}bdf
-/concatprocs{
-systemdict /packedarray known
-{dup type /packedarraytype eq 2 index type /packedarraytype eq or}{false}ifelse
-{
-/proc2 exch cvlit def /proc1 exch cvlit def
-proc1 aload pop proc2 aload pop
-proc1 length proc2 length add packedarray cvx
-}
-{
-/proc2 exch cvlit def /proc1 exch cvlit def
-/newproc proc1 length proc2 length add array def
-newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval
-newproc cvx
-}ifelse
-}bdf
-/i{dup 0 eq
-{pop df dup}
-{dup} ifelse
-/clipflatness xdf setflat
-}bdf
-version cvr 38.0 le
-{/setrgbcolor{
-currenttransfer exec 3 1 roll
-currenttransfer exec 3 1 roll
-currenttransfer exec 3 1 roll
-setrgbcolor}bdf}if
-/vms {/vmsv save def} bdf
-/vmr {vmsv restore} bdf
-/vmrs{vmsv restore /vmsv save def}bdf
-/eomode{
-{/filler /eofill load def /clipper /eoclip load def}
-{/filler /fill load def /clipper /clip load def}
-ifelse
-}bdf
-/normtaper{}bdf
-/logtaper{9 mul 1 add log}bdf
-/CD{
-/NF exch def
-{
-exch dup
-/FID ne 1 index/UniqueID ne and
-{exch NF 3 1 roll put}
-{pop pop}
-ifelse
-}forall
-NF
-}bdf
-/MN{
-1 index length
-/Len exch def
-dup length Len add
-string dup
-Len
-4 -1 roll
-putinterval
-dup
-0
-4 -1 roll
-putinterval
-}bdf
-/RC{4 -1 roll /ourvec xdf 256 string cvs(|______)anchorsearch
-{1 index MN cvn/NewN exch def cvn
-findfont dup maxlength dict CD dup/FontName NewN put dup
-/Encoding ourvec put NewN exch definefont pop}{pop}ifelse}bdf
-/RF{
-dup
-FontDirectory exch
-known
-{pop 3 -1 roll pop}
-{RC}
-ifelse
-}bdf
-/FF{dup 256 string cvs(|______)exch MN cvn dup FontDirectory exch known
-{exch pop findfont 3 -1 roll pop}
-{pop dup findfont dup maxlength dict CD dup dup
-/Encoding exch /Encoding get 256 array copy 7 -1 roll
-{3 -1 roll dup 4 -2 roll put}forall put definefont}
-ifelse}bdf
-/RCJ{4 -1 roll
-/ourvec xdf
-256 string cvs
-(|______) anchorsearch
-{pop
-cvn
-dup FDFJ
-exch
-1 index
-eq
-{
-_bfh findfont _efh
-dup
-maxlength dict
-CD
-dup
-/FontName
-3 index
-put
-dup
-/Encoding ourvec put
-1 index
-exch
-definefont
-pop
-}
-{exch pop}
-ifelse
-}
-{pop}
-ifelse
-}bdf
-/RFJ{
-dup
-FontDirectory exch
-known
-{pop 3 -1 roll pop}
-{RCJ}
-ifelse
-}bdf
-/hasfont
-{
-/resourcestatus where
-{
-pop
-/Font resourcestatus
-{
-pop pop true
-}
-{
-false
-}
-ifelse
-}
-{
-dup FontDirectory exch known
-{pop true}
-{
-256 string
-cvs
-(fonts/) exch MN
-status
-{pop pop pop pop true}
-{false}
-ifelse
-}
-ifelse
-}
-ifelse
-}bdf
-/FDFJ
-{
-dup
-hasfont
-not
-{
-pop
-/Ryumin-Light-83pv-RKSJ-H
-hasfont
-{
-/Ryumin-Light-83pv-RKSJ-H
-}
-{
-/Courier
-}
-ifelse
-}
-if
-}bdf
-/FFJ{
-_bfh
-dup
-256 string cvs
-(|______)exch MN
-cvn
-dup
-FontDirectory
-exch known
-{
-exch
-pop
-findfont
-3 -1 roll
-pop
-}
-{
-pop
-FDFJ
-dup findfont
-dup maxlength dict
-CD
-dup dup
-/Encoding exch
-/Encoding get
-256 array copy
-7 -1 roll
-{
-3 -1 roll
-dup
-4 -2 roll
-put
-}forall
-put
-definefont
-}
-ifelse
-_efh
-}bdf
-/GS {
-dup
-hasfont
-{
-findfont
-exch makesetfont
-exch
-pop
-ts
-}
-{
-pop pop pop
-ts
-} ifelse
-} bdf
-/RCK{4 -1 roll
-/ourvec xdf
-256 string cvs
-(|______) anchorsearch
-{pop
-cvn
-dup FDFK
-exch
-1 index
-eq
-{
-_bfh findfont _efh
-dup
-maxlength dict
-CD
-dup
-/FontName
-3 index
-put
-dup
-/Encoding ourvec put
-1 index
-exch
-definefont
-pop
-}
-{exch pop}
-ifelse
-}
-{pop}
-ifelse
-}bdf
-/RFK{
-dup
-FontDirectory exch
-known
-{pop 3 -1 roll pop}
-{RCK}
-ifelse
-}bdf
-/hasfont
-{
-/resourcestatus where
-{
-pop
-/Font resourcestatus
-{
-pop pop true
-}
-{
-false
-}
-ifelse
-}
-{
-dup FontDirectory exch known
-{pop true}
-{
-256 string
-cvs
-(fonts/) exch MN
-status
-{pop pop pop pop true}
-{false}
-ifelse
-}
-ifelse
-}
-ifelse
-}bdf
-/FDFK
-{
-dup
-hasfont
-not
-{
-pop
-/JCsm
-hasfont
-{
-/JCsm
-}
-{
-/Courier
-}
-ifelse
-}
-if
-}bdf
-/FFK{
-_bfh
-dup
-256 string cvs
-(|______)exch MN
-cvn
-dup
-FontDirectory
-exch known
-{
-exch
-pop
-findfont
-3 -1 roll
-pop
-}
-{
-pop
-FDFK
-dup findfont
-dup maxlength dict
-CD
-dup dup
-/Encoding exch
-/Encoding get
-256 array copy
-7 -1 roll
-{
-3 -1 roll
-dup
-4 -2 roll
-put
-}forall
-put
-definefont
-}
-ifelse
-_efh
-}bdf
-/RCTC{4 -1 roll
-/ourvec xdf
-256 string cvs
-(|______) anchorsearch
-{pop
-cvn
-dup FDFTC
-exch
-1 index
-eq
-{
-_bfh findfont _efh
-dup
-maxlength dict
-CD
-dup
-/FontName
-3 index
-put
-dup
-/Encoding ourvec put
-1 index
-exch
-definefont
-pop
-}
-{exch pop}
-ifelse
-}
-{pop}
-ifelse
-}bdf
-/RFTC{
-dup
-FontDirectory exch
-known
-{pop 3 -1 roll pop}
-{RCTC}
-ifelse
-}bdf
-/FDFTC
-{
-dup
-hasfont
-not
-{
-pop
-/DFMing-Lt-HK-BF
-hasfont
-{
-/DFMing-Lt-HK-BF
-}
-{
-/Courier
-}
-ifelse
-}
-if
-}bdf
-/FFTC{
-_bfh
-dup
-256 string cvs
-(|______)exch MN
-cvn
-dup
-FontDirectory
-exch known
-{
-exch
-pop
-findfont
-3 -1 roll
-pop
-}
-{
-pop
-FDFTC
-dup findfont
-dup maxlength dict
-CD
-dup dup
-/Encoding exch
-/Encoding get
-256 array copy
-7 -1 roll
-{
-3 -1 roll
-dup
-4 -2 roll
-put
-}forall
-put
-definefont
-}
-ifelse
-_efh
-}bdf
-/fps{
-currentflat
-exch
-dup 0 le{pop 1}if
-{
-dup setflat 3 index stopped
-{1.3 mul dup 3 index gt{pop setflat pop pop stop}if}
-{exit}
-ifelse
-}loop
-pop setflat pop pop
-}bdf
-/fp{100 currentflat fps}bdf
-/clipper{clip}bdf
-/W{/clipper load 100 clipflatness dup setflat fps}bdf
-
-userdict begin /BDFontDict 29 dict def end
-BDFontDict begin
-/bu{}def
-/bn{}def
-/setTxMode{av 70 ge{pop}if pop}def
-/gm{m}def
-/show{pop}def
-/gr{pop}def
-/fnt{pop pop pop}def
-/fs{pop}def
-/fz{pop}def
-/lin{pop pop}def
-/:M {pop pop} def
-/sf {pop} def
-/S {pop} def
-/@b {pop pop pop pop pop pop pop pop} def
-/_bdsave /save load def
-/_bdrestore /restore load def
-/save { dup /fontsave eq {null} {_bdsave} ifelse } def
-/restore { dup null eq { pop } { _bdrestore } ifelse } def
-/fontsave null def
-end
-/MacVec 256 array def
-MacVec 0 /Helvetica findfont
-/Encoding get 0 128 getinterval putinterval
-MacVec 127 /DEL put MacVec 16#27 /quotesingle put MacVec 16#60 /grave put
-/NUL/SOH/STX/ETX/EOT/ENQ/ACK/BEL/BS/HT/LF/VT/FF/CR/SO/SI
-/DLE/DC1/DC2/DC3/DC4/NAK/SYN/ETB/CAN/EM/SUB/ESC/FS/GS/RS/US
-MacVec 0 32 getinterval astore pop
-/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute
-/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave
-/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute
-/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis
-/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
-/registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash
-/infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation
-/product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash
-/questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft
-/guillemotright/ellipsis/nbspace/Agrave/Atilde/Otilde/OE/oe
-/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge
-/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl
-/daggerdbl/periodcentered/quotesinglbase/quotedblbase
-/perthousand/Acircumflex/Ecircumflex/Aacute
-/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave/Oacute/Ocircumflex
-/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde
-/macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron
-MacVec 128 128 getinterval astore pop
-/findheaderfont {
-/Helvetica findfont
-} def
-end %. AltsysDict
-%%EndResource
-%%EndProlog
-
-%%BeginSetup
-
-AltsysDict begin
-_bfh
-
-_efh
-end %. AltsysDict
-
-%%EndSetup
-AltsysDict begin
-
-/onlyk4{false}ndf
-/ccmyk{dup 5 -1 roll sub 0 max exch}ndf
-/cmyk2gray{
-4 -1 roll 0.3 mul 4 -1 roll 0.59 mul 4 -1 roll 0.11 mul
-add add add 1 min neg 1 add
-}bdf
-/setcmykcolor{1 exch sub ccmyk ccmyk ccmyk pop setrgbcolor}ndf
-/maxcolor {
-max max max
-} ndf
-/maxspot {
-pop
-} ndf
-/setcmykcoloroverprint{4{dup -1 eq{pop 0}if 4 1 roll}repeat setcmykcolor}ndf
-/findcmykcustomcolor{5 packedarray}ndf
-/setcustomcolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndf
-/setseparationgray{setgray}ndf
-/setoverprint{pop}ndf
-/currentoverprint false ndf
-/cmykbufs2gray{
-0 1 2 index length 1 sub
-{
-4 index 1 index get 0.3 mul
-4 index 2 index get 0.59 mul
-4 index 3 index get 0.11 mul
-4 index 4 index get
-add add add cvi 255 min
-255 exch sub
-2 index 3 1 roll put
-}for
-4 1 roll pop pop pop
-}bdf
-/colorimage{
-pop pop
-[
-5 -1 roll/exec cvx
-6 -1 roll/exec cvx
-7 -1 roll/exec cvx
-8 -1 roll/exec cvx
-/cmykbufs2gray cvx
-]cvx
-image
-}
-%. version 47.1 on Linotronic of Postscript defines colorimage incorrectly (rgb model only)
-version cvr 47.1 le
-statusdict /product get (Lino) anchorsearch{pop pop true}{pop false}ifelse
-and{userdict begin bdf end}{ndf}ifelse
-fhnumcolors 1 ne {/yt save def} if
-/customcolorimage{
-aload pop
-(_vc_Registration) eq
-{
-pop pop pop pop separationimage
-}
-{
-/ik xdf /iy xdf /im xdf /ic xdf
-ic im iy ik cmyk2gray /xt xdf
-currenttransfer
-{dup 1.0 exch sub xt mul add}concatprocs
-st
-image
-}
-ifelse
-}ndf
-fhnumcolors 1 ne {yt restore} if
-fhnumcolors 3 ne {/yt save def} if
-/customcolorimage{
-aload pop
-(_vc_Registration) eq
-{
-pop pop pop pop separationimage
-}
-{
-/ik xdf /iy xdf /im xdf /ic xdf
-1.0 dup ic ik add min sub
-1.0 dup im ik add min sub
-1.0 dup iy ik add min sub
-/ic xdf /iy xdf /im xdf
-currentcolortransfer
-4 1 roll
-{dup 1.0 exch sub ic mul add}concatprocs 4 1 roll
-{dup 1.0 exch sub iy mul add}concatprocs 4 1 roll
-{dup 1.0 exch sub im mul add}concatprocs 4 1 roll
-setcolortransfer
-{/dummy xdf dummy}concatprocs{dummy}{dummy}true 3 colorimage
-}
-ifelse
-}ndf
-fhnumcolors 3 ne {yt restore} if
-fhnumcolors 4 ne {/yt save def} if
-/customcolorimage{
-aload pop
-(_vc_Registration) eq
-{
-pop pop pop pop separationimage
-}
-{
-/ik xdf /iy xdf /im xdf /ic xdf
-currentcolortransfer
-{1.0 exch sub ik mul ik sub 1 add}concatprocs 4 1 roll
-{1.0 exch sub iy mul iy sub 1 add}concatprocs 4 1 roll
-{1.0 exch sub im mul im sub 1 add}concatprocs 4 1 roll
-{1.0 exch sub ic mul ic sub 1 add}concatprocs 4 1 roll
-setcolortransfer
-{/dummy xdf dummy}concatprocs{dummy}{dummy}{dummy}
-true 4 colorimage
-}
-ifelse
-}ndf
-fhnumcolors 4 ne {yt restore} if
-/separationimage{image}ndf
-/spotascmyk false ndf
-/newcmykcustomcolor{6 packedarray}ndf
-/inkoverprint false ndf
-/setinkoverprint{pop}ndf
-/setspotcolor {
-spots exch get
-dup 4 get (_vc_Registration) eq
-{pop 1 exch sub setseparationgray}
-{0 5 getinterval exch setcustomcolor}
-ifelse
-}ndf
-/currentcolortransfer{currenttransfer dup dup dup}ndf
-/setcolortransfer{st pop pop pop}ndf
-/fas{}ndf
-/sas{}ndf
-/fhsetspreadsize{pop}ndf
-/filler{fill}bdf
-/F{gsave {filler}fp grestore}bdf
-/f{closepath F}bdf
-/S{gsave {stroke}fp grestore}bdf
-/s{closepath S}bdf
-userdict /islevel2
-systemdict /languagelevel known dup
-{
-pop systemdict /languagelevel get 2 ge
-} if
-put
-islevel2 not
-{
-/currentcmykcolor
-{
-0 0 0 1 currentgray sub
-} ndf
-} if
-/tc
-{
-gsave
-setcmykcolor currentcmykcolor
-grestore
-} bind def
-/testCMYKColorThrough
-{
-tc add add add 0 ne
-} bind def
-/fhiscomposite where not {
-userdict /fhiscomposite
-islevel2
-{
-gsave 1 1 1 1 setcmykcolor currentcmykcolor grestore
-add add add 4 eq
-}
-{
-1 0 0 0 testCMYKColorThrough
-0 1 0 0 testCMYKColorThrough
-0 0 1 0 testCMYKColorThrough
-0 0 0 1 testCMYKColorThrough
-and and and
-} ifelse
-put
-}
-{ pop }
-ifelse
-/bc4 [0 0 0 0] def
-/_lfp4 {
-1 pop
-/yt xdf
-/xt xdf
-/ang xdf
-storerect
-/taperfcn xdf
-/k2 xdf /y2 xdf /m2 xdf /c2 xdf
-/k1 xdf /y1 xdf /m1 xdf /c1 xdf
-c1 c2 sub abs
-m1 m2 sub abs
-y1 y2 sub abs
-k1 k2 sub abs
-maxcolor
-calcgraysteps mul abs round
-height abs adjnumsteps
-dup 1 lt {pop 1} if
-1 sub /numsteps1 xdf
-currentflat mark
-currentflat clipflatness
-/delta top bottom sub numsteps1 1 add div def
-/right right left sub def
-/botsv top delta sub def
-{
-{
-W
-xt yt translate
-ang rotate
-xt neg yt neg translate
-dup setflat
-/bottom botsv def
-0 1 numsteps1
-{
-numsteps1 dup 0 eq {pop pop 0.5} {div} ifelse
-taperfcn /frac xdf
-bc4 0 c2 c1 sub frac mul c1 add put
-bc4 1 m2 m1 sub frac mul m1 add put
-bc4 2 y2 y1 sub frac mul y1 add put
-bc4 3 k2 k1 sub frac mul k1 add put
-bc4 vc
-1 index setflat
-{
-mark {newpath left bottom right delta rectfill}stopped
-{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if}
-{cleartomark exit}ifelse
-}loop
-/bottom bottom delta sub def
-}for
-}
-gsave stopped grestore
-{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if}
-{exit}ifelse
-}loop
-cleartomark setflat
-}bdf
-/bcs [0 0] def
-/_lfs4 {
-/yt xdf
-/xt xdf
-/ang xdf
-storerect
-/taperfcn xdf
-/tint2 xdf
-/tint1 xdf
-bcs exch 1 exch put
-tint1 tint2 sub abs
-bcs 1 get maxspot
-calcgraysteps mul abs round
-height abs adjnumsteps
-dup 2 lt {pop 2} if
-1 sub /numsteps1 xdf
-currentflat mark
-currentflat clipflatness
-/delta top bottom sub numsteps1 1 add div def
-/right right left sub def
-/botsv top delta sub def
-{
-{
-W
-xt yt translate
-ang rotate
-xt neg yt neg translate
-dup setflat
-/bottom botsv def
-0 1 numsteps1
-{
-numsteps1 div taperfcn /frac xdf
-bcs 0
-1.0 tint2 tint1 sub frac mul tint1 add sub
-put bcs vc
-1 index setflat
-{
-mark {newpath left bottom right delta rectfill}stopped
-{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if}
-{cleartomark exit}ifelse
-}loop
-/bottom bottom delta sub def
-}for
-}
-gsave stopped grestore
-{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if}
-{exit}ifelse
-}loop
-cleartomark setflat
-}bdf
-/_rfs6 {
-/tint2 xdf
-/tint1 xdf
-bcs exch 1 exch put
-/inrad xdf
-/radius xdf
-/yt xdf
-/xt xdf
-tint1 tint2 sub abs
-bcs 1 get maxspot
-calcgraysteps mul abs round
-radius inrad sub abs
-adjnumsteps
-dup 1 lt {pop 1} if
-1 sub /numsteps1 xdf
-radius inrad sub numsteps1 dup 0 eq {pop} {div} ifelse
-2 div /halfstep xdf
-currentflat mark
-currentflat clipflatness
-{
-{
-dup setflat
-W
-0 1 numsteps1
-{
-dup /radindex xdf
-numsteps1 dup 0 eq {pop pop 0.5} {div} ifelse
-/frac xdf
-bcs 0
-tint2 tint1 sub frac mul tint1 add
-put bcs vc
-1 index setflat
-{
-newpath mark
-xt yt radius inrad sub 1 frac sub mul halfstep add inrad add 0 360
-{ arc
-radindex numsteps1 ne
-inrad 0 gt or
-{
-xt yt
-numsteps1 0 eq
-{ inrad }
-{
-radindex 1 add numsteps1 div 1 exch sub
-radius inrad sub mul halfstep add inrad add
-}ifelse
-dup xt add yt moveto
-360 0 arcn
-} if
-fill
-}stopped
-{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if}
-{cleartomark exit}ifelse
-}loop
-}for
-}
-gsave stopped grestore
-{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if}
-{exit}ifelse
-}loop
-cleartomark setflat
-}bdf
-/_rfp6 {
-1 pop
-/k2 xdf /y2 xdf /m2 xdf /c2 xdf
-/k1 xdf /y1 xdf /m1 xdf /c1 xdf
-/inrad xdf
-/radius xdf
-/yt xdf
-/xt xdf
-c1 c2 sub abs
-m1 m2 sub abs
-y1 y2 sub abs
-k1 k2 sub abs
-maxcolor
-calcgraysteps mul abs round
-radius inrad sub abs
-adjnumsteps
-dup 1 lt {pop 1} if
-1 sub /numsteps1 xdf
-radius inrad sub numsteps1 dup 0 eq {pop} {div} ifelse
-2 div /halfstep xdf
-currentflat mark
-currentflat clipflatness
-{
-{
-dup setflat
-W
-0 1 numsteps1
-{
-dup /radindex xdf
-numsteps1 dup 0 eq {pop pop 0.5} {div} ifelse
-/frac xdf
-bc4 0 c2 c1 sub frac mul c1 add put
-bc4 1 m2 m1 sub frac mul m1 add put
-bc4 2 y2 y1 sub frac mul y1 add put
-bc4 3 k2 k1 sub frac mul k1 add put
-bc4 vc
-1 index setflat
-{
-newpath mark
-xt yt radius inrad sub 1 frac sub mul halfstep add inrad add 0 360
-{ arc
-radindex numsteps1 ne
-inrad 0 gt or
-{
-xt yt
-numsteps1 0 eq
-{ inrad }
-{
-radindex 1 add numsteps1 div 1 exch sub
-radius inrad sub mul halfstep add inrad add
-}ifelse
-dup xt add yt moveto
-360 0 arcn
-} if
-fill
-}stopped
-{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if}
-{cleartomark exit}ifelse
-}loop
-}for
-}
-gsave stopped grestore
-{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if}
-{exit}ifelse
-}loop
-cleartomark setflat
-}bdf
-/lfp4{_lfp4}ndf
-/lfs4{_lfs4}ndf
-/rfs6{_rfs6}ndf
-/rfp6{_rfp6}ndf
-/cvc [0 0 0 1] def
-/vc{
-AltsysDict /cvc 2 index put
-aload length dup 4 eq
-{pop dup -1 eq{pop setrgbcolor}{setcmykcolor}ifelse}
-{6 eq {sethexcolor} {setspotcolor} ifelse }
-ifelse
-}bdf
-0 setseparationgray
-/imgr {1692.47 1570.59 1723.65 1601.77 } def
-/bleed 0 def
-/clpr {1692.47 1570.59 1723.65 1601.77 } def
-/xs 1 def
-/ys 1 def
-/botx 0 def
-/overlap 0 def
-/wdist 18 def
-0 2 mul fhsetspreadsize
-0 0 ne {/df 0 def /clipflatness 0 def} if
-/maxsteps 256 def
-/forcemaxsteps false def
-/minsteps 0 def
-
-userdict begin /AGDOrigMtx matrix currentmatrix def end
-vms
--1694 -1572 translate
-
-/currentpacking defed{false setpacking}if
-/spots[
-
-1 0 0 0 (Process Cyan) false newcmykcustomcolor
-
-0 1 0 0 (Process Magenta) false newcmykcustomcolor
-
-0 0 1 0 (Process Yellow) false newcmykcustomcolor
-
-0 0 0 1 (Process Black) false newcmykcustomcolor
-]def
-n
-[] 0 d
-3.863708 M
-1 w
-0 j
-0 J
-false setoverprint
-0 i
-false eomode
-[0 0 0 1]vc
-vms
-q
-[1 0 0 1 -249.981674 -586.867554] concat
-vms
-1946.9506 2177.5114 m
-1954.4907 2185.0516 L
-1956.7047 2187.2656 1960.2943 2187.2656 1962.5083 2185.0516 C
-1970.0485 2177.5114 L
-1972.2625 2175.2974 1972.2625 2171.7078 1970.0485 2169.4938 C
-1962.5083 2161.9537 L
-1960.2943 2159.7396 1956.7047 2159.7396 1954.4907 2161.9537 C
-1946.9506 2169.4938 L
-1944.7365 2171.7078 1944.7365 2175.2974 1946.9506 2177.5114 C
-s
-n
-true eomode
-1958.5469 2181.0039 m
-1959.2148 2181.0039 1959.7012 2180.9296 1960.0059 2180.7813 C
-1960.3142 2180.6326 1960.4684 2180.363 1960.4688 2179.9727 C
-1960.4688 2179.7383 1960.3398 2178.8026 1960.082 2177.166 C
-1959.0742 2170.4219 L
-1958.9373 2170.3241 1958.7615 2170.2754 1958.5469 2170.2754 C
-1958.3319 2170.2754 1958.1561 2170.3241 1958.0195 2170.4219 C
-1957.0117 2177.166 L
-1956.7539 2178.8026 1956.625 2179.7379 1956.625 2179.9727 C
-1956.625 2180.363 1956.7792 2180.6326 1957.0879 2180.7813 C
-1957.4003 2180.9296 1957.8866 2181.0035 1958.5469 2181.0039 C
-h
-1958.5469 2165.166 m
-1958.0389 2165.166 1957.5878 2165.3499 1957.1934 2165.7168 C
-1956.7986 2166.0837 1956.6016 2166.5485 1956.6016 2167.1113 C
-1956.6016 2167.6698 1956.7891 2168.1404 1957.1641 2168.5234 C
-1957.5427 2168.9102 1958.0038 2169.1035 1958.5469 2169.1035 C
-1959.1094 2169.1035 1959.5741 2168.9043 1959.9414 2168.5059 C
-1960.3083 2168.1074 1960.4918 2167.6423 1960.4922 2167.1113 C
-1960.4922 2166.748 1960.4102 2166.4177 1960.2461 2166.1211 C
-1960.082 2165.8241 1959.8513 2165.5916 1959.5547 2165.4238 C
-1959.2577 2165.2521 1958.9219 2165.1664 1958.5469 2165.166 C
-true setoverprint
-f
-false setoverprint
-n
-vmr
-Q
-false eomode
-vmr
-vmr
-end
-%%Trailer
diff --git a/doc/xsl/graphics/caution.pdf b/doc/xsl/graphics/caution.pdf
deleted file mode 100644
index ff7c0039..00000000
--- a/doc/xsl/graphics/caution.pdf
+++ /dev/null
Binary files differ
diff --git a/doc/xsl/graphics/important.eps b/doc/xsl/graphics/important.eps
deleted file mode 100644
index c9473b72..00000000
--- a/doc/xsl/graphics/important.eps
+++ /dev/null
@@ -1,1348 +0,0 @@
-%!PS-Adobe-2.0 EPSF-1.2
-%%Title: Untitled-3
-%%Creator: FreeHand 9.0
-%%CreationDate: 2002/12/05 8:20 PM
-%%BoundingBox: 0 0 29 29
-%%FHPathName:Untitled:FreeHand 9:English:Untitled-3
-%ALDOriginalFile:Untitled:FreeHand 9:English:Untitled-3
-%ALDBoundingBox: -2 -2 29 29
-%%FHPageNum:1
-%%DocumentSuppliedResources: procset Altsys_header 4 0
-%%ColorUsage: Color
-%%DocumentProcessColors: Black
-%%EndComments
-%%BeginResource: procset Altsys_header 4 0
-userdict begin /AltsysDict 300 dict def end
-AltsysDict begin
-/bdf{bind def}bind def
-/xdf{exch def}bdf
-/defed{where{pop true}{false}ifelse}bdf
-/ndf{1 index where{pop pop pop}{dup xcheck{bind}if def}ifelse}bdf
-/d{setdash}bdf
-/h{closepath}bdf
-/H{}bdf
-/J{setlinecap}bdf
-/j{setlinejoin}bdf
-/M{setmiterlimit}bdf
-/n{newpath}bdf
-/N{newpath}bdf
-/q{gsave}bdf
-/Q{grestore}bdf
-/w{setlinewidth}bdf
-/Xic{matrix invertmatrix concat}bdf
-/Xq{matrix currentmatrix mark}bdf
-/XQ{cleartomark setmatrix}bdf
-/sepdef{
-dup where not
-{
-AltsysSepDict
-}
-if
-3 1 roll exch put
-}bdf
-/st{settransfer}bdf
-/colorimage defed /_rci xdf
-/cntr 0 def
-/readbinarystring{
-/cntr 0 def
-2 copy readstring
-{
-{
-dup
-(\034) search
-{
-length exch pop exch
-dup length 0 ne
-{
-dup dup 0 get 32 sub 0 exch put
-/cntr cntr 1 add def
-}
-{
-pop 1 string dup
-0 6 index read pop 32 sub put
-}ifelse
-3 copy
-putinterval pop
-1 add
-1 index length 1 sub
-1 index sub
-dup 0 le {pop pop exit}if
-getinterval
-}
-{
-pop exit
-} ifelse
-} loop
-}if
-cntr 0 gt
-{
-pop 2 copy
-dup length cntr sub cntr getinterval
-readbinarystring
-} if
-pop exch pop
-} bdf
-/_NXLevel2 defed {
-_NXLevel2 not {
-/colorimage where {
-userdict eq {
-/_rci false def
-} if
-} if
-} if
-} if
-/md defed{
-md type /dicttype eq {
-/colorimage where {
-md eq {
-/_rci false def
-}if
-}if
-/settransfer where {
-md eq {
-/st systemdict /settransfer get def
-}if
-}if
-}if
-}if
-/setstrokeadjust defed
-{
-true setstrokeadjust
-/C{curveto}bdf
-/L{lineto}bdf
-/m{moveto}bdf
-}
-{
-/dr{transform .25 sub round .25 add
-exch .25 sub round .25 add exch itransform}bdf
-/C{dr curveto}bdf
-/L{dr lineto}bdf
-/m{dr moveto}bdf
-/setstrokeadjust{pop}bdf
-}ifelse
-/privrectpath {
-4 -2 roll m
-dtransform round exch round exch idtransform
-2 copy 0 lt exch 0 lt xor
-{dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto}
-{exch dup 0 rlineto exch 0 exch rlineto neg 0 rlineto}
-ifelse
-closepath
-}bdf
-/rectclip{newpath privrectpath clip newpath}def
-/rectfill{gsave newpath privrectpath fill grestore}def
-/rectstroke{gsave newpath privrectpath stroke grestore}def
-/_fonthacksave false def
-/currentpacking defed
-{
-/_bfh {/_fonthacksave currentpacking def false setpacking} bdf
-/_efh {_fonthacksave setpacking} bdf
-}
-{
-/_bfh {} bdf
-/_efh {} bdf
-}ifelse
-/packedarray{array astore readonly}ndf
-/`
-{
-false setoverprint
-/-save0- save def
-5 index concat
-pop
-storerect left bottom width height rectclip
-pop
-/MMdict_count countdictstack def
-/MMop_count count 1 sub def
-userdict begin
-/showpage {} def
-0 setgray 0 setlinecap 1 setlinewidth
-0 setlinejoin 10 setmiterlimit [] 0 setdash newpath
-} bdf
-/currentpacking defed{true setpacking}if
-/min{2 copy gt{exch}if pop}bdf
-/max{2 copy lt{exch}if pop}bdf
-/xformfont { currentfont exch makefont setfont } bdf
-/fhnumcolors 1
-statusdict begin
-/processcolors defed
-{
-pop processcolors
-}
-{
-/deviceinfo defed {
-deviceinfo /Colors known {
-pop deviceinfo /Colors get
-} if
-} if
-} ifelse
-end
-def
-/printerRes
-gsave
-matrix defaultmatrix setmatrix
-72 72 dtransform
-abs exch abs
-max
-grestore
-def
-/graycalcs
-[
-{Angle Frequency}
-{GrayAngle GrayFrequency}
-{0 Width Height matrix defaultmatrix idtransform
-dup mul exch dup mul add sqrt 72 exch div}
-{0 GrayWidth GrayHeight matrix defaultmatrix idtransform
-dup mul exch dup mul add sqrt 72 exch div}
-] def
-/calcgraysteps {
-forcemaxsteps
-{
-maxsteps
-}
-{
-/currenthalftone defed
-{currenthalftone /dicttype eq}{false}ifelse
-{
-currenthalftone begin
-HalftoneType 4 le
-{graycalcs HalftoneType 1 sub get exec}
-{
-HalftoneType 5 eq
-{
-Default begin
-{graycalcs HalftoneType 1 sub get exec}
-end
-}
-{0 60}
-ifelse
-}
-ifelse
-end
-}
-{
-currentscreen pop exch
-}
-ifelse
-printerRes 300 max exch div exch
-2 copy
-sin mul round dup mul
-3 1 roll
-cos mul round dup mul
-add 1 add
-dup maxsteps gt {pop maxsteps} if
-dup minsteps lt {pop minsteps} if
-}
-ifelse
-} bdf
-/nextrelease defed {
-/languagelevel defed not {
-/framebuffer defed {
-0 40 string framebuffer 9 1 roll 8 {pop} repeat
-dup 516 eq exch 520 eq or
-{
-/fhnumcolors 3 def
-/currentscreen {60 0 {pop pop 1}}bdf
-/calcgraysteps {maxsteps} bdf
-}if
-}if
-}if
-}if
-fhnumcolors 1 ne {
-/calcgraysteps {maxsteps} bdf
-} if
-/currentpagedevice defed {
-currentpagedevice /PreRenderingEnhance known
-{
-currentpagedevice /PreRenderingEnhance get
-{
-/calcgraysteps
-{
-forcemaxsteps
-{maxsteps}
-{256 maxsteps min}
-ifelse
-} def
-} if
-} if
-} if
-/gradfrequency 144 def
-printerRes 1000 lt {
-/gradfrequency 72 def
-} if
-/adjnumsteps {
-dup dtransform abs exch abs max
-printerRes div
-gradfrequency mul
-round
-5 max
-min
-}bdf
-/goodsep {
-spots exch get 4 get dup sepname eq exch (_vc_Registration) eq or
-}bdf
-/BeginGradation defed
-{/bb{BeginGradation}bdf}
-{/bb{}bdf}
-ifelse
-/EndGradation defed
-{/eb{EndGradation}bdf}
-{/eb{}bdf}
-ifelse
-/bottom -0 def
-/delta -0 def
-/frac -0 def
-/height -0 def
-/left -0 def
-/numsteps1 -0 def
-/radius -0 def
-/right -0 def
-/top -0 def
-/width -0 def
-/xt -0 def
-/yt -0 def
-/df currentflat def
-/tempstr 1 string def
-/clipflatness currentflat def
-/inverted?
-0 currenttransfer exec .5 ge def
-/tc1 [0 0 0 1] def
-/tc2 [0 0 0 1] def
-/storerect{/top xdf /right xdf /bottom xdf /left xdf
-/width right left sub def /height top bottom sub def}bdf
-/concatprocs{
-systemdict /packedarray known
-{dup type /packedarraytype eq 2 index type /packedarraytype eq or}{false}ifelse
-{
-/proc2 exch cvlit def /proc1 exch cvlit def
-proc1 aload pop proc2 aload pop
-proc1 length proc2 length add packedarray cvx
-}
-{
-/proc2 exch cvlit def /proc1 exch cvlit def
-/newproc proc1 length proc2 length add array def
-newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval
-newproc cvx
-}ifelse
-}bdf
-/i{dup 0 eq
-{pop df dup}
-{dup} ifelse
-/clipflatness xdf setflat
-}bdf
-version cvr 38.0 le
-{/setrgbcolor{
-currenttransfer exec 3 1 roll
-currenttransfer exec 3 1 roll
-currenttransfer exec 3 1 roll
-setrgbcolor}bdf}if
-/vms {/vmsv save def} bdf
-/vmr {vmsv restore} bdf
-/vmrs{vmsv restore /vmsv save def}bdf
-/eomode{
-{/filler /eofill load def /clipper /eoclip load def}
-{/filler /fill load def /clipper /clip load def}
-ifelse
-}bdf
-/normtaper{}bdf
-/logtaper{9 mul 1 add log}bdf
-/CD{
-/NF exch def
-{
-exch dup
-/FID ne 1 index/UniqueID ne and
-{exch NF 3 1 roll put}
-{pop pop}
-ifelse
-}forall
-NF
-}bdf
-/MN{
-1 index length
-/Len exch def
-dup length Len add
-string dup
-Len
-4 -1 roll
-putinterval
-dup
-0
-4 -1 roll
-putinterval
-}bdf
-/RC{4 -1 roll /ourvec xdf 256 string cvs(|______)anchorsearch
-{1 index MN cvn/NewN exch def cvn
-findfont dup maxlength dict CD dup/FontName NewN put dup
-/Encoding ourvec put NewN exch definefont pop}{pop}ifelse}bdf
-/RF{
-dup
-FontDirectory exch
-known
-{pop 3 -1 roll pop}
-{RC}
-ifelse
-}bdf
-/FF{dup 256 string cvs(|______)exch MN cvn dup FontDirectory exch known
-{exch pop findfont 3 -1 roll pop}
-{pop dup findfont dup maxlength dict CD dup dup
-/Encoding exch /Encoding get 256 array copy 7 -1 roll
-{3 -1 roll dup 4 -2 roll put}forall put definefont}
-ifelse}bdf
-/RCJ{4 -1 roll
-/ourvec xdf
-256 string cvs
-(|______) anchorsearch
-{pop
-cvn
-dup FDFJ
-exch
-1 index
-eq
-{
-_bfh findfont _efh
-dup
-maxlength dict
-CD
-dup
-/FontName
-3 index
-put
-dup
-/Encoding ourvec put
-1 index
-exch
-definefont
-pop
-}
-{exch pop}
-ifelse
-}
-{pop}
-ifelse
-}bdf
-/RFJ{
-dup
-FontDirectory exch
-known
-{pop 3 -1 roll pop}
-{RCJ}
-ifelse
-}bdf
-/hasfont
-{
-/resourcestatus where
-{
-pop
-/Font resourcestatus
-{
-pop pop true
-}
-{
-false
-}
-ifelse
-}
-{
-dup FontDirectory exch known
-{pop true}
-{
-256 string
-cvs
-(fonts/) exch MN
-status
-{pop pop pop pop true}
-{false}
-ifelse
-}
-ifelse
-}
-ifelse
-}bdf
-/FDFJ
-{
-dup
-hasfont
-not
-{
-pop
-/Ryumin-Light-83pv-RKSJ-H
-hasfont
-{
-/Ryumin-Light-83pv-RKSJ-H
-}
-{
-/Courier
-}
-ifelse
-}
-if
-}bdf
-/FFJ{
-_bfh
-dup
-256 string cvs
-(|______)exch MN
-cvn
-dup
-FontDirectory
-exch known
-{
-exch
-pop
-findfont
-3 -1 roll
-pop
-}
-{
-pop
-FDFJ
-dup findfont
-dup maxlength dict
-CD
-dup dup
-/Encoding exch
-/Encoding get
-256 array copy
-7 -1 roll
-{
-3 -1 roll
-dup
-4 -2 roll
-put
-}forall
-put
-definefont
-}
-ifelse
-_efh
-}bdf
-/GS {
-dup
-hasfont
-{
-findfont
-exch makesetfont
-exch
-pop
-ts
-}
-{
-pop pop pop
-ts
-} ifelse
-} bdf
-/RCK{4 -1 roll
-/ourvec xdf
-256 string cvs
-(|______) anchorsearch
-{pop
-cvn
-dup FDFK
-exch
-1 index
-eq
-{
-_bfh findfont _efh
-dup
-maxlength dict
-CD
-dup
-/FontName
-3 index
-put
-dup
-/Encoding ourvec put
-1 index
-exch
-definefont
-pop
-}
-{exch pop}
-ifelse
-}
-{pop}
-ifelse
-}bdf
-/RFK{
-dup
-FontDirectory exch
-known
-{pop 3 -1 roll pop}
-{RCK}
-ifelse
-}bdf
-/hasfont
-{
-/resourcestatus where
-{
-pop
-/Font resourcestatus
-{
-pop pop true
-}
-{
-false
-}
-ifelse
-}
-{
-dup FontDirectory exch known
-{pop true}
-{
-256 string
-cvs
-(fonts/) exch MN
-status
-{pop pop pop pop true}
-{false}
-ifelse
-}
-ifelse
-}
-ifelse
-}bdf
-/FDFK
-{
-dup
-hasfont
-not
-{
-pop
-/JCsm
-hasfont
-{
-/JCsm
-}
-{
-/Courier
-}
-ifelse
-}
-if
-}bdf
-/FFK{
-_bfh
-dup
-256 string cvs
-(|______)exch MN
-cvn
-dup
-FontDirectory
-exch known
-{
-exch
-pop
-findfont
-3 -1 roll
-pop
-}
-{
-pop
-FDFK
-dup findfont
-dup maxlength dict
-CD
-dup dup
-/Encoding exch
-/Encoding get
-256 array copy
-7 -1 roll
-{
-3 -1 roll
-dup
-4 -2 roll
-put
-}forall
-put
-definefont
-}
-ifelse
-_efh
-}bdf
-/RCTC{4 -1 roll
-/ourvec xdf
-256 string cvs
-(|______) anchorsearch
-{pop
-cvn
-dup FDFTC
-exch
-1 index
-eq
-{
-_bfh findfont _efh
-dup
-maxlength dict
-CD
-dup
-/FontName
-3 index
-put
-dup
-/Encoding ourvec put
-1 index
-exch
-definefont
-pop
-}
-{exch pop}
-ifelse
-}
-{pop}
-ifelse
-}bdf
-/RFTC{
-dup
-FontDirectory exch
-known
-{pop 3 -1 roll pop}
-{RCTC}
-ifelse
-}bdf
-/FDFTC
-{
-dup
-hasfont
-not
-{
-pop
-/DFMing-Lt-HK-BF
-hasfont
-{
-/DFMing-Lt-HK-BF
-}
-{
-/Courier
-}
-ifelse
-}
-if
-}bdf
-/FFTC{
-_bfh
-dup
-256 string cvs
-(|______)exch MN
-cvn
-dup
-FontDirectory
-exch known
-{
-exch
-pop
-findfont
-3 -1 roll
-pop
-}
-{
-pop
-FDFTC
-dup findfont
-dup maxlength dict
-CD
-dup dup
-/Encoding exch
-/Encoding get
-256 array copy
-7 -1 roll
-{
-3 -1 roll
-dup
-4 -2 roll
-put
-}forall
-put
-definefont
-}
-ifelse
-_efh
-}bdf
-/fps{
-currentflat
-exch
-dup 0 le{pop 1}if
-{
-dup setflat 3 index stopped
-{1.3 mul dup 3 index gt{pop setflat pop pop stop}if}
-{exit}
-ifelse
-}loop
-pop setflat pop pop
-}bdf
-/fp{100 currentflat fps}bdf
-/clipper{clip}bdf
-/W{/clipper load 100 clipflatness dup setflat fps}bdf
-
-userdict begin /BDFontDict 29 dict def end
-BDFontDict begin
-/bu{}def
-/bn{}def
-/setTxMode{av 70 ge{pop}if pop}def
-/gm{m}def
-/show{pop}def
-/gr{pop}def
-/fnt{pop pop pop}def
-/fs{pop}def
-/fz{pop}def
-/lin{pop pop}def
-/:M {pop pop} def
-/sf {pop} def
-/S {pop} def
-/@b {pop pop pop pop pop pop pop pop} def
-/_bdsave /save load def
-/_bdrestore /restore load def
-/save { dup /fontsave eq {null} {_bdsave} ifelse } def
-/restore { dup null eq { pop } { _bdrestore } ifelse } def
-/fontsave null def
-end
-/MacVec 256 array def
-MacVec 0 /Helvetica findfont
-/Encoding get 0 128 getinterval putinterval
-MacVec 127 /DEL put MacVec 16#27 /quotesingle put MacVec 16#60 /grave put
-/NUL/SOH/STX/ETX/EOT/ENQ/ACK/BEL/BS/HT/LF/VT/FF/CR/SO/SI
-/DLE/DC1/DC2/DC3/DC4/NAK/SYN/ETB/CAN/EM/SUB/ESC/FS/GS/RS/US
-MacVec 0 32 getinterval astore pop
-/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute
-/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave
-/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute
-/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis
-/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
-/registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash
-/infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation
-/product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash
-/questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft
-/guillemotright/ellipsis/nbspace/Agrave/Atilde/Otilde/OE/oe
-/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge
-/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl
-/daggerdbl/periodcentered/quotesinglbase/quotedblbase
-/perthousand/Acircumflex/Ecircumflex/Aacute
-/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave/Oacute/Ocircumflex
-/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde
-/macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron
-MacVec 128 128 getinterval astore pop
-/findheaderfont {
-/Helvetica findfont
-} def
-end %. AltsysDict
-%%EndResource
-%%EndProlog
-
-%%BeginSetup
-
-AltsysDict begin
-_bfh
-
-_efh
-end %. AltsysDict
-
-%%EndSetup
-AltsysDict begin
-
-/onlyk4{false}ndf
-/ccmyk{dup 5 -1 roll sub 0 max exch}ndf
-/cmyk2gray{
-4 -1 roll 0.3 mul 4 -1 roll 0.59 mul 4 -1 roll 0.11 mul
-add add add 1 min neg 1 add
-}bdf
-/setcmykcolor{1 exch sub ccmyk ccmyk ccmyk pop setrgbcolor}ndf
-/maxcolor {
-max max max
-} ndf
-/maxspot {
-pop
-} ndf
-/setcmykcoloroverprint{4{dup -1 eq{pop 0}if 4 1 roll}repeat setcmykcolor}ndf
-/findcmykcustomcolor{5 packedarray}ndf
-/setcustomcolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndf
-/setseparationgray{setgray}ndf
-/setoverprint{pop}ndf
-/currentoverprint false ndf
-/cmykbufs2gray{
-0 1 2 index length 1 sub
-{
-4 index 1 index get 0.3 mul
-4 index 2 index get 0.59 mul
-4 index 3 index get 0.11 mul
-4 index 4 index get
-add add add cvi 255 min
-255 exch sub
-2 index 3 1 roll put
-}for
-4 1 roll pop pop pop
-}bdf
-/colorimage{
-pop pop
-[
-5 -1 roll/exec cvx
-6 -1 roll/exec cvx
-7 -1 roll/exec cvx
-8 -1 roll/exec cvx
-/cmykbufs2gray cvx
-]cvx
-image
-}
-%. version 47.1 on Linotronic of Postscript defines colorimage incorrectly (rgb model only)
-version cvr 47.1 le
-statusdict /product get (Lino) anchorsearch{pop pop true}{pop false}ifelse
-and{userdict begin bdf end}{ndf}ifelse
-fhnumcolors 1 ne {/yt save def} if
-/customcolorimage{
-aload pop
-(_vc_Registration) eq
-{
-pop pop pop pop separationimage
-}
-{
-/ik xdf /iy xdf /im xdf /ic xdf
-ic im iy ik cmyk2gray /xt xdf
-currenttransfer
-{dup 1.0 exch sub xt mul add}concatprocs
-st
-image
-}
-ifelse
-}ndf
-fhnumcolors 1 ne {yt restore} if
-fhnumcolors 3 ne {/yt save def} if
-/customcolorimage{
-aload pop
-(_vc_Registration) eq
-{
-pop pop pop pop separationimage
-}
-{
-/ik xdf /iy xdf /im xdf /ic xdf
-1.0 dup ic ik add min sub
-1.0 dup im ik add min sub
-1.0 dup iy ik add min sub
-/ic xdf /iy xdf /im xdf
-currentcolortransfer
-4 1 roll
-{dup 1.0 exch sub ic mul add}concatprocs 4 1 roll
-{dup 1.0 exch sub iy mul add}concatprocs 4 1 roll
-{dup 1.0 exch sub im mul add}concatprocs 4 1 roll
-setcolortransfer
-{/dummy xdf dummy}concatprocs{dummy}{dummy}true 3 colorimage
-}
-ifelse
-}ndf
-fhnumcolors 3 ne {yt restore} if
-fhnumcolors 4 ne {/yt save def} if
-/customcolorimage{
-aload pop
-(_vc_Registration) eq
-{
-pop pop pop pop separationimage
-}
-{
-/ik xdf /iy xdf /im xdf /ic xdf
-currentcolortransfer
-{1.0 exch sub ik mul ik sub 1 add}concatprocs 4 1 roll
-{1.0 exch sub iy mul iy sub 1 add}concatprocs 4 1 roll
-{1.0 exch sub im mul im sub 1 add}concatprocs 4 1 roll
-{1.0 exch sub ic mul ic sub 1 add}concatprocs 4 1 roll
-setcolortransfer
-{/dummy xdf dummy}concatprocs{dummy}{dummy}{dummy}
-true 4 colorimage
-}
-ifelse
-}ndf
-fhnumcolors 4 ne {yt restore} if
-/separationimage{image}ndf
-/spotascmyk false ndf
-/newcmykcustomcolor{6 packedarray}ndf
-/inkoverprint false ndf
-/setinkoverprint{pop}ndf
-/setspotcolor {
-spots exch get
-dup 4 get (_vc_Registration) eq
-{pop 1 exch sub setseparationgray}
-{0 5 getinterval exch setcustomcolor}
-ifelse
-}ndf
-/currentcolortransfer{currenttransfer dup dup dup}ndf
-/setcolortransfer{st pop pop pop}ndf
-/fas{}ndf
-/sas{}ndf
-/fhsetspreadsize{pop}ndf
-/filler{fill}bdf
-/F{gsave {filler}fp grestore}bdf
-/f{closepath F}bdf
-/S{gsave {stroke}fp grestore}bdf
-/s{closepath S}bdf
-userdict /islevel2
-systemdict /languagelevel known dup
-{
-pop systemdict /languagelevel get 2 ge
-} if
-put
-islevel2 not
-{
-/currentcmykcolor
-{
-0 0 0 1 currentgray sub
-} ndf
-} if
-/tc
-{
-gsave
-setcmykcolor currentcmykcolor
-grestore
-} bind def
-/testCMYKColorThrough
-{
-tc add add add 0 ne
-} bind def
-/fhiscomposite where not {
-userdict /fhiscomposite
-islevel2
-{
-gsave 1 1 1 1 setcmykcolor currentcmykcolor grestore
-add add add 4 eq
-}
-{
-1 0 0 0 testCMYKColorThrough
-0 1 0 0 testCMYKColorThrough
-0 0 1 0 testCMYKColorThrough
-0 0 0 1 testCMYKColorThrough
-and and and
-} ifelse
-put
-}
-{ pop }
-ifelse
-/bc4 [0 0 0 0] def
-/_lfp4 {
-1 pop
-/yt xdf
-/xt xdf
-/ang xdf
-storerect
-/taperfcn xdf
-/k2 xdf /y2 xdf /m2 xdf /c2 xdf
-/k1 xdf /y1 xdf /m1 xdf /c1 xdf
-c1 c2 sub abs
-m1 m2 sub abs
-y1 y2 sub abs
-k1 k2 sub abs
-maxcolor
-calcgraysteps mul abs round
-height abs adjnumsteps
-dup 1 lt {pop 1} if
-1 sub /numsteps1 xdf
-currentflat mark
-currentflat clipflatness
-/delta top bottom sub numsteps1 1 add div def
-/right right left sub def
-/botsv top delta sub def
-{
-{
-W
-xt yt translate
-ang rotate
-xt neg yt neg translate
-dup setflat
-/bottom botsv def
-0 1 numsteps1
-{
-numsteps1 dup 0 eq {pop pop 0.5} {div} ifelse
-taperfcn /frac xdf
-bc4 0 c2 c1 sub frac mul c1 add put
-bc4 1 m2 m1 sub frac mul m1 add put
-bc4 2 y2 y1 sub frac mul y1 add put
-bc4 3 k2 k1 sub frac mul k1 add put
-bc4 vc
-1 index setflat
-{
-mark {newpath left bottom right delta rectfill}stopped
-{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if}
-{cleartomark exit}ifelse
-}loop
-/bottom bottom delta sub def
-}for
-}
-gsave stopped grestore
-{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if}
-{exit}ifelse
-}loop
-cleartomark setflat
-}bdf
-/bcs [0 0] def
-/_lfs4 {
-/yt xdf
-/xt xdf
-/ang xdf
-storerect
-/taperfcn xdf
-/tint2 xdf
-/tint1 xdf
-bcs exch 1 exch put
-tint1 tint2 sub abs
-bcs 1 get maxspot
-calcgraysteps mul abs round
-height abs adjnumsteps
-dup 2 lt {pop 2} if
-1 sub /numsteps1 xdf
-currentflat mark
-currentflat clipflatness
-/delta top bottom sub numsteps1 1 add div def
-/right right left sub def
-/botsv top delta sub def
-{
-{
-W
-xt yt translate
-ang rotate
-xt neg yt neg translate
-dup setflat
-/bottom botsv def
-0 1 numsteps1
-{
-numsteps1 div taperfcn /frac xdf
-bcs 0
-1.0 tint2 tint1 sub frac mul tint1 add sub
-put bcs vc
-1 index setflat
-{
-mark {newpath left bottom right delta rectfill}stopped
-{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if}
-{cleartomark exit}ifelse
-}loop
-/bottom bottom delta sub def
-}for
-}
-gsave stopped grestore
-{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if}
-{exit}ifelse
-}loop
-cleartomark setflat
-}bdf
-/_rfs6 {
-/tint2 xdf
-/tint1 xdf
-bcs exch 1 exch put
-/inrad xdf
-/radius xdf
-/yt xdf
-/xt xdf
-tint1 tint2 sub abs
-bcs 1 get maxspot
-calcgraysteps mul abs round
-radius inrad sub abs
-adjnumsteps
-dup 1 lt {pop 1} if
-1 sub /numsteps1 xdf
-radius inrad sub numsteps1 dup 0 eq {pop} {div} ifelse
-2 div /halfstep xdf
-currentflat mark
-currentflat clipflatness
-{
-{
-dup setflat
-W
-0 1 numsteps1
-{
-dup /radindex xdf
-numsteps1 dup 0 eq {pop pop 0.5} {div} ifelse
-/frac xdf
-bcs 0
-tint2 tint1 sub frac mul tint1 add
-put bcs vc
-1 index setflat
-{
-newpath mark
-xt yt radius inrad sub 1 frac sub mul halfstep add inrad add 0 360
-{ arc
-radindex numsteps1 ne
-inrad 0 gt or
-{
-xt yt
-numsteps1 0 eq
-{ inrad }
-{
-radindex 1 add numsteps1 div 1 exch sub
-radius inrad sub mul halfstep add inrad add
-}ifelse
-dup xt add yt moveto
-360 0 arcn
-} if
-fill
-}stopped
-{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if}
-{cleartomark exit}ifelse
-}loop
-}for
-}
-gsave stopped grestore
-{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if}
-{exit}ifelse
-}loop
-cleartomark setflat
-}bdf
-/_rfp6 {
-1 pop
-/k2 xdf /y2 xdf /m2 xdf /c2 xdf
-/k1 xdf /y1 xdf /m1 xdf /c1 xdf
-/inrad xdf
-/radius xdf
-/yt xdf
-/xt xdf
-c1 c2 sub abs
-m1 m2 sub abs
-y1 y2 sub abs
-k1 k2 sub abs
-maxcolor
-calcgraysteps mul abs round
-radius inrad sub abs
-adjnumsteps
-dup 1 lt {pop 1} if
-1 sub /numsteps1 xdf
-radius inrad sub numsteps1 dup 0 eq {pop} {div} ifelse
-2 div /halfstep xdf
-currentflat mark
-currentflat clipflatness
-{
-{
-dup setflat
-W
-0 1 numsteps1
-{
-dup /radindex xdf
-numsteps1 dup 0 eq {pop pop 0.5} {div} ifelse
-/frac xdf
-bc4 0 c2 c1 sub frac mul c1 add put
-bc4 1 m2 m1 sub frac mul m1 add put
-bc4 2 y2 y1 sub frac mul y1 add put
-bc4 3 k2 k1 sub frac mul k1 add put
-bc4 vc
-1 index setflat
-{
-newpath mark
-xt yt radius inrad sub 1 frac sub mul halfstep add inrad add 0 360
-{ arc
-radindex numsteps1 ne
-inrad 0 gt or
-{
-xt yt
-numsteps1 0 eq
-{ inrad }
-{
-radindex 1 add numsteps1 div 1 exch sub
-radius inrad sub mul halfstep add inrad add
-}ifelse
-dup xt add yt moveto
-360 0 arcn
-} if
-fill
-}stopped
-{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if}
-{cleartomark exit}ifelse
-}loop
-}for
-}
-gsave stopped grestore
-{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if}
-{exit}ifelse
-}loop
-cleartomark setflat
-}bdf
-/lfp4{_lfp4}ndf
-/lfs4{_lfs4}ndf
-/rfs6{_rfs6}ndf
-/rfp6{_rfp6}ndf
-/cvc [0 0 0 1] def
-/vc{
-AltsysDict /cvc 2 index put
-aload length dup 4 eq
-{pop dup -1 eq{pop setrgbcolor}{setcmykcolor}ifelse}
-{6 eq {sethexcolor} {setspotcolor} ifelse }
-ifelse
-}bdf
-0 setseparationgray
-/imgr {1692.47 1570.59 1723.65 1601.77 } def
-/bleed 0 def
-/clpr {1692.47 1570.59 1723.65 1601.77 } def
-/xs 1 def
-/ys 1 def
-/botx 0 def
-/overlap 0 def
-/wdist 18 def
-0 2 mul fhsetspreadsize
-0 0 ne {/df 0 def /clipflatness 0 def} if
-/maxsteps 256 def
-/forcemaxsteps false def
-/minsteps 0 def
-
-userdict begin /AGDOrigMtx matrix currentmatrix def end
-vms
--1694 -1572 translate
-
-/currentpacking defed{false setpacking}if
-/spots[
-
-1 0 0 0 (Process Cyan) false newcmykcustomcolor
-
-0 1 0 0 (Process Magenta) false newcmykcustomcolor
-
-0 0 1 0 (Process Yellow) false newcmykcustomcolor
-
-0 0 0 1 (Process Black) false newcmykcustomcolor
-]def
-n
-[] 0 d
-3.863708 M
-1 w
-0 j
-0 J
-false setoverprint
-0 i
-false eomode
-[0 0 0 1]vc
-vms
-q
-[1 0 0 1 -249.981674 -586.867554] concat
-vms
-1946.9506 2177.5114 m
-1954.4907 2185.0516 L
-1956.7047 2187.2656 1960.2943 2187.2656 1962.5083 2185.0516 C
-1970.0485 2177.5114 L
-1972.2625 2175.2974 1972.2625 2171.7078 1970.0485 2169.4938 C
-1962.5083 2161.9537 L
-1960.2943 2159.7396 1956.7047 2159.7396 1954.4907 2161.9537 C
-1946.9506 2169.4938 L
-1944.7365 2171.7078 1944.7365 2175.2974 1946.9506 2177.5114 C
-s
-n
-true eomode
-1958.5469 2181.0039 m
-1959.2148 2181.0039 1959.7012 2180.9296 1960.0059 2180.7813 C
-1960.3142 2180.6326 1960.4684 2180.363 1960.4688 2179.9727 C
-1960.4688 2179.7383 1960.3398 2178.8026 1960.082 2177.166 C
-1959.0742 2170.4219 L
-1958.9373 2170.3241 1958.7615 2170.2754 1958.5469 2170.2754 C
-1958.3319 2170.2754 1958.1561 2170.3241 1958.0195 2170.4219 C
-1957.0117 2177.166 L
-1956.7539 2178.8026 1956.625 2179.7379 1956.625 2179.9727 C
-1956.625 2180.363 1956.7792 2180.6326 1957.0879 2180.7813 C
-1957.4003 2180.9296 1957.8866 2181.0035 1958.5469 2181.0039 C
-h
-1958.5469 2165.166 m
-1958.0389 2165.166 1957.5878 2165.3499 1957.1934 2165.7168 C
-1956.7986 2166.0837 1956.6016 2166.5485 1956.6016 2167.1113 C
-1956.6016 2167.6698 1956.7891 2168.1404 1957.1641 2168.5234 C
-1957.5427 2168.9102 1958.0038 2169.1035 1958.5469 2169.1035 C
-1959.1094 2169.1035 1959.5741 2168.9043 1959.9414 2168.5059 C
-1960.3083 2168.1074 1960.4918 2167.6423 1960.4922 2167.1113 C
-1960.4922 2166.748 1960.4102 2166.4177 1960.2461 2166.1211 C
-1960.082 2165.8241 1959.8513 2165.5916 1959.5547 2165.4238 C
-1959.2577 2165.2521 1958.9219 2165.1664 1958.5469 2165.166 C
-true setoverprint
-f
-false setoverprint
-n
-vmr
-Q
-false eomode
-vmr
-vmr
-end
-%%Trailer
diff --git a/doc/xsl/graphics/important.pdf b/doc/xsl/graphics/important.pdf
deleted file mode 100644
index f6dd5892..00000000
--- a/doc/xsl/graphics/important.pdf
+++ /dev/null
Binary files differ
diff --git a/doc/xsl/graphics/note.eps b/doc/xsl/graphics/note.eps
deleted file mode 100644
index 39be23fa..00000000
--- a/doc/xsl/graphics/note.eps
+++ /dev/null
@@ -1,1387 +0,0 @@
-%!PS-Adobe-2.0 EPSF-1.2
-%%Title: Untitled-1
-%%Creator: FreeHand 9.0
-%%CreationDate: 2002/07/16 10:41 PM
-%%BoundingBox: 0 0 27 27
-%%FHPathName:Untitled:FreeHand 9:English:Untitled-1
-%ALDOriginalFile:Untitled:FreeHand 9:English:Untitled-1
-%ALDBoundingBox: -153 -436 442 406
-%%FHPageNum:1
-%%DocumentSuppliedResources: procset Altsys_header 4 0
-%%ColorUsage: Color
-%%DocumentProcessColors: Black
-%%EndComments
-%%BeginResource: procset Altsys_header 4 0
-userdict begin /AltsysDict 300 dict def end
-AltsysDict begin
-/bdf{bind def}bind def
-/xdf{exch def}bdf
-/defed{where{pop true}{false}ifelse}bdf
-/ndf{1 index where{pop pop pop}{dup xcheck{bind}if def}ifelse}bdf
-/d{setdash}bdf
-/h{closepath}bdf
-/H{}bdf
-/J{setlinecap}bdf
-/j{setlinejoin}bdf
-/M{setmiterlimit}bdf
-/n{newpath}bdf
-/N{newpath}bdf
-/q{gsave}bdf
-/Q{grestore}bdf
-/w{setlinewidth}bdf
-/Xic{matrix invertmatrix concat}bdf
-/Xq{matrix currentmatrix mark}bdf
-/XQ{cleartomark setmatrix}bdf
-/sepdef{
-dup where not
-{
-AltsysSepDict
-}
-if
-3 1 roll exch put
-}bdf
-/st{settransfer}bdf
-/colorimage defed /_rci xdf
-/cntr 0 def
-/readbinarystring{
-/cntr 0 def
-2 copy readstring
-{
-{
-dup
-(\034) search
-{
-length exch pop exch
-dup length 0 ne
-{
-dup dup 0 get 32 sub 0 exch put
-/cntr cntr 1 add def
-}
-{
-pop 1 string dup
-0 6 index read pop 32 sub put
-}ifelse
-3 copy
-putinterval pop
-1 add
-1 index length 1 sub
-1 index sub
-dup 0 le {pop pop exit}if
-getinterval
-}
-{
-pop exit
-} ifelse
-} loop
-}if
-cntr 0 gt
-{
-pop 2 copy
-dup length cntr sub cntr getinterval
-readbinarystring
-} if
-pop exch pop
-} bdf
-/_NXLevel2 defed {
-_NXLevel2 not {
-/colorimage where {
-userdict eq {
-/_rci false def
-} if
-} if
-} if
-} if
-/md defed{
-md type /dicttype eq {
-/colorimage where {
-md eq {
-/_rci false def
-}if
-}if
-/settransfer where {
-md eq {
-/st systemdict /settransfer get def
-}if
-}if
-}if
-}if
-/setstrokeadjust defed
-{
-true setstrokeadjust
-/C{curveto}bdf
-/L{lineto}bdf
-/m{moveto}bdf
-}
-{
-/dr{transform .25 sub round .25 add
-exch .25 sub round .25 add exch itransform}bdf
-/C{dr curveto}bdf
-/L{dr lineto}bdf
-/m{dr moveto}bdf
-/setstrokeadjust{pop}bdf
-}ifelse
-/privrectpath {
-4 -2 roll m
-dtransform round exch round exch idtransform
-2 copy 0 lt exch 0 lt xor
-{dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto}
-{exch dup 0 rlineto exch 0 exch rlineto neg 0 rlineto}
-ifelse
-closepath
-}bdf
-/rectclip{newpath privrectpath clip newpath}def
-/rectfill{gsave newpath privrectpath fill grestore}def
-/rectstroke{gsave newpath privrectpath stroke grestore}def
-/_fonthacksave false def
-/currentpacking defed
-{
-/_bfh {/_fonthacksave currentpacking def false setpacking} bdf
-/_efh {_fonthacksave setpacking} bdf
-}
-{
-/_bfh {} bdf
-/_efh {} bdf
-}ifelse
-/packedarray{array astore readonly}ndf
-/`
-{
-false setoverprint
-/-save0- save def
-5 index concat
-pop
-storerect left bottom width height rectclip
-pop
-/MMdict_count countdictstack def
-/MMop_count count 1 sub def
-userdict begin
-/showpage {} def
-0 setgray 0 setlinecap 1 setlinewidth
-0 setlinejoin 10 setmiterlimit [] 0 setdash newpath
-} bdf
-/currentpacking defed{true setpacking}if
-/min{2 copy gt{exch}if pop}bdf
-/max{2 copy lt{exch}if pop}bdf
-/xformfont { currentfont exch makefont setfont } bdf
-/fhnumcolors 1
-statusdict begin
-/processcolors defed
-{
-pop processcolors
-}
-{
-/deviceinfo defed {
-deviceinfo /Colors known {
-pop deviceinfo /Colors get
-} if
-} if
-} ifelse
-end
-def
-/printerRes
-gsave
-matrix defaultmatrix setmatrix
-72 72 dtransform
-abs exch abs
-max
-grestore
-def
-/graycalcs
-[
-{Angle Frequency}
-{GrayAngle GrayFrequency}
-{0 Width Height matrix defaultmatrix idtransform
-dup mul exch dup mul add sqrt 72 exch div}
-{0 GrayWidth GrayHeight matrix defaultmatrix idtransform
-dup mul exch dup mul add sqrt 72 exch div}
-] def
-/calcgraysteps {
-forcemaxsteps
-{
-maxsteps
-}
-{
-/currenthalftone defed
-{currenthalftone /dicttype eq}{false}ifelse
-{
-currenthalftone begin
-HalftoneType 4 le
-{graycalcs HalftoneType 1 sub get exec}
-{
-HalftoneType 5 eq
-{
-Default begin
-{graycalcs HalftoneType 1 sub get exec}
-end
-}
-{0 60}
-ifelse
-}
-ifelse
-end
-}
-{
-currentscreen pop exch
-}
-ifelse
-printerRes 300 max exch div exch
-2 copy
-sin mul round dup mul
-3 1 roll
-cos mul round dup mul
-add 1 add
-dup maxsteps gt {pop maxsteps} if
-dup minsteps lt {pop minsteps} if
-}
-ifelse
-} bdf
-/nextrelease defed {
-/languagelevel defed not {
-/framebuffer defed {
-0 40 string framebuffer 9 1 roll 8 {pop} repeat
-dup 516 eq exch 520 eq or
-{
-/fhnumcolors 3 def
-/currentscreen {60 0 {pop pop 1}}bdf
-/calcgraysteps {maxsteps} bdf
-}if
-}if
-}if
-}if
-fhnumcolors 1 ne {
-/calcgraysteps {maxsteps} bdf
-} if
-/currentpagedevice defed {
-currentpagedevice /PreRenderingEnhance known
-{
-currentpagedevice /PreRenderingEnhance get
-{
-/calcgraysteps
-{
-forcemaxsteps
-{maxsteps}
-{256 maxsteps min}
-ifelse
-} def
-} if
-} if
-} if
-/gradfrequency 144 def
-printerRes 1000 lt {
-/gradfrequency 72 def
-} if
-/adjnumsteps {
-dup dtransform abs exch abs max
-printerRes div
-gradfrequency mul
-round
-5 max
-min
-}bdf
-/goodsep {
-spots exch get 4 get dup sepname eq exch (_vc_Registration) eq or
-}bdf
-/BeginGradation defed
-{/bb{BeginGradation}bdf}
-{/bb{}bdf}
-ifelse
-/EndGradation defed
-{/eb{EndGradation}bdf}
-{/eb{}bdf}
-ifelse
-/bottom -0 def
-/delta -0 def
-/frac -0 def
-/height -0 def
-/left -0 def
-/numsteps1 -0 def
-/radius -0 def
-/right -0 def
-/top -0 def
-/width -0 def
-/xt -0 def
-/yt -0 def
-/df currentflat def
-/tempstr 1 string def
-/clipflatness currentflat def
-/inverted?
-0 currenttransfer exec .5 ge def
-/tc1 [0 0 0 1] def
-/tc2 [0 0 0 1] def
-/storerect{/top xdf /right xdf /bottom xdf /left xdf
-/width right left sub def /height top bottom sub def}bdf
-/concatprocs{
-systemdict /packedarray known
-{dup type /packedarraytype eq 2 index type /packedarraytype eq or}{false}ifelse
-{
-/proc2 exch cvlit def /proc1 exch cvlit def
-proc1 aload pop proc2 aload pop
-proc1 length proc2 length add packedarray cvx
-}
-{
-/proc2 exch cvlit def /proc1 exch cvlit def
-/newproc proc1 length proc2 length add array def
-newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval
-newproc cvx
-}ifelse
-}bdf
-/i{dup 0 eq
-{pop df dup}
-{dup} ifelse
-/clipflatness xdf setflat
-}bdf
-version cvr 38.0 le
-{/setrgbcolor{
-currenttransfer exec 3 1 roll
-currenttransfer exec 3 1 roll
-currenttransfer exec 3 1 roll
-setrgbcolor}bdf}if
-/vms {/vmsv save def} bdf
-/vmr {vmsv restore} bdf
-/vmrs{vmsv restore /vmsv save def}bdf
-/eomode{
-{/filler /eofill load def /clipper /eoclip load def}
-{/filler /fill load def /clipper /clip load def}
-ifelse
-}bdf
-/normtaper{}bdf
-/logtaper{9 mul 1 add log}bdf
-/CD{
-/NF exch def
-{
-exch dup
-/FID ne 1 index/UniqueID ne and
-{exch NF 3 1 roll put}
-{pop pop}
-ifelse
-}forall
-NF
-}bdf
-/MN{
-1 index length
-/Len exch def
-dup length Len add
-string dup
-Len
-4 -1 roll
-putinterval
-dup
-0
-4 -1 roll
-putinterval
-}bdf
-/RC{4 -1 roll /ourvec xdf 256 string cvs(|______)anchorsearch
-{1 index MN cvn/NewN exch def cvn
-findfont dup maxlength dict CD dup/FontName NewN put dup
-/Encoding ourvec put NewN exch definefont pop}{pop}ifelse}bdf
-/RF{
-dup
-FontDirectory exch
-known
-{pop 3 -1 roll pop}
-{RC}
-ifelse
-}bdf
-/FF{dup 256 string cvs(|______)exch MN cvn dup FontDirectory exch known
-{exch pop findfont 3 -1 roll pop}
-{pop dup findfont dup maxlength dict CD dup dup
-/Encoding exch /Encoding get 256 array copy 7 -1 roll
-{3 -1 roll dup 4 -2 roll put}forall put definefont}
-ifelse}bdf
-/RCJ{4 -1 roll
-/ourvec xdf
-256 string cvs
-(|______) anchorsearch
-{pop
-cvn
-dup FDFJ
-exch
-1 index
-eq
-{
-_bfh findfont _efh
-dup
-maxlength dict
-CD
-dup
-/FontName
-3 index
-put
-dup
-/Encoding ourvec put
-1 index
-exch
-definefont
-pop
-}
-{exch pop}
-ifelse
-}
-{pop}
-ifelse
-}bdf
-/RFJ{
-dup
-FontDirectory exch
-known
-{pop 3 -1 roll pop}
-{RCJ}
-ifelse
-}bdf
-/hasfont
-{
-/resourcestatus where
-{
-pop
-/Font resourcestatus
-{
-pop pop true
-}
-{
-false
-}
-ifelse
-}
-{
-dup FontDirectory exch known
-{pop true}
-{
-256 string
-cvs
-(fonts/) exch MN
-status
-{pop pop pop pop true}
-{false}
-ifelse
-}
-ifelse
-}
-ifelse
-}bdf
-/FDFJ
-{
-dup
-hasfont
-not
-{
-pop
-/Ryumin-Light-83pv-RKSJ-H
-hasfont
-{
-/Ryumin-Light-83pv-RKSJ-H
-}
-{
-/Courier
-}
-ifelse
-}
-if
-}bdf
-/FFJ{
-_bfh
-dup
-256 string cvs
-(|______)exch MN
-cvn
-dup
-FontDirectory
-exch known
-{
-exch
-pop
-findfont
-3 -1 roll
-pop
-}
-{
-pop
-FDFJ
-dup findfont
-dup maxlength dict
-CD
-dup dup
-/Encoding exch
-/Encoding get
-256 array copy
-7 -1 roll
-{
-3 -1 roll
-dup
-4 -2 roll
-put
-}forall
-put
-definefont
-}
-ifelse
-_efh
-}bdf
-/GS {
-dup
-hasfont
-{
-findfont
-exch makesetfont
-exch
-pop
-ts
-}
-{
-pop pop pop
-ts
-} ifelse
-} bdf
-/RCK{4 -1 roll
-/ourvec xdf
-256 string cvs
-(|______) anchorsearch
-{pop
-cvn
-dup FDFK
-exch
-1 index
-eq
-{
-_bfh findfont _efh
-dup
-maxlength dict
-CD
-dup
-/FontName
-3 index
-put
-dup
-/Encoding ourvec put
-1 index
-exch
-definefont
-pop
-}
-{exch pop}
-ifelse
-}
-{pop}
-ifelse
-}bdf
-/RFK{
-dup
-FontDirectory exch
-known
-{pop 3 -1 roll pop}
-{RCK}
-ifelse
-}bdf
-/hasfont
-{
-/resourcestatus where
-{
-pop
-/Font resourcestatus
-{
-pop pop true
-}
-{
-false
-}
-ifelse
-}
-{
-dup FontDirectory exch known
-{pop true}
-{
-256 string
-cvs
-(fonts/) exch MN
-status
-{pop pop pop pop true}
-{false}
-ifelse
-}
-ifelse
-}
-ifelse
-}bdf
-/FDFK
-{
-dup
-hasfont
-not
-{
-pop
-/JCsm
-hasfont
-{
-/JCsm
-}
-{
-/Courier
-}
-ifelse
-}
-if
-}bdf
-/FFK{
-_bfh
-dup
-256 string cvs
-(|______)exch MN
-cvn
-dup
-FontDirectory
-exch known
-{
-exch
-pop
-findfont
-3 -1 roll
-pop
-}
-{
-pop
-FDFK
-dup findfont
-dup maxlength dict
-CD
-dup dup
-/Encoding exch
-/Encoding get
-256 array copy
-7 -1 roll
-{
-3 -1 roll
-dup
-4 -2 roll
-put
-}forall
-put
-definefont
-}
-ifelse
-_efh
-}bdf
-/RCTC{4 -1 roll
-/ourvec xdf
-256 string cvs
-(|______) anchorsearch
-{pop
-cvn
-dup FDFTC
-exch
-1 index
-eq
-{
-_bfh findfont _efh
-dup
-maxlength dict
-CD
-dup
-/FontName
-3 index
-put
-dup
-/Encoding ourvec put
-1 index
-exch
-definefont
-pop
-}
-{exch pop}
-ifelse
-}
-{pop}
-ifelse
-}bdf
-/RFTC{
-dup
-FontDirectory exch
-known
-{pop 3 -1 roll pop}
-{RCTC}
-ifelse
-}bdf
-/FDFTC
-{
-dup
-hasfont
-not
-{
-pop
-/DFMing-Lt-HK-BF
-hasfont
-{
-/DFMing-Lt-HK-BF
-}
-{
-/Courier
-}
-ifelse
-}
-if
-}bdf
-/FFTC{
-_bfh
-dup
-256 string cvs
-(|______)exch MN
-cvn
-dup
-FontDirectory
-exch known
-{
-exch
-pop
-findfont
-3 -1 roll
-pop
-}
-{
-pop
-FDFTC
-dup findfont
-dup maxlength dict
-CD
-dup dup
-/Encoding exch
-/Encoding get
-256 array copy
-7 -1 roll
-{
-3 -1 roll
-dup
-4 -2 roll
-put
-}forall
-put
-definefont
-}
-ifelse
-_efh
-}bdf
-/fps{
-currentflat
-exch
-dup 0 le{pop 1}if
-{
-dup setflat 3 index stopped
-{1.3 mul dup 3 index gt{pop setflat pop pop stop}if}
-{exit}
-ifelse
-}loop
-pop setflat pop pop
-}bdf
-/fp{100 currentflat fps}bdf
-/clipper{clip}bdf
-/W{/clipper load 100 clipflatness dup setflat fps}bdf
-
-userdict begin /BDFontDict 29 dict def end
-BDFontDict begin
-/bu{}def
-/bn{}def
-/setTxMode{av 70 ge{pop}if pop}def
-/gm{m}def
-/show{pop}def
-/gr{pop}def
-/fnt{pop pop pop}def
-/fs{pop}def
-/fz{pop}def
-/lin{pop pop}def
-/:M {pop pop} def
-/sf {pop} def
-/S {pop} def
-/@b {pop pop pop pop pop pop pop pop} def
-/_bdsave /save load def
-/_bdrestore /restore load def
-/save { dup /fontsave eq {null} {_bdsave} ifelse } def
-/restore { dup null eq { pop } { _bdrestore } ifelse } def
-/fontsave null def
-end
-/MacVec 256 array def
-MacVec 0 /Helvetica findfont
-/Encoding get 0 128 getinterval putinterval
-MacVec 127 /DEL put MacVec 16#27 /quotesingle put MacVec 16#60 /grave put
-/NUL/SOH/STX/ETX/EOT/ENQ/ACK/BEL/BS/HT/LF/VT/FF/CR/SO/SI
-/DLE/DC1/DC2/DC3/DC4/NAK/SYN/ETB/CAN/EM/SUB/ESC/FS/GS/RS/US
-MacVec 0 32 getinterval astore pop
-/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute
-/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave
-/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute
-/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis
-/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
-/registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash
-/infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation
-/product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash
-/questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft
-/guillemotright/ellipsis/nbspace/Agrave/Atilde/Otilde/OE/oe
-/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge
-/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl
-/daggerdbl/periodcentered/quotesinglbase/quotedblbase
-/perthousand/Acircumflex/Ecircumflex/Aacute
-/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave/Oacute/Ocircumflex
-/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde
-/macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron
-MacVec 128 128 getinterval astore pop
-/findheaderfont {
-/Helvetica findfont
-} def
-end %. AltsysDict
-%%EndResource
-%%EndProlog
-
-%%BeginSetup
-
-AltsysDict begin
-_bfh
-
-_efh
-end %. AltsysDict
-
-%%EndSetup
-AltsysDict begin
-
-/onlyk4{false}ndf
-/ccmyk{dup 5 -1 roll sub 0 max exch}ndf
-/cmyk2gray{
-4 -1 roll 0.3 mul 4 -1 roll 0.59 mul 4 -1 roll 0.11 mul
-add add add 1 min neg 1 add
-}bdf
-/setcmykcolor{1 exch sub ccmyk ccmyk ccmyk pop setrgbcolor}ndf
-/maxcolor {
-max max max
-} ndf
-/maxspot {
-pop
-} ndf
-/setcmykcoloroverprint{4{dup -1 eq{pop 0}if 4 1 roll}repeat setcmykcolor}ndf
-/findcmykcustomcolor{5 packedarray}ndf
-/setcustomcolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndf
-/setseparationgray{setgray}ndf
-/setoverprint{pop}ndf
-/currentoverprint false ndf
-/cmykbufs2gray{
-0 1 2 index length 1 sub
-{
-4 index 1 index get 0.3 mul
-4 index 2 index get 0.59 mul
-4 index 3 index get 0.11 mul
-4 index 4 index get
-add add add cvi 255 min
-255 exch sub
-2 index 3 1 roll put
-}for
-4 1 roll pop pop pop
-}bdf
-/colorimage{
-pop pop
-[
-5 -1 roll/exec cvx
-6 -1 roll/exec cvx
-7 -1 roll/exec cvx
-8 -1 roll/exec cvx
-/cmykbufs2gray cvx
-]cvx
-image
-}
-%. version 47.1 on Linotronic of Postscript defines colorimage incorrectly (rgb model only)
-version cvr 47.1 le
-statusdict /product get (Lino) anchorsearch{pop pop true}{pop false}ifelse
-and{userdict begin bdf end}{ndf}ifelse
-fhnumcolors 1 ne {/yt save def} if
-/customcolorimage{
-aload pop
-(_vc_Registration) eq
-{
-pop pop pop pop separationimage
-}
-{
-/ik xdf /iy xdf /im xdf /ic xdf
-ic im iy ik cmyk2gray /xt xdf
-currenttransfer
-{dup 1.0 exch sub xt mul add}concatprocs
-st
-image
-}
-ifelse
-}ndf
-fhnumcolors 1 ne {yt restore} if
-fhnumcolors 3 ne {/yt save def} if
-/customcolorimage{
-aload pop
-(_vc_Registration) eq
-{
-pop pop pop pop separationimage
-}
-{
-/ik xdf /iy xdf /im xdf /ic xdf
-1.0 dup ic ik add min sub
-1.0 dup im ik add min sub
-1.0 dup iy ik add min sub
-/ic xdf /iy xdf /im xdf
-currentcolortransfer
-4 1 roll
-{dup 1.0 exch sub ic mul add}concatprocs 4 1 roll
-{dup 1.0 exch sub iy mul add}concatprocs 4 1 roll
-{dup 1.0 exch sub im mul add}concatprocs 4 1 roll
-setcolortransfer
-{/dummy xdf dummy}concatprocs{dummy}{dummy}true 3 colorimage
-}
-ifelse
-}ndf
-fhnumcolors 3 ne {yt restore} if
-fhnumcolors 4 ne {/yt save def} if
-/customcolorimage{
-aload pop
-(_vc_Registration) eq
-{
-pop pop pop pop separationimage
-}
-{
-/ik xdf /iy xdf /im xdf /ic xdf
-currentcolortransfer
-{1.0 exch sub ik mul ik sub 1 add}concatprocs 4 1 roll
-{1.0 exch sub iy mul iy sub 1 add}concatprocs 4 1 roll
-{1.0 exch sub im mul im sub 1 add}concatprocs 4 1 roll
-{1.0 exch sub ic mul ic sub 1 add}concatprocs 4 1 roll
-setcolortransfer
-{/dummy xdf dummy}concatprocs{dummy}{dummy}{dummy}
-true 4 colorimage
-}
-ifelse
-}ndf
-fhnumcolors 4 ne {yt restore} if
-/separationimage{image}ndf
-/spotascmyk false ndf
-/newcmykcustomcolor{6 packedarray}ndf
-/inkoverprint false ndf
-/setinkoverprint{pop}ndf
-/setspotcolor {
-spots exch get
-dup 4 get (_vc_Registration) eq
-{pop 1 exch sub setseparationgray}
-{0 5 getinterval exch setcustomcolor}
-ifelse
-}ndf
-/currentcolortransfer{currenttransfer dup dup dup}ndf
-/setcolortransfer{st pop pop pop}ndf
-/fas{}ndf
-/sas{}ndf
-/fhsetspreadsize{pop}ndf
-/filler{fill}bdf
-/F{gsave {filler}fp grestore}bdf
-/f{closepath F}bdf
-/S{gsave {stroke}fp grestore}bdf
-/s{closepath S}bdf
-userdict /islevel2
-systemdict /languagelevel known dup
-{
-pop systemdict /languagelevel get 2 ge
-} if
-put
-islevel2 not
-{
-/currentcmykcolor
-{
-0 0 0 1 currentgray sub
-} ndf
-} if
-/tc
-{
-gsave
-setcmykcolor currentcmykcolor
-grestore
-} bind def
-/testCMYKColorThrough
-{
-tc add add add 0 ne
-} bind def
-/fhiscomposite where not {
-userdict /fhiscomposite
-islevel2
-{
-gsave 1 1 1 1 setcmykcolor currentcmykcolor grestore
-add add add 4 eq
-}
-{
-1 0 0 0 testCMYKColorThrough
-0 1 0 0 testCMYKColorThrough
-0 0 1 0 testCMYKColorThrough
-0 0 0 1 testCMYKColorThrough
-and and and
-} ifelse
-put
-}
-{ pop }
-ifelse
-/bc4 [0 0 0 0] def
-/_lfp4 {
-1 pop
-/yt xdf
-/xt xdf
-/ang xdf
-storerect
-/taperfcn xdf
-/k2 xdf /y2 xdf /m2 xdf /c2 xdf
-/k1 xdf /y1 xdf /m1 xdf /c1 xdf
-c1 c2 sub abs
-m1 m2 sub abs
-y1 y2 sub abs
-k1 k2 sub abs
-maxcolor
-calcgraysteps mul abs round
-height abs adjnumsteps
-dup 1 lt {pop 1} if
-1 sub /numsteps1 xdf
-currentflat mark
-currentflat clipflatness
-/delta top bottom sub numsteps1 1 add div def
-/right right left sub def
-/botsv top delta sub def
-{
-{
-W
-xt yt translate
-ang rotate
-xt neg yt neg translate
-dup setflat
-/bottom botsv def
-0 1 numsteps1
-{
-numsteps1 dup 0 eq {pop pop 0.5} {div} ifelse
-taperfcn /frac xdf
-bc4 0 c2 c1 sub frac mul c1 add put
-bc4 1 m2 m1 sub frac mul m1 add put
-bc4 2 y2 y1 sub frac mul y1 add put
-bc4 3 k2 k1 sub frac mul k1 add put
-bc4 vc
-1 index setflat
-{
-mark {newpath left bottom right delta rectfill}stopped
-{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if}
-{cleartomark exit}ifelse
-}loop
-/bottom bottom delta sub def
-}for
-}
-gsave stopped grestore
-{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if}
-{exit}ifelse
-}loop
-cleartomark setflat
-}bdf
-/bcs [0 0] def
-/_lfs4 {
-/yt xdf
-/xt xdf
-/ang xdf
-storerect
-/taperfcn xdf
-/tint2 xdf
-/tint1 xdf
-bcs exch 1 exch put
-tint1 tint2 sub abs
-bcs 1 get maxspot
-calcgraysteps mul abs round
-height abs adjnumsteps
-dup 2 lt {pop 2} if
-1 sub /numsteps1 xdf
-currentflat mark
-currentflat clipflatness
-/delta top bottom sub numsteps1 1 add div def
-/right right left sub def
-/botsv top delta sub def
-{
-{
-W
-xt yt translate
-ang rotate
-xt neg yt neg translate
-dup setflat
-/bottom botsv def
-0 1 numsteps1
-{
-numsteps1 div taperfcn /frac xdf
-bcs 0
-1.0 tint2 tint1 sub frac mul tint1 add sub
-put bcs vc
-1 index setflat
-{
-mark {newpath left bottom right delta rectfill}stopped
-{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if}
-{cleartomark exit}ifelse
-}loop
-/bottom bottom delta sub def
-}for
-}
-gsave stopped grestore
-{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if}
-{exit}ifelse
-}loop
-cleartomark setflat
-}bdf
-/_rfs6 {
-/tint2 xdf
-/tint1 xdf
-bcs exch 1 exch put
-/inrad xdf
-/radius xdf
-/yt xdf
-/xt xdf
-tint1 tint2 sub abs
-bcs 1 get maxspot
-calcgraysteps mul abs round
-radius inrad sub abs
-adjnumsteps
-dup 1 lt {pop 1} if
-1 sub /numsteps1 xdf
-radius inrad sub numsteps1 dup 0 eq {pop} {div} ifelse
-2 div /halfstep xdf
-currentflat mark
-currentflat clipflatness
-{
-{
-dup setflat
-W
-0 1 numsteps1
-{
-dup /radindex xdf
-numsteps1 dup 0 eq {pop pop 0.5} {div} ifelse
-/frac xdf
-bcs 0
-tint2 tint1 sub frac mul tint1 add
-put bcs vc
-1 index setflat
-{
-newpath mark
-xt yt radius inrad sub 1 frac sub mul halfstep add inrad add 0 360
-{ arc
-radindex numsteps1 ne
-inrad 0 gt or
-{
-xt yt
-numsteps1 0 eq
-{ inrad }
-{
-radindex 1 add numsteps1 div 1 exch sub
-radius inrad sub mul halfstep add inrad add
-}ifelse
-dup xt add yt moveto
-360 0 arcn
-} if
-fill
-}stopped
-{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if}
-{cleartomark exit}ifelse
-}loop
-}for
-}
-gsave stopped grestore
-{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if}
-{exit}ifelse
-}loop
-cleartomark setflat
-}bdf
-/_rfp6 {
-1 pop
-/k2 xdf /y2 xdf /m2 xdf /c2 xdf
-/k1 xdf /y1 xdf /m1 xdf /c1 xdf
-/inrad xdf
-/radius xdf
-/yt xdf
-/xt xdf
-c1 c2 sub abs
-m1 m2 sub abs
-y1 y2 sub abs
-k1 k2 sub abs
-maxcolor
-calcgraysteps mul abs round
-radius inrad sub abs
-adjnumsteps
-dup 1 lt {pop 1} if
-1 sub /numsteps1 xdf
-radius inrad sub numsteps1 dup 0 eq {pop} {div} ifelse
-2 div /halfstep xdf
-currentflat mark
-currentflat clipflatness
-{
-{
-dup setflat
-W
-0 1 numsteps1
-{
-dup /radindex xdf
-numsteps1 dup 0 eq {pop pop 0.5} {div} ifelse
-/frac xdf
-bc4 0 c2 c1 sub frac mul c1 add put
-bc4 1 m2 m1 sub frac mul m1 add put
-bc4 2 y2 y1 sub frac mul y1 add put
-bc4 3 k2 k1 sub frac mul k1 add put
-bc4 vc
-1 index setflat
-{
-newpath mark
-xt yt radius inrad sub 1 frac sub mul halfstep add inrad add 0 360
-{ arc
-radindex numsteps1 ne
-inrad 0 gt or
-{
-xt yt
-numsteps1 0 eq
-{ inrad }
-{
-radindex 1 add numsteps1 div 1 exch sub
-radius inrad sub mul halfstep add inrad add
-}ifelse
-dup xt add yt moveto
-360 0 arcn
-} if
-fill
-}stopped
-{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if}
-{cleartomark exit}ifelse
-}loop
-}for
-}
-gsave stopped grestore
-{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if}
-{exit}ifelse
-}loop
-cleartomark setflat
-}bdf
-/lfp4{_lfp4}ndf
-/lfs4{_lfs4}ndf
-/rfs6{_rfs6}ndf
-/rfp6{_rfp6}ndf
-/cvc [0 0 0 1] def
-/vc{
-AltsysDict /cvc 2 index put
-aload length dup 4 eq
-{pop dup -1 eq{pop setrgbcolor}{setcmykcolor}ifelse}
-{6 eq {sethexcolor} {setspotcolor} ifelse }
-ifelse
-}bdf
-0 setseparationgray
-/imgr {1692.47 1570.59 2287.75 2412.48 } def
-/bleed 0 def
-/clpr {1692.47 1570.59 2287.75 2412.48 } def
-/xs 1 def
-/ys 1 def
-/botx 0 def
-/overlap 0 def
-/wdist 18 def
-0 2 mul fhsetspreadsize
-0 0 ne {/df 0 def /clipflatness 0 def} if
-/maxsteps 256 def
-/forcemaxsteps false def
-/minsteps 0 def
-
-userdict begin /AGDOrigMtx matrix currentmatrix def end
-vms
-0.15 0.15 scale %JND
--1845 -2006 translate
-
-/currentpacking defed{false setpacking}if
-/spots[
-
-1 0 0 0 (Process Cyan) false newcmykcustomcolor
-
-0 1 0 0 (Process Magenta) false newcmykcustomcolor
-
-0 0 1 0 (Process Yellow) false newcmykcustomcolor
-
-0 0 0 1 (Process Black) false newcmykcustomcolor
-]def
-n
-[] 0 d
-3.863708 M
-1 w
-0 j
-0 J
-false setoverprint
-0 i
-false eomode
-[0 0 0 1]vc
-vms
-1848.4365 2094.0422 m
-1848.4365 2140.987 1886.4917 2179.0422 1933.4365 2179.0422 C
-1980.3813 2179.0422 2018.4365 2140.987 2018.4365 2094.0422 C
-2018.4365 2047.0974 1980.3813 2009.0422 1933.4365 2009.0422 C
-1886.4917 2009.0422 1848.4365 2047.0974 1848.4365 2094.0422 C
-5.3858 w
-3.863693 M
-s
-n
-true eomode
-1880.5612 2118.7403 m
-1880.5612 2121.7396 1881.6862 2124.8795 1883.9362 2128.1622 C
-1886.1862 2131.4889 1888.4581 2133.1522 1890.7565 2133.1544 C
-1892.2089 2133.1544 1893.4042 2132.5677 1894.3424 2131.3966 C
-1895.3268 2130.2233 1895.819 2128.7467 1895.819 2126.9669 C
-1895.819 2124.0599 1894.6237 2121.0826 1892.233 2118.0372 C
-1889.8885 2114.9896 1887.6144 2113.4669 1885.4127 2113.4669 C
-1884.0526 2113.4669 1882.9034 2113.9591 1881.9674 2114.9435 C
-1881.0292 2115.974 1880.5612 2117.2396 1880.5612 2118.7403 C
-h
-1948.2018 2061.1544 m
-1978.4362 2061.0138 L
-1980.451 2062.6068 1981.9034 2064.3163 1982.7955 2066.1466 C
-1983.7316 2068.0209 1984.1996 2070.2005 1984.2018 2072.6857 C
-1984.2018 2073.2482 L
-1969.2252 2099.6153 L
-1969.2252 2099.3341 1969.2472 2098.8639 1969.2955 2098.2091 C
-1969.3417 2097.5983 1969.3636 2097.1544 1969.3658 2096.8732 C
-1969.3658 2089.888 1967.5597 2083.3732 1963.9518 2077.3263 C
-1960.3878 2071.2794 1955.1385 2065.8873 1948.2018 2061.1544 C
-h
-1905.8737 2139.4825 m
-1910.0924 2124.2247 L
-1964.233 2092.5841 L
-1964.6066 2094.3177 1964.8636 2095.724 1965.0065 2096.8028 C
-1965.1471 2097.9278 1965.2174 2098.9122 1965.2174 2099.756 C
-1965.2174 2100.4108 1965.1691 2101.5599 1965.0768 2103.2013 C
-1964.9823 2103.5748 1964.9362 2103.8561 1964.9362 2104.045 C
-1905.8737 2139.4825 L
-h
-1908.4752 2120.3575 m
-1898.983 2105.5216 L
-1954.3893 2072.8263 L
-1956.4987 2074.7005 1958.2565 2076.8561 1959.6627 2079.295 C
-1961.1151 2081.7779 1962.2863 2084.6608 1963.1783 2087.9435 C
-1908.4752 2120.3575 L
-h
-1896.2408 2102.3575 m
-1880.5612 2099.0528 L
-1942.9283 2062.631 L
-1944.5675 2063.5209 1946.0682 2064.5272 1947.4283 2065.6544 C
-1948.7863 2066.7794 1950.0057 2068.0209 1951.0846 2069.381 C
-1896.2408 2102.3575 L
-h
-1871.2096 2120.7794 m
-1876.3424 2102.3575 L
-1894.2018 2105.9435 L
-1906.1549 2125.2794 L
-1900.8815 2142.506 L
-1882.7408 2139.2013 L
-1871.2096 2120.7794 L
-h
-1866.7096 2121.4825 m
-1880.1393 2142.3653 L
-1901.3033 2146.5841 L
-1963.6705 2109.3888 L
-1968.0299 2106.8092 1971.005 2103.9747 1972.6002 2100.881 C
-1972.8815 2100.2701 1973.1144 2099.8021 1973.3033 2099.4747 C
-1991.444 2068.256 L
-1991.6769 2067.8341 1992.0043 2067.2474 1992.4283 2066.4982 C
-1994.0675 2064.013 1994.8871 2062.0904 1994.8893 2060.7325 C
-1994.8893 2059.4186 1994.3971 2058.4825 1993.4127 2057.92 C
-1992.4745 2057.4037 1990.6705 2057.1466 1987.9987 2057.1466 C
-1948.0612 2057.1466 L
-1946.4198 2057.1466 1944.7784 2057.4037 1943.1393 2057.92 C
-1941.4979 2058.4825 1939.4127 2059.513 1936.8815 2061.0138 C
-1873.6705 2098.631 L
-1866.7096 2121.4825 L
-true setoverprint
-f
-false setoverprint
-n
-vmr
-vmr
-end
-%%Trailer
diff --git a/doc/xsl/graphics/note.pdf b/doc/xsl/graphics/note.pdf
deleted file mode 100644
index ec6c248a..00000000
--- a/doc/xsl/graphics/note.pdf
+++ /dev/null
Binary files differ
diff --git a/doc/xsl/graphics/tip.eps b/doc/xsl/graphics/tip.eps
deleted file mode 100644
index a28ad883..00000000
--- a/doc/xsl/graphics/tip.eps
+++ /dev/null
@@ -1,1503 +0,0 @@
-%!PS-Adobe-2.0 EPSF-1.2
-%%Title: Untitled-1
-%%Creator: FreeHand 9.0
-%%CreationDate: 2002/07/16 10:41 PM
-%%BoundingBox: 0 0 27 27
-%%FHPathName:Untitled:FreeHand 9:English:Untitled-1
-%ALDOriginalFile:Untitled:FreeHand 9:English:Untitled-1
-%ALDBoundingBox: -153 -436 442 406
-%%FHPageNum:1
-%%DocumentSuppliedResources: procset Altsys_header 4 0
-%%ColorUsage: Color
-%%DocumentProcessColors: Black
-%%EndComments
-%%BeginResource: procset Altsys_header 4 0
-userdict begin /AltsysDict 300 dict def end
-AltsysDict begin
-/bdf{bind def}bind def
-/xdf{exch def}bdf
-/defed{where{pop true}{false}ifelse}bdf
-/ndf{1 index where{pop pop pop}{dup xcheck{bind}if def}ifelse}bdf
-/d{setdash}bdf
-/h{closepath}bdf
-/H{}bdf
-/J{setlinecap}bdf
-/j{setlinejoin}bdf
-/M{setmiterlimit}bdf
-/n{newpath}bdf
-/N{newpath}bdf
-/q{gsave}bdf
-/Q{grestore}bdf
-/w{setlinewidth}bdf
-/Xic{matrix invertmatrix concat}bdf
-/Xq{matrix currentmatrix mark}bdf
-/XQ{cleartomark setmatrix}bdf
-/sepdef{
-dup where not
-{
-AltsysSepDict
-}
-if
-3 1 roll exch put
-}bdf
-/st{settransfer}bdf
-/colorimage defed /_rci xdf
-/cntr 0 def
-/readbinarystring{
-/cntr 0 def
-2 copy readstring
-{
-{
-dup
-(\034) search
-{
-length exch pop exch
-dup length 0 ne
-{
-dup dup 0 get 32 sub 0 exch put
-/cntr cntr 1 add def
-}
-{
-pop 1 string dup
-0 6 index read pop 32 sub put
-}ifelse
-3 copy
-putinterval pop
-1 add
-1 index length 1 sub
-1 index sub
-dup 0 le {pop pop exit}if
-getinterval
-}
-{
-pop exit
-} ifelse
-} loop
-}if
-cntr 0 gt
-{
-pop 2 copy
-dup length cntr sub cntr getinterval
-readbinarystring
-} if
-pop exch pop
-} bdf
-/_NXLevel2 defed {
-_NXLevel2 not {
-/colorimage where {
-userdict eq {
-/_rci false def
-} if
-} if
-} if
-} if
-/md defed{
-md type /dicttype eq {
-/colorimage where {
-md eq {
-/_rci false def
-}if
-}if
-/settransfer where {
-md eq {
-/st systemdict /settransfer get def
-}if
-}if
-}if
-}if
-/setstrokeadjust defed
-{
-true setstrokeadjust
-/C{curveto}bdf
-/L{lineto}bdf
-/m{moveto}bdf
-}
-{
-/dr{transform .25 sub round .25 add
-exch .25 sub round .25 add exch itransform}bdf
-/C{dr curveto}bdf
-/L{dr lineto}bdf
-/m{dr moveto}bdf
-/setstrokeadjust{pop}bdf
-}ifelse
-/privrectpath {
-4 -2 roll m
-dtransform round exch round exch idtransform
-2 copy 0 lt exch 0 lt xor
-{dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto}
-{exch dup 0 rlineto exch 0 exch rlineto neg 0 rlineto}
-ifelse
-closepath
-}bdf
-/rectclip{newpath privrectpath clip newpath}def
-/rectfill{gsave newpath privrectpath fill grestore}def
-/rectstroke{gsave newpath privrectpath stroke grestore}def
-/_fonthacksave false def
-/currentpacking defed
-{
-/_bfh {/_fonthacksave currentpacking def false setpacking} bdf
-/_efh {_fonthacksave setpacking} bdf
-}
-{
-/_bfh {} bdf
-/_efh {} bdf
-}ifelse
-/packedarray{array astore readonly}ndf
-/`
-{
-false setoverprint
-/-save0- save def
-5 index concat
-pop
-storerect left bottom width height rectclip
-pop
-/MMdict_count countdictstack def
-/MMop_count count 1 sub def
-userdict begin
-/showpage {} def
-0 setgray 0 setlinecap 1 setlinewidth
-0 setlinejoin 10 setmiterlimit [] 0 setdash newpath
-} bdf
-/currentpacking defed{true setpacking}if
-/min{2 copy gt{exch}if pop}bdf
-/max{2 copy lt{exch}if pop}bdf
-/xformfont { currentfont exch makefont setfont } bdf
-/fhnumcolors 1
-statusdict begin
-/processcolors defed
-{
-pop processcolors
-}
-{
-/deviceinfo defed {
-deviceinfo /Colors known {
-pop deviceinfo /Colors get
-} if
-} if
-} ifelse
-end
-def
-/printerRes
-gsave
-matrix defaultmatrix setmatrix
-72 72 dtransform
-abs exch abs
-max
-grestore
-def
-/graycalcs
-[
-{Angle Frequency}
-{GrayAngle GrayFrequency}
-{0 Width Height matrix defaultmatrix idtransform
-dup mul exch dup mul add sqrt 72 exch div}
-{0 GrayWidth GrayHeight matrix defaultmatrix idtransform
-dup mul exch dup mul add sqrt 72 exch div}
-] def
-/calcgraysteps {
-forcemaxsteps
-{
-maxsteps
-}
-{
-/currenthalftone defed
-{currenthalftone /dicttype eq}{false}ifelse
-{
-currenthalftone begin
-HalftoneType 4 le
-{graycalcs HalftoneType 1 sub get exec}
-{
-HalftoneType 5 eq
-{
-Default begin
-{graycalcs HalftoneType 1 sub get exec}
-end
-}
-{0 60}
-ifelse
-}
-ifelse
-end
-}
-{
-currentscreen pop exch
-}
-ifelse
-printerRes 300 max exch div exch
-2 copy
-sin mul round dup mul
-3 1 roll
-cos mul round dup mul
-add 1 add
-dup maxsteps gt {pop maxsteps} if
-dup minsteps lt {pop minsteps} if
-}
-ifelse
-} bdf
-/nextrelease defed {
-/languagelevel defed not {
-/framebuffer defed {
-0 40 string framebuffer 9 1 roll 8 {pop} repeat
-dup 516 eq exch 520 eq or
-{
-/fhnumcolors 3 def
-/currentscreen {60 0 {pop pop 1}}bdf
-/calcgraysteps {maxsteps} bdf
-}if
-}if
-}if
-}if
-fhnumcolors 1 ne {
-/calcgraysteps {maxsteps} bdf
-} if
-/currentpagedevice defed {
-currentpagedevice /PreRenderingEnhance known
-{
-currentpagedevice /PreRenderingEnhance get
-{
-/calcgraysteps
-{
-forcemaxsteps
-{maxsteps}
-{256 maxsteps min}
-ifelse
-} def
-} if
-} if
-} if
-/gradfrequency 144 def
-printerRes 1000 lt {
-/gradfrequency 72 def
-} if
-/adjnumsteps {
-dup dtransform abs exch abs max
-printerRes div
-gradfrequency mul
-round
-5 max
-min
-}bdf
-/goodsep {
-spots exch get 4 get dup sepname eq exch (_vc_Registration) eq or
-}bdf
-/BeginGradation defed
-{/bb{BeginGradation}bdf}
-{/bb{}bdf}
-ifelse
-/EndGradation defed
-{/eb{EndGradation}bdf}
-{/eb{}bdf}
-ifelse
-/bottom -0 def
-/delta -0 def
-/frac -0 def
-/height -0 def
-/left -0 def
-/numsteps1 -0 def
-/radius -0 def
-/right -0 def
-/top -0 def
-/width -0 def
-/xt -0 def
-/yt -0 def
-/df currentflat def
-/tempstr 1 string def
-/clipflatness currentflat def
-/inverted?
-0 currenttransfer exec .5 ge def
-/tc1 [0 0 0 1] def
-/tc2 [0 0 0 1] def
-/storerect{/top xdf /right xdf /bottom xdf /left xdf
-/width right left sub def /height top bottom sub def}bdf
-/concatprocs{
-systemdict /packedarray known
-{dup type /packedarraytype eq 2 index type /packedarraytype eq or}{false}ifelse
-{
-/proc2 exch cvlit def /proc1 exch cvlit def
-proc1 aload pop proc2 aload pop
-proc1 length proc2 length add packedarray cvx
-}
-{
-/proc2 exch cvlit def /proc1 exch cvlit def
-/newproc proc1 length proc2 length add array def
-newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval
-newproc cvx
-}ifelse
-}bdf
-/i{dup 0 eq
-{pop df dup}
-{dup} ifelse
-/clipflatness xdf setflat
-}bdf
-version cvr 38.0 le
-{/setrgbcolor{
-currenttransfer exec 3 1 roll
-currenttransfer exec 3 1 roll
-currenttransfer exec 3 1 roll
-setrgbcolor}bdf}if
-/vms {/vmsv save def} bdf
-/vmr {vmsv restore} bdf
-/vmrs{vmsv restore /vmsv save def}bdf
-/eomode{
-{/filler /eofill load def /clipper /eoclip load def}
-{/filler /fill load def /clipper /clip load def}
-ifelse
-}bdf
-/normtaper{}bdf
-/logtaper{9 mul 1 add log}bdf
-/CD{
-/NF exch def
-{
-exch dup
-/FID ne 1 index/UniqueID ne and
-{exch NF 3 1 roll put}
-{pop pop}
-ifelse
-}forall
-NF
-}bdf
-/MN{
-1 index length
-/Len exch def
-dup length Len add
-string dup
-Len
-4 -1 roll
-putinterval
-dup
-0
-4 -1 roll
-putinterval
-}bdf
-/RC{4 -1 roll /ourvec xdf 256 string cvs(|______)anchorsearch
-{1 index MN cvn/NewN exch def cvn
-findfont dup maxlength dict CD dup/FontName NewN put dup
-/Encoding ourvec put NewN exch definefont pop}{pop}ifelse}bdf
-/RF{
-dup
-FontDirectory exch
-known
-{pop 3 -1 roll pop}
-{RC}
-ifelse
-}bdf
-/FF{dup 256 string cvs(|______)exch MN cvn dup FontDirectory exch known
-{exch pop findfont 3 -1 roll pop}
-{pop dup findfont dup maxlength dict CD dup dup
-/Encoding exch /Encoding get 256 array copy 7 -1 roll
-{3 -1 roll dup 4 -2 roll put}forall put definefont}
-ifelse}bdf
-/RCJ{4 -1 roll
-/ourvec xdf
-256 string cvs
-(|______) anchorsearch
-{pop
-cvn
-dup FDFJ
-exch
-1 index
-eq
-{
-_bfh findfont _efh
-dup
-maxlength dict
-CD
-dup
-/FontName
-3 index
-put
-dup
-/Encoding ourvec put
-1 index
-exch
-definefont
-pop
-}
-{exch pop}
-ifelse
-}
-{pop}
-ifelse
-}bdf
-/RFJ{
-dup
-FontDirectory exch
-known
-{pop 3 -1 roll pop}
-{RCJ}
-ifelse
-}bdf
-/hasfont
-{
-/resourcestatus where
-{
-pop
-/Font resourcestatus
-{
-pop pop true
-}
-{
-false
-}
-ifelse
-}
-{
-dup FontDirectory exch known
-{pop true}
-{
-256 string
-cvs
-(fonts/) exch MN
-status
-{pop pop pop pop true}
-{false}
-ifelse
-}
-ifelse
-}
-ifelse
-}bdf
-/FDFJ
-{
-dup
-hasfont
-not
-{
-pop
-/Ryumin-Light-83pv-RKSJ-H
-hasfont
-{
-/Ryumin-Light-83pv-RKSJ-H
-}
-{
-/Courier
-}
-ifelse
-}
-if
-}bdf
-/FFJ{
-_bfh
-dup
-256 string cvs
-(|______)exch MN
-cvn
-dup
-FontDirectory
-exch known
-{
-exch
-pop
-findfont
-3 -1 roll
-pop
-}
-{
-pop
-FDFJ
-dup findfont
-dup maxlength dict
-CD
-dup dup
-/Encoding exch
-/Encoding get
-256 array copy
-7 -1 roll
-{
-3 -1 roll
-dup
-4 -2 roll
-put
-}forall
-put
-definefont
-}
-ifelse
-_efh
-}bdf
-/GS {
-dup
-hasfont
-{
-findfont
-exch makesetfont
-exch
-pop
-ts
-}
-{
-pop pop pop
-ts
-} ifelse
-} bdf
-/RCK{4 -1 roll
-/ourvec xdf
-256 string cvs
-(|______) anchorsearch
-{pop
-cvn
-dup FDFK
-exch
-1 index
-eq
-{
-_bfh findfont _efh
-dup
-maxlength dict
-CD
-dup
-/FontName
-3 index
-put
-dup
-/Encoding ourvec put
-1 index
-exch
-definefont
-pop
-}
-{exch pop}
-ifelse
-}
-{pop}
-ifelse
-}bdf
-/RFK{
-dup
-FontDirectory exch
-known
-{pop 3 -1 roll pop}
-{RCK}
-ifelse
-}bdf
-/hasfont
-{
-/resourcestatus where
-{
-pop
-/Font resourcestatus
-{
-pop pop true
-}
-{
-false
-}
-ifelse
-}
-{
-dup FontDirectory exch known
-{pop true}
-{
-256 string
-cvs
-(fonts/) exch MN
-status
-{pop pop pop pop true}
-{false}
-ifelse
-}
-ifelse
-}
-ifelse
-}bdf
-/FDFK
-{
-dup
-hasfont
-not
-{
-pop
-/JCsm
-hasfont
-{
-/JCsm
-}
-{
-/Courier
-}
-ifelse
-}
-if
-}bdf
-/FFK{
-_bfh
-dup
-256 string cvs
-(|______)exch MN
-cvn
-dup
-FontDirectory
-exch known
-{
-exch
-pop
-findfont
-3 -1 roll
-pop
-}
-{
-pop
-FDFK
-dup findfont
-dup maxlength dict
-CD
-dup dup
-/Encoding exch
-/Encoding get
-256 array copy
-7 -1 roll
-{
-3 -1 roll
-dup
-4 -2 roll
-put
-}forall
-put
-definefont
-}
-ifelse
-_efh
-}bdf
-/RCTC{4 -1 roll
-/ourvec xdf
-256 string cvs
-(|______) anchorsearch
-{pop
-cvn
-dup FDFTC
-exch
-1 index
-eq
-{
-_bfh findfont _efh
-dup
-maxlength dict
-CD
-dup
-/FontName
-3 index
-put
-dup
-/Encoding ourvec put
-1 index
-exch
-definefont
-pop
-}
-{exch pop}
-ifelse
-}
-{pop}
-ifelse
-}bdf
-/RFTC{
-dup
-FontDirectory exch
-known
-{pop 3 -1 roll pop}
-{RCTC}
-ifelse
-}bdf
-/FDFTC
-{
-dup
-hasfont
-not
-{
-pop
-/DFMing-Lt-HK-BF
-hasfont
-{
-/DFMing-Lt-HK-BF
-}
-{
-/Courier
-}
-ifelse
-}
-if
-}bdf
-/FFTC{
-_bfh
-dup
-256 string cvs
-(|______)exch MN
-cvn
-dup
-FontDirectory
-exch known
-{
-exch
-pop
-findfont
-3 -1 roll
-pop
-}
-{
-pop
-FDFTC
-dup findfont
-dup maxlength dict
-CD
-dup dup
-/Encoding exch
-/Encoding get
-256 array copy
-7 -1 roll
-{
-3 -1 roll
-dup
-4 -2 roll
-put
-}forall
-put
-definefont
-}
-ifelse
-_efh
-}bdf
-/fps{
-currentflat
-exch
-dup 0 le{pop 1}if
-{
-dup setflat 3 index stopped
-{1.3 mul dup 3 index gt{pop setflat pop pop stop}if}
-{exit}
-ifelse
-}loop
-pop setflat pop pop
-}bdf
-/fp{100 currentflat fps}bdf
-/clipper{clip}bdf
-/W{/clipper load 100 clipflatness dup setflat fps}bdf
-
-userdict begin /BDFontDict 29 dict def end
-BDFontDict begin
-/bu{}def
-/bn{}def
-/setTxMode{av 70 ge{pop}if pop}def
-/gm{m}def
-/show{pop}def
-/gr{pop}def
-/fnt{pop pop pop}def
-/fs{pop}def
-/fz{pop}def
-/lin{pop pop}def
-/:M {pop pop} def
-/sf {pop} def
-/S {pop} def
-/@b {pop pop pop pop pop pop pop pop} def
-/_bdsave /save load def
-/_bdrestore /restore load def
-/save { dup /fontsave eq {null} {_bdsave} ifelse } def
-/restore { dup null eq { pop } { _bdrestore } ifelse } def
-/fontsave null def
-end
-/MacVec 256 array def
-MacVec 0 /Helvetica findfont
-/Encoding get 0 128 getinterval putinterval
-MacVec 127 /DEL put MacVec 16#27 /quotesingle put MacVec 16#60 /grave put
-/NUL/SOH/STX/ETX/EOT/ENQ/ACK/BEL/BS/HT/LF/VT/FF/CR/SO/SI
-/DLE/DC1/DC2/DC3/DC4/NAK/SYN/ETB/CAN/EM/SUB/ESC/FS/GS/RS/US
-MacVec 0 32 getinterval astore pop
-/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute
-/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave
-/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute
-/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis
-/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
-/registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash
-/infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation
-/product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash
-/questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft
-/guillemotright/ellipsis/nbspace/Agrave/Atilde/Otilde/OE/oe
-/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge
-/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl
-/daggerdbl/periodcentered/quotesinglbase/quotedblbase
-/perthousand/Acircumflex/Ecircumflex/Aacute
-/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave/Oacute/Ocircumflex
-/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde
-/macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron
-MacVec 128 128 getinterval astore pop
-/findheaderfont {
-/Helvetica findfont
-} def
-end %. AltsysDict
-%%EndResource
-%%EndProlog
-
-%%BeginSetup
-
-AltsysDict begin
-_bfh
-
-_efh
-end %. AltsysDict
-
-%%EndSetup
-AltsysDict begin
-
-/onlyk4{false}ndf
-/ccmyk{dup 5 -1 roll sub 0 max exch}ndf
-/cmyk2gray{
-4 -1 roll 0.3 mul 4 -1 roll 0.59 mul 4 -1 roll 0.11 mul
-add add add 1 min neg 1 add
-}bdf
-/setcmykcolor{1 exch sub ccmyk ccmyk ccmyk pop setrgbcolor}ndf
-/maxcolor {
-max max max
-} ndf
-/maxspot {
-pop
-} ndf
-/setcmykcoloroverprint{4{dup -1 eq{pop 0}if 4 1 roll}repeat setcmykcolor}ndf
-/findcmykcustomcolor{5 packedarray}ndf
-/setcustomcolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndf
-/setseparationgray{setgray}ndf
-/setoverprint{pop}ndf
-/currentoverprint false ndf
-/cmykbufs2gray{
-0 1 2 index length 1 sub
-{
-4 index 1 index get 0.3 mul
-4 index 2 index get 0.59 mul
-4 index 3 index get 0.11 mul
-4 index 4 index get
-add add add cvi 255 min
-255 exch sub
-2 index 3 1 roll put
-}for
-4 1 roll pop pop pop
-}bdf
-/colorimage{
-pop pop
-[
-5 -1 roll/exec cvx
-6 -1 roll/exec cvx
-7 -1 roll/exec cvx
-8 -1 roll/exec cvx
-/cmykbufs2gray cvx
-]cvx
-image
-}
-%. version 47.1 on Linotronic of Postscript defines colorimage incorrectly (rgb model only)
-version cvr 47.1 le
-statusdict /product get (Lino) anchorsearch{pop pop true}{pop false}ifelse
-and{userdict begin bdf end}{ndf}ifelse
-fhnumcolors 1 ne {/yt save def} if
-/customcolorimage{
-aload pop
-(_vc_Registration) eq
-{
-pop pop pop pop separationimage
-}
-{
-/ik xdf /iy xdf /im xdf /ic xdf
-ic im iy ik cmyk2gray /xt xdf
-currenttransfer
-{dup 1.0 exch sub xt mul add}concatprocs
-st
-image
-}
-ifelse
-}ndf
-fhnumcolors 1 ne {yt restore} if
-fhnumcolors 3 ne {/yt save def} if
-/customcolorimage{
-aload pop
-(_vc_Registration) eq
-{
-pop pop pop pop separationimage
-}
-{
-/ik xdf /iy xdf /im xdf /ic xdf
-1.0 dup ic ik add min sub
-1.0 dup im ik add min sub
-1.0 dup iy ik add min sub
-/ic xdf /iy xdf /im xdf
-currentcolortransfer
-4 1 roll
-{dup 1.0 exch sub ic mul add}concatprocs 4 1 roll
-{dup 1.0 exch sub iy mul add}concatprocs 4 1 roll
-{dup 1.0 exch sub im mul add}concatprocs 4 1 roll
-setcolortransfer
-{/dummy xdf dummy}concatprocs{dummy}{dummy}true 3 colorimage
-}
-ifelse
-}ndf
-fhnumcolors 3 ne {yt restore} if
-fhnumcolors 4 ne {/yt save def} if
-/customcolorimage{
-aload pop
-(_vc_Registration) eq
-{
-pop pop pop pop separationimage
-}
-{
-/ik xdf /iy xdf /im xdf /ic xdf
-currentcolortransfer
-{1.0 exch sub ik mul ik sub 1 add}concatprocs 4 1 roll
-{1.0 exch sub iy mul iy sub 1 add}concatprocs 4 1 roll
-{1.0 exch sub im mul im sub 1 add}concatprocs 4 1 roll
-{1.0 exch sub ic mul ic sub 1 add}concatprocs 4 1 roll
-setcolortransfer
-{/dummy xdf dummy}concatprocs{dummy}{dummy}{dummy}
-true 4 colorimage
-}
-ifelse
-}ndf
-fhnumcolors 4 ne {yt restore} if
-/separationimage{image}ndf
-/spotascmyk false ndf
-/newcmykcustomcolor{6 packedarray}ndf
-/inkoverprint false ndf
-/setinkoverprint{pop}ndf
-/setspotcolor {
-spots exch get
-dup 4 get (_vc_Registration) eq
-{pop 1 exch sub setseparationgray}
-{0 5 getinterval exch setcustomcolor}
-ifelse
-}ndf
-/currentcolortransfer{currenttransfer dup dup dup}ndf
-/setcolortransfer{st pop pop pop}ndf
-/fas{}ndf
-/sas{}ndf
-/fhsetspreadsize{pop}ndf
-/filler{fill}bdf
-/F{gsave {filler}fp grestore}bdf
-/f{closepath F}bdf
-/S{gsave {stroke}fp grestore}bdf
-/s{closepath S}bdf
-userdict /islevel2
-systemdict /languagelevel known dup
-{
-pop systemdict /languagelevel get 2 ge
-} if
-put
-islevel2 not
-{
-/currentcmykcolor
-{
-0 0 0 1 currentgray sub
-} ndf
-} if
-/tc
-{
-gsave
-setcmykcolor currentcmykcolor
-grestore
-} bind def
-/testCMYKColorThrough
-{
-tc add add add 0 ne
-} bind def
-/fhiscomposite where not {
-userdict /fhiscomposite
-islevel2
-{
-gsave 1 1 1 1 setcmykcolor currentcmykcolor grestore
-add add add 4 eq
-}
-{
-1 0 0 0 testCMYKColorThrough
-0 1 0 0 testCMYKColorThrough
-0 0 1 0 testCMYKColorThrough
-0 0 0 1 testCMYKColorThrough
-and and and
-} ifelse
-put
-}
-{ pop }
-ifelse
-/bc4 [0 0 0 0] def
-/_lfp4 {
-1 pop
-/yt xdf
-/xt xdf
-/ang xdf
-storerect
-/taperfcn xdf
-/k2 xdf /y2 xdf /m2 xdf /c2 xdf
-/k1 xdf /y1 xdf /m1 xdf /c1 xdf
-c1 c2 sub abs
-m1 m2 sub abs
-y1 y2 sub abs
-k1 k2 sub abs
-maxcolor
-calcgraysteps mul abs round
-height abs adjnumsteps
-dup 1 lt {pop 1} if
-1 sub /numsteps1 xdf
-currentflat mark
-currentflat clipflatness
-/delta top bottom sub numsteps1 1 add div def
-/right right left sub def
-/botsv top delta sub def
-{
-{
-W
-xt yt translate
-ang rotate
-xt neg yt neg translate
-dup setflat
-/bottom botsv def
-0 1 numsteps1
-{
-numsteps1 dup 0 eq {pop pop 0.5} {div} ifelse
-taperfcn /frac xdf
-bc4 0 c2 c1 sub frac mul c1 add put
-bc4 1 m2 m1 sub frac mul m1 add put
-bc4 2 y2 y1 sub frac mul y1 add put
-bc4 3 k2 k1 sub frac mul k1 add put
-bc4 vc
-1 index setflat
-{
-mark {newpath left bottom right delta rectfill}stopped
-{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if}
-{cleartomark exit}ifelse
-}loop
-/bottom bottom delta sub def
-}for
-}
-gsave stopped grestore
-{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if}
-{exit}ifelse
-}loop
-cleartomark setflat
-}bdf
-/bcs [0 0] def
-/_lfs4 {
-/yt xdf
-/xt xdf
-/ang xdf
-storerect
-/taperfcn xdf
-/tint2 xdf
-/tint1 xdf
-bcs exch 1 exch put
-tint1 tint2 sub abs
-bcs 1 get maxspot
-calcgraysteps mul abs round
-height abs adjnumsteps
-dup 2 lt {pop 2} if
-1 sub /numsteps1 xdf
-currentflat mark
-currentflat clipflatness
-/delta top bottom sub numsteps1 1 add div def
-/right right left sub def
-/botsv top delta sub def
-{
-{
-W
-xt yt translate
-ang rotate
-xt neg yt neg translate
-dup setflat
-/bottom botsv def
-0 1 numsteps1
-{
-numsteps1 div taperfcn /frac xdf
-bcs 0
-1.0 tint2 tint1 sub frac mul tint1 add sub
-put bcs vc
-1 index setflat
-{
-mark {newpath left bottom right delta rectfill}stopped
-{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if}
-{cleartomark exit}ifelse
-}loop
-/bottom bottom delta sub def
-}for
-}
-gsave stopped grestore
-{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if}
-{exit}ifelse
-}loop
-cleartomark setflat
-}bdf
-/_rfs6 {
-/tint2 xdf
-/tint1 xdf
-bcs exch 1 exch put
-/inrad xdf
-/radius xdf
-/yt xdf
-/xt xdf
-tint1 tint2 sub abs
-bcs 1 get maxspot
-calcgraysteps mul abs round
-radius inrad sub abs
-adjnumsteps
-dup 1 lt {pop 1} if
-1 sub /numsteps1 xdf
-radius inrad sub numsteps1 dup 0 eq {pop} {div} ifelse
-2 div /halfstep xdf
-currentflat mark
-currentflat clipflatness
-{
-{
-dup setflat
-W
-0 1 numsteps1
-{
-dup /radindex xdf
-numsteps1 dup 0 eq {pop pop 0.5} {div} ifelse
-/frac xdf
-bcs 0
-tint2 tint1 sub frac mul tint1 add
-put bcs vc
-1 index setflat
-{
-newpath mark
-xt yt radius inrad sub 1 frac sub mul halfstep add inrad add 0 360
-{ arc
-radindex numsteps1 ne
-inrad 0 gt or
-{
-xt yt
-numsteps1 0 eq
-{ inrad }
-{
-radindex 1 add numsteps1 div 1 exch sub
-radius inrad sub mul halfstep add inrad add
-}ifelse
-dup xt add yt moveto
-360 0 arcn
-} if
-fill
-}stopped
-{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if}
-{cleartomark exit}ifelse
-}loop
-}for
-}
-gsave stopped grestore
-{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if}
-{exit}ifelse
-}loop
-cleartomark setflat
-}bdf
-/_rfp6 {
-1 pop
-/k2 xdf /y2 xdf /m2 xdf /c2 xdf
-/k1 xdf /y1 xdf /m1 xdf /c1 xdf
-/inrad xdf
-/radius xdf
-/yt xdf
-/xt xdf
-c1 c2 sub abs
-m1 m2 sub abs
-y1 y2 sub abs
-k1 k2 sub abs
-maxcolor
-calcgraysteps mul abs round
-radius inrad sub abs
-adjnumsteps
-dup 1 lt {pop 1} if
-1 sub /numsteps1 xdf
-radius inrad sub numsteps1 dup 0 eq {pop} {div} ifelse
-2 div /halfstep xdf
-currentflat mark
-currentflat clipflatness
-{
-{
-dup setflat
-W
-0 1 numsteps1
-{
-dup /radindex xdf
-numsteps1 dup 0 eq {pop pop 0.5} {div} ifelse
-/frac xdf
-bc4 0 c2 c1 sub frac mul c1 add put
-bc4 1 m2 m1 sub frac mul m1 add put
-bc4 2 y2 y1 sub frac mul y1 add put
-bc4 3 k2 k1 sub frac mul k1 add put
-bc4 vc
-1 index setflat
-{
-newpath mark
-xt yt radius inrad sub 1 frac sub mul halfstep add inrad add 0 360
-{ arc
-radindex numsteps1 ne
-inrad 0 gt or
-{
-xt yt
-numsteps1 0 eq
-{ inrad }
-{
-radindex 1 add numsteps1 div 1 exch sub
-radius inrad sub mul halfstep add inrad add
-}ifelse
-dup xt add yt moveto
-360 0 arcn
-} if
-fill
-}stopped
-{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if}
-{cleartomark exit}ifelse
-}loop
-}for
-}
-gsave stopped grestore
-{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if}
-{exit}ifelse
-}loop
-cleartomark setflat
-}bdf
-/lfp4{_lfp4}ndf
-/lfs4{_lfs4}ndf
-/rfs6{_rfs6}ndf
-/rfp6{_rfp6}ndf
-/cvc [0 0 0 1] def
-/vc{
-AltsysDict /cvc 2 index put
-aload length dup 4 eq
-{pop dup -1 eq{pop setrgbcolor}{setcmykcolor}ifelse}
-{6 eq {sethexcolor} {setspotcolor} ifelse }
-ifelse
-}bdf
-0 setseparationgray
-/imgr {1692.47 1570.59 2287.75 2412.48 } def
-/bleed 0 def
-/clpr {1692.47 1570.59 2287.75 2412.48 } def
-/xs 1 def
-/ys 1 def
-/botx 0 def
-/overlap 0 def
-/wdist 18 def
-0 2 mul fhsetspreadsize
-0 0 ne {/df 0 def /clipflatness 0 def} if
-/maxsteps 256 def
-/forcemaxsteps false def
-/minsteps 0 def
-
-userdict begin /AGDOrigMtx matrix currentmatrix def end
-vms
-0.15 0.15 scale %JND
--1845 -2006 translate
-
-/currentpacking defed{false setpacking}if
-/spots[
-
-1 0 0 0 (Process Cyan) false newcmykcustomcolor
-
-0 1 0 0 (Process Magenta) false newcmykcustomcolor
-
-0 0 1 0 (Process Yellow) false newcmykcustomcolor
-
-0 0 0 1 (Process Black) false newcmykcustomcolor
-]def
-n
-[] 0 d
-3.863708 M
-1 w
-0 j
-0 J
-false setoverprint
-0 i
-false eomode
-[0 0 0 1]vc
-vms
-1848.4365 2094.0422 m
-1848.4365 2140.987 1886.4917 2179.0422 1933.4365 2179.0422 C
-1980.3813 2179.0422 2018.4365 2140.987 2018.4365 2094.0422 C
-2018.4365 2047.0974 1980.3813 2009.0422 1933.4365 2009.0422 C
-1886.4917 2009.0422 1848.4365 2047.0974 1848.4365 2094.0422 C
-5.3858 w
-3.863693 M
-s
-n
-true eomode
-1897.6516 2067.1709 m
-1897.6087 2066.5538 L
-1885.3743 2066.1319 L
-1883.1946 2062.4053 L
-1869.9055 2063.9522 L
-1869.9055 2067.1712 L
-1897.6516 2067.1709 L
-h
-1944.0852 2067.1709 m
-1944.0852 2067.0077 1944.0852 2066.8741 1944.0852 2066.7647 C
-1944.1314 2066.5757 1944.1775 2066.4131 1944.2258 2066.2725 C
-1945.0213 2065.0992 1946.0056 2064.2554 1947.179 2063.7413 C
-1948.3963 2063.2249 1950.0134 2062.9678 1952.0305 2062.9678 C
-1956.0142 2062.9678 1959.7627 2063.9522 1963.2805 2065.9209 C
-1964.0204 2066.3353 1964.6824 2066.7527 1965.2665 2067.1732 C
-1971.313 2067.1709 L
-1970.2122 2065.693 1968.5893 2064.3153 1966.4446 2063.0381 C
-1962.0369 2060.4585 1956.8821 2059.1709 1950.9758 2059.1709 C
-1948.6775 2059.1709 1946.7791 2059.5445 1945.2805 2060.2959 C
-1943.7798 2061.0914 1942.5142 2062.357 1941.4837 2064.0928 C
-1941.2486 2064.0928 1940.8728 2064.0928 1940.3587 2064.0928 C
-1937.5462 2063.9039 1935.4829 2063.8116 1934.1712 2063.8116 C
-1929.2954 2063.8116 1925.1228 2064.2796 1921.6555 2065.2178 C
-1919.9787 2065.6936 1918.2362 2066.3443 1916.4282 2067.1704 C
-1944.0852 2067.1709 L
-true setoverprint
-f
-false setoverprint
-n
-1884.4125 2075.1709 m
-1884.4602 2073.585 L
-1893.1087 2073.0225 L
-1893.1087 2075.1712 L
-1910.8456 2075.1709 L
-1910.98 2075.0913 1911.1146 2075.0069 1911.2493 2074.9209 C
-1911.9986 2074.3584 1912.583 2073.9585 1913.0071 2073.7256 C
-1916.804 2071.4756 1920.2954 2069.9288 1923.4837 2069.085 C
-1926.718 2068.2413 1931.0071 2067.8194 1936.3508 2067.8194 C
-1940.3587 2067.8194 L
-1940.7805 2070.7022 L
-1938.9524 2070.8428 1937.522 2071.4053 1936.4915 2072.3897 C
-1935.7726 2073.1422 1935.3163 2074.0693 1935.1223 2075.1726 C
-1940.1696 2075.1709 L
-1940.3293 2074.9768 1940.5095 2074.8018 1940.7102 2074.6397 C
-1941.7407 2073.8421 1943.147 2073.4444 1944.929 2073.4444 C
-1948.4128 2073.4444 1951.8259 2074.0193 1955.1674 2075.169 C
-1963.5704 2075.1709 L
-1962.8877 2074.843 1962.0411 2074.4337 1961.0305 2073.9366 C
-1958.1697 2072.5303 1955.2166 2071.4976 1952.1712 2070.8428 C
-1951.3274 2070.7022 1950.2244 2070.5132 1948.8665 2070.2803 C
-1945.6782 2069.7178 1944.0852 2068.8038 1944.0852 2067.5381 C
-1944.0852 2067.4017 1944.0852 2067.2776 1944.0852 2067.1658 C
-1916.4282 2067.1709 L
-1914.4953 2068.0535 1912.4877 2069.1369 1910.4055 2070.4209 C
-1910.0759 2070.6539 1909.6321 2070.9593 1909.0696 2071.335 C
-1905.9275 2073.5367 1902.9041 2074.6375 1899.9993 2074.6397 C
-1899.9509 2074.6397 1899.6939 2074.6155 1899.2258 2074.5694 C
-1898.7556 2074.521 1898.4041 2074.5452 1898.1712 2074.6397 C
-1897.6516 2067.1709 L
-1869.9055 2067.1709 L
-1869.9055 2075.1714 L
-1884.4125 2075.1709 L
-h
-1972.5022 2075.1709 m
-1972.8687 2074.2606 1973.0523 2073.2652 1973.054 2072.1788 C
-1973.054 2070.3983 1972.4736 2068.7289 1971.313 2067.1709 C
-1965.2666 2067.1709 L
-1967.4581 2068.751 1968.554 2070.3727 1968.554 2072.0381 C
-1968.554 2073.0686 1968.2486 2073.9827 1967.6399 2074.7803 C
-1967.5373 2074.922 1967.4334 2075.0518 1967.3283 2075.1698 C
-1972.5022 2075.1709 L
-true setoverprint
-f
-false setoverprint
-n
-1869.9055 2075.1709 m
-1869.9055 2119.0772 L
-1897.1868 2119.8506 L
-1897.8899 2114.2256 L
-1899.2962 2114.2256 L
-1901.0759 2114.2256 1902.7876 2114.5069 1904.429 2115.0694 C
-1906.1165 2115.678 1908.2478 2116.825 1910.8274 2118.5147 C
-1911.9524 2119.2178 L
-1919.5923 2124.1397 1925.4041 2126.6006 1929.3899 2126.6006 C
-1930.8423 2126.6006 1932.3408 2126.3655 1933.8899 2125.8975 C
-1935.4368 2125.4756 1937.1463 2124.7945 1939.0227 2123.8584 C
-1940.1939 2123.9046 1941.8814 2123.9507 1944.0852 2123.9991 C
-1950.0376 2124.0914 1954.0674 2124.1375 1956.179 2124.1397 C
-1972.7244 2124.1397 1984.583 2123.1311 1991.7571 2121.1163 C
-1998.9751 2119.1475 2002.583 2115.9351 2002.5852 2111.4834 C
-2002.5852 2107.8272 2000.2869 2105.2959 1995.6946 2103.8897 C
-1991.1463 2102.5296 1981.865 2101.8506 1967.8508 2101.8506 C
-1963.5618 2101.8506 L
-1964.6384 2100.8179 1965.4361 2099.8116 1965.9524 2098.8272 C
-1966.4666 2097.8428 1966.7236 2096.8343 1966.7258 2095.8038 C
-1966.7258 2095.3335 1966.6314 2094.7952 1966.4446 2094.1866 C
-1966.2556 2093.6241 1965.9041 2092.8506 1965.3899 2091.8663 C
-1967.1697 2091.1631 1968.5056 2090.1788 1969.3977 2088.9131 C
-1970.2876 2087.6936 1970.7315 2086.1929 1970.7337 2084.4131 C
-1970.7337 2083.521 1970.615 2082.6311 1970.3821 2081.7413 C
-1970.147 2080.8492 1969.7954 2079.9593 1969.3274 2079.0694 C
-1970.5447 2078.2256 1971.4588 2077.2171 1972.0696 2076.0459 C
-1972.2346 2075.7625 1972.3788 2075.4685 1972.5022 2075.1642 C
-1967.3284 2075.1709 L
-1966.8077 2075.7539 1966.2562 2076.0459 1965.6712 2076.0459 C
-1965.5191 2076.0459 1964.8189 2075.7521 1963.5704 2075.1643 C
-1955.1674 2075.1709 L
-1956.5004 2075.6277 1957.8219 2076.1778 1959.1321 2076.8194 C
-1963.7727 2079.1155 1966.093 2081.5523 1966.093 2084.1319 C
-1966.093 2085.303 1965.7173 2086.2632 1964.968 2087.0147 C
-1964.2649 2087.764 1963.3508 2088.1375 1962.2258 2088.1397 C
-1961.7556 2088.1397 1959.0838 2086.9905 1954.2102 2084.6944 C
-1949.3806 2082.396 1944.4368 2080.6624 1939.3743 2079.4913 C
-1939.2798 2079.3023 1939.2337 2079.0914 1939.2337 2078.8584 C
-1939.2337 2078.6695 1939.2337 2078.3663 1939.2337 2077.9444 C
-1939.2337 2076.8248 1939.5456 2075.8974 1940.1695 2075.1644 C
-1935.1224 2075.1709 L
-1935.0507 2075.5803 1935.0149 2076.012 1935.0149 2076.4678 C
-1935.0149 2076.8414 1935.0369 2077.2391 1935.0852 2077.6631 C
-1935.1775 2078.085 1935.294 2078.5992 1935.4368 2079.21 C
-1934.7337 2079.21 L
-1931.9673 2079.21 1929.7876 2080.0296 1928.1946 2081.6709 C
-1926.5994 2083.3101 1925.804 2085.514 1925.804 2088.2803 C
-1925.804 2088.9834 L
-1924.3032 2088.6077 1922.9673 2088.3265 1921.7962 2088.1397 C
-1920.6712 2087.9507 1919.6626 2087.8584 1918.7727 2087.8584 C
-1916.8501 2087.8584 1914.9517 2088.232 1913.0774 2088.9834 C
-1911.2493 2089.7789 1909.2102 2091.0906 1906.9602 2092.9209 C
-1906.8196 2094.6084 L
-1909.1619 2093.7647 1911.2713 2093.1077 1913.1477 2092.6397 C
-1915.022 2092.2178 1916.7556 2092.0069 1918.3508 2092.0069 C
-1920.6931 2092.0069 1922.9431 2092.521 1925.1008 2093.5538 C
-1927.3025 2094.5843 1929.5986 2096.2476 1931.9915 2098.5459 C
-1925.804 2107.7569 L
-1927.0696 2109.4444 L
-1928.4275 2108.3655 1930.2556 2106.7945 1932.554 2104.7334 C
-1938.2251 2099.6226 1942.9361 2097.0694 1946.6868 2097.0694 C
-1948.5149 2097.0694 1950.1782 2097.5132 1951.679 2098.4053 C
-1953.2258 2099.2952 1953.9993 2100.1851 1953.9993 2101.0772 C
-1953.9993 2101.6397 1952.9446 2103.1866 1950.8352 2105.7178 C
-1948.772 2108.2491 1946.1946 2111.0374 1943.1008 2114.085 C
-1939.4446 2117.6006 1936.7244 2119.8023 1934.9446 2120.6944 C
-1933.2088 2121.6304 1931.3103 2122.0984 1929.2493 2122.1006 C
-1925.3579 2122.1006 1920.3657 2120.0374 1914.2727 2115.9131 C
-1913.5696 2115.4913 1913.0532 2115.1617 1912.7258 2114.9288 C
-1909.6321 2112.8194 1907.1228 2111.4131 1905.2024 2110.71 C
-1903.2798 2110.053 1901.2166 2109.7256 1899.0149 2109.7256 C
-1898.0305 2109.7256 L
-1898.0305 2078.6475 L
-1899.8587 2078.6475 L
-1903.4329 2078.6475 1907.0952 2077.4884 1910.8456 2075.1742 C
-1893.1087 2075.1709 L
-1893.1087 2115.7725 L
-1883.1946 2115.6319 L
-1884.4125 2075.171 L
-1869.9055 2075.1709 L
-h
-1957.9368 2101.0772 m
-1957.3259 2098.5459 1956.0603 2096.6695 1954.1399 2095.4522 C
-1952.2634 2094.2327 1949.6399 2093.6241 1946.2649 2093.6241 C
-1945.1861 2093.6241 1943.615 2093.9273 1941.554 2094.5381 C
-1939.5369 2095.1929 1938.0383 2095.5203 1937.054 2095.5225 C
-1935.3665 2095.5225 1933.679 2094.8194 1931.9915 2093.4131 C
-1930.3501 2092.0069 1929.5305 2090.5765 1929.5305 2089.1241 C
-1929.5305 2087.107 1930.0447 2085.5601 1931.0774 2084.4834 C
-1932.1079 2083.4507 1933.6065 2082.9366 1935.5774 2082.9366 C
-1937.5462 2082.9366 1940.1477 2083.4046 1943.3821 2084.3428 C
-1946.6626 2085.3272 1949.9673 2086.5928 1953.2962 2088.1397 C
-1956.3416 2089.5459 1958.5674 2090.8819 1959.9758 2092.1475 C
-1961.3821 2093.4131 1962.0852 2094.6788 1962.0852 2095.9444 C
-1962.0852 2096.8343 1961.7556 2097.678 1961.1008 2098.4756 C
-1960.4439 2099.3194 1959.3892 2100.1851 1957.9368 2101.0772 C
-h
-1943.3821 2119.71 m
-1946.054 2117.1788 1948.3501 2114.8584 1950.2727 2112.7491 C
-1952.2415 2110.6397 1954.0213 2108.5303 1955.6165 2106.4209 C
-1958.5696 2106.1397 1961.2876 2105.9288 1963.7727 2105.7881 C
-1966.304 2105.6475 1968.6243 2105.5772 1970.7337 2105.5772 C
-1980.7642 2105.5772 1987.7471 2106.021 1991.6868 2106.9131 C
-1995.6704 2107.803 1997.6611 2109.3719 1997.6633 2111.6241 C
-1997.6633 2114.4366 1994.2883 2116.5459 1987.5383 2117.9522 C
-1980.8345 2119.4046 1970.8259 2120.1297 1957.5149 2120.1319 C
-1955.4055 2120.1319 1953.1555 2120.0835 1950.7649 2119.9913 C
-1948.4204 2119.9429 1945.9595 2119.8506 1943.3821 2119.71 C
-true setoverprint
-f
-false setoverprint
-n
-vmr
-vmr
-end
-%%Trailer
diff --git a/doc/xsl/graphics/tip.pdf b/doc/xsl/graphics/tip.pdf
deleted file mode 100644
index 54f5dedb..00000000
--- a/doc/xsl/graphics/tip.pdf
+++ /dev/null
Binary files differ
diff --git a/doc/xsl/graphics/warning.eps b/doc/xsl/graphics/warning.eps
deleted file mode 100644
index c9473b72..00000000
--- a/doc/xsl/graphics/warning.eps
+++ /dev/null
@@ -1,1348 +0,0 @@
-%!PS-Adobe-2.0 EPSF-1.2
-%%Title: Untitled-3
-%%Creator: FreeHand 9.0
-%%CreationDate: 2002/12/05 8:20 PM
-%%BoundingBox: 0 0 29 29
-%%FHPathName:Untitled:FreeHand 9:English:Untitled-3
-%ALDOriginalFile:Untitled:FreeHand 9:English:Untitled-3
-%ALDBoundingBox: -2 -2 29 29
-%%FHPageNum:1
-%%DocumentSuppliedResources: procset Altsys_header 4 0
-%%ColorUsage: Color
-%%DocumentProcessColors: Black
-%%EndComments
-%%BeginResource: procset Altsys_header 4 0
-userdict begin /AltsysDict 300 dict def end
-AltsysDict begin
-/bdf{bind def}bind def
-/xdf{exch def}bdf
-/defed{where{pop true}{false}ifelse}bdf
-/ndf{1 index where{pop pop pop}{dup xcheck{bind}if def}ifelse}bdf
-/d{setdash}bdf
-/h{closepath}bdf
-/H{}bdf
-/J{setlinecap}bdf
-/j{setlinejoin}bdf
-/M{setmiterlimit}bdf
-/n{newpath}bdf
-/N{newpath}bdf
-/q{gsave}bdf
-/Q{grestore}bdf
-/w{setlinewidth}bdf
-/Xic{matrix invertmatrix concat}bdf
-/Xq{matrix currentmatrix mark}bdf
-/XQ{cleartomark setmatrix}bdf
-/sepdef{
-dup where not
-{
-AltsysSepDict
-}
-if
-3 1 roll exch put
-}bdf
-/st{settransfer}bdf
-/colorimage defed /_rci xdf
-/cntr 0 def
-/readbinarystring{
-/cntr 0 def
-2 copy readstring
-{
-{
-dup
-(\034) search
-{
-length exch pop exch
-dup length 0 ne
-{
-dup dup 0 get 32 sub 0 exch put
-/cntr cntr 1 add def
-}
-{
-pop 1 string dup
-0 6 index read pop 32 sub put
-}ifelse
-3 copy
-putinterval pop
-1 add
-1 index length 1 sub
-1 index sub
-dup 0 le {pop pop exit}if
-getinterval
-}
-{
-pop exit
-} ifelse
-} loop
-}if
-cntr 0 gt
-{
-pop 2 copy
-dup length cntr sub cntr getinterval
-readbinarystring
-} if
-pop exch pop
-} bdf
-/_NXLevel2 defed {
-_NXLevel2 not {
-/colorimage where {
-userdict eq {
-/_rci false def
-} if
-} if
-} if
-} if
-/md defed{
-md type /dicttype eq {
-/colorimage where {
-md eq {
-/_rci false def
-}if
-}if
-/settransfer where {
-md eq {
-/st systemdict /settransfer get def
-}if
-}if
-}if
-}if
-/setstrokeadjust defed
-{
-true setstrokeadjust
-/C{curveto}bdf
-/L{lineto}bdf
-/m{moveto}bdf
-}
-{
-/dr{transform .25 sub round .25 add
-exch .25 sub round .25 add exch itransform}bdf
-/C{dr curveto}bdf
-/L{dr lineto}bdf
-/m{dr moveto}bdf
-/setstrokeadjust{pop}bdf
-}ifelse
-/privrectpath {
-4 -2 roll m
-dtransform round exch round exch idtransform
-2 copy 0 lt exch 0 lt xor
-{dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto}
-{exch dup 0 rlineto exch 0 exch rlineto neg 0 rlineto}
-ifelse
-closepath
-}bdf
-/rectclip{newpath privrectpath clip newpath}def
-/rectfill{gsave newpath privrectpath fill grestore}def
-/rectstroke{gsave newpath privrectpath stroke grestore}def
-/_fonthacksave false def
-/currentpacking defed
-{
-/_bfh {/_fonthacksave currentpacking def false setpacking} bdf
-/_efh {_fonthacksave setpacking} bdf
-}
-{
-/_bfh {} bdf
-/_efh {} bdf
-}ifelse
-/packedarray{array astore readonly}ndf
-/`
-{
-false setoverprint
-/-save0- save def
-5 index concat
-pop
-storerect left bottom width height rectclip
-pop
-/MMdict_count countdictstack def
-/MMop_count count 1 sub def
-userdict begin
-/showpage {} def
-0 setgray 0 setlinecap 1 setlinewidth
-0 setlinejoin 10 setmiterlimit [] 0 setdash newpath
-} bdf
-/currentpacking defed{true setpacking}if
-/min{2 copy gt{exch}if pop}bdf
-/max{2 copy lt{exch}if pop}bdf
-/xformfont { currentfont exch makefont setfont } bdf
-/fhnumcolors 1
-statusdict begin
-/processcolors defed
-{
-pop processcolors
-}
-{
-/deviceinfo defed {
-deviceinfo /Colors known {
-pop deviceinfo /Colors get
-} if
-} if
-} ifelse
-end
-def
-/printerRes
-gsave
-matrix defaultmatrix setmatrix
-72 72 dtransform
-abs exch abs
-max
-grestore
-def
-/graycalcs
-[
-{Angle Frequency}
-{GrayAngle GrayFrequency}
-{0 Width Height matrix defaultmatrix idtransform
-dup mul exch dup mul add sqrt 72 exch div}
-{0 GrayWidth GrayHeight matrix defaultmatrix idtransform
-dup mul exch dup mul add sqrt 72 exch div}
-] def
-/calcgraysteps {
-forcemaxsteps
-{
-maxsteps
-}
-{
-/currenthalftone defed
-{currenthalftone /dicttype eq}{false}ifelse
-{
-currenthalftone begin
-HalftoneType 4 le
-{graycalcs HalftoneType 1 sub get exec}
-{
-HalftoneType 5 eq
-{
-Default begin
-{graycalcs HalftoneType 1 sub get exec}
-end
-}
-{0 60}
-ifelse
-}
-ifelse
-end
-}
-{
-currentscreen pop exch
-}
-ifelse
-printerRes 300 max exch div exch
-2 copy
-sin mul round dup mul
-3 1 roll
-cos mul round dup mul
-add 1 add
-dup maxsteps gt {pop maxsteps} if
-dup minsteps lt {pop minsteps} if
-}
-ifelse
-} bdf
-/nextrelease defed {
-/languagelevel defed not {
-/framebuffer defed {
-0 40 string framebuffer 9 1 roll 8 {pop} repeat
-dup 516 eq exch 520 eq or
-{
-/fhnumcolors 3 def
-/currentscreen {60 0 {pop pop 1}}bdf
-/calcgraysteps {maxsteps} bdf
-}if
-}if
-}if
-}if
-fhnumcolors 1 ne {
-/calcgraysteps {maxsteps} bdf
-} if
-/currentpagedevice defed {
-currentpagedevice /PreRenderingEnhance known
-{
-currentpagedevice /PreRenderingEnhance get
-{
-/calcgraysteps
-{
-forcemaxsteps
-{maxsteps}
-{256 maxsteps min}
-ifelse
-} def
-} if
-} if
-} if
-/gradfrequency 144 def
-printerRes 1000 lt {
-/gradfrequency 72 def
-} if
-/adjnumsteps {
-dup dtransform abs exch abs max
-printerRes div
-gradfrequency mul
-round
-5 max
-min
-}bdf
-/goodsep {
-spots exch get 4 get dup sepname eq exch (_vc_Registration) eq or
-}bdf
-/BeginGradation defed
-{/bb{BeginGradation}bdf}
-{/bb{}bdf}
-ifelse
-/EndGradation defed
-{/eb{EndGradation}bdf}
-{/eb{}bdf}
-ifelse
-/bottom -0 def
-/delta -0 def
-/frac -0 def
-/height -0 def
-/left -0 def
-/numsteps1 -0 def
-/radius -0 def
-/right -0 def
-/top -0 def
-/width -0 def
-/xt -0 def
-/yt -0 def
-/df currentflat def
-/tempstr 1 string def
-/clipflatness currentflat def
-/inverted?
-0 currenttransfer exec .5 ge def
-/tc1 [0 0 0 1] def
-/tc2 [0 0 0 1] def
-/storerect{/top xdf /right xdf /bottom xdf /left xdf
-/width right left sub def /height top bottom sub def}bdf
-/concatprocs{
-systemdict /packedarray known
-{dup type /packedarraytype eq 2 index type /packedarraytype eq or}{false}ifelse
-{
-/proc2 exch cvlit def /proc1 exch cvlit def
-proc1 aload pop proc2 aload pop
-proc1 length proc2 length add packedarray cvx
-}
-{
-/proc2 exch cvlit def /proc1 exch cvlit def
-/newproc proc1 length proc2 length add array def
-newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval
-newproc cvx
-}ifelse
-}bdf
-/i{dup 0 eq
-{pop df dup}
-{dup} ifelse
-/clipflatness xdf setflat
-}bdf
-version cvr 38.0 le
-{/setrgbcolor{
-currenttransfer exec 3 1 roll
-currenttransfer exec 3 1 roll
-currenttransfer exec 3 1 roll
-setrgbcolor}bdf}if
-/vms {/vmsv save def} bdf
-/vmr {vmsv restore} bdf
-/vmrs{vmsv restore /vmsv save def}bdf
-/eomode{
-{/filler /eofill load def /clipper /eoclip load def}
-{/filler /fill load def /clipper /clip load def}
-ifelse
-}bdf
-/normtaper{}bdf
-/logtaper{9 mul 1 add log}bdf
-/CD{
-/NF exch def
-{
-exch dup
-/FID ne 1 index/UniqueID ne and
-{exch NF 3 1 roll put}
-{pop pop}
-ifelse
-}forall
-NF
-}bdf
-/MN{
-1 index length
-/Len exch def
-dup length Len add
-string dup
-Len
-4 -1 roll
-putinterval
-dup
-0
-4 -1 roll
-putinterval
-}bdf
-/RC{4 -1 roll /ourvec xdf 256 string cvs(|______)anchorsearch
-{1 index MN cvn/NewN exch def cvn
-findfont dup maxlength dict CD dup/FontName NewN put dup
-/Encoding ourvec put NewN exch definefont pop}{pop}ifelse}bdf
-/RF{
-dup
-FontDirectory exch
-known
-{pop 3 -1 roll pop}
-{RC}
-ifelse
-}bdf
-/FF{dup 256 string cvs(|______)exch MN cvn dup FontDirectory exch known
-{exch pop findfont 3 -1 roll pop}
-{pop dup findfont dup maxlength dict CD dup dup
-/Encoding exch /Encoding get 256 array copy 7 -1 roll
-{3 -1 roll dup 4 -2 roll put}forall put definefont}
-ifelse}bdf
-/RCJ{4 -1 roll
-/ourvec xdf
-256 string cvs
-(|______) anchorsearch
-{pop
-cvn
-dup FDFJ
-exch
-1 index
-eq
-{
-_bfh findfont _efh
-dup
-maxlength dict
-CD
-dup
-/FontName
-3 index
-put
-dup
-/Encoding ourvec put
-1 index
-exch
-definefont
-pop
-}
-{exch pop}
-ifelse
-}
-{pop}
-ifelse
-}bdf
-/RFJ{
-dup
-FontDirectory exch
-known
-{pop 3 -1 roll pop}
-{RCJ}
-ifelse
-}bdf
-/hasfont
-{
-/resourcestatus where
-{
-pop
-/Font resourcestatus
-{
-pop pop true
-}
-{
-false
-}
-ifelse
-}
-{
-dup FontDirectory exch known
-{pop true}
-{
-256 string
-cvs
-(fonts/) exch MN
-status
-{pop pop pop pop true}
-{false}
-ifelse
-}
-ifelse
-}
-ifelse
-}bdf
-/FDFJ
-{
-dup
-hasfont
-not
-{
-pop
-/Ryumin-Light-83pv-RKSJ-H
-hasfont
-{
-/Ryumin-Light-83pv-RKSJ-H
-}
-{
-/Courier
-}
-ifelse
-}
-if
-}bdf
-/FFJ{
-_bfh
-dup
-256 string cvs
-(|______)exch MN
-cvn
-dup
-FontDirectory
-exch known
-{
-exch
-pop
-findfont
-3 -1 roll
-pop
-}
-{
-pop
-FDFJ
-dup findfont
-dup maxlength dict
-CD
-dup dup
-/Encoding exch
-/Encoding get
-256 array copy
-7 -1 roll
-{
-3 -1 roll
-dup
-4 -2 roll
-put
-}forall
-put
-definefont
-}
-ifelse
-_efh
-}bdf
-/GS {
-dup
-hasfont
-{
-findfont
-exch makesetfont
-exch
-pop
-ts
-}
-{
-pop pop pop
-ts
-} ifelse
-} bdf
-/RCK{4 -1 roll
-/ourvec xdf
-256 string cvs
-(|______) anchorsearch
-{pop
-cvn
-dup FDFK
-exch
-1 index
-eq
-{
-_bfh findfont _efh
-dup
-maxlength dict
-CD
-dup
-/FontName
-3 index
-put
-dup
-/Encoding ourvec put
-1 index
-exch
-definefont
-pop
-}
-{exch pop}
-ifelse
-}
-{pop}
-ifelse
-}bdf
-/RFK{
-dup
-FontDirectory exch
-known
-{pop 3 -1 roll pop}
-{RCK}
-ifelse
-}bdf
-/hasfont
-{
-/resourcestatus where
-{
-pop
-/Font resourcestatus
-{
-pop pop true
-}
-{
-false
-}
-ifelse
-}
-{
-dup FontDirectory exch known
-{pop true}
-{
-256 string
-cvs
-(fonts/) exch MN
-status
-{pop pop pop pop true}
-{false}
-ifelse
-}
-ifelse
-}
-ifelse
-}bdf
-/FDFK
-{
-dup
-hasfont
-not
-{
-pop
-/JCsm
-hasfont
-{
-/JCsm
-}
-{
-/Courier
-}
-ifelse
-}
-if
-}bdf
-/FFK{
-_bfh
-dup
-256 string cvs
-(|______)exch MN
-cvn
-dup
-FontDirectory
-exch known
-{
-exch
-pop
-findfont
-3 -1 roll
-pop
-}
-{
-pop
-FDFK
-dup findfont
-dup maxlength dict
-CD
-dup dup
-/Encoding exch
-/Encoding get
-256 array copy
-7 -1 roll
-{
-3 -1 roll
-dup
-4 -2 roll
-put
-}forall
-put
-definefont
-}
-ifelse
-_efh
-}bdf
-/RCTC{4 -1 roll
-/ourvec xdf
-256 string cvs
-(|______) anchorsearch
-{pop
-cvn
-dup FDFTC
-exch
-1 index
-eq
-{
-_bfh findfont _efh
-dup
-maxlength dict
-CD
-dup
-/FontName
-3 index
-put
-dup
-/Encoding ourvec put
-1 index
-exch
-definefont
-pop
-}
-{exch pop}
-ifelse
-}
-{pop}
-ifelse
-}bdf
-/RFTC{
-dup
-FontDirectory exch
-known
-{pop 3 -1 roll pop}
-{RCTC}
-ifelse
-}bdf
-/FDFTC
-{
-dup
-hasfont
-not
-{
-pop
-/DFMing-Lt-HK-BF
-hasfont
-{
-/DFMing-Lt-HK-BF
-}
-{
-/Courier
-}
-ifelse
-}
-if
-}bdf
-/FFTC{
-_bfh
-dup
-256 string cvs
-(|______)exch MN
-cvn
-dup
-FontDirectory
-exch known
-{
-exch
-pop
-findfont
-3 -1 roll
-pop
-}
-{
-pop
-FDFTC
-dup findfont
-dup maxlength dict
-CD
-dup dup
-/Encoding exch
-/Encoding get
-256 array copy
-7 -1 roll
-{
-3 -1 roll
-dup
-4 -2 roll
-put
-}forall
-put
-definefont
-}
-ifelse
-_efh
-}bdf
-/fps{
-currentflat
-exch
-dup 0 le{pop 1}if
-{
-dup setflat 3 index stopped
-{1.3 mul dup 3 index gt{pop setflat pop pop stop}if}
-{exit}
-ifelse
-}loop
-pop setflat pop pop
-}bdf
-/fp{100 currentflat fps}bdf
-/clipper{clip}bdf
-/W{/clipper load 100 clipflatness dup setflat fps}bdf
-
-userdict begin /BDFontDict 29 dict def end
-BDFontDict begin
-/bu{}def
-/bn{}def
-/setTxMode{av 70 ge{pop}if pop}def
-/gm{m}def
-/show{pop}def
-/gr{pop}def
-/fnt{pop pop pop}def
-/fs{pop}def
-/fz{pop}def
-/lin{pop pop}def
-/:M {pop pop} def
-/sf {pop} def
-/S {pop} def
-/@b {pop pop pop pop pop pop pop pop} def
-/_bdsave /save load def
-/_bdrestore /restore load def
-/save { dup /fontsave eq {null} {_bdsave} ifelse } def
-/restore { dup null eq { pop } { _bdrestore } ifelse } def
-/fontsave null def
-end
-/MacVec 256 array def
-MacVec 0 /Helvetica findfont
-/Encoding get 0 128 getinterval putinterval
-MacVec 127 /DEL put MacVec 16#27 /quotesingle put MacVec 16#60 /grave put
-/NUL/SOH/STX/ETX/EOT/ENQ/ACK/BEL/BS/HT/LF/VT/FF/CR/SO/SI
-/DLE/DC1/DC2/DC3/DC4/NAK/SYN/ETB/CAN/EM/SUB/ESC/FS/GS/RS/US
-MacVec 0 32 getinterval astore pop
-/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute
-/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave
-/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute
-/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis
-/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
-/registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash
-/infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation
-/product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash
-/questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft
-/guillemotright/ellipsis/nbspace/Agrave/Atilde/Otilde/OE/oe
-/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge
-/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl
-/daggerdbl/periodcentered/quotesinglbase/quotedblbase
-/perthousand/Acircumflex/Ecircumflex/Aacute
-/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave/Oacute/Ocircumflex
-/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde
-/macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron
-MacVec 128 128 getinterval astore pop
-/findheaderfont {
-/Helvetica findfont
-} def
-end %. AltsysDict
-%%EndResource
-%%EndProlog
-
-%%BeginSetup
-
-AltsysDict begin
-_bfh
-
-_efh
-end %. AltsysDict
-
-%%EndSetup
-AltsysDict begin
-
-/onlyk4{false}ndf
-/ccmyk{dup 5 -1 roll sub 0 max exch}ndf
-/cmyk2gray{
-4 -1 roll 0.3 mul 4 -1 roll 0.59 mul 4 -1 roll 0.11 mul
-add add add 1 min neg 1 add
-}bdf
-/setcmykcolor{1 exch sub ccmyk ccmyk ccmyk pop setrgbcolor}ndf
-/maxcolor {
-max max max
-} ndf
-/maxspot {
-pop
-} ndf
-/setcmykcoloroverprint{4{dup -1 eq{pop 0}if 4 1 roll}repeat setcmykcolor}ndf
-/findcmykcustomcolor{5 packedarray}ndf
-/setcustomcolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndf
-/setseparationgray{setgray}ndf
-/setoverprint{pop}ndf
-/currentoverprint false ndf
-/cmykbufs2gray{
-0 1 2 index length 1 sub
-{
-4 index 1 index get 0.3 mul
-4 index 2 index get 0.59 mul
-4 index 3 index get 0.11 mul
-4 index 4 index get
-add add add cvi 255 min
-255 exch sub
-2 index 3 1 roll put
-}for
-4 1 roll pop pop pop
-}bdf
-/colorimage{
-pop pop
-[
-5 -1 roll/exec cvx
-6 -1 roll/exec cvx
-7 -1 roll/exec cvx
-8 -1 roll/exec cvx
-/cmykbufs2gray cvx
-]cvx
-image
-}
-%. version 47.1 on Linotronic of Postscript defines colorimage incorrectly (rgb model only)
-version cvr 47.1 le
-statusdict /product get (Lino) anchorsearch{pop pop true}{pop false}ifelse
-and{userdict begin bdf end}{ndf}ifelse
-fhnumcolors 1 ne {/yt save def} if
-/customcolorimage{
-aload pop
-(_vc_Registration) eq
-{
-pop pop pop pop separationimage
-}
-{
-/ik xdf /iy xdf /im xdf /ic xdf
-ic im iy ik cmyk2gray /xt xdf
-currenttransfer
-{dup 1.0 exch sub xt mul add}concatprocs
-st
-image
-}
-ifelse
-}ndf
-fhnumcolors 1 ne {yt restore} if
-fhnumcolors 3 ne {/yt save def} if
-/customcolorimage{
-aload pop
-(_vc_Registration) eq
-{
-pop pop pop pop separationimage
-}
-{
-/ik xdf /iy xdf /im xdf /ic xdf
-1.0 dup ic ik add min sub
-1.0 dup im ik add min sub
-1.0 dup iy ik add min sub
-/ic xdf /iy xdf /im xdf
-currentcolortransfer
-4 1 roll
-{dup 1.0 exch sub ic mul add}concatprocs 4 1 roll
-{dup 1.0 exch sub iy mul add}concatprocs 4 1 roll
-{dup 1.0 exch sub im mul add}concatprocs 4 1 roll
-setcolortransfer
-{/dummy xdf dummy}concatprocs{dummy}{dummy}true 3 colorimage
-}
-ifelse
-}ndf
-fhnumcolors 3 ne {yt restore} if
-fhnumcolors 4 ne {/yt save def} if
-/customcolorimage{
-aload pop
-(_vc_Registration) eq
-{
-pop pop pop pop separationimage
-}
-{
-/ik xdf /iy xdf /im xdf /ic xdf
-currentcolortransfer
-{1.0 exch sub ik mul ik sub 1 add}concatprocs 4 1 roll
-{1.0 exch sub iy mul iy sub 1 add}concatprocs 4 1 roll
-{1.0 exch sub im mul im sub 1 add}concatprocs 4 1 roll
-{1.0 exch sub ic mul ic sub 1 add}concatprocs 4 1 roll
-setcolortransfer
-{/dummy xdf dummy}concatprocs{dummy}{dummy}{dummy}
-true 4 colorimage
-}
-ifelse
-}ndf
-fhnumcolors 4 ne {yt restore} if
-/separationimage{image}ndf
-/spotascmyk false ndf
-/newcmykcustomcolor{6 packedarray}ndf
-/inkoverprint false ndf
-/setinkoverprint{pop}ndf
-/setspotcolor {
-spots exch get
-dup 4 get (_vc_Registration) eq
-{pop 1 exch sub setseparationgray}
-{0 5 getinterval exch setcustomcolor}
-ifelse
-}ndf
-/currentcolortransfer{currenttransfer dup dup dup}ndf
-/setcolortransfer{st pop pop pop}ndf
-/fas{}ndf
-/sas{}ndf
-/fhsetspreadsize{pop}ndf
-/filler{fill}bdf
-/F{gsave {filler}fp grestore}bdf
-/f{closepath F}bdf
-/S{gsave {stroke}fp grestore}bdf
-/s{closepath S}bdf
-userdict /islevel2
-systemdict /languagelevel known dup
-{
-pop systemdict /languagelevel get 2 ge
-} if
-put
-islevel2 not
-{
-/currentcmykcolor
-{
-0 0 0 1 currentgray sub
-} ndf
-} if
-/tc
-{
-gsave
-setcmykcolor currentcmykcolor
-grestore
-} bind def
-/testCMYKColorThrough
-{
-tc add add add 0 ne
-} bind def
-/fhiscomposite where not {
-userdict /fhiscomposite
-islevel2
-{
-gsave 1 1 1 1 setcmykcolor currentcmykcolor grestore
-add add add 4 eq
-}
-{
-1 0 0 0 testCMYKColorThrough
-0 1 0 0 testCMYKColorThrough
-0 0 1 0 testCMYKColorThrough
-0 0 0 1 testCMYKColorThrough
-and and and
-} ifelse
-put
-}
-{ pop }
-ifelse
-/bc4 [0 0 0 0] def
-/_lfp4 {
-1 pop
-/yt xdf
-/xt xdf
-/ang xdf
-storerect
-/taperfcn xdf
-/k2 xdf /y2 xdf /m2 xdf /c2 xdf
-/k1 xdf /y1 xdf /m1 xdf /c1 xdf
-c1 c2 sub abs
-m1 m2 sub abs
-y1 y2 sub abs
-k1 k2 sub abs
-maxcolor
-calcgraysteps mul abs round
-height abs adjnumsteps
-dup 1 lt {pop 1} if
-1 sub /numsteps1 xdf
-currentflat mark
-currentflat clipflatness
-/delta top bottom sub numsteps1 1 add div def
-/right right left sub def
-/botsv top delta sub def
-{
-{
-W
-xt yt translate
-ang rotate
-xt neg yt neg translate
-dup setflat
-/bottom botsv def
-0 1 numsteps1
-{
-numsteps1 dup 0 eq {pop pop 0.5} {div} ifelse
-taperfcn /frac xdf
-bc4 0 c2 c1 sub frac mul c1 add put
-bc4 1 m2 m1 sub frac mul m1 add put
-bc4 2 y2 y1 sub frac mul y1 add put
-bc4 3 k2 k1 sub frac mul k1 add put
-bc4 vc
-1 index setflat
-{
-mark {newpath left bottom right delta rectfill}stopped
-{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if}
-{cleartomark exit}ifelse
-}loop
-/bottom bottom delta sub def
-}for
-}
-gsave stopped grestore
-{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if}
-{exit}ifelse
-}loop
-cleartomark setflat
-}bdf
-/bcs [0 0] def
-/_lfs4 {
-/yt xdf
-/xt xdf
-/ang xdf
-storerect
-/taperfcn xdf
-/tint2 xdf
-/tint1 xdf
-bcs exch 1 exch put
-tint1 tint2 sub abs
-bcs 1 get maxspot
-calcgraysteps mul abs round
-height abs adjnumsteps
-dup 2 lt {pop 2} if
-1 sub /numsteps1 xdf
-currentflat mark
-currentflat clipflatness
-/delta top bottom sub numsteps1 1 add div def
-/right right left sub def
-/botsv top delta sub def
-{
-{
-W
-xt yt translate
-ang rotate
-xt neg yt neg translate
-dup setflat
-/bottom botsv def
-0 1 numsteps1
-{
-numsteps1 div taperfcn /frac xdf
-bcs 0
-1.0 tint2 tint1 sub frac mul tint1 add sub
-put bcs vc
-1 index setflat
-{
-mark {newpath left bottom right delta rectfill}stopped
-{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if}
-{cleartomark exit}ifelse
-}loop
-/bottom bottom delta sub def
-}for
-}
-gsave stopped grestore
-{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if}
-{exit}ifelse
-}loop
-cleartomark setflat
-}bdf
-/_rfs6 {
-/tint2 xdf
-/tint1 xdf
-bcs exch 1 exch put
-/inrad xdf
-/radius xdf
-/yt xdf
-/xt xdf
-tint1 tint2 sub abs
-bcs 1 get maxspot
-calcgraysteps mul abs round
-radius inrad sub abs
-adjnumsteps
-dup 1 lt {pop 1} if
-1 sub /numsteps1 xdf
-radius inrad sub numsteps1 dup 0 eq {pop} {div} ifelse
-2 div /halfstep xdf
-currentflat mark
-currentflat clipflatness
-{
-{
-dup setflat
-W
-0 1 numsteps1
-{
-dup /radindex xdf
-numsteps1 dup 0 eq {pop pop 0.5} {div} ifelse
-/frac xdf
-bcs 0
-tint2 tint1 sub frac mul tint1 add
-put bcs vc
-1 index setflat
-{
-newpath mark
-xt yt radius inrad sub 1 frac sub mul halfstep add inrad add 0 360
-{ arc
-radindex numsteps1 ne
-inrad 0 gt or
-{
-xt yt
-numsteps1 0 eq
-{ inrad }
-{
-radindex 1 add numsteps1 div 1 exch sub
-radius inrad sub mul halfstep add inrad add
-}ifelse
-dup xt add yt moveto
-360 0 arcn
-} if
-fill
-}stopped
-{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if}
-{cleartomark exit}ifelse
-}loop
-}for
-}
-gsave stopped grestore
-{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if}
-{exit}ifelse
-}loop
-cleartomark setflat
-}bdf
-/_rfp6 {
-1 pop
-/k2 xdf /y2 xdf /m2 xdf /c2 xdf
-/k1 xdf /y1 xdf /m1 xdf /c1 xdf
-/inrad xdf
-/radius xdf
-/yt xdf
-/xt xdf
-c1 c2 sub abs
-m1 m2 sub abs
-y1 y2 sub abs
-k1 k2 sub abs
-maxcolor
-calcgraysteps mul abs round
-radius inrad sub abs
-adjnumsteps
-dup 1 lt {pop 1} if
-1 sub /numsteps1 xdf
-radius inrad sub numsteps1 dup 0 eq {pop} {div} ifelse
-2 div /halfstep xdf
-currentflat mark
-currentflat clipflatness
-{
-{
-dup setflat
-W
-0 1 numsteps1
-{
-dup /radindex xdf
-numsteps1 dup 0 eq {pop pop 0.5} {div} ifelse
-/frac xdf
-bc4 0 c2 c1 sub frac mul c1 add put
-bc4 1 m2 m1 sub frac mul m1 add put
-bc4 2 y2 y1 sub frac mul y1 add put
-bc4 3 k2 k1 sub frac mul k1 add put
-bc4 vc
-1 index setflat
-{
-newpath mark
-xt yt radius inrad sub 1 frac sub mul halfstep add inrad add 0 360
-{ arc
-radindex numsteps1 ne
-inrad 0 gt or
-{
-xt yt
-numsteps1 0 eq
-{ inrad }
-{
-radindex 1 add numsteps1 div 1 exch sub
-radius inrad sub mul halfstep add inrad add
-}ifelse
-dup xt add yt moveto
-360 0 arcn
-} if
-fill
-}stopped
-{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if}
-{cleartomark exit}ifelse
-}loop
-}for
-}
-gsave stopped grestore
-{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if}
-{exit}ifelse
-}loop
-cleartomark setflat
-}bdf
-/lfp4{_lfp4}ndf
-/lfs4{_lfs4}ndf
-/rfs6{_rfs6}ndf
-/rfp6{_rfp6}ndf
-/cvc [0 0 0 1] def
-/vc{
-AltsysDict /cvc 2 index put
-aload length dup 4 eq
-{pop dup -1 eq{pop setrgbcolor}{setcmykcolor}ifelse}
-{6 eq {sethexcolor} {setspotcolor} ifelse }
-ifelse
-}bdf
-0 setseparationgray
-/imgr {1692.47 1570.59 1723.65 1601.77 } def
-/bleed 0 def
-/clpr {1692.47 1570.59 1723.65 1601.77 } def
-/xs 1 def
-/ys 1 def
-/botx 0 def
-/overlap 0 def
-/wdist 18 def
-0 2 mul fhsetspreadsize
-0 0 ne {/df 0 def /clipflatness 0 def} if
-/maxsteps 256 def
-/forcemaxsteps false def
-/minsteps 0 def
-
-userdict begin /AGDOrigMtx matrix currentmatrix def end
-vms
--1694 -1572 translate
-
-/currentpacking defed{false setpacking}if
-/spots[
-
-1 0 0 0 (Process Cyan) false newcmykcustomcolor
-
-0 1 0 0 (Process Magenta) false newcmykcustomcolor
-
-0 0 1 0 (Process Yellow) false newcmykcustomcolor
-
-0 0 0 1 (Process Black) false newcmykcustomcolor
-]def
-n
-[] 0 d
-3.863708 M
-1 w
-0 j
-0 J
-false setoverprint
-0 i
-false eomode
-[0 0 0 1]vc
-vms
-q
-[1 0 0 1 -249.981674 -586.867554] concat
-vms
-1946.9506 2177.5114 m
-1954.4907 2185.0516 L
-1956.7047 2187.2656 1960.2943 2187.2656 1962.5083 2185.0516 C
-1970.0485 2177.5114 L
-1972.2625 2175.2974 1972.2625 2171.7078 1970.0485 2169.4938 C
-1962.5083 2161.9537 L
-1960.2943 2159.7396 1956.7047 2159.7396 1954.4907 2161.9537 C
-1946.9506 2169.4938 L
-1944.7365 2171.7078 1944.7365 2175.2974 1946.9506 2177.5114 C
-s
-n
-true eomode
-1958.5469 2181.0039 m
-1959.2148 2181.0039 1959.7012 2180.9296 1960.0059 2180.7813 C
-1960.3142 2180.6326 1960.4684 2180.363 1960.4688 2179.9727 C
-1960.4688 2179.7383 1960.3398 2178.8026 1960.082 2177.166 C
-1959.0742 2170.4219 L
-1958.9373 2170.3241 1958.7615 2170.2754 1958.5469 2170.2754 C
-1958.3319 2170.2754 1958.1561 2170.3241 1958.0195 2170.4219 C
-1957.0117 2177.166 L
-1956.7539 2178.8026 1956.625 2179.7379 1956.625 2179.9727 C
-1956.625 2180.363 1956.7792 2180.6326 1957.0879 2180.7813 C
-1957.4003 2180.9296 1957.8866 2181.0035 1958.5469 2181.0039 C
-h
-1958.5469 2165.166 m
-1958.0389 2165.166 1957.5878 2165.3499 1957.1934 2165.7168 C
-1956.7986 2166.0837 1956.6016 2166.5485 1956.6016 2167.1113 C
-1956.6016 2167.6698 1956.7891 2168.1404 1957.1641 2168.5234 C
-1957.5427 2168.9102 1958.0038 2169.1035 1958.5469 2169.1035 C
-1959.1094 2169.1035 1959.5741 2168.9043 1959.9414 2168.5059 C
-1960.3083 2168.1074 1960.4918 2167.6423 1960.4922 2167.1113 C
-1960.4922 2166.748 1960.4102 2166.4177 1960.2461 2166.1211 C
-1960.082 2165.8241 1959.8513 2165.5916 1959.5547 2165.4238 C
-1959.2577 2165.2521 1958.9219 2165.1664 1958.5469 2165.166 C
-true setoverprint
-f
-false setoverprint
-n
-vmr
-Q
-false eomode
-vmr
-vmr
-end
-%%Trailer
diff --git a/doc/xsl/graphics/warning.pdf b/doc/xsl/graphics/warning.pdf
deleted file mode 100644
index bc548d52..00000000
--- a/doc/xsl/graphics/warning.pdf
+++ /dev/null
Binary files differ
diff --git a/doc/xsl/isc-docbook-chunk.xsl.in b/doc/xsl/isc-docbook-chunk.xsl.in
deleted file mode 100644
index bcde58ea..00000000
--- a/doc/xsl/isc-docbook-chunk.xsl.in
+++ /dev/null
@@ -1,69 +0,0 @@
-<!--
- - Copyright (C) 2005, 2007, 2014-2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
-<!-- ISC customizations for Docbook-XSL chunked HTML generator -->
-
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:db="http://docbook.org/ns/docbook">
-
- <!-- Import the Docbook HTML stuff -->
- <xsl:import href="@XSLT_DOCBOOK_CHUNK_HTML@"/>
-
- <!-- Readable HTML output, please -->
- <xsl:output indent="yes"/>
- <xsl:param name="chunker.output.indent" select="'yes'"/>
-
- <!-- Chunk at section level, please -->
- <xsl:param name="chunk.section.depth" select="0"/>
-
- <!-- Generate chunk filenames from id attribute values -->
- <xsl:param name="use.id.as.filename" select="1"/>
-
- <!-- ANSI C function prototypes, please -->
- <xsl:param name="funcsynopsis.style">ansi</xsl:param>
-
- <!-- Use ranges when constructing copyrights -->
- <xsl:param name="make.year.ranges" select="1"/>
-
- <!-- Include our copyright generator -->
- <xsl:include href="copyright.xsl"/>
-
- <!-- Set comment convention for this output format -->
- <xsl:param name="isc.copyright.leader"> - </xsl:param>
- <xsl:param name="isc.copyright.breakline"/>
-
- <!-- Generate consistent id attributes -->
- <xsl:param name="generate.consistent.ids" select="1"/>
-
- <!-- Override Docbook template to insert DOCTYPE and copyright -->
- <xsl:template name="user.preroot">
- <xsl:text disable-output-escaping="yes">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;</xsl:text>
- <xsl:text>&#10;</xsl:text>
- <xsl:comment>
- <xsl:text>&#10;</xsl:text>
- <xsl:value-of select="$isc.copyright"/>
- </xsl:comment>
- <xsl:text>&#10;</xsl:text>
- </xsl:template>
-
- <xsl:template name="root.attributes">
- <xsl:attribute name="lang">en</xsl:attribute>
- </xsl:template>
-
- <xsl:template name="user.footer.navigation">
- <p style="text-align: center;">@BIND9_VERSIONSTRING@</p>
- </xsl:template>
-
-</xsl:stylesheet>
-
-<!--
- - Local variables:
- - mode: sgml
- - End:
- -->
diff --git a/doc/xsl/isc-docbook-html.xsl.in b/doc/xsl/isc-docbook-html.xsl.in
deleted file mode 100644
index 908657ab..00000000
--- a/doc/xsl/isc-docbook-html.xsl.in
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
- - Copyright (C) 2005, 2007, 2014-2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
-<!-- ISC customizations for Docbook-XSL HTML generator -->
-
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:db="http://docbook.org/ns/docbook">
-
- <!-- Import the Docbook HTML stuff -->
- <xsl:import href="@XSLT_DOCBOOK_STYLE_HTML@"/>
-
- <!-- Readable HTML output, please -->
- <xsl:output indent="yes"/>
-
- <!-- ANSI C function prototypes, please -->
- <xsl:param name="funcsynopsis.style">ansi</xsl:param>
-
- <!-- Use ranges when constructing copyrights -->
- <xsl:param name="make.year.ranges" select="1"/>
-
- <!-- Include our copyright generator -->
- <xsl:include href="copyright.xsl"/>
-
- <!-- Set comment convention for this output format -->
- <xsl:param name="isc.copyright.leader"> - </xsl:param>
- <xsl:param name="isc.copyright.breakline"/>
-
- <!-- Generate consistent id attributes -->
- <xsl:param name="generate.consistent.ids" select="1"/>
-
- <!-- Override Docbook template to insert DOCTYPE and copyright -->
- <xsl:template name="user.preroot">
- <xsl:text disable-output-escaping="yes">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;</xsl:text>
- <xsl:text>&#10;</xsl:text>
- <xsl:comment>
- <xsl:text>&#10;</xsl:text>
- <xsl:value-of select="$isc.copyright"/>
- </xsl:comment>
- <xsl:text>&#10;</xsl:text>
- </xsl:template>
-
- <xsl:template name="root.attributes">
- <xsl:attribute name="lang">en</xsl:attribute>
- </xsl:template>
-
- <xsl:template name="user.footer.navigation">
- <p style="text-align: center;">@BIND9_VERSIONSTRING@</p>
- </xsl:template>
-
-</xsl:stylesheet>
-
-<!--
- - Local variables:
- - mode: sgml
- - End:
- -->
diff --git a/doc/xsl/isc-docbook-text.xsl b/doc/xsl/isc-docbook-text.xsl
deleted file mode 100644
index 61688198..00000000
--- a/doc/xsl/isc-docbook-text.xsl
+++ /dev/null
@@ -1,42 +0,0 @@
-<!--
- - Copyright (C) 2005, 2007, 2015, 2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
-<!-- $Id$ -->
-
-<!-- Tweaks to Docbook-XSL HTML for producing flat ASCII text. -->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
- xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">
-
- <!-- Import our Docbook HTML stuff -->
- <xsl:import href="isc-docbook-html.xsl"/>
-
- <!-- Disable tables of contents (for now - tweak as needed) -->
- <xsl:param name="generate.toc"/>
-
- <!-- Voodoo to read i18n/l10n overrides directly from this stylesheet -->
- <xsl:param name="local.l10n.xml" select="document('')"/>
-
- <!-- Customize Docbook-XSL i18n/l10n mappings. -->
- <l:i18n>
- <l:l10n language="en" english-language-name="English">
-
- <!-- Please use plain old ASCII quotes -->
- <l:dingbat key="startquote" text='&quot;'/>
- <l:dingbat key="endquote" text='&quot;'/>
-
- </l:l10n>
- </l:i18n>
-
-</xsl:stylesheet>
-
-<!--
- - Local variables:
- - mode: sgml
- - End:
- -->
diff --git a/doc/xsl/isc-manpage.xsl.in b/doc/xsl/isc-manpage.xsl.in
deleted file mode 100644
index 2ab531c5..00000000
--- a/doc/xsl/isc-manpage.xsl.in
+++ /dev/null
@@ -1,138 +0,0 @@
-<!--
- - Copyright (C) 2005, 2007, 2015, 2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
-<!-- $Id$ -->
-
-<!-- ISC customizations for Docbook-XSL manual page generator. -->
-
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:db="http://docbook.org/ns/docbook">
-
- <!-- Import the Docbook manpages stuff -->
- <xsl:include href="@XSLT_DOCBOOK_STYLE_MAN@"/>
-
- <!-- Include our copyright generator -->
- <xsl:include href="copyright.xsl"/>
-
- <!-- Set comment string for this output format -->
- <xsl:param name="isc.copyright.leader">.\" </xsl:param>
- <xsl:param name="isc.copyright.breakline"/>
-
- <!-- We're not writing any kind of SGML, thanks -->
- <xsl:output method="text" encoding="us-ascii" indent="no"/>
-
- <!-- ANSI C function prototypes, please -->
- <xsl:param name="funcsynopsis.style">ansi</xsl:param>
-
- <!-- Use ranges when constructing copyrights -->
- <xsl:param name="make.year.ranges" select="1"/>
-
- <!-- Stuff we want in our nroff preamble. -->
- <xsl:variable name="isc.nroff.preamble">
- <xsl:text>.\"&#10;</xsl:text>
- <xsl:text>.hy 0&#10;</xsl:text>
- <xsl:text>.ad l&#10;</xsl:text>
- </xsl:variable>
-
- <!--
- - Override Docbook template to insert our copyright,
- - disable chunking, and suppress output of .so files.
- -->
- <xsl:template name="write.text.chunk">
- <xsl:param name="content"/>
- <xsl:if test="substring($content, 1, 4) != '.so ' or
- substring-after($content, '&#10;') != ''">
- <xsl:call-template name="isc.no.blanks">
- <xsl:with-param name="text" select="
- concat($isc.copyright,
- $isc.nroff.preamble,
- $content)"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:template>
-
- <!--
- - Suppress blank lines in nroff source we output.
- -->
- <xsl:template name="isc.no.blanks">
- <xsl:param name="text"/>
- <xsl:choose>
- <xsl:when test="contains($text, '&#10;')">
- <xsl:call-template name="isc.no.blanks">
- <xsl:with-param name="text"
- select="substring-before($text, '&#10;')"/>
- </xsl:call-template>
- <xsl:call-template name="isc.no.blanks">
- <xsl:with-param name="text"
- select="substring-after($text, '&#10;')"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:when test="translate($text, '&#9;&#32;', '')">
- <xsl:value-of select="$text"/>
- <xsl:text>&#10;</xsl:text>
- </xsl:when>
- </xsl:choose>
- </xsl:template>
-
- <!--
- - Override Docbook template to change formatting.
- - We just want the element name in boldface, no subsection header.
- -->
- <xsl:template match="caution|important|note|tip|warning">
- <xsl:text>&#10;.RS&#10;.B "</xsl:text>
- <!-- capitalize word -->
- <xsl:value-of
- select="translate (substring (name(.), 1, 1), 'cintw', 'CINTW')" />
- <xsl:value-of select="substring (name(), 2)" />
- <xsl:if test="title">
- <xsl:text>: </xsl:text>
- <xsl:value-of select="title[1]"/>
- </xsl:if>
- <xsl:text>:"&#10;</xsl:text>
- <xsl:apply-templates/>
- <xsl:text>&#10;.RE&#10;</xsl:text>
- </xsl:template>
-
- <!--
- - Override template to change formatting.
- - We don't want hyphenation or justification.
- -->
- <xsl:template match="cmdsynopsis">
- <xsl:text>.HP </xsl:text>
- <xsl:value-of select="string-length (normalize-space (command)) + 1"/>
- <xsl:text>&#10;</xsl:text>
- <xsl:apply-templates/>
- <xsl:text>&#10;</xsl:text>
- </xsl:template>
-
- <!--
- - Override template to change formatting.
- - We don't want hyphenation or justification.
- -->
- <xsl:template match="funcsynopsis">
- <xsl:apply-templates/>
- </xsl:template>
-
- <!--
- - Override template to change formatting.
- - Line breaks in funcsynopsisinfo are significant.
- -->
- <xsl:template match="funcsynopsisinfo">
- <xsl:text>&#10;.nf&#10;</xsl:text>
- <xsl:apply-templates/>
- <xsl:text>&#10;.fi&#10;</xsl:text>
- </xsl:template>
-
-</xsl:stylesheet>
-
-<!--
- - Local variables:
- - mode: sgml
- - End:
- -->
diff --git a/doc/xsl/isc-notes-html.xsl.in b/doc/xsl/isc-notes-html.xsl.in
deleted file mode 100644
index ec37e336..00000000
--- a/doc/xsl/isc-notes-html.xsl.in
+++ /dev/null
@@ -1,61 +0,0 @@
-<!--
- - Copyright (C) 2015, 2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
-<!-- ISC customizations for Docbook-XSL HTML generator -->
-
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:db="http://docbook.org/ns/docbook">
-
- <!-- Import the Docbook HTML stuff -->
- <xsl:import href="@XSLT_DOCBOOK_STYLE_HTML@"/>
-
- <!-- Readable HTML output, please -->
- <xsl:output indent="yes"/>
-
- <!-- ANSI C function prototypes, please -->
- <xsl:param name="funcsynopsis.style">ansi</xsl:param>
-
- <!-- Use ranges when constructing copyrights -->
- <xsl:param name="make.year.ranges" select="1"/>
-
- <!-- Include our copyright generator -->
- <xsl:include href="copyright.xsl"/>
-
- <!-- Set comment convention for this output format -->
- <xsl:param name="isc.copyright.leader"> - </xsl:param>
- <xsl:param name="isc.copyright.breakline"/>
-
- <!-- Generate consistent id attributes -->
- <xsl:param name="generate.consistent.ids" select="1"/>
-
- <!-- Override Docbook template to insert copyright -->
- <xsl:template name="user.preroot">
- <xsl:comment>
- <xsl:text>&#10;</xsl:text>
- <xsl:value-of select="$isc.copyright"/>
- </xsl:comment>
- <xsl:text>&#10;</xsl:text>
- <xsl:comment> &#36;Id&#36; </xsl:comment>
- <xsl:text>&#10;</xsl:text>
- </xsl:template>
-
- <!-- Omit title page -->
- <xsl:template name="article.titlepage"/>
-
- <xsl:template name="user.footer.navigation">
- <p style="text-align: center;">@BIND9_VERSIONSTRING@</p>
- </xsl:template>
-
-</xsl:stylesheet>
-
-<!--
- - Local variables:
- - mode: sgml
- - End:
- -->
diff --git a/doc/xsl/notes-param.xsl b/doc/xsl/notes-param.xsl
deleted file mode 100644
index fa726bbd..00000000
--- a/doc/xsl/notes-param.xsl
+++ /dev/null
@@ -1,20 +0,0 @@
-<!--
- - Copyright (C) 2015, 2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
-<!-- ISC customizations for dblatex generator -->
-
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:db="http://docbook.org/ns/docbook">
-</xsl:stylesheet>
-
-<!--
- - Local variables:
- - mode: sgml
- - End:
- -->
diff --git a/doc/xsl/pre-latex.xsl b/doc/xsl/pre-latex.xsl
deleted file mode 100644
index 32148d9d..00000000
--- a/doc/xsl/pre-latex.xsl
+++ /dev/null
@@ -1,49 +0,0 @@
-<!--
- - Copyright (C) 2005, 2007, 2015, 2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
-
-<!-- $Id: pre-latex.xsl,v 1.6 2007/06/19 23:47:13 tbox Exp $ -->
-
-<!--
- - Whack &mdash; into something that won't choke LaTeX.
- - There's probably a better way to do this, but this will work for now.
- -->
-
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:db="http://docbook.org/ns/docbook">
-
- <xsl:variable name="mdash" select="'&#8212;'"/>
-
- <xsl:template name="fix-mdash" match="text()[contains(., '&#8212;')]">
- <xsl:param name="s" select="."/>
- <xsl:choose>
- <xsl:when test="contains($s, $mdash)">
- <xsl:value-of select="substring-before($s, $mdash)"/>
- <xsl:text>---</xsl:text>
- <xsl:call-template name="fix-mdash">
- <xsl:with-param name="s" select="substring-after($s, $mdash)"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$s"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <xsl:template match="@*|node()">
- <xsl:copy>
- <xsl:copy-of select="@*"/>
- <xsl:apply-templates/>
- </xsl:copy>
- </xsl:template>
-
- <xsl:template match="/">
- <xsl:apply-templates/>
- </xsl:template>
-
-</xsl:stylesheet>
diff --git a/docutil/HTML_COPYRIGHT b/docutil/HTML_COPYRIGHT
deleted file mode 100644
index 82c7e911..00000000
--- a/docutil/HTML_COPYRIGHT
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
- - Copyright (C) 1996-2016 Internet Systems Consortium, Inc. ("ISC")
- -
- - This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/.
--->
diff --git a/docutil/MAN_COPYRIGHT b/docutil/MAN_COPYRIGHT
deleted file mode 100644
index b00f6c30..00000000
--- a/docutil/MAN_COPYRIGHT
+++ /dev/null
@@ -1,7 +0,0 @@
-.\"
-.\" Copyright (C) 1996-2016 Internet Systems Consortium, Inc. ("ISC")
-.\"
-.\" This Source Code Form is subject to the terms of the Mozilla Public
-.\" License, v. 2.0. If a copy of the MPL was not distributed with this
-.\" file, You can obtain one at http://mozilla.org/MPL/2.0/.
-.\"
diff --git a/docutil/patch-db2latex-duplicate-template-bug b/docutil/patch-db2latex-duplicate-template-bug
deleted file mode 100644
index 75100e18..00000000
--- a/docutil/patch-db2latex-duplicate-template-bug
+++ /dev/null
@@ -1,77 +0,0 @@
-;; $Id: patch-db2latex-duplicate-template-bug,v 1.2 2007/01/12 22:24:20 sra Exp $
-;;
-;; This is a patch to work around a known bug in db2latex. Apparently
-;; xsltproc's error checking got a lot better since the authors of
-;; db2latex last tested this, so a clear language violation that
-;; xsltproc used to ignore now prevents xsltproc from working with
-;; db2latex.
-;;
-;; On FreeBSD you can simply drop this patch into the directory
-;; /usr/ports/textproc/db2latex/files/ and the ports system should
-;; take it from there. I've sent this patch off to the port
-;; maintainer but have not yet heard anything back.
-;;
-;; I don't really know whther this is the "right" fix, but it seems to
-;; work, and I'm pretty sure that the code this patch deletes does not
-;; work as it stands, so at worst the result after applying this patch
-;; should be no worse than the result without this patch.
-;;
-;; YMMV. If this patch breaks, you get to keep both pieces.
-
-Index: xsl/qandaset.mod.xsl
---- xsl/qandaset.mod.xsl.~1~ Sun Jan 4 08:22:27 2004
-+++ xsl/qandaset.mod.xsl Fri Apr 1 22:30:20 2005
-@@ -363,53 +363,4 @@
- </doc:template>
- <xsl:template match="revhistory" mode="qandatoc.mode"/>
-
--<xsl:template name="question.answer.label">
-- <!-- variable: deflabel -->
-- <xsl:variable name="deflabel">
-- <!-- chck whether someone has a defaultlabel attribute -->
-- <xsl:choose>
-- <xsl:when test="ancestor-or-self::*[@defaultlabel]">
-- <xsl:value-of select="(ancestor-or-self::*[@defaultlabel])[last()]/@defaultlabel"/>
-- </xsl:when>
-- <xsl:otherwise>
-- <xsl:value-of select="latex.qanda.defaultlabel"/>
-- </xsl:otherwise>
-- </xsl:choose>
-- </xsl:variable>
--
-- <xsl:variable name="label" select="@label"/>
-- <xsl:choose>
-- <xsl:when test="$deflabel = 'qanda'">
-- <xsl:call-template name="gentext">
-- <xsl:with-param name="key">
-- <xsl:choose>
-- <xsl:when test="local-name(.) = 'question'">question</xsl:when>
-- <xsl:when test="local-name(.) = 'answer'">answer</xsl:when>
-- <xsl:when test="local-name(.) = 'qandadiv'">qandadiv</xsl:when>
-- <xsl:otherwise>qandaset</xsl:otherwise>
-- </xsl:choose>
-- </xsl:with-param>
-- </xsl:call-template>
-- </xsl:when>
-- <xsl:when test="$deflabel = 'label'">
-- <xsl:value-of select="$label"/>
-- </xsl:when>
-- <xsl:when test="$deflabel = 'number' and local-name(.) = 'question'">
-- <xsl:apply-templates select="ancestor::qandaset[1]" mode="number"/>
-- <xsl:choose>
-- <xsl:when test="ancestor::qandadiv">
-- <xsl:apply-templates select="ancestor::qandadiv[1]" mode="number"/>
-- <xsl:apply-templates select="ancestor::qandaentry" mode="number"/>
-- </xsl:when>
-- <xsl:otherwise>
-- <xsl:apply-templates select="ancestor::qandaentry" mode="number"/>
-- </xsl:otherwise>
-- </xsl:choose>
-- </xsl:when>
-- <xsl:otherwise>
-- <!-- nothing -->
-- </xsl:otherwise>
-- </xsl:choose>
--</xsl:template>
--
- </xsl:stylesheet>
diff --git a/docutil/patch-db2latex-nested-param-bug b/docutil/patch-db2latex-nested-param-bug
deleted file mode 100644
index d73f19be..00000000
--- a/docutil/patch-db2latex-nested-param-bug
+++ /dev/null
@@ -1,18 +0,0 @@
-;; $Id: patch-db2latex-nested-param-bug,v 1.1 2007/02/06 20:58:13 sra Exp $
-;;
-;; Latest version of xsltproc doesn't like <xsl:param><xsl:param/></xsl:param>.
-
---- xsl/lists.mod.xsl.~1~ Sat Jan 31 06:53:50 2004
-+++ xsl/lists.mod.xsl Tue Feb 6 15:41:12 2007
-@@ -269,10 +269,8 @@
- </doc:notes>
- </doc:template>
- <xsl:template match="varlistentry">
-- <xsl:param name="next.is.list">
- <xsl:param name="object" select="listitem/*[1]"/>
-- <xsl:value-of select="count($object[self::itemizedlist or self::orderedlist or self::variablelist])"/>
-- </xsl:param>
-+ <xsl:param name="next.is.list" select="count($object[self::itemizedlist or self::orderedlist or self::variablelist])"/>
- <xsl:variable name="id">
- <xsl:call-template name="label.id"/>
- </xsl:variable>
diff --git a/docutil/patch-db2latex-xsltproc-title-bug b/docutil/patch-db2latex-xsltproc-title-bug
deleted file mode 100644
index 88d6c24c..00000000
--- a/docutil/patch-db2latex-xsltproc-title-bug
+++ /dev/null
@@ -1,29 +0,0 @@
-;; $Id: patch-db2latex-xsltproc-title-bug,v 1.2 2007/01/12 22:24:20 sra Exp $
-;;
-;; This patches around a problem that I don't completely understand,
-;; and which may in fact be an xsltproc bug rather than a db2latex
-;; bug. Symptom is that the generated \title{} contains not only the
-;; book title but also the concatenation of all the chapter titles.
-;; This makes no sense, it doesn't happen with saxon, it doesn't
-;; happen with all versions of xsltproc, and attempts to trace this
-;; with --verbose and <xsl:message/> leave me more wondering whether
-;; it's me or xsltproc that doesn't understand the XSLT pattern
-;; matching rules.
-;;
-;; All that said, the change below prevents the bad behavior and
-;; should be completely harmless, so it will do as a workaround.
-
-Index: xsl/book-article.mod.xsl
---- xsl/book-article.mod.xsl.~1~ Tue May 3 21:51:18 2005
-+++ xsl/book-article.mod.xsl Sat May 7 09:00:26 2005
-@@ -87,8 +87,8 @@
- <xsl:call-template name="generate.latex.book.preamble"/>
- <!-- book:2: output title information -->
- <xsl:text>\title{</xsl:text>
-- <xsl:apply-templates select="title|bookinfo/title"/>
-- <xsl:apply-templates select="subtitle|bookinfo/subtitle"/>
-+ <xsl:apply-templates select="/book/title|/book/bookinfo/title"/>
-+ <xsl:apply-templates select="/book/subtitle|/book/bookinfo/subtitle"/>
- <xsl:text>}&#10;</xsl:text>
- <!-- book:3: output author information -->
- <xsl:text>\author{</xsl:text>
diff --git a/packaging/bind.spec b/packaging/bind.spec
index 4b0820ff..8950db43 100644
--- a/packaging/bind.spec
+++ b/packaging/bind.spec
@@ -74,7 +74,7 @@ cp %{_sysconfdir}/localtime etc
touch %{install_path}/managed-keys.bind
cp %{_libdir}/engines/libgost.so usr/lib/engines
[ $(uname -m) = arm64 ] && ln -sv lib usr/lib64
-#/usr/sbin/setcap cap_sys_chroot,cap_dac_override,cap_fowner,cap_net_bind_service,cap_net_admin+eip /usr/sbin/named
+/usr/sbin/setcap cap_sys_chroot,cap_fowner,cap_net_bind_service,cap_net_admin+eip /usr/sbin/named
%{_sbindir}/rndc-confgen -r /dev/urandom -b 512 > %{_sysconfdir}/rndc.conf
sed '/conf/d;/^#/!d;s:^# ::' %{_sysconfdir}/rndc.conf > %{install_path}/etc/named.conf.rndc