Virgin import of BIND v8.2.3-REL
This commit is contained in:
parent
8e14eeeb1d
commit
98ff752a5e
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/vendor/bind/dist/; revision=71756
@ -1,3 +1,277 @@
|
||||
--- 8.2.3-REL released ---
|
||||
|
||||
1139. [bug] inet_{net_,}ntop() had an off-by-one error.
|
||||
|
||||
1138. [bug] purge_nonglue() should only be fatal on master
|
||||
servers.
|
||||
|
||||
1138. [port] add include/errs.h to various ports.
|
||||
winnt: #1130 caused linkage failures.
|
||||
|
||||
--- 8.2.3-RC5 released ---
|
||||
|
||||
1137. [bug] rfc1034 escape sequences not processed when replaying
|
||||
updates.
|
||||
|
||||
1136. [port] winnt: named nolonger creates resolv.conf.
|
||||
|
||||
1135. [bug] fixup from #1130/1132.
|
||||
|
||||
1134. [port] winnt: SIOCGIFADDR, SIOCGIFFLAGS, SIOCGIFDSTADDR and
|
||||
mkstemp() fixes.
|
||||
|
||||
1133. [bug] sorting of SIG/non-SIG records prior to rrset ordering
|
||||
of was broken.
|
||||
|
||||
--- 8.2.3-RC4 released ---
|
||||
|
||||
1132. [lint] more #1130.
|
||||
|
||||
1131. [support] TTL 0 is now allowed in zone files.
|
||||
|
||||
1130. [lint] massive, massive delinting from "gcc -Wall".
|
||||
|
||||
1129. [support] "max_log_size_ixfr" is now a scaled number (4m, etc).
|
||||
|
||||
1128. [contrib] updated mdnkit.
|
||||
|
||||
1127. [port] winnt: support for more interfaces, dnskeygen.
|
||||
|
||||
1126. [bug] resolver: close cached file descriptors when socket()
|
||||
fails.
|
||||
|
||||
1125. [bug] when ns_addr_list is rotated, rotate cached file
|
||||
descriptors.
|
||||
|
||||
1124. [bug] the select() timeout was not always being correctly
|
||||
computed.
|
||||
|
||||
1123. [bug] changes to ns_addr_list were not being reflected into
|
||||
our private copy.
|
||||
|
||||
1122. [port] sco: DESTRUN and DESTSBIN can't be the same.
|
||||
|
||||
1121. [cleanup] re-word "server is ??? priming" status message.
|
||||
|
||||
1120. [bug] more #1108 fine tuning.
|
||||
|
||||
1119. [bug] "delete all" RRs were not being printed correctly.
|
||||
|
||||
1118. [port] winnt: always install the named executable
|
||||
|
||||
1117. [port] linux: turn off returning ICMP port unreachables.
|
||||
|
||||
1116. [bug] minor tweak to #1108
|
||||
|
||||
1115. [bug] fail if tsig transfers are requested but we can't
|
||||
communicate the keys to named-xfer.
|
||||
|
||||
1114. [bug] remove extraneous semi-colon from ns_parser.y
|
||||
|
||||
--- 8.2.3-T9B released ---
|
||||
|
||||
1113. [support] show config file name and age in "ndc status"
|
||||
|
||||
1112. [support] "ndc status" no longer mentions loading of config.
|
||||
|
||||
1111. [port] some versions of sunos don't have _POSIX_PATH_MAX
|
||||
|
||||
1110. [bug] zones with Null keys at delegation incorreclty rejected.
|
||||
|
||||
1109. [support] named-xfer was bombing on non-TSIG'd zones
|
||||
|
||||
1108. [support] ignore queries that come in during long synch ops
|
||||
|
||||
1107. [func] allow the default syslog facility to be set by
|
||||
adding -DISC_FACILITY=<value> to CDEBUG in Makefile.set.
|
||||
|
||||
1106. [func] host statistics can now be cleared after they are
|
||||
dumped. Use "ndc stats clear".
|
||||
|
||||
1105. [func] host-statistics-max can be used to set a upper bound
|
||||
on the number hosts we collect statistics against.
|
||||
|
||||
1104. [func] the source of a record is no longer dependent on
|
||||
setting "host-statistics yes;"
|
||||
|
||||
1103. [doc] winnt: updated port specific notes.
|
||||
|
||||
1102. [port] winnt: BINDctrl fixes
|
||||
|
||||
1101. [port] winnt: install fixes
|
||||
|
||||
1100. [bug] named-xfer some memory allocations were not checked.
|
||||
|
||||
1099. [bug] more missing INIT_LINK's.
|
||||
|
||||
1098. [support] force gmake to fail if the sub-shell fails.
|
||||
|
||||
1097. [port] winnt: lower the logging level so that BINDCtrl status
|
||||
checks do not cause the eventlog to fillup.
|
||||
|
||||
1096. [bug] don't pass '-i' to named-xfer unless we are going
|
||||
to attempt a IXFR.
|
||||
|
||||
1095. [bug] dig: report missing arguements.
|
||||
|
||||
1094. [port] winnt: more cylink fixes, updated install.
|
||||
|
||||
1093. [bug] winnt: build lib cylink correctly
|
||||
|
||||
1092. [cleanup] winnt: snmpmib.c is nolonger required
|
||||
|
||||
1091. [support] winnt: workout the install directory.
|
||||
|
||||
1090. [bug] winnt: install was copying old over new.
|
||||
|
||||
1089. [bug] winnt: fix copyright for nameserver.c
|
||||
winnt: snmpmib.c not needed in libbind.dsp
|
||||
|
||||
1088. [bug] #1053 still contained NAPTR problems.
|
||||
|
||||
--- 8.2.3-T8B released ---
|
||||
|
||||
1087. [port] sunos/gcc _POSIX_PATH_MAX isn't defined when it should
|
||||
be.
|
||||
|
||||
1086. [doc] malformed man page for heap.
|
||||
|
||||
1085. [bug] ixfr responses to zones we don't server were malformed.
|
||||
|
||||
1084. [bug] INIT_LINK before APPEND in four more places.
|
||||
|
||||
1083. [support] only log "no options before zone" config error
|
||||
before FIRST zone [kjd].
|
||||
|
||||
1082. [bug] have client-side IXFR work in single answer mode [kjd].
|
||||
|
||||
1081. [bug] have server-side IXFR work in single answer mode [kjd].
|
||||
|
||||
1080. [support] still do IXFR's even when a file name is not specified
|
||||
for zone [kjd].
|
||||
|
||||
1079. [support] need to have a file name for a hints zone [kjd].
|
||||
|
||||
1078. [port] WinNT interface enumeration fixes from Danny Mayer.
|
||||
|
||||
1077. [support] format string audit.
|
||||
|
||||
1076. [port] now recognize RH7.0's "strndup()"
|
||||
|
||||
1075. [contrib] add contrib/resparse-1.3 [Henning Schulzrinne @CU]
|
||||
|
||||
1074. [support] INSIST that lists are correctly managed.
|
||||
|
||||
1073. [port] Win/NT port work from Danny Mayer. Dig, host and
|
||||
nslookup have been added.
|
||||
|
||||
1072. [port] work around a gcc bug on solaris.
|
||||
|
||||
1071. [bug] memory leak in res_nsendsigned().
|
||||
|
||||
1070. [bug] We were accepting non syntactically valis SOA records.
|
||||
|
||||
1069. [port] movefile() is now part of libbind as isc_movefile(),
|
||||
remaining rename() calls converted to isc_movefile().
|
||||
|
||||
1068. [bug] purge the zone from memory if an error is detected
|
||||
on loading.
|
||||
|
||||
1067. [bug] reload the parent zone if loading the child zone fails,
|
||||
the parent zone may otherwise be corrupted.
|
||||
|
||||
1066. [bug] refresh/retry timer need to be reset after IXFR
|
||||
|
||||
1065. [bug] IXFR change list could be freed to early.
|
||||
|
||||
1064. [bug] unchecked memget in sx_send_ixfr().
|
||||
|
||||
1063. [bug] fix #1041 was incomplete.
|
||||
|
||||
1062. [bug] host printed out address records multiple times if
|
||||
they were at the end of a CNAME chain.
|
||||
|
||||
1061. [bug] host failed to look for A records for the second an
|
||||
subsequent entries in the search list when using
|
||||
the default lookup.
|
||||
|
||||
1060. [bug] $GENERATE did not reject a out of zone LHS.
|
||||
|
||||
1059. [bug] res_findzonecut() contained a bad debugging printf.
|
||||
|
||||
1058. [bug] possible NULL pointer de-reference in
|
||||
dst_key_to_buffer().
|
||||
|
||||
1057. [doc] document that bogus causes anti-alias processing.
|
||||
|
||||
1056. [bug] ns_sprintrrf() could incorrectly print "." as "@".
|
||||
|
||||
1055. [bug] aa was being cleared on notify "queries" prior to
|
||||
testing.
|
||||
|
||||
1054. [bug] NAPTR records were using name compression.
|
||||
|
||||
1053. [bug] NAPTR records were not being printed correctly.
|
||||
|
||||
1052. [bug] UPDATES w/ NAPTR records were failing.
|
||||
|
||||
1051. [contrib] YADDAS: Yet another DNS database awk script.
|
||||
|
||||
1050. [bug] named-bootconf did not handle cacheless secondary/stub
|
||||
zones. NOTE cacheless secondary/stub zones are not
|
||||
recommended.
|
||||
|
||||
1049. [bug] buffer overruns by 1 in getnameinfo().
|
||||
|
||||
1048. [bug] ns_ctl_install() was corrupting the server_controls
|
||||
list.
|
||||
|
||||
1047. [bug] req_iquery() wasn't doing a final update on buflenp.
|
||||
|
||||
1046. [port] Win/NT port improved by its author.
|
||||
|
||||
--- 8.2.3-T7B released ---
|
||||
|
||||
1045. [bug] forwarded and initiated TCP queries weren't affected
|
||||
by the "query-source" config option, and weren't being
|
||||
set nonblocking.
|
||||
|
||||
1044. [support] add HITCOUNTS compile-time option (from lamont@hp.com).
|
||||
|
||||
1043. [bug] dnsquery's command line args could overflow buffers.
|
||||
|
||||
1042. [doc] maintain-ixfr-base had wrong description in
|
||||
named.conf(5).
|
||||
|
||||
1041. [bug] host assumed axfr returned "one-answer" responses.
|
||||
|
||||
1040. [bug] add d_rcnt processing to update processing.
|
||||
|
||||
1039. [bug] qcomp wasn't stable.
|
||||
|
||||
1038. [port] solaris needs a strerror that does not return NULL,
|
||||
call isc_strerror instead.
|
||||
|
||||
1037. [support] soften #1025 -- continue to accept !AA notify req's.
|
||||
|
||||
1036. [debug] add TKEY debugging support.
|
||||
|
||||
1035. [bug] ndc's "help" command worked in signal but not channel
|
||||
mode.
|
||||
|
||||
1034. [bug] loc_ntoa() failed to correctly print altitudes in the
|
||||
range [-0.99 .. -0.01].
|
||||
|
||||
1033. [port] Win/NT portability infusion from Larry @NortelNetworks.
|
||||
|
||||
1032. [bug] fix minor signal buglet introduced in #1029.
|
||||
|
||||
1031. [bug] nslookup now correctly refuses to accept qtypes AXFR
|
||||
or IXFR. (use nslookup "ls", not queries, for this.)
|
||||
|
||||
1030. [protocol] nslookup "ls" command now uses writev() rather than two
|
||||
write()'s, to get msglen and query into same tcp seg.
|
||||
|
||||
--- 8.2.3-T6B released ---
|
||||
|
||||
1029. [bug] incredibly busy systems could starve handle_needs().
|
||||
|
@ -175,7 +175,7 @@ Operating System Notes
|
||||
"port/solaris/Makefile.set.gcc" to "port/solaris/Makefile.set".
|
||||
|
||||
If you're using a Solaris release earlier than 2.5 and you have
|
||||
a large number of interfaces on your system, you many need
|
||||
a large number of interfaces on your system, you many need to
|
||||
use a script to "limit descriptors N" (where 'N' is a
|
||||
suitably large number) before execing "named". On Solaris
|
||||
2.5 and later, the server will do this itself.
|
||||
|
@ -13,7 +13,7 @@
|
||||
## ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
## SOFTWARE.
|
||||
|
||||
# $Id: Makefile,v 8.51 1999/11/06 03:24:02 vixie Exp $
|
||||
# $Id: Makefile,v 8.52 2000/11/21 12:54:37 marka Exp $
|
||||
|
||||
TOP=
|
||||
SUBDIRS= include port lib bin
|
||||
@ -37,7 +37,7 @@ all clean depend install distclean:: FRC
|
||||
eval "${MAKE} $$settings ${MARGS} SYSTYPE=$$systype \
|
||||
VER=$$version \
|
||||
$@"; \
|
||||
); \
|
||||
) || exit 1; \
|
||||
done \
|
||||
fi
|
||||
|
||||
@ -52,7 +52,7 @@ links: FRC
|
||||
( mkdir $$x; cd $$x; pwd; ln -s ../SRC/$$x SRC; \
|
||||
cp SRC/Makefile Makefile; chmod +w Makefile; \
|
||||
${MAKE} ${MARGS} SYSTYPE=$$systype links; \
|
||||
); \
|
||||
) || exit 1; \
|
||||
done
|
||||
|
||||
stdlinks: FRC
|
||||
|
@ -1,5 +1,5 @@
|
||||
This is the source portion of BIND version 8.2.3-T2B. Its companions
|
||||
are "doc" and "contrib" so you are probably not missing anything.
|
||||
This is the source portion of BIND version 8. Its companions are "doc" and
|
||||
"contrib" so you are probably not missing anything.
|
||||
|
||||
See the CHANGES file for a detailed listing of all changes. See the INSTALL
|
||||
file for information on building and installing BIND.
|
||||
@ -7,17 +7,19 @@ file for information on building and installing BIND.
|
||||
See the SUPPORT file for information on obtaining commercial support for ISC
|
||||
artifacts including BIND, INN, and DHCP.
|
||||
|
||||
SECURITY NOTE:
|
||||
Note that BIND 8 is in "end-of-life", having been replaced by BIND 9. See
|
||||
http://www.isc.org/ for more details.
|
||||
|
||||
Solaris and other pre-4.4BSD kernels do not respect ownership or
|
||||
protections on UNIX-domain sockets. This means that the default
|
||||
path for the NDC control socket (/var/run/ndc) is such that any
|
||||
user (root or other) on such systems can issue any NDC command
|
||||
except "start" and "restart". The short term fix for this is to
|
||||
override the default path and put such control sockets into root-
|
||||
owned directories which do not permit non-root to r/w/x through them.
|
||||
The medium term fix is for BIND to enforce this requirement internally.
|
||||
The long term fix is for all kernels to upgrade to 4.4BSD semantics.
|
||||
BIND 8.2.3 Highlights
|
||||
|
||||
Improved support for Windows NT and Windows 2000.
|
||||
Host stats are no longer required to track the source of a record.
|
||||
IXFR improvements.
|
||||
Forwarders track and use RTT to select fastest.
|
||||
Unix domain sockets implementions that require the directory
|
||||
to be secure, are now secured.
|
||||
Many minor problems fixed.
|
||||
Linux DoS removed.
|
||||
|
||||
BIND 8.2.2 patchlevel 5 Highlights
|
||||
|
||||
@ -47,7 +49,6 @@ BIND 8.2.2 Highlights
|
||||
New global options for "transfer-source" and "also-notify".
|
||||
$GENERATE now supports more record types, and options.
|
||||
|
||||
|
||||
BIND 8.2.1 Highlights
|
||||
|
||||
Bug fixes, especially to DNSSEC, TSIG, IXFR, and selective forwarding.
|
||||
@ -72,7 +73,6 @@ BIND 8.2 Highlights
|
||||
Documentation improvements
|
||||
Performance enhancements
|
||||
|
||||
|
||||
BIND 8.1.2 Highlights
|
||||
|
||||
Security fixes for a number of problems including:
|
||||
@ -133,7 +133,6 @@ BIND 8.1.2 Highlights
|
||||
Experimental -u (set user id), -g (set group id), and -t (chroot)
|
||||
command line options. See the INSTALL file for details.
|
||||
|
||||
|
||||
BIND 8 Features
|
||||
|
||||
-> DNS Dynamic Updates (RFC 2136)
|
||||
@ -155,7 +154,6 @@ BIND 8 Features
|
||||
|
||||
-> Many bug fixes
|
||||
|
||||
|
||||
File and Directory Overview
|
||||
|
||||
CHANGES history of added features and
|
||||
@ -196,7 +194,6 @@ Kits, Questions, Comments, and Bug Reports
|
||||
<URL:http://www.isc.org/bind.html> the BIND home page
|
||||
<URL:mailto:bind-bugs@isc.org> bug reports
|
||||
|
||||
|
||||
To Support the Effort
|
||||
|
||||
Note that BIND is supported by the Internet Software Consortium, and
|
||||
|
@ -1 +1 @@
|
||||
8.2.3-T6B
|
||||
8.2.3-REL
|
||||
|
@ -13,16 +13,16 @@
|
||||
## ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
## SOFTWARE.
|
||||
|
||||
# $Id: Makefile,v 8.28 2000/07/11 06:41:26 vixie Exp $
|
||||
# $Id: Makefile,v 8.30 2000/12/23 08:02:48 vixie Exp $
|
||||
|
||||
DESTDIR=
|
||||
CC= cc
|
||||
SHELL= /bin/sh
|
||||
|
||||
CDEBUG= -g
|
||||
CDEBUG= -g -Wall
|
||||
|
||||
#(net2 and its descendents)
|
||||
SYSTYPE = bsdos
|
||||
SYSTYPE = freebsd
|
||||
TOP = ..
|
||||
O=o
|
||||
A=a
|
||||
@ -67,11 +67,11 @@ SUBDIRS = addr nslookup dig dnsquery host named named-xfer ndc nsupdate \
|
||||
all: ${SUBDIRS}
|
||||
|
||||
${SUBDIRS}: FRC
|
||||
@(cd $@; pwd; ${MAKE} ${MARGS})
|
||||
@(cd $@; pwd; ${MAKE} ${MARGS}) || exit 1
|
||||
|
||||
install depend tags clean distclean::
|
||||
@for x in ${SUBDIRS}; do \
|
||||
(cd $$x; pwd; ${MAKE} ${MARGS} $@); \
|
||||
(cd $$x; pwd; ${MAKE} ${MARGS} $@) || exit 1; \
|
||||
done
|
||||
|
||||
distclean:: clean
|
||||
@ -85,7 +85,7 @@ links: FRC
|
||||
( mkdir $$x; cd $$x; pwd; ln -s ../SRC/$$x SRC; \
|
||||
cp SRC/Makefile Makefile; chmod +w Makefile; \
|
||||
$(MAKE) $(MARGS) links; \
|
||||
); \
|
||||
) || exit 1; \
|
||||
done
|
||||
|
||||
FRC:
|
||||
|
@ -13,16 +13,16 @@
|
||||
## ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
## SOFTWARE.
|
||||
|
||||
# $Id: Makefile,v 8.26 2000/07/11 06:41:27 vixie Exp $
|
||||
# $Id: Makefile,v 8.27 2000/12/23 08:02:49 vixie Exp $
|
||||
|
||||
DESTDIR=
|
||||
CC= cc
|
||||
SHELL= /bin/sh
|
||||
|
||||
CDEBUG= -g
|
||||
CDEBUG= -g -Wall
|
||||
|
||||
#(net2 and its descendents)
|
||||
SYSTYPE = bsdos
|
||||
SYSTYPE = freebsd
|
||||
TOP = ../..
|
||||
INCL = ${TOP}/include
|
||||
PORTINCL = ${TOP}/port/${SYSTYPE}/include
|
||||
|
@ -13,16 +13,16 @@
|
||||
## ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
## SOFTWARE.
|
||||
|
||||
# $Id: Makefile,v 8.26 2000/07/11 06:41:27 vixie Exp $
|
||||
# $Id: Makefile,v 8.27 2000/12/23 08:02:50 vixie Exp $
|
||||
|
||||
DESTDIR=
|
||||
CC= cc
|
||||
SHELL= /bin/sh
|
||||
|
||||
CDEBUG= -g
|
||||
CDEBUG= -g -Wall
|
||||
|
||||
#(net2 and its descendents)
|
||||
SYSTYPE = bsdos
|
||||
SYSTYPE = freebsd
|
||||
TOP = ../..
|
||||
INCL = ${TOP}/include
|
||||
PORTINCL = ${TOP}/port/${SYSTYPE}/include
|
||||
|
@ -1,5 +1,5 @@
|
||||
#ifndef lint
|
||||
static const char rcsid[] = "$Id: dig.c,v 8.42 2000/07/17 07:36:52 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: dig.c,v 8.44 2000/12/23 08:14:31 vixie Exp $";
|
||||
#endif
|
||||
|
||||
/*
|
||||
@ -201,7 +201,6 @@ static const char rcsid[] = "$Id: dig.c,v 8.42 2000/07/17 07:36:52 vixie Exp $";
|
||||
|
||||
static int eecode = 0;
|
||||
static FILE * qfp;
|
||||
static int sockFD;
|
||||
static char *defsrv, *srvmsg;
|
||||
static char defbuf[40] = "default -- ";
|
||||
static char srvbuf[60];
|
||||
@ -228,7 +227,7 @@ char *pager = NULL;
|
||||
/* Forward. */
|
||||
|
||||
static void Usage(void);
|
||||
static int SetOption(const char *);
|
||||
static int setopt(const char *);
|
||||
static void res_re_init(void);
|
||||
static int xstrtonum(char *);
|
||||
static int printZone(ns_type, const char *,
|
||||
@ -273,8 +272,7 @@ main(int argc, char **argv) {
|
||||
|
||||
char cmd[512];
|
||||
char domain[MAXDNAME];
|
||||
char msg[120], *msgptr;
|
||||
char **vtmp;
|
||||
char msg[120], **vtmp;
|
||||
char *args[DIG_MAXARGS];
|
||||
char **ax;
|
||||
int once = 1, dofile = 0; /* batch -vs- interactive control */
|
||||
@ -283,7 +281,6 @@ main(int argc, char **argv) {
|
||||
int wait=0, delay;
|
||||
int envset=0, envsave=0;
|
||||
struct __res_state res_x, res_t;
|
||||
char *pp;
|
||||
|
||||
ns_tsig_key key;
|
||||
char *keyfile = NULL, *keyname = NULL;
|
||||
@ -402,7 +399,7 @@ main(int argc, char **argv) {
|
||||
if (**argv == '%')
|
||||
continue;
|
||||
if (**argv == '+') {
|
||||
SetOption(*argv+1);
|
||||
setopt(*argv+1);
|
||||
continue;
|
||||
}
|
||||
if (**argv == '=') {
|
||||
@ -426,11 +423,16 @@ main(int argc, char **argv) {
|
||||
if (**argv == '-') {
|
||||
switch (argv[0][1]) {
|
||||
case 'T':
|
||||
wait = atoi(*++argv);
|
||||
if (*++argv == NULL)
|
||||
printf("; no arg for -T?\n");
|
||||
else
|
||||
wait = atoi(*argv);
|
||||
break;
|
||||
case 'c':
|
||||
if ((tmp = atoi(*++argv))
|
||||
|| *argv[0]=='0') {
|
||||
if(*++argv == NULL)
|
||||
printf("; no arg for -c?\n");
|
||||
else if ((tmp = atoi(*argv))
|
||||
|| *argv[0] == '0') {
|
||||
queryClass = tmp;
|
||||
} else if ((tmp = StringToClass(*argv,
|
||||
0, NULL)
|
||||
@ -443,7 +445,9 @@ main(int argc, char **argv) {
|
||||
}
|
||||
break;
|
||||
case 't':
|
||||
if ((tmp = atoi(*++argv))
|
||||
if (*++argv == NULL)
|
||||
printf("; no arg for -t?\n");
|
||||
else if ((tmp = atoi(*argv))
|
||||
|| *argv[0]=='0') {
|
||||
queryType = tmp;
|
||||
qtypeSet++;
|
||||
@ -456,17 +460,15 @@ main(int argc, char **argv) {
|
||||
printf(
|
||||
"; invalid type specified\n"
|
||||
);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'x':
|
||||
if (!qtypeSet) {
|
||||
queryType = T_ANY;
|
||||
qtypeSet++;
|
||||
}
|
||||
if (!(addrc = *++argv)) {
|
||||
printf(
|
||||
"; no arg for -x?\n"
|
||||
);
|
||||
if ((addrc = *++argv) == NULL) {
|
||||
printf("; no arg for -x?\n");
|
||||
break;
|
||||
}
|
||||
addrend = addrc + strlen(addrc);
|
||||
@ -484,8 +486,10 @@ main(int argc, char **argv) {
|
||||
case 'p':
|
||||
if (argv[0][2] != '\0')
|
||||
port = ntohs(atoi(argv[0]+2));
|
||||
else if (*++argv == NULL)
|
||||
printf("; no arg for -p?\n");
|
||||
else
|
||||
port = htons(atoi(*++argv));
|
||||
port = htons(atoi(*argv));
|
||||
break;
|
||||
case 'P':
|
||||
if (argv[0][2] != '\0')
|
||||
@ -496,16 +500,21 @@ main(int argc, char **argv) {
|
||||
case 'n':
|
||||
if (argv[0][2] != '\0')
|
||||
res.ndots = atoi(argv[0]+2);
|
||||
else if (*++argv == NULL)
|
||||
printf("; no arg for -n?\n");
|
||||
else
|
||||
res.ndots = atoi(*++argv);
|
||||
res.ndots = atoi(*argv);
|
||||
break;
|
||||
case 'b': {
|
||||
char *a, *p;
|
||||
|
||||
if (argv[0][2] != '\0')
|
||||
a = argv[0]+2;
|
||||
else
|
||||
a = *++argv;
|
||||
else if (*++argv == NULL) {
|
||||
printf("; no arg for -b?\n");
|
||||
break;
|
||||
} else
|
||||
a = *argv;
|
||||
if ((p = strchr(a, ':')) != NULL) {
|
||||
*p++ = '\0';
|
||||
myaddress.sin_port =
|
||||
@ -523,8 +532,11 @@ main(int argc, char **argv) {
|
||||
|
||||
if (argv[0][2] != '\0')
|
||||
keyfile = argv[0]+2;
|
||||
else
|
||||
keyfile = *++argv;
|
||||
else if (*++argv == NULL) {
|
||||
printf("; no arg for -k?\n");
|
||||
break;
|
||||
} else
|
||||
keyfile = *argv;
|
||||
|
||||
keyname = strchr(keyfile, ':');
|
||||
if (keyname == NULL) {
|
||||
@ -878,8 +890,6 @@ main(int argc, char **argv) {
|
||||
assert(end_time.tv_usec >= 0 && end_time.tv_usec < 1000000);
|
||||
|
||||
if (res.pfcode & RES_PRF_STATS) {
|
||||
time_t t;
|
||||
|
||||
query_time = difftv(start_time, end_time);
|
||||
printf(";; Total query time: ");
|
||||
prnttime(query_time);
|
||||
@ -954,13 +964,13 @@ 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.42 2000/07/17 07:36:52 vixie Exp $\n\
|
||||
$Id: dig.c,v 8.44 2000/12/23 08:14:31 vixie Exp $\n\
|
||||
", stderr);
|
||||
}
|
||||
|
||||
static int
|
||||
SetOption(const char *string) {
|
||||
char option[NAME_LEN], type[NAME_LEN], *ptr;
|
||||
setopt(const char *string) {
|
||||
char option[NAME_LEN], *ptr;
|
||||
int i;
|
||||
|
||||
i = pickString(string, option, sizeof option);
|
||||
@ -1184,12 +1194,11 @@ printZone(ns_type xfr, const char *zone, const struct sockaddr_in *sin,
|
||||
static int answerLen = 0;
|
||||
|
||||
querybuf buf;
|
||||
HEADER *headerPtr;
|
||||
int msglen, amtToRead, numRead, result = 0, sockFD, len;
|
||||
int count, type, class, rlen, done, n;
|
||||
int numAnswers = 0, numRecords = 0, soacnt = 0;
|
||||
u_char *cp, tmp[NS_INT16SZ];
|
||||
char dname[2][NS_MAXDNAME], file[NAME_LEN];
|
||||
char dname[2][NS_MAXDNAME];
|
||||
enum { NO_ERRORS, ERR_READING_LEN, ERR_READING_MSG, ERR_PRINTING }
|
||||
error = NO_ERRORS;
|
||||
pid_t zpid;
|
||||
@ -1527,7 +1536,7 @@ printZone(ns_type xfr, const char *zone, const struct sockaddr_in *sin,
|
||||
return (ERROR);
|
||||
}
|
||||
printf(";; pid %lu: exit %d, signal %d, core %c\n",
|
||||
pid, WEXITSTATUS(status),
|
||||
(u_long)pid, WEXITSTATUS(status),
|
||||
WIFSIGNALED(status) ? WTERMSIG(status) : 0,
|
||||
WCOREDUMP(status) ? 't' : 'f');
|
||||
}
|
||||
|
@ -13,16 +13,16 @@
|
||||
## ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
## SOFTWARE.
|
||||
|
||||
# $Id: Makefile,v 1.6 2000/07/11 06:41:28 vixie Exp $
|
||||
# $Id: Makefile,v 1.7 2000/12/23 08:02:50 vixie Exp $
|
||||
|
||||
DESTDIR=
|
||||
CC= cc
|
||||
SHELL= /bin/sh
|
||||
|
||||
CDEBUG= -g
|
||||
CDEBUG= -g -Wall
|
||||
|
||||
#(net2 and its descendents)
|
||||
SYSTYPE = bsdos
|
||||
SYSTYPE = freebsd
|
||||
TOP = ../..
|
||||
INCL = ${TOP}/include
|
||||
PORTINCL = ${TOP}/port/${SYSTYPE}/include
|
||||
|
@ -1,5 +1,5 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static const char rcsid[] = "$Id: dnskeygen.c,v 1.9 1999/10/13 16:38:59 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: dnskeygen.c,v 1.11 2000/12/23 08:14:31 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -50,9 +50,8 @@ main(int argc, char **argv) {
|
||||
int size = -1, exp = 0;
|
||||
int no_auth = 0, no_conf = 0;
|
||||
int sign_val = 0, flags = 0, protocol = -1;
|
||||
int i, err = 0, n;
|
||||
int i, err = 0;
|
||||
extern char *optarg;
|
||||
char array[1024];
|
||||
|
||||
dst_init();
|
||||
if ((prog = strrchr(argv[0],'/')) == NULL)
|
||||
@ -216,6 +215,8 @@ main(int argc, char **argv) {
|
||||
}
|
||||
else if (size < 0)
|
||||
usage("No size specified", 0);
|
||||
else /* size == 0 */
|
||||
sign_val = 0;
|
||||
|
||||
if (err)
|
||||
usage("errors encountered/unknown flag", 1);
|
||||
|
@ -13,16 +13,16 @@
|
||||
## ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
## SOFTWARE.
|
||||
|
||||
# $Id: Makefile,v 8.25 2000/07/11 06:41:29 vixie Exp $
|
||||
# $Id: Makefile,v 8.26 2000/12/23 08:02:51 vixie Exp $
|
||||
|
||||
DESTDIR=
|
||||
CC= cc
|
||||
SHELL= /bin/sh
|
||||
|
||||
CDEBUG= -g
|
||||
CDEBUG= -g -Wall
|
||||
|
||||
#(net2 and its descendents)
|
||||
SYSTYPE = bsdos
|
||||
SYSTYPE = freebsd
|
||||
TOP = ../..
|
||||
INCL = ${TOP}/include
|
||||
PORTINCL = ${TOP}/port/${SYSTYPE}/include
|
||||
|
@ -1,5 +1,5 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static const char rcsid[] = "$Id: dnsquery.c,v 8.13 1999/10/13 16:38:59 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: dnsquery.c,v 8.15 2000/12/23 08:14:32 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -55,7 +55,6 @@ main(int argc, char *argv[]) {
|
||||
struct hostent *q_nsname;
|
||||
extern int optind, opterr;
|
||||
extern char *optarg;
|
||||
HEADER *hp;
|
||||
int stream = 0, debug = 0;
|
||||
|
||||
/* set defaults */
|
||||
@ -80,7 +79,12 @@ main(int argc, char *argv[]) {
|
||||
case 'p' : res.retrans = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'h' : strcpy(name, optarg);
|
||||
case 'h' : if (strlen(optarg) >= sizeof(name)) {
|
||||
fprintf(stderr,
|
||||
"Domain name too long (%s)\n", optarg);
|
||||
exit(-1);
|
||||
} else
|
||||
strcpy(name, optarg);
|
||||
break;
|
||||
|
||||
case 'c' : {
|
||||
@ -157,8 +161,15 @@ main(int argc, char *argv[]) {
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
if (optind < argc)
|
||||
strcpy(name, argv[optind]);
|
||||
if (optind < argc) {
|
||||
if (strlen(argv[optind]) >= sizeof(name)) {
|
||||
fprintf(stderr,
|
||||
"Domain name too long (%s)\n", argv[optind]);
|
||||
exit(-1);
|
||||
} else {
|
||||
strcpy(name, argv[optind]);
|
||||
}
|
||||
}
|
||||
|
||||
len = sizeof(answer);
|
||||
|
||||
|
@ -13,16 +13,16 @@
|
||||
## ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
## SOFTWARE.
|
||||
|
||||
# $Id: Makefile,v 8.25 2000/07/11 06:41:29 vixie Exp $
|
||||
# $Id: Makefile,v 8.26 2000/12/23 08:02:51 vixie Exp $
|
||||
|
||||
DESTDIR=
|
||||
CC= cc
|
||||
SHELL= /bin/sh
|
||||
|
||||
CDEBUG= -g
|
||||
CDEBUG= -g -Wall
|
||||
|
||||
#(net2 and its descendents)
|
||||
SYSTYPE = bsdos
|
||||
SYSTYPE = freebsd
|
||||
TOP = ../..
|
||||
INCL = ${TOP}/include
|
||||
PORTINCL = ${TOP}/port/${SYSTYPE}/include
|
||||
|
@ -1,5 +1,5 @@
|
||||
#ifndef lint
|
||||
static const char rcsid[] = "$Id: host.c,v 8.37 2000/07/11 07:06:14 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: host.c,v 8.42 2000/12/23 08:14:32 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -126,6 +126,9 @@ static const char copyright[] =
|
||||
#define SUCCESS 0
|
||||
#define TIME_OUT -1
|
||||
#define NO_INFO -2
|
||||
#ifdef ERROR
|
||||
#undef ERROR
|
||||
#endif
|
||||
#define ERROR -3
|
||||
#define NONAUTH -4
|
||||
|
||||
@ -166,12 +169,13 @@ static u_char hostbuf[NS_MAXDNAME];
|
||||
static int sockFD;
|
||||
static FILE *filePtr;
|
||||
|
||||
static struct __res_state res, orig;
|
||||
static struct __res_state res;
|
||||
static char *cname = NULL;
|
||||
static const char *progname = "amnesia";
|
||||
static int getclass = ns_c_in, verbose = 0, list = 0;
|
||||
static int server_specified = 0;
|
||||
static int gettype = 0;
|
||||
static int querytype = 0;
|
||||
static char getdomain[NS_MAXDNAME];
|
||||
|
||||
/* Forward. */
|
||||
@ -221,9 +225,9 @@ main(int argc, char **argv) {
|
||||
struct in_addr addr;
|
||||
struct hostent *hp;
|
||||
char *s;
|
||||
int inverse = 0, waitmode = 0;
|
||||
int waitmode = 0;
|
||||
int ncnames, ch;
|
||||
int nkeychains, i;
|
||||
int nkeychains;
|
||||
|
||||
dst_init();
|
||||
|
||||
@ -237,7 +241,7 @@ main(int argc, char **argv) {
|
||||
switch (ch) {
|
||||
case 'a':
|
||||
verbose = 1;
|
||||
gettype = ns_t_any;
|
||||
querytype = ns_t_any;
|
||||
break;
|
||||
case 'c':
|
||||
getclass = parseclass(optarg);
|
||||
@ -255,7 +259,7 @@ main(int argc, char **argv) {
|
||||
sigchase = 1;
|
||||
break;
|
||||
case 't':
|
||||
gettype = parsetype(optarg);
|
||||
querytype = parsetype(optarg);
|
||||
break;
|
||||
case 'v':
|
||||
verbose = 1;
|
||||
@ -270,10 +274,10 @@ main(int argc, char **argv) {
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
}
|
||||
if ((gettype == 0) && (sigchase)) {
|
||||
if ((querytype == 0) && (sigchase)) {
|
||||
if (verbose)
|
||||
printf ("Forcing `-t a' for signature trace.\n");
|
||||
gettype = ns_t_a;
|
||||
querytype = ns_t_a;
|
||||
}
|
||||
argc -= optind;
|
||||
argv += optind;
|
||||
@ -320,7 +324,7 @@ main(int argc, char **argv) {
|
||||
res.options &= ~RES_DEFNAMES;
|
||||
|
||||
if (list)
|
||||
exit(ListHosts(getdomain, gettype ? gettype : ns_t_a));
|
||||
exit(ListHosts(getdomain, querytype ? querytype : ns_t_a));
|
||||
ncnames = 5; nkeychains = 18;
|
||||
while (hp == NULL && res.res_h_errno == TRY_AGAIN) {
|
||||
if (addr.s_addr == INADDR_NONE) {
|
||||
@ -336,18 +340,17 @@ main(int argc, char **argv) {
|
||||
/* start new query, for KEY */
|
||||
strcpy (getdomain, chase_signer);
|
||||
strcat (getdomain, ".");
|
||||
gettype = ns_t_key;
|
||||
querytype = ns_t_key;
|
||||
} else if (!(chase_step & SD_BADSIG)) {
|
||||
/* start new query, for SIG */
|
||||
strcpy (getdomain, chase_domain);
|
||||
strcat (getdomain, ".");
|
||||
gettype = ns_t_sig;
|
||||
querytype = ns_t_sig;
|
||||
} else if (hp && !(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",
|
||||
chase_step & SD_SIG ? chase_signer : chase_domain,
|
||||
chase_domain,
|
||||
chase_lastgoodkey ? chase_lastgoodkey : "None");
|
||||
}
|
||||
}
|
||||
@ -536,7 +539,7 @@ gethostinfo(char *name) {
|
||||
char *cp, **domain;
|
||||
char tmp[NS_MAXDNAME];
|
||||
const char *tp;
|
||||
int hp, nDomain;
|
||||
int hp;
|
||||
int asis = 0;
|
||||
u_int n;
|
||||
|
||||
@ -587,8 +590,8 @@ static int
|
||||
getdomaininfo(const char *name, const char *domain) {
|
||||
int val1, val2;
|
||||
|
||||
if (gettype)
|
||||
return (getinfo(name, domain, gettype));
|
||||
if (querytype)
|
||||
return (getinfo(name, domain, gettype=querytype));
|
||||
else {
|
||||
val1 = getinfo(name, domain, gettype=ns_t_a);
|
||||
if (cname || verbose)
|
||||
@ -600,11 +603,9 @@ getdomaininfo(const char *name, const char *domain) {
|
||||
|
||||
static int
|
||||
getinfo(const char *name, const char *domain, int type) {
|
||||
HEADER *hp;
|
||||
u_char *eom, *bp, *cp;
|
||||
u_char *eom;
|
||||
querybuf buf, answer;
|
||||
int n, n1, i, j, nmx, ancount, nscount, arcount, qdcount, buflen;
|
||||
u_short pref, class;
|
||||
int n;
|
||||
char host[NS_MAXDNAME];
|
||||
|
||||
if (domain == NULL)
|
||||
@ -634,8 +635,7 @@ getinfo(const char *name, const char *domain, int type) {
|
||||
|
||||
static int
|
||||
printinfo(const querybuf *answer, const u_char *eom, int filter, int isls) {
|
||||
int n, n1, i, j, nmx, ancount, nscount, arcount, qdcount, buflen, savesigchase;
|
||||
u_short pref, class;
|
||||
int n, nmx, ancount, nscount, arcount, qdcount, buflen, savesigchase;
|
||||
const u_char *bp, *cp;
|
||||
const HEADER *hp;
|
||||
|
||||
@ -696,8 +696,18 @@ printinfo(const querybuf *answer, const u_char *eom, int filter, int isls) {
|
||||
if (!hp->ad)
|
||||
if (verbose && isls == 0)
|
||||
printf("The following answer is not verified as authentic by the server:\n");
|
||||
while (--ancount >= 0 && cp && cp < eom)
|
||||
while (--ancount >= 0 && cp && cp < eom) {
|
||||
cp = pr_rr(cp, answer->qb2, stdout, filter);
|
||||
/*
|
||||
* When we ask for address and there is a CNAME, it
|
||||
* seems to return both the CNAME and the address.
|
||||
* Since we trace down the CNAME chain ourselves, we
|
||||
* don't really want to print the address at this
|
||||
* point.
|
||||
*/
|
||||
if (cname && ! verbose)
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
if (!verbose)
|
||||
return (1);
|
||||
@ -967,24 +977,24 @@ pr_rr(const u_char *cp, const u_char *msg, FILE *file, int filter) {
|
||||
}
|
||||
|
||||
if (doprint)
|
||||
fprintf(file, "(\n\t\t\t%ld\t;serial (version)",
|
||||
fprintf(file, "(\n\t\t\t%lu\t;serial (version)",
|
||||
ns_get32(cp));
|
||||
cp += INT32SZ;
|
||||
if (doprint)
|
||||
fprintf(file, "\n\t\t\t%ld\t;refresh period",
|
||||
fprintf(file, "\n\t\t\t%lu\t;refresh period",
|
||||
ns_get32(cp));
|
||||
cp += INT32SZ;
|
||||
if (doprint)
|
||||
fprintf(file,
|
||||
"\n\t\t\t%ld\t;retry refresh this often",
|
||||
"\n\t\t\t%lu\t;retry refresh this often",
|
||||
ns_get32(cp));
|
||||
cp += INT32SZ;
|
||||
if (doprint)
|
||||
fprintf(file, "\n\t\t\t%ld\t;expiration period",
|
||||
fprintf(file, "\n\t\t\t%lu\t;expiration period",
|
||||
ns_get32(cp));
|
||||
cp += INT32SZ;
|
||||
if (doprint)
|
||||
fprintf(file, "\n\t\t\t%ld\t;minimum TTL\n\t\t\t)",
|
||||
fprintf(file, "\n\t\t\t%lu\t;minimum TTL\n\t\t\t)",
|
||||
ns_get32(cp));
|
||||
cp += INT32SZ;
|
||||
break;
|
||||
@ -1235,15 +1245,15 @@ pr_rr(const u_char *cp, const u_char *msg, FILE *file, int filter) {
|
||||
/* original ttl */
|
||||
origttl = cp;
|
||||
if (doprint && verbose)
|
||||
fprintf(file, " %d", ns_get32(cp));
|
||||
fprintf(file, " %ld", ns_get32(cp));
|
||||
cp += INT32SZ;
|
||||
/* signature expiration */
|
||||
if (doprint && verbose)
|
||||
fprintf(file, " %d", ns_get32(cp));
|
||||
fprintf(file, " %ld", ns_get32(cp));
|
||||
cp += INT32SZ;
|
||||
/* time signed */
|
||||
if (doprint && verbose)
|
||||
fprintf(file, " %d", ns_get32(cp));
|
||||
fprintf(file, " %ld", ns_get32(cp));
|
||||
cp += INT32SZ;
|
||||
/* key footprint */
|
||||
if (doprint && verbose)
|
||||
@ -1265,7 +1275,7 @@ pr_rr(const u_char *cp, const u_char *msg, FILE *file, int filter) {
|
||||
|
||||
if (sigchase && !(chase_step & SD_SIG) &&
|
||||
strcmp (chase_domain, thisdomain) == 0 &&
|
||||
chase_class == class & chase_type == tc)
|
||||
chase_class == class && chase_type == tc)
|
||||
{
|
||||
u_char cdname[NS_MAXCDNAME];
|
||||
|
||||
@ -1336,7 +1346,7 @@ pr_rr(const u_char *cp, const u_char *msg, FILE *file, int filter) {
|
||||
|
||||
if (sigchase && (chase_step & (SD_SIG|SD_RR)) &&
|
||||
strcmp (getdomain, name) == 0 &&
|
||||
getclass == class & gettype == type)
|
||||
getclass == class && gettype == type)
|
||||
{
|
||||
DST_KEY *dstkey;
|
||||
int rc, len, i, j;
|
||||
@ -1452,7 +1462,7 @@ pr_rr(const u_char *cp, const u_char *msg, FILE *file, int filter) {
|
||||
u_char cdname[NS_MAXCDNAME];
|
||||
|
||||
if (doprint && !verbose)
|
||||
fprintf (file, " (chasing signature)", sigchase-1);
|
||||
fprintf(file, " (chasing signature)");
|
||||
|
||||
/* unpack rr */
|
||||
|
||||
@ -1566,6 +1576,7 @@ ListHosts(char *namePtr, int queryType) {
|
||||
int nshaveaddr[NUMNS];
|
||||
struct in_addr nsipaddr[NUMNSADDR];
|
||||
int numns, numnsaddr, thisns;
|
||||
int qdcount, ancount;
|
||||
|
||||
/*
|
||||
* Normalize to not have trailing dot. We do string compares below
|
||||
@ -1638,7 +1649,8 @@ ListHosts(char *namePtr, int queryType) {
|
||||
|
||||
cp = answer.qb2 + HFIXEDSZ;
|
||||
eom = answer.qb2 + msglen;
|
||||
if (ntohs(answer.qb1.qdcount) > 0) {
|
||||
qdcount = ntohs(answer.qb1.qdcount);
|
||||
while (qdcount-- > 0) {
|
||||
n = dn_skipname(cp, eom);
|
||||
if (n < 0) {
|
||||
printf("Form error.\n");
|
||||
@ -1876,35 +1888,60 @@ ListHosts(char *namePtr, int queryType) {
|
||||
}
|
||||
numAnswers++;
|
||||
cp = buf.qb2 + HFIXEDSZ;
|
||||
if (ntohs(buf.qb1.qdcount) > 0) {
|
||||
qdcount = ntohs(buf.qb1.qdcount);
|
||||
while (qdcount-- > 0) {
|
||||
n = dn_skipname(cp, buf.qb2 + len);
|
||||
if (n < 0) {
|
||||
if (n <= 0) {
|
||||
error = ERR_PRINTING;
|
||||
break;
|
||||
}
|
||||
if (cp + n + QFIXEDSZ > buf.qb2 + len) {
|
||||
error = ERR_PRINTING;
|
||||
break;
|
||||
}
|
||||
cp += n + QFIXEDSZ;
|
||||
}
|
||||
nmp = cp;
|
||||
n = dn_skipname(cp, buf.qb2 + len);
|
||||
if (n < 0) {
|
||||
error = ERR_PRINTING;
|
||||
ancount = ntohs(buf.qb1.ancount);
|
||||
while (ancount-- > 0) {
|
||||
nmp = cp;
|
||||
n = dn_skipname(cp, buf.qb2 + len);
|
||||
if (n <= 0) {
|
||||
error = ERR_PRINTING;
|
||||
break;
|
||||
}
|
||||
cp += n;
|
||||
if (cp + INT16SZ > buf.qb2 + len) {
|
||||
error = ERR_PRINTING;
|
||||
break;
|
||||
}
|
||||
type = ns_get16(cp);
|
||||
cp += INT16SZ;
|
||||
if (type == ns_t_soa) {
|
||||
(void) dn_expand(buf.qb2, buf.qb2 + len, nmp,
|
||||
dname[soacnt], sizeof dname[0]);
|
||||
if (soacnt) {
|
||||
if (ns_samename(dname[0], dname[1]) == 1)
|
||||
goto done;
|
||||
} else
|
||||
soacnt++;
|
||||
}
|
||||
if (cp + INT16SZ*2 + INT32SZ > buf.qb2 + len) {
|
||||
error = ERR_PRINTING;
|
||||
break;
|
||||
}
|
||||
cp += INT32SZ + INT16SZ;
|
||||
dlen = ns_get16(cp);
|
||||
cp += INT16SZ;
|
||||
if (cp + dlen > buf.qb2 + len) {
|
||||
error = ERR_PRINTING;
|
||||
break;
|
||||
}
|
||||
cp += dlen;
|
||||
}
|
||||
if (error != NO_ERRORS)
|
||||
break;
|
||||
}
|
||||
cp += n;
|
||||
if (cp + INT16SZ > buf.qb2 + len) {
|
||||
error = ERR_PRINTING;
|
||||
break;
|
||||
}
|
||||
if ((ns_get16(cp) == ns_t_soa)) {
|
||||
(void) dn_expand(buf.qb2, buf.qb2 + len, nmp,
|
||||
dname[soacnt], sizeof dname[0]);
|
||||
if (soacnt) {
|
||||
if (ns_samename(dname[0], dname[1]) == 1)
|
||||
break;
|
||||
} else
|
||||
soacnt++;
|
||||
}
|
||||
}
|
||||
done:
|
||||
|
||||
(void) close(sockFD);
|
||||
sockFD = -1;
|
||||
|
@ -13,16 +13,16 @@
|
||||
## ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
## SOFTWARE.
|
||||
|
||||
# $Id: Makefile,v 1.6 2000/07/17 07:15:08 vixie Exp $
|
||||
# $Id: Makefile,v 1.7 2000/12/23 08:02:52 vixie Exp $
|
||||
|
||||
DESTDIR=
|
||||
CC= cc
|
||||
SHELL= /bin/sh
|
||||
|
||||
CDEBUG= -g
|
||||
CDEBUG= -g -Wall
|
||||
|
||||
#(net2 and its descendents)
|
||||
SYSTYPE = bsdos
|
||||
SYSTYPE = freebsd
|
||||
TOP = ../..
|
||||
INCL = ${TOP}/include
|
||||
PORTINCL = ${TOP}/port/${SYSTYPE}/include
|
||||
|
@ -37,7 +37,7 @@ seem to be so for getnetbyaddr
|
||||
#endif
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char rcsid[] = "$Id: irpd.c,v 1.8 2000/02/04 08:28:27 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: irpd.c,v 1.10 2000/12/23 08:14:33 vixie Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
/* Imports. */
|
||||
@ -144,7 +144,6 @@ static struct response_buff *newbuffer(u_int length);
|
||||
static void release_buffer(struct response_buff *b);
|
||||
static struct arg_s *split_string(const char *string);
|
||||
static void free_args(struct arg_s *args);
|
||||
static int is_all_digits(char *p);
|
||||
static struct client_ctx *make_cli_ctx(void);
|
||||
static struct net_data *get_net_data(struct ctl_sess *sess);
|
||||
|
||||
@ -248,8 +247,6 @@ static void irpd_abort(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
const struct ctl_verb *verb, const char *rest,
|
||||
u_int respflags, void *respctx, void *uctx);
|
||||
|
||||
static void irpd_done(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
void *param);
|
||||
static void response_done(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
void *uap);
|
||||
static void logger(enum ctl_severity, const char *fmt, ...);
|
||||
@ -333,7 +330,6 @@ main(int argc, char **argv) {
|
||||
struct sockaddr_un uaddr;
|
||||
#endif
|
||||
struct sockaddr_in iaddr;
|
||||
log_channel chan;
|
||||
short port = IRPD_PORT;
|
||||
char *prog = argv[0];
|
||||
char *sockname = IRPD_PATH;
|
||||
@ -344,7 +340,7 @@ main(int argc, char **argv) {
|
||||
addr = (struct sockaddr *)&iaddr;
|
||||
socksize = sizeof iaddr;
|
||||
|
||||
openlog("iprd", LOG_CONS|LOG_PID, LOG_DAEMON);
|
||||
openlog("iprd", LOG_CONS|LOG_PID, ISC_FACILITY);
|
||||
while ((ch = getopt(argc, argv, "u:p:c:")) != -1) {
|
||||
switch(ch) {
|
||||
case 'c':
|
||||
@ -448,7 +444,6 @@ send_hostent(struct ctl_sess *sess, struct hostent *ho) {
|
||||
if (ho == NULL)
|
||||
simple_response(sess, IRPD_GETHOST_NONE, "No such host");
|
||||
else {
|
||||
size_t need;
|
||||
struct response_buff *b = newbuffer(0);
|
||||
|
||||
if (irp_marshall_ho(ho, &b->buff, &b->bufflen) != 0) {
|
||||
@ -500,7 +495,6 @@ irpd_gethostbyname(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
{
|
||||
char hname[MAXHOSTNAMELEN];
|
||||
struct arg_s *args;
|
||||
int i;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
@ -539,7 +533,6 @@ irpd_gethostbyname2(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
{
|
||||
char hname[MAXHOSTNAMELEN];
|
||||
struct arg_s *args;
|
||||
int i;
|
||||
int af;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
@ -591,7 +584,6 @@ irpd_gethostbyaddr(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
char haddr[MAXHOSTNAMELEN];
|
||||
char tmpaddr[NS_IN6ADDRSZ];
|
||||
struct arg_s *args;
|
||||
int i;
|
||||
int af;
|
||||
int addrlen;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
@ -657,9 +649,6 @@ irpd_gethostent(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
u_int respflags, void *respctx, void *uctx)
|
||||
{
|
||||
struct hostent *ho;
|
||||
size_t need;
|
||||
size_t need_total = 0;
|
||||
struct response_buff *b;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
@ -683,10 +672,6 @@ irpd_sethostent(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
const struct ctl_verb *verb, const char *rest,
|
||||
u_int respflags, void *respctx, void *uctx)
|
||||
{
|
||||
struct hostent *ho;
|
||||
size_t need;
|
||||
size_t need_total = 0;
|
||||
struct response_buff *b;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
@ -742,8 +727,6 @@ irpd_getpwnam(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
struct arg_s *args;
|
||||
struct passwd *pw;
|
||||
char username[64];
|
||||
struct response_buff *b;
|
||||
size_t need;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
@ -786,8 +769,6 @@ irpd_getpwuid(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
struct arg_s *args;
|
||||
struct passwd *pw;
|
||||
char userid[64];
|
||||
struct response_buff *b;
|
||||
size_t need;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
@ -847,9 +828,6 @@ irpd_getpwent(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
u_int respflags, void *respctx, void *uctx)
|
||||
{
|
||||
struct passwd *pw;
|
||||
size_t need;
|
||||
size_t need_total = 0;
|
||||
struct response_buff *b;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
@ -872,10 +850,6 @@ irpd_setpwent(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
const struct ctl_verb *verb, const char *rest,
|
||||
u_int respflags, void *respctx, void *uctx)
|
||||
{
|
||||
struct passwd *pw;
|
||||
size_t need;
|
||||
size_t need_total = 0;
|
||||
struct response_buff *b;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
@ -915,34 +889,6 @@ send_nwent(struct ctl_sess *sess, struct nwent *nw) {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* static void
|
||||
* send_netent(struct ctl_sess *sess, struct netent *ne);
|
||||
* Sends a NETENT structure over the wire, or "No such
|
||||
* Network" error if NE is NULL.
|
||||
*/
|
||||
static void
|
||||
send_netent(struct ctl_sess *sess, struct netent *ne) {
|
||||
if (ne == NULL) {
|
||||
simple_response(sess, IRPD_GETNET_NONE, "No such net");
|
||||
} else {
|
||||
struct response_buff *b = newbuffer(0);
|
||||
|
||||
if (irp_marshall_ne(ne, &b->buff,
|
||||
&b->bufflen) != 0) {
|
||||
simple_response(sess, IRPD_GETNET_ERROR,
|
||||
"Internal error");
|
||||
logger(ctl_warning, "Cant marshall ne\n");
|
||||
return;
|
||||
}
|
||||
|
||||
strcat(b->buff, "\r\n");
|
||||
|
||||
ctl_response(sess, IRPD_GETNET_OK, "Network found", 0, 0,
|
||||
response_done, b, b->buff, strlen(b->buff));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* static void
|
||||
* irpd_getnetbyname(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
@ -959,8 +905,6 @@ irpd_getnetbyname(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
struct netent *ne;
|
||||
struct nwent *nw;
|
||||
char netname[MAXNETNAMELEN];
|
||||
struct response_buff *b;
|
||||
size_t need;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
@ -1015,7 +959,6 @@ irpd_getnetbyaddr(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
char haddr[MAXHOSTNAMELEN];
|
||||
long tmpaddr;
|
||||
struct arg_s *args;
|
||||
int i;
|
||||
int af;
|
||||
int addrlen;
|
||||
int bits;
|
||||
@ -1105,9 +1048,6 @@ irpd_getnetent(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
{
|
||||
struct netent *ne;
|
||||
struct nwent *nw;
|
||||
size_t need;
|
||||
size_t need_total = 0;
|
||||
struct response_buff *b;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
@ -1136,11 +1076,6 @@ irpd_setnetent(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
const struct ctl_verb *verb, const char *rest,
|
||||
u_int respflags, void *respctx, void *uctx)
|
||||
{
|
||||
struct netent *ne;
|
||||
struct nwent *nw;
|
||||
size_t need;
|
||||
size_t need_total = 0;
|
||||
struct response_buff *b;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
@ -1195,8 +1130,6 @@ irpd_getgrnam(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
struct arg_s *args;
|
||||
struct group *gr;
|
||||
char groupname[64];
|
||||
struct response_buff *b;
|
||||
size_t need;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
@ -1239,8 +1172,6 @@ irpd_getgrgid(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
struct arg_s *args;
|
||||
struct group *gr;
|
||||
char groupid[64];
|
||||
struct response_buff *b;
|
||||
size_t need;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
@ -1300,9 +1231,6 @@ irpd_getgrent(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
u_int respflags, void *respctx, void *uctx)
|
||||
{
|
||||
struct group *gr;
|
||||
size_t need;
|
||||
size_t need_total = 0;
|
||||
struct response_buff *b;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
@ -1325,10 +1253,6 @@ irpd_setgrent(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
const struct ctl_verb *verb, const char *rest,
|
||||
u_int respflags, void *respctx, void *uctx)
|
||||
{
|
||||
struct group *gr;
|
||||
size_t need;
|
||||
size_t need_total = 0;
|
||||
struct response_buff *b;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
@ -1372,8 +1296,6 @@ irpd_getservbyname(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
struct servent *serv;
|
||||
char servicename[64];
|
||||
char protoname[10];
|
||||
struct response_buff *b;
|
||||
size_t need;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
@ -1425,8 +1347,6 @@ irpd_getservbyport(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
struct servent *sv;
|
||||
char portnum[64];
|
||||
char protoname[10];
|
||||
struct response_buff *b;
|
||||
size_t need;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
@ -1494,9 +1414,6 @@ irpd_getservent(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
u_int respflags, void *respctx, void *uctx)
|
||||
{
|
||||
struct servent *sv;
|
||||
size_t need;
|
||||
size_t need_total = 0;
|
||||
struct response_buff *b;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
@ -1519,10 +1436,6 @@ irpd_setservent(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
const struct ctl_verb *verb, const char *rest,
|
||||
u_int respflags, void *respctx, void *uctx)
|
||||
{
|
||||
struct servent *sv;
|
||||
size_t need;
|
||||
size_t need_total = 0;
|
||||
struct response_buff *b;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
@ -1577,8 +1490,6 @@ irpd_getprotobyname(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
struct arg_s *args;
|
||||
struct protoent *pr;
|
||||
char protoname[64];
|
||||
struct response_buff *b;
|
||||
size_t need;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
@ -1621,8 +1532,6 @@ irpd_getprotobynumber(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
struct arg_s *args;
|
||||
struct protoent *pr;
|
||||
char protonum[64];
|
||||
struct response_buff *b;
|
||||
size_t need;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
@ -1682,9 +1591,6 @@ irpd_getprotoent(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
u_int respflags, void *respctx, void *uctx)
|
||||
{
|
||||
struct protoent *pr;
|
||||
size_t need;
|
||||
size_t need_total = 0;
|
||||
struct response_buff *b;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
@ -1707,10 +1613,6 @@ irpd_setprotoent(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
const struct ctl_verb *verb, const char *rest,
|
||||
u_int respflags, void *respctx, void *uctx)
|
||||
{
|
||||
struct protoent *pr;
|
||||
size_t need;
|
||||
size_t need_total = 0;
|
||||
struct response_buff *b;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
@ -1757,9 +1659,6 @@ irpd_getnetgrent(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
const struct ctl_verb *verb, const char *rest,
|
||||
u_int respflags, void *respctx, void *uctx)
|
||||
{
|
||||
char netgroupname[64];
|
||||
struct response_buff *b = NULL;
|
||||
size_t need;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
@ -1794,8 +1693,6 @@ irpd_innetgr(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
u_int respflags, void *respctx, void *uctx)
|
||||
{
|
||||
struct arg_s *args;
|
||||
struct response_buff *b;
|
||||
size_t need;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
char *host;
|
||||
char *user;
|
||||
@ -1837,7 +1734,6 @@ irpd_innetgr(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
memput(ngtmp, args->iov[1].iov_len + 1);
|
||||
}
|
||||
|
||||
untimely:
|
||||
free_args(args);
|
||||
}
|
||||
|
||||
@ -1870,7 +1766,6 @@ irpd_setnetgrent(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
"setnetgrent ok");
|
||||
}
|
||||
|
||||
untimely:
|
||||
free_args(args);
|
||||
}
|
||||
|
||||
@ -1886,7 +1781,6 @@ irpd_endnetgrent(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
const struct ctl_verb *verb, const char *rest,
|
||||
u_int respflags, void *respctx, void *uctx)
|
||||
{
|
||||
struct arg_s *args;
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
@ -1903,20 +1797,6 @@ irpd_endnetgrent(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* static void
|
||||
* irpd_done(struct ctl_sctx *ctx, struct ctl_sess *sess, void *param)
|
||||
* Callback for when QUIT respnse is sent out.
|
||||
*/
|
||||
static void
|
||||
irpd_done(struct ctl_sctx *ctx, struct ctl_sess *sess, void *param) {
|
||||
struct net_data *netdata = get_net_data(sess);
|
||||
|
||||
INSIST(netdata != NULL);
|
||||
|
||||
net_data_destroy(netdata);
|
||||
}
|
||||
|
||||
/*
|
||||
* static void
|
||||
* irpd_quit(struct ctl_sctx *ctx, struct ctl_sess *sess,
|
||||
@ -2239,15 +2119,6 @@ make_cli_ctx(void) {
|
||||
return (p);
|
||||
}
|
||||
|
||||
static void
|
||||
release_cli_ctx(struct client_ctx *ctx) {
|
||||
INSIST(ctx != NULL);
|
||||
INSIST(ctx->net_data != NULL);
|
||||
|
||||
net_data_destroy(ctx->net_data);
|
||||
memput(ctx, sizeof *ctx);
|
||||
}
|
||||
|
||||
static struct net_data *
|
||||
get_net_data(struct ctl_sess *sess) {
|
||||
struct client_ctx *ctx = ctl_getcsctx(sess);
|
||||
|
@ -13,16 +13,16 @@
|
||||
## ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
## SOFTWARE.
|
||||
|
||||
# $Id: Makefile,v 1.7 2000/07/11 06:41:30 vixie Exp $
|
||||
# $Id: Makefile,v 1.8 2000/12/23 08:02:52 vixie Exp $
|
||||
|
||||
DESTDIR=
|
||||
CC= cc
|
||||
SHELL= /bin/sh
|
||||
|
||||
CDEBUG= -g
|
||||
CDEBUG= -g -Wall
|
||||
|
||||
#(net2 and its descendents)
|
||||
SYSTYPE = bsdos
|
||||
SYSTYPE = freebsd
|
||||
TOP = ../..
|
||||
INCL = ${TOP}/include
|
||||
PORTINCL = ${TOP}/port/${SYSTYPE}/include
|
||||
|
@ -1,5 +1,5 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static const char rcsid[] = "$Id: mkservdb.c,v 1.6 1999/10/13 16:39:00 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: mkservdb.c,v 1.9 2001/01/26 06:54:11 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -29,6 +29,7 @@ static const char rcsid[] = "$Id: mkservdb.c,v 1.6 1999/10/13 16:39:00 vixie Exp
|
||||
#include <ctype.h>
|
||||
#ifdef IRS_LCL_SV_DB
|
||||
#include <db.h>
|
||||
#include <err.h>
|
||||
#endif
|
||||
#include <fcntl.h>
|
||||
#include <limits.h>
|
||||
@ -37,9 +38,11 @@ static const char rcsid[] = "$Id: mkservdb.c,v 1.6 1999/10/13 16:39:00 vixie Exp
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "../../include/irs.h"
|
||||
#include "../../lib/irs/irs_p.h"
|
||||
#include "../../include/isc/misc.h"
|
||||
|
||||
#include "port_after.h"
|
||||
|
||||
@ -61,6 +64,7 @@ main(int argc, char **argv) {
|
||||
|
||||
struct servent *getnextent(FILE *);
|
||||
|
||||
int
|
||||
main(int argc, char **argv) {
|
||||
DB *db;
|
||||
DBT key;
|
||||
@ -112,24 +116,26 @@ main(int argc, char **argv) {
|
||||
}
|
||||
data.size = p - dbuf;
|
||||
|
||||
if ((r = db->put(db, &key, &data, R_NOOVERWRITE)))
|
||||
if ((r = db->put(db, &key, &data, R_NOOVERWRITE))) {
|
||||
if (r < 0)
|
||||
errx(1, "failed to write %s", key.data);
|
||||
errx(1, "failed to write %s", (char *)key.data);
|
||||
else
|
||||
warnx("will not overwrite %s", key.data);
|
||||
warnx("will not overwrite %s", (char *)key.data);
|
||||
}
|
||||
for (n = 0; sv->s_aliases[n]; ++n) {
|
||||
if (strlen(sv->s_aliases[n]) + sizeof "/"
|
||||
+ strlen(sv->s_proto) > sizeof kbuf)
|
||||
continue;
|
||||
key.size = SPRINTF((kbuf, "%s/%s",
|
||||
sv->s_aliases[n], sv->s_proto))+1;
|
||||
if ((r = db->put(db, &key, &data, R_NOOVERWRITE)))
|
||||
if ((r = db->put(db, &key, &data, R_NOOVERWRITE))) {
|
||||
if (r < 0)
|
||||
errx(1, "failed to write %s",
|
||||
key.data);
|
||||
(char *)key.data);
|
||||
else
|
||||
warnx("will not overwrite %s",
|
||||
key.data);
|
||||
(char *)key.data);
|
||||
}
|
||||
}
|
||||
|
||||
ports = (u_short *)kbuf;
|
||||
@ -152,16 +158,17 @@ main(int argc, char **argv) {
|
||||
}
|
||||
data.size = p - dbuf;
|
||||
|
||||
if ((r = db->put(db, &key, &data, R_NOOVERWRITE)))
|
||||
if ((r = db->put(db, &key, &data, R_NOOVERWRITE))) {
|
||||
if (r < 0)
|
||||
errx(1, "failed to write %d/%s",
|
||||
ntohs(sv->s_port), sv->s_proto);
|
||||
else
|
||||
warnx("will not overwrite %d/%s",
|
||||
ntohs(sv->s_port), sv->s_proto);
|
||||
ntohs(sv->s_port), sv->s_proto);
|
||||
}
|
||||
}
|
||||
db->close(db);
|
||||
if (rename(tmpdatabase, database))
|
||||
if (isc_movefile(tmpdatabase, database))
|
||||
err(1, "rename %s -> %s", tmpdatabase, database);
|
||||
exit(0);
|
||||
}
|
||||
|
@ -13,16 +13,16 @@
|
||||
## ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
## SOFTWARE.
|
||||
|
||||
# $Id: Makefile,v 1.2 2000/07/11 06:41:33 vixie Exp $
|
||||
# $Id: Makefile,v 1.3 2000/12/23 08:02:53 vixie Exp $
|
||||
|
||||
DESTDIR=
|
||||
CC= cc
|
||||
SHELL= /bin/sh
|
||||
|
||||
CDEBUG= -g
|
||||
CDEBUG= -g -Wall
|
||||
|
||||
#(net2 and its descendents)
|
||||
SYSTYPE = bsdos
|
||||
SYSTYPE = freebsd
|
||||
TOP = ../..
|
||||
INCL = ${TOP}/include
|
||||
PORTINCL = ${TOP}/port/${SYSTYPE}/include
|
||||
|
@ -181,19 +181,24 @@ while read CMD ARGS; do
|
||||
esac
|
||||
set - X $ARGS
|
||||
shift
|
||||
if [ $# -gt 2 ]; then
|
||||
if [ $# -gt 1 ]; then
|
||||
ZONE=$1
|
||||
shift
|
||||
PRIMARIES=$1
|
||||
while [ $# -gt 2 ]; do
|
||||
shift
|
||||
PRIMARIES=""
|
||||
while [ $# -gt 1 ]; do
|
||||
PRIMARIES="$PRIMARIES $1"
|
||||
shift
|
||||
done
|
||||
(echo ""
|
||||
cat $COMMENTFILE
|
||||
echo "zone \"$ZONE\" ${class}{"
|
||||
echo " type slave;"
|
||||
echo " file \"$2\";"
|
||||
if expr x"$1" : '^x[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$' > /dev/null
|
||||
then
|
||||
PRIMARIES="$PRIMARIES $1"
|
||||
else
|
||||
echo " file \"$1\";"
|
||||
fi
|
||||
echo " masters {"
|
||||
for PRIMARY in $PRIMARIES; do
|
||||
echo " $PRIMARY;"
|
||||
@ -215,19 +220,24 @@ while read CMD ARGS; do
|
||||
esac
|
||||
set - X $ARGS
|
||||
shift
|
||||
if [ $# -gt 2 ]; then
|
||||
if [ $# -gt 1 ]; then
|
||||
ZONE=$1
|
||||
shift
|
||||
PRIMARIES=$1
|
||||
while [ $# -gt 2 ]; do
|
||||
shift
|
||||
PRIMARIES=""
|
||||
while [ $# -gt 1 ]; do
|
||||
PRIMARIES="$PRIMARIES $1"
|
||||
shift
|
||||
done
|
||||
(echo ""
|
||||
cat $COMMENTFILE
|
||||
echo "zone \"$ZONE\" ${class}{"
|
||||
echo " type stub;"
|
||||
echo " file \"$2\";"
|
||||
if expr x"$1" : '^x[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$' > /dev/null
|
||||
then
|
||||
PRIMARIES="$PRIMARIES $1"
|
||||
else
|
||||
echo " file \"$1\";"
|
||||
fi
|
||||
echo " masters {"
|
||||
for PRIMARY in $PRIMARIES; do
|
||||
echo " $PRIMARY;"
|
||||
|
@ -13,16 +13,16 @@
|
||||
## ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
## SOFTWARE.
|
||||
|
||||
# $Id: Makefile,v 8.30 2000/07/11 06:41:34 vixie Exp $
|
||||
# $Id: Makefile,v 8.31 2000/12/23 08:02:54 vixie Exp $
|
||||
|
||||
DESTDIR=
|
||||
CC= cc
|
||||
SHELL= /bin/sh
|
||||
|
||||
CDEBUG= -g
|
||||
CDEBUG= -g -Wall
|
||||
|
||||
#(net2 and its descendents)
|
||||
SYSTYPE = bsdos
|
||||
SYSTYPE = freebsd
|
||||
TOP = ../..
|
||||
INCL = ${TOP}/include
|
||||
PORTINCL = ${TOP}/port/${SYSTYPE}/include
|
||||
|
@ -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.94 2000/07/11 05:38:27 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: named-xfer.c,v 8.104 2000/12/23 08:14:44 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include "port_before.h"
|
||||
@ -162,12 +162,9 @@ static const char rcsid[] = "$Id: named-xfer.c,v 8.94 2000/07/11 05:38:27 vixie
|
||||
#include <isc/eventlib.h>
|
||||
#include <isc/list.h>
|
||||
#include <isc/logging.h>
|
||||
/* This still uses malloc/free, but the tsig routines allocate memory with
|
||||
* memget, and we free it with memput.
|
||||
*/
|
||||
#include <isc/memcluster.h>
|
||||
|
||||
#include <isc/dst.h>
|
||||
#include <isc/misc.h>
|
||||
|
||||
#include "port_after.h"
|
||||
|
||||
@ -205,8 +202,8 @@ static FILE *fp = NULL,
|
||||
|
||||
static char *ProgName;
|
||||
|
||||
static void usage(const char *),
|
||||
tsig_init(const char *);
|
||||
static void usage(const char *);
|
||||
static int tsig_init(const char *);
|
||||
static int getzone(struct zoneinfo *, u_int32_t, int),
|
||||
print_output(struct zoneinfo *, u_int32_t,
|
||||
u_char *, int, u_char *, int),
|
||||
@ -264,7 +261,7 @@ init_xfer_logging() {
|
||||
|
||||
log_ctx_valid = 1;
|
||||
|
||||
chan = log_new_syslog_channel(0, 0, LOG_DAEMON);
|
||||
chan = log_new_syslog_channel(0, 0, ISC_FACILITY);
|
||||
if (chan == NULL)
|
||||
return (0);
|
||||
if (log_add_channel(log_ctx, ns_log_default, chan) < 0) {
|
||||
@ -321,15 +318,13 @@ main(int argc, char *argv[]) {
|
||||
struct in_addr axfr_src;
|
||||
char *dbfile = NULL, *tracefile = NULL, *tm = NULL, *tsigfile = NULL;
|
||||
char *ixfrfile = NULL;
|
||||
u_int32_t new_serial_no = 0;
|
||||
int dbfd, ddtd, result, c, fd, ixfd;
|
||||
int dbfd, ddtd, result, c, ixfd;
|
||||
u_int32_t serial_no = 0;
|
||||
u_int port = htons(NAMESERVER_PORT);
|
||||
struct stat statbuf;
|
||||
int stub_only = 0;
|
||||
int class = C_IN;
|
||||
int n;
|
||||
long num_files;
|
||||
|
||||
#ifdef _AUX_SOURCE
|
||||
set42sig();
|
||||
@ -363,7 +358,7 @@ main(int argc, char *argv[]) {
|
||||
#ifdef SYSLOG_42BSD
|
||||
openlog(ProgName, n);
|
||||
#else
|
||||
openlog(ProgName, n, LOG_DAEMON);
|
||||
openlog(ProgName, n, ISC_FACILITY);
|
||||
#endif
|
||||
while ((c = getopt(argc, argv, "C:d:l:s:t:z:f:i:p:P:qx:ST:Z")) != -1)
|
||||
switch (c) {
|
||||
@ -595,10 +590,16 @@ main(int argc, char *argv[]) {
|
||||
dprintf(1, "domain `%s'; ixfrfile `%s'; serial %u\n",
|
||||
domain, ixfrfile, serial_no);
|
||||
|
||||
if (tsigfile)
|
||||
dprintf(1, "tsigfile `%s'\n", tsigfile);
|
||||
|
||||
buildservicelist();
|
||||
buildprotolist();
|
||||
|
||||
tsig_init(tsigfile);
|
||||
if (tsig_init(tsigfile) == -1) {
|
||||
cleanup_for_exit();
|
||||
return (XFER_FAIL);
|
||||
}
|
||||
|
||||
/* init zone data */
|
||||
|
||||
@ -688,8 +689,8 @@ main(int argc, char *argv[]) {
|
||||
* AXFR. Rename the temporary file to the IXFR
|
||||
* name, named will rename it again to the dbname.
|
||||
*/
|
||||
if (movefile(tmpname, ixfrfile) == -1) {
|
||||
perror("movefile");
|
||||
if (isc_movefile(tmpname, ixfrfile) == -1) {
|
||||
perror("isc_movefile");
|
||||
#ifdef DEBUG
|
||||
if (debug)
|
||||
(void) unlink(ddtfile);
|
||||
@ -703,10 +704,10 @@ main(int argc, char *argv[]) {
|
||||
};
|
||||
exit(XFER_SUCCESSAXFRIXFRFILE);
|
||||
}
|
||||
if (movefile(tmpname, dbfile) == -1) {
|
||||
perror("movefile");
|
||||
if (isc_movefile(tmpname, dbfile) == -1) {
|
||||
perror("isc_movefile");
|
||||
if (!quiet)
|
||||
syslog(LOG_ERR, "movefile %s to %s: %m",
|
||||
syslog(LOG_ERR, "isc_movefile %s to %s: %m",
|
||||
tmpname, dbfile);
|
||||
cleanup_for_exit();
|
||||
exit(XFER_FAIL);
|
||||
@ -715,10 +716,10 @@ main(int argc, char *argv[]) {
|
||||
|
||||
case XFER_SUCCESSIXFR:
|
||||
unlink(tmpname);
|
||||
if (movefile(tmpiname, ixfrfile) == -1) {
|
||||
perror("movefile");
|
||||
if (isc_movefile(tmpiname, ixfrfile) == -1) {
|
||||
perror("isc_movefile");
|
||||
if (!quiet)
|
||||
syslog(LOG_ERR, "movefile %s to %s: %m",
|
||||
syslog(LOG_ERR, "isc_movefile %s to %s: %m",
|
||||
tmpiname, ixfrfile);
|
||||
cleanup_for_exit();
|
||||
exit(XFER_FAIL);
|
||||
@ -774,26 +775,28 @@ usage(const char *msg) {
|
||||
exit(XFER_FAIL);
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
tsig_init(const char *file) {
|
||||
char buf[1024];
|
||||
int n;
|
||||
FILE *fp;
|
||||
char *s;
|
||||
|
||||
if (file == NULL)
|
||||
return;
|
||||
return (0);
|
||||
fp = fopen(file, "r");
|
||||
if (fp == NULL)
|
||||
return;
|
||||
return (-1);
|
||||
dst_init();
|
||||
INIT_LIST(tsig_list);
|
||||
while (1) {
|
||||
tsig_node *n = malloc(sizeof(tsig_node));
|
||||
int alg, secret_len;
|
||||
char *address, *name;
|
||||
char *cp;
|
||||
u_char secret[128];
|
||||
char *name;
|
||||
|
||||
if (n == NULL)
|
||||
return (-1);
|
||||
|
||||
s = fgets(buf, sizeof(buf), fp);
|
||||
if (s == NULL)
|
||||
@ -804,6 +807,9 @@ tsig_init(const char *file) {
|
||||
fgets(buf, sizeof(buf), fp);
|
||||
buf[strlen(buf)-1] = 0;
|
||||
name = strdup(buf);
|
||||
|
||||
if (name == NULL)
|
||||
return (-1);
|
||||
|
||||
fscanf(fp, "%d", &alg);
|
||||
fgets(buf, sizeof(buf), fp);
|
||||
@ -819,10 +825,12 @@ tsig_init(const char *file) {
|
||||
secret, secret_len);
|
||||
|
||||
free(name);
|
||||
INIT_LINK(n, link);
|
||||
APPEND(tsig_list, n, link);
|
||||
}
|
||||
fclose(fp);
|
||||
unlink(file);
|
||||
return (0);
|
||||
}
|
||||
|
||||
#define DEF_DNAME '\001' /* '\0' means the root domain */
|
||||
@ -830,6 +838,7 @@ tsig_init(const char *file) {
|
||||
u_int32_t minimum_ttl = 0;
|
||||
int soa_cnt = 0, scdsoa = 0, methode = ISNOTIXFR;
|
||||
int delete_soa = 1;
|
||||
int ixfr_single_answer_mode = 0;
|
||||
u_int32_t final_serial = 0;
|
||||
int ixfr_soa = 0;
|
||||
int ns_cnt = 0;
|
||||
@ -844,7 +853,6 @@ static int
|
||||
getzone(struct zoneinfo *zp, u_int32_t serial_no, int port) {
|
||||
HEADER *hp;
|
||||
u_int len;
|
||||
u_int32_t serial;
|
||||
int s, n, l, error = 0;
|
||||
int was_ixfr = 0;
|
||||
u_int cnt;
|
||||
@ -852,7 +860,9 @@ getzone(struct zoneinfo *zp, u_int32_t serial_no, int port) {
|
||||
u_char *buf = NULL, *cpp = NULL;
|
||||
u_char *bp;
|
||||
u_int bufsize = 0;
|
||||
char name[MAXDNAME], name2[MAXDNAME];
|
||||
u_char *buf2 = NULL;
|
||||
u_int buf2size = 0;
|
||||
char name2[MAXDNAME];
|
||||
struct sockaddr_in sin;
|
||||
struct sockaddr_in local;
|
||||
int locallen;
|
||||
@ -862,7 +872,6 @@ getzone(struct zoneinfo *zp, u_int32_t serial_no, int port) {
|
||||
struct sigvec sv, osv;
|
||||
#endif
|
||||
int qdcount, ancount, aucount, arcount, class, type;
|
||||
int first_serial;
|
||||
const char *badsoa_msg = "Nil";
|
||||
struct sockaddr_in my_addr;
|
||||
char my_addr_text[30];
|
||||
@ -1217,8 +1226,8 @@ getzone(struct zoneinfo *zp, u_int32_t serial_no, int port) {
|
||||
loop_cnt = 0;
|
||||
bp = NULL;
|
||||
do {
|
||||
u_char *cp4;
|
||||
u_short type, class, dlen;
|
||||
u_char *cp4, *ocp = tmp;
|
||||
u_short type, class, dlen, olen = len;
|
||||
u_int32_t ttl;
|
||||
n = dn_expand(buf, eom, tmp, name2, sizeof name2);
|
||||
if (n < 0) {
|
||||
@ -1285,13 +1294,163 @@ getzone(struct zoneinfo *zp, u_int32_t serial_no, int port) {
|
||||
name2, p_type(type));
|
||||
tmp = cp4 + dlen;
|
||||
loop_cnt++;
|
||||
if (loop_cnt >= ancount) {
|
||||
if (ancount == 1 && loop_cnt == 1)
|
||||
{
|
||||
|
||||
badsoa_msg = soa_zinfo(&zp_start, bp, eom);
|
||||
if (badsoa_msg)
|
||||
goto badsoa;
|
||||
if (zp_start.z_serial == serial_no) {
|
||||
(void) my_close(s);
|
||||
dprintf(1, "zone up-to-date, serial %u\n",
|
||||
zp_start.z_serial);
|
||||
if (ixfp) {
|
||||
(void) unlink (tmpiname);
|
||||
(void) fclose(ixfp);
|
||||
ixfp = NULL;
|
||||
}
|
||||
return (XFER_UPTODATE);
|
||||
}
|
||||
if (buf2 == NULL) {
|
||||
if ((buf2 = (u_char *)malloc(2 * PACKETSZ)) == NULL) {
|
||||
syslog(LOG_INFO, "malloc(%u) failed", 2 * PACKETSZ);
|
||||
error++;
|
||||
break;
|
||||
}
|
||||
buf2size = 2 * PACKETSZ;
|
||||
}
|
||||
if (netread(s, (char *)buf2, INT16SZ, XFER_TIMER) < 0) {
|
||||
(void) my_close(s);
|
||||
error++;
|
||||
tmp = bp;
|
||||
check_serial = 0;
|
||||
break;
|
||||
}
|
||||
if ((len = ns_get16(buf2)) == 0) {
|
||||
(void) my_close(s);
|
||||
tmp = bp;
|
||||
check_serial = 0;
|
||||
break;
|
||||
}
|
||||
if (len > buf2size) {
|
||||
if ((buf2 = (u_char *)realloc(buf2, len)) == NULL) {
|
||||
syslog(LOG_INFO,
|
||||
"malloc(%u) failed for SOA from server [%s], zone %s\n",
|
||||
len,
|
||||
inet_ntoa(sin.sin_addr),
|
||||
zp->z_origin);
|
||||
(void) my_close(s);
|
||||
tmp = bp;
|
||||
check_serial = 0;
|
||||
break;
|
||||
}
|
||||
buf2size = len;
|
||||
}
|
||||
if (netread(s, (char *)buf2, len, XFER_TIMER) < 0) {
|
||||
error++;
|
||||
(void) my_close(s);
|
||||
tmp = bp;
|
||||
check_serial = 0;
|
||||
break;
|
||||
}
|
||||
/*
|
||||
* Verify the TSIG if expected
|
||||
*/
|
||||
if (tsig_signed != 0) {
|
||||
ret = ns_verify(buf, (int *)&len, tsig_key, sig, siglen,
|
||||
NULL, NULL, ×igned, 0);
|
||||
if (ret != 0) {
|
||||
syslog(LOG_NOTICE,
|
||||
"SOA TSIG verification from server [%s], zone %s: %s (%d)\n",
|
||||
inet_ntoa(sin.sin_addr), zp->z_origin,
|
||||
tsig_rcode(ret), ret);
|
||||
error++;
|
||||
(void) my_close(s);
|
||||
tmp = bp;
|
||||
check_serial = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
#ifdef DEBUG
|
||||
if (debug >= 3) {
|
||||
(void)fprintf(ddt,"len = %d\n", len);
|
||||
res_pquery(&res, buf2, len, ddt);
|
||||
}
|
||||
#endif
|
||||
hp = (HEADER *) buf2;
|
||||
qdcount = ntohs(hp->qdcount);
|
||||
ancount = ntohs(hp->ancount);
|
||||
aucount = ntohs(hp->nscount);
|
||||
arcount = ntohs(hp->arcount);
|
||||
|
||||
tmp = buf2 + HFIXEDSZ;
|
||||
eom = buf2 + len;
|
||||
/* Query Section. */
|
||||
if (qdcount > 1) {
|
||||
badsoa_msg = "question error";
|
||||
goto badsoa;
|
||||
}
|
||||
n = dn_expand(buf2, eom, tmp, name2, sizeof name2);
|
||||
if (n < 0) {
|
||||
badsoa_msg = "qname error";
|
||||
goto badsoa;
|
||||
}
|
||||
tmp += n;
|
||||
bp = tmp;
|
||||
if (tmp + 2 * INT16SZ > eom) {
|
||||
badsoa_msg = "query error";
|
||||
goto badsoa;
|
||||
}
|
||||
NS_GET16(type, tmp);
|
||||
NS_GET16(class, tmp);
|
||||
if (class != curclass ||
|
||||
ns_samename(zp->z_origin, name2) != 1)
|
||||
{
|
||||
syslog(LOG_INFO,
|
||||
"wrong query in resp from [%s], zone %s: [%s %s %s]\n",
|
||||
inet_ntoa(sin.sin_addr), zp->z_origin,
|
||||
name2, p_class(class), p_type(type));
|
||||
error++;
|
||||
(void) my_close(s);
|
||||
tmp = bp;
|
||||
check_serial = 0;
|
||||
break;
|
||||
}
|
||||
if (type == T_SOA) {
|
||||
ixfr_single_answer_mode = 1;
|
||||
if (ixfp)
|
||||
if (ixfr_log(buf2, len, &delete_soa, ixfp,
|
||||
&sin, domain, &serial_no,
|
||||
&ixfr_first) < 0) {
|
||||
error++;
|
||||
break;
|
||||
}
|
||||
free(buf);
|
||||
buf = buf2;
|
||||
bufsize = buf2size;
|
||||
break;
|
||||
}
|
||||
else {
|
||||
methode = ISNOTIXFR;
|
||||
was_ixfr++;
|
||||
check_serial = 0;
|
||||
cp = buf + HFIXEDSZ;
|
||||
n = print_output(zp, serial_no, buf, olen, ocp, 3);
|
||||
buf = buf2;
|
||||
bufsize = buf2size;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (loop_cnt > 1) {
|
||||
tmp = bp;
|
||||
check_serial = 0;
|
||||
break;
|
||||
}
|
||||
} while (1);
|
||||
|
||||
if (error != 0) {
|
||||
return (XFER_FAIL);
|
||||
}
|
||||
if (ns_samename(zp->z_origin, name2) != 1) {
|
||||
syslog(LOG_INFO,
|
||||
"wrong answer in resp from [%s], zone %s: [%s %s %s]\n",
|
||||
@ -1301,9 +1460,11 @@ getzone(struct zoneinfo *zp, u_int32_t serial_no, int port) {
|
||||
(void) my_close(s);
|
||||
continue;
|
||||
}
|
||||
if (loop_cnt < 1) {
|
||||
badsoa_msg = soa_zinfo(&zp_start, tmp, eom);
|
||||
if (badsoa_msg)
|
||||
goto badsoa;
|
||||
}
|
||||
if (methode == ISNOTIXFR) {
|
||||
if (SEQ_GT(zp_start.z_serial, serial_no) || !check_serial) {
|
||||
const char *l, *nl, *t;
|
||||
@ -1342,6 +1503,8 @@ getzone(struct zoneinfo *zp, u_int32_t serial_no, int port) {
|
||||
"; zone '%s' first transfer\n",
|
||||
domain, serial_no);
|
||||
t = strdup(inet_ntoa(sin.sin_addr));
|
||||
if (t == NULL)
|
||||
return (XFER_FAIL);
|
||||
fprintf(dbfp, "; from %s:%d (local %s) using %s at %s",
|
||||
t, ntohs(sin.sin_port),
|
||||
inet_ntoa(local.sin_addr),
|
||||
@ -1558,7 +1721,7 @@ getzone(struct zoneinfo *zp, u_int32_t serial_no, int port) {
|
||||
n = print_output(zp,
|
||||
serial_no,
|
||||
buf, len, cp,
|
||||
was_ixfr);
|
||||
0);
|
||||
if (n < 0)
|
||||
break;
|
||||
cp += n;
|
||||
@ -1592,7 +1755,7 @@ getzone(struct zoneinfo *zp, u_int32_t serial_no, int port) {
|
||||
buf,
|
||||
len,
|
||||
cp,
|
||||
was_ixfr);
|
||||
0);
|
||||
if (n < 0)
|
||||
break;
|
||||
cp += n;
|
||||
@ -1604,7 +1767,7 @@ getzone(struct zoneinfo *zp, u_int32_t serial_no, int port) {
|
||||
cnt++) {
|
||||
n = print_output(zp, serial_no,
|
||||
buf, len, cp,
|
||||
was_ixfr);
|
||||
0);
|
||||
cp += n;
|
||||
}
|
||||
if (n < 0) {
|
||||
@ -1641,7 +1804,7 @@ getzone(struct zoneinfo *zp, u_int32_t serial_no, int port) {
|
||||
cnt++) {
|
||||
n = print_output(zp, serial_no,
|
||||
buf, len, cp,
|
||||
was_ixfr);
|
||||
0);
|
||||
if (n < 0)
|
||||
break;
|
||||
cp += n;
|
||||
@ -1788,13 +1951,14 @@ getzone(struct zoneinfo *zp, u_int32_t serial_no, int port) {
|
||||
(void) my_close(s);
|
||||
return (XFER_FAIL);
|
||||
}
|
||||
if (ancount == 1) {
|
||||
if (soa_cnt > 2) {
|
||||
methode = ISNOTIXFR;
|
||||
check_serial = 0;
|
||||
soa_cnt = 0;
|
||||
goto axfr_response;
|
||||
goto axfr_response;
|
||||
}
|
||||
dprintf(1, "We have an IXFR\n");
|
||||
loop_cnt = 0;
|
||||
while (SEQ_GT(zp_finish.z_serial, serial_no)) {
|
||||
/*
|
||||
* Receive length & response
|
||||
@ -1881,13 +2045,14 @@ getzone(struct zoneinfo *zp, u_int32_t serial_no, int port) {
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (ixfp)
|
||||
if (ixfp) {
|
||||
if (ixfr_log(buf, len, &delete_soa, ixfp,
|
||||
&sin, domain, &serial_no,
|
||||
&ixfr_first) < 0) {
|
||||
error++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
(void) my_close(s);
|
||||
if (!error) {
|
||||
@ -2010,7 +2175,7 @@ writemsg(int rfd, const u_char *msg, int msglen) {
|
||||
iov[1].iov_len = msglen;
|
||||
ret = writev(rfd, iov, 2);
|
||||
if (ret != INT16SZ + msglen) {
|
||||
syslog(LOG_DEBUG, "writemsg(%d,%#x,%d) failed: %s",
|
||||
syslog(LOG_DEBUG, "writemsg(%d,%p,%d) failed: %s",
|
||||
rfd, msg, msglen, strerror(errno));
|
||||
return (-1);
|
||||
}
|
||||
@ -2070,10 +2235,10 @@ soa_zinfo(struct zoneinfo *zp, u_char *cp, u_char *eom) {
|
||||
*/
|
||||
static int
|
||||
print_output(struct zoneinfo *zp, u_int32_t serial_no, u_char *msg,
|
||||
int msglen, u_char *rrp, int was_ixfr) {
|
||||
int msglen, u_char *rrp, int xfr_detect) {
|
||||
u_char *cp;
|
||||
HEADER *hp = (HEADER *) msg;
|
||||
u_int32_t addr, ttl, tmpnum;
|
||||
u_int32_t ttl, tmpnum;
|
||||
int i, j, tab, result, n1, n;
|
||||
u_int class, type, dlen;
|
||||
char data[MAXDATA];
|
||||
@ -2434,6 +2599,8 @@ print_output(struct zoneinfo *zp, u_int32_t serial_no, u_char *msg,
|
||||
}
|
||||
if (zp_start.z_serial == zp_finish.z_serial) {
|
||||
methode = ISNOTIXFR;
|
||||
if (xfr_detect == 3)
|
||||
soa_cnt = 0;
|
||||
} else if (zp_finish.z_serial != serial_no) {
|
||||
syslog(LOG_INFO,
|
||||
"Unexpected serial number for zone %s: %u",
|
||||
@ -2499,7 +2666,7 @@ print_output(struct zoneinfo *zp, u_int32_t serial_no, u_char *msg,
|
||||
return (result);
|
||||
}
|
||||
}
|
||||
if ((soa_cnt == 2) && (was_ixfr == 0))
|
||||
if (soa_cnt == 2)
|
||||
return (result);
|
||||
|
||||
}
|
||||
@ -2783,22 +2950,19 @@ print_output(struct zoneinfo *zp, u_int32_t serial_no, u_char *msg,
|
||||
fprintf(dbfp, " %u", preference);
|
||||
|
||||
/* Flags */
|
||||
if ((n = *cp++) != 0) {
|
||||
fprintf(dbfp, " \"%.*s\"", (int)n, cp);
|
||||
cp += n;
|
||||
}
|
||||
n = *cp++;
|
||||
fprintf(dbfp, " \"%.*s\"", (int)n, cp);
|
||||
cp += n;
|
||||
|
||||
/* Service */
|
||||
if ((n = *cp++) != 0) {
|
||||
fprintf(dbfp, " \"%.*s\"", (int)n, cp);
|
||||
cp += n;
|
||||
}
|
||||
n = *cp++;
|
||||
fprintf(dbfp, " \"%.*s\"", (int)n, cp);
|
||||
cp += n;
|
||||
|
||||
/* Regexp */
|
||||
if ((n = *cp++) != 0) {
|
||||
fprintf(dbfp, " \"%.*s\"", (int)n, cp);
|
||||
cp += n;
|
||||
}
|
||||
n = *cp++;
|
||||
fprintf(dbfp, " \"%.*s\"", (int)n, cp);
|
||||
cp += n;
|
||||
|
||||
/* Replacement */
|
||||
fprintf(dbfp, " %s.\n", cp);
|
||||
@ -2950,7 +3114,7 @@ print_output(struct zoneinfo *zp, u_int32_t serial_no, u_char *msg,
|
||||
default:
|
||||
cp1 = cp + n;
|
||||
while (cp < cp1)
|
||||
fprintf(dbfp, "0x%02.2X ", *cp++ & 0xFF);
|
||||
fprintf(dbfp, "0x%02X ", *cp++ & 0xFF);
|
||||
(void) fprintf(dbfp, "???\n");
|
||||
}
|
||||
if (ferror(dbfp)) {
|
||||
@ -3026,7 +3190,6 @@ do_section(ns_msg *handle, ns_sect section, int pflag, FILE *file, int *delete)
|
||||
|
||||
opcode = (ns_opcode)ns_msg_getflag(*handle, ns_f_opcode);
|
||||
rrnum = 0;
|
||||
serial = -1;
|
||||
for (;;) {
|
||||
if (ns_parserr(handle, section, rrnum, &rr)) {
|
||||
if (errno != ENODEV) {
|
||||
@ -3130,11 +3293,10 @@ ixfr_log(const u_char *msg, int len, int *delete, FILE *file,
|
||||
ns_class class;
|
||||
ns_opcode opcode;
|
||||
ns_rcode rcode;
|
||||
u_int id, n;
|
||||
u_int id;
|
||||
u_int32_t new_serial = 0;
|
||||
char time[25];
|
||||
ns_rr rr;
|
||||
char *cp;
|
||||
HEADER *hp;
|
||||
|
||||
if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
|
||||
dprintf(1, "ixfr_log() failed\n");
|
||||
@ -3170,7 +3332,9 @@ ixfr_log(const u_char *msg, int len, int *delete, FILE *file,
|
||||
ntohs(sin->sin_port), time, (long)getpid());
|
||||
(*first_rr)++;
|
||||
}
|
||||
*serial_no = do_section(&handle, ns_s_an, RES_PRF_ANS, file, delete);
|
||||
new_serial = do_section(&handle, ns_s_an, RES_PRF_ANS, file, delete);
|
||||
if (type == T_SOA && SEQ_GT(new_serial, *serial_no) && (*delete))
|
||||
*serial_no = new_serial;
|
||||
return (1);
|
||||
}
|
||||
|
||||
|
@ -13,16 +13,16 @@
|
||||
## ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
## SOFTWARE.
|
||||
|
||||
# $Id: Makefile,v 8.50 2000/07/11 06:41:32 vixie Exp $
|
||||
# $Id: Makefile,v 8.51 2000/12/23 08:02:53 vixie Exp $
|
||||
|
||||
DESTDIR=
|
||||
CC= cc
|
||||
SHELL= /bin/sh
|
||||
|
||||
CDEBUG= -g
|
||||
CDEBUG= -g -Wall
|
||||
|
||||
#(net2 and its descendents)
|
||||
SYSTYPE = bsdos
|
||||
SYSTYPE = freebsd
|
||||
TOP = ../..
|
||||
INCL = ${TOP}/include
|
||||
PORTINCL = ${TOP}/port/${SYSTYPE}/include
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* from db.h 4.16 (Berkeley) 6/1/90
|
||||
* $Id: db_defs.h,v 8.38 2000/04/21 06:54:01 vixie Exp $
|
||||
* $Id: db_defs.h,v 8.40 2000/11/29 06:55:46 marka Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -103,9 +103,17 @@
|
||||
/*
|
||||
* Hash table structures.
|
||||
*/
|
||||
/*
|
||||
* XXX
|
||||
* For IPv6 transport support we need a seperate reference counted
|
||||
* database of source addresses and d_addr should become a union with
|
||||
* a pointer into that database. A bit can be robbed from d_rode to
|
||||
* indicate what the union is being used for. This should require less
|
||||
* memory than making d_addr a union of struct in6_addr and struct in_addr.
|
||||
*/
|
||||
struct databuf {
|
||||
struct databuf *d_next; /* linked list */
|
||||
struct nameser *d_ns; /* NS from whence this came */
|
||||
struct in_addr d_addr; /* NS from whence this came */
|
||||
u_int32_t d_ttl; /* time to live */
|
||||
/* if d_zone == DB_Z_CACHE, then
|
||||
* d_ttl is actually the time when
|
||||
@ -125,11 +133,18 @@ struct databuf {
|
||||
int16_t d_type; /* type number */
|
||||
int16_t d_size; /* size of data area */
|
||||
u_int32_t d_rcnt;
|
||||
#ifdef HITCOUNTS
|
||||
u_int32_t d_hitcnt; /* Number of requests for this data. */
|
||||
#endif /* HITCOUNTS */
|
||||
u_int16_t d_nstime; /* NS response time, milliseconds */
|
||||
u_char d_data[sizeof(void*)]; /* dynamic (padded) */
|
||||
};
|
||||
#define DATASIZE(n) (sizeof(struct databuf) - sizeof(void*) + n)
|
||||
|
||||
#ifdef HITCOUNTS
|
||||
extern u_int32_t db_total_hits;
|
||||
#endif /* HITCOUNTS */
|
||||
|
||||
#ifdef BIND_UPDATE
|
||||
/*
|
||||
* d_mark definitions
|
||||
|
@ -1,6 +1,6 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static const char sccsid[] = "@(#)db_dump.c 4.33 (Berkeley) 3/3/91";
|
||||
static const char rcsid[] = "$Id: db_dump.c,v 8.43 2000/04/21 06:54:01 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: db_dump.c,v 8.48 2000/12/23 08:14:34 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -125,15 +125,20 @@ static const char rcsid[] = "$Id: db_dump.c,v 8.43 2000/04/21 06:54:01 vixie Exp
|
||||
|
||||
#include "named.h"
|
||||
|
||||
#ifdef HITCOUNTS
|
||||
u_int32_t db_total_hits;
|
||||
#endif /* HITCOUNTS */
|
||||
|
||||
static const char *MkCredStr(int);
|
||||
|
||||
static int fwd_dump(FILE *fp);
|
||||
|
||||
/*
|
||||
* Dump current data base in a format similar to RFC 883.
|
||||
*/
|
||||
|
||||
void
|
||||
doadump()
|
||||
{
|
||||
doadump(void) {
|
||||
FILE *fp;
|
||||
|
||||
ns_notice(ns_log_db, "dumping nameserver data");
|
||||
@ -141,6 +146,10 @@ doadump()
|
||||
if ((fp = write_open(server_options->dump_filename)) == NULL)
|
||||
return;
|
||||
gettime(&tt);
|
||||
#ifdef HITCOUNTS
|
||||
if (NS_OPTION_P(OPTION_HITCOUNT))
|
||||
fprintf(fp, "; Total hits: %d\n",db_total_hits);
|
||||
#endif /* HITCOUNTS */
|
||||
fprintf(fp, "; Dumped at %s", ctimel(tt.tv_sec));
|
||||
if (zones != NULL && nzones != 0)
|
||||
zt_dump(fp);
|
||||
@ -204,7 +213,8 @@ zt_dump(FILE *fp) {
|
||||
fprintf(fp, ";; --zone table--\n");
|
||||
return (0);
|
||||
}
|
||||
int
|
||||
|
||||
static int
|
||||
fwd_dump(FILE *fp) {
|
||||
int i;
|
||||
fprintf(fp, ";; ++forwarders table++\n");
|
||||
@ -471,18 +481,18 @@ db_dump(struct hashbuf *htp, FILE *fp, int zone, char *origin) {
|
||||
NS_GET16(preference, cp);
|
||||
fprintf(fp, "%u", preference);
|
||||
|
||||
if ((n = *cp++) != 0) {
|
||||
fprintf(fp, "\"%.*s\"", (int)n, cp);
|
||||
cp += n;
|
||||
}
|
||||
if ((n = *cp++) != 0) {
|
||||
fprintf(fp, "\"%.*s\"", (int)n, cp);
|
||||
cp += n;
|
||||
}
|
||||
if ((n = *cp++) != 0) {
|
||||
fprintf(fp, " \"%.*s\"", (int)n, cp);
|
||||
cp += n;
|
||||
}
|
||||
n = *cp++;
|
||||
fprintf(fp, "\"%.*s\"", (int)n, cp);
|
||||
cp += n;
|
||||
|
||||
n = *cp++;
|
||||
fprintf(fp, "\"%.*s\"", (int)n, cp);
|
||||
cp += n;
|
||||
|
||||
n = *cp++;
|
||||
fprintf(fp, " \"%.*s\"", (int)n, cp);
|
||||
cp += n;
|
||||
|
||||
fprintf(fp, " %s.", cp);
|
||||
|
||||
break;
|
||||
@ -627,18 +637,24 @@ db_dump(struct hashbuf *htp, FILE *fp, int zone, char *origin) {
|
||||
getname(np, dname, sizeof(dname));
|
||||
when = db_lame_find(dname, dp);
|
||||
if (when != 0 && when > tt.tv_sec) {
|
||||
fprintf(fp, "%sLAME=%d",
|
||||
fprintf(fp, "%sLAME=%ld",
|
||||
sep, when - tt.tv_sec);
|
||||
sep = " ";
|
||||
}
|
||||
}
|
||||
|
||||
eoln:
|
||||
if (dp->d_ns != NULL){
|
||||
if (dp->d_addr.s_addr != htonl(0)) {
|
||||
fprintf(fp, "%s[%s]",
|
||||
sep, inet_ntoa(dp->d_ns->addr));
|
||||
sep, inet_ntoa(dp->d_addr));
|
||||
sep = " ";
|
||||
}
|
||||
#ifdef HITCOUNTS
|
||||
if (NS_OPTION_P(OPTION_HITCOUNT)) {
|
||||
fprintf(fp, "%shits=%d", sep, dp->d_hitcnt);
|
||||
sep=" ";
|
||||
}
|
||||
#endif /* HITCOUNTS */
|
||||
putc('\n', fp);
|
||||
}
|
||||
}
|
||||
|
@ -90,53 +90,53 @@
|
||||
|
||||
/* db_proc.h - prototypes for functions in db_*.c
|
||||
*
|
||||
* $Id: db_func.h,v 8.42 2000/04/21 06:54:02 vixie Exp $
|
||||
* $Id: db_func.h,v 8.44 2000/12/02 23:28:33 vixie Exp $
|
||||
*/
|
||||
|
||||
/* ++from db_update.c++ */
|
||||
extern int db_update(const char *name,
|
||||
int db_update(const char *name,
|
||||
struct databuf *odp,
|
||||
struct databuf *newdp,
|
||||
struct databuf **savedpp,
|
||||
int flags,
|
||||
struct hashbuf *htp,
|
||||
struct sockaddr_in from),
|
||||
db_cmp(const struct databuf *, const struct databuf *),
|
||||
findMyZone(struct namebuf *np, int class);
|
||||
struct sockaddr_in from);
|
||||
int db_cmp(const struct databuf *, const struct databuf *);
|
||||
int findMyZone(struct namebuf *np, int class);
|
||||
void fixttl(struct databuf *dp);
|
||||
/* --from db_update.c-- */
|
||||
|
||||
/* ++from db_save.c++ */
|
||||
extern struct namebuf *savename(const char *, int);
|
||||
extern struct databuf *savedata(int, int, u_int32_t, u_char *, int);
|
||||
extern struct hashbuf *savehash(struct hashbuf *);
|
||||
struct namebuf * savename(const char *, int);
|
||||
struct databuf * savedata(int, int, u_int32_t, u_char *, int);
|
||||
struct hashbuf * savehash(struct hashbuf *);
|
||||
/* --from db_save.c-- */
|
||||
|
||||
/* ++from db_dump.c++ */
|
||||
extern int db_dump(struct hashbuf *, FILE *, int, char *),
|
||||
int db_dump(struct hashbuf *, FILE *, int, char *),
|
||||
zt_dump(FILE *);
|
||||
extern void doadump(void);
|
||||
void doadump(void);
|
||||
/* --from db_dump.c-- */
|
||||
|
||||
/* ++from db_load.c++ */
|
||||
extern int makename_ok(char *name, const char *origin, int class,
|
||||
int makename_ok(char *name, const char *origin, int class,
|
||||
struct zoneinfo *zp,
|
||||
enum transport transport,
|
||||
enum context context,
|
||||
const char *owner, const char *filename,
|
||||
int lineno, int size);
|
||||
extern void endline(FILE *);
|
||||
extern int getword(char *, size_t, FILE *, int),
|
||||
getttl(FILE *, const char *, int, u_int32_t *, int *),
|
||||
getnum(FILE *, const char *, int),
|
||||
db_load(const char *, const char *, struct zoneinfo *,
|
||||
void endline(FILE *);
|
||||
int getword(char *, size_t, FILE *, int);
|
||||
int getttl(FILE *, const char *, int, u_int32_t *, int *);
|
||||
int getnum(FILE *, const char *, int, int *);
|
||||
int db_load(const char *, const char *, struct zoneinfo *,
|
||||
const char *, int);
|
||||
extern int getnonblank(FILE *, const char *),
|
||||
getservices(int, char *, FILE *, const char *);
|
||||
extern char getprotocol(FILE *, const char *);
|
||||
extern int makename(char *, const char *, int);
|
||||
extern void db_err(int, char *, int, const char *, int);
|
||||
extern int parse_sec_rdata(char *inp, int inp_len, int inp_full,
|
||||
int getnonblank(FILE *, const char *, int);
|
||||
int getservices(int, char *, FILE *, const char *);
|
||||
char getprotocol(FILE *, const char *);
|
||||
int makename(char *, const char *, int);
|
||||
void db_err(int, char *, int, const char *, int);
|
||||
int parse_sec_rdata(char *inp, int inp_len, int inp_full,
|
||||
u_char *data, int data_len,
|
||||
FILE *fp, struct zoneinfo *zp,
|
||||
char *domain, u_int32_t ttl,
|
||||
@ -146,40 +146,37 @@ extern int parse_sec_rdata(char *inp, int inp_len, int inp_full,
|
||||
/* --from db_load.c-- */
|
||||
|
||||
/* ++from db_glue.c++ */
|
||||
extern void buildservicelist(void),
|
||||
destroyservicelist(void),
|
||||
buildprotolist(void),
|
||||
destroyprotolist(void),
|
||||
getname(struct namebuf *, char *, int);
|
||||
extern int servicenumber(const char *),
|
||||
protocolnumber(const char *),
|
||||
get_class(const char *);
|
||||
extern u_int nhash(const char *);
|
||||
extern const char *protocolname(int),
|
||||
*servicename(u_int16_t, const char *);
|
||||
#ifndef BSD
|
||||
extern int getdtablesize(void);
|
||||
#endif
|
||||
extern struct databuf *rm_datum(struct databuf *,
|
||||
struct namebuf *,
|
||||
struct databuf *,
|
||||
struct databuf **);
|
||||
extern struct namebuf *rm_name(struct namebuf *,
|
||||
struct namebuf **,
|
||||
struct namebuf *);
|
||||
extern void rm_hash(struct hashbuf *);
|
||||
extern void db_freedata(struct databuf *);
|
||||
extern void db_lame_add(char *zone, char *server, time_t when);
|
||||
extern time_t db_lame_find(char *zone, struct databuf *dp);
|
||||
extern void db_lame_clean(void);
|
||||
extern void db_lame_destroy(void);
|
||||
void buildservicelist(void);
|
||||
void destroyservicelist(void);
|
||||
void buildprotolist(void);
|
||||
void destroyprotolist(void);
|
||||
void getname(struct namebuf *, char *, int);
|
||||
int servicenumber(const char *);
|
||||
int protocolnumber(const char *);
|
||||
int get_class(const char *);
|
||||
u_int nhash(const char *);
|
||||
const char * protocolname(int);
|
||||
const char * servicename(u_int16_t, const char *);
|
||||
struct databuf * rm_datum(struct databuf *,
|
||||
struct namebuf *,
|
||||
struct databuf *,
|
||||
struct databuf **);
|
||||
struct namebuf * rm_name(struct namebuf *,
|
||||
struct namebuf **,
|
||||
struct namebuf *);
|
||||
void rm_hash(struct hashbuf *);
|
||||
void db_freedata(struct databuf *);
|
||||
void db_lame_add(char *zone, char *server, time_t when);
|
||||
time_t db_lame_find(char *zone, struct databuf *dp);
|
||||
void db_lame_clean(void);
|
||||
void db_lame_destroy(void);
|
||||
/* --from db_glue.c-- */
|
||||
|
||||
/* ++from db_lookup.c++ */
|
||||
extern struct namebuf *nlookup(const char *, struct hashbuf **,
|
||||
const char **, int);
|
||||
extern struct namebuf *np_parent __P((struct namebuf *));
|
||||
extern int match(struct databuf *, int, int),
|
||||
struct namebuf * nlookup(const char *, struct hashbuf **,
|
||||
const char **, int);
|
||||
struct namebuf * np_parent(struct namebuf *);
|
||||
int match(struct databuf *, int, int),
|
||||
nxtmatch(const char *, struct databuf *,
|
||||
struct databuf *),
|
||||
rrmatch(const char *, struct databuf *,
|
||||
@ -187,8 +184,8 @@ extern int match(struct databuf *, int, int),
|
||||
/* --from db_lookup.c-- */
|
||||
|
||||
/* ++from db_ixfr.c++ */
|
||||
extern ns_deltalist * ixfr_get_change_list(struct zoneinfo *, u_int32_t,
|
||||
u_int32_t);
|
||||
ns_deltalist * ixfr_get_change_list(struct zoneinfo *, u_int32_t,
|
||||
u_int32_t);
|
||||
int ixfr_have_log(struct zoneinfo *, u_int32_t,
|
||||
u_int32_t);
|
||||
/* --from db_ixfr.c++ */
|
||||
@ -204,6 +201,7 @@ int db_set_update(char *name, struct databuf *dp,
|
||||
int *rrcount, int line,
|
||||
const char *file);
|
||||
/* --from db_sec.c-- */
|
||||
|
||||
/* ++from db_tsig.c++ */
|
||||
char * tsig_alg_name(int value);
|
||||
int tsig_alg_value(char *name);
|
||||
|
@ -1,6 +1,6 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static const char sccsid[] = "@(#)db_glue.c 4.4 (Berkeley) 6/1/90";
|
||||
static const char rcsid[] = "$Id: db_glue.c,v 8.40 2000/04/21 06:54:02 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: db_glue.c,v 8.42 2000/12/23 08:14:35 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -345,17 +345,14 @@ rm_datum(struct databuf *dp, struct namebuf *np, struct databuf *pdp,
|
||||
np->n_data = ndp;
|
||||
else
|
||||
pdp->d_next = ndp;
|
||||
#ifdef BIND_UPDATE
|
||||
if (savedpp != NULL) {
|
||||
/* mark deleted or pending deletion */
|
||||
dp->d_mark |= D_MARK_DELETED;
|
||||
dp->d_next = *savedpp;
|
||||
DRCNTINC(dp);
|
||||
*savedpp = dp;
|
||||
} else
|
||||
dp->d_next = NULL;
|
||||
#else
|
||||
dp->d_next = NULL;
|
||||
#endif
|
||||
dp->d_flags &= ~DB_F_ACTIVE;
|
||||
DRCNTDEC(dp);
|
||||
if (dp->d_rcnt) {
|
||||
@ -381,10 +378,7 @@ rm_datum(struct databuf *dp, struct namebuf *np, struct databuf *pdp,
|
||||
"rm_datum: rcnt = %d", dp->d_rcnt);
|
||||
}
|
||||
} else
|
||||
#ifdef BIND_UPDATE
|
||||
if (savedpp == NULL)
|
||||
#endif
|
||||
db_freedata(dp);
|
||||
db_freedata(dp);
|
||||
return (ndp);
|
||||
}
|
||||
|
||||
@ -439,9 +433,6 @@ getname(struct namebuf *np, char *buf, int buflen) {
|
||||
while (np != NULL) {
|
||||
i = (int) NAMELEN(*np);
|
||||
if (i + 1 >= buflen) {
|
||||
*cp = '\0';
|
||||
ns_info(ns_log_db,
|
||||
"domain name too long: %s...", buf);
|
||||
strcpy(buf, "Name_Too_Long");
|
||||
return;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static char rcsid[] = "$Id: db_ixfr.c,v 8.20 2000/02/29 05:15:03 vixie Exp $";
|
||||
static char rcsid[] = "$Id: db_ixfr.c,v 8.23 2000/12/23 08:14:35 vixie Exp $";
|
||||
#endif
|
||||
|
||||
/*
|
||||
@ -370,10 +370,7 @@ ixfr_getdelta(struct zoneinfo *zp, FILE *fp, const char *filename, char *origin,
|
||||
ns_updque *listuprec, u_int32_t *old_serial,
|
||||
u_int32_t *new_serial)
|
||||
{
|
||||
static int read_soa, read_ns, rrcount;
|
||||
|
||||
char data[MAXDATA], dnbuf[MAXDNAME], sclass[3];
|
||||
const char *errtype = "Database";
|
||||
char *dname, *cp, *cp1;
|
||||
char buf[MAXDATA];
|
||||
u_int32_t serial, ttl;
|
||||
@ -388,7 +385,6 @@ ixfr_getdelta(struct zoneinfo *zp, FILE *fp, const char *filename, char *origin,
|
||||
int zonelist[MAXDNAME];
|
||||
struct databuf *dp;
|
||||
struct in_addr ina;
|
||||
struct sockaddr_in empty_from;
|
||||
int datasize;
|
||||
ns_updrec * rrecp;
|
||||
u_long l;
|
||||
@ -483,7 +479,7 @@ ixfr_getdelta(struct zoneinfo *zp, FILE *fp, const char *filename, char *origin,
|
||||
cp = fgets(buf, sizeof buf, fp);
|
||||
if (!cp)
|
||||
*buf = '\0';
|
||||
n = sscanf(cp, "origin %s class %s serial %ul",
|
||||
n = sscanf(cp, "origin %s class %s serial %lu",
|
||||
origin, sclass, &serial);
|
||||
if (n != 3 || ns_samename(origin, zp->z_origin) != 1)
|
||||
err++;
|
||||
@ -638,14 +634,15 @@ ixfr_getdelta(struct zoneinfo *zp, FILE *fp, const char *filename, char *origin,
|
||||
err++;
|
||||
break;
|
||||
}
|
||||
c = getnonblank(fp, zp->z_updatelog);
|
||||
c = getnonblank(fp, zp->z_updatelog, 0);
|
||||
if (c == '(') {
|
||||
multiline = 1;
|
||||
} else {
|
||||
multiline = 0;
|
||||
ungetc(c, fp);
|
||||
}
|
||||
n = getnum(fp, zp->z_updatelog, GETNUM_SERIAL);
|
||||
n = getnum(fp, zp->z_updatelog, GETNUM_SERIAL,
|
||||
&multiline);
|
||||
if (getnum_error) {
|
||||
err++;
|
||||
break;
|
||||
@ -665,11 +662,13 @@ ixfr_getdelta(struct zoneinfo *zp, FILE *fp, const char *filename, char *origin,
|
||||
n = l;
|
||||
PUTLONG(n, cp);
|
||||
}
|
||||
if (multiline &&
|
||||
getnonblank(fp, zp->z_updatelog) != ')')
|
||||
{
|
||||
err++;
|
||||
break;
|
||||
if (multiline) {
|
||||
c = getnonblank(fp, zp->z_updatelog, 1);
|
||||
if (c != ')') {
|
||||
ungetc(c, fp);
|
||||
err++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
endline(fp);
|
||||
n = cp - data;
|
||||
|
@ -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.104 2000/07/17 07:48:09 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: db_load.c,v 8.110 2001/01/25 05:50:53 marka Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -252,6 +252,7 @@ db_load(const char *filename, const char *in_origin,
|
||||
int genstart, genend, genstep;
|
||||
char *thisfile;
|
||||
void *state = NULL;
|
||||
int loggenerr;
|
||||
|
||||
empty_from.sin_family = AF_INET;
|
||||
empty_from.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
@ -270,6 +271,13 @@ db_load(const char *filename, const char *in_origin,
|
||||
/* Any updates should be saved before we attempt to reload. */
|
||||
INSIST((zp->z_flags & (Z_NEED_DUMP|Z_NEED_SOAUPDATE)) == 0);
|
||||
case Z_HINT:
|
||||
if(filename == NULL) {
|
||||
ns_error(ns_log_load,
|
||||
"Required filename not specified for Hint zone");
|
||||
zp->z_flags |= Z_DB_BAD;
|
||||
zp->z_ftime = 0;
|
||||
return (0);
|
||||
}
|
||||
transport = primary_trans;
|
||||
break;
|
||||
case Z_SECONDARY:
|
||||
@ -314,7 +322,10 @@ db_load(const char *filename, const char *in_origin,
|
||||
ns_warning(ns_log_load, "db_load could not open: %s: %s",
|
||||
filename, strerror(errno));
|
||||
zp->z_ftime = 0;
|
||||
return (-1);
|
||||
if (ininclude)
|
||||
return (-1);
|
||||
errs = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
if (zp->z_type == Z_HINT) {
|
||||
dbflags = DB_NODATA | DB_NOHINTS;
|
||||
@ -414,10 +425,21 @@ db_load(const char *filename, const char *in_origin,
|
||||
}
|
||||
if (!getword(genrhs, sizeof(genrhs), fp, 2))
|
||||
ERRTOZ("$GENERATE missing RHS");
|
||||
loggenerr = 1;
|
||||
for (i = genstart; i <= genend; i += genstep) {
|
||||
if (genname(genlhs, i, origin, domain,
|
||||
sizeof domain) == -1)
|
||||
ERRTOZ("$GENERATE genname LHS failed");
|
||||
if (!ns_samedomain(domain, zp->z_origin)) {
|
||||
/* Log first per $GENERATE. */
|
||||
if (loggenerr) {
|
||||
ns_info(ns_log_load,
|
||||
"%s:%d: $GENERATE LHS out of zone (ignored)",
|
||||
filename, lineno);
|
||||
loggenerr = 0;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
context = ns_ownercontext(type, transport);
|
||||
if (!ns_nameok(NULL, domain, class, zp, transport,
|
||||
context, domain, inaddr_any)) {
|
||||
@ -668,7 +690,7 @@ db_load(const char *filename, const char *in_origin,
|
||||
filename, lineno, domain,
|
||||
zp->z_origin);
|
||||
}
|
||||
c = getnonblank(fp, filename);
|
||||
c = getnonblank(fp, filename, 0);
|
||||
if (c == '(') {
|
||||
multiline = 1;
|
||||
} else {
|
||||
@ -677,7 +699,8 @@ db_load(const char *filename, const char *in_origin,
|
||||
}
|
||||
serial = zp->z_serial;
|
||||
zp->z_serial = getnum(fp, filename,
|
||||
GETNUM_SERIAL);
|
||||
GETNUM_SERIAL,
|
||||
&multiline);
|
||||
if (getnum_error)
|
||||
errs++;
|
||||
n = (u_int32_t) zp->z_serial;
|
||||
@ -750,7 +773,7 @@ db_load(const char *filename, const char *in_origin,
|
||||
ttl = n;
|
||||
n = cp - (char *)data;
|
||||
if (multiline) {
|
||||
buf[0] = getnonblank(fp, filename);
|
||||
buf[0] = getnonblank(fp, filename, 1);
|
||||
buf[1] = '\0';
|
||||
if (buf[0] != ')')
|
||||
ERRTO("SOA \")\"");
|
||||
@ -807,7 +830,8 @@ db_load(const char *filename, const char *in_origin,
|
||||
PUTSHORT((u_int16_t)n, cp);
|
||||
|
||||
/* Preference */
|
||||
n = getnum(fp, filename, GETNUM_NONE);
|
||||
n = getnum(fp, filename, GETNUM_NONE,
|
||||
&multiline);
|
||||
if (getnum_error || n > 65536)
|
||||
ERRTO("NAPTR Preference");
|
||||
PUTSHORT((u_int16_t)n, cp);
|
||||
@ -874,12 +898,14 @@ db_load(const char *filename, const char *in_origin,
|
||||
PUTSHORT((u_int16_t)n, cp);
|
||||
|
||||
if (type == ns_t_srv) {
|
||||
n = getnum(fp, filename, GETNUM_NONE);
|
||||
n = getnum(fp, filename, GETNUM_NONE,
|
||||
&multiline);
|
||||
if (getnum_error || n > 65536)
|
||||
ERRTO("SRV RR");
|
||||
PUTSHORT((u_int16_t)n, cp);
|
||||
|
||||
n = getnum(fp, filename, GETNUM_NONE);
|
||||
n = getnum(fp, filename, GETNUM_NONE,
|
||||
&multiline);
|
||||
if (getnum_error || n > 65536)
|
||||
ERRTO("SRV RR");
|
||||
PUTSHORT((u_int16_t)n, cp);
|
||||
@ -1095,19 +1121,27 @@ db_load(const char *filename, const char *in_origin,
|
||||
}
|
||||
errs += purge_nonglue(zp->z_origin,
|
||||
(dataflags & DB_F_HINT) ? fcachetab :
|
||||
hashtab, zp->z_class);
|
||||
hashtab, zp->z_class,
|
||||
zp->z_type == z_master);
|
||||
cleanup:
|
||||
while (filenames) {
|
||||
fn = filenames;
|
||||
filenames = filenames->next;
|
||||
freestr(fn->name);
|
||||
memput(fn, sizeof *fn);
|
||||
}
|
||||
if (errs != 0)
|
||||
ns_warning(ns_log_load,
|
||||
if (errs != 0) {
|
||||
if (errs != -1)
|
||||
ns_warning(ns_log_load,
|
||||
"%s zone \"%s\" (%s) rejected due to errors (serial %u)",
|
||||
zoneTypeString(zp->z_type), zp->z_origin,
|
||||
p_class(zp->z_class), zp->z_serial);
|
||||
else
|
||||
zoneTypeString(zp->z_type),
|
||||
zp->z_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);
|
||||
} else
|
||||
ns_info(ns_log_load,
|
||||
"%s zone \"%s\" (%s) loaded (serial %u)",
|
||||
zoneTypeString(zp->z_type), zp->z_origin,
|
||||
@ -1366,7 +1400,7 @@ getttl(FILE *fp, const char *fn, int lineno, u_int32_t *ttl, int *multiline) {
|
||||
return (-1);
|
||||
}
|
||||
if (*multiline) {
|
||||
ch = getnonblank(fp, fn);
|
||||
ch = getnonblank(fp, fn, 1);
|
||||
if (ch == EOF)
|
||||
return (-1);
|
||||
if (ch == ';')
|
||||
@ -1447,7 +1481,7 @@ getallwords(char *buf, size_t size, FILE *fp, int preserve) {
|
||||
}
|
||||
|
||||
int
|
||||
getnum(FILE *fp, const char *src, int opt) {
|
||||
getnum(FILE *fp, const char *src, int opt, int *multiline) {
|
||||
int c, n;
|
||||
int seendigit = 0;
|
||||
int seendecimal = 0;
|
||||
@ -1461,8 +1495,12 @@ getnum(FILE *fp, const char *src, int opt) {
|
||||
#endif
|
||||
for (n = 0; (c = getc(fp)) != EOF; ) {
|
||||
if (isspace(c)) {
|
||||
if (c == '\n')
|
||||
lineno++;
|
||||
if (c == '\n') {
|
||||
if (*multiline)
|
||||
lineno++;
|
||||
else if (!seendigit)
|
||||
goto eol;
|
||||
}
|
||||
if (seendigit)
|
||||
break;
|
||||
continue;
|
||||
@ -1470,8 +1508,12 @@ getnum(FILE *fp, const char *src, int opt) {
|
||||
if (c == ';') {
|
||||
while ((c = getc(fp)) != EOF && c != '\n')
|
||||
;
|
||||
if (c == '\n')
|
||||
lineno++;
|
||||
if (c == '\n') {
|
||||
if (*multiline)
|
||||
lineno++;
|
||||
else if (!seendigit)
|
||||
goto eol;
|
||||
}
|
||||
if (seendigit)
|
||||
break;
|
||||
continue;
|
||||
@ -1541,32 +1583,50 @@ getnum(FILE *fp, const char *src, int opt) {
|
||||
src, lineno, n+m);
|
||||
}
|
||||
return (n + m);
|
||||
|
||||
eol:
|
||||
ns_error(ns_log_db, "%s:%d: unexpected end of line", src, lineno);
|
||||
getnum_error = 1;
|
||||
(void) ungetc(c, fp);
|
||||
return (0);
|
||||
}
|
||||
|
||||
#ifndef BIND_UPDATE
|
||||
static
|
||||
#endif
|
||||
int
|
||||
getnonblank(FILE *fp, const char *src) {
|
||||
getnonblank(FILE *fp, const char *src, int multiline) {
|
||||
int c;
|
||||
|
||||
while ((c = getc(fp)) != EOF) {
|
||||
if (isspace(c)) {
|
||||
if (c == '\n')
|
||||
lineno++;
|
||||
if (c == '\n') {
|
||||
if (multiline)
|
||||
lineno++;
|
||||
else
|
||||
goto eol;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (c == ';') {
|
||||
while ((c = getc(fp)) != EOF && c != '\n')
|
||||
;
|
||||
if (c == '\n')
|
||||
lineno++;
|
||||
if (c == '\n') {
|
||||
if (multiline)
|
||||
lineno++;
|
||||
else
|
||||
goto eol;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
return (c);
|
||||
}
|
||||
ns_info(ns_log_db, "%s:%d: unexpected EOF", src, lineno);
|
||||
return (EOF);
|
||||
eol:
|
||||
ns_error(ns_log_db, "%s:%d: unexpected end of line", src, lineno);
|
||||
/* don't ungetc(c, fp); as the caller will do this. */
|
||||
return(c);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -2118,7 +2178,7 @@ parse_sig_rr(char *buf, int buf_len, u_char *data, int data_size,
|
||||
} else {
|
||||
/* Parse and output OTTL; scan TEXP */
|
||||
origTTL = wordtouint32(buf);
|
||||
if (0 >= origTTL || wordtouint32_error ||
|
||||
if (origTTL >= 0 || wordtouint32_error ||
|
||||
(origTTL > 0x7fffffff))
|
||||
ERRTO("Original TTL value bad");
|
||||
cp = &data[i];
|
||||
|
@ -1,6 +1,6 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static const char sccsid[] = "@(#)db_save.c 4.16 (Berkeley) 3/21/91";
|
||||
static const char rcsid[] = "$Id: db_save.c,v 8.27 2000/04/21 06:54:03 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: db_save.c,v 8.28 2000/11/29 06:55:48 marka Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -156,7 +156,7 @@ savedata(class, type, ttl, data, size)
|
||||
dp->d_clev = 0;
|
||||
dp->d_secure = DB_S_INSECURE;
|
||||
dp->d_rcode = NOERROR;
|
||||
dp->d_ns = NULL;
|
||||
dp->d_addr.s_addr = htonl(0);
|
||||
dp->d_nstime = 0;
|
||||
memcpy(dp->d_data, data, dp->d_size);
|
||||
return (dp);
|
||||
|
@ -1,6 +1,6 @@
|
||||
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static const char rcsid[] = "$Id: db_sec.c,v 8.31 2000/04/21 06:54:04 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: db_sec.c,v 8.32 2000/12/23 08:14:36 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -572,7 +572,7 @@ verify_set(struct db_rrset *rrset) {
|
||||
namefield == NS_KEY_NAME_RESERVED)
|
||||
continue;
|
||||
if (namefield == NS_KEY_NAME_ENTITY &&
|
||||
(key->dk_flags & NS_KEY_SIGNATORYMASK == 0))
|
||||
(key->dk_flags & NS_KEY_SIGNATORYMASK) == 0)
|
||||
continue;
|
||||
|
||||
/*
|
||||
|
@ -1,6 +1,6 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static const char sccsid[] = "@(#)db_update.c 4.28 (Berkeley) 3/21/91";
|
||||
static const char rcsid[] = "$Id: db_update.c,v 8.42 2000/04/21 06:54:04 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: db_update.c,v 8.45 2000/12/23 08:14:36 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -583,7 +583,7 @@ db_update(const char *name,
|
||||
goto delete;
|
||||
if (dp->d_type == T_CNAME &&
|
||||
!NS_OPTION_P(OPTION_MULTIPLE_CNAMES) &&
|
||||
db_cmp(dp, odp) != 0)
|
||||
db_cmp(dp, odp) != 0) {
|
||||
if ((flags & DB_REPLACE) == 0 &&
|
||||
zones[dp->d_zone].z_type ==
|
||||
Z_PRIMARY) {
|
||||
@ -593,6 +593,7 @@ db_update(const char *name,
|
||||
return (CNAMEANDOTHER);
|
||||
} else
|
||||
goto delete;
|
||||
}
|
||||
#if 0
|
||||
/* BEW - this _seriously_ breaks DNSSEC. Is it necessary for dynamic update? */
|
||||
#ifdef BIND_UPDATE
|
||||
@ -751,10 +752,9 @@ db_update(const char *name,
|
||||
ns_debug(ns_log_db, 3, "db_update: adding%s %#x",
|
||||
(newdp->d_flags&DB_F_HINT) ? " hint":"", newdp);
|
||||
|
||||
if (NS_OPTION_P(OPTION_HOSTSTATS) &&
|
||||
newdp->d_zone == DB_Z_CACHE &&
|
||||
if (newdp->d_zone == DB_Z_CACHE &&
|
||||
(newdp->d_flags & DB_F_HINT) == 0)
|
||||
newdp->d_ns = nameserFind(from.sin_addr, NS_F_INSERT);
|
||||
newdp->d_addr = from.sin_addr;
|
||||
|
||||
/* Add to end of list, generally preserving order */
|
||||
newdp->d_next = NULL;
|
||||
@ -937,10 +937,8 @@ db_cmp(const struct databuf *dp1, const struct databuf *dp2) {
|
||||
cp1 += t1; cp2 += t2;
|
||||
|
||||
/* Replacement */
|
||||
t1 = strlen((char *)cp1); t2 = strlen((char *)cp2);
|
||||
if (t1 != t2 || memcmp(cp1, cp2, t1))
|
||||
if (ns_samename((char *)cp1, (char *)cp2) != 1)
|
||||
return (1);
|
||||
cp1 += t1 + 1; cp2 += t2 + 1;
|
||||
|
||||
/* they all checked out! */
|
||||
return (0);
|
||||
|
@ -1,5 +1,5 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static const char rcsid[] = "$Id: ns_config.c,v 8.114 2000/04/23 02:18:58 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: ns_config.c,v 8.118 2000/12/23 08:14:37 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -1134,6 +1134,7 @@ new_options() {
|
||||
op->stats_interval = 3600;
|
||||
op->ordering = NULL;
|
||||
op->max_ncache_ttl = DEFAULT_MAX_NCACHE_TTL;
|
||||
op->max_host_stats = 0;
|
||||
op->lame_ttl = NTTL;
|
||||
op->heartbeat_interval = 3600;
|
||||
op->max_log_size_ixfr = 20;
|
||||
@ -1189,6 +1190,9 @@ set_boolean_option(u_int *op_flags, int bool_opt, int value) {
|
||||
INSIST(op_flags != NULL);
|
||||
|
||||
switch (bool_opt) {
|
||||
#ifdef HITCOUNTS
|
||||
case OPTION_HITCOUNT:
|
||||
#endif /* HITCOUNTS */
|
||||
case OPTION_NORECURSE:
|
||||
case OPTION_NOFETCHGLUE:
|
||||
case OPTION_FORWARD_ONLY:
|
||||
@ -1743,7 +1747,6 @@ free_rrset_order_list(rrset_order_list rol) {
|
||||
memput(rol, sizeof (*rol));
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
add_to_rrset_order_list(rrset_order_list rol, rrset_order_element roe) {
|
||||
INSIST(rol != NULL);
|
||||
@ -2956,7 +2959,7 @@ init_default_log_channels() {
|
||||
char *name;
|
||||
FILE *stream;
|
||||
|
||||
syslog_channel = log_new_syslog_channel(0, log_info, LOG_DAEMON);
|
||||
syslog_channel = log_new_syslog_channel(0, log_info, ISC_FACILITY);
|
||||
if (syslog_channel == NULL || log_inc_references(syslog_channel) < 0)
|
||||
ns_panic(ns_log_config, 0, "couldn't create syslog_channel");
|
||||
|
||||
@ -3070,8 +3073,10 @@ shutdown_configuration() {
|
||||
config_initialized = 0;
|
||||
}
|
||||
|
||||
void
|
||||
time_t
|
||||
load_configuration(const char *filename) {
|
||||
time_t mtime;
|
||||
|
||||
REQUIRE(config_initialized);
|
||||
|
||||
ns_debug(ns_log_config, 3, "load configuration %s", filename);
|
||||
@ -3089,7 +3094,7 @@ load_configuration(const char *filename) {
|
||||
options_installed = 0;
|
||||
logging_installed = 0;
|
||||
|
||||
parse_configuration(filename);
|
||||
mtime = parse_configuration(filename);
|
||||
|
||||
/*
|
||||
* If the user didn't specify logging or options, but they previously
|
||||
@ -3123,4 +3128,5 @@ load_configuration(const char *filename) {
|
||||
loading = 0;
|
||||
/* release queued notifies */
|
||||
notify_afterload();
|
||||
return (mtime);
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static const char rcsid[] = "$Id: ns_ctl.c,v 8.34 2000/04/21 06:54:05 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: ns_ctl.c,v 8.39 2000/12/19 23:31:38 marka Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -154,7 +154,7 @@ static struct ctl_verb verbs[] = {
|
||||
{ "reload", verb_reload, "reload [zone] ..."},
|
||||
{ "reconfig", verb_reconfig, "reconfig [-noexpired] (just sees new/gone zones)"},
|
||||
{ "dumpdb", verb_dumpdb, "dumpdb"},
|
||||
{ "stats", verb_stats, "stats"},
|
||||
{ "stats", verb_stats, "stats [clear]"},
|
||||
{ "trace", verb_trace, "trace [level]"},
|
||||
{ "notrace", verb_notrace, "notrace"},
|
||||
{ "querylog", verb_querylog, "querylog"},
|
||||
@ -271,6 +271,7 @@ ns_ctl_install(controls *new) {
|
||||
/* Add any new controls which were found. */
|
||||
for (ctl = HEAD(*new); ctl != NULL; ctl = next) {
|
||||
next = NEXT(ctl, link);
|
||||
UNLINK(*new, ctl, link);
|
||||
APPEND(server_controls, ctl, link);
|
||||
install(ctl);
|
||||
if (ctl->sctx == NULL)
|
||||
@ -636,6 +637,7 @@ getpid_closure(struct ctl_sctx *sctx, struct ctl_sess *sess, void *uap) {
|
||||
|
||||
enum state {
|
||||
e_version = 0,
|
||||
e_config,
|
||||
e_nzones,
|
||||
e_debug,
|
||||
e_xfersrun,
|
||||
@ -643,7 +645,6 @@ enum state {
|
||||
e_qserials,
|
||||
e_qrylog,
|
||||
e_priming,
|
||||
e_loading,
|
||||
e_finito
|
||||
};
|
||||
|
||||
@ -666,7 +667,7 @@ verb_status(struct ctl_sctx *ctl, struct ctl_sess *sess,
|
||||
0, NULL, NULL, NULL, NULL, 0);
|
||||
return;
|
||||
}
|
||||
pvt->state = e_version;
|
||||
pvt->state = (enum state)0;
|
||||
(void)ctl_setcsctx(sess, pvt);
|
||||
}
|
||||
switch (pvt->state++) {
|
||||
@ -674,6 +675,10 @@ verb_status(struct ctl_sctx *ctl, struct ctl_sess *sess,
|
||||
strncpy(pvt->text, Version, sizeof pvt->text);
|
||||
pvt->text[sizeof pvt->text - 1] = '\0';
|
||||
break;
|
||||
case e_config:
|
||||
sprintf(pvt->text, "config (%s) last loaded at age: %24s",
|
||||
conffile, ctime(&confmtime));
|
||||
break;
|
||||
case e_nzones:
|
||||
sprintf(pvt->text, "number of zones allocated: %d", nzones);
|
||||
break;
|
||||
@ -695,12 +700,10 @@ verb_status(struct ctl_sctx *ctl, struct ctl_sess *sess,
|
||||
qrylog ? "ON" : "OFF");
|
||||
break;
|
||||
case e_priming:
|
||||
sprintf(pvt->text, "server is %s priming",
|
||||
priming ? "STILL" : "DONE");
|
||||
break;
|
||||
case e_loading:
|
||||
sprintf(pvt->text, "server %s loading its configuration",
|
||||
loading ? "IS" : "IS NOT");
|
||||
if (priming)
|
||||
sprintf(pvt->text, "server is initialising itself");
|
||||
else
|
||||
sprintf(pvt->text, "server is up and running");
|
||||
break;
|
||||
case e_finito:
|
||||
return;
|
||||
@ -861,9 +864,15 @@ verb_stats(struct ctl_sctx *ctl, struct ctl_sess *sess,
|
||||
const struct ctl_verb *verb, const char *rest,
|
||||
u_int respflags, void *respctx, void *uctx)
|
||||
{
|
||||
ns_need(main_need_statsdump);
|
||||
ctl_response(sess, 250, "Statistics dump initiated.",
|
||||
0, NULL, NULL, NULL, NULL, 0);
|
||||
if (rest != NULL && strcmp(rest, "clear") == 0) {
|
||||
ns_need(main_need_statsdumpandclear);
|
||||
ctl_response(sess, 250, "Statistics dump and clear initiated.",
|
||||
0, NULL, NULL, NULL, NULL, 0);
|
||||
} else {
|
||||
ns_need(main_need_statsdump);
|
||||
ctl_response(sess, 250, "Statistics dump initiated.",
|
||||
0, NULL, NULL, NULL, NULL, 0);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* from ns.h 4.33 (Berkeley) 8/23/90
|
||||
* $Id: ns_defs.h,v 8.96 2000/04/21 06:54:06 vixie Exp $
|
||||
* $Id: ns_defs.h,v 8.102 2000/12/01 05:35:48 vixie Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -143,6 +143,9 @@
|
||||
#define DEFAULT_XFERS_RUNNING 10 /* default value of transfers_in */
|
||||
#define DEFAULT_XFERS_PER_NS 2 /* default # of xfers per peer nameserver */
|
||||
#define XFER_BUFSIZE (16*1024) /* arbitrary but bigger than most MTU's */
|
||||
#define MAX_SYNCDELAY 3 /* Presumed timeout in use by our clients. */
|
||||
#define MAX_SYNCDRAIN 100000 /* How long we'll spin in drain_all_rcvbuf. */
|
||||
#define MAX_SYNCSTORE 500
|
||||
|
||||
/* maximum time to cache negative answers */
|
||||
#define DEFAULT_MAX_NCACHE_TTL (3*60*60)
|
||||
@ -160,6 +163,7 @@ typedef enum need {
|
||||
main_need_zoneload, /* loadxfer() needed. */
|
||||
main_need_dump, /* doadump() needed. */
|
||||
main_need_statsdump, /* ns_stats() needed. */
|
||||
main_need_statsdumpandclear, /* ns_stats() needed. */
|
||||
main_need_exit, /* exit() needed. */
|
||||
main_need_qrylog, /* toggle_qrylog() needed. */
|
||||
main_need_debug, /* use_desired_debug() needed. */
|
||||
@ -190,6 +194,8 @@ typedef enum need {
|
||||
#define OPTION_TREAT_CR_AS_SPACE 0x1000 /* Treat CR in zone files as space */
|
||||
#define OPTION_USE_IXFR 0x2000 /* Use by delault ixfr in zone transfer */
|
||||
#define OPTION_MAINTAIN_IXFR_BASE 0x4000 /* Part of IXFR file name logic. */
|
||||
#define OPTION_HITCOUNT 0x8000 /* Keep track of each time an RR gets
|
||||
* hit in the database */
|
||||
|
||||
#define DEFAULT_OPTION_FLAGS (OPTION_NODIALUP|OPTION_NONAUTH_NXDOMAIN|\
|
||||
OPTION_USE_ID_POOL|OPTION_NORFC2308_TYPE1)
|
||||
@ -671,8 +677,8 @@ struct nameser {
|
||||
u_int32_t rtt; /* round trip time */
|
||||
/* XXX - need to add more stuff from "struct qserv", and use our rtt */
|
||||
u_int16_t flags; /* see below */
|
||||
#endif
|
||||
u_int8_t xfers; /* #/xfers running right now */
|
||||
#endif
|
||||
};
|
||||
|
||||
enum transport { primary_trans, secondary_trans, response_trans, update_trans,
|
||||
@ -764,6 +770,7 @@ typedef struct options {
|
||||
rrset_order_list ordering;
|
||||
int heartbeat_interval;
|
||||
u_int max_ncache_ttl;
|
||||
u_int max_host_stats;
|
||||
u_int lame_ttl;
|
||||
int minroots;
|
||||
} *options;
|
||||
|
@ -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.75 2000/05/09 07:12:58 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: ns_forw.c,v 8.78 2000/12/23 08:14:37 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -375,6 +375,8 @@ nslookupComplain(const char *sysloginfo, const char *queryname,
|
||||
ns_debug(ns_log_default, 2, "NS '%s' %s", dname, complaint);
|
||||
if (sysloginfo && queryname && !haveComplained((u_long)queryname,
|
||||
(u_long)complaint)) {
|
||||
char nsbuf[20], abuf[20];
|
||||
|
||||
a = ns = (char *)NULL;
|
||||
print_a = (a_rr->d_type == T_A);
|
||||
a_type = p_type(a_rr->d_type);
|
||||
@ -389,25 +391,21 @@ nslookupComplain(const char *sysloginfo, const char *queryname,
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (NS_OPTION_P(OPTION_HOSTSTATS)) {
|
||||
char nsbuf[20], abuf[20];
|
||||
|
||||
if (nsdp != NULL) {
|
||||
if (nsdp->d_ns != NULL) {
|
||||
strcpy(nsbuf,
|
||||
inet_ntoa(nsdp->d_ns->addr));
|
||||
ns = nsbuf;
|
||||
} else {
|
||||
ns = zones[nsdp->d_zone].z_origin;
|
||||
}
|
||||
}
|
||||
if (a_rr->d_ns != NULL) {
|
||||
strcpy(abuf, inet_ntoa(a_rr->d_ns->addr));
|
||||
a = abuf;
|
||||
if (nsdp != NULL) {
|
||||
if (nsdp->d_addr.s_addr != htonl(0)) {
|
||||
strcpy(nsbuf,
|
||||
inet_ntoa(nsdp->d_addr));
|
||||
ns = nsbuf;
|
||||
} else {
|
||||
a = zones[a_rr->d_zone].z_origin;
|
||||
ns = zones[nsdp->d_zone].z_origin;
|
||||
}
|
||||
}
|
||||
if (a_rr->d_addr.s_addr != htonl(0)) {
|
||||
strcpy(abuf, inet_ntoa(a_rr->d_addr));
|
||||
a = abuf;
|
||||
} else {
|
||||
a = zones[a_rr->d_zone].z_origin;
|
||||
}
|
||||
if (a != NULL || ns != NULL)
|
||||
ns_info(ns_log_default,
|
||||
"%s: query(%s) %s (%s:%s) learnt (%s=%s:NS=%s)",
|
||||
@ -677,7 +675,6 @@ nslookup(struct databuf *nsp[], struct qinfo *qp,
|
||||
skipserver:
|
||||
(void)NULL;
|
||||
}
|
||||
out:
|
||||
ns_debug(ns_log_default, 3, "nslookup: %d ns addrs total", n);
|
||||
qp->q_naddr = n;
|
||||
if (n == 0 && potential_ns == 0 && !NS_ZFWDTAB(qp->q_fzone)) {
|
||||
@ -766,14 +763,17 @@ int
|
||||
qcomp(struct qserv *qs1, struct qserv *qs2) {
|
||||
u_int rtt1, rtt2, rttr1, rttr2;
|
||||
|
||||
if (qs1->nsdata == NULL || qs2->nsdata == NULL) {
|
||||
if (qs1->nsdata == NULL) {
|
||||
rtt1 = 0;
|
||||
rttr1 = 0;
|
||||
rtt2 = 0;
|
||||
rttr2 = 0;
|
||||
} else {
|
||||
rtt1 = qs1->nsdata->d_nstime;
|
||||
rttr1 = RTTROUND(rtt1);
|
||||
}
|
||||
if (qs2->nsdata == NULL) {
|
||||
rtt2 = 0;
|
||||
rttr2 = 0;
|
||||
} else {
|
||||
rtt2 = qs2->nsdata->d_nstime;
|
||||
rttr2 = RTTROUND(rtt2);
|
||||
}
|
||||
@ -979,7 +979,7 @@ retry(struct qinfo *qp) {
|
||||
#ifdef DEBUG
|
||||
if (debug >= 10)
|
||||
res_pquery(&res, qp->q_msg, n,
|
||||
log_get_stream(packet_channel));
|
||||
log_get_stream(packet_channel));
|
||||
#endif
|
||||
if (send_msg((u_char *)hp, n, qp)) {
|
||||
ns_debug(ns_log_default, 1,
|
||||
@ -1013,7 +1013,7 @@ retry(struct qinfo *qp) {
|
||||
#ifdef DEBUG
|
||||
if (debug >= 10)
|
||||
res_pquery(&res, qp->q_msg, qp->q_msglen,
|
||||
log_get_stream(packet_channel));
|
||||
log_get_stream(packet_channel));
|
||||
#endif
|
||||
key = tsig_key_from_addr(nsa->sin_addr);
|
||||
if (key != NULL) {
|
||||
@ -1258,13 +1258,13 @@ nsfwdadd(struct qinfo *qp, struct fwdinfo *fwd) {
|
||||
nextfwd:
|
||||
fwd = fwd->next;
|
||||
}
|
||||
qp->q_naddr = n;
|
||||
|
||||
/* Update the refcounts before the sort. */
|
||||
for (i = 0; i < (u_int)n; i++) {
|
||||
for (i = qp->q_naddr; i < (u_int)n; i++) {
|
||||
DRCNTINC(qp->q_addr[i].nsdata);
|
||||
DRCNTINC(qp->q_addr[i].ns);
|
||||
}
|
||||
qp->q_naddr = n;
|
||||
if (n > 1) {
|
||||
qsort((char *)qp->q_addr, n, sizeof(struct qserv),
|
||||
(int (*)(const void *, const void *))qcomp);
|
||||
|
@ -90,42 +90,42 @@
|
||||
|
||||
/* ns_func.h - declarations for ns_*.c's externally visible functions
|
||||
*
|
||||
* $Id: ns_func.h,v 8.96 2000/04/21 06:54:06 vixie Exp $
|
||||
* $Id: ns_func.h,v 8.104 2001/01/25 05:50:54 marka Exp $
|
||||
*/
|
||||
|
||||
/* ++from ns_glue.c++ */
|
||||
extern struct in_addr ina_get(const u_char *data);
|
||||
extern const char *sin_ntoa(struct sockaddr_in);
|
||||
extern int ns_wouldlog(int category, int level);
|
||||
extern void ns_debug(int, int, const char *, ...),
|
||||
ns_info(int, const char *, ...),
|
||||
ns_notice(int, const char *, ...),
|
||||
ns_warning(int, const char *, ...),
|
||||
ns_error(int, const char *, ...),
|
||||
ns_panic(int, int, const char *, ...),
|
||||
ns_assertion_failed(char *file, int line,
|
||||
struct in_addr ina_get(const u_char *data);
|
||||
const char * sin_ntoa(struct sockaddr_in);
|
||||
int ns_wouldlog(int category, int level);
|
||||
void ns_debug(int, int, const char *, ...);
|
||||
void ns_info(int, const char *, ...);
|
||||
void ns_notice(int, const char *, ...);
|
||||
void ns_warning(int, const char *, ...);
|
||||
void ns_error(int, const char *, ...);
|
||||
void ns_panic(int, int, const char *, ...);
|
||||
void ns_assertion_failed(char *file, int line,
|
||||
assertion_type type, char *cond,
|
||||
int print_errno);
|
||||
extern void panic(const char *, const void *),
|
||||
gettime(struct timeval *);
|
||||
extern int nlabels(const char *),
|
||||
my_close(int),
|
||||
my_fclose(FILE *);
|
||||
extern void __freestr(char *);
|
||||
extern char *__newstr(size_t, int),
|
||||
*__savestr(const char *, int),
|
||||
*checked_ctime(const time_t *t),
|
||||
*ctimel(long);
|
||||
extern void __freestr_record(char *, char *, int);
|
||||
extern char *__newstr_record(size_t, int, char *, int);
|
||||
extern char *__savestr_record(const char *, int, char *, int);
|
||||
extern u_char *ina_put(struct in_addr ina, u_char *data),
|
||||
*savebuf(const u_char *, size_t, int);
|
||||
extern void dprintf(int level, const char *format, ...);
|
||||
void panic(const char *, const void *);
|
||||
void gettime(struct timeval *);
|
||||
int nlabels(const char *);
|
||||
int my_close(int);
|
||||
int my_fclose(FILE *);
|
||||
void __freestr(char *);
|
||||
char * __newstr(size_t, int);
|
||||
char * __savestr(const char *, int);
|
||||
char * checked_ctime(const time_t *t);
|
||||
char * ctimel(long);
|
||||
void __freestr_record(char *, char *, int);
|
||||
char * __newstr_record(size_t, int, char *, int);
|
||||
char * __savestr_record(const char *, int, 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, ...);
|
||||
#ifdef DEBUG_STRINGS
|
||||
extern char *debug_newstr(size_t, int, const char *, int),
|
||||
*debug_savestr(const char *, int, const char *, int);
|
||||
extern void debug_freestr(char *, const char *, int);
|
||||
char * debug_newstr(size_t, int, const char *, int);
|
||||
char * debug_savestr(const char *, int, const char *, int);
|
||||
void debug_freestr(char *, const char *, int);
|
||||
#define newstr(l, n) debug_newstr((l), (n), __FILE__, __LINE__)
|
||||
#define savestr(s, n) debug_savestr((s), (n), __FILE__, __LINE__)
|
||||
#define freestr(s) debug_freestr((s), __FILE__, __LINE__)
|
||||
@ -140,7 +140,6 @@ extern void debug_freestr(char *, const char *, int);
|
||||
#define freestr(s) __freestr((s))
|
||||
#endif
|
||||
#endif /* DEBUG_STRINGS */
|
||||
int movefile(const char *, const char *);
|
||||
/* --from ns_glue.c-- */
|
||||
|
||||
/* ++from ns_notify.c++ */
|
||||
@ -153,43 +152,43 @@ void ns_stopnotify(const char *, ns_class);
|
||||
/* --from ns_notify.c-- */
|
||||
|
||||
/* ++from ns_resp.c++ */
|
||||
extern void ns_resp(u_char *, int, struct sockaddr_in,
|
||||
struct qstream *),
|
||||
prime_cache(void),
|
||||
delete_all(struct namebuf *, int, int);
|
||||
extern int delete_stale(struct namebuf *);
|
||||
extern struct qinfo *sysquery(const char *, int, int,
|
||||
struct in_addr *, int, u_int16_t, int);
|
||||
extern int doupdate(u_char *, u_char *, struct databuf **,
|
||||
int, int, int, u_int, struct sockaddr_in),
|
||||
send_msg(u_char *, int, struct qinfo *),
|
||||
findns(struct namebuf **, int,
|
||||
struct databuf **, int *, int),
|
||||
finddata(struct namebuf *, int, int, HEADER *,
|
||||
char **, int *, int *),
|
||||
add_data(struct namebuf *,
|
||||
void ns_resp(u_char *, int, struct sockaddr_in,
|
||||
struct qstream *);
|
||||
void prime_cache(void);
|
||||
void delete_all(struct namebuf *, int, int);
|
||||
int delete_stale(struct namebuf *);
|
||||
struct qinfo * sysquery(const char *, int, int,
|
||||
struct in_addr *, int, u_int16_t, int);
|
||||
int doupdate(u_char *, u_char *, struct databuf **,
|
||||
int, int, int, u_int, struct sockaddr_in);
|
||||
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 *);
|
||||
int add_data(struct namebuf *,
|
||||
struct databuf **,
|
||||
u_char *, int, int *),
|
||||
trunc_adjust(u_char *, int, int);
|
||||
u_char *, int, int *);
|
||||
int trunc_adjust(u_char *, int, int);
|
||||
/* --from ns_resp.c-- */
|
||||
|
||||
/* ++from ns_req.c++ */
|
||||
extern void ns_req(u_char *, int, int,
|
||||
void ns_req(u_char *, int, int,
|
||||
struct qstream *,
|
||||
struct sockaddr_in,
|
||||
int),
|
||||
free_addinfo(void),
|
||||
free_nsp(struct databuf **);
|
||||
extern int stale(struct databuf *),
|
||||
make_rr(const char *, struct databuf *,
|
||||
int);
|
||||
void free_addinfo(void);
|
||||
void free_nsp(struct databuf **);
|
||||
int stale(struct databuf *);
|
||||
int make_rr(const char *, struct databuf *,
|
||||
u_char *, int, int,
|
||||
u_char **, u_char **, int),
|
||||
doaddinfo(HEADER *, u_char *, int),
|
||||
doaddauth(HEADER *, u_char *, int,
|
||||
u_char **, u_char **, int);
|
||||
int doaddinfo(HEADER *, u_char *, int);
|
||||
int doaddauth(HEADER *, u_char *, int,
|
||||
struct namebuf *,
|
||||
struct databuf *);
|
||||
#ifdef BIND_NOTIFY
|
||||
extern int findZonePri(const struct zoneinfo *,
|
||||
int findZonePri(const struct zoneinfo *,
|
||||
const struct sockaddr_in);
|
||||
#endif
|
||||
/* --from ns_req.c-- */
|
||||
@ -198,12 +197,12 @@ extern int findZonePri(const struct zoneinfo *,
|
||||
void ns_xfr(struct qstream *qsp, struct namebuf *znp,
|
||||
int zone, int class, int type,
|
||||
int id, int opcode, u_int32_t serial_ixfr,
|
||||
struct tsig_record *in_tsig),
|
||||
ns_stopxfrs(struct zoneinfo *),
|
||||
ns_freexfr(struct qstream *),
|
||||
sx_newmsg(struct qstream *qsp),
|
||||
sx_sendlev(struct qstream *qsp),
|
||||
sx_sendsoa(struct qstream *qsp);
|
||||
struct tsig_record *in_tsig);
|
||||
void ns_stopxfrs(struct zoneinfo *);
|
||||
void ns_freexfr(struct qstream *);
|
||||
void sx_newmsg(struct qstream *qsp);
|
||||
void sx_sendlev(struct qstream *qsp);
|
||||
void sx_sendsoa(struct qstream *qsp);
|
||||
/* --from ns_xfr.c-- */
|
||||
|
||||
/* ++from ns_ctl.c++ */
|
||||
@ -219,12 +218,13 @@ void ns_ctl_install(controls *);
|
||||
/* --from ns_ctl.c-- */
|
||||
|
||||
/* ++from ns_ixfr.c++ */
|
||||
void sx_send_ixfr(struct qstream *qsp);
|
||||
void sx_send_ixfr(struct qstream *);
|
||||
int ixfr_log_maint(struct zoneinfo *);
|
||||
/* --from ns_ixfr.c-- */
|
||||
|
||||
/* ++from ns_forw.c++ */
|
||||
extern time_t retrytime(struct qinfo *);
|
||||
extern int ns_forw(struct databuf *nsp[],
|
||||
time_t retrytime(struct qinfo *);
|
||||
int ns_forw(struct databuf *nsp[],
|
||||
u_char *msg,
|
||||
int msglen,
|
||||
struct sockaddr_in from,
|
||||
@ -236,139 +236,142 @@ extern int ns_forw(struct databuf *nsp[],
|
||||
int type,
|
||||
struct namebuf *np,
|
||||
int use_tcp,
|
||||
struct tsig_record *in_tsig),
|
||||
haveComplained(u_long, u_long),
|
||||
nslookup(struct databuf *nsp[],
|
||||
struct tsig_record *in_tsig);
|
||||
int haveComplained(u_long, u_long);
|
||||
int nslookup(struct databuf *nsp[],
|
||||
struct qinfo *qp,
|
||||
const char *syslogdname,
|
||||
const char *sysloginfo),
|
||||
qcomp(struct qserv *, struct qserv *);
|
||||
extern void schedretry(struct qinfo *, time_t),
|
||||
unsched(struct qinfo *),
|
||||
reset_retrytimer(void),
|
||||
retrytimer(evContext ctx, void *uap,
|
||||
struct timespec due, struct timespec ival),
|
||||
retry(struct qinfo *),
|
||||
qflush(void),
|
||||
qremove(struct qinfo *),
|
||||
ns_freeqns(struct qinfo *, char *),
|
||||
ns_freeqry(struct qinfo *),
|
||||
freeComplaints(void),
|
||||
nsfwdadd(struct qinfo *, struct fwdinfo *);
|
||||
extern struct qinfo *qfindid(u_int16_t),
|
||||
*qnew(const char *, int, int, int);
|
||||
const char *sysloginfo);
|
||||
int qcomp(struct qserv *, struct qserv *);
|
||||
void schedretry(struct qinfo *, time_t);
|
||||
void unsched(struct qinfo *);
|
||||
void reset_retrytimer(void);
|
||||
void retrytimer(evContext ctx, void *uap,
|
||||
struct timespec due, struct timespec ival);
|
||||
void retry(struct qinfo *);
|
||||
void qflush(void);
|
||||
void qremove(struct qinfo *);
|
||||
void ns_freeqns(struct qinfo *, char *);
|
||||
void ns_freeqry(struct qinfo *);
|
||||
void freeComplaints(void);
|
||||
void nsfwdadd(struct qinfo *, struct fwdinfo *);
|
||||
struct qinfo * qfindid(u_int16_t);
|
||||
struct qinfo * qnew(const char *, int, int, int);
|
||||
/* --from ns_forw.c-- */
|
||||
|
||||
/* ++from ns_main.c++ */
|
||||
extern struct in_addr net_mask(struct in_addr);
|
||||
extern void sq_remove(struct qstream *),
|
||||
sq_flushw(struct qstream *),
|
||||
sq_flush(struct qstream *allbut),
|
||||
dq_remove_gen(time_t gen),
|
||||
dq_remove_all(),
|
||||
sq_done(struct qstream *),
|
||||
ns_setproctitle(char *, int),
|
||||
getnetconf(int),
|
||||
nsid_init(void),
|
||||
ns_setoption(int option),
|
||||
writestream(struct qstream *, const u_char *, int),
|
||||
ns_need_unsafe(enum need),
|
||||
ns_need(enum need),
|
||||
opensocket_f(void),
|
||||
nsid_hash(u_char *, size_t);
|
||||
extern u_int16_t nsid_next(void);
|
||||
extern int sq_openw(struct qstream *, int),
|
||||
sq_writeh(struct qstream *, sq_closure),
|
||||
sq_write(struct qstream *, const u_char *, int),
|
||||
tcp_send(struct qinfo *),
|
||||
aIsUs(struct in_addr);
|
||||
void toggle_qrylog(void);
|
||||
struct in_addr net_mask(struct in_addr);
|
||||
void sq_remove(struct qstream *);
|
||||
void sq_flushw(struct qstream *);
|
||||
void sq_flush(struct qstream *allbut);
|
||||
void dq_remove_gen(time_t gen);
|
||||
void dq_remove_all();
|
||||
void sq_done(struct qstream *);
|
||||
void ns_setproctitle(char *, int);
|
||||
void getnetconf(int);
|
||||
void nsid_init(void);
|
||||
void ns_setoption(int option);
|
||||
void writestream(struct qstream *, const u_char *, int);
|
||||
void ns_need_unsafe(enum need);
|
||||
void ns_need(enum need);
|
||||
void opensocket_f(void);
|
||||
void nsid_hash(u_char *, size_t);
|
||||
u_int16_t nsid_next(void);
|
||||
int sq_openw(struct qstream *, int);
|
||||
int sq_writeh(struct qstream *, sq_closure);
|
||||
int sq_write(struct qstream *, const u_char *, int);
|
||||
int tcp_send(struct qinfo *);
|
||||
int aIsUs(struct in_addr);
|
||||
/* --from ns_main.c-- */
|
||||
|
||||
/* ++from ns_maint.c++ */
|
||||
extern void zone_maint(struct zoneinfo *),
|
||||
sched_zone_maint(struct zoneinfo *),
|
||||
ns_cleancache(evContext ctx, void *uap,
|
||||
void zone_maint(struct zoneinfo *);
|
||||
void sched_zone_maint(struct zoneinfo *);
|
||||
void ns_cleancache(evContext ctx, void *uap,
|
||||
struct timespec due,
|
||||
struct timespec inter),
|
||||
clean_cache_from(char *dname, struct hashbuf *htp),
|
||||
remove_zone(struct zoneinfo *, const char *),
|
||||
purge_zone(const char *, struct hashbuf *, int),
|
||||
loadxfer(void),
|
||||
qserial_retrytime(struct zoneinfo *, time_t),
|
||||
qserial_query(struct zoneinfo *),
|
||||
qserial_answer(struct qinfo *),
|
||||
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 loadxfer(void);
|
||||
void qserial_retrytime(struct zoneinfo *, time_t);
|
||||
void qserial_query(struct zoneinfo *);
|
||||
void qserial_answer(struct qinfo *);
|
||||
#ifdef DEBUG
|
||||
printzoneinfo(int, int, int),
|
||||
void printzoneinfo(int, int, int);
|
||||
#endif
|
||||
endxfer(void),
|
||||
addxfer(struct zoneinfo *),
|
||||
ns_zreload(void),
|
||||
ns_reload(void),
|
||||
ns_reconfig(void),
|
||||
ns_noexpired(void);
|
||||
void endxfer(void);
|
||||
void addxfer(struct zoneinfo *);
|
||||
void ns_zreload(void);
|
||||
void ns_reload(void);
|
||||
void ns_reconfig(void);
|
||||
void ns_noexpired(void);
|
||||
#if 0
|
||||
extern int reload_all_unsafe(void);
|
||||
int reload_all_unsafe(void);
|
||||
#endif
|
||||
extern int zonefile_changed_p(struct zoneinfo *);
|
||||
int zonefile_changed_p(struct zoneinfo *);
|
||||
int reload_master(struct zoneinfo *);
|
||||
extern const char * deferred_reload_unsafe(struct zoneinfo *);
|
||||
extern struct namebuf * purge_node(struct hashbuf *htp, struct namebuf *np);
|
||||
extern int clean_cache(struct hashbuf *, int);
|
||||
extern void reapchild(void);
|
||||
extern const char * zoneTypeString(unsigned int);
|
||||
extern void ns_heartbeat(evContext ctx, void *uap,
|
||||
const char * deferred_reload_unsafe(struct zoneinfo *);
|
||||
struct namebuf * purge_node(struct hashbuf *htp, struct namebuf *np);
|
||||
int clean_cache(struct hashbuf *, int);
|
||||
void reapchild(void);
|
||||
const char * zoneTypeString(unsigned int);
|
||||
void ns_heartbeat(evContext ctx, void *uap,
|
||||
struct timespec, struct timespec);
|
||||
extern void make_new_zones(void);
|
||||
extern void free_zone(struct zoneinfo *);
|
||||
extern struct zoneinfo *find_auth_zone(const char *, ns_class);
|
||||
extern int purge_nonglue(const char *dname, struct hashbuf *htp,
|
||||
int class);
|
||||
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);
|
||||
/* --from ns_maint.c-- */
|
||||
|
||||
/* ++from ns_sort.c++ */
|
||||
extern void sort_response(u_char *, u_char *, int,
|
||||
void sort_response(u_char *, u_char *, int,
|
||||
struct sockaddr_in *);
|
||||
/* --from ns_sort.c-- */
|
||||
|
||||
/* ++from ns_init.c++ */
|
||||
extern void ns_refreshtime(struct zoneinfo *, time_t);
|
||||
extern void ns_retrytime(struct zoneinfo *, time_t);
|
||||
extern void ns_init(const char *);
|
||||
extern void purgeandload(struct zoneinfo *zp);
|
||||
extern enum context ns_ptrcontext(const char *owner);
|
||||
extern enum context ns_ownercontext(int type, enum transport);
|
||||
extern int ns_nameok(const struct qinfo *qry, const char *name,
|
||||
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,
|
||||
int class, struct zoneinfo *zp,
|
||||
enum transport, enum context,
|
||||
const char *owner,
|
||||
struct in_addr source);
|
||||
extern int ns_wildcard(const char *name);
|
||||
extern void zoneinit(struct zoneinfo *);
|
||||
extern void do_reload(const char *, int, int, int);
|
||||
extern void ns_shutdown(void);
|
||||
int ns_wildcard(const char *name);
|
||||
void zoneinit(struct zoneinfo *);
|
||||
void do_reload(const char *, int, int, int);
|
||||
void ns_shutdown(void);
|
||||
/* --from ns_init.c-- */
|
||||
|
||||
/* ++from ns_ncache.c++ */
|
||||
extern void cache_n_resp(u_char *, int, struct sockaddr_in,
|
||||
void cache_n_resp(u_char *, int, struct sockaddr_in,
|
||||
const char *, int, int);
|
||||
/* --from ns_ncache.c-- */
|
||||
|
||||
/* ++from ns_udp.c++ */
|
||||
extern void ns_udp(void);
|
||||
void ns_udp(void);
|
||||
/* --from ns_udp.c-- */
|
||||
|
||||
/* ++from ns_stats.c++ */
|
||||
extern void ns_stats(void),
|
||||
ns_freestats(void);
|
||||
extern void ns_logstats(evContext ctx, void *uap,
|
||||
void ns_stats(void);
|
||||
void ns_stats_dumpandclear(void);
|
||||
void ns_freestats(void);
|
||||
void ns_logstats(evContext ctx, void *uap,
|
||||
struct timespec, struct timespec);
|
||||
extern void qtypeIncr(int qtype);
|
||||
extern struct nameser *nameserFind(struct in_addr addr, int flags);
|
||||
void qtypeIncr(int qtype);
|
||||
struct nameser * nameserFind(struct in_addr addr, int flags);
|
||||
#define NS_F_INSERT 0x0001
|
||||
#define nameserIncr(a,w) NS_INCRSTAT(a,w) /* XXX should change name. */
|
||||
/* --from ns_stats.c-- */
|
||||
|
||||
/* ++from ns_update.c++ */
|
||||
struct databuf * findzonesoa(struct zoneinfo *);
|
||||
void free_rrecp(ns_updque *, int rcode, struct sockaddr_in);
|
||||
int findzone(const char *, int, int, int *, int);
|
||||
u_char * findsoaserial(u_char *data);
|
||||
@ -389,6 +392,16 @@ void rdata_dump(struct databuf *dp, FILE *fp);
|
||||
/* --from ns_update.c-- */
|
||||
|
||||
/* ++from ns_config.c++ */
|
||||
void add_to_rrset_order_list(rrset_order_list,
|
||||
rrset_order_element);
|
||||
const char * p_order(int);
|
||||
int set_zone_ixfr_file(zone_config, char *);
|
||||
int set_zone_master_port(zone_config, u_short);
|
||||
int set_zone_max_log_size_ixfr(zone_config, int);
|
||||
int set_zone_dialup(zone_config, int);
|
||||
int set_trusted_key(const char *, const int,
|
||||
const int, const int, const char *);
|
||||
int set_zone_ixfr_tmp(zone_config, char *);
|
||||
void free_zone_timerinfo(struct zoneinfo *);
|
||||
void free_zone_contents(struct zoneinfo *, int);
|
||||
struct zoneinfo * find_zone(const char *, int);
|
||||
@ -485,17 +498,19 @@ void init_logging(void);
|
||||
void shutdown_logging(void);
|
||||
void init_configuration(void);
|
||||
void shutdown_configuration(void);
|
||||
void load_configuration(const char *);
|
||||
time_t load_configuration(const char *);
|
||||
/* --from ns_config.c-- */
|
||||
|
||||
/* ++from parser.y++ */
|
||||
ip_match_list lookup_acl(char *);
|
||||
void define_acl(char *, ip_match_list);
|
||||
struct dst_key *lookup_key(char *);
|
||||
void define_key(char *, struct dst_key *);
|
||||
void parse_configuration(const char *);
|
||||
time_t parse_configuration(const char *);
|
||||
void parser_initialize(void);
|
||||
void parser_shutdown(void);
|
||||
/* --from parser.y-- */
|
||||
|
||||
/* ++from ns_signal.c++ */
|
||||
void init_signals(void);
|
||||
void block_signals(void);
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* from ns.h 4.33 (Berkeley) 8/23/90
|
||||
* $Id: ns_glob.h,v 8.55 2000/07/20 22:50:38 vixie Exp $
|
||||
* $Id: ns_glob.h,v 8.56 2000/12/02 18:39:25 vixie Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -125,9 +125,12 @@ DECL time_t resettime;
|
||||
/* next query to retry */
|
||||
DECL struct qinfo *retryqp;
|
||||
|
||||
/* default configuration file */
|
||||
/* configuration file name */
|
||||
DECL char *conffile;
|
||||
|
||||
/* configuration file mtime */
|
||||
DECL time_t confmtime;
|
||||
|
||||
/* default debug output file */
|
||||
DECL char *debugfile;
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static const char rcsid[] = "$Id: ns_glue.c,v 8.17 2000/07/17 07:36:52 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: ns_glue.c,v 8.18 2000/11/08 06:16:36 marka Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -435,17 +435,6 @@ ctimel(long l) {
|
||||
return (checked_ctime(&t));
|
||||
}
|
||||
|
||||
/*
|
||||
* rename() is lame (can't overwrite an existing file) on some systems.
|
||||
* use movefile() instead, and let lame OS ports do what they need to.
|
||||
*/
|
||||
#ifndef HAVE_MOVEFILE
|
||||
int
|
||||
movefile(const char *oldname, const char *newname) {
|
||||
return (rename(oldname, newname));
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ultrix
|
||||
/*
|
||||
* Some library routines in libc need to be able to see the res_send
|
||||
|
@ -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.68 2000/04/21 06:54:07 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: ns_init.c,v 8.70 2000/12/23 08:14:38 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -132,10 +132,11 @@ ns_retrytime(struct zoneinfo *zp, time_t timebase) {
|
||||
/*
|
||||
* Read configuration file and save it as internal state.
|
||||
*/
|
||||
void
|
||||
time_t
|
||||
ns_init(const char *conffile) {
|
||||
struct zoneinfo *zp;
|
||||
static int loads = 0; /* number of times loaded */
|
||||
time_t mtime;
|
||||
|
||||
ns_debug(ns_log_config, 1, "ns_init(%s)", conffile);
|
||||
gettime(&tt);
|
||||
@ -181,7 +182,7 @@ ns_init(const char *conffile) {
|
||||
}
|
||||
#endif
|
||||
|
||||
load_configuration(conffile);
|
||||
mtime = load_configuration(conffile);
|
||||
|
||||
/* Erase all old zones that were not found. */
|
||||
for (zp = &zones[0]; zp < &zones[nzones]; zp++) {
|
||||
@ -210,6 +211,7 @@ ns_init(const char *conffile) {
|
||||
|
||||
ns_debug(ns_log_config, 1, "exit ns_init()");
|
||||
loads++;
|
||||
return (mtime);
|
||||
}
|
||||
|
||||
void
|
||||
@ -277,9 +279,9 @@ do_reload(const char *domain, int type, int class, int mark) {
|
||||
*/
|
||||
zp = find_zone(domain, class);
|
||||
if (zp != NULL &&
|
||||
(type != z_master && zp->z_type == z_master) ||
|
||||
(type != z_slave && zp->z_type == z_slave && zp->z_serial != 0) ||
|
||||
(type != z_stub && zp->z_type == z_stub && zp->z_serial != 0))
|
||||
((type != z_master && zp->z_type == z_master) ||
|
||||
(type != z_slave && zp->z_type == z_slave && zp->z_serial != 0) ||
|
||||
(type != z_stub && zp->z_type == z_stub && zp->z_serial != 0)))
|
||||
return;
|
||||
|
||||
/*
|
||||
@ -466,7 +468,7 @@ ns_nameok(const struct qinfo *qry, const char *name, int class,
|
||||
else {
|
||||
s = newstr(strlen(transport_strings[transport]) +
|
||||
sizeof " from [000.000.000.000] for [000.000.000.000]", 0);
|
||||
if (s)
|
||||
if (s != NULL) {
|
||||
if ( (transport == response_trans) &&
|
||||
(qry != NULL) ) {
|
||||
|
||||
@ -496,6 +498,7 @@ ns_nameok(const struct qinfo *qry, const char *name, int class,
|
||||
transport_strings[transport],
|
||||
inet_ntoa(source));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ns_samename(owner, name) == 1)
|
||||
o = savestr("", 0);
|
||||
|
@ -1,5 +1,5 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static const char rcsid[] = "$Id: ns_ixfr.c,v 8.19 2000/04/18 20:47:27 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: ns_ixfr.c,v 8.25 2000/12/27 06:56:03 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -46,6 +46,7 @@ static const char rcsid[] = "$Id: ns_ixfr.c,v 8.19 2000/04/18 20:47:27 vixie Exp
|
||||
#include <isc/eventlib.h>
|
||||
#include <isc/logging.h>
|
||||
#include <isc/memcluster.h>
|
||||
#include <isc/misc.h>
|
||||
|
||||
#include "port_after.h"
|
||||
|
||||
@ -85,10 +86,7 @@ sx_new_ixfrmsg(struct qstream *qsp) {
|
||||
struct namebuf *np;
|
||||
struct hashbuf *htp;
|
||||
struct zoneinfo *zp;
|
||||
struct databuf *dp;
|
||||
const char * fname;
|
||||
u_char ** edp = qsp->xfr.ptrs +
|
||||
sizeof qsp->xfr.ptrs / sizeof(u_char *);
|
||||
|
||||
qsp->xfr.ixfr_zone = qsp->xfr.zone;
|
||||
zp = &zones[qsp->xfr.zone];
|
||||
@ -102,11 +100,6 @@ sx_new_ixfrmsg(struct qstream *qsp) {
|
||||
htp = hashtab;
|
||||
np = nlookup(zp->z_origin, &htp, &fname, 0);
|
||||
buflen = XFER_BUFSIZE;
|
||||
foreach_rr(dp, np, T_SOA, qsp->xfr.class, qsp->xfr.zone) {
|
||||
n = make_rr(zp->z_origin, dp, qsp->xfr.cp, qsp->xfr.eom - qsp->xfr.cp, 0, qsp->xfr.ptrs, edp, 0);
|
||||
qsp->xfr.cp += n;
|
||||
hp->ancount = htons(ntohs(hp->ancount) + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -194,13 +187,11 @@ sx_addrr(struct qstream *qsp, const char *dname, struct databuf *dp) {
|
||||
void
|
||||
sx_send_ixfr(struct qstream *qsp) {
|
||||
char * cp;
|
||||
u_int32_t serial = 0;
|
||||
struct zoneinfo *zp = NULL;
|
||||
struct databuf *soa_dp;
|
||||
struct databuf *old_soadp;
|
||||
ns_delta *dp;
|
||||
ns_updrec *rp;
|
||||
ns_updrec *trp;
|
||||
int foundsoa;
|
||||
|
||||
zp = &zones[qsp->xfr.zone];
|
||||
@ -211,6 +202,8 @@ sx_send_ixfr(struct qstream *qsp) {
|
||||
"sx_send_ixfr: unable to locate soa");
|
||||
}
|
||||
old_soadp = memget(DATASIZE(soa_dp->d_size));
|
||||
if (old_soadp == NULL)
|
||||
ns_panic(ns_log_update, 1, "sx_send_ixfr: out of memory");
|
||||
memcpy(old_soadp, soa_dp, DATASIZE(soa_dp->d_size));
|
||||
|
||||
again:
|
||||
@ -218,13 +211,8 @@ sx_send_ixfr(struct qstream *qsp) {
|
||||
case s_x_firstsoa:
|
||||
ns_debug(ns_log_default, 3,
|
||||
"IXFR: s_x_firstsoa (%s)", zp->z_origin);
|
||||
/*
|
||||
* The current SOA has been emited already.
|
||||
* It would be cleaner if the first one was emited here...
|
||||
*
|
||||
* if (sx_addrr(qsp, zp->z_origin, soa_dp) < 0)
|
||||
* goto cleanup;
|
||||
*/
|
||||
if (sx_addrr(qsp, zp->z_origin, soa_dp) < 0)
|
||||
goto cleanup;
|
||||
qsp->xfr.state = s_x_deletesoa;
|
||||
/* FALLTHROUGH */
|
||||
case s_x_deletesoa:
|
||||
@ -377,12 +365,13 @@ sx_send_ixfr(struct qstream *qsp) {
|
||||
if (qsp->xfr.ixfr_zone != 0)
|
||||
sx_addrr(qsp, zp->z_origin, soa_dp);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
ns_debug(ns_log_default, 3, "IXFR: flushing %s", zp->z_origin);
|
||||
qsp->xfr.state = s_x_done;
|
||||
sx_flush(qsp);
|
||||
sq_writeh(qsp, sq_flushw);
|
||||
cleanup:
|
||||
if (qsp->xfr.top.ixfr != NULL) {
|
||||
if(!EMPTY(*qsp->xfr.top.ixfr)) {
|
||||
while ((dp = HEAD(*qsp->xfr.top.ixfr)) != NULL) {
|
||||
@ -400,6 +389,7 @@ sx_send_ixfr(struct qstream *qsp) {
|
||||
memput(qsp->xfr.top.ixfr, sizeof *qsp->xfr.top.ixfr);
|
||||
qsp->xfr.top.ixfr = NULL;
|
||||
}
|
||||
cleanup:
|
||||
memput(old_soadp, DATASIZE(old_soadp->d_size));
|
||||
}
|
||||
|
||||
@ -413,11 +403,9 @@ sx_send_ixfr(struct qstream *qsp) {
|
||||
* int ixfr_log_maint(struct zoneinfo *zp, int fast_trim)
|
||||
*
|
||||
* zp - pointer to the zone information
|
||||
* fast_trim - is used to denote that this is not called on the regular
|
||||
* maintaince cycle.
|
||||
*
|
||||
*/
|
||||
int ixfr_log_maint(struct zoneinfo *zp, int fast_trim) {
|
||||
int
|
||||
ixfr_log_maint(struct zoneinfo *zp) {
|
||||
int fd, rcount, wcount;
|
||||
int found = 0;
|
||||
int error = 0;
|
||||
@ -466,32 +454,26 @@ int ixfr_log_maint(struct zoneinfo *zp, int fast_trim) {
|
||||
zp->z_max_log_size_ixfr);
|
||||
if (zp->z_max_log_size_ixfr) {
|
||||
if (sb.st_size > zp->z_max_log_size_ixfr)
|
||||
seek = (signed)sb.st_size -
|
||||
(signed)(zp->z_max_log_size_ixfr +
|
||||
(zp->z_max_log_size_ixfr * .10) );
|
||||
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 * .50))
|
||||
seek = (signed)sb.st_size - (signed)((db_sb.st_size * .50)
|
||||
+ ((db_sb.st_size * zp->z_max_log_size_ixfr) *.10));
|
||||
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;
|
||||
}
|
||||
ns_debug(ns_log_default, 3, "seek: %d", seek);
|
||||
if (seek < 1)
|
||||
{
|
||||
if (seek < 1) {
|
||||
ns_debug(ns_log_default, 3, "%s does not need to be reduced",
|
||||
zp->z_ixfr_base);
|
||||
(void) my_fclose(from_fp);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if ((fast_trim) && seek < (zp->z_max_log_size_ixfr + 100000)) {
|
||||
(void) my_fclose(from_fp);
|
||||
return (0);
|
||||
}
|
||||
|
||||
tmpname = memget(strlen(zp->z_ixfr_base) + sizeof(".XXXXXX") + 1);
|
||||
if (!tmpname) {
|
||||
ns_warning(ns_log_default, "memget failed");
|
||||
@ -570,7 +552,7 @@ int ixfr_log_maint(struct zoneinfo *zp, int fast_trim) {
|
||||
(void) close(fd);
|
||||
(void) my_fclose(from_fp);
|
||||
if (error == 0) {
|
||||
if (rename(tmpname, zp->z_ixfr_base) == -1) {
|
||||
if (isc_movefile(tmpname, zp->z_ixfr_base) == -1) {
|
||||
ns_warning(ns_log_default, "can not rename %s to %s :%s",
|
||||
tmpname, zp->z_ixfr_base, strerror(errno));
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static const char rcsid[] = "$Id: ns_lexer.c,v 8.20 2000/04/21 06:54:07 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: ns_lexer.c,v 8.22 2000/11/29 06:55:58 marka Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -260,7 +260,11 @@ static struct keyword keywords[] = {
|
||||
{"has-old-clients", T_HAS_OLD_CLIENTS},
|
||||
{"heartbeat-interval", T_HEARTBEAT},
|
||||
{"hint", T_HINT},
|
||||
#ifdef HITCOUNTS
|
||||
{"hit-count", T_HITCOUNT},
|
||||
#endif /* HITCOUNTS */
|
||||
{"host-statistics", T_HOSTSTATS},
|
||||
{"host-statistics-max", T_HOSTSTATSMAX},
|
||||
{"if-no-answer", T_IF_NO_ANSWER},
|
||||
{"if-no-domain", T_IF_NO_DOMAIN},
|
||||
{"ignore", T_IGNORE},
|
||||
|
@ -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.126 2000/07/20 22:50:39 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: ns_main.c,v 8.142 2001/01/15 20:06:25 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -112,6 +112,7 @@ char copyright[] =
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <grp.h>
|
||||
#include <irs.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <signal.h>
|
||||
@ -138,6 +139,17 @@ char copyright[] =
|
||||
#include "named.h"
|
||||
#undef MAIN_PROGRAM
|
||||
|
||||
typedef void (*handler)(void);
|
||||
|
||||
typedef struct _savedg {
|
||||
struct sockaddr_in from;
|
||||
int dfd;
|
||||
interface * ifp;
|
||||
time_t gen;
|
||||
u_char * buf;
|
||||
u_int16_t buflen;
|
||||
} savedg;
|
||||
|
||||
/* list of interfaces */
|
||||
static LIST(struct _interface) iflist;
|
||||
static int iflist_initialized = 0;
|
||||
@ -162,10 +174,13 @@ static u_int16_t nsid_c1, nsid_c2, nsid_c3;
|
||||
static u_int16_t nsid_state2;
|
||||
static int nsid_algorithm;
|
||||
|
||||
typedef void (*handler)(void);
|
||||
static int needs = 0, needs_exit = 0;
|
||||
static handler handlers[main_need_num];
|
||||
static void savedg_waitfunc(evContext, void*, const void*);
|
||||
static void need_waitfunc(evContext, void *, const void *);
|
||||
static int drain_rcvbuf(evContext, interface *, int,
|
||||
int *, int *);
|
||||
static int drain_all_rcvbuf(evContext);
|
||||
|
||||
static struct qstream *sq_add(void);
|
||||
static int opensocket_d(interface *),
|
||||
@ -178,8 +193,6 @@ static void stream_write(evContext, void *, int, int);
|
||||
|
||||
static interface * if_find(struct in_addr, u_int16_t port);
|
||||
|
||||
static int sq_here(struct qstream *);
|
||||
|
||||
static void deallocate_everything(void),
|
||||
stream_accept(evContext, void *, int,
|
||||
const void *, int,
|
||||
@ -197,7 +210,8 @@ static void stream_send(evContext, void *, int,
|
||||
static int only_digits(const char *);
|
||||
|
||||
static void init_needs(void),
|
||||
handle_needs(void);
|
||||
handle_needs(void),
|
||||
exit_handler(void);
|
||||
|
||||
#ifndef HAVE_CUSTOM
|
||||
static void custom_init(void),
|
||||
@ -445,7 +459,7 @@ main(int argc, char *argv[], char *envp[]) {
|
||||
#ifdef SYSLOG_42BSD
|
||||
openlog("named", n);
|
||||
#else
|
||||
openlog("named", n, LOG_DAEMON);
|
||||
openlog("named", n, ISC_FACILITY);
|
||||
#endif
|
||||
|
||||
init_logging();
|
||||
@ -461,7 +475,7 @@ main(int argc, char *argv[], char *envp[]) {
|
||||
init_needs();
|
||||
init_signals();
|
||||
|
||||
ns_notice(ns_log_default, "starting. %s", Version);
|
||||
ns_notice(ns_log_default, "starting (%s). %s", conffile, Version);
|
||||
|
||||
/*
|
||||
* Initialize and load database.
|
||||
@ -469,7 +483,7 @@ main(int argc, char *argv[], char *envp[]) {
|
||||
gettime(&tt);
|
||||
buildservicelist();
|
||||
buildprotolist();
|
||||
ns_init(conffile);
|
||||
confmtime = ns_init(conffile);
|
||||
time(&boottime);
|
||||
resettime = boottime;
|
||||
|
||||
@ -730,17 +744,14 @@ stream_accept(evContext lev, void *uap, int rfd,
|
||||
INSIST_ERR(evRead(lev, rfd, &iov, 1, stream_getlen, sp, &sp->evID_r)
|
||||
!= -1);
|
||||
sp->flags |= STREAM_READ_EV;
|
||||
#ifdef DEBUG
|
||||
if (debug)
|
||||
ns_info(ns_log_default, "IP/TCP connection from %s (fd %d)",
|
||||
sin_ntoa(sp->s_from), rfd);
|
||||
#endif
|
||||
ns_debug(ns_log_default, 1, "IP/TCP connection from %s (fd %d)",
|
||||
sin_ntoa(sp->s_from), rfd);
|
||||
}
|
||||
|
||||
int
|
||||
tcp_send(struct qinfo *qp) {
|
||||
struct qstream *sp;
|
||||
int on = 1;
|
||||
int on = 1, n;
|
||||
|
||||
ns_debug(ns_log_default, 1, "tcp_send");
|
||||
if ((sp = sq_add()) == NULL) {
|
||||
@ -754,10 +765,34 @@ tcp_send(struct qinfo *qp) {
|
||||
sq_remove(sp);
|
||||
return (SERVFAIL);
|
||||
}
|
||||
if (setsockopt(sp->s_rfd, SOL_SOCKET, SO_REUSEADDR,
|
||||
(char*)&on, sizeof(on)) < 0)
|
||||
ns_info(ns_log_default,
|
||||
"tcp_send: setsockopt(SO_REUSEADDR): %s",
|
||||
strerror(errno));
|
||||
#ifdef SO_REUSEPORT
|
||||
if (setsockopt(sp->s_rfd, SOL_SOCKET, SO_REUSEPORT,
|
||||
(char*)&on, sizeof(on)) < 0)
|
||||
ns_info(ns_log_default,
|
||||
"tcp_send: setsockopt(SO_REUSEPORT): %s",
|
||||
strerror(errno));
|
||||
#endif
|
||||
if (bind(sp->s_rfd, (struct sockaddr *)&server_options->query_source,
|
||||
sizeof server_options->query_source) < 0)
|
||||
ns_info(ns_log_default, "tcp_send: bind(query_source): %s",
|
||||
strerror(errno));
|
||||
if (fcntl(sp->s_rfd, F_SETFD, 1) < 0) {
|
||||
sq_remove(sp);
|
||||
return (SERVFAIL);
|
||||
}
|
||||
if ((n = fcntl(sp->s_rfd, F_GETFL, 0)) == -1) {
|
||||
sq_remove(sp);
|
||||
return (SERVFAIL);
|
||||
}
|
||||
if (fcntl(sp->s_rfd, F_SETFL, n|PORT_NONBLOCK) == -1) {
|
||||
sq_remove(sp);
|
||||
return (SERVFAIL);
|
||||
}
|
||||
if (sq_openw(sp, qp->q_msglen + INT16SZ) == -1) {
|
||||
sq_remove(sp);
|
||||
return (SERVFAIL);
|
||||
@ -768,10 +803,10 @@ tcp_send(struct qinfo *qp) {
|
||||
}
|
||||
|
||||
if (setsockopt(sp->s_rfd, SOL_SOCKET, SO_KEEPALIVE,
|
||||
(char*)&on, sizeof(on)) < 0)
|
||||
ns_info(ns_log_default,
|
||||
"tcp_send: setsockopt(rfd, SO_KEEPALIVE): %s",
|
||||
strerror(errno));
|
||||
(char*)&on, sizeof(on)) < 0)
|
||||
ns_info(ns_log_default,
|
||||
"tcp_send: setsockopt(SO_KEEPALIVE): %s",
|
||||
strerror(errno));
|
||||
gettime(&tt);
|
||||
sp->s_size = -1;
|
||||
sp->s_time = tt.tv_sec; /* last transaction time */
|
||||
@ -1022,6 +1057,21 @@ datagram_read(evContext lev, void *uap, int fd, int evmask) {
|
||||
goto more;
|
||||
}
|
||||
|
||||
static void
|
||||
savedg_waitfunc(evContext ctx, void *uap, const void *tag) {
|
||||
savedg *dg = (savedg *)uap;
|
||||
|
||||
if (!EMPTY(iflist) && HEAD(iflist)->gen == dg->gen) {
|
||||
u_char buf[PACKETSZ];
|
||||
|
||||
memcpy(buf, dg->buf, dg->buflen);
|
||||
dispatch_message(buf, dg->buflen, sizeof buf, NULL,
|
||||
dg->from, dg->dfd, dg->ifp);
|
||||
}
|
||||
memput(dg->buf, dg->buflen);
|
||||
memput(dg, sizeof *dg);
|
||||
}
|
||||
|
||||
static void
|
||||
dispatch_message(u_char *msg, int msglen, int buflen, struct qstream *qsp,
|
||||
struct sockaddr_in from, int dfd, interface *ifp)
|
||||
@ -1252,6 +1302,7 @@ getnetconf(int periodic_scan) {
|
||||
ns_panic(ns_log_default, 1,
|
||||
"memget(interface)", NULL);
|
||||
memset(ifp, 0, sizeof *ifp);
|
||||
INIT_LINK(ifp, link);
|
||||
APPEND(iflist, ifp, link);
|
||||
ifp->addr = ina;
|
||||
ifp->port = li->port;
|
||||
@ -1466,6 +1517,14 @@ opensocket_d(interface *ifp) {
|
||||
ifp->dfd, dsbufsize, strerror(errno));
|
||||
/* XXX press on regardless, this is not too serious. */
|
||||
}
|
||||
#endif
|
||||
#ifdef SO_BSDCOMPAT
|
||||
if (setsockopt(ifp->dfd, SOL_SOCKET, SO_BSDCOMPAT,
|
||||
(char*)&on, sizeof on) < 0) {
|
||||
ns_info(ns_log_default,
|
||||
"setsockopt(dfd=%d, SO_BSDCOMPAT): %s",
|
||||
ifp->dfd, strerror(errno));
|
||||
}
|
||||
#endif
|
||||
if (bind(ifp->dfd, (struct sockaddr *)&nsa, sizeof nsa)) {
|
||||
ns_error(ns_log_default, "bind(dfd=%d, %s): %s",
|
||||
@ -1482,6 +1541,75 @@ opensocket_d(interface *ifp) {
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
drain_rcvbuf(evContext ctx, interface *ifp, int fd, int *mread, int *mstore) {
|
||||
int drop = 0;
|
||||
|
||||
drop = 0;
|
||||
for (; *mread > 0; (*mread)--) {
|
||||
union {
|
||||
HEADER h;
|
||||
u_char buf[PACKETSZ+1];
|
||||
} u;
|
||||
struct sockaddr_in from;
|
||||
int from_len = sizeof from;
|
||||
savedg *dg;
|
||||
int n;
|
||||
|
||||
n = recvfrom(fd, (char *)u.buf, sizeof u.buf, 0,
|
||||
(struct sockaddr *)&from, &from_len);
|
||||
if (n <= 0)
|
||||
break; /* Socket buffer assumed empty. */
|
||||
drop++; /* Pessimistic assumption. */
|
||||
if (n > PACKETSZ)
|
||||
continue; /* Oversize message - EDNS0 needed. */
|
||||
if (from.sin_family != AF_INET)
|
||||
continue; /* Not IPv4 - IPv6 needed. */
|
||||
if (u.h.opcode == ns_o_query && u.h.qr == 0)
|
||||
continue; /* Query - what we're here to axe. */
|
||||
if (*mstore <= 0)
|
||||
continue; /* Reached storage quota, ignore. */
|
||||
if ((dg = memget(sizeof *dg)) == NULL)
|
||||
continue; /* No memory - probably fatal. */
|
||||
if ((dg->buf = memget(n)) == NULL) {
|
||||
memput(dg, sizeof *dg);
|
||||
continue; /* No memory - probably fatal. */
|
||||
}
|
||||
dg->from = from;
|
||||
dg->dfd = fd;
|
||||
dg->ifp = ifp;
|
||||
dg->gen = ifp->gen;
|
||||
dg->buflen = n;
|
||||
memcpy(dg->buf, u.buf, n);
|
||||
if (evWaitFor(ctx, (void *)drain_all_rcvbuf, savedg_waitfunc,
|
||||
dg, NULL) < 0)
|
||||
{
|
||||
memput(dg->buf, dg->buflen);
|
||||
memput(dg, sizeof *dg);
|
||||
continue; /* No memory - probably fatal. */
|
||||
}
|
||||
drop--; /* Pessimism was inappropriate. */
|
||||
(*mstore)--;
|
||||
}
|
||||
return (drop);
|
||||
}
|
||||
|
||||
static int
|
||||
drain_all_rcvbuf(evContext ctx) {
|
||||
interface *ifp;
|
||||
int mread = MAX_SYNCDRAIN;
|
||||
int mstore = MAX_SYNCSTORE;
|
||||
int drop = 0;
|
||||
|
||||
for (ifp = HEAD(iflist); ifp != NULL; ifp = NEXT(ifp, link))
|
||||
if (ifp->dfd != -1)
|
||||
drop += drain_rcvbuf(ctx, ifp, ifp->dfd,
|
||||
&mread, &mstore);
|
||||
if (mstore < MAX_SYNCSTORE)
|
||||
INSIST_ERR(evDo(ctx, (void *)drain_all_rcvbuf) != -1);
|
||||
return (drop);
|
||||
}
|
||||
|
||||
/* opensocket_s(ifp)
|
||||
* Open stream (listener) socket bound to interface address.
|
||||
* Returns:
|
||||
@ -1640,6 +1768,14 @@ opensocket_f() {
|
||||
strerror(errno));
|
||||
/* XXX press on regardless, this is not too serious. */
|
||||
}
|
||||
#ifdef SO_BSDCOMPAT
|
||||
if (setsockopt(ds, SOL_SOCKET, SO_BSDCOMPAT,
|
||||
(char *)&on, sizeof on) != 0) {
|
||||
ns_notice(ns_log_default, "setsockopt(BSDCOMPAT): %s",
|
||||
strerror(errno));
|
||||
/* XXX press on regardless, this is not too serious. */
|
||||
}
|
||||
#endif
|
||||
if (bind(ds, (struct sockaddr *)&server_options->query_source,
|
||||
sizeof server_options->query_source) < 0)
|
||||
ns_panic(ns_log_default, 0, "opensocket_f: bind(%s): %s",
|
||||
@ -1923,22 +2059,6 @@ sq_write(struct qstream *qs, const u_char *buf, int len) {
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* int
|
||||
* sq_here(sp)
|
||||
* determine whether stream 'sp' is still on the streamq
|
||||
* return:
|
||||
* boolean: is it here?
|
||||
*/
|
||||
static int
|
||||
sq_here(struct qstream *sp) {
|
||||
struct qstream *t;
|
||||
|
||||
for (t = streamq; t != NULL; t = t->s_next)
|
||||
if (t == sp)
|
||||
return (1);
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Initiate query on stream;
|
||||
* mark as referenced and stop selecting for input.
|
||||
@ -2630,7 +2750,8 @@ init_needs(void) {
|
||||
handlers[main_need_zoneload] = loadxfer;
|
||||
handlers[main_need_dump] = doadump;
|
||||
handlers[main_need_statsdump] = ns_stats;
|
||||
handlers[main_need_exit] = wild;
|
||||
handlers[main_need_statsdumpandclear] = ns_stats_dumpandclear;
|
||||
handlers[main_need_exit] = exit_handler;
|
||||
handlers[main_need_qrylog] = toggle_qrylog;
|
||||
handlers[main_need_debug] = use_desired_debug;
|
||||
handlers[main_need_restart] = ns_restart;
|
||||
@ -2646,15 +2767,17 @@ handle_needs(void) {
|
||||
block_signals();
|
||||
for (need = 0; need < main_need_num; need++)
|
||||
if ((needs & (1 << need)) != 0) {
|
||||
INSIST_ERR(evWaitFor(ev, handle_needs, need_waitfunc,
|
||||
handlers[need], NULL) != -1);
|
||||
INSIST_ERR(evWaitFor(ev, (void *)handle_needs,
|
||||
need_waitfunc,
|
||||
(void *)handlers[need],
|
||||
NULL) != -1);
|
||||
queued++;
|
||||
}
|
||||
needs = 0;
|
||||
unblock_signals();
|
||||
ns_debug(ns_log_default, 15, "handle_needs(): queued %d", queued);
|
||||
if (queued != 0) {
|
||||
INSIST_ERR(evDo(ev, handle_needs) != -1);
|
||||
INSIST_ERR(evDo(ev, (void *)handle_needs) != -1);
|
||||
return;
|
||||
}
|
||||
ns_panic(ns_log_default, 1, "ns_handle_needs: queued == 0", NULL);
|
||||
@ -2663,8 +2786,16 @@ handle_needs(void) {
|
||||
static void
|
||||
need_waitfunc(evContext ctx, void *uap, const void *tag) {
|
||||
handler hand = (handler) uap;
|
||||
time_t begin;
|
||||
long syncdelay;
|
||||
|
||||
begin = time(NULL);
|
||||
(*hand)();
|
||||
syncdelay = time(NULL) - begin;
|
||||
|
||||
if (syncdelay > MAX_SYNCDELAY)
|
||||
ns_notice(ns_log_default, "drained %d queries (delay %ld sec)",
|
||||
drain_all_rcvbuf(ctx), syncdelay);
|
||||
}
|
||||
|
||||
void
|
||||
@ -2678,8 +2809,11 @@ ns_need(enum need need) {
|
||||
void
|
||||
ns_need_unsafe(enum need need) {
|
||||
needs |= (1 << need);
|
||||
if (need == main_need_exit)
|
||||
needs_exit = 1;
|
||||
}
|
||||
|
||||
static void
|
||||
exit_handler(void) {
|
||||
needs_exit = 1;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -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.105 2000/07/17 07:25:00 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: ns_maint.c,v 8.117 2001/01/25 05:50:55 marka Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -120,14 +120,14 @@ static const char rcsid[] = "$Id: ns_maint.c,v 8.105 2000/07/17 07:25:00 vixie E
|
||||
#include <isc/eventlib.h>
|
||||
#include <isc/logging.h>
|
||||
#include <isc/memcluster.h>
|
||||
|
||||
#include <isc/dst.h>
|
||||
#include <isc/misc.h>
|
||||
|
||||
#include "port_after.h"
|
||||
|
||||
#include "named.h"
|
||||
|
||||
static int nxfers(struct zoneinfo *, int),
|
||||
static int nxfers(struct zoneinfo *),
|
||||
bottom_of_zone(struct databuf *, int);
|
||||
|
||||
static void startxfer(struct zoneinfo *),
|
||||
@ -135,19 +135,18 @@ static void startxfer(struct zoneinfo *),
|
||||
tryxfer(void),
|
||||
purge_z_2(struct hashbuf *, int);
|
||||
static int purge_nonglue_2(const char *, struct hashbuf *,
|
||||
int, int);
|
||||
int, int, int);
|
||||
|
||||
#ifndef HAVE_SPAWNXFER
|
||||
static pid_t spawnxfer(char **, struct zoneinfo *);
|
||||
#endif
|
||||
|
||||
static time_t stats_time; /* Redundant ??? XXX ogud */
|
||||
|
||||
/* State of all running zone transfers */
|
||||
static struct {
|
||||
pid_t xfer_pid;
|
||||
int xfer_state; /* see below */
|
||||
WAIT_T xfer_status;
|
||||
pid_t xfer_pid;
|
||||
int xfer_state; /* see below */
|
||||
WAIT_T xfer_status;
|
||||
struct in_addr xfer_addr;
|
||||
} xferstatus[MAX_XFERS_RUNNING];
|
||||
|
||||
#define XFER_IDLE 0
|
||||
@ -642,42 +641,116 @@ qserial_answer(struct qinfo *qp) {
|
||||
|
||||
/*
|
||||
* Writes TSIG key info for an address to a file, optionally opening it first.
|
||||
* Returns:
|
||||
* -1: Error.
|
||||
* 0: No action taken.
|
||||
* 1: Tsig info successfully written.
|
||||
*/
|
||||
static int
|
||||
write_tsig_info(struct in_addr addr, char *name, int *fd, int creat_failed) {
|
||||
write_tsig_info(struct in_addr addr, char *name, int *fd) {
|
||||
server_info si;
|
||||
DST_KEY *dst_key;
|
||||
int tsig_fd = *fd;
|
||||
char tsig_str[1024], secret_buf64[172];
|
||||
u_char secret_buf[128];
|
||||
int secret_len;
|
||||
int secret_len, len;
|
||||
|
||||
si = find_server(addr);
|
||||
if (si == NULL || si->key_list == NULL || si->key_list->first == NULL)
|
||||
return(0);
|
||||
dst_key = si->key_list->first->key;
|
||||
if (tsig_fd < 0 && creat_failed == 0) {
|
||||
*fd = tsig_fd = creat(name, S_IRUSR);
|
||||
if (tsig_fd == -1) {
|
||||
*fd = tsig_fd = mkstemp(name);
|
||||
if (tsig_fd < 0) {
|
||||
ns_warning(ns_log_default,
|
||||
"write_tsig_info: creat(%s) for TSIG info failed",
|
||||
"write_tsig_info: mkstemp(%s) for TSIG info failed",
|
||||
name);
|
||||
return(-1);
|
||||
}
|
||||
(void) fchown(tsig_fd, user_id, group_id);
|
||||
}
|
||||
if (creat_failed != 0)
|
||||
return(-1);
|
||||
|
||||
memset(secret_buf, 0, sizeof(secret_buf));
|
||||
secret_len = dst_key_to_buffer(dst_key, secret_buf, sizeof(secret_buf));
|
||||
b64_ntop(secret_buf, secret_len, secret_buf64, sizeof(secret_buf64));
|
||||
if (secret_len == 0)
|
||||
return (-1);
|
||||
len = b64_ntop(secret_buf, secret_len, secret_buf64,
|
||||
sizeof(secret_buf64));
|
||||
if (len == -1)
|
||||
return (-1);
|
||||
/* We need snprintf! */
|
||||
if (strlen(dst_key->dk_key_name) + len + sizeof("XXX.XXX.XXX.XXX"),
|
||||
sizeof("123") + 5 > sizeof(tsig_str))
|
||||
return (-1);
|
||||
sprintf(tsig_str, "%s\n%s\n%d\n%s\n",
|
||||
inet_ntoa(addr), dst_key->dk_key_name, dst_key->dk_alg,
|
||||
secret_buf64);
|
||||
write(tsig_fd, tsig_str, strlen(tsig_str));
|
||||
return (0);
|
||||
len = strlen(tsig_str);
|
||||
if (write(tsig_fd, tsig_str, strlen(tsig_str)) != len)
|
||||
return (-1);
|
||||
return (1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns number of tsigs written or -1.
|
||||
*/
|
||||
static int
|
||||
write_tsigs(struct zoneinfo *zp, char *tsig_name) {
|
||||
struct in_addr a;
|
||||
int tsig_ret;
|
||||
int tsig_fd = -1;
|
||||
int cnt;
|
||||
int records = 0;
|
||||
|
||||
for (cnt = 0; cnt < zp->z_xaddrcnt; cnt++) {
|
||||
a = zp->z_xaddr[cnt];
|
||||
if (aIsUs(a) && ns_port == zp->z_port)
|
||||
continue;
|
||||
|
||||
tsig_ret = write_tsig_info(a, tsig_name, &tsig_fd);
|
||||
switch (tsig_ret) {
|
||||
case -1:
|
||||
goto error;
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
records++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (tsig_fd != -1)
|
||||
close(tsig_fd);
|
||||
return (records);
|
||||
|
||||
error:
|
||||
if (tsig_fd != -1) {
|
||||
unlink(tsig_name);
|
||||
close(tsig_fd);
|
||||
}
|
||||
return (-1);
|
||||
}
|
||||
|
||||
#ifdef BIND_IXFR
|
||||
static int
|
||||
supports_ixfr(struct zoneinfo *zp) {
|
||||
int cnt = 0;
|
||||
for (cnt = 0; cnt < zp->z_xaddrcnt; cnt++) {
|
||||
struct in_addr a;
|
||||
server_info si;
|
||||
|
||||
a = zp->z_xaddr[cnt];
|
||||
if (aIsUs(a) && ns_port == zp->z_port)
|
||||
continue;
|
||||
si = find_server(a);
|
||||
|
||||
if (si != NULL && (si->flags & SERVER_INFO_SUPPORT_IXFR) != 0)
|
||||
return(1);
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Start an asynchronous zone transfer for a zone. Depends on current time
|
||||
* being in tt. Caller must do a sched_zone_maint(zp) after we return.
|
||||
@ -693,8 +766,7 @@ startxfer(struct zoneinfo *zp) {
|
||||
char port_str[10];
|
||||
char class_str[10];
|
||||
char src_str[20];
|
||||
int tsig_fd = -1;
|
||||
char tsig_name[MAXPATHLEN+1], *s;
|
||||
char tsig_name[MAXPATHLEN+1];
|
||||
int tsig_ret = 0;
|
||||
|
||||
ns_debug(ns_log_default, 1, "startxfer() %s",
|
||||
@ -706,9 +778,9 @@ startxfer(struct zoneinfo *zp) {
|
||||
argv[argc++] = "-f";
|
||||
argv[argc++] = zp->z_source;
|
||||
#ifdef BIND_IXFR
|
||||
if (zp->z_ixfr_tmp) {
|
||||
argv[argc++] = "-i";
|
||||
argv[argc++] = zp->z_ixfr_tmp;
|
||||
if (supports_ixfr(zp) && zp->z_ixfr_tmp != NULL) {
|
||||
argv[argc++] = "-i";
|
||||
argv[argc++] = zp->z_ixfr_tmp;
|
||||
}
|
||||
#endif
|
||||
if (zp->z_serial != 0) {
|
||||
@ -731,12 +803,6 @@ startxfer(struct zoneinfo *zp) {
|
||||
argv[argc++] = "-P";
|
||||
sprintf(port_str, "%d", ntohs(zp->z_port) != 0 ? zp->z_port : ns_port);
|
||||
argv[argc++] = port_str;
|
||||
argv[argc++] = "-T";
|
||||
sprintf(tsig_name, "%s.%d", zp->z_origin, getpid());
|
||||
s = tsig_name;
|
||||
while ((s = strchr(s, '/')) != NULL)
|
||||
*s = '_';
|
||||
argv[argc++] = tsig_name;
|
||||
#ifdef STUBS
|
||||
if (zp->z_type == Z_STUB)
|
||||
argv[argc++] = "-S";
|
||||
@ -762,6 +828,22 @@ startxfer(struct zoneinfo *zp) {
|
||||
zp->z_xaddr[zp->z_xaddrcnt] =
|
||||
zp->z_addr[zp->z_xaddrcnt];
|
||||
}
|
||||
|
||||
/*
|
||||
* Store TSIG keys if we have them.
|
||||
*/
|
||||
strcpy(tsig_name, "tsigs.XXXXXX");
|
||||
tsig_ret = write_tsigs(zp, tsig_name);
|
||||
if (tsig_ret == -1) {
|
||||
ns_error(ns_log_xfer_in, "unable to write tsig info: '%s'",
|
||||
zp->z_origin);
|
||||
return;
|
||||
}
|
||||
if (tsig_ret != 0) {
|
||||
argv[argc++] = "-T";
|
||||
argv[argc++] = tsig_name;
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy the server ip addresses into argv, after converting
|
||||
* to ascii and saving the static inet_ntoa result.
|
||||
@ -790,10 +872,7 @@ startxfer(struct zoneinfo *zp) {
|
||||
argv[argc++] = "axfr";
|
||||
}
|
||||
#endif
|
||||
tsig_ret = write_tsig_info(a, tsig_name, &tsig_fd, tsig_ret);
|
||||
}
|
||||
if (tsig_fd > 0)
|
||||
close(tsig_fd);
|
||||
|
||||
argv[argc] = NULL;
|
||||
|
||||
@ -830,7 +909,6 @@ startxfer(struct zoneinfo *zp) {
|
||||
ns_warning(ns_log_default,
|
||||
"startxfer: too many xfers running");
|
||||
zp->z_time = tt.tv_sec + 10;
|
||||
(void)nxfers(zp, -1);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -842,6 +920,7 @@ startxfer(struct zoneinfo *zp) {
|
||||
xferstatus[i].xfer_state = XFER_RUNNING;
|
||||
xferstatus[i].xfer_pid = pid; /* XXX - small race condition here if we
|
||||
* can't hold signals */
|
||||
xferstatus[i].xfer_addr = zp->z_xaddr[0];
|
||||
ns_debug(ns_log_default, 1, "started xfer child %d", pid);
|
||||
zp->z_flags &= ~Z_NEED_XFER;
|
||||
zp->z_flags |= Z_XFER_RUNNING;
|
||||
@ -1102,11 +1181,12 @@ remove_zone(struct zoneinfo *zp, const char *verb) {
|
||||
memset(zp, 0, sizeof(*zp));
|
||||
zp->z_type = z_nil; /* Pedantic; memset() did it. */
|
||||
INIT_LINK(zp, z_reloadlink);
|
||||
INIT_LINK(zp, z_freelink);
|
||||
free_zone(zp);
|
||||
}
|
||||
|
||||
int
|
||||
purge_nonglue(const char *dname, struct hashbuf *htp, int class) {
|
||||
purge_nonglue(const char *dname, struct hashbuf *htp, int class, int log) {
|
||||
const char *fname;
|
||||
struct namebuf *np;
|
||||
struct hashbuf *phtp = htp;
|
||||
@ -1127,7 +1207,7 @@ purge_nonglue(const char *dname, struct hashbuf *htp, int class) {
|
||||
h = htp;
|
||||
else
|
||||
h = np->n_hash;
|
||||
errs += purge_nonglue_2(dname, h, class, 0);
|
||||
errs += purge_nonglue_2(dname, h, class, 0, log);
|
||||
if (h->h_cnt == 0 && !root_zone) {
|
||||
rm_hash(np->n_hash);
|
||||
np->n_hash = NULL;
|
||||
@ -1157,7 +1237,7 @@ valid_glue(struct databuf *dp, char *name, int belowcut) {
|
||||
|
||||
/* NOKEY is in parent zone otherwise child zone */
|
||||
if (dp->d_type == T_KEY && dp->d_size == 4 &&
|
||||
(dp->d_data[0] & 0xc6) == 0xc2)
|
||||
(dp->d_data[0] & 0xc3) == 0xc1)
|
||||
return (1);
|
||||
|
||||
/* NXT & KEY records may be signed */
|
||||
@ -1169,7 +1249,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 belowcut, int log)
|
||||
{
|
||||
struct databuf *dp, *pdp;
|
||||
struct namebuf *np, *pnp, *npn;
|
||||
@ -1197,7 +1277,8 @@ purge_nonglue_2(const char *dname, struct hashbuf *htp, int class,
|
||||
if (dp->d_class == class &&
|
||||
zonecut &&
|
||||
!valid_glue(dp, name, belowcut)) {
|
||||
ns_error(ns_log_db,
|
||||
if (log)
|
||||
ns_error(ns_log_db,
|
||||
"zone: %s/%s: non-glue record %s bottom of zone: %s/%s",
|
||||
*dname ? dname : ".",
|
||||
p_class(dp->d_class),
|
||||
@ -1207,7 +1288,8 @@ purge_nonglue_2(const char *dname, struct hashbuf *htp, int class,
|
||||
p_type(dp->d_type));
|
||||
dp = rm_datum(dp, np, pdp,
|
||||
NULL);
|
||||
errs++;
|
||||
if (log)
|
||||
errs++;
|
||||
} else {
|
||||
pdp = dp;
|
||||
dp = dp->d_next;
|
||||
@ -1222,7 +1304,8 @@ purge_nonglue_2(const char *dname, struct hashbuf *htp, int class,
|
||||
np->n_hash,
|
||||
class,
|
||||
zonecut ||
|
||||
belowcut);
|
||||
belowcut,
|
||||
log);
|
||||
|
||||
/* if now empty, free it */
|
||||
if (np->n_hash->h_cnt == 0) {
|
||||
@ -1356,11 +1439,13 @@ bottom_of_zone(struct databuf *dp, int class) {
|
||||
/*
|
||||
* Handle XFER limit for a nameserver.
|
||||
*/
|
||||
|
||||
|
||||
static int
|
||||
nxfers(struct zoneinfo *zp, int delta) {
|
||||
nxfers(struct zoneinfo *zp) {
|
||||
struct in_addr nsa;
|
||||
struct nameser *nsp;
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
if (zp->z_xaddrcnt != 0)
|
||||
nsa = zp->z_xaddr[0]; /* first ns holds zone's xfer limit */
|
||||
@ -1368,15 +1453,12 @@ nxfers(struct zoneinfo *zp, int delta) {
|
||||
nsa = zp->z_addr[0]; /* first ns holds zone's xfer limit */
|
||||
else
|
||||
return (-1);
|
||||
|
||||
if (!(nsp = nameserFind(nsa, NS_F_INSERT)))
|
||||
return (-1); /* probably ENOMEM */
|
||||
|
||||
ret = nsp->xfers;
|
||||
if (delta < 0 && -delta > ret)
|
||||
return (-1); /* taking more than we have */
|
||||
|
||||
nsp->xfers += delta;
|
||||
|
||||
ret = 0;
|
||||
for (i = 0; i < MAX_XFERS_RUNNING; i++)
|
||||
if (xferstatus[i].xfer_status == XFER_RUNNING &&
|
||||
xferstatus[i].xfer_addr.s_addr == nsa.s_addr)
|
||||
ret++;
|
||||
return (ret);
|
||||
}
|
||||
|
||||
@ -1413,7 +1495,6 @@ pid %lu - forgetting, processes may accumulate",
|
||||
|
||||
zp->z_xferpid = 0;
|
||||
xfers_running--;
|
||||
(void)nxfers(zp, -1);
|
||||
zp->z_flags &= ~(Z_XFER_RUNNING|Z_XFER_ABORTED|Z_XFER_GONE);
|
||||
} else if (kill(zp->z_xferpid, SIGTERM) == -1) {
|
||||
if (errno == ESRCH)
|
||||
@ -1479,7 +1560,6 @@ endxfer() {
|
||||
if (zp->z_xferpid != pid)
|
||||
continue;
|
||||
xfers_running--;
|
||||
(void) nxfers(zp, -1);
|
||||
zp->z_xferpid = 0;
|
||||
zp->z_flags &=
|
||||
~(Z_XFER_RUNNING|Z_XFER_ABORTED|Z_XFER_GONE);
|
||||
@ -1509,7 +1589,9 @@ endxfer() {
|
||||
if (exitstatus == XFER_SUCCESSAXFRIXFRFILE) {
|
||||
zp->z_xferpid = XFER_ISAXFRIXFR;
|
||||
}
|
||||
movefile(zp->z_ixfr_tmp, zp->z_source);
|
||||
if (zp->z_ixfr_tmp != NULL)
|
||||
isc_movefile(zp->z_ixfr_tmp,
|
||||
zp->z_source);
|
||||
/* XXX should incorporate loadxfer() */
|
||||
zp->z_flags |= Z_NEED_RELOAD;
|
||||
zp->z_flags &= ~Z_SYSLOGGED;
|
||||
@ -1529,19 +1611,24 @@ endxfer() {
|
||||
|
||||
(void)unlink(zp->z_updatelog);
|
||||
(void)unlink(zp->z_ixfr_base);
|
||||
movefile(zp->z_ixfr_tmp,
|
||||
zp->z_ixfr_base);
|
||||
isc_movefile(zp->z_ixfr_tmp,
|
||||
zp->z_ixfr_base);
|
||||
(void)unlink(zp->z_ixfr_tmp);
|
||||
if (zonedump(zp, ISIXFR) < 0)
|
||||
ns_warning(ns_log_db,
|
||||
"error in write ixfr updates to zone file %s",
|
||||
zp ->z_source);
|
||||
} else
|
||||
ns_refreshtime(zp, tt.tv_sec);
|
||||
sched_zone_maint(zp);
|
||||
} else {
|
||||
ns_notice(ns_log_default,
|
||||
"IXFR Merge failed %s",
|
||||
zp->z_ixfr_tmp);
|
||||
zp->z_flags &=
|
||||
~(Z_XFER_RUNNING|Z_XFER_ABORTED|Z_XFER_GONE);
|
||||
ns_retrytime(zp, tt.tv_sec);
|
||||
sched_zone_maint(zp);
|
||||
}
|
||||
break;
|
||||
|
||||
case XFER_TIMEOUT:
|
||||
@ -1622,10 +1709,9 @@ tryxfer() {
|
||||
xfers_running >= server_options->transfers_in)
|
||||
break;
|
||||
|
||||
if ((xfers = nxfers(zp, 0)) != -1 &&
|
||||
if ((xfers = nxfers(zp)) != -1 &&
|
||||
xfers < server_options->transfers_per_ns &&
|
||||
(zp->z_flags & Z_NEED_XFER)) {
|
||||
nxfers(zp, 1);
|
||||
xfers_deferred--;
|
||||
startxfer(zp);
|
||||
sched_zone_maint(zp);
|
||||
@ -1827,7 +1913,7 @@ ns_reload(void) {
|
||||
qflush();
|
||||
sq_flush(NULL);
|
||||
reloading++; /* To force transfer if secondary and backing up. */
|
||||
ns_init(conffile);
|
||||
confmtime = ns_init(conffile);
|
||||
time(&resettime);
|
||||
reloading--;
|
||||
ns_notice(ns_log_default, "Ready to answer queries.");
|
||||
@ -1875,6 +1961,7 @@ make_new_zones(void) {
|
||||
block_signals();
|
||||
for (n = 0; n < NEWZONES; n++) {
|
||||
INIT_LINK(&zones[nzones], z_reloadlink);
|
||||
INIT_LINK(&zones[nzones], z_freelink);
|
||||
if (nzones != 0)
|
||||
free_zone(&zones[nzones]);
|
||||
nzones++;
|
||||
@ -1906,7 +1993,6 @@ spawnxfer(char **argv, struct zoneinfo *zp) {
|
||||
execv(server_options->named_xfer, argv);
|
||||
ns_error(ns_log_default, "can't exec %s: %s",
|
||||
server_options->named_xfer, strerror(errno));
|
||||
(void)nxfers(zp, -1);
|
||||
_exit(XFER_FAIL); /* Avoid duplicate buffer flushes. */
|
||||
}
|
||||
return (pid);
|
||||
|
@ -1,5 +1,5 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static const char rcsid[] = "$Id: ns_notify.c,v 8.10 2000/04/21 06:54:09 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: ns_notify.c,v 8.12 2000/12/23 08:14:40 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -129,6 +129,7 @@ ns_notify(const char *dname, ns_class class, ns_type type) {
|
||||
}
|
||||
ni->class = class;
|
||||
ni->type = type;
|
||||
INIT_LINK(ni, link);
|
||||
evInitID(&ni->timer);
|
||||
|
||||
if (loading != 0) {
|
||||
@ -215,7 +216,7 @@ ns_stopnotify(const char *dname, ns_class class) {
|
||||
*/
|
||||
static void
|
||||
sysnotify(const char *dname, ns_class class, ns_type type) {
|
||||
const char *zname, *fname;
|
||||
const char *zname;
|
||||
u_int32_t zserial;
|
||||
int nns, na, i;
|
||||
struct zoneinfo *zp;
|
||||
|
@ -1,6 +1,6 @@
|
||||
%{
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static char rcsid[] = "$Id: ns_parser.y,v 8.55 2000/04/23 02:18:59 vixie Exp $";
|
||||
static char rcsid[] = "$Id: ns_parser.y,v 8.63 2000/12/23 08:14:41 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -25,6 +25,7 @@ static char rcsid[] = "$Id: ns_parser.y,v 8.55 2000/04/23 02:18:59 vixie Exp $";
|
||||
#include "port_before.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/un.h>
|
||||
|
||||
@ -70,10 +71,10 @@ static int should_install;
|
||||
|
||||
static options current_options;
|
||||
static int seen_options;
|
||||
static int logged_options_error;
|
||||
|
||||
static controls current_controls;
|
||||
|
||||
static topology_config current_topology;
|
||||
static int seen_topology;
|
||||
|
||||
static server_config current_server;
|
||||
@ -131,6 +132,7 @@ int yyparse();
|
||||
%token T_DIRECTORY T_PIDFILE T_NAMED_XFER
|
||||
%token T_DUMP_FILE T_STATS_FILE T_MEMSTATS_FILE
|
||||
%token T_FAKE_IQUERY T_RECURSION T_FETCH_GLUE
|
||||
%token T_HITCOUNT
|
||||
%token T_QUERY_SOURCE T_LISTEN_ON T_PORT T_ADDRESS
|
||||
%token T_RRSET_ORDER T_ORDER T_NAME T_CLASS
|
||||
%token T_CONTROLS T_INET T_UNIX T_PERM T_OWNER T_GROUP T_ALLOW
|
||||
@ -142,7 +144,7 @@ int yyparse();
|
||||
%token T_DATASIZE T_STACKSIZE T_CORESIZE
|
||||
%token T_DEFAULT T_UNLIMITED
|
||||
%token T_FILES T_VERSION
|
||||
%token T_HOSTSTATS T_DEALLOC_ON_EXIT
|
||||
%token T_HOSTSTATS T_HOSTSTATSMAX T_DEALLOC_ON_EXIT
|
||||
%token T_TRANSFERS_IN T_TRANSFERS_OUT T_TRANSFERS_PER_NS
|
||||
%token T_TRANSFER_FORMAT T_MAX_TRANSFER_TIME_IN
|
||||
%token T_SERIAL_QUERIES T_ONE_ANSWER T_MANY_ANSWERS
|
||||
@ -349,6 +351,11 @@ option: /* Empty */
|
||||
set_global_boolean_option(current_options,
|
||||
OPTION_NOFETCHGLUE, !$2);
|
||||
}
|
||||
| T_HITCOUNT yea_or_nay
|
||||
{
|
||||
set_global_boolean_option(current_options,
|
||||
OPTION_HITCOUNT, $2);
|
||||
}
|
||||
| T_NOTIFY yea_or_nay
|
||||
{
|
||||
set_global_boolean_option(current_options,
|
||||
@ -529,7 +536,11 @@ option: /* Empty */
|
||||
{
|
||||
current_options->stats_interval = $2 * 60;
|
||||
}
|
||||
| T_MAX_LOG_SIZE_IXFR L_NUMBER
|
||||
| T_HOSTSTATSMAX L_NUMBER
|
||||
{
|
||||
current_options->max_host_stats = $2;
|
||||
}
|
||||
| T_MAX_LOG_SIZE_IXFR size_spec
|
||||
{
|
||||
current_options->max_log_size_ixfr = $2;
|
||||
}
|
||||
@ -1124,7 +1135,6 @@ channel_name: any_string
|
||||
channel: channel_name
|
||||
{
|
||||
log_channel channel;
|
||||
symbol_value value;
|
||||
|
||||
if (current_category >= 0) {
|
||||
channel = lookup_channel($1);
|
||||
@ -1461,9 +1471,11 @@ zone_stmt: T_ZONE L_QSTRING optional_class
|
||||
symbol_value value;
|
||||
char *zone_name;
|
||||
|
||||
if (!seen_options)
|
||||
if (!seen_options && !logged_options_error) {
|
||||
parser_error(0,
|
||||
"no options statement before first zone; using previous/default");
|
||||
logged_options_error = 1;
|
||||
}
|
||||
sym_type = SYM_ZONE | ($3 & 0xffff);
|
||||
value.pointer = NULL;
|
||||
zone_name = canonical_name($2);
|
||||
@ -1555,17 +1567,17 @@ zone_option: T_TYPE zone_type
|
||||
"zone filename already set; skipping");
|
||||
}
|
||||
| T_FILE_IXFR L_QSTRING
|
||||
{
|
||||
if (!set_zone_ixfr_file(current_zone, $2))
|
||||
parser_warning(0,
|
||||
"zone ixfr data base already set; skipping");
|
||||
}
|
||||
{
|
||||
if (!set_zone_ixfr_file(current_zone, $2))
|
||||
parser_warning(0,
|
||||
"zone ixfr data base already set; skipping");
|
||||
}
|
||||
| T_IXFR_TMP L_QSTRING
|
||||
{
|
||||
if (!set_zone_ixfr_tmp(current_zone, $2))
|
||||
parser_warning(0,
|
||||
"zone ixfr temp filename already set; skipping");
|
||||
}
|
||||
{
|
||||
if (!set_zone_ixfr_tmp(current_zone, $2))
|
||||
parser_warning(0,
|
||||
"zone ixfr temp filename already set; skipping");
|
||||
}
|
||||
| T_MASTERS maybe_zero_port '{' master_in_addr_list '}'
|
||||
{
|
||||
set_zone_master_port(current_zone, $2);
|
||||
@ -1615,7 +1627,7 @@ zone_option: T_TYPE zone_type
|
||||
parser_warning(0,
|
||||
"zone max transfer time (in) already set; skipping");
|
||||
}
|
||||
| T_MAX_LOG_SIZE_IXFR L_NUMBER
|
||||
| T_MAX_LOG_SIZE_IXFR size_spec
|
||||
{
|
||||
set_zone_max_log_size_ixfr(current_zone, $2);
|
||||
}
|
||||
@ -1872,6 +1884,7 @@ define_builtin_channels() {
|
||||
static void
|
||||
parser_setup() {
|
||||
seen_options = 0;
|
||||
logged_options_error = 0;
|
||||
seen_topology = 0;
|
||||
symtab = new_symbol_table(SYMBOL_TABLE_SIZE, NULL);
|
||||
if (authtab != NULL)
|
||||
@ -1941,13 +1954,16 @@ define_key(char *name, struct dst_key *dst_key) {
|
||||
dprint_key_info(dst_key);
|
||||
}
|
||||
|
||||
void
|
||||
time_t
|
||||
parse_configuration(const char *filename) {
|
||||
FILE *config_stream;
|
||||
struct stat sb;
|
||||
|
||||
config_stream = fopen(filename, "r");
|
||||
if (config_stream == NULL)
|
||||
ns_panic(ns_log_parser, 0, "can't open '%s'", filename);
|
||||
if (fstat(fileno(config_stream), &sb) == -1)
|
||||
ns_panic(ns_log_parser, 0, "can't stat '%s'", filename);
|
||||
|
||||
lexer_setup();
|
||||
parser_setup();
|
||||
@ -1955,6 +1971,7 @@ parse_configuration(const char *filename) {
|
||||
(void)yyparse();
|
||||
lexer_end_file();
|
||||
parser_cleanup();
|
||||
return (sb.st_mtime);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -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.119 2000/08/21 05:57:09 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: ns_req.c,v 8.129 2001/01/08 23:46:41 marka Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -174,11 +174,14 @@ ns_req(u_char *msg, int msglen, int buflen, struct qstream *qsp,
|
||||
HEADER *hp = (HEADER *) msg;
|
||||
u_char *cp, *eom;
|
||||
enum req_action action;
|
||||
int n, ra, has_tsig, msglen_orig, tsig_size, siglen, sig2len;
|
||||
int n, ra, has_tsig, tsig_size, sig2len;
|
||||
u_char *tsigstart;
|
||||
u_char sig[TSIG_SIG_SIZE], sig2[TSIG_SIG_SIZE];
|
||||
struct tsig_record *in_tsig = NULL;
|
||||
int error = NOERROR;
|
||||
int msglen_orig = msglen;
|
||||
int buflen_orig = buflen;
|
||||
int siglen = sizeof sig;
|
||||
DST_KEY *key;
|
||||
time_t tsig_time;
|
||||
|
||||
@ -188,8 +191,6 @@ ns_req(u_char *msg, int msglen, int buflen, struct qstream *qsp,
|
||||
fp_nquery(msg, msglen, log_get_stream(packet_channel));
|
||||
}
|
||||
#endif
|
||||
msglen_orig = msglen;
|
||||
siglen = sizeof(sig);
|
||||
|
||||
tsigstart = ns_find_tsig(msg, msg + msglen);
|
||||
if (tsigstart == NULL)
|
||||
@ -198,7 +199,7 @@ ns_req(u_char *msg, int msglen, int buflen, struct qstream *qsp,
|
||||
char buf[MAXDNAME];
|
||||
|
||||
has_tsig = 1;
|
||||
n = dn_expand(msg, msg + msglen, tsigstart, buf, sizeof(buf));
|
||||
n = dn_expand(msg, msg + msglen, tsigstart, buf, sizeof buf);
|
||||
if (n < 0) {
|
||||
ns_debug(ns_log_default, 1,
|
||||
"ns_req: bad TSIG key name",
|
||||
@ -374,24 +375,31 @@ ns_req(u_char *msg, int msglen, int buflen, struct qstream *qsp,
|
||||
* a TSIG error, build a new message with no data and a TSIG.
|
||||
*/
|
||||
if ((hp->tc || error != NOERROR) && has_tsig > 0) {
|
||||
sign_again:
|
||||
hp->ancount = htons(0);
|
||||
hp->nscount = htons(0);
|
||||
hp->arcount = htons(0);
|
||||
cp = msg + HFIXEDSZ;
|
||||
cp += ns_skiprr(cp, msg + msglen, ns_s_qd, ntohs(hp->qdcount));
|
||||
sig2len = sizeof(sig2);
|
||||
buflen += (msglen - (cp - msg));
|
||||
sig2len = sizeof sig2;
|
||||
msglen = cp - msg;
|
||||
buflen = buflen_orig - msglen;
|
||||
n = ns_sign(msg, &msglen, msglen + buflen, error, key,
|
||||
sig, siglen, sig2, &sig2len, tsig_time);
|
||||
if (n != 0) {
|
||||
INSIST(0);
|
||||
if (n == NS_TSIG_ERROR_NO_SPACE && ntohs(hp->qdcount) != 0) {
|
||||
hp->qdcount = htons(0);
|
||||
goto sign_again;
|
||||
}
|
||||
if (n != 0)
|
||||
ns_info(ns_log_default,
|
||||
"ns_req: unable to sign response");
|
||||
cp = msg + msglen;
|
||||
|
||||
}
|
||||
/* Either the message is not truncated or there was no TSIG */
|
||||
else {
|
||||
/*
|
||||
* Reserve space for tsig if required.
|
||||
*/
|
||||
if (has_tsig > 0)
|
||||
buflen -= tsig_size;
|
||||
n = doaddinfo(hp, cp, buflen);
|
||||
@ -399,7 +407,7 @@ ns_req(u_char *msg, int msglen, int buflen, struct qstream *qsp,
|
||||
buflen -= n;
|
||||
if (has_tsig > 0) {
|
||||
buflen += tsig_size;
|
||||
sig2len = sizeof(sig2);
|
||||
sig2len = sizeof sig2;
|
||||
msglen = cp - msg;
|
||||
n = ns_sign(msg, &msglen, msglen + buflen, error, key,
|
||||
sig, siglen, sig2, &sig2len, tsig_time);
|
||||
@ -417,12 +425,12 @@ ns_req(u_char *msg, int msglen, int buflen, struct qstream *qsp,
|
||||
ntohs(hp->id), cp - msg, hp->rcode);
|
||||
if (debug >= 10)
|
||||
res_pquery(&res, msg, cp - msg,
|
||||
log_get_stream(packet_channel));
|
||||
log_get_stream(packet_channel));
|
||||
#endif /*DEBUG*/
|
||||
if (qsp == NULL) {
|
||||
if (sendto(dfd, (char*)msg, cp - msg, 0,
|
||||
(struct sockaddr *)&from,
|
||||
sizeof(from)) < 0) {
|
||||
sizeof from) < 0) {
|
||||
if (!haveComplained(ina_ulong(from.sin_addr),
|
||||
(u_long)sendtoStr))
|
||||
ns_info(ns_log_default,
|
||||
@ -460,7 +468,7 @@ static enum req_action
|
||||
req_notify(HEADER *hp, u_char **cpp, u_char *eom, u_char *msg,
|
||||
struct sockaddr_in from)
|
||||
{
|
||||
int n, type, class, zn;
|
||||
int n, type, class;
|
||||
char dnbuf[MAXDNAME];
|
||||
struct zoneinfo *zp;
|
||||
|
||||
@ -769,11 +777,6 @@ req_query(HEADER *hp, u_char **cpp, u_char *eom, struct qstream *qsp,
|
||||
np == NULL ? "missed" : "found",
|
||||
dname, fname, cname);
|
||||
|
||||
|
||||
ns_debug(ns_log_default, 1, "req: %s '%s' as '%s' (cname=%d)",
|
||||
np == NULL ? "missed" : "found",
|
||||
dname, fname, cname);
|
||||
|
||||
#ifdef YPKLUDGE
|
||||
/* Some braindamaged resolver software will not
|
||||
recognize internet addresses in dot notation and
|
||||
@ -950,6 +953,10 @@ req_query(HEADER *hp, u_char **cpp, u_char *eom, struct qstream *qsp,
|
||||
p_type(type), sin_ntoa(from),
|
||||
*dname ? dname : ".");
|
||||
nameserIncr(from.sin_addr, nssRcvdUXFR);
|
||||
if (type == ns_t_ixfr) {
|
||||
hp->rcode = ns_r_refused;
|
||||
return (Finish);
|
||||
}
|
||||
return (Refuse);
|
||||
}
|
||||
|
||||
@ -961,6 +968,10 @@ req_query(HEADER *hp, u_char **cpp, u_char *eom, struct qstream *qsp,
|
||||
p_type(type), sin_ntoa(from),
|
||||
*dname ? dname : ".");
|
||||
nameserIncr(from.sin_addr, nssRcvdUXFR);
|
||||
if (type == ns_t_ixfr) {
|
||||
hp->rcode = ns_r_refused;
|
||||
return (Finish);
|
||||
}
|
||||
return (Refuse);
|
||||
}
|
||||
|
||||
@ -972,6 +983,10 @@ req_query(HEADER *hp, u_char **cpp, u_char *eom, struct qstream *qsp,
|
||||
p_type(type), sin_ntoa(from),
|
||||
*dname ? dname : ".");
|
||||
nameserIncr(from.sin_addr, nssRcvdUXFR);
|
||||
if (type == ns_t_ixfr) {
|
||||
hp->rcode = ns_r_refused;
|
||||
return (Finish);
|
||||
}
|
||||
return (Refuse);
|
||||
}
|
||||
|
||||
@ -983,6 +998,10 @@ req_query(HEADER *hp, u_char **cpp, u_char *eom, struct qstream *qsp,
|
||||
p_type(type), sin_ntoa(from),
|
||||
*dname ? dname : ".");
|
||||
nameserIncr(from.sin_addr, nssRcvdUXFR);
|
||||
if (type == ns_t_ixfr) {
|
||||
hp->rcode = ns_r_refused;
|
||||
return (Finish);
|
||||
}
|
||||
return (Refuse);
|
||||
}
|
||||
|
||||
@ -1389,15 +1408,20 @@ static enum req_action
|
||||
req_iquery(HEADER *hp, u_char **cpp, u_char *eom, int *buflenp,
|
||||
u_char *msg, struct sockaddr_in from)
|
||||
{
|
||||
int dlen, alen, n, type, class, count;
|
||||
char dnbuf[MAXDNAME], anbuf[PACKETSZ], *data, *fname;
|
||||
u_int rdata_offset;
|
||||
size_t alen;
|
||||
int dlen, n;
|
||||
ns_type type;
|
||||
ns_class class;
|
||||
u_char anbuf[PACKETSZ], *anptr;
|
||||
char dnbuf[MAXDNAME];
|
||||
|
||||
nameserIncr(from.sin_addr, nssRcvdIQ);
|
||||
|
||||
if (ntohs(hp->ancount) != 1
|
||||
|| ntohs(hp->qdcount) != 0
|
||||
|| ntohs(hp->nscount) != 0
|
||||
|| ntohs(hp->arcount) != 0) {
|
||||
if (ntohs(hp->ancount) != 1 ||
|
||||
ntohs(hp->qdcount) != 0 ||
|
||||
ntohs(hp->nscount) != 0 ||
|
||||
ntohs(hp->arcount) != 0) {
|
||||
ns_debug(ns_log_default, 1,
|
||||
"FORMERR IQuery header counts wrong");
|
||||
hp->rcode = ns_r_formerr;
|
||||
@ -1407,7 +1431,9 @@ req_iquery(HEADER *hp, u_char **cpp, u_char *eom, int *buflenp,
|
||||
/*
|
||||
* Skip domain name, get class, and type.
|
||||
*/
|
||||
if ((n = dn_skipname(*cpp, eom)) < 0) {
|
||||
anptr = *cpp;
|
||||
n = dn_skipname(*cpp, eom);
|
||||
if (n < 0) {
|
||||
ns_debug(ns_log_default, 1,
|
||||
"FORMERR IQuery packet name problem");
|
||||
hp->rcode = ns_r_formerr;
|
||||
@ -1430,43 +1456,41 @@ req_iquery(HEADER *hp, u_char **cpp, u_char *eom, int *buflenp,
|
||||
hp->rcode = ns_r_formerr;
|
||||
return (Finish);
|
||||
}
|
||||
rdata_offset = *cpp - anptr;
|
||||
*cpp += dlen;
|
||||
INSIST(*cpp == eom);
|
||||
|
||||
/*
|
||||
* not all inverse queries are handled.
|
||||
* Not all inverse queries are handled.
|
||||
*/
|
||||
switch (type) {
|
||||
case T_A:
|
||||
if (!NS_OPTION_P(OPTION_FAKE_IQUERY) || dlen != INT32SZ) {
|
||||
if (dlen != INT32SZ)
|
||||
ns_warning(ns_log_security,
|
||||
"bad iquery from %s",
|
||||
inet_ntoa(from.sin_addr));
|
||||
return (Refuse);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (type != ns_t_a) {
|
||||
ns_warning(ns_log_security,
|
||||
"unsupported iquery type from %s",
|
||||
inet_ntoa(from.sin_addr));
|
||||
return (Refuse);
|
||||
}
|
||||
ns_debug(ns_log_default, 1,
|
||||
"req: IQuery class %d type %d", class, type);
|
||||
|
||||
fname = (char *)msg + HFIXEDSZ;
|
||||
alen = (char *)*cpp - fname;
|
||||
if ((size_t)alen > sizeof anbuf) {
|
||||
if (dlen != INT32SZ) {
|
||||
ns_warning(ns_log_security,
|
||||
"bad iquery from %s",
|
||||
inet_ntoa(from.sin_addr));
|
||||
return (Refuse);
|
||||
}
|
||||
memcpy(anbuf, fname, alen);
|
||||
data = anbuf + alen - dlen;
|
||||
*cpp = (u_char *)fname;
|
||||
if (!NS_OPTION_P(OPTION_FAKE_IQUERY))
|
||||
return (Refuse);
|
||||
|
||||
ns_debug(ns_log_default, 1,
|
||||
"req: IQuery class %d type %d", class, type);
|
||||
|
||||
alen = eom - anptr;
|
||||
if (alen > sizeof anbuf) {
|
||||
ns_warning(ns_log_security,
|
||||
"bad iquery from %s",
|
||||
inet_ntoa(from.sin_addr));
|
||||
return (Refuse);
|
||||
}
|
||||
memcpy(anbuf, anptr, alen);
|
||||
*cpp = anptr;
|
||||
*buflenp -= HFIXEDSZ;
|
||||
count = 0;
|
||||
|
||||
#ifdef QRYLOG
|
||||
if (qrylog) {
|
||||
@ -1474,7 +1498,7 @@ req_iquery(HEADER *hp, u_char **cpp, u_char *eom, int *buflenp,
|
||||
|
||||
strcpy(tmp, inet_ntoa(from.sin_addr));
|
||||
ns_info(ns_log_queries, "XX /%s/%s/-%s",
|
||||
tmp, inet_ntoa(ina_get((u_char *)data)),
|
||||
tmp, inet_ntoa(ina_get(&anbuf[rdata_offset])),
|
||||
p_type(type));
|
||||
}
|
||||
#endif /*QRYLOG*/
|
||||
@ -1487,7 +1511,7 @@ req_iquery(HEADER *hp, u_char **cpp, u_char *eom, int *buflenp,
|
||||
* A better strategy would be to turn this into a PTR query, but that
|
||||
* would legitimize inverse queries in a way they do not deserve.
|
||||
*/
|
||||
sprintf(dnbuf, "[%s]", inet_ntoa(ina_get((u_char *)data)));
|
||||
sprintf(dnbuf, "[%s]", inet_ntoa(ina_get(&anbuf[rdata_offset])));
|
||||
*buflenp -= QFIXEDSZ;
|
||||
n = dn_comp(dnbuf, *cpp, *buflenp, NULL, NULL);
|
||||
if (n < 0) {
|
||||
@ -1495,19 +1519,20 @@ req_iquery(HEADER *hp, u_char **cpp, u_char *eom, int *buflenp,
|
||||
return (Finish);
|
||||
}
|
||||
*cpp += n;
|
||||
PUTSHORT((u_int16_t)type, *cpp);
|
||||
PUTSHORT((u_int16_t)class, *cpp);
|
||||
*buflenp -= n;
|
||||
count++;
|
||||
PUTSHORT((u_int16_t)type, *cpp);
|
||||
*buflenp -= INT16SZ;
|
||||
PUTSHORT((u_int16_t)class, *cpp);
|
||||
*buflenp -= INT16SZ;
|
||||
|
||||
ns_debug(ns_log_default, 1, "req: IQuery %d records", count);
|
||||
hp->qdcount = htons((u_int16_t)count);
|
||||
hp->qdcount = htons(1);
|
||||
if (alen > *buflenp) {
|
||||
hp->tc = 1;
|
||||
return (Finish);
|
||||
}
|
||||
memcpy(*cpp, anbuf, alen);
|
||||
*cpp += alen;
|
||||
*buflenp -= alen;
|
||||
return (Finish);
|
||||
}
|
||||
|
||||
@ -1540,7 +1565,7 @@ stale(struct databuf *dp) {
|
||||
if ((int32_t)(tt.tv_sec - zp->z_lastupdate)
|
||||
> (int32_t)zp->z_expire) {
|
||||
ns_debug(ns_log_default, 1,
|
||||
"stale: secondary zone %s expired",
|
||||
"stale: slave zone %s expired",
|
||||
zp->z_origin);
|
||||
if (!haveComplained((u_long)zp, (u_long)stale)) {
|
||||
ns_notice(ns_log_default,
|
||||
@ -1775,7 +1800,7 @@ make_rr(const char *name, struct databuf *dp, u_char *buf,
|
||||
|
||||
/* Replacement */
|
||||
ns_debug(ns_log_default, 1, "Replacement = %s", cp1);
|
||||
n = dn_comp((char *)cp1, cp, buflen, comp_ptrs, edp);
|
||||
n = dn_comp((char *)cp1, cp, buflen, NULL, NULL);
|
||||
ns_debug(ns_log_default, 1, "dn_comp's n = %u", n);
|
||||
if (n < 0)
|
||||
goto cleanup;
|
||||
|
@ -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.144 2000/07/11 08:26:09 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: ns_resp.c,v 8.149 2001/01/03 09:47:27 marka Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -201,6 +201,8 @@ learntFrom(struct qinfo *qp, struct sockaddr_in *server) {
|
||||
char *a, *ns, *na;
|
||||
struct databuf *db;
|
||||
int i;
|
||||
char nsbuf[20];
|
||||
char abuf[20];
|
||||
|
||||
a = ns = na = "<Not Available>";
|
||||
|
||||
@ -209,34 +211,22 @@ learntFrom(struct qinfo *qp, struct sockaddr_in *server) {
|
||||
server->sin_addr)) {
|
||||
db = qp->q_addr[i].ns;
|
||||
if (db != NULL) {
|
||||
if (NS_OPTION_P(OPTION_HOSTSTATS)) {
|
||||
char nsbuf[20];
|
||||
|
||||
if (db->d_ns != NULL) {
|
||||
strcpy(nsbuf,
|
||||
inet_ntoa(db->d_ns->addr));
|
||||
ns = nsbuf;
|
||||
} else {
|
||||
ns = zones[db->d_zone]
|
||||
.z_origin;
|
||||
}
|
||||
if (db->d_addr.s_addr != htonl(0)) {
|
||||
strcpy(nsbuf, inet_ntoa(db->d_addr));
|
||||
ns = nsbuf;
|
||||
} else {
|
||||
ns = zones[db->d_zone].z_origin;
|
||||
}
|
||||
if (db->d_rcode == 0)
|
||||
na = (char*)qp->q_addr[i].ns->d_data;
|
||||
}
|
||||
|
||||
if (NS_OPTION_P(OPTION_HOSTSTATS)) {
|
||||
char abuf[20];
|
||||
|
||||
db = qp->q_addr[i].nsdata;
|
||||
if (db != NULL) {
|
||||
if (db->d_ns != NULL) {
|
||||
strcpy(abuf,
|
||||
inet_ntoa(db->d_ns->addr));
|
||||
a = abuf;
|
||||
} else {
|
||||
a = zones[db->d_zone].z_origin;
|
||||
}
|
||||
db = qp->q_addr[i].nsdata;
|
||||
if (db != NULL) {
|
||||
if (db->d_addr.s_addr != htonl(0)) {
|
||||
strcpy(abuf, inet_ntoa(db->d_addr));
|
||||
a = abuf;
|
||||
} else {
|
||||
a = zones[db->d_zone].z_origin;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -466,7 +456,6 @@ ns_resp(u_char *msg, int msglen, struct sockaddr_in from, struct qstream *qsp)
|
||||
for (fwd = NS_ZFWDTAB(qp->q_fzone); fwd; fwd = fwd->next)
|
||||
if (ina_equal(fwd->fwddata->fwdaddr.sin_addr, from.sin_addr))
|
||||
break;
|
||||
/*
|
||||
/*
|
||||
* find the qinfo pointer and update
|
||||
* the rtt and fact that we have called on this server before.
|
||||
@ -714,7 +703,7 @@ ns_resp(u_char *msg, int msglen, struct sockaddr_in from, struct qstream *qsp)
|
||||
#ifdef DEBUG
|
||||
if (debug > 0)
|
||||
res_pquery(&res, msg, msglen,
|
||||
log_get_stream(packet_channel));
|
||||
log_get_stream(packet_channel));
|
||||
#endif
|
||||
/*
|
||||
* Since there is no answer section (ancount == 0),
|
||||
@ -1096,6 +1085,10 @@ ns_resp(u_char *msg, int msglen, struct sockaddr_in from, struct qstream *qsp)
|
||||
: DB_C_ADDITIONAL;
|
||||
}
|
||||
}
|
||||
#ifdef HITCOUNTS
|
||||
++dp->d_hitcnt;
|
||||
++db_total_hits;
|
||||
#endif /* HITCOUNTS */
|
||||
rrsetadd(flushset, name, dp);
|
||||
}
|
||||
free_related_additional();
|
||||
@ -1498,7 +1491,7 @@ ns_resp(u_char *msg, int msglen, struct sockaddr_in from, struct qstream *qsp)
|
||||
#ifdef DEBUG
|
||||
if (debug >= 10)
|
||||
res_pquery(&res, qp->q_msg, qp->q_msglen,
|
||||
log_get_stream(packet_channel));
|
||||
log_get_stream(packet_channel));
|
||||
#endif
|
||||
key = tsig_key_from_addr(nsa->sin_addr);
|
||||
if (key != NULL) {
|
||||
@ -1535,7 +1528,7 @@ ns_resp(u_char *msg, int msglen, struct sockaddr_in from, struct qstream *qsp)
|
||||
if (!haveComplained(ina_ulong(nsa->sin_addr),
|
||||
(u_long)tcpsendStr))
|
||||
ns_info(ns_log_default,
|
||||
"ns_forw: tcp_send(%s) failed: %s",
|
||||
"ns_resp: tcp_send(%s) failed: %s",
|
||||
sin_ntoa(*nsa), strerror(errno));
|
||||
}
|
||||
} else if (sendto(ds, (char*)qp->q_msg, qp->q_msglen, 0,
|
||||
@ -2474,7 +2467,7 @@ sysquery(const char *dname, int class, int type,
|
||||
#ifdef DEBUG
|
||||
if (debug >= 10)
|
||||
res_pquery(&res, qp->q_msg, qp->q_msglen,
|
||||
log_get_stream(packet_channel));
|
||||
log_get_stream(packet_channel));
|
||||
#endif
|
||||
|
||||
key = tsig_key_from_addr(nsa->sin_addr);
|
||||
@ -2927,6 +2920,10 @@ finddata(struct namebuf *np, int class, int type,
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
#ifdef HITCOUNTS
|
||||
++dp->d_hitcnt;
|
||||
++db_total_hits;
|
||||
#endif /* HITCOUNTS */
|
||||
|
||||
/* Don't put anything but key or sig RR's in response to
|
||||
requests for key or sig */
|
||||
@ -3021,7 +3018,8 @@ finddata(struct namebuf *np, int class, int type,
|
||||
|
||||
order = match_order(np, class, foundcname ? T_CNAME : type);
|
||||
|
||||
/* shuffle the SIG records down to the bottom of the array
|
||||
/*
|
||||
* shuffle the SIG records down to the bottom of the array
|
||||
* as we need to make sure they get packed last, no matter
|
||||
* what the ordering is. We're sure to maintain the
|
||||
* original ordering within the two sets of records (so
|
||||
@ -3037,10 +3035,11 @@ finddata(struct namebuf *np, int class, int type,
|
||||
sig_count = found_count - jdx;
|
||||
first_sig = jdx ;
|
||||
|
||||
/* now shift the SIG records down to the end of the array
|
||||
/*
|
||||
* now shift the SIG records down to the end of the array
|
||||
* and copy in the non-SIG records
|
||||
*/
|
||||
for (i = idx = found_count - 1 ; idx >= 0 ; idx--) {
|
||||
for (i = idx = found_count - 1 ; i >= 0 ; idx--) {
|
||||
if (i < non_sig_count) {
|
||||
found[i] = tmpfound[i];
|
||||
i--;
|
||||
|
@ -1,6 +1,6 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static const char sccsid[] = "@(#)ns_stats.c 4.10 (Berkeley) 6/27/90";
|
||||
static const char rcsid[] = "$Id: ns_stats.c,v 8.30 2000/04/23 02:18:59 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: ns_stats.c,v 8.32 2000/11/29 06:56:05 marka Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -108,6 +108,27 @@ static const char rcsid[] = "$Id: ns_stats.c,v 8.30 2000/04/23 02:18:59 vixie Ex
|
||||
|
||||
static u_long typestats[T_ANY+1];
|
||||
static void nameserStats(FILE *);
|
||||
static u_int32_t ns_stats_cnt = 0;
|
||||
static int ns_stats_disabled = 0;
|
||||
|
||||
void
|
||||
ns_stats_dumpandclear() {
|
||||
time_t timenow = time(NULL);
|
||||
FILE *f;
|
||||
|
||||
ns_stats();
|
||||
if (!(f = fopen(server_options->stats_filename, "a"))) {
|
||||
ns_notice(ns_log_statistics, "cannot open stat file, \"%s\"",
|
||||
server_options->stats_filename);
|
||||
}
|
||||
if (f != NULL) {
|
||||
(void) fchown(fileno(f), user_id, group_id);
|
||||
fprintf(f, "+++ Host Statistics Cleared +++ (%ld) %s",
|
||||
(long)timenow, checked_ctime(&timenow));
|
||||
(void) my_fclose(f);
|
||||
}
|
||||
ns_freestats();
|
||||
}
|
||||
|
||||
void
|
||||
ns_stats() {
|
||||
@ -246,12 +267,23 @@ nameserFind(addr, flags)
|
||||
if (!nameserInit) {
|
||||
tree_init(&nameserTree);
|
||||
nameserInit++;
|
||||
ns_stats_cnt = 0;
|
||||
ns_stats_disabled = 0;
|
||||
}
|
||||
|
||||
dummy.addr = addr;
|
||||
ns = (struct nameser *)tree_srch(&nameserTree, nameserCompar,
|
||||
(tree_t)&dummy);
|
||||
if (ns == NULL && (flags & NS_F_INSERT) != 0) {
|
||||
if (server_options->max_host_stats != 0 &&
|
||||
ns_stats_cnt > server_options->max_host_stats) {
|
||||
if (!ns_stats_disabled)
|
||||
ns_notice(ns_log_statistics,
|
||||
"ns_stats_disabled: %s reached",
|
||||
"host-statistics-max");
|
||||
ns_stats_disabled = 1;
|
||||
return (NULL);
|
||||
}
|
||||
ns = (struct nameser *)memget(sizeof(struct nameser));
|
||||
if (ns == NULL) {
|
||||
nomem: if (!haveComplained((u_long)nameserFind, 0))
|
||||
@ -268,6 +300,7 @@ nameserFind(addr, flags)
|
||||
errno = save;
|
||||
goto nomem;
|
||||
}
|
||||
ns_stats_cnt++;
|
||||
}
|
||||
return (ns);
|
||||
}
|
||||
@ -324,8 +357,11 @@ nameserStats(f)
|
||||
nameserStatsHdr(f);
|
||||
fprintf(f, "(Global)\n");
|
||||
nameserStatsOut(f, globalStats);
|
||||
if (NS_OPTION_P(OPTION_HOSTSTATS))
|
||||
if (NS_OPTION_P(OPTION_HOSTSTATS)) {
|
||||
tree_trav(&nameserTree, nameserStatsTravUAR);
|
||||
if (ns_stats_disabled)
|
||||
fprintf(f, "++ Host Statistics Incomplete ++\n");
|
||||
}
|
||||
fprintf(f, "-- Name Server Statistics --\n");
|
||||
nameserStatsFile = NULL;
|
||||
}
|
||||
@ -335,7 +371,7 @@ ns_logstats(evContext ctx, void *uap, struct timespec due,
|
||||
struct timespec inter)
|
||||
{
|
||||
char buffer[1024];
|
||||
char buffer2[32], header[64];
|
||||
char buffer2[32], header[128];
|
||||
time_t timenow = time(NULL);
|
||||
int i;
|
||||
#ifdef HAVE_GETRUSAGE
|
||||
@ -348,11 +384,18 @@ ns_logstats(evContext ctx, void *uap, struct timespec due,
|
||||
getrusage(RUSAGE_SELF, &usage);
|
||||
getrusage(RUSAGE_CHILDREN, &childu);
|
||||
|
||||
sprintf(buffer, "CPU=%gu/%gs CHILDCPU=%gu/%gs",
|
||||
tv_float(usage.ru_utime), tv_float(usage.ru_stime),
|
||||
tv_float(childu.ru_utime), tv_float(childu.ru_stime));
|
||||
ns_info(ns_log_statistics, "USAGE %lu %lu %s", (u_long)timenow,
|
||||
(u_long)boottime, buffer);
|
||||
/*
|
||||
* Get around a stupid compiler bug in gcc on solaris.
|
||||
* There is a problem if three or more doubles are passed to
|
||||
* sprintf.
|
||||
* <http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view&pr=337&database=gcc>
|
||||
*/
|
||||
sprintf(buffer, "CPU=%gu/%gs CHILDCPU=", tv_float(usage.ru_utime),
|
||||
tv_float(usage.ru_stime));
|
||||
sprintf(header, "%gu/%gs", tv_float(childu.ru_utime),
|
||||
tv_float(childu.ru_stime));
|
||||
ns_info(ns_log_statistics, "USAGE %lu %lu %s%s", (u_long)timenow,
|
||||
(u_long)boottime, buffer, header);
|
||||
# undef tv_float
|
||||
#endif /*HAVE_GETRUSAGE*/
|
||||
|
||||
@ -399,4 +442,6 @@ ns_freestats(void) {
|
||||
return;
|
||||
tree_mung(&nameserTree, nameserFree);
|
||||
nameserInit = 0;
|
||||
ns_stats_cnt = 0;
|
||||
ns_stats_disabled = 0;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static const char rcsid[] = "$Id: ns_update.c,v 8.81 2000/07/11 09:25:14 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: ns_update.c,v 8.89 2001/01/14 09:46:20 marka Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -73,15 +73,13 @@ static const char rcsid[] = "$Id: ns_update.c,v 8.81 2000/07/11 09:25:14 vixie E
|
||||
#include <isc/eventlib.h>
|
||||
#include <isc/logging.h>
|
||||
#include <isc/memcluster.h>
|
||||
|
||||
#include <isc/dst.h>
|
||||
#include <isc/misc.h>
|
||||
|
||||
#include "port_after.h"
|
||||
|
||||
#include "named.h"
|
||||
|
||||
static ns_updque curupd;
|
||||
|
||||
#define WRITEABLE_MASK (S_IWUSR | S_IWGRP | S_IWOTH)
|
||||
|
||||
/* XXXRTH almost all funcs. in here should be static!
|
||||
@ -273,7 +271,6 @@ printupdatelog(struct sockaddr_in srcaddr,
|
||||
u_int32_t old_serial)
|
||||
{
|
||||
struct databuf *dp;
|
||||
struct map *mp;
|
||||
ns_updrec *rrecp;
|
||||
int opcode;
|
||||
char time[25];
|
||||
@ -313,9 +310,9 @@ printupdatelog(struct sockaddr_in srcaddr,
|
||||
old_serial);
|
||||
if (ifp)
|
||||
fprintf(ifp,
|
||||
"zone:\torigin %s class %s serial %u\n",
|
||||
"zone:\torigin %s class %s serial %lu\n",
|
||||
zp->z_origin, p_class(zp->z_class),
|
||||
old_serial);
|
||||
(u_long)old_serial);
|
||||
break;
|
||||
case S_PREREQ:
|
||||
opcode = rrecp->r_opcode;
|
||||
@ -730,16 +727,14 @@ process_prereq(ns_updrec *ur, int *rcodep, u_int16_t zclass) {
|
||||
|
||||
static int
|
||||
prescan_nameok(ns_updrec *ur, int *rcodep, u_int16_t zclass,
|
||||
struct zoneinfo *zp) {
|
||||
const char *dname = ur->r_dname;
|
||||
struct zoneinfo *zp)
|
||||
{
|
||||
const char *owner = ur->r_dname;
|
||||
u_int16_t class = ur->r_class;
|
||||
u_int16_t type = ur->r_type;
|
||||
char *cp = (char *)ur->r_dp->d_data;
|
||||
enum context context;
|
||||
|
||||
int ret = 1;
|
||||
|
||||
/* We don't care about deletes */
|
||||
if (ur->r_class != zclass)
|
||||
return (1);
|
||||
@ -808,16 +803,17 @@ prescan_nameok(ns_updrec *ur, int *rcodep, u_int16_t zclass,
|
||||
/*
|
||||
* Order (2)
|
||||
* Preference (2)
|
||||
* Flags (1)
|
||||
*/
|
||||
cp += 5;
|
||||
cp += 4;
|
||||
/* Flags (txt) */
|
||||
cp += (*cp&0xff) + 1;
|
||||
/* Service (txt) */
|
||||
cp += strlen(cp) + 1;
|
||||
cp += (*cp&0xff) + 1;
|
||||
/* Pattern (txt) */
|
||||
cp += strlen(cp) + 1;
|
||||
cp += (*cp&0xff) + 1;
|
||||
context = domain_ctx;
|
||||
if (!ns_nameok(NULL, cp, class, zp, primary_trans, context, owner,
|
||||
inaddr_any))
|
||||
if (!ns_nameok(NULL, cp, class, zp, primary_trans,
|
||||
context, owner, inaddr_any))
|
||||
goto refused;
|
||||
break;
|
||||
case ns_t_srv:
|
||||
@ -887,14 +883,10 @@ prescan_nameok(ns_updrec *ur, int *rcodep, u_int16_t zclass,
|
||||
*/
|
||||
static int
|
||||
prescan_update(ns_updrec *ur, int *rcodep, u_int16_t zclass) {
|
||||
const char *dname = ur->r_dname;
|
||||
u_int16_t class = ur->r_class;
|
||||
u_int16_t type = ur->r_type;
|
||||
u_int32_t ttl = ur->r_ttl;
|
||||
struct databuf *rdp = ur->r_dp;
|
||||
const char *fname;
|
||||
struct hashbuf *htp;
|
||||
struct namebuf *np;
|
||||
|
||||
if (class == zclass) {
|
||||
if (!ns_t_rr_p(type)) {
|
||||
@ -952,11 +944,10 @@ static int
|
||||
process_updates(const ns_updque *updlist, int *rcodep,
|
||||
struct sockaddr_in from)
|
||||
{
|
||||
int i, j, n, dbflags, matches, zonenum;
|
||||
int j, n, dbflags, matches, zonenum;
|
||||
int numupdated = 0, soaupdated = 0, schedmaint = 0;
|
||||
u_int16_t zclass;
|
||||
ns_updrec *ur;
|
||||
const char *fname;
|
||||
struct databuf *dp, *savedp;
|
||||
struct zoneinfo *zp;
|
||||
int zonelist[MAXDNAME];
|
||||
@ -1145,25 +1136,20 @@ class=%s, type=%s, ttl=%d, dp=0x%0x",
|
||||
static enum req_action
|
||||
req_update_private(HEADER *hp, u_char *cp, u_char *eom, u_char *msg,
|
||||
struct qstream *qsp, int dfd, struct sockaddr_in from,
|
||||
struct tsig_record *in_tsig)
|
||||
struct tsig_record *in_tsig, ns_updque curupd)
|
||||
{
|
||||
char dnbuf[MAXDNAME], *dname;
|
||||
u_int zocount, prcount, upcount, adcount, class, type, dlen;
|
||||
u_int32_t ttl;
|
||||
int i, n, cnt, found, matches, zonenum, numupdated = 0;
|
||||
int i, n, matches, zonenum, numupdated = 0;
|
||||
int rcode = NOERROR;
|
||||
u_int c, section;
|
||||
u_int section;
|
||||
u_char rdata[MAXDATA];
|
||||
struct qinfo *qp;
|
||||
struct databuf *dp, *nsp[NSMAX];
|
||||
struct databuf **nspp = &nsp[0];
|
||||
struct zoneinfo *zp;
|
||||
ns_updrec *rrecp;
|
||||
int zonelist[MAXDNAME];
|
||||
int should_use_tcp;
|
||||
u_int32_t old_serial;
|
||||
int unapproved_ip = 0;
|
||||
int tsig_len;
|
||||
DST_KEY *in_key = (in_tsig != NULL) ? in_tsig->key : NULL;
|
||||
|
||||
nsp[0] = NULL;
|
||||
@ -1219,7 +1205,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, "denied update from %s for %s",
|
||||
ns_notice(ns_log_security, "denied update from %s for \"%s\"",
|
||||
sin_ntoa(from), *dname ? dname : ".");
|
||||
nameserIncr(from.sin_addr, nssRcvdUUpd);
|
||||
return (Refuse);
|
||||
@ -1353,6 +1339,7 @@ req_update_private(HEADER *hp, u_char *cp, u_char *eom, u_char *msg,
|
||||
dp->d_secure = DB_S_INSECURE; /* should be UNCHECKED */
|
||||
dp->d_clev = nlabels(zp->z_origin);
|
||||
/* XXX - also record in dp->d_ns, which host this came from */
|
||||
DRCNTINC(dp);
|
||||
rrecp->r_dp = dp;
|
||||
/* Append the current record to the end of list of records. */
|
||||
APPEND(curupd, rrecp, r_link);
|
||||
@ -1408,8 +1395,11 @@ free_rrecp(ns_updque *updlist, int rcode, struct sockaddr_in from) {
|
||||
else
|
||||
next_rrecp = PREV(rrecp, r_link);
|
||||
if (rrecp->r_section != S_UPDATE) {
|
||||
if (rrecp->r_dp)
|
||||
db_freedata(rrecp->r_dp);
|
||||
if (rrecp->r_dp) {
|
||||
DRCNTDEC(rrecp->r_dp);
|
||||
if (rrecp->r_dp->d_rcnt == 0)
|
||||
db_freedata(rrecp->r_dp);
|
||||
}
|
||||
res_freeupdrec(rrecp);
|
||||
continue;
|
||||
}
|
||||
@ -1447,19 +1437,26 @@ free_rrecp(ns_updque *updlist, int rcode, struct sockaddr_in from) {
|
||||
*/
|
||||
}
|
||||
}
|
||||
DRCNTDEC(dp);
|
||||
if (dp->d_rcnt == 0)
|
||||
db_freedata(dp);
|
||||
} else {
|
||||
/*
|
||||
* Databuf's matching this were deleted by this
|
||||
* update, or were never executed (because we bailed
|
||||
* out early).
|
||||
*/
|
||||
db_freedata(dp);
|
||||
DRCNTDEC(dp);
|
||||
if (dp->d_rcnt == 0)
|
||||
db_freedata(dp);
|
||||
}
|
||||
|
||||
/* Process deleted databuf's. */
|
||||
dp = rrecp->r_deldp;
|
||||
while (dp != NULL) {
|
||||
tmpdp = dp;
|
||||
DRCNTDEC(tmpdp);
|
||||
tmpdp->d_next = NULL;
|
||||
dp = dp->d_next;
|
||||
if (rcode == NOERROR) {
|
||||
if (tmpdp->d_rcnt)
|
||||
@ -1468,7 +1465,6 @@ free_rrecp(ns_updque *updlist, int rcode, struct sockaddr_in from) {
|
||||
p_type(tmpdp->d_type),
|
||||
tmpdp->d_rcnt);
|
||||
else {
|
||||
tmpdp->d_next = NULL;
|
||||
db_freedata(tmpdp);
|
||||
}
|
||||
} else {
|
||||
@ -1484,6 +1480,8 @@ free_rrecp(ns_updque *updlist, int rcode, struct sockaddr_in from) {
|
||||
"free_rrecp: added back databuf 0x%0x",
|
||||
tmpdp);
|
||||
}
|
||||
if (tmpdp->d_rcnt == 0)
|
||||
db_freedata(tmpdp);
|
||||
}
|
||||
}
|
||||
res_freeupdrec(rrecp);
|
||||
@ -1497,9 +1495,11 @@ req_update(HEADER *hp, u_char *cp, u_char *eom, u_char *msg,
|
||||
struct tsig_record *in_tsig)
|
||||
{
|
||||
enum req_action ret;
|
||||
ns_updque curupd;
|
||||
|
||||
INIT_LIST(curupd);
|
||||
ret = req_update_private(hp, cp, eom, msg, qsp, dfd, from, in_tsig);
|
||||
ret = req_update_private(hp, cp, eom, msg, qsp, dfd, from,
|
||||
in_tsig, curupd);
|
||||
free_rrecp(&curupd, ret == Refuse ? ns_r_refused : hp->rcode, from);
|
||||
if (ret == Finish) {
|
||||
hp->qdcount = hp->ancount = hp->nscount = hp->arcount = 0;
|
||||
@ -1801,7 +1801,7 @@ rdata_dump(struct databuf *dp, FILE *fp) {
|
||||
if ((n = *cp++) != '\0') {
|
||||
for (j = n; j > 0 && cp < end; j--)
|
||||
if ((*cp < ' ') || (*cp > '~')) {
|
||||
fprintf(fp, "\\%03.3d", *cp++);
|
||||
fprintf(fp, "\\%03d", *cp++);
|
||||
} else if (*cp == '\\' || *cp =='"') {
|
||||
putc('\\', fp);
|
||||
putc(*cp++, fp);
|
||||
@ -1944,7 +1944,7 @@ int
|
||||
findzone(const char *dname, int class, int depth, int *zonelist, int maxzones){
|
||||
char *tmpdname;
|
||||
char tmpdnamebuf[MAXDNAME];
|
||||
char *zonename, *cp;
|
||||
char *zonename;
|
||||
int tmpdnamelen, zonenamelen, zonenum, i, j, c;
|
||||
int matches = 0;
|
||||
int escaped, found, done;
|
||||
@ -2076,7 +2076,7 @@ zonelist=0x%x, maxzones=%d)",
|
||||
int
|
||||
merge_logs(struct zoneinfo *zp, char *logname) {
|
||||
char origin[MAXDNAME], data[MAXDATA], dnbuf[MAXDNAME], sclass[3];
|
||||
char buf[BUFSIZ], buf2[100];
|
||||
char buf[BUFSIZ];
|
||||
FILE *fp;
|
||||
u_int32_t serial, ttl, old_serial, new_serial;
|
||||
char *dname, *cp, *cp1;
|
||||
@ -2091,10 +2091,10 @@ merge_logs(struct zoneinfo *zp, char *logname) {
|
||||
struct in_addr ina;
|
||||
int zonelist[MAXDNAME];
|
||||
struct stat st;
|
||||
u_char *serialp;
|
||||
struct sockaddr_in empty_from;
|
||||
int datasize;
|
||||
unsigned long l;
|
||||
ns_updque curupd;
|
||||
|
||||
empty_from.sin_family = AF_INET;
|
||||
empty_from.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
@ -2124,7 +2124,7 @@ merge_logs(struct zoneinfo *zp, char *logname) {
|
||||
|
||||
/*
|
||||
* See if we really have a log file -- it might be a zone dump
|
||||
* that was in the process of being movefiled, or it might
|
||||
* that was in the process of being isc_movefiled, or it might
|
||||
* be garbage!
|
||||
*/
|
||||
|
||||
@ -2135,13 +2135,14 @@ merge_logs(struct zoneinfo *zp, char *logname) {
|
||||
return (-1);
|
||||
}
|
||||
if (strcmp(buf, DumpSignature) == 0) {
|
||||
/* It's a dump; finish movefile that was interrupted. */
|
||||
/* It's a dump; finish isc_movefile that was interrupted. */
|
||||
ns_info(ns_log_update,
|
||||
"completing interrupted dump movefile for %s",
|
||||
"completing interrupted dump isc_movefile for %s",
|
||||
zp->z_source);
|
||||
fclose(fp);
|
||||
if (movefile(logname, zp->z_source) < 0) {
|
||||
ns_error(ns_log_update, "movefile(%s,%s) failed: %s :1",
|
||||
if (isc_movefile(logname, zp->z_source) < 0) {
|
||||
ns_error(ns_log_update,
|
||||
"isc_movefile(%s,%s) failed: %s :1",
|
||||
logname, zp->z_source,
|
||||
strerror(errno));
|
||||
fclose(fp);
|
||||
@ -2281,7 +2282,7 @@ merge_logs(struct zoneinfo *zp, char *logname) {
|
||||
cp = fgets(buf, sizeof buf, fp);
|
||||
if (!cp)
|
||||
*buf = '\0';
|
||||
n = sscanf(cp, "origin %s class %s serial %ul",
|
||||
n = sscanf(cp, "origin %s class %s serial %lu",
|
||||
origin, sclass, &serial);
|
||||
if (n != 3 || ns_samename(origin, zp->z_origin) != 1)
|
||||
err++;
|
||||
@ -2339,7 +2340,7 @@ merge_logs(struct zoneinfo *zp, char *logname) {
|
||||
break;
|
||||
}
|
||||
/* Owner's domain name. */
|
||||
if (!getword((char *)dnbuf, sizeof dnbuf, fp, 0)) {
|
||||
if (!getword((char *)dnbuf, sizeof dnbuf, fp, 1)) {
|
||||
err++;
|
||||
break;
|
||||
}
|
||||
@ -2454,14 +2455,15 @@ merge_logs(struct zoneinfo *zp, char *logname) {
|
||||
err++;
|
||||
break;
|
||||
}
|
||||
c = getnonblank(fp, logname);
|
||||
c = getnonblank(fp, logname, 1);
|
||||
if (c == '(') {
|
||||
multiline = 1;
|
||||
} else {
|
||||
multiline = 0;
|
||||
ungetc(c, fp);
|
||||
}
|
||||
n = getnum(fp, logname, GETNUM_SERIAL);
|
||||
n = getnum(fp, logname, GETNUM_SERIAL,
|
||||
&multiline);
|
||||
if (getnum_error) {
|
||||
err++;
|
||||
break;
|
||||
@ -2476,12 +2478,14 @@ merge_logs(struct zoneinfo *zp, char *logname) {
|
||||
}
|
||||
PUTLONG(n, cp);
|
||||
}
|
||||
if (multiline &&
|
||||
(getnonblank(fp, logname)
|
||||
!= ')')) {
|
||||
if (multiline) {
|
||||
c = getnonblank(fp, logname, 1);
|
||||
if (c != ')') {
|
||||
ungetc(c, fp);
|
||||
err++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
n = cp - data;
|
||||
endline(fp);
|
||||
break;
|
||||
@ -2710,13 +2714,14 @@ merge_logs(struct zoneinfo *zp, char *logname) {
|
||||
dp->d_cred = DB_C_ZONE;
|
||||
dp->d_clev = nlabels(zp->z_origin);
|
||||
dp->d_secure = DB_S_INSECURE; /* should be UNCHECKED */
|
||||
DRCNTINC(dp);
|
||||
rrecp->r_dp = dp;
|
||||
} else {
|
||||
rrecp->r_zone = zonenum;
|
||||
}
|
||||
APPEND(curupd, rrecp, r_link);
|
||||
} /* for (;;) */
|
||||
|
||||
INSIST(EMPTY(curupd));
|
||||
fclose(fp);
|
||||
return (0);
|
||||
}
|
||||
@ -2826,9 +2831,11 @@ zonedump(struct zoneinfo *zp, int mode) {
|
||||
}
|
||||
|
||||
if (mode == ISIXFR) {
|
||||
if (movefile(tmp_name, zp->z_ixfr_tmp) < 0) {
|
||||
ns_error(ns_log_update, "movefile(%s,%s) failed: %s :2",
|
||||
tmp_name, zp->z_ixfr_tmp, strerror(errno));
|
||||
if (isc_movefile(tmp_name, zp->z_ixfr_tmp) < 0) {
|
||||
ns_error(ns_log_update,
|
||||
"isc_movefile(%s,%s) failed: %s :2",
|
||||
tmp_name, zp->z_ixfr_tmp,
|
||||
strerror(errno));
|
||||
return (-1);
|
||||
}
|
||||
if (chmod(zp->z_source, 0644) < 0)
|
||||
@ -2836,8 +2843,9 @@ zonedump(struct zoneinfo *zp, int mode) {
|
||||
"chmod(%s,%o) failed, pressing on: %s",
|
||||
zp->z_source, st.st_mode,
|
||||
strerror(errno));
|
||||
if (movefile(zp->z_ixfr_tmp, zp->z_source) < 0) {
|
||||
ns_error(ns_log_update, "movefile(%s,%s) failed: %s :3",
|
||||
if (isc_movefile(zp->z_ixfr_tmp, zp->z_source) < 0) {
|
||||
ns_error(ns_log_update,
|
||||
"isc_movefile(%s,%s) failed: %s :3",
|
||||
zp->z_ixfr_tmp, zp->z_source,
|
||||
strerror(errno));
|
||||
return (-1);
|
||||
@ -2849,20 +2857,26 @@ zonedump(struct zoneinfo *zp, int mode) {
|
||||
zp->z_source, st.st_mode,
|
||||
strerror(errno));
|
||||
} else if (mode == ISNOTIXFR) {
|
||||
if (movefile(tmp_name, zp->z_updatelog) < 0) {
|
||||
ns_error(ns_log_update, "movefile(%s,%s) failed: %s :4",
|
||||
tmp_name, zp->z_updatelog, strerror(errno));
|
||||
if (isc_movefile(tmp_name, zp->z_updatelog) < 0) {
|
||||
ns_error(ns_log_update,
|
||||
"isc_movefile(%s,%s) failed: %s :4",
|
||||
tmp_name, zp->z_updatelog,
|
||||
strerror(errno));
|
||||
return (-1);
|
||||
}
|
||||
if (movefile(zp->z_updatelog, zp->z_source) < 0) {
|
||||
ns_error(ns_log_update, "movefile(%s,%s) failed: %s:5",
|
||||
zp->z_updatelog, zp->z_source,
|
||||
strerror(errno));
|
||||
if (isc_movefile(zp->z_updatelog, zp->z_source) < 0) {
|
||||
ns_error(ns_log_update,
|
||||
"isc_movefile(%s,%s) failed: %s :5",
|
||||
zp->z_updatelog, zp->z_source,
|
||||
strerror(errno));
|
||||
return (-1);
|
||||
}
|
||||
} else {
|
||||
if (movefile(tmp_name, zp->z_source) < 0) {
|
||||
ns_error(ns_log_update, "movefile(%s,%s) failed: % s :6", tmp_name, zp->z_source, strerror(errno));
|
||||
if (isc_movefile(tmp_name, zp->z_source) < 0) {
|
||||
ns_error(ns_log_update,
|
||||
"isc_movefile(%s,%s) failed: %s :6",
|
||||
tmp_name, zp->z_source,
|
||||
strerror(errno));
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static const char rcsid[] = "$Id: ns_xfr.c,v 8.62 2000/04/24 05:20:51 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: ns_xfr.c,v 8.63 2000/12/23 08:14:43 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -188,7 +188,7 @@ ns_xfr(struct qstream *qsp, struct namebuf *znp,
|
||||
if (type == ns_t_ixfr) {
|
||||
changes = ixfr_get_change_list(&zones[zone], serial_ixfr,
|
||||
zones[zone].z_serial);
|
||||
ixfr_log_maint(&zones[zone], 1);
|
||||
ixfr_log_maint(&zones[zone]);
|
||||
if (changes != NULL) {
|
||||
qsp->xfr.serial = serial_ixfr;
|
||||
qsp->xfr.top.ixfr = changes;
|
||||
@ -314,7 +314,7 @@ sx_flush(struct qstream *qsp) {
|
||||
#ifdef DEBUG
|
||||
if (debug >= 10)
|
||||
res_pquery(&res, qsp->xfr.msg, qsp->xfr.cp - qsp->xfr.msg,
|
||||
log_get_stream(packet_channel));
|
||||
log_get_stream(packet_channel));
|
||||
#endif
|
||||
if (qsp->xfr.tsig_state != NULL && qsp->xfr.tsig_skip == 0) {
|
||||
int msglen = qsp->xfr.cp - qsp->xfr.msg;
|
||||
|
@ -13,16 +13,16 @@
|
||||
## ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
## SOFTWARE.
|
||||
|
||||
# $Id: Makefile,v 1.16 2000/07/11 06:41:34 vixie Exp $
|
||||
# $Id: Makefile,v 1.17 2000/12/23 08:02:54 vixie Exp $
|
||||
|
||||
DESTDIR=
|
||||
CC= cc
|
||||
SHELL= /bin/sh
|
||||
|
||||
CDEBUG= -g
|
||||
CDEBUG= -g -Wall
|
||||
|
||||
#(net2 and its descendents)
|
||||
SYSTYPE = bsdos
|
||||
SYSTYPE = freebsd
|
||||
TOP = ../..
|
||||
INCL = ${TOP}/include
|
||||
PORTINCL = ${TOP}/port/${SYSTYPE}/include
|
||||
|
@ -1,5 +1,5 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static const char rcsid[] = "$Id: ndc.c,v 1.14 2000/02/04 08:28:32 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: ndc.c,v 1.16 2000/12/23 08:14:45 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -31,6 +31,7 @@ static const char rcsid[] = "$Id: ndc.c,v 1.14 2000/02/04 08:28:32 vixie Exp $";
|
||||
#include <arpa/nameser.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
@ -296,8 +297,20 @@ builtincmd(void) {
|
||||
|
||||
static void
|
||||
builtinhelp(void) {
|
||||
printf(helpfmt, "start", "start the server");
|
||||
printf(helpfmt, "restart", "stop server if any, start a new one");
|
||||
const char *fmt;
|
||||
|
||||
switch (mode) {
|
||||
case e_channel:
|
||||
fmt = "(builtin) %s - %s\n";
|
||||
break;
|
||||
case e_signals:
|
||||
fmt = helpfmt;
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
}
|
||||
printf(fmt, "start", "start the server");
|
||||
printf(fmt, "restart", "stop server if any, start a new one");
|
||||
}
|
||||
|
||||
static void
|
||||
@ -371,8 +384,10 @@ command_channel(void) {
|
||||
int helping = (strcasecmp(cmd, "help") == 0);
|
||||
int save_quiet = quiet;
|
||||
|
||||
if (helping)
|
||||
if (helping) {
|
||||
quiet = 0;
|
||||
builtinhelp();
|
||||
}
|
||||
channel_loop(cmd, !quiet, NULL, NULL);
|
||||
quiet = save_quiet;
|
||||
}
|
||||
@ -496,7 +511,6 @@ static void
|
||||
command_signals(void) {
|
||||
struct cmdsig *cmdsig;
|
||||
pid_t pid;
|
||||
int sig;
|
||||
|
||||
if (strcasecmp(cmd, "help") == 0) {
|
||||
printf(helpfmt, "help", "this output");
|
||||
|
@ -13,16 +13,16 @@
|
||||
## ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
## SOFTWARE.
|
||||
|
||||
# $Id: Makefile,v 8.25 2000/07/11 06:41:35 vixie Exp $
|
||||
# $Id: Makefile,v 8.26 2000/12/23 08:02:55 vixie Exp $
|
||||
|
||||
DESTDIR=
|
||||
CC= cc
|
||||
SHELL= /bin/sh
|
||||
|
||||
CDEBUG= -g
|
||||
CDEBUG= -g -Wall
|
||||
|
||||
#(net2 and its descendents)
|
||||
SYSTYPE = bsdos
|
||||
SYSTYPE = freebsd
|
||||
TOP = ../..
|
||||
INCL = ${TOP}/include
|
||||
PORTINCL = ${TOP}/port/${SYSTYPE}/include
|
||||
|
@ -95,6 +95,7 @@ static char sccsid[] = "@(#)commands.l 5.13 (Berkeley) 7/24/90";
|
||||
|
||||
#include "port_before.h"
|
||||
#include <sys/types.h>
|
||||
#include <netinet/in.h>
|
||||
#include "port_after.h"
|
||||
#include "res.h"
|
||||
|
||||
|
@ -53,7 +53,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char sccsid[] = "@(#)debug.c 5.26 (Berkeley) 3/21/91";
|
||||
static const char rcsid[] = "$Id: debug.c,v 8.16 2000/07/11 05:59:32 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: debug.c,v 8.17 2000/11/08 06:47:31 marka Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -88,7 +88,9 @@ static const char rcsid[] = "$Id: debug.c,v 8.16 2000/07/11 05:59:32 vixie Exp $
|
||||
/*
|
||||
* Imported from res_debug.c
|
||||
*/
|
||||
#ifndef HAVE_DECL_RES_OPCODES
|
||||
extern char *_res_opcodes[];
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Used to highlight the start of a record when printing it.
|
||||
|
@ -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.16 2000/07/11 04:36:26 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: getinfo.c,v 8.17 2000/12/23 08:14:46 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -693,6 +693,7 @@ GetHostInfoByName(nsAddrPtr, queryClass, queryType, name, hostPtr, isServer)
|
||||
* Perform a query on the concatenation of name and domain,
|
||||
* removing a trailing dot from name if domain is NULL.
|
||||
*/
|
||||
int
|
||||
GetHostDomain(nsAddrPtr, queryClass, queryType, name, domain, hostPtr, isServer)
|
||||
struct in_addr *nsAddrPtr;
|
||||
int queryClass;
|
||||
|
@ -53,7 +53,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char sccsid[] = "@(#)list.c 5.23 (Berkeley) 3/21/91";
|
||||
static const char rcsid[] = "$Id: list.c,v 8.23 2000/03/30 23:25:34 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: list.c,v 8.25 2000/12/23 08:14:46 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -72,6 +72,8 @@ static const char rcsid[] = "$Id: list.c,v 8.23 2000/03/30 23:25:34 vixie Exp $"
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/uio.h>
|
||||
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/nameser.h>
|
||||
@ -258,7 +260,7 @@ ListSubr(int qtype, char *domain, char *cmd) {
|
||||
querybuf buf;
|
||||
struct sockaddr_in sin;
|
||||
HEADER *headerPtr;
|
||||
int msglen, amtToRead, numRead, n, count, soacnt;
|
||||
int msglen, amtToRead, numRead, soacnt;
|
||||
u_int len;
|
||||
int numAnswers = 0;
|
||||
int numRecords = 0;
|
||||
@ -266,6 +268,7 @@ ListSubr(int qtype, char *domain, char *cmd) {
|
||||
char soaname[2][NAME_LEN], file[PATH_MAX];
|
||||
enum { NO_ERRORS, ERR_READING_LEN, ERR_READING_MSG, ERR_PRINTING }
|
||||
error = NO_ERRORS;
|
||||
struct iovec iov[2];
|
||||
|
||||
/*
|
||||
* Create a query packet for the requested domain name.
|
||||
@ -321,8 +324,11 @@ ListSubr(int qtype, char *domain, char *cmd) {
|
||||
* Send length & message for zone transfer
|
||||
*/
|
||||
ns_put16(msglen, tmp);
|
||||
if (write(sockFD, (char *)tmp, INT16SZ) != INT16SZ ||
|
||||
write(sockFD, (char *)buf.qb2, msglen) != msglen) {
|
||||
iov[0].iov_base = (char *)tmp;
|
||||
iov[0].iov_len = INT16SZ;
|
||||
iov[1].iov_base = (char *)buf.qb2;
|
||||
iov[1].iov_len = msglen;
|
||||
if (writev(sockFD, iov, 2) != INT16SZ + msglen) {
|
||||
perror("ls: write");
|
||||
(void) close(sockFD);
|
||||
sockFD = -1;
|
||||
@ -518,6 +524,7 @@ ListSubr(int qtype, char *domain, char *cmd) {
|
||||
*******************************************************************************
|
||||
*/
|
||||
|
||||
int
|
||||
Finger(string, putToFile)
|
||||
char *string;
|
||||
int putToFile;
|
||||
@ -641,8 +648,7 @@ Finger(string, putToFile)
|
||||
}
|
||||
|
||||
void
|
||||
ListHost_close()
|
||||
{
|
||||
ListHost_close(void) {
|
||||
if (sockFD != -1) {
|
||||
(void) close(sockFD);
|
||||
sockFD = -1;
|
||||
|
@ -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.14 2000/03/30 23:25:34 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: main.c,v 8.16 2000/12/23 08:14:47 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -114,19 +114,22 @@ static const char rcsid[] = "$Id: main.c,v 8.14 2000/03/30 23:25:34 vixie Exp $"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "port_after.h"
|
||||
|
||||
#include "res.h"
|
||||
#include "pathnames.h"
|
||||
|
||||
int yylex(void);
|
||||
|
||||
/*
|
||||
* Name of a top-level name server. Can be changed with
|
||||
* the "set root" command.
|
||||
*/
|
||||
|
||||
#ifndef ROOT_SERVER
|
||||
#define ROOT_SERVER "a.root-servers.net."
|
||||
#define ROOT_SERVER "f.root-servers.net."
|
||||
#endif
|
||||
char rootServerName[NAME_LEN] = ROOT_SERVER;
|
||||
|
||||
@ -181,10 +184,10 @@ static void ReadRC();
|
||||
/*
|
||||
* Forward declarations.
|
||||
*/
|
||||
void LocalServer(HostInfo *defaultPtr);
|
||||
void res_re_init(void);
|
||||
void res_dnsrch(char *cp);
|
||||
|
||||
static void LocalServer(HostInfo *defaultPtr);
|
||||
static void res_re_init(void);
|
||||
static void res_dnsrch(char *cp);
|
||||
static void Usage(void);
|
||||
|
||||
/*
|
||||
******************************************************************************
|
||||
@ -198,10 +201,8 @@ void res_dnsrch(char *cp);
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
int
|
||||
main(int argc, char **argv) {
|
||||
char *wantedHost = NULL;
|
||||
Boolean useLocalServer;
|
||||
int result;
|
||||
@ -299,8 +300,8 @@ main(argc, argv)
|
||||
break;
|
||||
} else {
|
||||
result = GetHostInfoByAddr(&(res.nsaddr_list[i].sin_addr),
|
||||
&(res.nsaddr_list[i].sin_addr),
|
||||
defaultPtr);
|
||||
&(res.nsaddr_list[i].sin_addr),
|
||||
defaultPtr);
|
||||
if (result != SUCCESS) {
|
||||
fprintf(stderr,
|
||||
"*** Can't find server name for address %s: %s\n",
|
||||
@ -407,8 +408,8 @@ LocalServer(defaultPtr)
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
Usage()
|
||||
{
|
||||
static void
|
||||
Usage(void) {
|
||||
fprintf(stderr, "Usage:\n");
|
||||
fprintf(stderr,
|
||||
" nslookup [-opt ...] # interactive mode using default server\n");
|
||||
@ -782,10 +783,7 @@ LookupHost(string, putToFile)
|
||||
*/
|
||||
|
||||
int
|
||||
LookupHostWithServer(string, putToFile)
|
||||
char *string;
|
||||
Boolean putToFile;
|
||||
{
|
||||
LookupHostWithServer(char *string, Boolean putToFile) {
|
||||
char file[PATH_MAX];
|
||||
char host[NAME_LEN];
|
||||
char server[NAME_LEN];
|
||||
@ -956,7 +954,13 @@ SetOption(option)
|
||||
return(ERROR);
|
||||
}
|
||||
|
||||
queryType = StringToType(type, queryType, stderr);
|
||||
i = StringToType(type, queryType, stderr);
|
||||
if (ns_t_xfr_p(i)) {
|
||||
fprintf(stderr, "*** qtype may not be a zone transfer\n");
|
||||
return(ERROR);
|
||||
}
|
||||
|
||||
queryType = i;
|
||||
}
|
||||
} else if (strncmp(option, "cl", 2) == 0) { /* query class */
|
||||
ptr = strchr(option, '=');
|
||||
|
@ -55,11 +55,13 @@
|
||||
|
||||
/*
|
||||
* @(#)pathnames.h 5.1 (Berkeley) 5/28/90
|
||||
* $Id: pathnames.h,v 8.1 1994/12/15 06:24:31 vixie Exp $
|
||||
* $Id: pathnames.h,v 8.2 2000/11/08 06:47:32 marka Exp $
|
||||
*/
|
||||
|
||||
#define _PATH_NSLOOKUPRC "/.nslookuprc"
|
||||
#ifndef _PATH_PAGERCMD
|
||||
#define _PATH_PAGERCMD "more"
|
||||
#endif
|
||||
|
||||
#ifndef _PATH_HELPFILE
|
||||
#if defined(BSD) && BSD >= 198810
|
||||
|
@ -55,7 +55,7 @@
|
||||
|
||||
/*
|
||||
* @(#)res.h 5.10 (Berkeley) 6/1/90
|
||||
* $Id: res.h,v 8.5 1998/09/16 17:03:17 vixie Exp $
|
||||
* $Id: res.h,v 8.7 2000/12/23 08:14:47 vixie Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -97,6 +97,10 @@ typedef int Boolean;
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef ERROR
|
||||
#undef ERROR
|
||||
#endif
|
||||
|
||||
#define SUCCESS 0
|
||||
#define TIME_OUT -1
|
||||
#define NO_INFO -2
|
||||
@ -186,3 +190,21 @@ extern void ShowOptions();
|
||||
extern void FreeHostInfoPtr();
|
||||
extern FILE *OpenFile();
|
||||
extern char *res_skip();
|
||||
extern int pickString(const char *, char *, size_t);
|
||||
extern int GetHostInfoByName();
|
||||
extern int GetHostInfoByAddr();
|
||||
extern int GetHostDomain();
|
||||
extern int matchString(const char *, const char *);
|
||||
extern int StringToType(char *, int, FILE *);
|
||||
extern int StringToClass(char *, int, FILE *);
|
||||
extern int SendRequest(struct in_addr *, const u_char *, int,
|
||||
u_char *, u_int, int *);
|
||||
extern void SendRequest_close(void);
|
||||
extern int SetDefaultServer(char *, Boolean);
|
||||
extern int Finger(char *, int);
|
||||
void ListHostsByType(char *, int);
|
||||
void ListHosts(char *, int);
|
||||
void ListHost_close(void);
|
||||
int SetOption(char *);
|
||||
int LookupHost(char *, Boolean);
|
||||
int LookupHostWithServer(char *, Boolean);
|
||||
|
@ -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.9 1999/10/13 16:39:19 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: send.c,v 8.10 2000/12/23 08:14:47 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -87,6 +87,7 @@ static const char rcsid[] = "$Id: send.c,v 8.9 1999/10/13 16:39:19 vixie Exp $";
|
||||
#include <errno.h>
|
||||
#include <resolv.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "port_after.h"
|
||||
@ -393,8 +394,8 @@ SendRequest(struct in_addr *nsAddrPtr, const u_char *buf, int buflen,
|
||||
*
|
||||
* Called from the interrupt handler.
|
||||
*/
|
||||
void SendRequest_close()
|
||||
{
|
||||
void
|
||||
SendRequest_close(void) {
|
||||
if (s != -1) {
|
||||
(void) close(s);
|
||||
s = -1;
|
||||
|
@ -53,7 +53,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char sccsid[] = "@(#)subr.c 5.24 (Berkeley) 3/2/91";
|
||||
static const char rcsid[] = "$Id: subr.c,v 8.13 1999/10/13 16:39:20 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: subr.c,v 8.14 2000/12/23 08:14:48 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -82,6 +82,7 @@ static const char rcsid[] = "$Id: subr.c,v 8.13 1999/10/13 16:39:20 vixie Exp $"
|
||||
#include <arpa/nameser.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include <ctype.h>
|
||||
#include <netdb.h>
|
||||
#include <setjmp.h>
|
||||
#include <signal.h>
|
||||
|
@ -13,16 +13,16 @@
|
||||
## ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
## SOFTWARE.
|
||||
|
||||
# $Id: Makefile,v 8.25 2000/07/11 06:41:35 vixie Exp $
|
||||
# $Id: Makefile,v 8.26 2000/12/23 08:02:55 vixie Exp $
|
||||
|
||||
DESTDIR=
|
||||
CC= cc
|
||||
SHELL= /bin/sh
|
||||
|
||||
CDEBUG= -g
|
||||
CDEBUG= -g -Wall
|
||||
|
||||
#(net2 and its descendents)
|
||||
SYSTYPE = bsdos
|
||||
SYSTYPE = freebsd
|
||||
TOP = ../..
|
||||
INCL = ${TOP}/include
|
||||
PORTINCL = ${TOP}/port/${SYSTYPE}/include
|
||||
|
@ -1,5 +1,5 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static const char rcsid[] = "$Id: nsupdate.c,v 8.24 2000/07/11 06:32:01 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: nsupdate.c,v 8.26 2000/12/23 08:14:48 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -141,15 +141,10 @@ int dns_findprimary (res_state, char *, struct ns_tsig_key *, char *,
|
||||
* zone to which a resource record belongs
|
||||
*/
|
||||
int
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
main(int argc, char **argv) {
|
||||
FILE *fp = NULL;
|
||||
char buf[BUFSIZ], buf2[BUFSIZ], hostbuf[100], filebuf[100];
|
||||
char buf[BUFSIZ], buf2[BUFSIZ];
|
||||
char dnbuf[MAXDNAME], data[MAXDATA];
|
||||
u_char packet[PACKETSZ], answer[PACKETSZ];
|
||||
char *host = hostbuf, *batchfile = filebuf;
|
||||
char *r_dname, *cp, *startp, *endp, *svstartp;
|
||||
char section[15], opcode[10];
|
||||
int i, c, n, n1, inside, lineno = 0, vc = 0,
|
||||
@ -160,13 +155,11 @@ main(argc, argv)
|
||||
struct map *mp;
|
||||
ns_updrec *rrecp;
|
||||
ns_updque listuprec;
|
||||
struct in_addr hostaddr;
|
||||
extern int getopt();
|
||||
extern char *optarg;
|
||||
extern int optind, opterr, optopt;
|
||||
ns_tsig_key key;
|
||||
char *keyfile=NULL, *keyname=NULL, *p, *pp;
|
||||
int file_major, file_minor, alg;
|
||||
char *keyfile=NULL, *keyname=NULL;
|
||||
|
||||
progname = argv[0];
|
||||
|
||||
@ -429,8 +422,8 @@ main(argc, argv)
|
||||
switch (r_section) {
|
||||
case S_PREREQ:
|
||||
if (r_ttl) {
|
||||
fprintf(stderr, "nonzero ttl in prereq section: %ul\n",
|
||||
r_ttl);
|
||||
fprintf(stderr, "nonzero ttl in prereq section: %lu\n",
|
||||
(u_long)r_ttl);
|
||||
r_ttl = 0;
|
||||
}
|
||||
switch (r_opcode) {
|
||||
|
@ -26,7 +26,7 @@ MARGS= DESTDIR="${DESTDIR}" DESTINC="${DESTINC}" INSTALL="${INSTALL}" \
|
||||
|
||||
all depend clean distclean install::
|
||||
@for x in ${SUBDIRS}; do \
|
||||
(cd $$x; pwd; ${MAKE} ${MARGS} $@); \
|
||||
(cd $$x; pwd; ${MAKE} ${MARGS} $@) || exit 1; \
|
||||
done
|
||||
|
||||
distclean:: clean
|
||||
@ -48,7 +48,7 @@ links:: FRC
|
||||
( mkdir $$x; cd $$x; pwd; ln -s ../SRC/$$x SRC; \
|
||||
cp SRC/Makefile Makefile; chmod +w Makefile; \
|
||||
$(MAKE) $(MARGS) links; \
|
||||
); \
|
||||
) || exit 1; \
|
||||
done
|
||||
|
||||
FRC:
|
||||
|
@ -49,7 +49,7 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* $Id: nameser.h,v 8.37 2000/03/30 21:16:49 vixie Exp $
|
||||
* $Id: nameser.h,v 8.41 2000/12/23 08:14:50 vixie Exp $
|
||||
*/
|
||||
|
||||
#ifndef _ARPA_NAMESER_H_
|
||||
@ -127,10 +127,7 @@ struct _ns_flagdata { int mask, shift; };
|
||||
extern struct _ns_flagdata _ns_flagdata[];
|
||||
|
||||
/* Accessor macros - this is part of the public interface. */
|
||||
#define ns_msg_getflag(handle, flag) ( \
|
||||
((handle)._flags & _ns_flagdata[flag].mask) \
|
||||
>> _ns_flagdata[flag].shift \
|
||||
)
|
||||
|
||||
#define ns_msg_id(handle) ((handle)._id + 0)
|
||||
#define ns_msg_base(handle) ((handle)._msg + 0)
|
||||
#define ns_msg_end(handle) ((handle)._eom + 0)
|
||||
@ -295,6 +292,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_tkey = 249, /* Transaction key */
|
||||
ns_t_tsig = 250, /* Transaction signature. */
|
||||
ns_t_ixfr = 251, /* Incremental zone transfer. */
|
||||
ns_t_axfr = 252, /* Transfer zone of authority. */
|
||||
@ -469,6 +467,7 @@ typedef enum __ns_cert_types {
|
||||
/*
|
||||
* ANSI C identifier hiding for bind's lib/nameser.
|
||||
*/
|
||||
#define ns_msg_getflag __ns_msg_getflag
|
||||
#define ns_get16 __ns_get16
|
||||
#define ns_get32 __ns_get32
|
||||
#define ns_put16 __ns_put16
|
||||
@ -503,6 +502,7 @@ typedef enum __ns_cert_types {
|
||||
#define ns_samename __ns_samename
|
||||
|
||||
__BEGIN_DECLS
|
||||
int ns_msg_getflag __P((ns_msg, int));
|
||||
u_int ns_get16 __P((const u_char *));
|
||||
u_long ns_get32 __P((const u_char *));
|
||||
void ns_put16 __P((u_int, u_char *));
|
||||
|
@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* $Id: irs.h,v 8.4 1999/01/18 07:46:46 vixie Exp $
|
||||
* $Id: irs.h,v 8.5 2000/12/23 08:14:49 vixie Exp $
|
||||
*/
|
||||
|
||||
#ifndef _IRS_H_INCLUDED
|
||||
@ -207,6 +207,8 @@ 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 void irs_destroy(void);
|
||||
|
||||
/*
|
||||
* These forward declarations are for the semi-private functions in
|
||||
* the get*.c files. Each of these funcs implements the real get*
|
||||
|
@ -17,6 +17,7 @@
|
||||
|
||||
#ifndef LIST_H
|
||||
#define LIST_H 1
|
||||
#include <isc/assertions.h>
|
||||
|
||||
#define LIST(type) struct { type *head, *tail; }
|
||||
#define INIT_LIST(list) \
|
||||
@ -28,7 +29,7 @@
|
||||
(elt)->link.prev = (void *)(-1); \
|
||||
(elt)->link.next = (void *)(-1); \
|
||||
} while (0)
|
||||
#define LINKED(elt, link) ((elt)->link.prev != (void *)(-1))
|
||||
#define LINKED(elt, link) ((void *)((elt)->link.prev) != (void *)(-1))
|
||||
|
||||
#define HEAD(list) ((list).head)
|
||||
#define TAIL(list) ((list).tail)
|
||||
@ -36,6 +37,7 @@
|
||||
|
||||
#define PREPEND(list, elt, link) \
|
||||
do { \
|
||||
INSIST(!LINKED(elt, link));\
|
||||
if ((list).head != NULL) \
|
||||
(list).head->link.prev = (elt); \
|
||||
else \
|
||||
@ -47,6 +49,7 @@
|
||||
|
||||
#define APPEND(list, elt, link) \
|
||||
do { \
|
||||
INSIST(!LINKED(elt, link));\
|
||||
if ((list).tail != NULL) \
|
||||
(list).tail->link.next = (elt); \
|
||||
else \
|
||||
@ -58,6 +61,7 @@
|
||||
|
||||
#define UNLINK(list, elt, link) \
|
||||
do { \
|
||||
INSIST(LINKED(elt, link));\
|
||||
if ((elt)->link.next != NULL) \
|
||||
(elt)->link.next->link.prev = (elt)->link.prev; \
|
||||
else \
|
||||
@ -74,6 +78,7 @@
|
||||
|
||||
#define INSERT_BEFORE(list, before, elt, link) \
|
||||
do { \
|
||||
INSIST(!LINKED(elt, link));\
|
||||
if ((before)->link.prev == NULL) \
|
||||
PREPEND(list, elt, link); \
|
||||
else { \
|
||||
@ -86,6 +91,7 @@
|
||||
|
||||
#define INSERT_AFTER(list, after, elt, link) \
|
||||
do { \
|
||||
INSIST(!LINKED(elt, link));\
|
||||
if ((after)->link.next == NULL) \
|
||||
APPEND(list, elt, link); \
|
||||
else { \
|
||||
|
@ -16,14 +16,16 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* $Id: misc.h,v 8.2 1999/01/08 19:23:10 vixie Exp $
|
||||
* $Id: misc.h,v 8.4 2000/12/23 08:14:52 vixie Exp $
|
||||
*/
|
||||
|
||||
#ifndef _ISC_MISC_H
|
||||
#define _ISC_MISC_H
|
||||
|
||||
#define bitncmp __bitncmp
|
||||
/*#define isc_movefile __isc_movefile */
|
||||
|
||||
extern int bitncmp(const void *l, const void *r, int n);
|
||||
extern int isc_movefile(const char *, const char *);
|
||||
|
||||
#endif /*_ISC_MISC_H*/
|
||||
|
@ -50,7 +50,7 @@
|
||||
|
||||
/*
|
||||
* @(#)resolv.h 8.1 (Berkeley) 6/2/93
|
||||
* $Id: resolv.h,v 8.31 2000/03/30 20:16:50 vixie Exp $
|
||||
* $Id: resolv.h,v 8.32 2000/12/23 08:14:49 vixie Exp $
|
||||
*/
|
||||
|
||||
#ifndef _RESOLV_H_
|
||||
@ -328,7 +328,7 @@ extern const struct res_sym __p_rcode_syms[];
|
||||
#define res_nclose __res_nclose
|
||||
#define res_ninit __res_ninit
|
||||
#define res_nmkquery __res_nmkquery
|
||||
#define res_npquery __res_npquery
|
||||
#define res_pquery __res_pquery
|
||||
#define res_nquery __res_nquery
|
||||
#define res_nquerydomain __res_nquerydomain
|
||||
#define res_nsearch __res_nsearch
|
||||
@ -383,7 +383,7 @@ int res_ninit __P((res_state));
|
||||
int res_nisourserver __P((const res_state,
|
||||
const struct sockaddr_in *));
|
||||
void fp_resstat __P((const res_state, FILE *));
|
||||
void res_npquery __P((const res_state, const u_char *, int, 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,
|
||||
|
@ -13,14 +13,14 @@
|
||||
# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
# SOFTWARE.
|
||||
|
||||
# $Id: Makefile,v 8.23 2000/07/11 06:41:36 vixie Exp $
|
||||
# $Id: Makefile,v 8.25 2000/12/23 08:02:56 vixie Exp $
|
||||
|
||||
SUBDIRS = resolv irs isc bsd inet nameser dst cylink dnssafe
|
||||
|
||||
# these are only appropriate for BSD 4.4 or derivatives, and are used in
|
||||
# these are only appropriate for FreeBSD or similar, and are used in
|
||||
# development. normal builds will be done in the top level directory and
|
||||
# this Makefile will be invoked with a lot of overrides for the following:
|
||||
SYSTYPE= bsdos
|
||||
SYSTYPE= freebsd
|
||||
SHELL= /bin/sh
|
||||
O=o
|
||||
A=a
|
||||
@ -62,7 +62,7 @@ LIBRTS = ${TOP}/lib/libbindr.ts
|
||||
|
||||
all depend clean install distclean::
|
||||
@for x in ${SUBDIRS}; do \
|
||||
(cd $$x; pwd; ${MAKE} ${MARGS} $@); \
|
||||
(cd $$x; pwd; ${MAKE} ${MARGS} $@) || exit 1; \
|
||||
done
|
||||
|
||||
all:: ${LIBTS} ${LIBRTS}
|
||||
@ -103,7 +103,7 @@ links:: FRC
|
||||
( mkdir $$x; cd $$x; pwd; ln -s ../SRC/$$x SRC; \
|
||||
cp SRC/Makefile Makefile; chmod +w Makefile; \
|
||||
${MAKE} ${MARGS} links; \
|
||||
); \
|
||||
) || exit 1; \
|
||||
done
|
||||
|
||||
FRC:
|
||||
|
@ -13,12 +13,12 @@
|
||||
# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
# SOFTWARE.
|
||||
|
||||
# $Id: Makefile,v 1.17 2000/07/11 06:41:39 vixie Exp $
|
||||
# $Id: Makefile,v 1.18 2000/12/23 08:02:58 vixie Exp $
|
||||
|
||||
# these are only appropriate for BSD 4.4 or derivatives, and are used in
|
||||
# development. normal builds will be done in the top level directory and
|
||||
# this Makefile will be invoked with a lot of overrides for the following:
|
||||
SYSTYPE= bsdos
|
||||
SYSTYPE= freebsd
|
||||
DESTDIR =
|
||||
DESTLIB = /usr/local/lib
|
||||
O=o
|
||||
@ -26,7 +26,7 @@ A=a
|
||||
CC= cc
|
||||
LD= ld
|
||||
SHELL= /bin/sh
|
||||
CDEBUG= -g
|
||||
CDEBUG= -g -Wall
|
||||
TOP= ../..
|
||||
INCL = ${TOP}/include
|
||||
PORTINCL = ${TOP}/port/${SYSTYPE}/include
|
||||
|
@ -1,5 +1,5 @@
|
||||
#if defined(BSAFE) || defined(DNSSAFE)
|
||||
static const char rcsid[] = "$Header: /proj/cvs/isc/bind/src/lib/dst/bsafe_link.c,v 1.11 1999/10/13 16:39:22 vixie Exp $";
|
||||
static const char rcsid[] = "$Header: /proj/cvs/isc/bind8/src/lib/dst/bsafe_link.c,v 1.11 1999/10/13 16:39:22 vixie Exp $";
|
||||
|
||||
/*
|
||||
* Portions Copyright (c) 1995-1998 by Trusted Information Systems, Inc.
|
||||
|
@ -1,5 +1,5 @@
|
||||
#ifdef CYLINK_DSS
|
||||
static const char rcsid[] = "$Header: /proj/cvs/isc/bind/src/lib/dst/cylink_link.c,v 1.7 1999/10/13 16:39:22 vixie Exp $";
|
||||
static const char rcsid[] = "$Header: /proj/cvs/isc/bind8/src/lib/dst/cylink_link.c,v 1.7 1999/10/13 16:39:22 vixie Exp $";
|
||||
|
||||
/*
|
||||
* Portions Copyright (c) 1995-1998 by Trusted Information Systems, Inc.
|
||||
|
@ -1,5 +1,5 @@
|
||||
#ifndef LINT
|
||||
static const char rcsid[] = "$Header: /proj/cvs/isc/bind/src/lib/dst/dst_api.c,v 1.14 2000/02/28 07:51:50 vixie Exp $";
|
||||
static const char rcsid[] = "$Header: /proj/cvs/isc/bind8/src/lib/dst/dst_api.c,v 1.16 2000/11/13 04:09:23 vixie Exp $";
|
||||
#endif
|
||||
|
||||
/*
|
||||
@ -771,8 +771,7 @@ dst_buffer_to_key(const char *key_name, /* name of the key */
|
||||
|
||||
if (dkey == NULL)
|
||||
return (NULL);
|
||||
if (dkey->dk_func != NULL &&
|
||||
dkey->dk_func->from_dns_key != NULL) {
|
||||
if (dkey->dk_func != NULL && dkey->dk_func->from_dns_key != NULL) {
|
||||
if (dkey->dk_func->from_dns_key(dkey, key_buf, key_len) < 0) {
|
||||
EREPORT(("dst_buffer_to_key(): dst_buffer_to_hmac failed\n"));
|
||||
return (dst_free_key(dkey));
|
||||
@ -787,9 +786,9 @@ dst_key_to_buffer(DST_KEY *key, u_char *out_buff, int buf_len)
|
||||
{
|
||||
int len;
|
||||
/* this function will extrac the secret of HMAC into a buffer */
|
||||
if(key == NULL)
|
||||
if (key == NULL)
|
||||
return (0);
|
||||
if(key->dk_func != NULL && key->dk_func != NULL) {
|
||||
if (key->dk_func != NULL && key->dk_func->to_dns_key != NULL) {
|
||||
len = key->dk_func->to_dns_key(key, out_buff, buf_len);
|
||||
if (len < 0)
|
||||
return (0);
|
||||
|
@ -1,5 +1,5 @@
|
||||
#ifdef EAY_DSS
|
||||
static const char rcsid[] = "$Header: /proj/cvs/isc/bind/src/lib/dst/eay_dss_link.c,v 1.4 1999/10/13 16:39:23 vixie Exp $";
|
||||
static const char rcsid[] = "$Header: /proj/cvs/isc/bind8/src/lib/dst/eay_dss_link.c,v 1.4 1999/10/13 16:39:23 vixie Exp $";
|
||||
|
||||
/*
|
||||
* Portions Copyright (c) 1995-1998 by Trusted Information Systems, Inc.
|
||||
|
@ -1,6 +1,6 @@
|
||||
#ifdef HMAC_MD5
|
||||
#ifndef LINT
|
||||
static const char rcsid[] = "$Header: /proj/cvs/isc/bind/src/lib/dst/hmac_link.c,v 1.8 1999/10/15 21:30:07 vixie Exp $";
|
||||
static const char rcsid[] = "$Header: /proj/cvs/isc/bind8/src/lib/dst/hmac_link.c,v 1.8 1999/10/15 21:30:07 vixie Exp $";
|
||||
#endif
|
||||
/*
|
||||
* Portions Copyright (c) 1995-1998 by Trusted Information Systems, Inc.
|
||||
|
@ -1,5 +1,5 @@
|
||||
#ifndef LINT
|
||||
static const char rcsid[] = "$Header: /proj/cvs/isc/bind/src/lib/dst/prandom.c,v 1.9 2000/07/17 07:36:53 vixie Exp $";
|
||||
static const char rcsid[] = "$Header: /proj/cvs/isc/bind8/src/lib/dst/prandom.c,v 1.9 2000/07/17 07:36:53 vixie Exp $";
|
||||
#endif
|
||||
/*
|
||||
* Portions Copyright (c) 1995-1998 by Trusted Information Systems, Inc.
|
||||
|
@ -1,5 +1,5 @@
|
||||
#ifdef RSAREF
|
||||
static const char rcsid[] = "$Header: /proj/cvs/isc/bind/src/lib/dst/rsaref_link.c,v 1.7 2000/07/17 07:36:53 vixie Exp $";
|
||||
static const char rcsid[] = "$Header: /proj/cvs/isc/bind8/src/lib/dst/rsaref_link.c,v 1.7 2000/07/17 07:36:53 vixie Exp $";
|
||||
|
||||
/*
|
||||
* Portions Copyright (c) 1995-1998 by Trusted Information Systems, Inc.
|
||||
|
@ -1,4 +1,4 @@
|
||||
static const char rcsid[] = "$Header: /proj/cvs/isc/bind/src/lib/dst/support.c,v 1.8 1999/10/13 16:39:24 vixie Exp $";
|
||||
static const char rcsid[] = "$Header: /proj/cvs/isc/bind8/src/lib/dst/support.c,v 1.8 1999/10/13 16:39:24 vixie Exp $";
|
||||
|
||||
|
||||
/*
|
||||
|
@ -13,12 +13,12 @@
|
||||
# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
# SOFTWARE.
|
||||
|
||||
# $Id: Makefile,v 8.20 2000/07/11 06:41:40 vixie Exp $
|
||||
# $Id: Makefile,v 8.21 2000/12/23 08:02:59 vixie Exp $
|
||||
|
||||
# these are only appropriate for BSD 4.4 or derivatives, and are used in
|
||||
# development. normal builds will be done in the top level directory and
|
||||
# this Makefile will be invoked with a lot of overrides for the following:
|
||||
SYSTYPE= bsdos
|
||||
SYSTYPE= freebsd
|
||||
DESTDIR =
|
||||
DESTLIB = /usr/local/lib
|
||||
O=o
|
||||
@ -26,7 +26,7 @@ A=a
|
||||
CC= cc
|
||||
LD= ld
|
||||
SHELL= /bin/sh
|
||||
CDEBUG= -g
|
||||
CDEBUG= -g -Wall
|
||||
TOP= ../..
|
||||
INCL = ${TOP}/include
|
||||
PORTINCL = ${TOP}/port/${SYSTYPE}/include
|
||||
|
@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char rcsid[] = "$Id: inet_cidr_pton.c,v 8.3 1999/01/08 19:23:41 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: inet_cidr_pton.c,v 8.4 2000/12/23 08:14:53 vixie Exp $";
|
||||
#endif
|
||||
|
||||
#include "port_before.h"
|
||||
@ -122,11 +122,12 @@ inet_cidr_pton_ipv4(const char *src, u_char *dst, int *pbits) {
|
||||
goto enoent;
|
||||
|
||||
/* Prefix length can default to /32 only if all four octets spec'd. */
|
||||
if (bits == -1)
|
||||
if (bits == -1) {
|
||||
if (dst - odst == 4)
|
||||
bits = 32;
|
||||
else
|
||||
goto enoent;
|
||||
}
|
||||
|
||||
/* If nothing was written to the destination, we found no address. */
|
||||
if (dst == odst)
|
||||
|
@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char rcsid[] = "$Id: inet_net_ntop.c,v 1.6 1999/01/08 19:23:42 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: inet_net_ntop.c,v 1.7 2001/01/25 19:55:59 vixie Exp $";
|
||||
#endif
|
||||
|
||||
#include "port_before.h"
|
||||
@ -108,7 +108,7 @@ inet_net_ntop_ipv4(src, bits, dst, size)
|
||||
|
||||
/* Format whole octets. */
|
||||
for (b = bits / 8; b > 0; b--) {
|
||||
if (size < sizeof "255.")
|
||||
if (size <= sizeof "255.")
|
||||
goto emsgsize;
|
||||
t = dst;
|
||||
dst += SPRINTF((dst, "%u", *src++));
|
||||
@ -122,7 +122,7 @@ inet_net_ntop_ipv4(src, bits, dst, size)
|
||||
/* Format partial octet. */
|
||||
b = bits % 8;
|
||||
if (b > 0) {
|
||||
if (size < sizeof ".255")
|
||||
if (size <= sizeof ".255")
|
||||
goto emsgsize;
|
||||
t = dst;
|
||||
if (dst != odst)
|
||||
@ -133,7 +133,7 @@ inet_net_ntop_ipv4(src, bits, dst, size)
|
||||
}
|
||||
|
||||
/* Format CIDR /width. */
|
||||
if (size < sizeof "/32")
|
||||
if (size <= sizeof "/32")
|
||||
goto emsgsize;
|
||||
dst += SPRINTF((dst, "/%u", bits));
|
||||
return (odst);
|
||||
|
@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char rcsid[] = "$Id: inet_ntop.c,v 1.8 1999/10/13 16:39:28 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: inet_ntop.c,v 1.10 2001/01/25 20:21:10 vixie Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include "port_before.h"
|
||||
@ -96,7 +96,7 @@ inet_ntop4(src, dst, size)
|
||||
static const char fmt[] = "%u.%u.%u.%u";
|
||||
char tmp[sizeof "255.255.255.255"];
|
||||
|
||||
if (SPRINTF((tmp, fmt, src[0], src[1], src[2], src[3])) > size) {
|
||||
if (SPRINTF((tmp, fmt, src[0], src[1], src[2], src[3])) >= size) {
|
||||
errno = ENOSPC;
|
||||
return (NULL);
|
||||
}
|
||||
|
@ -13,12 +13,12 @@
|
||||
# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
# SOFTWARE.
|
||||
|
||||
# $Id: Makefile,v 8.20 2000/07/11 06:41:40 vixie Exp $
|
||||
# $Id: Makefile,v 8.21 2000/12/23 08:02:59 vixie Exp $
|
||||
|
||||
# these are only appropriate for BSD 4.4 or derivatives, and are used in
|
||||
# development. normal builds will be done in the top level directory and
|
||||
# this Makefile will be invoked with a lot of overrides for the following:
|
||||
SYSTYPE= bsdos
|
||||
SYSTYPE= freebsd
|
||||
DESTDIR =
|
||||
DESTLIB = /usr/local/lib
|
||||
O=o
|
||||
@ -26,7 +26,7 @@ A=a
|
||||
CC= cc
|
||||
LD= ld
|
||||
SHELL= /bin/sh
|
||||
CDEBUG= -g
|
||||
CDEBUG= -g -Wall
|
||||
TOP= ../..
|
||||
INCL = ${TOP}/include
|
||||
PORTINCL = ${TOP}/port/${SYSTYPE}/include
|
||||
|
@ -165,14 +165,14 @@ getnameinfo(sa, salen, host, hostlen, serv, servlen, flags)
|
||||
if (serv == NULL || servlen == 0) {
|
||||
/* what we should do? */
|
||||
} else if (flags & NI_NUMERICSERV) {
|
||||
snprintf(numserv, strlen(numserv), "%d", ntohs(port));
|
||||
snprintf(numserv, sizeof(numserv), "%d", ntohs(port));
|
||||
if (strlen(numserv) > servlen)
|
||||
return ENI_MEMORY;
|
||||
strcpy(serv, numserv);
|
||||
} else {
|
||||
sp = getservbyport(port, (flags & NI_DGRAM) ? "udp" : "tcp");
|
||||
if (sp) {
|
||||
if (strlen(sp->s_name) > servlen)
|
||||
if (strlen(sp->s_name) + 1 > servlen)
|
||||
return ENI_MEMORY;
|
||||
strcpy(serv, sp->s_name);
|
||||
} else
|
||||
@ -196,7 +196,7 @@ getnameinfo(sa, salen, host, hostlen, serv, servlen, flags)
|
||||
if (inet_ntop(afd->a_af, addr, numaddr, sizeof(numaddr))
|
||||
== NULL)
|
||||
return ENI_SYSTEM;
|
||||
if (strlen(numaddr) > hostlen)
|
||||
if (strlen(numaddr) + 1 > hostlen)
|
||||
return ENI_MEMORY;
|
||||
strcpy(host, numaddr);
|
||||
} else {
|
||||
@ -207,7 +207,7 @@ getnameinfo(sa, salen, host, hostlen, serv, servlen, flags)
|
||||
p = strchr(hp->h_name, '.');
|
||||
if (p) *p = '\0';
|
||||
}
|
||||
if (strlen(hp->h_name) > hostlen)
|
||||
if (strlen(hp->h_name) + 1 > hostlen)
|
||||
return ENI_MEMORY;
|
||||
strcpy(host, hp->h_name);
|
||||
} else {
|
||||
@ -216,7 +216,7 @@ getnameinfo(sa, salen, host, hostlen, serv, servlen, flags)
|
||||
if (inet_ntop(afd->a_af, addr, numaddr, sizeof(numaddr))
|
||||
== NULL)
|
||||
return ENI_NOHOSTNAME;
|
||||
if (strlen(numaddr) > hostlen)
|
||||
if (strlen(numaddr) + 1 > hostlen)
|
||||
return ENI_MEMORY;
|
||||
strcpy(host, numaddr);
|
||||
}
|
||||
|
@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
#if !defined(LINT) && !defined(CODECENTER)
|
||||
static const char rcsid[] = "$Id: getnetent.c,v 1.17 1999/10/13 16:39:30 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: getnetent.c,v 1.18 2000/12/23 08:14:53 vixie Exp $";
|
||||
#endif
|
||||
|
||||
/* Imports */
|
||||
@ -175,14 +175,16 @@ getnetbyaddr_p(unsigned long net, int type, struct net_data *net_data) {
|
||||
addr[3] = (0x000000FF & net);
|
||||
|
||||
/* reduce bits to as close to natural number as possible */
|
||||
if ((bits == 32) && (addr[0] < 224) && (addr[3] == 0))
|
||||
if ((addr[0] < 192) && (addr[2] == 0))
|
||||
if ((bits == 32) && (addr[0] < 224) && (addr[3] == 0)) {
|
||||
if ((addr[0] < 192) && (addr[2] == 0)) {
|
||||
if ((addr[0] < 128) && (addr[1] == 0))
|
||||
bits = 8;
|
||||
else
|
||||
bits = 16;
|
||||
else
|
||||
} else {
|
||||
bits = 24;
|
||||
}
|
||||
}
|
||||
|
||||
net_data->nww_last = (*nw->byaddr)(nw, addr, bits, AF_INET);
|
||||
net_data->nw_last = nw_to_net(net_data->nww_last, net_data);
|
||||
|
@ -49,7 +49,7 @@
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char rcsid[] = "$Id: irpmarshall.c,v 8.5 1999/10/13 17:11:19 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: irpmarshall.c,v 8.6 2000/11/13 05:08:08 vixie Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#if 0
|
||||
@ -90,7 +90,10 @@ Double check memory allocations on unmarhsalling
|
||||
#include "port_after.h"
|
||||
|
||||
|
||||
#ifndef HAVE_STRNDUP
|
||||
static char *strndup(const char *str, size_t len);
|
||||
#endif
|
||||
|
||||
static char **splitarray(const char *buffer, const char *buffend, char delim);
|
||||
static int joinarray(char * const * argv, char *buffer, char delim);
|
||||
static char *getfield(char **res, size_t reslen, char **buffer, char delim);
|
||||
@ -1862,6 +1865,7 @@ getfield(char **res, size_t reslen, char **ptr, char delim) {
|
||||
|
||||
|
||||
|
||||
#ifndef HAVE_STRNDUP
|
||||
/*
|
||||
* static char * strndup(const char *str, size_t len)
|
||||
*
|
||||
@ -1886,6 +1890,7 @@ strndup(const char *str, size_t len) {
|
||||
p[len] = 0x0;
|
||||
return (p);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if WANT_MAIN
|
||||
|
||||
|
@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
#if !defined(LINT) && !defined(CODECENTER)
|
||||
static const char rcsid[] = "$Id: irs_data.c,v 1.14 1999/10/13 16:39:31 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: irs_data.c,v 1.15 2000/12/23 08:14:54 vixie Exp $";
|
||||
#endif
|
||||
|
||||
#include "port_before.h"
|
||||
@ -55,7 +55,7 @@ static struct net_data *net_data;
|
||||
#endif
|
||||
|
||||
void
|
||||
irs_destroy() {
|
||||
irs_destroy(void) {
|
||||
#ifndef DO_PTHREADS
|
||||
if (net_data != NULL)
|
||||
net_data_destroy(net_data);
|
||||
@ -67,7 +67,6 @@ void
|
||||
net_data_destroy(void *p) {
|
||||
struct net_data *net_data = p;
|
||||
|
||||
|
||||
res_nclose(net_data->res);
|
||||
if (net_data->gr != NULL) {
|
||||
(*net_data->gr->close)(net_data->gr);
|
||||
|
@ -13,12 +13,12 @@
|
||||
# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
# SOFTWARE.
|
||||
|
||||
# $Id: Makefile,v 8.26 2000/07/11 06:41:41 vixie Exp $
|
||||
# $Id: Makefile,v 8.28 2000/12/23 08:03:00 vixie Exp $
|
||||
|
||||
# these are only appropriate for BSD 4.4 or derivatives, and are used in
|
||||
# development. normal builds will be done in the top level directory and
|
||||
# this Makefile will be invoked with a lot of overrides for the following:
|
||||
SYSTYPE= bsdos
|
||||
SYSTYPE= freebsd
|
||||
DESTDIR =
|
||||
DESTLIB = /usr/local/lib
|
||||
O=o
|
||||
@ -26,7 +26,7 @@ A=a
|
||||
CC= cc
|
||||
LD= ld
|
||||
SHELL= /bin/sh
|
||||
CDEBUG= -g
|
||||
CDEBUG= -g -Wall
|
||||
TOP= ../..
|
||||
INCL = ${TOP}/include
|
||||
PORTINCL = ${TOP}/port/${SYSTYPE}/include
|
||||
@ -47,13 +47,15 @@ SRCS= tree.c base64.c bitncmp.c assertions.c \
|
||||
memcluster.c logging.c heap.c \
|
||||
ctl_p.c ctl_srvr.c ctl_clnt.c \
|
||||
eventlib.c ev_connects.c ev_files.c \
|
||||
ev_timers.c ev_streams.c ev_waits.c
|
||||
ev_timers.c ev_streams.c ev_waits.c \
|
||||
movefile.c
|
||||
|
||||
OBJS= tree.${O} base64.${O} bitncmp.${O} assertions.${O} \
|
||||
memcluster.${O} logging.${O} heap.${O} \
|
||||
ctl_p.${O} ctl_srvr.${O} ctl_clnt.${O} \
|
||||
eventlib.${O} ev_connects.${O} ev_files.${O} \
|
||||
ev_timers.${O} ev_streams.${O} ev_waits.${O}
|
||||
ev_timers.${O} ev_streams.${O} ev_waits.${O} \
|
||||
movefile.${O}
|
||||
|
||||
all: ${LIBBIND}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static const char rcsid[] = "$Id: ctl_clnt.c,v 8.14 1999/10/13 16:39:33 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: ctl_clnt.c,v 8.15 2000/11/14 01:10:36 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -261,11 +261,11 @@ new_tran(struct ctl_cctx *ctx, ctl_clntdone donefunc, void *uap, int w) {
|
||||
buffer_init(new->outbuf);
|
||||
new->donefunc = donefunc;
|
||||
new->uap = uap;
|
||||
INIT_LINK(new, link);
|
||||
INIT_LINK(new, wlink);
|
||||
APPEND(ctx->tran, new, link);
|
||||
if (w)
|
||||
APPEND(ctx->wtran, new, wlink);
|
||||
else
|
||||
INIT_LINK(new, wlink);
|
||||
return (new);
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static const char rcsid[] = "$Id: ctl_srvr.c,v 8.23 2000/02/04 08:28:33 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: ctl_srvr.c,v 8.24 2000/11/14 01:10:37 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -422,6 +422,7 @@ ctl_accept(evContext lev, void *uap, int fd,
|
||||
strerror(errno));
|
||||
}
|
||||
ctx->cur_sess++;
|
||||
INIT_LINK(sess, link);
|
||||
APPEND(ctx->sess, sess, link);
|
||||
sess->ctx = ctx;
|
||||
sess->sock = fd;
|
||||
|
@ -20,7 +20,7 @@
|
||||
*/
|
||||
|
||||
#if !defined(LINT) && !defined(CODECENTER)
|
||||
static const char rcsid[] = "$Id: ev_connects.c,v 8.26 2000/02/04 08:28:34 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: ev_connects.c,v 8.27 2000/11/14 01:10:37 vixie Exp $";
|
||||
#endif
|
||||
|
||||
/* Import. */
|
||||
@ -256,6 +256,7 @@ evTryAccept(evContext opaqueCtx, evConnID id, int *sys_errno) {
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
INIT_LINK(new, link);
|
||||
APPEND(ctx->accepts, new, link);
|
||||
*sys_errno = new->ioErrno;
|
||||
return (0);
|
||||
|
@ -1,11 +1,11 @@
|
||||
.\" $Id: heap.mdoc,v 8.5 1999/01/08 19:25:38 vixie Exp $
|
||||
.\" $Id: heap.mdoc,v 8.6 2000/11/15 02:03:52 marka Exp $
|
||||
.\"
|
||||
.\"Copyright (c) 1997,1999 by Internet Software Consortium.
|
||||
*
|
||||
.\"
|
||||
.\"Permission to use, copy, modify, and distribute this software for any
|
||||
.\"purpose with or without fee is hereby granted, provided that the above
|
||||
.\"copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
.\"
|
||||
.\"THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
|
||||
.\"ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
|
||||
.\"OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
|
||||
@ -18,9 +18,8 @@
|
||||
.Dd Jan 1, 1997
|
||||
.\"Os OPERATING_SYSTEM [version/release]
|
||||
.Os BSD 4
|
||||
.\" TODO--get correct section # below!!
|
||||
.Dt HEAP @SYSCALL_EXT@
|
||||
.Sh DESCRIPTION
|
||||
.Sh NAME
|
||||
.Nm heap_new ,
|
||||
.Nm heap_free ,
|
||||
.Nm heap_insert ,
|
||||
|
@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
#if !defined(LINT) && !defined(CODECENTER)
|
||||
static const char rcsid[] = "$Id: logging.c,v 8.26 2000/04/23 02:19:02 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: logging.c,v 8.28 2000/12/23 08:14:54 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include "port_before.h"
|
||||
@ -39,6 +39,7 @@ static const char rcsid[] = "$Id: logging.c,v 8.26 2000/04/23 02:19:02 vixie Exp
|
||||
#include <isc/assertions.h>
|
||||
#include <isc/logging.h>
|
||||
#include <isc/memcluster.h>
|
||||
#include <isc/misc.h>
|
||||
|
||||
#include "port_after.h"
|
||||
|
||||
@ -78,10 +79,10 @@ version_rename(log_channel chan) {
|
||||
for (ver--; ver > 0; ver--) {
|
||||
sprintf(old_name, "%s.%d", chan->out.file.name, ver-1);
|
||||
sprintf(new_name, "%s.%d", chan->out.file.name, ver);
|
||||
(void)rename(old_name, new_name);
|
||||
(void)isc_movefile(old_name, new_name);
|
||||
}
|
||||
sprintf(new_name, "%s.0", chan->out.file.name);
|
||||
(void)rename(chan->out.file.name, new_name);
|
||||
(void)isc_movefile(chan->out.file.name, new_name);
|
||||
}
|
||||
|
||||
FILE *
|
||||
|
35
contrib/bind/lib/isc/movefile.c
Normal file
35
contrib/bind/lib/isc/movefile.c
Normal file
@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright (c) 2000 by Internet Software Consortium, Inc.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
|
||||
* ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
|
||||
* CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
#include <port_before.h>
|
||||
#include <stdio.h>
|
||||
#include <isc/misc.h>
|
||||
#include <port_after.h>
|
||||
#ifndef HAVE_MOVEFILE
|
||||
/*
|
||||
* rename() is lame (can't overwrite an existing file) on some systems.
|
||||
* use movefile() instead, and let lame OS ports do what they need to.
|
||||
*/
|
||||
|
||||
int
|
||||
isc_movefile(const char *oldname, const char *newname) {
|
||||
return (rename(oldname, newname));
|
||||
}
|
||||
#else
|
||||
static int os_port_has_isc_movefile = 1;
|
||||
#endif
|
@ -15,12 +15,12 @@
|
||||
# SOFTWARE.
|
||||
#
|
||||
|
||||
# $Id: Makefile,v 8.20 2000/07/11 06:41:42 vixie Exp $
|
||||
# $Id: Makefile,v 8.21 2000/12/23 08:03:02 vixie Exp $
|
||||
|
||||
# these are only appropriate for BSD 4.4 or derivatives, and are used in
|
||||
# development. normal builds will be done in the top level directory and
|
||||
# this Makefile will be invoked with a lot of overrides for the following:
|
||||
SYSTYPE= bsdos
|
||||
SYSTYPE= freebsd
|
||||
DESTDIR =
|
||||
DESTLIB = /usr/local/lib
|
||||
O=o
|
||||
@ -28,7 +28,7 @@ A=a
|
||||
CC= cc
|
||||
LD= ld
|
||||
SHELL= /bin/sh
|
||||
CDEBUG= -g
|
||||
CDEBUG= -g -Wall
|
||||
TOP= ../..
|
||||
INCL = ${TOP}/include
|
||||
PORTINCL = ${TOP}/port/${SYSTYPE}/include
|
||||
|
@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] = "$Id: ns_parse.c,v 8.13 1999/10/13 16:39:35 vixie Exp $";
|
||||
static const char rcsid[] = "$Id: ns_parse.c,v 8.15 2000/12/23 08:14:55 vixie Exp $";
|
||||
#endif
|
||||
|
||||
/* Import. */
|
||||
@ -64,6 +64,10 @@ struct _ns_flagdata _ns_flagdata[16] = {
|
||||
{ 0x0000, 0 }, /* expansion (6/6). */
|
||||
};
|
||||
|
||||
int ns_msg_getflag(ns_msg handle, int flag) {
|
||||
return(((handle)._flags & _ns_flagdata[flag].mask) >> _ns_flagdata[flag].shift);
|
||||
}
|
||||
|
||||
int
|
||||
ns_skiprr(const u_char *ptr, const u_char *eom, ns_sect section, int count) {
|
||||
const u_char *optr = ptr;
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user