summaryrefslogtreecommitdiffstats
path: root/contrib/bind
diff options
context:
space:
mode:
authordougb <dougb@FreeBSD.org>2003-06-17 08:25:13 +0000
committerdougb <dougb@FreeBSD.org>2003-06-17 08:25:13 +0000
commitf97237131f327c9eda67f546f7acffceef5a9fde (patch)
tree04f9050731919faa97a44a524d6a4129aea8e98d /contrib/bind
parent02f065cde2cf18b6e76deab6f48d7aeb327bd639 (diff)
downloadFreeBSD-src-f97237131f327c9eda67f546f7acffceef5a9fde.zip
FreeBSD-src-f97237131f327c9eda67f546f7acffceef5a9fde.tar.gz
Import of ISC BIND version 8.3.6.
Version 8.3.5 was skipped due to bugs fixed in this version.
Diffstat (limited to 'contrib/bind')
-rw-r--r--contrib/bind/CHANGES784
-rw-r--r--contrib/bind/README6
-rw-r--r--contrib/bind/Version2
-rw-r--r--contrib/bind/bin/dig/dig.c108
-rw-r--r--contrib/bind/bin/dnsquery/dnsquery.c4
-rw-r--r--contrib/bind/bin/host/host.c52
-rw-r--r--contrib/bind/bin/named-xfer/named-xfer.c85
-rw-r--r--contrib/bind/bin/named/db_defs.h2
-rw-r--r--contrib/bind/bin/named/db_ixfr.c7
-rw-r--r--contrib/bind/bin/named/db_load.c14
-rw-r--r--contrib/bind/bin/named/db_sec.c2
-rw-r--r--contrib/bind/bin/named/ns_config.c8
-rw-r--r--contrib/bind/bin/named/ns_ctl.c4
-rw-r--r--contrib/bind/bin/named/ns_defs.h7
-rw-r--r--contrib/bind/bin/named/ns_forw.c57
-rw-r--r--contrib/bind/bin/named/ns_func.h14
-rw-r--r--contrib/bind/bin/named/ns_glob.h3
-rw-r--r--contrib/bind/bin/named/ns_init.c27
-rw-r--r--contrib/bind/bin/named/ns_ixfr.c24
-rw-r--r--contrib/bind/bin/named/ns_lexer.c3
-rw-r--r--contrib/bind/bin/named/ns_main.c93
-rw-r--r--contrib/bind/bin/named/ns_maint.c111
-rw-r--r--contrib/bind/bin/named/ns_ncache.c2
-rw-r--r--contrib/bind/bin/named/ns_parser.y20
-rw-r--r--contrib/bind/bin/named/ns_req.c73
-rw-r--r--contrib/bind/bin/named/ns_resp.c121
-rw-r--r--contrib/bind/bin/named/ns_update.c8
-rw-r--r--contrib/bind/bin/ndc/ndc.c13
-rw-r--r--contrib/bind/bin/nslookup/getinfo.c33
-rw-r--r--contrib/bind/bin/nslookup/main.c4
-rw-r--r--contrib/bind/bin/nslookup/send.c4
-rw-r--r--contrib/bind/bin/nsupdate/nsupdate.c13
-rw-r--r--contrib/bind/doc/html/options.html13
-rw-r--r--contrib/bind/doc/man/dig.16
-rw-r--r--contrib/bind/doc/man/named-xfer.829
-rw-r--r--contrib/bind/doc/man/named.82
-rw-r--r--contrib/bind/doc/man/named.conf.519
-rw-r--r--contrib/bind/doc/man/resolver.349
-rw-r--r--contrib/bind/include/arpa/nameser.h8
-rw-r--r--contrib/bind/include/arpa/nameser_compat.h3
-rw-r--r--contrib/bind/include/hesiod.h18
-rw-r--r--contrib/bind/include/irp.h28
-rw-r--r--contrib/bind/include/irs.h195
-rw-r--r--contrib/bind/include/isc/ctl.h8
-rw-r--r--contrib/bind/include/isc/dst.h134
-rw-r--r--contrib/bind/include/isc/eventlib.h83
-rw-r--r--contrib/bind/include/isc/irpmarshall.h37
-rw-r--r--contrib/bind/include/isc/logging.h7
-rw-r--r--contrib/bind/include/isc/misc.h4
-rw-r--r--contrib/bind/include/isc/tree.h12
-rw-r--r--contrib/bind/include/netgroup.h18
-rw-r--r--contrib/bind/include/resolv.h97
-rw-r--r--contrib/bind/lib/dst/bsafe_link.c4
-rw-r--r--contrib/bind/lib/dst/cylink_link.c4
-rw-r--r--contrib/bind/lib/dst/dst_api.c5
-rw-r--r--contrib/bind/lib/dst/hmac_link.c11
-rw-r--r--contrib/bind/lib/irs/dns_gr.c4
-rw-r--r--contrib/bind/lib/irs/dns_ho.c598
-rw-r--r--contrib/bind/lib/irs/dns_nw.c21
-rw-r--r--contrib/bind/lib/irs/gen_gr.c17
-rw-r--r--contrib/bind/lib/irs/getaddrinfo.c63
-rw-r--r--contrib/bind/lib/irs/gethostent.c59
-rw-r--r--contrib/bind/lib/irs/getnameinfo.c1
-rw-r--r--contrib/bind/lib/irs/getnetgrent.c27
-rw-r--r--contrib/bind/lib/irs/getnetgrent_r.c14
-rw-r--r--contrib/bind/lib/irs/hesiod.c26
-rw-r--r--contrib/bind/lib/irs/irp_p.h4
-rw-r--r--contrib/bind/lib/irs/irs_data.c25
-rw-r--r--contrib/bind/lib/irs/nis_gr.c4
-rw-r--r--contrib/bind/lib/irs/nis_ho.c107
-rw-r--r--contrib/bind/lib/isc/ctl_clnt.c4
-rw-r--r--contrib/bind/lib/isc/ctl_srvr.c4
-rw-r--r--contrib/bind/lib/isc/ev_files.c4
-rw-r--r--contrib/bind/lib/isc/ev_timers.c14
-rw-r--r--contrib/bind/lib/isc/ev_waits.c8
-rw-r--r--contrib/bind/lib/isc/eventlib.c16
-rw-r--r--contrib/bind/lib/isc/eventlib_p.h5
-rw-r--r--contrib/bind/lib/isc/logging.c11
-rw-r--r--contrib/bind/lib/nameser/ns_name.c32
-rw-r--r--contrib/bind/lib/nameser/ns_parse.c5
-rw-r--r--contrib/bind/lib/nameser/ns_print.c14
-rw-r--r--contrib/bind/lib/nameser/ns_samedomain.c14
-rw-r--r--contrib/bind/lib/nameser/ns_sign.c27
-rw-r--r--contrib/bind/lib/resolv/res_comp.c8
-rw-r--r--contrib/bind/lib/resolv/res_debug.c38
-rw-r--r--contrib/bind/lib/resolv/res_findzonecut.c113
-rw-r--r--contrib/bind/lib/resolv/res_init.c51
-rw-r--r--contrib/bind/lib/resolv/res_mkquery.c72
-rw-r--r--contrib/bind/lib/resolv/res_mkupdate.c68
-rw-r--r--contrib/bind/lib/resolv/res_private.h1
-rw-r--r--contrib/bind/lib/resolv/res_query.c9
-rw-r--r--contrib/bind/lib/resolv/res_send.c9
-rw-r--r--contrib/bind/lib/resolv/res_update.c15
-rwxr-xr-xcontrib/bind/port/freebsd/bin/probe_ipv615
-rw-r--r--contrib/bind/port/freebsd/include/port_after.h17
95 files changed, 2221 insertions, 1825 deletions
diff --git a/contrib/bind/CHANGES b/contrib/bind/CHANGES
index cdc1c3f..203a4ef 100644
--- a/contrib/bind/CHANGES
+++ b/contrib/bind/CHANGES
@@ -1,3 +1,251 @@
+
+ --- 8.3.6-REL released --- (Sun Jun 8 15:11:32 PDT 2003)
+
+1547. [port] cope with spurious EINVAL from evRead.
+
+1538. [port] linux: not all distributions define IF_NAMESIZE.
+
+1502. [port] some IPv6 references were not protected.
+
+ --- 8.3.5-REL released --- (Mon Jun 2 03:15:53 PDT 2003)
+
+1540. [bug] remove potential memory leak from net_data_create().
+
+1537. [bug] dig buffer overrun with large command lines.
+
+1535. [bug] winnt: large zone transfers failed.
+
+1536. [cleanup] use NS_MAXMSG to define TCP buffers.
+
+1534. [func] The advertised EDNS UDP buffer size can now be set
+ via named.conf (edns-udp-size).
+
+1533. [bug] don't artificially restrict the update message size.
+
+1532. [bug] use maximum sized answer buffers in res_findzonecut().
+
+1530. [bug] nslookup computed incorrect reverse lookup for IPv6.
+
+1529. [lint] unused variable in dnsquery.c::main().
+
+1528. [bug] getaddrinfo() incorrectly rejected a numeric service
+ under certian circumstances.
+
+1527. [proto] add ns_t_apl (42).
+
+1526. [doc] res_{get,set}servers().
+
+1523. [bug] getipnodebyname with AI_ADDRCONFIG set was broken
+ on HPUX 11.11. Detect IPv6 interfaces under linux.
+
+1519. [port] decunix: conflicting setnetgrent() and innetgr()
+ prototypes.
+
+1518. [cleanup] silence "No root nameservers for class XX" when
+ "forward only;" is set in options.
+
+1517. [cleanup] stop using putshort/putlong internally.
+
+1513. [bug] use ipnodes.{byname,byaddr} for IPv6 NIS lookups.
+ Add support for "YP_MULTI_".
+
+1511. [cleanup] don't use argument names in function prototypes.
+
+1510. [port] openbsd uses /bsd not /kernel.
+
+1506. [bug] named could sometimes set tc incorrectly.
+
+1505. [bug] potential overflow if pointer arithmetic wrapped.
+
+1503. [bug] named could make unnecessary queries for glue if the
+ additional section was full.
+
+1501. [port] decunix: OSF 3.2 does not have native 64 bit support.
+
+1500. [port] linux: namespace collision.
+
+1499. [port] linux: #include <time.h> bin/dig/dig.c
+
+1498. [bug] ns_makecanon() could under read its destination buffer
+ by one character and fail to properly canonicalise.
+
+1497. [bug] res_mkupdate() used compression pointers when it
+ shouldn't.
+
+1496. [bug] res_mkupdate() didn't support NAPTR.
+
+1494. [bug] memory leak on thread destruction if gethostbyname() /
+ getnetbyname() have been called by the thread.
+
+1493. [bug] check scope for link local servers.
+
+1492. [placeholder]
+
+1491. [cleanup] indentation problems.
+
+1490. [bug] the seek offset was miscalculated when truncating
+ the ixfr log.
+
+1489. [func] named no longer queries for missing additional A6
+ records.
+
+1488. [port] decunix: TruCluster support.
+ See port/decunix/TruCluster.
+
+1487. [bug] getnetgroup() takes (char **) not (const char **).
+
+1486. [func] res_query() now generates more/better debug on failure
+
+1485. [func] res_send() records the nameserver the response came
+ from. Dig retrieves this rather than reporting the
+ first address.
+
+1484. [bug] dig use sin.sin_port for IPv4.
+
+1483. [bug] nslookup could dereference a NULL pointer under certain
+ circumstances.
+
+1482. [bug] provide local storage for localtime_r result.
+
+1481. [bug] tv.tv_sec and time_t are not always the same type.
+
+1480. [bug] gethostbyname(), getaddrinfo() could drop address
+ if the previous call contained one of the new
+ addresses.
+
+1479. [func] try known lame servers if all other servers have
+ failed.
+
+1478. [cleanup] libbind: don't look for A6 records, don't follow
+ DNAME record (use the CNAMES), remove some bitstring
+ related functions.
+
+1477. [cleanup] libbind: namespace cleanup (irs_* to __irs*,
+ dst_* to __dst_* and tree_* to __tree*)
+
+1476. [bug] dig wasn't using a random query id.
+
+1475. [bug] "query-source address <listening interface> port *"
+ failed to use a system assigned port as documented.
+
+1474. [bug] named wasn't seeing cached NODATA CNAME records.
+
+1473. [bug] nslookup: buffer overrun when looking up reverse
+ IPv6 addresses under IP6.INT when not found under
+ IP6.ARPA.
+
+1472. [port] freebsd; current has pselect().
+
+1471. [port] 'dig -P' failed on some platforms.
+
+1470. [bug] J.ROOT-SERVERS.NET is now 192.58.128.30.
+
+1467. [deleted]
+
+1461. [func] return referrals for glue (NS/A/AAAA) if recursion is
+ disabled (recursion no;).
+
+1460. [bug] NS_MD5RSA_MAX_BITS was not correct.
+
+1459. [bug] ns_sign2() could fail to compute a correct signature
+ if the TSIG ownername was compressed.
+
+1458. [bug] host: spurious "Unknown algorithm" message with default
+ zone listing. missing white space before '(' in SOA
+ format.
+
+1457. [bug] bison didn't like ns_parser.y.
+
+1456. [doc] document auth-nxdomain default is "no" (see # 524).
+
+1455. [bug] named failed to allow a cached NODATA response for
+ a ANY query to be retrieved.
+
+1454. [contrib] nsverifier from Bob.Whelton@qwest.com.
+
+1453. [bug] SOA answers should only be cached for the current
+ tick.
+
+1452. [bug] don't cache -ve response SOA record.
+
+1451. [port] bsdos: maybe_fix_includes is not required.
+
+1450. [bug] hint zones don't need to be reloaded when a "child"
+ zone is removed.
+
+1449. [bug] it was possible to orphan glue records. this could
+ lead to panics in stale().
+
+1438. [bug] glue from a parent zone beneath a child zone could
+ be deleted by loading a child zone.
+
+1437. [bug] linux: probe_ipv6 was broken.
+
+1436. [port] decunix: update sys/bitypes.h
+
+1435. [func] named-xfer: log the zone name when reporting query
+ sent.
+
+1434. [doc] the man page for dn_expand failed to document eomorig.
+
+1433. [lint] remove unused variable.
+
+1432. [func] log TSIG key name if used with zone transfer.
+
+1431. [func] new category "update-security".
+
+1430. [func] libbind: the default nameservers now include ::1/::
+ as well as 127.0.0.1/0.0.0.0 if none are specified in
+ resolv.conf.
+
+1429. [port] libbind: use strlcat/strlcpy if available.
+
+1428. [port] eventlib.c: cast tv_sec to long when calling *printf().
+
+1427. [func] define INT8SZ
+
+1426. [port] res_dprintf() now supports format checking w/ gcc.
+
+1425. [bug] 'aa' was not being set appropriately with cross zone
+ CNAMES.
+
+1424. [cleanup] ip6_str2scopeid() now returns u_int32_t.
+
+1423. [bug] 'ndc restart' could fail to restart named if there
+ were no arguments to named.
+
+1422. [cleanup] optarg() etc. are declared in unistd.h.
+
+1421. [bug] clear and check errno when calling strtoul().
+
+1420. [cleanup] use %p instead of %#x for printing pointers.
+
+1419. [cleanup] getinfo(): kill buflen manipulation.
+
+1418. [port] cast pointers to (size_t) when aligning.
+
+1417. [cleanup] make1101inaddr(): kill size manipulation.
+
+1416. [port] log_vwrite() now supports format checking w/ gcc.
+
+1415. [port] irix: probe for in6addr_any.
+
+1414. [bug] strtoul() cast (char*) to (unsigned char*).
+
+1413. [bug] host: soa values are not signed.
+
+1412. [bug] fix numeric port range check in getaddrinfo().
+
+1411. [port] freebsd/netbsd/openbsd: #define USE_IFNAMELINKID.
+
+1410. [port] probe for sin6_scope_id when probing for IPv6 structs.
+
+1409. [bug] dig: reverse6 computed a incorrect nibble string.
+
+1408. [cleanup] res_mkquery.c: kill buflen manipulation.
+
+1407. [port] namespace clash EV_ERR -> EV_SETERR
+
--- 8.3.4-REL released --- (Thu Nov 14 05:45:26 PST 2002)
1469. [bug] buffer length calculation for PX was wrong.
@@ -21,691 +269,691 @@
--- 8.3.3-REL released --- (Wed Jun 26 21:15:43 PDT 2002)
-1301. [func] log attempts to exploit #1300.
+1406. [func] log attempts to exploit #1405.
-1300. [bug] Remote buffer overrun.
+1405. [bug] Remote buffer overrun.
-1299. [func] Log to xfer-in when a named-xfer fails and one of
+1404. [func] Log to xfer-in when a named-xfer fails and one of
the masters returned REFUSED.
-1298. [bug] named could leak a OPT record when returning a
+1403. [bug] named could leak a OPT record when returning a
negative response.
-1297. [func] 'ndc restart' will now attempt to preserve the
+1402. [func] 'ndc restart' will now attempt to preserve the
arguments named was started with.
Use 'ndc restart --' to clear the arguements.
Use 'ndc restart <new arguements>' to restart named
with a alternate set of arguements.
-1296. [bug] delay setting need_restart until the response to
+1401. [bug] delay setting need_restart until the response to
ndc exec has been sent.
-1295. [func] new ndc command 'args'. returns the arguements that
+1400. [func] new ndc command 'args'. returns the arguements that
named was started with %xx escaped.
-1294. [bug] #1272 broke linkage for those OS's using -lfl (flex).
+1399. [bug] #1377 broke linkage for those OS's using -lfl (flex).
Move -ll/-lfl to LIBL for all platforms.
--- 8.3.2-REL released --- (Mon Jun 17 20:24:32 PDT 2002)
-1293. [doc] update man pages for 'dig', 'dnsquery' and 'host'
+1398. [doc] update man pages for 'dig', 'dnsquery' and 'host'
to reflect IPv6 capabilities (nslookup and nsupdate
were already IPv4/IPv6 agnostic).
-1292. [func] host: the default lookups now also include AAAA
+1397. [func] host: the default lookups now also include AAAA
records.
-1291. [func] 'dig -x <ip6>' now works.
+1396. [func] 'dig -x <ip6>' now works.
-1290. [bug] 'dig @server' fail to report the IPv6 address of the
+1395. [bug] 'dig @server' fail to report the IPv6 address of the
server in error messages.
-1289. [contrib] normalize_zone now handles $TTL.
+1394. [contrib] normalize_zone now handles $TTL.
-1288. [bug] named: -t and -w could not be used together.
+1393. [bug] named: -t and -w could not be used together.
-1287. [func] report serial(s) in out going transfer operation.
+1392. [func] report serial(s) in out going transfer operation.
--- 8.3.2-RC1 released --- (Thu May 30 23:06:11 PDT 2002)
-1286. [func] libbind: no longer attempts bit string labels for
+1391. [func] libbind: no longer attempts bit string labels for
IPv6 reverse resolution. Try IP6.ARPA then IP6.INT
for nibble style resolution.
-1285. [port] linux: ss_family vs __ss_family in sockaddr_storage.
+1390. [port] linux: ss_family vs __ss_family in sockaddr_storage.
-1284. [port] freebsd: 5.0 uses gid_t rather that int for
+1389. [port] freebsd: 5.0 uses gid_t rather that int for
GETGROUPLIST_ARGS
-1283. [port] bsdi: 4.2 also has struct sockaddr_storage.
+1388. [port] bsdi: 4.2 also has struct sockaddr_storage.
-1282. [bug] nslookup was using inet_ntoa() to print out a IPv6
+1387. [bug] nslookup was using inet_ntoa() to print out a IPv6
address.
-1281. [bug] escape '(' and ')' when coverting to presentation
+1386. [bug] escape '(' and ')' when coverting to presentation
form.
-1280. [func] server { edns yes_or_no; } is now supported.
+1385. [func] server { edns yes_or_no; } is now supported.
-1279. [bug] nslookup: partial coversion to similar style outputs
+1384. [bug] nslookup: partial coversion to similar style outputs
for both -type=aaaa and -type=a.
-1278. [bug] free() of non-malloced memory in nslookup.
+1383. [bug] free() of non-malloced memory in nslookup.
-1277. [port] cast all instances of yytext in commands.l to (char*)
+1382. [port] cast all instances of yytext in commands.l to (char*)
to silence compilers on OS's where lex declares it
as (unsigned char *).
-1276. [port] hpux 11.22: ansify GetAnswer in getinfo.c to
+1381. [port] hpux 11.22: ansify GetAnswer in getinfo.c to
silence compiler.
-1275. [bug] bad declaration of si in tsig_key_from_addr().
+1380. [bug] bad declaration of si in tsig_key_from_addr().
-1274. [port] hpux 11.22: ansify hexstring() and display() in
+1379. [port] hpux 11.22: ansify hexstring() and display() in
addr.c to silence compiler.
-1273. [bug] const pointer conficts in res_debug.c.
+1378. [bug] const pointer conficts in res_debug.c.
-1272. [port] hpux 11.22: don't link against -ll unless required.
+1377. [port] hpux 11.22: don't link against -ll unless required.
-1272. [bug] main_need_num was not last entry in enum.
+1376. [bug] main_need_num was not last entry in enum.
main_need_tick nolonger required.
-1271. [port] hpux: treat all hpux systems as BIG_ENDIAN, don't
+1375. [port] hpux: treat all hpux systems as BIG_ENDIAN, don't
include <sys/mbuf.h>.
-1270. [port] hpux 11.22 namespace clash DATASIZE -> BIND_DATASIZE.
+1374. [port] hpux 11.22 namespace clash DATASIZE -> BIND_DATASIZE.
-1269. [port] hpux 11.11 interface scaning.
+1373. [port] hpux 11.11 interface scaning.
-1268. [port] solaris: 64 bit binary compatability.
+1372. [port] solaris: 64 bit binary compatability.
-1267. [bug] aix4: missing IN6_IS_ADDR_V4COMPAT macro.
+1371. [bug] aix4: missing IN6_IS_ADDR_V4COMPAT macro.
-1266. [bug] If you are using TSIG #1261 introduced the potential
+1370. [bug] If you are using TSIG #1365 introduced the potential
of a infinite loop.
-1265. [bug] nslookup failed on platforms that don't have BSD 43
+1369. [bug] nslookup failed on platforms that don't have BSD 43
style sockets.
-1264. [bug] LINK_INIT and UNLINK were not compatible with
+1368. [bug] LINK_INIT and UNLINK were not compatible with
C++, use LINK_INIT_TYPE and UNLINK_TYPE instead.
--- 8.3.2-T1B released --- (Tue May 7 18:49:58 PDT 2002)
-1263. [bug] gethostans() could get out of sync parsing the
+1367. [bug] gethostans() could get out of sync parsing the
response if there was a very long CNAME chain.
-1262. [bug] winnt: dumpdb and stats should now work reliably.
+1366. [bug] winnt: dumpdb and stats should now work reliably.
-1261. [bug] using a valid TSIG with a compressed ownername could
+1365. [bug] using a valid TSIG with a compressed ownername could
result a INSIST() failure.
-1260. [func] "notify explicit;" from BIND 9.
+1364. [func] "notify explicit;" from BIND 9.
-1259. [misc] leave the verification of the OPT options to the
+1363. [misc] leave the verification of the OPT options to the
caller.
-1258. [func] accept SOA MNAME field as legitimate additional
+1362. [func] accept SOA MNAME field as legitimate additional
data.
-1257. [bug] malformed response to query w/ tsig + edns.
+1361. [bug] malformed response to query w/ tsig + edns.
-1256. [port] darwin: probe for IPv6 support.
+1360. [port] darwin: probe for IPv6 support.
-1255. [bug] xfers_running could become out of sync if a zone
+1359. [bug] xfers_running could become out of sync if a zone
was removed while it was being transfered.
-1254. [func] nsupdate can now update IPv6 servers.
+1358. [func] nsupdate can now update IPv6 servers.
-1253. [func] host now accepts IPv6 addresses.
+1357. [func] host now accepts IPv6 addresses.
-1253. [bug] reserve space for the signature when performing a
+1356. [bug] reserve space for the signature when performing a
zone transfer.
-1252. [func] dnsquery now accepts IPv6 addresses.
+1355. [func] dnsquery now accepts IPv6 addresses.
-1251. [bug] win32: it was possible to call RegCloseKey() on a
+1354. [bug] win32: it was possible to call RegCloseKey() on a
invalid key.
-1250 [func] nslookup now accepts IPv6 addresses.
+1353. [func] nslookup now accepts IPv6 addresses.
-1249. [func] dig now accepts IPv6 addresses.
+1352. [func] dig now accepts IPv6 addresses.
-1248. [doc] correct some typos in named.conf.5 and corresponding
+1351. [doc] correct some typos in named.conf.5 and corresponding
html.
-1247. [bug] get_salen() IPv6 support was broken for OSs w/o sa_len.
+1350. [bug] get_salen() IPv6 support was broken for OSs w/o sa_len.
-1246. [support] add highly dangerous compile time option
+1349. [support] add highly dangerous compile time option
NXDOMAIN_ON_DENIAL. it should not be used
except in testing.
-1245. [bug] if we don't have enough file descriptors to open
+1348. [bug] if we don't have enough file descriptors to open
a socket attempt to close a idle tcp client.
-1244. [port] bsdi: 4.3 has struct sockaddr_storage.
+1347. [port] bsdi: 4.3 has struct sockaddr_storage.
-1243. [bug] SERVFAIL can have too many other causes to be used
+1346. [bug] SERVFAIL can have too many other causes to be used
say whether a server supports EDNS or not.
-1242. [port] 64k answer buffers were causing stack space to be
+1345. [port] 64k answer buffers were causing stack space to be
exceeded for certian OS. Use heap space instead.
-1241. [bug] getnameinfo() failed to lookup IPv4 mapped /
+1344. [bug] getnameinfo() failed to lookup IPv4 mapped /
compatible addresses.
-1340. [bug] reference after free for included conf file name.
+1343. [bug] reference after free for included conf file name.
-1339. [bug] doaddinfo would not always attempt to fetch missing
+1342. [bug] doaddinfo would not always attempt to fetch missing
glue when it should have.
-1338. [bug] an IPv6 only nameserver could generate spurious
+1341. [bug] an IPv6 only nameserver could generate spurious
sysquery errors.
-1337. [port] linux: IN6ADDR_LOOPBACK_INIT, IN6ADDR_ANY_INIT and
+1340. [port] linux: IN6ADDR_LOOPBACK_INIT, IN6ADDR_ANY_INIT and
sockaddr_storage not declared by early kernels.
-1336. [bug] getaddrinfo() could call freeaddrinfo() with an
+1339. [bug] getaddrinfo() could call freeaddrinfo() with an
invalid pointer.
-1335. [bug] res_nupdate() failed to update the name servers
+1338. [bug] res_nupdate() failed to update the name servers
addresses before sending the update.
-1334. [bug] A6 is expected in the additional section.
+1337. [bug] A6 is expected in the additional section.
--- 8.3.1-REL released --- (Thu Jan 31 21:28:59 PST 2002)
-1333. [bug] cached NXDOMAIN/NODATA responses were being ignored
+1336. [bug] cached NXDOMAIN/NODATA responses were being ignored
when when fetching missing additional data.
-1332. [func] "allow-query" is now supported for forward zones.
+1335. [func] "allow-query" is now supported for forward zones.
#define FORWARD_ALLOWS in bin/named/named.h to enable.
-1331. [bug] rrsetadd() should explictly attach to the databuf
+1334. [bug] rrsetadd() should explictly attach to the databuf
rather than inheriting the reference count.
-1330. [bug] potential reference after free.
+1333. [bug] potential reference after free.
-1329. [port] linux: ensure that CC is correctly propgated to
+1332. [port] linux: ensure that CC is correctly propgated to
probe_ipv6.
-1328. [port] linux: res_init.c failed to compile on certian older
+1331. [port] linux: res_init.c failed to compile on certian older
machines.
-1327. [contrib] add mysqlBind reference.
+1330. [contrib] add mysqlBind reference.
-1326. [bug] named-xfer could incorrectly report a fopen() failure
+1329. [bug] named-xfer could incorrectly report a fopen() failure
as a fdopen() failure.
-1325. [bug] if fdopen() failed empty files could be left behind.
+1328. [bug] if fdopen() failed empty files could be left behind.
-1324. [bug] certian bad delegations could result in a DNS storm.
+1327. [bug] certian bad delegations could result in a DNS storm.
--- 8.3.0-REL released --- (Fri Jan 11 04:00:00 PST 2002)
-1323. [bug] don't assume statp->_u._ext.ext is valid unless
+1326. [bug] don't assume statp->_u._ext.ext is valid unless
RES_INIT is set when calling res_*init().
-1322. [bug] call res_ndestroy() if RES_INIT is set when
+1325. [bug] call res_ndestroy() if RES_INIT is set when
res_*init() is called.
-1321. [cleanup] YPKLUDGE in no longer default.
+1324. [cleanup] YPKLUDGE in no longer default.
-1320. [port] winnt: namespace collision #undef the system's EV_ERR.
+1323. [port] winnt: namespace collision #undef the system's EV_ERR.
-1319. [port] winnt: make __res_nopt() visible externally.
+1322. [port] winnt: make __res_nopt() visible externally.
-1318. [port] Tru64 UNIX V5.1 can return spurious EINVAL on
+1321. [port] Tru64 UNIX V5.1 can return spurious EINVAL on
close() after connect() failure.
-1317. [bug] NULL used where zero was required.
+1320. [bug] NULL used where zero was required.
--- 8.3.0-RC2 released --- (Wed Jan 2 17:14:23 PST 2002)
-1316. [bug] memory leak when a ixfr update or a re-applied update
+1319. [bug] memory leak when a ixfr update or a re-applied update
was rejected.
-1315. [bug] the wrong options level check-names value was used
+1318. [bug] the wrong options level check-names value was used
when merging ixfr updates.
-1314. [bug] corrupt update / ixfr updates should result in
+1317. [bug] corrupt update / ixfr updates should result in
merge errors being reported.
-1313. [bug] set current_serial in db_ixfr.c:ixfr_getdelta().
+1316. [bug] set current_serial in db_ixfr.c:ixfr_getdelta().
-1312. [bug] use serial space arithmetic when selecting deltas for
+1315. [bug] use serial space arithmetic when selecting deltas for
IXFR.
-1311. [contrib] mdnkit update to 2.2.3
+1314. [contrib] mdnkit update to 2.2.3
-1310. [bug] TSIG signed IXFR's wern't correctly verified.
+1313. [bug] TSIG signed IXFR's wern't correctly verified.
-1309. [port] winnt: re-order fclose/unlink so that the unlink
+1312. [port] winnt: re-order fclose/unlink so that the unlink
succeeds.
-1308. [doc] miscellaneous nroff fixes.
+1311. [doc] miscellaneous nroff fixes.
-1307. [func] preferred-glue can now be used to partially order
+1310. [func] preferred-glue can now be used to partially order
the additional section.
-1306. [bug] It was possible to trigger an INSIST failure with
+1309. [bug] It was possible to trigger an INSIST failure with
certian EDNS responses.
-1305. [bug] named-xfer could return a false up-to-date status.
+1308. [bug] named-xfer could return a false up-to-date status.
-1304. [bug] "named-xfer -x" didn't attempt to use the specified
+1307. [bug] "named-xfer -x" didn't attempt to use the specified
address for all possible masters if earlier connects
failed.
-1303. [contrib] nslint upgraded from 2.0.2 to 2.1a3 (by author).
+1306. [contrib] nslint upgraded from 2.0.2 to 2.1a3 (by author).
-1302. [bug] res_nametotype() and res_nametoclass() were broken.
+1305. [bug] res_nametotype() and res_nametoclass() were broken.
-1301. [bug] "ndc reload zone" without class was broken.
+1304. [bug] "ndc reload zone" without class was broken.
-1300. [port] Tru64 UNIX 5.1 does not like __align as a element name.
+1303. [port] Tru64 UNIX 5.1 does not like __align as a element name.
-1299. [bug] host failed to handle "." in search list correctly.
+1302. [bug] host failed to handle "." in search list correctly.
-1298. [bug] max-ixfr-log-size default was unreasonable.
+1301. [bug] max-ixfr-log-size default was unreasonable.
-1297. [bug] read buffer overflows.
+1300. [bug] read buffer overflows.
-1296. [protocol] NAPTR additional section processing.
+1299. [protocol] NAPTR additional section processing.
--- 8.3.0-RC1 released --- (Wed Nov 21 20:41:32 PST 2001)
-1295. [bug] be more aggressive at dropping messages from certian
+1298. [bug] be more aggressive at dropping messages from certian
well known ports.
-1294. [bug] hint zones and root stub zones were not being removed
+1297. [bug] hint zones and root stub zones were not being removed
correctly.
-1293. [port] MPE/iX workaround recvfrom() not supporting larger
+1296. [port] MPE/iX workaround recvfrom() not supporting larger
address buffers required for IPv6.
-1292. [bug] memory leak: free_flushset().
+1295. [bug] memory leak: free_flushset().
-1291. [func] accept and generate EDNS0 queries.
+1294. [func] accept and generate EDNS0 queries.
-1290. [func] allow initial notifies on startup to be suppressed.
+1293. [func] allow initial notifies on startup to be suppressed.
[Kenneth Karoliussen, kenneth@activeisp.com]
-1289. [func] allow keys to be specified in the masters clause.
+1292. [func] allow keys to be specified in the masters clause.
-1288. [func] named-xfer report if response was signed.
+1291. [func] named-xfer report if response was signed.
-1287. [bug] named-xfer could report false TSIG failures under
+1290. [bug] named-xfer could report false TSIG failures under
certian conditions.
-1286. [bug] don't allow rtt estimates to drop to zero.
+1289. [bug] don't allow rtt estimates to drop to zero.
-1285. [bug] non-answering servers rtt estimates were not always
+1288. [bug] non-answering servers rtt estimates were not always
penalised.
-1284. [bug] struct __res_state was still broken after #1265.
+1287. [bug] struct __res_state was still broken after #1268.
-1283. [port] addition platform support for _r functions.
+1286. [port] addition platform support for _r functions.
-1282. [port] pw->pw_class is platform dependant.
+1285. [port] pw->pw_class is platform dependant.
-1281. [port] namespace collision: dprintf -> res_dprintf,
+1284. [port] namespace collision: dprintf -> res_dprintf,
ERR -> EV_ERR, OK -> EV_OK.
-1280. [cleanup] gai_strerror() re-written.
+1283. [cleanup] gai_strerror() re-written.
-1279. [bug] non-glue was not being reported on reload.
+1282. [bug] non-glue was not being reported on reload.
-1278. [bug] Remove the INSIST at the end if zone_maint().
+1281. [bug] Remove the INSIST at the end if zone_maint().
-1277. [func] hostname.bind/txt/chaos now returns the name of
+1280. [func] hostname.bind/txt/chaos now returns the name of
the machine hosting the nameserver. This is useful
in diagnosing problems with anycast servers.
-1276. [bug] dns_ho.c:add_hostent() was not returning the amount
+1279. [bug] dns_ho.c:add_hostent() was not returning the amount
of memory consumed resulting in garbage address
being returned. Alignment calculations were
wasting space. We wern't suppressing duplicate
addresses.
-1275. [port] sunos: old sprintf.
+1278. [port] sunos: old sprintf.
-1274. [port] MPE/iX C.70
+1277. [port] MPE/iX C.70
-1273. [bug] host was sorting multiple RRs into the wrong order
+1276. [bug] host was sorting multiple RRs into the wrong order
prior to verifying.
--- 8.3.0-T2A released --- (Thu Sep 27 18:15:00 PDT 2001)
-1272. [bug] "ndc trace 0" should behave like "ndc notrace".
+1275. [bug] "ndc trace 0" should behave like "ndc notrace".
-1271. [func] inet_{cidr,net}_{pton,ntop}() now have IPv6 support.
+1274. [func] inet_{cidr,net}_{pton,ntop}() now have IPv6 support.
-1270. [bug] AXFR style IXFR responses were not handled properly,
+1273. [bug] AXFR style IXFR responses were not handled properly,
transfer-format single-answer.
-1269. [bug] misc: more string format fixes, open va_end(),
+1272. [bug] misc: more string format fixes, open va_end(),
call exit() with positive values, include <string.h>.
-1268. [func] Resolver, dig: "DNSSEC OK" (DO) support.
+1271. [func] Resolver, dig: "DNSSEC OK" (DO) support.
-1267. [port] HP e3000 MPE is big-endian.
+1270. [port] HP e3000 MPE is big-endian.
-1266. [func] dig +[no]tr: use relative names when printing
+1269. [func] dig +[no]tr: use relative names when printing
out a zone transfer ([NO]TRuncate).
-1265. [bug] struct __res_state to large on 64 bit arch.
+1268. [bug] struct __res_state to large on 64 bit arch.
-1264. [port] winnt: pass the root zone as "." to named-xfer
+1267. [port] winnt: pass the root zone as "." to named-xfer
rather than "".
-1263. [port] #1227 broke sunos.
+1266. [port] #1230 broke sunos.
-1262. [func] log type as well as class for denied queries.
+1265. [func] log type as well as class for denied queries.
-1261. [bug] get*by*() failed to check if res_init() had been
+1264. [bug] get*by*() failed to check if res_init() had been
called.
-1260. [func] resolver option: no-tld-query. disables trying
+1263. [func] resolver option: no-tld-query. disables trying
unqualified as a tld. no_tld_query is also supported
for FreeBSD compatability.
-1259. [func] enable NOADDITIONAL code by default.
+1262. [func] enable NOADDITIONAL code by default.
-1258. [func] treat class ANY as class IN for access control for
+1261. [func] treat class ANY as class IN for access control for
non-xfr queries.
-1257. [func] increase nameserver chaining distance from 1 to 3
+1260. [func] increase nameserver chaining distance from 1 to 3
(NS_MAX_DISTANCE).
-1256. [bug] increased loop avoidance with well known ports.
+1259. [bug] increased loop avoidance with well known ports.
-1255. [bug] cached NXDOMAIN responses were being ignored when
+1258. [bug] cached NXDOMAIN responses were being ignored when
selecting servers to query.
-1254. [support] improved support for parallel make.
+1257. [support] improved support for parallel make.
-1253. [port] winnt: support for change #1218
+1256. [port] winnt: support for change #1221
-1252. [port] winnt: the stat structure does not have st_blksize.
+1255. [port] winnt: the stat structure does not have st_blksize.
-1251. [bug] AXFR style IXFR responses were not handled properly.
+1254. [bug] AXFR style IXFR responses were not handled properly.
-1250. [doc] document support-ixfr.
+1253. [doc] document support-ixfr.
-1249. [func] add support gcc's format string checking.
+1252. [func] add support gcc's format string checking.
-1248. [bug] string formats.
+1251. [bug] string formats.
-1247. [bug] dig -t axfr attempted to use UDP not TCP.
+1250. [bug] dig -t axfr attempted to use UDP not TCP.
-1246. [doc] miscellaneous nroff fixes.
+1249. [doc] miscellaneous nroff fixes.
-1245. [port] winnt: named-xfer failures. improved recvfrom()
+1248. [port] winnt: named-xfer failures. improved recvfrom()
emulation.
-1244. [port] winnt: bug in tracking "file" file descriptors
+1247. [port] winnt: bug in tracking "file" file descriptors
extend "file" file descriptors support to 2048.
-1243. [cleanup] defining REPORT_ERRORS in lib/dst caused compile time
+1246. [cleanup] defining REPORT_ERRORS in lib/dst caused compile time
errors.
-1242. [bug] inet_pton() failed to reject octal input.
+1245. [bug] inet_pton() failed to reject octal input.
-1241. [bug] memory leaks: zone forwarder table, server key list,
+1244. [bug] memory leaks: zone forwarder table, server key list,
global forwarder table, query tsig info, unused
channels, key names, xfr tsig info.
-1240. [bug] restore message if ns_forw() fails.
+1243. [bug] restore message if ns_forw() fails.
-1239. [bug] call res_ndestroy() in net_data_destroy().
+1242. [bug] call res_ndestroy() in net_data_destroy().
-1238. [func] named-bootconf now supports HP's "no-round-robin".
+1241. [func] named-bootconf now supports HP's "no-round-robin".
-1237. [bug] buffer overrun, access mode read.
+1240. [bug] buffer overrun, access mode read.
-1236. [bug] ignore white space after address of nameserver.
+1239. [bug] ignore white space after address of nameserver.
-1235. [port] solaris 2.4: use ioctl(FIONBIO) rather than fcntl().
+1238. [port] solaris 2.4: use ioctl(FIONBIO) rather than fcntl().
--- 8.3.0-T1A released --- (Wed Jun 20 19:05:01 PDT 2001)
-1234. [bug] memory leak with "use-id-pool no;".
+1237. [bug] memory leak with "use-id-pool no;".
-1233. [func] res_setservers(), res_getservers().
+1236. [func] res_setservers(), res_getservers().
-1232. [bug] don't assume the forwarder has dropped bogus records.
+1235. [bug] don't assume the forwarder has dropped bogus records.
-1231. [bug] always restart a query if we dropped records when
+1234. [bug] always restart a query if we dropped records when
parsing.
-1230. [func] report the address the server learnt the record from
+1233. [func] report the address the server learnt the record from
in lame server messages.
-1229. [func] opaque rdata support for unknown types.
+1232. [func] opaque rdata support for unknown types.
-1228. [protocol] IXFR don't test for AA, don't check that the question
+1231. [protocol] IXFR don't test for AA, don't check that the question
is returned.
-1227. [port] solaris: sys_nerr and sys_errlist do not exist when
+1230. [port] solaris: sys_nerr and sys_errlist do not exist when
compiling in 64 bit mode.
-1226. [placeholder]
+1229. [placeholder]
-1225. [bug] don't send cross class additional records.
+1228. [bug] don't send cross class additional records.
-1224. [bug] use after realloc(), non portable pointer arithmetic in
+1227. [bug] use after realloc(), non portable pointer arithmetic in
grmerge().
-1223. [bug] allow all KEY records in parent zone at bottom of zone
+1226. [bug] allow all KEY records in parent zone at bottom of zone
cut.
-1222. [bug] HMAC-MD5 key files are now mode 0600.
+1225. [bug] HMAC-MD5 key files are now mode 0600.
-1221. [port] aix: 4.3.3.0 (4.3.2.0?) and later have strndup().
+1224. [port] aix: 4.3.3.0 (4.3.2.0?) and later have strndup().
-1220. [port] winnt: isc_movefile() and syslog() updated.
+1223. [port] winnt: isc_movefile() and syslog() updated.
-1219. [bug] winnt: zone transfers could fail.
+1222. [bug] winnt: zone transfers could fail.
-1218. [func] add IPv6 transport support to the resolver from the
+1221. [func] add IPv6 transport support to the resolver from the
KAME project. Includes initial bitstring support.
-1217. [bug] #1186 broke the command-line programs that relied on
+1220. [bug] #1189 broke the command-line programs that relied on
the fact that HMAC-MD5 keys have keyid 0.
-1216. [bug] #1180 completely broke inet_nsap_addr(),
+1219. [bug] #1183 completely broke inet_nsap_addr(),
inet_nsap_ntoa() still didn't emit the leading 0x.
-1215. [bug] long UNIX domain control socket names were not being
+1218. [bug] long UNIX domain control socket names were not being
printed in full.
-1214. [bug] getrgnam()/getgrgid() leaked memory.
+1217. [bug] getrgnam()/getgrgid() leaked memory.
-1213. [bug] #1199 introduced a reference after free bug.
+1216. [bug] #1202 introduced a reference after free bug.
-1212. [bug] some function declarations wern't protected by
+1215. [bug] some function declarations wern't protected by
__BEGIN_DECL/__END_DECL in resolv.h.
-1211. [port] next: openstep is now supported as well as nextstep.
+1214. [port] next: openstep is now supported as well as nextstep.
-1210. [port] add: SCO Unix 5.0.6.
+1213. [port] add: SCO Unix 5.0.6.
-1209. [port] winnt: issues.
+1212. [port] winnt: issues.
-1208. [func] close "dynamic" file channels when debug is set to
+1211. [func] close "dynamic" file channels when debug is set to
zero allowing them to be removed and re-opened.
-1207. [contrib] new h2n from author.
+1210. [contrib] new h2n from author.
-1206. [bug] ixfr_getdelta() uninitialised variable used.
+1209. [bug] ixfr_getdelta() uninitialised variable used.
-1205. [bug] parse_cert_rr() passes wrong buffer size to b64_pton().
+1208. [bug] parse_cert_rr() passes wrong buffer size to b64_pton().
-1204. [bug] memory leak: pathname leaked specifing controls unix.
+1207. [bug] memory leak: pathname leaked specifing controls unix.
-1203. [bug] detect corrupted ixfr logs.
+1206. [bug] detect corrupted ixfr logs.
-1202. [bug] memory leak: dynamic update was leaking.
+1205. [bug] memory leak: dynamic update was leaking.
-1201. [bug] ISO/IEC 9945-1 versions of getpwuid_r(), getpwnam_r(),
+1204. [bug] ISO/IEC 9945-1 versions of getpwuid_r(), getpwnam_r(),
getgrgid_r() and getgrnam_r() were not ISO/IEC 9945-1
compliant.
-1200. [bug] memory leak: when following CNAMES from of req_query().
+1203. [bug] memory leak: when following CNAMES from of req_query().
-1199. [bug] memory leak: when defining keys.
+1202. [bug] memory leak: when defining keys.
-1198. [func] reference count all databuf activity.
+1201. [func] reference count all databuf activity.
-1197. [func] deallocate-on-exit yes; will call abort() if there
+1200. [func] deallocate-on-exit yes; will call abort() if there
is still active memory.
-1196. [func] memactive(): report if there is still active memory.
+1199. [func] memactive(): report if there is still active memory.
-1195. [bug] memory leak: include in named.conf leaked file name.
+1198. [bug] memory leak: include in named.conf leaked file name.
-1194. [port] MPE/IX port updated by Mark Bixby of the
+1197. [port] MPE/IX port updated by Mark Bixby of the
HP CSY MPE/iX Internet & Interoperability Team.
-1193. [port] winnt: path separator.
+1196. [port] winnt: path separator.
-1192. [bug] winnt: fix accept failures.
+1195. [bug] winnt: fix accept failures.
-1191. [port] winnt: a CLI tool for controling named 'BINDcmd' now
+1194. [port] winnt: a CLI tool for controling named 'BINDcmd' now
exists.
-1190. [contrib] nslint upgraded from 1.5.1 to 2.0.2 (by author).
+1193. [contrib] nslint upgraded from 1.5.1 to 2.0.2 (by author).
-1189. [port] redo #1146 to cope w/ differing gettimeofday()
+1192. [port] redo #1147 to cope w/ differing gettimeofday()
function signatures.
-1188. [bug] memory leak when removing multiple records via dynamic
+1191. [bug] memory leak when removing multiple records via dynamic
updates.
--- 8.2.4-T1B released --- (Thu Apr 19 14:38:30 PDT 2001)
-1187. [support] Don't accept in a query names which would be rejected
+1190. [support] Don't accept in a query names which would be rejected
in responses.
-1186. [bug] DNSSEC key ids were computed incorrectly.
+1189. [bug] DNSSEC key ids were computed incorrectly.
-1185. [bug] remember if a notify came in while a zone transfer is
+1188. [bug] remember if a notify came in while a zone transfer is
in progress and perform a refresh check after the
transfer completes.
--- 8.2.4-T1A released --- (Sun Apr 1 12:15:48 PDT 2001)
-1184. [support] notify delay limit now "nzones" rather than "nzones/5".
+1187. [support] notify delay limit now "nzones" rather than "nzones/5".
-1183. [port] new port/cygwin contributed by s_c_biggs@bigfoot.com.
+1186. [port] new port/cygwin contributed by s_c_biggs@bigfoot.com.
-1182. [contrib] new contrib/mdnkit (V1.3) from author.
+1185. [contrib] new contrib/mdnkit (V1.3) from author.
-1181. [bug] dig -T was only delaying after the first batched query.
+1184. [bug] dig -T was only delaying after the first batched query.
-1180. [bug] NSAP processing did not support leading 0x as required
+1183. [bug] NSAP processing did not support leading 0x as required
by RFC 1706.
-1179. [contrib] new contrib/adm from official ftp site.
+1182. [contrib] new contrib/adm from official ftp site.
-1178. [contrib] new contrib/host from author.
+1181. [contrib] new contrib/host from author.
-1177. [contrib] new contrib/dnsp from author.
+1180. [contrib] new contrib/dnsp from author.
-1176. [bug] fix memory and file descriptor leaks.
+1179. [bug] fix memory and file descriptor leaks.
-1175. [bug] statp->nsort could fail to be re-initialised if
+1178. [bug] statp->nsort could fail to be re-initialised if
resolv.conf goes away.
-1174. [port] winnt: missing call to sockout() in close().
+1177. [port] winnt: missing call to sockout() in close().
-1173. [bug] suppress repeated notifies when a nameserver is a
+1176. [bug] suppress repeated notifies when a nameserver is a
CNAME.
-1172. [bug] allow res_{n}update to take a single unlinked element.
+1175. [bug] allow res_{n}update to take a single unlinked element.
-1171. [doc] rfc2308-type1 applies to answers from the cache.
+1174. [doc] rfc2308-type1 applies to answers from the cache.
-1170. [port] winnt: does not have unix domain sockets.
+1173. [port] winnt: does not have unix domain sockets.
-1171. [bug] xfers_deferred could become out of sync.
+1172. [bug] xfers_deferred could become out of sync.
-1170. [bug] check the family before using a cached result from
+1171. [bug] check the family before using a cached result from
gethostbyname*().
-1169. [cleanup] namespace cleanup of prand_conf.
+1170. [cleanup] namespace cleanup of prand_conf.
-1168. [port] fix ctk ORD_32 problem on some HPUX 10.20 systems.
+1169. [port] fix ctk ORD_32 problem on some HPUX 10.20 systems.
-1167. [support] note possible HAVE_STRNDUP need for AIX4.
+1168. [support] note possible HAVE_STRNDUP need for AIX4.
-1166. [bug] bad $TTL could kill the contributed dns_signer.
+1167. [bug] bad $TTL could kill the contributed dns_signer.
-1165. [func] INITIALZONES tuning for large servers (> 1000 zones).
+1166. [func] INITIALZONES tuning for large servers (> 1000 zones).
-1164. [bug] the resolver could leak a file descriptors under
+1165. [bug] the resolver could leak a file descriptors under
certain conditions.
-1163. [func] ns_critical() is now available.
+1164. [func] ns_critical() is now available.
-1162. [port] winnt: add strerror.
+1163. [port] winnt: add strerror.
-1161. [support] log out of memory during zone transfers.
+1162. [support] log out of memory during zone transfers.
-1160. [support] extend "Response from unexpected source" message.
+1161. [support] extend "Response from unexpected source" message.
-1159. [doc] query-source is used for TCP and that the port is
+1160. [doc] query-source is used for TCP and that the port is
ignored.
-1158. [func] add A6, DNAME, SINK and OPT to list of known RR types
+1159. [func] add A6, DNAME, SINK and OPT to list of known RR types
in res_debug.
-1157. [perf] add more ns_wouldlog() calls on mainline.
+1158. [perf] add more ns_wouldlog() calls on mainline.
-1156. [bug] don't use a known bogus key name.
+1157. [bug] don't use a known bogus key name.
-1155. [support] log possible "TSIG BUG" exploit attempts. Requires
+1156. [support] log possible "TSIG BUG" exploit attempts. Requires
LOG_TSIG_BUG to be defined in bin/named/named.h.
-1154. [bug] RFC2317 support was broken in bin/host command again.
+1155. [bug] RFC2317 support was broken in bin/host command again.
-1153. [support] be more consist with the use of slave vs secondary.
+1154. [support] be more consist with the use of slave vs secondary.
-1152. [bug] ixfr processing could leave Z_XFER_RUNNING set.
+1153. [bug] ixfr processing could leave Z_XFER_RUNNING set.
-1151. [bug] failed to correctly parse the orginal ttl in SIG
+1152. [bug] failed to correctly parse the orginal ttl in SIG
records.
-1150. [bug] forwarders: it was possible to use freed memory.
+1151. [bug] forwarders: it was possible to use freed memory.
-1149. [support] zone rejected message to error level.
+1150. [support] zone rejected message to error level.
-1148. [bug] non-glue now logged to category load.
+1149. [bug] non-glue now logged to category load.
-1147. [bug] handle notify w/ SOA records better.
+1148. [bug] handle notify w/ SOA records better.
-1146. [support] be more gentle in handling bad system clocks.
+1147. [support] be more gentle in handling bad system clocks.
-1145. [port] solaris: 2.4 does not have pthreads.
+1146. [port] solaris: 2.4 does not have pthreads.
-1144. [support] log class w/ denied messages.
+1145. [support] log class w/ denied messages.
-1143. [bug] only use the query-source address, not port, for TCP
+1144. [bug] only use the query-source address, not port, for TCP
connections.
-1142. [doc] document change #924 better (doc/html/controls.html).
+1143. [doc] document change #924 better (doc/html/controls.html).
-1141. [bug] DESTDIR is not part of the nslookup help file path.
+1142. [bug] DESTDIR is not part of the nslookup help file path.
-1140. [bug] only reset interval timers if the value has changed.
+1141. [bug] only reset interval timers if the value has changed.
--- 8.2.3-REL released ---
-1139. [bug] inet_{net_,}ntop() had an off-by-one error.
+1140. [bug] inet_{net_,}ntop() had an off-by-one error.
-1138. [bug] purge_nonglue() should only be fatal on master
+1139. [bug] purge_nonglue() should only be fatal on master
servers.
1138. [port] add include/errs.h to various ports.
diff --git a/contrib/bind/README b/contrib/bind/README
index 09e0bf8..856be7d 100644
--- a/contrib/bind/README
+++ b/contrib/bind/README
@@ -10,6 +10,12 @@ artifacts including BIND, INN, and DHCP.
Note that BIND 8 is in "end-of-life", having been replaced by BIND 9. See
http://www.isc.org/ for more details.
+BIND 8.3.6 Highlights
+ Maintenance release.
+
+BIND 8.3.5 Highlights
+ Maintenance release.
+
BIND 8.3.4 Highlights
Security Fix DoS and buffer overrun.
diff --git a/contrib/bind/Version b/contrib/bind/Version
index e9273f2..68b8c56 100644
--- a/contrib/bind/Version
+++ b/contrib/bind/Version
@@ -1 +1 @@
-8.3.4-REL
+8.3.6-REL
diff --git a/contrib/bind/bin/dig/dig.c b/contrib/bind/bin/dig/dig.c
index 5bb6e7a..e18249f 100644
--- a/contrib/bind/bin/dig/dig.c
+++ b/contrib/bind/bin/dig/dig.c
@@ -1,5 +1,5 @@
#ifndef lint
-static const char rcsid[] = "$Id: dig.c,v 8.57 2002/06/18 02:26:49 marka Exp $";
+static const char rcsid[] = "$Id: dig.c,v 8.62.6.3 2003/06/02 10:06:30 marka Exp $";
#endif
/*
@@ -177,6 +177,7 @@ static const char rcsid[] = "$Id: dig.c,v 8.57 2002/06/18 02:26:49 marka Exp $";
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#include <time.h> /* time(2), ctime(3) */
#include "port_after.h"
@@ -206,15 +207,23 @@ static const char rcsid[] = "$Id: dig.c,v 8.57 2002/06/18 02:26:49 marka Exp $";
#define SAVEENV "DiG.env"
#define DIG_MAXARGS 30
+#ifndef DIG_PING
+#define DIG_PING "ping"
+#endif
+#ifndef DIG_TAIL
+#define DIG_TAIL "tail"
+#endif
+#ifndef DIG_PINGFMT
+#define DIG_PINGFMT "%s -s %s 56 3 | %s -3"
+#endif
+
static int eecode = 0;
static FILE * qfp;
-static char *defsrv, *srvmsg;
-static char defbuf[40] = "default -- ";
-static char srvbuf[1024];
static char myhostname[MAXHOSTNAMELEN];
static struct sockaddr_in myaddress;
static struct sockaddr_in6 myaddress6;
static u_int32_t ixfr_serial;
+static char ubuf[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:123.123.123.123")];
/* stuff for nslookup modules */
struct __res_state res;
@@ -260,7 +269,7 @@ main(int argc, char **argv) {
} packet_;
#define header (packet_.header_)
#define packet (packet_.packet_)
- u_char answer[64*1024];
+ u_char answer[NS_MAXMSG];
int n;
char doping[90];
char pingstr[50];
@@ -295,6 +304,7 @@ main(int argc, char **argv) {
ns_tsig_key key;
char *keyfile = NULL, *keyname = NULL;
+ const char *pingfmt = NULL;
res_ninit(&res);
res.pfcode = PRF_DEF;
@@ -315,7 +325,6 @@ main(int argc, char **argv) {
myaddress6.sin6_addr = in6addr_any;
myaddress6.sin6_port = 0; /*INPORT_ANY*/;
- defsrv = strcat(defbuf, inet_ntoa(res.nsaddr.sin_addr));
res_x = res;
/*
@@ -363,7 +372,6 @@ main(int argc, char **argv) {
vtmp++;
}
- res.id = 1;
gettimeofday(&tv1, NULL);
/*
@@ -408,6 +416,11 @@ main(int argc, char **argv) {
* deal with ....
*/
while (*(++argv) != NULL && **argv != '\0') {
+ if (strlen(cmd) + strlen(*argv) + 2 > sizeof (cmd)) {
+ fprintf(stderr,
+ "Argument too large for input buffer\n");
+ exit(1);
+ }
strcat(cmd, *argv);
strcat(cmd, " ");
if (**argv == '@') {
@@ -523,10 +536,14 @@ main(int argc, char **argv) {
port = htons(atoi(*argv));
break;
case 'P':
- if (argv[0][2] != '\0')
+ if (argv[0][2] != '\0') {
strcpy(pingstr, argv[0]+2);
- else
- strcpy(pingstr, "ping -s");
+ pingfmt =
+ "%s %s 56 3 | %s -3";
+ } else {
+ strcpy(pingstr, DIG_PING);
+ pingfmt = DIG_PINGFMT;
+ }
break;
case 'n':
if (argv[0][2] != '\0')
@@ -769,8 +786,6 @@ main(int argc, char **argv) {
* able to "put the resolver to work".
*/
- srvbuf[0] = 0;
- srvmsg = defsrv;
if (srv != NULL) {
int nscount = 0;
union res_sockaddr_union u[MAXNS];
@@ -803,31 +818,13 @@ main(int argc, char **argv) {
case AF_INET:
u[nscount].sin =
*(struct sockaddr_in*)cur->ai_addr;
- u[nscount++].sin6.sin6_port =
+ u[nscount++].sin.sin_port =
port;
break;
}
}
- if (nscount != 0) {
- char buf[80];
+ if (nscount != 0)
res_setservers(&res, u, nscount);
- srvmsg = strcat(srvbuf, srv);
- strcat(srvbuf, " ");
- buf[0] = '\0';
- switch (u[0].sin.sin_family) {
- case AF_INET:
- inet_ntop(AF_INET,
- &u[0].sin.sin_addr,
- buf, sizeof(buf));
- break;
- case AF_INET6:
- inet_ntop(AF_INET6,
- &u[0].sin6.sin6_addr,
- buf, sizeof(buf));
- break;
- }
- strcat(srvbuf, buf);
- }
freeaddrinfo(answer);
} else {
res = res_t;
@@ -836,7 +833,6 @@ main(int argc, char **argv) {
"; Bad server: %s -- using default server and timer opts\n",
srv);
fflush(stderr);
- srvmsg = defsrv;
srv = NULL;
}
printf("; (%d server%s found)\n",
@@ -849,7 +845,7 @@ main(int argc, char **argv) {
int nscount;
union res_sockaddr_union u[MAXNS];
nscount = res_getservers(&res, u, MAXNS);
- for (i = 0; i < res.nscount; i++) {
+ for (i = 0; i < nscount; i++) {
int x;
if (keyfile)
@@ -861,24 +857,11 @@ main(int argc, char **argv) {
&u[i].sin,
NULL);
if (res.pfcode & RES_PRF_STATS) {
- char buf[80];
exectime = time(NULL);
- buf[0] = '\0';
- switch (u[i].sin.sin_family) {
- case AF_INET:
- inet_ntop(AF_INET,
- &u[i].sin.sin_addr,
- buf, sizeof(buf));
- break;
- case AF_INET6:
- inet_ntop(AF_INET6,
- &u[i].sin6.sin6_addr,
- buf, sizeof(buf));
- break;
- }
printf(";; FROM: %s to SERVER: %s\n",
myhostname,
- buf);
+ p_sockun(u[RES_GETLAST(res)],
+ ubuf, sizeof(ubuf)));
printf(";; WHEN: %s", ctime(&exectime));
}
if (!x)
@@ -944,12 +927,10 @@ main(int argc, char **argv) {
if ((bytes_in = n) < 0) {
fflush(stdout);
n = 0 - n;
- msg[0]=0;
if (keyfile)
- strcat(msg,";; res_nsendsigned to server ");
+ strcpy(msg, ";; res_nsendsigned");
else
- strcat(msg,";; res_nsend to server ");
- strcat(msg,srvmsg);
+ strcat(msg, ";; res_nsend");
perror(msg);
fflush(stderr);
@@ -963,13 +944,17 @@ main(int argc, char **argv) {
(void) gettimeofday(&end_time, NULL);
if (res.pfcode & RES_PRF_STATS) {
+ union res_sockaddr_union u[MAXNS];
+
+ (void) res_getservers(&res, u, MAXNS);
query_time = difftv(start_time, end_time);
printf(";; Total query time: ");
prnttime(query_time);
putchar('\n');
exectime = time(NULL);
- printf(";; FROM: %s to SERVER: %s\n",
- myhostname, srvmsg);
+ printf(";; FROM: %s to SERVER: %s\n", myhostname,
+ p_sockun(u[RES_GETLAST(res)],
+ ubuf, sizeof(ubuf)));
printf(";; WHEN: %s", ctime(&exectime));
printf(";; MSG SIZE sent: %d rcvd: %d\n",
bytes_out, bytes_in);
@@ -980,9 +965,8 @@ main(int argc, char **argv) {
* Argh ... not particularly elegant. Should put in *real* ping code.
* Would necessitate root priviledges for icmp port though!
*/
- if (*pingstr) {
- sprintf(doping,"%s %s 56 3 | tail -3",pingstr,
- (srv==NULL)?(defsrv+10):srv);
+ if (*pingstr && srv != NULL) {
+ sprintf(doping, pingfmt, pingstr, srv, DIG_TAIL);
system(doping);
}
putchar('\n');
@@ -1038,7 +1022,7 @@ where: server,\n\
fputs("\
notes: defname and search don't work; use fully-qualified names.\n\
this is DiG version " VSTRING "\n\
- $Id: dig.c,v 8.57 2002/06/18 02:26:49 marka Exp $\n\
+ $Id: dig.c,v 8.62.6.3 2003/06/02 10:06:30 marka Exp $\n\
", stderr);
}
@@ -1383,7 +1367,7 @@ printZone(ns_type xfr, const char *zone, const struct sockaddr_in *sin,
sizeof myaddress) < 0){
int e = errno;
- fprintf(stderr, ";; bind(%s:%u): %s\n",
+ fprintf(stderr, ";; bind(%s port %u): %s\n",
inet_ntoa(myaddress.sin_addr),
ntohs(myaddress.sin_port),
strerror(e));
@@ -1407,7 +1391,7 @@ printZone(ns_type xfr, const char *zone, const struct sockaddr_in *sin,
int e = errno;
char buf[80];
- fprintf(stderr, ";; bind(%s:%u): %s\n",
+ fprintf(stderr, ";; bind(%s port %u): %s\n",
inet_ntop(AF_INET6, &myaddress6.sin6_addr,
buf, sizeof(buf)),
ntohs(myaddress6.sin6_port),
@@ -1799,7 +1783,7 @@ reverse6(char *domain, struct in6_addr *in6) {
in6->s6_addr[6] & 0x0f, (in6->s6_addr[6] >> 4) & 0x0f,
in6->s6_addr[5] & 0x0f, (in6->s6_addr[5] >> 4) & 0x0f,
in6->s6_addr[4] & 0x0f, (in6->s6_addr[4] >> 4) & 0x0f,
- in6->s6_addr[6] & 0x0f, (in6->s6_addr[3] >> 4) & 0x0f,
+ in6->s6_addr[3] & 0x0f, (in6->s6_addr[3] >> 4) & 0x0f,
in6->s6_addr[2] & 0x0f, (in6->s6_addr[2] >> 4) & 0x0f,
in6->s6_addr[1] & 0x0f, (in6->s6_addr[1] >> 4) & 0x0f,
in6->s6_addr[0] & 0x0f, (in6->s6_addr[0] >> 4) & 0x0f);
diff --git a/contrib/bind/bin/dnsquery/dnsquery.c b/contrib/bind/bin/dnsquery/dnsquery.c
index cbc1e85..b972658 100644
--- a/contrib/bind/bin/dnsquery/dnsquery.c
+++ b/contrib/bind/bin/dnsquery/dnsquery.c
@@ -1,5 +1,5 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: dnsquery.c,v 8.19 2002/04/12 03:03:48 marka Exp $";
+static const char rcsid[] = "$Id: dnsquery.c,v 8.19.10.1 2003/06/02 09:15:45 marka Exp $";
#endif /* not lint */
/*
@@ -85,7 +85,7 @@ main(int argc, char *argv[]) {
int c, n;
int nameservers = 0, class, type, len;
union res_sockaddr_union q_nsaddr[MAXNS];
- extern int optind, opterr;
+ extern int optind;
extern char *optarg;
int stream = 0, debug = 0;
diff --git a/contrib/bind/bin/host/host.c b/contrib/bind/bin/host/host.c
index 5bac200..7c0fa72 100644
--- a/contrib/bind/bin/host/host.c
+++ b/contrib/bind/bin/host/host.c
@@ -1,5 +1,5 @@
#ifndef lint
-static const char rcsid[] = "$Id: host.c,v 8.53 2002/06/18 02:34:02 marka Exp $";
+static const char rcsid[] = "$Id: host.c,v 8.55.8.1 2003/06/02 09:24:38 marka Exp $";
#endif /* not lint */
/*
@@ -136,7 +136,7 @@ static const char copyright[] =
#define ERROR -3
#define NONAUTH -4
-#define MY_PACKETSZ 64*1024 /* need this to hold tcp answers */
+#define MY_PACKETSZ NS_MAXMSG
typedef union {
HEADER qb1;
@@ -226,7 +226,7 @@ Usage: %s [-adlrwv] [-t querytype] [-c class] host [server]\n\
int
main(int argc, char **argv) {
struct sockaddr_storage addr;
- struct hostent *hp;
+ int ok = 0;
char *s;
int waitmode = 0;
int ncnames, ch;
@@ -383,7 +383,6 @@ main(int argc, char **argv) {
}
freeaddrinfo(answer);
}
- hp = NULL;
res.res_h_errno = TRY_AGAIN;
/*
* We handle default domains ourselves, thank you.
@@ -393,10 +392,10 @@ main(int argc, char **argv) {
if (list)
exit(ListHosts(getdomain, querytype ? querytype : ns_t_a));
ncnames = 5; nkeychains = 18;
- while (hp == NULL && res.res_h_errno == TRY_AGAIN) {
+ while (ok == 0 && res.res_h_errno == TRY_AGAIN) {
if (!ip) {
cname = NULL;
- hp = (struct hostent *)gethostinfo(getdomain);
+ ok = gethostinfo(getdomain);
getdomain[0] = 0; /* clear this query */
if (sigchase && (chase_step & SD_RR)) {
if (nkeychains-- == 0) {
@@ -413,7 +412,7 @@ main(int argc, char **argv) {
strcpy (getdomain, chase_domain);
strcat (getdomain, ".");
querytype = ns_t_sig;
- } else if (hp && !(chase_step & SD_SIG) &&
+ } else if (ok != 0 && !(chase_step & SD_SIG) &&
(chase_step & SD_BADSIG)) {
printf ("%s for %s not found, last verified key %s\n",
chase_step & SD_SIG ? "Key" : "Signature",
@@ -437,21 +436,17 @@ main(int argc, char **argv) {
sym_ntos(__p_type_syms, chase_type, NULL),
getdomain);
}
- hp = NULL;
+ ok = 0;
res.res_h_errno = TRY_AGAIN;
continue;
}
- } else {
- if (addrinfo(&addr) == 0)
- hp = NULL;
- else
- hp = (struct hostent *)1; /* XXX */
- }
+ } else
+ ok = addrinfo(&addr);
if (!waitmode)
break;
}
- if (hp == NULL) {
+ if (ok == 0) {
hperror(res.res_h_errno);
exit(1);
}
@@ -749,14 +744,14 @@ printinfo(const querybuf *answer, const u_char *eom, int filter, int isls,
case SERVFAIL:
res.res_h_errno = TRY_AGAIN;
return (0);
- case NOERROR:
- res.res_h_errno = NO_DATA;
- return (0);
- case FORMERR:
- case NOTIMP:
- case REFUSED:
- res.res_h_errno = NO_RECOVERY;
- return (0);
+ case NOERROR:
+ res.res_h_errno = NO_DATA;
+ return (0);
+ case FORMERR:
+ case NOTIMP:
+ case REFUSED:
+ res.res_h_errno = NO_RECOVERY;
+ return (0);
}
return (0);
}
@@ -1053,7 +1048,7 @@ pr_rr(const u_char *cp, const u_char *msg, FILE *file, int filter) {
}
if (doprint)
- fprintf(file, "(\n\t\t\t%lu\t;serial (version)",
+ fprintf(file, " (\n\t\t\t%lu\t;serial (version)",
ns_get32(cp));
cp += INT32SZ;
if (doprint)
@@ -1321,15 +1316,15 @@ pr_rr(const u_char *cp, const u_char *msg, FILE *file, int filter) {
/* original ttl */
origttl = cp;
if (doprint && verbose)
- fprintf(file, " %ld", ns_get32(cp));
+ fprintf(file, " %lu", ns_get32(cp));
cp += INT32SZ;
/* signature expiration */
if (doprint && verbose)
- fprintf(file, " %ld", ns_get32(cp));
+ fprintf(file, " %lu", ns_get32(cp));
cp += INT32SZ;
/* time signed */
if (doprint && verbose)
- fprintf(file, " %ld", ns_get32(cp));
+ fprintf(file, " %lu", ns_get32(cp));
cp += INT32SZ;
/* key footprint */
if (doprint && verbose)
@@ -1415,7 +1410,8 @@ pr_rr(const u_char *cp, const u_char *msg, FILE *file, int filter) {
}
default:
- fprintf (stderr, "Unknown algorithm %d\n", n);
+ if (doprint && verbose)
+ fprintf (stderr, "Unknown algorithm %d\n", n);
cp = cp1 + dlen;
break;
}
diff --git a/contrib/bind/bin/named-xfer/named-xfer.c b/contrib/bind/bin/named-xfer/named-xfer.c
index 27d9ac0..696c821 100644
--- a/contrib/bind/bin/named-xfer/named-xfer.c
+++ b/contrib/bind/bin/named-xfer/named-xfer.c
@@ -130,7 +130,7 @@ char copyright[] =
#if !defined(lint) && !defined(SABER)
static const char sccsid[] = "@(#)named-xfer.c 4.18 (Berkeley) 3/7/91";
-static const char rcsid[] = "$Id: named-xfer.c,v 8.121 2002/06/26 03:27:22 marka Exp $";
+static const char rcsid[] = "$Id: named-xfer.c,v 8.122.8.2 2003/06/02 05:59:56 marka Exp $";
#endif /* not lint */
#include "port_before.h"
@@ -242,8 +242,9 @@ LIST(tsig_node) tsig_list;
/*
* Debugging printf.
*/
-void
-dprintf(int level, const char *format, ...) {
+static void lprintf(int level, const char *format, ...) ISC_FORMAT_PRINTF(2, 3);
+static void
+lprintf(int level, const char *format, ...) {
va_list ap;
va_start(ap, format);
@@ -596,15 +597,15 @@ main(int argc, char *argv[]) {
#endif /* SIGUSR1&&SIGUSR2 */
if (dbfile)
- dprintf(1, "domain `%s'; file `%s'; serial %u\n",
+ lprintf(1, "domain `%s'; file `%s'; serial %u\n",
domain, dbfile, serial_no);
if (ixfrfile)
- dprintf(1, "domain `%s'; ixfrfile `%s'; serial %u\n",
+ lprintf(1, "domain `%s'; ixfrfile `%s'; serial %u\n",
domain, ixfrfile, serial_no);
if (tsigfile)
- dprintf(1, "tsigfile `%s'\n", tsigfile);
+ lprintf(1, "tsigfile `%s'\n", tsigfile);
buildservicelist();
buildprotolist();
@@ -626,7 +627,7 @@ main(int argc, char *argv[]) {
zp->z_source = dbfile;
zp->z_axfr_src = axfr_src;
zp->z_addrcnt = 0;
- dprintf(1, "zone found (%d): \"%s\", source = %s\n",
+ lprintf(1, "zone found (%d): \"%s\", source = %s\n",
zp->z_type,
(zp->z_origin[0] == '\0') ? "." : zp->z_origin,
zp->z_source);
@@ -670,15 +671,15 @@ main(int argc, char *argv[]) {
memcpy(&zp->z_addr[zp->z_addrcnt],
hp->h_addr,
INADDRSZ);
- dprintf(1, "Arg: \"%s\" %s\n", tm,((tmpsupportixfr) ? "IXFR":"AXFR"));
+ lprintf(1, "Arg: \"%s\" %s\n", tm,((tmpsupportixfr) ? "IXFR":"AXFR"));
}
if (++zp->z_addrcnt >= NSMAX) {
zp->z_addrcnt = NSMAX;
- dprintf(1, "NSMAX reached\n");
+ lprintf(1, "NSMAX reached\n");
break;
}
}
- dprintf(1, "addrcnt = %d\n", zp->z_addrcnt);
+ lprintf(1, "addrcnt = %d\n", zp->z_addrcnt);
res_ninit(&res);
res.options &= ~(RES_DEFNAMES | RES_DNSRCH | RES_RECURSE);
@@ -890,7 +891,7 @@ make_query(int fd, struct zoneinfo *zp, int type, u_int32_t serial_no,
if (type == T_IXFR) {
hp = (HEADER *) buf;
cp = buf;
- dprintf(1, "len = %d\n", n);
+ lprintf(1, "len = %d\n", n);
hp->nscount = htons(1+ntohs(hp->nscount));
cp += n;
n = dn_comp(zp->z_origin, cp, bufsize - (cp - buf), NULL, NULL);
@@ -911,7 +912,7 @@ make_query(int fd, struct zoneinfo *zp, int type, u_int32_t serial_no,
PUTLONG(0xABCD, cp); /* Expire */
PUTLONG(0x1776, cp); /* Min TTL */
n = cp - buf;
- dprintf(1, "len = %d\n", cp-buf);
+ lprintf(1, "len = %d\n", cp-buf);
}
tsig_signed = 0;
@@ -1116,7 +1117,7 @@ getzone(struct zoneinfo *zp, u_int32_t serial_no, int port) {
for (cnt = 0; cnt < zp->z_addrcnt; cnt++) {
methode = servermethode[cnt];
sin.sin_addr = zp->z_addr[cnt];
- dprintf(3, "address [%s] %s\n",
+ lprintf(3, "address [%s] %s\n",
inet_ntoa(sin.sin_addr),
(methode == ISIXFR) ? "IXFR":"AXFR");
}
@@ -1156,7 +1157,7 @@ getzone(struct zoneinfo *zp, u_int32_t serial_no, int port) {
sin.sin_family = AF_INET;
sin.sin_port = 0; /* "ANY" */
sin.sin_addr = z_axfr_src;
- dprintf(2, "binding to address [%s]\n",
+ lprintf(2, "binding to address [%s]\n",
inet_ntoa(sin.sin_addr));
if (bind(s, (struct sockaddr *)&sin, sizeof sin) < 0)
syslog(LOG_INFO, "warning: bind(%s) failed",
@@ -1166,11 +1167,11 @@ getzone(struct zoneinfo *zp, u_int32_t serial_no, int port) {
sin.sin_family = AF_INET;
sin.sin_port = port;
sin.sin_addr = zp->z_addr[cnt];
- dprintf(2, "connecting to server #%d [%s].%d\n",
+ lprintf(2, "connecting to server #%d [%s].%d\n",
cnt + 1, inet_ntoa(sin.sin_addr), ntohs(sin.sin_port));
if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) < 0) {
if (z_axfr_src.s_addr != 0) {
- dprintf(2, "connect failed, trying w/o -x");
+ lprintf(2, "connect failed, trying w/o -x");
z_axfr_src.s_addr = 0;
(void) my_close(s);
goto try_again;
@@ -1369,7 +1370,7 @@ getzone(struct zoneinfo *zp, u_int32_t serial_no, int port) {
}
}
if ((loop_cnt >= 1) && (soa_cnt < 2)) {
- dprintf(1,
+ lprintf(1,
"server %s %d rejected IXFR and responded with AXFR\n",
inet_ntoa(sin.sin_addr), soa_cnt);
methode = ISNOTIXFR;
@@ -1379,7 +1380,7 @@ getzone(struct zoneinfo *zp, u_int32_t serial_no, int port) {
break;
}
/* Skip to next record, if any. */
- dprintf(1, "skipping %s %s RR in response\n",
+ lprintf(1, "skipping %s %s RR in response\n",
name2, p_type(type));
tmp = cp4 + dlen;
loop_cnt++;
@@ -1391,7 +1392,7 @@ getzone(struct zoneinfo *zp, u_int32_t serial_no, int port) {
if (check_serial &&
!SEQ_GT(zp_start.z_serial, query_serial)) {
(void) my_close(s);
- dprintf(1,
+ lprintf(1,
"zone up-to-date, serial %u\n",
zp_start.z_serial);
if (ixfp) {
@@ -1540,7 +1541,7 @@ getzone(struct zoneinfo *zp, u_int32_t serial_no, int port) {
soa_cnt = 0;
goto axfr_response;
}
- dprintf(1, "need update, serial %u\n",
+ lprintf(1, "need update, serial %u\n",
zp_start.z_serial);
soa_cnt = 0;
hp = (HEADER *) buf;
@@ -1564,14 +1565,16 @@ getzone(struct zoneinfo *zp, u_int32_t serial_no, int port) {
serial_no, tsig_key,
buf, bufsize);
syslog(LOG_INFO,
- "send %s query %d to %s",
- p_type(query_type),
- cnt, inet_ntoa(sin.sin_addr));
- dprintf(1,
+ "send %s query %d to %s for %s",
+ p_type(query_type),
+ cnt, inet_ntoa(sin.sin_addr),
+ (*zp->z_origin != '\0') ?
+ zp->z_origin : ".");
+ lprintf(1,
"send %s query to %s\n",
p_type(query_type),
inet_ntoa(sin.sin_addr));
- dprintf(1,"bufsize = %d\n", bufsize);
+ lprintf(1,"bufsize = %d\n", bufsize);
if (n < 0) {
if (!quiet) {
if (zp->z_type == Z_STUB)
@@ -1645,7 +1648,7 @@ receive:
axfr_response:
if (query_type == T_IXFR)
if (hp->rcode != NOERROR) {
- dprintf(1,
+ lprintf(1,
"server %s did not support IXFR\n",
inet_ntoa(sin.sin_addr));
methode = ISNOTIXFR;
@@ -1655,7 +1658,7 @@ axfr_response:
if (ntohs(hp->qdcount) == 1) {
if ((query_type == T_IXFR) &&
(methode == ISIXFR)) {
- dprintf(1,
+ lprintf(1,
"server %s rejected IXFR and responded with AXFR\n",
inet_ntoa(sin.sin_addr));
methode = ISNOTIXFR;
@@ -1805,10 +1808,10 @@ axfr_response:
(void) fclose(ixfp);
ixfp = NULL;
}
- dprintf(2, "error receiving zone transfer\n");
+ lprintf(2, "error receiving zone transfer\n");
} else if (zp_start.z_serial == serial_no) {
(void) my_close(s);
- dprintf(1, "zone up-to-date, serial %u\n",
+ lprintf(1, "zone up-to-date, serial %u\n",
zp_start.z_serial);
if (ixfp) {
(void) fclose(ixfp);
@@ -1828,7 +1831,7 @@ axfr_response:
} else {
if (zp_finish.z_serial == query_serial) {
(void) my_close(s);
- dprintf(1, "zone up-to-date, serial %u\n",
+ lprintf(1, "zone up-to-date, serial %u\n",
zp_start.z_serial);
if (ixfp) {
(void) fclose(ixfp);
@@ -1843,7 +1846,7 @@ axfr_response:
"serial from [%s], zone %s: %u lower than current: %u\n",
inet_ntoa(sin.sin_addr), zp->z_origin,
zp_finish.z_serial, query_serial);
- dprintf(1,
+ lprintf(1,
"serial from [%s], zone %s: %u lower than current: %u\n",
inet_ntoa(sin.sin_addr), zp->z_origin,
zp_finish.z_serial, query_serial);
@@ -1883,7 +1886,7 @@ axfr_response:
soa_cnt = 0;
goto axfr_response;
}
- dprintf(1, "We have an IXFR\n");
+ lprintf(1, "We have an IXFR\n");
loop_cnt = 0;
while (SEQ_GT(zp_finish.z_serial, serial_no)) {
/*
@@ -2055,7 +2058,7 @@ writemsg(int rfd, const u_char *msg, int msglen) {
u_char len[INT16SZ];
int ret;
- __putshort(msglen, len);
+ ns_put16(msglen, len);
iov[0].iov_base = (char *)len;
iov[0].iov_len = INT16SZ;
DE_CONST(msg, iov[1].iov_base);
@@ -2171,7 +2174,7 @@ print_output(struct zoneinfo *zp, u_int32_t serial_no, u_char *msg,
}
escaped = (*origin++ == '\\') && !escaped;
}
- dprintf(3, "print_output: dname %s type %d class %d ttl %u\n",
+ lprintf(3, "print_output: dname %s type %d class %d ttl %u\n",
dname, type, class, ttl);
/*
* Convert the resource record data into the internal database format.
@@ -2430,13 +2433,13 @@ print_output(struct zoneinfo *zp, u_int32_t serial_no, u_char *msg,
}
if (n > MAXDATA) {
- dprintf(1, "update type %d: %d bytes is too much data\n",
+ lprintf(1, "update type %d: %d bytes is too much data\n",
type, n);
hp->rcode = FORMERR;
return (-1);
}
if (cp != rdatap + dlen) {
- dprintf(1,
+ lprintf(1,
"encoded rdata length is %u, but actual length was %u\n",
dlen, (u_int)(cp - rdatap));
hp->rcode = FORMERR;
@@ -2517,10 +2520,10 @@ print_output(struct zoneinfo *zp, u_int32_t serial_no, u_char *msg,
} else
soa_cnt++;
} else {
- dprintf(2, "SOA, serial %u\n",
+ lprintf(2, "SOA, serial %u\n",
zp_finish.z_serial);
if (zp_start.z_serial != zp_finish.z_serial) {
- dprintf(1, "serial changed, restart\n");
+ lprintf(1, "serial changed, restart\n");
restarts++;
if (restarts > MAX_XFER_RESTARTS) {
syslog(LOG_INFO,
@@ -3190,13 +3193,13 @@ ixfr_log(const u_char *msg, int len, int *delete, FILE *file,
ns_rr rr;
if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
- dprintf(1, "ixfr_log() failed\n");
+ lprintf(1, "ixfr_log() failed\n");
return (-1);
}
if (ns_initparse(msg, len, &handle) < 0) {
fprintf(file, ";; ns_initparse: %s\n", strerror(errno));
- dprintf(1, "ixfr_log() failed\n");
+ lprintf(1, "ixfr_log() failed\n");
return (-1);
}
opcode = (ns_opcode) ns_msg_getflag(handle, ns_f_opcode);
@@ -3207,7 +3210,7 @@ ixfr_log(const u_char *msg, int len, int *delete, FILE *file,
{
(void) fprintf(file,"ns_parserr() failed");
- dprintf(1, "ixfr_log() failed\n");
+ lprintf(1, "ixfr_log() failed\n");
return (-1);
}
type = (ns_type)rr.type;
diff --git a/contrib/bind/bin/named/db_defs.h b/contrib/bind/bin/named/db_defs.h
index 37b974c..05fb190 100644
--- a/contrib/bind/bin/named/db_defs.h
+++ b/contrib/bind/bin/named/db_defs.h
@@ -1,6 +1,6 @@
/*
* from db.h 4.16 (Berkeley) 6/1/90
- * $Id: db_defs.h,v 8.47.4.1 2002/11/14 13:22:24 marka Exp $
+ * $Id: db_defs.h,v 8.48 2002/11/17 14:51:50 marka Exp $
*/
/*
diff --git a/contrib/bind/bin/named/db_ixfr.c b/contrib/bind/bin/named/db_ixfr.c
index 231db12..fda89a0 100644
--- a/contrib/bind/bin/named/db_ixfr.c
+++ b/contrib/bind/bin/named/db_ixfr.c
@@ -1,5 +1,5 @@
#if !defined(lint) && !defined(SABER)
-static char rcsid[] = "$Id: db_ixfr.c,v 8.31 2002/01/02 04:47:10 marka Exp $";
+static char rcsid[] = "$Id: db_ixfr.c,v 8.32 2002/07/08 06:26:04 marka Exp $";
#endif
/*
@@ -857,8 +857,9 @@ ixfr_getdelta(struct zoneinfo *zp, FILE *fp, const char *filename, char *origin,
err++;
break;
}
- n = strtoul(buf, &cp, 10);
- if (n > 0xffff || *cp != '\0') {
+ errno = 0;
+ n = strtoul(buf, &cp, 10);
+ if (errno != 0 || n > 0xffff || *cp != '\0') {
err++;
break;
}
diff --git a/contrib/bind/bin/named/db_load.c b/contrib/bind/bin/named/db_load.c
index 12d0197..2b00729 100644
--- a/contrib/bind/bin/named/db_load.c
+++ b/contrib/bind/bin/named/db_load.c
@@ -1,6 +1,6 @@
#if !defined(lint) && !defined(SABER)
static const char sccsid[] = "@(#)db_load.c 4.38 (Berkeley) 3/2/91";
-static const char rcsid[] = "$Id: db_load.c,v 8.121 2001/11/12 21:22:22 marka Exp $";
+static const char rcsid[] = "$Id: db_load.c,v 8.123 2002/08/20 04:27:23 marka Exp $";
#endif /* not lint */
/*
@@ -1097,8 +1097,9 @@ db_load(const char *filename, const char *in_origin,
if (!getword(buf, sizeof buf, fp, 0) ||
!isdigit((unsigned char)buf[0]))
ERRTO("opaque length");
+ errno = 0;
n = strtoul(buf, &cp, 10);
- if (n > 0xffff || *cp != '\0')
+ if (errno != 0 || n > 0xffff || *cp != '\0')
ERRTO("opaque length");
multiline = 0;
i = isc_gethexstring(data, sizeof(data), n, fp,
@@ -1190,10 +1191,8 @@ db_load(const char *filename, const char *in_origin,
zp->z_origin, filename, msg);
}
}
- errs += purge_nonglue(zp->z_origin,
- (dataflags & DB_F_HINT) ? fcachetab :
- hashtab, zp->z_class,
- zp->z_type == z_master);
+ errs += purge_nonglue(zp, (dataflags & DB_F_HINT) ? fcachetab :
+ hashtab, zp->z_type == z_master);
cleanup:
while (filenames) {
fn = filenames;
@@ -1210,8 +1209,7 @@ db_load(const char *filename, const char *in_origin,
p_class(zp->z_class), zp->z_serial);
if ((zp->z_flags & Z_NOTIFY) != 0)
ns_stopnotify(zp->z_origin, zp->z_class);
- do_reload(zp->z_origin, zp->z_type, zp->z_class,
- loading);
+ do_reload(zp, loading);
} else
ns_info(ns_log_load,
"%s zone \"%s\" (%s) loaded (serial %u)",
diff --git a/contrib/bind/bin/named/db_sec.c b/contrib/bind/bin/named/db_sec.c
index 9c5bad2..5e03fb9 100644
--- a/contrib/bind/bin/named/db_sec.c
+++ b/contrib/bind/bin/named/db_sec.c
@@ -1,6 +1,6 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: db_sec.c,v 8.35.4.2 2002/11/14 13:24:44 marka Exp $";
+static const char rcsid[] = "$Id: db_sec.c,v 8.36 2002/11/17 14:51:50 marka Exp $";
#endif /* not lint */
/*
diff --git a/contrib/bind/bin/named/ns_config.c b/contrib/bind/bin/named/ns_config.c
index ad4de85..84973ce 100644
--- a/contrib/bind/bin/named/ns_config.c
+++ b/contrib/bind/bin/named/ns_config.c
@@ -1,5 +1,5 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: ns_config.c,v 8.135 2002/05/24 03:04:59 marka Exp $";
+static const char rcsid[] = "$Id: ns_config.c,v 8.136.8.1 2003/06/02 09:56:34 marka Exp $";
#endif /* not lint */
/*
@@ -562,7 +562,7 @@ update_zone_info(struct zoneinfo *zp, struct zoneinfo *new_zp) {
if (zp->z_source) {
zp->z_source = freestr(zp->z_source);
ns_stopxfrs(zp);
- purge_zone(zp->z_origin, fcachetab, zp->z_class);
+ purge_zone(zp, fcachetab);
}
zp->z_source = new_zp->z_source;
new_zp->z_source = NULL;
@@ -669,8 +669,7 @@ update_zone_info(struct zoneinfo *zp, struct zoneinfo *new_zp) {
* reloading so that NS records are present
* during the zone transfer.
*/
- do_reload(zp->z_origin, zp->z_type,
- zp->z_class, 1);
+ do_reload(zp, 1);
}
}
if (zp->z_source == NULL) {
@@ -1150,6 +1149,7 @@ new_options() {
#ifdef BIND_NOTIFY
op->notify = notify_yes;
#endif
+ op->edns_udp_size = EDNS_MESSAGE_SZ;
return (op);
}
diff --git a/contrib/bind/bin/named/ns_ctl.c b/contrib/bind/bin/named/ns_ctl.c
index c8fc907..ced69d5 100644
--- a/contrib/bind/bin/named/ns_ctl.c
+++ b/contrib/bind/bin/named/ns_ctl.c
@@ -1,5 +1,5 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: ns_ctl.c,v 8.47 2002/06/24 07:11:07 marka Exp $";
+static const char rcsid[] = "$Id: ns_ctl.c,v 8.48 2002/07/29 02:06:56 marka Exp $";
#endif /* not lint */
/*
@@ -1126,7 +1126,7 @@ verb_args(struct ctl_sctx *ctl, struct ctl_sess *sess,
*/
cp = saved_argv[pvt->argc++];
tp = pvt->text;
- while (cp && *cp != NULL)
+ while (cp && *cp != '\0')
if (*cp == '%' || *cp == ' ' ||
!isprint((unsigned char)*cp)) {
if (tp >= pvt->text + sizeof(pvt->text) - 4)
diff --git a/contrib/bind/bin/named/ns_defs.h b/contrib/bind/bin/named/ns_defs.h
index 79b8196..7c00a1f 100644
--- a/contrib/bind/bin/named/ns_defs.h
+++ b/contrib/bind/bin/named/ns_defs.h
@@ -1,6 +1,6 @@
/*
* from ns.h 4.33 (Berkeley) 8/23/90
- * $Id: ns_defs.h,v 8.121.2.1 2002/11/14 13:28:12 marka Exp $
+ * $Id: ns_defs.h,v 8.124.6.1 2003/06/02 09:56:34 marka Exp $
*/
/*
@@ -450,7 +450,8 @@ struct qserv {
struct timeval stime; /* time first query started */
unsigned int forwarder:1; /* this entry is for a forwarder */
unsigned int noedns:1; /* don't try edns */
- unsigned int nretry:30; /* # of times addr retried */
+ unsigned int lame:1; /* this server was lame, try it last */
+ unsigned int nretry:29; /* # of times addr retried */
u_int32_t serial; /* valid if Q_ZSERIAL */
};
@@ -793,6 +794,7 @@ typedef struct options {
u_int lame_ttl;
int minroots;
u_int16_t preferred_glue;
+ u_int16_t edns_udp_size;
enum notify notify;
} *options;
@@ -886,6 +888,7 @@ typedef enum ns_logging_categories {
ns_log_load,
ns_log_resp_checks,
ns_log_control,
+ ns_log_update_security,
ns_log_max_category
} ns_logging_categories;
diff --git a/contrib/bind/bin/named/ns_forw.c b/contrib/bind/bin/named/ns_forw.c
index 746257b..c527a80 100644
--- a/contrib/bind/bin/named/ns_forw.c
+++ b/contrib/bind/bin/named/ns_forw.c
@@ -1,6 +1,6 @@
#if !defined(lint) && !defined(SABER)
static const char sccsid[] = "@(#)ns_forw.c 4.32 (Berkeley) 3/3/91";
-static const char rcsid[] = "$Id: ns_forw.c,v 8.91 2002/05/24 03:04:57 marka Exp $";
+static const char rcsid[] = "$Id: ns_forw.c,v 8.92.6.1 2003/06/02 09:56:34 marka Exp $";
#endif /* not lint */
/*
@@ -240,7 +240,8 @@ ns_forw(struct databuf *nsp[], u_char *msg, int msglen,
if (!qp->q_addr[0].noedns)
smsglen += ns_add_opt(smsg, smsg + smsglen, smsgsize, 0, 0,
- EDNS_MESSAGE_SZ, 0, NULL, 0);
+ server_options->edns_udp_size,
+ 0, NULL, 0);
if (key != NULL) {
n = ns_sign(smsg, &smsglen, smsgsize, NOERROR, key, NULL, 0,
@@ -465,14 +466,14 @@ nslookup(struct databuf *nsp[], struct qinfo *qp,
struct hashbuf *tmphtp;
char *dname;
const char *fname;
- int oldn, naddr, class, found_arr, potential_ns, lame_ns;
+ int oldn, naddr, class, found_arr, potential_ns;
time_t curtime;
int found_auth6;
ns_debug(ns_log_default, 3, "nslookup(nsp=%p, qp=%p, \"%s\", d=%d)",
nsp, qp, syslogdname, qp->q_distance);
- lame_ns = potential_ns = 0;
+ potential_ns = 0;
naddr = n = qp->q_naddr;
curtime = (u_long) tt.tv_sec;
while ((nsdp = *nsp++) != NULL && n < NSMAX) {
@@ -492,18 +493,6 @@ nslookup(struct databuf *nsp[], struct qinfo *qp,
}
}
- /* skip lame servers */
- if ((nsdp->d_flags & DB_F_LAME) != 0) {
- time_t when;
- when = db_lame_find(qp->q_domain, nsdp);
- if (when != 0 && when > tt.tv_sec) {
- ns_debug(ns_log_default, 3,
- "skipping lame NS");
- lame_ns++;
- goto skipserver;
- }
- }
-
found_arr = 0;
found_auth6 = 0;
tmphtp = ((nsdp->d_flags & DB_F_HINT) ?fcachetab :hashtab);
@@ -617,6 +606,13 @@ nslookup(struct databuf *nsp[], struct qinfo *qp,
if (si && (si->flags & SERVER_INFO_EDNS) == 0)
qs->noedns = 1;
}
+ qs->lame = 0;
+ if ((nsdp->d_flags & DB_F_LAME) != 0) {
+ time_t when;
+ when = db_lame_find(qp->q_domain, nsdp);
+ if (when != 0 && when > tt.tv_sec)
+ qs->lame = 1;
+ }
qs->nretry = 0;
/*
* If this A RR has no RTT, initialize its RTT to a
@@ -708,15 +704,13 @@ nslookup(struct databuf *nsp[], struct qinfo *qp,
qp->q_naddr = n;
if (n == 0 && potential_ns == 0 && !NS_ZFWDTAB(qp->q_fzone)) {
static const char *complaint = "No possible A RRs";
- if (lame_ns != 0)
- complaint = "All possible A RR's lame";
if (sysloginfo && syslogdname &&
!haveComplained((u_long)syslogdname, (u_long)complaint))
{
ns_info(ns_log_default, "%s: query(%s) %s",
sysloginfo, syslogdname, complaint);
}
- return ((lame_ns == 0) ? -1 : -2);
+ return (-1);
}
/* Update the refcounts before the sort. */
for (i = naddr; i < (u_int)n; i++) {
@@ -792,6 +786,11 @@ int
qcomp(struct qserv *qs1, struct qserv *qs2) {
u_int rtt1, rtt2, rttr1, rttr2;
+ /* sort lame servers to last */
+ if (qs1->lame != qs2->lame)
+ return (qs1->lame - qs2->lame);
+
+ /* sort by rtt */
if (qs1->nsdata == NULL) {
rtt1 = 0;
rttr1 = 0;
@@ -968,6 +967,23 @@ retry(struct qinfo *qp, int samehost) {
if (qp->q_naddr > 0) {
qp->q_addr[n].noedns = 1;
++qp->q_addr[n].nretry;
+ /*
+ * Look for a non-lame server.
+ */
+ do {
+ if (++n >= (int)qp->q_naddr)
+ n = 0;
+ if ((qp->q_flags & Q_ZSERIAL) != 0 &&
+ qp->q_addr[n].serial != 0)
+ continue;
+ if (qp->q_addr[n].lame)
+ continue;
+ if (qp->q_addr[n].nretry < MAXRETRY)
+ goto found;
+ } while (n != qp->q_curaddr);
+ /*
+ * Look for any server including lame servers.
+ */
do {
if (++n >= (int)qp->q_naddr)
n = 0;
@@ -1071,7 +1087,8 @@ retry(struct qinfo *qp, int samehost) {
if (!qp->q_addr[n].noedns)
smsglen += ns_add_opt(smsg, smsg + smsglen, smsgsize, 0, 0,
- EDNS_MESSAGE_SZ, 0, NULL, 0);
+ server_options->edns_udp_size,
+ 0, NULL, 0);
if (key != NULL) {
n = ns_sign(smsg, &smsglen, smsgsize, NOERROR, key, NULL, 0,
diff --git a/contrib/bind/bin/named/ns_func.h b/contrib/bind/bin/named/ns_func.h
index e035d93..8b77283 100644
--- a/contrib/bind/bin/named/ns_func.h
+++ b/contrib/bind/bin/named/ns_func.h
@@ -90,7 +90,7 @@
/* ns_func.h - declarations for ns_*.c's externally visible functions
*
- * $Id: ns_func.h,v 8.117 2002/04/25 05:27:07 marka Exp $
+ * $Id: ns_func.h,v 8.120.8.1 2003/06/02 05:19:56 marka Exp $
*/
/* ++from ns_glue.c++ */
@@ -122,7 +122,6 @@ char * __newstr_record(size_t, int, const char *, int);
char * __savestr_record(const char *, int, const char *, int);
u_char * ina_put(struct in_addr ina, u_char *data);
u_char * savebuf(const u_char *, size_t, int);
-void dprintf(int level, const char *format, ...) ISC_FORMAT_PRINTF(2, 3);
#ifdef DEBUG_STRINGS
char * debug_newstr(size_t, int, const char *, int);
char * debug_savestr(const char *, int, const char *, int);
@@ -167,7 +166,7 @@ int send_msg(u_char *, int, struct qinfo *);
int findns(struct namebuf **, int,
struct databuf **, int *, int);
int finddata(struct namebuf *, int, int, HEADER *,
- char **, int *, int *);
+ char **, int *, int *, int, int);
int add_data(struct namebuf *,
struct databuf **,
u_char *, int, int *);
@@ -304,7 +303,7 @@ void ns_cleancache(evContext ctx, void *uap,
struct timespec inter);
void clean_cache_from(char *dname, struct hashbuf *htp);
void remove_zone(struct zoneinfo *, const char *);
-void purge_zone(const char *, struct hashbuf *, int);
+void purge_zone(struct zoneinfo *, struct hashbuf *);
void loadxfer(void);
void qserial_retrytime(struct zoneinfo *, time_t);
void qserial_query(struct zoneinfo *);
@@ -334,8 +333,8 @@ void ns_heartbeat(evContext ctx, void *uap,
void make_new_zones(void);
void free_zone(struct zoneinfo *);
struct zoneinfo * find_auth_zone(const char *, ns_class);
-int purge_nonglue(const char *dname, struct hashbuf *htp,
- int class, int log);
+int purge_nonglue(struct zoneinfo *, struct hashbuf *htp,
+ int log);
/* --from ns_maint.c-- */
/* ++from ns_sort.c++ */
@@ -347,7 +346,6 @@ void sort_response(u_char *, u_char *, int,
void ns_refreshtime(struct zoneinfo *, time_t);
void ns_retrytime(struct zoneinfo *, time_t);
time_t ns_init(const char *);
-void purgeandload(struct zoneinfo *zp);
enum context ns_ptrcontext(const char *owner);
enum context ns_ownercontext(int type, enum transport);
int ns_nameok(const struct qinfo *qry, const char *name,
@@ -357,7 +355,7 @@ int ns_nameok(const struct qinfo *qry, const char *name,
struct in_addr source);
int ns_wildcard(const char *name);
void zoneinit(struct zoneinfo *);
-void do_reload(const char *, int, int, int);
+void do_reload(struct zoneinfo *, int);
void ns_shutdown(void);
/* --from ns_init.c-- */
diff --git a/contrib/bind/bin/named/ns_glob.h b/contrib/bind/bin/named/ns_glob.h
index 8f052f5..35fcb6e 100644
--- a/contrib/bind/bin/named/ns_glob.h
+++ b/contrib/bind/bin/named/ns_glob.h
@@ -1,6 +1,6 @@
/*
* from ns.h 4.33 (Berkeley) 8/23/90
- * $Id: ns_glob.h,v 8.58 2002/06/05 04:53:50 marka Exp $
+ * $Id: ns_glob.h,v 8.59 2002/07/19 22:44:08 marka Exp $
*/
/*
@@ -309,6 +309,7 @@ DECL const struct ns_sym category_constants[]
{ ns_log_load, "load" },
{ ns_log_resp_checks, "response-checks" },
{ ns_log_control, "control" },
+ { ns_log_update_security, "update-security" },
{ 0, NULL }
}
#endif
diff --git a/contrib/bind/bin/named/ns_init.c b/contrib/bind/bin/named/ns_init.c
index 773192b..a0fce64 100644
--- a/contrib/bind/bin/named/ns_init.c
+++ b/contrib/bind/bin/named/ns_init.c
@@ -1,6 +1,6 @@
#if !defined(lint) && !defined(SABER)
static const char sccsid[] = "@(#)ns_init.c 4.38 (Berkeley) 3/21/91";
-static const char rcsid[] = "$Id: ns_init.c,v 8.76 2001/12/19 01:41:51 marka Exp $";
+static const char rcsid[] = "$Id: ns_init.c,v 8.77 2002/08/20 04:27:23 marka Exp $";
#endif /* not lint */
/*
@@ -107,6 +107,7 @@ static const char rcsid[] = "$Id: ns_init.c,v 8.76 2001/12/19 01:41:51 marka Exp
#ifdef DEBUG
static void content_zone(int, int);
#endif
+static void purgeandload(struct zoneinfo *zp);
/*
* Set new refresh time for zone. Use a random number in the last half of
@@ -237,7 +238,7 @@ zoneinit(struct zoneinfo *zp) {
result = stat(zp->z_source, &sb);
if (result != -1) {
ns_stopxfrs(zp);
- purge_zone(zp->z_origin, hashtab, zp->z_class);
+ purge_zone(zp, hashtab);
}
if (result == -1 ||
db_load(zp->z_source, zp->z_origin, zp, NULL, ISNOTIXFR))
@@ -265,8 +266,11 @@ zoneinit(struct zoneinfo *zp) {
* delegation to that child when it was first loaded.
*/
void
-do_reload(const char *domain, int type, int class, int mark) {
+do_reload(struct zoneinfo *ozp, int mark) {
struct zoneinfo *zp;
+ const char *domain = ozp->z_origin;
+ int type = ozp->z_type;
+ int class = ozp->z_class;
ns_debug(ns_log_config, 1, "do_reload: %s %d %d %d",
*domain ? domain : ".", type, class, mark);
@@ -295,9 +299,9 @@ do_reload(const char *domain, int type, int class, int mark) {
*/
ns_stopxfrs(zp);
if (type == z_hint || (type == z_stub && *domain == 0))
- purge_zone(domain, fcachetab, class);
+ purge_zone(ozp, fcachetab);
else
- purge_zone(domain, hashtab, class);
+ purge_zone(ozp, hashtab);
/*
* Reload
@@ -326,7 +330,7 @@ do_reload(const char *domain, int type, int class, int mark) {
domain = ""; /* root zone */
zp = find_zone(domain, class);
- if (zp != NULL) {
+ if (zp != NULL && zp->z_type != Z_HINT) {
ns_debug(ns_log_config, 1, "do_reload: matched %s",
*domain ? domain : ".");
if (mark)
@@ -338,7 +342,7 @@ do_reload(const char *domain, int type, int class, int mark) {
}
}
-void
+static void
purgeandload(struct zoneinfo *zp) {
#ifdef BIND_UPDATE
@@ -355,9 +359,9 @@ purgeandload(struct zoneinfo *zp) {
ns_stopxfrs(zp);
if (zp->z_type == Z_HINT)
- purge_zone(zp->z_origin, fcachetab, zp->z_class);
+ purge_zone(zp, fcachetab);
else
- purge_zone(zp->z_origin, hashtab, zp->z_class);
+ purge_zone(zp, hashtab);
zp->z_flags &= ~Z_AUTH;
@@ -563,10 +567,9 @@ ns_shutdown() {
if (zp->z_type) {
if (zp->z_type != z_hint && zp->z_type != z_cache) {
ns_stopxfrs(zp);
- purge_zone(zp->z_origin, hashtab, zp->z_class);
+ purge_zone(zp, hashtab);
} else if (zp->z_type == z_hint)
- purge_zone(zp->z_origin, fcachetab,
- zp->z_class);
+ purge_zone(zp, fcachetab);
free_zone_contents(zp, 1);
}
}
diff --git a/contrib/bind/bin/named/ns_ixfr.c b/contrib/bind/bin/named/ns_ixfr.c
index 0492bc0..b6d632d 100644
--- a/contrib/bind/bin/named/ns_ixfr.c
+++ b/contrib/bind/bin/named/ns_ixfr.c
@@ -1,5 +1,5 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: ns_ixfr.c,v 8.32 2002/05/18 01:02:57 marka Exp $";
+static const char rcsid[] = "$Id: ns_ixfr.c,v 8.33 2003/02/24 23:36:01 marka Exp $";
#endif /* not lint */
/*
@@ -408,6 +408,7 @@ ixfr_log_maint(struct zoneinfo *zp) {
int len;
struct stat db_sb;
struct stat sb;
+ size_t check_size;
static char buf[MAXBSIZE];
ns_debug(ns_log_default, 3, "ixfr_log_maint(%s)", zp->z_origin);
@@ -443,20 +444,13 @@ ixfr_log_maint(struct zoneinfo *zp) {
}
ns_debug(ns_log_default, 3, "%s, size %ld max %ld\n", zp->z_ixfr_base,
(long)sb.st_size, (long)zp->z_max_log_size_ixfr);
- if (zp->z_max_log_size_ixfr) {
- if (sb.st_size > zp->z_max_log_size_ixfr)
- seek = sb.st_size -
- (size_t)(zp->z_max_log_size_ixfr +
- (zp->z_max_log_size_ixfr * 0.10) );
- else
- seek = 0;
- } else {
- if (sb.st_size > (db_sb.st_size * 0.50))
- seek = sb.st_size - (size_t)((db_sb.st_size * 0.50)
- + ((db_sb.st_size * zp->z_max_log_size_ixfr) * 0.10));
- else
- seek = 0;
- }
+ check_size = zp->z_max_log_size_ixfr;
+ if (!check_size)
+ check_size = db_sb.st_size / 2;
+ if (sb.st_size > check_size)
+ seek = (sb.st_size - check_size) + (check_size / 10);
+ else
+ seek = 0;
ns_debug(ns_log_default, 3, "seek: %ld", (long)seek);
if (seek < 1) {
ns_debug(ns_log_default, 3, "%s does not need to be reduced",
diff --git a/contrib/bind/bin/named/ns_lexer.c b/contrib/bind/bin/named/ns_lexer.c
index b827162..3c09cf0 100644
--- a/contrib/bind/bin/named/ns_lexer.c
+++ b/contrib/bind/bin/named/ns_lexer.c
@@ -1,5 +1,5 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: ns_lexer.c,v 8.31 2002/05/24 03:05:03 marka Exp $";
+static const char rcsid[] = "$Id: ns_lexer.c,v 8.31.10.1 2003/06/02 09:56:35 marka Exp $";
#endif /* not lint */
/*
@@ -252,6 +252,7 @@ static struct keyword keywords[] = {
{"dump-file", T_DUMP_FILE},
{"dynamic", T_DYNAMIC},
{"edns", T_EDNS},
+ {"edns-udp-size", T_EDNS_UDP_SIZE},
{"explicit", T_EXPLICIT},
{"fail", T_FAIL},
{"fake-iquery", T_FAKE_IQUERY},
diff --git a/contrib/bind/bin/named/ns_main.c b/contrib/bind/bin/named/ns_main.c
index f12f285..d192ff6 100644
--- a/contrib/bind/bin/named/ns_main.c
+++ b/contrib/bind/bin/named/ns_main.c
@@ -1,6 +1,6 @@
#if !defined(lint) && !defined(SABER)
static const char sccsid[] = "@(#)ns_main.c 4.55 (Berkeley) 7/1/91";
-static const char rcsid[] = "$Id: ns_main.c,v 8.160 2002/06/24 07:06:55 marka Exp $";
+static const char rcsid[] = "$Id: ns_main.c,v 8.162.6.2 2003/06/08 22:08:02 marka Exp $";
#endif /* not lint */
/*
@@ -141,6 +141,10 @@ char copyright[] =
#include "named.h"
#undef MAIN_PROGRAM
+#ifdef TRUCLUSTER5
+# include <clua/clua.h>
+#endif
+
typedef void (*handler)(void);
typedef struct _savedg {
@@ -193,7 +197,8 @@ static int sq_dowrite(struct qstream *);
static void use_desired_debug(void);
static void stream_write(evContext, void *, int, int);
-static interface * if_find(struct in_addr, u_int16_t port);
+static interface * if_find(struct in_addr, u_int16_t port,
+ int anyport);
static void deallocate_everything(void),
stream_accept(evContext, void *, int,
@@ -825,8 +830,12 @@ stream_accept(evContext lev, void *uap, int rfd,
sp->s_ifp = ifp;
INSIST(sizeof sp->s_temp >= INT16SZ);
iov = evConsIovec(sp->s_temp, INT16SZ);
- INSIST_ERR(evRead(lev, rfd, &iov, 1, stream_getlen, sp, &sp->evID_r)
- != -1);
+ if (evRead(lev, rfd, &iov, 1, stream_getlen, sp, &sp->evID_r) == -1) {
+ ns_error(ns_log_default, "evRead(fd %d): %s",
+ rfd, strerror(errno));
+ sq_remove(sp);
+ return;
+ }
sp->flags |= STREAM_READ_EV;
ns_debug(ns_log_default, 1, "IP/TCP connection from %s (fd %d)",
sin_ntoa(sp->s_from), rfd);
@@ -968,8 +977,12 @@ stream_write(evContext ctx, void *uap, int fd, int evmask) {
sp->flags &= ~STREAM_WRITE_EV;
sp->s_refcnt = 0;
iov = evConsIovec(sp->s_temp, INT16SZ);
- INSIST_ERR(evRead(ctx, fd, &iov, 1, stream_getlen, sp, &sp->evID_r) !=
- -1);
+ if (evRead(ctx, fd, &iov, 1, stream_getlen, sp, &sp->evID_r) == -1) {
+ ns_error(ns_log_default, "evRead(fd %d): %s",
+ fd, strerror(errno));
+ sq_remove(sp);
+ return;
+ }
sp->flags |= STREAM_READ_EV;
}
@@ -1034,9 +1047,12 @@ stream_getlen(evContext lev, void *uap, int fd, int bytes) {
iov = evConsIovec(sp->s_buf, (sp->s_size <= sp->s_bufsize) ?
sp->s_size : sp->s_bufsize);
if (evRead(lev, sp->s_rfd, &iov, 1, stream_getmsg, sp, &sp->evID_r)
- == -1)
- ns_panic(ns_log_default, 1, "evRead(fd %d): %s",
+ == -1) {
+ ns_error(ns_log_default, "evRead(fd %d): %s",
sp->s_rfd, strerror(errno));
+ sq_remove(sp);
+ return;
+ }
sp->flags |= STREAM_READ_EV;
}
@@ -1258,6 +1274,11 @@ getnetconf(int periodic_scan) {
ip_match_element ime;
u_char *mask_ptr;
struct in_addr mask;
+#ifdef TRUCLUSTER5
+ struct sockaddr clua_addr;
+ int clua_cnt, clua_tot;
+#endif
+ int clua_buf;
if (iflist_initialized) {
if (iflist_dont_rescan)
@@ -1287,8 +1308,19 @@ getnetconf(int periodic_scan) {
free_ip_match_list(local_networks);
local_networks = new_ip_match_list();
+#ifdef TRUCLUSTER5
+ /* Find out how many cluster aliases there are */
+ clua_cnt = 0;
+ clua_tot = 0;
+ while (clua_getaliasaddress(&clua_addr, &clua_cnt) == CLUA_SUCCESS)
+ clua_tot ++;
+ clua_buf = clua_tot * sizeof(ifreq);
+#else
+ clua_buf = 0;
+#endif
+
for (;;) {
- buf = memget(bufsiz);
+ buf = memget(bufsiz + clua_buf);
if (!buf)
ns_panic(ns_log_default, 1, "memget(interface)");
ifc.ifc_len = bufsiz;
@@ -1323,10 +1355,29 @@ getnetconf(int periodic_scan) {
if (bufsiz > 1000000)
ns_panic(ns_log_default, 1,
"get interface configuration: maximum buffer size exceeded");
- memput(buf, bufsiz);
+ memput(buf, bufsiz + clua_buf);
bufsiz += 4096;
}
+#ifdef TRUCLUSTER5
+ /* Get the cluster aliases and create interface entries for them */
+ clua_cnt = 0;
+ while (clua_tot--) {
+ memset(&ifreq, 0, sizeof (ifreq));
+ if (clua_getaliasaddress(&ifreq.ifr_addr, &clua_cnt) !=
+ CLUA_SUCCESS)
+ /*
+ * It is possible the count of aliases has changed; if
+ * it has increased, they won't be found this pass.
+ * If has decreased, stop the loop early. */
+ break;
+ strcpy(ifreq.ifr_name, "lo0");
+ memcpy(ifc.ifc_buf + ifc.ifc_len, &ifreq, sizeof (ifreq));
+ ifc.ifc_len += sizeof (ifreq);
+ bufsiz += sizeof (ifreq);
+ }
+#endif
+
ns_debug(ns_log_default, 2, "getnetconf: SIOCGIFCONF: ifc_len = %d",
ifc.ifc_len);
@@ -1398,7 +1449,7 @@ getnetconf(int periodic_scan) {
* point interfaces, then the local address
* may appear more than once.
*/
- ifp = if_find(ina, li->port);
+ ifp = if_find(ina, li->port, 0);
if (ifp != NULL) {
ns_debug(ns_log_default, 1,
"dup interface addr [%s].%u (%s)",
@@ -1835,7 +1886,7 @@ opensocket_f() {
* we'll notice we're in trouble if it goes away.
*/
ifp = if_find(server_options->query_source.sin_addr,
- server_options->query_source.sin_port);
+ server_options->query_source.sin_port, 0);
if (ifp != NULL) {
ifp->flags |= INTERFACE_FORWARDING;
prev_ifp = ifp;
@@ -2155,7 +2206,7 @@ sq_write(struct qstream *qs, const u_char *buf, int len) {
return (-1);
}
}
- __putshort(len, qs->s_wbuf_free);
+ ns_put16(len, qs->s_wbuf_free);
qs->s_wbuf_free += NS_INT16SZ;
memcpy(qs->s_wbuf_free, buf, len);
qs->s_wbuf_free += len;
@@ -2196,9 +2247,12 @@ sq_done(struct qstream *sp) {
}
iov = evConsIovec(sp->s_temp, INT16SZ);
if (evRead(ev, sp->s_rfd, &iov, 1, stream_getlen, sp, &sp->evID_r) ==
- -1)
- ns_panic(ns_log_default, 1, "evRead(fd %d): %s",
+ -1) {
+ ns_error(ns_log_default, "evRead(fd %d): %s",
sp->s_rfd, strerror(errno));
+ sq_remove(sp);
+ return;
+ }
sp->flags |= STREAM_READ_EV;
}
@@ -2302,26 +2356,25 @@ net_mask(struct in_addr ina) {
int
aIsUs(struct in_addr addr) {
- if (ina_hlong(addr) == INADDR_ANY || if_find(addr, 0) != NULL)
+ if (ina_hlong(addr) == INADDR_ANY || if_find(addr, 0, 1) != NULL)
return (1);
return (0);
}
/* interface *
- * if_find(addr, port)
+ * if_find(addr, port, anyport)
* scan our list of interface addresses for "addr" and port.
- * port == 0 means match any port
* returns:
* pointer to interface with this address/port, or NULL if there isn't
* one.
*/
static interface *
-if_find(struct in_addr addr, u_int16_t port) {
+if_find(struct in_addr addr, u_int16_t port, int anyport) {
interface *ifp;
for (ifp = HEAD(iflist); ifp != NULL; ifp = NEXT(ifp, link))
if (ina_equal(addr, ifp->addr))
- if (port == 0 || ifp->port == port)
+ if (anyport || ifp->port == port)
break;
return (ifp);
}
diff --git a/contrib/bind/bin/named/ns_maint.c b/contrib/bind/bin/named/ns_maint.c
index be4b6f9..0618ab9 100644
--- a/contrib/bind/bin/named/ns_maint.c
+++ b/contrib/bind/bin/named/ns_maint.c
@@ -1,6 +1,6 @@
#if !defined(lint) && !defined(SABER)
static const char sccsid[] = "@(#)ns_maint.c 4.39 (Berkeley) 3/2/91";
-static const char rcsid[] = "$Id: ns_maint.c,v 8.136 2002/06/26 03:27:20 marka Exp $";
+static const char rcsid[] = "$Id: ns_maint.c,v 8.137.8.1 2003/06/02 05:34:25 marka Exp $";
#endif /* not lint */
/*
@@ -134,7 +134,7 @@ static void startxfer(struct zoneinfo *),
abortxfer(struct zoneinfo *),
purge_z_2(struct hashbuf *, int);
static int purge_nonglue_2(const char *, struct hashbuf *,
- int, int, int);
+ int, int, int, int);
#ifndef HAVE_SPAWNXFER
static pid_t spawnxfer(char **, struct zoneinfo *);
@@ -181,7 +181,7 @@ zone_maint(struct zoneinfo *zp) {
if ((zp->z_flags & Z_NOTIFY) != 0)
ns_stopnotify(zp->z_origin, zp->z_class);
/* calls purge_zone */
- do_reload(zp->z_origin, zp->z_type, zp->z_class, 0);
+ do_reload(zp, 0);
/* reset zone state */
if (!haveComplained((u_long)zp, (u_long)stale)) {
ns_notice(ns_log_default,
@@ -906,7 +906,7 @@ startxfer(struct zoneinfo *zp) {
last = &buffer[sizeof buffer - 1]; /* leave room for \0 */
for (i = 0; i < argc; i++) {
len = strlen(argv[i]);
- if (curr + len + 1 >= last) {
+ if (len + 1 >= last - curr) {
ns_debug(ns_log_xfer_in, 1,
"xfer args debug printout truncated");
break;
@@ -1215,7 +1215,7 @@ remove_zone(struct zoneinfo *zp, const char *verb) {
zp->z_xferpid = 0;
ns_need(main_need_tryxfer);
}
- do_reload(zp->z_origin, zp->z_type, zp->z_class, 1);
+ do_reload(zp, 1);
ns_notice(ns_log_config, "%s zone \"%s\" (%s) %s",
zoneTypeString(zp->z_type), zp->z_origin,
p_class(zp->z_class), verb);
@@ -1228,17 +1228,30 @@ remove_zone(struct zoneinfo *zp, const char *verb) {
}
int
-purge_nonglue(const char *dname, struct hashbuf *htp, int class, int log) {
+purge_nonglue(struct zoneinfo *zp, struct hashbuf *htp, int log) {
+ const char *dname = zp->z_origin;
const char *fname;
struct namebuf *np;
struct hashbuf *phtp = htp;
int root_zone = 0;
int errs = 0;
+ int zone = zp - zones;
+ struct databuf *pdp, *dp;
+ int class = zp->z_class;
- ns_debug(ns_log_default, 1, "purge_zone(%s,%d)", dname, class);
+ ns_debug(ns_log_default, 1, "purge_nonglue(%s/%d)", dname, class);
if ((np = nlookup(dname, &phtp, &fname, 0)) && dname == fname &&
!ns_wildcard(NAME(*np))) {
+ for (pdp = NULL, dp = np->n_data; dp != NULL; (void)NULL) {
+ if (dp->d_class == class && dp->d_zone != zone)
+ dp = rm_datum(dp, np, pdp, NULL);
+ else {
+ pdp = dp;
+ dp = dp->d_next;
+ }
+ }
+
if (*dname == '\0')
root_zone = 1;
@@ -1249,7 +1262,7 @@ purge_nonglue(const char *dname, struct hashbuf *htp, int class, int log) {
h = htp;
else
h = np->n_hash;
- errs += purge_nonglue_2(dname, h, class, 0, log);
+ errs += purge_nonglue_2(dname, h, class, 0, log, zone);
if (h->h_cnt == 0 && !root_zone) {
rm_hash(np->n_hash);
np->n_hash = NULL;
@@ -1290,7 +1303,7 @@ valid_glue(struct databuf *dp, char *name, int belowcut) {
static int
purge_nonglue_2(const char *dname, struct hashbuf *htp, int class,
- int belowcut, int log)
+ int belowcut, int log, int zone)
{
struct databuf *dp, *pdp;
struct namebuf *np, *pnp, *npn;
@@ -1315,10 +1328,16 @@ purge_nonglue_2(const char *dname, struct hashbuf *htp, int class,
for (pdp = NULL, dp = np->n_data;
dp != NULL;
(void)NULL) {
- if (dp->d_class == class &&
- zonecut &&
+ int delete = 0;
+ if (!zonecut &&
+ dp->d_class == class &&
+ dp->d_zone != zone)
+ delete = 1;
+ if (zonecut &&
+ dp->d_class == class &&
!valid_glue(dp, name, belowcut)) {
- if (log)
+ if (log &&
+ dp->d_zone == zone) {
ns_error(ns_log_load,
"zone: %s/%s: non-glue record %s bottom of zone: %s/%s",
*dname ? dname : ".",
@@ -1327,11 +1346,14 @@ purge_nonglue_2(const char *dname, struct hashbuf *htp, int class,
"at",
*name ? name : ".",
p_type(dp->d_type));
+ errs++;
+ }
+ delete = 1;
+ }
+ if (delete)
dp = rm_datum(dp, np, pdp,
NULL);
- if (log)
- errs++;
- } else {
+ else {
pdp = dp;
dp = dp->d_next;
}
@@ -1346,7 +1368,7 @@ purge_nonglue_2(const char *dname, struct hashbuf *htp, int class,
class,
zonecut ||
belowcut,
- log);
+ log, zone);
/* if now empty, free it */
if (np->n_hash->h_cnt == 0) {
@@ -1369,18 +1391,20 @@ purge_nonglue_2(const char *dname, struct hashbuf *htp, int class,
}
void
-purge_zone(const char *dname, struct hashbuf *htp, int class) {
+purge_zone(struct zoneinfo *zp, struct hashbuf *htp) {
const char *fname;
struct databuf *dp, *pdp;
struct namebuf *np;
struct hashbuf *phtp = htp;
int root_zone = 0;
+ int zone = zp - zones;
+ char *dname = zp->z_origin;
- ns_debug(ns_log_default, 1, "purge_zone(%s,%d)", dname, class);
+ ns_debug(ns_log_default, 1, "purge_zone(%s)", dname);
if ((np = nlookup(dname, &phtp, &fname, 0)) && dname == fname &&
!ns_wildcard(NAME(*np))) {
for (pdp = NULL, dp = np->n_data; dp != NULL; (void)NULL) {
- if (dp->d_class == class)
+ if (dp->d_zone == zone)
dp = rm_datum(dp, np, pdp, NULL);
else {
pdp = dp;
@@ -1398,7 +1422,7 @@ purge_zone(const char *dname, struct hashbuf *htp, int class) {
h = htp;
else
h = np->n_hash;
- purge_z_2(h, class);
+ purge_z_2(h, zone);
if (h->h_cnt == 0 && !root_zone) {
rm_hash(np->n_hash);
np->n_hash = NULL;
@@ -1411,10 +1435,7 @@ purge_zone(const char *dname, struct hashbuf *htp, int class) {
}
static void
-purge_z_2(htp, class)
- struct hashbuf *htp;
- int class;
-{
+purge_z_2(struct hashbuf *htp, int zone) {
struct databuf *dp, *pdp;
struct namebuf *np, *pnp, *npn;
struct namebuf **npp, **nppend;
@@ -1422,27 +1443,25 @@ purge_z_2(htp, class)
nppend = htp->h_tab + htp->h_size;
for (npp = htp->h_tab; npp < nppend; npp++) {
for (pnp = NULL, np = *npp; np != NULL; np = npn) {
- if (!bottom_of_zone(np->n_data, class)) {
- for (pdp = NULL, dp = np->n_data;
- dp != NULL;
- (void)NULL) {
- if (dp->d_class == class)
- dp = rm_datum(dp, np, pdp,
- NULL);
- else {
- pdp = dp;
- dp = dp->d_next;
- }
+ for (pdp = NULL, dp = np->n_data;
+ dp != NULL;
+ (void)NULL) {
+ if (dp->d_zone == zone)
+ dp = rm_datum(dp, np, pdp,
+ NULL);
+ else {
+ pdp = dp;
+ dp = dp->d_next;
}
- if (np->n_hash) {
- /* call recursively to rm subdomains */
- purge_z_2(np->n_hash, class);
+ }
+ if (np->n_hash) {
+ /* call recursively to rm subdomains */
+ purge_z_2(np->n_hash, zone);
- /* if now empty, free it */
- if (np->n_hash->h_cnt == 0) {
- rm_hash(np->n_hash);
- np->n_hash = NULL;
- }
+ /* if now empty, free it */
+ if (np->n_hash->h_cnt == 0) {
+ rm_hash(np->n_hash);
+ np->n_hash = NULL;
}
}
@@ -1804,12 +1823,12 @@ loadxfer(void) {
isixfr = ISIXFR;
} else {
tmpnom = zp->z_source;
- purge_zone(zp->z_origin, hashtab, zp->z_class);
+ purge_zone(zp, hashtab);
isixfr = ISNOTIXFR;
}
if (zp->z_xferpid == XFER_ISAXFRIXFR) {
tmpnom= zp->z_source;
- purge_zone(zp->z_origin, hashtab, zp->z_class);
+ purge_zone(zp, hashtab);
isixfr = ISNOTIXFR;
}
@@ -1892,7 +1911,7 @@ reload_master(struct zoneinfo *zp) {
(zp->z_flags & Z_NEED_DUMP) != 0))
(void) zonedump(zp, ISNOTIXFR);
#endif
- purge_zone(zp->z_origin, hashtab, zp->z_class);
+ purge_zone(zp, hashtab);
ns_debug(ns_log_config, 1, "reloading zone");
#ifdef BIND_UPDATE
if ((zp->z_flags & Z_DYNAMIC) != 0) {
diff --git a/contrib/bind/bin/named/ns_ncache.c b/contrib/bind/bin/named/ns_ncache.c
index 8e79793..efabc33 100644
--- a/contrib/bind/bin/named/ns_ncache.c
+++ b/contrib/bind/bin/named/ns_ncache.c
@@ -1,5 +1,5 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: ns_ncache.c,v 8.29.4.1 2002/11/14 13:41:31 marka Exp $";
+static const char rcsid[] = "$Id: ns_ncache.c,v 8.30 2002/11/17 14:51:51 marka Exp $";
#endif /* not lint */
/*
diff --git a/contrib/bind/bin/named/ns_parser.y b/contrib/bind/bin/named/ns_parser.y
index 79f34b1..c8ddc72 100644
--- a/contrib/bind/bin/named/ns_parser.y
+++ b/contrib/bind/bin/named/ns_parser.y
@@ -1,6 +1,6 @@
%{
#if !defined(lint) && !defined(SABER)
-static char rcsid[] = "$Id: ns_parser.y,v 8.80 2002/05/24 03:05:01 marka Exp $";
+static char rcsid[] = "$Id: ns_parser.y,v 8.81.8.1 2003/06/02 09:56:35 marka Exp $";
#endif /* not lint */
/*
@@ -158,6 +158,7 @@ int yyparse();
%token T_MAX_NCACHE_TTL T_HAS_OLD_CLIENTS T_RFC2308_TYPE1
%token T_LAME_TTL T_MIN_ROOTS
%token T_TREAT_CR_AS_SPACE
+%token T_EDNS_UDP_SIZE
/* Items used for the "logging" statement: */
%token T_LOGGING T_CATEGORY T_CHANNEL T_SEVERITY T_DYNAMIC
@@ -609,6 +610,16 @@ option: /* Empty */
if ($2 >= 1)
current_options->minroots = $2;
}
+ |
+ | T_EDNS_UDP_SIZE L_NUMBER
+ {
+ if ($2 < 512)
+ current_options->edns_udp_size = 512;
+ else if ($2 > EDNS_MESSAGE_SZ)
+ current_options->edns_udp_size = EDNS_MESSAGE_SZ;
+ else
+ current_options->edns_udp_size = $2;
+ }
| error
;
@@ -711,6 +722,7 @@ ordering_type: /* nothing */
}
(void)freestr($2);
}
+ ;
ordering_name: /* nothing */
{
@@ -726,7 +738,7 @@ ordering_name: /* nothing */
}
/* XXX Should do any more name validation here? */
}
-
+ ;
rrset_ordering_element: ordering_class ordering_type ordering_name T_ORDER L_STRING
{
@@ -749,7 +761,7 @@ rrset_ordering_element: ordering_class ordering_type ordering_name T_ORDER L_STR
$$ = new_rrset_order_element($1, $2, $3, o);
}
}
-
+ ;
transfer_format: T_ONE_ANSWER
{
@@ -1434,7 +1446,7 @@ key_list: key_list_element L_EOS
| error
;
-dummy_key_list_element: key_ref;
+dummy_key_list_element: key_ref { /* empty */ } ;
dummy_key_list: dummy_key_list_element L_EOS
| dummy_key_list dummy_key_list_element L_EOS
diff --git a/contrib/bind/bin/named/ns_req.c b/contrib/bind/bin/named/ns_req.c
index 3b4a0bf..1272f04 100644
--- a/contrib/bind/bin/named/ns_req.c
+++ b/contrib/bind/bin/named/ns_req.c
@@ -1,6 +1,6 @@
#if !defined(lint) && !defined(SABER)
static const char sccsid[] = "@(#)ns_req.c 4.47 (Berkeley) 7/1/91";
-static const char rcsid[] = "$Id: ns_req.c,v 8.169.2.1 2002/11/14 13:02:48 marka Exp $";
+static const char rcsid[] = "$Id: ns_req.c,v 8.175.6.2 2003/06/02 09:56:35 marka Exp $";
#endif /* not lint */
/*
@@ -563,8 +563,9 @@ ns_req(u_char *msg, int msglen, int buflen, struct qstream *qsp,
ns_name_rollback(cp, (const u_char **)dnptrs,
(const u_char **)dnptrs_end);
if (opt > 0) {
- n = ns_add_opt(msg, cp, buflen_orig, 0,
- rcode, EDNS_MESSAGE_SZ, 0, NULL, 0);
+ n = ns_add_opt(msg, cp, buflen_orig, 0, rcode,
+ server_options->edns_udp_size,
+ 0, NULL, 0);
if (n < 0) {
hp->qdcount = htons(0);
goto sign_again;
@@ -604,8 +605,9 @@ ns_req(u_char *msg, int msglen, int buflen, struct qstream *qsp,
msglen += n;
if (opt > 0) {
buflen += opt_size;
- n = ns_add_opt(msg, cp, msglen + buflen, 0,
- rcode, EDNS_MESSAGE_SZ, 0, NULL, 0);
+ n = ns_add_opt(msg, cp, msglen + buflen, 0, rcode,
+ server_options->edns_udp_size,
+ 0, NULL, 0);
INSIST(n > 0);
cp += n;
buflen -= n;
@@ -856,6 +858,9 @@ req_query(HEADER *hp, u_char **cpp, u_char *eom, struct qstream *qsp,
DST_KEY *in_key = (in_tsig != NULL) ? in_tsig->key : NULL;
int access_class;
int adjustlen = 0;
+ int pass = 0;
+ char tsig_keyname_mesg[15+MAXDNAME] = "";
+ int glueok;
nameserIncr(from.sin_addr, nssRcvdQ);
@@ -900,7 +905,6 @@ req_query(HEADER *hp, u_char **cpp, u_char *eom, struct qstream *qsp,
return (Finish);
}
*cpp += n;
- answers = *cpp;
if (*cpp + 2 * INT16SZ > eom) {
ns_debug(ns_log_default, 1,
"FORMERR Query message length short");
@@ -1017,6 +1021,7 @@ req_query(HEADER *hp, u_char **cpp, u_char *eom, struct qstream *qsp,
#endif /*QRYLOG*/
try_again:
+ pass++;
foundname = 0;
ns_debug(ns_log_default, 1, "req: nlookup(%s) id %d type=%d class=%d",
dname, ntohs(hp->id), type, class);
@@ -1303,13 +1308,19 @@ req_query(HEADER *hp, u_char **cpp, u_char *eom, struct qstream *qsp,
return (Refuse);
}
- if (type == ns_t_ixfr) {
- ns_info(ns_log_security, "approved %s from %s for \"%s\"",
- (ixfr_found) ? p_type(type) : "IXFR/AXFR",
- sin_ntoa(from), *dname ? dname : ".");
- } else
- ns_info(ns_log_security, "approved %s from %s for \"%s\"",
- p_type(type), sin_ntoa(from), *dname ? dname : ".");
+ if (in_key != NULL)
+ sprintf(tsig_keyname_mesg, " (TSIG key \"%s\")",
+ in_key->dk_key_name);
+
+ if (type == ns_t_ixfr)
+ ns_info(ns_log_security, "approved %s from %s for \"%s\"%s",
+ (ixfr_found) ? p_type(type) : "IXFR/AXFR",
+ sin_ntoa(from), *dname ? dname : ".",
+ tsig_keyname_mesg);
+ else
+ ns_info(ns_log_security, "approved %s from %s for \"%s\"%s",
+ p_type(type), sin_ntoa(from), *dname ? dname : ".",
+ tsig_keyname_mesg);
}
/*
@@ -1354,7 +1365,7 @@ req_query(HEADER *hp, u_char **cpp, u_char *eom, struct qstream *qsp,
(dp->d_class == class)) {
#ifdef RETURNSOA
n = finddata(np, class, T_SOA, hp, &dname,
- buflenp, &count);
+ buflenp, &count, pass, 1);
if (n != 0) {
if (count) {
*cpp += n;
@@ -1392,8 +1403,9 @@ req_query(HEADER *hp, u_char **cpp, u_char *eom, struct qstream *qsp,
* If not NXDOMAIN, the NOERROR_NODATA record might be
* anywhere in the chain. Have to go through the grind.
*/
-
- n = finddata(np, class, type, hp, &dname, buflenp, &count);
+ glueok = !NS_OPTION_P(OPTION_NORECURSE);
+ n = finddata(np, class, type, hp, &dname, buflenp, &count, pass,
+ glueok);
if (n == 0) {
/*
* NO data available. Refuse transfer requests, or
@@ -1509,7 +1521,8 @@ req_query(HEADER *hp, u_char **cpp, u_char *eom, struct qstream *qsp,
ns_debug(ns_log_default, 3, "req: leaving (%s, rcode %d)",
dname, hp->rcode);
if (class != C_ANY) {
- hp->aa = 1;
+ if (!cname)
+ hp->aa = 1;
if (np && (!foundname || !founddata)) {
n = doaddauth(hp, *cpp, *buflenp, np, nsp[0]);
*cpp += n;
@@ -2323,9 +2336,9 @@ doaddinfo(HEADER *hp, u_char *msg, int msglen) {
loop:
for (ap = addinfo, i = 0; i < addcount; ap++, i++) {
int auth = 0,
+ drop = 0,
founda = 0,
foundaaaa = 0,
- founda6 = 0,
foundcname = 0,
save_count = count,
save_msglen = msglen;
@@ -2353,12 +2366,11 @@ loop:
if (dp->d_class != ap->a_class)
continue;
if (dp->d_rcode == NXDOMAIN) {
- founda = founda6 = foundaaaa = 1;
+ founda = foundaaaa = 1;
continue;
}
switch (dp->d_type) {
case ns_t_a: founda = 1; break;
- case ns_t_a6: founda6 = 1; break;
case ns_t_aaaa: foundaaaa = 1; break;
}
if (!dp->d_rcode && dp->d_type == T_CNAME) {
@@ -2366,8 +2378,7 @@ loop:
break;
}
if (auth == 0 && ap->a_type == T_A &&
- (dp->d_type == ns_t_a || dp->d_type == ns_t_a6 ||
- dp->d_type == ns_t_aaaa) &&
+ (dp->d_type == ns_t_a || dp->d_type == ns_t_aaaa) &&
(zones[dp->d_zone].z_type == z_master ||
zones[dp->d_zone].z_type == z_slave))
auth = 1;
@@ -2385,8 +2396,7 @@ loop:
}
if (ap->a_type == T_A &&
!match(dp, (int)ap->a_class, T_A) &&
- !match(dp, (int)ap->a_class, T_AAAA) &&
- !match(dp, (int)ap->a_class, ns_t_a6)) {
+ !match(dp, (int)ap->a_class, T_AAAA)) {
continue;
}
if (ap->a_type == T_KEY &&
@@ -2397,6 +2407,8 @@ loop:
continue;
if (dp->d_rcode)
continue;
+ if (drop)
+ continue;
/*
* Should be smart and eliminate duplicate
* data here. XXX
@@ -2426,7 +2438,14 @@ loop:
cp = save_cp;
msglen = save_msglen;
count = save_count;
- break;
+ /*
+ * Continue processing list to prevent
+ * unnecessary fetches for glue.
+ * Prevent partial RRsets being sent by
+ * setting drop.
+ */
+ drop = 1;
+ continue;
}
ns_debug(ns_log_default, 5,
"addinfo: adding address data n = %d", n);
@@ -2446,10 +2465,6 @@ loop:
(void) sysquery(ap->a_dname, (int)ap->a_class,
ns_t_aaaa, NULL, NULL, 0,
ns_port, QUERY, 0);
- if (!founda6 && !auth)
- (void) sysquery(ap->a_dname, (int)ap->a_class,
- ns_t_a6, NULL, NULL, 0, ns_port,
- QUERY, 0);
}
if (foundcname) {
if (!haveComplained(nhash(ap->a_dname),
diff --git a/contrib/bind/bin/named/ns_resp.c b/contrib/bind/bin/named/ns_resp.c
index f2d0a7c..0174f9f 100644
--- a/contrib/bind/bin/named/ns_resp.c
+++ b/contrib/bind/bin/named/ns_resp.c
@@ -1,6 +1,6 @@
#if !defined(lint) && !defined(SABER)
static const char sccsid[] = "@(#)ns_resp.c 4.65 (Berkeley) 3/3/91";
-static const char rcsid[] = "$Id: ns_resp.c,v 8.178.2.2 2002/11/14 13:39:13 marka Exp $";
+static const char rcsid[] = "$Id: ns_resp.c,v 8.186.6.4 2003/06/02 09:56:35 marka Exp $";
#endif /* not lint */
/*
@@ -270,7 +270,6 @@ ns_resp(u_char *msg, int msglen, struct sockaddr_in from, struct qstream *qsp)
int i, c, n, qdcount, ancount, aucount, nscount, arcount, arfirst;
int soacount;
u_int qtype, qclass;
- int restart; /* flag for processing cname response */
int validanswer, dbflags;
int cname, lastwascname, externalcname;
int count, founddata, foundname;
@@ -281,7 +280,7 @@ ns_resp(u_char *msg, int msglen, struct sockaddr_in from, struct qstream *qsp)
char *dname, tmpdomain[MAXDNAME];
const char *fname;
const char *formerrmsg = "brain damage";
- u_char newmsg[EDNS_MESSAGE_SZ];
+ u_char newmsg[NS_MAXMSG];
u_char **dpp, *tp;
time_t rtrip;
struct hashbuf *htp;
@@ -298,6 +297,7 @@ ns_resp(u_char *msg, int msglen, struct sockaddr_in from, struct qstream *qsp)
time_t tsig_time;
DST_KEY *key;
int expect_cname;
+ int pass = 0;
nameserIncr(from.sin_addr, nssRcvdR);
nsp[0] = NULL;
@@ -905,7 +905,6 @@ tcp_retry:
tp = cp;
- restart = 0;
validanswer = -1;
nscount = 0;
soacount = 0;
@@ -1001,6 +1000,10 @@ tcp_retry:
tname = NULL;
}
+ /* Cache for current tick. */
+ if (type == T_SOA)
+ dp->d_ttl = tt.tv_sec;
+
dp->d_cred = (hp->aa && ns_samename(name, qname) == 1)
? DB_C_AUTH
: DB_C_ANSWER;
@@ -1048,6 +1051,9 @@ tcp_retry:
}
if (type == T_SOA) {
soacount++;
+ /* -ve caching only. */
+ db_detach(&dp);
+ continue;
}
break;
case T_NXT:
@@ -1182,38 +1188,6 @@ tcp_retry:
return;
}
- if (ancount && count && validanswer != 1) {
- /*
- * Everything passed validation but we didn't get the
- * final answer. The response must have contained
- * a dangling CNAME. Force a restart of the query.
- *
- * Don't set restart if count==0, since this means
- * the response was truncated in the answer section,
- * causing us to set count to 0 which will cause
- * validanswer to be 0 as well even though the answer
- * section probably contained valid RRs (just not
- * a complete set).
- * XXX - this works right if we can just forward this
- * response to the client, but not if we found a CNAME
- * in a prior response and restarted the query.
- */
- restart = 1;
- }
-
- if (!restart && !qp->q_cmsglen && ancount > 1 && qtype == T_A)
- sort_response(tp, eom, ancount, &qp->q_from);
-
- /*
- * An answer to a T_ANY query or a successful answer to a
- * regular query with no indirection, then just return answer.
- */
- if (!restart && ancount && (qtype == T_ANY || !qp->q_cmsglen)) {
- ns_debug(ns_log_default, 3,
- "resp: got as much answer as there is");
- goto return_msg;
- }
-
/*
* We might want to cache this negative answer.
*
@@ -1289,11 +1263,20 @@ tcp_retry:
goto servfail;
}
cp += n + QFIXEDSZ;
- buflen = sizeof(newmsg) - (cp - newmsg);
-
+ buflen = (qp->q_stream != NULL) ? NS_MAXMSG :
+ MIN(EDNS_MESSAGE_SZ, qp->q_udpsize);
+ buflen -= (cp - newmsg);
+ /*
+ * Reserve space for TSIG / EDNS
+ */
+ if (qp->q_tsig != NULL)
+ buflen -= qp->q_tsig->tsig_size;
+ if ((qp->q_flags & Q_EDNS) != 0)
+ buflen -= 11;
cname = 0;
try_again:
+ pass++;
ns_debug(ns_log_default, 1, "resp: nlookup(%s) qtype=%d", dname,
qtype);
foundname = 0;
@@ -1316,7 +1299,7 @@ tcp_retry:
(dp->d_class == (int)qclass)) {
#ifdef RETURNSOA
n = finddata(np, qclass, T_SOA, hp, &dname,
- &buflen, &count);
+ &buflen, &count, pass, 1);
if ( n != 0) {
if (count) {
cp += n;
@@ -1348,7 +1331,7 @@ tcp_retry:
goto fetch_ns;
}
}
- n = finddata(np, qclass, qtype, hp, &dname, &buflen, &count);
+ n = finddata(np, qclass, qtype, hp, &dname, &buflen, &count, pass, 1);
if (n == 0)
goto fetch_ns; /* NO data available */
if (hp->rcode) {
@@ -1399,7 +1382,8 @@ tcp_retry:
if (!foundname)
hp->rcode = NXDOMAIN;
if (qclass != C_ANY) {
- hp->aa = 1;
+ if (!cname)
+ hp->aa = 1;
if (np && (!foundname || !founddata)) {
n = doaddauth(hp, cp, buflen, np, nsp[0]);
cp += n;
@@ -1553,7 +1537,8 @@ tcp_retry:
if (!qp->q_addr[0].noedns)
smsglen += ns_add_opt(smsg, smsg + smsglen, smsgsize, 0, 0,
- EDNS_MESSAGE_SZ, 0, NULL, 0);
+ server_options->edns_udp_size,
+ 0, NULL, 0);
if (key != NULL) {
n = ns_sign(smsg, &smsglen, smsgsize, NOERROR, key, NULL, 0,
sig, &siglen, 0);
@@ -2239,7 +2224,7 @@ send_msg(u_char *msg, int msglen, struct qinfo *qp) {
if (qp->q_flags & Q_SYSTEM)
return (1);
- trunc = (qp->q_stream != NULL) ? 65535 : qp->q_udpsize;
+ trunc = (qp->q_stream != NULL) ? NS_MAXMSG : qp->q_udpsize;
if (qp->q_tsig != NULL)
adjust += qp->q_tsig->tsig_size;
if ((qp->q_flags & Q_EDNS) != 0)
@@ -2283,8 +2268,9 @@ send_msg(u_char *msg, int msglen, struct qinfo *qp) {
msgsize = msglen; /* silence compiler */
if ((qp->q_flags & Q_EDNS) != 0)
- msglen += ns_add_opt(msg, msg + msglen, msgsize, 0,
- hp->rcode, EDNS_MESSAGE_SZ, 0, NULL, 0);
+ msglen += ns_add_opt(msg, msg + msglen, msgsize, 0, hp->rcode,
+ server_options->edns_udp_size,
+ 0, NULL, 0);
if (qp->q_tsig != NULL) {
u_char sig[TSIG_SIG_SIZE];
@@ -2492,6 +2478,7 @@ sysquery(const char *dname, int class, int type,
qs->stime = tt;
qs->forwarder = 0;
qs->noedns = 1; /* XXXMPA */
+ qs->lame = 0;
qs->nretry = 0;
}
qp->q_naddr = nsc;
@@ -2581,7 +2568,8 @@ sysquery(const char *dname, int class, int type,
if (!qp->q_addr[0].noedns)
smsglen += ns_add_opt(smsg, smsg + smsglen, smsgsize, 0, 0,
- EDNS_MESSAGE_SZ, 0, NULL, 0);
+ server_options->edns_udp_size,
+ 0, NULL, 0);
if (key != NULL) {
n = ns_sign(smsg, &smsglen, smsgsize, NOERROR, key, NULL, 0,
@@ -2908,7 +2896,8 @@ findns(struct namebuf **npp, int class,
}
ns_debug(ns_log_default, 1,
"findns: No root nameservers for class %s?", p_class(class));
- if ((unsigned)class < MAXCLASS && norootlogged[class] == 0) {
+ if (!NS_OPTION_P(OPTION_FORWARD_ONLY) &&
+ (unsigned)class < MAXCLASS && norootlogged[class] == 0) {
norootlogged[class] = 1;
ns_info(ns_log_default, "No root nameservers for class %s",
p_class(class));
@@ -2924,7 +2913,8 @@ findns(struct namebuf **npp, int class,
*/
int
finddata(struct namebuf *np, int class, int type,
- HEADER *hp, char **dnamep, int *lenp, int *countp)
+ HEADER *hp, char **dnamep, int *lenp, int *countp, int pass,
+ int glueok)
{
struct databuf *dp;
char *cp;
@@ -2962,18 +2952,8 @@ finddata(struct namebuf *np, int class, int type,
cp = ((char *)hp) + *countp;
foundcname = 0;
for (dp = np->n_data; dp != NULL; dp = dp->d_next) {
- if (!wanted(dp, class, type)) {
- if (type == T_CNAME && class == dp->d_class) {
- /* any data means no CNAME exists */
- if (dp->d_type != T_NXT &&
- dp->d_type != T_KEY &&
- dp->d_type != T_SIG) {
- ret = 0;
- goto done;
- }
- }
+ if (!wanted(dp, class, type))
continue;
- }
if (dp->d_cred == DB_C_ADDITIONAL) {
#ifdef NOADDITIONAL
continue;
@@ -3003,7 +2983,7 @@ finddata(struct namebuf *np, int class, int type,
*dnamep, type, class);
continue;
}
- if (type == T_ANY)
+ if (type == T_ANY && dp->d_type != T_ANY)
continue;
hp->rcode = NOERROR_NODATA;
if (dp->d_size == 0) { /* !RETURNSOA */
@@ -3038,6 +3018,10 @@ finddata(struct namebuf *np, int class, int type,
(!((dp->d_type == T_SIG) || (dp->d_type == T_KEY))) )
continue;
+ /* Don't return glue (NS/A/AAAA) */
+ if (!glueok && findMyZone(np, class) == DB_Z_CACHE)
+ continue;
+
if (!defer) {
if (foundcname != 0 && dp->d_type == T_CNAME)
continue;
@@ -3056,6 +3040,16 @@ finddata(struct namebuf *np, int class, int type,
if (dp->d_type == T_CNAME) {
foundcname = 1;
+
+#define SETAA(pass, class, dp) \
+ (pass == 1 && class != C_ANY && dp->d_zone != DB_Z_CACHE && \
+ (zones[dp->d_zone].z_type == z_master || \
+ zones[dp->d_zone].z_type == z_slave) && \
+ (zones[dp->d_zone].z_flags & Z_AUTH) != 0)
+
+ if (SETAA(pass, class, dp))
+ hp->aa = 1;
+
#define FOLLOWCNAME(type) \
(type != T_KEY) && (type != T_SIG) && (type != T_NXT) && (type != T_ANY)
/* don't alias if querying for key, sig, nxt, or any */
@@ -3064,8 +3058,13 @@ finddata(struct namebuf *np, int class, int type,
new_dnamep = (char *)dp->d_data;
}
} else {
- if (dp->d_type == T_CNAME)
+ if (dp->d_type == T_CNAME) {
foundcname = 1;
+
+ if (SETAA(pass, class, dp))
+ hp->aa = 1;
+
+ }
found[found_count++] = dp;
}
}
diff --git a/contrib/bind/bin/named/ns_update.c b/contrib/bind/bin/named/ns_update.c
index b2b5b96..1c88e25 100644
--- a/contrib/bind/bin/named/ns_update.c
+++ b/contrib/bind/bin/named/ns_update.c
@@ -1,5 +1,5 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: ns_update.c,v 8.104 2002/05/18 01:02:59 marka Exp $";
+static const char rcsid[] = "$Id: ns_update.c,v 8.106 2002/07/19 22:44:07 marka Exp $";
#endif /* not lint */
/*
@@ -1211,7 +1211,7 @@ req_update_private(HEADER *hp, u_char *cp, u_char *eom, u_char *msg,
*/
if (!ip_addr_or_key_allowed(zp->z_update_acl, from.sin_addr, in_key)) {
- ns_notice(ns_log_security,
+ ns_notice(ns_log_update_security,
"denied update from %s for \"%s\" %s",
sin_ntoa(from), *dname ? dname : ".", p_class(class));
nameserIncr(from.sin_addr, nssRcvdUUpd);
@@ -2638,8 +2638,10 @@ merge_logs(struct zoneinfo *zp, char *logname) {
err++;
break;
}
+ errno = 0;
n = strtoul(buf, &cp, 10);
- if (n > 0xffff || *cp != '\0') {
+ if (errno != 0 || n > 0xffff ||
+ *cp != '\0') {
err++;
break;
}
diff --git a/contrib/bind/bin/ndc/ndc.c b/contrib/bind/bin/ndc/ndc.c
index d077042..1499184 100644
--- a/contrib/bind/bin/ndc/ndc.c
+++ b/contrib/bind/bin/ndc/ndc.c
@@ -1,5 +1,5 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: ndc.c,v 1.22 2002/06/24 07:28:55 marka Exp $";
+static const char rcsid[] = "$Id: ndc.c,v 1.25 2003/04/03 05:42:10 marka Exp $";
#endif /* not lint */
/*
@@ -88,7 +88,7 @@ static void start_named(const char *, int);
static int fgetpid(const char *, pid_t *);
static int get_sockaddr(const char *, sockaddr_t *);
static size_t impute_addrlen(const struct sockaddr *);
-static void vtrace(const char *, va_list);
+static void vtrace(const char *, va_list) ISC_FORMAT_PRINTF(1, 0);
static void trace(const char *, ...) ISC_FORMAT_PRINTF(1, 2);
static void result(const char *, ...) ISC_FORMAT_PRINTF(1, 2);
static void fatal(const char *, ...) ISC_FORMAT_PRINTF(1, 2);
@@ -283,7 +283,7 @@ getargs_closure(void *arg, const char *msg, int flags) {
}
len = 0;
cp = msg + 4;
- while (*cp != NULL) {
+ while (*cp != '\0') {
c = *cp;
if (c == '%') {
cp2 = strchr(hexdigits, cp[1]);
@@ -325,7 +325,7 @@ getargs_closure(void *arg, const char *msg, int flags) {
}
cp = msg + 4;
tp = argv->argv[i];
- while (*cp != NULL) {
+ while (*cp != '\0') {
c = *cp;
if (c == '%') {
cp2 = strchr(hexdigits, cp[1]);
@@ -374,6 +374,8 @@ get_args(char **restp) {
len = 0;
for (i = 1 ; i < argv.argc && argv.argv[i] != NULL; i++)
len += strlen(argv.argv[i]) + 1;
+ if (len == 0)
+ len = 1;
rest = malloc(len);
if (rest == NULL) {
result = 0;
@@ -386,7 +388,8 @@ get_args(char **restp) {
*p++ = ' ';
}
if (p != rest)
- p[-1] = '\0';
+ p--;
+ p[0] = '\0';
*restp = rest;
err:
diff --git a/contrib/bind/bin/nslookup/getinfo.c b/contrib/bind/bin/nslookup/getinfo.c
index 7189a85..3f64aa6 100644
--- a/contrib/bind/bin/nslookup/getinfo.c
+++ b/contrib/bind/bin/nslookup/getinfo.c
@@ -53,7 +53,7 @@
#ifndef lint
static const char sccsid[] = "@(#)getinfo.c 5.26 (Berkeley) 3/21/91";
-static const char rcsid[] = "$Id: getinfo.c,v 8.27 2002/05/22 04:06:57 marka Exp $";
+static const char rcsid[] = "$Id: getinfo.c,v 8.29.8.2 2003/06/02 09:24:39 marka Exp $";
#endif /* not lint */
/*
@@ -111,7 +111,7 @@ ServerTable server[MAXSERVERS];
typedef union {
HEADER qb1;
- u_char qb2[64*1024];
+ u_char qb2[NS_MAXMSG];
} querybuf;
typedef union {
@@ -149,14 +149,14 @@ GetAnswer(union res_sockaddr_union *nsAddrPtr, int queryType,
register const u_char *cp;
querybuf answer;
char **aliasPtr;
- u_char *eom, *bp;
+ u_char *eom, *bp, *ep;
char **addrPtr;
int *lenPtr;
int *typePtr;
char *namePtr;
char *dnamePtr;
int type, class;
- int qdcount, ancount, arcount, nscount, buflen;
+ int qdcount, ancount, arcount, nscount;
int origClass = 0;
int numAliases = 0;
int numAddresses = 0;
@@ -211,9 +211,9 @@ GetAnswer(union res_sockaddr_union *nsAddrPtr, int queryType,
}
- bp = hostbuf;
- buflen = sizeof(hostbuf);
- cp = (u_char *) &answer + HFIXEDSZ;
+ bp = hostbuf;
+ ep = hostbuf + sizeof(hostbuf);
+ cp = (u_char *) &answer + HFIXEDSZ;
/* Skip over question section. */
while (qdcount-- > 0) {
@@ -256,7 +256,7 @@ GetAnswer(union res_sockaddr_union *nsAddrPtr, int queryType,
printedAnswers = TRUE;
} else {
while (--ancount >= 0 && cp < eom) {
- n = dn_expand(answer.qb2, eom, cp, (char *)bp, buflen);
+ n = dn_expand(answer.qb2, eom, cp, (char *)bp, ep - bp);
if (n < 0)
return(ERROR);
cp += n;
@@ -281,13 +281,12 @@ GetAnswer(union res_sockaddr_union *nsAddrPtr, int queryType,
host_aliases_len[numAliases] = s;
numAliases++;
bp += s;
- buflen -= s;
continue;
} else if (type == T_PTR) {
/*
* Found a "pointer" to the real name.
*/
- n = dn_expand(answer.qb2, eom, cp, (char *)bp, buflen);
+ n = dn_expand(answer.qb2, eom, cp, (char *)bp, ep - bp);
if (n < 0) {
cp += n;
continue;
@@ -327,7 +326,7 @@ GetAnswer(union res_sockaddr_union *nsAddrPtr, int queryType,
memcpy(hostPtr->name, bp, s);
}
}
- bp += (((u_int32_t)bp) % sizeof(align));
+ bp += (((size_t)bp) % sizeof(align));
if (bp + dlen >= &hostbuf[sizeof(hostbuf)]) {
if (res.options & RES_DEBUG) {
@@ -467,7 +466,7 @@ GetAnswer(union res_sockaddr_union *nsAddrPtr, int queryType,
* that serve the requested domain.
*/
- n = dn_expand(answer.qb2, eom, cp, (char *)bp, buflen);
+ n = dn_expand(answer.qb2, eom, cp, (char *)bp, ep - bp);
if (n < 0) {
return(ERROR);
}
@@ -490,7 +489,7 @@ GetAnswer(union res_sockaddr_union *nsAddrPtr, int queryType,
} else {
Boolean found;
- n = dn_expand(answer.qb2, eom, cp, (char *)bp, buflen);
+ n = dn_expand(answer.qb2, eom, cp, (char *)bp, ep - bp);
if (n < 0) {
return(ERROR);
}
@@ -546,7 +545,7 @@ GetAnswer(union res_sockaddr_union *nsAddrPtr, int queryType,
}
} else {
while (--arcount >= 0 && cp < eom) {
- n = dn_expand(answer.qb2, eom, cp, (char *)bp, buflen);
+ n = dn_expand(answer.qb2, eom, cp, (char *)bp, ep - bp);
if (n < 0) {
break;
}
@@ -944,7 +943,7 @@ GetHostInfoByAddr(union res_sockaddr_union *nsAddrPtr,
p[9] & 0xf, (p[9] >> 4) & 0xf,
p[8] & 0xf, (p[8] >> 4) & 0xf,
p[7] & 0xf, (p[7] >> 4) & 0xf,
- p[6] & 0xf, (p[4] >> 4) & 0xf,
+ p[6] & 0xf, (p[6] >> 4) & 0xf,
p[5] & 0xf, (p[5] >> 4) & 0xf,
p[4] & 0xf, (p[4] >> 4) & 0xf,
p[3] & 0xf, (p[3] >> 4) & 0xf,
@@ -964,7 +963,7 @@ GetHostInfoByAddr(union res_sockaddr_union *nsAddrPtr,
p[9] & 0xf, (p[9] >> 4) & 0xf,
p[8] & 0xf, (p[8] >> 4) & 0xf,
p[7] & 0xf, (p[7] >> 4) & 0xf,
- p[6] & 0xf, (p[4] >> 4) & 0xf,
+ p[6] & 0xf, (p[6] >> 4) & 0xf,
p[5] & 0xf, (p[5] >> 4) & 0xf,
p[4] & 0xf, (p[4] >> 4) & 0xf,
p[3] & 0xf, (p[3] >> 4) & 0xf,
@@ -1017,7 +1016,7 @@ GetHostInfoByAddr(union res_sockaddr_union *nsAddrPtr,
n = GetAnswer(nsAddrPtr, T_PTR, (char *) &buf, n, 1, hostPtr, 1, 0);
if (n == SUCCESS) {
hostPtr->addrList = (AddrInfo **)Calloc(2, sizeof(AddrInfo *));
- hostPtr->addrList[0] = (AddrInfo *)Calloc(1, sizeof(AddrInfo *));
+ hostPtr->addrList[0] = (AddrInfo *)Calloc(1, sizeof(AddrInfo));
hostPtr->addrList[0]->addr = Calloc(16, sizeof(char));
memcpy(hostPtr->addrList[0]->addr, p, 16);
hostPtr->addrList[0]->addrType = AF_INET6;
diff --git a/contrib/bind/bin/nslookup/main.c b/contrib/bind/bin/nslookup/main.c
index e992bb0..7213c42 100644
--- a/contrib/bind/bin/nslookup/main.c
+++ b/contrib/bind/bin/nslookup/main.c
@@ -77,7 +77,7 @@ char copyright[] =
#ifndef lint
static const char sccsid[] = "@(#)main.c 5.42 (Berkeley) 3/3/91";
-static const char rcsid[] = "$Id: main.c,v 8.24 2002/05/26 03:12:20 marka Exp $";
+static const char rcsid[] = "$Id: main.c,v 8.25 2003/01/26 11:38:56 marka Exp $";
#endif /* not lint */
/*
@@ -611,7 +611,7 @@ SetDefaultServer(string, local)
UnionFromAddr(&servAddr, defaultPtr->addrList[0]->addrType,
defaultPtr->addrList[0]->addr);
} else {
- UnionFromAddr(&servAddr, defaultPtr->addrList[0]->addrType,
+ UnionFromAddr(&servAddr, defaultPtr->servers[0]->addrList[0]->addrType,
defaultPtr->servers[0]->addrList[0]->addr);
}
diff --git a/contrib/bind/bin/nslookup/send.c b/contrib/bind/bin/nslookup/send.c
index 738f66a..4afcb56 100644
--- a/contrib/bind/bin/nslookup/send.c
+++ b/contrib/bind/bin/nslookup/send.c
@@ -53,7 +53,7 @@
#ifndef lint
static const char sccsid[] = "@(#)send.c 5.18 (Berkeley) 3/2/91";
-static const char rcsid[] = "$Id: send.c,v 8.14 2002/05/10 04:35:09 marka Exp $";
+static const char rcsid[] = "$Id: send.c,v 8.14.10.1 2003/06/02 05:59:56 marka Exp $";
#endif /* not lint */
/*
@@ -181,7 +181,7 @@ SendRequest(union res_sockaddr_union *nsAddrPtr, const u_char *buf,
/*
* Send length & message
*/
- __putshort(buflen, (u_char *)&len);
+ ns_put16(buflen, (u_char *)&len);
iov[0].iov_base = (caddr_t)&len;
iov[0].iov_len = INT16SZ;
DE_CONST(buf, iov[1].iov_base);
diff --git a/contrib/bind/bin/nsupdate/nsupdate.c b/contrib/bind/bin/nsupdate/nsupdate.c
index c8e8ce8..3a452cc 100644
--- a/contrib/bind/bin/nsupdate/nsupdate.c
+++ b/contrib/bind/bin/nsupdate/nsupdate.c
@@ -1,5 +1,5 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: nsupdate.c,v 8.27 2001/06/18 14:43:46 marka Exp $";
+static const char rcsid[] = "$Id: nsupdate.c,v 8.30 2003/04/03 05:51:07 marka Exp $";
#endif /* not lint */
/*
@@ -155,9 +155,6 @@ main(int argc, char **argv) {
struct map *mp;
ns_updrec *rrecp;
ns_updque listuprec;
- extern int getopt();
- extern char *optarg;
- extern int optind, opterr, optopt;
ns_tsig_key key;
char *keyfile=NULL, *keyname=NULL;
@@ -398,11 +395,15 @@ main(int argc, char **argv) {
(void) getword_str(buf2, sizeof buf2, &startp, endp);
if (isdigit(buf2[0])) { /* ttl */
- r_ttl = strtoul(buf2, 0, 10);
- if (errno == ERANGE && r_ttl == ULONG_MAX) {
+ u_long tmp_ttl;
+ errno = 0;
+ tmp_ttl = strtoul(buf2, 0, 10);
+ if ((errno == ERANGE && tmp_ttl == ULONG_MAX) ||
+ tmp_ttl > 0x7fffffffUL) {
fprintf(stderr, "oversized ttl: %s\n", buf2);
exit (1);
}
+ r_ttl = tmp_ttl;
(void) getword_str(buf2, sizeof buf2, &startp, endp);
}
diff --git a/contrib/bind/doc/html/options.html b/contrib/bind/doc/html/options.html
index f124eba..9e3c0da 100644
--- a/contrib/bind/doc/html/options.html
+++ b/contrib/bind/doc/html/options.html
@@ -70,6 +70,7 @@ options {
[ <A HREF="#sortlist">sortlist</A> { <VAR>address_match_list</VAR> }; ]
[ rrset-order { <VAR>order_spec</VAR> ; [ <VAR>order_spec</VAR> ; ... ] }; ]
[ preferred-glue ( A | AAAA ); ]
+ [ edns-udp-size <VAR>number</VAR>; ]
};
</PRE>
<HR>
@@ -819,6 +820,16 @@ the answer to a priming query. This can be achieved by setting
<CODE>preferred-glue A;</CODE> which will add A records before other types
in the additional section.
+<H4>EDNS</H4>
+
+Some firewalls fail to pass EDNS/UDP messages that are larger than
+certain size, 512 or the UDP reassembly buffer. To allow EDNS to
+work across such firewalls it is necessary to advertise a EDNS
+buffer size that is small enough to not trigger failures.
+<CODE>edns-udp-size</CODE> can be use to adjust the advertised size.
+Values less than 512 will be increased to 512 and values greater than
+4096 will be truncated to 4096.
+
<H4>Tuning</H4>
<DL>
@@ -847,7 +858,7 @@ request for the root servers to be accepted. Default 2.
<HR>
<ADDRESS>
-Last Updated: $Id: options.html,v 1.49 2002/09/09 00:19:17 marka Exp $
+Last Updated: $Id: options.html,v 1.49.6.1 2003/06/02 09:56:33 marka Exp $
</ADDRESS>
</BODY>
</HTML>
diff --git a/contrib/bind/doc/man/dig.1 b/contrib/bind/doc/man/dig.1
index 6799559..40da7a0 100644
--- a/contrib/bind/doc/man/dig.1
+++ b/contrib/bind/doc/man/dig.1
@@ -1,4 +1,4 @@
-.\" $Id: dig.1,v 8.9 2002/06/18 01:53:43 marka Exp $
+.\" $Id: dig.1,v 8.11 2003/04/03 05:52:34 marka Exp $
.\"
.\" ++Copyright++ 1993
.\" -
@@ -246,7 +246,7 @@ one can simply
.It Fl x Ar IPv6-address
Convenient form to specify inverse address mapping.
Instead of
-.Dq Ic dig 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 ,
+.Dq Ic dig 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 ,
one can simply
.Dq Ic dig -x ::1 .
.It Fl f Ar file
@@ -684,7 +684,7 @@ authored by Andrew Cherenson.
.Sh BUGS
.Ic Dig
has a serious case of "creeping featurism" -- the result of
-considering several potential uses during it's development. It would
+considering several potential uses during its development. It would
probably benefit from a rigorous diet. Similarly, the print flags
and granularity of the items they specify make evident their
rather ad hoc genesis.
diff --git a/contrib/bind/doc/man/named-xfer.8 b/contrib/bind/doc/man/named-xfer.8
index 7d73b0f..05ccb5a 100644
--- a/contrib/bind/doc/man/named-xfer.8
+++ b/contrib/bind/doc/man/named-xfer.8
@@ -61,7 +61,7 @@
.\" THE SOFTWARE IS PROVIDED "AS IS" AND CHECK POINT SOFTWARE TECHNOLOGIES
.\" INCORPORATED DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
.\" INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-.\" IN NO EVENT SHALL CHECK POINT SOFTWARE TECHNOLOGIES INCORPRATED
+.\" IN NO EVENT SHALL CHECK POINT SOFTWARE TECHNOLOGIES INCORPORATED
.\" 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
@@ -87,7 +87,11 @@
.Op Fl i Ar ixfr_file
.Op Fl t Ar trace_file
.Op Fl p Ar port#
+.Op Fl C Ar class
.Op Fl S
+.Op Fl q
+.Op Fl x Ar src_address
+.Op Fl T Ar tsig_file
.Ar nameserver
.Op Sy axfr | ixfr
.Sh DESCRIPTION
@@ -144,6 +148,9 @@ as returned by
.Xr getservbyname @LIB_NETWORK_EXT@
for the service
.Dq Li domain .
+.It Fl C Ar class
+Defines which class to use.
+Defaults to 'IN'.
.It Fl S
Perform a restricted transfer of only the SOA, NS records and glue A records
for the zone. The SOA record will not be loaded by
@@ -154,6 +161,26 @@ determine when to verify the NS records. See the
directive in
.Xr @INDOT@named @SYS_OPS_EXT@
for more information.
+.It Fl q
+Tells @INDOT@named-xfer to be quiet.
+.It Fl x Ar src_address
+Specifies the source address to use for this query.
+.It Fl T Ar tsig_file
+Specifies a file to transfer TSIG information to @INDOT@named-xfer.
+Multiple entries of the following format:
+.Pp
+.Bl -hang -width "IP address" -compact
+.It IP address
+When connecting to this address use this TSIG key.
+.It key name
+.It algorithm
+157 (HMAC-MD5) is the only algorithm supported.
+.It key data
+base64
+.El
+.Pp
+@INDOT@named-xfer expects this file to be temporary in nature and
+will explicitly delete this file after its use.
.El
.Pp
Additional arguments are taken as name server addresses in so-called
diff --git a/contrib/bind/doc/man/named.8 b/contrib/bind/doc/man/named.8
index 882cea1..1c31c37 100644
--- a/contrib/bind/doc/man/named.8
+++ b/contrib/bind/doc/man/named.8
@@ -205,7 +205,7 @@ specified may be either a groupname or a numeric group id.
.Pp
.It Fl t Ar directory
Specifies the directory the server should chroot() into as soon as it is
-finshed processing command line arguments.
+finished processing command line arguments.
.Pp
.It Fl w Ar directory
Sets the working directory of the server. The
diff --git a/contrib/bind/doc/man/named.conf.5 b/contrib/bind/doc/man/named.conf.5
index 4f5896c..2d7e627 100644
--- a/contrib/bind/doc/man/named.conf.5
+++ b/contrib/bind/doc/man/named.conf.5
@@ -767,6 +767,7 @@ options {
[ sortlist { \fIaddress_match_list\fR }; ]
[ rrset-order { \fIorder_spec\fR ; [ \fIorder_spec\fR ; ... ] }; ]
[ preferred-glue ( A | AAAA ); ]
+ [ edns-udp-size \fInumber\fR; ]
};
.Ed
.Ss Definition and Usage
@@ -954,7 +955,7 @@ with
.Ic maintain-ixfr-base ,
and
.Ic rfc2308-type1
-is order dependant.
+is order dependent.
.It Ic host-statistics
If
.Li yes ,
@@ -968,7 +969,7 @@ can consume huge amounts of memory.
.It Ic maintain-ixfr-base
If
.Li yes ,
-a IXFR database file is kept for all dynamicaly updated zones.
+a IXFR database file is kept for all dynamically updated zones.
This enables the server to answer IXFR queries which can speed up
zone transfers enormously.
The default is
@@ -1285,7 +1286,7 @@ address must appear in the remote end's
.Nm allow-transfer
option for the zones being transferred, if one is specified. This statement sets the
.Nm transfer-source
-for all zones, but can be overriden on a per-zone basis by includinga
+for all zones, but can be overridden on a per-zone basis by including a
.Nm transfer-source
statement within the zone block in the configuration file.
.El
@@ -1552,6 +1553,16 @@ in the answer to a priming query.
This can be achieved by setting
.Ic preferred-glue A;
which will add A records before other types in the additional section.
+.Ss EDNS
+Some firewalls fail to pass EDNS/UDP messages that are larger than
+certain size, 512 or the UDP reassembly buffer.
+To allow EDNS to
+work across such firewalls it is necessary to advertise a EDNS
+buffer size that is small enough to not trigger failures.
+.Ic edns-udp-size
+can be use to adjust the advertised size.
+Values less than 512 will be increased to 512 and values greater than
+4096 will be truncated to 4096.
.Ss Tuning
.Bl -tag -width 0n
.It Ic lame-ttl
@@ -1971,7 +1982,7 @@ statement, to be used for transaction security when talking to the
remote server.
The
.Ic key
-statememnt must come before the
+statement must come before the
.Ic server
statement that references it.
.Pp
diff --git a/contrib/bind/doc/man/resolver.3 b/contrib/bind/doc/man/resolver.3
index c2cd915..f7c5424 100644
--- a/contrib/bind/doc/man/resolver.3
+++ b/contrib/bind/doc/man/resolver.3
@@ -16,7 +16,7 @@
.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
.\"
.\" @(#)resolver.3 6.5 (Berkeley) 6/23/90
-.\" $Id: resolver.3,v 8.17 2002/08/07 03:47:33 marka Exp $
+.\" $Id: resolver.3,v 8.17.6.1 2003/06/02 09:11:27 marka Exp $
.\"
.Dd July 4, 2000
.Dt RESOLVER @LIB_NETWORK_EXT_U@
@@ -37,6 +37,8 @@
.Nm res_nclose ,
.Nm res_nsendsigned ,
.Nm res_findzonecut ,
+.Nm res_getservers ,
+.Nm res_setservers ,
.Nm dn_comp ,
.Nm dn_expand ,
.Nm hstrerror ,
@@ -59,16 +61,26 @@
.Fd #include <netinet/in.h>
.Fd #include <arpa/nameser.h>
.Fd #include <resolv.h>
+.Fd #include <res_update.h>
.Vt typedef struct __res_state *res_state ;
.Pp
+.Ft int
.Fn res_ninit "res_state statp"
+.Ft int
.Fn res_ourserver_p "const res_state statp" "const struct sockaddr_in *addr"
+.Ft void
.Fn fp_resstat "const res_state statp" "FILE *fp"
+.Ft "const char *"
.Fn res_hostalias "const res_state statp" "const char *name" "char *buf" "size_t buflen"
+.Ft int
.Fn res_pquery "const res_state statp" "const u_char *msg" "int msglen" "FILE *fp"
+.Ft int
.Fn res_nquery "res_state statp" "const char *dname" "int class" "int type" "u_char *answer" "int anslen"
+.Ft int
.Fn res_nsearch "res_state statp" "const char *dname" "int class" "int type" "u_char * answer" "int anslen"
+.Ft int
.Fn res_nquerydomain "res_state statp" "const char *name" "const char *domain" "int class" "int type" "u_char *answer" "int anslen"
+.Ft int
.Fo res_nmkquery
.Fa "res_state statp"
.Fa "int op"
@@ -81,28 +93,51 @@
.Fa "u_char *buf"
.Fa "int buflen"
.Fc
+.Ft int
.Fn res_nsend "res_state statp" "const u_char *msg" "int msglen" "u_char *answer" "int anslen"
+.Ft int
.Fn res_nupdate "res_state statp" "ns_updrec *rrecp_in"
+.Ft int
.Fn res_nmkupdate "res_state statp" "ns_updrec *rrecp_in" "u_char *buf" "int buflen"
+.Ft void
.Fn res_nclose "res_state statp"
+.Ft int
.Fn res_nsendsigned "res_state statp" "const u_char *msg" "int msglen" "ns_tsig_key *key" "u_char *answer" "int anslen"
+.Ft int
.Fn res_findzonecut "res_state statp" "const char *dname" "ns_class class" "int options" "char *zname" "size_t zsize" "struct in_addr *addrs" "int naddrs"
+.Ft int
+.Fn res_getservers "res_state statp" "union res_sockaddr_union *set" "int cnt"
+.Ft void
+.Fn res_setservers "res_state statp" "const union res_sockaddr_union *set" "int cnt"
+.Ft int
.Fn dn_comp "const char *exp_dn" "u_char *comp_dn" "int length" "u_char **dnptrs" "u_char **lastdnptr"
+.Ft int
.Fn dn_expand "const u_char *msg" "const u_char *eomorig" "const u_char *comp_dn" "char *exp_dn" "int length"
+.Ft "const char *"
.Fn hstrerror "int err"
.Ss DEPRECATED
.Fd #include <sys/types.h>
.Fd #include <netinet/in.h>
.Fd #include <arpa/nameser.h>
.Fd #include <resolv.h>
+.Fd #include <res_update.h>
+.Ft int
.Fn res_init "void"
+.Ft int
.Fn res_isourserver "const struct sockaddr_in *addr"
+.Ft int
.Fn fp_nquery "const u_char *msg" "int msglen" "FILE *fp"
+.Ft void
.Fn p_query "const u_char *msg" "FILE *fp"
+.Ft "const char *"
.Fn hostalias "const char *name"
+.Ft int
.Fn res_query "const char *dname" "int class" "int type" "u_char *answer" "int anslen"
+.Ft int
.Fn res_search "const char *dname" "int class" "int type" "u_char *answer" "int anslen"
+.Ft int
.Fn res_querydomain "const char *name" "const char *domain" "int class" "int type" "u_char *answer" "int anslen"
+.Ft int
.Fo res_mkquery
.Fa "int op"
.Fa "const char *dname"
@@ -114,9 +149,13 @@
.Fa "u_char *buf"
.Fa "int buflen"
.Fc
+.Ft int
.Fn res_send "const u_char *msg" "int msglen" "u_char *answer" "int anslen"
+.Ft int
.Fn res_update "ns_updrec *rrecp_in"
+.Ft void
.Fn res_close "void"
+.Ft void
.Fn herror "const char *s"
.Sh DESCRIPTION
These routines are used for making, sending and interpreting
@@ -452,6 +491,12 @@ to store the result in,
uses a static buffer.
.Pp
The functions
+.Fn res_getservers
+and
+.Fn res_setservers
+are used to get and set the list of server to be queried.
+.Pp
+The functions
.Fn res_nupdate
/
.Fn res_update
@@ -605,4 +650,4 @@ See
.Xr resolver @FORMAT_EXT@ ;
RFC1032, RFC1033, RFC1034, RFC1035, RFC974;
SMM:11,
-.Dq Name Server Operations Guide for Sy BIND
+.Dq Name Server Operations Guide for BIND
diff --git a/contrib/bind/include/arpa/nameser.h b/contrib/bind/include/arpa/nameser.h
index 58bc702..a8c62fd 100644
--- a/contrib/bind/include/arpa/nameser.h
+++ b/contrib/bind/include/arpa/nameser.h
@@ -49,7 +49,7 @@
*/
/*
- * $Id: nameser.h,v 8.47 2002/04/30 03:43:53 marka Exp $
+ * $Id: nameser.h,v 8.48.8.2 2003/06/02 09:24:40 marka Exp $
*/
#ifndef _ARPA_NAMESER_H_
@@ -78,8 +78,9 @@
/*
* Define constants based on RFC 883, RFC 1034, RFC 1035
*/
-#define NS_PACKETSZ 512 /* maximum packet size */
+#define NS_PACKETSZ 512 /* default UDP packet size */
#define NS_MAXDNAME 1025 /* maximum domain name */
+#define NS_MAXMSG 65535 /* maximum message size */
#define NS_MAXCDNAME 255 /* maximum compressed domain name */
#define NS_MAXLABEL 63 /* maximum length of domain label */
#define NS_HFIXEDSZ 12 /* #/bytes of fixed data in header */
@@ -294,6 +295,7 @@ typedef enum __ns_type {
ns_t_dname = 39, /* Non-terminal DNAME (for IPv6) */
ns_t_sink = 40, /* Kitchen sink (experimentatl) */
ns_t_opt = 41, /* EDNS0 option (meta-RR) */
+ ns_t_apl = 42, /* Address prefix list (RFC 3123) */
ns_t_tkey = 249, /* Transaction key */
ns_t_tsig = 250, /* Transaction signature. */
ns_t_ixfr = 251, /* Incremental zone transfer. */
@@ -398,7 +400,7 @@ typedef enum __ns_cert_types {
/* Signatures */
#define NS_MD5RSA_MIN_BITS 512 /* Size of a mod or exp in bits */
-#define NS_MD5RSA_MAX_BITS 2552
+#define NS_MD5RSA_MAX_BITS 4096
/* Total of binary mod and exp */
#define NS_MD5RSA_MAX_BYTES ((NS_MD5RSA_MAX_BITS+7/8)*2+3)
/* Max length of text sig block */
diff --git a/contrib/bind/include/arpa/nameser_compat.h b/contrib/bind/include/arpa/nameser_compat.h
index cbceb6e..273933a 100644
--- a/contrib/bind/include/arpa/nameser_compat.h
+++ b/contrib/bind/include/arpa/nameser_compat.h
@@ -32,7 +32,7 @@
/*
* from nameser.h 8.1 (Berkeley) 6/2/93
- * $Id: nameser_compat.h,v 8.14 2002/05/18 01:39:11 marka Exp $
+ * $Id: nameser_compat.h,v 8.15 2002/07/17 07:01:02 marka Exp $
*/
#ifndef _ARPA_NAMESER_COMPAT_
@@ -138,6 +138,7 @@ typedef struct {
#define RRFIXEDSZ NS_RRFIXEDSZ
#define INT32SZ NS_INT32SZ
#define INT16SZ NS_INT16SZ
+#define INT8SZ NS_INT8SZ
#define INADDRSZ NS_INADDRSZ
#define IN6ADDRSZ NS_IN6ADDRSZ
#define INDIR_MASK NS_CMPRSFLGS
diff --git a/contrib/bind/include/hesiod.h b/contrib/bind/include/hesiod.h
index a110bd0..6072de9 100644
--- a/contrib/bind/include/hesiod.h
+++ b/contrib/bind/include/hesiod.h
@@ -20,21 +20,19 @@
*/
/*
- * $Id: hesiod.h,v 1.7 1999/01/08 19:22:45 vixie Exp $
+ * $Id: hesiod.h,v 1.7.20.1 2003/06/02 05:48:04 marka Exp $
*/
#ifndef _HESIOD_H_INCLUDED
#define _HESIOD_H_INCLUDED
-int hesiod_init __P((void **context));
-void hesiod_end __P((void *context));
-char * hesiod_to_bind __P((void *context, const char *name,
- const char *type));
-char ** hesiod_resolve __P((void *context, const char *name,
- const char *type));
-void hesiod_free_list __P((void *context, char **list));
-struct __res_state * __hesiod_res_get __P((void *context));
-void __hesiod_res_set __P((void *context, struct __res_state *,
+int hesiod_init __P((void **));
+void hesiod_end __P((void *));
+char * hesiod_to_bind __P((void *, const char *, const char *));
+char ** hesiod_resolve __P((void *, const char *, const char *));
+void hesiod_free_list __P((void *, char **));
+struct __res_state * __hesiod_res_get __P((void *));
+void __hesiod_res_set __P((void *, struct __res_state *,
void (*)(void *)));
#endif /*_HESIOD_H_INCLUDED*/
diff --git a/contrib/bind/include/irp.h b/contrib/bind/include/irp.h
index 2402383..a366292 100644
--- a/contrib/bind/include/irp.h
+++ b/contrib/bind/include/irp.h
@@ -16,7 +16,7 @@
*/
/*
- * $Id: irp.h,v 8.1 1999/01/18 07:46:46 vixie Exp $
+ * $Id: irp.h,v 8.1.20.3 2003/06/02 08:20:37 marka Exp $
*/
#ifndef _IRP_H_INCLUDED
@@ -84,16 +84,20 @@
struct irp_p;
-char *irs_irp_read_body(struct irp_p *pvt, size_t *size);
-int irs_irp_read_response(struct irp_p *pvt, char *text, size_t len);
-void irs_irp_disconnect(struct irp_p *pvt);
-int irs_irp_connect(struct irp_p *pvt);
-int irs_irp_is_connected(struct irp_p *pvt);
-int irs_irp_connection_setup(struct irp_p *cxndata, int *warned);
-int irs_irp_send_command(struct irp_p *pvt, const char *fmt, ...);
-int irs_irp_get_full_response(struct irp_p *pvt, int *code, char *text,
- size_t textlen, char **body,
- size_t *bodylen);
-int irs_irp_read_line(struct irp_p *pvt, char *buffer, int len);
+char *irs_irp_read_body(struct irp_p *, size_t *);
+int irs_irp_read_response(struct irp_p *, char *, size_t);
+void irs_irp_disconnect(struct irp_p *);
+int irs_irp_connect(struct irp_p *);
+int irs_irp_is_connected(struct irp_p *);
+int irs_irp_connection_setup(struct irp_p *, int *);
+#ifdef __GNUC__
+int irs_irp_send_command(struct irp_p *, const char *, ...)
+ __attribute__((__format__(__printf__, 2, 3)));
+#else
+int irs_irp_send_command(struct irp_p *, const char *, ...);
+#endif
+int irs_irp_get_full_response(struct irp_p *, int *, char *, size_t,
+ char **, size_t *);
+int irs_irp_read_line(struct irp_p *, char *, int);
#endif
diff --git a/contrib/bind/include/irs.h b/contrib/bind/include/irs.h
index 8e232ad..6b09b59 100644
--- a/contrib/bind/include/irs.h
+++ b/contrib/bind/include/irs.h
@@ -16,7 +16,7 @@
*/
/*
- * $Id: irs.h,v 8.6 2001/05/29 05:47:00 marka Exp $
+ * $Id: irs.h,v 8.7.6.2 2003/06/02 06:06:58 marka Exp $
*/
#ifndef _IRS_H_INCLUDED
@@ -30,7 +30,6 @@
#include <netdb.h>
#include <resolv.h>
#include <pwd.h>
-#include <netgroup.h>
/*
* This is the group map class.
@@ -199,18 +198,58 @@ struct nwent {
#define irs_dns_acc __irs_dns_acc
#define irs_nis_acc __irs_nis_acc
#define irs_irp_acc __irs_irp_acc
+#define irs_destroy __irs_destroy
+#define irs_dns_gr __irs_dns_gr
+#define irs_dns_ho __irs_dns_ho
+#define irs_dns_nw __irs_dns_nw
+#define irs_dns_pr __irs_dns_pr
+#define irs_dns_pw __irs_dns_pw
+#define irs_dns_sv __irs_dns_sv
+#define irs_gen_gr __irs_gen_gr
+#define irs_gen_ho __irs_gen_ho
+#define irs_gen_ng __irs_gen_ng
+#define irs_gen_nw __irs_gen_nw
+#define irs_gen_pr __irs_gen_pr
+#define irs_gen_pw __irs_gen_pw
+#define irs_gen_sv __irs_gen_sv
+#define irs_irp_get_full_response __irs_irp_get_full_response
+#define irs_irp_gr __irs_irp_gr
+#define irs_irp_ho __irs_irp_ho
+#define irs_irp_is_connected __irs_irp_is_connected
+#define irs_irp_ng __irs_irp_ng
+#define irs_irp_nw __irs_irp_nw
+#define irs_irp_pr __irs_irp_pr
+#define irs_irp_pw __irs_irp_pw
+#define irs_irp_read_line __irs_irp_read_line
+#define irs_irp_sv __irs_irp_sv
+#define irs_lcl_gr __irs_lcl_gr
+#define irs_lcl_ho __irs_lcl_ho
+#define irs_lcl_ng __irs_lcl_ng
+#define irs_lcl_nw __irs_lcl_nw
+#define irs_lcl_pr __irs_lcl_pr
+#define irs_lcl_pw __irs_lcl_pw
+#define irs_lcl_sv __irs_lcl_sv
+#define irs_nis_gr __irs_nis_gr
+#define irs_nis_ho __irs_nis_ho
+#define irs_nis_ng __irs_nis_ng
+#define irs_nis_nw __irs_nis_nw
+#define irs_nis_pr __irs_nis_pr
+#define irs_nis_pw __irs_nis_pw
+#define irs_nis_sv __irs_nis_sv
+#define net_data_create __net_data_create
+#define net_data_destroy __net_data_destroy
+#define net_data_minimize __net_data_minimize
/*
* Externs.
*/
-extern struct irs_acc * irs_gen_acc __P((const char *options,
- const char *conf_file));
-extern struct irs_acc * irs_lcl_acc __P((const char *options));
-extern struct irs_acc * irs_dns_acc __P((const char *options));
-extern struct irs_acc * irs_nis_acc __P((const char *options));
-extern struct irs_acc * irs_irp_acc __P((const char *options));
+extern struct irs_acc * irs_gen_acc __P((const char *, const char *));
+extern struct irs_acc * irs_lcl_acc __P((const char *));
+extern struct irs_acc * irs_dns_acc __P((const char *));
+extern struct irs_acc * irs_nis_acc __P((const char *));
+extern struct irs_acc * irs_irp_acc __P((const char *));
-extern void irs_destroy(void);
+extern void irs_destroy __P((void));
/*
* These forward declarations are for the semi-private functions in
@@ -229,102 +268,78 @@ struct net_data; /* forward */
* the default interface will use net_data_create by default. Servers will
* probably want net_data_init (one call per client)
*/
-struct net_data *net_data_create(const char *conf_file);
-struct net_data *net_data_init(const char *conf_file);
-void net_data_destroy(void *p);
+struct net_data *net_data_create __P((const char *));
+struct net_data *net_data_init __P((const char *));
+void net_data_destroy __P((void *));
-extern struct group *getgrent_p __P((struct net_data *net_data));
-extern struct group *getgrnam_p __P((const char *name,
- struct net_data *net_data));
-extern struct group *getgrgid_p __P((gid_t gid,
- struct net_data *net_data));
-extern int setgroupent_p __P((int stayopen,
- struct net_data *net_data));
-extern void endgrent_p __P((struct net_data *net_data));
-extern int getgrouplist_p __P((const char *name,
- gid_t basegid,
- gid_t *groups,
- int *ngroups,
- struct net_data *net_data));
+extern struct group *getgrent_p __P((struct net_data *));
+extern struct group *getgrnam_p __P((const char *, struct net_data *));
+extern struct group *getgrgid_p __P((gid_t, struct net_data *));
+extern int setgroupent_p __P((int, struct net_data *));
+extern void endgrent_p __P((struct net_data *));
+extern int getgrouplist_p __P((const char *, gid_t, gid_t *, int *,
+ struct net_data *));
#ifdef SETGRENT_VOID
-extern void setgrent_p __P((struct net_data *net_data));
+extern void setgrent_p __P((struct net_data *));
#else
-extern int setgrent_p __P((struct net_data *net_data));
+extern int setgrent_p __P((struct net_data *));
#endif
-extern struct hostent *gethostbyname_p __P((const char *name,
- struct net_data *net_data));
-extern struct hostent *gethostbyname2_p __P((const char *name, int af,
- struct net_data *net_data));
-extern struct hostent *gethostbyaddr_p __P((const char *addr, int len,
- int af,
- struct net_data *net_data));
-extern struct hostent *gethostent_p __P((struct net_data *net_data));
-extern void sethostent_p __P((int stayopen,
- struct net_data *net_data));
-extern void endhostent_p __P((struct net_data *net_data));
-extern struct hostent *getipnodebyname_p __P((const char *name, int af,
- int flags, int *errp,
- struct net_data *net_data));
-extern struct hostent *getipnodebyaddr_p __P((const void *addr, size_t len,
- int af, int *errp,
- struct net_data *net_data));
+extern struct hostent *gethostbyname_p __P((const char *,
+ struct net_data *));
+extern struct hostent *gethostbyname2_p __P((const char *, int,
+ struct net_data *));
+extern struct hostent *gethostbyaddr_p __P((const char *, int, int,
+ struct net_data *));
+extern struct hostent *gethostent_p __P((struct net_data *));
+extern void sethostent_p __P((int, struct net_data *));
+extern void endhostent_p __P((struct net_data *));
+extern struct hostent *getipnodebyname_p __P((const char *, int, int, int *,
+ struct net_data *));
+extern struct hostent *getipnodebyaddr_p __P((const void *, size_t,
+ int, int *, struct net_data *));
-extern struct netent *getnetent_p __P((struct net_data *net_data));
-extern struct netent *getnetbyname_p __P((const char *name,
- struct net_data *net_data));
-extern struct netent *getnetbyaddr_p __P((unsigned long net, int type,
- struct net_data *net_data));
-extern void setnetent_p __P((int stayopen,
- struct net_data *net_data));
-extern void endnetent_p __P((struct net_data *net_data));
+extern struct netent *getnetent_p __P((struct net_data *));
+extern struct netent *getnetbyname_p __P((const char *, struct net_data *));
+extern struct netent *getnetbyaddr_p __P((unsigned long, int,
+ struct net_data *));
+extern void setnetent_p __P((int, struct net_data *));
+extern void endnetent_p __P((struct net_data *));
-extern void setnetgrent_p __P((const char *netgroup,
- struct net_data *net_data));
-extern void endnetgrent_p __P((struct net_data *net_data));
-extern int innetgr_p __P((const char *netgroup,
- const char *host,
- const char *user,
- const char *domain,
- struct net_data *net_data));
-extern int getnetgrent_p __P((const char **host, const char **user,
- const char **domain,
- struct net_data *net_data));
+extern void setnetgrent_p __P((const char *, struct net_data *));
+extern void endnetgrent_p __P((struct net_data *));
+extern int innetgr_p __P((const char *, const char *, const char *,
+ const char *, struct net_data *));
+extern int getnetgrent_p __P((const char **, const char **,
+ const char **, struct net_data *));
-extern struct protoent *getprotoent_p __P((struct net_data *net_data));
-extern struct protoent *getprotobyname_p __P((const char *name,
- struct net_data *net_data));
-extern struct protoent *getprotobynumber_p __P((int proto,
- struct net_data *net_data));
-extern void setprotoent_p __P((int stayopen,
- struct net_data *net_data));
-extern void endprotoent_p __P((struct net_data *net_data));
+extern struct protoent *getprotoent_p __P((struct net_data *));
+extern struct protoent *getprotobyname_p __P((const char *,
+ struct net_data *));
+extern struct protoent *getprotobynumber_p __P((int, struct net_data *));
+extern void setprotoent_p __P((int, struct net_data *));
+extern void endprotoent_p __P((struct net_data *));
-extern struct passwd *getpwent_p __P((struct net_data *net_data));
-extern struct passwd *getpwnam_p __P((const char *name,
- struct net_data *net_data));
-extern struct passwd *getpwuid_p __P((uid_t uid,
- struct net_data *net_data));
-extern int setpassent_p __P((int stayopen,
- struct net_data *net_data));
-extern void endpwent_p __P((struct net_data *net_data));
+extern struct passwd *getpwent_p __P((struct net_data *));
+extern struct passwd *getpwnam_p __P((const char *, struct net_data *));
+extern struct passwd *getpwuid_p __P((uid_t, struct net_data *));
+extern int setpassent_p __P((int, struct net_data *));
+extern void endpwent_p __P((struct net_data *));
#ifdef SETPWENT_VOID
-extern void setpwent_p __P((struct net_data *net_data));
+extern void setpwent_p __P((struct net_data *));
#else
-extern int setpwent_p __P((struct net_data *net_data));
+extern int setpwent_p __P((struct net_data *));
#endif
-extern struct servent *getservent_p __P((struct net_data *net_data));
-extern struct servent *getservbyname_p __P((const char *name,
- const char *proto,
- struct net_data *net_data));
-extern struct servent *getservbyport_p __P((int port, const char *proto,
- struct net_data *net_data));
-extern void setservent_p __P((int stayopen,
- struct net_data *net_data));
-extern void endservent_p __P((struct net_data *net_data));
+extern struct servent *getservent_p __P((struct net_data *));
+extern struct servent *getservbyname_p __P((const char *, const char *,
+ struct net_data *));
+extern struct servent *getservbyport_p __P((int, const char *,
+ struct net_data *));
+extern void setservent_p __P((int, struct net_data *));
+extern void endservent_p __P((struct net_data *));
#endif /*_IRS_H_INCLUDED*/
diff --git a/contrib/bind/include/isc/ctl.h b/contrib/bind/include/isc/ctl.h
index 008e7a6..fec78b1 100644
--- a/contrib/bind/include/isc/ctl.h
+++ b/contrib/bind/include/isc/ctl.h
@@ -19,7 +19,7 @@
*/
/*
- * $Id: ctl.h,v 8.11 2001/08/10 02:40:49 marka Exp $
+ * $Id: ctl.h,v 8.11.10.1 2003/06/02 06:04:03 marka Exp $
*/
#include <sys/types.h>
@@ -42,11 +42,11 @@ struct ctl_verb;
enum ctl_severity { ctl_debug, ctl_warning, ctl_error };
-typedef void (*ctl_logfunc)(enum ctl_severity, const char *fmt, ...);
+typedef void (*ctl_logfunc)(enum ctl_severity, const char *, ...);
typedef void (*ctl_verbfunc)(struct ctl_sctx *, struct ctl_sess *,
- const struct ctl_verb *, const char *rest,
- u_int respflags, const void *respctx, void *uctx);
+ const struct ctl_verb *, const char *,
+ u_int, const void *, void *);
typedef void (*ctl_srvrdone)(struct ctl_sctx *, struct ctl_sess *, void *);
diff --git a/contrib/bind/include/isc/dst.h b/contrib/bind/include/isc/dst.h
index 9e68a10..46707b0 100644
--- a/contrib/bind/include/isc/dst.h
+++ b/contrib/bind/include/isc/dst.h
@@ -12,82 +12,124 @@ typedef struct dst_key {
} DST_KEY;
#endif /* HAS_DST_KEY */
+/*
+ * do not taint namespace
+ */
+#define dst_bsafe_init __dst_bsafe_init
+#define dst_buffer_to_key __dst_buffer_to_key
+#define dst_check_algorithm __dst_check_algorithm
+#define dst_compare_keys __dst_compare_keys
+#define dst_cylink_init __dst_cylink_init
+#define dst_dnskey_to_key __dst_dnskey_to_key
+#define dst_eay_dss_init __dst_eay_dss_init
+#define dst_free_key __dst_free_key
+#define dst_generate_key __dst_generate_key
+#define dst_hmac_md5_init __dst_hmac_md5_init
+#define dst_init __dst_init
+#define dst_key_to_buffer __dst_key_to_buffer
+#define dst_key_to_dnskey __dst_key_to_dnskey
+#define dst_random __dst_random
+#define dst_read_key __dst_read_key
+#define dst_rsaref_init __dst_rsaref_init
+#define dst_s_build_filename __dst_s_build_filename
+#define dst_s_calculate_bits __dst_s_calculate_bits
+#define dst_s_conv_bignum_b64_to_u8 __dst_s_conv_bignum_b64_to_u8
+#define dst_s_conv_bignum_u8_to_b64 __dst_s_conv_bignum_u8_to_b64
+#define dst_s_dns_key_id __dst_s_dns_key_id
+#define dst_s_dump __dst_s_dump
+#define dst_s_filename_length __dst_s_filename_length
+#define dst_s_fopen __dst_s_fopen
+#define dst_s_get_int16 __dst_s_get_int16
+#define dst_s_get_int32 __dst_s_get_int32
+#define dst_s_id_calc __dst_s_id_calc
+#define dst_s_put_int16 __dst_s_put_int16
+#define dst_s_put_int32 __dst_s_put_int32
+#define dst_s_quick_random __dst_s_quick_random
+#define dst_s_quick_random_set __dst_s_quick_random_set
+#define dst_s_random __dst_s_random
+#define dst_s_semi_random __dst_s_semi_random
+#define dst_s_verify_str __dst_s_verify_str
+#define dst_sig_size __dst_sig_size
+#define dst_sign_data __dst_sign_data
+#define dst_verify_data __dst_verify_data
+#define dst_write_key __dst_write_key
+
/*
* DST Crypto API defintions
*/
void dst_init(void);
int dst_check_algorithm(const int);
-int dst_sign_data(const int mode, /* specifies INIT/UPDATE/FINAL/ALL */
- DST_KEY *in_key, /* the key to use */
- void **context, /* pointer to state structure */
- const u_char *data, /* data to be signed */
- const int len, /* length of input data */
- u_char *signature, /* buffer to write signature to */
- const int sig_len); /* size of output buffer */
+int dst_sign_data(const int, /* specifies INIT/UPDATE/FINAL/ALL */
+ DST_KEY *, /* the key to use */
+ void **, /* pointer to state structure */
+ const u_char *, /* data to be signed */
+ const int, /* length of input data */
+ u_char *, /* buffer to write signature to */
+ const int); /* size of output buffer */
-int dst_verify_data(const int mode, /* specifies INIT/UPDATE/FINAL/ALL */
- DST_KEY *in_key, /* the key to use */
- void **context, /* pointer to state structure */
- const u_char *data, /* data to be verified */
- const int len, /* length of input data */
- const u_char *signature,/* buffer containing signature */
- const int sig_len); /* length of signature */
+int dst_verify_data(const int, /* specifies INIT/UPDATE/FINAL/ALL */
+ DST_KEY *, /* the key to use */
+ void **, /* pointer to state structure */
+ const u_char *, /* data to be verified */
+ const int, /* length of input data */
+ const u_char *, /* buffer containing signature */
+ const int); /* length of signature */
-DST_KEY *dst_read_key(const char *in_name, /* name of key */
- const u_int16_t in_id, /* key tag identifier */
- const int in_alg, /* key algorithm */
- const int key_type); /* Private/PublicKey wanted*/
+DST_KEY *dst_read_key(const char *, /* name of key */
+ const u_int16_t, /* key tag identifier */
+ const int, /* key algorithm */
+ const int); /* Private/PublicKey wanted*/
-int dst_write_key(const DST_KEY *key, /* key to write out */
- const int key_type); /* Public/Private */
+int dst_write_key(const DST_KEY *, /* key to write out */
+ const int); /* Public/Private */
-DST_KEY *dst_dnskey_to_key(const char *in_name, /* KEY record name */
- const u_char *key, /* KEY RDATA */
- const int len); /* size of input buffer*/
+DST_KEY *dst_dnskey_to_key(const char *, /* KEY record name */
+ const u_char *, /* KEY RDATA */
+ const int); /* size of input buffer*/
-int dst_key_to_dnskey(const DST_KEY *key, /* key to translate */
- u_char *out_storage, /* output buffer */
- const int out_len); /* size of out_storage*/
+int dst_key_to_dnskey(const DST_KEY *, /* key to translate */
+ u_char *, /* output buffer */
+ const int); /* size of out_storage*/
-DST_KEY *dst_buffer_to_key(const char *key_name, /* name of the key */
- const int alg, /* algorithm */
- const int flags, /* dns flags */
- const int protocol, /* dns protocol */
- const u_char *key_buf, /* key in dns wire fmt */
- const int key_len); /* size of key */
+DST_KEY *dst_buffer_to_key(const char *, /* name of the key */
+ const int, /* algorithm */
+ const int, /* dns flags */
+ const int, /* dns protocol */
+ const u_char *, /* key in dns wire fmt */
+ const int); /* size of key */
-int dst_key_to_buffer(DST_KEY *key, u_char *out_buff, int buf_len);
+int dst_key_to_buffer(DST_KEY *, u_char *, int);
-DST_KEY *dst_generate_key(const char *name, /* name of new key */
- const int alg, /* key algorithm to generate */
- const int bits, /* size of new key */
- const int exp, /* alg dependent parameter*/
- const int flags, /* key DNS flags */
- const int protocol); /* key DNS protocol */
+DST_KEY *dst_generate_key(const char *, /* name of new key */
+ const int, /* key algorithm to generate */
+ const int, /* size of new key */
+ const int, /* alg dependent parameter*/
+ const int, /* key DNS flags */
+ const int); /* key DNS protocol */
-DST_KEY *dst_free_key(DST_KEY *f_key);
-int dst_compare_keys(const DST_KEY *key1, const DST_KEY *key2);
+DST_KEY *dst_free_key(DST_KEY *);
+int dst_compare_keys(const DST_KEY *, const DST_KEY *);
-int dst_sig_size(DST_KEY *key);
+int dst_sig_size(DST_KEY *);
-int dst_random(const int mode, int wanted, u_char *outran);
+int dst_random(const int, int wanted, u_char *);
/* support for dns key tags/ids */
-u_int16_t dst_s_dns_key_id(const u_char *dns_key_rdata, const int rdata_len);
-u_int16_t dst_s_id_calc(const u_char *key_data, const int key_len);
+u_int16_t dst_s_dns_key_id(const u_char *, const int);
+u_int16_t dst_s_id_calc(const u_char *, const int);
/* Used by callers as well as by the library. */
#define RAW_KEY_SIZE 8192 /* large enough to store any key */
/* DST_API control flags */
/* These are used used in functions dst_sign_data and dst_verify_data */
-#define SIG_MODE_INIT 1 /* initalize digest */
+#define SIG_MODE_INIT 1 /* initialize digest */
#define SIG_MODE_UPDATE 2 /* add data to digest */
#define SIG_MODE_FINAL 4 /* generate/verify signature */
#define SIG_MODE_ALL (SIG_MODE_INIT|SIG_MODE_UPDATE|SIG_MODE_FINAL)
diff --git a/contrib/bind/include/isc/eventlib.h b/contrib/bind/include/isc/eventlib.h
index 5b98516..e5d8f20 100644
--- a/contrib/bind/include/isc/eventlib.h
+++ b/contrib/bind/include/isc/eventlib.h
@@ -18,7 +18,7 @@
/* eventlib.h - exported interfaces for eventlib
* vix 09sep95 [initial]
*
- * $Id: eventlib.h,v 1.23 2001/05/29 05:47:09 marka Exp $
+ * $Id: eventlib.h,v 1.23.10.1 2003/06/02 06:04:03 marka Exp $
*/
#ifndef _EVENTLIB_H
@@ -50,14 +50,13 @@ typedef struct { void *opaque; } evEvent;
#define evInitID(id) ((id)->opaque = NULL)
#define evTestID(id) ((id).opaque != NULL)
-typedef void (*evConnFunc)__P((evContext ctx, void *uap, int fd,
- const void *la, int lalen,
- const void *ra, int ralen));
-typedef void (*evFileFunc)__P((evContext ctx, void *uap, int fd, int evmask));
-typedef void (*evStreamFunc)__P((evContext ctx, void *uap, int fd, int bytes));
-typedef void (*evTimerFunc)__P((evContext ctx, void *uap,
- struct timespec due, struct timespec inter));
-typedef void (*evWaitFunc)__P((evContext ctx, void *uap, const void *tag));
+typedef void (*evConnFunc)__P((evContext, void *, int, const void *, int,
+ const void *, int));
+typedef void (*evFileFunc)__P((evContext, void *, int, int));
+typedef void (*evStreamFunc)__P((evContext, void *, int, int));
+typedef void (*evTimerFunc)__P((evContext, void *,
+ struct timespec, struct timespec));
+typedef void (*evWaitFunc)__P((evContext, void *, const void *));
typedef struct { unsigned char mask[256/8]; } evByteMask;
#define EV_BYTEMASK_BYTE(b) ((b) / 8)
@@ -87,14 +86,14 @@ typedef struct { unsigned char mask[256/8]; } evByteMask;
#define evMainLoop __evMainLoop
#define evHighestFD __evHighestFD
-int evCreate __P((evContext *ctx));
-void evSetDebug __P((evContext ctx, int lev, FILE *out));
-int evDestroy __P((evContext ctx));
-int evGetNext __P((evContext ctx, evEvent *ev, int options));
-int evDispatch __P((evContext ctx, evEvent ev));
-void evDrop __P((evContext ctx, evEvent ev));
-int evMainLoop __P((evContext ctx));
-int evHighestFD __P((evContext ctx));
+int evCreate __P((evContext *));
+void evSetDebug __P((evContext, int, FILE *));
+int evDestroy __P((evContext));
+int evGetNext __P((evContext, evEvent *, int));
+int evDispatch __P((evContext, evEvent));
+void evDrop __P((evContext, evEvent));
+int evMainLoop __P((evContext));
+int evHighestFD __P((evContext));
/* ev_connects.c */
#define evListen __evListen
@@ -104,11 +103,10 @@ int evHighestFD __P((evContext ctx));
#define evUnhold __evUnhold
#define evTryAccept __evTryAccept
-int evListen __P((evContext ctx, int fd, int maxconn,
- evConnFunc func, void *uap, evConnID *id));
-int evConnect __P((evContext ctx, int fd, const void *ra, int ralen,
- evConnFunc func, void *uap, evConnID *id));
-int evCancelConn __P((evContext ctx, evConnID id));
+int evListen __P((evContext, int, int, evConnFunc, void *, evConnID *));
+int evConnect __P((evContext, int, const void *, int,
+ evConnFunc, void *, evConnID *));
+int evCancelConn __P((evContext, evConnID));
int evHold __P((evContext, evConnID));
int evUnhold __P((evContext, evConnID));
int evTryAccept __P((evContext, evConnID, int *));
@@ -117,9 +115,8 @@ int evTryAccept __P((evContext, evConnID, int *));
#define evSelectFD __evSelectFD
#define evDeselectFD __evDeselectFD
-int evSelectFD __P((evContext ctx, int fd, int eventmask,
- evFileFunc func, void *uap, evFileID *id));
-int evDeselectFD __P((evContext ctx, evFileID id));
+int evSelectFD __P((evContext, int, int, evFileFunc, void *, evFileID *));
+int evDeselectFD __P((evContext, evFileID));
/* ev_streams.c */
#define evConsIovec __evConsIovec
@@ -129,14 +126,14 @@ int evDeselectFD __P((evContext ctx, evFileID id));
#define evUntimeRW __evUntimeRW
#define evCancelRW __evCancelRW
-struct iovec evConsIovec __P((void *buf, size_t cnt));
-int evWrite __P((evContext ctx, int fd, const struct iovec *iov, int cnt,
- evStreamFunc func, void *uap, evStreamID *id));
-int evRead __P((evContext ctx, int fd, const struct iovec *iov, int cnt,
- evStreamFunc func, void *uap, evStreamID *id));
-int evTimeRW __P((evContext ctx, evStreamID id, evTimerID timer));
-int evUntimeRW __P((evContext ctx, evStreamID id));
-int evCancelRW __P((evContext ctx, evStreamID id));
+struct iovec evConsIovec __P((void *, size_t));
+int evWrite __P((evContext, int, const struct iovec *, int,
+ evStreamFunc func, void *, evStreamID *));
+int evRead __P((evContext, int, const struct iovec *, int,
+ evStreamFunc func, void *, evStreamID *));
+int evTimeRW __P((evContext, evStreamID, evTimerID timer));
+int evUntimeRW __P((evContext, evStreamID));
+int evCancelRW __P((evContext, evStreamID));
/* ev_timers.c */
#define evConsTime __evConsTime
@@ -157,17 +154,16 @@ int evCancelRW __P((evContext ctx, evStreamID id));
#define evTouchIdleTimer __evTouchIdleTimer
struct timespec evConsTime __P((time_t sec, long nsec));
-struct timespec evAddTime __P((struct timespec add1, struct timespec add2));
-struct timespec evSubTime __P((struct timespec minu, struct timespec subtra));
+struct timespec evAddTime __P((struct timespec, struct timespec));
+struct timespec evSubTime __P((struct timespec, struct timespec));
struct timespec evNowTime __P((void));
struct timespec evLastEventTime __P((evContext));
struct timespec evTimeSpec __P((struct timeval));
struct timeval evTimeVal __P((struct timespec));
-int evCmpTime __P((struct timespec a, struct timespec b));
-int evSetTimer __P((evContext ctx, evTimerFunc func, void *uap,
- struct timespec due, struct timespec inter,
- evTimerID *id));
-int evClearTimer __P((evContext ctx, evTimerID id));
+int evCmpTime __P((struct timespec, struct timespec));
+int evSetTimer __P((evContext, evTimerFunc, void *, struct timespec,
+ struct timespec, evTimerID *));
+int evClearTimer __P((evContext, evTimerID));
int evResetTimer __P((evContext, evTimerID, evTimerFunc, void *,
struct timespec, struct timespec));
int evSetIdleTimer __P((evContext, evTimerFunc, void *, struct timespec,
@@ -183,10 +179,9 @@ int evTouchIdleTimer __P((evContext, evTimerID));
#define evUnwait __evUnwait
#define evDefer __evDefer
-int evWaitFor __P((evContext ctx, const void *tag, evWaitFunc func, void *uap,
- evWaitID *id));
-int evDo __P((evContext ctx, const void *tag));
-int evUnwait __P((evContext ctx, evWaitID id));
+int evWaitFor __P((evContext, const void *, evWaitFunc, void *, evWaitID *));
+int evDo __P((evContext, const void *));
+int evUnwait __P((evContext, evWaitID));
int evDefer __P((evContext, evWaitFunc, void *));
#ifdef __EVENTLIB_P_DEFINED
diff --git a/contrib/bind/include/isc/irpmarshall.h b/contrib/bind/include/isc/irpmarshall.h
index 30cef41..2ad85fc 100644
--- a/contrib/bind/include/isc/irpmarshall.h
+++ b/contrib/bind/include/isc/irpmarshall.h
@@ -16,7 +16,7 @@
*/
/*
- * $Id: irpmarshall.h,v 8.2 2001/05/29 05:47:10 marka Exp $
+ * $Id: irpmarshall.h,v 8.2.10.1 2003/06/02 06:04:03 marka Exp $
*/
#ifndef _IRPMARSHALL_H_INCLUDED
@@ -45,24 +45,23 @@
(x == AF_INET6 ? "AF_INET6" : "UNKNOWN"))
/* See comment below on usage */
-int irp_marshall_pw(const struct passwd *pw, char **buffer, size_t *len);
-int irp_unmarshall_pw(struct passwd *pw, char *buffer);
-int irp_marshall_gr(const struct group *gr, char **buffer, size_t *len);
-int irp_unmarshall_gr(struct group *gr, char *buffer);
-int irp_marshall_sv(const struct servent *sv, char **buffer, size_t *len);
-int irp_unmarshall_sv(struct servent *sv, char *buffer);
-int irp_marshall_pr(struct protoent *pr, char **buffer, size_t *len);
-int irp_unmarshall_pr(struct protoent *pr, char *buffer);
-int irp_marshall_ho(struct hostent *ho, char **buffer, size_t *len);
-int irp_unmarshall_ho(struct hostent *ho, char *buffer);
-int irp_marshall_ng(const char *host, const char *user, const char *domain,
- char **buffer, size_t *len);
-int irp_unmarshall_ng(const char **host, const char **user,
- const char **domain, char *buffer);
-int irp_marshall_nw(struct nwent *ne, char **buffer, size_t *len);
-int irp_unmarshall_nw(struct nwent *ne, char *buffer);
-int irp_marshall_ne(struct netent *ne, char **buffer, size_t *len);
-int irp_unmarshall_ne(struct netent *ne, char *buffer);
+int irp_marshall_pw(const struct passwd *, char **, size_t *);
+int irp_unmarshall_pw(struct passwd *, char *);
+int irp_marshall_gr(const struct group *, char **, size_t *);
+int irp_unmarshall_gr(struct group *, char *);
+int irp_marshall_sv(const struct servent *, char **, size_t *);
+int irp_unmarshall_sv(struct servent *, char *);
+int irp_marshall_pr(struct protoent *, char **, size_t *);
+int irp_unmarshall_pr(struct protoent *, char *);
+int irp_marshall_ho(struct hostent *, char **, size_t *);
+int irp_unmarshall_ho(struct hostent *, char *);
+int irp_marshall_ng(const char *, const char *, const char *,
+ char **, size_t *);
+int irp_unmarshall_ng(const char **, const char **, const char **, char *);
+int irp_marshall_nw(struct nwent *, char **, size_t *);
+int irp_unmarshall_nw(struct nwent *, char *);
+int irp_marshall_ne(struct netent *, char **, size_t *);
+int irp_unmarshall_ne(struct netent *, char *);
/*
* Functions to marshall and unmarshall various system data structures. We
diff --git a/contrib/bind/include/isc/logging.h b/contrib/bind/include/isc/logging.h
index 6d6976f..dc491dc 100644
--- a/contrib/bind/include/isc/logging.h
+++ b/contrib/bind/include/isc/logging.h
@@ -80,12 +80,15 @@ FILE * log_get_stream(log_channel);
char * log_get_filename(log_channel);
int log_check_channel(log_context, int, log_channel);
int log_check(log_context, int, int);
-void log_vwrite(log_context, int, int, const char *,
- va_list args);
#ifdef __GNUC__
+void log_vwrite(log_context, int, int, const char *,
+ va_list args)
+ __attribute__((__format__(__printf__, 4, 0)));
void log_write(log_context, int, int, const char *, ...)
__attribute__((__format__(__printf__, 4, 5)));
#else
+void log_vwrite(log_context, int, int, const char *,
+ va_list args);
void log_write(log_context, int, int, const char *, ...);
#endif
int log_new_context(int, char **, log_context *);
diff --git a/contrib/bind/include/isc/misc.h b/contrib/bind/include/isc/misc.h
index 4de1cee..d6e7b0c 100644
--- a/contrib/bind/include/isc/misc.h
+++ b/contrib/bind/include/isc/misc.h
@@ -16,7 +16,7 @@
*/
/*
- * $Id: misc.h,v 8.5 2001/06/18 06:40:43 marka Exp $
+ * $Id: misc.h,v 8.5.10.1 2003/06/02 06:04:03 marka Exp $
*/
#ifndef _ISC_MISC_H
@@ -27,7 +27,7 @@
#define bitncmp __bitncmp
/*#define isc_movefile __isc_movefile */
-extern int bitncmp(const void *l, const void *r, int n);
+extern int bitncmp(const void *, const void *, int);
extern int isc_movefile(const char *, const char *);
extern int isc_gethexstring(unsigned char *, size_t, int, FILE *,
diff --git a/contrib/bind/include/isc/tree.h b/contrib/bind/include/isc/tree.h
index 24e2a10..53c69b7 100644
--- a/contrib/bind/include/isc/tree.h
+++ b/contrib/bind/include/isc/tree.h
@@ -3,7 +3,7 @@
* vix 22jan93 [revisited; uses RCS, ANSI, POSIX; has bug fixes]
* vix 27jun86 [broken out of tree.c]
*
- * $Id: tree.h,v 8.2 1996/10/25 18:11:03 vixie Exp $
+ * $Id: tree.h,v 8.3 2002/12/03 05:26:48 marka Exp $
*/
@@ -28,6 +28,16 @@ typedef void *tree_t;
typedef char *tree_t;
#endif
+/*
+ * Do not taint namespace
+ */
+#define tree_add __tree_add
+#define tree_delete __tree_delete
+#define tree_init __tree_init
+#define tree_mung __tree_mung
+#define tree_srch __tree_srch
+#define tree_trav __tree_trav
+
typedef struct tree_s {
tree_t data;
diff --git a/contrib/bind/include/netgroup.h b/contrib/bind/include/netgroup.h
index 30efb94..fee6787 100644
--- a/contrib/bind/include/netgroup.h
+++ b/contrib/bind/include/netgroup.h
@@ -1,17 +1,19 @@
#ifndef netgroup_h
#define netgroup_h
-int getnetgrent(const char **machinep, const char **userp,
- const char **domainp);
+/*
+ * The standard is crazy. These values "belong" to getnetgrent() and
+ * shouldn't be altered by the caller.
+ */
+int getnetgrent __P((/* const */ char **, /* const */ char **,
+ /* const */ char **));
-int getnetgrent_r(char **machinep, char **userp, char **domainp,
- char *buffer, int buflen);
+int getnetgrent_r __P((char **, char **, char **, char *, int));
-void setnetgrent(const char *netgroup);
+void setnetgrent __P((const char *));
-void endnetgrent(void);
+void endnetgrent __P((void));
-int innetgr(const char *netgroup, const char *machine,
- const char *user, const char *domain);
+int innetgr __P((const char *, const char *, const char *, const char *));
#endif
diff --git a/contrib/bind/include/resolv.h b/contrib/bind/include/resolv.h
index 5497f30..d69deff 100644
--- a/contrib/bind/include/resolv.h
+++ b/contrib/bind/include/resolv.h
@@ -50,7 +50,7 @@
/*
* @(#)resolv.h 8.1 (Berkeley) 6/2/93
- * $Id: resolv.h,v 8.48 2002/05/31 06:05:29 marka Exp $
+ * $Id: resolv.h,v 8.50.6.2 2003/06/02 06:01:16 marka Exp $
*/
#ifndef _RESOLV_H_
@@ -75,7 +75,7 @@
* is new enough to contain a certain feature.
*/
-#define __RES 19991006
+#define __RES 20030124
/*
* This used to be defined in res_query.c, now it's in herror.c.
@@ -105,7 +105,7 @@ __END_DECLS
/*
* Resolver configuration file.
* Normally not present, but may contain the address of the
- * inital name server(s) to query and the domain search list.
+ * initial name server(s) to query and the domain search list.
*/
#ifndef _PATH_RESCONF
@@ -115,19 +115,13 @@ __END_DECLS
typedef enum { res_goahead, res_nextns, res_modified, res_done, res_error }
res_sendhookact;
-typedef res_sendhookact (*res_send_qhook)__P((struct sockaddr * const *ns,
- const u_char **query,
- int *querylen,
- u_char *ans,
- int anssiz,
- int *resplen));
+typedef res_sendhookact (*res_send_qhook)__P((struct sockaddr * const *,
+ const u_char **, int *,
+ u_char *, int, int *));
-typedef res_sendhookact (*res_send_rhook)__P((const struct sockaddr *ns,
- const u_char *query,
- int querylen,
- u_char *ans,
- int anssiz,
- int *resplen));
+typedef res_sendhookact (*res_send_rhook)__P((const struct sockaddr *,
+ const u_char *, int, u_char *,
+ int, int *));
struct res_sym {
int number; /* Identifying number, like T_MX */
@@ -154,7 +148,7 @@ struct res_sym {
struct __res_state_ext;
struct __res_state {
- int retrans; /* retransmition time interval */
+ int retrans; /* retransmission time interval */
int retry; /* number of times to retransmit */
#ifdef sun
u_int options; /* option flags - see below. */
@@ -219,6 +213,10 @@ union res_sockaddr_union {
#define RES_F_VC 0x00000001 /* socket is TCP */
#define RES_F_CONN 0x00000002 /* socket is connected */
#define RES_F_EDNS0ERR 0x00000004 /* EDNS0 caused errors */
+#define RES_F__UNUSED 0x00000008 /* (unused) */
+#define RES_F_LASTMASK 0x000000F0 /* ordinal server of last res_nsend */
+#define RES_F_LASTSHIFT 4 /* bit position of LASTMASK "flag" */
+#define RES_GETLAST(res) (((res)._flags & RES_F_LASTMASK) >> RES_F_LASTSHIFT)
/* res_findzonecut2() options */
#define RES_EXHAUSTIVE 0x00000001 /* always do all queries */
@@ -246,13 +244,10 @@ union res_sockaddr_union {
#define RES_NOCHECKNAME 0x00008000 /* do not check names for sanity. */
#define RES_KEEPTSIG 0x00010000 /* do not strip TSIG records */
#define RES_BLAST 0x00020000 /* blast all recursive servers */
-#define RES_NO_NIBBLE 0x00040000 /* disable IPv6 nibble mode reverse */
-#define RES_NO_BITSTRING 0x00080000 /* disable IPv6 bitstring mode reverse */
#define RES_NOTLDQUERY 0x00100000 /* don't unqualified name as a tld */
#define RES_USE_DNSSEC 0x00200000 /* use DNSSEC using OK bit in OPT */
/* KAME extensions: use higher bit to avoid conflict with ISC use */
#define RES_USE_DNAME 0x10000000 /* use DNAME */
-#define RES_USE_A6 0x20000000 /* use A6 */
#define RES_USE_EDNS0 0x40000000 /* use EDNS0 if configured */
#define RES_NO_NIBBLE2 0x80000000 /* disable alternate nibble lookup */
@@ -361,6 +356,7 @@ extern const struct res_sym __p_rcode_syms[];
#define p_time __p_time
#define p_type __p_type
#define p_rcode __p_rcode
+#define p_sockun __p_sockun
#define putlong __putlong
#define putshort __putshort
#define res_dnok __res_dnok
@@ -392,6 +388,18 @@ extern const struct res_sym __p_rcode_syms[];
#define res_nametotype __res_nametotype
#define res_setservers __res_setservers
#define res_getservers __res_getservers
+#define res_buildprotolist __res_buildprotolist
+#define res_destroyprotolist __res_destroyprotolist
+#define res_destroyservicelist __res_destroyservicelist
+#define res_get_nibblesuffix __res_get_nibblesuffix
+#define res_get_nibblesuffix2 __res_get_nibblesuffix2
+#define res_ourserver_p __res_ourserver_p
+#define res_protocolname __res_protocolname
+#define res_protocolnumber __res_protocolnumber
+#define res_send_setqhook __res_send_setqhook
+#define res_send_setrhook __res_send_setrhook
+#define res_servicename __res_servicename
+#define res_servicenumber __res_servicenumber
__BEGIN_DECLS
int res_hnok __P((const char *));
int res_ownok __P((const char *));
@@ -402,25 +410,26 @@ const char * sym_ntos __P((const struct res_sym *, int, int *));
const char * sym_ntop __P((const struct res_sym *, int, int *));
int b64_ntop __P((u_char const *, size_t, char *, size_t));
int b64_pton __P((char const *, u_char *, size_t));
-int loc_aton __P((const char *ascii, u_char *binary));
-const char * loc_ntoa __P((const u_char *binary, char *ascii));
+int loc_aton __P((const char *, u_char *));
+const char * loc_ntoa __P((const u_char *, char *));
int dn_skipname __P((const u_char *, const u_char *));
void putlong __P((u_int32_t, u_char *));
void putshort __P((u_int16_t, u_char *));
#ifndef __ultrix__
-u_int16_t _getshort __P((const u_char *src));
-u_int32_t _getlong __P((const u_char *src));
+u_int16_t _getshort __P((const u_char *));
+u_int32_t _getlong __P((const u_char *));
#endif
const char * p_class __P((int));
const char * p_time __P((u_int32_t));
const char * p_type __P((int));
const char * p_rcode __P((int));
+const char * p_sockun __P((union res_sockaddr_union, char *, size_t));
const u_char * p_cdnname __P((const u_char *, const u_char *, int, FILE *));
const u_char * p_cdname __P((const u_char *, const u_char *, FILE *));
-const u_char * p_fqnname __P((const u_char *cp, const u_char *msg,
+const u_char * p_fqnname __P((const u_char *, const u_char *,
int, char *, int));
const u_char * p_fqname __P((const u_char *, const u_char *, FILE *));
-const char * p_option __P((u_long option));
+const char * p_option __P((u_long));
char * p_secstodate __P((u_long));
int dn_count_labels __P((const char *));
int dn_comp __P((const char *, u_char *, int,
@@ -428,11 +437,11 @@ int dn_comp __P((const char *, u_char *, int,
int dn_expand __P((const u_char *, const u_char *, const u_char *,
char *, int));
u_int res_randomid __P((void));
-int res_nameinquery __P((const char *, int, int,
- const u_char *, const u_char *));
+int res_nameinquery __P((const char *, int, int, const u_char *,
+ const u_char *));
int res_queriesmatch __P((const u_char *, const u_char *,
const u_char *, const u_char *));
-const char * p_section __P((int section, int opcode));
+const char * p_section __P((int, int));
/* Things involving a resolver context. */
int res_ninit __P((res_state));
int res_nisourserver __P((const res_state,
@@ -441,16 +450,15 @@ void fp_resstat __P((const res_state, FILE *));
void res_pquery __P((const res_state, const u_char *, int, FILE *));
const char * res_hostalias __P((const res_state, const char *,
char *, size_t));
-int res_nquery __P((res_state,
- const char *, int, int, u_char *, int));
-int res_nsearch __P((res_state, const char *, int,
- int, u_char *, int));
-int res_nquerydomain __P((res_state,
- const char *, const char *, int, int,
- u_char *, int));
-int res_nmkquery __P((res_state,
- int, const char *, int, int, const u_char *,
- int, const u_char *, u_char *, int));
+int res_nquery __P((res_state, const char *, int, int,
+ u_char *, int));
+int res_nsearch __P((res_state, const char *, int, int, u_char *,
+ int));
+int res_nquerydomain __P((res_state, const char *, const char *,
+ int, int, u_char *, int));
+int res_nmkquery __P((res_state, int, const char *, int, int,
+ const u_char *, int, const u_char *,
+ u_char *, int));
int res_nsend __P((res_state, const u_char *, int, u_char *, int));
int res_nsendsigned __P((res_state, const u_char *, int,
ns_tsig_key *, u_char *, int));
@@ -461,20 +469,19 @@ int res_findzonecut2 __P((res_state, const char *, ns_class, int,
union res_sockaddr_union *, int));
void res_nclose __P((res_state));
int res_nopt __P((res_state, int, u_char *, int, int));
-void res_send_setqhook __P((res_send_qhook hook));
-void res_send_setrhook __P((res_send_rhook hook));
+void res_send_setqhook __P((res_send_qhook));
+void res_send_setrhook __P((res_send_rhook));
int __res_vinit __P((res_state, int));
void res_destroyservicelist __P((void));
-const char * res_servicename __P((u_int16_t port, const char *proto));
-const char * res_protocolname __P((int num));
+const char * res_servicename __P((u_int16_t, const char *));
+const char * res_protocolname __P((int));
void res_destroyprotolist __P((void));
void res_buildprotolist __P((void));
const char * res_get_nibblesuffix __P((res_state));
const char * res_get_nibblesuffix2 __P((res_state));
-const char * res_get_bitstringsuffix __P((res_state));
void res_ndestroy __P((res_state));
-u_int16_t res_nametoclass __P((const char *buf, int *success));
-u_int16_t res_nametotype __P((const char *buf, int *success));
+u_int16_t res_nametoclass __P((const char *, int *));
+u_int16_t res_nametotype __P((const char *, int *));
void res_setservers __P((res_state,
const union res_sockaddr_union *, int));
int res_getservers __P((res_state,
diff --git a/contrib/bind/lib/dst/bsafe_link.c b/contrib/bind/lib/dst/bsafe_link.c
index 7c9e481..e1173c6 100644
--- a/contrib/bind/lib/dst/bsafe_link.c
+++ b/contrib/bind/lib/dst/bsafe_link.c
@@ -1,5 +1,5 @@
#if defined(BSAFE) || defined(DNSSAFE)
-static const char rcsid[] = "$Header: /proj/cvs/isc/bind8/src/lib/dst/bsafe_link.c,v 1.15 2001/09/25 04:50:28 marka Exp $";
+static const char rcsid[] = "$Header: /proj/cvs/isc/bind8/src/lib/dst/bsafe_link.c,v 1.16 2002/12/03 05:26:49 marka Exp $";
/*
* Portions Copyright (c) 1995-1998 by Trusted Information Systems, Inc.
@@ -1113,6 +1113,8 @@ T_realloc(POINTER block, unsigned int len)
}
#else /* BSAFE NOT available */
+#define dst_bsafe_init __dst_bsafe_init
+
int
dst_bsafe_init()
{
diff --git a/contrib/bind/lib/dst/cylink_link.c b/contrib/bind/lib/dst/cylink_link.c
index 6c2bdae..5d22074 100644
--- a/contrib/bind/lib/dst/cylink_link.c
+++ b/contrib/bind/lib/dst/cylink_link.c
@@ -1,5 +1,5 @@
#ifdef CYLINK_DSS
-static const char rcsid[] = "$Header: /proj/cvs/isc/bind8/src/lib/dst/cylink_link.c,v 1.9 2001/05/29 05:48:05 marka Exp $";
+static const char rcsid[] = "$Header: /proj/cvs/isc/bind8/src/lib/dst/cylink_link.c,v 1.10 2002/12/03 05:26:49 marka Exp $";
/*
* Portions Copyright (c) 1995-1998 by Trusted Information Systems, Inc.
@@ -662,6 +662,8 @@ memcpyend(void *dest, const void *src, size_t n, size_t size) {
}
#else
+#define dst_cylink_init __dst_cylink_init
+
int
dst_cylink_init()
{
diff --git a/contrib/bind/lib/dst/dst_api.c b/contrib/bind/lib/dst/dst_api.c
index cc2a7e4..e5f8cdb 100644
--- a/contrib/bind/lib/dst/dst_api.c
+++ b/contrib/bind/lib/dst/dst_api.c
@@ -1,5 +1,5 @@
#ifndef LINT
-static const char rcsid[] = "$Header: /proj/cvs/isc/bind8/src/lib/dst/dst_api.c,v 1.20 2001/07/26 01:20:08 marka Exp $";
+static const char rcsid[] = "$Header: /proj/cvs/isc/bind8/src/lib/dst/dst_api.c,v 1.21 2002/06/28 06:58:19 marka Exp $";
#endif
/*
@@ -217,7 +217,6 @@ dst_compare_keys(const DST_KEY *key1, const DST_KEY *key2)
* Then data is hashed (SIG_MODE_UPDATE). Finally the signature
* itself is created (SIG_MODE_FINAL). This function can be called
* once with INIT, UPDATE and FINAL modes all set, or it can be
-
* called separately with a different mode set for each step. The
* UPDATE step can be repeated.
* Parameters
@@ -457,7 +456,7 @@ dst_s_write_private_key(const DST_KEY *key)
* filename of the key file to be read.
* Returns
* NULL If the key does not exist or no name is supplied.
- * NON-NULL Initalized key structure if the key exists.
+ * NON-NULL Initialized key structure if the key exists.
*/
static DST_KEY *
diff --git a/contrib/bind/lib/dst/hmac_link.c b/contrib/bind/lib/dst/hmac_link.c
index 12e22a8..b689524 100644
--- a/contrib/bind/lib/dst/hmac_link.c
+++ b/contrib/bind/lib/dst/hmac_link.c
@@ -1,6 +1,6 @@
#ifdef HMAC_MD5
#ifndef LINT
-static const char rcsid[] = "$Header: /proj/cvs/isc/bind8/src/lib/dst/hmac_link.c,v 1.9 2001/05/29 05:48:10 marka Exp $";
+static const char rcsid[] = "$Header: /proj/cvs/isc/bind8/src/lib/dst/hmac_link.c,v 1.10 2002/12/03 05:26:49 marka Exp $";
#endif
/*
* Portions Copyright (c) 1995-1998 by Trusted Information Systems, Inc.
@@ -481,15 +481,10 @@ dst_hmac_md5_init()
}
#else
+#define dst_hmac_md5_init __dst_hmac_md5_init
+
int
dst_hmac_md5_init(){
return (0);
}
#endif
-
-
-
-
-
-
-
diff --git a/contrib/bind/lib/irs/dns_gr.c b/contrib/bind/lib/irs/dns_gr.c
index a622345..b314f11 100644
--- a/contrib/bind/lib/irs/dns_gr.c
+++ b/contrib/bind/lib/irs/dns_gr.c
@@ -16,7 +16,7 @@
*/
#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: dns_gr.c,v 1.20 2001/05/29 05:48:27 marka Exp $";
+static const char rcsid[] = "$Id: dns_gr.c,v 1.21 2002/07/08 06:26:09 marka Exp $";
#endif
/*
@@ -226,7 +226,7 @@ get_hes_group(struct irs_gr *this, const char *name, const char *type) {
goto cleanup;
*cp++ = '\0';
- errno = -1;
+ errno = 0;
t = strtoul(cp, NULL, 10);
if (errno == ERANGE)
goto cleanup;
diff --git a/contrib/bind/lib/irs/dns_ho.c b/contrib/bind/lib/irs/dns_ho.c
index 6c0a6e7..1b37e3d 100644
--- a/contrib/bind/lib/irs/dns_ho.c
+++ b/contrib/bind/lib/irs/dns_ho.c
@@ -52,7 +52,7 @@
/* BIND Id: gethnamaddr.c,v 8.15 1996/05/22 04:56:30 vixie Exp $ */
#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: dns_ho.c,v 1.39 2002/06/27 03:56:32 marka Exp $";
+static const char rcsid[] = "$Id: dns_ho.c,v 1.42.6.1 2003/06/02 09:24:40 marka Exp $";
#endif /* LIBC_SCCS and not lint */
/* Imports. */
@@ -95,7 +95,7 @@ static const char rcsid[] = "$Id: dns_ho.c,v 1.39 2002/06/27 03:56:32 marka Exp
#define MAXALIASES 35
#define MAXADDRS 35
-#define MAXPACKET (1024*64)
+#define MAXPACKET (65535) /* Maximum TCP message size */
#define BOUNDS_CHECK(ptr, count) \
if ((ptr) + (count) > eom) { \
@@ -172,15 +172,6 @@ static struct hostent * gethostans(struct irs_ho *this,
const struct addrinfo *pai);
static int add_hostent(struct pvt *pvt, char *bp, char **hap,
struct addrinfo *ai);
-static const u_char * ar_head(const u_char *, int, const u_char *,
- const u_char *, struct pvt *,
- int (*)(const char *));
-static struct addrinfo * a6_expand(const u_char *, const u_char *, int,
- const u_char *, const u_char *,
- const struct in6_addr *, int,
- const struct addrinfo *,
- struct pvt *, int (*)(const char *), int *);
-static const char *dname_subst(const char *, const char *, const char *);
static int init(struct irs_ho *this);
/* Exports. */
@@ -257,21 +248,19 @@ ho_byname2(struct irs_ho *this, const char *name, int af)
char tmp[NS_MAXDNAME];
const char *cp;
struct addrinfo ai;
- struct dns_res_target *q, *q2, *p;
+ struct dns_res_target *q, *p;
int querystate = RESQRY_FAIL;
if (init(this) == -1)
return (NULL);
q = memget(sizeof(*q));
- q2 = memget(sizeof(*q2));
- if (q == NULL || q2 == NULL) {
+ if (q == NULL) {
RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
errno = ENOMEM;
goto cleanup;
}
memset(q, 0, sizeof(q));
- memset(q2, 0, sizeof(q2));
switch (af) {
case AF_INET:
@@ -285,21 +274,10 @@ ho_byname2(struct irs_ho *this, const char *name, int af)
case AF_INET6:
size = IN6ADDRSZ;
q->qclass = C_IN;
- q->qtype = ns_t_a6;
+ q->qtype = T_AAAA;
q->answer = q->qbuf.buf;
q->anslen = sizeof(q->qbuf);
- q->next = q2;
-#ifdef RES_USE_A6
- if ((pvt->res->options & RES_USE_A6) == 0)
- q->action = RESTGT_IGNORE;
- else
-#endif
- q->action = RESTGT_DOALWAYS;
- q2->qclass = C_IN;
- q2->qtype = T_AAAA;
- q2->answer = q2->qbuf.buf;
- q2->anslen = sizeof(q2->qbuf);
- q2->action = RESTGT_AFTERFAILURE;
+ q->action = RESTGT_DOALWAYS;
break;
default:
RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
@@ -349,8 +327,6 @@ ho_byname2(struct irs_ho *this, const char *name, int af)
cleanup:
if (q != NULL)
memput(q, sizeof(*q));
- if (q2 != NULL)
- memput(q2, sizeof(*q2));
return(hp);
}
@@ -363,7 +339,7 @@ ho_byaddr(struct irs_ho *this, const void *addr, int len, int af)
struct hostent *hp = NULL;
struct addrinfo ai;
struct dns_res_target *q, *q2, *p;
- int n, size;
+ int n, size, i;
int querystate = RESQRY_FAIL;
if (init(this) == -1)
@@ -440,20 +416,36 @@ ho_byaddr(struct irs_ho *this, const void *addr, int len, int af)
if (q->action != RESTGT_IGNORE) {
qp = q->qname;
for (n = IN6ADDRSZ - 1; n >= 0; n--) {
- qp += SPRINTF((qp, "%x.%x.",
+ i = SPRINTF((qp, "%x.%x.",
uaddr[n] & 0xf,
(uaddr[n] >> 4) & 0xf));
+ if (i < 0)
+ abort();
+ qp += i;
}
+#ifdef HAVE_STRLCAT
+ strlcat(q->qname, res_get_nibblesuffix(pvt->res),
+ sizeof(q->qname));
+#else
strcpy(qp, res_get_nibblesuffix(pvt->res));
+#endif
}
if (q2->action != RESTGT_IGNORE) {
qp = q2->qname;
for (n = IN6ADDRSZ - 1; n >= 0; n--) {
- qp += SPRINTF((qp, "%x.%x.",
+ i = SPRINTF((qp, "%x.%x.",
uaddr[n] & 0xf,
(uaddr[n] >> 4) & 0xf));
+ if (i < 0)
+ abort();
+ qp += i;
}
+#ifdef HAVE_STRLCAT
+ strlcat(q->qname, res_get_nibblesuffix2(pvt->res),
+ sizeof(q->qname));
+#else
strcpy(qp, res_get_nibblesuffix2(pvt->res));
+#endif
}
break;
default:
@@ -563,7 +555,7 @@ ho_addrinfo(struct irs_ho *this, const char *name, const struct addrinfo *pai)
int n;
char tmp[NS_MAXDNAME];
const char *cp;
- struct dns_res_target *q, *q2, *q3, *p;
+ struct dns_res_target *q, *q2, *p;
struct addrinfo sentinel, *cur;
int querystate = RESQRY_FAIL;
@@ -575,42 +567,28 @@ ho_addrinfo(struct irs_ho *this, const char *name, const struct addrinfo *pai)
q = memget(sizeof(*q));
q2 = memget(sizeof(*q2));
- q3 = memget(sizeof(*q3));
- if (q == NULL || q2 == NULL || q3 == NULL) {
+ if (q == NULL || q2 == NULL) {
RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
errno = ENOMEM;
goto cleanup;
}
memset(q, 0, sizeof(q2));
memset(q2, 0, sizeof(q2));
- memset(q3, 0, sizeof(q3));
switch (pai->ai_family) {
case AF_UNSPEC:
/* prefer IPv6 */
q->qclass = C_IN;
- q->qtype = ns_t_a6;
+ q->qtype = T_AAAA;
q->answer = q->qbuf.buf;
q->anslen = sizeof(q->qbuf);
q->next = q2;
-#ifdef RES_USE_A6
- if ((pvt->res->options & RES_USE_A6) == 0)
- q->action = RESTGT_IGNORE;
- else
-#endif
- q->action = RESTGT_DOALWAYS;
+ q->action = RESTGT_DOALWAYS;
q2->qclass = C_IN;
- q2->qtype = T_AAAA;
+ q2->qtype = T_A;
q2->answer = q2->qbuf.buf;
q2->anslen = sizeof(q2->qbuf);
- q2->next = q3;
- /* try AAAA only when A6 query fails */
- q2->action = RESTGT_AFTERFAILURE;
- q3->qclass = C_IN;
- q3->qtype = T_A;
- q3->answer = q3->qbuf.buf;
- q3->anslen = sizeof(q3->qbuf);
- q3->action = RESTGT_DOALWAYS;
+ q2->action = RESTGT_DOALWAYS;
break;
case AF_INET:
q->qclass = C_IN;
@@ -621,21 +599,10 @@ ho_addrinfo(struct irs_ho *this, const char *name, const struct addrinfo *pai)
break;
case AF_INET6:
q->qclass = C_IN;
- q->qtype = ns_t_a6;
+ q->qtype = T_AAAA;
q->answer = q->qbuf.buf;
q->anslen = sizeof(q->qbuf);
- q->next = q2;
-#ifdef RES_USE_A6
- if ((pvt->res->options & RES_USE_A6) == 0)
- q->action = RESTGT_IGNORE;
- else
-#endif
- q->action = RESTGT_DOALWAYS;
- q2->qclass = C_IN;
- q2->qtype = T_AAAA;
- q2->answer = q2->qbuf.buf;
- q2->anslen = sizeof(q2->qbuf);
- q2->action = RESTGT_AFTERFAILURE;
+ q->action = RESTGT_DOALWAYS;
break;
default:
RES_SET_H_ERRNO(pvt->res, NO_RECOVERY); /* better error? */
@@ -688,375 +655,9 @@ ho_addrinfo(struct irs_ho *this, const char *name, const struct addrinfo *pai)
memput(q, sizeof(*q));
if (q2 != NULL)
memput(q2, sizeof(*q2));
- if (q3 != NULL)
- memput(q3, sizeof(*q3));
return(sentinel.ai_next);
}
-static const u_char *
-ar_head(cp, count, msg, eom, pvt, name_ok)
- const u_char *cp, *msg, *eom;
- int count;
- struct pvt *pvt;
- int (*name_ok)(const char *);
-{
- int n;
- char buf[1024]; /* XXX */
-
- while (count-- > 0 && cp < eom) {
- n = dn_expand(msg, eom, cp, buf, sizeof(buf));
- if (n < 0 || !maybe_ok(pvt->res, buf, name_ok))
- goto end;
- cp += n; /* name */
- if (cp + 3 * INT16SZ + INT32SZ >= eom)
- goto end;
- cp += INT16SZ; /* type */
- cp += INT16SZ + INT32SZ; /* class, TTL */
- n = ns_get16(cp);
- cp += n + INT16SZ; /* len */
- }
- return(cp);
-
- end:
- return(eom); /* XXX */
-}
-
-/* XXX: too many arguments */
-static struct addrinfo *
-a6_expand(const u_char *ansbuf, const u_char *a6p,
- int a6len, const u_char *arp, const u_char *eom,
- const struct in6_addr *in6, int plen, const struct addrinfo *pai,
- struct pvt *pvt, int (*name_ok)(const char *), int *errorp)
-{
- struct in6_addr a;
- int n, pbyte, plen1, pbyte1, error = 0;
- const u_char *cp;
- struct addrinfo sentinel, *cur;
- char pname[1024], buf[1024]; /* XXX */
-
- *errorp = NETDB_SUCCESS;
- memset(&sentinel, 0, sizeof(sentinel));
- cur = &sentinel;
-
- /*
- * Validate A6 parameters.
- */
- if (a6len == 0) { /* an A6 record must contain at least 1 byte. */
- error = NO_RECOVERY;
- goto bad;
- }
- /* prefix length check. */
- if ((plen1 = *a6p) > 128) {
- error = NO_RECOVERY;
- goto bad;
- }
- if (plen1 > plen) {
- /*
- * New length must not be greater than old one.
- * Ignore the record as specified in RFC 2874
- * Section 3.1.2.
- */
- return(NULL); /* just ignore. */
- }
- /* boundary check for new plen and prefix addr */
- pbyte1 = (plen1 & ~7) / 8;
- if ((int)sizeof(struct in6_addr) - pbyte1 > a6len - 1) {
- error = NO_RECOVERY;
- goto bad;
- }
-
- /*
- * merge the new prefix portion.
- * <--- plen(bits) --->
- * <--- pbyte ---><-b->
- * 000000000000000pppppxxxxxxxxxxx(= in6, 0: unknown, x: known, p: pad)
- * PP++++++++(+ should be merged. P: padding, must be 0)
- * <-- plen1-->
- * <-pbyte1->
- * ^a6p+1
- * The result should be:
- * 0000000000PP++++++++xxxxxxxxxxx(= a)
- */
- pbyte = (plen & ~7) / 8;
- a = *in6;
- if (pbyte > pbyte1) {
- /* N.B. the case of "pbyte1 == 128" is implicitly excluded. */
- int b = plen % 8; /* = the length of "pp..." above */
- u_char c_hi, c_lo;
-
- memcpy(&a.s6_addr[pbyte1], a6p + 1, pbyte - pbyte1);
- if (b > 0) {
- c_hi = a6p[pbyte - pbyte1 + 1];
- c_lo = in6->s6_addr[pbyte];
- a.s6_addr[pbyte] =
- (c_hi & (0xff << (8 - b))) |
- ((0x00ff >> b) & c_lo);
- }
- }
-
-#if 0 /* for debug */
- if ((pvt->res->options & RES_DEBUG) != 0) {
- u_char ntopbuf[INET6_ADDRSTRLEN];
-
- inet_ntop(AF_INET6, &a, ntopbuf, sizeof(ntopbuf));
- printf("a6_expand: %s\\%d\n", ntopbuf, plen1);
- }
-#endif
-
- if (plen1 == 0) {
- /* Here is the end of A6 chain. make addrinfo, then return. */
- return(addr2addrinfo(pai, (const char *)&a));
- }
-
- /*
- * Expand the new prefix name. Since the prefix name must not be
- * compressed (RFC 2874 Section 3.1.1), we could use ns_name_ntop()
- * here if it had a stricter boundary check.
- */
- cp = a6p + 1 + (sizeof(*in6) - pbyte1);
- n = dn_expand(ansbuf, eom, cp, pname, sizeof(pname));
- if (n < 0 || !maybe_ok(pvt->res, pname, name_ok)) {
- error = NO_RECOVERY;
- goto bad;
- }
- if (cp + n != a6p + a6len) { /* length mismatch */
- error = NO_RECOVERY;
- goto bad;
- }
-
- /*
- * we need (more) additional section records, but no one is
- * available, which possibly means a malformed answer.
- */
- if (arp == NULL) {
- error = NO_RECOVERY; /* we can't resolve the chain. */
- goto bad;
- }
-
- /*
- * Loop thru the rest of the buffer, searching for the next A6 record
- * that has the same owner name as the prefix name. If found, then
- * recursively call this function to expand the whole A6 chain.
- */
- plen = plen1;
- for (cp = arp; cp != NULL && cp < eom; cp += n) {
- int class, type;
-
- n = dn_expand(ansbuf, eom, cp, buf, sizeof(buf));
- if (n < 0 || !maybe_ok(pvt->res, buf, name_ok)) {
- error = NO_RECOVERY;
- goto bad;
- }
- cp += n; /* name */
- if (cp + 3 * INT16SZ + INT32SZ > eom) {
- error = NO_RECOVERY;
- goto bad;
- }
- type = ns_get16(cp);
- cp += INT16SZ; /* type */
- class = ns_get16(cp);
- cp += INT16SZ + INT32SZ; /* class, TTL */
- n = ns_get16(cp);
- cp += INT16SZ; /* len */
- if (cp + n > eom) {
- error = NO_RECOVERY;
- goto bad;
- }
- if (class != C_IN || type != ns_t_a6) {
- /* we are only interested in A6 records. skip others */
- continue;
- }
-
- if (ns_samename(buf, pname) != 1) {
- continue;
- }
-
- /* Proceed to the next record in the chain. */
- cur->ai_next = a6_expand(ansbuf, cp, n, cp + n, eom,
- (const struct in6_addr *)&a,
- plen, pai, pvt, name_ok, &error);
- if (error != NETDB_SUCCESS)
- goto bad;
- while (cur && cur->ai_next)
- cur = cur->ai_next;
- }
-
- return(sentinel.ai_next);
-
- bad:
- *errorp = error;
- if (sentinel.ai_next)
- freeaddrinfo(sentinel.ai_next);
- return(NULL);
-}
-
-static const char *
-dname_subst(const char *qname0, const char *owner0, const char *target) {
- char owner[MAXDNAME];
- static char qname[MAXDNAME];
- const char blabelhead[] = "\\[x"; /* we can assume hex strings */
- int qlen, olen;
- int bufsiz = sizeof(qname);
-
- /* make local copies, which are canonicalized. */
- if (ns_makecanon(qname0, qname, sizeof(qname)) < 0 ||
- ns_makecanon(owner0, owner, sizeof(owner)) < 0)
- return(NULL);
- qlen = strlen(qname);
- olen = strlen(owner);
- /* from now on, do not refer to qname0 nor owner0. */
-
- /*
- * check if QNAME is a subdomain of OWNER.
- * XXX: currently, we only handle the following two cases:
- * (A) none of the labels are bitlabels, or
- * (B) both of the head labels are bitlabels (and the following
- * labels are NOT bitlabels).
- * If we pass the check, then subtract the remaining part from QNAME.
- * ex. (A) qname=www.foo.com,owner=foo.com => new qname=www.
- * (B) qname=\[x3ffe0501/32].foo.com,owner=\[x3ffe/16].foo.com
- * => new qname=\[x0501/16].
- */
- if (ns_samedomain(qname, owner)) { /* check (A) */
- /* at this point, qlen must not be smaller than olen */
- qname[qlen - olen] = 0;
- bufsiz -= (qlen - olen);
- } else { /* check (B) */
- char *parent0, *parent1;
- /* the following 3 have enough size to store 1 bitlabel */
- u_char qlabel[64], olabel[64], newlabel[64];
- int qlabellen, olabellen;
-
- if (strncmp(qname, blabelhead, 3) != 0 ||
- strncmp(owner, blabelhead, 3) != 0)
- return(NULL);
- /*
- * Both two begin with bitlabels. The succeeding parts
- * must exact match.
- */
- if ((parent0 = strchr(qname, '.')) == NULL ||
- (parent1 = strchr(owner, '.')) == NULL)
- return(NULL);
-
- /* ns_samename allows names to begin with '.' */
- if (ns_samename(parent0, parent1) != 1)
- return(NULL);
-
- /* cut the upper domain parts off. */
- *(parent0 + 1) = 0;
- *(parent1 + 1) = 0;
- /* convert the textual form into binary one. */
- if (ns_name_pton(qname, qlabel, sizeof(qlabel)) < 0 ||
- ns_name_pton(owner, olabel, sizeof(olabel)) < 0)
- return(NULL);
- if ((qlabellen = *(qlabel + 1)) == 0)
- qlabellen = 256;
- if ((olabellen = *(olabel + 1)) == 0)
- olabellen = 256;
- if (olabellen > qlabellen)
- return(NULL); /* owner does not contain qname. */
- else {
- int qplen = (qlabellen + 7) / 8;
- int oplen = (olabellen + 7) / 8;
- int sft = olabellen % 8;
- int nllen, n;
- u_char *qp, *op, *np;
-
- /* skip ELT and Count. */
- qp = qlabel + 2;
- op = olabel + 2;
-
- /* check if olabel is a "subdomain" of qlabel. */
- if (memcmp(qp, op, oplen - 1) != 0)
- return(NULL);
- if (sft > 0) {
- /* compare trailing bits (between 1 and 7) */
- if ((qp[qplen - 1] & (0xff << sft)) !=
- op[qplen - 1])
- return(NULL);
- }
-
- /* OK, get remaining bits from qlabel. */
- np = newlabel;
- if (olabellen == qlabellen) {
- /*
- * Two names (including bitlabels) are exactly
- * same. Discard the whole names.
- * XXX: ns_samename() above should exclude
- * this case...
- */
- qname[0] = 0;
- goto maketarget;
- }
- *np++ = 0x41; /* XXX hardcoding */
- *np++ = nllen = (qlabellen - olabellen);
- if (sft == 0) {
- /*
- * No alignment issue. can just use memcpy.
- * Note that the "else" part below contains
- * this case. We separate the two cases just
- * for efficiency.
- * We assume that ns_name_pton above ensures
- * QP does not contain trailing garbages.
- */
- memcpy(np, qp + oplen, qplen - oplen);
- np += qplen - oplen;
- *np = 0;
- } else {
- /*
- * copy the lower (8-SFT) bits of QP to the
- * upper (8-SFT) bits of NP, then copy the
- * upper SFT bits of QP+1 to the lower SFT bits
- * of NP, and so on...
- * if QP is xxxyyyyy zzzwww..., then
- * NP would be yyyyyzzz ...
- * Again, we assume QP does not contain
- * trailing garbages.
- */
- qp += (oplen - 1);
- while (nllen > 0) {
- *np = (*qp << sft) & 0xff;
- if ((nllen -= (8 - sft)) <= 0)
- break; /* done */
- qp++;
- *np |= ((*qp >> sft) & 0xff);
- np++;
- nllen -= sft;
- }
- *++np = 0;
- }
-
- /*
- * make a new bitlabel with the remaining bits.
- * Note that there's no buffer boundary issue, since
- * qlabel, olabel, and newlabel all have the same size.
- * ns_name_ntop() must not return 0, since we have
- * a non-empty bitlabel.
- */
- if ((n = ns_name_ntop(newlabel, qname, sizeof(qname)))
- <= 0)
- return(NULL);
- bufsiz -= n;
- if (qname[n - 1] != '.') { /* XXX no trailing dot */
- qname[n - 1] = '.';
- qname[n] = 0;
- bufsiz--;
- }
-
- }
- }
-
- maketarget:
- /*
- * Finally, append the remaining part (maybe empty) to the new target.
- */
- if (bufsiz < (int)strlen(target)) /* bufsiz takes care of the \0. */
- return(NULL);
- strcat(qname, target);
-
- return((const char *)qname);
-}
-
static void
ho_res_set(struct irs_ho *this, struct __res_state *res,
void (*free_res)(void *)) {
@@ -1092,7 +693,6 @@ gethostans(struct irs_ho *this,
char *bp, *ep, **ap, **hap;
char tbuf[MAXDNAME+1];
struct addrinfo sentinel, *cur, ai;
- const u_char *arp = NULL;
if (pai == NULL) abort();
if (ret_aip != NULL)
@@ -1103,7 +703,6 @@ gethostans(struct irs_ho *this,
tname = qname;
eom = ansbuf + anslen;
switch (qtype) {
- case ns_t_a6:
case T_A:
case T_AAAA:
case T_ANY: /* use T_ANY only for T_A/T_AAAA lookup */
@@ -1148,8 +747,7 @@ gethostans(struct irs_ho *this,
RES_SET_H_ERRNO(pvt->res, NO_RECOVERY);
return (NULL);
}
- if (qtype == T_A || qtype == T_AAAA ||
- qtype == ns_t_a6 || qtype == T_ANY) {
+ if (qtype == T_A || qtype == T_AAAA || qtype == T_ANY) {
/* res_nsend() has already verified that the query name is the
* same as the one we sent; this just gets the expanded name
* (i.e., with the succeeding search-domain tacked on).
@@ -1193,8 +791,8 @@ gethostans(struct irs_ho *this,
continue;
}
eor = cp + n;
- if ((qtype == T_A || qtype == T_AAAA || qtype == ns_t_a6 ||
- qtype == T_ANY) && type == T_CNAME) {
+ if ((qtype == T_A || qtype == T_AAAA || qtype == T_ANY) &&
+ type == T_CNAME) {
if (haveanswer) {
int level = LOG_CRIT;
#ifdef LOG_SECURITY
@@ -1222,58 +820,16 @@ gethostans(struct irs_ho *this,
had_error++;
continue;
}
+#ifdef HAVE_STRLCPY
+ strlcpy(bp, tbuf, ep - bp);
+#else
strcpy(bp, tbuf);
+#endif
pvt->host.h_name = bp;
hname = bp;
bp += n;
continue;
}
- if (type == ns_t_dname) {
- const char *t0, *t;
-
- /*
- * just replace the query target; do not update the
- * alias list. (Or should we?)
- */
- t0 = (qtype == T_PTR) ? tname : hname;
-
- n = dn_expand(ansbuf, eor, cp, tbuf, sizeof(tbuf));
- if (n < 0 || !maybe_dnok(pvt->res, tbuf)) {
- had_error++;
- continue;
- }
-#ifdef RES_USE_DNAME
- if ((pvt ->res->options & RES_USE_DNAME) == 0) {
- cp += n;
- continue;
- }
-#endif
- if ((t = dname_subst(t0, bp, tbuf)) == NULL) {
- cp += n;
- continue;
- }
-#if 0 /* for debug */
- if ((pvt->res->options & RES_DEBUG) != 0) {
- printf("DNAME owner=%s, target=%s, next=%s\n",
- bp, tbuf, t);
- }
-#endif
- cp += n;
-
- n = strlen(t) + 1; /* for the \0 */
- if (n > (ep - bp)) {
- had_error++;
- continue;
- }
- strcpy(bp, t);
- if (qtype == T_PTR)
- tname = bp;
- else
- hname = bp;
- bp += n;
-
- continue;
- }
if (qtype == T_PTR && type == T_CNAME) {
n = dn_expand(ansbuf, eor, cp, tbuf, sizeof tbuf);
if (n < 0 || !maybe_dnok(pvt->res, tbuf)) {
@@ -1300,14 +856,17 @@ gethostans(struct irs_ho *this,
had_error++;
continue;
}
+#ifdef HAVE_STRLCPY
+ strlcpy(bp, tbuf, ep - bp);
+#else
strcpy(bp, tbuf);
+#endif
tname = bp;
bp += n;
continue;
}
if (qtype == T_ANY) {
- if (!(type == T_A || type == T_AAAA ||
- type == ns_t_a6)) {
+ if (!(type == T_A || type == T_AAAA)) {
cp += n;
continue;
}
@@ -1346,66 +905,6 @@ gethostans(struct irs_ho *this,
bp += n;
}
break;
- case ns_t_a6: {
- struct in6_addr in6;
- struct addrinfo ai;
-
-#ifdef RES_USE_A6
- if ((pvt->res->options & RES_USE_A6) == 0) {
- cp += n;
- continue;
- }
-#endif
-
- if (ns_samename(hname, bp) != 1) {
- cp += n;
- continue;
- }
-
- /*
- * search for the top of the additional section.
- * once found, keep it for the case where we have
- * more than one A6 record.
- * XXX: however, we may not need this part.
- */
- if (arp == NULL && arcount > 0) {
- int nscount = ntohs(hp->nscount);
-
- arp = ar_head(cp + n, nscount + ancount - 1,
- ansbuf, eom, pvt, name_ok);
- }
-
- /* recursively collect the whole A6 chain */
- ai = *pai; /* XXX: we can't override constant pai */
- ai.ai_family = AF_INET6;
- memset(&in6, 0, sizeof(in6)); /* just for safety */
- cur->ai_next = a6_expand(ansbuf, cp, n, arp, eom,
- &in6, 128,
- (const struct addrinfo *)&ai,
- pvt, name_ok, &error);
- if (error != NETDB_SUCCESS) {
-#ifdef DEBUG
- /* in this case, cur->ai_next must be NULL. */
- if (cur->ai_next != NULL)
- abort();
-#endif
- had_error++;
- continue;
- }
-
- /*
- * We don't bother even if cur->ai_next is NULL unless
- * the expansion failed by a fatal error. The list
- * can be NULL if the given A6 is incomplete, but we
- * may have another complete A6 chain in this answer.
- * See the last paragraph of RFC 2874 Section 3.1.4.
- */
- if (cur->ai_next == NULL) {
- cp += n;
- continue; /* no error, no answer */
- }
- goto convertinfo;
- } /* FALLTHROUGH */
case T_A:
case T_AAAA:
if (ns_samename(hname, bp) != 1) {
@@ -1430,7 +929,6 @@ gethostans(struct irs_ho *this,
if (cur->ai_next == NULL)
had_error++;
- convertinfo: /* convert addrinfo into hostent form */
if (!haveanswer) {
int nn;
@@ -1471,7 +969,7 @@ gethostans(struct irs_ho *this,
continue;
if (hap < &pvt->h_addr_ptrs[MAXADDRS-1])
hap++;
-
+ *hap = NULL;
bp += m;
}
@@ -1498,7 +996,11 @@ gethostans(struct irs_ho *this,
n = strlen(qname) + 1; /* for the \0 */
if (n > (ep - bp) || n >= MAXHOSTNAMELEN)
goto no_recovery;
+#ifdef HAVE_STRLCPY
+ strlcpy(bp, qname, ep - bp);
+#else
strcpy(bp, qname);
+#endif
pvt->host.h_name = bp;
bp += n;
}
diff --git a/contrib/bind/lib/irs/dns_nw.c b/contrib/bind/lib/irs/dns_nw.c
index f39a59a..a322f449 100644
--- a/contrib/bind/lib/irs/dns_nw.c
+++ b/contrib/bind/lib/irs/dns_nw.c
@@ -16,7 +16,7 @@
*/
#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: dns_nw.c,v 1.23 2002/06/26 07:42:06 marka Exp $";
+static const char rcsid[] = "$Id: dns_nw.c,v 1.25 2002/07/18 02:07:43 marka Exp $";
#endif /* LIBC_SCCS and not lint */
/* Imports. */
@@ -349,7 +349,12 @@ get1101answer(struct irs_nw *this,
RES_SET_H_ERRNO(pvt->res, NO_RECOVERY);
return (NULL);
}
+#ifdef HAVE_STRLCPY
+ strlcpy(bp, name, ep - bp);
+ pvt->net.n_name = bp;
+#else
pvt->net.n_name = strcpy(bp, name);
+#endif
bp += n;
}
break;
@@ -522,37 +527,37 @@ get1101mask(struct irs_nw *this, struct nwent *nwent) {
static int
make1101inaddr(const u_char *net, int bits, char *name, int size) {
int n, m;
+ char *ep;
+
+ ep = name + size;
/* Zero fill any whole bytes left out of the prefix. */
for (n = (32 - bits) / 8; n > 0; n--) {
- if (size < (int)(sizeof "0."))
+ if (ep - name < (int)(sizeof "0."))
goto emsgsize;
m = SPRINTF((name, "0."));
name += m;
- size -= m;
}
/* Format the partial byte, if any, within the prefix. */
if ((n = bits % 8) != 0) {
- if (size < (int)(sizeof "255."))
+ if (ep - name < (int)(sizeof "255."))
goto emsgsize;
m = SPRINTF((name, "%u.",
net[bits / 8] & ~((1 << (8 - n)) - 1)));
name += m;
- size -= m;
}
/* Format the whole bytes within the prefix. */
for (n = bits / 8; n > 0; n--) {
- if (size < (int)(sizeof "255."))
+ if (ep - name < (int)(sizeof "255."))
goto emsgsize;
m = SPRINTF((name, "%u.", net[n - 1]));
name += m;
- size -= m;
}
/* Add the static text. */
- if (size < (int)(sizeof "in-addr.arpa"))
+ if (ep - name < (int)(sizeof "in-addr.arpa"))
goto emsgsize;
(void) SPRINTF((name, "in-addr.arpa"));
return (0);
diff --git a/contrib/bind/lib/irs/gen_gr.c b/contrib/bind/lib/irs/gen_gr.c
index 4b1b282..9a7af3d 100644
--- a/contrib/bind/lib/irs/gen_gr.c
+++ b/contrib/bind/lib/irs/gen_gr.c
@@ -16,7 +16,7 @@
*/
#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: gen_gr.c,v 1.25 2001/06/07 02:12:26 marka Exp $";
+static const char rcsid[] = "$Id: gen_gr.c,v 1.26 2002/07/18 02:07:44 marka Exp $";
#endif
/* Imports */
@@ -324,7 +324,7 @@ gr_res_set(struct irs_gr *this, struct __res_state *res,
static void
grmerge(struct irs_gr *this, const struct group *src, int preserve) {
struct pvt *pvt = (struct pvt *)this->private;
- char *cp, **m, **p, *oldmembuf;
+ char *cp, **m, **p, *oldmembuf, *ep;
int n, ndst, nnew;
size_t used;
@@ -379,6 +379,7 @@ grmerge(struct irs_gr *this, const struct group *src, int preserve) {
/* No harm done, no work done. */
return;
}
+ ep = cp + used + n;
if (used != 0)
memcpy(cp, pvt->membuf, used);
oldmembuf = pvt->membuf;
@@ -400,7 +401,11 @@ grmerge(struct irs_gr *this, const struct group *src, int preserve) {
if (isnew(pvt->group.gr_mem, *m)) {
*p++ = cp;
*p = NULL;
+#ifdef HAVE_STRLCPY
+ strlcpy(cp, *m, ep - cp);
+#else
strcpy(cp, *m);
+#endif
cp += strlen(cp) + 1;
}
if (preserve) {
@@ -410,10 +415,18 @@ grmerge(struct irs_gr *this, const struct group *src, int preserve) {
(pvt->group.gr_passwd - oldmembuf);
} else {
pvt->group.gr_name = cp;
+#ifdef HAVE_STRLCPY
+ strlcpy(cp, src->gr_name, ep - cp);
+#else
strcpy(cp, src->gr_name);
+#endif
cp += strlen(src->gr_name) + 1;
pvt->group.gr_passwd = cp;
+#ifdef HAVE_STRLCPY
+ strlcpy(cp, src->gr_passwd, ep - cp);
+#else
strcpy(cp, src->gr_passwd);
+#endif
cp += strlen(src->gr_passwd) + 1;
}
if (oldmembuf != NULL)
diff --git a/contrib/bind/lib/irs/getaddrinfo.c b/contrib/bind/lib/irs/getaddrinfo.c
index 243f106..89db519 100644
--- a/contrib/bind/lib/irs/getaddrinfo.c
+++ b/contrib/bind/lib/irs/getaddrinfo.c
@@ -101,17 +101,12 @@
#include <stdarg.h>
#include <irs.h>
+#include <isc/assertions.h>
#include "port_after.h"
#include "irs_data.h"
-/*
- * if we enable it, we will see duplicated addrinfo entries on reply if both
- * AAAA and A6 records are found. disable it for default installation.
- */
-#undef T_A6
-
#define SUCCESS 0
#define ANY 0
#define YES 1
@@ -192,7 +187,8 @@ static int get_portmatch __P((const struct addrinfo *, const char *));
static int get_port __P((const struct addrinfo *, const char *, int));
static const struct afd *find_afd __P((int));
static int addrconfig __P((int));
-static int ip6_str2scopeid __P((char *, struct sockaddr_in6 *));
+static int ip6_str2scopeid __P((char *, struct sockaddr_in6 *,
+ u_int32_t *scopeidp));
static struct net_data *init __P((void));
struct addrinfo *hostent2addrinfo __P((struct hostent *,
@@ -297,8 +293,9 @@ str_isnumber(p)
if (*p == '\0')
return NO;
ep = NULL;
+ errno = 0;
(void)strtoul(p, &ep, 10);
- if (ep && *ep == '\0')
+ if (errno == 0 && ep && *ep == '\0')
return YES;
else
return NO;
@@ -595,7 +592,7 @@ explore_fqdn(pai, hostname, servname, res)
char tmp[NS_MAXDNAME];
const char *cp;
- result = NULL;
+ INSIST(res != NULL && *res == NULL);
/*
* if the servname does not match socktype/protocol, ignore it.
@@ -854,13 +851,13 @@ explore_numeric_scope(pai, hostname, servname, res)
error = explore_numeric(pai, addr, servname, res);
if (error == 0) {
- int scopeid;
+ u_int32_t scopeid = 0;
for (cur = *res; cur; cur = cur->ai_next) {
if (cur->ai_family != AF_INET6)
continue;
sin6 = (struct sockaddr_in6 *)(void *)cur->ai_addr;
- if ((scopeid = ip6_str2scopeid(scope, sin6)) == -1) {
+ if (!ip6_str2scopeid(scope, sin6, &scopeid)) {
free(hostname2);
return(EAI_NONAME); /* XXX: is return OK? */
}
@@ -990,7 +987,17 @@ get_port(const struct addrinfo *ai, const char *servname, int matchonly) {
allownumeric = 1;
break;
case ANY:
- allownumeric = 0;
+ switch (ai->ai_family) {
+ case AF_INET:
+#ifdef AF_INET6
+ case AF_INET6:
+#endif
+ allownumeric = 1;
+ break;
+ default:
+ allownumeric = 0;
+ break;
+ }
break;
default:
return EAI_SOCKTYPE;
@@ -999,9 +1006,10 @@ get_port(const struct addrinfo *ai, const char *servname, int matchonly) {
if (str_isnumber(servname)) {
if (!allownumeric)
return EAI_SERVICE;
- port = htons(atoi(servname));
+ port = atoi(servname);
if (port < 0 || port > 65535)
return EAI_SERVICE;
+ port = htons(port);
} else {
switch (ai->ai_socktype) {
case SOCK_DGRAM:
@@ -1075,17 +1083,17 @@ addrconfig(af)
/* convert a string to a scope identifier. XXX: IPv6 specific */
static int
-ip6_str2scopeid(scope, sin6)
- char *scope;
- struct sockaddr_in6 *sin6;
+ip6_str2scopeid(char *scope, struct sockaddr_in6 *sin6,
+ u_int32_t *scopeidp)
{
- int scopeid;
+ u_int32_t scopeid;
+ u_long lscopeid;
struct in6_addr *a6 = &sin6->sin6_addr;
char *ep;
-
+
/* empty scopeid portion is invalid */
if (*scope == '\0')
- return -1;
+ return (0);
#ifdef USE_IFNAMELINKID
if (IN6_IS_ADDR_LINKLOCAL(a6) || IN6_IS_ADDR_MC_LINKLOCAL(a6)) {
@@ -1096,8 +1104,8 @@ ip6_str2scopeid(scope, sin6)
*/
scopeid = if_nametoindex(scope);
if (scopeid == 0)
- goto trynumeric;
- return(scopeid);
+ *scopeidp = scopeid;
+ return (1);
}
#endif
@@ -1111,11 +1119,14 @@ ip6_str2scopeid(scope, sin6)
/* try to convert to a numeric id as a last resort */
trynumeric:
- scopeid = (int)strtoul(scope, &ep, 10);
- if (*ep == '\0')
- return scopeid;
- else
- return -1;
+ errno = 0;
+ lscopeid = strtoul(scope, &ep, 10);
+ scopeid = lscopeid & 0xffffffff;
+ if (errno == 0 && ep && *ep == '\0' && scopeid == lscopeid) {
+ *scopeidp = scopeid;
+ return (1);
+ } else
+ return (0);
}
struct addrinfo *
diff --git a/contrib/bind/lib/irs/gethostent.c b/contrib/bind/lib/irs/gethostent.c
index 8e7e717..3964b5f 100644
--- a/contrib/bind/lib/irs/gethostent.c
+++ b/contrib/bind/lib/irs/gethostent.c
@@ -16,7 +16,7 @@
*/
#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: gethostent.c,v 1.32 2002/05/27 06:50:55 marka Exp $";
+static const char rcsid[] = "$Id: gethostent.c,v 1.32.10.2 2003/06/04 01:09:43 marka Exp $";
#endif
/* Imports */
@@ -482,7 +482,7 @@ freehostent(struct hostent *he) {
#define LIFREQ lifreq
#endif
-static int
+static void
scan_interfaces6(int *have_v4, int *have_v6) {
struct LIFCONF lifc;
struct LIFREQ lifreq;
@@ -492,12 +492,9 @@ scan_interfaces6(int *have_v4, int *have_v6) {
static unsigned int bufsiz = 4095;
int s, cpsize, n;
- /* Set to zero. Used as loop terminators below. */
- *have_v4 = *have_v6 = 0;
-
/* Get interface list from system. */
if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) == -1)
- goto err_ret;
+ goto cleanup;
/*
* Grow buffer until large enough to contain all interface
@@ -506,7 +503,7 @@ scan_interfaces6(int *have_v4, int *have_v6) {
for (;;) {
buf = memget(bufsiz);
if (buf == NULL)
- goto err_ret;
+ goto cleanup;
#ifdef SETFAMILYFLAGS
lifc.lifc_family = AF_UNSPEC; /* request all families */
lifc.lifc_flags = 0;
@@ -526,10 +523,10 @@ scan_interfaces6(int *have_v4, int *have_v6) {
break;
}
if ((n == -1) && errno != EINVAL)
- goto err_ret;
+ goto cleanup;
if (bufsiz > 1000000)
- goto err_ret;
+ goto cleanup;
memput(buf, bufsiz);
bufsiz += 4096;
@@ -600,16 +597,42 @@ scan_interfaces6(int *have_v4, int *have_v6) {
memput(buf, bufsiz);
close(s);
/* printf("scan interface -> 4=%d 6=%d\n", *have_v4, *have_v6); */
- return (0);
- err_ret:
+ return;
+ cleanup:
if (buf != NULL)
memput(buf, bufsiz);
if (s != -1)
close(s);
/* printf("scan interface -> 4=%d 6=%d\n", *have_v4, *have_v6); */
- return (-1);
+ return;
}
+#endif
+#ifdef __linux
+#ifndef IF_NAMESIZE
+# ifdef IFNAMSIZ
+# define IF_NAMESIZE IFNAMSIZ
+# else
+# define IF_NAMESIZE 16
+# endif
+#endif
+static void
+scan_linux6(int *have_v6) {
+ FILE *proc = NULL;
+ char address[33];
+ char name[IF_NAMESIZE+1];
+ int ifindex, prefix, flag3, flag4;
+
+ proc = fopen("/proc/net/if_inet6", "r");
+ if (proc == NULL)
+ return;
+
+ if (fscanf(proc, "%32[a-f0-9] %x %x %x %x %16s\n",
+ address, &ifindex, &prefix, &flag3, &flag4, name) == 6)
+ *have_v6 = 1;
+ fclose(proc);
+ return;
+}
#endif
static int
@@ -626,17 +649,21 @@ scan_interfaces(int *have_v4, int *have_v6) {
int s, n;
size_t cpsize;
+ /* Set to zero. Used as loop terminators below. */
+ *have_v4 = *have_v6 = 0;
+
#if defined(SIOCGLIFCONF) && defined(SIOCGLIFADDR) && \
!defined(IRIX_EMUL_IOCTL_SIOCGIFCONF)
/*
* Try to scan the interfaces using IPv6 ioctls().
*/
- if (!scan_interfaces6(have_v4, have_v6))
+ scan_interfaces6(have_v4, have_v6);
+ if (*have_v4 != 0 && *have_v6 != 0)
return (0);
#endif
-
- /* Set to zero. Used as loop terminators below. */
- *have_v4 = *have_v6 = 0;
+#ifdef __linux
+ scan_linux6(have_v6);
+#endif
/* Get interface list from system. */
if ((s = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
diff --git a/contrib/bind/lib/irs/getnameinfo.c b/contrib/bind/lib/irs/getnameinfo.c
index 9b26c64..702b932 100644
--- a/contrib/bind/lib/irs/getnameinfo.c
+++ b/contrib/bind/lib/irs/getnameinfo.c
@@ -44,6 +44,7 @@
#include <netinet/in.h>
#include <arpa/nameser.h>
#include <arpa/inet.h>
+#include <net/if.h>
#include <netdb.h>
#include <resolv.h>
diff --git a/contrib/bind/lib/irs/getnetgrent.c b/contrib/bind/lib/irs/getnetgrent.c
index e966ea6..9c13b01 100644
--- a/contrib/bind/lib/irs/getnetgrent.c
+++ b/contrib/bind/lib/irs/getnetgrent.c
@@ -16,7 +16,7 @@
*/
#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: getnetgrent.c,v 1.15 2001/05/29 05:48:49 marka Exp $";
+static const char rcsid[] = "$Id: getnetgrent.c,v 1.16.6.1 2003/06/02 06:06:58 marka Exp $";
#endif /* LIBC_SCCS and not lint */
/* Imports */
@@ -47,8 +47,11 @@ static struct net_data *init(void);
/* Public */
+#ifndef SETNETGRENT_ARGS
+#define SETNETGRENT_ARGS const char *netgroup
+#endif
void
-setnetgrent(const char *netgroup) {
+setnetgrent(SETNETGRENT_ARGS) {
struct net_data *net_data = init();
setnetgrent_p(netgroup, net_data);
@@ -61,19 +64,31 @@ endnetgrent(void) {
endnetgrent_p(net_data);
}
+#ifndef INNETGR_ARGS
+#define INNETGR_ARGS const char *netgroup, const char *host, \
+ const char *user, const char *domain
+#endif
int
-innetgr(const char *netgroup, const char *host,
- const char *user, const char *domain) {
+innetgr(INNETGR_ARGS) {
struct net_data *net_data = init();
return (innetgr_p(netgroup, host, user, domain, net_data));
}
int
-getnetgrent(const char **host, const char **user, const char **domain) {
+getnetgrent(char **host, char **user, char **domain) {
struct net_data *net_data = init();
+ const char *ch, *cu, *cd;
+ int ret;
- return (getnetgrent_p(host, user, domain, net_data));
+ ret = getnetgrent_p(&ch, &cu, &cd, net_data);
+ if (ret != 1)
+ return (ret);
+
+ DE_CONST(ch, *host);
+ DE_CONST(cu, *user);
+ DE_CONST(cd, *domain);
+ return (ret);
}
/* Shared private. */
diff --git a/contrib/bind/lib/irs/getnetgrent_r.c b/contrib/bind/lib/irs/getnetgrent_r.c
index adae817..0a88ea4 100644
--- a/contrib/bind/lib/irs/getnetgrent_r.c
+++ b/contrib/bind/lib/irs/getnetgrent_r.c
@@ -16,7 +16,7 @@
*/
#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: getnetgrent_r.c,v 8.6 2001/11/01 08:02:12 marka Exp $";
+static const char rcsid[] = "$Id: getnetgrent_r.c,v 8.6.10.1 2003/06/02 06:06:58 marka Exp $";
#endif /* LIBC_SCCS and not lint */
#include <port_before.h>
@@ -41,9 +41,15 @@ copy_protoent(char **, char **, char **, const char *, const char *,
NGR_R_RETURN
innetgr_r(const char *netgroup, const char *host, const char *user,
- const char *domain) {
+ const char *domain) {
+ char *ng, *ho, *us, *dom;
- return (innetgr(netgroup, host, user, domain));
+ DE_CONST(netgroup, ng);
+ DE_CONST(host, ho);
+ DE_CONST(user, us);
+ DE_CONST(domain, dom);
+
+ return (innetgr(ng, ho, us, dom));
}
/*
@@ -54,7 +60,7 @@ innetgr_r(const char *netgroup, const char *host, const char *user,
NGR_R_RETURN
getnetgrent_r(char **machinep, char **userp, char **domainp, NGR_R_ARGS) {
- const char *mp, *up, *dp;
+ char *mp, *up, *dp;
int res = getnetgrent(&mp, &up, &dp);
if (res != 1)
diff --git a/contrib/bind/lib/irs/hesiod.c b/contrib/bind/lib/irs/hesiod.c
index 2b08911..5afe661 100644
--- a/contrib/bind/lib/irs/hesiod.c
+++ b/contrib/bind/lib/irs/hesiod.c
@@ -1,5 +1,5 @@
#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: hesiod.c,v 1.22 2001/05/29 05:48:55 marka Exp $";
+static const char rcsid[] = "$Id: hesiod.c,v 1.23 2002/07/18 02:07:45 marka Exp $";
#endif
/*
@@ -98,8 +98,13 @@ hesiod_init(void **context) {
errno = ENOMEM;
goto cleanup;
}
+#ifdef HAVE_STRLCPY
+ strlcpy(ctx->LHS, DEF_LHS, strlen(DEF_LHS) + 1);
+ strlcpy(ctx->RHS, DEF_RHS, strlen(DEF_RHS) + 1);
+#else
strcpy(ctx->LHS, DEF_LHS);
strcpy(ctx->RHS, DEF_RHS);
+#endif
#else
goto cleanup;
#endif
@@ -109,18 +114,31 @@ hesiod_init(void **context) {
* variable.
*/
if ((cp = getenv("HES_DOMAIN")) != NULL) {
+ size_t RHSlen = strlen(cp) + 2;
if (ctx->RHS)
free(ctx->RHS);
- ctx->RHS = malloc(strlen(cp)+2);
+ ctx->RHS = malloc(RHSlen);
if (!ctx->RHS) {
errno = ENOMEM;
goto cleanup;
}
- if (cp[0] == '.')
+ if (cp[0] == '.') {
+#ifdef HAVE_STRLCPY
+ strlcpy(ctx->RHS, cp, RHSlen);
+#else
strcpy(ctx->RHS, cp);
- else {
+#endif
+ } else {
+#ifdef HAVE_STRLCPY
+ strlcpy(ctx->RHS, ".", RHSlen);
+#else
strcpy(ctx->RHS, ".");
+#endif
+#ifdef HAVE_STRLCAT
+ strlcat(ctx->RHS, cp, RHSlen);
+#else
strcat(ctx->RHS, cp);
+#endif
}
}
diff --git a/contrib/bind/lib/irs/irp_p.h b/contrib/bind/lib/irs/irp_p.h
index 0f68b28..8a02b1b 100644
--- a/contrib/bind/lib/irs/irp_p.h
+++ b/contrib/bind/lib/irs/irp_p.h
@@ -16,7 +16,7 @@
*/
/*
- * $Id: irp_p.h,v 8.2 2001/08/10 02:40:52 marka Exp $
+ * $Id: irp_p.h,v 8.2.10.1 2003/06/02 05:55:14 marka Exp $
*/
#ifndef _IRP_P_H_INCLUDED
@@ -53,8 +53,6 @@ char *irs_irp_read_body(struct irp_p *pvt, size_t *size);
int irs_irp_get_full_response(struct irp_p *pvt, int *code,
char *text, size_t textlen,
char **body, size_t *bodylen);
-int irs_irp_send_command(struct irp_p *pvt, const char *fmt, ...) ISC_FORMAT_PRINTF(2, 3);
-
extern int irp_log_errors;
diff --git a/contrib/bind/lib/irs/irs_data.c b/contrib/bind/lib/irs/irs_data.c
index 000da0c..f69a6b4 100644
--- a/contrib/bind/lib/irs/irs_data.c
+++ b/contrib/bind/lib/irs/irs_data.c
@@ -16,7 +16,7 @@
*/
#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: irs_data.c,v 1.19 2001/08/20 07:08:41 marka Exp $";
+static const char rcsid[] = "$Id: irs_data.c,v 1.20.2.1 2003/06/02 10:09:48 marka Exp $";
#endif
#include "port_before.h"
@@ -38,6 +38,7 @@ static const char rcsid[] = "$Id: irs_data.c,v 1.19 2001/08/20 07:08:41 marka Ex
#endif
#include <irs.h>
+#include <stdlib.h>
#include "port_after.h"
@@ -97,6 +98,14 @@ net_data_destroy(void *p) {
(*net_data->ng->close)(net_data->ng);
net_data->ng = NULL;
}
+ if (net_data->ho_data != NULL) {
+ free(net_data->ho_data);
+ net_data->ho_data = NULL;
+ }
+ if (net_data->nw_data != NULL) {
+ free(net_data->nw_data);
+ net_data->nw_data = NULL;
+ }
(*net_data->irs->close)(net_data->irs);
memput(net_data, sizeof *net_data);
@@ -143,19 +152,27 @@ net_data_create(const char *conf_file) {
return (NULL);
memset(net_data, 0, sizeof (struct net_data));
- if ((net_data->irs = irs_gen_acc("", conf_file)) == NULL)
+ if ((net_data->irs = irs_gen_acc("", conf_file)) == NULL) {
+ memput(net_data, sizeof (struct net_data));
return (NULL);
+ }
#ifndef DO_PTHREADS
(*net_data->irs->res_set)(net_data->irs, &_res, NULL);
#endif
net_data->res = (*net_data->irs->res_get)(net_data->irs);
- if (net_data->res == NULL)
+ if (net_data->res == NULL) {
+ (*net_data->irs->close)(net_data->irs);
+ memput(net_data, sizeof (struct net_data));
return (NULL);
+ }
if ((net_data->res->options & RES_INIT) == 0 &&
- res_ninit(net_data->res) == -1)
+ res_ninit(net_data->res) == -1) {
+ (*net_data->irs->close)(net_data->irs);
+ memput(net_data, sizeof (struct net_data));
return (NULL);
+ }
return (net_data);
}
diff --git a/contrib/bind/lib/irs/nis_gr.c b/contrib/bind/lib/irs/nis_gr.c
index b4e0945..0ea50f5 100644
--- a/contrib/bind/lib/irs/nis_gr.c
+++ b/contrib/bind/lib/irs/nis_gr.c
@@ -49,7 +49,7 @@
*/
#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: nis_gr.c,v 1.21 2001/05/29 05:49:12 marka Exp $";
+static const char rcsid[] = "$Id: nis_gr.c,v 1.22 2002/07/08 06:26:11 marka Exp $";
/* from getgrent.c 8.2 (Berkeley) 3/21/94"; */
/* from BSDI Id: getgrent.c,v 2.8 1996/05/28 18:15:14 bostic Exp $ */
#endif /* LIBC_SCCS and not lint */
@@ -286,7 +286,7 @@ makegroupent(struct irs_gr *this) {
goto cleanup;
*cp++ = '\0';
- errno = -1;
+ errno = 0;
t = strtoul(cp, NULL, 10);
if (errno == ERANGE)
goto cleanup;
diff --git a/contrib/bind/lib/irs/nis_ho.c b/contrib/bind/lib/irs/nis_ho.c
index 72a8d17..7158f4c 100644
--- a/contrib/bind/lib/irs/nis_ho.c
+++ b/contrib/bind/lib/irs/nis_ho.c
@@ -16,7 +16,7 @@
*/
#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: nis_ho.c,v 1.18 2001/06/18 14:44:00 marka Exp $";
+static const char rcsid[] = "$Id: nis_ho.c,v 1.18.10.1 2003/06/02 05:50:57 marka Exp $";
#endif /* LIBC_SCCS and not lint */
/* Imports */
@@ -87,6 +87,9 @@ static const u_char mapped[] = { 0,0, 0,0, 0,0, 0,0, 0,0, 0xff,0xff };
static const u_char tunnelled[] = { 0,0, 0,0, 0,0, 0,0, 0,0, 0,0 };
static /*const*/ char hosts_byname[] = "hosts.byname";
static /*const*/ char hosts_byaddr[] = "hosts.byaddr";
+static /*const*/ char ipnode_byname[] = "ipnode.byname";
+static /*const*/ char ipnode_byaddr[] = "ipnode.byaddr";
+static /*const*/ char yp_multi[] = "YP_MULTI_";
/* Forwards */
@@ -186,10 +189,33 @@ ho_byname2(struct irs_ho *this, const char *name, int af) {
return (NULL);
nisfree(pvt, do_val);
- DE_CONST(name, tmp);
- r = yp_match(pvt->nis_domain, hosts_byname, tmp,
+
+ strcpy(pvt->hostbuf, yp_multi);
+ strncat(pvt->hostbuf, name, sizeof(pvt->hostbuf) - sizeof(yp_multi));
+ pvt->hostbuf[sizeof(pvt->hostbuf) - 1] = '\0';
+ for (r = sizeof(yp_multi) - 1; pvt->hostbuf[r] != '\0'; r++)
+ if (isupper((unsigned char)pvt->hostbuf[r]))
+ tolower(pvt->hostbuf[r]);
+
+ tmp = pvt->hostbuf;
+ r = yp_match(pvt->nis_domain, ipnode_byname, tmp,
strlen(tmp), &pvt->curval_data, &pvt->curval_len);
if (r != 0) {
+ tmp = pvt->hostbuf + sizeof(yp_multi) - 1;
+ r = yp_match(pvt->nis_domain, ipnode_byname, tmp,
+ strlen(tmp), &pvt->curval_data, &pvt->curval_len);
+ }
+ if (r != 0) {
+ tmp = pvt->hostbuf;
+ r = yp_match(pvt->nis_domain, hosts_byname, tmp,
+ strlen(tmp), &pvt->curval_data, &pvt->curval_len);
+ }
+ if (r != 0) {
+ tmp = pvt->hostbuf + sizeof(yp_multi) - 1;
+ r = yp_match(pvt->nis_domain, hosts_byname, tmp,
+ strlen(tmp), &pvt->curval_data, &pvt->curval_len);
+ }
+ if (r != 0) {
RES_SET_H_ERRNO(pvt->res, HOST_NOT_FOUND);
return (NULL);
}
@@ -220,8 +246,11 @@ ho_byaddr(struct irs_ho *this, const void *addr, int len, int af) {
return (NULL);
}
nisfree(pvt, do_val);
- r = yp_match(pvt->nis_domain, hosts_byaddr, tmp, strlen(tmp),
+ r = yp_match(pvt->nis_domain, ipnode_byaddr, tmp, strlen(tmp),
&pvt->curval_data, &pvt->curval_len);
+ if (r != 0)
+ r = yp_match(pvt->nis_domain, hosts_byaddr, tmp, strlen(tmp),
+ &pvt->curval_data, &pvt->curval_len);
if (r != 0) {
RES_SET_H_ERRNO(pvt->res, HOST_NOT_FOUND);
return (NULL);
@@ -382,12 +411,35 @@ ho_addrinfo(struct irs_ho *this, const char *name, const struct addrinfo *pai)
/* Private */
+/*
+ipnodes:
+::1 localhost
+127.0.0.1 localhost
+1.2.3.4 FOO bar
+1.2.6.4 FOO bar
+1.2.6.5 host
+
+ipnodes.byname:
+YP_MULTI_localhost ::1,127.0.0.1 localhost
+YP_MULTI_foo 1.2.3.4,1.2.6.4 FOO bar
+YP_MULTI_bar 1.2.3.4,1.2.6.4 FOO bar
+host 1.2.6.5 host
+
+hosts.byname:
+localhost 127.0.0.1 localhost
+host 1.2.6.5 host
+YP_MULTI_foo 1.2.3.4,1.2.6.4 FOO bar
+YP_MULTI_bar 1.2.3.4,1.2.6.4 FOO bar
+*/
+
static struct hostent *
makehostent(struct irs_ho *this) {
struct pvt *pvt = (struct pvt *)this->private;
static const char spaces[] = " \t";
- char *cp, **q, *p;
- int af, len;
+ char *cp, **q, *p, *comma, *ap;
+ int af = 0, len = 0;
+ int multi = 0;
+ int addr = 0;
p = pvt->curval_data;
if ((cp = strpbrk(p, "#\n")) != NULL)
@@ -395,25 +447,40 @@ makehostent(struct irs_ho *this) {
if (!(cp = strpbrk(p, spaces)))
return (NULL);
*cp++ = '\0';
- if ((pvt->res->options & RES_USE_INET6) &&
- inet_pton(AF_INET6, p, pvt->host_addr) > 0) {
- af = AF_INET6;
- len = IN6ADDRSZ;
- } else if (inet_pton(AF_INET, p, pvt->host_addr) > 0) {
- if (pvt->res->options & RES_USE_INET6) {
- map_v4v6_address((char*)pvt->host_addr,
- (char*)pvt->host_addr);
+ ap = pvt->hostbuf;
+ do {
+ if ((comma = strchr(p, ',')) != NULL) {
+ *comma++ = '\0';
+ multi = 1;
+ }
+ if ((ap + IN6ADDRSZ) > (pvt->hostbuf + sizeof(pvt->hostbuf)))
+ break;
+ if ((pvt->res->options & RES_USE_INET6) &&
+ inet_pton(AF_INET6, p, ap) > 0) {
af = AF_INET6;
len = IN6ADDRSZ;
+ } else if (inet_pton(AF_INET, p, pvt->host_addr) > 0) {
+ if (pvt->res->options & RES_USE_INET6) {
+ map_v4v6_address((char*)pvt->host_addr, ap);
+ af = AF_INET6;
+ len = IN6ADDRSZ;
+ } else {
+ af = AF_INET;
+ len = INADDRSZ;
+ }
} else {
- af = AF_INET;
- len = INADDRSZ;
+ if (!multi)
+ return (NULL);
+ continue;
+ }
+ if (addr < MAXADDRS) {
+ pvt->h_addr_ptrs[addr++] = ap;
+ pvt->h_addr_ptrs[addr] = NULL;
+ ap += len;
}
- } else {
+ } while ((p = comma) != NULL);
+ if (ap == pvt->hostbuf)
return (NULL);
- }
- pvt->h_addr_ptrs[0] = (char *)pvt->host_addr;
- pvt->h_addr_ptrs[1] = NULL;
pvt->host.h_addr_list = pvt->h_addr_ptrs;
pvt->host.h_length = len;
pvt->host.h_addrtype = af;
diff --git a/contrib/bind/lib/isc/ctl_clnt.c b/contrib/bind/lib/isc/ctl_clnt.c
index 56e5098..13d71d5 100644
--- a/contrib/bind/lib/isc/ctl_clnt.c
+++ b/contrib/bind/lib/isc/ctl_clnt.c
@@ -1,5 +1,5 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: ctl_clnt.c,v 8.17 2001/06/06 00:33:35 marka Exp $";
+static const char rcsid[] = "$Id: ctl_clnt.c,v 8.18 2002/07/08 05:10:23 marka Exp $";
#endif /* not lint */
/*
@@ -185,7 +185,7 @@ ctl_client(evContext lev, const struct sockaddr *cap, size_t cap_len,
if (evConnect(lev, ctx->sock, (const struct sockaddr *)sap, sap_len,
conn_done, ctx, &ctx->coID) < 0) {
(*ctx->logger)(ctl_error, "%s: evConnect(fd %d): %s",
- me, (void *)ctx->sock, strerror(errno));
+ me, ctx->sock, strerror(errno));
fatal:
if (ctx != NULL) {
if (ctx->sock >= 0)
diff --git a/contrib/bind/lib/isc/ctl_srvr.c b/contrib/bind/lib/isc/ctl_srvr.c
index 91a2c1b..835bcd4 100644
--- a/contrib/bind/lib/isc/ctl_srvr.c
+++ b/contrib/bind/lib/isc/ctl_srvr.c
@@ -1,5 +1,5 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: ctl_srvr.c,v 8.25 2001/05/29 05:49:27 marka Exp $";
+static const char rcsid[] = "$Id: ctl_srvr.c,v 8.26 2002/07/08 05:10:25 marka Exp $";
#endif /* not lint */
/*
@@ -252,7 +252,7 @@ ctl_server(evContext lev, const struct sockaddr *sap, size_t sap_len,
&ctx->acID) < 0) {
save_errno = errno;
(*ctx->logger)(ctl_error, "%s: evListen(fd %d): %s",
- me, (void *)ctx->sock, strerror(errno));
+ me, ctx->sock, strerror(errno));
close(ctx->sock);
memput(ctx, sizeof *ctx);
errno = save_errno;
diff --git a/contrib/bind/lib/isc/ev_files.c b/contrib/bind/lib/isc/ev_files.c
index c6bcab6..3a6894b 100644
--- a/contrib/bind/lib/isc/ev_files.c
+++ b/contrib/bind/lib/isc/ev_files.c
@@ -20,7 +20,7 @@
*/
#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: ev_files.c,v 1.21 2001/11/01 05:35:46 marka Exp $";
+static const char rcsid[] = "$Id: ev_files.c,v 1.22 2002/07/08 05:50:07 marka Exp $";
#endif
#include "port_before.h"
@@ -54,7 +54,7 @@ evSelectFD(evContext opaqueCtx,
int mode;
evPrintf(ctx, 1,
- "evSelectFD(ctx %#x, fd %d, mask 0x%x, func %#x, uap %#x)\n",
+ "evSelectFD(ctx %p, fd %d, mask 0x%x, func %p, uap %p)\n",
ctx, fd, eventmask, func, uap);
if (eventmask == 0 || (eventmask & ~EV_MASK_ALL) != 0)
EV_ERR(EINVAL);
diff --git a/contrib/bind/lib/isc/ev_timers.c b/contrib/bind/lib/isc/ev_timers.c
index 03436c6..0f3c56f 100644
--- a/contrib/bind/lib/isc/ev_timers.c
+++ b/contrib/bind/lib/isc/ev_timers.c
@@ -20,7 +20,7 @@
*/
#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: ev_timers.c,v 1.32 2001/11/01 05:35:47 marka Exp $";
+static const char rcsid[] = "$Id: ev_timers.c,v 1.33 2002/07/08 05:50:09 marka Exp $";
#endif
/* Import. */
@@ -152,10 +152,10 @@ evSetTimer(evContext opaqueCtx,
evTimer *id;
evPrintf(ctx, 1,
-"evSetTimer(ctx %#x, func %#x, uap %#x, due %d.%09ld, inter %d.%09ld)\n",
+"evSetTimer(ctx %p, func %p, uap %p, due %ld.%09ld, inter %ld.%09ld)\n",
ctx, func, uap,
- due.tv_sec, due.tv_nsec,
- inter.tv_sec, inter.tv_nsec);
+ (long)due.tv_sec, due.tv_nsec,
+ (long)inter.tv_sec, inter.tv_nsec);
/* due={0,0} is a magic cookie meaning "now." */
if (due.tv_sec == 0 && due.tv_nsec == 0L)
@@ -379,10 +379,10 @@ print_timer(void *what, void *uap) {
cur = what;
evPrintf(ctx, 7,
- " func %p, uap %p, due %d.%09ld, inter %d.%09ld\n",
+ " func %p, uap %p, due %ld.%09ld, inter %ld.%09ld\n",
cur->func, cur->uap,
- cur->due.tv_sec, cur->due.tv_nsec,
- cur->inter.tv_sec, cur->inter.tv_nsec);
+ (long)cur->due.tv_sec, cur->due.tv_nsec,
+ (long)cur->inter.tv_sec, cur->inter.tv_nsec);
}
static void
diff --git a/contrib/bind/lib/isc/ev_waits.c b/contrib/bind/lib/isc/ev_waits.c
index 9608424..8d9fa8d 100644
--- a/contrib/bind/lib/isc/ev_waits.c
+++ b/contrib/bind/lib/isc/ev_waits.c
@@ -20,7 +20,7 @@
*/
#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: ev_waits.c,v 8.11 2000/07/20 18:17:52 vixie Exp $";
+static const char rcsid[] = "$Id: ev_waits.c,v 8.12 2002/07/08 05:50:10 marka Exp $";
#endif
#include "port_before.h"
@@ -190,14 +190,14 @@ print_waits(evContext_p *ctx) {
evPrintf(ctx, 9, "wait waiting:\n");
for (wl = ctx->waitLists; wl != NULL; wl = wl->next) {
INSIST(wl->first != NULL);
- evPrintf(ctx, 9, " tag %#x:", wl->first->tag);
+ evPrintf(ctx, 9, " tag %p:", wl->first->tag);
for (this = wl->first; this != NULL; this = this->next)
- evPrintf(ctx, 9, " %#x", this);
+ evPrintf(ctx, 9, " %p", this);
evPrintf(ctx, 9, "\n");
}
evPrintf(ctx, 9, "wait done:");
for (this = ctx->waitDone.first; this != NULL; this = this->next)
- evPrintf(ctx, 9, " %#x", this);
+ evPrintf(ctx, 9, " %p", this);
evPrintf(ctx, 9, "\n");
}
diff --git a/contrib/bind/lib/isc/eventlib.c b/contrib/bind/lib/isc/eventlib.c
index 0e52733..c7b1272 100644
--- a/contrib/bind/lib/isc/eventlib.c
+++ b/contrib/bind/lib/isc/eventlib.c
@@ -20,7 +20,7 @@
*/
#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: eventlib.c,v 1.46 2001/11/01 05:35:48 marka Exp $";
+static const char rcsid[] = "$Id: eventlib.c,v 1.48 2002/07/17 07:37:34 marka Exp $";
#endif
#include "port_before.h"
@@ -291,12 +291,12 @@ evGetNext(evContext opaqueCtx, evEvent *opaqueEv, int options) {
}
evPrintf(ctx, 4,
- "pselect(%d, 0x%lx, 0x%lx, 0x%lx, %d.%09ld)\n",
+ "pselect(%d, 0x%lx, 0x%lx, 0x%lx, %ld.%09ld)\n",
ctx->fdMax+1,
(u_long)ctx->rdLast.fds_bits[0],
(u_long)ctx->wrLast.fds_bits[0],
(u_long)ctx->exLast.fds_bits[0],
- tp ? tp->tv_sec : -1,
+ tp ? (long)tp->tv_sec : -1L,
tp ? tp->tv_nsec : -1);
/* XXX should predict system's earliness and adjust. */
@@ -463,7 +463,7 @@ evDispatch(evContext opaqueCtx, evEvent opaqueEv) {
evAccept *this = ev->u.accept.this;
evPrintf(ctx, 5,
- "Dispatch.Accept: fd %d -> %d, func %#x, uap %#x\n",
+ "Dispatch.Accept: fd %d -> %d, func %p, uap %p\n",
this->conn->fd, this->fd,
this->conn->func, this->conn->uap);
errno = this->ioErrno;
@@ -480,7 +480,7 @@ evDispatch(evContext opaqueCtx, evEvent opaqueEv) {
int eventmask = ev->u.file.eventmask;
evPrintf(ctx, 5,
- "Dispatch.File: fd %d, mask 0x%x, func %#x, uap %#x\n",
+ "Dispatch.File: fd %d, mask 0x%x, func %p, uap %p\n",
this->fd, this->eventmask, this->func, this->uap);
(this->func)(opaqueCtx, this->uap, this->fd, eventmask);
#ifdef EVENTLIB_TIME_CHECKS
@@ -492,7 +492,7 @@ evDispatch(evContext opaqueCtx, evEvent opaqueEv) {
evStream *this = ev->u.stream.this;
evPrintf(ctx, 5,
- "Dispatch.Stream: fd %d, func %#x, uap %#x\n",
+ "Dispatch.Stream: fd %d, func %p, uap %p\n",
this->fd, this->func, this->uap);
errno = this->ioErrno;
(this->func)(opaqueCtx, this->uap, this->fd, this->ioDone);
@@ -504,7 +504,7 @@ evDispatch(evContext opaqueCtx, evEvent opaqueEv) {
case Timer: {
evTimer *this = ev->u.timer.this;
- evPrintf(ctx, 5, "Dispatch.Timer: func %#x, uap %#x\n",
+ evPrintf(ctx, 5, "Dispatch.Timer: func %p, uap %p\n",
this->func, this->uap);
(this->func)(opaqueCtx, this->uap, this->due, this->inter);
#ifdef EVENTLIB_TIME_CHECKS
@@ -516,7 +516,7 @@ evDispatch(evContext opaqueCtx, evEvent opaqueEv) {
evWait *this = ev->u.wait.this;
evPrintf(ctx, 5,
- "Dispatch.Wait: tag %#x, func %#x, uap %#x\n",
+ "Dispatch.Wait: tag %p, func %p, uap %p\n",
this->tag, this->func, this->uap);
(this->func)(opaqueCtx, this->uap, this->tag);
#ifdef EVENTLIB_TIME_CHECKS
diff --git a/contrib/bind/lib/isc/eventlib_p.h b/contrib/bind/lib/isc/eventlib_p.h
index 78f0100..71b95ed 100644
--- a/contrib/bind/lib/isc/eventlib_p.h
+++ b/contrib/bind/lib/isc/eventlib_p.h
@@ -18,7 +18,7 @@
/* eventlib_p.h - private interfaces for eventlib
* vix 09sep95 [initial]
*
- * $Id: eventlib_p.h,v 1.30 2001/11/01 05:35:50 marka Exp $
+ * $Id: eventlib_p.h,v 1.31 2003/04/03 05:37:56 marka Exp $
*/
#ifndef _EVENTLIB_P_H
@@ -198,7 +198,8 @@ typedef struct {
/* eventlib.c */
#define evPrintf __evPrintf
-void evPrintf(const evContext_p *ctx, int level, const char *fmt, ...);
+void evPrintf(const evContext_p *ctx, int level, const char *fmt, ...)
+ ISC_FORMAT_PRINTF(3, 4);
/* ev_timers.c */
#define evCreateTimers __evCreateTimers
diff --git a/contrib/bind/lib/isc/logging.c b/contrib/bind/lib/isc/logging.c
index ca7ea04..f0a4940 100644
--- a/contrib/bind/lib/isc/logging.c
+++ b/contrib/bind/lib/isc/logging.c
@@ -16,7 +16,7 @@
*/
#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: logging.c,v 8.31 2001/06/18 14:44:03 marka Exp $";
+static const char rcsid[] = "$Id: logging.c,v 8.32 2003/01/02 00:35:42 marka Exp $";
#endif /* not lint */
#include "port_before.h"
@@ -282,6 +282,10 @@ log_vwrite(log_context lc, int category, int level, const char *format,
log_channel chan;
struct timeval tv;
struct tm *local_tm;
+#ifdef HAVE_TIME_R
+ struct tm tm_tmp;
+#endif
+ time_t tt;
const char *category_name;
const char *level_str;
char time_buf[256];
@@ -313,10 +317,11 @@ log_vwrite(log_context lc, int category, int level, const char *format,
if (gettimeofday(&tv, NULL) < 0) {
syslog(LOG_INFO, "gettimeofday failed in log_vwrite()");
} else {
+ tt = tv.tv_sec;
#ifdef HAVE_TIME_R
- localtime_r((time_t *)&tv.tv_sec, &local_tm);
+ local_tm = localtime_r(&tt, &tm_tmp);
#else
- local_tm = localtime((time_t *)&tv.tv_sec);
+ local_tm = localtime(&tt);
#endif
if (local_tm != NULL) {
sprintf(time_buf, "%02d-%s-%4d %02d:%02d:%02d.%03ld ",
diff --git a/contrib/bind/lib/nameser/ns_name.c b/contrib/bind/lib/nameser/ns_name.c
index fff96f4..c57ac3b 100644
--- a/contrib/bind/lib/nameser/ns_name.c
+++ b/contrib/bind/lib/nameser/ns_name.c
@@ -16,7 +16,7 @@
*/
#ifndef lint
-static const char rcsid[] = "$Id: ns_name.c,v 8.18.4.1 2002/11/14 13:32:08 marka Exp $";
+static const char rcsid[] = "$Id: ns_name.c,v 8.20 2003/04/03 06:00:07 marka Exp $";
#endif
#include "port_before.h"
@@ -792,7 +792,7 @@ decode_bitstring(const char **cpp, char *dn, const char *eom)
{
const char *cp = *cpp;
char *beg = dn, tc;
- int b, blen, plen;
+ int b, blen, plen, i;
if ((blen = (*cp & 0xff)) == 0)
blen = 256;
@@ -802,18 +802,34 @@ decode_bitstring(const char **cpp, char *dn, const char *eom)
return(-1);
cp++;
- dn += SPRINTF((dn, "\\[x"));
- for (b = blen; b > 7; b -= 8, cp++)
- dn += SPRINTF((dn, "%02x", *cp & 0xff));
+ i = SPRINTF((dn, "\\[x"));
+ if (i < 0)
+ return (-1);
+ dn += i;
+ for (b = blen; b > 7; b -= 8, cp++) {
+ i = SPRINTF((dn, "%02x", *cp & 0xff));
+ if (i < 0)
+ return (-1);
+ dn += i;
+ }
if (b > 4) {
tc = *cp++;
- dn += SPRINTF((dn, "%02x", tc & (0xff << (8 - b))));
+ i = SPRINTF((dn, "%02x", tc & (0xff << (8 - b))));
+ if (i < 0)
+ return (-1);
+ dn += i;
} else if (b > 0) {
tc = *cp++;
- dn += SPRINTF((dn, "%1x",
+ i = SPRINTF((dn, "%1x",
((tc >> 4) & 0x0f) & (0x0f << (4 - b))));
+ if (i < 0)
+ return (-1);
+ dn += i;
}
- dn += SPRINTF((dn, "/%d]", blen));
+ i = SPRINTF((dn, "/%d]", blen));
+ if (i < 0)
+ return (-1);
+ dn += i;
*cpp = cp;
return(dn - beg);
diff --git a/contrib/bind/lib/nameser/ns_parse.c b/contrib/bind/lib/nameser/ns_parse.c
index f3f92c6..abd48f2 100644
--- a/contrib/bind/lib/nameser/ns_parse.c
+++ b/contrib/bind/lib/nameser/ns_parse.c
@@ -16,7 +16,7 @@
*/
#ifndef lint
-static const char rcsid[] = "$Id: ns_parse.c,v 8.17 2001/06/20 02:50:49 marka Exp $";
+static const char rcsid[] = "$Id: ns_parse.c,v 8.18 2003/04/03 06:10:10 marka Exp $";
#endif
/* Import. */
@@ -132,9 +132,10 @@ ns_initparse(const u_char *msg, int msglen, ns_msg *handle) {
int
ns_parserr(ns_msg *handle, ns_sect section, int rrnum, ns_rr *rr) {
int b;
+ int tmp;
/* Make section right. */
- if (section >= ns_s_max)
+ if ((tmp = section) < 0 || section >= ns_s_max)
RETERR(ENODEV);
if (section != handle->_sect)
setsection(handle, section);
diff --git a/contrib/bind/lib/nameser/ns_print.c b/contrib/bind/lib/nameser/ns_print.c
index b23f805..f8a85e7 100644
--- a/contrib/bind/lib/nameser/ns_print.c
+++ b/contrib/bind/lib/nameser/ns_print.c
@@ -16,7 +16,7 @@
*/
#ifndef lint
-static const char rcsid[] = "$Id: ns_print.c,v 8.24 2001/06/18 06:40:45 marka Exp $";
+static const char rcsid[] = "$Id: ns_print.c,v 8.26 2003/02/24 23:56:35 vixie Exp $";
#endif
/* Import. */
@@ -31,6 +31,7 @@ static const char rcsid[] = "$Id: ns_print.c,v 8.24 2001/06/18 06:40:45 marka Ex
#include <arpa/inet.h>
#include <isc/assertions.h>
+#include <isc/dst.h>
#include <errno.h>
#include <resolv.h>
#include <string.h>
@@ -58,10 +59,6 @@ static int addstr(const char *src, size_t len,
static int addtab(size_t len, size_t target, int spaced,
char **buf, size_t *buflen);
-/* Proto. */
-
-u_int16_t dst_s_dns_key_id(const u_char *, const int);
-
/* Macros. */
#define T(x) \
@@ -640,9 +637,10 @@ ns_sprintrrf(const u_char *msg, size_t msglen,
len = SPRINTF((tmp, "%u %u %u ", mode, err, keysize));
T(addstr(tmp, len, &buf, &buflen));
- /* needs to dump key, print otherdata length & other data */
+ /* XXX need to dump key, print otherdata length & other data */
break;
}
+
case ns_t_tsig: {
/* BEW - need to complete this */
int n;
@@ -690,13 +688,13 @@ ns_sprintrrf(const u_char *msg, size_t msglen,
T(addname(msg, msglen, &rdata, origin, &buf, &buflen));
break;
- }
+ }
case ns_t_opt: {
len = SPRINTF((tmp, "%u bytes", class));
T(addstr(tmp, len, &buf, &buflen));
break;
- }
+ }
default:
comment = "unknown RR type";
diff --git a/contrib/bind/lib/nameser/ns_samedomain.c b/contrib/bind/lib/nameser/ns_samedomain.c
index da6f3b6..6394701 100644
--- a/contrib/bind/lib/nameser/ns_samedomain.c
+++ b/contrib/bind/lib/nameser/ns_samedomain.c
@@ -16,7 +16,7 @@
*/
#ifndef lint
-static const char rcsid[] = "$Id: ns_samedomain.c,v 8.9.6.2 2002/11/14 22:36:46 marka Exp $";
+static const char rcsid[] = "$Id: ns_samedomain.c,v 8.10.8.1 2003/06/02 05:05:05 marka Exp $";
#endif
#include "port_before.h"
@@ -125,12 +125,12 @@ ns_samedomain(const char *a, const char *b) {
*/
escaped = 0;
for (i = diff - 2; i >= 0; i--)
- if (a[i] == '\\')
+ if (a[i] == '\\') {
if (escaped)
escaped = 0;
else
escaped = 1;
- else
+ } else
break;
if (escaped)
return (0);
@@ -166,14 +166,14 @@ int
ns_makecanon(const char *src, char *dst, size_t dstsize) {
size_t n = strlen(src);
- if (n + sizeof "." > dstsize) {
+ if (n + sizeof "." > dstsize) { /* Note: sizeof == 2 */
errno = EMSGSIZE;
return (-1);
}
strcpy(dst, src);
- while (n > 0 && dst[n - 1] == '.') /* Ends in "." */
- if (n > 1 && dst[n - 2] == '\\' && /* Ends in "\." */
- (n < 2 || dst[n - 3] != '\\')) /* But not "\\." */
+ while (n >= 1 && dst[n - 1] == '.') /* Ends in "." */
+ if (n >= 2 && dst[n - 2] == '\\' && /* Ends in "\." */
+ (n < 3 || dst[n - 3] != '\\')) /* But not "\\." */
break;
else
dst[--n] = '\0';
diff --git a/contrib/bind/lib/nameser/ns_sign.c b/contrib/bind/lib/nameser/ns_sign.c
index 8c5fe1d..de8cd14 100644
--- a/contrib/bind/lib/nameser/ns_sign.c
+++ b/contrib/bind/lib/nameser/ns_sign.c
@@ -16,7 +16,7 @@
*/
#ifndef lint
-static const char rcsid[] = "$Id: ns_sign.c,v 8.11 2002/04/30 03:43:55 marka Exp $";
+static const char rcsid[] = "$Id: ns_sign.c,v 8.12 2002/10/01 06:48:37 marka Exp $";
#endif
/* Import. */
@@ -41,6 +41,7 @@ static const char rcsid[] = "$Id: ns_sign.c,v 8.11 2002/04/30 03:43:55 marka Exp
#include <unistd.h>
#include <isc/dst.h>
+#include <isc/assertions.h>
#include "port_after.h"
@@ -90,22 +91,30 @@ ns_sign2(u_char *msg, int *msglen, int msgsize, int error, void *k,
DST_KEY *key = (DST_KEY *)k;
u_char *cp = msg + *msglen, *eob = msg + msgsize;
u_char *lenp;
- u_char *name, *alg;
+ u_char *alg;
int n;
time_t timesigned;
+ u_char name[NS_MAXCDNAME];
dst_init();
if (msg == NULL || msglen == NULL || sig == NULL || siglen == NULL)
return (-1);
/* Name. */
- if (key != NULL && error != ns_r_badsig && error != ns_r_badkey)
- n = dn_comp(key->dk_key_name, cp, eob - cp, dnptrs, lastdnptr);
- else
- n = dn_comp("", cp, eob - cp, NULL, NULL);
+ if (key != NULL && error != ns_r_badsig && error != ns_r_badkey) {
+ n = ns_name_pton(key->dk_key_name, name, sizeof name);
+ if (n != -1)
+ n = ns_name_pack(name, cp, eob - cp,
+ (const u_char **)dnptrs,
+ (const u_char **)lastdnptr);
+
+ } else {
+ n = ns_name_pton("", name, sizeof name);
+ if (n != -1)
+ n = ns_name_pack(name, cp, eob - cp, NULL, NULL);
+ }
if (n < 0)
return (NS_TSIG_ERROR_NO_SPACE);
- name = cp;
cp += n;
/* Type, class, ttl, length (not filled in yet). */
@@ -142,7 +151,7 @@ ns_sign2(u_char *msg, int *msglen, int msgsize, int error, void *k,
/* Compute the signature. */
if (key != NULL && error != ns_r_badsig && error != ns_r_badkey) {
void *ctx;
- u_char buf[MAXDNAME], *cp2;
+ u_char buf[NS_MAXCDNAME], *cp2;
int n;
dst_sign_data(SIG_MODE_INIT, key, &ctx, NULL, 0, NULL, 0);
@@ -162,6 +171,7 @@ ns_sign2(u_char *msg, int *msglen, int msgsize, int error, void *k,
/* Digest the key name. */
n = ns_name_ntol(name, buf, sizeof(buf));
+ INSIST(n > 0);
dst_sign_data(SIG_MODE_UPDATE, key, &ctx, buf, n, NULL, 0);
/* Digest the class and TTL. */
@@ -173,6 +183,7 @@ ns_sign2(u_char *msg, int *msglen, int msgsize, int error, void *k,
/* Digest the algorithm. */
n = ns_name_ntol(alg, buf, sizeof(buf));
+ INSIST(n > 0);
dst_sign_data(SIG_MODE_UPDATE, key, &ctx, buf, n, NULL, 0);
/* Digest the time signed, fudge, error, and other data */
diff --git a/contrib/bind/lib/resolv/res_comp.c b/contrib/bind/lib/resolv/res_comp.c
index d972848..15de91a 100644
--- a/contrib/bind/lib/resolv/res_comp.c
+++ b/contrib/bind/lib/resolv/res_comp.c
@@ -70,7 +70,7 @@
#if defined(LIBC_SCCS) && !defined(lint)
static const char sccsid[] = "@(#)res_comp.c 8.1 (Berkeley) 6/4/93";
-static const char rcsid[] = "$Id: res_comp.c,v 8.15 1999/10/13 16:39:39 vixie Exp $";
+static const char rcsid[] = "$Id: res_comp.c,v 8.16 2002/08/07 03:47:34 marka Exp $";
#endif /* LIBC_SCCS and not lint */
#include "port_before.h"
@@ -86,10 +86,10 @@ static const char rcsid[] = "$Id: res_comp.c,v 8.15 1999/10/13 16:39:39 vixie Ex
#include "port_after.h"
/*
- * Expand compressed domain name 'comp_dn' to full domain name.
+ * Expand compressed domain name 'src' to full domain name.
* 'msg' is a pointer to the begining of the message,
- * 'eomorig' points to the first location after the message,
- * 'exp_dn' is a pointer to a buffer of size 'length' for the result.
+ * 'eom' points to the first location after the message,
+ * 'dst' is a pointer to a buffer of size 'dstsiz' for the result.
* Return size of compressed name or -1 if there was an error.
*/
int
diff --git a/contrib/bind/lib/resolv/res_debug.c b/contrib/bind/lib/resolv/res_debug.c
index f2c0689..392796a 100644
--- a/contrib/bind/lib/resolv/res_debug.c
+++ b/contrib/bind/lib/resolv/res_debug.c
@@ -95,7 +95,7 @@
#if defined(LIBC_SCCS) && !defined(lint)
static const char sccsid[] = "@(#)res_debug.c 8.1 (Berkeley) 6/4/93";
-static const char rcsid[] = "$Id: res_debug.c,v 8.46 2002/05/21 01:57:45 marka Exp $";
+static const char rcsid[] = "$Id: res_debug.c,v 8.49.6.1 2003/06/04 01:09:43 marka Exp $";
#endif /* LIBC_SCCS and not lint */
#include "port_before.h"
@@ -615,9 +615,6 @@ p_option(u_long option) {
#ifdef RES_USE_EDNS0 /* KAME extension */
case RES_USE_EDNS0: return "edns0";
#endif
-#ifdef RES_USE_A6
- case RES_USE_A6: return "a6";
-#endif
#ifdef RES_USE_DNAME
case RES_USE_DNAME: return "dname";
#endif
@@ -655,6 +652,33 @@ p_rcode(int rcode) {
}
/*
+ * Return a string for a res_sockaddr_union.
+ */
+const char *
+p_sockun(union res_sockaddr_union u, char *buf, size_t size) {
+ char ret[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:123.123.123.123"];
+
+ switch (u.sin.sin_family) {
+ case AF_INET:
+ inet_ntop(AF_INET, &u.sin.sin_addr, ret, sizeof ret);
+ break;
+#ifdef HAS_INET6_STRUCTS
+ case AF_INET6:
+ inet_ntop(AF_INET6, &u.sin6.sin6_addr, ret, sizeof ret);
+ break;
+#endif
+ default:
+ sprintf(ret, "[af%d]", u.sin.sin_family);
+ break;
+ }
+ if (size > 0) {
+ strncpy(buf, ret, size - 1);
+ buf[size - 1] = '0';
+ }
+ return (buf);
+}
+
+/*
* routines to convert between on-the-wire RR format and zone file format.
* Does not contain conversion to/from decimal degrees; divide or multiply
* by 60*60*1000 for that.
@@ -1101,8 +1125,9 @@ res_nametoclass(const char *buf, int *successp) {
if (strncasecmp(buf, "CLASS", 5) != 0 ||
!isdigit((unsigned char)buf[5]))
goto done;
+ errno = 0;
result = strtoul(buf + 5, &endptr, 10);
- if (*endptr == '\0' && result <= 0xffff)
+ if (errno == 0 && *endptr == '\0' && result <= 0xffff)
success = 1;
done:
if (successp)
@@ -1123,8 +1148,9 @@ res_nametotype(const char *buf, int *successp) {
if (strncasecmp(buf, "type", 4) != 0 ||
!isdigit((unsigned char)buf[4]))
goto done;
+ errno = 0;
result = strtoul(buf + 4, &endptr, 10);
- if (*endptr == '\0' && result <= 0xffff)
+ if (errno == 0 && *endptr == '\0' && result <= 0xffff)
success = 1;
done:
if (successp)
diff --git a/contrib/bind/lib/resolv/res_findzonecut.c b/contrib/bind/lib/resolv/res_findzonecut.c
index a82c3f1..018ec4d 100644
--- a/contrib/bind/lib/resolv/res_findzonecut.c
+++ b/contrib/bind/lib/resolv/res_findzonecut.c
@@ -1,5 +1,5 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: res_findzonecut.c,v 8.16 2002/04/12 06:27:46 marka Exp $";
+static const char rcsid[] = "$Id: res_findzonecut.c,v 8.17.6.2 2003/06/02 09:24:40 marka Exp $";
#endif /* not lint */
/*
@@ -49,19 +49,21 @@ static const char rcsid[] = "$Id: res_findzonecut.c,v 8.16 2002/04/12 06:27:46 m
typedef struct rr_a {
LINK(struct rr_a) link;
- union res_sockaddr_union addr;
+ union res_sockaddr_union addr;
} rr_a;
typedef LIST(rr_a) rrset_a;
typedef struct rr_ns {
LINK(struct rr_ns) link;
const char * name;
- int have_v4;
- int have_v6;
+ unsigned int flags;
rrset_a addrs;
} rr_ns;
typedef LIST(rr_ns) rrset_ns;
+#define RR_NS_HAVE_V4 0x01
+#define RR_NS_HAVE_V6 0x02
+
/* Forward. */
static int satisfy(res_state, const char *, rrset_ns *,
@@ -149,7 +151,8 @@ static void res_dprintf(const char *, ...) ISC_FORMAT_PRINTF(1, 2);
int
res_findzonecut(res_state statp, const char *dname, ns_class class, int opts,
- char *zname, size_t zsize, struct in_addr *addrs, int naddrs) {
+ char *zname, size_t zsize, struct in_addr *addrs, int naddrs)
+{
int result, i;
union res_sockaddr_union *u;
@@ -267,7 +270,7 @@ get_soa(res_state statp, const char *dname, ns_class class, int opts,
rrset_ns *nsrrsp)
{
char tname[NS_MAXDNAME];
- u_char resp[NS_PACKETSZ];
+ u_char *resp = NULL;
int n, i, ancount, nscount;
ns_sect sect;
ns_msg msg;
@@ -279,9 +282,13 @@ get_soa(res_state statp, const char *dname, ns_class class, int opts,
/* First canonicalize dname (exactly one unescaped trailing "."). */
if (ns_makecanon(dname, tname, sizeof tname) < 0)
- return (-1);
+ goto cleanup;
dname = tname;
+ resp = malloc(NS_MAXMSG);
+ if (resp == NULL)
+ goto cleanup;
+
/* Now grovel the subdomains, hunting for an SOA answer or auth. */
for (;;) {
/* Leading or inter-label '.' are skipped here. */
@@ -293,7 +300,7 @@ get_soa(res_state statp, const char *dname, ns_class class, int opts,
if (n < 0) {
DPRINTF(("get_soa: do_query('%s', %s) failed (%d)",
dname, p_class(class), n));
- return (-1);
+ goto cleanup;
}
if (n > 0) {
DPRINTF(("get_soa: CNAME or DNAME found"));
@@ -318,7 +325,7 @@ get_soa(res_state statp, const char *dname, ns_class class, int opts,
if (ns_parserr(&msg, sect, i, &rr) < 0) {
DPRINTF(("get_soa: ns_parserr(%s, %d) failed",
p_section(sect, ns_o_query), i));
- return (-1);
+ goto cleanup;
}
if (ns_rr_type(rr) == ns_t_cname ||
ns_rr_type(rr) == ns_t_dname)
@@ -330,19 +337,23 @@ get_soa(res_state statp, const char *dname, ns_class class, int opts,
switch (sect) {
case ns_s_an:
if (ns_samedomain(dname, t) == 0) {
- DPRINTF(("get_soa: ns_samedomain('%s', '%s') == 0",
- dname, t));
+ DPRINTF(
+ ("get_soa: ns_samedomain('%s', '%s') == 0",
+ dname, t)
+ );
errno = EPROTOTYPE;
- return (-1);
+ goto cleanup;
}
break;
case ns_s_ns:
if (ns_samename(dname, t) == 1 ||
ns_samedomain(dname, t) == 0) {
- DPRINTF(("get_soa: ns_samename() || !ns_samedomain('%s', '%s')",
- dname, t));
+ DPRINTF(
+ ("get_soa: ns_samename() || !ns_samedomain('%s', '%s')",
+ dname, t)
+ );
errno = EPROTOTYPE;
- return (-1);
+ goto cleanup;
}
break;
default:
@@ -352,21 +363,23 @@ get_soa(res_state statp, const char *dname, ns_class class, int opts,
DPRINTF(("get_soa: zname(%d) too small (%d)",
zsize, strlen(t) + 1));
errno = EMSGSIZE;
- return (-1);
+ goto cleanup;
}
strcpy(zname, t);
rdata = ns_rr_rdata(rr);
rdlen = ns_rr_rdlen(rr);
if (ns_name_uncompress(resp, ns_msg_end(msg), rdata,
mname, msize) < 0) {
- DPRINTF(("get_soa: ns_name_uncompress failed"));
- return (-1);
+ DPRINTF(("get_soa: ns_name_uncompress failed")
+ );
+ goto cleanup;
}
if (save_ns(statp, &msg, ns_s_ns,
zname, class, opts, nsrrsp) < 0) {
DPRINTF(("get_soa: save_ns failed"));
- return (-1);
+ goto cleanup;
}
+ free(resp);
return (0);
}
@@ -379,13 +392,16 @@ get_soa(res_state statp, const char *dname, ns_class class, int opts,
if (*dname == '\\')
if (*++dname == '\0') {
errno = EMSGSIZE;
- return (-1);
+ goto cleanup;
}
dname++;
}
}
DPRINTF(("get_soa: out of labels"));
errno = EDESTADDRREQ;
+ cleanup:
+ if (resp != NULL)
+ free(resp);
return (-1);
}
@@ -393,15 +409,20 @@ static int
get_ns(res_state statp, const char *zname, ns_class class, int opts,
rrset_ns *nsrrsp)
{
- u_char resp[NS_PACKETSZ];
+ u_char *resp;
ns_msg msg;
int n;
+ resp = malloc(NS_MAXMSG);
+ if (resp == NULL)
+ return (-1);
+
/* Go and get the NS RRs for this zone. */
n = do_query(statp, zname, class, ns_t_ns, resp, &msg);
if (n != 0) {
DPRINTF(("get_ns: do_query('%s', %s) failed (%d)",
zname, p_class(class), n));
+ free(resp);
return (-1);
}
@@ -409,31 +430,38 @@ get_ns(res_state statp, const char *zname, ns_class class, int opts,
if (save_ns(statp, &msg, ns_s_an, zname, class, opts, nsrrsp) < 0) {
DPRINTF(("get_ns save_ns('%s', %s) failed",
zname, p_class(class)));
+ free(resp);
return (-1);
}
+ free(resp);
return (0);
}
static int
get_glue(res_state statp, ns_class class, int opts, rrset_ns *nsrrsp) {
rr_ns *nsrr, *nsrr_n;
+ u_char *resp;
+
+ resp = malloc(NS_MAXMSG);
+ if (resp == NULL)
+ return(-1);
/* Go and get the A RRs for each empty NS RR on our list. */
for (nsrr = HEAD(*nsrrsp); nsrr != NULL; nsrr = nsrr_n) {
- u_char resp[NS_PACKETSZ];
ns_msg msg;
int n;
nsrr_n = NEXT(nsrr, link);
- if (!nsrr->have_v4) {
+ if ((nsrr->flags & RR_NS_HAVE_V4) == 0) {
n = do_query(statp, nsrr->name, class, ns_t_a,
resp, &msg);
if (n < 0) {
- DPRINTF(("get_glue: do_query('%s', %s') failed",
- nsrr->name, p_class(class)));
- return (-1);
+ DPRINTF(
+ ("get_glue: do_query('%s', %s') failed",
+ nsrr->name, p_class(class)));
+ goto cleanup;
}
if (n > 0) {
DPRINTF((
@@ -444,17 +472,18 @@ get_glue(res_state statp, ns_class class, int opts, rrset_ns *nsrrsp) {
opts, nsrr) < 0) {
DPRINTF(("get_glue: save_r('%s', %s) failed",
nsrr->name, p_class(class)));
- return (-1);
+ goto cleanup;
}
}
- if (!nsrr->have_v6) {
+ if ((nsrr->flags & RR_NS_HAVE_V6) == 0) {
n = do_query(statp, nsrr->name, class, ns_t_aaaa,
resp, &msg);
if (n < 0) {
- DPRINTF(("get_glue: do_query('%s', %s') failed",
- nsrr->name, p_class(class)));
- return (-1);
+ DPRINTF(
+ ("get_glue: do_query('%s', %s') failed",
+ nsrr->name, p_class(class)));
+ goto cleanup;
}
if (n > 0) {
DPRINTF((
@@ -465,7 +494,7 @@ get_glue(res_state statp, ns_class class, int opts, rrset_ns *nsrrsp) {
opts, nsrr) < 0) {
DPRINTF(("get_glue: save_r('%s', %s) failed",
nsrr->name, p_class(class)));
- return (-1);
+ goto cleanup;
}
}
@@ -476,7 +505,12 @@ get_glue(res_state statp, ns_class class, int opts, rrset_ns *nsrrsp) {
free_nsrr(nsrrsp, nsrr);
}
}
+ free(resp);
return (0);
+
+ cleanup:
+ free(resp);
+ return (-1);
}
static int
@@ -514,7 +548,8 @@ save_ns(res_state statp, ns_msg *msg, ns_sect sect,
if (ns_name_uncompress(ns_msg_base(*msg),
ns_msg_end(*msg), rdata,
tname, sizeof tname) < 0) {
- DPRINTF(("save_ns: ns_name_uncompress failed"));
+ DPRINTF(("save_ns: ns_name_uncompress failed")
+ );
free(nsrr);
return (-1);
}
@@ -526,8 +561,7 @@ save_ns(res_state statp, ns_msg *msg, ns_sect sect,
}
INIT_LINK(nsrr, link);
INIT_LIST(nsrr->addrs);
- nsrr->have_v4 = 0;
- nsrr->have_v6 = 0;
+ nsrr->flags = 0;
APPEND(*nsrrsp, nsrr, link);
}
if (save_a(statp, msg, ns_s_ar,
@@ -556,7 +590,8 @@ save_a(res_state statp, ns_msg *msg, ns_sect sect,
p_section(sect, ns_o_query), i));
return (-1);
}
- if ((ns_rr_type(rr) != ns_t_a && ns_rr_type(rr) != ns_t_aaaa) ||
+ if ((ns_rr_type(rr) != ns_t_a &&
+ ns_rr_type(rr) != ns_t_aaaa) ||
ns_rr_class(rr) != class ||
ns_samename(ns_rr_name(rr), owner) != 1 ||
ns_rr_rdlen(rr) != NS_INADDRSZ)
@@ -581,7 +616,7 @@ save_a(res_state statp, ns_msg *msg, ns_sect sect,
memcpy(&arr->addr.sin.sin_addr, ns_rr_rdata(rr),
NS_INADDRSZ);
arr->addr.sin.sin_port = htons(NAMESERVER_PORT);
- nsrr->have_v4 = 1;
+ nsrr->flags |= RR_NS_HAVE_V4;
break;
case ns_t_aaaa:
arr->addr.sin6.sin6_family = AF_INET6;
@@ -590,7 +625,7 @@ save_a(res_state statp, ns_msg *msg, ns_sect sect,
#endif
memcpy(&arr->addr.sin6.sin6_addr, ns_rr_rdata(rr), 16);
arr->addr.sin.sin_port = htons(NAMESERVER_PORT);
- nsrr->have_v6 = 1;
+ nsrr->flags |= RR_NS_HAVE_V6;
break;
default:
abort();
@@ -646,7 +681,7 @@ do_query(res_state statp, const char *dname, ns_class class, ns_type qtype,
DPRINTF(("do_query: res_nmkquery failed"));
return (-1);
}
- n = res_nsend(statp, req, n, resp, NS_PACKETSZ);
+ n = res_nsend(statp, req, n, resp, NS_MAXMSG);
if (n < 0) {
DPRINTF(("do_query: res_nsend failed"));
return (-1);
diff --git a/contrib/bind/lib/resolv/res_init.c b/contrib/bind/lib/resolv/res_init.c
index 9f99d14..7e507be 100644
--- a/contrib/bind/lib/resolv/res_init.c
+++ b/contrib/bind/lib/resolv/res_init.c
@@ -70,7 +70,7 @@
#if defined(LIBC_SCCS) && !defined(lint)
static const char sccsid[] = "@(#)res_init.c 8.1 (Berkeley) 6/7/93";
-static const char rcsid[] = "$Id: res_init.c,v 8.29 2002/05/31 06:05:31 marka Exp $";
+static const char rcsid[] = "$Id: res_init.c,v 8.32 2003/04/03 06:31:10 marka Exp $";
#endif /* LIBC_SCCS and not lint */
#include "port_before.h"
@@ -161,6 +161,7 @@ __res_vinit(res_state statp, int preinit) {
char *net;
#endif
int dots;
+ union res_sockaddr_union u[2];
if (!preinit) {
statp->retrans = RES_TIMEOUT;
@@ -172,17 +173,32 @@ __res_vinit(res_state statp, int preinit) {
if ((statp->options & RES_INIT) != 0)
res_ndestroy(statp);
+ memset(u, 0, sizeof(u));
#ifdef USELOOPBACK
- statp->nsaddr.sin_addr = inet_makeaddr(IN_LOOPBACKNET, 1);
+ u[nserv].sin.sin_addr = inet_makeaddr(IN_LOOPBACKNET, 1);
#else
- statp->nsaddr.sin_addr.s_addr = INADDR_ANY;
+ u[nserv].sin.sin_addr.s_addr = INADDR_ANY;
#endif
- statp->nsaddr.sin_family = AF_INET;
- statp->nsaddr.sin_port = htons(NAMESERVER_PORT);
+ u[nserv].sin.sin_family = AF_INET;
+ u[nserv].sin.sin_port = htons(NAMESERVER_PORT);
#ifdef HAVE_SA_LEN
- statp->nsaddr.sin_len = sizeof(struct sockaddr_in);
+ u[nserv].sin.sin_len = sizeof(struct sockaddr_in);
#endif
- statp->nscount = 1;
+ nserv++;
+#ifdef HAS_INET6_STRUCTS
+#ifdef USELOOPBACK
+ u[nserv].sin6.sin6_addr = in6addr_loopback;
+#else
+ u[nserv].sin6.sin6_addr = in6addr_any;
+#endif
+ u[nserv].sin6.sin6_family = AF_INET6;
+ u[nserv].sin6.sin6_port = htons(NAMESERVER_PORT);
+#ifdef HAVE_SA_LEN
+ u[nserv].sin6.sin6_len = sizeof(struct sockaddr_in6);
+#endif
+ nserv++;
+#endif
+ statp->nscount = 0;
statp->ndots = 1;
statp->pfcode = 0;
statp->_vcsock = -1;
@@ -196,11 +212,11 @@ __res_vinit(res_state statp, int preinit) {
statp->_u._ext.ext->nsaddrs[0].sin = statp->nsaddr;
strcpy(statp->_u._ext.ext->nsuffix, "ip6.arpa");
strcpy(statp->_u._ext.ext->nsuffix2, "ip6.int");
- strcpy(statp->_u._ext.ext->bsuffix, "ip6.arpa");
}
#ifdef RESOLVSORT
statp->nsort = 0;
#endif
+ res_setservers(statp, u, nserv);
/* Allow user to override the local domain definition */
if ((cp = getenv("LOCALDOMAIN")) != NULL) {
@@ -242,6 +258,7 @@ __res_vinit(res_state statp, int preinit) {
(line[sizeof(name) - 1] == ' ' || \
line[sizeof(name) - 1] == '\t'))
+ nserv = 0;
if ((fp = fopen(_PATH_RESCONF, "r")) != NULL) {
/* read the config file */
while (fgets(buf, sizeof(buf), fp) != NULL) {
@@ -507,9 +524,6 @@ res_setoptions(res_state statp, const char *options, const char *source)
statp->options |= RES_USE_EDNS0;
}
#endif
- else if (!strncmp(cp, "a6", sizeof("a6") - 1)) {
- statp->options |= RES_USE_A6;
- }
else if (!strncmp(cp, "dname", sizeof("dname") - 1)) {
statp->options |= RES_USE_DNAME;
}
@@ -529,14 +543,6 @@ res_setoptions(res_state statp, const char *options, const char *source)
strncpy(ext->nsuffix2, cp, i);
ext->nsuffix2[i] = '\0';
}
- else if (!strncmp(cp, "bitstring:", sizeof("bitstring:") - 1)) {
- if (ext == NULL)
- goto skip;
- cp += sizeof("bitstring:") - 1;
- i = MIN(strcspn(cp, " \t"), sizeof(ext->bsuffix) - 1);
- strncpy(ext->bsuffix, cp, i);
- ext->bsuffix[i] = '\0';
- }
else if (!strncmp(cp, "v6revmode:", sizeof("v6revmode:") - 1)) {
cp += sizeof("v6revmode:") - 1;
/* "nibble" and "bitstring" used to be valid */
@@ -628,13 +634,6 @@ res_get_nibblesuffix2(res_state statp) {
return ("ip6.int");
}
-const char *
-res_get_bitstringsuffix(res_state statp) {
- if (statp->_u._ext.ext)
- return (statp->_u._ext.ext->bsuffix);
- return ("ip6.arpa");
-}
-
void
res_setservers(res_state statp, const union res_sockaddr_union *set, int cnt) {
int i, nserv;
diff --git a/contrib/bind/lib/resolv/res_mkquery.c b/contrib/bind/lib/resolv/res_mkquery.c
index 7041227..a45d89b 100644
--- a/contrib/bind/lib/resolv/res_mkquery.c
+++ b/contrib/bind/lib/resolv/res_mkquery.c
@@ -70,7 +70,7 @@
#if defined(LIBC_SCCS) && !defined(lint)
static const char sccsid[] = "@(#)res_mkquery.c 8.1 (Berkeley) 6/4/93";
-static const char rcsid[] = "$Id: res_mkquery.c,v 8.14 2001/09/24 13:50:27 marka Exp $";
+static const char rcsid[] = "$Id: res_mkquery.c,v 8.15.8.1 2003/06/02 05:59:57 marka Exp $";
#endif /* LIBC_SCCS and not lint */
#include "port_before.h"
@@ -105,7 +105,7 @@ res_nmkquery(res_state statp,
int buflen) /* size of buffer */
{
register HEADER *hp;
- register u_char *cp;
+ register u_char *cp, *ep;
register int n;
u_char *dnptrs[20], **dpp, **lastdnptr;
@@ -128,7 +128,7 @@ res_nmkquery(res_state statp,
hp->rd = (statp->options & RES_RECURSE) != 0;
hp->rcode = NOERROR;
cp = buf + HFIXEDSZ;
- buflen -= HFIXEDSZ;
+ ep = buf + buflen;
dpp = dnptrs;
*dpp++ = buf;
*dpp++ = NULL;
@@ -139,15 +139,15 @@ res_nmkquery(res_state statp,
switch (op) {
case QUERY: /*FALLTHROUGH*/
case NS_NOTIFY_OP:
- if ((buflen -= QFIXEDSZ) < 0)
+ if (ep - cp < QFIXEDSZ)
return (-1);
- if ((n = dn_comp(dname, cp, buflen, dnptrs, lastdnptr)) < 0)
+ if ((n = dn_comp(dname, cp, ep - cp - QFIXEDSZ, dnptrs,
+ lastdnptr)) < 0)
return (-1);
cp += n;
- buflen -= n;
- __putshort(type, cp);
+ ns_put16(type, cp);
cp += INT16SZ;
- __putshort(class, cp);
+ ns_put16(class, cp);
cp += INT16SZ;
hp->qdcount = htons(1);
if (op == QUERY || data == NULL)
@@ -155,19 +155,20 @@ res_nmkquery(res_state statp,
/*
* Make an additional record for completion domain.
*/
- buflen -= RRFIXEDSZ;
- n = dn_comp((const char *)data, cp, buflen, dnptrs, lastdnptr);
+ if ((ep - cp) < RRFIXEDSZ)
+ return (-1);
+ n = dn_comp((const char *)data, cp, ep - cp - RRFIXEDSZ,
+ dnptrs, lastdnptr);
if (n < 0)
return (-1);
cp += n;
- buflen -= n;
- __putshort(T_NULL, cp);
+ ns_put16(T_NULL, cp);
cp += INT16SZ;
- __putshort(class, cp);
+ ns_put16(class, cp);
cp += INT16SZ;
- __putlong(0, cp);
+ ns_put32(0, cp);
cp += INT32SZ;
- __putshort(0, cp);
+ ns_put16(0, cp);
cp += INT16SZ;
hp->arcount = htons(1);
break;
@@ -176,16 +177,16 @@ res_nmkquery(res_state statp,
/*
* Initialize answer section
*/
- if (buflen < 1 + RRFIXEDSZ + datalen)
+ if (ep - cp < 1 + RRFIXEDSZ + datalen)
return (-1);
*cp++ = '\0'; /* no domain name */
- __putshort(type, cp);
+ ns_put16(type, cp);
cp += INT16SZ;
- __putshort(class, cp);
+ ns_put16(class, cp);
cp += INT16SZ;
- __putlong(0, cp);
+ ns_put32(0, cp);
cp += INT32SZ;
- __putshort(datalen, cp);
+ ns_put16(datalen, cp);
cp += INT16SZ;
if (datalen) {
memcpy(cp, data, datalen);
@@ -207,15 +208,14 @@ res_nmkquery(res_state statp,
#endif
int
-res_nopt(statp, n0, buf, buflen, anslen)
- res_state statp;
- int n0;
- u_char *buf; /* buffer to put query */
- int buflen; /* size of buffer */
- int anslen; /* answer buffer length */
+res_nopt(res_state statp,
+ int n0, /* current offset in buffer */
+ u_char *buf, /* buffer to put query */
+ int buflen, /* size of buffer */
+ int anslen) /* UDP answer buffer size */
{
register HEADER *hp;
- register u_char *cp;
+ register u_char *cp, *ep;
u_int16_t flags = 0;
#ifdef DEBUG
@@ -225,17 +225,16 @@ res_nopt(statp, n0, buf, buflen, anslen)
hp = (HEADER *) buf;
cp = buf + n0;
- buflen -= n0;
+ ep = buf + buflen;
- if (buflen < 1 + RRFIXEDSZ)
- return -1;
+ if ((ep - cp) < 1 + RRFIXEDSZ)
+ return (-1);
*cp++ = 0; /* "." */
- buflen--;
- __putshort(T_OPT, cp); /* TYPE */
+ ns_put16(T_OPT, cp); /* TYPE */
cp += INT16SZ;
- __putshort(anslen & 0xffff, cp); /* CLASS = UDP payload size */
+ ns_put16(anslen & 0xffff, cp); /* CLASS = UDP payload size */
cp += INT16SZ;
*cp++ = NOERROR; /* extended RCODE */
*cp++ = 0; /* EDNS version */
@@ -246,13 +245,12 @@ res_nopt(statp, n0, buf, buflen, anslen)
#endif
flags |= NS_OPT_DNSSEC_OK;
}
- __putshort(flags, cp);
+ ns_put16(flags, cp);
cp += INT16SZ;
- __putshort(0, cp); /* RDLEN */
+ ns_put16(0, cp); /* RDLEN */
cp += INT16SZ;
hp->arcount = htons(ntohs(hp->arcount) + 1);
- buflen -= RRFIXEDSZ;
- return cp - buf;
+ return (cp - buf);
}
#endif
diff --git a/contrib/bind/lib/resolv/res_mkupdate.c b/contrib/bind/lib/resolv/res_mkupdate.c
index 6071360..3928f9f 100644
--- a/contrib/bind/lib/resolv/res_mkupdate.c
+++ b/contrib/bind/lib/resolv/res_mkupdate.c
@@ -21,7 +21,7 @@
*/
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: res_mkupdate.c,v 1.26 2001/05/29 05:49:47 marka Exp $";
+static const char rcsid[] = "$Id: res_mkupdate.c,v 1.27.8.1 2003/06/02 04:56:28 marka Exp $";
#endif /* not lint */
#include "port_before.h"
@@ -302,7 +302,7 @@ res_nmkupdate(res_state statp, ns_updrec *rrecp_in, u_char *buf, int buflen) {
if (!getword_str(buf2, sizeof buf2, &startp, endp))
return (-1);
- n = dn_comp(buf2, cp, buflen, dnptrs, lastdnptr);
+ n = dn_comp(buf2, cp, buflen, NULL, NULL);
if (n < 0)
return (-1);
cp += n;
@@ -482,8 +482,10 @@ res_nmkupdate(res_state statp, ns_updrec *rrecp_in, u_char *buf, int buflen) {
char *ulendp;
u_int32_t ottl;
+ errno = 0;
ottl = strtoul(buf2, &ulendp, 10);
- if (ulendp != NULL && *ulendp != '\0')
+ if (errno != 0 ||
+ (ulendp != NULL && *ulendp != '\0'))
return (-1);
ShrinkBuffer(INT32SZ);
PUTLONG(ottl, cp);
@@ -572,7 +574,7 @@ res_nmkupdate(res_state statp, ns_updrec *rrecp_in, u_char *buf, int buflen) {
/* next name */
if (!getword_str(buf2, sizeof buf2, &startp, endp))
return (-1);
- n = dn_comp(buf2, cp, buflen, dnptrs, lastdnptr);
+ n = dn_comp(buf2, cp, buflen, NULL, NULL);
if (n < 0)
return (-1);
cp += n;
@@ -636,6 +638,62 @@ res_nmkupdate(res_state statp, ns_updrec *rrecp_in, u_char *buf, int buflen) {
memcpy(cp, &in6a, NS_IN6ADDRSZ);
cp += NS_IN6ADDRSZ;
break;
+ case ns_t_naptr:
+ /* Order Preference Flags Service Replacement Regexp */
+ /* Order */
+ n = getnum_str(&startp, endp);
+ if (n < 0 || n > 65535)
+ return (-1);
+ ShrinkBuffer(INT16SZ);
+ PUTSHORT(n, cp);
+ /* Preference */
+ n = getnum_str(&startp, endp);
+ if (n < 0 || n > 65535)
+ return (-1);
+ ShrinkBuffer(INT16SZ);
+ PUTSHORT(n, cp);
+ /* Flags */
+ if ((n = getstr_str(buf2, sizeof buf2,
+ &startp, endp)) < 0) {
+ return (-1);
+ }
+ if (n > 255)
+ return (-1);
+ ShrinkBuffer(n+1);
+ *cp++ = n;
+ memcpy(cp, buf2, n);
+ cp += n;
+ /* Service Classes */
+ if ((n = getstr_str(buf2, sizeof buf2,
+ &startp, endp)) < 0) {
+ return (-1);
+ }
+ if (n > 255)
+ return (-1);
+ ShrinkBuffer(n+1);
+ *cp++ = n;
+ memcpy(cp, buf2, n);
+ cp += n;
+ /* Pattern */
+ if ((n = getstr_str(buf2, sizeof buf2,
+ &startp, endp)) < 0) {
+ return (-1);
+ }
+ if (n > 255)
+ return (-1);
+ ShrinkBuffer(n+1);
+ *cp++ = n;
+ memcpy(cp, buf2, n);
+ cp += n;
+ /* Replacement */
+ if (!getword_str(buf2, sizeof buf2, &startp, endp))
+ return (-1);
+ n = dn_comp(buf2, cp, buflen, NULL, NULL);
+ if (n < 0)
+ return (-1);
+ cp += n;
+ ShrinkBuffer(n);
+ break;
default:
return (-1);
} /*switch*/
@@ -807,7 +865,7 @@ gethexnum_str(u_char **startpp, u_char *endp) {
}
/*
- * Get a whitespace delimited base 16 number from a string (not file) into buf
+ * Get a whitespace delimited base 10 number from a string (not file) into buf
* update the start pointer to point after the number in the string.
*/
static int
diff --git a/contrib/bind/lib/resolv/res_private.h b/contrib/bind/lib/resolv/res_private.h
index ec9b384..d7b66cd 100644
--- a/contrib/bind/lib/resolv/res_private.h
+++ b/contrib/bind/lib/resolv/res_private.h
@@ -11,7 +11,6 @@ struct __res_state_ext {
} addr, mask;
} sort_list[MAXRESOLVSORT];
char nsuffix[64];
- char bsuffix[64];
char nsuffix2[64];
};
diff --git a/contrib/bind/lib/resolv/res_query.c b/contrib/bind/lib/resolv/res_query.c
index 61f5df9..cda076c 100644
--- a/contrib/bind/lib/resolv/res_query.c
+++ b/contrib/bind/lib/resolv/res_query.c
@@ -70,7 +70,7 @@
#if defined(LIBC_SCCS) && !defined(lint)
static const char sccsid[] = "@(#)res_query.c 8.1 (Berkeley) 6/4/93";
-static const char rcsid[] = "$Id: res_query.c,v 8.23 2001/09/24 13:50:29 marka Exp $";
+static const char rcsid[] = "$Id: res_query.c,v 8.24 2003/01/31 15:25:58 vixie Exp $";
#endif /* LIBC_SCCS and not lint */
#include "port_before.h"
@@ -167,8 +167,11 @@ again:
if (hp->rcode != NOERROR || ntohs(hp->ancount) == 0) {
#ifdef DEBUG
if (statp->options & RES_DEBUG)
- printf(";; rcode = %d, ancount=%d\n", hp->rcode,
- ntohs(hp->ancount));
+ printf(";; rcode = (%s), counts = an:%d ns:%d ar:%d\n",
+ p_rcode(hp->rcode),
+ ntohs(hp->ancount),
+ ntohs(hp->nscount),
+ ntohs(hp->arcount));
#endif
switch (hp->rcode) {
case NXDOMAIN:
diff --git a/contrib/bind/lib/resolv/res_send.c b/contrib/bind/lib/resolv/res_send.c
index 6f0e430..2adc608 100644
--- a/contrib/bind/lib/resolv/res_send.c
+++ b/contrib/bind/lib/resolv/res_send.c
@@ -70,7 +70,7 @@
#if defined(LIBC_SCCS) && !defined(lint)
static const char sccsid[] = "@(#)res_send.c 8.1 (Berkeley) 6/4/93";
-static const char rcsid[] = "$Id: res_send.c,v 8.49 2002/03/29 21:50:51 marka Exp $";
+static const char rcsid[] = "$Id: res_send.c,v 8.51.2.1 2003/06/02 05:59:57 marka Exp $";
#endif /* LIBC_SCCS and not lint */
/*
@@ -171,6 +171,9 @@ res_ourserver_p(const res_state statp, const struct sockaddr *sa) {
srv6 = (struct sockaddr_in6 *)get_nsaddr(statp, ns);
if (srv6->sin6_family == in6p->sin6_family &&
srv6->sin6_port == in6p->sin6_port &&
+#ifdef HAVE_SIN6_SCOPE_ID
+ srv6->sin6_scope_id == in6p->sin6_scope_id &&
+#endif
(IN6_IS_ADDR_UNSPECIFIED(&srv6->sin6_addr) ||
IN6_ARE_ADDR_EQUAL(&srv6->sin6_addr, &in6p->sin6_addr)))
return (1);
@@ -386,6 +389,8 @@ res_nsend(res_state statp,
int nsaplen;
nsap = get_nsaddr(statp, ns);
nsaplen = get_salen(nsap);
+ statp->_flags &= ~RES_F_LASTMASK;
+ statp->_flags |= (ns << RES_F_LASTSHIFT);
same_ns:
if (statp->qhook) {
int done = 0, loops = 0;
@@ -623,7 +628,7 @@ send_vc(res_state statp,
/*
* Send length & message
*/
- putshort((u_short)buflen, (u_char*)&len);
+ ns_put16((u_short)buflen, (u_char*)&len);
iov[0] = evConsIovec(&len, INT16SZ);
DE_CONST(buf, tmp);
iov[1] = evConsIovec(tmp, buflen);
diff --git a/contrib/bind/lib/resolv/res_update.c b/contrib/bind/lib/resolv/res_update.c
index 12ee326..35c9b07 100644
--- a/contrib/bind/lib/resolv/res_update.c
+++ b/contrib/bind/lib/resolv/res_update.c
@@ -1,5 +1,5 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: res_update.c,v 1.34 2002/04/12 06:28:52 marka Exp $";
+static const char rcsid[] = "$Id: res_update.c,v 1.35.8.2 2003/06/02 09:24:40 marka Exp $";
#endif /* not lint */
/*
@@ -77,7 +77,7 @@ struct zonegrp {
/* Forward. */
-static void res_dprintf(const char *, ...);
+static void res_dprintf(const char *, ...) ISC_FORMAT_PRINTF(1, 2);
/* Macros. */
@@ -92,12 +92,18 @@ static void res_dprintf(const char *, ...);
int
res_nupdate(res_state statp, ns_updrec *rrecp_in, ns_tsig_key *key) {
ns_updrec *rrecp;
- u_char answer[PACKETSZ], packet[2*PACKETSZ];
+ u_char answer[PACKETSZ];
+ u_char *packet;
struct zonegrp *zptr, tgrp;
LIST(struct zonegrp) zgrps;
int nzones = 0, nscount = 0, n;
union res_sockaddr_union nsaddrs[MAXNS];
+ packet = malloc(NS_MAXMSG);
+ if (packet == NULL) {
+ DPRINTF(("malloc failed"));
+ return (0);
+ }
/* Thread all of the updates onto a list of groups. */
INIT_LIST(zgrps);
memset(&tgrp, 0, sizeof (tgrp));
@@ -150,7 +156,7 @@ res_nupdate(res_state statp, ns_updrec *rrecp_in, ns_tsig_key *key) {
/* Marshall the update message. */
n = res_nmkupdate(statp, HEAD(zptr->z_rrlist),
- packet, sizeof packet);
+ packet, NS_MAXMSG);
DPRINTF(("res_mkupdate -> %d", n));
if (n < 0)
goto done;
@@ -188,6 +194,7 @@ res_nupdate(res_state statp, ns_updrec *rrecp_in, ns_tsig_key *key) {
if (nscount != 0)
res_setservers(statp, nsaddrs, nscount);
+ free(packet);
return (nzones);
}
diff --git a/contrib/bind/port/freebsd/bin/probe_ipv6 b/contrib/bind/port/freebsd/bin/probe_ipv6
index ba7135d..993cabd 100755
--- a/contrib/bind/port/freebsd/bin/probe_ipv6
+++ b/contrib/bind/port/freebsd/bin/probe_ipv6
@@ -2,7 +2,7 @@
set -e
PATH=/bin:/usr/bin:$PATH; export PATH
-trap "rm -f tmp$$a.c tmp$$b.c tmp$$a.o tmp$$b.o" 0
+trap "rm -f tmp$$[abc].[oc]" 0 1 2 15
target=port_ipv6
new=new_${target}.h
old=${target}.h
@@ -19,6 +19,13 @@ cat > tmp$$b.c <<EOF
struct in6_addr xx;
EOF
+cat > tmp$$c.c <<EOF
+#include <sys/types.h>
+#include <netinet/in.h>
+struct sockaddr_in6 xx;
+main() { xx.sin6_scope_id = 0; }
+EOF
+
cat > ${new} <<EOF
/* This file is automatically generated. Do Not Edit. */
@@ -37,6 +44,12 @@ then
else
echo "#define in6_addr in_addr6" >> ${new}
fi
+ if ${CC} -c tmp$$c.c > /dev/null 2>&1
+ then
+ echo "#define HAVE_SIN6_SCOPE_ID" >> ${new}
+ else
+ echo "#undef HAVE_SIN6_SCOPE_ID" >> ${new}
+ fi
else
echo "#undef HAS_INET6_STRUCTS" >> ${new}
fi
diff --git a/contrib/bind/port/freebsd/include/port_after.h b/contrib/bind/port/freebsd/include/port_after.h
index 6207f82..566113b 100644
--- a/contrib/bind/port/freebsd/include/port_after.h
+++ b/contrib/bind/port/freebsd/include/port_after.h
@@ -6,12 +6,20 @@
#define USE_WAITPID
#define HAVE_GETRUSAGE
#define HAVE_FCHMOD
-#define NEED_PSELECT
#define HAVE_SA_LEN
#define HAVE_MINIMUM_IFREQ
#define USE_LOG_CONS
#define HAVE_CHROOT
#define CAN_CHANGE_ID
+#define USE_IFNAMELINKID
+#if __FreeBSD_version >= 330000
+#define HAVE_STRLCPY
+#define HAVE_STRLCAT
+#endif
+
+#define DIG_PING "/sbin/ping"
+#define DIG_TAIL "/usr/bin/tail"
+#define DIG_PINGFMT "%s -q -c 3 %s | %s -3"
#define _TIMEZONE timezone
@@ -22,6 +30,13 @@
#define KMEM "/dev/kmem"
#define UDPSUM "udpcksum"
+#if defined(__FreeBSD_version) && __FreeBSD_version >= 500041
+#undef NEED_PSELECT
+#include <sys/select.h>
+#else
+#define NEED_PSELECT
+#endif
+
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/param.h>
OpenPOWER on IntegriCloud